第一章 概述

1.1 操作系统的定义

1.1.1 操作系统在计算机系统中所处位置

操作系统位于计算机硬件之上,系统工具之下的一层。

1.1.2 操作系统的定义

​ 控制和管理计算机的软、硬件资源,合理组织计算机的工作流程,以方便用户使用的程序集合。

1.1.3 操作系统的功能:

管理系统资源即计算机系统的硬件资源和软件资源

资源管理功能:处理器管理;存储器管理;设备管理;文件管理;用户接口

1.1.4 两根红线:(两个面向)

​ 面向系统——提高资源利用率

​ 面向用户——提供良好的用户界面、方便用户使用

1.2 操作系统的发展简史

操作系统的发展伴随着计算机体系结构的发展。计算机的发展大致经历了如下几代。

第一代计算机(1945—1955):电子管和手工操作。

第二代计算机(1955—1965):晶体管和批处理系统。

第三代计算机(1965—1980):集成电路芯片和多道程序设计技术。

第四代计算机(1980—1990):大规模集成电路芯片和传统操作系统。

1.2.1 操作系统的发展阶段:四个阶段(P12)

SPOOLing技术:一般的规律是,后一种操作系统阶段的出现,是为了解决前一阶段的矛盾

第一阶段:无操作系统(电子管)——手工操作阶段

·特点: 无任何软件、有人工干预、独占性、串行性

·问题: 当CPU速度提高时,出现人机矛盾

·改进:

  1. 专业的计算机操作员
  2. 进行批处理,每一批作业将有专门编制的监督程序自动依次处理
第二阶段:批处理系统(晶体管)——监督程序阶段

·定义: 对某对象进行批量的处理,扩展名为bat。将用户提交的作业进行分类,将操作相似的作业归为一组,然后将一组作业放在系统中自动运行(由监督程序执行)

相似的作业:指按作业执行时的特征,如输入操作比较多,或者作业在执行中多数进行计算操作,等方式进行作业划分的标准

监督程序实现作业的执行及作业之间的自动过渡,可以缩短作业之间手工操作准备时间,减少人工的干预和操作,尽可能让计算机连续执行作业(过渡和定序)

·背景:

  1. 系统资源十分昂贵。
  2. 手工输入作业的速度与CPU的速度不匹配

·解决方案:

  1. 作业成批进入系统后备队列
  2. 系统按照一定的策略自动调度作业运行

​ 发展:
单道批处理系统

​ 多道批处理系统

​ **·特点:**1)资源利用率高、吞吐量大。(能根据作业对系统资源的需求和系统当前状态,充分调度资源)

2)周转时间长,无交互能力(作业进入系统后,系统自动调度,管理员或用户不能干预系统的调度。)

单道批处理阶段(作业):

在作业运行期间,CPU一次仍是执行单道作业。此处的“批”是指多个作业同时在主机中被执行

​ **单道缺点:**串行化工作,系统资源利用率不高

​ **·早期/单道批处理:a.**联机批处理 **b.**脱机批处理

​ 联机和脱机:相对于主机是联接或是断开(主机指内存+CPU)

​ 联机批处理:慢速的输入输出处理直接由主机完成

​ **特点:**作业自动定序,自动过滤,缩短了建立作业和人工操作的时间

​ **问题:**CPU与IO串行操作,当输入输出时,CPU处于空闲状态

​ 脱机批处理:在主机与慢速的IO设备之间增加了——卫星机,使外设与主机并行工作,提高主机的利用

**特点:**增设卫星机,主机摆脱了 I/O操作,通过卫星机使外设与主机并行工作,提高主机的利用。

**问题:**磁带需要手工拆装,系统的保护不够。

​ 卫星机功能:输入设备通过它把作业输入到输入磁带,输出磁带将作业执行结果输出到输出设备。

第三阶段:执行系统阶段

**·背景:**1)批处理系统阶段,磁带需要人工装卸,这样操作既麻烦又容易引发程序操作的不安全性。

2)在批处理操作过程中,没有一种监控程序,可能会引起用户程序篡改监督程序等问题。

3)批处理过程中,若程序出错,用户是无法对程序进行干预的,只能再次重新执行。

4)20 世纪 60 年代末,通道技术和中断技术的出现,使操作系统进入了执行系统阶段。

第四阶段:多道程序系统阶段(集成电路)

**·背景:**执行系统作业的处理仍然是串行的,系统资源利用率不高。

**·特点:**1)多道

2)宏观上并行(多个作业同时运行)

3)微观上串行(某一时刻,单CPU仅运行)

​ **·意义:**引入多道程序设计技术,可以提高 CPU 的利用率,充分发挥计算机硬件的并行性。

​ **·解决问题:**1)存储保护与地址重定位

2)处理器的管理与分配

3)资源的管理与调度。

​ **·技术问题:**共享系统资源、扩充内存、内存保护

​ **·多道缺点:**交互性差->分时系统的产生

如何区分单道和多道

·单道:多个作业成批进入输入井,先来后到,依次高速执行

​ ·多道:多个作业成批进入输入井,多道并发执行

​ ·从执行时间上来看:

多道方式下,作业A的执行时间被拆成:ta1+ta2=ta

​ 单道方式下,作业A的执行时间为ta

​ ·如果从时间范围上来看,即从作业进入系统到改作业执行完毕,其执行时间是被拉长的。即折衷问题:用户体验/用户感受到的响应时间,与系统资源的利用率上的问题。

eg**:**多道程序环境下,系统中的作业是共享系统资源->在共享时,某个作业什么时候会释放所占用的资源?

​ **答:**当该程序在执行中,暂时不需要使用某个资源时,才会暂时释放。

**解释:**在宏观上来看,作业是并发的方式在运行。但是,从微观(某个时刻,某个时间点上)上来看,作业仍是串行方式被执行

eg**:**多道批处理系统中,若有3道作业同时在系统中被执行,则3道作业在系统中被交替执行。那么作业以什么方式进行穿插?或什么时机下某作业会让出正在使用的资源?

​ **答:**根据用户程序中对于外设的使用时,则单签使用CPU的作业必须释放CPU的使用,供其他作业占用。

​ **解释:**从宏观上来看,从t1时刻到t2时刻,CPU一起处于繁忙状态,拖忽略作业间的过度时间,即监督程序在其中的执行时间

1.3 操作系统分类(P14)

 批处理操作系统:

 分时操作系统:

· 把处理机的运行时间分成很短的时间片,按时间片轮流吧处理机分配给各联机作业使用(各操作系统的时间片长度:Linux:5ms-8ms Windows95:20ms Win10:10ms)

​ **·技术:**一台主机连接了若干个终端,每个终端有一个用户在使用

​ **·特点:**同时性、交互性、独占性、及时性

 实时操作系统:

响应时间有限同时被正确实行,常用于军事方面

**·特点:**实时响应;高可靠性和安全性;实时操作系统的终端设备通常只是作为执行装置或咨询

 通用操作系统

 网络操作系统

⑥ 分布式操作系统

其他操作系统:

  • 个人计算机上的操作系统
  • 嵌入式操作系统
  • 网络操作系统:手机
  • 分布式操作系统
  • 智能化操作系统

1.4 系统调用(P22)

1.4.1 系统调用的概念

​ 系统调用是操作系统及其他用户程序获得操作系统服务的途径,实现了用户与计算机硬件之间的一个接口,也是用户程序要求操作系统内核完成某一项工作时的过程调用。

·引入系统调用的原因:

​ 1)从用户角度:方便用户使用计算机系统资源

​ 2)从系统资源的角度:提高资源的利用,保护系统安

​ **·特点:**1)实现用户与计算机硬件资源之间的一个接口;

​ 2)是对计算机机器指令的扩充;

​ 3)是完成用户要求的特殊过程调用

​ ·执行系统调用时,会引发——访管中断

系统调用与一般程序执行的区别:

(1) 运行状态不同。一般过程调用,其调用和被调用过程或者都是子程序,或者都是系统程序,运行在同一系统状态下:系统态或用户态。系统调用的调用过程是用户程序,它运行在用户态;其被调用过程是系统过程,运行在系统态下。

(2) 进入的方式不同。一般过程调用可以直接通过过程调用语句将控制转移到被调用的过程;而执行系统调用时,由于调用和被调用过程处于不同的系统状态,必须通过访管中断进入。

(3) 代码层次不同。一般过程调用中的被调用程序是用户级程序,而系统调用是操作系统中的代码程序,是系统级程序。

系统调用与子程序调用的异同:

1)来源不同;

2)CPU态不同;

3)系统调用会引发访管中断,而子程序调用不会。

1.4.2 CPU的态

​ **·概念:**CPU的态即CPU的工作状态,分为核心态和用户态

​ **·意义:**CPU分态是为了对资源和指令的使用权限进行分类管理

​ ·为区分CPU执行的是系统程序,还是用户程序,同时,也为保护操作系统,而将CPU分为两个状态:

​ **系统态/管态/核心态:**当前正在执行系统程序,可访问内存所有空间

​ 内存空间通常包括两个部分:系统区,用户区

​ **用户态/目态:**当前正在执行用程序(用户程序),可访问内存中的用户空间

1.4.3 操作系统发展趋势:(P26)

​ 微内核、嵌入式操作系统、分布式操作系统、多处理器并行操作系统、虚拟化操作系统

1.5 操作系统的特征(P24)

1.5.1 并发性

​ **·背景:**受到资源共享分配的影响,程序不可能从开始到结束不间断地被执行,执行中必然会出现间断。因此,多任务、多用户环境下程序是并发的方式被执行。

**·并发性:**指两个或多个事件在同一时间间隔内发生(逻辑上“同时”)

​ 区分:并行性:指两个或多个事件在同一时刻发生(物理上“同时”)

​ ·**作用:**为了改善系统资源的利用率并可提高系统的吞吐量,但同时也会使系统的管理更加复杂化

**操作系统的并发特性:**是指计算机系统中同时存在多个运行中的程序,因此,它应该具有处理和调度多个程序同时执行的能力。

**并发的体现:**内存中同时有多个用户的应用程序;多个操作系统程序被启动执行、暂停执行。

操作系统设计时要处理的问题:

操作系统设计实现时必须具有控制和管理程序并发执行的能力。

1.5.2 虚拟性

​ **·概念:**虚拟性是操作系统中的一种管理技术,它是将物理设备虚拟成逻辑形式,通过某些软件和硬件技术,能够把资源虚拟成用户感官上独占的资源。

**·作用:**1)一方面为了提高系统资源的利用率

2)另一方面也为了方便用户的使用

**·采用的技术:**SPOOLing技术

**·包括:**1)虚拟CPU

2)虚拟存储

3)虚拟设备

1.5.3 共享性

**·背景:**在现代操作系统环境下,多任务及多用户的使用必然会使系统资源变得紧张。程序独占资源的执行方式虽然使得系统管理程序较为简单,但这种方式也会使其他等待相同资源的程序拉长等待时间,不利于提高用户程序的响应时间。同时,某资源被一个程序独占直到程序执行完毕,而该程序在执行中却不可能一直使用这种资源,所以独占方式的资源分配必然导致资源利用率的降低。

·概念:

**·作用:**1)利于系统对于用户程序响应性能的提高

2)有利于提高资源的利用率

资源共享性分配相关的问题是分配策略、信息保护、存取控制等,必须妥善解决这些复杂问题。

共享性和并发性的关系:

1)共享性和并发性是操作系统的两个最基本特征,它们相互影响,相互依存。

2)资源的共享是因为程序并发执行导致的,若程序不是以并发的方式执行,资源也不必进行共享。

3)若系统中资源不能有效地共享使用,程序的并发也就无从说起,操作系统失去并发特性,整个系统性能将很难提升。

1.5.4 不确定性

**·不确定性:**是由操作系统的并发和共享性导致的。操作系统无法确定程序执行时间长短。操作系统的不确定性并不意味着无法控制资源的使用和程序的执行。

第二章 进程控制

2.1 进程的概念

2.1.1 进程的引入原因

①程序顺序执行的特点,不适应现代OS的需要(整个实体占用操作系统全部资源的方式不合时宜)

程序的结构也不具备并发处理的能力

程序顺序执行及其特征:手工处理阶段以及单道批处理阶段,程序是按顺序化方式在系统中独占全机的去执行

​ **特征:**依靠监督程序处理,系统资源利用率不高

特点

①顺序性:程序的执行严格按照顺序方式进行;

②封闭性:按顺序方式执行程序,该程序独占系统全部资源,不受外界因素的影响:

③可再现性:一个程序在初始条件保持不变的情况下,无论在什么环境中运行、什么时间段内运行,都应该有相同的执行结果;(因此OS设计时必须保证,输入条件不变,不受环境及执行时间的限制,其输出结果保持不变)

2.1.2 程序并发执行特征

​ **并发的概念:**指两个或多个事件在同一时间间隔内发生

**①并发性:**程序的执行在时间上可以重叠,在单处理器系统中可以并发执行;在多处理器环境中可以并行执行;

**②共享性:**它们可以共享某些变量,通过引用这些共享变量就能互相交换信号,从而,程序的运行环境不再是封闭的;

**③制约性:**程序并发执行或协作完成同一任务时,会产生互相制约关系,必须对它们并发执行的次序(即相对执行速率)加以协调;

**④交互性:**由于程序在执行中共享某些变量,所以一个程序的执行可能影响其他程序的执行结果。因此,这种交互必须是有控制的,否则会出现不正确的结果。即使程序自身能正确运行,由于程序的运行环境不再是封闭的,程序结果仍可能是不确定的,计算过程具有不可再现性。

2.1.3 多道程序系统的执行环境特点

**①独立性:**每道程序都是逻辑上独立的,无逻辑的制约关系。即若有充分的资源,每道程序都可以独立执行,且执行速度与其他程序无关,且起止时间也是独立的

​ **②随机性:**在多用户的环境下,程序的数据的输入与执行开始时间都是随机的

**③资源共享性:**软、硬件资源的共享,会导致制约进程的执行速度

2.1.4 与时间有关的错误

**概念:**在多道程序并发执行的程序共享资源或者互相协作,因其执行速度的不确定性以及多道程序之间缺乏控制所带来的错误。

执行环境的非封闭性、共享资源未得到有效保护、或者是进程先后顺序执行中未执行完毕,有可能会发生时间上的错误。

有三种方式可以避免发生**“与时间有关的错误”**,但在操作系统中只能使用一种方法:在资源分配和使用的过程中通过采取有效的错误来避免。

2.1.5 进程的定义

有独立功能的程序在一个数据集上的一次执行过程。

​ 进程是系统资源分配的基本单位。亦是资源分配的最小单位。

​ (程序执行的实体,例如一个工作由多人实行,一个人就是一个实体。从静态的角度观察,操作系统是一组程序和表格的集合;从动态的角度观察,操作系统是进程的动态、并发执行,有生存期。进程是执行中的程序。)

​ (进程是个动态的概念,可以关闭或者持续运行)

2.1.6 并发与并行的异同点

​ ·并行:几道程序同时运行在不同的CPU上,宏观和微观上都是同时发生

​ ·并发:几道程序分时运行在相同的CPU上,在宏观上通知,微观上不一定同时

​ ·并发执行的两种方式:

​ ①进程间的并发执行

​ ②进程内部的并发执行

并行机上,多个CPU是同一时刻,同时运行多个程序。这个同时,是真正意义上的同时,是物理上的并行。

​ ·并发需要解决的问题:

​ 程序的并发执行:一组在逻辑上互相独立的程序或程序段在执行过程中,其执行时间在上互相重叠,即一个程序段的执行尚未结束,另一个程序段的执行已经开始的执行方式

​ ·并发带来的问题:程序序的并发执行会破坏封闭性,同时潜在地破坏可再现性

2.1.7进程与程序的区别

​ ①程序是静态的,存在外存中;进程是动态的,存在内存中,有生存期

​ ②进程的特征是并发的,程序没有

​ ③进程在执行过程中会占用系统资源,操作系统不会以程序为单位分配资源

​ ④进程和程序之间是多对多的关系

​ i:程序与进程之间是一对多的关系

​ ii:进程与程序之间是一对多的关系——实验3

2.1.8 Bernstein条件

​ 程序A和程序B,均对数据及Pi进行操作

​ 程序A对数据及Pi读操作,Ra(Pi)

​ 程序A对数据及Pi写操作,Wa(Pi)

​ 程序B对数据及Pi读操作,Rb(Pi)

​ 程序B对数据及Pi写操作,Wb(Pi)

​ 程序A和程序B可以并发执行的条件:

​ 1)Ra(Pi)与Wb(Pi)的交集为空

​ 2)Rb(Pi)与Wa(Pi)的交集为空

​ 3)Wa(Pi)与Wb(Pi)的交集为空

​ 问题:

1)无法解决随机性;存在的程序个数未知,也无法判断哪些程序会使用到相同的共享数据

​ 2)运行时只是部分程序或数据调入内存

基于上述原因,并发执行的程序,无法及时判断其共享的数据集,因此,Bernstein条件理论上是判断并发执行的最有效的条件

2.1.9 进程状态及转换(课本图+PPT图)

​ ①进程状态的引入原因(方便操作系统管理系统中的进程)

​ 新建状态:刚刚创建的进程,操作系统还没有把它加入到可执行进程组中,通常是还没有加载到主存中的新进程

​ 运行状态:该进程正在被执行

​ 阻塞状态:进程在等待某些事件,如I/O操作

​ 就绪状态:进程做好了运行准备,只要获得CPU就可以开始执行

​ 消亡状态:操作系统从可执行进程中中撤销了进程,或者自身停止,或者因为某种原因被撤销

​ ②状态间的切换

2.1.10 Linux进程结构以及转换

​ 运行/就绪—— TASK_RUNNING:通过进程是否占有CPU资源来区分

进程调度器:从各个CPU的可执行队列中分别选择一个进程在该CPU上运行

​ 僵死——TASK_ZOMBIE:表示进程已经结束,但是没有从进程表中删除,仅剩task_struct结构这个空壳。task_struct中保存了进程的退出码,以及一些统计信息。用于在子进程在退出的过程中,内核向父进程发送一个信号,通知父进程来“收尸”。父进程可以通过wait系列的系统调用来等待某个或某些子进程的退出,并获取他们的退出信息,然后顺便将子进程的“尸体”(task_struct)也释放掉

可中断睡眠(浅度睡眠)——TASK_INTERRUPTIBLE:表示进程等待某个事件或某个资源。可以被信号唤醒而进入就绪状态等待调度

不可中断睡眠()深度睡眠——TASK_UNINTERRUPTIBLE:因硬件资源无法满足,不能被信号唤醒,必须等到所等待的资源得到之后由特定的方式唤醒

暂停——TASK_STOPPED :一般由运行状态转换而来,等待某种特殊处理

2.1.11 进程的实现PCB

​ ·Process Control Block_进程 控制 块:是进程存在的唯一标识,是操作系统对进程进行控制、管理和调度的一句,它在创建进程时产生,在撤销进程时消亡

​ eg:PCB的作用?/存在的意义?

​ 举例:OS管理进程——学校管理学生的学籍

​ OS:PCB = 学校:学籍卡

​ 操作系统管理进程的一种静态信息

​ ·PCB的主要内容:

进程标识符:进程符号名或内部id号

进程当前状态:本进程目前处于何种状态(运行、就绪、等待)

​ eg:当进程消亡到从系统中删除时,其对应的PCB是否还存在?

答:系统创建一个进程时,就为其创建一个PCB;进程被撤销删除时,相应的PCB也被删除。

2.1.12 进程的组成:code+data+stack+PCB

程序与数据:描述进程本身所应完成的功能

PCB:进程的动态特征,该进程与其他进程和系统资源的关系

2.2 进程控制

2.2.1 四种进程控制的操作:PPT P.75

​ (创建、撤销)、(阻塞、唤醒)

​ 进程创建:申请空白PCB->填PCB->置“就绪”状态

​ 进程撤销:释放PCB->释放内存->释放所有资源

​ 进程阻塞:置状态为“阻塞”->插入等待队列->停止程序运行->释放所有资源

​ 进程唤醒:置状态为“就绪”->插入就绪队列

2.2.2 进程控制是否允许并发执行?

​ 什么的并发:是为了提高系统吞吐量,实现资源共享的目的

​ 潜在的问题:程序结果的不可再现性、打破程序结果的封闭性

​ 不允许并发的可选择方法:系统调用、原语

2.2.3 原语

​ 定义:把系统态下执行的某些具有特定功能的程序段称为原语(CPU处于关中断状态)

​ 作用:用原语实现进程控制、保护操作系统内核

​ 原语是原子操作(atomicoperation),不可再分 ,要么全做,要么全不做。

​ 地位:

进程控制均须用原语实现

​ 操作系统内核的保护是通过原语 来实现

​ 四种进程操作流程图

​ 进程唤醒原语本身不涉及CPU资源的分配(非抢占式唤醒后即返回)

​ 可抢占式内核中,新加入就绪队列的进程优先级是否高于目前使用CPU的进程优先级

2.2.4 Linux进程及进程控制

·终端管理进程与shell进程是init进程的子进程,而其它用户的进程则是由shell进程创建的。Linux系统中,除了0#进程以外的所有进程都是由init进程衍生出来的,故也称init进程是所有用户进程的祖先。

eg:父进程为什么要创建子进程?

答:Linux是一个多用户操作系统,在同一时间会有许多的用户在争夺系统的资源。有事进程为了早一点完成任务在争夺系统的资源。有时进程为了早一点完成任务就创建子进程来争夺资源。一旦子进程被创建,父子进程一起从forg处继续执行,相互竞争系统的资源。

★fork的使用:

​ fork创建新进程:

​ ·为新进程生成task_struct结构

​ ·为新进程赋予一个统一的标识(PID)【PPID父进程标识】

 ·为进程映像分配存储空间 

​ ·将新进程插入就绪队列

​ fork():

​ pid=fork();

​ fork()返回值意义如下:

​ 0:在子进程中,pid变量保存的fork()返回值为0,表示当前进程是子进程。

​ >0:在父进程中,pid变量保存的fork()返回 值为子进程的id值(进程唯一标识符)。

​ -1:创建失败。

fork系统调用的特点:一次调用两次返回

​ 1)进程需要使用CPU

​ 2)进程对应的程序+数据?(fork执行中是把父进程的PCB复制给子进程)

​ 3)创建成功时,要区分是哪个进程在执行程序

​ 进程占内存空间——一个进程其对应的代码和数据在内存中是分开存放的:

​ 代码空间

​ 数据空间

·实际上,新创建的进程,起初是和父进程共享代码空间,由PCB中存储地址;子进程会复制父进程的数据空间,但不共享数据空间。当给子进程指定另外的程序执行时,子进程才会有自己的内存空间存放代码,

​ ·进程撤销:

父进程想撤销时,有个先决条件是,其所有子进程全部先被撤销

当子进程执行完,准备退出时,由内核向其父进程发送一个信号,父进程不再继续“睡眠”,将转入就绪队列排队。之后,父进程接着将退出,即完成撤销操作。

2.3 进程间通信

2.3.1 进程之间的关系

​ 进程互斥——进程间共享互斥资源

​ 多个进程因不能同时访问临界资源而产生的制约关系称为进程的互斥

​ 实现方法:PPT136

  1. 禁止中断

优点:简单有效

缺点:可能让系统无法正常相应紧急任务;且多CPU系统中该方法无效

  1. 软件方法:程序中设置标志位,进入临界区之前先测试该标志位,直到允许进入

优点:无需额外硬件,不增加成本。算法简单,易于实现

缺点:浪费CPU时间经常用于进行无效测试

​ 进程同步——进程间执行顺序要求

​ 系统中多个进程中发生的时间存在某种时序关系,需要相互合作,共同完成一项任务

​ 进程通信——进程间交流的需要

互斥和同步的异同:

  1. 互斥进程各自单独执行时均可得到正确结果,仅在临界区交互时可能出现问题;同步进程间无法各自独立完成,需相互配合共同协调才能得到正确结果;

  2. 互斥进程进入临界区无顺序要求,同步进程间有严格的先后顺序要求;

  3. 互斥进程间不知对方的存在,而同步进程间不仅知道对方进程的存在,还需相互通信以达到相互协调。

2.3.2 临界资源

一次只允许一个进程使用的资源(扩展:如打印机,看起来是个共享的资源,实际上是个互斥的资源,表示了虚拟性)

临界区:访问临界资源的那段程序

​ 临界区原则:有空让进、忙则等待、有限等待、让权等待

2.3.3 信号量机制(PV操作):通过伪代码的方式

​ 信号量:管理相应临界区的共有资源,它代表管理资源的使用权

​ 信号量是一个整型变量:

​ >=0:可供并发进程使用的资源实体数

​ <=:正在等待使用临界区的进程数

用于互斥的信号量初值应该大于零

​ 整数型信号量:仅通过两个标准的原子操作来访问,即P、V操作

​ 记录型信号量:(常用,代码较复杂,但查询较为简单)除需要的一个用于代表资源数目的信号量外,还应增加一个进程链表,用于链接上述所有等待同一临界资源的进程

​ 公用信号量和私用信号量:

​ 信号量机制解决进程并发:用整型变量代表可用资源的实体数。(记录型信号量)

​ PV原语:信号量的初值只能由P,V原语操作(P:passeren V:verhoog)

​ PV操作:伪代码方式描述进程间共享资源的使用过程。

​ P操作:申请资源操作 PPT 150

​ ①sem减1

​ ②若sem减1后仍大于1或等于零,则P返回,进程继续

​ ③若sem减1后小于零,则该进程阻塞转等待队列中

​ 对于整数型信号量:申请共享资源时,首先,对信号量减一,表示将使用共享资源的进程多了一个,或者,可用的共享资源个数少了一个

​ 当信号量减1后的值小于0,表示减1之前信号量的值至少是0了。此处表示减1之前信号量所管理的共享资源已无可用的了

​ eg:对于网络共享打印机,是同类资源,资源的使用不区分是某一个,共享资源的个数是多个

​ V操作:释放资源操作

​ ①sem加1

​ ②若sem加1后仍大于1,则V停止操作,进程返回调用处,继续执行

​ ③若sem减1后小于或等于零,则该进程转就绪队列,同时进程调度选取一个等待队列中的进程转运行或就绪

​ 若,信号量加1后的值大于1,表示该进程在释放资源之前,信号量所管理的共享资源个数至少为0,表示没有进程在等待使用共享资源。则当前进程V操作成功,或返回,继续执行后续操作。

​ 若,信号量加1后的值等于0,表示该进程在释放资源之前,信号量的值为-1,也即有一个进程在等待;

​ 若,信号量加1后的值小于0,表示该进程在释放资源之前,信号量的值必然小于0,有若干进程在等待;

​ 因此,根据临界资源的使用原则:“有空让进”,则必须选中个等待中的进程,修改其状态有“等待”转“就绪”

​ 如果,不管“有空让进”,pa进程继续使用CPU,而pb则仍处于“等待”状态,全局变量a一直处于“空闲”状态,这种情况是不被允许的!!

​ 因此,pa进程不能继续“执行”状态,须转“就绪”状态。

​ eg:为什么PV操作必须用不可分割的原语实现

​ 原语的定义:系统态下执行的特殊程序段。(关中断状态)

​ PV操作涉及资源的分配。

​ PV操作时是否允许并发操作?原因?

·n个并发进程,互斥信号量mutex的初值为1:

mutex的取值范围为:1~-(n-1)

1:表示没有进程进入临界区。有一个资源,无进程等待;

0:表示有1个进程进入临界区。无资源,无进程等待;

-i:表示1个进程进入临界区。无资源,且有i(i<=n)个进程等待进入

·用P、V原语操作实现进程控制的方法与步骤:

①分析进程间关系

②为各并发进程设置信号量

​ ③利用P、V原语和信号量规定各进程的执行顺序

2.3.4 Pc进程和Pp进程(这段不懂,保留原稿)

​ Pc进程:

​ 借用wait和消息bufempty描述其执行过程;

​ signal通知对方进程

​ Pp进程:

​ 借用wait和消息bufful描述执行过程

​ signal通知对方进程

​ 思考:

​ 该例中,为什么需要设两个消息名:bufempty和buffull?

​ 只用一个消息是否可行?

​ 由wait过程和消息bufempyt的使用决定某个进程是否可以开始执行,这与信号量机制中P操作的:申请资源–》信号量值减1;

​ 由signal过程和消息buffull的使用,也可看作信号量机制中的V操作(即,释放资源)

​ 目前分析来看,wait和signal和PV操作有一定的相通性。

​ Pc:

​ A: P(bufempty);

​ compute…

​ save–>bufffer…

​ V(buffull);

​ goto A

​ Pp:

​ B: P(buffull);

​ print…

​ delete…

​ V(bufempty);

​ goto B

​ PV操作是否能完成Pc和Pp进程执行的先后执行顺序

​ eg:如何设定bufempty和buffull的初值?

​ 一般情况下,在初始情况时,buffer缓冲区是为空的,也即,对于初始情况下,应该能够保证Pc进程可以先于Pp进程运行!

​ 因此,对于“P(bufempty);”,在初始情况下,应保证此P操作可以申请成功!

​ 所以,bufempty的初值应该设为?

​ int bufempyt=1;//bufempty代表buffer初始情况下为空,未存放数据;

​ 此处的1,还代表,Pc进程可执行一次的数据计算、存入buffer的操作!!

​ (信号量其它是管理的是共享资源的使用权!)

​ eg:对于buffull初值如何设定?

​ 在初始情况时,buffer缓冲区是为空的,则对于Pp进程初始情况下,buffer未存放数据时,“P(buffull);”不能申请成功!

​ int buffull=0;//buffull代表buffer初始情况下为空,未存放数据,缓冲区为空不能执行Pp进程!

​ 在buffer为空时,bufempty和buffull的初值决定了两个进程Pc和Pp的执行顺序!!

​ 初值设定好了,再来判断PV操作是否可以实现进程同步的并发控制??

思考:

Pc:

A: P(bufempty); //1–>0

​ compute…

​ save–>bufffer…

​ V(bufempty);//如果此处写的是这个V操作,会带来什么问题??

​ //0–>1

​ //Pc进程循环不断地进行计算、存数据,而Pp进程并未取走数据!!

​ //V(buffull);

​ goto A

​ 因此,Pc进程执行完一次数据的计算、存放后,不能V(bufempty),不然会导致出现问题!

Pc:

A: P(bufempty); //bufempty : 1–>0

​ compute…

​ save–>bufffer…

​ V(buffull); //buffull : 0–>1,通知Pp进程”不必继续睡眠,要准备开始工作“

​ goto A

对于Pp进程:

Pp:

B: P(buffull); //1–>0

​ print…

​ delete…

​ V(bufempty); //0–>1

​ goto B

对于bufempty代表的缓冲区状态,什么时候会变会空?

​ 将由Pp进程进行修改!

​ 当buffer有数据时,由buffull和bufempty的值决定了Pc和Pp的执行顺序!

​ 因此,在上述从初始情况到数据清空执行完毕后,Pc进程可继续运行!

2.3.5 进程通信IPC:进程间的信息交换

分类:

·低级进程通信:少量的信息交换,一般只传送一个和几个字节的信息,达到控制进程执行速度的作用。

·高级进程通信:大量的信息交换,有专门的同学机制,通信对用户透明

方式:

·直接通信方式(消息缓冲机制):消息即进程之间相互传送的赖以发生交互作用的有结构的数据。两通信进程必须满足以下条件:

(1)在发送进程把消息写入缓冲区和把缓冲区挂入消息队列时,应禁止其他进程对缓冲区消息队列的访问。同理,接收进程取消息时也禁止其他进程访问缓冲区消息队列。

(2)当缓冲区中没有信息存在时,接收进程不能接收到任何消息。

·间接通信方式(邮箱机制):进程采用间接通信方式时,进程间发送或接收消息通过一个共享的数据结构一信箱进程采用间接通信方式时,进程间发送或接收消息通过一个共享的数据结构一信箱来进行,消息可以被理解为信件,每个信箱有一个唯一的标识符。

当两个以上的进程有一个共享的信箱时,它们就能进行通信。

进程间的通信要满足如下条件。

(1)发送进程发送消息时,邮箱中至少要有一个空格存放该消息。

(2)接收进程接收消息时,邮箱中至少要有一个消息存在。

邮箱包括两个部分:邮箱头和邮箱体。其中,邮箱头包括邮箱名称、邮箱大小、拥有该邮箱的进程名等;邮箱体用来存放消息。

2.3.6 管道通信

管道(pipe)通信是由UNIX首创的一种借助文件和文件系统形成的一一种通信方式。

消息缓冲通信机构是以内存缓冲区为基础的。

管道是以文件系统为基础的。

管道类型包括有名管道和无名管道。

pipe****只允许建立者及其子进程使用。

管道按先进现出方式FIFO传送消息,且只能单向传送消息

相关命令:

2.3.7 软中断通信/信号机制

·信号(signal)机制是UNIX系统中最为古老的进程之间的通信机制,用于在一个或多个进程间传递异步信号。

·软中断是对硬件中断的一种模拟,发送软中断就是向接受进程的task_struct结构中的相应项发送一个信号。接收进程在收到软中断信号后,将按照事先的规定去执行一个软中断处理程序。

·软中断和硬中断的区别:软中断处理程序必须等到接收进程执行时才生效,硬中断处理程序,收到中断信号后才被启动

排除死锁的方法。

·操作方式:忽略-ignore此信号;捕捉-catch信号;执行系统默认-default动作

·相关命令:

2.4 死锁

2.4.1 死锁的概念

在两个或多个并发进程中,如果每个进程持有某种资源而又都等待着别的进程释放它或它们现在保持着的资源,在未改变这种状态之前都不能向前推进,称这一组进程产生了死锁。

2.4.2 死锁的起因

根本原因:系统资源不足->导致资源竞争使用->两种情况(资源的有效分配利用/死锁)

2.4.3 死锁产生的必要条件

(1)互斥。并发进程所请求的资源是互斥使用的资源,-次只能被一个进程使用。

(2)不可剥夺。进程所占有的资源在没使用完之前不能被其他进程抢占。

(3)部分分配。操作系统允许进程每次只请求自己所需资源的一部分。

(4)环路。系统中各并发进程对资源的占用和请求形成一个环路。

在上述4个条件中,互斥是资源的固有特性,是很难改变和破坏的。因此,要解决死锁,须从其他3个条件着手解决。

2.4.4 死锁的排除方法——死锁的预防

(1)破坏部分分配条件:将进程所需互斥资源一次性分配,不会因资源请求而被阻塞,从而预防了死锁;

(2)可剥夺资源:当某进程新的资源未申请成功时,释放已占有的资源,破坏了不可剥夺条件预防死锁;

(3)破坏环路等待条件:将资源编号,各进程申请资源按号的递增进行,从而破坏了环路等待条件预防死锁。

2.4.5 死锁的排除方法——死锁的避免(动态预防)

死锁的避免是指操作系统在动态分配过程中对每一次分配都要采取某种策略去判断一下当前的分配有无可能导致死锁,如果不可能则实施分配,否则拒绝此次分配。

死锁的避免也称为动态预防,因为系统采用动态分配资源,在分配过程中预测出死锁发生的可能性并加以避免的方法。这是一种动态的排除死锁的方法。

状态划分:安全状态(处于此状态,可避免发生死锁)、不安全状态

安全状态:在避免死锁的方法中,允许进程动态地申请资源,系统在进行资源分配之前,先计算资源分配的安全性。若此次分配不会导致系统进入不安全状态,便将资源分配给

进程;否则进程等待。

如果系统中的所有进程至少能以某一种顺序执行完毕,则称系统当前处于安全状态。

避免死锁的实质在于如何使系统不进入不安全状态。

当前系统中所有进程能够执行完毕的一种执行顺序,表示为<Pi,Pj,…,Pm>,称之为安全序列。

银行家算法:背景、规定、原理、方式、算法、特点 PPT.285

2.4.6 死锁的检测与恢复

最简单的办法:将产生死锁的进程全部撤销

逐个撤销死锁的进程,直至死锁解除为止

从发生死锁的进程中剥夺其占用的资源,破坏死锁的“不可剥夺条件”,剥夺的次序以花费最小为次序

2.5 线程

2.5.1 线程的引入原因

为了减少进程并发执行的开销,提高系统性能

将资源分配与调度分开

并发的进程因共享CPU时间片,则时间片满时,当前进程只能让出CPU,因此,系统中并发的进程不断进行切换。

进程在系统中是通过PCB。PCB信息很多,因此,进程切换,涉及系统资源的耗费是非常庞大的。

线程也可占用CPU,同进程下的不同线程间切换时,系统耗费非常小。

反之,不同进程下线程间的切换还是如进程间切换一样,系统资源耗费较大。

2.5.2 线程的基本概念

·线程是进程的一部分。

·线程是进程中的一个实体,是被系统独立调度和执行的基本单位。

·线程除运行必需的资源外,不拥有系统资源,但它可与同属一进程的其它线程共享进程所拥有的全部资源;

·一个线程可创建和撤消另一线程;同一进程中的线程间可并发执行; .

·线程有就绪、阻塞、执行三种基本状态

2.5.3 线程和进程的区别

系统开销:

创建——撤消的开销(PCB比TCB复杂)

调度开销:同一进程内的线程切换的开销小于进程切换开销,不会引起进程切换。

资源开销:线程一般不拥有资源,但可访问所属进程的资源。

通信开销:进程通信——具有独立的地址空间,通过共享文件等。线程通信一任务通信,开销小。

2.5.4 线程的分类

(1)用户级线程(user level threads)

用户级线程管理过程全部由用户程序完成,OS内核只对进程进行管理。OS提供一个在用户空间执行的线程库,包括创建、调度、撤销线程通信,线程的执行以及存储线程上下文的等功能。

(2)核心级线程(Kernel- level Threads)

即系统级线程,由OS内核进行管理。OS内核给应用程序提供相应的系统调用和应用程序接口API,使用户程序可以创建、执行、撤销线程。

2.5.5 线程的执行特性

产生(Spawn):当产生一个新进程时,同时也为该进程产生-一个线程,随后,进程中的线程可以在同一个进程中产生另一个线程,并为新线程提供指令指针和参数。

阻塞(Block):当线程需要等待一个事件时,它将自己阻塞,此时处理器转而执行另一个就绪线程。

解除阻塞(Unlock):当阻塞一个线程的事件发生时,该线程被转移到就绪队列中。

结束(Finish):当一个线程完成时,其寄存器上下文和栈都被释放。

第三章 处理机调度

处理机调度关系到整个计算机系统性能,它是一个程序,一个安排进程先后执行顺序的算法。

3.1 作业的概念

3.2.1 作业的概念

定义:用户在一次解题过程中要求计算机所做工作的集合称为一个作业

作业与程序的区别

3.1.2 作业控制块JCB(PCB/TCB)

在作业建立到消亡的整个过程中,JCB一直存在,知道作业撤销时。(与PCB相同)

JCB是作业存在的标志。

JCB内容:作业名、作业类型、资源要求、资源使用情况、优先级(数)、当前状态、其他

引伸:

process control block 进程控制块

thread control block 线程控制块

JCB:job control block 作业控制块

DCB:device control block 设备控制块

3.1.3 作业与进程的区别

一个进程是一个程序对某个数据集的执行过程,是分配资源的基本单位。作业是用户需要计算机完成的某项任务,是要求计算机所做工作的集合。一个作业的完成要经过作业提交、作业收容、作业执行和作业完成4个阶段。而进程是对已提交完毕的程序所执行过程的描述,是资源分配的基本单位。其主要区别如下。

(1)作业是用户向计算机提交任务的任务实体。在用户向计算机提交作业后,系统将它放入外存中的作业等待队列中等待执行。而进程则是完成用户任务的执行实体,是向系统申请分配资源的基本单位。任一进程,只要它被创建,总有相应的部分存在于内存中。

(2)一个作业可由多个进程组成,且必须至少由一个进程组成,反过来则不成立。

(3)作业的概念主要用在批处理系统中,像UNIX这样的分时系统中就没有作业的概念。而进程的概念则用在几乎所有的多道程序系统中。

程序与进程之间的区别:

(1)进程更能真实地描述并发,而程序不能。

(2)进程由程序和数据两部分组成,进程是竞争计算机系统有限资源的基本单位,也是进程处理机调度的基本单位。

(3)程序是静态的概念;进程是程序在处理机上一次执行的过程,是动态的概念。

(4)进程有生存周期,有诞生有消亡。是短暂的;而程序是相对长久的。

(5)一个程序可以作为多个进程的运行程序;一个进程也可以运行多个程序。

(6)进程具有创建其他进程的功能;而程序没有。

作业、进程和程序之间的联系:

一个作业通常包括程序、数据和操作说明书3部分。每一个进程由PCB、程序和数据集合组成。这说明程序是进程的一部分,是进程的实体。因此,一个作业可划分为若干个进程来完成,而每一个进程有其实体————程序和数据集合。

3.1.3 作业步的概念

作业步是在一个作业的处理过问程中,计算机所做的相对独立的工作。

每一个加工步骤称一个作业步 (Job Step)。
作业由不同的顺序相连的作业步组成。

3.1.4 作业的状态

(1) 提交状态。一个作业在其处于从输入设备进入外部存储设备的过程。

(2) 收容状态。作业内容全部进入外存输入井,但该作业还未被作业调度程序选中时

所处的状态。

(3) 执行状态。作业调度程序从后备作业队列中选择若干个作业投入运行,它为被选

中作业建立进程并分配必要资源,这些被选中的作业处于执行态。

(4) 完成状态。当作业运行完毕,但它所占有的资源还未全部释放时所处的状态。

作业与进程的关系

作业可被看作用户向计算机提交任务的实体,而进程则是计算机为了完成用户任务实体而设置的执行实体,是系统分配资源的基本单位。

一个作业由一个或多个进程组成:

(1)系统为一个作业创建一个根进程;

(2)在执行作业控制语句时,根据任务要求,系统或根进程为其建立相应的子进程;

(3)系统为子进程分配资源和调度各子进程完成作业要求的任务。

3.2 多级调度的概念

高+中+低+(线程调度)

3.2.1 高级调度

任务:决定将外存上后备队列中的哪些作业调入内存。

调度工作决定

接纳多少作业:取决于多道的程度,即内存允许放多少个作业。

接纳哪些作业:有调度算法决定。

适用于批处理系统

3.2.2 中级调度

又称进程调度、微观调度

任务:决定就绪队列中的哪些进程将获得处理机。

调度方式

非剥夺式

剥夺式

抢占原则

时间片

优先权

进程长短

适用于分时、实时、批处理系统

3.2.3 低级调度

又称对换程序

主要作用:内存和外存对换区之间进行进程对换,以解决内存紧张问题。

3.2.4 线程调度

现代操作系统为提高并行处理能力实现了线程技术,在此类操作系统中处理器的分派 与管理等调度均以线程为单位进行.对于线程调度(Thread Scheduling),一般采用优先调度策略

3.2.5 各级调度图

3.3调度性能衡量指标——作业调度算法

周转时间是指作业从提交时刻开始到完成时刻为止所经历的时间

或用等待时间加上执行时间,即

而平均周转时间就是将一段时间内系统执行完毕的所有进程的周转时间之和除以进程

的个数,如:

带权周转时间是指进程周转时间和进程执行时间的比值,即

而平均带权周转时间的计算公式为

3.3.1 先来先服务调度算法(First Come First Served, FCFS)

先来先服务调度算法按照作业进入就绪队列的先后次序选择作业投入运行。算法的优

点是易于理解且实现简单,只需要一个队列,对每道作业都相当公平。但是算法的缺点是

只考虑了作业进入就绪队列的先后,而没有考虑作业执行时间的长短,很可能出现短作业

等待的时间远超过其执行时间,因此该算法对短作业不利。

3.3.2 最短作业优先法(Shortest Job First, SJF)

为改进 FCFS 算法对短作业不利的调度方式,SJF 算法总是选取执行时间最短的作业

优先投入运行。

3.3.3 最高响应比优先法(Highest Response Ratio Next, HRN)

最高响应比优先法是对 FCFS 和 SJF 两种调度算法的一种综合运用。FCFS 方式只考

虑每个作业的等待时间而未考虑执行时间的长短,而 SJF 方式只考虑执行时间而未考虑等

待时间的长短。因此,这两种调度算法在某些极端情况下会带来某些不便。HRN 调度策略

同时考虑每个作业的等待时间长短和估计需要的执行时间长短,当需要从就绪队列中选择

新的作业投入运行时,先计算这个作业的响应比,选择响应比最高的作业开始运行。

3.4调度性能衡量指标——进程调度算法

调度功能:PCB记录进程的有关情况、决定分配策略、实施处理机的分配和回收

3.4.1 优先数进程调度算法

作业在系统中创建时先确定其优先数。优先数的选择要综合考虑各种因素,如作业的

轻重缓急程度、作业的大小、等待时间的长短、外部设备的使用情况等,再结合系统性

能,最终确定其优先数,调度时按优先级高者先执行。

分为不可抢占CPU和可抢占CPU两种情况:

**可抢占式:**可剥夺方式也被称为抢占方式。在这种方式下,允许一个进程按照某种原则,抢占其它进程占有的处理机。抢占采用优先权原则的比较多,也就是说,如果一个进程比正在运行进程的优先级高,则它可以抢占处理机而运行

**不可抢占式:**不可剥夺方式也被称为非抢占方式。采用这种调度方式时,一旦把处理机分配给某个进程,该进程将一直执行下去,直到运行完毕或因某种原因不能运行,才把处理机分配给其它进程,决不允许其它进程强占正在运行进程占有的处理机。

静态优先数:

进程被创建时,确定一个优先数,并在进程运行期间保持不变。

进程所需资源越多,运行时间将越长,其优先级越低。

无法反应进程执行特性。

动态优先数:

进程被创建时,确定一个优先数,在以后任一时刻,进程被重新调度或耗尽时间片时,优先数被调整,以反映进程的动态变化。

例如,进程的优先级随着占用CPU而降低,随着等待时间增加而变高。

3.4.2 简单循环轮转法(RR=round robin)

让每个进程在就绪队列中的等待时间与享受服务的时间成比例。将CPU的处理时间分为固定大小的时间片,若运行中的进程时间片到,但未完成操作时,则该进程放弃处理机,转到就绪队列尾部,等待下一次进程调度。

时间片:q=t/n;

q:时间片

t:用户可接受的响应时间

n:系统中进程个数

①当时间片很大时,每个进程得到比完成该进程多的处理机时间,此时轮转调度模式退化为FCFS模式。

②当时间片非常小时,上下文转换开销就成了决定因素,系统性能降低,大多数时间都消耗在处理机的转换上,只有少许用在用户的计算上。

4.例3-3

1>FCFS: 调度顺序: 1–>2–>3–>4

2>SJF: 调度顺序: 3–>2–>1–>4

3>RR:

时间片为1:

1->2->3->4->1->2->4->1->2->4->1->4->1->4->1->4->4

时间片为3:

1->2->3->4->1->4->4

5.改善简单循环轮转RR调度性能:

1>可变时间片

响应时间保持不变

2>多级反馈轮转法

时间片的设计:

S1>S2>S3>…>Sn

S1<S2<S3<…<Sn

3.5 LINUX进程调度

Linux系统采用动态优先数和可变时间片的调度算法,且采用可抢占式调度策略。

Linux系统调度目标是响应时间短,系统利用率高。

第四章 进程控制

4.1 存储管理概念

存储管理是操作系统主要的功能,存储管理主要对象是计算机中的内存,即主存储器。

存储管理的功能主要有: 主存储空间的分配和去配,地址转换,主存储空间的共享与保护,主存储空间的扩充

地址转换:

原因:由于用户程序中使用的地址是逻辑地址(也称相对地址),而程序在内存被执行时(或程序在装入内存时)须将逻辑地址转换为机器可以识别的物理地址(也称绝对地址)。

(1) 逻辑地址是指用户程序经编译后,每个目标模块以 0 为基地址进行的顺序编址。逻辑地址又称相对地址。

(2) 物理地址是指内存中各物理存储单元的地址从统一的基地址进行的顺序编址。物理地址又称绝对地址,它是数据在内存中的实际存储地址

·什么是内碎片?外碎片?

当一个进程装入到固定大小的分区块(比如页)时,假如进程所需空间小于分区块,则分区块的剩余的空间将无法被系统使用,称为内部碎片。

外部碎片指的是还没有被分配出去(不属于任何进程),但由于太小了无法分配给申请内存空间的新进程的内存空闲区域。

单道连续分配只有内部碎片。多道固定连续分配既有内部碎片,又有外部碎片。

4.1.1计算机系统的存储体系

4.1.2 存储器的组织方式

1.逻辑组织:

逻辑组织就是用户能够看到的存储器的组织方式。主存通常都是以字或字节为单位在逻辑上组织成线性一维的地址空间。这里所说的地址并非是逻辑地址,只是用来说明内存物理地址是一维线性的结构

2.物理组织:

物理组织指的是实际存储器电路对于存储单元的组织方式。这种方式对用户而言太复杂,故希望采用黑匣子的方式来进行使用,而对黑匣子的操作需要处理机硬件和操作系统软件的控制管理来共同完成。

·高级语言源代码转化为进程需要3给阶段

●编译

源代码——目标代码

●链接

目标代码+所需库函数=装入模块

●装入

将装入模块装入内存,该过程也叫做地址重定位,也称地址映射

重定位:把用户程序中的相对地址(逻辑地址)转换为主存中的绝对地址(物理地址)过程

根据地址映射建立方式不同,单个可装入模块的装入方式有3种:

(1) 绝对装入方式。逻辑地址和物理地址一样,不需要映射,但是要求装入内存时必须严格按照物理地址进行放置。

(2) 静态重定位方式。编译时产生相对地址,装入程序确定要装入模块的地址,并在装入时进行重定位,程序运行中不允许在内存移动。

(3) 动态重定位方式。编译时产生相对地址,装入程序在把装入模块装入内存时,不立即把装入模块中的相对地址转换为绝对地址,而是推迟到程序要真正执行时才进行。

·三种方式的优缺点:

绝对装入方式不适合多进程并发环境,因为编译时很难确定内存中哪些空间是可以进驻模块的。

**静态重定位方式:**静态地址重定位是在程序装入内存前完成从逻辑地址到物理地址 的转换。

优点:无需硬件支持

缺点:程序执行前全部装入内存且装入后无法移动,故无法实现虚拟存储技术;占用连续的存储空间故难以实现程序和数据的共享

动态重定位在程序执行过程中进行重定位,由系统硬件完成从逻辑地址到物理地址 的转换。装入时不加任何修改,但在每次访问内存单元前才进行地址变换。

优点

内存可非连续分配

为虚拟存储技术的实现提供了基础

利于程序段的共享

·物理地址:是指内存中各物理存储单元的地址从统一的基地址进行的顺序编址。物理地址又称绝对地址,它是数据在内存中的实际存储地址。

·物理地址空间:物理地址的集合称为物理地址空间(主存地址空间),它是一个一维的线性空间。

·逻辑地址:是指用户程序经编译后,每个目标模块以0为基地址进行的顺序编址逻辑地址又称相对地址。

·逻辑地址空间:用户的程序地址的集合,它的编址总是从0开始的,可以是一维线性空间,也可以是多维空间。

·程序的连接方式

●静态链接

对相对地址进行修改

变换外部调用符号

●装入时动态链接

在装入内存时,边装入边链接

便于软件版本的修改和更新

便于实现目标模块共享

●运行时动态链接

运行时,用到哪个模块,再链接哪个模块,用不到的模块可不装入内存。

4.2分区存储管理

**·定义:**分区存储管理是满足多道程序设计的最简单的一种存储管理方法。允许多个用户作业共享主存空间,这些作业在主存中是以划分分区而共存的。

4.2.1固定分区方式

固定分区: 就是将用户区进行空间划分成多个分区,各个分区的大小不一定相等, 但一旦划分,分区的个数和大小就固定不变了.一个分区只能加载一个作业,不允许多个作业同时存在一个分区内,当分区的作业执行结束后,再加载新的作业。

要求:一个分区之只装一个作业

**分区划分:**一般由系统操作员或操作系统决定。例如可划分为长作业分区和短作业分区。分区一旦划分结束,在整个执行过程中每个分区的长度和内存的总分区个数将保持不变。

**分区说明表:**内存的分配释放、存储保护以及地址变换等都通过分区说明表进行

缺点:

各分配分区可能造成碎片(零头);

程序大小受分区空间大小的限制。

一个分区只装一道作业、内碎片无法解决

分配:

按用户要求查找一个满足要求的空闲分区(当用户程序要装入执行时,通过请求表提出内存分配要求和所要求的内存空间大小。存储管理程序根据请求表查询分区说明表,从中找出一个满足要求的空闲分区,并将其分配给申请者。)

回收:

将分区状态置为未分配即可.(当进程执行完毕,不再需要内存资源时,存储管理程序回收内存,并修改分区表-状态为未分配状态即可。)

4.2.2可变分区方式

可变式分区: 又称为动态式分区.可变式分区在作业执行前并不直接建立分区,分区的 建立是在作业的处理过程中进行的.且其大小可随作业或进程对内存的要求而改变.可变 分区动态地为作业分配空间,这样可以避免过多的不能使用的内存碎片产生.系统初启时 内存中只有一个空闲区.按作业或进程的要求分配分区,一段时间后,分区的大小,个数 是变化的.

创建分区:在装入程序时按其初始要求分配,或在其执行过程中通过系统调用进行分配或改变分区大小。

问题:各作业释放后的空间不连续,导致总的空闲空间很大却不能分配的情况发生。

分区说明表:对内存进行管理。

自由链:把内存中的可用分区单独构成可用分区表或可用分区自由链,以描述系统内的内存资源。

请求表:把请求内存资源的作业或进程构成一个内存资源请求表。

·可变式分区的存储空间的分配与回收

(1)当用户作业或进程执行结束时,存储管理程序要收回已使用完毕的空闲区,并将其插入空闲区可用表或自由链。

(2)在将一个新空闲可用区插入可用表或队列时,该空闲区和上下相邻区的关系是下述4种关系之一:

动态分区时的分配与回收主要解决三个问题:

(1)对于请求表中的要求内存长度,分配程序从可用表或自由链中寻找出合适的空闲区。

(2)分配空闲区之后,更新可用表或自由链。

(3)进程或作业释放内存资源时,和相邻的空闲区进行链接合并,更新可用表或自由链。

为此需要好的分配算法来减少压缩次数,常用的可变分区分配算法有以下 3 种。

  1. 最先适应算法(也称首次适应算法) (first fit algorithm) 作业20

特点:

优先利用内存低地址部分的空闲区。

优点:

保留了高地址部分的大空闲区。

缺点:

低地址端留下许多难以利用的很小空闲分区(碎片);

增加查找可用空闲分区开销。

  1. 最佳适应算法(best fit algorithm)

特点:

优先利用了大小与程序要求最接近的空闲区。

优点:

保留了大空闲区。

缺点:

剩下的空闲区很小,且数量较多。

  1. 最坏适应算法(worst fit algorithm)

特点:

总是挑选出最大的分区分配给程序。

优点:

分配给程序后剩下的空闲区较大,可能装下其它作业。

缺点:

最大空闲区总是首先被分配而进行划分,难于满足大作业的要求。

·三个算法相比较

(1) 从搜索速度上来看,最先适应算法有最佳的性能。最佳适应算法按大小排序空闲区,则分配空间时实际上是对所有区进行一次搜索。同时,从回收效率来看,最先适应算法性能也是最优的,因为回收一个空闲区时,不必改变该区在表中的位置(除非该区的大小与作业或进程大小一致,则直接从空闲空间表中删除),只需修改该区的大小或起始地址;而最佳适应算法和最坏适应算法都必须重新搜索排序,以形成新的空闲空间表。而最先适应算法不需要这些开销。

(2) 最佳适应算法的优点是找到的空闲区是最佳的,也就是最佳适应算法找到的空闲区正好等于用户请求的大小或是能满足用户需求的最小空闲区。但是这样就使余下的碎片很小,很难再次使用。

(3) 最坏适应算法尽可能使分配后的剩余空闲区最大,从而避免极小碎片的产生。它选择最大的空闲区优先使用,以使分配后余下空间仍能再分配使用。

上述 3 种算法各有特长,针对不同的作业或进程序列,效率各不相同。因此,判断算法的优劣,应该按照不同应用的场合,不能一概而论

4.2.3分区式存储管理的特点

优点:(1)在内存中实现了多作业或进程的存储,有助于实现多道程序系统,从而提高了系 统资源的利用率.

(2)分区存储管理所需硬件较少,管理算法较为简单,因此这种管理方式易于实现.

缺点:(1)无论固定分区产生的“内部碎片”和可变分区产生的“外部碎片”均是该存储 管理方式难以解决的问题,即内存利用率不高.

(2)类似于单一连续存储管理,分区存储管理对于作业或进程是全部调入内存,因此 会出现内存中包含从未使用过的信息,更进一步影响了内存的利用率.

(3)分区存储管理中作业或进程是占用连续存储空间,作业或进程的大小受内存可用 区大小的限制,因此某些大作业或内存需求较大的进程可能无法在系统中执行.

4.2.4 分区式存储管理的内存扩充技术

动态分区查找空闲区的3种算法从一定程度上优化了内存管理,但是内存的利用率仍然不高,存储器可能含有从未访问过的程序或进程。而且还存在严重的碎小空间(碎片)不能利用的问题,进一步影响了内存的利用率。各分区之间的信息也难以实现。进程的大小受分区大小限制,除非配合采用覆盖和交换技术

**1.**内存压缩技术

**2.**交换技术

**基本思想:**基本思想:将处于等待状态(等I/O)或就绪(等CPU)状态的进程从内存换出到外存,把将要执行的进程移入内存。

**引入原因:**多道程序系统中,同时执行好几个作业或进程,但是同时存在于内存中的作业或进程,有的处于执行状态或变绪状态,而有的则于等待状态,一般来说,等待较长,如果让处于等待状态的进程继续驻留内存,将会造成存储空间浪费,因此,应把处于等待态进程换出内存。

换入、换出(swap in/swap out):在基于优先级的调度中,如果一个更高优先级进程来了且需要服务,内存管理可以交换出低优先级的进程,以便可以装入和执行更高优先级的进程。当更高优先级进程执行完后,低优先级进程可以交换回内存以继续执行;为了支持交换,必须在系统空间设立I/O缓冲区。交换要花费较长的时间。

**3.**覆盖技术

基本思想:一个程序不需要一开始就把它的全部指令和数据都装入内存后再执行。

技术实现:把程序划分为若干个功能上相对独立的程序段,按照其自身的逻辑结构将那些不会同时执行的程序段共享同一块内存区域。程序段先保存在磁盘上,当有关程序段的前一部分执行结束,把后续程序段调入内存,覆盖前面的程序段。

覆盖技术

·将程序的必要部分(常用功能)的代码和数据常驻内存;

·可选部分平时存放在外存中,在需要用到时才装入到内存

·不存在调用关系的模块不必同时装入到内存,从而可以相互覆盖 (即不同时用的模块可共用一个分区)。

·覆盖与交换技术比较

与覆盖技术相比,交换技术不要求用户给出程序段之间的逻辑覆盖结构。

交换发生在进程或作业之间,而覆盖发生在同一进程或作业内。此外,覆盖只能覆盖那些与覆盖段无关的程序段。

4.3分页存储管理

4.3.1 分页存储管理的基本原理

·引入原因:

分区管理的缺陷:系统对于每个存储要求,都分配一片连续的内存空间,导致碎片的产生和内存利用率不高。

造成这个问题的主要原因是用户程序装入内存时是整体装入的,主存适应作业对空间连续的要求,从而出现主存有足够的空间但由于不连续而导致的不能分配的现象

**·解决分区存储问题的思路:**程序适应主存,将程序分开存放——分页存储管理的基本思想。

·:分页存储管理是将每个进程的逻辑内存也划分成同样大小的块,称为页(page),并为各页加以编号,从 0 开始。

·物理块:内存被划分成与页相同大小的若干个存储块,称为(物理)块,页面或页框(page frame),也加以编号,从 0 开始

·页的大小和页面的大小必须是2的幂

·用户进程在内存空间除每个页面内地址连续之外,每个页面之间可能不连续

·当一个进程被装入时,它的所有页都被装入到可用页面中,并且可以建立一个进程页表

·每个进程浪费的空间仅是由进程最后一页的一小部分形成的内部碎片。

4.3.2 分页存储管理的数据结构

1.页表

2.物理页面表

3.请求表

4.3.3 页式地址结构及转换

虚拟地址由两部分组成:页号 P 和页内位移 W,如图所示是一个 16 位地址,其中第 0~12 位表示页内位移,第 13~15 位表示页号。

页式虚拟地址分割的方法: 页号的最低位等于页长度的 2 的 幂指数.

(1) 假设 CPU 字长为 16 位,页的长度为 1KB,虚拟地址为 46ACH,则其页号 P 和页 内位移 W 的计算方式如图所示.

页大210=1KB,需要 10 位作为页内偏移地址,

即页号 P=11H;页内位移 W=2ACH

(2) 图 4-16 中如果给出的虚拟地址是十进制地址信息,则获取页号和页内地址的方 式为: 页号 P=虚拟地址/页大小(取整) 页内位移 W=虚拟地址 mod 页大小(取余)

(3) 获得对应的页号和页内位移后,求物理地址的方法如下. 虚拟地址以十六进制,八进制,二进制的形式给出.

①将位移量直接复制到内存地址寄存器的低位部分.

② 以页号 P 查页表,得到对应页装入内存的页面号 B,将页面号 B 转换成二进制数填入地址寄存器的高位部分,从而形成内存物理地址.

虚拟地址以十进制的形式给出:物理地址=页面号 B×页大小+页内位移 W.

进程运行前由系统将其页表始址装入 PTR 中,运行时由硬件机构转换地址,按动态重定位方式,当 CPU 获取到逻辑地址时,由硬件完成页号 P 和页内位移 W 划分,从 PTR 找到该进程起始地址,由页号 P 查找页表中对应的页面号 B,根据关系式:

物理地址 = 页面号×页长+ 页内位移

计算对应的物理地址。因此,虽然进程是非连续存放,但是由上述过程总能找到正确的物理地址.

4.3.4相联存储器和快表

**·(相联寄存器、联想寄存器)TLB:**为提高执行速度,通常在地址转换机构MMU(Memory Management Unit,存储管理单元)中设置一个高速缓冲存储器,存放最近访问的页表信息。这个高速缓冲存储器称为相联存储器(Associative Memory),也称为 TLB(Translation Lookaside Buffer,旁路转换缓冲),实现分页式存储管理中地址转换,是一个重要组成部分。

**·快表引入原因:**如果把页表放在主存中,无疑会影响系统的性能。这是因为每次访问主存,首先必须访问页表,根据形成的实际地址再访问主存,这样使访问主存的次数加倍,因而使总的处理速度明显下降。为了解决这个问题人们采用一组硬件寄存器,存放当前访问页的页表,此硬件寄存器即超高速缓存,称为“快表”

·快表:存放在 TLB 中的页表信息称为快表

一般将最近访问过的页表内容也存放在 TLB 中,以减少内存读取次数。

由于页表条目的大小总是固 定不变的,所以 TLB 的容量越大,则它所能存放的页表条目数越多(类似于增大 CPU 一 级,二级缓存容量的作用),这就意味着缓存命中率的增加,这样就能大大减少 CPU 直接 访问内存的次数,实现了性能提升

·作用/目的:减少内存读取次数(TLB 容量较内存小很多,因此 TLB 经常需要淘汰内容,如果淘汰算法设计得当,TLB 的命中率可以很高,也同时减少了内存读取次数,从而提高系统效率)

·软件:选择合适的淘汰算法很关键,影响到性能

4.3.5 分页存储管理的特点

分页存储管理的主要优点是,很好地解决了分区式存储管理的内存利用率低的问题。 页式存储将程序划分为页在内存中可以非连续地存储,这种方法能够有效解决“碎片”的产生,提高内存的利用率。

但是,分页存储管理只考虑程序空间按页的尺寸切分,没有考虑各连续的页之间是否在逻辑上也是连续的。而实际上程序空间往往是多维的,将它们用一维空间的方式来切分会出现一页中有不同段的内容,页的结束不等于段的结束。

eg:

由于分页方式只考虑程序空间按页的尺寸切分,没有考虑各连续的页之间是否在逻辑上也是连续的。而实际上程序空间往往是多维的,将它们用一维空间的切分方式来分页会造成一页中有不同段的内容,页的结束不等于段的结束。

4.4分段存储管理

分段存储管理保留了程序在逻辑上的完整性,将程序分段,一个程序可以由多个逻辑段组成,系统按段进行分配存储空间,各段大小不尽相同.

4.4.1 分段存储管理的基本原理

·引入原因:

由于分页方式只考虑程序空间按页的尺寸切分,没有考虑各连续的页之间是否在逻辑上也是连续的。而实际上程序空间往往是多维的,将它们用一维空间的切分方式来分页会造成一页中有不同段的内容,页的结束不等于段的结束。

·分段式实现原理:

保留程序在逻辑上的完整性:将程序分段,可以由多个逻辑段组成;系统按段进行分配,各段大小不等。

**·段:**在分段存储管理中,将程序地址空间划分为若干个段(segment),每个进程就有一个二维的地址空间

**·分区和分段的区别:**在分区式存储管理中,系统为每个进程分配一个连续的内存空间。而在分段存储管理中,为每个段分配一个连续的存储空间,而各个段之间可以非连续地存放在内存的不同位置。

4.4.2分段存储管理的数据结构

与页式管理采用页表一样,段式管理采用段表来管理各段的信息.因为每个段的长度 不一致,这是与分页是不一样的,段表中需要包含段的长度信息,为了说明段在内存的位 置,还需包含段的起始地址.因此,段表中有段号,段长,段的起始地址等信息.有时为 了方便段的管理,还加入了段存取方式等信息

4.4.3 分段存储管理的地质结构及转换

①取段号 S,与段表始址寄存器中的段表长度 M 进行比较

若 S≥M,表示该地址将访问不属于进程允许访问的地址范围,则系统会发出越界中断;

若 S<M,表示段号没有超出进程可访问范围.

②查段表中段号所对应的段长P,将逻辑地址中的段内位移 W 与 P 进行比较

若 W≥P,表示该逻辑地址将访问不属于段号 S 的访问范围,则系统产生 越段中断;

若 W<P,则表示该逻辑地址是有效地址,可以进行地址转换.

③查段表,由段号S找到该段在内存的首地址 T,加上段内位移 W,得到实际的物理地址

4.4.4 段共享与保护

·内存分配:以段为单位分配内存,每一个段在内存中占据连续空间(内存随机分割,需要多少分配多少),但各段之间可以不连续存放

**1.**段共享

**2.****段保护:**段保护的方式可以有两种方法:一种是地址越界保护,采用上下限寄存器限制,只要段 起址≤物理地址<段起址+段长.另一种是设置段的存取保护位:可读,可写,可执行等.

·快表:介于内存与寄存器之间的存储机制,它又叫快表。为了提高内存访问速度。

4.4.5 分段存储管理的特点

优点:

实现了虚拟存储,但缺段中断率要比缺页中断率少得多

段长可以根据需要动态增长

段在逻辑上的完整性使得段共享更易于实现

便于实现动态链接

缺点:

要求有较多的硬件支持,提高了机器成本。

碎片问题及消除碎片的合并等问题较分页式差

段的动态增长为系统管理增加难度和开销

每个段长受内存可用区大小限制

若淘汰算法选取不当,可能会产生抖动现象

4.4.6 分页存储管理和分段存储管理的区别

相似之处:两者都采用离散分配方式,且都通过地址映射机构来实现地址变换,不要求作业要连续存放;

区别:

(1) 应用需求。页是信息的物理单位,分页是为了实现离散分配方式,以减少内存的碎片,提高内存的利用率。分页仅仅是出于系统管理的需要,而不是用户的需要。段是信息的逻辑单位,它含有一组其意义相对完整的信息。分段的目的是更好地满足用户的需要。

例如,一条指令或一个操作数可能会跨越两个页的分界处,而不会跨越两个段的分界处。

(2) 大小。页大小固定且由系统决定,把逻辑地址划分为页号和页内地址两部分,是由机器硬件实现的。段的长度不固定,且决定于用户所编写的程序,通常由编译系统在对源程序进行编译时根据信息的性质来划分。一般情况下,段比页大,因而段表比页表短,

可以缩短查找时间,提高访问速度。

(3) 逻辑地址的表示。页式系统地址空间是一维的,即单一的线性地址空间,程序员只需利用一个标识符,即可表示一个地址。分段的作业地址空间是二维的,程序员在标识一个地址时,既需要给出段名,又需要给出段内地址。

对于分页存储管理的某一虚拟地址至少需两次内存的

第一次,是根据虚拟地址中的页号,访问内存中的页表,查表找到对应的页面号;

第二次,是根据转换后的物理地址访问内存单元

分段式存储管理一个逻辑地址转换到物理地址,需要几次内存读取?

需要访问两次内存

在段页式如果没有快表逻辑地址转换到物理地址

需要访问三次内存,有快表则一次

4.5 段分页存储管理

**产生的背景:**通过上面的分析知道,页式能有效提高内存的利用率,而段式能反映程序的逻辑结构并有利于段的共享。将两种存储管理方式结合起来,就形成段页式存储管理方式。

**定义:**将分页存储管理和分段存储管理的优点充分结合,即利用分段存储管理中逻辑的完整 性,又利用分页存储管理内存利用率高的特点,达到既能方便数据共享和保护又能有效减少碎片提高内存利用率,这种方法称为段分页存储管理.

因为段分页存储管理普遍采用虚拟存储技术,故这一节的内容将在 4.7.4 小节“段页式虚拟存储管理”中详细描述

由于虚拟空间的最小单位是页而不是段,从而内存可用区也就被划分成若干大小相等的页面,且每段所拥有的程序和数据在内存中可分开存放。分段的大小也不再受内存可用区的限制

·数据结构

**段表:**管理内存分配与释放、缺段处理、存储保护和地址变换等。

**页表:**一个段内又被分为若干页,每段需一个页表把段内的虚页变换成内存中的实际页面。

由于虚拟空间的最小单位是页而不是段,从而内存可用区也就被划分成若干大小相等的页面,且每段所拥有的程序和数据在内存中可分开存放。分段的大小也不再受内存可用区的限制。

·动态地址变换过程

段表和页表放在内存中固定一区域中,则要存取一次指令或数据至少需访问三次内存。一次访问段表寄存器找到内存中段表,访问内存中段表,一次访问内存中页表,第三次才访问到所需的指令或数据。可采用快表的访问提高访问速度。

4.6 虚拟存储管理系统

4.6.1 虚拟存储概述

·引入原因:

前面介绍的存储管理方案要求作业全部装入内存才可运行。但这会出现两种情况:

●有的作业因太大,内存装不下而无法运行。

●系统中作业数太多,因系统容量有限只能让少数作业先运行。

·虚拟存储器的定义如下:在计算机系统的多级存储结构中,采用自动实现部分调入和 部分对换功能,为用户提供一个比实际物理内存大得多的存储空间.

仅把作业的一部分装入内存便可运行作业的存储系统。

具有请求调入功能和置换功能,能从逻辑上对内存容量进行扩充的一种存储器系统。

·**虚拟存储主要目的:**就是在逻辑上“扩充”内存空间.在大容量辅存(如磁盘)划分一定的存储空间扩充成内存空间的一部分,从逻辑上为用户提供一个比物理内存容量大得多, 可寻址的一种“主存储器”,能由系统自动实现部分调入和部分对换功能.

采用虚拟存 储技术所需硬件的成本相对较少,且从性价比上分析,外存也远比内存具有优势

·手段:利用外存(磁盘)实现此虚空间.

·局部性原理:程序和数据的访问在一段时间内,只使用了其中一小部分(空间上的特征),或最近访问过的信息很快又要被访问的可能性非常大(时间上的特征),这 就是程序执行时的局部性原理(principle of locality).

局部性原理(理论基础)1968年P.Denning 提出

●程序执行时,大多数情况下是顺序执行的。

●过程调用会使程序的执行轨迹从一部分内存区域转至另一部分区域,但过程调用的深度不会超过5。

●程序中有许多循环语句,这些语句会重复多次执行。

●程序中对数据结构的操作,往往局限在很小的范围内。

虚拟存储器是基于局部性原理所提出的程序部分调入,用户编程使用逻辑地址,由系统完成逻辑空间和物理空间的统一,既方便了用户的使用,又改进了系统性能。

·局限性的表现:

①时间局限性

程序中的的某条指令一旦执行,不久后会再次执行。

②空间局限性

程序一旦访问某存储单元,不久后会访问其附近的存储单元。

·实现虚拟存储技术需要解决的问题:

(1) 内存与外存的统一管理问题。

(2) 逻辑地址到物理地址的转换。

(3) 部分调入和部分交换的问题。

·实现虚拟数据系统的开销

(1) 管理地址转换的各种数据结构的存储开销。

(2) 执行地址转换的指令花费的时间开销。

(3) 内存与外存执行部分交换时页或段的 I/O 开销等。

目前虚拟存储技术常用的实现有:请求分页、请求分段和请求段页虚拟存储管理。

4.6.2 请求分页虚拟存储管理

进程在调入内存时占用非连续的存储空间,这种方法很好地解决了分区式存储管理带来的碎片问题

**静态式分页:**进程却是全部调入内存.(**缺点:**全部调入内存势必造成内存 空间的浪费, 利用率不高等问题).

**动态分页存储管理:**考虑进程的部分调入内存(**优先:**更进一步提高存储空间的利用率)

·动态页式管理基本思想:在进程开始运行之前,不是装入全部页面,而是装入一个或多个页面,之后根据进程运行的需要,动态装入其它页面。

·动态页式管理分类:请求页管理,预调入页式管理

·调入策略:(预调入和请求式调入)

(1) 预调入技术是在进程执行过程中,系统事先估计下一步所要用的内容,若发现其不在内存,由系统主动完成信息的调入.这种方式的好处是不影响进程的执行,但是系统很多情况下无法正确估算下一步所要用的信息.例如,特定情况下程序分支的执行,循环 的执行等.因此,预调入技术在实际中较少应用.

(2) 请求调入技术是当进程执行过程中,发现所要使用的内容不在内存时,或当执行某条指令需要访问其他的数据或指令时,这些指令和数据不在内存中,产生缺页中断,由处理器完成所需的内容调入内存.这种方式减少了系统预先估算下一步所要使用的信息,因此较容易实现,也是常用的调入方法.

请求分页要解决的问题:

1.如何知道要访问的页不在内存?不在内存的页在外存的什么地方?

2.不在内存的页什么时候调入内存?(调入策略)

3.当页调入内存时,内存没有空闲块时,应覆盖(淘汰)哪些页?(淘汰策略)

被覆盖(淘汰)的页是否需要回写到外存

为了实现请求分页技术,页表应增加相应的控制管理信息的内容–页表扩充

中断位:表示该页是在内存还是在外存

修改位:查看此页是否在内存中被修改过

访问位:根据访问位来决定淘汰哪页(由不同的算法决定)

·页面置换算法 作业21

**定义:**当需要调入信息而内存空间不够用时,则必须执行部分交换.至于将内存中哪些内容换出到外存存放,可以采用淘汰算法来解决.当需要调入某页信息而内存空间不够时,则必须将内存中的某页淘汰掉.用来选择淘汰哪一页的规则叫作置换算法,也称为淘汰算法。

抖动(thrashing):刚被淘汰出去的页面又立即要使用,因而,又需要把它调入,而调入不久再被淘汰,淘汰不久再被调入.如此反反复复,使得处理器的大部时间都花在页面的换入换出上.

常用算法有如下:

1) 随机页面置换算法

要淘汰出去的页面是由一个随机数产生程序随机确定的.这种算法实现简单,但是效 率较低,一般不采用.

  1. 先进先出页面置换算法(FIFO) 先进先出页面置换算法的思想是借助于程序是线性访问物理空间这一假设的.也即,最先调入内存的页面,最先淘汰出去,而最近调入内存的页面可能还会再使用.这种算法实现简单,对于线性顺序执行的程序较为适用,但对于分支,循环程序该算法就不太适用.

  2. 最近最久未使用页面置换算法(LRU) 最近最久未使用页面置换算法是一种通用的置换算法.算法是将最近一段时间最久没被访问的页面淘汰出去.算法是根据程序的局部性原理来考虑的,即最近使用过的页面,可能不久还要被访问,而较长时间没有被使用的页面,可能最近一段时间也不会被访问.

  3. 最近未使用页面置换算法(NUR) 最近未使用页面置换算法是将第 1 个最近未被访问的页淘汰出去.该算法是对 LRU 算法的一种简易实现.算法给每一页设置一个引用标志位,每次访问某一页时,由硬件将 该页的标志位置 1,隔一定的时间将所有页的标志位均清零.在发生缺页中断时,从标志 位为 0 的那些页中挑选一页淘汰.在挑选到要淘汰的页后,也将所有其他页的标志位清 零.这种实现方法开销小,但标志位清零的时间间隔的大小不易确定而且精确性差.

  4. 最不经常使用页面置换算法(LFU) 最不经常使用页面置换算法是淘汰那些到当前时间为止访问次数最少的页.页表中增 加一个访问记数器.该算法也是一种简易的 LRU 算法. 具体实现是每当访问一页时,就使它对应的计数器加 1.当发生缺页中断时,可选择 计数值最小的对应页面淘汰,并将所有计数器全部清 0.显然,它是在最近一段时间里最 不常用的页面.这种算法实现不难,但代价太高,而且选择多大的时间间隔作为“最近一 段时间”最适宜也是个难题.

  5. 最佳页面置换算法 当要调入一新页而必须淘汰一旧页时,所淘汰的页是以后不再使用的,或者是以后相 当长的时间内不会使用的.这是一种理想算法,实际中却难以实现.

·缺页中断率 f’ = f/a (a 是总的页面访问次数,f是缺页中断次数)

·命中率 = 1 - 缺页中断率

**·Belady 奇异现象:**对于 FIFO 算法,有时会出现 Belady 奇异现象:随着分配的物理块/页面数增多,缺页次数不是减少,反而增加的一种现象。

·LRU绝不会产生Belady现象,因为LRU是栈算法

**·工作集:**任何程序在部分调入时,都有一个临界值要求.当内存空间分配小于这个临界值时, 内存和外存之间的交换频率将会急剧增加,而内存分配大于这个临界值时,增加再多的内 存空间也不会显著减少交换次数.这个内存空间要求的临界值被称为工作集。

·为进程分配的物理块数达到一定值

图中拐点处,缺页率保持在上下限之间

●抖动的产生

●在多道程序环境下,并不是“多道程序的度越高,系统吞吐量越大。”

●当CPU的利用率达到某一峰值后,若继续增加多道程度,将产生抖动。

●抖动预防方法

●加载控制

● L=S准则

(产生缺页的平均时间L等于系统处理缺页的平均时间 S)

●采用局部置换

●挂起若干进程

4.6.3请求分段虚拟存储管理

请求分段虚拟存储管理就是分段存储管理虚拟存储的实现方式,在对于 CPU 进行段调入策略时和请求分页虚拟存储管理是一样的,需要的时候再进行请求段调入。这时候发生的是缺段中断,同时也是在段表中加入相应的控制位,调入的算法可以参考请求分页虚拟存储管理。

4.6.4 段页式虚拟存储管理

地址转换过程可分为以下4个步骤.

(1) 根据该进程的段表寄存器得到段表起始地址,在段表中查找该段号的表项,得到页表起始地址.

(2) 根据页号在页表中查找该页对应的内存页面号.

(3) 根据页面号计算得到该块的起始地址.

(4) 将块的起始地址加上页内位移,得到物理地址.

分区存储管理种产生碎片的原因: 作业的程序空间大小不同(是指存储空间使用效率低下,结果导致功能、运行效率变低或二者兼而有之的现象。碎片化所造成的影响取决于具体的存储系统以及碎片化的种类。只有可变分区存储管理会产生外部碎片)

在页的地址变换中,页内位移等于块内位移

第五章 设备管理

5.1 设备的分类

5.1.1 按数据传输方式分类(数据的传输单位划分)

1)字符设备(character):键盘、显示器。

2)块设备(block):硬盘。

5.1.2按设备的共享属性分类

1)独占设备(互斥设备):一个设备仅供一个进程使用。

2)共享设备:一个设备允许多个进程同时使用,如硬盘。

3)虚拟设备:通过假脱机(Spooling)技术将独占型设备改造为可供多个进程使用的共享设备,以提高设备的利用率。

5.2 数据传送控制方式(四种)

5.2.1 程序直接控制方式(软件控制、串行中断方式)p160

**概念:**程序直接控制方式是指由用户进程直接控制内存或CPU和外围设备之间进行信息传送的方式。通常又称为“忙—等”方式或循环测试方式。

**优点:**1)控制方式简单;

2)无需太多硬件支持

**缺点:**1)CPU和外围设备只能串行工作;

2)CPU在一段时间内只能和一台外围设备交换数据信息,从而不能实现设备之间的并行工作;

3)由于程序直接控制方式依靠测试设备标志触发器的状态位来控制数据传送,因此,无法发现和处理或其他硬件所产生的错误。

程序直接控制方式只适用于CPU执行较慢,而外围设备较少的系统。

5.2.2 中断控制方式(硬件+软件、并行工作方式)p161

**概念:**中断控制方式是指当外设需要与 CPU 进行信息交换时,由外设向 CPU 发出请求信号,使 CPU 暂停正在执行的程序,转去执行数据的输入/输出操作,数据传送结束后,CPU 再继续执行被暂停的程序。

**优点:**1)与程序直接控制方式相比,中断方式CPU的利用率大大提高且能支持多道程序和设备的并行操作。(PPT)

2)CPU不必等待查询,工作效率高,CPU与外设可以并行工作。(书本)

3)由于外设具有申请中断的主动权,故系统实时性比查询方式要好得多。(书本)

**缺点:**1)因I/O控制器的数据缓冲寄存器较小,数据传送一次发生较多中断次数。这将耗大量CPU时间。

2)当外设较多时,中断次数的急剧增加将会导致CPU无法响应中断和出现丢数据现象。

3)若外围设备速度较高时,可能出现数据缓冲寄存器的数据由于CPU来不及取走而丢失。

中断控制方式一般适合于少量的数据传送。

5.2.3 DMA控制方式(硬件+软件、并行工作方式)p162

**概念:**又称直接存取方式,其基本思想是在外设和内存之间开辟直接的数据交换通路,传送过程无须 CPU 介入。DMA控制器包含:控制状态寄存器、数据缓冲寄存器、传送字节计数器、内存地址寄存器。

**优点:**DMA方式中,I/O控制器具有比中断方式和程序直接控制方式时更强的功能。

**缺点:**1)对外设管理和一些操作仍需CPU。

2)多个DMA控制器的同时使用显然会引起内存地址的冲突并使得控制过程进一步复杂化。且多DMA控制器同时使用也提高了机器成本

DMA****方式与中断方式的主要区别:

1)中断方式是在数据缓冲寄存器满之后发中断要求CPU进行中断处理,而DMA则是在所要求传送的数据块全部传送结束时要求CPU进行中断处理。

2)中断方式的数据传送是在中断处理时由CPU控制完成的,而DMA方式是在DMA控制器的控制下不经过CPU完成。这样就避免了CPU因并行操作设备过多会造成数据丢失等现象。

5.2.4 通道控制方式(硬件+软件、并行工作方式)p163

**概念:**在通道控制方式中,数据传送方向存放数据的内存始址及传送的数据块长度均由一个专门负责输入/输出的硬件——通道来控制。一个通道可控制多台设备与内存进行数据交换。

**优点:**1)通道所需要的CPU干预更少。

2)一个通道可以控制多台设备。

3)CPU 的利用效率高。

**通道的定义:**独立于CPU的专门负责输入输出控制的处理机,它控制设备与内存直接进行数据交换。有自己的通道指令,这些指令受CPU启动,并在操作结束时向CPU发中断信号。

通道的定义也说明了通道的基本思想。

DMA 和通道方式的区别:

1)DMA 方式要求 CPU 执行设备驱动程序启动设备,给出存放数据的内存始址以及操作方式和传送字节长度等

2)而通道控制方式则是在 CPU 发出 I/O 启动命令之后,由通道指令来完成这些工作。

后三者异同:

同:都是硬件+软件、并发工作方式

异:中断次数逐渐减少;CPU的介入依次减少

5.3 缓冲技术

**概念:**在两种不同速度的设备之间传输信息时平滑传输过程的常用手段。

引入缓冲的原因:

1)改善 CPU 与 I/O 设备间速度不匹配的矛盾。

2)减少对 CPU 的中断频率,放宽对中断响应时间的限制。

3)提高 CPU 和 I/O 设备之间的并行性。

**常用的缓冲技术:**单缓冲;双缓冲;多缓冲;缓冲池。

5.4 设备独立性

**概念:**用户在编制程序时所使用的设备与实际使用的设备无关,即,在用户程序中仅使用逻辑设备名。又称设备无关性。

**逻辑设备名:**用户自己指定的设备名(设备号),它是暂时的、可更改的。

**物理设备名:**系统提供的设备的标准名称,它是永久的、不可更改的。

5.5 设备控制块(DCB)

**概念:**系统为每一台设备都配置了一个用来记录设备的硬件特性、连接和使用情况的一组数据,称为设备控制块。

5.6 设备分配

在进行设备分配时,通常都需要借助于一些表格的帮助。在进行设备分配时所需的数据结构表格有设备控制表(DCT)、控制器表(COCT)、通道控制表(CHCT)、系统设备表(SDT)。

**静态分配:**对独占设备一般采用静态分配,一旦分配给作业或进程由它们独占使用。不会产生死锁,但设备的利用率低。

**动态分配:**对共享设备一般采用动态分配,并在进程一级实施。设备利用率高。

**常用分配算法:**先请求先服务;优先级最高者优先。

5.7 SPOOLing系统

**概念:**外围设备同时联机操作,又称假脱机操作。SPOOLing技术是将独占设备改造为共享设备的技术。它借助可共享的大容量磁盘,将独占型的慢速I/O设备虚拟化为每个进程一个的共享设备。

**工作过程:**卡片叠通过“存输入”被读进输入井中;内存作业则经SPOOLing系统的“取输入”程序,从输入井中取输入,代替从卡片机输入。作业要打印的信息则经“存输出”程序放入输出井中。输出井中的信息则由SPOOLing的“取输出”程序从打印机打印出去。

SPOOLing****系统由三部分组成:

1)输入井和输出井(硬件)

2)输入缓冲区和输出缓冲区(硬件)

3)输入进程和输出进程(软件)

SPOOLing的“存输入”与“取输出”程序是与作业无关的,只要有卡片要求输入或者输出井中有待打印的信息,它们就源源不断地做信息的输入与输出。

第六章 文件系统

处理器管理、存储器管理、设备管理,它们属于计算机系统中硬件资源的管理。现代操作系统中还有另一个重要资源,即软件资源,它主要包括各种系统程序,应用程序,库函数,用户应用程序。这些软件资源是一组相关联的信息(程序和数据)的集合.从系统管理的角 度将它们看作一个个文件,并保存在系统中.

高速大容量的磁盘存储器的出现为现代计算机系统提供了良好的存储基础,使文件管理得到极大的发展。

**· 引入文件管理的原因:**在多用户,多任务型的执行环境下,内存存储容量是有限的,只存放待运行的程序和数据,而将 所有用户,所有任务的程序和数据都调入内存是不现实的,也是不必要的.这些存放在外 存上的文件需要有一种机制来为用户提供文件的存放,检索等功能。

**· 管理系统的设计目标在于:**方便用户使用,提高文件检索速度,提供文件共享, 提供文件安全性保证和提高存储文件的外存资源利用率等

· 用户用计算机完成自己的任务时,会碰到下列问题:

①使用现有的软件资源来协助完成自己的任务

②编制完成的或未完成的程序存放在什么地方,需要访问的数据存放在什么地方,从而 可以再利用。

这也即如何对软件资源(程序和数据)进行透明地快速存取的问题。

· 透明存取:

不必了解文件存放的物理结构和查找方法等与存取介质有关的部分,只需给定一个代表某段程序或数据的文件名,文件系统就会自动地完成对与给定文件名相对应文件的有关操作。

· 文件系统必须完成的工作:

①为了合理的存放文件,必须对磁盘等辅助存储器空间(或称文件空间)进行统一管理。

②为了实现按名存取,需要有一个用户可见的文件逻辑结构,用户按照文件逻辑结构所 给定的方式进程信息存取和加工。

③为了便于存放和加工信息,文件在存储设备上按一定的顺序存放。

④完成对在存储设备上的文件信息的查找。

⑤完成文件的共享和提供保护功能。

6.1 文件

6.1.1 文件管理的几个基本概念

\1. 文件

通常文件表示程序和数据。从用户的角度看,文件是外存存储空间划分的最小单位。

在系统中各文件之间是以文件名进行区分。

除了文件名外,文件还可以有其他一些属性。

(1) 文件类型:如源文件、目标文件或可执行文件等。

(2) 文件长度:指文件的长度,也可能是最大允许长度。

(3) 文件的物理位置:文件存储位置。

(4) 文件的保护属性:对文件的使用安全性分几级保护,如可读、可写、可删除。

(5) 文件的管理属性:如文件的创建时间、修改时间、最后存取时间等。

2.文件名

文件名以字符串的形式描述。不同操作系统中对文件名有不同的规定,如在Windows操作系统中,文件名和扩展名之间用分隔,扩展名说明了文件的属性。而在Linux操作系统中,没有扩展名之说,如果文件名中包括“.”,则它是作为文件名看待,因此不能以此来识别文件类型,文件类型要通过文件属性来描述。

3.记录

记录是一个具有特定意义的信息单位,它由该记录在文件中的逻辑地址(相对位置)与记录名所对应的一组关键字、属性及其属性值所组成。如下图是一个记录的组成:

· 一个记录可以有多个关键字,每个关键字可对应多项属性

· 记录可以是定长,也可是变长的

记录的长度可以短到一个字符,也可以长到一个文件,具体由设计人员决定。

4.文件系统

· 文件系统定义:

操作系统中与管理文件有关的软件和数据称为文件系统。

· 文件系统作用:

为用户建立、撤销、读写、修改和复制文件,还负责完成对文件按名存取和进行存取控制。

· 文件系统应具有功能:

(1)文件操作命令

(2)目录管理

(3)文件存储空间的管理

(4)文件的共享与安全

· 文件系统特点:

友好的用户接口,用户只对文件进行操作,而不管文件结构和存放的物理位置。

对文件按名存取,对用户透明。

某些文件可被多个用户或进程共享。

文件系统大都使用磁盘、磁带和光盘等大容量存储器作为存储介质,因此,可存储大量信息。

6.1.2文件分类

在文件系统中,为了有效、方便地管理文件,常常把文件按其性质和用途等进行分类。

(1) 按文件的用途可分为:系统文件、库文件和用户文件。

(2) 按文件存取方式可分为:只读文件、读写文件和只执行文件。

(3) 按文件的组织形式可分为:普通文件、目录文件和特殊文件。

(在UNIX系统中,所有的输入、输出设备都被看作特殊文件。)

(4) 按信息流向可分为:输入文件、输出文件和输入输出文件。

6.2 文件组织形式

文件的组织形式即文件的结构,通常应该从文件的逻辑结构形式和物理结构结构形式两方面加以考虑。

6.2.1 文件的逻辑结构

**概念:**文件的逻辑结构是用户可观察到的,可以加工处理的数据集合。由于数据可独立于实 际的物理环境加以构造,所以称为逻辑结构。一些相关数据项的集合称作逻辑记录,而相关逻辑记录的集合称做逻辑文件。

1.文件逻辑结构的种类

· 文件的逻辑结构可分为:

字符流式的无结构文件

记录式的有结构文件

· 字符流式的无结构文件的特点:

查找困难

管理简单

用户操作简便

因此,这种方式适合于对基本信息单位操作不多的文件,如,源程序文件、目标代码文件等。

· 记录式的有结构文件的特点:

把记录按各种不同的方式排列,构成不同的逻辑结构,便于用户对文件中的记录进行修改、追加、查找和管理等操作。

记录组成示例

赋名的字符流文件文件是一种无结构文件或流式文件。Windows和Linux均采用无结构文件形式。

无结构文件由于采用字符流方式,与源程序、目标代码等在形式上一致,因此,源程序、目标代码等文件多用字符流式无结构形式。

2.文件的存取方法

用户通过对文件的存取来完成对文件修改、追加和搜索等操作。文件存取是要找到文件内容所在的逻辑地址。

**1)**顺序存取方式

**2)**随机存取方式

**3)**按关键字存取方式

6.2.2 文件的物理结构

文件系统采用哪种逻辑结构和存取方法是和文件的物理结构密不可分的。

文件系统中,存储设备通常划分为若干大小相等的物理块,每块长为512字节或1024字节。为便于管理,一般把文件信息也划分和物理块大小相等的逻辑块。以块为单位分配和传送信息。

对于字符流无结构文件来说,每个物理块中存放长度相等的文件信息。

对于记录式文件,假设系统中每个记录的长度恰等于物理块的长度,这样由搜索算法得到的逻辑地址正好与文件的逻辑块号一一对应。

文件的物理结构是指文件在存储设备上的存放方法。

由于文件的物理结构决定了文件信息在存储设备上的存储位置,因此,文件信息的逻辑块号(逻辑地址)到物理块号(物理地址)的变换也是由文件的物理结构决定的。

· 常用的文件物理结构:

**1.**连续文件

是一种最简单的物理文件结构,它是一个在逻辑上连续的文件信息依次存放到物理块中。如下图是连续文件结构:

· 连续文件特点:

存取方便,知道了文件在存储设备上的始址和文件长度,就可方便地进行物理存取

文件长度一定,建立连续文件时必须确定文件长度,且长度不能动态增长。顺序存取速度快

连续文件不宜存放经常会被修改的文件,如用户文件、数据库文件

· 连续文件缺点:

  1. 要求定量的连续存储空间

  2. 必须事先估计文件的长度

**2.**串联文件

用非连续的物理块来存放文件信息,克服顺序文件的缺点。每个物理块设一个指向下一连接的物理块,链接成一个串联队列。

· 串联文件特点:

不需要连续的存储空间,提高了存储空间的利用率。

增加和删除记录时只需修改指针,不必移动大量数据。

文件动态增长时,也只需修改指针,也不必事先估计文件的长度。

串联文件的缺点是文件采用指针串联,其可靠性较差。

**3.**索引文件

系统为每个文件建立一张索引表,说明文件的逻辑块号与物理块号的对应关系。

特点:

文件动态增长;

随机存取

若索引表的大小超过了一个物理块,则可采用间接索引(多重索引),即在索引表中的物理块号对应的不是文件存储的位置,而是装有文件信息的物理块地址。经过一级索引,一个物理块可装下n个物理块地址,则可寻址的文件长度为nn,若文件长度还大于nn,则可进行二级间接索引。

实际系统中,总把索引表的头几项设计成直接寻址方式,后几项设计成多重索引。当文件较短时可利用直接寻址节省存取时间。

缺点:

索引表增加的了存储空间的开销;

存取文件时至少访问存储器两次以上。

系统可在文件操作前,预先把索引表放入内存,可节省访问磁盘次数。

6.3 文件存储空间管理

**概念:**在存储空间管理是文件系统的重要任务之一。

为保证用户共享文件存储设备和得以实现文件的按名存取,须进行有效地存储空间管理。

文件存储设备是以块为单位来交换信息,故文件存储空间的管理实质上是一个空闲块的组织和管理问题。

包括:空闲块的分配与空闲块的回收等问题

空闲块管理方法:6.3.1,6.3.2,6.3.3

6.3.1空闲文件目录

这是一种简单的管理空闲块的方法,其思想是将一片连续的空闲块当作一个空闲文件,存放到一个称为空闲文件目录的物理块中。

6.3.2空闲块链

是一种较常用的空闲块管理方法。把所有的空闲盘区链接在一起。

链接方法:

空闲盘块链

空间盘区链

位示图

空闲文件目录和空闲块链在管理空闲块时均需启动外设才能完成管理操作。其值为0表示相应的物理块为空闲,反之为1表示该物理块已分配

6.3.3位示图

为提高空闲块的管理速度,使用位示图进行空闲块管理。记录整个文件存储空间使用情况的一种简单和低开销的数据结构,它只利用一个二进制位表示一个物理块的分配状态。

利用位示图进行空闲块分配时,只需查找图中的“0”位,并将其置为“1”即可;而回收物理块时,只需将相应的位由“1”置为“0”即可。

6.4 文件目录管理

6.4.1文件目录管理的基本要求

· 文件目录管理的基本功能:

(1) 提高检索效率。通过合理有效的方法加快系统中文件的检索速度,从而加快文件的存取速度。

(2) 文件共享。在多用户系统允许多个用户使用同一个文件,则在外存中只保留一份共享文件的副本,提供给多用户使用,同时降低了存储空间的需求。

(3) 文件重名。使系统中不同用户的文件或不同类型的文件具有相同的名字,只要这些文件位于不同的目录下。

**· 文件目录概念:**为了实现按名存取必须建立文件名与其在外存空间的物理地址之间的对应关系

**· 对文件说明信息的管理:**把一个文件的说明信息称为该文件的目录,对文件目录的管理就是对文件说明信息的管理

**· 文件目录要解决的问题:**文件目录的管理除了要解决存储空间的有效利用之外,还要解决快速搜索、文件命名冲突以及文件共享问题。

6.4.2文件控制块和索引节点

· 文件的组成:

从文件管理角度看,一个文件包括两部分:文件说明和文件体。

**文件体:**文件本身的信息。

文件说明:也称为文件控制块(FCB),至少包括:文件名、与文件名相对应的文件内部标识以及文件信息在文件存储设备上第一个物理块的地址,根据系统要求不同,还包括关于文件逻辑结构、物理结构、存取控制和管理信息等。

· 索引节点:

在通过文件目录检索文件时,通常都不涉及文件的说明信息,故在检索文件时不必要将文件说明信息(需占用一定存储空间)调入内存,则可以将文件描述信息形成一个称之为索引节点的数据结构,简称i-节点;而在文件目录中的每一项中只包含文件名和指向索引节点的指针。由此在检索文件时大大节省了系统的开销。

6.4.3文件目录结构

文件说明组成目录文件:

文件系统利用目录文件完成按名存取和对文件信息的共享与保护。

**1.**单级目录

是一种最简单、最原始的目录结构。

利用单级目录,文件系统可实现对文件系统空间的自动管理和按名存取。

单级目录中,文件说明项只能按连续结构或顺序结构存放。

系统将已建立的所有文件的文件名、存放地址及有关的说明信息放在一张表中,这张表称为一级文件目录

· 单级目录缺点:

不允许重名

查询范围广,搜索速度慢

不便于文件的共享

为了改变单级目录的命名冲突问题及提高搜索速度,将其扩充成二级目录。

**2.**二级目录

为解决单级目录的问题,产生了二级目录。二级目录由主目录(MFD)和用户目录(UFD)构成。

**3.**多级目录

把二级目录的层次关系加以推广,就形成了多级目录。

在多级目录中,除了最后一级的物理块中装有文件信息外,其他每一级目录中存放的都是下一级目录或文件的说明信息。由此形成层次关系,最高层为根目录,最低层为文件。多级目录构成树形结构。

文件路径名

多级目录中,文件的路径名是由根目录到该文件的通路上所有目录文件符号名和该文件的符号名组成的字符串,相互之间用分隔符分隔。

· 树形结构多级目录结构特点:

层次清楚

解决文件重名问题

查找搜索速度快

6.4.4文件共享与安全

文件的存取控制是和文件的共享、保护和保密三个不同而又相互联系的总是紧密相关。

**文件的共享:**是指不同的用户共同使用一个文件。

**文件的保护:**则指文件本身需要防止文件拥有者本人或其它用户破坏文件内容

**文件的保密:**指未经文件拥有者许可,任何用户不得访问该文件。

这三个问题实际上是一个用户对文件的使用权限,即读、写、执行的许可权问题。

实现文件共享是文件管理的主要功能。文件共享就是允许多个用户使用同一个文件,

这样可以减少系统的开销。

实现文件共享的方法有以下两种:

\1. 链接法

对于共享的文件采用链接方法,即在自己的文件目录中建立该共享文件相应的表目。

\2. 基本文件目录

基本文件目录法是将所有文件目录的内容分成两部分:一部分包括文件的结构信息、 物理页面号、存取控制、管理信息等,并由系统赋于唯一的内部标识符来标识;另一部分则由用户给出的符号名和系统赋给文件说明信息的内部标识符组成。这两部分分别称为文件目录表和基本文件目录表,这样就构成了多级目录结构。

6.4.5文件保护

· 文件存取控制功能:

①对拥有读、写或执行权限的用户,应让其对文件进行相应的操作;

②对没有读、写或执行权限的用户,应禁止其对文件进行相应的操作;

③应防止一个用户冒充其他用户对文件进行存取;

④应防止拥有存取权限的用户误用文件。

· 存取控制验证模块程序提供上述功能,验证步骤:

①审定用户的存取权限;

②比较用户权限的本次存取要求是否一致;

③将存取要求和被访问文件的保密性比较,看是否有冲突。

文件的存取控制权限可以存放在文件的BFD表中,当用户访问文件时,操作系统可以方便地在文件的BFD中找到相应的权限说明,并进行有效的验证。

操作系统通过以下几种方法实现文件的存取控制。

1.存取控制矩阵

以一个二维矩阵来进行存取控制,包括用户及其所有的文件。对应的矩阵元素是用户对文件的存取控制权:

**存取控制矩阵特点:**概念简单,当文件和用户较多时,矩阵将变得非常大,占内存,且扫描开销大。

2.存取控制表

存取控制表

以文件为单位,把用户按某种关系划分为若干组,同时规定每组的存取权限。所有用户组对文件权限的集体就形成了该文件的存取控制表。

由于以文件为单位进行设置,所以,每个文件的存取权限可以存放在该文件的BFD中,而不需要集中放在一张表中,从而省去了查表的时间。当文件被打开时,其BFD中的管理信息会被调入内存,因此可以随时高效地检验该文件的存取权限。

3.口令

口令有两种:一种用于设定用户对计算机系统的使用权限,可由计算机系统的拥有者指派,用户登录系统时输入口令并交由操作系统进行检验;另一种则是用户创建文件时为文件设置的口令,该口令设定了用户打开文件的权限。

口令方式简单、快捷、易于实现,但是保密性能差,一旦口令被泄露,使用者将获得文件主对文件的使用权限,没有任何限制,因而保密级别低。

4.密码方式

用户创建源文件,将其编码加密后写入磁盘存储设备,读出文件时需要对该密文进行译码解密。由于加密方法只有用户自己知道,因此也只有用户自己才能解密,使这种方法具有很高的密级。

这种方法需要花费加密和解密的系统时间开销,所以一般情况下不会使用,只有需要高密级保护的文件才使用密码进行加密。

6.5 文件操作

文件系统以系统调用或命令方式为用户提供下列服务:

关于设置和修改用户对文件的存取权限的服务;

关于建立、改变和删除目录的服务;

关于文件共享、设备访问路径的服务;

创建、打开、读写、关闭,以及撤销文件的服务

建立文件:create

读文件:read

关闭文件:close

撤销文件:delete

open:把在文件存储设备上的有关文件说明信息复制到内存的活动文件目录表中

write:将把从内存中某个位置开始的一段n字节长信息或n个记录经设备管理程序写入文件存储设备

read与write相反,把指定文件的几个字节或记录读入内存中指定地区。

6.6 文件系统的层次模型

操作系统层次结构的设计方法是Dijkstra于1967年提出的,1968年Madnick将这一思想引入了文件系统。

**· 层次结构的优点:**是可以按照系统提供的功能将系统划分为不同的层次,下层为上层提供服务,上层使用下层提供的功能。这样,一个复杂的系统可以被切割为若干功能独立、界面清晰的不同层次,变得简单明了,从而易于设计和实现,且易于调试和修改,更便于管理和维护。

(1) 用户接口。是 OS 提供给用户使用图形桌面的一个接口,当然还包括 Windows 下的 cmd 以及 Linux、Mac 上的命令窗口,都是用户接口。这里的用户是广义的概念,不仅仅指代程序员。

(2) 符号文件系统根据文件名或文件路径名,建立或搜索文件目录,获得文件内部唯一标识来代替这个文件,供后面存取操作使用。

(3) 基本文件系统根据文件内部标识负责把文件说明信息调入到内存的活动文件表中,这样查找同一表目就不用反复读盘了。如文件已经打开,则根据本次存取要求修改活动文件表内容,并把控制传到下一层。

(4) 存取控制模块层是在找到文件的 FCB 后,还需要验证文件使用权限以保证文件的安全。

(5) 逻辑文件系统与文件信息缓冲区层。这个层的功能是获得相应文件的逻辑地址,而具体的物理地址需要在物理文件系统中获取。

(6) 物理文件系统层是底层的实现。分为两部分内容:外存的分配管理和设备的管理,因在 UNIX 下,设备也是文件。

(7) 设备和分配策略模块负责文件存储空间的分配,若为写操作,则动态地为调用者申请物理块;实现缓冲区信息管理。根据物理块号生成 I/O 控制系统的地址格式。

(8) I/O 控制系统具体执行 I/O 操作,实现文件信息的存取。这一层属于设备管理功能。

6.7 Linux 文件系统概述

6.7.1 Linux 文件系统特点

目前流行的各种操作系统都有自己的文件类型,那么对现代操作系统来讲,对多文件系统的支持将势在必行。Linux 支持多种不同类型的文件系统,包括 ext、ext2、Minux、ISO9660、HPFS、MS-DOS、NTFS 等。

在Linux系统中,所有的文件被组织到一个统一的树形目录结构中。

Linux****文件系统的结构与Windows的区别

Windows 以分区为树根,有多个分区时形成多个树型目录结构图:

Linux只有一棵目录树,除了系统安装所在分区外,不管还有多少分区,什么样的文件系统,都只是目录树下的支干。

**Linux****文件系统有一个“根”,然后在根上分杈(目录),任何一个分杈上都可以再分杈,杈上也可以长出“叶子”(文件)。根和杈在Linux中被称为是“目录”或“文件夹”。而叶子则是一个个的文件。**这样不论底层存在设备是什么,展现在用户面前的均是一个统一的文件系统视图。

Linux的文件系统只有一个文件树,整个文件系统是以一个树根“/”为起点的,所有的文件和外部设备都以文件的形式挂结在这个文件树上,包括硬盘、软盘、光驱、调制解调器等,这和以“驱动器盘符”为基础的Microsoft Windows系统有很大区别。

系统在创建每个目录时都会自动创建两个目录文件,一个是“.”,代表该目录自己另一个是“…”代表其父目录对于根目录 “.”和“…”均代表自己

文件系统被组成树形结构后,文件名由路径名给出。路径名确定一个文件在文件系统中的位置。路径名也可从正在执行进程的当前目录开始指定:

如,当前目录是/home/zhang,路径名a.txt与/home/zhang/a.txt同效。

· 路径:

路径分为“绝对路径”和“相对路径

绝对路径:从根目录开始的完整的路径

相对路径:相当于当前工作目录的路径

任何不以 / 开始的路径均为相对路径

· Linux文件系统除具有树形结构外,还具有特点:

文件是无结构的字符流式文件

文件可以动态地增长或减少

文件数据可由文件拥有者设置相应的访问权限而受到保护

外部设备都被看作是文件。设备可通过文件系统隐蔽掉设备特性。

6.7.2 Linux 的文件类型

Linux 的文件名最长可以到 256 个字符,区分英文大小写。Linux 文件名中没有扩展名,故文件名与文件类型无关。例如,文件名为 abc.txt,它的文件名就是 abc.txt,其中.txt也是文件名的一部分,另外,这个文件可以是个文本文件,也可以是个可执行文件。

Linux 一共有 5 种类型的文件,具体介绍如下。

1. 普通文件 (用 - 表示)

普通文件和目录都是无结构、无记录概念的字符流式文件。存储用户和系统的有关数据和程序的文件。文本文件和二进制文件都属于普通文件。若使用 ls 命令查看文件属性时,显示的属性为“-rwxrw-r—”,第一个符号为“-”表示这个文件为普通文件。

2. 目录文件 (用 d 表示)

由文件系统中的各个目录所形成的文件。目录文件在形式上与普通文件一样,由系统将其解释成目录。在 Linux 系统中,目录也看作是一种文件。文件的目录包括文件名、子目录名及其指针。它是LINUX储存文件名的唯一地方,可用ls列出目录文件。系统中的文件就构成一张表,即 Linux 的目录文件。用户可以读目录,但是没有权限去修改它,只有操作系统才有权限修改目录文件。

3. 设备文件 (块设备用 b 表示,字符设备用 c 表示)

在目录文件和文件索引节点表中占据相应的位置之外,并不占有实际的物理存储块。因此,对设备文件的读写操作实际上变为对设备的操作,而对设备文件的保护也将变成对设备的保护。Linux 系统将所有的外设都看作文件,其中分为块设备和字符设备。块设备是以数据块为单位进行数据传输的设备,如磁盘。字符设备是以字符为单位传输数据的设备,如键盘、终端等。块设备对应的文件属性符号是 b;字符设备对应的文件属性符号是 c。

4. 链接文件 (软链接用 l 表示)

链接文件主要用于文件的共享。Linux 系统中有以下两种链接方式。

(1) 硬链接(hard link):让一个文件对应一个或多个文件名,或者把使用的文件名和文件系统使用的节点号链接起来,这些文件名可以在同一目录或不同目录。

(2) 软链接(也叫符号链接):是一种特殊的文件,这种文件包含了另一个文件的任意一个路径名。这个路径名指向位于任意一个文件系统的任意文件,甚至可以指向一个不存在的文件。

5. 管道文件 (用 p 表示)

Linux 的管道(pipe)文件是一种很特殊的文件,主要用于进程间信息的传送。

linux 中文件的存取权限根据用户类型分文件所有者、所有者所在的组、其他用户,操作模式只分成三种:读( 4 )、写( 2 )、执行( 1 ),根据用户类型正好分成三组操作模式共 9 位来表示,对应于三位的八进制。

6.7.3 Linux 的虚拟文件系统

· Linux 在实现文件系统时采用了两层结构:

第一层是进虚拟文件系统(Virtual File System,VFS),将各种文件系统进行抽象,建立统一的索引节点组织结构,以此为实际的文件系统提供兼容性;

第二层是 Linux 支持的各种实际文件系统。允许用户将自己的文件系统以模块的形式加载到内核中,让系统支持该类型文件系统。

为使操作系统能支持多种不同的文件系统,Linux内核使用了虚拟文件系统VFS(Virtual File System, 或Virtual File System Switch虚拟文件系统交换器)。

VFS是Linux内核的一个软件层,用于给用户空间的程序提供文件系统接口。

VFS隐藏了各种硬件的具体细节,为所有的文件系统操作提供了统一的接口。这样,在Linux中可使用多种文件系统。

真正的文件系统,如ext2,nfs,vfat等,必须在VFS提供的统一接口支持下才能工作。这种统一的接口对于应用程序而言是透明的。

操作系统课程课程笔记相关推荐

  1. > 《物联网技术与应用》课程学习笔记

    <物联网技术与应用>课程学习笔记 文章目录 前言 第一次课 1.什么是物联网 2.物联网的特征 3.解释NB-IOT(窄带宽中束物联网)的含义 4.解释RFID有源.无源的含义 ~~5.物 ...

  2. 操作系统高级课程-1

    操作系统高级课程-1 声明 Course Introduction 系统能力培养 三个层次: 问题: 教学目的: 教学计划: 课程环节: 参考书: Nachos操作系统 e.g. 线程切换 Nacho ...

  3. 《高级计算机网络》之物联网——大连理工大学研究生课程整理笔记(非常详细,通俗易懂)

    注:本文是根据大连理工大学高级计算机网络课程整理的笔记,非常详细,如果对你有帮助,请点个赞吧! <高级计算机网络>之移动自组网--大连理工大学研究生课程整理笔记(非常详细,通俗易懂) &l ...

  4. linux课程教学设计,《LINUX操作系统》课程整体教学设计.doc

    <LINUX操作系统>课程整体教学设计 ( 2014-2015 学年 第1学期) 一.管理信息 课程名称:LINUX操作系统 课程代码: 学分3 学时:54 课程类型:物联网专业(或专业群 ...

  5. 台湾大学林轩田机器学习技法课程学习笔记4 -- Soft-Margin Support Vector Machine

    红色石头的个人网站:redstonewill.com 上节课我们主要介绍了Kernel SVM.先将特征转换和计算内积这两个步骤合并起来,简化计算.提高计算速度,再用Dual SVM的求解方法来解决. ...

  6. 台湾大学林轩田机器学习技法课程学习笔记1 -- Linear Support Vector Machine

    红色石头的个人网站:redstonewill.com 关于台湾大学林轩田老师的<机器学习基石>课程,我们已经总结了16节课的笔记.这里附上基石第一节课的博客地址: 台湾大学林轩田机器学习基 ...

  7. 台湾大学林轩田机器学习基石课程学习笔记13 -- Hazard of Overfitting

    红色石头的个人网站:redstonewill.com 上节课我们主要介绍了非线性分类模型,通过非线性变换,将非线性模型映射到另一个空间,转换为线性模型,再来进行分类,分析了非线性变换可能会使计算复杂度 ...

  8. 《操作系统》课程设计报告——用JAVA语言模仿实现“吃水果”问题

    引言 操作系统是计算机的核心总控软件,是计算机系统的指挥和管理中心,是计算机系统的灵魂.进程管理与文件系统是操作系统都是操作系统的五大重要功能之一.通过模拟操作系统的实现,加深学生对计算机操作系统内核 ...

  9. 资源 | Deeplearning.ai课程与笔记汇总

    从接触机器学习就了解到Andrew Ng的机器学习课程,后来发现又出来深度学习课程,就开始在网易云课堂上学习deeplearning.ai的课程,Andrew 的课真是的把深入浅出.当然学习这些课程还 ...

  10. 干货|MIT线性代数课程精细笔记[第二课]

    0 前言 MIT线性代数课程精细笔记[第一课]笔记见MIT线性代数课程精细笔记[第一课]. 该笔记是连载笔记,希望对大家有帮助. 1知识概要 这一节中我们介绍一下消元法,即是上一节中我们提到的&quo ...

最新文章

  1. 机器学习是深度学习之母
  2. 百度李彦宏:无人驾驶何时商用
  3. HTML5与JavaScript
  4. HBNIS-crypto
  5. lamp mysql开机自启_centos下设置自启动和配置环境变量的方法
  6. 如何评价一个开源项目——协作影响力
  7. 带货造假,买完不能换货?李佳琦、汪涵、李雪琴直播被中消协点名后这样回应...
  8. 高通HAL层之Sensor HAL
  9. 未来,突破束缚是唯一的选择?
  10. 轻度体验威马Living Pilot智行辅助系统:前期刺激,后期依赖
  11. 敏感词在线检测-敏感词在线检测工具
  12. Win10 wifi、蓝牙打不开
  13. 适合于初学者—软路由全探索系列(二):探索群晖 VMM 虚拟机旁路由安装及设置
  14. 有趣的设计模式——从一杯奶茶品味装饰模式
  15. 微软首次公开 GitHub 产品路线图
  16. 从生物信息学转计算机科学,转一个:学生物的,不会编程,也可以报考生物信息学的研究生...
  17. Flink系列之Flink流式计算引擎基础理论
  18. Epicor BPM - 在VS中编写BPM代码
  19. webpack----认识webpack
  20. bigemap如何切换外网IP地址

热门文章

  1. PCtoLCD2002图片取模显示位图图像无效
  2. 浏览器渲染原理以及性能优化
  3. 鸿蒙系统拟物化图标,疑Flyme8 UI曝光:极致拟物化设计引领icon风
  4. 网络技术与应用(笔记1)
  5. python元组添加元素_Python数据类型之元组
  6. 力扣之917. 仅仅反转字母
  7. Windows 8/8.1下 PL2303 HXA 驱动安装
  8. JDK环境变量配置-win10
  9. 注定与众不同_没有原因的数据注定会使我们失败
  10. 三网融合对即时通讯行业的影响