缺页中断
malloc()和mmap()等内存分配函数,在分配时只是建立了进程虚拟地址空间,并没有分配虚拟内存对应的物理内存。当进程访问这些没有建立映射关系的虚拟内存时,处理器自动触发一个缺页异常。
缺页中断:
在请求分页系统中,可以通过查询页表中的状态位来确定所要访问的页面是否存在于内存中。每当所要访问的页面不在内存时,会产生一次缺页中断,此时操作系统会根据页表中的外存地址在外存中找到所缺的一页,将其调入内存。
缺页中断本身是一种中断,与一般的中断一样,需要经过四个步骤进行处理:
1,保护CPU现场。
2,分析中断原因。
3,转入缺页中断程序进行处理。
4,恢复CPU现场,继续执行。
但是缺页中断是由于所要访问的页面不存在于内存时,由硬件所产生的一种特殊的中断,因此,与一般的中断存在区别:
1,在指令执行期间产生和处理缺页中断信号。
2,一条指令在执行期间,可能产生多次缺页中断。
3,缺页中断返回的时,执行产生中断的一条指令,而一般的中断返回的是,执行下一条指令。