深入理解操作系统原理之存储器管理

来源:互联网 发布:java软件设计 编辑:程序博客网 时间:2024/05/18 04:51

一、概述

存储器是计算机系统的重要组成部分,所以存储器的管理是操作系统最主要的功能之一。程序的指令和数据只有被调入内存(RAM)里才能被CPU直接访问,程序才能够被执行。软件系统需要的内存容量在不断地增加,所以内存的容量仍然是计算机硬件中最关键的、且又是最紧张的“瓶颈”资源。如何对存储器进行有效的管理,不仅直接影响到它的利用率,而且还对系统的性能有重大影响。存储管理的主要对象是内存。

1、存储层次结构

存储器是处理器处理的信息的来源与归宿,占据着重要地位。但任何一种存储设备都无法在速度与容量两个方面同时满足用户的需求。为解决速度和容量之间的矛盾,冯·诺依曼计算机系统中,采用了三级或更多级的存储器来组成存储层次结构,高一级为CPU寄存器和高速缓存器,中间是主存(可执行的存储器),最低一级为辅存。通过采用特殊的存储技术,主存与辅存两级可以进一步优化成多级。在存储层次结构中,高层的存储器往往是速度很快、但成本高使容量有限,而接近底部的存储器容量很大、成本低,相对访问速度则慢。各种存储设备组成存储层次结构,如图所示。
这里写图片描述
这里写图片描述

2、存储管理的功能

操作系统为了有效地管理计算机的内存资源,应该具备以下四大功能:内存分配、内存保护、地址映射、内存扩充。

  • 内存分配
    内存分配的主要任务是:为每一道程序分配内存空间,使它们“各得其所”;当程序撤消时,则收回它占用的内存空间。分配时注意提高存储器的利用率。
  • 地址映射
    目标程序所访问的地址是逻辑地址集合的地址空间,而内存空间是内存中物理地址的集合,在多道程序环境下,这两者是不一致的,因此,存储管理必须提供地址映射功能,用于把程序地址空间中的逻辑地址转换为内存空间中对应的物理地址。
  • 内存保护
    内存保护的任务是确保每道程序都在自己的内存空间运行,互不干扰。保护系统程序区不被用户侵犯(有意或无意的),不允许用户程序读写不属于自己地址空间的数据(系统区地址空间,其他用户程序的地址空间)。
  • 内存扩充
    内存扩充的任务是从逻辑上来扩充内存容量,使用户认为系统所拥有的内存空间远比其实际的内存空间(硬件RAM)大的多。

二、地址重定位

在源程序中,是通过符号名来访问子程序和数据的,我们把程序中符号名的集合称为“名字空间”。汇编语言源程序经过汇编,或者高级语言源程序经过编译,得到的目标程序是以“0”作为参考地址的模块。然后多个目标模块由连接程序连接成一个具有统一地址的装配模块,以便最后装入内存中执行。我们把目标模块中的地址称为相对地址(或称为“逻辑地址”),而把相对地址的集合称为“相对地址空间/逻辑地址空间”或简称为“地址空间”。装配模块虽然具有统一的地址空间,但是仍是以“0”作为参考地址,即是浮动的。要把它装入内存执行,就要确定装入内存的实际物理地址,并修改程序中与地址有关的代码,这一过程称为地址重定位。
地址空间的程序和数据经过地址重定位处理后,就变成了可由CPU直接执行的绝对地址程序。我们把这一地址集合称为“绝对地址空间”或“存储空间”。程序的名字空间、地址空间和存储空间之间的关系如图所示。
这里写图片描述
地址重定位完成把相对地址转换成内存中的绝对地址,这个过程称为地址映射(map)。按照重定位的时机,可分为静态重定位和动态重定位。

1、静态重定位

静态重定位是在程序执行之前进行重定位。它根据装配模块将要装入的内存起始地址,直接修改装配模块中的有关使用地址的指令。在图中以“0”作为参考地址的装配模块,要装入以10000为起始地址的存储空间。显然在装入程序之前,程序必须做一些修改才能正确运行。
静态重定位虽然有无须硬件支持的优点,但是也存在明显的缺点:一是程序重定位以后就不能在内存中移动;二是要求程序的存储空间是连续的,不能把程序存储到若干个不连续的区域中。

2、动态重定位

动态重定位是指在程序执行过程中进行地址重定位,即在每次访问内存单元前才进行地址变换。动态重定位可使装配模块不加任何修改就装入内存,但是它需要硬件—重定位寄存器的支持。下图给出了动态重定位的示意图。
这里写图片描述
程序的目标模块在装入内存时,与地址有关的指令都无须进行修改,如在图中LOAD 1,2500这条指令中仍保持相对地址2500。当该指令被操作系统取到中央处理器指令寄存器上执行时,操作系统首先把该模块装入的实际起始地址减去目标模块的相对基地址(图中该模块的基地址为0),然后将其差值10000装入重定位寄存器。

当CPU执行该指令时,地址变换硬件逻辑自动将指令中的逻辑地址2500与重定位寄存器中的值相加,再根据和值作为内存的绝对地址去访问该单元的数据,读入的数据送到寄存器1。完成地址变换硬件是属于存储管理部件 MMU,目前它已集成到中央处理器CPU中。

由此可见,动态重定位是在指令执行过程中动态进行,它由硬件完成,这样可以带来两个好处:
⑴目标程序装入内存时无需任何修改,所以装入之后再移动也不会影响其正确运行,这便于存储器用紧缩来解决存储器的碎片问题。
⑵一个程序由若干个相对独立的目标模块组成时,每个目标模块各装入一个存储区域,这些存储区域可以不相领接,只要各个模块有自己对应的重定位寄存器就可以了。

三、存储器的分配

1、单一连续分配

这是一种最简单的存储管理方式,但只能用于单用户、单任务的操作系统,如在8位和16位微机上CP/M和MS-DOS操作系统。它将内存分为两个区:
系统区:仅供操作系统使用,通常设置在内存的低段;
用户区:指除系统区以外的全部内存空间,提供给用户使用。
这种存储分配方式由于用在单用户、单任务的操作系统中。

2、分区存储管理方式

分区存储管理是能够满足多道程序运行的最简单的存储器管理方案,其基本思想是将内存划分成若干个连续的区域,称为分区。每个分区只能储存一个程序,而且程序也只能在它所驻留的分区中运行。分区存储管理根据分区个数及分区大小的可变性分为固定式分区和可变式分区两种。

  • 固定分区分配方式
    固定分区是在作业装入之前,内存就被划分成若干个分区。划分工作可以由系统管理员完成,也可以由操作系统实现。然而一旦划分完成,在系统运行期间不再重新划分,即分区的个数不可变,分区的大小不可变,所以,固定式分区又称为静态分区。
    这种分区方式一般将内存的用户区域划分成大小不等的分区,以适应不同大小的作业的需要。系统有一张分区说明表,每个表目说明一个分区的大小、起始地址和是否已分配的使用标志。
    由于每个分区的大小是固定的,所以每个提出运行的作业必须说明所需的最大内存容量。在调度作业时,存储管理程序根据作业所需的内存容量,在分区说明表中找出一个足够大的空闲分区分配给它,然后用重定位装入程序将此作业装入。如果找不到,则通知作业调度模块,选择另外一个作业。
    采用这种技术,虽然可以使多个作业共驻内存,但是一个作业的大小不可能正好等于某个分区的大小,所以每个被分配的分区总有一部分被浪费,我们把这部分被浪费的存储区称为内零头或内碎片。有时这种分配方式浪费相当严重。
  • 可变分区分配方式
    可变分区是指在作业装入内存时,从可用的内存中划出一块连续的区域分配给它,且分区大小正好等于该作业的大小。可变分区中分区的大小和分区的个数都是可变的,而且是根据作业的大小和多少动态地划分,因此又称为动态分区。这种存储管理技术是固定式分区的改进,既可以获得较大的灵活性,又能提高内存的利用率。
    可变式分区的分配和释放的基本思想是:在分配时,首先找到一个足够大的空闲分区,即这个空闲区的大小比作业要求的要大,系统则将这个空闲分区分成两部分:一部分成为已分配的分区,剩余的部分仍作为空闲区。在回收撤除作业所占领的分区时,要检查回收的分区是否与前后空闲的分区相领接,若是,则加以合并,使之成为一个连续的大空间。

四、纯分页存储管理方式

1、分页存储管理原理

分页存储管理是将一个进程的地址空间划分成若干个大小相等的片,称为页面或页,相应地,将内存空间划分成与页相同大小的若干个块,称为(物理)块或页框。在为进程分配内存时,将进程中的若干页离散地装入不相邻接的物理块中。

由于页面的大小一般取2的幂次个字节,通常在512B到4KB之间,所以内存空间划分后不存在“外碎片”。由于每块物理块可离散地分配给进程的一页,这样不断地分配,直到剩余的物理块数不能满足一个进程的要求为止。而对每个进程只有最后一页经常装不满一块,平均产生半页“页内碎片”。由此可知,分页存储管理解决了“碎片”问题,提高了存储器的利用率。纯分页存储管理是指一个进程的所有页全部装入内存的物理块中才能运行。

2、页表

在将进程的每一页离散地分配到内存的各个物理块中后,系统为了保证进程的正确运行,即能在内存中找到该进程每个页面所对应的物理块,系统需为每页配一个重定位寄存器,由于重定位寄存器是硬件,在页面数很多时实现困难。为此,系统在内存为每个进程建立了一张页面映射表,简称页表。

每个页在页表中占一个表项,记录该页在内存中对应的物理块号(页号可以省略)。进程在执行时,通过查找页表,就可以找到每页所对应的物理块号。可见,页表的作用是实现从页号到物理块号的地址映射。

3、地址变换机构

地址变换机构的基本任务是利用硬件实现查页表把用户程序中的逻辑地址变换成内存中的物理地址。为了实现地址变换功能,在系统中设置页表寄存器,用来存放页表的始址和页表的长度。在进程未执行时,每个进程对应的页表的始址和长度存放在进程的PCB中,当该进程被调度时,就将它们装入页表寄存器。

4、快表

如果页表存放在内存中,则每次访问内存时,都要先访问内存中的页表,然后根据所形成的物理地址再访问内存。这样CPU存一个数据必须访问两次内存,从而使计算机的处理速度降低了1/2。

为了提高地址变换的速度,在地址变换机构中增设了一个具有按内容查找、并行查询功能的特殊的高速缓冲存储器,称为“联想存储器(Assosiative Memory) ” 或“快表”,或称为“关联存储器(TLB, Translation Look-aside Buffer)”,用以存放当前访问的那些页表项,每个页表项包括页号和相应的块号(页号不能省略)。

五、分段存储管理方式

从固定分区到可变分区,进而又发展到分页系统的原因都是为了提高内存的利用率,然而分段存储管理的引入,是为了满足用户需要。分页存储管理时的进程地址空间结构都是线性的,这要求对各段源程序编译成目标程序后还要静态链接。为了为用户提供一个方便灵活的程序设计环境需引入段式存储管理,每个段是一组完整的逻辑信息,分段存储管理有便于编程、便于共享和保护、可动态链接、可动态增长等特点。

1、分段系统的基本原理

在分段存储管理方式中,作业的地址空间按逻辑信息完整性被划分为若干个段,每个段都有自己的名字,编译后都是从零开始编址的一段连续的地址空间,段的长度由相应逻辑信息组的长度决定,因而各段长度是不等的。

  • 段表
    在分段式存储管理系统中,为每个段分配一个连续的分区,而进程中的各个段可以离散地分配到内存中不同的分区中。类同分页式存储管理,在分段式存储管理系统中为每个进程建立一张段映射表,简称为“段表”。每个段在表中占有一表项,在其中记录了该段在内存中的起始地址(又称为“基址”)和段的长度。
  • 共享
    段是信息的逻辑单位,因此分段系统的一个突出的优点是易于实现段的共享。即允许若干个进程共享一个或多个段,而且对段的保护也十分简单。在分页系统中,虽然也能实现程序和数据的共享,但远不如分段系统来得方便。分段系统中,每个进程的段表中设置一个段表项。
    在实现段共享时,需要用到可重入代码(Reentrant Code)又称为“纯代码”(Pure Code)。它是一种允许多个进程同时访问的代码,是一种不允许任何进程对其进行修改的代码。但在每个进程中,配以局部数据区,将在执行中可能改变的部分,拷贝到该数据区,这样,程序在执行时,只对该数据区(属于该进程私有)中的内容进行修改,而不去改变共享的代码,这时的可共享代码即成为可重入代码。

2、分页和分段的区别

这里写图片描述
这里写图片描述

六、段页式存储管理

分页和分段存储管理方式都各有其优缺点。如果对两种存储管理方式“各取所长”后,则可以形成一种新的存储管理方式的系统——段页式系统。它以分页的方式管理内存,具有分页系统能有效地提高内存利用率的优点;又以分段的方式管理用户的逻辑地址空间,具有分段系统能很好地满足用户需要的长处,显然是一种比较有效的存储管理方式。

段页式系统的基本原理是将内存空间划分成相同大小相同的若干个块,将用户程序先按逻辑完整性分为若干个段,并为每个段赋予一个段名,再把每个段划分成若干个与块大小相同的页,将进程中的若干页离散装入不相邻接的块中。

在段页式系统中,为了实现从逻辑地址到物理地址的变换,系统中必需同时配置段表和页表。由于将段中的页进行离散地分配,段表中的内容不再是段的内存始址和段长,而是页表始址和页表长度。

七、虚拟存储器管理技术

前面所介绍的各种存储器管理方式,有一个共同的特点,即要求将一个作业全部装入内存才能运行。如果有的作业很大,其所要求的内存空间超过了内存总容量,作业就不能全部被装入内存,致使该作业无法运行;有时大量作业要求运行,但由于内存容量不足以容纳所有这些作业,只能将少数作业装入内存让它们先运行,而将其它大量的作业留在外存上等待。显而易见的一种解决方法,是从物理上增加内存容量,但这往往会受到机器自身的限制,而且无疑要增加系统成本,因此这种方法是受到一定限制的;另一种方法是从逻辑上扩充内存容量,这正是虚拟存储技术所要解决的主要问题。

1、虚拟存储器的基本概念

1、局部性原理(principle of locality)
实际上有许多作业在每次运行时,并非用到其全部程序,那么是否可以仅把作业的一部分装入内存就能运行呢?回答是可以的,我们先来研究虚拟存储器系统实现的理论基础:程序执行的局部性规律。
早在1968年P.Denning就指出过,程序在执行时将呈现出局部性规律,即在一段时间内,程序的执行仅局限于某个部分;相应地,它所访问的存储空间也局限于某个区域内。那么程序为什么会出现局部性规律呢?原因可以归结为以下几点:

  • 程序在执行时,除了少部分的转移和过程调用指令外,大多数仍是顺序执行的。
  • 子程序调用将会使程序的执行由一部分内存区域转至另一部分区域。但在大多数情况下,过程调用的深度都不超过5。
  • 程序中存在许多循环结构,循环体中的指令被多次执行。
  • 程序中还包括许多对数据结构的处理,如对连续的存储空间——数组的访问,往往局限于很小的范围内。

所以局限性表现为:

  • 时间局限性:如果程序中的某条指令一旦执行,则不久的将来该指令可能再次被执行;如果某个存储单元被访问,则不久以后该存储单元可能再次被访问。产生时间局限性的典型原因是在程序中存在着大量的循环操作。
  • 空间局限性:一旦程序访问了某个存储单元,则在不久的将来,其附近的存储单元也最有可能被访问。 即程序在一段时间内所访问的地址,可能集中在一定的范围内,其典型原因是程序是顺序执行的。

2、虚拟存储器的定义
根据局部性原理,一个作业在运行之前,没有必要把全部作业装入内存,而仅将那些当前要运行的那部分页面或段,先装入内存便可启动运行,其余部分暂时留在磁盘上。程序在运行时如果它所要访问的页(段)已调入内存,便可继续执行下去;但如果程序所要访问的页(段)尚未调入内存(称为缺页或缺段),此时程序应利用操作系统所提供的请求调页(段)功能,将它们调入内存,以使进程能继续执行下去。

如果此时内存已满,无法再装入新的页(段),则还须再利用页(段)的置换功能,将内存中暂时不用的页(段)调出至磁盘上,腾出足够的内存空间后,再将所要访问的页(段)调入内存,使程序继续执行下去。这样,便可使一个大的用户程序在较小的内存空间中运行;也可使内存中同时装入更多的进程并发执行。从用户角度看,该系统所具有的内存容量,将比实际内存容量大得多,人们把这样的存储器称为虚拟存储器。

虚拟存储器的逻辑容量由内存和外存容量之和、计算机的地址结构二者所决定,其运行速度接近于内存速度,而每位的成本却又接近于外存。实现虚拟存储技术的物质基础是:一是有相当容量的辅助存储器以存放所有并发作业的地址空间;二是有一定容量的内存来存放运行作业的部分程序;三是有动态地址转换机构,实现逻辑地址到物理地址的转换。可见,虚拟存储技术是一种性能非常优越的存储器管理技术,故被广泛地应用于大、中、小型机器和微型机中。

2、虚拟存储器实现方式

1、请求分段系统
它是在分段系统的基础上,增加了请求调段和分段置换功能所形成的段式虚拟存储系统。它允许只装入若干段(而非全部段)的用户程序和数据,就可以启动运行,以后再通过调段功能和置换功能将不运行的段调出,同时调入将要运行的段,置换以段为单位。
2、请求段页式系统
它是在段页式系统的基础上,增加了请求调页和页面置换功能所形成的段页式虚拟存储系统。

3、虚拟存储器的特征

  • 离散性:指在内存分配时采用离散的分配方式,它是虚拟存储器的最基本的特征。
  • 多次性:指一个作业被分成多次调入内存运行,即在作业运行时没有必要将其全部装入,只须将当前要运行的那部分程序和数据装入内存即可。多次性是虚拟存储器最重要的特征。
  • 对换性:指允许在作业的运行过程中在内存和外存的对换区之间换进、换出。
  • 虚拟性:指能够从逻辑上扩充内存容量,使用户所看到的内存容量远大于实际内存容量。

4、请求分页存储管理

请求分页存储管理方式是在纯分页系统的基础上,增加了请求调页功能、页面置换功能所形成的页式虚拟存储系统,它是目前常用的一种虚拟存储器的方式。它允许只装人若干页(而非全部页)的用户程序和数据,便可启动运行。以后,再通过调页功能及页面置换功能,陆续地把即将要运行的页面调入内存,同时把暂不运行的页面换出到外存上,置换时以页面为单位。
为了能实现请求调页和置换功能,系统必须提供必要的硬件支持:扩充的页表机制和缺页中断机构。
(1)请求分页的页表机制
它是在纯分页的页表机制上形成的,由于只将应用程序的一部分调入内存,还有一部分仍在磁盘上,故需在页表中再增加若干项,供程序(数据)在换进、换出时参考。
(2)缺页中断机构
在请求分页系统中,每当所要访问的页面不在内存时,便要产生一缺页中断,请求OS将所缺页调入内存。与一般中断的主要区别在于:
缺页中断在指令执行期间产生和处理中断信号,而一般中断在一条指令执行完后检查和处理中断信号。缺页中断返回到该指令的开始重新执行该指令,而一般中断返回到该指令的下一条指令执行。一条指令在执行期间,可能产生多次缺页中断。
(3)地址变换机构
请求分页系统中的地址变换机构,是在分页系统的地址变换机构的基础上,再为实现虚拟存储器而增加了某些功能所形成的,如产生和处理缺页中断,以及从内存中换出一页的功能等等,下图给出了请求分页系统的地址变换过程。

5、页面置换算法

在进程运行过程中,如果发生缺页,此时内存中又无空闲块时,为了保证进程能正常运行,就必须从内存中调出一页程序或数据送磁盘的对换区。但将哪个页面调出,则须根据一定的页面置换算法来确定。页面置换算法的性能指标:

缺页率( page fault rate )=“缺页次数 / 内存访问次数” (比率)

从理论上讲,应将那些以后不再被访问的页面换出,或把那些在较长时间内不会再被访问的页面换出。下面介绍几种常用的置换算法。

  • 最佳(Optimal、OPT)置换算法
    它是一种理想化的算法,性能最好,但在实际上难于实现。即选择那些永不使用的,或者是在最长时间内不再被访问的页面置换出去。但是要确定哪一个页面是未来最长时间内不再被访问的,目前来说是很难估计的,所以该算法通常用来评价其它算法。
  • 先进先出(FIFO)置换算法
    实用的置换算法关键是如何以过去页面走向来预测将来的页面走向,以达到最佳置换算法。FIFO算法认为最先进入内存的页面,其不再使用的可能性比最近调入的页面要大。所以该算法总是淘汰最先进入内存的页面,即选择在内存中驻留时间最久的页面予以淘汰。该算法实现简单,只须把一个进程已调入内存的页面,按先后次序链接成一个队列,并设置一个循环替换指针即可。它是一种最直观的算法,但它性能最差,有Belady异常现象:例如对页面访问序列1 2 3 4 1 2 5 1 2 3 4 5 ,当分配的物理块从3块增加到4块,缺页次数反而增加。

Belady现象:采用FIFO算法时,如果对一个进程未分配它所要求的全部页面,有时就会出现分配的页面数增多,缺页率反而提高的异常现象。

  • 最近最久未使用置换算法LRU
    该算法是选择最近最久未使用的页面予以淘汰,这是局部性原理的合理近似,性能接近最佳算法。但由于需要记录页面使用时间的先后关系,硬件开销太大。系统在每个页面设置一个访问字段,用以记录这个页面自上次被访问以来所经历的时间T,当要淘汰一个页面时,选择T最大的页面。但在实现时需要硬件的支持(寄存器或栈)。
  • 最少使用置换算法LFU
    该算法选择使用次数最小的页面淘汰。该算法要求为每个页表项配置一个计数器(实际系统中用移位寄存器代替),一旦某页被访问,则页表项中的计数器值加1,在需要淘汰页面时,选择其计数器值最小的页面淘汰。
  • Clock置换算法
    LRU算法是一种好的置换算法,但该算法需要较多的硬件支持,所以很难实现。为此,推出几种需要较少的硬件支持又接近LRU算法的实用置换算法,Clock置换算法是一种LRU的近似算法。该算法为每个页面设置一位访问位,将内存中的所有页面都通过链接指针链成一个循环队列,并设置一个循环替换指针,指向当前被置换页所在块。当某页被访问时,其访问位置“1”。在选择一页淘汰时,沿循环替换指针检查下一个页面,如其访问位是“0”,就选择该页换出;若为“1”,则重新置为“0”,暂不换出该页,在循环队列中检查下一个页面,直到访问位为“0”的页面为止。由于该算法只有一位访问位,只能用它表示该页是否已经使用过,而置换时是将未使用过的页面换出去,所以把该算法称为最近未用算法NRC(Not Recently Used),又称第二次机会算法。
  • 页面缓冲算法
    该算法在页面分配时,采用可变分配和局部置换的方式。首先为每个作业分配一个工作集(进程在一段时间内运行,要用到的部分页面的集合),每个工作集的块数相对固定的(在一段时间内),块号是可变的。系统自己也保留一部分存储块作为页面缓冲,并把页面缓冲组织成两个队列:空闲队列和已修改的页面队列。经过一段时间的运行,OS把一些暂时不访问的页面(在每个工作集采用FIFO算法进行选择)放入页面缓冲,如果页面未被修改,就将它直接放入空闲队列中;否则,便放入已修改的页面队列中。注意,这时页面在内存中并未做物理上的移动,而只是将页表中的表项移到上述两个队列之一中。
    页面缓冲算法是一个较简单的近似于LRU页面缓冲算法,它与LRU和Clock置换算法相比,无需硬件的支持,又大大减少了页面置换的开销。在性能上又比FIFO要好,有效地改善了请求式分页系统的性能。著名的VAX/VMS便是使用这种算法,而在 MACH操作系统实现中,只是它没有区分已修改页面和末修改页面。Windows 2000页面置换算法是基于页面缓冲算法,它的页面缓冲区有后备、修改、空闲、零初始化等队列,进程的工作集自动调整。

6、存储保护

存储保护是存储管理的重要任务,常用保护措施有越界检查、存取控制检查和环保护机构。在分段系统中,由于每个分段在逻辑上是独立的,因而实现信息共享保护有意义。

  • 越界检查
    在段表寄存器中放有段表长度信息,在段表中也为每个段设置有段长字段。在进行存储访问时,首先将逻辑地址空间的段号与段表长度进行比较,如果段号等于或大于段表长度,将发出地址越界中断信号;其次,在段表项中增补位为0时,还要检查段内地址是否等于或大于段长,若是将产生地址越界中断信号,从而保证了每个进程只能在自己的地址空间内运行。
  • 存取控制检查
    在段表的每个表项中,都设置了一个“存取控制”字段,用于规定对该段的访问方式。通常的访问方式有:只读,即只允许进程对该段中的程序或数据进行读访问;只执行,即只允许进程调用该段去执行,但不允许执行读写操作;读/写,即允许进程对该段进行读写访问。
    对于共享段而言,存取控制就显得尤为重要,因而对不同的进程,应赋予不同的读写权限。这时,既要保证信息的安全性,又要满足共享运行需要。进程在访问的某段前,先要进行存取控制检查。
  • 环保护机构 :
    这是一种功能较完善的保护机制,就是“2.2.1内核”节中CPU对操作系统保护模式支持。在该机制中规定:低编号的环具有高优先权。操作系统核心处于0环内,某些重要的实用程序和操作系统服务占居中间环,而一般的应用程序则被安排在外环上。在环系统中,程序的访问和调用应遵循以下规则:一个程序可以访问驻留在相同环或较低特权环中的数据,不能访问驻留在较高特权环中的数据;一个程序可以调用驻留在相同环或较低特权环中的子程序使用,并使用规定的格式调用驻留在较高特权环中的服务。
原创粉丝点击