操作系统第四章
第四章是内存管理,分为6节,下面就重点来总结一下!
程序的装入-可重定位装入方式
首先起始地址为0,物理地址=有效逻辑地址+程序在内存中的起始地址,这个一看就懂,不作介绍。
动态分区分配算法
1.首次适应算法
此算法总是先分配低地址部分的内存空间,直到分完此内存空间在分配下一个相对较低的内存空间。如例子(课本中)有p1和p2两个进程,如果为这两个进程分配空间会先在第一个空间中分,如果第一个不够才考虑第二个。例子中的两个数字分别是:起始地址和所需空间大小,计算时让起始地址加所需空间,已有空间减所需空间即是结果!
2.循环首次适应算法
这个算法是从上次找到的空闲分区的下一个空闲分区开始查找。如例子(课本中)为p1和p2分配空间是先看循环指针指在哪,因为循环指针指在第一个空间,所以为p1分配的空间就在第一个空间里,而为p2分配空间时循环指针会指向第二个空间,此时为p2分配的空间就在第二个空间中,计算方式与第一个同理!
最佳适应算法
这个算法会将所有的空闲区按分区大小递增顺序先排列,然后在为每个进程选取最接近所需空间的空闲分区,每分配完一个进程都会重新按递增顺序排列一次,继续为下个进程找取合适的空闲分区。 计算方式同理!
动态分区分配流程
这个流程应该都能看懂,这个主要是有一个空间合并的问题。如例子(书中)F1是50:5,所以它只需要在第二个空间中分配就可,不存在空间合并。而F2是40:10(40+10=50),因为前一个空间是30:10(30+10=40),后一个是50:5,所以就存在合并分区,就变成第二个图,其他两个进程同理!
分页存储管理
页
将进程的逻辑地址分为相同大小的片
页框
将物理内存空间分为与页大小相同的存储块
基本分页的逻辑地址结构
页号=INT(逻辑地址/页大小)
页内偏移量=mod(逻辑地址/页大小)
如果给出逻辑地址为多少,这个给出的逻辑地址是16进制的,要先把它转化为2进制数(一定要转换),如何转换?就是把16进制的每一个数字都用4位二进制表示。首先说明16进制数是0-9十个数字加上A(10),B(11),C(12),D(13),E(14),F(15)六个字母。如书中例4-4 0*503200A0怎么转换?先看5转化为二进制数为0101,0就是0000,3是0011,后面的数字同理,都化为二进制后看页号为31-12,是20位,那么找出20位2进制数,20位就是页号,页内偏移量同理!然后将得到的页号及业内偏移量在转化为16进制数即可!
分页地址变换
页表项起始地址=页表起始地址+页表项长度*页号
物理地址=页框大小*页框号+页内偏移量
记住这两个公式即可。
引入TLB
这个计算还是很好理解的,一看就能明白,就不再介绍。
两级和多级页表
两级页表
就是将页表在分页,使每个页表大小与内存页框大小相同。
两级页表的寻址
此寻址中有几个公式,主要是计算逻辑地址对应的物理地址,牢记物理地址=页框号*页框大小+页内偏移地址。这个公式本来觉得是有问题的,但是后来问了几个同学,他们都是觉得这个页框大小等于页大小,后来发现也只能是这样计算。既然知道了页框大小等于页大小,那根据求页大小的公式(页号=INT(逻辑地址/页大小))即可求出页框大小,也就可以求出物理地址。
再来说一点:十六进制的计算方式和十进制是一样的,只是逢十六进一。
多级页表的寻址
其计算方式与两级页表意思差不多,只不过是再进行细分,计算方式也是一样,不再详细介绍。
基于分页的虚拟存储系统
分配算法
分配算法分为平均分配算法,按比例分配算法和考虑优先权算法,这几个算法很简单,不做过多介绍。
页置换算法
最佳置换算法
这个算法是选择以后永远不会被选择的页或者在未来很长时间不被选择的页作为换出页。(该算法难以实现)如例子(书中)4-47,首先是7,0,1三个页进入内存,其他的一次按顺序存入,之后是2,因为内存中没有2,所以出现缺页异常,2就会置换7;下一个页是0,因为已经有0,所以不做置换,后面的一样,而题中过程需要6次置换。为什么这个算法会从第一个开始一次置换?不能改变顺序么?不能!先去看这个算法的意思,因为7最先被存入内存,因此7就是最长时间不被访问的页,其他同理!(这个算法是最好的,但是只是理论算法,实现不了!)
先进先出置换算法
相较前一个算法,这个算法会导致较高的缺页率。如例 4-48,前几个和上一个例子一样,但是,当0要存入的时候,因为已经有0,就不作置换,当3存入时还是从上一个没被置换的内存开始进行置换,因此3就会把0置换。而最佳置换算法3置换的是1。
最近最久未使用LRU置换算法
这个算法是相对来说最好的算法,避免了一些缺点。 这个算法意思是每次都选取最近最久没有被访问的页进行置换。如例4-49,在存入7,0,1,之后,下一个是2,因为7是第一个被存入的页,所以是最近最久未被访问的页,所以2置换7,大家在做这个题可以在数字左上方写上他们的顺序,在存下一个时把它存入顺序靠前的内存中。(书中例子有错误,最后一个7,0,1不正确,应该是1,0,7,如果觉得我说错了可以在评论中指出我的错误!)
就类似这个样子,左上角1表示第一位也就是最近最久未被访问的页,如果置换的是内存中已有的页则这个内存顺序为1,其余的根据先后以此变为2,3。至于LUR算法实现的例子意思也很好理解,不做解释。
其他算法
其他算法理解即可。
请求分页系统的性能分析
缺页率
首先知道这个缺页率怎么计算?(置换次数+内存物理块数(内存数))/总的页数。
书中例子也就好理解了。
分段存储管理和Linux的伙伴系统
这两部分比较好理解,看书即可。
感谢阅读,欢迎提出宝贵意见!