【OS】操作系统课程笔记 第七章 内存管理

news2024/11/16 9:47:54

目录

7.1 内存管理的功能

7.1.1 内存分配

7.1.2 地址转换

1. 空间的概念

 2. 地址转换

7.1.3 存储保护

7.1.4 存储共享

7.1.5 存储扩充

7.2 程序的链接和加载

7.2.1 程序的链接

链接的分类

7.2.2 程序的加载

1. 加载器的功能

2. 装入方式分类

7.3 连续分配方式

7.3.1 单一连续分配

7.3.2 固定分区分配

1. 特点

2. 划分固定分区的两种方法

3. 内存管理

4. 分配策略

7.3.3 动态分区分配

1. 特点

2. 内存管理

3. 分配策略

首次适应算法

下次适应算法

最佳适应算法

最坏适应算法

7.3.4 可重定位分区分配

1. 内存紧凑

2. 重定位

7.3.5 交换和覆盖

7.4 基本分页分配方式

7.4.1 页面与页表

1. 页面相关概念

2. 页表文件

3. 地址结构

4. 逻辑地址分析

7.4.2 地址变换机构

1. 基本地址变换的步骤

2. 分页存储管理造成的资源消耗

3. 快表

4. 多级页表

例题1

例题2

7.5 基本分段分配方式

7.5.1 段表

1. 分段管理逻辑地址结构

2. 段表

7.5.2 地址变换机构

7.5.3 共享与保护

分页与分段的区别

课后测习题解析


7.1 内存管理的功能

7.1.1 内存分配

内存分配的3种基本形式:

  • 直接指定:编写程序时确定地址
  • 静态分配:程序装入内存时确定地址
  • 动态分配:程序执行时确定地址

7.1.2 地址转换

1. 空间的概念

地址空间:程序编译后,设置其地址从0开始,称为逻辑地址,逻辑地址的集合为地址空间

存储空间:程序在主存中的实际位置称为物理地址,物理地址的集合为存储空间

对于地址空间和存储空间,有2点需要注意:

  1. 地址空间的大小由计算机体系结构决定,如16位的机器,地址范围则为 0 ~ 64K ;
  2. 存储空间是指能够访问的主存的范围,大小由计算机的内存来决定。

例题:在一台电脑上安装了32位的操作系统,配置1GB的内存,问物理地址和逻辑地址最大分别是多少?

答:物理地址最大是2^30,逻辑地址最大是2^32。

 2. 地址转换

地址转换是作业逻辑地址到物理地址的转换,又称为重定位

7.1.3 存储保护

地址保护:一个进程不能转移到另一个进程地址上去执行。

权限保护:对于不同的进程有不同的存取权限,确保不能越权执行/访问。

7.1.4 存储共享

若多进程执行同一个程序,有两种考虑:

  1. 允许每个进程访问该程序的同一个副本;
  2. 让每个进程有自己单独的副本。

7.1.5 存储扩充

请求调入功能:把程序的一部分装入内存,使其先运行,在运行的过程中随时请求操作系统把需要的部分调入内存。

置换功能:把不需要的部分换出主存,以装载需要的部分。

7.2 程序的链接和加载

记住四个步骤:编译、链接、加载、运行;

链接后形成逻辑地址,加载后形成物理地址

7.2.1 程序的链接

链接:由链接程序将编译后形成的一组目标模块和所需的库函数链接在一起,形成一个完整的装入模块。

链接的分类

  • 静态链接:在程序运行前就链接好,以后不再拆开;
  • 装入时动态链接:装入内存时边装入边链接;
  • 运行时动态链接:把某些外部模块的链接推迟到需要该模块时。这样可以更容易地并入已改变或已升级的目标模块,动态链接文件为自动代码共享提供了条件。

7.2.2 程序的加载

1. 加载器的功能

加载器的功能就是给程序的指令和数据分配物理地址,所以加载又称为装入,加载器又称为装入程序。

加载可以在程序生命周期的不同时刻发生,包括程序的开发、编译、加载和运行:

2. 装入方式分类

  • 绝对装入方式:直接根据目标代码地址装入内存,不用修改;
  • 可重定位方式:在加载时进行静态重定位,也就是进行了修改,使得物理地址不等于逻辑地址;
  • 动态运行时装入方式:目标模块装入内存后,地址仍然是相对地址,把相对地址转换为物理地址这个操作推迟到程序真正执行时才进行。

7.3 连续分配方式

连续分配就是为一个用户程序划分连续的内存空间。

7.3.1 单一连续分配

将内存分为两部分即可,因为单一连续分配只能运行一个用户程序:

7.3.2 固定分区分配

1. 特点

  • 操作系统初始化时把内存空间划分为多个分区;
  • 运行时不改变分区大小和数量;

2. 划分固定分区的两种方法

  1. 分区大小相同,所有分区大小相等;
  2. 分区大小不同,但是运行过程中大小不能改变;

3. 内存管理

使用内存分配表来表示,例如:

分区号

起始地址(K)

大小(KB)

状态

进程名

1

100

100

已分配

P2

2

200

200

已分配

P8

3

400

300

未分配

4

700

100

已分配

P12

 这样做的优点是简单,缺点是内存利用率不高

4. 分配策略

如果有多个输入队列,则为每个队列分配一个分区;如果只有单个输入队列,就为这个队列中的各个进程分配不同的分区。

7.3.3 动态分区分配

1. 特点

  • 事先不划定分区大小;
  • 根据进程大小动态分配内存空间;

一般会提供一个申请和释放的活动队列,顺着队列进行动态分配即可。

2. 内存管理

有两种形式,空闲分区表和空闲分区链,一般用的是表。

空闲分区表的格式如下:

起始地址大小
…………

对于首次适应算法,空闲分区表从上到下应当按照空闲分区的起始地址从小到大填入;

对于最佳适应算法,则应当按照空闲分区的大小从小到大依次填入。

3. 分配策略

首次适应算法

算是这几个里面性能最好的了,找到第一个能放下的空闲分区就直接放进去:

下次适应算法

又叫循环首次适应算法,每次在上一次放进的空闲分区的下一个分区开始查找放得下的分区,查找到最后一个完后回到开头继续找,所以叫循环,如下:

最佳适应算法

每次寻找和进程大小最相近且放得下进程的空闲分区:

最坏适应算法

和最佳相反,每次把进程放到可以放得下的最大的空闲分区里:

7.3.4 可重定位分区分配

1. 内存紧凑

将离散的分区合并成一个大分区:

2. 重定位

7.3.5 交换和覆盖

交换:把内存中暂时不用的程序和数据换出到外存,以释放内存空间,当换到外存的数再次使用时,再把它们换入内存,主要用于用户管理。

覆盖:将程序划分成若干个功能相对独立的程序段,按照其自身的逻辑结构将那些不会同时执行的程序段共享同一块内存区域,主要用于系统本身。

7.4 基本分页分配方式

分区分配主要的缺点是:

  • 会产生很多碎片;
  • 要求一段较大并且连续的空间。

7.4.1 页面与页表

1. 页面相关概念

  • 块:内存划分大小相同连续的部分;
  • 页:作业逻辑地址划分成一系列相同大小部分;
  • 为作业分配内存时,一块存放一页;
  • 一般来说,用户作业不可能是页的整数倍,所以在最后的页中可能产生 “内碎片” ,也就是不可再利用的短小内存。

2. 页表文件

3. 地址结构

4. 逻辑地址分析

7.4.2 地址变换机构

1. 基本地址变换的步骤

  1. 知道页面大小
  2. 知道页表
  3. 分离出页号和页内偏移量
  4. 根据页号从页表中取出块号(若没有对应的块号,则记为越界
  5. 合成物理地址,逻辑地址是几进制,物理地址也要是几进制

2. 分页存储管理造成的资源消耗

  • 内存资源:页表需要保存在内存中,占用内存资源;
  • 运行性能:获取指令的过程中需要多次访问内存,一级分页管理中每次取指需要访问内存2次。(第一次是访问内存中的页表,第二次是访问内存中指令的物理地址)

3. 快表

用来保存正在运行进程的页表的子集,便于快速对表进行地址转换。

4. 多级页表

以二级页表为例,逻辑地址包括:外层页号、内层页号和页内偏移量。

例题1

页面大小为4KB,一个块号需要4B。

思路为:

页数 = 文件大小 x 页面大小
页表文件大小 = 页数 x 一个块号所需内存
页表文件页数 = 页表文件大小 / 页面大小 (向上取整)

例题2

1)页的大小是4KB,页表最大占4MB。

2)因为每页占用的空间为4K = 1000H,而且页表中的物理地址是连续的,所以物理地址3为0090 1000H

因为代码段长度是8KB,从第一题中可以看出,一页是4KB,所以代码占两页;

将代码段的起始逻辑地址 0000 8000H 转换为二进制,即为:

0000 0000 0000 0000 1000 0000 0000 0000H

根据题目,后12位为偏移量,则代码段对应的两个页号为 0000 0008H 和 0000 0009H, 

所以8号页就是1号块,9号页就是2号块,

8号页表项物理地址 = 0020 0000H + 8 * 4 = 0020 0020H

9号页表项物理地址 = 0020 0000H + 9 * 4 = 0020 0024H

块号代表真正的物理地址,而一页是4KB,12位,

已知块号1的物理地址是 0090 0000H,因此块号1 = 00900H,块号2 = 00901H

7.5 基本分段分配方式

7.5.1 段表

1. 分段管理逻辑地址结构

段号段内地址

两者都是用来判断是否越界的。 

2. 段表

7.5.2 地址变换机构

7.5.3 共享与保护

分页与分段的区别

  1. 面向的对象:页是信息的物理单位,是面向系统的;段是信息的逻辑单位,是面向用户的;
  2. 大小:页的大小是固定的;段的长度是不固定的;
  3. 地址维数:分页的地址空间是一维的;分段的空间是二维的;
  4. 碎片:页存在内碎片;段存在外碎片;
固定式分区内碎片不可再用
可变式分区外碎片可以再用

课后测习题解析

链接后形成逻辑地址;

编译后形成物理地址。

 

因为是分区,所以其实就是隔离不同的内存区域,隔离就有边界,因此称为界地址保护。

 

分页系统的页面是为操作系统所感知的,分段系统的程序段是为用户所感知的。

 

3次,第一次是根据逻辑地址查询外页表,第二次是根据外页表查询内页表,第三次是根据内页表查询物理地址。

 

 由于页的大小为2^10B,逻辑地址空间大小为2^16B,所以逻辑地址空间实际上为2^26B,因此逻辑地址是26位的;

由页的大小为2^10B,可知页内偏移量为10;

由于页表项的大小为2B,所以每页可以容纳2^9个页号,因此页号长度为9;

因此页目录号长度为7,可以容纳2^7 = 128个表项。

 

动态重定位是给可以动态分配内存的存储管理方案使用的,易知可变分区、页式和段式都是动态分配内存的,所以固定分区不能用动态重定位。

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

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

相关文章

CentOS 7镜像下载;VMware安装CentOS 7;解决新安装的虚拟机没有网络,无法ping通网络的问题

CentOS 7镜像下载;VMware安装CentOS 8.5;解决新安装的虚拟机没有网络,无法ping通网络的问题 CentOS 8.5镜像下载VMware安装CentOS 7解决新安装的虚拟机没有网络,无法ping通网络的问题写入配置文件 CentOS 8.5镜像下载 阿里提供的…

排序 算法(第4版)

本博客参考算法(第4版):算法(第4版) - LeetBook - 力扣(LeetCode)全球极客挚爱的技术成长平台 本文用Java实现相关算法。 我们关注的主要对象是重新排列数组元素的算法,其中每个元素…

NSSCTF题库——web

[SWPUCTF 2021 新生赛]gift_F12 f12后ctrlf找到flag [SWPUCTF 2021 新生赛]jicao——json_decode() 加密后的格式 $json {"a":"php","b":"mysql","c":3}; json必须双引号传输 构造:GET里json{"x"…

【JUC】三、集合的线程安全

文章目录 1、ArrayList集合线程安全问题分析2、解决方式一:Vector或synchronizedList( )3、解决方式二:CopyOnWriteArrayList 写时复制4、HashSet集合线程不安全的分析与解决5、HashMap集合线程不安全的分析与解决 1、ArrayList集合线程安全问题分析 对…

TLP超线程技术

在实现IPL指令级并行的同时实现TLP(Thread Level Parallelism)线程级并行实现多线程有两种主要的方法超线程即同时多线程,在单个处理器或单个核中设置了两套线程状态部件,共享高速缓存和功能部件当两个线程同时需要某个资源时,其中一个线程必…

VuePress介绍及使用指南

VuePress是一个基于Vue.js的静态网站生成工具,它专注于以Markdown为中心的项目文档。VuePress具有简单易用的特性,同时提供了强大的自定义和扩展性。在本文中,我们将介绍VuePress的基本概念,并提供一个简单的使用指南。 什么是Vue…

【C语言】

C语言 1. C语言基础1.1 数据类型和占位符1.2 异或1.3 关键字1.4 const1.5 extern1.6 typedef1.7 static1.8 左值和右值1.9 位进行操作赋值 2. C指针3. 二维数组和指针4. 函数传递二维数组4.1 形参给出第二维的长度。4.2 形参声明为指向数组的指针。4.3 形参声明为指针的指针。 …

快速掌握队列的基础知识

目录 队列的特点基于链表实现队列用栈实现队列用队列实现栈 队列是一种线性数据结构,它只允许在一边进行插入操作(队尾),另一边进行删除操作(队头)。插入操作称为入队,删除操作称为出队。队列遵…

【网络奇缘】我和英特网再续前缘

🌈个人主页: Aileen_0v0🔥系列专栏: 一见倾心,再见倾城 --- 计算机网络~💫个人格言:"没有罗马,那就自己创造罗马~" 目录 计算机网络的概念 计算机网络的功能 ⭐1.数据通信 ⭐2.资源共享 ⭐3.分布式处理 ⭐4.提高可靠性 ⭐…

Java17新增特性

前言 前面的文章,我们对Java9、Java10、Java11、Java12 、Java13、Java14、Java15、Java16 的特性进行了介绍,对应的文章如下 Java9新增特性 Java10新增特性 Java11新增特性 Java12新增特性 Java13新增特性 Java14新增特性 Java15新增特性 Java16新增特…

Eclipse打包Springboot项目

首先&#xff0c;在pom.xml文件中添加配置&#xff0c;修改mainClass主函数&#xff1a; <build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configurat…

【电路笔记】-戴维南定理(Thevenin‘s Theorem)

戴维南定理&#xff08;Thevenin’s Theorem&#xff09; 文章目录 戴维南定理&#xff08;Thevenins Theorem&#xff09;1、概述与定义2、戴维南模型确定3、一些线性电路的戴维南模型3.1 单电压源3.2 单电流源3.3 多电流/电压源 4、结论 在本文中&#xff0c;我们将介绍一种强…

LLaMA模型之中文词表的蜕变

在目前的开源模型中&#xff0c;LLaMA模型无疑是一颗闪亮的⭐️&#xff0c;但是相对于ChatGLM、BaiChuan等国产大模型&#xff0c;其对于中文的支持能力不是很理想。原版LLaMA模型的词表大小是32K&#xff0c;中文所占token是几百个左右&#xff0c;这将会导致中文的编解码效率…

Python---综合案例:通讯录管理系统---涉及点:列表、字典、死循环

需求&#xff1a; 开个一个通讯录的管理系统&#xff0c;主要用于实现存储班级中同学的信息&#xff08;姓名、年龄、电话&#xff09; 涉及点&#xff1a;列表、字典、死循环 相关链接&#xff1a;Python--列表及其应用场景---增、删、改、查。-CSDN博客 Python---字典---…

ip数据包

数据报文格式 首部 版本&#xff08;Version&#xff09; 版本字段占4bit&#xff0c;通信双方使用的版本必须一致。对于IPv4&#xff0c;字段的值是4。 首部长度&#xff08;Internet Header Length&#xff0c; IHL&#xff09; 占4bit&#xff0c;首部长度说明首部有多少…

ubutun上编译出现undefined reference to symbol ‘dladdr@@GLIBC_2.2.5‘的错误

作者&#xff1a;朱金灿 来源&#xff1a;clever101的专栏 为什么大多数人学不会人工智能编程&#xff1f;>>> ubutun上编译一段C程序&#xff0c;出现错误&#xff1a; /usr/bin/ld: /tmp/ccghh3FJ.o: undefined reference to symbol ‘dladdrGLIBC_2.2.5’ //lib/…

前端---CSS的盒模型

文章目录 什么是盒模型&#xff1f;设置边框设置内边距设置外边距块级元素水平居中 什么是盒模型&#xff1f; 页面上的每个HTML元素都是一个一个的“盒子”&#xff0c;这些盒子由&#xff1a;内容、内边距、边框、外边距组成。 我们可以和住的房子联系起来&#xff0c;更好…

HarmonyOS开发(二):TypeScript入门

1、编程语言介绍 ArkTS是HarmonyOS主推的应用开发语言&#xff0c;它是在TypeScript语言的基础之上&#xff0c;匹配ArkUI框架&#xff0c;扩展了声明式UI、状态管理等相应的能力&#xff0c;让开发者以更简洁、更自然的方式开发跨端应用。 ArkTS、TypeScript和JavaScript之间…

打开 Chrome 的 「内存节省程序」开关和关闭硬件加速

不知道从什么时候开始&#xff0c;应该是最近1个月&#xff0c;感觉 Mac 浏览器总是占用很高的 CPU&#xff0c;多开一些标签页&#xff0c;或者浏览器窗口&#xff0c;相互切换时系统就会变得无响应&#xff0c;从 Chrome 浏览器里找到一个「内存节省程序」的配置&#xff0c;…

数据校验:Spring Validation

Spring Validation概述 在开发中&#xff0c;我们经常遇到参数校验的需求&#xff0c;比如用户注册的时候&#xff0c;要校验用户名不能为空、用户名长度不超过20个字符、手机号是合法的手机号格式等等。如果使用普通方式&#xff0c;我们会把校验的代码和真正的业务处理逻辑耦…