操作系统(王道笔记第三章内存)

第三章内存

  • 3.1_1内存的基础知识
    • (1)什么是内存:略
    • (2)进程运行的基本原理
      • ①从写程序到程序运行
      • ②链接
      • ③装入
  • 3.1_2内存管理的概念
    • (1)内存管理管哪几个方面
    • (2)内存保护
      • ①上下限寄存器:
      • ②重定位界地址寄存器
  • 3.1_3覆盖与交换
    • (1)覆盖技术
    • (2)交换技术
  • 3.1_4连续分配管理方式
    • (1)单一连续分配
    • (2)固定分区分配
      • ①分区大小相等
      • ②分区大小不相等
    • (3)动态分区分配
      • ①系统要用什么样的数据结构记录内存的使用情况?
      • ②当很多个空闲分区都能满足需求时,应该选择哪个分区进行分配?(3.1_4详述)
      • ③如何进行分区的分配与回收操作?
    • (3)总结
  • 3.1_5动态分区分配算法
    • (1)首次适应算法(First Fit)
    • (2)最佳适应算法(Best Fit)
    • (3)最坏适应算法(Worst Fit)
    • (4)邻近适应算法(Next Fit)
  • 3.1_6基本分页存储管理的基本概念
    • (1)页框、页面 、页表
    • (2)如何实现地址的转换
  • 3.1_7基本地址变换机构
    • (1)页表寄存器
    • (2)地址变换机构
  • 3.1_8具有快表的地址变换机构
    • (1)局部性
    • (2)快表
  • 3.1_9两级页表
    • (1)单级页表存在的问题
    • (2)如何解决问题一(引入多级分页)
  • (3)注意
  • 3.1_10基本分段存储管理方式
    • (1)段
    • (2)段表
    • (3)地址转换
    • (4)分段和分页对比
  • 3.1_11段页式管理方式
    • (1)分页和分段的优缺点
    • (2)段页存储方式
    • (3)段页存储的数据结构
    • (4)段页存储的地址转换方式
  • 3.2_1虚拟内存的基本概念
    • (1)传统管理方式的特征、缺点
    • (2)局部性原理
    • (3)虚拟内存的定义和特征
    • (4)如何实现虚拟内存技术
    • (5)本节总结
  • 脑图

我的脑图链接分享

3.1_1内存的基础知识

本节大纲:什么是内存(略)、进程运行的基本原理

(1)什么是内存:略

(2)进程运行的基本原理

指令的工作原理(略)、逻辑地址和物理地址(略)、从写程序到程序运行

①从写程序到程序运行

在这里插入图片描述
编译生成目标模块即.obj文件,链接生成装入模块即可执行文件.exe

②链接

链接的作用:把多个编译好的起始逻辑地址和终止逻辑地址不同的目标模块链接成一个逻辑起始地址为0的装入模块
链接的三种方式:
1.静态链接:在程序运行之前,先将各目标模块及它们所需的库函数连接成一个完整的可执行文件(装入模块),之后不再拆开。
2.装入时动态链接:将各目标模块装入内存时边装入边链接的链接方式。
3.运行时动态链接:在程序执行需要该目标模块时,才对它进行链接。其优点是便于修改和更新,便于实现对目标模块的共享。

③装入

装入的作用:把程序中的逻辑地址转为物理地址进而让计算机得以识别
三种装入方式:(其中只有绝对装入是编译程序实现,其他是操作系统实现)
1.绝对装入(只适用于单道程序环境):在编译时,如果知道程序将放到内存中的哪个位置编译程序将产生绝对地址的目标代码。装入程序按照装入模块中的地址,将程序和数据装入内存
2.静态重定位(早期多道批处理):又称可重定位装入。编译、链接后的装入模块的地址都是从0开始的,指令中使用的地址、数据存放的地址都是相对于起始地址而言的逻辑地址。可根据内存的当前情况,将装入模块装入到内存的适当位置装入时对地址进行“重定位”,将逻辑地址变换为物理地址(地址变换是在装入时一次完成的)。
静态重定位的特点是在一个作业装入内存时,必须分配其要求的全部内存空间,如果没有足够的内存,就不能装入该作业。作业一旦进入内存后,在运行期间就不能再移动==,也不能再申请内存空间。
3.动态重定位(现代操作系统):又称动态运行时装入。编译、链接后的装入模块的地址都是从0开始的。装入程序把装入模块装入内存后,并不会立即把逻辑地址转换为物理地址,而是把地址转换推迟到程序真正要执行时才进行。因此装入内存后所有的地址依然是逻辑地址。这种方式需要一个重定位寄存器(基址寄存器)的支持重定位寄存器存储当前代码首物理地址
在这里插入图片描述

3.1_2内存管理的概念

在这里插入图片描述
本节大纲:内存管理管什么、存储保护

(1)内存管理管哪几个方面

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

(2)内存保护

为什么要进行内存保护:控制各个进程只能访问自己的内存空间
在这里插入图片描述
内存保护的两个方法:

①上下限寄存器:

在CPU中设置一对上、下限寄存器, 存放进程的上、下限地址。进程的指令要访问某个地址时CPU检查是否越界

②重定位界地址寄存器

采用重定位寄存器(又称基址寄存器)和界地址寄存器(又称限长寄存器)进行越界检查重定位寄存器中存放的是进程的起始物理地址界地址寄存器中存放的是进程的最大逻辑地址(即物理地址长度)

3.1_3覆盖与交换

本节大纲:覆盖技术、交换技术
在这里插入图片描述

(1)覆盖技术

**覆盖技术的思想:**将程序分为多个段(多个模块)。常用的段常驻内存不常用的段在需要时调入内存。内存中分为一个“固定区”和若干个“覆盖区”。
需要常驻内存的段放在“固定区”中,调入后就不再调出(除非运行结束)。
不常用的段放在“覆盖区”,需要用到时调入内存,用不到时调出内存。
在这里插入图片描述
**缺点:**必须由程序员声明覆盖结构,操作系统完成自动覆盖。对用户不透明增加了用户编程负担。覆盖技术只用于早期的操作系统中,现在已成为历史。

(2)交换技术

交换(对换)技术的设计思想:内存空间紧张时,系统将内存中某些进程暂时换出外存把外存中某些已具备运行条件的进程换入内存(进程在内存与磁盘间动态调度)
交换技术的三个问题:
在这里插入图片描述

3.1_4连续分配管理方式

本节大纲:单一连续分配、固定分区分配、动态分区分配
在这里插入图片描述
连续分配:指为用户进程分配的必须是一个连续的内存空间。

(1)单一连续分配

单一连续分配方式:内存被分为系统区用户区系统区通常位于内存的低地址部分,用于存放操系统相关数据;用户区用于存放用户进程相关数据。内存中只能有一道用户程序,用户程序独占整个用户区空间。
在这里插入图片描述
**优点:**实现简单;无外部碎片;可以采用覆盖技术扩充内存;不一定需要采取内存保护(eg:早期的PC操作系统MS-DOS)。
**缺点:**只能用于单用户、单任务的操作系统中;有内部碎片;存储器利用率极低。

(2)固定分区分配

在这里插入图片描述
分区说明表:
在这里插入图片描述

①分区大小相等

在这里插入图片描述

②分区大小不相等

在这里插入图片描述

(3)动态分区分配

动态分区分配又称为可变分区分配。这种分配方式不会预先划分内存分区,而是在进程装入内存时,根据进程的大小动态地建立分区,并使分区的大小正好适合进程的需要。因此系统分区的大小和数
目是可变的。(eg: 假设某计算机内存大小为64MB,系统区8MB,用户区共56 M…)

①系统要用什么样的数据结构记录内存的使用情况?

在这里插入图片描述

②当很多个空闲分区都能满足需求时,应该选择哪个分区进行分配?(3.1_4详述)

③如何进行分区的分配与回收操作?

分配的两种情况:
在这里插入图片描述
在这里插入图片描述
回收的两种情况:
回收区相邻有一个空闲分区
在这里插入图片描述
回收区没有空闲分区
在这里插入图片描述
另外:
紧凑技术
在这里插入图片描述

(3)总结

内部碎片,分配给某进程的内存区域中,如果有些部分没有用上。
外部碎片,是指内存中的某些空闲分区由于太小而难以利用。

在这里插入图片描述

3.1_5动态分区分配算法

本节大纲:首次适应算法(First Fit)、最佳适应算法(Best Fit)、最坏适应算法(Worst Fit)、邻近适应算法(Next Fit)
在这里插入图片描述

(1)首次适应算法(First Fit)

算法思想:每次都从低地址开始查找,找到第一个能满足大小的空闲分区。

(2)最佳适应算法(Best Fit)

算法思想:由于动态分区分配是-种连续分配方式,为各进程分配的空间必须是连续的一整片区域。因此为了保证当“大进程”到来时能有连续的大片空间,可以尽可能多地留下大片的空闲区,即,优先使用更小的空闲区
**缺点:**每次都选最小的分区进行分配,会留下越来越多的、很小的、难以利用的内存块。因此这种方法会产生很多的外部碎片。

(3)最坏适应算法(Worst Fit)

算法思想:为了解决最佳适应算法的问题一即留下太多难以利用的小碎片,可以在每次分配时
优先使用最大的连续空闲区,这样分配后剩余的空闲区就不会太小,更方便使用。

(4)邻近适应算法(Next Fit)

算法思想:首次适应算法每次都从链头开始查找的。这可能会导致低地址部分出现很多小的空闲分区,而每次分配查找时,都要经过这些分区,因此也增加了查找的开销。如果每次都从上次查找结束的位置开始检索,就能解决.上述问题。

3.1_6基本分页存储管理的基本概念

基本分页存储管理的思想——把内存分为一个个相等的小分区,再按照分区大小把进程拆分成一个 个小部分
在这里插入图片描述

(1)页框、页面 、页表

①页面和页框
**页面:**将用户进程的地址空间也分为与页框大小相等的一个个区域,称为“”或“页面”,每个页面也有一个编号,即“页号",页号也是从0开始。
**页框:**将内存空间分为一个个大小相等的分区(比如:每个分区4KB),每个分区就是一个“页框”,或称“页帧”、“内存块”、“物理块”。每个页框有一个编号,即“页框号”(或者.“内存块号”、“页帧号”、“物理块号”)页框号从0开始。
在这里插入图片描述
**②页表:**页表记录进程页面和实际存放的内存块(页框)之间的对应关系
在这里插入图片描述
**页表结构:**可见页表的页号是顺序递增的,所以不用单独存储,只需存储页框号即可,就像数组a[0]=3,a[1]=6,a[2]=4…,因此由此数组特性可知页表必须在内存中连续存储,以及页表项的大小取决于内存大小或者页框数大小

(2)如何实现地址的转换

由页面页框的结构特点可知地址转换方法为:
物理地址 = 装入之后的起始物理地址 + 页内偏移地址

物理地址 = 逻辑地址所在页面的页号在装入之后对应的页框 * 页框大小 + 页内偏移地址
例如:
CPU执行指令1,需要访问逻辑地址为80的内存单元,如何转化为物理地址?
在这里插入图片描述
逻辑地址为80的内存单元:在1号页,该页在内存中的起始位置为50, 逻辑地址为80的内存单元相对于该页的起始地址而言,“偏移量”应该是30。实际物理地址=450+30=480.
补充:考试中如何计算页号和页内偏移量
人工手算:页号=80/50=1;页内偏移量=80%50=30
计算机:因为计算机采用二进制计数即
在这里插入图片描述
在这里插入图片描述

3.1_7基本地址变换机构

在这里插入图片描述

(1)页表寄存器

通常会在系统中设置- -个页表寄存器(PTR) ,存放页表在内存中的起始地址F和页表长度M。进程未执行时,页表的始址和页表长度放在进程控制块(PCB) 中,当进程被调度时,操作系统内核会把它们放到页表寄存器中。

(2)地址变换机构

在这里插入图片描述

3.1_8具有快表的地址变换机构

在这里插入图片描述

(1)局部性

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

(2)快表

快表:又称联想寄存器(TLB), 是一种访问速度比内存快很多的高速缓冲存储器,用来存放当前访问的若干页表项,以加速地址变换的过程。与此对应,内存中的页表常称为慢表
(3)加入快表之后地址变换
在这里插入图片描述
与基本地址变换对比
在这里插入图片描述

3.1_9两级页表

在这里插入图片描述

(1)单级页表存在的问题

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

(2)如何解决问题一(引入多级分页)

可将长长的页表进行分组,使每个内存块刚好可以放入一个分组( 比如上个例子中,页面大小4KB,每个页表项4B,每个页面可存放1K个页表项,因此每1K个连续的页表项为一组,每组刚好占一个内存块,再讲各组离散地放到各个内存块中)另外,要为离散分配页表再建立一张页表,称为页目录表,或称外层页表,或称顶层页表
在这里插入图片描述
在这里插入图片描述

(3)注意

①若采用多级页表机制,则各级页表的大小不能超过一个页面
在这里插入图片描述
②两级页表的访存次数分析(假设没有快表机构)
三次:第一次访存:访问内存中的页目录表、第二次访存:访问内存中的二级页表、第三次访存:访问目标内存单元
N级页表的访存次数:N + 1次

3.1_10基本分段存储管理方式

基本分段存储管理即根据程序自身逻辑(比如main函数是一个段,某个子函数是一个段)划分为若干个段
在这里插入图片描述

(1)段

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

(2)段表

程序分多个段,各段离散地装入内存,为了保证程序能正常运行,就必须能从物理内存中找到各个逻辑段的存放位置。为此,需为每个进程建立一张段映射表, 简称‘段表
在这里插入图片描述
**①段表数据结构:**每个段对应一个段表项,其中记录了该段在内存中起始位置(又称“基址”)和段的长度
各个段表项的长度是相同的。 由于段表项长度相同,因此段号可以是隐含的,不占存储空间。若段表存放的起始地址为M,则K号段对应的段表项存放的地址为M+ K*6

(3)地址转换

在这里插入图片描述

(4)分段和分页对比

在这里插入图片描述

3.1_11段页式管理方式

在这里插入图片描述

(1)分页和分段的优缺点

在这里插入图片描述

(2)段页存储方式

在这里插入图片描述

(3)段页存储的数据结构

在这里插入图片描述

(4)段页存储的地址转换方式

在这里插入图片描述

3.2_1虚拟内存的基本概念

在这里插入图片描述

(1)传统管理方式的特征、缺点

传统管理方式回顾:
在这里插入图片描述
一次性:作业必须一次性全部装入内存才能开始运行。这会造成两个问题:
作业很大时,不能全部装入内存,导致大作业无法运行;
大量作业要求运行时,由于内存无法容纳所有作业,因此只有少量作业能运行,导致多道程序并发度下降
驻留性一旦作业被装入内存,就会一直驻留在内存中直至作业运行结束
事实上,在一个时间段内,只需要访问作业的一小部分数据即可正常运行,这就导致了内存中会驻留大量的、暂时用不到的数据,浪费了宝贵的内存资源。(例如和平精英,如果你在海岛地图,那么雨林地图就不用加载到内存中,这也是为什么进入一个地图开始游戏是为什么需要载入中的原因)

(2)局部性原理

①时间局部性:如果执行了程序中的某条指令,那么不久这条指令很有可能再次执行,如果某个数据被访问过,不久之后该数据很可能再次被访问。(因为程序中存在大量的循环)
②空间局部性:一旦程序访问了某个存储单元,在不久之后,其附近的存储单元也很有可能被访问,例如数组(因为很多数据在内存中都是连续存放的,并且程序的指令也是顺序地在内存中存放的)
③高速缓冲技术如何应用局部性原理呢?于是就有了高速缓冲技术
高速缓冲技术的思想:将近期会频繁访问到的数据放到更高速的存储器中暂时用不到的数据放在更低速存储器中(例如快表机制)

(3)虚拟内存的定义和特征

①在操作系统的管理下,在用户看来似乎有一个比实际内存大得多的内存,这就是虚拟内存,它的原理如下:
基于局部性原理,在程序装入时,可以将程序中很快会用到的部分装入内存暂时用不到的部分留在外存,就可以让程序开始执行。
在程序执行过程中当所访问的信息不在内存时,由操作系统负责将所需信息从外存调入内存,然后继续执行程序。
若内存空间不够,由操作系统负责将内存中暂时用不到的信息换出到外存
②求虚拟内存实际容量( = min(内存和外存容量之和,CPU寻址范围))
在这里插入图片描述
③虚拟内存的三个主要特征
多次性:无需在作业运行时一次性全部装入内存,而是允许被分成多次调入内存
对换性:在作业运行时无需一直常驻内存, 而是允许在作业运行过程中,将作业换入、换出
虚拟性:从逻辑上扩充了内存的容量,使用户看到的内存容量,远大于实际的容量。

(4)如何实现虚拟内存技术

虚拟内存技术:允许一个作业分多次调入内存。如果采用连续分配方式,会不方便实现。因此,虛拟内存的实现需要建立在离散分配的内存管理方式基础上
在这里插入图片描述

(5)本节总结

在这里插入图片描述

脑图

在这里插入图片描述

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

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

相关文章

Redis 快速搭建与使用

Redis 是由 C 语言开发的开源内存数据存储器,经常被用作数据库、缓存以及消息队列等。 Redis 因为其强大的功能和简洁的设计,深受广大开发者和公司的喜爱,几乎占领了内存数据库市场的所有份额。 1 Redis 特性 Redis 有很多优秀的特性&#…

hibernate annotation注解方式来处理映射关系

2019独角兽企业重金招聘Python工程师标准>>> 在hibernate中,通常配置对象关系映射关系有两种,一种是基于xml的方式,另一种是基于annotation的注解方式,熟话说,萝卜青菜,可有所爱,每个…

操作系统Ubuntu(实验一二)

摘录:https://www.cnblogs.com/penglang14/p/10632360.html 实验一二1.1_小技巧1.2_ls查看目录命令1.3_cd切换目录命令1.4_查看文件内容命令(1)cat filename(2)more filename(3)head [-n] filename([]表示此内容可有可无)(4)wc命令确定行数、…

Redis 是如何执行的?

在以往的面试中,当问到一些面试者:Redis 是如何执行的?收到的答案往往是:客户端发命令给服务器端,服务端收到执行之后再返回给客户端。然而对于执行细节却「避而不谈」 ,当继续追问服务器端是如何执行的&am…

第五章I/O管理

I/O章节5.1.1I/O分类(1)按使用特性分(2)I/O设备按传输速率分类(3)I/O设备按信息交换的单位分5.1.2I/O控制器5.1.3I/O控制方式(1)程序直接控制方式(轮询)&…

列表使用与内部实现原理

列表类型 (List) 是一个使用链表结构存储的有序结构,它的元素插入会按照先后顺序存储到链表结构中,因此它的元素操作 (插入\删除) 时间复杂度为 O(1),所以相对来说速度还是比较快的,但它的查询时间复杂度为 O(n),因此查询可能会比较慢。 1 基础使用 列表类型的使用相对来…

操作系统习题

操作系统习题习题一一、选择习题二一、选择二、综合题习题三一、选择题?二、简答题进程互斥遵循的四个原则:空闲让进、忙则等待、有限等待、让权等待重点习题四一、选择??二、综合题死锁产生的 4 个必要条件是: &#…

WCF trace、log

1. 打开wcf配置: 2. enable trace , log 可以改变log路径: 3. 用 SvcTraceViewer.exe (直接在c盘下搜索) 查看 4. 如果想自定义trace: catch(Exception ex) { Trace.Writ…

字典使用与内部实现原理

字典类型 (Hash) 又被成为散列类型或者是哈希表类型,它是将一个键值 (key) 和一个特殊的“哈希表”关联起来,这个“哈希表”表包含两列数据:字段和值。例如我们使用字典类型来存储一篇文章的详情信息,存储结构如下图所示: 同理我们也可以使用字典类型来存储用户信息,并且…

算法设计与分析复习第一二章(时间复杂度和蛮力法)

算法复习一二章第一章时间复杂度第二章蛮力法(1)查找问题顺序查找(2)排序问题选择排序起泡排序(3)组合问题0-1bag问题概述(略)(4)图问题哈密顿回路TSP问题&am…

有序集合使用与内部实现原理

有序集合类型 (Sorted Set) 相比于集合类型多了一个排序属性 score(分值),对于有序集合 ZSet 来说,每个存储元素相当于有两个值组成的,一个是有序结合的元素值,一个是排序值。有序集合的存储元素值也是不能重复的,但分值是可以重复的。 当我们把学生的成绩存储在有序集…

Android 友盟SDK 终极解决报错:SocialSDK_QQZone_2.jar contains native libraries that

转自:http://bbs.umeng.com/thread-6552-1-2.html 报错信息:The library SocialSDK_QQZone_2.jar contains native libraries that will not run on the device.解决方案:此问题和Eclipse环境有关,按照如下步骤操作即可Eclipse-&g…

Redis 持久化——AOF

使用 RDB 持久化有一个风险,它可能会造成最新数据丢失的风险。因为 RDB 的持久化有一定的时间间隔,在这个时间段内如果 Redis 服务意外终止的话,就会造成最新的数据全部丢失。 可能会操作 Redis 服务意外终止的条件: 安装 Redis 的机器停止运行,蓝屏或者系统崩溃;安装 R…

第四章文件管理

第四章文件管理4.1_2初识文件4.1_2文件的逻辑结构无结构文件有结构文件(1)顺序文件(2)索引文件索引顺序文件多级索引顺序文件4.1_3文件目录文件控制块FCB(2)单级目录(3)两级目录结构…

免费的管理页面模板

2019独角兽企业重金招聘Python工程师标准>>> Free Bootstrap Admin Templates for Designers 1. Admin Lite AdminLTE - 是一个完全响应式管理模板。基于Bootstrap3的框架。高度可定制的,易于使用。支持很多的屏幕分辨率适合从小型移动设备到大型台式机。…

Redis 持久化——RDB

Redis 的读写都是在内存中,所以它的性能较高,但在内存中的数据会随着服务器的重启而丢失,为了保证数据不丢失,我们需要将内存中的数据存储到磁盘,以便 Redis 重启时能够从磁盘中恢复原有的数据,而整个过程就叫做 Redis 持久化。 Redis 持久化也是 Redis 和 Memcached 的主…

MATLAB使用教程

MATLAB使用教程2.1.1 MATLAB系统环境(1)命令行窗口(2)工作区窗口2.2.1MATLAB数值数据(1)强制转换如转换为int整形(2)判断变量类型(3)复型(4&#…

解决myeclipse中新导入的工程旁出现红色感叹号的问题

2019独角兽企业重金招聘Python工程师标准>>> 或许很多像我这样的java初学者在使用myeclipse时出现新导入的工程旁边有红色的感叹号。 1.问题一般就是java build path 设置不正确的问题。解决步骤如下: 右击工程找到Build Path——>Configure Build Pa…

层次分析法

层次分析法一、层次分析法原理二、解题步骤(1)层次结构模型(2)成对比较矩阵①成对比较矩阵(有现成代码进行一致性检验和求权重)②成对比较阵标度表及举例③一致性检验三、旅游性问题举例(1&…

Redis 持久化——混合持久化

RDB 和 AOF 持久化各有利弊,RDB 可能会导致一定时间内的数据丢失,而 AOF 由于文件较大则会影响 Redis 的启动速度,为了能同时使用 RDB 和 AOF 各种的优点,Redis 4.0 之后新增了混合持久化的方式。 在开启混合持久化的情况下,AOF 重写时会把 Redis 的持久化数据,以 RDB 的…