《计算机操作系统》(第4版)第4章 存储器管理 复习笔记

news2024/9/23 16:15:32

4 

一、存储器的层次结构

1. 多层结构的存储器系统

如图4-1所示,在存储层次中越往上,存储介质的访问速度越快,价格也越高,相对存储容量也越小。

图4-1 计算机系统存储层次示意

2.三级存储系统

(1)Cache- 主存存储体系

目的:弥补主存速度的不足。 (2)主存-辅存存储体系

目的:弥补主存容量的不足。

二、程序的装入和链接

在多道程序环境下,要使程序运行,必须先将它装入内存,然后再将其变为一个可以执行的程序,通常都要 经过以下几个步骤:编译、链接和装入。图4-2显示出了三步过程。

图4- 2 对用户程序的处理步骤

1. 程序的装入

程序的装入指的是由装入程序将装入模块装入内存,有以下三种方式:

(1)绝对装入方式。

(2)可重定位装入方式。

(3)动态运行时的装入方式。

【说明】动态运行装入需要一个重定位寄存器的支持。

2. 程序的链接

(1)静态链接方式。

(2)装入时动态链接。

(3)运行时动态链接。

三、连续分配存储管理方式

1. 单一连续分配

2. 固定分区分配

(1)划分分区的方法

 分区大小相等。

②分区大小不等。

(2)内部碎片

程序小于固定分区大小时,也会占用一个完整的分区空间,此时分区内部就存在空间浪费,称为内部碎片。

3. 动态分区分配

(1)动态分区分配又称为可变分区分配,它是根据进程的实际需要,动态地为之分配内存空间。

(2)回收内存时可能的情况;

①回收区与插入点的前一个空闲分区F 相邻接,见图4-3(a)。此时应将回收区与插入点的前一分区合并, 不必为回收分区分配新表项,而只需修改其前一分区F₁ 的大小。

②回收分区与插入点的后一空闲分区F 相邻接,见图4-3(b)。此时也可将两分区合并,形成新的空闲分区, 但用回收区的首址作为新空闲区的首址,大小为两者之和。

③回收区同时与插入点的前、后两个分区邻接,见图4-3(c)。此时将三个分区合并,使用F 的表项和F 的首址,取消F₂ 的表项,大小为三者之和。

图4-3 内存回收时的情况

④回收区既不与F₁ 邻接,又不与F₂ 邻接。这时应为回收区单独建立一个新表项,填写回收区的首址和大小, 并根据其首址插入到空闲链中的适当位置。

4. 基于顺序搜索的动态分区分配算法

(1)顺序搜索的定义

顺序搜索是指依次搜索空闲分区链上的空闲分区,去寻找一个大小能满足要求的分区。

(2)基于顺序搜索的动态分区算法的分类

①首次适应(first fit,FF)算法。

②循环首次适应(next fit,NF)算法。

③最佳适应 (best fit,BF)算法。

④最坏适应 (worst fit,WF) 算法。

【说明】其中,首次适应算法是最简单、最好最快的算法。

5. 基于索引搜索的动态分区分配算法

(1)快速适应算法。

(2)伙伴系统。

(3)哈希算法。

6. 逻辑地址空间与物理地址空间

(1)编译后,每个目标模块都从0号单元开始编址,这称为该目标模块的相对地址(逻辑地址)。

(2)链接程序依次按照各个模块的相对地址构成统一的从0号单元开始编址的逻辑地址空间。

(3)物理地址空间是指内存中物理单元的集合。

(4)通过地址转换将逻辑地址转换为物理地址的过程称为地址重定位。

四、对换(交换)和覆盖

1. 覆盖的基本思想

将用户空间分成一个固定区和若干覆盖区。将经常活跃的部分放在固定区,其余部分按调用关系分段。首先 将即将访问的段调入覆盖区,其他段存于外存。在需要时,系统将其调入覆盖区,覆盖原有段。

2 . 对换

(1)换入

把准备好竞争CPU 运行的程序从辅存移到内存的过程称为换入。

(2)换出

把处于阻塞状态的程序从内存移到辅存的过程称为换出。

3.对换与覆盖的区别

(1)覆盖用于同一个作业或进程中。

(2)交换用于不同的作业或进程中。

五、分页存储管理方式

1.分页存储管理的基本方法

(1)页面和物理块 ①页面

分页存储管理是将一个进程的逻辑地址空间分成若干个大小相等的片,称为页面或页。

②物理块

把内存空间分成与页面相同大小的若干个存储块,称为(物理)块或页框。 (2)地址结构

分页地址中的地址结构如下:

前一部分为页号P,   后一部分为位(偏)移量W,   即页内地址。图中的地址长度为32位,其中0~11位为 页内地址,即每页的大小为4KB;1231  位为页号,地址空间最多允许有1M  

(3)页表

系统为每个进程建立了一张页表。如图4-4所示。页表的作用是实现从页号到物理块号的地址映射。

图4-4 页表的作用

2. 地址变换机构

(1)地址变换机构的基本任务

借助页表,将逻辑地址中的页号转换为内存中的物理块号。

(2)基本的地址变换机构

页表的功能可以由一组专门的寄存器来实现。图4-5显示出了分页系统的地址变换机构。

图4-5 分页系统的地址变换机构

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

①快表 (TLB)  是一个具有并行查寻能力的特殊高速缓冲寄存器,又称为“联想寄存器”。

②增加快表原因:页表是存放在内存中的,则CPU 每存取一个数据时,都要两次访问内存。为了提高地址 变换速度,增设快表。

【说明】两次访存指:第一次访问内存得到物理地址;第二次根据物理地址访问对应的内存单元。

TLB 中用于存放当前访问的若干页表项。 

图4-6显示了具有快表的地址变换机构。

图4-6 具有快表的地址变换机构 【说明】读者应能清晰描述出地址变换的过程,这是重要考点。

3. 访问内存的有效时间

(1)定义

从进程发出指定逻辑地址的访问请求,经过地址变换,到在内存中找到对应的实际物理地址单元并取出数据, 所花费的总时间,称为内存的有效访问时间 (EAT)。

(2)基本分页管理的有效时间

假设访问一次内存的时间为t,在基本分页存储管理方式中,存取一条指令或一个数据至少需要两次访存。 则EAT=t+t=2t。

(3)引入快表管理的有效时间

①命中率是指使用快表并在其中成功查找到所需页面的表项的比率。

②在引入快表的分页存储管理方式中,有效访问时间的计算公式即为: EAT=axλ+(t+λ)(1-a)+t=2t+λ-txa

上式中,λ表示查找快表所需要的时间,a  表示命中率,t   表示访问一次内存所需要的时间。

【说明】快表的有效性基于局部性原理。

4. 两级和多级页表

(1)两级页表

两级页表的逻辑地址结构如图4-7所示。

图4- 7 两级页表结构

(2)多级页表

①建立多级页表的目的是建立索引,不用浪费主存空间去存储无用的页表项。

②顶级页表最多只能有1个页面。 

【说明】页式地址空间是一维的。

六、分段存储管理方式

1. 分段存储管理方式的引入

分段管理方式满足了方便编程、信息共享、信息保护、动态增长、动态链接的需要。

2.分段系统的基本原理

(1)分段

在分段存储管理方式中,作业的地址空间被划分为若干个段。逻辑地址由段号和段内地址所组成。

图4-8 分段系统中的逻辑地址结构

(2)段表

①每个段在表中占有一个表项,其中记录了该段在内存中的起始地址(又称为“基址”)和段的长度,如图 4-9所示。

②段表可以存放在一组寄存器中,这样有利于提高地址转换速度,但更常见的是将段表放在内存中。

③段表用于实现从逻辑段到物理内存区的映射。

图4-9 利用段表实现地址映射

(3)地址变换机构

①在进行地址变换时,系统将逻辑地址中的段号S 与段表长度TL 进行比较 a.  S>TL, 表示段号太大,是访问越界,于是产生越界中断信号。

b. 若未越界,则根据段表的始址和该段的段号,计算出该段对应段表项的位置,从中读出该段在内存的起 始地址。

②检查段内地址d 是否超过该段的段长SL

a.   若超过,即d>SL,   同样发出越界中断信号。

b. 若未越界,则将该段的基址d 与段内地址相加,即可得到要访问的内存物理地址。图4-10显示了分段系 统的地址变换过程。

图4-10 分段系统的地址变换过程

【说明】段式地址空间是二维的。

3. 段页式存储管理方式

(1)分页、分段式存储管理方式的优点

①分页式存储管理方式以页面作为内存分配的基本单位,能有效地提高内存利用率。

②分段式存储管理以段作为内存分配的基本单位,能够更好地满足用户多方面的需要。

(2)段页式存储管理方式的基本原理

①段页式系统的基本原理是分段和分页原理的结合

即先将用户程序分成若干个段,再把每个段分成若干个页,并为每一个段赋予一个段名。图4-11 (a)     了一个作业地址空间的结构。该作业有三个段:主程序段、子程序段和数据段;页面大小为4KB。在段页式系 统中,其地址结构由段号、段内页号及页内地址三部分所组成,如图4-11 (b)   所示。

图4-11 作业地址空间和地址结构

②段页式系统利用段表和页表实现地址映射

图4-12示出了利用段表和页表进行从用户地址空间到物理(内存)空间的映射。

图4-12 利用段表和页表实现地址映射

【注意】段页式存储管理下,在一个进程中,段表只有一个,页表可能有多个。

(4)地址变换过程

①地址变换机构

a.  进行地址变换时,首先利用段号S,   将它与段长 TL 进行比较。

b. S<TL, 表示未越界,于是利用段表始址和段号来求出该段所对应的段表项在段表中的位置,从中得 到该段的页表始址。

c. 并利用逻辑地址中的段内页号P 来获得对应页的页表项位置,从中读出该页所在的物理块号b,  再利用 块号b 和页内地址来构成物理地址。图4-13示出了段页式系统中的地址变换机构。

图4-13 段页式系统中的地址变换机构

②内存访问过程

在段页式系统中,为了获得一条指令或数据,需三次访问内存:

a. 访问内存中的段表,从中取得页表始址;

b.  访问内存中的页表,从中取出该页所在的物理块号,并将该块号与页内地址一起形成指令或数据的物理 地址;

c.  从第二次访问所得的地址中取出指令或数据。

③在段页式系统中也可增设高速缓冲寄存器 (Cache),   以提高平均访问速度。

【说明】段页式地址空间是二维的。

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

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

相关文章

数据结构——算法和算法分析

目录 算法和算法分析 算法 算法设计的要求 算法效率的度量 算法的存储空间需求 算法和算法分析 算法 算法是对特定问题求解步骤的一种描述&#xff0c;它是指令的有限序列&#xff0c;其中每一条指令表示一个或多个操作。 一个算法具有下列5个重要的特性&#xff1a; &…

轻松实现微服务间的无缝通信:OpenFeign入门指南

OpenFeign 前言1、导入依赖2、开启feign调用3、编写OpenFeign客户端4、Fegin接口实现5、Feign接口调用 前言 Spring Cloud OpenFeign是一种基于Spring Cloud的声明式REST客户端&#xff0c;它简化了与HTTP服务交互的过程。它将REST客户端的定义转化为Java接口&#xff0c;并且…

餐厅点餐系统

TOC springboot0742餐厅点餐系统 系统概述 进过系统的分析后&#xff0c;就开始记性系统的设计&#xff0c;系统设计包含总体设计和详细设计。总体设计只是一个大体的设计&#xff0c;经过了总体设计&#xff0c;我们能够划分出系统的一些东西&#xff0c;例如文件、文档、数…

知乎信息流广告推广开户需要什么资质?

知乎作为中国领先的问答社区&#xff0c;凭借其高质量的内容和庞大的用户群体&#xff0c;成为了众多品牌青睐的营销阵地&#xff0c;云衔科技助力企业高效实现知乎广告开户及代运营服务。 一、知乎信息流广告推广开户资质要求 为了在知乎平台上投放信息流广告&#xff0c;企…

供应链系统源码的关键技术是什么?

供应链管理是企业运营中的重要环节&#xff0c;而高效的供应链系统能够大幅提升企业的竞争力。在数字化转型的过程中&#xff0c;越来越多的企业选择使用开源供应链系统源码来定制开发适合自身需求的解决方案。那么&#xff0c;供应链系统源码的关键技术有哪些&#xff1f;本文…

如何分析C语言中的声明

声明是C语言中一个非常基础但重要的部分&#xff0c;无论是阅读他人的代码&#xff0c;还是排查编译报错&#xff0c;正确理解声明都会对我们有莫大的帮助。 有的人可能会说声明不是很简单吗&#xff1f; 小A说&#xff0c;看&#xff0c;我声明了一个整型变量&#xff1a; i…

htsjdk SamReader接口介绍

SamReader 是 htsjdk 库中的一个接口,用于读取和解析 SAM(Sequence Alignment/Map)和 BAM(Binary Alignment/Map)格式的文件。htsjdk 是一个广泛使用的 Java 库,提供了处理高通量测序数据的工具,SamReader 是其中的一个核心接口。 SamReader 接口介绍 SamReader 主要用…

也开发一点自己的agent框架

换了一份工作&#xff0c;抽空写一篇文章。 前面说自己看了ja-netfilter&#xff0c;这个作者肯定是个厉害的人&#xff0c;但是在项目工程化方面&#xff0c;做出来的东西未必好用是真的&#xff0c;不是diss别人&#xff0c;而是他的插件接口还是指令集的。说实话&#xff0c…

TCP BBR 数学模型完整版

今天顺带加入了 bbr 的所有状态和所有流程&#xff0c;获得以下的方程组&#xff1a; C Bltbw&#xff0c;R RtProp&#xff0c;T_r ProbeRTT 周期&#xff0c;g1 Startup gain&#xff0c;g2 ProbeBW gain。设 x estimated bandwidth&#xff0c;r round trip time&am…

【STM32】C语言基础补充

学习过程中发现自己好些需要用到的C语言语法、特征都不太熟练了&#xff0c;特意记录一下&#xff0c;免得忘记了&#xff0c;以后遇到了新的也会继续更新 目录 1 全局变量 2 结构体 3 静态变量 4 memset()函数 5 使用8位的存储器存16位的数 1 全局变量…

vue3 Props的用法(父传子)

在 Vue 3 中&#xff0c;Props&#xff08;属性&#xff09;用于在组件之间传递数据。 Props的作用 传参&#xff1a;Props 允许父组件向子组件传递数据。类型检查&#xff1a;Vue 允许在定义 Props 时指定数据的类型&#xff0c;这有助于在开发过程中进行类型检查&#xff0…

Nextjs(App Router) 开发记录

最近业余在开发一款智能助理产品&#xff0c;记录开发过程中的一些问题以备忘&#xff0c;也是帮其他人防坑。 主要技术栈 本项目采用了前沿的技术栈来构建一个高性能且可维护的应用。选择了 Nx 作为构建管理和单一代码库解决方案&#xff0c;通过模块化和插件系统来扩展和优…

开源的个人独立博客Moments社交优化项目源码

开源的个人独立博客Moments社交优化项目源码&#xff0c;为你提供了一个与关注的博客作者和读者互动的全新方式&#xff0c;让你的博客体验更加丰富和充实。 Moments的核心目标是通过整合各种订阅源&#xff0c;如RSS和Atom&#xff0c;将你感兴趣的博客转化为一个个人朋友圈。…

日志排查——linux

目录 介绍步骤 介绍 /var/log/wtmp&#xff1a;记录登录进入、退出、数据交换、关机和重启&#xff0c;即last。 /var/log/cron&#xff1a;记录与定时任务相关的日志信息。 /var/log/messages&#xff1a;记录系统启动后的信息和错误日志。 /var/log/apache2/access.log&a…

你不知道的console方法

JavaScript为我们提供了一个内置的调试工具&#xff0c;即控制台(console)&#xff0c;使开发人员能够测试、调试和与他们的网页进行交互。JavaScript的控制台对象中有几种可用的方法&#xff0c;每种方法都有不同的用途。本文将讨论这些方法&#xff0c;并提供它们的使用示例。…

计算机毕业设计 学院网站 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试

&#x1f34a;作者&#xff1a;计算机编程-吉哥 &#x1f34a;简介&#xff1a;专业从事JavaWeb程序开发&#xff0c;微信小程序开发&#xff0c;定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事&#xff0c;生活就是快乐的。 &#x1f34a;心愿&#xff1a;点…

Linux中解决 zfs 安装后无法加载和使用,报错类似如下:modprobe: FATAL: Module zfs not found.

Linux中解决 zfs 安装后无法加载和使用&#xff0c;报错类似如下&#xff1a;modprobe: FATAL: Module zfs not found. # modprobe zfs modprobe: FATAL: Module zfs not found.解决办法&#xff1a; yum remove zfs spl kmod-zfs -yyum update -y --skip-brokenos_v$(cat /et…

文献翻译什么软件好?文献翻译全文软件推荐这5个

处暑已过&#xff0c;秋风渐起&#xff0c;知识的田野也迎来了收获的季节。在学术研究的旅途中&#xff0c;我们常常需要跨越语言的界限&#xff0c;探寻远方的智慧。 每当面对厚重的外文文献&#xff0c;应该如何快速准确地转化为可读的中文呢&#xff1f;其实只要选择一款高…

加速指南:如何使用Kimi提升论文写作效率?

在学术研究领域&#xff0c;撰写论文是一项基础且关键的任务&#xff0c;它要求作者不仅要有扎实的专业知识&#xff0c;还要具备高效的信息处理能力和清晰的表达技巧。学术写作是一个复杂的过程&#xff0c;涉及多个阶段&#xff1a;从选题、资料搜集、论文结构设计&#xff0…

STM32(五):定时器——输出比较

定时器输出比较功能&#xff1a;输出PWM波形 OC&#xff08;Output Compare&#xff09;输出比较 输出比较可以通过比较CNT与CCR寄存器值的关系&#xff0c;来对输出电平进行置1、置0或翻转的操作&#xff0c;用于输出一定频率和占空比的PWM波形。 每个高级定时器和通用定时器…