操作系统知识点总结
概述部分
什么是操作系统
资源分配器、控制程序、内核程序、核心系统软件。
管理计算机硬件的程序,还为应用程序提供基础,并且充当计算机硬件和计算机用户的中介。
操作系统是资源的管理者,操作系统是虚拟机,操作系统是系统软件的集合。(注意不是众多软件的集合)。
操作系统设计目标
为用户提供方便且有效地执行程序的环境。
方便性(向上服务)、有效性(向下管理)。
操作系统由哪些部分组成
组成包括进程管理、主存管理、辅存管理、I/O管理、文件管理、保护系统、联网、命令解释系统。
各部分主要解决什么问题
-
进程管理(CPU的管理):创建和删除进程、悬挂(暂停)和继续进程、进程同步机制、进程通信机制、死锁处理机制。
-
内存管理(珍贵资源、容量小):记录内存哪部分正在被使用以及被谁使用;当内存空间可用时,决定哪些进程可装入内存;根据需要分配和释放内存空间。
-
辅存管理:内存太小而不能容纳所有数据和程序,再加上掉电后会失去数据,计算机必须提供二级存储器,以备份内存。采用磁盘作为主要在线存储媒介存储程序和数据。 OS负责硬盘管理相关活动:空闲空间管理、存储空间分配、硬盘调度。
-
I/O管理:包括缓冲器、高速缓存等部分。用于特定硬件设备的驱动程序。
-
文件管理:创建删除文件、创建删除目录、提供操作文件和目录的原语、将文件映射到二级存储器(辅存)上、在稳定(非易失的)存储媒介上备份文件。
-
保护系统:区分已授权和未授权的使用、提供一定方法规定所有要进行的控制、提供加强控制的方法。
-
联网(分布式系统):处理器通过通信网络相连,通信双方采用相同协议。共享资源的访问
操作系统内核技术发展
简单结构——分层方法——微内核结构
单一结构——核心层次结构——微内核结构
微内核:精心设计的、能实现现代OS核心功能的小型内核。
不是完整的操作系统,只为构建通用OS提供基础。提供一些基本功能,如进程管理、存储器管理、进程间通信、低级I/O功能等。将所有非基本部分从内核中移走,并将它们实现为系统程序或用户程序。
并发和并行的区别
- 并发(concurrency):把任务在不同的时间点交给处理器进行处理。在同一时间点,任务并不会同时运行。
- 并行(parallelism):把每一个任务分配给每一个处理器独立完成。在同一时间点,任务一定是同时运行。
并发不是并行。并行是让不同的代码片段同时在不同的物理处理器上执行。并行的关键是同时做很多事情,而并发是指同时管理很多事情,这些事情可能只做了一半就被暂停去做别的事情了。
并行的"同时"是同一时刻可以多个进程在运行(处于running),并发的"同时"是经过上下文快速切换,使得看上去多个进程同时都在运行的现象,是一种OS欺骗用户的现象。
在很多情况下,并发的效果比并行好,因为操作系统和硬件的总资源一般很少,但能支持系统同时做很多事情。
操作系统发展阶段
-
批处理阶段
-
简单批处理:问题:性能缓慢 解决:多道程序批处理系统
-
多道程序批处理系统:CPU和设备、设备和设备之间可以并行使用,系统资源利用率提高,吞吐量增加。
问题:提高了资源利用率,但缺少人机交互性 解决:分时系统
-
-
分时系统:执行的任务粒度变小,任务之间切换的频率快了 (强调交互性)
-
分时使用CPU
-
PC系统:增加文件管理
-
并行系统
-
实时系统
作业和进程之间的关系
- 作业:通常是指用户在一次计算过程中或者一次事物处理过程中要求计算机系统所做工作的集合,包括用户程序、所需的数据及命令等。
- 进程:是具有独立功能的可并发执行的程序在一个数据集合上的运行过程,是系统进行资源分配和调度的独立单位。
作业和进程之间的区别和联系如下:
1.作业是用户向计算机提交的任务实体,而进程则是完成用户任务的执行实体,是向操作系统申请分配资源的基本单位。
2.一个作业可以由多个进程组成,且一个作业至少由一个进程组成。
3.作业的概念主要用在批处理系统中,而进程的概念则用在所有的多道程序系统中。
分时系统执行的任务通常叫进程/线程,而多道里的任务,粒度往往比较大,可能就叫作业。
体系结构部分
硬件平台:
I/O方式:
- 同步I/O:I/O启动后,只有当I/O完成后控制权才返回给用户进程。使CPU空闲循环等待,直到下一个中断开始;在任何时候最多只能处理一个I/O请求。
- 异步I/O:I/O启动后,控制权无须等待I/O操作完成就可返回给用户进程
I/O技术(控制方式)(填空题!!):
- 可编程I/O
- 中断机制
- 直接内存存取(DMA)
- 通道技术(又称为I/O处理机)
软件体系:
微内核结构:精心设计的、能实现现代OS核心功能的小型内核。
进程管理部分
为什么要引入进程
现代计算机系统允许将多个程序调入内存并发执行,这一要求对各种程序提供更严格的控制和更好的划分,这些需求产生了进程的概念。
为什么要引入线程
进程两个基本特性:
-
资源分配的独立单位
-
调度的基本单位
将进程资源分配和调度分开,引入线程。
从调度性、并发性、拥有的资源和系统开销等方面,区别和比较进程和线程
- 调度性。在传统的OS中,拥有资源的基本单位和独立调度、分派的基本单位都是进程。在引入线程的OS中,则把线程作为调度和分派的基本单位,而把进程作为资源拥有的基本单位。
- 并发性。进程可以并发执行 , 一个进程的多个线程也可并发执行。
- 拥有资源。进程始终是拥有资源的基本单位 , 线程只拥有运行时必不可少的资源 , 本身基本不拥有系统资源 , 但可以访问隶属进程的资源。
- 系统开销。操作系统在创建、撤消和切换进程时付出的开销显著大于线程。
进程状态(考!!)
- 新建状态
- 运行状态
- 等待状态(阻塞、挂起)
- 就绪状态
- 终止状态
①主要做两件事:1)从就绪队列中选择一个进程。2)上下文切换(PCB小一些切换快,太小信息量小)
③、④是单向,③、④可能引起调度
例题:
3->1:可能。当前进程被阻塞,使得CPU空闲,此时调度程序会从处于就绪状态的进程中挑选一个投入运行。
3->2:不可能。占有CPU的一个进程不能同时进入两个状态。
2->1:可能:当前运行进程优先级下降或者时间片用完,调度程序选一个优先级最高的进程占有处理机。
4->1:可能。当处理机空闲且就绪队列为空时,某一进程的变迁4会引起该进程的变迁1。
进程组成
程序+数据+PCB+···
-
PCB
-
程序
-
数据段
-
堆栈段
进程控制块(PCB)
PCB
是进程存在的唯一表示
PCB表
1.系统把所有PCB组织在一起,并放在内存固定区域,就构成了PCB表
- 链表
- 索引表
2.PCB表的大小决定了系统中最多可同时存在的进程个数,称为系统的并发度
进程之间的关系
任何两个并发进程之间可能存在同步或互斥关系。
进程同步
-
指完成同一个任务的伙伴进程间,因为在某些位置上需要协调它们的工作而相互等待、相互交换信息所产生的制约关系。
-
也可以说是并发进程互相共享对方的私有资源而引起的直接制约。
进程互斥
-
进程间因竞争共享公有资源而引起的间接制约关系,称为互斥。
-
间接是指:各并发进程的速度受公有资源制约,而不是进程间直接制约。
临界区
临界资源
系统中某些资源一次只允许一个进程使用,这样的资源称为临界资源或互斥资源。
临界区
进程中涉及到临界资源的程序段叫临界区。每个进程有一个代码段称为临界区。
使用原则:
- 有空让进
- 无空等待
- 多中择一
- 有限等待:从一个进程做出进入临界区的请求,直到该请求允许为止,其他进程允许进入其临界区的次数有上限。
- 让权等待:处于等待状态的进程应该放弃占用CPU,以使其他进程有机会得到CPU的使用权。
解决方法:
-
软件方法:在进入区检查和设置一些标志;如果已有进程在临界区,则在进入区通过循环检查进行等待;在退出区修改标志。
-
关键问题:设置什么标志和如何检查标志。
-
缺点:忙等待;实现过于复杂,需要高超的编程技巧
-
-
硬件方法:Test-and-Set指令、Swap指令、开关中断指令。
信号量
含义
信号量表示资源的实体,是一个与队列有关的整型变量。
- 信号量只能通过初始化和P/V原语来访问;
- 访问信号量的进程,不受进程调度的打断。
物理含义:
-
S>0: 表示有S个资源可用
-
S=0: 表示无资源可用
-
S<0: 表示S等待队列中的进程个数
如何定义信号量的初值
如果是互斥(二进制)信号量,初值一般固定为1
如果是资源(计数)信号量,则看资源数量,数量是多少,初值就设为多少。
P/V操作的含义
定义在信号量上的两个操作,是一种卓有成效的进程同步机制。
P原语P(S)
- S=S-1
- 如果S>=0,则调用P(S)的进程继续运行
- 如果S<0,则调用P(S)的进程被阻塞,并把它插入到等待信号量S的阻塞队列中
执行P操作意味着申请分配一个单位的资源。
V原语V(S)
- S=S+1
- 如果S>0,则调用V(S)的进程继续运行
- 如果S<=0,则从等待信号量S的阻塞队列中唤醒头一个进程到就绪队列中,然后调用V(S)的进程继续运行。
执行V操作意味着释放一个单位的资源。
如何 利用 P/V 操作实现多个进程之间的同步和互斥?
实现进程互斥
- 为临界资源设置一个互斥信号量mutex,初值为1;
- 在每个进程中,将临界区代码置于P(mutex)和V(mutex)原语之间。
n个进程开始时S=1,最小可能S=1-n。
实现进程同步
前驱关系,为每个前趋关系设置一个同步信号量S12,其初值为0。
P2只有在P1执行C1之后,才会执行C2。
典型同步问题
生产者消费者问题
若干进程通过有限的共享缓冲区交换数据;共享缓冲区共有N个;任何时刻只能有一个进程对共享缓冲区进行操作。
full是“满”数目,初值为0;empty是“空”数目,初值为N。mutex用于访问缓冲区时的互斥,初值为1。生产者为消费者生产满缓冲项,消费者为生产者生产空缓冲项。
读者写者问题
哲学家就餐问题
进程通信
高级通信方式:
-
共享存储器系统
-
消息传递系统:最广泛的通信机制。
-
直接通信:如消息缓冲通信方式。
-
间接通信:如信箱通信方式。
-
-
管道通信方式·
CPU调度
引起进程调度的事件有哪些
-
当一个进程从运行状态切换到等待状态
-
当一个进程从运行状态切换到就绪状态
-
当一个进程从等待状态切换到就绪状态
-
当一个进程终止时。
有哪些常用的调度算法
- 先到先服务调度(FCFS)
- 最短作业优先调度(SJF):对于给定的一组进程,平均等待时间最小
- 非抢占式
- 抢占式:最短剩余时间作业优先(SRTF)
- 优先级调度算法(SJF是一种特定的优先权调度方法):可能产生饥饿问题(解决办法:老化)
- RR轮转调度算法:
- 周转时间大于SJF算法
- 响应时间好于SJF算法
- 多级反馈队列调度算法
多级反馈队列调度算法分析
死锁
引起死锁的四个特征是什么
- 互斥:至少有一个资源必须处于互斥模式:即一次只有一个进程使用。如果另一资源申请该资源,那么申请进程必须延迟直到该资源释放为止。
- 持有并等待:一个进程必须占有至少一个资源,并等待另一资源,而该资源为其他进程所占有。
- 非抢占:资源不能被抢占:即只有进程完成其任务之后,才会释放其资源。
- 循环等待:进程{P0, P1, …, Pn},P0等待的资源为P1所占有,P1等待的资源为P2占有,Pn-1等待的资源为Pn所占有,Pn等待的资源为P0所占有。
以上四个条件同时满足,就会引起死锁。
如何针对这四个特征克服死锁
死锁预防:当出现死锁四个必要条件,只要确保至少一个必要条件不成立,就能预防死锁发生。
可能出现问题:
- 互斥:通常不能通过互斥条件来预防死锁,有些资源本身是非共享的。
- 持有并等待:资源利用率可能比较低,可能发生饥饿。
死锁避免:
-
通过增加申请资源分配的相关信息来避免死锁发生。
-
最简单且有效的模型要求每个进程事先声明它所需要的每种资源的最大数量;
-
死锁避免算法动态检查资源分配状态,以保证不存在循环等待的条件。
-
资源分配状态通过可用资源数量、已分配资源数量,及进程最大申请数量来定义。
死锁检测
死锁恢复:人工处理死锁,让系统从死锁状态中自动恢复。
打破死锁状态有两个方法:
-
终止进程方法:简单地终止一个或多个进程以打破循环等待;
-
资源抢占方法:从一个或多个死锁进程那里抢占一个或多个资源。
资源分配图的方法判定死锁
-
如果图不包含环,则不存在死锁
-
如果图包含环,则:
- 如果每种资源类型只有一个实例,则死锁
- 如果每种资源类型存在若干个实例,则只是有可能会发生死锁。