OS复习笔记ch7-2
页式管理
学过计组的同学都了解一点页式管理,就是将内存划分成较小的、大小固定的、等大的块。现在OS引入了进程的概念,那么为了匹配内存的分块,同样把进程也划分成同样大小的块。
这里区分两个概念
- The chunks of a process are called pages→进程划分的块称为页
- The chunks of memory are called frames/ page frames→内存划分的块叫做页框(物理页面、页帧)
从语义去分析页和页框的区别和联系,把进程加载到内存,相当于把页放到页框中
在组原的课程当中我们知道逻辑地址包括页号和页内偏移量,有以下两个基本公式:
- 页号=逻辑地址/页面大小
- 偏移量=逻辑地址%页面大小
看一下这个例子

按照我们之前的分区和分页的概念,假设用户空间大小是2700B,访问地址是十进制的1502。按照分区的思想如图a所示访问,按照分页思想如图b所示。
一般来说,页面大小都是2的整数次幂,可以直接通过位运算得到结果。比如,页大小是1K = 2^10,那么偏移量 = 逻辑地址%页面大小 ,也就是逻辑地址后10位,前面的6位就是页号。
下标从0开始,所以page1是从上往下数第二个页面,即从1024开始到2047结束,然后偏移量offset=478是针对于1024的基地址的相对位移。
最后我们可以看到,图b在最下面有一段内部碎片,就是page2中不会使用到的区域,但是为了分页必须要分配。
分页的特点
- 没有外碎片,每个内碎片不超过页大小
- 一个程序不必连续存放(支持虚拟存储)
- 便于改变程序占用空间的大小
- 简单分页,程序全部装入内存
- 不易实现共享
- 不便于动态连接
页表
为了便于管理进程,操作系统为每个进程维护一张页表,包含进程的每个页面所对应的页框位置(号),即逻辑地址和物理地址的映射关系。

如图所示,OS给A、C、D进程分配了页框,其中A是连续的0-3,而C是连续的7-10,D比较特殊是4-6+11-12,空闲13-14。由于会出现像D这种分配的页框不连续的情况,所以就必须使用页表专门记录。
接下来说一下,地址映射关系和存储保护机制

如图所示,页表开始地址b放在页表始址寄存器,类似于基址寄存器。页表长度l放在页表长度寄存器,防止地址越界。
根据图示,地址映射关系可以按以下步骤描述:
第一步:比较运算
- 将逻辑地址对应的页号
p与l进行比较(比较条件为P >= l),这决定了数据流向哪个分支,如果为真则地址越界抛出异常,反之进行下一步。
第二步:加法运算 - 页表始址
b和页号p通过b+p*页表项长度查询页表,得到的结果p'就是所在页框的物理起始地址。
第三步:输出映射 - 在右侧分支,
p'和d直接结合作为输出,得到真实的物理地址。
注:之所以p=l也被视为是地址越界,因为我们的下标默认都是从0开始,所以页号最大是l-1,等于l也是非法的,实际写过代码的同学会比较熟悉。
段式管理
类似进程的管理,我们的程序在逻辑上也可以分开,也就是我们常说的分段管理,比如代码段、数据段等。段式管理中一般段长可变,但是有最大段长。
段式地址有两个部分构成,和页式管理类似
- a segment number 段号
- an offset 段内偏移量

回到我们之前看的这个例子,如图c采用段式存储,每一个段长度不一,偏移量指的是相对于每个段的起始地址。
接下来我们了解一下段式存储的内存划分和分配:

- 内存划分:内存空间被动态的划分为若干个长度不相同的区域,这些区域被称为物理段,每个物理段由起始地址和长度确定
- 内存分配:以段为单位分配内存,每一个段在内存中占据连续空间,但各段之间可以不连续存放
分析:
- 没有内碎片,外碎片可以通过内存压缩来消除
- 一个程序不必连续存放(支持虚拟存储)
- 便于改变进程占用空间的大小
- 便于存储保护、共享
- 简单分段,进程全部装入内存
注:存储保护和共享我们下一章节会详细来说
段表
与页式管理类似,段式管理也有段表,不过由于每个段的长度不同,所以段表长度寄存器的值不是唯一的。
- 进程段表:描述组成进程地址空间的各段,可以是指向系统段表中表项的索引。每段有段基址(base address)和段长度
- 系统段表:系统内所有占用段,包含始值、段长等
- 空闲段表:内存中所有空闲段,可以结合到系统段表中
段式管理内存的分配算法:首次适配、下次适配、最佳适配等,即动态分区。

具体流程如下:
- 输入逻辑地址:逻辑地址部分由段号
S和段内地址d组成。 - 地址越界检查:通过段号S和Cl的比较,判断地址越界,方法同页式管理
- 查找段表:通过
Cb+S*段表项长度查找段号找到对应的段基地址b和段长l。 - 地址越界检查:将
d与l比较,确保d小于l,即段内偏移小于段长。 - 计算物理地址:如果
d在范围内,计算物理地址b + d。
注:由于段长是不固定的,所以在计算得到物理地址之前会进行第二次检查地址越界
页式管理和段式管理的比较
- 分页是出于系统管理的需要,分段是出于用户应用的需要。
一条指令或一个操作数可能会跨越两个页的分界处,而不会跨越两个段的分界处。 - 页大小是系统固定的,而段大小则通常不固定。
- 逻辑地址表示:
分页是一维的,各个模块在链接时必须组织成同一个地址空间;
分段是二维的,各个模块在链接时可以每个段组织成一个地址空间。
通常段比页大,因而段表比页表短,可以缩短查找时间,提高访问速度。

注:这里的一维和二维是根据程序员编程的角度分析,由于页的大小是固定的,所以给出一个逻辑地址OS就可以直接对应到物理地址,但是段的大小不一,就必须给定段名和段内地址,类似于基址变址寻址。
相关文章:
OS复习笔记ch7-2
页式管理 学过计组的同学都了解一点页式管理,就是将内存划分成较小的、大小固定的、等大的块。现在OS引入了进程的概念,那么为了匹配内存的分块,同样把进程也划分成同样大小的块。 这里区分两个概念 The chunks of a process are called p…...
4.通用编程概念
目录 一、变量与常量1.1 变量1.2 常量 二、遮蔽三、数据类型3.1 标量类型1. 整型2. 浮点型3. 布尔类型4.字符类型 3.2 复合类型1. 元组2. 数组 四、函数五、语句和表达式六、函数的返回值 一、变量与常量 1.1 变量 在Rust中默认的变量是不可变的,如果修改其值会导致…...
iBeacon赋能AR导航:室内定位技术的原理与优势
室内定位导航对于大型商场、机场、医院等复杂室内环境至关重要,它帮助人们快速找到目的地,提高空间利用率。AR技术通过将虚拟信息叠加在现实世界,提供直观导航指引,正在成为室内导航的新趋势,增强用户互动体验…...
【sklearn】【逻辑回归1】
学习笔记来自: 所用的库和版本大家参考: Python 3.7.1Scikit-learn 0.20.1 Numpy 1.15.4, Pandas 0.23.4, Matplotlib 3.0.2, SciPy 1.1.0 1 概述 1.1 名为“回归”的分类器 在过去的四周中,我们接触了不少带“回归”二字的算法…...
java(kotlin)和 python 通过DoubleCloud的kafka进行线程间通信
进入 DoubleCloud https://www.double.cloud 创建一个kafka 1 选择语言 2 运行curl 的url命令启动一个topic 3 生成对应语言的token 4 复制3中的配置文件到本地,命名为client.properties 5 复制客户端代码 对python和java客户端代码进行了重写,java改成…...
vivado DIAGRAM、HW_AXI
图表 描述 块设计(.bd)是在IP中创建的互连IP核的复杂系统 Vivado设计套件的集成商。Vivado IP集成器可让您创建复杂的 通过实例化和互连Vivado IP目录中的IP进行系统设计。一块 设计是一种分层设计,可以写入磁盘上的文件(.bd&…...
学习分享-为什么把后台的用户验证和认证逻辑放到网关
将后台的用户验证和认证逻辑放到网关(API Gateway)中是一种常见的设计模式,这种做法在微服务架构和现代应用中有许多优势和理由: 1. 集中管理认证和授权 统一的安全策略 在一个包含多个微服务的系统中,如果每个服务…...
27 ssh+scp+nfs+yum进阶
ssh远程管理 ssh是一种安全通道协议,用来实现字符界面的远程登录。远程复制,远程文本传输。 ssh对通信双方的数据进行了加密。 用户名和密码登录 密钥对认证方式(可以实现免密登录) ssh 22 网络层 传输层 数据传输的过程中是…...
LabVIEW液压伺服压力机控制系统与控制频率选择
液压伺服压力机的控制频率是一个重要的参数,它直接影响系统的响应速度、稳定性和控制精度。具体选择的控制频率取决于多种因素,包括系统的动态特性、控制目标、硬件性能以及应用场景。以下是一些常见的指导原则和考量因素: 常见的控制频率范…...
阿里云(域名解析) certbot 证书配置
1、安装 certbot ubuntu 系统: sudo apt install certbot 2、申请certbot 域名证书,如申请二级域名aa.example.com 的ssl证书,同时需要让 bb.aa.example.com 也可以使用此证书 1、命令:sudo certbot certonly -d “域名” -d “…...
Web LLM 攻击技术
概述 在ChatGPT问世以来,我也尝试挖掘过ChatGPT的漏洞,不过仅仅发现过一些小问题:无法显示xml的bug和错误信息泄露,虽然也挖到过一些开源LLM的漏洞,比如前段时间发现的Jan的漏洞,但是不得不说传统漏洞越来…...
Java等待异步线程池跑完再执行指定方法的三种方式(condition、CountDownLatch、CyclicBarrier)
Java等待异步线程池跑完再执行指定方法的三种方式(condition、CountDownLatch、CyclicBarrier) Async如何使用 使用Async标注在方法上,可以使该方法异步的调用执行。而所有异步方法的实际执行是交给TaskExecutor的。 1.启动类添加EnableAsync注解 2. 方法上添加A…...
秒杀优化+秒杀安全
1.Redis预减库存 1.OrderServiceImpl.java 问题分析 2.具体实现 SeckillController.java 1.实现InitializingBean接口的afterPropertiesSet方法,在bean初始化之后将库存信息加载到Redis /*** 系统初始化,将秒杀商品库存加载到redis中** throws Excepti…...
48、Flink 的 Data Source API 详解
a)概述 本节将描述 FLIP-27 中引入的新 Source API 的主要接口。 b)Source Source API 是一个工厂模式的接口,用于创建以下组件。 Split EnumeratorSource ReaderSplit SerializerEnumerator Checkpoint Serializer 此外,Sou…...
深入解析Java扩展机制:SPI与Spring.factories
目录 Java SPI概述 1.1 什么是SPI?1.2 SPI的工作原理1.3 SPI的优缺点 SPI的应用 2.1 Java标准库中的SPI应用2.2 自定义SPI示例 Spring.factories概述 3.1 什么是spring.factories?3.2 spring.factories的工作原理3.3 spring.factories的优缺点 spring.f…...
Vue2之模板语法
文章目录 1.模板语法1.1 插值语法{{}}可以写什么1.2 指令语法1.2.1 指令概述1.2.2 v-bind指令1.2.3 v-model指令 1.模板语法 1.1 插值语法{{}}可以写什么 (1)在data中声明的 (2)常量 (3)合法的JavaScript…...
java基础练习题
1、一个".java"源文件中是否可以包括多个类?有什么限制? 可以包含多个类。但是只有一个类可以声明为public,且要求声明为public的类的类名与源文件名相同。 2、java的优势? a、跨平台性 b、安全性高 c、简单性 d、…...
unity中通过实现底层接口实现非按钮(图片)的事件监听
编写监听脚本 PEListenter 继承自MonoBehaviour类,并实现了IPointerDownHandler、IPointerUpHandler和IDragHandler接口,按照需求定义需要接收事件(鼠标按下、抬起、拖拽)的回调函数 //监听类(需要挂载在物体上面&am…...
重庆耶非凡科技有限公司的选品师项目加盟靠谱吗?
在当今电子商务的浪潮中,选品师的角色愈发重要。而重庆耶非凡科技有限公司以其独特的选品师项目,在行业内引起了广泛关注。对于想要加盟该项目的人来说,项目的靠谱性无疑是首要考虑的问题。 首先,我们来看看耶非凡科技有限公司的背…...
《青少年编程与数学》课程方案:4、课程策略
《青少年编程与数学》课程方案:4、课程策略 一、工程师思维二、使命感驱动三、价值观引领四、学习现代化五、工作生活化六、与时代共进 《青少年编程与数学》课程策略强调采用工程师思维,避免重复造轮子,培养使命感,通过探索兴趣、…...
RK3568 NPU RKNN(五):RKNN-ToolKit2性能与内存评估实战解析
1. 环境准备与工具链搭建 在开始RKNN-ToolKit2的性能与内存评估之前,我们需要先搭建完整的开发环境。这里以野火LubanCat开发板为例,具体硬件配置为RK3568芯片4GB内存版本。开发主机建议使用Ubuntu 20.04系统,确保Python版本在3.6-3.8之间。 …...
泰克TBS2000示波器保存功能全攻略:从U盘插入到图片导出(附最佳格式选择)
泰克TBS2000示波器高效保存指南:从硬件操作到专业文档整合 在电子工程实验室的日常工作中,波形数据的保存与共享是每个工程师都会遇到的高频需求。传统用手机拍摄屏幕的方式不仅画质堪忧,还常常因为反光、角度偏差导致关键参数无法辨识。泰克…...
英雄联盟智能工具League Akari:提升游戏体验的终极指南
英雄联盟智能工具League Akari:提升游戏体验的终极指南 【免费下载链接】League-Toolkit 兴趣使然的、简单易用的英雄联盟工具集。支持战绩查询、自动秒选等功能。基于 LCU API。 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit League Akari是…...
酷狗音乐API实战指南:解决音乐应用开发的三大核心痛点
酷狗音乐API实战指南:解决音乐应用开发的三大核心痛点 【免费下载链接】KuGouMusicApi 酷狗音乐 Node.js API service 项目地址: https://gitcode.com/gh_mirrors/ku/KuGouMusicApi 在构建现代音乐应用时,开发者常常面临歌词同步不精准、API接口分…...
OpenClaw+GLM-4.7-Flash:个人博客内容自动生成与发布
OpenClawGLM-4.7-Flash:个人博客内容自动生成与发布 1. 为什么选择这个技术组合 去年夏天,我发现自己陷入了写作瓶颈——每周要产出3篇技术博客,但80%的时间都消耗在资料收集和格式调整上。直到发现OpenClawGLM-4.7-Flash这个组合ÿ…...
Python农业物联网部署突然中断?揭秘土壤传感器数据丢包率超37%的底层时钟漂移根源(附校准代码)
第一章:Python农业物联网部署在现代农业数字化转型中,Python凭借其丰富的物联网生态库(如paho-mqtt、Adafruit-IO、RPi.GPIO)和轻量级运行特性,成为边缘设备与云平台协同的核心语言。本章聚焦于基于树莓派的土壤温湿度…...
从Address Editor入手:在Block Design中精准调整Bram存储深度的实战解析
1. 当Bram存储深度无法修改时,你该怎么做? 第一次在Vivado中使用Block Design搭建系统时,很多人都会遇到一个奇怪的现象:明明在Bram IP核的参数设置界面看到了"Depth"这个选项,但无论如何点击都无法修改。这…...
51单片机定时器初值计算与Proteus仿真
51单片机定时器初值计算方法详解1. 定时器基础原理1.1 单片机定时器工作模式51系列单片机内置的定时器/计数器模块是嵌入式系统中实现精确时间控制的核心部件。定时器本质上是一个特殊功能的寄存器,通过累加时钟脉冲实现计时功能。根据位数不同,51单片机…...
JavaWeb Listener 监听器详解:三大域对象监听 + 在线人数统计实战
前言Listener(监听器)是 JavaWeb 三大组件最后一个,专门用于监听 Web 域对象的创建、销毁、属性变化,在事件触发时自动执行逻辑。它是基于观察者模式实现,常用于:服务器初始化、在线用户统计、Session 监听…...
3个步骤玩转虚拟手柄模拟:ViGEmBus驱动从入门到精通
3个步骤玩转虚拟手柄模拟:ViGEmBus驱动从入门到精通 【免费下载链接】ViGEmBus Windows kernel-mode driver emulating well-known USB game controllers. 项目地址: https://gitcode.com/gh_mirrors/vi/ViGEmBus Windows虚拟手柄驱动技术为游戏玩家和开发者…...
