1、 规定系统最大物理内存为16MB。
2、 应用程序使用0-640K虚拟内存,640K-1M是映射IO空间,1M以上的高位内存只有内核可以使用,4064-4096最高32M地址空间映射到不同的设备。
3、 每个应用程序都有自己的页表,页表的前160项(0-640K)内存是自己映射的,从640K到最高物理内存,其物理地址和虚拟地址是一致的,不过应用程序没有访问高于640K内存的权限。这样可以> 快速从应用层切换到内核层。
4、 应用程序要求分配页面的时候,内核空间映射的物理页会再次映射到用户空间,相当于一个页被映射了两次。
5、 内核使用一个被自旋锁保护的链表来保存空闲页面,链表的节点就位于空闲页面的顶端(好精妙的设计!)。
来看看D老大
回复 bugsonglinux:
看你近来很忙的样子,连博客也不更新。注意身体,别太劳累了。
回复 davelv:是啊,比较忙碌。各种事情奇多…
xv6大概是出于实现方便的考虑选用了自旋锁作为通用的同步机制…要是稍微更高级一点就更有参考性了…
fork()好像也是直接一个memcpy没有搞写时复制…
回复 fleurer:没错来着。目前只看到了自旋锁,没有看到信号量用的P,V(不过sleep和wake倒是有)。
fork是直接copy了父进程了页目录以及内存,没有共享机制。