408 考研《操作系统》第三章第二节:基本分页存储管理、两级页表、基本分段存储管理方式、段页式管理方式

news2024/10/7 20:28:01

文章目录

  • 教程
  • 1. 基本分页存储管理的基本概念
    • 1.1 连续分配方式的缺点
    • 1.2 把“固定分区分配”改造为“非连续分配版本”
    • 1.3 什么是分页存储
    • 1.4 如何实现地址的转换?
    • 1.5 逻辑地址结构
    • 1.6 重要的数据结构——页表
    • 1.7 知识回顾与重要考点
  • 2. 基本地址变换机构
    • 2.1 例题
    • 2.2 对页表项大小的进一步探究
    • 2.3总结
  • 3. 具有快表的地址变换机构
    • 3.1局部性原理
    • 3.2 什么是快表(TLB)?
    • 3.2 引入快表后,地址的变换过程
    • 3.3 思考:能否把整个页表都放在TLB中?
    • 3.4总结
  • 4. 两级页表
    • 4.1 单级页表存在的问题
    • 4.2 如何解决单级页表的问题?
    • 4.3 两级页表的原理、地址结构
    • 4.4 如何实现地址变换
    • 4.5 如何解决单级页表的问题?
    • 4.6 需要注意的几个细节
    • 4.7 知识回顾与重要考点
  • 5. 基本分段存储管理方式
    • 5.1 分段
    • 5.2 地址变换
    • 5.3 分段、分页管理的对比
    • 5.3 总结
  • 6. 段页式管理方式
    • 6.1分页、分段的优缺点分析
    • 6.2 分段+分页=段页式管理
    • 6.3 段页式管理的逻辑地址结构
    • 6.4 段表,页表
    • 总结

教程

  1. 基本分页存储管理的基本概念

1. 基本分页存储管理的基本概念

在这里插入图片描述
连续分配:为用户进程分配的必须是一个连续的内存空间
非连续分配:为用户进程分配的可以是一些分散的内存空间

1.1 连续分配方式的缺点

考虑支持多道程序的两种连续分配方式:
1.固定分区分配:缺乏灵活性,会产生大量的内部碎片,内存的利用率很低。
2.动态分区分配:会产生很多外部碎片,虽然可以用“紧凑”技术来处理,但是“紧凑”的时间代价很高。
在这里插入图片描述
如果允许将一个进程分散地装入到许多不相邻的分区中,便可充分地利用内存,而无需再进行“紧凑”。

1.2 把“固定分区分配”改造为“非连续分配版本”

假设进程A大小为23MB,但是每个分区大小只有10MB,如果进程只能占用一个分区,那显然放不下。在这里插入图片描述
解决思路:如果允许进程占用多个分区,那么可以把进程拆分成10MB+10MB+3MB三个部分,再把这三个部分分别放到三个分区中(这些分区不要求连续)

在这里插入图片描述
在这里插入图片描述
进程A的最后一个部分是3MB,放入分区后会产生7MB的内部碎片。
如果每个分区大小为2MB,那么进程A可以拆分成11*2MB+1MB共12个部分,只有最后一部分1MB占不满分区,会产生1MB的内部碎片。

显然,如果把分区大小设置的更小一些,内部碎片会更小,内存利用率会更高

基本分页存储管理的思想:把内存分为一个个相等的小分区,再按照分区大小把进程拆分成一个个小部分。

1.3 什么是分页存储

将内存空间分为一个个大小相等的分区(比如:每个分区4KB),每个分区就是一个“页框”(页框=页帧=内存块=物理块=物理页面)。每个页框有一个编号,即“页框号”(页框号=页帧号=内存块号=物理块号=物理页号),页框号从0开始

在这里插入图片描述

进程的逻辑地址空间也分为与页框大小相等的一个个部分,每个部分称为一个“”或“页面” 。每个页面也有一个编号,即“页号”,页号也是从0开始。(注:进程的最后一个页面可能没有一个页框那么大。因此,页框不能太大,否则可能产牛讨大的内部碎片)
在这里插入图片描述

Tips:初学易混——页、页面 vs 页框、页帧、物理页页号、页面号 vs 页框号、页帧号、物理页号

操作系统以页框为单位为各个进程分配内存空间。进程的每个页面分别放入一个页框中。也就是说,进程的页面与内存的页框一一对应的关系。

各个页面不必连续存放,可以放到不相邻的各个页框中。

(注:进程的最后一个页面可能没有一个页框那么大。也就是
说,分页存储有可能产生内部碎片,因此页框不能太大,否则可能产生过大的内部碎片造成浪费

1.4 如何实现地址的转换?

将进程地址空间分页之后,操作系统该如何实现逻辑地址到物理地址的转换?
在这里插入图片描述
在这里插入图片描述

思想:模块在内存中的的“起始地址”+目标内存单元相对于起始位置的“偏移量


将进程地址空间分页之后,操作系统该如何实现逻辑地址到物理地址的转换?在这里插入图片描述

特点:虽然进程的各个页面是离散存放的,但是页面内部是连续存放的在这里插入图片描述
逻辑地址A 对应的物理地址 = P号页面在内存中的起始地址+页内偏移量W
在这里插入图片描述

如何计算:

页号=逻辑地址/页面长度(取除法的整数部分)

页内偏移量=逻辑地址%页面长度(取除法的余数部分)
页面在内存中的起始位置:操作系统需要用某种数据结构记录进程各个页面的起始位置。


页号=80/ 50= 1
页内偏移量=80 %50 = 30

1号页在内存中存放的起始位置450


为了方便计算页号、页内偏移量,页面大小一般设为2的整数幂
在这里插入图片描述
在这里插入图片描述
如果页面大小 刚好是 2 的整数幂,则计算机硬件可以很快速的把逻辑地址拆分成(页号,页内偏移量)
在这里插入图片描述

子问题:为何页面大小要取2的整数幂?在这里插入图片描述

1.5 逻辑地址结构

分页存储管理的逻辑地址结构如下所示:在这里插入图片描述
在这里插入图片描述

1.6 重要的数据结构——页表

为了能知道进程的每个页面在内存中存放的位置,操作系统要为每个进程建立一张页表
在这里插入图片描述

M号内存块的起始地址就是M*内存块


为什么每个页表项的长度是相同的,页号是“隐含”的?
在这里插入图片描述
在这里插入图片描述

1.7 知识回顾与重要考点

在这里插入图片描述

2. 基本地址变换机构

在这里插入图片描述
重点理解、记忆基本地址变换机构(用于实现逻辑地址到物理地址转换的一组硬件机构)的原理和流程。


基本地址变换机构可以借助进程的页表将逻辑地址转换为物理地址。
通常会在系统中设置一个页表寄存器(PTR),存放页表在内存中的起始地址F页表长度M。进程未执行时,页表的始址和页表长度放在进程控制块(PCB)中,当进程被调度时,操作系统内核会把它们放到页表寄存器中。

注意:页面大小是2的整数幂


重要)设页面大小为L,逻辑地址A到物理地址E的变换过程如下:
①计算页号Р和页内偏移量w(如果用十进制数手算,则P=A/L,W=A%L;但是在计算机实际运行时,逻辑地址结构是固定不变的,因此计算机硬件可以更快地得到二进制表示的页号、页内偏移量)
②比较页号p和页表长度M,若P>=M,则产生越界中断,否则继续执行。(注意:页号是从O开始的,而页表长度至少是1,因此P=M时也会越界)
③页表中页号P对应的页表项地址=页表起始地址F+页号P*页表项长度,取出该页表项内容b,即为内存块号。(注意区分页表项长度、页表长度、页面大小的区别页表长度指的是这个页表中总共有几个页表项,即总共有几个页;页表项长度指的是每个页表项占多大的存储空间;页面大小指的是一个页面占多大的存储空间)
④计算E= b*L+w,用得到的物理地址E去访存。(如果内存块号、页面偏移量是用二进制表示的,那么把二者拼接起来就是最终的物理地址了)

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


在这里插入图片描述


2.1 例题

在这里插入图片描述

2.2 对页表项大小的进一步探究

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

2.3总结

在这里插入图片描述

3. 具有快表的地址变换机构

在这里插入图片描述

3.1局部性原理

在这里插入图片描述
在这里插入图片描述
时间局部性:如果执行了程序中的某条指令,那么不久后这条指令很有可能再次执行;如果某个数据被访问过,不久之后该数据很可能再次被访问。(因为程序中存在大量的循环)
空间局部性:一旦程序访问了某个存储单元,在不久之后,其附近的存储单元也很有可能被访问。(因为很多数据在内存中都是连续存放的)

上小节介绍的基本地址变换机构中,每次要访问一个逻辑地址,都需要查询内存中的页表。由于局部性原理,可能连续很多次查到的都是同一个页表项。既然如此,能否利用这个特性减少访问页表的次数呢?

3.2 什么是快表(TLB)?

快表,又称联想寄存器(TLB, translation lookaside buffer ),是一种访问速度比内存快很多的高速缓存(TLB不是内存!),用来存放最近访问的页表项的副本,可以加速地址变换的速度。与此对应,内存中的页表常称为慢表
在这里插入图片描述
在这里插入图片描述

3.2 引入快表后,地址的变换过程

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

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

③ 如果没有找到匹配的页号,则需要访问内存中的页表,找到对应页表项,得到页面存放的内存块号,再将内存块号与页内偏移量拼接形成物理地址,最后,访问该物理地址对应的内存单元。因此,若快表未命中,则访问某个逻辑地址需要两次访存(注意:在找到页表项后,应同时将其存入快表,以便后面可能的再次访问。但若快表已满,则必须按照一定的算法对旧的页表项进行替换)

由于查询快表的速度比查询页表的速度快很多,因此只要快表命中,就可以节省很多时间。因为局部性原理,一般来说快表的命中率可以达到 90% 以上。


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

有的系统支持快表和慢表同时查找,如果是这样,平均耗时应该是 (1+100) * 0.9 + (100+100) * 0.1 =110.9 us

若未采用快表机制,则访问一个逻辑地址需要 100+100 = 200us
显然,引入快表机制后,访问一个逻辑地址的速度快多了。
在这里插入图片描述

3.3 思考:能否把整个页表都放在TLB中?

在这里插入图片描述

3.4总结

在这里插入图片描述

4. 两级页表

在这里插入图片描述

4.1 单级页表存在的问题

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

4.2 如何解决单级页表的问题?

问题一:页表必须连续存放,因此当页表很大时,需要占用很多个连续的页框
问题二:没有必要让整个页表常驻内存,因为进程在一段时间内可能只需要访问某几个特定的页面。在这里插入图片描述

把页表再分页并离散存储,然后再建立一张页表记录页表各个部分的存放位置,称为页目录表,或称外层页表,或称顶层页表

4.3 两级页表的原理、地址结构

32位逻辑地址空间,页表项大小为4B,页面大小为 4KB,则页内地址占12位
在这里插入图片描述
在这里插入图片描述

4.4 如何实现地址变换

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

4.5 如何解决单级页表的问题?

在这里插入图片描述

4.6 需要注意的几个细节

  1. 若分为两级页表后,页表依然很长,则可以采用更多级页表,一般来说各级页表的大小不能超过一个页面
    例:某系统按字节编址,采用 40 位逻辑地址,页面大小为 4KB,页表项大小为 4B,假设采用纯页式存储,则要采用()级页表,页内偏移量为()位?
    在这里插入图片描述

4.7 知识回顾与重要考点

在这里插入图片描述

5. 基本分段存储管理方式

在这里插入图片描述

5.1 分段

进程的地址空间:按照程序自身的逻辑关系划分为若干个段,每个段都有一个段名(在低级语言中,程序员使用段名来编程),每段从0开始编址
内存分配规则:以段为单位进行分配,每个段在内存中占据连续空间,但各段之间可以不相邻
在这里插入图片描述


分段系统的逻辑地址结构由段号(段名)和段内地址(段内偏移量)所组成。如:
在这里插入图片描述


问题:程序分多个段,各段离散地装入内存,为了保证程序能正常运行,就必须能从物理内存中找到各个逻辑段的存放位置。为此,需为每个进程建立一张段映射表,简称“段表”。在这里插入图片描述

5.2 地址变换

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

在这里插入图片描述

5.3 分段、分页管理的对比

信息的物理单位。分页的主要目的是为了实现离散分配,提高内存利用率。分页仅仅是系统管理上的需要,完全是系统行为,对用户是不可见的
信息的逻辑单位。分段的主要目的是更好地满足用户需求。一个段通常包含着一组属于一个逻辑模块的信息。分段对用户是可见的,用户编程时需要显式地给出段名。
页的大小固定且由系统决定。段的长度却不固定,决定于用户编写的程序。

分页的用户进程地址空间是一维的,程序员只需给出一个记忆符即可表示一个地址。

分段的用户进程地址空间是二维的,程序员在标识一个地址时,既要给出段名,也要给出段内地址。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
页是信息的物理单位。分页的主要目的是为了实现离散分配,提高内存利用率。分页仅仅是系统管理上的需要,完全是系统行为,对用户是不可见的。

段是信息的逻辑单位。分页的主要目的是更好地满足用户需求。一个段通常包含着一组属于一个逻辑模块的信息。分段对用户是可见的,用户编程时需要显式地给出段名。

页的大小固定且由系统决定。段的长度却不固定,决定于用户编写的程序。
分页的用户进程地址空间是一维的,程序员只需给出一个记忆符即可表示一个地址。
分段的用户进程地址空间是二维的,程序员在标识一个地址时,既要给出段名,也要给出段内地址。
分段比分页更容易实现信息的共享和保护。不能被修改的代码称为纯代码或可重入代码(不属于临界资源),这样的代码是可以共享的。可修改的代码是不能共享的

访问一个逻辑地址需要几次访存?
分页(单级页表):第一次访存——查内存中的页表,第二次访存——访问目标内存单元。总共两次访存

分段:第一次访存——查内存中的段表,第二次访存——访问目标内存单元。总共两次访存

与分页系统类似,分段系统中也可以引入快表机构,将近期访问过的段表项放到快表中,这样可以少一次访问,加快地址变换速度

5.3 总结

在这里插入图片描述

6. 段页式管理方式

在这里插入图片描述

6.1分页、分段的优缺点分析

在这里插入图片描述
分段管理中产生的外部碎片也可以用“紧凑”来解决,只是需要付出较大的时间代价

6.2 分段+分页=段页式管理

在这里插入图片描述

6.3 段页式管理的逻辑地址结构

分段系统的逻辑地址结构由段号和段内地址(段内偏移量)组成。如:
在这里插入图片描述
在这里插入图片描述

6.4 段表,页表

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

总结

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/114413.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

node.js+uni计算机毕设项目购物小程序(程序+小程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程。欢迎交流 项目运行 环境配置: Node.js Vscode Mysql5.7 HBuilderXNavicat11VueExpress。 项目技术: Express框架 Node.js Vue 等等组成,B/S模式 Vscode管理前后端分离等…

不写一行代码(一):实现安卓基于GPIO的LED设备驱动

文章目录系列文章一、前言二、准备工作2.1 内核版本2.2 内核文档:bindings->leds2.3 文档解析: leds-gpio.txt三、编写DTS3.1 查原理图,挑选GPIO3.2 编写DTS文件四、编译测试4.1 编译dt.img4.2 烧录dt.img五、基于fs的测试5.1 测试命令5.2…

第二十五章 数论——约数

第二十五章 数论——约数一、什么是约数二、约数的求解——试除法1、问题2、思路分析3、代码实现三、约数个数1、问题描述2、算法思路3、代码实现四、约数之和1、问题描述2、算法思路3、代码实现五、最大公约数——欧几里德算法1、问题描述2、算法思路(1&#xff09…

前端实现文件上传(点击+拖拽)

一、简介 之前在Vue项目中使用过element的上传组件,实现了点击上传拖拽上传的两种上传功能。然后我就在想是否可以通过原生的htmljs来实现文件的点击上传和拖拽上传,说干就干。 首先是点击获取上传文件自然没的说,只需要借助input标签即可&a…

Java面试题(六)RabbitMQ常见面试题

RabbitMQ常见面试题RabbitMQ架构设计RabbitMQ有哪些优点RabbitMQ事物机制RabbitMQ持久化机制持久化和非持久化什么时候需要持久化?落盘过程文件删除RabbitMQ如何保证消息不丢失RabbitMQ如何保证消息不被重复消费RabbitMQ死信队列,延时队列死信队列延时队…

如何使用 ChatGPT 进行教学,教师可以利用 ChatGPT 的 5 种方式

我们听说过很多关于学生如何使用 ChatGPT 撰写论文和布置家庭作业的信息。 我们一直在讨论围绕这个问题的担忧,并争先恐后地为 ChatGPT 寻找 AI 检测工具,据传 OpenAI 也在致力于此。 但是关于教师如何将 ChatGPT 用于他们自己的工作的讨论并不多。 在从教师的角度对 Chat…

20221222 Coppeliasim的视频导出功能

Video exporter CoppeliaSim的视频记录器可以对the page, scene hierarchy and model browser areas进行录屏,保存成视频文件。Dialogs, menu bar, toolbars and popup menus (对话框、菜单栏、工具栏和弹出菜单)不会被录进去. 默认情况下&am…

【C++11】包装器

目录 1.function包装器 1.1什么是函数包装器(function)&#xff1f; 1.2为啥使用函数包装器(function)&#xff1f; 2.bind包装器 2.1绑定普通函数和调整传参顺序 2.2绑定类成员函数 1.function包装器 头文件#include<functional> 1.1什么是函数包装器(function)&a…

2022年终总结

不知不觉就到了年末&#xff0c;感叹时间过的真快。 我自己坚持写了七年多的博客&#xff0c;但这其实是我第一次去写年终总结。也不知道怎么写&#xff0c;就简单聊聊。 写博客的初衷就是个人收获&#xff0c;学习的记录&#xff0c;分享出来如果能帮到别人那就更好了。毕竟…

(一)LTspice简介2

文章目录前言一、LTspice的仿真过程二、spice的模型三、LTspice的工具栏和快捷键四、LTspice中的数量级前言 上一节我们学习了LTspice的安装&#xff0c;很简单&#xff0c;无脑安装 &#xff08;一&#xff09;LTspice安装 这一节我们继续学习LTspice的简介&#xff0c;主要包…

题:A-B 数对(二分)

A-B 数对 - 洛谷 题目背景 出题是一件痛苦的事情&#xff01; 相同的题目看多了也会有审美疲劳&#xff0c;于是我舍弃了大家所熟悉的 AB Problem&#xff0c;改用 A-B 了哈哈&#xff01; 题目描述 给出一串正整数数列以及一个正整数 CC&#xff0c;要求计算出所有满足 A…

通过Wireshark分析Apache服务器的SSL协议工作过程

文章目录一、实验环境二、为Apache服务器启用SSL1.获取SSL证书2.修改httpd.conf配置文件3.修改httpd-ssl.conf配置文件4.启动Apache服务三、SSL/TLS工作过程分析一、实验环境 操作系统&#xff1a;macOS Ventura 13.0.1 Apache&#xff1a;Apache/2.4.54 (Unix)&#xff0c;此…

喜提JDK的BUG一枚、多线程的情况下请谨慎使用这个类的stream遍历。

前段时间在 RocketMQ 的 ISSUE 里面冲浪的时候&#xff0c;看到一个 pr&#xff0c;虽说是在 RocketMQ 的地盘上发现的&#xff0c;但是这个玩意吧&#xff0c;其实和 RocketMQ 没有任何关系。 纯纯的就是 JDK 的一个 BUG。 我先问你一个问题&#xff1a;LinkedBlockingQueue…

vue3 antd table表格的样式修改(二)利用rowClassName给table添加行样式

vue3 antd项目实战——修改ant design vue组件中table表格的默认样式&#xff08;二&#xff09;知识调用场景复现修改table表格的行样式一、rowClassName添加行样式二、表格的不可控操作写在最后知识调用 文章中可能会用到的知识链接vue3ant design vuets实战【ant-design-vu…

Autosar MCAL-SPI配置及使用

文章目录前言SPI协议基础Autosar SPI专有名词SpiDriverSpiChannelSpiChannelIdSpiChannelTypeSpiDataWidthSpiDefaultDataSpiEbMaxLengthSpiIbNBuffersSpiTransferStartSpiExternalDeviceSpiBaudrateSpiAutoCalcBaudParamsSpiCsIdentifierSpiCsPolaritySpiCsSelectionSpiDataSh…

前端工程师可以分成 4 种,你属于哪一种?

在这篇文章中&#xff0c;探讨四种常见的前端工程&#xff0c;1&#xff09;产品工程师&#xff0c;2&#xff09;UI 基建工程师&#xff0c;3&#xff09;设计师&#xff0c;4&#xff09;工具基建工程师&#xff0c;你属于哪一种&#xff1f; 产品工程师 产品工程师负责公司…

6.s081 学习实验记录(二)xv6 and unix utilities

文章目录一、boot xv6二、sleep三、pingpong四、primes五、find六、xargs该实验主要用来熟悉xv6以及其系统调用 一、boot xv6 实验目的&#xff1a; 启动xv6系统&#xff0c;并使用提供的命令ls&#xff0c;列出系统所有的文件ctrl p&#xff0c;打印当前运行的进程ctrl a…

Ubuntu22.04使用kubeadm安装k8s 1.26版本高可用集群

目录阿里云ACK集群的架构ACK实例的创建过程如下安装前的准备主机规划基线准备所有k8s master、worker节点安装kubeadmkubectlkubelet创建集群负载均衡器HAproxy安装keepalived 和haproxy配置haproxy配置keepalivedkubeadm部署第一台master节点Calico网络组件一键安装安装完成阿…

mPEG-Biotin,甲氧基-聚乙二醇-生物素科研实验用试剂

​​ 英文名称&#xff1a;mPEG-Biotin 中文名称&#xff1a;甲氧基-聚乙二醇-生物素 mPEG生物素可通过与链霉亲和素和抗生物素结合进行聚乙二醇化&#xff0c;具有高亲和力和特异性。生物素通过稳定的酰胺连接物与线性PEG结合。 提示&#xff1a;避免频繁的溶解和冻干&…

node.js+uni计算机毕设项目基于微信的同学会小程序(程序+小程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程。欢迎交流 项目运行 环境配置&#xff1a; Node.js Vscode Mysql5.7 HBuilderXNavicat11VueExpress。 项目技术&#xff1a; Express框架 Node.js Vue 等等组成&#xff0c;B/S模式 Vscode管理前后端分离等…