操作系统的页式管理

来源:互联网 发布:淘宝客佣金是谁给的 编辑:程序博客网 时间:2024/05/18 14:13
页表(每个进程都有) 页号----页框号
空闲页框表(仅仅系统拥有):用于记录空闲的页框
MMU 地址转换 需要知道当前进程的页表,当前页表本身其实也放在内存中,而这个页表的首地址放在了一个寄存器中,叫页表寄存器。(当前执行的进程会把当前页表首地址放入寄存器)


PCB中记录页表首地址-->页表寄存器-->内存中页表-->页对应的页框,页内偏移-->页框+页内偏移-->形成物理地址




TLB:快表(加快页表)其实就是cach,其实是对内存中页表的Cach,内部也放的是页表(容量有限,(根据局部性原理)页表一部分)。对于页表如果大了,我们能不能对页表进行分页?这就是虚拟页表,解决大页表
问题,同时多级页表也解决了大页表,linux下是三级页表。




我们程序的逻辑地址是基于0号地址做偏移,而要想进行页管理,那就可以划分。






简单存储:进程数据全部装入内存
虚拟存储:部分装入 :又分为 虚拟分段,虚拟分页,虚拟段页式


程序运行的时候,会装入一部分(驻留级),然后开始执行,然后发现访问的地址没有装入内存,这时产生
中断(缺页),进行IO操作(磁盘IO操作,不影响cpu,cpu和IO控制器并行执行,cpu已经执行下一个进程,当然等待磁盘的进程多了,会有磁盘调度队列),进程阻塞,IO装入内存,然后变为就绪态等待执行,注意页表不同于上面的页表,这个页表需要记录你进程划分为的那么多页,那些页已经装入内存,那些没有。这就需要页表中需要有记录存在的位。同时还要加入页修改位,修改位是什么?这是非常核心的一个东西,我们知道,分页管理的好处是可以换入换出到磁盘,但是如何保证一致性那?也就是说,我们把程序加入到内存,在内存中做了修改,比如数据。然后再换出的时候我们需不需要写入磁盘?肯定需要,因为我们修改了,为了保持一致性,我们需要将最新成果写入磁盘(保护现场,进度),但如果是只读的代码,我们时候不需要写入磁盘。修改位的作用就是减少在换出的时候写磁盘的次数。IO次数的减少可以大大提高效率。




虚拟存储:节约了内存,可以运行更多的进程,可以让cpu运行效率更高,让cpu忙起来是我们的目的。这样是你可以玩打游戏的原因。由此程序的大小不在受物理内存的限制,(依靠一部分放磁盘不加载,一部分放内存),但是不可以无限的大,这受逻辑空间的限制。


抖动:大量IO操作


换入换出:内存空间已经满了,需要换出页面到磁盘,装入新东西,但是在下一次,需要的又是上一次需要的页面
又需要将刚才换出的页面换入,由此需要大量的IO操作——>"抖动",但是的根源是什么?最开始的时候选择的

换出的页面似乎不是很好(换入换出算法不好),或者说物理内存太小,驻留级小,所以需要频繁的换入换出(本质),进程太多(通过进程挂起,放到磁盘对换区),系统负载高。




原创粉丝点击