By cszhao1980
是了解swap函数的时候了,它有四个参数:
(1)blkno:磁盘块号;
(2)coreaddr:物理内存block号;
(3)count:读写字节数;
(4)rdflg:读写标志。
swap函数尽力使用device independent的方法来实现功能:
(1)它通过swapdev在块设备表中查表来操控swap设备;
(2)启动设备时,通过块设备表bdevsw的d_sratesy成员变量来操纵。
而这两项都是可配置的,也就是说,即使更换了swap设备,swap函数也无需修
改,实现了低层具体实现和高层模型间的隔离。
swap函数最需要注意的一点是其对各种竞争情况的处理,其核心是对swbuf的使用。
swbuf是操控外设的唯一接口,任何进程的操纵行为都会设置这同一个结构,由此
产生的sleep也都使用&swbuf.b_flags作为睡眠id。莱昂一反其惜墨如金的写作风格,
以专门的一个小节对此进行了详细的说明,我在这里不再赘述。
还有一点需要注意的是,尽管RK磁盘的中断处理函数支持异步方式,但swap似乎
只支持同步的读写。
博客地址:http://blog.csdn.net/cszhao1980
博客专栏地址:http://blog.csdn.net/column/details/lions-unix.html