【操作系统】——基本分页存储管理
一、什么是分页存储
将内存分为一个个大小相等的分区, 这些分区称作为(页框、页帧、内存块、物理块、物理页面)若对分区进从编号,则又有了对应的(页框号、页帧号、内存块号、物理块号、物理页号),从0开始
进程的信息都是要存在内存中的,既然内存有了分区,那么进程逻辑地址空间上也会有相应的大小相等的分区,称为
(页、页面),对应编号为(页号、页面号),从0开始。
上面这么多名称着实是难记,但是我们只需要记住只有(页、页面)/(页号、页面号)是和进程相关的,其他的都是和内存相关的即可。
二、页表(存PCB中)
分页存储是一种不连续存储,进程的每个页在内存的页框存储不一定连续(页框间不一定连续,但是页框内部是连续的),那也就是说页号为0的页可能会存在0号页框也有可能存在100号页框中,那由页到页框的关系是如何被记录的呢??
这就是页表的功能!!
为了知道进程每个页面在内存中的存储位置,操作系统会为每一个进程建立一张页表,页表反映的是页和页框的一一对应关系。
页表是由页号和页框号(即内存块号)组成的。
页表项就是指页表中的一行,包括一个页号和一个块号。页号一般是隐含的(pc+"1"实现),而块号是由内存内被分为多少个页框决定的,在字节编址中,最大页框号所对应的字节数(字节数向上取整,不够一个字节数的,取够),即为页表项的大小。
页号和块号都是一个分区的顺序编号,并不代表着实际大小或者实际大小,比如:块号为2并不一定代表着起始地址就为2,若分区大小为1,则起始地址就是2,若分区大小为n,则起始地址为2*n
j号内存块的起始地址 = j * 内存块大小
三、如何实现地址转换
Q: 将进程地址空间分页后,操作系统该如何实现从逻辑地址到物理地址间的转换??
A: 物理地址是指内存中的实际地址,逻辑地址是由页号和页内偏移量组成。
逻辑地址: 是程序编译后,生成的目标模块进行编址时都是从0号单元开始编址,称之为目标模块的相对地址,即为逻辑地址。
1、给出逻辑地址,可由页号在页表中寻找对应的页表项,由页表项找到块号(内存块号),经过公式换算即可得到当前块号所对分区的 起始地址。
(逻辑地址——页号——页表项——块号——块起始地址)
2、由逻辑地址可以得到页内偏移量(同时也是块内偏移量,这是因为页和内存块大小相等)
(逻辑地址——页内偏移量——“块内偏移量”
3、物理地址由块的起始地址加上“块内偏移量”组成
内存被分为大小相等的各个页框,某个逻辑地址就对应某个页框内的某个地址,
逻辑地址除以页框大小——》
-
整数部分
整数部分表示该逻辑地址所在的块号(若以逻辑地址大小为总空间,则表示在总空间内一共可以容纳多少个相应大小的页框)
-
余数部分
余数部分表示逻辑地址在对应块内的偏移量(若以逻辑地址大小为总空间,则逻辑地址除以页框大小表示,整数是总空间内可容纳多少个页框,余数部分表示在不够容纳一个页框的部分中,最多能容纳多少,就好像你)
在计算机中采用的是二进制记录数据,若页面大小的二进制表示刚好是2的整数次幂,则计算机可以直接区分出页号和块号。
在二进制中,一般情况下都符合:逻辑地址等于块号和页内偏移量的拼接
四、基本地址变换机构
进程未执行的时候页表的始址和页表长度都是存放在PCB中的,当进程被调度时操作系统会将它放到页表寄存器中(PTR)。
页表寄存器记录了页表始址和页表长度!
- 进程被调度,操作系统内核将系统区PCB中的页表始址和页表长度放置在页表寄存器中
- 由逻辑地址分出页号和页内偏移量
- 将页号和页表长度对比,页号是页面的编号(从0开始),页表长度是指页表项的个数、页面的个数。页号>=页表长度,则非法,反之,执行下一步
- 由页号和页表始址可以计算出页表项的地址,之后可访问页表项,页表项中的内容是块号,最终可读取块号。
- 从页表项中读出得块号,再和逻辑地址的页内偏移量组合在一起就得到了物理地址
五、具有快表的地址变换机构
快表,又称联想寄存器(TLB),是一种高速缓存,用来存放最近访问的页表项副本,注意快表不是内存,快表中页表项是内存中部分页表项的副本,内存中的页表又称慢表。
- 进程被调度,操作系统内核将系统区PCB中的页表始址和页表长度放置在页表寄存器中
- 由逻辑地址分出页号和页内偏移量
- 将页号和页表长度对比,页号是页面的编号(从0开始),页表长度是指页表项的个数、页面的个数。页号>=页表长度,则非法,反之,执行下一步
- 对快表中的页表项进行逐一核对,看看是否匹配,是否命中,若命中,则进行第6步,若不命中,则执行第5步。
- 由页号和页表始址可以计算出页表项的地址,之后可访问页表项,页表项中的内容是块号,最终可读取块号。
- 从页表项中读出得块号,再和逻辑地址的页内偏移量组合在一起就得到了物理地址
若快表命中,则一次访存,反之,两次!
更多推荐
所有评论(0)