操作系统的概念、特征、功能和提供的服务
概念:操作系统是指控制和管理整个计算机系统的硬件与软件资源,合理地组织、调度计算机的工作和资源分配,进而为用户和其他软件提供方便接口与环境的程序集合。操作系统是计算机系统中最基本的系统软件
特征:并发、共享、虚拟、异步
1)并发是指两个或多个事件在同一时间间隔内发生,操作系统的并发性是指计算机系统中同时存在多个运行的程序,因此它具有处理和调度多个程序同时执行的能力;
2)资源共享即共享,是指系统中的资源可供内存中多个并发执行的进程共同使用。分为互斥共享方式和同时访问方式
3)虚拟是指把一个物理上的实体变为若干逻辑上的对应物。操作系统的虚拟技术可归纳为时分复用、空分复用
4)多道程序环境允许多个程序并发执行,但由于资源有限,进程的执行并不是一贯到底的,而是走走停停的,它以不可预知的速度向前推进,这就是进程的异步性
其中,并发和共享是操作系统两个最基本的特征,两者之间互为存在条件:资源共享是以程序的并发为条件的,若系统不允许程序的并发执行,则自然不存在资源共享问题;若系统不能对资源共享实施有效的管理,则必将影响程序的并发执行,甚至根本无法执行
功能和提供的服务:
1)操作系统作为计算机系统资源的管理者
处理机管理、存储器管理、文件管理、设备管理。
其中进程管理的主要包括进程控制、进程同步、进程通信、死锁处理、处理机调度等;存储器管理主要包括内存分配与回收、地址映射、内存保护与共享和内存扩充等;文件管理包括文件存储空间的管理、目录管理与文件读写管理和保护等;设备管理包括缓冲管理、设备分配、设备处理和虚拟设备等
2)操作系统作为用户与计算机硬件系统之间的接口
主要分为两类:命令接口和程序接口
3)操作系统用作扩充机器
操作系统的发展和分类
1)手工操作阶段(无操作系统):用户独占全机,虽然不会出现因资源已被其他同户占用而等待的现象,但资源利用率低;CPU等待手工操作,CPU利用不充分
2)批处理阶段:分为单道批处理系统、多道批处理系统
单道:自动性、顺序性、单道性
多道:多道、宏观上并行、微观上串行
多道优点:资源利用率高、系统吞吐量大;多道缺点:用户相应时间长、不提供人机交互
3)分时操作系统:指多个用户通过终端共享一台主机
特点:同时性、交互性、独立性、及时性
4)实时操作系统:硬实时系统、软实时系统;特点是及时性和可靠性
5)网络操作系统和分布式计算机系统
前者最主要特点为网络中各种资源的共享及各台计算机之间的通信
后者主要特点是分布性和并行性
6)个人计算机操作系统:目前最广泛
操作系统的运行环境(内核态与用户态、中断、异常、系统调用)
内核态与用户态:用户自编程序运行在用户态、操作系统内核程序运行在核心态
中断机制:引入中断技术的初衷是提供多道程序运行环境中CPU的利用率,而且主要针对外部设备;中断机制中,只有一小部分功能属于内核,他们负责保护和恢复中断现场的信息,转移控制权到相关程序。这样可以减少中断处理时间,提供系统并行处理能力
中断与异常:中断也称外中断,指来自CPU执行指令以外的事件的发生;异常又称内中断、例外或陷入,指来自源自CPU执行指令内部的事件
中断处理过程:关中断->保存断点->中断服务程序寻址->保存现场和屏蔽字->开中断->恢复现场和屏蔽字->开中断、中断返回
系统调用:所谓系统调用,是指用户在程序中调用操作系统所提供的一些子功能,系统调用可视为特殊的公共子程序;系统调用按功能大致分为设备管理、文件管理、进程控制、进程通信、内存管理
操作系统体系结构
操作系统体系结构分为大内核和微内核
进程概念与特征、进程的状态与转换、进程控制、进程组织
1)进程的定义:进程是进程实体的运行过程,是系统进行资源分配和调度的一个基本单位
2)进程的特征:动态性(最基本)、并发性、独立性、异步性、结构性
3)进程的状态和转换:运行态、就绪态、阻塞态、创建态、结束态
就绪态->运行态:处于就绪态的进程被调度后,获得处理机资源发生转换
运行态->就绪态:运行态的进程时间片用完或在可剥夺的操作系统中当有更高优先级的进程就绪时,就会变成就绪态让该进程执行
运行态->阻塞态:进程请求某一资源的使用和分配或等待某一事件的发生时发生转换
阻塞态->就绪态:进程等待的事件到来时发生转换
4)进程控制:进程控制的主要功能是对系统中的所有进程实施有效的管理。分为进程的创建、进程的终止、进程的阻塞和唤醒、进程切换
5)进程的组织:进程是一个独立运行的单位,也是操作系统进行资源分配和调度的基本单位,由PCB、程序段、数据段三部分组成,其中最核心是PCB
进程通信(共享存储、消息传递、信箱通信、管道通信)
进程通信是指进程之间的信息交换,PV操作是低级通信方式,高级通信方式是指以较高的效率传输大量数据的通信方式。高级通信方法主要有以下三种
1)共享存储:在通信的进程之间存在一块可直接访问的共享空间,通过对这片共享空间进行读/写操作实现进程之间的信息交换
2)消息传递:在消息传递系统中,进程间的数据交换是以格式化的消息为单位的,进程通过系统提供的发送消息和接收消息两个原语进行数据交换。分为直接通信方式和间接通信方式。
直接通信方式:发送进程直接把消息发送给接收进程,并将它挂在接收进程的消息缓冲队列上,接收进程从消息缓冲队列中取得消息
间接通信方式:发送进程把消息发送到某个中间实体,接收进程从中间实体取得消息。这种中间实体一般为信箱,这种通信方式又称为信箱通信方式
3)管道通信:管道通信是消息传递的一种特殊方式,所谓“管道”,是指用于连接一个读进程和一个写进程以实现他们之间的通信的一个共享文件,又名pipe文件。向管道输入的发送进程(即写进程),以字符流的形式将大量的数据送入写管道;而接收管道输出的接收进程则从管道中接收数据
线程概念与多线程模型
引入线程的目的是更好地使多道程序并发执行,提高资源利用率和系统吞吐量;
而引入线程的目的是减小程序在并发执行时所付出的时空滞销,提高操作系统并发性能
1)线程概念:线程是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点运行中必不可少的资源,但它可与同属一个进程的其它线程共享进程所拥有的全部资源。
2)多线程模型:有些系统同时支持用户线程和内核线程,由此产生了不同的多线程模型,即实现用户级线程和内核级线程的连接方式
多对一模型:将多个用户级线程映射到一个内核级线程
一对一模型:将每个用户级线程映射到一个内核级线程
多对多模型:将n个用户级线程映射到m个内核级线程
调度的基本概念、调度的基本准则、调度时机、切换与过程、调度方式
1)调度的基本概念:在多道程序系统中,进程的数量往往多于处理机的个数,因此进程征用处理机的情况在所难免。处理机的调度是将处理机进行分配,即从就绪队列中按照一定的算法选择一个进程并将处理机分配给他执行,以实现进程并发执行。处理机调度是多道程序操作系统的基础,是操作系统设计的核心问题
2)调度的基本准则:主要有CPU利用率、系统吞吐量、周转时间、等待时间、响应时间
3)调度时机、切换与过程:进程调度和切换程序是操作系统内核程序。进程切换往往在调度完成后立刻发生,要求保存原进程当前切换点的现场信息,恢复被调度进程的信息
不能进行进程调度与切换的情况:在处理中断过程中;进程在操作系统内核程序临界区中;其他需要完全屏蔽中断的原子操作过程中
应该进行进程调度与切换的情况:发生引起调度条件且当前进程无法继续运行下去时,可以马上进程调度与切换;中断处理结束或自陷处理结束后,返回被中断进程的用户态程序执行现场前,若置上请求调度标志,即可马上进行进程调度与切换
4)调度方式:所谓进程调度方式,是指当某个进程正在处理机上执行时,若有某个更为重要或紧迫的进程需要处理,即有优先权更高的进程进入就绪队列,此时通常有非剥夺式和剥夺式两种进程调度方式
典型调度算法:先来先服务、短作业优先、时间片轮转、优先级、最高响应比优先、多级反馈队列调度算法
1)先来先服务:既可用于进程调度又可用于作业调度。在作业调度中,算法每次从后备作业队列中选择最先进入该队列的一个或几个作业,将他们调入内存,分配必要的资源,创建进程并放入就绪队列
2)短作业优先:从后备队列中选择一个或若干估计运行时间最短的作业,将他们调入内存运行;短进程优先是从就绪队列中选择一个估计运行时间最短的进程,将处理机分配给他
3)时间片轮转:在这种算法中,系统将所有就绪进程按到达时间的先后次序排成一个队列,进程调度按照先来先服务,只不过在使用完一个时间片后即使未完成也必须释放处理机给下一个进程
4)优先级:每次从后备作业队列中选择优先级最高的一个或几个作业将他们调入内存,分配必要资源,创建进程放入就绪队列。在进程调度中,每次从就绪队列中选择优先级最高的进程将处理机分配给他,使之投入运行
5)最高响应比:每次进行作业调度时,先计算后备作业队列中每个作业的响应比,从中选出响应比最高的作业投入运行
6)多级反馈队列调度算法:设置多个就绪队列,并为各个队列赋予不同的优先级;赋予各个队列中进程执行时间片的大小各不相同。在优先级越高的队列中,每个进程的运行时间片越小。
进程同步、互斥的基本概念
1)同步亦称直接制约关系,是指为完成某种任务而建立的两个或多个进程,这些进程因为需要在某些位置上协调它们的工作次序而等待、传递信息所产生的制约关系
2)互斥也称间接制约关系,当一个进程进入临界区使用临界资源时,另一个进程必须等待,当占用临界资源的进程退出临界区后,另一进程才允许去访问此临界资源
为禁止两个进程同时进入临界区,同步机制应遵循空闲让进、忙着等待、有限等待、让权等待
实现临界区互斥的基本方法:软件实现方法、硬件实现方法
软件实现方法:在进入区设置并检查一些标志来标明是否有进程在临界区中,若已有进程在临界区,
则在进入区通过循环检查进行等待,进程离开临界区后则在退出区修改标志
1)单标志法:该算法可确保每次只允许一个进程进入临界区。但两个进程必须交替进入临界区,
若某个进程不再进入临界区,则另一个进程也将无法进入临界区(违背“空闲忙进”)。
P0进程: P1进程:
while(turn!=0); while(turn!=1); //进入区
critical section; critical section; //临界区
turn=1; turn=0; //退出区
remainder section; remainder section; //剩余区
2)双标志法先检查:该算法的基本思想是在每个进程访问临界区资源之前,先查看临界资源
是否正在被访问,若正被访问,该进程需等待,否则,进程进入自己的临界区(违背“忙则等待”)
Pi进程: Pj进程:
while(flag[j]); while(flag[i]);
flag[i]=TRUE; flag[j]=TRUE;
critical section; critical section;
flag[i]=FALSE; flag[j]=FALSE;
remainder section; remainder section;
3)双标志法后检查:算法二先检测对方的进程状态标志,再置自己的标志,由于在检测和放置中
可插入另一个进程的检测操作,会造成两个进程在分别检测后同时进入临界区。为此,算法三先
将自己的标志设置为TRUE,再检测对方的状态标志,若对方为TRUE,则进程等待;否则进入临界区
(会发生两个进程同时置位后相互谦让,产生“饥饿”)
Pi进程: Pj进程;
flag[i]=TRUE; flag[j]=TRUE;
while(flag[j]); while(flag[i]);
critical section; critical section;
flag[i]=FALSE; flag[j]=FALSE;
remainder section; remainder section;
4)Peterson's Algorithm:为了防止两个进程为进入临界区而无限等待,又设置了变量turn,每个
进程在先设置自己的标志后再设置turn标志,这时,再同时检测另一个进程状态标志和不允许进入标志,
以保证两个进程同时要求进入临界区时,只允许一个进程进入临界区
(遵循了空闲让进、忙则等待、有限等待未遵循让权等待)
Pi进程: Pj进程;
flag[i]=TRUE;turn=j; flag[j]=TRUE;turn=i;
while(flag[j]&&turn=j); while(flag[i]&&turn=i);
critical section; critical section;
flag[i]=FALSE; flag[j]=FALSE;
remainder section; remainder section;
硬件实现方法:
1)中断屏蔽方法:禁止一切中断发生,或称之为屏蔽中断、关中断。因为CPU只在发生中断时引起进程
切换,因此屏蔽中断能够保证当前运行的进程让临界区代码顺利地执行完,进而保证互斥的正确实现,
然后执行开中断。
2)TestAndSet指令:这条指令是原子操作,即执行改代码时不允许被中断。其功能是读出指定标志后
把该标志设置为真
1)整型信号量:整型信号量被定义为一个用于表示资源数目的整型量S,wait和signal操作可描述为
wait(S){ signal(S){
while(S<=0); S=S+1;
S=S-1; }
}
wait操作中,只要信号量S<=0,就会不断地测试。因此,该机制并未遵循“让权等待”的准则,而是出于
“忙等”
2)记录型信号量:记录型信号量是不存在“忙等”现象的进程同步机制。除需要记录资源数目的整型变量外
还需要一个进程链表L,用于链接所有等待该资源的进程
typedef struct{
int value;
struct process *L;
}semaphore; 相应的wait(S)和signal(S)的操作如下:
void wait(semaphore S){ void signal(Semaphore S){
S.value--; S.value++;
if(S.value<0){ if(S.value<=0){
add this process to S.L; remove a process P from S.L;
block(S,L); wakeup(P);
} }
} }
其中wait操作,S.value--表示进程请求一个该类资源,当S.value<0时,表示该资源已分配完毕,
因此进程应调用block原语进行自我阻塞,并插入该类资源等待队列上,所以遵循“让权等待”
3)利用信号量实现同步:信号量机制能用于解决进程间的各种同步问题。
若P2先执行到P(S)时,S为0,执行P操作会把P2进程阻塞,并放入阻塞队列
当P1中x执行完,执行V操作,会唤醒阻塞队列的P2,把它放回就绪队列
semaphore S=0;
P1(){ P2(){
... ...
x; P(S);
V(S); y;
...; ...;
}
4)利用信号量实现进程互斥:
semaphore S=1;
P1(){ P2(){
... ...
P(S); P(S);
进程P1的临界区 进程P2的临界区
V(S); V(S);
... ...
} }
5)利用信号量实现前驱关系:略
经典同步问题:生产者-消费者问题、读者-写者问题、哲学家进餐问题等
死锁的概念、死锁处理策略
1)概念:所谓死锁,是指多个进程因竞争资源而造成的一种僵局,若无外力作用,这些进程都将无法继续向前推进
2)死锁处理策略:为使系统不发生死锁,必须设法破坏产生死锁的四个必要条件之一(互斥、不剥夺、请求并保持、循环等待),或运行死锁产生,但当死锁发生时能检测出死锁,并有能力实现恢复
死锁预防
设置某些限制条件,破坏产生死锁的4个必要条件中的一个或几个以防止发生死锁
例如:一次性请求所有资源,资源剥夺,资源按序分配
死锁避免:系统安全状态、银行家算法
死锁避免是在资源动态分配过程中,防止系统进入不安全状态,以避免发生死锁。
1)系统安全状态:所谓安全状态,是指系统能按某种进程推进顺序为每个进程Pi分配其所需的资源,直至满足每个进程对资源的最大需求,使每个进程都可顺序完成。此时这个推进顺序称为安全序列,若系统无法找到一个安全序列,则称系统处于不安全状态
2)银行家算法:核心思想是在进程提出资源申请时,先预判此次分配是否会导致系统进入不安全状态,如果会就暂时不答应这次要求,让该进程进入阻塞态等待
死锁检测和解除
1)资源分配图:圆圈代表进程,框代表资源。进程到资源的有向边代表请求边,资源到进程的有向边称为分配边
2)死锁定理:S为死锁的条件为当且仅当S状态的资源分配图是不可完全简化的,该条件为死锁定理
3)死锁解除:一旦检测出死锁就应立即采取相应措施来解除死锁,死锁主要解决方法有:
->资源剥夺法:挂起某些死锁进程,并抢占它的资源,将这些资源分配给其他的死锁进程。但应防止被挂起的进程长时间得不到资源而处于资源匮乏的状态
->撤销进程法:强制撤销部分甚至全部死锁进程并剥夺这些进程的资源。撤销的原则可以按进程优先级和撤销进程的代价的高低进行
->进程回退法:让一(或多)个进程回退到足以回避死锁的地步,进程回退时自愿释放自愿而非剥夺。要求系统保持进程的历史信息,设置还原点
内存管理概念
操作系统对内存的划分和分配,就是内存管理概念
程序装入与链接、逻辑地址与物理地址空间、内存保护
创建进程首先要将程序和数据装入内存。将用户源程序变为可在内存中执行的程序,通常需要编译、链接、装入三个步骤
程序的链接有静态链接、装入时动态链接、运行时动态链接三种方式
内存的装入模块在装入内存时有绝对装入、可重定位装入、动态运行时装入(动态重定位)三种
逻辑地址空间:当链接程序将各个模块链接成一个完整的可执行目标程序时,链接程序顺序依次按各个模块的相对地址构成统一的从0号单元开始编址的逻辑地址空间
物理地址空间:物理地址空间是指内存中物理单元的集合,它是地址转换的最终地址,进程在运行时执行指令和和访问数据,最后都要通过物理地址从主存中存取
内存保护:内存分配前,需要保护操作系统不受用户进程影响,同时保护用户进程不受其他用户进程的影响,有两种方法
1)在CPU中设置一对上、下限寄存器,存放用户作业在主存中的下限和上限地址,每当CPU要访问一个地址时,分别和两个寄存器的值相比,判断有无越界
2)采用重定位寄存器(或基址寄存器)和界地址寄存器(又称限长寄存器)来实现
交换与覆盖
覆盖于交换技术是在多道程序环境下用来扩充内存的方法
覆盖:由于程序运行时并非任何时候都要访问程序及数据的各个部分,因此可把用户空间分成一个固定区和若干覆盖区。将经常活跃的部分放在固定区,其余部分按调用关系分段。首先将那些即将要访问的段放入覆盖区,其他段放在外存中,在需要调用前,系统再将其调入覆盖区,替换覆盖区中原有的段
交换:把处于等待状态的程序从内存移到辅存,把内存空间腾出来,这一过程又称为换出;把准备好竞争CPU运行的程序从辅存移到内存,这一过程称为换入
连续分配管理方式
连续分配是指为一个用户程序分配一个连续的内存空间,连续分配方式主要包括单一连续分配、固定分区分配和动态分区分配
1)单一连续分配:内存在此方式下分为系统区和用户区,系统区仅供操作系统使用,通常在低地址部分;用户区是为用户提供的、除系统区之外的内存空间。这种方式无须进行内存保护
2)固定分区分配:固定分区分配是最简单的一种多道程序存储管理方式,它将用户内存空间划分若干固定大小的区域,每个分区只装一道作业。有空闲分区时,便可从外存的后备作业队列中选择适当大小作业装入该分区
3)动态分区分配:又称为可变分区分配,是一种动态划分内存的分区方法。这种分区方法不预先划分内存,而是在进程装入内存时,根据进程大小动态建立分区并使分区大小正好适合进程需要
非连续分配管理方式:分页管理方式、分段管理方式、段页式管理方式
非连续分配允许一个程序分散地装入不相邻的内存分区,根据分区大小是否固定,分为分页存储管理和分段存储管理
1)基本分页存储管理方式:把主存空间划分为大小相等且固定的块,块相对较小,作为主存的基本单位。每个进程也以块为单位进行划分,进程在执行时,以块为单位逐个申请主存中的块空间
2)基本分段存储管理方式:
3)段页式管理方式:
虚拟内存基本概念
基于局部性原理,在程序装入时,将程序的一部分装入内存,而将其余部分留在外存,就可启动程序执行。在程序执行过程中,当所访问的信息不在内存时,由操作系统将所需要的部分调入内存,然后继续执行程序。另一方面,操作系统将内存中暂时不适用的内容换到外存上,从而腾出空间存放将要调入内存的信息
请求分页管理方式:
页面置换算法:最佳置换算法(OPT)、先进先出置换算法(FIFO)、最近最少使用置换算法(LRU)、时钟置换算法等
1)最佳置换算法:选择被淘汰的页面是以后永不适用的页面,或是在最长时间内不再访问的页面,以便保证获得最低的缺页率
2)先进先出置换算法:优先淘汰最早进入内存的页面,即在内存中驻留时间最久的页面。只需把调入内存的页面根据先后次序链接成队列,设置一个指针总指向最早的页面
3)最近最少使用置换算法:选择最近最长时间未访问过的页面予以淘汰,它认为过去一段时间内未访问过的页面,在最近的将来可能也不会访问。该算法为每个页面设置一个访问字段,来记录页面自上次被访问以来所经历的时间,淘汰页面时选择现有页面中值最大的予以淘汰
4)时钟算法:又称最近未用算法
页面分配策略
驻留集大小、调入页面时机、从何处调入页面
工作集、抖动
工作集:是指在某个时间间隔内,进程要访问的页面的集合。基于局部性原理,可以用最近访问过得页面来确定工作集
抖动:在页面置换过程中,刚刚换出的页面马上又换入主存,刚刚换入的页面又马上换出主存,这种频繁的页面的调度行为称为抖动或颠簸。若一个进程在换页上用的时间多于执行时间,则这个进程就在颠簸
文件概念、文件的逻辑结构
文件概念:文件是以计算机硬盘为载体的存储在计算机上的信息集合,文件可以是文本文档、图片、程序等。在系统进行时,计算机以进程为基本单位进行资源的调度和分配;而在用户进行的输入、输出中,则以文件为基本单位
文件的逻辑结构:文件的逻辑结构是从用户观点出发看到的文件的组织形式。文件的物理结构是从实现观点出发看到的文件在外存上的存储组织形式。文件的逻辑结构实际上是指在文件的内部,数据逻辑上是如何组织起来的
文件的结构:顺序文件、索引文件、索引顺序文件
文件按逻辑可划分为无结构文件和有结构文件
无结构文件将数据按顺序组织组成记录并积累、保存,它是有序相关信息项集合,以字节为单位
有结构文件由一组相似的记录组成,按记录的组织形式分为顺序文件、索引文件、索引顺序文件
1)顺序文件:文件中的记录一个接一个地顺序排列,记录通常是定长的,可以顺序存储或以链表形式存储。顺序文件有两种结构,第一种是串结构,记录之间的顺序与关键字无关。第二种是顺序结构,指文件中的所有记录按关键字顺序排列
2)索引文件:变长记录文件只能顺序查找,系统开销较大。为此可建立一张索引表以加快检索速度,索引表本身是定长记录的顺序文件
3)索引顺序文件:索引顺序文件是顺序和索引两种组织形式的结合。索引顺序文件将顺序文件中的所有记录分为若干组,为顺序文件建立一张索引表,在索引表中为每组中的第一条记录建立一个索引项,其中含有该记录的关键字值和指向该记录的指针
目录结构:文件控制块和索引节点,单级、两级和树形目录结构,图形目录结构
文件控制块和索引结点:与进程管理一样,为实现目录管理,操作系统中引入了文件控制块的数据结构。
1)文件控制块:FCB是用来存放控制文件需要的各种信息的数据结构,以实现“按名存取”。FCB的有序集合称为文件目录,一个FCB就是一个文件目录项,为了创建一个新文件,系统将分配一个FCB并存放在文件目录中成为目录项。FCB主要包括基本信息、存取控制信息、使用信息
2)索引结点:在检索目录文件的过程中,只用到了文件名,仅当找到一个目录项时,才需要从该目录项中读出该文件的物理地址
文件共享
文件保护:访问类型、访问控制
文件系统层次结构
目录实现
文件实现
磁盘的结构
磁盘调度算法:先来先服务(FCFS)、最短寻道时间优先(SSTF)、电梯算法(SCAN)
磁盘的管理