全部目录
-----------上篇------------------
-----------下篇------------------
操作系统综述
操作系统是配置在计算机硬件上的第一层软件,是对硬件系统的首次扩充。其主要作用是管理好这些设备,提高他们的利用率和系统的吞吐量,并为用户和应用程序提供一个简单的接口,便于用户使用。OS是现代计算机系统中最基本、最重要的系统软件,而其他系统软件及大量的应用软件都直接依赖于操作系统的支持,获得它所提供的服务。事实上OS已成为现代计算机系统、多处理机系统、计算机网络中必须配置的系统软件。
操作系统的两个重要目标
方便性、有效性(两者不可兼得)
用户操作计算机的三种方式
命令方式、系统调用方式、图标-窗口方式
计算机的硬件资源分类
处理机:分配和控制处理机
存储器:内存的分配与回收
I/O设备:设备的分配回收操纵
文件(程序和数据):对文件进行存取、共享和保护
操作系统发展过程及每个阶段的矛盾
人工操作方式:人机矛盾(CPU等待人工操作),效率低,CPU和I/O设备速度不匹配
单道批处理系统:内存中只保持一道作业,效率低下
多道批处理系统:平均周转时间长,无交互能力
分时系统
实时系统
操作系统四大基本特征(重点看并发性)
并发性(最重要)、共享性(最基本)、虚拟性、异步性
多任务os的两个最基本特征
并发、共享
进程
进程是资源分配和独立运行的基本单位,操作系统的四大特征也是基于进程而形成的
前驱图定义及绘制
前驱图的一个有向无循环图,用于描述进程之间执行的先后顺序,前驱关系用→表示判断两个程序能否并发执行的方法
无直接或间接前驱后继关系的程序可以并发执行
程序并发执行时的不可再现性
(进程并发执行的特征:间断、失去封闭、不可再现)
程序在并发执行时,由于失去了封闭性,也将导致其失去可再现性。即程序经过多次执行后,虽然其执行时的环境和初始条件相同,但得到的结果却各不相同。
进程的定义
进程是进程实体的运行过程,是程序的一次执行,是系统进行资源分配和调度的独立单位。
进行的特征是:动态性、并发性、独立性、异步性
基本状态转换
运行态:最多1个,最少0个;
阻塞态:最多(n-1)个,最少0个;
运行态:最多n个,最少0个
PCB及其作用
进程控制块(Process Control Block,PCB)。系统利用PCB来描述进程的基本情况和活动过程,进而控制和管理进程。
PCB的主要作用是使一个在多道环境中不能独立运行的程序成为一个能独立运行的基本单位,一个能与其他进程并发执行的进程。具体而言,其作用为:
- 作为能独立运行基本单位的标志
- 能实现间断性运行方式
- 提供进程管理所需要的信息
- 提供进程调度所需要的信息
- 实现与其他进程的同步与通信
程序段、相关数据段、PCB三部分构成了进程实体(又称进程映像)。所谓创建进程,实质上是创建进程实体中的PCB;而撤销进程,实质上是撤销进程的PCB。
原语
原语就是由若干条指令组成的,用于完成一定功能的一个过程,它与一般过程的区别在于它们是“原子操作”,即一个操作中的所有动作要么不做,要么全做,是一个不可分割的基本单位,在执行过程中不允许被中断。
两种形式的制约关系
间接制约关系:竞争
直接制约关系:前驱后继、协作
临界资源定义
各种进程间采取互斥方式实现对该种资源的共享,如打印机、磁带机等
临界区定义
访问临界资源的代码段
同步机制四原则
空闲让进、忙则等待、有限等待、让权等待
利用信号量实现进程同步
信号量semaphores
线程的定义及与进程的区别
线程是调度和分配的基本单位。
区别 | 进程 | 线程 | |
调度的基本单位 | 进程,切换代价更高 | 线程,代价更低 | 线程换时一定会带来进程的切换 |
拥有资源 | 可以拥有资源 | 不拥有系统资源 | 多个线程可共享进程中的资源 |
并发性 | 可以并发执行 | 可以并发执行 | |
独立性 | 更高 | 更低 | |
系统开销 | 更高 | 更低 | |
支持多处理机系统 | 一个 | 多个 |
处理机调度概述
在多道程序系统中,调度的实质是一种资源分配,处理机调度对处理机资源进行分配。
处理机调度的三个层次
高级调度(长程调度、作业调度):解决宏观上优先执行哪个程序或任务的问题,调度对象是作业,主要运用于多道批处理系统中。
中级调度(内存调度):解决内存不足时,优先激活或挂起哪个进程的问题,旨在提高内存利用率和系统吞吐量。
低级调度(进程调度、短程调度):解决CPU空闲时选择哪个进程执行的问题,调度对象是进程,运行频率最高,在多道批处理、分时、实时三种类型的OS中,都必须配置该级调度。
CPU利用率、平均(带权)周转时间计算
JCB的含义及作用
作业控制块(job control block,JCB),为了管理和调度作业,在多道批处理系统中,为每个作业设置了一个作业控制块JCB,它是作业在系统中存在的标志,其中保存了系统对作业进行管理和调度所需的全部信息。通常在JCB中包含的内容有:作业标识、用户名称、用户账号、作业类型(CPU 繁忙型、I/O 繁忙型、批量型、终端型)、作业状态、调度信息(优先级、作业运行时间)、资源需求(预计运行时间、要求内存大小等)、资源使用情况等。
作业调度算法 FCFS SJF PSA HRRN
1.先来先服务(first-come first-served,FCFS)调度算法
FCFS是最简单的调度算法,该算法既可用于作业调度,也可用于进程调度。当在作业调度中采用该算法时,系统将按照作业到达的先后次序来进行调度,或者说它是优先考虑在系统中等待时间最长的作业,而不管该作业所需执行时间的长短,从后备作业队列中选择几个最先进入该队列的作业,将它们调入内存,为它们分配资源和创建进程。然后把它放入就绪队列。
最基本、最简单、最常用的算法。有利于长作业,不利于短作业,有利于CPU繁忙的作业,不利于I/O繁忙的作业。
2.短作业优先(short job first,SJF)调度算法
SJF算法是以作业的长短来计算优先级,作业越短,其优先级越高。作业的长短是以作业所要求的运行时间来衡量的。SJF算法可以分别用于作业调度和进程调度。在把短作业优先调度算法用于作业调度时,它将从外存的作业后备队列中选择若干个估计运行时间最短的作业,优先将它们调入内存运行。
其优点在于改善了系统的w,显著减少短作业等待的时间,系统吞吐量增加,但其必须预知作业的运行时间,对长作业非常不利,长作业的周转时间会明显地增长。更严重的是,该算法完全忽视作业的等待时间,可能使作业等待时间过长,出现饥饿现象。此外,在采用SJF算法时,人—机无法实现交互,该调度算法也完全未考虑作业的紧迫程度,故不能保证紧迫性作业能得到及时处理。
3.优先级调度算法(priority-scheduling algorithm,PSA)
PSA算法根据外部赋予的优先级进行调度,保证最紧迫的作业优先运行
4.高响应比优先调度算法(Highest Response Ratio Next,HRRN)
在批处理系统中,FCFS算法所考虑的只是作业的等待时间,而忽视了作业的运行时间。而SJF算法正好与之相反,只考虑作业的运行时间,而忽视了作业的等待时间。高响应比优先调度算法则是既考虑了作业的等待时间,又考虑作业运行时间的调度算法,因此既照顾了短作业,又不致使长作业的等待时间过长,从而改善了处理机调度的性能。
抢占与非抢占 RR
抢占式调度:一旦把处理机分配给某个进程后,就一直让它运行下去,直至该进程完成,或因某件事发生而被阻塞时,才把处理机分配给其他进程
非抢占式调度:根据某个规则暂停掉正在进行的进程,将已分配给该进程的处理机重新分配给另一个进程。主要规则有优先权原则、短进程优先原则、时间片原则。
RR(基于时间片轮转调度算法):在分时系统中都采用时间片轮转算法进行进程调度。时间片是指一个较小的时间间隔,通常为10-100毫秒。在简单的轮转算法中,系统将所有的就绪进程按先来先服务(即FIFO)规则排成一个队列,将CPU分配给队首进程,且规定每个进程最多允许运行一个时间片;若时间片使用完进程还没有结束,则被加入就绪FIFO队列队尾,并把CPU交给下一个进程。时间片轮转算法只用于进程调度,它属于抢占调度方式。该算法CPU分配相对公平,均响应时间较短。缺点是不利于紧急作业,而且当进程的运行时间都相近时,平均的等待时间比较长,甚至不如先来先服务算法。
系统处理能力限制条件计算
实时调度算法 EDF LLF
EDF 最早截止时间算法:调度时机 新开旧结
LLF 最低松弛度优先算法:调度时机 旧结或松弛度为0,主要用于抢占式调度,松弛度=必须完成时间-运行时间-当前时间
优先级倒置问题及产生原因
高优先级进程被低优先级进程延迟或阻塞的现象,这往往由于一个高优先级任务等待访问一个被低优先级任务正在使用的临界资源,从而阻塞了高优先级任务;同时,该低优先级任务被一个次高优先级的任务所抢先,从而无法及时地释放该临界资源。这种情况下,该次高优先级任务获得执行权。
死锁含义及其产生原因
死锁是指因为争夺有限资源而产生的多个进程阻塞现象,死锁是一种特定的程序状态,在实体之间,由于循环依赖导致彼此一直处于等待之中,没有任何个体可以继续前进。死锁不仅仅在线程之间会发生,存在资源独占的进程之间同样也可能出现死锁。其主要原因是多个进程对资源的争夺,根本原因是资源有限。(至少有两个进程,全部进程处于阻塞态)
死锁产生的四个必要条件
- 互斥条件:某资源只能一个进(线)程使用,其他无法使用要进行等待,直到资源使用完毕释放资源
- 请求和保持:即资源请求者在请求其他资源时,保持对原有资源的占有,并不会释放自己所占有的资源
- 不可抢占:资源请求者不能强制从资源占有者那里抢夺资源,只能从等待资源占有者释放资源
- 循环等待条件:存在一个循环依赖链,使得每个进程都占有下一个进程所需的至少一种资源。
处理死锁的四种方法
(1)打破请求和保持条件
要求进程一次性的请求所有需要的资源,并且阻塞这个进程直到所有请求都同时满足。这个方法比较低效。
(2)打破请求和保持条件
进程运行过程中不断释放已分配给自己的、已用完的全部资源,然后再请求新的资源
(3)打破不可抢占
如果占有某些资源的一个进程进行进一步资源请求时被拒绝,则该进程必须释放它最初占有的资源。
(4)打破循环等待条件
可以通过定义资源类型的线性顺序来预防,可将每个资源编号,当一个进程占有编号为i的资源时,那么它下一次申请资源只能申请编号大于i的资源
处理死锁时不能破坏的条件
互斥条件