【操作系统】-- 基本分页存储管理(基本地址变换机构、具有快表的地址变换机构)

考虑支持多道程序的两种连续分配方式:

1、固定分区分配:缺乏灵活性,会产生大量的内部碎片,内存的利用率低。

2、动态分区分配:会产生很多外部碎片,虽然可以用“紧凑”处理,但是带价高。

如果允许将一个进程分散装入不相邻分区中,便可充分利用内存,而不需再“紧凑”,产生了非连续分配方式。

连续分配方式:为用户进程分配的必须是一个连续的内存空间。

非连续分配:为用户进程分配的可以是一些分散的内存空间。

非连续分配三种方式:基本分页存储管理、基本分段存储管理、段页式存储管理。

一、基本分页存储管理

1、概念

分页存储管理将内存空间的逻辑地址(相对地址)空间分成若干页,从0开始;

把内存的物理地址(绝对地址)空间分成与内存空间大小相同的若干块,为进程分配内存时,以块为单位。

进程的最后一页经常装不满一块,称为“页内碎片”。

2、如何实现地址的转换

①算出逻辑地址对应的页号(页号 = 逻辑地址/页面长度(取整数部分)

②知道该页号对应页面在内存中的起始地址

③算出逻辑地址在页面内的偏移量(页内偏移量 = 逻辑地址%页面长度(取余数部分)

物理地址 = 页面始址 + 页内偏移量

如果每个页面大小为2^K  B,用二进制数表示逻辑地址,则末尾K位即为页内偏移量,其余部分就是页号。

例:假设用32个二进制位表示逻辑地址,页面大小为2^12B = 4096B = 4KB,

逻辑地址2,用二进制表示应该是00000000000000000000000000000010

若0号页在内存中的起始地址为X,则逻辑地址2对应的物理地址应该是X+000000000010。

逻辑地址4097,用二进制表示应该是00000000000000000001000000000001

若1号页在内存中的起始地址为X,则逻辑地址4097对应的物理地址应该是X+000000000001。

(可以这样理解,一个页面大小为4097,逻辑地址正好为一个页面大小,所以也是下一个页面的开始,页面数为1偏移量为0)

3、逻辑地址结构

地址结构包含两个部分,前一部分为页号,后一部分为页内偏移量。

如果有K位表示页内偏移量,则说明该系统中一个页面的大小是2^K个内存单元。

如果有M位表示页号,则说明该系统中,一个进程最多允许有2^M个页面。

4、页表

为了能知道进程的每个页面在内存中存放的位置,操作系统要为每个进程建立一张页表。

①一个进程对应一张页表。

②进程的每一页对应一个页表项。

③每个页表项由页号和块号组成。

④页表记录进程页面和实际存放的内存块之间的对应关系。

⑤每个页表项的长度是相同的,页号是隐含的。

为什么页号是隐含的?

例:假设某系统物理内存大小为4GB,页面大小为4KB,则每个页表项至少应该为多少字节?

答:4GB = 2^32B,4KB = 2^12B

因此会被分为2^32/2^12 = 2^20个内存块,范围应该是0~(2^20)-1

因此至少要20个二进制位才能表示,因此至少需要3个字节才够。

(每个字节8个二进制位,3个字节共24个二进制位)

各页表项会按顺序连续地存放在内存中,

如果该页表在内存中存放的起始地址为X,则M号对应的页表项一定是存放在内存地址为X+3*M。

因此只需要知道页表存放的起始地址和页表项长度,即可找到各页号对应的页表项存放的位置。

本例中一个页表项站3B,如果有n个页面,则该进程的页表总共会占3*n个字节。

二、基本地址变换机构

 步骤:

①根据逻辑地址计算出页号、页内偏移量。

②判断页号是否越界。

③查询页表,找到页号对应的页表项,确定页面存放的内存块号。

④用内存块号和页内偏移量得到物理地址。

⑤访问目标内存单元。

例题:

例:若页面大小L为1K字节,页号2对应的内存块号b = 8,将逻辑地址A=2500转换为物理地址E。

答:1KB = 2^10B,说明页内偏移量占10位。

页号2对应的内存号b=8。

第一步:计算页号、页内偏移量

页号P = A/L = 2500/1024 = 2

页内偏移量W = A%L = 2500%1024 = 452

第二步:求块号

页号为2,对应的内存块号为8。

第三步:求物理地址

E = b*L+W = 8*1024+452 = 8644

三、具有快表的地址变换机构

上面的地址变换机构中,每次要访问一个逻辑地址,都需要查询内存中的页表,可能连续很多次查到的都是同一个页表项,快表可减少访问页表的次数。

快表,又称联想寄存器(TLB),是一种访问速度比内存快很多的高速缓冲存储器,用来存放当前访问的若干页表项,以加速地址变换的过程。

快表存放在更高速的存储器中,页表存放在内存中。

最近使用过的页表项会放入快表。

步骤:

①CPU给出逻辑地址,由硬件算得页号、页内偏移量,将页号与快表中的所有页号比较。

②如果找到匹配的页号,说明要访问的页表项在快表中有副本,则直接从中取出对应的内存块号,再讲内存块号与页内偏移量拼接成物理地址,最后访问物理地址对应的内存单元,因此,若快表命中,则访问某个逻辑地址仅需一次访存即可。

③如果没有找到页号,则需要访问页表,找到对应页表项,得到页面存放的内存块号,再将内存块号与页内偏移量拼接成物理地址,最后,访问该物理地址对应的内存单元,因此,若快表未命中,则访问需要两次访存。

例题

例:某系统使用基本分页存储管理,并采用了具有快表的地址变换机构,访问一次快表耗时1us,访问一次内存耗时100us,若快表的命中率为90%,那么访问一个逻辑地址的平均耗时是多少?

答:(1+100)*0.9+(1+100+100)*.0.1 = 111us

如果是快表和页表同时查找,应该是(1+100)*0.9+(100+100)*0.1 = 110.9us

若不采用快表机制,则需要100+100 = 200us

四、两个地址变换机构对比

  • 8
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Linux操作系统基本分页存储管理系统是建立在虚拟内存的基础上的。虚拟内存是通过将计算机的硬盘空间作为额外的内存来扩展计算机的内存容量,从而让计算机能够处理更大的程序。 在Linux中,分页存储管理系统的设计主要包括以下几个方面: 1. 表管理:Linux使用表来跟踪虚拟内存地址和物理内存地址之间的映射关系。通过表,操作系统能够知道哪些面被加载到内存中,哪些被存储在硬盘上,以及面在内存中的位置。表管理系统需要高效地维护这些映射关系,并处理面的分配和回收。 2. 面置换算法:当内存不足时,Linux操作系统会使用面置换算法来决定哪些面被置换到硬盘上。常见的面置换算法有最近最少使用(LRU)算法和时钟面置换算法。通过这些算法,系统可以保证内存中常驻的面是最有用的。 3. 内存保护:分页存储管理系统需要保证各个进程的内存空间相互隔离,防止进程之间的错误访问。通过使用表访问权限位和内存保护的机制,可以有效地保护每个进程的内存空间。 4. 面合并与共享:Linux操作系统还支持面的合并与共享,可以将具有相同内容的面合并为一个,减少内存占用。同时,可以通过共享面的方式来提高内存利用率。 总的来说,Linux操作系统分页存储管理系统是一个复杂而高效的系统,通过合理的设计和算法选择,能够有效地管理系统的虚拟内存空间,提高系统的性能和稳定性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

四月天行健

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值