概述
什么是缺页中断?
缺页中断就是要访问的页不在主存,需要操作系统将其调入主存后再进行访问。
指的是当软件试图访问已映射在虚拟地址空间中,但是并未被加载在物理内存中的一个分页时,由中央处理器的内存管理单元所发出的中断。
c用malloc来创建虚拟内存,c++用new创建虚拟内存,
Linux操作系统,进程分配内存有两种方式,分别由两个系统调用完成:
brk和mmap(不考虑共享内存)。
brk是将数据段(.data)的最高地址指针_edata往高地址推,
mmap是在进程的虚拟地址空间中(一般是堆和栈中间)找一块空闲的。
这两种方式分配的都是虚拟内存,没有分配物理内存。
如果请求内存大于128K(这个值可由M_MMAP_THRESHOLD来设定),使用mmap方式创建虚拟内存,小于128K,则是brk方式创建.
brk分配的内存需要等到高地址内存释放以后才能释放(例如,先申请A再申请B,那么在B释放之前,A是不可能释放的),而mmap分配的内存可以单独释放。
在第一次访问已分配的虚拟地址空间的时候,发生缺页中断,操作系统负责分配物理内存,然后建立虚拟内存和物理内存之间的映射关系。
缺页中断处理流程:
缺页本身是一种中断,与一般的中断一样,需要经过4个处理步骤:
1. 保护CPU现场
2. 分析中断原因
3. 转入缺页中断处理程序进行处理
4. 恢复CPU现场,继续执行
缺页中断的特点:
但是缺页中断时由于所要访问的页面不存在于内存时,由硬件所产生的一种特殊的中断,因此,与一般的中断存在区别:
1. 在指令执行期间产生和处理缺页中断信号
2. 一条指令在执行期间,可能产生多次缺页中断
3. 缺页中断返回时,执行产生中断的那一条指令,而一般的中断返回时,执行下一条指令
————————————————
参考:https://www.toutiao.com/article/7085980316023800333/
关联问题:
内存堆和栈的区别
分配堆是需要磁盘I/O吗?
最后
以上就是单纯鞋子为你收集整理的系统如何为进程分配内存空间?缺页中断的原理,防止影响系统性能。的全部内容,希望文章能够帮你解决系统如何为进程分配内存空间?缺页中断的原理,防止影响系统性能。所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复