计算机操作系统总笔记
引论
语录
- os是现代计算机系统中最基本和最重要的系统软件。
- 一台完成无软件的计算机系统称为裸机。
- 进程是指在系统中能够独立运行并作为资源分配的基本单位,它有一组机器指令,数据和堆栈等组成,是一个能够独立运行的活动实体。
操作系统的目标和作用
目标
- 方便性,有效性,可扩充性,开发性。
- 有效性指系统资源的利用率还有系统的吞吐量。
作用
- 作为用户与计算机硬件之间的接口;
- 通过第三方应用程序或直接通过命令来操作系统。
- OS作为计算机系统资源的管理者;
- 计算机系统资源主要归纳为:处理器,存储器,I/O设备,文件
实现对计算机资源的抽象; - I/O设备管理软件实现了对计算机硬件操作的第一层抽象。
- 在裸机上铺设了I/O软件隐藏了I/O设备的具体细节,向上提供一层抽象的i/O设备,这样的机器称为扩充机或虚拟机。
OS是铺设在计算机硬件上多层软件的集合。
操作系统的发展过程
-
人工操作系统
通过纸袋输入机读取纸袋上的程序,计算完毕后将结果写入纸带,等待取走,装入纸带需要程序员操作。
-
脱机输入输出方式(Off-Line I/O)
将纸袋上的程序通过外围机输入到磁带上,再从磁带上调入到内穿,一定程度上解决了CPU 与 I/O 设备速度不匹配的问题。
-
单道批处理系统 (Simple processing system)
把一批作业以脱机的方式输入到磁带上,在监督程序的控制下,一批作业能连续的处理,内存中始终只保持只有一道作业。
-
多道批处理系统
作业在内存中排成一个后备队列,又作业调度程序按照某种算法去除若干个作业调入内存,使这些作业共享CPU和系统中的各种资源。
-
分时系统 (Time Sharing System)
利用多道程序与多任务处理使多个用户可以同时使用一台计算机。
即计算机把任务的运行时间分为多个时间段,并且将这些时间段平均分配给用户们指定的任务。轮流地为每一个任务运行一定的时间,如此循环,直至完成所有任务。
分时系统的特征:多路性,独立性,及时性,交互性。 -
实时系统 ( Real Time System)
实时系统是指能及时响应外部事件的请求,在规定的时间内完成对该时间的处理,并控制所有实时任务协调一致地运行。
设计实时操作系统的首要目标不是高的吞吐量,而是保证任务在特定时间内完成
系统从接收一个任务,到完成该任务所需的时间,其时间的变化称为抖动。可以依抖动将实时操作系统分为两种:硬实时操作系统及软实时操作系统
硬实时操作系统必须使任务在确定的时间内完成。软实时操作系统能让绝大多数任务在确定时间内完成。linux unix 是分时操作系统,因为可以登录多个账号,而且它是多任务执行的
操作系统的基本特征
-
并发 (Concurrence)
- 进程:系统中能够独立运行并且作为资源分配的基本单位,是一个独立运行的活动实体。
- 并行:系统中有多个处理机,每个处理机可以处理一个并发执行的程序,实现多个程序同时执行。
- 并发:在一段时间内宏观上有多个程序在同时执行,但在处理机系统中,每一时刻仅有一道程序执行。微观上这些程序只能是分时地交替执行。
-
共享(Sharing)
又称为资源复用,是指系统中的资源可供内存中多个并发执行的进程共同使用。
资源共享方式:互斥共享,同时访问 -
虚拟 (Virtual)
通过“空分复用”或“时分复用”将一条物理信道编程若干条逻辑信道,使得原来只能供一对用户通话的物理信道编程能供多个用户同时通话的逻辑信息道。
时分复用技术:使用这种技术,两个以上的信号或数据流可以同时在一条通信线路上传输,其表现为同一通信信道的子信道。
空分复用技术:将一个频率范围比较宽的信道划分成为多个频率范围比较窄的信道(频带),其中每一个频带仅供一对用户使用。 -
异步 (Asynchronous)
进程是以人们不可预知的速度向前推进的,此即进程的异步性。
操作系统的主要功能
-
处理机管理
进程控制:为作业创建进程,终止已经结束的进程,转换正在运行的进程的状态。
进程同步:对多个进程进行协调,协调方式包括同步和互斥。对访问临界资源时采用互斥方式,相互合作时采用同步方式。
进程通信:实现相互合作的进程之间交换信息。
调度:作业调度、进程调度。
-
存储器管理功能
内存分配:包括静态和动态的方式。
内存保护:保证各个程序彼此不干扰,不让用户访问系统的程序和数据等。
地址映射:将地址空间中的逻辑地址转换成内存空间的物理地址。
内存扩充:借助虚拟存储技术。
-
设备管理功能
缓冲管理:使用缓冲技术解决设备间速度不匹配的问题。
设备分配:为程序分配需要的设备。
设备处理:又称为设备驱动,实现CPU与设备控制器之间的通信。
-
文件管理
文件存储空间管理、目录管理、文件的读写管理和保护
-
操作系统与用户之间的接口
用户接口、程序接口
-
现代操作系统的新功能
系统安全、网络功能和服务、支持多媒体
进程的描述与控制
前趋图和程序执行
-
前趋图 (Precedence Graph):是一个有向无循环图,可以标记为DAG,用于描述进程之间的先后执行顺序,通过判断前驱图是否出现环可以判断进程是否能实现。
概念:偏序关系,前趋关系(Precedence Relation),初始节点(Initial Node),终止节点(Final Node)。 -
程序顺序执行的特征:顺序性,封闭性,可再现性。
-
程序并发执行
注意只有不存在前趋关系的程序之间才有可能并发执行。
并发执行的特征:间断性,失去封闭性,失去再现性。
进程的描述
进程概念的引入是为了能够对并发执行的程序加以描述和控制。
-
进程的定义
为了让每个并发执行的程序都能够独立地运行,在操作系统中必须为之配置一个专门的数据结构,称之为进程控制块,PCB。系统创建进程实质上就是创建PCB。系统利用PCB来描述进程的基本情况和活动过程,进而控制和管理进程。这样,又程序段,相关数据段,和PCB三部分构成了程序实体(进程映像),一般情况下我们称进程实体为进程。其他典型定义:进程是程序的一次执行;进程是一个程序及其数据在处理机上顺序执行发生的活动;
-
进程控制块 (
ProcessControl Bolck
)PCB一般包括:
1.程序ID(PID、进程句柄):它是唯一的,一个进程都必须对应一个PID。PID一般是整形数字
2.特征信息:一般分系统进程、用户进程、或者内核进程等
3.进程状态:运行、就绪、阻塞,表示进程现的运行情况
4.优先级:表示获得CPU控制权的优先级大小
5.通信信息:进程之间的通信关系的反映,由于操作系统会提供通信信道
6.现场保护区:保护阻塞的进程用
7.资源需求、分配控制信息
8.进程实体信息,指明程序路径和名称,进程数据在物理内存还是在交换分区(分页)中
9.其他信息:工作单位,工作区,文件信息等
-
进程特征
- 动态性:进程的最基本特征,实质是进程实体的执行过程。
- 并发性:多个进程实体同存在与内存中,且能在一段时间内同时运行。
- 独立性:指进程实体是一个能够独立运行,独立获得资源和独立接收调度的基本单位。
- 异步性: 进程是按照异步方式运行的,即各自按照不可预知的速度向前推进。
-
进程的基本状态
-
就绪(Ready ) :已分配到了除CPU以为的其他资源。
-
执行(Running): 进程已获得CPU
-
阻塞(Block):发生某些事件使得暂时无法继续执行。
附加状态
-
创建状态: 就绪之前的步骤,创建一个进程是一个很复杂的过程。期间会申请PCB,填写进程信息,分配资源,插入就绪队列等。
-
终止状态: 等待操作系统进行善后处理,最后将其PCB清零,并将空间还回系统。
-
-
挂起操作和状态转换
挂起:挂起对应着激活,当该操作作用于某个进程时,该进程将会被挂起,进入到禁止状态。进程正在执行,它将会被暂停指定,若原本是就绪状态,则暂时不受调度。
-
进程管理中的数据结构
操作系统将各类资源抽象成为各种数据结构,以及提供对一组资源进行操作的命令。在计算机系统中,每个资源和每个进程都设置了一个数据结构,用于表征实体,称之为资源信息表或进程信息表,其中包含了资源或进程的表示,描述状态等信息以及一批指针。
-
PCB的作用
记录了操作系统中需要的,用于描述进程的当前情况以及管理进程运行的全部信息,是操作系统中最重要的记录型数据结构。
1.作为独立的运行基本单位的标志。
2.能够实现间断性运行方式。
3.提供进程管理所需要的信息。
4.提供进程调度所需要的信息。
5.实现去其他进程的同步与通讯。 -
PCB中的信息
进程标识符
:用于唯一地表示进程,常包括外部标识符和内部表示符。
处理机状态
:也称为处理机的上下文,主要又处理机的各种寄存器中的内容组成,包括通用寄存器,指令计数器,程序状态字
,用户栈指针。
进程调度信息
:说明进程状态和有关进程调度的信息。如:状态,优先级,事件。进程控制信息:如进程状态,进程优先级。
-
PCB的组织方式
使用适当的组织方式是为了更加有效地管理PCB
线性方式:将所有PCB组织在一个线性表中,开销小,简单但是每次查找都要扫描一次,适合进程不多的系统。
连接方式:将状态相同的进程PCB分别通过PCB中的链接字组词一个队列,形成就绪队列,堵塞队列,空白队列等。
索引方式:根据进程状态建立几个索引表,在索引表目录中记录相同状态的进程地址列表。
进程控制
进程控制是进程管理中最基本的功能,主要包括创建进程,终止进程,切换进程的状态等。这些控制一般有OS的内核中的原语实现。
-
OS内核:通常将一些与硬件紧密相关、驱动程序、运行频率高的模块安装在紧靠硬件的软件层次中,它们常驻内存,常被称为OS内核。
OS内核包好支撑和资源管理两大功能。
支撑功能:中断处理,时钟管理,原语操作。
资源管理功能:进程控制,存储器管理,设备管理。
-
进程的创建
在OS中,运行一个进程创建另外一个进程,因此有父进程,子进程的说法。子进程还可以继续创建更多的孙进程,因此形成了一个进程的层次结构。子进程可以继承父进程所拥有的所有资源,例如打开的文件,缓冲区等。windows中不存在进程层次结构的概念,所有的进程都拥有相同的地位。引起创建进程的事件常包括:用户登录,提供服务,应用请求,作业调度。创建步骤:申请空白PCB -> 为新进程分配所需的资源 -> 初始化PCB -> 插入就绪队列。
-
进程的终止
引发终止的事件:正常结束, 异常结束, 外界干预。
终止过程:读取PCB中的状态 -> 若进程处于执行状态,则立即终止,并设调度标志为真 -> 若有子孙进程,将其他子孙进程也终止 -> 将资源交换给父进程或系统 -> 将PCB从队列中移出。 -
进程的堵塞和唤醒
导致堵塞和唤醒的事件:请求资源失败,等待某种操作,新数据未到达,等待新任务到达。
堵塞过程:堵塞是主动行为(通过调用阻塞原语 block),首先停止执行,然后将PCB中的现行状态改成阻塞,将PCB加入到阻塞队列。最后调度程序进行重新调度,将CPU分配给其他进程。
唤醒(wakeup)的过程:将进程从阻塞队列中移出,将PCB中的现行状态改成就绪,然后加入到就绪队列中。注意阻塞和唤醒时在不同进程中使用的,否则将会永久阻塞。
-
进程的挂起与激活
OS利用挂起原语(suspend)将指定进程或处于堵塞状态的进程挂起。调用激活原语(active),将指定进程激活。挂起过程:首先检查进程状态,活动就绪改成静止就绪,活动阻塞改成静止阻塞,把PCB复制到某指定的内存区域。激活过程:先将进程从外存调入内存,检查该进程的现行状态,若是静止就绪则改成活动就绪,若是静止堵塞,则改为活动堵塞。
进程同步
进程同步的主要任务是对多个相关进程在执行次序上进行协调,使这些并发执行的进程之间能够按照一定的规则共享系统资源,并且很好地相互合作,从而使程序的执行具有可再现性。
-
基本概念
- 两种基本制约关系:多个进程共享系统中的资源或为完成某一任务而相互合作,因此产生制约关系;间接相互制约关系:并发执行的程序之间争夺系统资源产生;直接相互制约关系:源于不同进程之间的相互合作,不同程序需要完成的任务有先后依赖关系。
- 临界资源:临界资源是指每次仅允许一个进程访问的资源。硬件有打印机、磁带机等,软件有消息缓冲队列、变量、数组、缓冲区等。
- 临界区:(critical section) 每个进程中访问临界资源的那段代码称为临界区。
进入区:(entry section ) 用于在进程进入临界区前检查是否能进入的代码。
退出区:(exit section ) 用于将临界区被访问的部分标志恢复为未被访问。
同步机制应遵循的规则:空闲让进。忙则等待。有限等待。让权等待。
-
硬件同步机制
软件方法解决进程互斥进入临界区的问题有难度和很大的局限性,很少使用,计算机大多提供特殊的硬件指令来解决临界区问题。在管理临界区时,可以将标志进程看成一个锁。测试和关锁的操作是连续的。注意利用硬件指令虽然简单有效,但是必须不断地进行测试,处于一种“忙等”的状态,不符合“让权等待”的原则,浪费处理机的同时难以解决复杂的同步问题。
-
关中断:实现互斥的最简单方法之一。进入测试锁前关闭中断,直到完成锁测试并上锁后才能打开在端。关中断不适用于多
cpu
系统。 -
Test-and-set指令实现互斥。
借助一条硬件指令实现互斥。
//一般性描述 bool TS(bool *lock){ bool old = *lock; *lock = true; return old; } //使用: while(TS(&lock))...;
-
利用Swap指令实现进程互斥。
Swap指令又称为对换指令,用于交换两个字的内容。可以简单有效地实现互斥。
//过程描述 void swap(bool *a, bool *b){ bool tmp; tmp = *a; *a = *b; *b = tmp; } //使用 do{ key = true; do { swap(&lock, &key); }while(key!=false); //临界区操作 lock=false }while(true);
-
-
信号量机制
Dijkstra
提出信号量(semaphores
)机制,是一种进程同步工具。现在广泛用于单片机处理和多处理机系统和计算机网络中。信号量:信号量(
semaphore
)的数据结构为一个值和一个指针,指针指向等待该信号量的下一个进程。信号量的值与相应资源的使用情况有关。当它的值大于0时,表示当前可用资源的数量;当它的值小于0时,其绝对值表示等待使用该资源的进程个数。- 整型信号量:
Dijkstra
将整型信号量用于表示一个资源数目的整型量S,仅能通过两个标准的原子操作wait(S) 和signal(S)来访问。这两个操作被称为P,V锁。也可以记为“P操作”和“V操作”。
在整形信号机制中的wait操作,只要S<=0就会不断进行测试,因此该机制不遵循“让权等待"原则,而是使程序处于“忙等”的状态。
wait(S){ //p操作 while (S<=0); S=S-1; } signal(S){ //v操作 S=S+1; }
- 记录型信号量:
记录型信号量采用了“让权等待”策略,解决了进程“忙等”的问题,但使得出现多个进程等待统一临界资源的情况。
为此记录型信号量除了S外,还增加一个链表用于保存等待进程链表指针。
typedef struct{ //记录型信号量可描述为 int value; struct process *L; } semaphore; void wait (semaphore S) { //相当于申请资源 S.value--; if(S.value<0) { add this process to S.L; block(S.L); } } void signal (semaphore S) { //相当于释放资源 S.value++; if(S.value<=0){ remove a process P from S.L; wakeup(P); } }
- AND型信号量:
上述进程互斥问题都是针对一个临界资源而言的,在有些应用场合,一个进程需要同时获得两个或者更多的资源。AND信号量可以解决多临界资源申请问题。其基本思想是将程序运行需要的所有资源一次性分配给进程,等进程使用完毕后在
- 整型信号量: