操作系统学习笔记(七)

来源:互联网 发布:vb 数值转换为字符 编辑:程序博客网 时间:2024/06/05 18:03

存储器管理

存储器的层次结构

对于通用计算机,存储层次至少具有三级:CPU寄存器,主存,辅存。较高档的计算机有细分为六层:寄存器,高速缓存,主存,磁盘缓存,磁盘。可移动存储介质。
层次越高访问速度越快,价格越昂贵。
主存储器,简称内存或主存,用于保存进程运行时的数据,也成为可执行存储器。CPU控制部件只能从主存储器中获得指令和数据,然后将他们装入内存。或者从寄存器存入主存。
寄存器,访问速度很快完全能与CPU协调工作,但价格十分昂贵。
高速缓存器:CPU访问一组特定的数据时,总是先查询在高速缓存中是否有需要的数据,若有则直接使用,否则从主存中读取信息。
磁盘缓存,因目前磁盘的IO速度远低于贮存的访问速度,因此将频繁使用的一部分磁盘数据和信息暂时存放在磁盘缓存中可减少访问磁盘的次数。磁盘缓存依托于固定磁盘。当需要运行或访问的时候,被调入主存。

程序的装入和链接

要是程序运行必须为之创建进程,而创建进程的第一步就是要将程序和数据装入内存。
如何将一个源程序变成一个可以在内存中执行的程序需要以下步骤:编译、链接、装入程序。
程序的装入分为三种方式:
(1)绝对装入方式:若实现知道程序将驻留在什么位置,则直接给出它地址,只适用于单道程序环境下。
(2)可重定位装入方式:根据内存的当前情况,将装入模块装入内存的适当位置。但要进行地址变换,地址变换是在装入时一次完成的,故称为静态重定位。
(3)动态运行时装入方式:等到程序执行时才转换地址。

程序的链接有三种方式:

(1)静态链接:
在程序运行之前,先将个目标模块及他们所需的函数链接成一个装配模块,以后不再拆开。
(2)装入时动态链接:
装入内存时变边装入边链接,即在装入一个目标模块式,发生一个外部模块调用事件,将引起装入程序去找出相应的外部模块,并将它装入内存。
(3)运行时动态链接:
将对某些模块的链接推迟到程序运行时才进行链接,凡在执行过程中没有用到的模块就不会被调入内存中。


连续分配方式

单一连续分配:

把内存分为系统区和用户区两部分,系统区提供给OS使用,一般放在内存的低址,用户区指除系统区以外的全部内存空间,提供给用户使用。仅适合单道程序运行环境。

固定分区分配:

将内存用户空间分为若干个固定大小的分区,每一个分区只装入一道作业。这样有几个分区,几个作业就可以并发运行。

动态分区分配:

根据实际需要,动态地分配内存。分配中的数据结构:空闲分区表,空闲分区链。
分区分配的算法:首次适应算法,循环首次适应算法,最佳适应算法,最坏适应算法,快速适应算法
分区分配的操作:分配内存、回收内存。

伙伴系统:

固定分区和动态分区方式都有不足之处,伙伴系统时以上两种的折衷。伙伴系统规定,无论已分配分区或者空闲分区,其大小均为2的k次幂,k为整数,1<=k<=m,
其中:2^1 分配的最小分区大小,2^m表示分配的最大分区的大小。

哈希算法:

利用哈希快速查找的优点,以及空闲分区在可利用空间表中的分布规律,建立哈希函数,构建一张空闲分区大小为关键字的哈希表。

可重定位分区:

将若干个细小的分区进行拼接成一个大的分区,让用户程序得以插入。但是,需要对移动过后的程序和数据地址进行修改(变换)。

对换:

把内存中暂时不能运行的进程或者暂时不用的进程和数据调入外存,一遍腾出足够的空间吧已具备运行条件的进程或进程需要的程序和数据调入内存。
对换空间的管理:
把外存分为文件去和对换区,前者用户存放文件,后者用于存放从内存中换出的进程,

基础的分页存储管理方式

连续分配方式会形成许多碎片内存,虽然可以通过紧凑的方法将许多碎片拼接成可用的大空间,但必须为此付出巨大的开销,因此该方式允许直接将一个进程分散的插入许多不
相邻的内存中。

页面和页表:
分页存储管理是将一个进程的逻辑地址空间分成若干个大小相同的片,称为页面或者片,各页从0开始编号。相应的也把内存空空间分成与页面大小相等的存储快,称为物理块
或者是页框,也同样为他们编号。页表则是由页号到物理地址的映射的集合,便于系统查找。
地址变换机构:
为了将用户地址空间空间的逻辑地址转换为物理内存中的地址,因此必须设有地址转换机构,分为基本地址转换机构、具有快表的地址转换机构。

基本的分段存储内存管理方式:

分段管理可以满足用户和程序员以下需要:方便编程,信息共享、信息保护、动态增长、动态链接
分段系统的基本原理:
分段:
作业的地址空间被划分为若干小段,每个段定义了一组信息,其同样需要一张由逻辑段到物理内存的映射表。
信息共享:
分段系统的一个突出优点就是易于实现段的共享,即允许若干个进程共享一个或多个分段,且对段的保护也十分简单易行。
可重入代码(Reentrant Code)又称为纯代码,是一种允许多个进程同时访问的代码。期间不允许可重入代码在运行期间有任何改变。实现时,进程将可能改变的部分改变
到其私有数据区,修改自己内部的数据而不去修改共享的代码。

虚拟存储器的基本概念

前面所介绍的存储器都要求将一个作业全部装入内存之后才能运行,有的时候作业内存过大不能全部装入内存会导致作业无法运行,因此需要在逻辑上扩充内存容量

虚拟存储器的引入

常规存储管理方式的特征:

(1)一次性:将进程的所有的数据全部装进内存,不管运行后时有没有用到,造成很大内存浪费。
(2)驻留性:作业装入内存之后,便一直驻留在内存中。

局部性原理:

程序在执行的时候将呈现局部性规律
(1)大多情况顺序执行
(2)程序在一段时间内局限在某些过程内
(3)程序中存在许多循环结构
(4)程序中对数据结构的处理局限在很好的范围内
还有时间局限性和空间局限性

虚拟存储器的实现都是建立在离散分配的存储管理方式的基础上的,为此所有的虚拟存储都是采用下述方式之一实现的:
(1)分页请求系统
在分页系统的基础上,增加了请求调页功能和页面置换功能所形成的页面虚拟存储系统。因此系统必须提供必要的硬件支持和软件支持
硬件支持:请求分页的页表机制,缺页中断机制,地址变换机制。
软件支持:包括用于实现请求调页的软件和实现页面置换的软件。
(2)请求分段系统
在纯分段的段表机制基础上增加了若干项而形成的。其也需要缺段中断机构和和地址变换机构。

虚拟存储器的特征:

虚拟存储器具有多次性、对换性和虚拟性三大主要特征:
(1)多次性:指一个作业可以被分多次调入内存。
(2)对换性:允许作业在运行时进行换进、换出。即将那些不需要的数据和程序调出,将需要的调入内存。
(3)虚拟性: 从逻辑上扩充内存,使用户看到的内存容量远大于实际内存。

请求分页存储管理方式:

内存分配策略和分配算法:需解决三个问题:最小物理块的确定、物理块的分配策略,物理块的分配算法
(1)最小物理块数的确定
即保证进程正常运行所需的最小物理块数。进程应获得最小物理块数与计算机的硬件结构有关。如缺页中断机构要发生6次中断,至少要为每个进程分配6个物理块。
(2)物理块的分配策略
在请求分页系统中,可采取两种内存分配策略,即固定和可变策略。在进行置换式也可以采取两种策略,即全局置换和局部置换。于是可组合出以下三种适当策略:
固定分配局部置换、可变分配全局置换、可变分配局部置换
(3)物理块分配算法
平均分配算法、按比例分配算法、考虑优先权的分配算法
调页策略:
为了确定系统将进程运行时所缺的页面调入内存的时机,可采取预调页策略或请求调页策略。
预调页策略:采用一种预测为基础的预调页策略,将那些预计在不久之后变回访问的页面预先调入内存,目前预调页成功的概率只有50%。
请求调页策略:当进程在运行中需要访问部分程序和数据的时候,若发现其所在的页面不在内存,便立即提出请求,由OS将其所需页面调入内存。目前的虚拟存储器大多采用此策略。

确定从何处调入页面
在请求分页系统外存分为文件区和对换区,对换区采用连续分配的方式、文件区采用离散分配的方式。
当发生缺页请求的时候,分为以下三种情况调入内存:
(1)系统拥有足够对换区空间时,全部从对换区调入所需页面,提高调页速度
(2)系统缺少足够的对换区空间,则将不会被修改的文件直接从文件区调入,将可能会被修改调到对换区。
(3)UNIX方式:对于曾经运行过但又被换出的页面从对换区调入,凡是未运行的页面从文件区调入

页面置换算法:

为了确定在内存已满的时候到底选择哪个页面调出内存的算法
(1)最佳置换算法:
其所选择淘汰的页面是以后永远不使用的或许是在最长(未来)时间内不再被访问的页面。
(2)先进先出页面置换算法:
总是淘汰最先进入内存的页面
(3)LRU最近最久未使用算法:
记录一个页面自上次被访问以来所经历的时间t,当必须淘汰一个页面时,选择其中t值最大的
(4)简单的Clock置换算法:
为每一页设置一位访问位,再将内存中的所有页面都通过链接指针链接成一个循环队列。当某一页被访问时,置访问位为1.
(5)改进型Clock置换算法:
在前一个的基础上再增加一个因素,即置换代价。即页面换出的时候既要是未使用的页面,又要是未被修改过的页面。
其它的算法还有最少使用置换算法,页面缓冲算法。

请求分段存储管理方式

分段的共享与保护:

分段存储管理方式便于实现分段的共享与保护。以下进一步介绍为了实现分段共享,应配置相应的数据结构共享段表,以及对共享段进行操作的过程。

共享段表:

在系统中配置一张共享段表,所有各共享段都在共享段表中占有一表项。表项中记录了共享段的段号、段长、内存始址、存在位,并记录了共享此分段的每个进程的情况。
(1)共享进程计数count
(2)存取控制字段:即给不同的进程不同的的权限。
(3)段号

共享段的分配和回收:

分配:在为共享段分配内存时,对第一个请求使用该共享段的进程,由系统为该共享段分配一物理区,再把共享段调入该区。同时在共享段中添加表项,填写有关数据
把count置一,之后每次有进程请求访问count:=count+1
回收:当共享此段的进程不再需要该段时,应将该段释放,包括相关表项,以及执行count:=count-1,若count=0,则由系统回收该共享段的物理内存

分段保护:

在分段系统中由于每个段逻辑上都是独立的,因此比较容易实现信息保护。因此可采用以下方式来确保信息是否安全:
(1)越界检查
(2)存取控制检查:在段表的每个表项中都设置了一个“存取控制”字段,用于规定对该段的访问方式,通常的访问方式有:只读、只执行、读/写
(3)环保护机构
低编号的环具有最高优先权,OS核心位于0环,某些重要的实用程序和操作系统服务位于中间环,一般应用则被安排在外环,程序的访问和调用用该满足以下规则:
1 一个程序可以访问驻留在相同环或者较低特权环中的数据
2 一个程序可以调用驻留在相同环或者较高特权环的服务。



0 0
原创粉丝点击