计算机系统之存储器管理

在这里插入图片描述

注:2^20=1M(兆)

主机+外设(总共五个)
存储器结构-金字塔(建议搜出来看看)也叫易失性存储器?
注意:内存空间是物理空间
模块的调用-》跳转指令?/drump?
可以解决静态的问题–移动

存储器是计算机系统的重要组成部分,是计算机系统中的一种宝贵而紧俏的资源。操作系统中的存储管理是指对内存的管理,它是操作系统的重要功能之一。

存储管理的主要任务是为多道程序提供良好的运行环境,方便用户使用存储器,提高存储器的利用率以及从逻辑上扩充存储器。为此
存储管理应具有以下功能:
1.实现内存的分配和回收
(因为并发,存在多道程序的程序段和数据段)
2.地址变换(相对地址←→绝对地址)
(相对地址也就是逻辑地址,即为程序员看到的,取零地址,绝对地址是物理地址)
3.“扩充”内存容量
(时间上-速度,内存扩充也要考虑速度,页面调度算法防止抖动。设备管理也就是I/O虚拟化)
4.进行存储保护

程序的装入和链接

源文件(通过编辑)->.obj(目标文件)(通过链接)->.dll(或一个.exe+.多个dll)->装入->取指分析执行(冯诺伊曼)

在这里插入图片描述

程序的装入方式(三种)
1.绝对装入方式
2.可重定位装入方式
3.动态运行时装入方式

1.绝对装入方式
(编译时修改地址)
如果在编译时,事先知用户程序在内存的驻留位置,则编译程序在编译时就产生绝对地址的目标代码。装入程序就直接把装入模块中的程序和数据装入到指定的位置,(不需进行地址转换
该装入方式只适用于单道程序环境

2.可重定位装入方式

在这里插入图片描述

静态重定位:装入时
动态重定位:运行时(可以解决静态的问题-移动)

(可重定位-装入的时候加上首地址,程序不便移动,calla->drump?)

3.动态运行时装入方式

如果事先不知用户程序在内存的驻留位置,为了保证程序在运行过程中,它在内存中的位置可经常改变。装入程序把装入模块装入内存后,并不立即把装入模块中相对地址转换为绝对地址,而是在程序运行时才进行。这种方式需一个重定位寄存器(放的程序的首地址)来支持。(在程序运行过程中进行地址转换

程序的链接
根据链接时间的不同,可将链接分成三种:
1.静态链接
2.装入时动态链接
3.运行时动态链接

1.静态链接方式

在这里插入图片描述

(静态也就是一次性)

2.装入时动态链接方式
指将一组目标模块在装入内存时,边装入边链接的方式。具有便于修改和更新、便于实现对目标模块的共享

存在问题:
由于程序运行所有可能用的目标模块在装入时均全部链接在一起,所以将会把一些不会运行的目标模块也链接进去。如程序中的错误处理模块。

3.运行时动态链接方式
在程序运行中需要某些目标模块时,才对它们进行链接的方式。具有高效节省内存空间的优点。

连续分配存储管理方式

主要分为单一连续分配和分区分配

1.单一连续分配方式

(没必要实现存储保护,但不支持并发)
在这里插入图片描述

在这里插入图片描述

(B是字节,一个盘512字节)

2.分区分配方式存储管理

分区分配方式是满足多道程序设计需要的一种最简单的存储管理方法。

存储管理方法

将内存分成若干个分区(大小相等/不相等),除OS占一区外,其余的每一个分区容纳一个用户程序。按分区数目的变化情况,可将分区存储管理进一步分为:
a.固定分区存储管理(有内部碎片-已分配但没有利用)
b.动态分区存储管理(有外部碎片-未分配-很小装不进去。也可能有内部碎片)
c.可重定位分区分配方式(内部碎片,外部碎片都可能有)

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

(Null是操作系统零地址)
空间分区表 (nx)B=o(n)
空间分区链DwoRD=o(1)

分区分配算法

为了将一个作业装入内存,应按照一定的分配算法从空闲分区表(链)中选 出一个满足作业需求的分区分配给作业,如果这个空闲分区的容量比作业申请的空间要大,则将该分区一分为二,一部分分配给作业,剩下的部分仍然留在空闲分区表(链)中,同时修改空闲分区表(链)中相应的信息

1.首次适应算法(最先适应算法)
2.循环首次适应算法
3.最佳适应算法
4.最坏适应算法

1.首次适应算法(最先适应算法)-不公平性

算法
空闲分区(链)地址递增的次序排列。在进行内存分配时,从空闲分区表/链首开始顺序查找,直到找到第一个满足其大小要求的空闲分区为止。然后再按照作业大小,从该分区中划出一块内存空间分配给请求者,余下的空闲分区仍留在空闲分区表(链)中。

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

2.循环首次适应算法

算法要求
又称为下次适应算法,由首次适应算法演变而来。在为作业分配内存空间时,不再每次从空闲分区表/链首开始查找,而是从上次找到的空闲分区的下一个空闲分区开始查找,直到找到第一个能满足其大小要求的空闲分区为止。然后,再按照作业大小,从该分区中划出一块内存空间分配给请求者,余下的空闲分区仍留在空闲分区表/链中

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

3.最佳适应算法

算法要求:
空闲分区/链按容量大小递增的次序排列。在进行内存分配时,从空闲分区表/链的首开始顺序查找,直到找到第一个满足其大小要求的空闲分区为止。
按这种方式为作业分配内存,就能把既满足作业要求又与作业大小最接近的空闲分区分配给作业

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

4.最坏适应算法

算法要求
空闲分区/链按容量大小递减的次序排列。在进行内存分配时,将第一个(即最大的)空闲分区分割给作业使用。

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

分区分配操作_分配内存和回收内存

(1)分配内存
系统利用某种分配算法,从空闲分区表/链中找到所需大小的分区。
分区的切割
请求的分区大小为u.size空闲分区的大小为m.size,若m.size-u.size<=size(size是事先规定的不再切割的剩余分区的大小),说明多余部分大小,可不再切割,将整个分区分配给请求者;否则,从该分区中按请求的大小划分出一块内存空间分配出去,余下的部分仍留在空闲分区表/链中,然后,将分配区的首址和大小返回给调用者/内存管理进程。
分配流程图如下

(<=size,变成内部碎片,删去表项)
在这里插入图片描述
在这里插入图片描述

(回收内存只有3需要删去下面的表项,4是增加一项表项,1,2不需要增删,第4种首地址为回收分区的首地址,大小为回收分区的大小)

3.可重定位分区分配方式-动态运行装入时

(实际上不用做重定位)
磁盘:

对换区连续(保证效率)
文件区离散(保证空间利用率)

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

特点:
可以充分利用存储区中的“零头/碎片”,提高主存的利用率。 但若 “零头/碎片”大多,则拼接频率过高会使系统开销加大

分区的存储保护

存储保护是为了防止一个作业有意或无意地破坏操作系统或其它作业,常用的存储保护方法有:
1、界限寄存器方法
1)上下界寄存器方法(适合静态和可重定位装入):用这两个寄存器分别存放作业的起始地址结束地址。在作业运行过程中,将每一个访问内存的绝对地址都同这两个寄存器的内容比较,如超出这个范围便产生保护性中断。
2)基址、限长寄存器方法(适合动态运行时装入):用这两个寄存器分别存放作业的起始地址和作业的地址空间长度。当作业执行时,将每一访问内存的相对地址和限长寄存器比较,如果超过了限长寄存器的值,则发出越界中断信号,并停止作业的运行。
(上述第二种效率更高,因为只访问一次)
2、存储保护键方法-可实现共享
给每个存储块(大小相同,一个分区为整数倍存储块)分配一个单独的保护键,它相当于一把锁。进入系统的每个作业也赋予一个保护键,它相当于一把钥匙。当作业运行时,检查钥匙和锁是否匹配,如果不匹配,则系统发出保护性中断信号,停止作业运行。

在这里插入图片描述

覆盖与交换

在这里插入图片描述
覆盖不是系统做的,是让程序员做的
在这里插入图片描述
在这里插入图片描述

交换与覆盖技术的区别:
1.交换技术不要求程序员给出程序段之间的覆盖结构,交换主要交换主要在作业或进程之间进行。
2.覆盖技术要求程序员必须把一个程序划分成不同的程序段,并规定好它们的执行和覆盖顺序,操作系统根据程序员提供的覆盖结构来完成程序段之间的覆盖。覆盖技术主要在同一个作业或进程中进行,同时覆盖只能覆盖与覆盖程序段无关的程序段

(即:一个内存时,一个大作业用覆盖,多个小作业用交换)

基本分页存储管理方式

基本–表示不会用到虚拟存储–一次性和驻留性

1.连续分配存储管理方式产生的问题
在分区存储管理中,要求把进程放在一个连续的存储区中,因而会产生许多碎片
2.碎片问题的解决方法
(1)拼接/紧凑技术----代价较高。
(2)离散分配方式—允许将作业/进程离散放到多个不相邻接的分区中,就可以避免拼接。基于这一思想产生了以下的离散分配方式:
分页式存储管理(系统决定的):离散分配的基本单位是(物理方面,分页可能有内部碎片,一定没有外部碎片,是二维到二维)
分段式存储管理(程序员决定的):离散分配的基本单位是(逻辑方面,分段可能有外部碎片,没有内部碎片)
段页式存储管理:离散分配的基本单位是段、页

在分页存储管理方式中,如不具备页面对换功能,不支持虚拟存储器功能,在调度作业运行时,必须将它的所有页面一次调入内存,若内存没有足够的块,则作业等待,这种存储管理方式称为纯分页基本分页存储管理方式

在这里插入图片描述

(分页缺乏逻辑性)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

(页表放在内存里的进程的pcb里,是一种数据结构,一个进程一个)
(页表始址:base+2xfai-x是页号,xl)–指针加法
(页表长度:防止地址越界)–越界中断
在这里插入图片描述

页面较小时第二个问题解决方式–页表分级
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

高速缓存(快表):提高访问速度(如果没有这个缓存,就要访问3/2次(3次表示未命中,2次表示命中),因为还要访问高速缓存器
在这里插入图片描述

快表-并行-因为程序的局部性
快表淘汰页(解决抖动问题-页面···算法)
在这里插入图片描述
在这里插入图片描述
解决方法中的第一种就是内存扩充技术
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

文件拷贝叫映象

基本分段存储管理方式

(动态运行时装入,链接)
(也有越界,2次比较)(引入分段因为分页安全性有问题)

引入分段存储管理方式,主要是为了满足用户的一系列要求:
1.方便编程:按逻辑关系分为若干个段,每个段从0编址,并有名字和长度,访问的逻辑地址段名段内偏移量决定。
2.信息共享:共享是以信息为逻辑单位,页是存储信息的物理单位,段却是信息的逻辑单位。
3.信息保护:保护也是信息为逻辑单位。
4.动态链接:动态链接以为单位。
5.动态增长:实际应用中,某些段(数据段)会不断增长,前面的存储管理方法均难以实现。

(分段-二维到一维)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

例1:
请添加图片描述
例2:
【590】->10位
是2不是9

log2(n+1)向上取整
分段注意4200+x<400
在这里插入图片描述
在这里插入图片描述

段页式存储管理

段表和页表还是在pcb里
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

段页式系统中的地址变换

1.系统中设段表页表,均存放于内存中.读一字节的指令或数据须访问内存三次。为提高执行速度可增设高速缓冲寄存器
2.每个进程一张段表,每个段一张页表.
3.段表含段号,页表始址和页表长度.页表含页号和块号.
4.进行地址变换:
先用段号与段寄存器中的段长进行比较,若小于段长则利用段表始址和段号找出该段页表的始址,(否则越界中断), 再用逻辑地址中的段内页号在页表中找到相应的块号,最后与页内位移形成物理地址。

虚拟存储器

1.常规存储管理方式的共同点:
要求一个作业全部装入内存后方能运行。
2.问题:
(1)有的作业很大,所需内存空间大于内存总容量,使作业无法运行。
(2)有大量作业要求运行,但内存容量不足以容纳下所有作业,只能让一部分先运行,其它在外存等待。
3.解决方法 (1)*增加内存容量。
(2)从逻辑上扩充内存容量
----覆盖
----对换
----虚拟存储器

引入

1.常规存储器管理方式的特征
(1)一次性:作业在运行前需一次性地全部装入内存。将导致上述两问题。
(2)驻留性:作业装入内存后,便一直驻留内存,直至作业运行结束。
2.局部性原理
指程序在执行时呈现出局部性规律,即在一较短时间内,程序的执行仅限于某个部分,相应地,它所访问的存储空间也局限于某个区域。
局部性又表现为时间局部性(由于大量的循环操作,某指令或数据被访问后,则不久可能会被再次访问)和空间局部性(如顺序执行,指程序在一段时间内访问的地址,可能集中在一定的范围之内)。

概念

1.基于局部性原理,程序在运行之前,没有必要全部装入内存,仅须将当前要运行的页(段)装入内存即可。
2.运行时,如访问的页(段)在内存中,则继续执行,如访问的页未在内存中(缺页或缺段),则利用OS的请求调页(段)功能,将该页(段)调入内存。
3.如内存已满,则利用OS的页(段)置换功能,按某种置换算法将内存中的某页(段)调至外存,从而调入需访问的页。

交换的是页/段
I/O通过中断实现外存调入内存,即请求调页/段

虚拟存储器是指仅把作业的一部分装入内存便可运行作业的存储管理系统,它具有请求页调入功能页置换功能,能从逻辑上对内存容量进行扩充,其逻辑容量由外存容量和内存容量之和决定,其运行速度接近于内存,成本接近于外存。

(物理上的磁盘空间虚拟化成逻辑上的内存空间)
注:外存以盘块/族为基本单位(512B)
实现方法

1、分页请求系统

在分页系统的基础上,增加了请求调页功能、页面置换功能所形成的页式虚拟存储器系统。

它允许只装入若干页的用户程序和数据,便可启动运行,以后再硬件支持下通过调页功能和置换页功能,陆续将要运行的页面调入内存,同时把暂不运行的页面换到外存上,置换时以页面为单位。

系统须设置相应的硬件支持和软件:
(1)硬件支持:请求分页的页表机制缺页中断机构地址变换机构
(2)软件:请求调页功能和页置换功能的软件。

2、分段请求系统

在分段系统的基础上,增加了请求调段功能及分段置换功能,所形成的段式虚拟存储器系统。

它允许只装入若干段的用户程序和数据,便可启动运行,以后再硬件支持下通过请求调段功能和分段置换功能,陆续将要运行的段调入内存,同时把暂不运行的段换到外存上,置换时以为单位。

系统须设置相应的硬件支持和软件:
(1)硬件支持:请求分段的段表机制缺段中断机构地址变换机构
(2)软件:请求调段功能和段置换功能的软件。

特征

1、多次性
多次性是虚拟存储器最重要的特征。指一个作业被分成多次调入内存运行。
2、对换性
对换性指允许在作业运行过程中进行换进、换出。换进、换出可提高内存利用率。
3、虚拟性
虚拟性是指能够从逻辑上扩充内存容量,使用户所看到的内存容量远大于实际内存容量。虚拟性是虚拟存储器所表现出来的最重要的特征,也是实现虚拟存储器最重要的目标。

注:虚拟性以多次性和对换性为基础,而多次性和对换性又是离散分配为基础

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

外存地址:存的外存的盘块号,如果需要多个,只存第一个盘块号
(设备驱动程序–通信程序)

在这里插入图片描述

一般中断:每条指令执行完才···
(1⃣️间接寻址方式为例,一条指令最多6次中断)
在这里插入图片描述
在这里插入图片描述

请求分页中的内存分配策略和分配算法

在请求分页系统中,为进程分配内存时,将涉及以下三个问题:
1、最小物理块数的确定(至少6块)
最小物理块数指能保证进程正常运行所需的最小的物理块数,与计算机的硬件结构有关,取决于指令的格式、功能和寻址方式。
2、物理块的分配策略
(1)固定分配局部置换:为每个进程分配固定数目n的物理块,在整个运行中都不改变。如出现缺页,则从中置换一页。
(2)可变分配全局置换(动态性):分配固定数目的物理块,但OS自留一空闲块队列,若发现缺页,则从空闲块队列中分配一空闲块与该进程,并调入缺面于其中。当空闲块队列用完时,OS才从内存中任选择一页置换
(3)可变分配局部置换(动态性):分配一定数目的物理块,若发现缺页,则从该进程的页面中置换一页,根据该进程缺页率高低,则可增加或减少物理块
3、物理块分配算法
在采用固定分配策略时,将系统中可供分配的所有物理块分配给各个进程,可采用以下几种算法:
(1)平均分配算法:平均分配给各个进程。
(2)按比例分配算法:根据进程的大小按比例分配给各个进程。
(3)考虑优先权的分配算法:将系统提供的物理块一部分根据进程大小先按比例分配给各个进程,另一部分再根据各进程的优先权适当增加物理块数。

请求分页中的页面调入策略

调入策略决定什么时候将一个页面由外存调入内存,从何处将页面调入内存。
一.何时调入页面
页策略:``将那些预计在不久便被访问的页预先调入内存。这种调入策略提高了调页的效率,减少了I/O次数。但由于这是一种基于局部性原理的预测,若预调入的页面在以后很少被访问,则造成浪费,故这种方式常用于程序的首次调用(就是进程的创建)
2.请求调页策略:当进程运行中访问的页出现缺页时,则发出缺页中断,提出请求调页,由OS将所需页调入内存。这种策略实现简单,应用于目前的虚拟存储器中,但易产生较多的缺页中断,且每次调一页,系统开销较大,容易产生抖动现象。
二.从何处调入页面
在请求分页系统中,通常将外存分成了文件区对换区,文件区按离散分配方式存放文件,对换区按连续分配方式存放对换页。
1.对换区:系统有足够的对换区空间时,运行前可将与进程相关的文件从文件区复制至对换区,以后缺页时,全部从对换区调页。(进程创建效率低,进程执行时效率高)
2.文件区:系统没有足够的对换区空间,凡是不会被修改的文件,每次都直接从文件区调页,换出时不必换出。
3.文件区、对换区:系统没有足够的对换区空间,对可能会修改的文件第一次调页直接从文件区,换出时换至对换区,以后从对换区调页。
4.UNIX方式:凡未运行过的页面均从文件区调页,运行过的页面和换出的页面均从对换区调页。

程序的备份:文件区,数据从对换区调是最理想的。

在这里插入图片描述

请求分页中的页面置换算法

页面置换算法也称为页面淘汰算法,是用来选择换出页面的算法。页面置换算法的优劣直接影响到系统的效率,若选择不合适,可能会出现以下现象:
刚被淘汰出内存的页面,过后不久又要访问它,需要再次将其调入,而该页调入内存后不入又再次被淘汰出内存,然后又要访问它,如此反复,使得系统把大部分时间用在了页面的调进换出上,而几乎不能完成任何有效的工作,这种现象称为抖动(又称颠簸)(抖动必考)。

常用的页面置换算法:
1.最佳置换算法OPT(但可以作为其他算法的评价优劣):选择永远不再需要的页面或最长时间以后才需要访问的页面予以淘汰。(不可行,因为基于预测)
2.先进先出置换算法FIFO(顺序):选择先进入内存的页面予以淘汰。(物理块数与缺页率没有直接关系,即物理块数多,缺页率不一定减小,因为程序大多都是顺序执行?)(空间局部性,不太循环)
3.最近最久未使用置换算法LRU(循环):选择最近一段时间最长时间没有被访问过的页面予以淘汰。(时间局部性)
4.*其它算法

在这里插入图片描述

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

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

硬件实现的,并行,所以O(1)
改进型:如果都被修改过,就又全部变为0;
最近一段时间:上次置换-这次置换
CDN:内容分发网络
在这里插入图片描述

页面缓冲技术:就是虚拟磁盘技术
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

分段保护

在分段系统中,由于每个段在逻辑上是独立,因而比较容易实现信息保护。目前分段管理的保护主要有三种:
1.地址越界保护
先利用段表寄存器中的段表长度与逻辑地址中的段号比较,若段号超界则产生越界中断;再利用段表项中的段长与逻辑地址中的段内位移进行比较,若段内位移大于段长,也会产生越界中断
注:在允许段动态增长的系统中,允许段内位移大于段长。
2.访问控制保护(存取控制保护)
在段表中设置了一个存取控制字段,用于规定对该段的访问方式
3.环保护机构(windows)
在环系统中,程序的访问和调用应遵循一定的规则:
(1)一个程序可以访问同环或较低特权环中的数据
(2)一个程序可以调用同环或较高特权环中的服务

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值