一、分区
一个程序会划分为多个段落,分配内存时需要在内存中划分空间区域,如何划分?
- 如上图所示,存在两个分区表,空闲分区表和已分配分区表
- 操作系统划分空闲区域的时候有相关的算法,这里不做深入讨论
- 实际操作系统中并不使用内存分区来进行物理内存的分割
二、分页
实际物理内存是通过分页来分配的,而不是通过分区,因为分区的效率比较差,效率较低的原因:
由此,分页这个概念被提出,把内存分成多页,分配的时候按照页来分配
此时需要页表来记录所分配的页:
三、多级页表
页表的问题:会越来越大……:
如何解决呢?采用多级页表
四、快表
多级页表提高了空间效率,但在时间上?
五、段页结合
通过虚拟内存的方式来实现分段,把段分成多页,通过页表找到物理内存
六、内存换入
如果虚拟内存比物理内存大怎么样,比如说只有1G的物理内存,如何给用户4G的感觉呢?
- 请求调页的过程:
- 首先产生缺页中断
- 申请一个空闲页(没有空闲页,就要换出页)
- 从磁盘上把缺的那一页读到内存中
- 把物理页和虚拟内存建立映射(修改页表)
七、内存换出
并不是总有新的空闲页,所以需要换出一些页,发生在请求调页的时候,换出的数据就放在了swap分区