(补充)3.1.2中的非连续分配管理方式 笔记

1.基本分页存储管理

如果将进程想象成一个大作业,用一张大纸写下了执行整个进程所需的代码,那么分页式存储就是将这个大作业分成了若干个A4大小的纸,如果将教室里的书柜比喻成内存空间,操作系统比喻成书柜的管理人员,那么操作系统就是将进程这个大作业先拆分成一张张的A4纸,然后放到不同的柜子上去

这里的A4纸就是页框(或者页帧,内存块,物理块),页框号从0开始,进程的地址空间也分为很多页面,页号也是从0开始的

而操作系统通过动态重定位的方式(即有一个起始地址(由基址寄存器确定)和偏移量,通过起始地址+偏移量得到物理地址)将一页页的作业装入内存

如何实现分页存储的地址转换(重点)

1)逻辑地址对应页号和页内偏移量的计算

在这里插入图片描述
在这里插入图片描述

2)知道页面在内存中的起始地址

为了页号和内存起始地址的对应关系,每一个进程都会建立一张页表

  1. 页表记录进城页面和实际存放的内存块的对应关系
  2. 如下图的3点
    在这里插入图片描述
    各页表项会按顺序,连续的存放在内存
  3. 每个页表项的长度是相同的,页号是隐含的

计算例题:
在这里插入图片描述

基本地址变换机构

地址变换过程:(重点)

1)每个进程有自己的逻辑地址,逻辑地址A被分为页号部分和页内偏移量,页号为P,页内偏移量为W,P=A/L(L为页面大小),W=A%L。

2)而操作系统中有一个页表寄存器(存放页表起始地址,存放页表长度),有页表始址F和页表长度M(在进程运行的PCB中),页表长度指的是进程的页表中有M个页表项,也就是进程共有M个页面,页号如果P>=M,会有越界中断,

尤其注意,因为页号是从0开始的,而页表长度是有多少页,M最少是1,所以,当M是1的时候,只有页号为0的页,当页号P=1时,也发生了越界

3)如果未越界,页表中的页号P对应的页表项地址=页表起始地址F+页号P*页表项长度,找到对应的内存块号b

(注意页表长度,页表项长度和页面大小的区别,页表长度是共有几个页,页表项长度是指每个页表项占多大的存储空间,页面大小是一个页面占多大的存储空间)

4)物理地址=b*页面大小L+页内偏移量W,即可得到
在这里插入图片描述
例题:
在这里插入图片描述

其它小细节

  1. 页内偏移量的位数和页面大小的关系
  2. 页式管理中地址是一维的(即只需要知道逻辑地址,便可以得到物理地址)
  3. CPU在地址变换过程中需要查询两次内存(如果命中快表只需一次访存),一次是在查询页表的过程中,第二次是在实际访问目标内存块时进行

具有快表的地址变换机构

快表,又称为联想寄存器(TLB),是一种访问速度比内存快很多的高速缓存器

改进的地方,当第一次访问页号,找到了对应的物理地址后,CPU会把页表中对应的页表项放在快表中,那么,在第二次访问相同页面时,就可以直接命中快表,在内存中找到对应的物理地址

在这里插入图片描述
例题:
在这里插入图片描述
在这里插入图片描述

两级页表

一级页表存在的问题:
1)由于在内存中页表项必须连续存储,页表过大需要很大的连续空间,显然这就违背了非连续分配管理方式的准则,所以就需要一种方式解决这个问题

就像解决内存必须连续分配提出一级页表一样,就用2级页表和多级页表来解决这个问题:

二级页表的原理和地址结构

在这里插入图片描述
一级页表中,有页目录表和二级页表对应的内存块号

计算例题:

在这里插入图片描述

在上题中,一级页表中0对应的3是指0号页表在内存中存放的位置是3号内存块,3号内存块中就存放着所有的0号页表项

几个易考的小细节

  1. 多级页表中,各级页表的大小不能超过一个页面
  2. N级页表的访存次数是N+1次

2.基本分段存储管理

分段

分段的类似于分页,将一个进程按照自身逻辑分成若干个段,每段从0开始编址,每个段在内存中占据连续的空间,但是各段之间可以不相邻

段号的位数决定了每个进程最多可以分为几个段
段内地址位数决定了每个段的最大长度是多少

段表

段表和页表记录信息类似,唯一不同的一点就是段表中记录了段长

在这里插入图片描述
下图为分段地址变换的过程,与分页式存储最不同的地方在4)
不同的原因是分页式管理中,每个页的大小是相同的,而每个段的大小是不同的
在这里插入图片描述

3.分段和分页管理的区别(重点)

  1. 页是信息的物理单位,分页的主要目的是为了提高内存的利用率,完全是系统行为,对用户不可见,而段是信息的逻辑单位,主要目的是更好的满足用户的需求,分段是对用户可见的,用户编程时需要显式的给出段名(例如main.c和自己写的函数fun.c等等)

  2. 页的大小是由系统决定的,页的长度是固定的,而段的长度不固定,是由用户自己决定的

  3. 分页的用户进程地址空间是一维的,给出一个逻辑地址就可以找到物理地址,而分段的用户进程的地址空间是二维的,标识一个段时,既要给出段名,又要有段内地址

  4. 分段更容易实现信息的共享与保护,例如生产者进程和消费者进程同时想要输出hello world,他们就可以共享一个输出hello world的段,而分页式管理会出现下面的问题
    在这里插入图片描述
    分页式管理中,无法用指针直接指向要访问的1号段,因为1号段被分到两页存储

  5. 对于访问一个逻辑地址需要几次访存这个问题,分页式管理和分段式管理的访存次数是相同的(分段也可以引入快表机构)

4.段页式存储管理

分段管理和分页管理的优缺点

在这里插入图片描述

段页式管理的示意图

在这里插入图片描述

段页式管理的地址分配:

在这里插入图片描述

段表和页表

在这里插入图片描述

  1. 注意段表的变化,段表中的段的起始地址编程了页表长度和页表存放块号(页表起始地址),而页表没变
  2. 一个进程只对应一个段表,而一个段会对应多个页表,所以一个进程可能对应多个页表

地址变换过程

在这里插入图片描述
注意4中要检查页号是否越界

猜你喜欢

转载自blog.csdn.net/be_stronger/article/details/114013785
今日推荐