OS复习笔记ch7-2

页式管理

学过计组的同学都了解一点页式管理,就是将内存划分成较小的、大小固定的、等大的块。现在OS引入了进程的概念,那么为了匹配内存的分块,同样把进程也划分成同样大小的块。

这里区分两个概念

  • The chunks of a process are called pages→进程划分的块称为页
  • The chunks of memory are called frames/ page frames→内存划分的块叫做页框(物理页面、页帧)

从语义去分析页和页框的区别和联系,我们可以记住下面这句话:
把进程加载到内存,相当于把页放到页框中

然后在组原的课程当中我们知道了有以下两个基本公式:

  • 页号=逻辑地址/页面大小
  • 偏移量=逻辑地址%页面大小
    看一下这个例子
    image.png
    按照我们之前的分区和分页的概念,假设用户空间大小是2700B,我们的访问地址是十进制的1502。如果是按照分区的思想,就是如图a所示访问,按照分页思想如图b所示。

一般来说,我们的页面大小都是2的整数次幂,可以直接通过位运算得到想要的结果。比如,页大小是1K = 2^10,那么offset = 逻辑地址%页面大小,也就是逻辑地址后10位,前面的6位就是页号。
下标从0开始,所以page1是从上往下数第二个页面,即从1024开始到2047结束,然后offset=478是针对于1024的基地址的相对位移。

最后我们可以看到,在最下面有一段内部碎片,就是page2中不会使用到的区域,但是为了分页必须要分配。

分页的特点

  • 没有外碎片,每个内碎片不超过页大小
  • 一个程序不必连续存放(支持虚拟存储
  • 便于改变程序占用空间的大小
  • 简单分页,程序全部装入内存
  • 不易实现共享
  • 不便于动态连接

为了便于管理进程,操作系统为每个进程维护一张页表,包含进程的每个页面所对应的页框位置(号),逻辑地址包括页号和页内偏移量。
image.png
如图所示,主存中给A、C、D进程分配了页框,其中A是连续的0-3,而C是连续的7-10,D比较特殊是4-6,11-12,空闲13-14。对于每一个进程的页表,D中存放页表就是不连续的,所以需要在页表中记录。

接下来说一下,地址映射关系
image.png

页表开始地址b放在页表始址寄存器,类似于基址寄存器
页表长度l放在页表长度寄存器,记录了页表内访问的边界值,防止地址越界。
根据图示,地址映射关系可以按以下步骤描述:
第一步:比较运算

  • 将逻辑地址对应的页号p与 l 进行比较(比较条件为 P >= l),这决定了数据流向哪个分支,如果为真则地址越界抛出异常,反之进行下一步。
    第二步:加法运算
  • 页表始址 b 和页号 p 通过b+p*页表项长度查询页表,得到的结果p'就是所在页框的物理起始地址。
    第三步:输出映射
  • 在右侧分支,p'd 直接结合作为输出,得到真实的物理地址。

段式管理

类似进程的管理,我们的程序在逻辑上也可以分开,也就是我们常说的分段管理,比如代码段、数据段等,段式管理中一般段长可变,但是有最大段长。
段氏地址有两个部分构成,和页式管理类似

  • a segment number 段号
  • an offset 段内偏移量
    image.png
    回到我们之前看的这个例子,段式存储中由于每一个段长度不一,所以需要记录

接下来我们了解一下段式存储的内存划分和分配:

  • 内存划分:内存空间被动态的划分为若干个长度不相同的区域,这些区域被称为物理段,每个物理段由起始地址和长度确定
  • 内存分配:以段为单位分配内存,每一个段在内存中占据连续空间,但各段之间可以不连续存放

image.png
如图所示,每一个段都有对应的长度和基址,对应不同的内存空间,可以发现物理存储是不连续的。

分析:

  • 没有内碎片,外碎片可以通过内存压缩来消除
  • 一个程序不必连续存放(支持虚拟存储)
  • 便于改变进程占用空间的大小
  • 便于存储保护、共享
  • 简单分段,进程全部装入内存

存储保护:在段式管理中,每个段都有其自己的保护属性,例如读/写权限和执行权限。这样的属性设置可以防止一个程序的错误操作影响到其他程序的段,从而提高了系统的稳定性和安全性。此外,由于每个段都是独立的,一个段中的错误,如数组越界,不会影响到其他段。这种隔离减少了单一错误导致的整体系统崩溃的风险。
共享:在多任务环境中,多个进程常常需要执行相同的代码,如操作系统的系统调用或标准库函数。通过段式管理,多个进程可以共享同一个代码段,而无需在每个进程的地址空间中复制这些代码,从而节省了大量的内存空间。此外,段式管理允许不同的进程共享特定的数据段。例如,多个进程可以共享对同一配置文件或数据库的访问。这不仅提高了内存的利用率,也方便了进程间的数据交流

与页式管理类似,段式管理也有段表

  • 进程段表:描述组成进程地址空间的各段,可以是指向系统段表中表项的索引。每段有段基址(base address)和段长度
  • 系统段表:系统内所有占用段,包含始值、段长等
  • 空闲段表:内存中所有空闲段,可以结合到系统段表中
    段式管理内存的分配算法:首次适配;下次适配、最佳适配等

image.png

具体流程如下:

  • 输入逻辑地址:逻辑地址部分由段号 S 和段内地址 d 组成。
  • 地址越界检查:通过段号S和Cl的比较,判断地址越界同页式管理
  • 查找段表:通过Cb+S*段表项长度查找段号找到对应的段基地址 b 和段长 l
  • 地址越界检查:将 dl 比较,确保 d 没有超出 l
  • 计算物理地址:如果 d 在范围内,计算物理地址 b + d
    注:由于段长是不固定的,所以在计算得到物理地址之前会进行第二次检查地址越界

页式管理和段式管理的比较

  • 分页是出于系统管理的需要,分段是出于用户应用的需要。
    一条指令或一个操作数可能会跨越两个页的分界处,而不会跨越两个段的分界处。
  • 页大小是系统固定的,而段大小则通常不固定。
  • 逻辑地址表示:
    分页是一维的,各个模块在链接时必须组织成同一个地址空间;
    分段是二维的,各个模块在链接时可以每个段组织成一个地址空间。
    通常段比页大,因而段表比页表短,可以缩短查找时间,提高访问速度。

image.png

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

MFC 教程-回车时窗口退出问题

【问题描述】 MFC窗口默认时,按回车窗口会退出 【原因分析】 默认调用OnOK() 【解决办法】 重写虚函PreTranslateMessage BOOL CTESTMFCDlg::PreTranslateMessage(MSG* pMsg) {// TODO: 在此添加专用代码和/或调用基类// 修改回车键的操作反应 if (pMsg->…

Coolmuster iOS 数据擦除:隐私保护的终极方案

手机和平板电脑是我们不可或缺的伙伴,它们存储着我们的照片、联系人、私人消息以及工作文件。然而,当这些设备需要更换或者出售时,如何确保存储在其中的数据不被他人恢复和滥用,成为了一个严峻的问题。Coolmuster iOS 数据擦除&am…

MP-SPDZ的学习与运用

目录 MP-SPDZ 的介绍主要功能典型应用场景 MP-SPDZ 的安装实验环境准备环境安装MP-SPDZ 下载和编译 MP-SPDZ 的使用测试程序第三方求和三方计算测试冒泡排序比较运算函数语法详解——Sint语法详解——Array基于AES电路实现OPRFORAM隐私集合求交实现两台虚拟机之间进行MPC简单实…

(一文读懂)大模型到底是怎么生成文字的?

前言 在人工智能的领域,大模型在去年已经成为了一个热门的话题。 各大厂商如谷歌、微软、OpenAI等,都在积极研发和应用大模型技术。 这些模型在语言理解、图像识别、推荐系统等方面都表现出了惊人的能力,甚至在某些任务上,已经…

响应式网站设计:为何成为首选及其优点

随着近 35 亿万人使用不同的设备访问互联网,响应性网站的设计变得越来越重要。大多数网站的宽度 720 到 1,000 像素间。假如网站访问者的显示器设置为 800 像素或更大且页面宽度超过 720 像素,那么必须向右滚动屏幕来显示所有的信息。目前的问题是不清楚…

Java(十)——内部类

文章目录 内部类静态内部类实例内部类匿名内部类局部内部类 内部类 Java内部类是一种特殊的类定义方式,它允许在一个类的内部定义另一个类。 内部类可以访问其所在外部类的成员变量和成员方法,这使得它非常适用于封装与外部类紧密相关的私有逻辑。 内…

深入理解API:数据的桥梁与门户

API(应用程序编程接口)在现代软件开发和数据处理中扮演着至关重要的角色。它不仅是数据交换的桥梁,更是不同系统、平台和应用程序之间的门户。深入理解API的功能、原理和应用,对于开发者、企业和数据科学家来说都是至关重要的。 A…

【python深度学习】——torch.einsum|torch.bmm

【python深度学习】——torch.einsum|torch.bmm 1. 基本用法与示例2. torch.bmm 1. 基本用法与示例 基本用法: torch.einsum(equation, *operands)equation: 一个字符串,定义了张量操作的模式。 使用逗号来分隔输入张量的索引,然后是一个箭头&#xff…

8259A芯片

目录 硬件结构 引脚图 引脚功能 内部结构 连接微处理器 芯片编程 相关硬件 工作流程 初始化命令字编程 操作命令字编程 相关硬件 工作方式 硬件结构 引脚图 多个芯片可通过接入IR7引脚实现级联。 引脚功能 INT引脚会接入CPU的INTR引脚(可屏蔽引脚) 1.处于非缓冲方式…

基于阿里云服务网格流量泳道的全链路流量管理(三):无侵入式的宽松模式泳道

作者:尹航 在前文《基于阿里云服务网格流量泳道的全链路流量管理(一):严格模式流量泳道》、《基于阿里云服务网格流量泳道的全链路流量管理(二):宽松模式流量泳道》中,我们介绍了流…

FastDFS分布式文件系统

一、概述 FastDFS是一款由国人余庆开发的轻量级开源分布式文件系统,它对文件进行管理,功能包括:文件存储、文件同步、文件访问(文件上传、文件下载)等,主要解决大容量文件存储和高并发访问问题&#xff0c…

佛教祭拜小程序-寺庙小程序-纪念馆小程序

大家好,我是程序员小孟。 现在有很多的产品或者工具都开始信息话了,寺庙或者佛教也需要小程序吗? 当然了! 前面我们还开发了很多寺庙相关的小程序,都有相关的介绍: 1,优质的寺庙小程序-H5寺庙网页 今天…

文献解读-肿瘤测序-第五期|《局部晚期或转移性儿童及青少年分化型甲状腺癌的基因特征与临床特征及131I疗效的关系》

关键词:应用遗传流行病学;群体测序;肿瘤测序; 文献简介 标题(英文):The relationship between genetic characteristics and clinical characteristics and the efficacy of 131I therapy in c…

Ktor库的高级用法:代理服务器与JSON处理

在现代网络编程中,Ktor是一个高性能且易于使用的框架,它提供了对异步编程、WebSockets、HTTP客户端和服务器等特性的原生支持。Ktor是使用Kotlin语言编写的,充分利用了Kotlin的协程特性来简化异步编程。本文将深入探讨Ktor库的高级用法&#…

Doris Connector 结合 Flink CDC 实现 MySQL 分库分表

1. 概述 在实际业务系统中为了解决单表数据量大带来的各种问题,我们通常采用分库分表的方式对库表进行拆分,以达到提高系统的吞吐量。 但是这样给后面数据分析带来了麻烦,这个时候我们通常试将业务数据库的分库分表同步到数据仓库时&#x…

如何让委外加工管理更轻松?

中小制造企业,受制于场地、资金、环保、质量、交期等等因素影响,在生产制造过程中,多数会将一些生产工序或者在制品外发给其他制造工厂进行委外加工生产。随着各地监管部门对环境、能耗管控力度的加大,这种情况在机加工行业尤为突…

【笔记】基于差分法的白噪声道路模型

理论如下: 式(13-7)中等式左边的路面位移随时间的导数可用差分法近似,即 整理可得 代码如下: C级路面 clc clear close all%% 参数定义 dt=0.01;%仿真间隔时间 t_end=10;%仿真总时长 t=0:dt:t_end; n00=0.011;%下截止频率 u=60;%车速,km/h u=u/3.6;%车速转化为m/s f0=2* …

SmartEDA:革新电子教学,引领未来工程师的启航之旅

在数字化浪潮席卷而来的今天,电子教学已成为教育领域的一股强劲风潮。SmartEDA,作为一款前沿的电子教学辅助工具,正以其独特的魅力,助力学校电子教学的蓬勃发展,打造未来工程师的摇篮。 SmartEDA凭借其智能化的特点&a…

运行软件缺失vcruntime140.dll怎么办?vcruntime140.dll缺失的详细解决方法分享

vcruntime140.dll 是一个动态链接库文件,它是 Microsoft Visual C Redistributable Package 的一部分,为使用 Visual C 编译器开发的应用程序提供必要的运行时环境。该文件包含了大量应用程序运行时需要调用的库函数,这些函数是实现 C 标准库…

1.计算机系统概述

1.计算机系统概述 1.1计算机系统层次结构 第1级是微程序机器层 第2级是传统机器语言层 第3级是操作系统层:向上提供广义指令 第4级是汇编语言层 第5级是高级语言层 1、2层是硬件,3-5层是软件。 没有配备软件的纯硬件系统称为裸机,第3-5…