22-进程的实现 (虚拟地址空间;UNIX 和 xv6)
22-进程的实现 (虚拟地址空间;UNIX 和 xv6)
1024叉树
32bit,10bit+10bit+12bit,12bit放访问信息
一个4KB页面,一个放一个4B的指针,总共2^1024
绝大部分节点都是空的,下一层也类似(局部性原理)
64bit,4KB的页面,一项8B,总共有512项,不是很整齐
映射不需要先载入,只需要一个数据结构记录访问权限
到用指针访问时,发生缺页中断,如果合法访问,则改变f,映射一页
指针单点访问地址空间,一段时间后就能记录哪里能访问,哪里不能访问,把不能访问的释放掉,放到磁盘上
swap机制,闲置页面放到磁盘上,释放内存
可以使所有进程使用的内存总和比物理内存大
fork系统调用
fork() 在进行状态机复制时,虽然理论上需要做出完整的状态复制,但本着 “复制的数据可能立即被浪费掉” 的观察,操作系统希望只在 “不得不复制” 时才复制。
现代操作系统会维护页面的共享情况,并在 fork 后将父子进程的地址空间都标记为 read-only,而当双方中的任何一个进程写入发生 page fault 时,才复制一页。对于连续的 fork(),则会产生多个进程共享页面的情况。
服务器的容错,可以用fork以很小的代价做快照