操作系统学习记录(五)
3.1.10 分段管理
1.分段的定义:按用户的需求,在编写代码的时候标记分段号,在内存中生成段表时,依据分段号和将程序划分到不同的段内,每个段的大小依据被划入的程序块而定,然后标记一下这些块对应被存放的物理地址。因此段表由“段号 段内大小 对应实际物理起始地址”构成。
2.分段与分页最大的不同:使用分段索引物理地址时,不仅需要确认段号是否合法,也需要在确认段号之后,确认对应的段内大小是否能够满足索引需求。
3.分页和分段访存次数一致,均可以使用快表。
4.分页对用户不可见,但是分段需要用户编程介入。因为分段是依据用户需求划分的段,因此可以更好的实现存储方式模块化,进而方便多进程共同访问。如果是依据分页存储,因为划分内存块的大小固定,所以可能多个模块存入一个内存块,这样就不适合多进程共同访问。
3.1.11 段页式管理
1.由于段式管理的优点主要支持信息的共享和保护,缺点是内存利用率不高且可能会有外部碎片;页式管理的优点主要是内存利用率高,缺点是不方便共享且有内部碎片产生。所以结合两者特征,有段页式管理。
2.段页式管理方式:一个进程依然被一个段表划分,但在每一个段表项中放入一个页表,细化最小存储单位为一个页表项对应的内存块。
3.段页式管理的逻辑地址为(段号,页号,页内偏移量),所以逻辑地址到物理地址的索引过程为:首先检查所申请段号在段表中是否存在,再检查所申请页号在页表中是否存在,最后依据页号对应的内存块和页内偏移量找到具体的物理地址位置。此过程访存三次,但是依旧可以通过快表的方式减少访存次数。
3.2.1 虚拟内存的概念
1.为什么提出虚拟内存 :在对大型工程进行处理时,需要对内存进行大量占用可能一次性使用的内存需要现有内存无法满足;在现有内存中,可能存在一些暂时无用的进程驻留在内存中导致资源的无效占用;在处理类似循环的需求的时候,可能会产生时间局限性;在处理某资源重复访问时,可能会出现空间局限性。这些都是虚拟内存技术提出的必要性。
2.计算机存储结构层次:寄存器>高速缓冲器>内存>外存
3.虚拟内存技术:在内存中智能调换资源进入内存或者调出内存,按需使用内存资源,暂时不必要的资源在外存等待。逻辑上,用户会感觉到内存能够满足更多更大的进程的使用,这就是内存的虚拟化。
4.虚拟内存技术基于非连续存储:页式存储、段式存储、段页式存储。
3.2.2 请求分页管理方式
1.与基本分页的不同:在其基础上增加了两个判断,第一个是“页是否在内存中”、“如果页不在内存中,那么内存现在满没有满,需不需要进行页面置换”
2.请求分页管理流程:首先如基本分页一致,由逻辑地址(页号,页内偏移量)申请物理地址,内存查看页号是否合法,如果合法就下一步,如果不合法就提示越界;然后查看快表,如果快表中有对应物理地址就ok,如果没有就下一步;然后查看页号是否对应内存块,也就是说是否该页现在在内存中,如果存在就如基本分页管理一样执行,如果没有就请求分页。
3.请求分页被激发时,进程会进入阻塞态。进入内中断的处理,该内中断请求分页处理如下:
首先查看内存是否已经满了装不下了,如果没满就将该页对应的资源从外存调入内存块;如果满了就申请页面置换操作,将某些资源暂时调出内存;之后修改页表,再修改对应的快表,然后索引到相应的物理地址。
3.2.3 页面置换算法
1.页面置换算法会增加IO开销,因为不断有资源从内存进出嘛。
2.OPT最佳置换算法:将永不使用或者长时间不使用的资源页面调出内存。不容易实现。
3.FIFO先进先出算法:最早进入内存的资源页面调出内存。但是某些进程可能会利用很多页面资源,会对之前进入的资源页面反复访问,会导致反复调入调出,算法性能差,这种算法叫做Belady异常。
4.LRU最近最久未使用算法:在页表中的访问字段记录了最近修改时间,选择时间最长的页面调出内存。性能接近于OPT。开销比较大
5.CLOCK时钟算法:通过最近访问情况来决定调入调出,0表示最近未访问,1表示最近访问过。将内存中现存的页面链接成一个循环队列,然后循环扫描这个队列,如遇到0直接置换;如果是1就修改为0。最早遇到0的那个页面被置换。优点是开销较小,实现难度适中。缺点是没考虑是否修改过。
6.改进CLOCK时钟算法:通过最近访问情况和最近修改情况来决定调入调出(访问情况,修改情况)表示,0表示最近未访问,1表示最近访问过,0表示最近未修改,1表示最近修改过。最多扫描四轮,第一轮扫描未访问未修改的,第二轮扫描未访问已修改的,第三轮扫描已访问未修改的,第四轮扫描已访问已修改的。
3.2.4 页面分配策略
1.驻留集:请求页面管理时,分配给该进程的内存块数目大小;如果内存块少了,大量缺页处理IO开销大,如果内存块多了,就让某一进程一次性占用大量资源,导致并发度下降。
2.局部置换:缺页时,只能置换分配给自己的物理块;全局置换:缺页时,可以置换来自起初不是分配给自己的物理块。固定分配:起初分配给进程的内存物理块数目是一定的;可变分配:起初分配给进程的内存物理数目会在处理的过程中适当增加或减少。
3.注意可变分配局部置换和可变分配全局置换
4.何时调入页面:在进程运行前调入重要页面(预调入策略),在进程运行中调入重要页面(请求页面管理策略)
5.何处调入页面:一般是内存和磁盘的对换区进行。
6.内存抖动:大量的缺页请求导致大量的内存的IO处理,原因是给进程分配的内存物理块太少。