内存分配的过程
过程
- 程序向内存请求空间(如new,malloc)
- 程序检查虚拟内存是否有剩余
- 分配虚拟内存
- 调用程序时,CPU 会查页表,若发现该虚拟页未映射,则触发缺页中断
- 分配物理页,并建立页表映射
- 继续运行程序
注意点
- 程序在请求空间的时候分配的是虚拟内存,不是物理内存,人们通常是不希望直接访问物理内存的,直接访问,容易使操作系统出现较为根本致命的错误,如Windows电脑蓝屏等
- 刚开始请求空间的时候并不会把虚拟内存与物理内存构建映射关系,只有在第一次用到该虚拟内存的时候,才会进行判断物理内存是否还拥有,进行虚拟地址和物理地址的映射(缺页中断)
思考
如果物理地址分配完了,会发生什么
- 首先,操作系统会对长时间没有被访问的物理页的数据,写入到磁盘的swap的交换空间中,用来释放物理内存,然后进行对新数据的物理地址分配
- 如果页面置换完仍无法满足程序对内存的需求,那么程序会抛出异常或者强制终止