LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1655|回复: 11

struct swap_info_struct 结构描述的是?

[复制链接]
发表于 2003-7-24 02:19:08 | 显示全部楼层 |阅读模式
看《情景分析》一书,书上说描述的是用于页面交换的文件或设备,那么就是说描述的是
诸如交换分区或交换文件了,也就是说是/dev/hda?之类的交换设备了,比如我的系统中
只有一个交换分区/dev/hda2,那么就是只有一个swap_info_struct数据结构了。

但是还有一个数组swap_info,它是这样定义的:
struct swap_info_struct swap_info[MAX_SWAPFILE];
因为内核支持多个交换设备,所以用这个swap_info来表示系统中的所有交换设备,如果
那我的系统来看的话,就实际上只有一个非空。

内核中又有一个结构:
typedef struct{
        unsigned long val;
}swap_entry_t;
这个是相当于pte_t的结构,只不过它是联系盘上页面和虚存页面的,其bit1-bit8是type
域,这是标识该页面属于哪个交换设备的,其实swap_entry_t 和 pte_t 的区别很小,如
果bit0是1的话,表示该页面在内存中,否则不在内存,此时相应的bit1-bit7就是作为
该页面所在的交换设备的下标。但是从代码中可以看到其实这7位是原封不动的从pte_t
中拿过来的:
#define pte_to_swp_entry(pte) ((swap_entry_t) {(pte).pte_low})
#define swp_entry_to_pte(x) ((pte_t) {(x).val})
所以作为区分交换设备的这7位的数值是比较多的,但是我只有一个交换分区。

所以上面的理解一定有误,但不知错在哪里?希望大家帮助,谢谢
 楼主| 发表于 2003-7-24 20:41:59 | 显示全部楼层
才发现这个版连斑竹都没有,可惜了
 楼主| 发表于 2003-7-25 23:12:51 | 显示全部楼层
顶一下,有人知道吗?
发表于 2003-7-26 12:41:54 | 显示全部楼层
我认为你的理解有误.所谓你的交换分区,是物理基础,它不是一个
swap_info_struct结构.swap_info_struct是专用于作交换的结构,区别于你所说的物理基础.
发表于 2003-7-26 12:45:28 | 显示全部楼层
你是否记得NUMA,交换储存就是其中一种.你结合前的 zonelist_t;
看一下.
 楼主| 发表于 2003-7-26 19:15:11 | 显示全部楼层
最初由 topgun_boy 发表
我认为你的理解有误.所谓你的交换分区,是物理基础,它不是一个
swap_info_struct结构.swap_info_struct是专用于作交换的结构,区别于你所说的物理基础.

我的理解肯定是错误的,兄台不用跟我客气,呵呵
只是2.4.0中定义了MAX_SWAPFILES 的值为8,也就是说只有最多9个交换文件(设备也看做文件),但是在include/asm-i386/pgtable.h中有:
#define SWP_TYPE(x) ((x).val >>1) & 0x3f)
表明把页表项的1-6位拿出来就是表示交换(结构)的下标,显然会有较多的值,而不会是最多9个,我就是不明白这一点,还请指教
谢谢你
发表于 2003-7-26 19:22:14 | 显示全部楼层
汗……
自愧ing……
这么长时间就知道玩,从不潜下心来好好研究……
发表于 2003-7-27 13:21:51 | 显示全部楼层
在P69,它不是说了吗?
它说这个位段的命名很容易使人误解.明明是指页面交换设备或文件的序号(一共是127,但实际上则视系统的配置而定,远小于127).从这时看出来这些数值是由系统而定的,不是作者在代码规定的.故在这没有细说.
  后来它又说,type象pte_t的低十二位作为标志位.所以写书的人认为这七位作为标志位.
 楼主| 发表于 2003-7-27 17:02:54 | 显示全部楼层
sigh..
我还是不明白,可能脑子陷入了混乱,谢谢你的帮助,我继续看,呵呵
发表于 2003-7-28 11:07:16 | 显示全部楼层
换句话说,写书的人说type是由系统定的.它的各位标志位,而不是你所说的来作序号.所谓说作标志位是说它的各个BIT有作标志的作用.
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表