日期:2014-05-16 浏览次数:20895 次
By cszhao1980
Swap in/out指的是进程在物理内存(core空间)和磁盘交换文件间的双向移动过程,进程在active状态时,
其segment必然被swap in内存空间(core空间),而一旦处于非活动状态就有可能被swap out到磁盘交换
文件中。换进换出的过程必然涉及到磁盘io——这可看作是比较低层的操作,因此,这部分内容可以分
为两部分:高层的模型和低层的实际io。
Unix使用“swapmap”这个高层模型来记录swap区域,swapmap类似coremap,都是map结构:
2515: struct map
2516: {
2517: char *m_size;
2518: char *m_addr;
2519: };
区别是:
(1) swap map的m_size的单位是“磁盘块”,即512个字节;
(2) swap map的m_addr为“磁盘块号”——而不是内存block号。
使用“swapmap”来管理swap空间有一个巨大的好处——同“coremap”一样,对空间资源
的管理可以通过高层函数malloc()和free()来实现。
整个swap区域由main函数初始化:
1583: mfree(swapmap, nswap, swplo);
4697: int swplo 4000; /* cannot be zero */
4698: int nswap 872;
因此,swap区域即定义为自磁盘第4000块开始,连续872个块。
在进行换进换出时,必须包括进程的“私有空间”——也被称为“swappable image”,
在