一:操作系统引论
1:操作系统的目标和作用
操作系统的主要功能也正是针对四类资源进行有效的管理,及处理机管理,存储器管理,文件管理。设备管理。
用户可通过以下三种方式使用计算机:一命令方式,二系统调用方式,三图形窗口方式
联机命令接口(交互式命令接口):适用于分时或实时操作系统,cmd中的各种命令就是联机命令接口
脱机命令接口(批处理命令接口):适用于批处理系统,写好了一个.bat文件再在cmd中执行它就是脱机命令接口
程序接口:码农用来请求OS服务
——系统调用:允许应用程序使用内核功能的接口,只能通过用户程序间接使用。系统调用发生在用户态,处理是在核心态进行的。陷入指令会产生内中断,从用户态进入核心态。
库函数是编程语言内部的事情,而系统调用是编程语言外部的事情——通过编程语言来进行系统调用。
2:操作系统的发展过程
1:无操作系统:用户独占计算机,CPU等待人工操作。
2:批处理操作系统:解决人机矛盾及CPU和I/O设备之间速度不匹配的矛盾
单道批处理操作系统:在计算机中,程序是一道道执行的
多道批处理操作系统:解决IO时间的CPU被浪费
3:分时操作系统:解决批处理人机交互差, 提供人机交互功能
4:实时操作系统:解决突发应急性问题
硬实时操作系统(必须在规定时间完成)
软实时操作系统(偶尔接受超时)
3:操作系统的基本特性
1:并发性(最基本特征之一)并发: 间隔着运行。并行: 同时运行
2:共享性(最基本特征之一)互斥共享。同时共享
3:虚拟性
时分复用技术:虚拟处理机技术,虚拟设备技术。
空分复用技术:虚拟磁盘技术,虚拟存储器技术。
4:异步性
4:操作系统结构设计
传统的操作系统结构:无结构操作系统,模块化结构操作系统,分层式结构操作系统
微内核操作系统结构
管态(核心态):可以执行特权指令,如IO指令,置中断指令,存取受保护的寄存器,时钟管理
目态(用户态)
微内核操作系统的运行效率有所降低。
- 外中断(中断)
- 外设请求
- 人为干预
- 内中断(异常)
- 自愿中断——指令中断
- 强迫中断
- 硬件中断
- 软件中断
例1:甘特图相关题
二:进程管理
1:基本认知
1:顺序执行与并发执行
顺序执行:顺序性,封闭性,可再现性。并发执行:间断性,失去封闭性,不可再现性。
2:进程与线程
进程:进程是一个具有独立功能的程序关于某个数据集合的一次运行活动。它可以申请和拥有系统资源,是一个动态的概念,是一个活动的实体。
线程:
进程是系统进行资源调度和分配的基本单位;线程是CPU调度的基本单位。
进程的组成:PCB(进程控制块),数据段,程序段
进程控制块(PCB):进程控制块(PCB)是系统为了管理进程设置的一个专门的数据结构。系统用它来记录进程的外部特征,描述进程的运动变化过程。同时,系统可以利用PCB来控制和管理进程,所以说,PCB(进程控制块)是系统感知进程存在的唯一标志。
临界资源:对于某些资源来说,其在同一时间只能被一个进程所占用。打印机
临界区:每个进程互斥访问临界资源的那段代码。
作业:作业是用户向计算机提交的相关任务的集合,区别于进程,进程则是具体完成用户任务的运行实体,分配计算机资源的基本单位。
3:前趋图
2:进程控制
1:进程是一个动态的实体,从创建到消亡,进程一般有三种状态,但也有的有五态
运行状态(Running):一个进程正在处理机上运行
就绪状态(Ready):进程已经获得了除cpu以外的所有其他资源,在就绪队列中等待cpu调度
阻塞状态:进程因等待所需要的资源或I/O完成而放弃处理机,或则进程本来就不拥有处理机,且其他资源也不满足
进程挂起:挂起(等待,阻塞)进程在操作系统中可以定义为暂时被淘汰出内存的进程,机器的资源是有限的,在资源不足的情况下,操作系统对在内存中的程序进行合理的安排,其中有的进程被暂时调离出内存,当条件允许的时候,会被操作系统再次调回内存,重新进入就绪态
3:进程调度
1:调度的三个层次:
高级调度 = 作业调度:调度对象是作业,用于多道批处理系统
低级调度 = 进程调度:调度对象是进程, 最基本的调度
中级调度 = 内存调度:不运行的进程挂起, PCB仍留在内存中
2:响应时间: 从用户输入到产生反应的时间
周转时间: 从任务开始到任务结束的时间
3:常见的调度算法有:
(1)先来先服务调度算法(FCFS , First Come First Served)
特点:适合长作业,不利于段作业;适合CPU繁忙型作业,不利于I/O繁忙型作业。
(2)短作业优先(SJF, Shortest Job First)
特点:提高了系统吞吐量;对长作业不利,有可能长时间得不到执行。
(3)优先级调度(HPF , Highest Priority First)
特点:进程调度每次将处理机分配给具有最高优先级的就绪进程。最高优先级算法可与不同的CPU方式结合形成“可抢占式”最高优先级算法和“不可抢占式”最高优先级算法。常用于批处理系统。
(4)最高响应比优先(HRN,Highest Response_ratio Next)
特点:HRN是对FCFS方式和SJF方式的一种综合平衡。
响应比R=(W + T)/ T . 其中W为等待时间,T为需要执行时间。
(5)时间片轮转算法(RR,Round Robin)
特点:时间片轮转调度是一种最古老,最简单,最公平且使用最广的算法。将CPU的处理时间划分成一个个的时间片,就绪队列中的进程轮流运行一个时间片。当时间片结束时,就强迫进程让出CPU,该进程进入就绪队列,等待下一次调度,同时,进程调度又去选择就绪队列中的一个进程,分配给它一个时间片,以投入运行。
(6)最短剩余时间优先调度算法:
(7)多级队列轮转算法:几种调度算法的结合形式多级队列方式。
(7)多级反馈队列调度算法:
4:进程同步与互斥:
1:进程因为协同实现用户任务或则要共享计算机资源,在进程之间存在着相互制约的关系。
(1)同步关系:我们把异步环境下的一组并发进程因直接制约而互相发送消息、进行互相合作、互相等待,使得各进程按一定的速度执行的过程称为进程间的同步。具有同步关系的一组并发进程称为合作进程,合作进程间互相发送的信号称为消息或事件。
(2)互斥关系:两个或两个以上的进程,不能同时进入关于同一组共享变量的临界区域,否则可能发生与时间有关的错误,这种现象被称作进程互斥· 也就是说,一个进程正在访问临界资源,另一个要访问该资源的进程必须等待。
2:同步机制应遵循的原则:空闲让进,房子等待,有限等待,让权等待。
3:解决同步互斥问题
信号量机制:信号量就好像信号灯,如果一个资源最多允许三个进程同时访问,这时信号量初值设为三,当有一个进程获取了该资源,进行P操作,信号量减一,这个进程完成后释放该资源,进行V操作,信号量加一,如果当另一个进程获取该资源时,信号量小于零,则进入等待状态。
互斥锁:
提供对临界资源的保护,当多线程试图访问临界资源时,都必须通过获取锁的方式来访问临界资源。(临界资源:是被多线程共享的资源)
条件变量:
提供线程之间的一种通知机制,当某一条件满足时,线程A可以通知阻塞在条件变量上的线程B,B所期望的条件已经满足,可以解除在条件变量上的阻塞操作,继续做其他事情。
信号量:
提供对临界资源的安全分配。如果存在多份临界资源,在多个线程争抢临界资源的情况下,向线程提供安全分配临界资源的方法。如果临界资源的数量为1,将退化为锁。
令牌:
一种高级的线程同步的方法。它既提供锁的安全访问临界资源的功能,又利用了条件变量使得线程争夺临界资源时是有序的
4:管程:互斥使用
5:进程间的通信
- 管道( pipe ):管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用。进程的亲缘关系通常是指父子进程关系。有名管道(named pipe)也是半双工的通信方式,但是它允许无亲缘关系进程间的通信。
每个管道只能半双工, 互斥访问,
如果没写满,就不允许读, 如果没读完,就不允许写
- 信号量( semophore ):信号量是一个计数器,可以用来控制多个进程对共享资源的访问。它常作为一种锁机制,防止某进程正在访问共享资源时,其他进程也访问该资源。因此,主要作为进程间以及同一进程内不同线程之间的同步手段。
- 消息队列( message queue ):消息队列是由消息的链表,存放在内核中并由消息队列标识符标识。消息队列克服了信号传递信息少、管道只能承载无格式字节流以及缓冲区大小受限等缺点。
- 信号( signal ):信号是比较复杂的通信方式,用于通知接受进程有某种事件发生,除了用于进程间通信外,进程还可以发送信号给进程本身;linux除了支持Unix早期信号语义函数sigal外,还支持语义符合Posix.1标准的信号函数sigaction(实际上,该函数是基于BSD的,BSD为了实现可靠信号机制,又能够统一对外接口,用sigaction函数重新实现了signal函数)。
- 共享内存( shared memory ):
基于共享数据结构的通信 (低级)
基于共享存储区的通信
共享内存就是映射一段能被其他进程所访问的内存,这段共享内存由一个进程创建,但多个进程都可以访问。共享内存是最快的 IPC 方式,它是针对其他进程间通信方式运行效率低而专门设计的。它往往与其他通信机制,如信号两,配合使用,来实现进程间的同步和通信。
- 套接字( socket ):套解口也是一种进程间通信机制,与其他通信机制不同的是,它可用于不同及其间的进程通信。
6:线程同步(一定要会生产者,消费者问题,完全消化理解)
生产者与消费者问题:
这个问题写在这可能写不完,所以不写了,简单来说就是想得到就P,不用了就V
哲学家进餐问题
7:线程引入
由于需要限制不同的程序之间的访问能力, 防止他们获取别的程序的内存数据, 或者获取外围设备的数据, 并发送到网络, CPU划分出两个权限等级 – 用户态 和内核态。
处于用户态执行中的进程,其所能访问的内存空间和对象受到限制,其所处于占有的处理机是可被抢占的;
处于核心态执行中的进程,其能访问所有的内存空间和对象,且所占有的处理机是不允许被抢占的。
- 在用户空间中实现线程
(1)特点:内核对线程包一无所知。从内核角度考虑,就是按正常的方式管理,即单线程进程(存在运行时系统)
(2)优点:
用户级线程包可以在不支持线程的操作系统上实现
保存线程状态的过程和调用程序都只是本地过程,故启动它们比进程内核调用效率更高
不需要陷阱,不需要上下文切换,也不需要对内存高速缓存进行刷新,使得线程调用非常快捷
(3)缺点:
线程发生I/O或页面故障引起的阻塞时,如果调用阻塞系统调用则内核由于不知道有多线程的存在,而会阻塞整个进程从而阻塞所有线程
一个单独的进程内部,没有时钟中断,所以不可能用轮转调度的方式调度线程 - 在内核中实现线程
(1)特点:
当某个线程希望创建一个新线程或撤销一个已有线程时,它进行一个系统调用
(2)优点:
所有能够阻塞线程的调用都以系统调用的形式实现,代价可观
当一个线程阻塞时,内核根据选择可以运行另一个进程的线程,而用户空间实现的线程中,运行时系统始终运行自己进程中的线程
说明:由于内核创建线程代价大,有些系统采取“环保”的处理方式:线程被撤销时,标记为不可用,但是内部数据结构没有受到影响;稍后,在必须启用一个新线程时,重新启动某个旧线程,从而节省了开销。 - 组合方式
- 多对一模型
缺点: 一个线程阻塞会导致整个进程被阻塞 - 一对一模型
- 多对多模型
- 多对一模型
8:死锁
死锁指的是多个进程因竞争资源而造成的一种僵局(互相等待),若无外力作用,这些进程都将无法向前推进。
1:必要条件
互斥条件:一个资源每次只能被一个进程使用。
请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。
不剥夺条件:进程已获得的资源,在末使用完之前,不能强行剥夺。
环路等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。
2:处理死锁的四种方式:
预防死锁:通过设置某些限制条件,去破坏产生死锁的四个必要条件中的一个或者几个,来预防发生死锁。
避免死锁:在资源的动态分配过程中,用某种方法去防止系统进入不安全状态,从而避免发生死锁(最代表性,银行家算法)。
检测死锁:允许存在死锁。通过系统所设置的检测机构,及时地检测出死锁的发生,并精确地确定与死锁有关的进程和资源,然后采取适当措施,从系统中将已发生的死锁清除
解除死锁:当检测到系统中已发生死锁时,须将进程从死锁状态中解脱出来。
银行家算法
基本思想:分配资源之前,判断系统是否是安全的;若是,才分配。每分配一次资源就测试一次是否安全。
我们可以把操作系统看作是银行家,操作系统管理的资源相当于银行家管理的资金,进程向操作系统请求分配资源相当于用户向银行家贷款。
为保证资金的安全,银行家规定:
(1)当一个顾客对资金的最大需求量不超过银行家现有的资金时就可接纳该顾客(试探性分配)。
(2)顾客可以分期贷款,但贷款的总数不能超过最大需求量(可能一次并不能满足所需要的全部资源)。
(3)当银行家现有的资金不能满足顾客尚需的贷款数额时,对顾客的贷款可推迟支付,但总能使顾客在有限的时间里得到贷款(不存在死锁)。
(4)当顾客得到所需的全部资金后,一定能在有限的时间里归还所有的资金(运行后释放)。
本算法在理论上是出色的,能非常有效地避免死锁,但从某种意义上说,它缺乏实用价值,因为很少有进程能够在运行前就知道其所需资源的最大值,且进程数也不是固定的,往往在不断地变化(如新用户登录或退出),况且原来可用的资源也可能突然间变成不可用(如打印机、磁带机可能被损坏)。
例1:系统有3个进程:A,B,C 。这三个进程都需要5个系统资源。如果系统有多少个资源,则不可能发生死锁?
解:(5-1)*3 +1 = 13(个)
三:内存管理
1:存储器的层次结构
2:连续分配方式
1:单一连续分配
2:固定分区分配
3:动态分区分配
- 首次适应算法:空闲分区链以地址递增次序连接。
- 循环首次适应算法:从上一次找到空闲分区的下一个空闲分区开始查找。
- 最佳适应算法:总是把能够满足要求,又是最小分区的分配给作业。
- 最坏适应算法:总是挑选一个最大的空闲分区分割给作业使用。
4:紧凑和对换
3:基本分页存储管理方式
连续分配方式会形成很多碎片,虽然可以通过紧凑方法将许多碎片拼接成可用的空间,但需为之付出很大的开销。
1:页面页表
2:地址变换机构(重要)
3:多级分页
4:基本分页存储管理方式
1:分段管理
2:地址变换机构
3:段页式存储管理方式
5,虚拟存储器的基本概念
1:请求分页存储管理方式
2:页面置换算法
- 最佳置换算法(Optimal):一种理论的算法,选着淘汰的页面是以后一定不再使用的页面(理想化的),该算法无法实现,只能作为其他算法好坏的一个评价对比。
- 先进先出(FIFO)算法:总是最先淘汰最先进去的页面,该算法容易实现。
- 最近最久未使用算法LRU:
- 时钟算法clock(也被称为是最近未使用算法NRU):
3:请求分段存储管理方式
四:IO设备管理
1:IO系统
2:控制方式
程序IO方式
中断控制方式
DMA方式
IO通道
3:缓冲管理
单缓冲
双缓冲
循环缓冲
缓冲池
4:设备分配
1:
设备控制表(DCT)
控制器控制表(COCT)
通道控制表(CHCT)
系统设备表(SDT)
2:SPOOLing技术
输入井输出井:磁盘上
输入缓冲区和输出缓冲区:内存中
输入进程和输出进程:
5:磁盘管理
1:磁盘访问时间
寻道时间:
旋转延迟时间
传输时间:
2:磁盘调度
先来先服务
最短寻道时间
扫描SCAN算法
循环扫描CSCAN算法
五:输入输出管理
标签:操作系统,软考,算法,基础知识,死锁,线程,进程,架构师,资源 From: https://www.cnblogs.com/R-bear/p/17869840.html