目录:
分页存储管理
基本地址存储机构
具有快表的地址存储机构
两级页表
分段存储管理
段页式管理方式
分页存储管理(重点)
首先回顾,逻辑地址和物理地址.
为什么要引入分页存储管理?
把物理地址下,离散的各个小片都利用起来,也就是在逻辑地址中看似是连续存储的,实际上对应到物理地址上就是离散存储的.
页和页面的概念
逻辑地址中,我们把逻辑存储空间,分成多个小长条,我们把这多个小长条叫做页,
小长条中我们要存储由若干比特构成的地址,小长条的内部,我们叫做页面
.
物理地址中,存储是不必连续的,无论是存储空间上,还是存储逻辑上,都不必连续,
页框的概念
在内存中,也是按照小长条那种形式存储的,在内存中的这个小长条内部同样存储着页面中所对应存储的地址,这个小长条内部被叫做页框
.所以,页框长度=页面长度 .
页表和页表项的概念
我们在逻辑地址中,已经理解了页和页面的概念,如何得知,我们的页对应的物理地址中的页框号(物理块号)是哪个,我们有一张页对应块号的表,被称作页表
,每一个对应关系叫作一个页表项
.页表项中存储着 页号和物理块号,页号不占存储空间,页号是有默认顺序的,是隐含的.
1.一个进程对应一张页表
2.进程的每个页面对应一个页表项
3.每个页表项由“页号”和“块号”组成
4.页表记录进程页面和实际存放的内存块之间的映射关系
如何用逻辑地址计算物理地址?
通过逻辑地址,计算出页和页内偏移量,页内偏移量就是页面在某个页中的具体位置,
通过查表,得出对应的物理块号.
物理块号+页内偏移量=物理地址
基本地址存储机构
实现逻辑地址
到物理地址
转换的一组硬件机构.
通常会在系统中设置一个页表寄存
器(PTR),存放页表在内存中的起始地址F
和页表长度M
。进程未执行时,页表的始址和页表长度放在进程控制块(PCB)中
,当进程被调度时,操作系统内核会把它们放到页表寄存器中。
地址变换过程
1.根据逻辑地址算出页号、页内偏移量
2.页号的合法性检查(与页表长度对比)
3.若页号合法,再根据页表起始地址、页号找到对应页表项
4.根据页表项中记录的内存块号、页内偏移量得到最终的物理地址
5.访问物理内存对应的内存单元
访存次数:2次 一次是查询页表,一次是查完之后访问内存
例题:
例:若页面大小L为1K字节,页号2对应的内存块号b=8,将逻辑地址A=2500转换为物理地址E。等价描述:某系统按字节寻址
,逻辑地址结构中,页内偏移量占10位
,页号2对应的内存块号b=8,将逻辑地址A=2500转换为物理地址E。
具有快表的地址存储机构
引入一种新的基本地址存储机构----快表,来减小访问内存的次数,让地址变换的过程更快.
快表
,又称联想寄存器(TLB,translation lookaside buffer),是一种访问速度比内存快很多
的高速缓存(TLB不是内存
!),用来存放最近访问的页表项的副本
,可以加速地址变换的速度。与此对应,内存中的页表常称为慢表
。
地址变换过程
访存次数:快表命中,只需一次访存
快表未命中,需要两次访存
1.算页号、页内偏移量
2.检查页号合法性
2.查快表。若命中,即可知道页面存放的内存块号,可直接进行5;若未命中则进行4
4.查页表,找到页面存放的内存块号,并且将页表项复制到快表中
5.根据内存块号与页内偏移量得到物理地址
6.访问目标内存单元
两级页表
两级页表—解决单级页表存在的问题
如何解决单级页表的问题?,页表太大,页表要连续存储,占用太大
把原先的一个大页表,拆分为若干多个小页表,若干个小页表,再构成一个页表,叫做页目录表
,通过查询页目录表
,找到存储小页表的内存块的位置
基本分段存储管理
进程的地址空间:按照程序自身的逻辑关
系划分为若干个段
,每个段都有一个段名(在低级语言中,程序员使用段名来编程),每段从o开始编址
内存分配规则:以段为单位进行分配,每个段在内存中占据连续空间
,但各段之间可以不相邻
。
组成
分段系统的逻辑地址结构由段号(段名〉和段内地址(段内偏移量〉所组成。如:
段号的位数决定了每个进程最多可以分几个段
段内地址位数决定了每个段的最大长度是多少
段表
类似于页表
分段和分页管理的对比
页是
信息的物理单位。分页的主要目的是为了实现离散分配,提高内存利用率。分页仅仅是系统管理上的需要,完全是系统行为,对用户是不可见的
。
段
是信息的逻辑单位
。分段的主要目的是更好地满足用户需求。一个段通常包含着一组属于一个逻辑模块的信息。分段对用户是可见的
,用户编程时需要显式地给出段名。
页的大小固定且由系统决定。段的长度却不固定,决定于用户编写的程序。
分页
的用户进程地址空间是一维
的,程序员只需给出一个记忆符即可表示一个地址。
分段
的用户进程地址空间是二维
的,程序员在标识一个地址时,既要给出段名,也要给出段内地址。
段页式管理方式
引入:分页和分段都有优缺点,如何取其精华呢?
段页式中的段表和页表
将地址空间按照程序自身的逻辑关系划分为若干个段,在将各段分为大小相等的页面
将内存空间分为与页面大小相等的一个个内存块,系统以块为单位为进程分配内存
逻辑地址结构:(段号,页号,页内偏移量)
访问一个逻辑地址所需访存次数
- 第一次——查段表、第二次——查页表、第三次——访问目标单元
- 可引入快表机构,以段号和页号为关键字查询快表,即可直接找到最终的目标页面存放位置。引入快表后仅需一次访存