内存换入-请求调页
一.用户眼里的内存
二.换入
实现虚拟内存必须有换入换出,访问代码段这些个段的时候,从磁盘上换进来,建立映射
执行load[addr]的时候MMU没有找到页(缺页),不能执行,MMU给cpu上面的中断寄存器标记上1,load[addr]虽然没有找到页,但也执行完了,开始检查中断寄存器(程序每执行完一条指令都需要检查中断寄存器),检查到有中断,开始执行中断MMU从磁盘中读入到物理内存中,执行完之后按照之前的程序会跳转到下一条指令的位置,这里MMU处理完中断后回停在当前指令,这个时候就可以执行这个刚才缺页的指令了
两种方法都可,但现实系统中都用调页
trap_init(void)系统初始化,set_trap_gate规定14中断怎样处理
这么多压栈是为了保护现场,movl %cr2,%edx,cr2赋给edx,压入edx是为了赋值参数
do_no_page实现转入和建立表
address&=0xfffff000,得到虚拟页号,page=get_free_page得到一个空闲物理页,bread_page()将页读入空闲的内存地,put_page建立页表(修改页表)