操作系统笔记------存储管理(2)

分页存储管理

目的:减少分区式分配的内外零头浪费的问题。
思想:将目标程序分为若干的页(页面),这里的页是对于逻辑地址而言的线性地址。内存也要划分为若干的页框,页框是对具体的物理地址进行的划分,页(页面)与页框的大小相同,这保证了页面与页框之间可以进行映射装载。每个页框都可以被任意的页面装载,通过页框与页的划分确定了程序运行时对于空间的最小划分单位。

重点问题:页面/页框尺寸;逻辑地址结构;记录每个页面储存在哪个页框;程序如何正确运行(地址重定位)?指令跨页时的执行问题;存储(内存)保护问题

页表

实现从页号物理块号的地址映射。


每一个进程都拥有一个自己的页表,页表存储在内存;页表起始地址保存在PCB;
进程控制块(PCB)是系统为了管理进程设置的一个专门的数据结构。系统用它来记录进程的外部特征,描述进程的运动变化过程。同时,系统可以利用PCB来控制和管理进程。

页面尺寸

页面太小:内存利用率(内零头)高,页面数量增加。页表占用的空间也会变大,占用内存。
页面太大:内存利用率(内零头)低,页面数量减少。页表占用的空间也会变小大,节省内存。
正常尺寸:2的整数次方,1KB~8KB

地址结构

页号+页内地址2部分

地址重定位

地址变换机构/地址映射机制:

在实际的运行中逻辑地址与物理地址之间,相同的部分是页内或页框内的偏移地址,所以在实现逻辑地址到虚拟地址的映射时只要将对应的页号转换为对应的页框号就可以了。
上图中逻辑地址中获取对应的页号,在从页表获取对应的页框号,首先对其是否越界进行判断,如果没有超出页表的长度即在页表中,通过页表地址寄存器获取页表的起始位置,相加后得到对应的页框号,用页框号与页内地址即可合成物理地址。

页表中还有对应的存取控制的信息。
页表的作用

  1. 记录程序各页面所在的页框位置,支持进行地址重定位(地址映射)
  2. 实现页面访问控制,存储保护,限制程序在操作系统指定的内存区域内运行。

快表

别名:联想存储器(相联存储器)(associative memory);Intel术语:TLB( Translation lookaside buffers)
目的:为了适应cpu与内存的速度差距,改善页表访问的性能问题,对与页表的访问需要访问1次内存变量(页表),涉及2次地址访问(逻辑地址与物理地址的处理):页表+变量。
实现:设置在CPU内部;具有并行查找能力;暂存当前正在使用的页表项;尺寸:16-512 。可达到90%以上命中率。
快表就是存放在高速缓冲存储器的部分页表。

这样当其进行地址映射时,首先会查看快表中是否含有相关的记录,如果有直接进行地址映射,如果没有再访问内存中的页表来进行地址映射。

两级页表

当内存非常大的时候,我们会划分出许多的页来,这时页表的尺寸也会变得非常大,如果要在内存中寻找一个连续的空间来存放这么大的页表就会降低利用率,为应对这一情况,我们使用二级页表。对页表进行分页,对离散了的页表产生一个外层页表,每次读取时,只取需要的部分页表项,将其读入内存。
两级页表地址结构:

具体读取时先从外层页表中读取相应的页表地址,再加上对应的页号读取到相应的页框号,最后根据页内偏移地址映射物理地址。

当内存的数量更大时可以扩展出多级页表,但是随着页表的级数增加,相应的地址映射时间也会随之增加。

分段存储管理

在分页存储中,最小的划分单位是以页来划分的,但是在实际的编程中,我们习惯使用程序段来进行相关的数据保护,或者信息共享,所以为了方便这一操作提出了分段存储。

主要问题:分段划分;逻辑地址结构;记录每个分段储在内存位置;程序如何正确运行(地址重定位)?指令跨分段时的执行问题?存储(内存)保护问题

段表

分段(Segment):分段是一段有意义的信息集合分段的划分由程序员完成;分段的长度不定指令不存在跨分段情况
段表:主要在内存中找到每个逻辑段所对应的位置,每个段在段表都有一个表项,记录了该段在内存中的起始地址(又称为 “基址” )和段的长度。起始地址是指逻辑地址映射到内存起始地址,段长是指段的长度,可以检查地址是否越界。段表中也包含了相应的存取控制信息。

段表存储在内存;段表起始地址保存在PCB;

地址结构

包括段号和段地址2部分。

地址变换


与上面的分页分配类似,段内的地址在逻辑地址与物理地址中是对应一致的,所以实际运行时,先是通过段号对快表中进行搜索,如果找不到在对段表进行访问,首先对段表进行越界判断,如果没有越界就读出段的起始地址,再将起始地址作为物理段的起始地址,加上段内的偏移量就是实际的物理地址了。

段表的作用

  1. 记录程序各分段所在的内存位置;支持进行地址重定位(地址映射)
  2. 实现分段访问控制;存储保护,限制程序在操作系统指定的内存区域内运行。

信息共享

分页信息共享

设置一个或多个页框存储共享数据。

分段信息共享

设置一个或多个段来存放共享数据。

分段与分页比较

段页式存储管理

尽管分段式的存储管理解决了程序的逻辑空间划分,但是分段存储的划分存在许多的内零头碎片。我们可以通过对段式的分配方案再进行分页划分。
分段+分页
分页系统:负责解决主存分配问题,内存按页分配;
分段系统:负责解决逻辑地址空间管理问题,按段为应用程序分配逻辑地址空间;

段表与页表

在段页式存储中同时设置段表与页表,段表中包含着对于逻辑段的划分,每个逻辑段会被划分为若干的页,所以段表处了记录了段的划分状况,还记录了各个段内部的划分信息的页表情况。对应的多个页表记录了每个段中的页与内存中页框的对应情况。实际的程序中还是以段来划分逻辑地址,而内存中是以页为最小单位划分,再通过段表将各段的信息映射到页表,再由页表将各段中的页映射到内存中的页框中。

地址结构


由段号与页号加偏移地址组成。

地址变换


首先,段表的相关信息在运行时由进程控制块(PCB)读到段表寄存器中,段号与段表长度进行比较,判断是否越界,如果没有越界,读取对应的页表信息,通过页表的长度与页号来判断是否越界,如果没有越界就根据段表中的页表信息读出页表的位置,在加上页号读出对应的页框号来进行地址映射(页框号加页内地址)。
对与含有快表的结构来说,快表中存储着段号与页号对应的页框号,在对段表进行访问时先对快表进行访问,如果找到对应的项就可以进行地址映射,否则就进行上面的段页表访问(三次访问内存)。

发布了62 篇原创文章 · 获赞 36 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/sinat_36945592/article/details/90736775