操作系统OS 操作系统定义操作系统是指控制和管理整个计算机系统的硬件和软件资源并合理地组织调度计算机的工作和资源的分配以提供给用户和其他软件方便的接口和环境它是计算机系统中最基本的系统软件。联机命令接口用户输入一条指令操作系统执行一条指令接着用户输入一条指令操作系统执行一条指令循环如此脱机命令接口用户输入一堆指令操作系统执行一堆指令接着用户输入一堆指令操作系统执行一堆指令循环如此特征并发指两个或多个事件在同一时间间隔内发生。这些事件宏观上是同时发生的微观上是交替发生的并行指两个或多个事件在同一时刻同时发生。共享即资源共享是指系统中的资源可供内存中多个并发执行的进程共同使用。共享方式分为两种互斥共享方式、同时共享方式互斥共享方式指系统中的某些资源虽然可以提供给多个进程使用但一个时间段内只允许一个进程访问该资源同时共享方式允许一个时间段内由多个进程“同时”对它们进行访问虚拟是指把一个物理上的实体变成若干个逻辑上的对应物。物理实体是实际存在的逻辑对应物是用户感受到的。虚拟技术分为空分复用技术、时分复用技术空分复用技术比如我的电脑只有4GB内存但却运行了一个200GB的游戏时分复用技术单核CPU的电脑同时运行着多个应用程序异步是指在多道程序环境下允许多个程序并发执行但由于资源有限进程的执行不是一贯到底的而是走走停停以不可预知的速度向前推进。其中并发和共享是最基本的特征。发展与分类操作系统的运行机制应用程序普通程序员写的程序内核程序开发操作系统的程序员开发的程序由很多内核程序组成了“操作系统内核”简称“内核Kernel”。内核是操作系统最重要最核心的部分也是最接近硬件的部分。特权指令操作系统内核作为“管理者”有时会让CPU执行一些“特权指令”如内存清零指令。这些指令影响重大只允许“管理者”来使用。非特权指令例如加法、减法指令等CPU能判断出指令类型但是它如何区分此时正在运行的是内核程序还是应用程序呢CPU有两种状态内核态和用户态处于内核态时说明此时正在运行的是内核程序可以执行特权指令。处于用户态时说明此时正在执行的是应用程序此时只能执行非特权指令。CPU中有一个寄存器程序状态字寄存器PSW有个二进制位1表示内核态0表示用户态。内核态也叫核心态、管态用户态也叫目态。内核态与用户态的切换内核态到用户态执行一条特权指令修改PSW标志位让出CPU使用权用户态到内核态由中断引发硬件自动完成变态过程触发中断信号意味着操作系统强行夺回CPU的使用权。如果系统此时处于用户态但是应用程序中运行了一个特权指令特权指令只能在内核态执行CPU会检测出来并拒绝执行这条特权指令同时会引发一个中断信号。中断使得操作系统再次夺回CPU的控制权操作系统会对引发中断的事件进行处理处理完了再把CPU使用权交给别的应用程序。中断和异常内中断与当前指令有关中断信号来自CPU内部。例如1、在用户态执行特权指令CPU检测到以后就会触发中断切换回内核态夺取CPU控制权拒绝执行这个指令转而去执行中断对应的应用程序2、执行除法除数为0的指令3、应用程序想要请求操作系统内核的服务此时会执行一条特殊的指令–陷入指令该指令会引发一个内部中断信号外中断与当前指令无关中断信号来自CPU外部。每一条指令执行结束后CPU都会检查是否有外中断信号例如1、由时钟信号发来的中断信号时钟部件每隔一段时间给CPU发送一个时钟中断信号2、IO中断由输入输出设备发出的中断信号系统调用操作系统的体系结构进程进程的概念进程是系统进行资源分配和调度的一个独立单位。PCB是进程存在的唯一标志。进程的状态及转换进程控制执行了关中断之后即使出现中断信号CPU也不会去处理中断而是继续往下执行。等到执行到开中断如果出现中断信号才开始处理中断。这就保证了原子操作。进程通信进程间通信是指两个进程之间产生数据交互。共享存储每个进程都有自己独立的内存空间进程只能访问自己的内存空间无法访问其他进程的内存空间。共享存储是申请一个共享存储区使得多个进程可以共同访问这片区域。需要注意的是多个进程同时对共享存储区的访问应该是互斥的不然就会出现问题例如写入覆盖。线程线程的概念线程是一个基本的CPU执行单元也是程序执行流的最小单位。线程的实现方式和多线程模型线程的状态和转换调度调度的概念当有多个任务需要处理但由于资源有限这些任务没法同时处理这就需要确定某种规则来决定处理这些任务的顺序这就是调度。进程调度的时机、过程与方式进程调度低级调度就是按照某种算法从就绪队列中选择一个进程为其分配处理机。临界资源一个时间段内只允许一个进程使用的资源各进程需要互斥地访问临界资源。临界区访问临界资源的那段代码。进程调度方式非剥夺方式非抢占方式、剥夺方式抢占方式非剥夺方式只允许进程主动放弃处理机在运行过程中即便有更紧迫的任务到达当前进程依然会继续使用处理机直到该进程终止或主动要求进入阻塞态。剥夺方式当一个进程正在处理机上执行时如果有一个更重要的进程需要使用处理机则立即暂停正在执行的进程将处理机分配给更重要的那个进程。调度算法的评价指标调度算法先来先服务FCFS按照作业或进程到达的先后顺序进行服务。非抢占式优点公平、算法简单缺点排在长作业后面的短作业需要等待很长时机FCFS对长作业有利对短作业不利。不会导致进程饥饿饥饿指进程长期得不到服务短作业优先SJF最短的作业或进程优先得到服务最短即要求服务时间最短。默认是非抢占式也有抢占式的算法即最短剩余时间优先SRTN优点“最短的”平均等待时间、平均周转时间缺点不公平对短作业有利对长作业不利可能产生进程饥饿。如果源源不断地有短作业到了就会导致长作业长时间得不到服务产生饥饿现象。最短剩余时间优先和短作业优先相比最短剩余时间优先增加了CPU抢占的功能当前运行的任务与新来的任务哪个运行时间段就执行哪个。高相应比优先HRRN在每次调度时先计算各个作业的响应比选择响应比最高的作业为其服务。非抢占式响应比等待时间运行时间/ 运行时间等待时间相同时运行时间短的优先有利于短作业运行时间相同时等待时间长的优先类似于先来先服务。不会导致饥饿。上述三种算法在早期的批处理系统中使用现在的系统中使用较少。时间片轮转调度算法RR按照各进程到达就绪队列的顺序轮流让各个进程执行一个时间片若进程未在一个时间片内执行完则剥夺处理机将进程重新放到就绪队列队尾重新排队。不会导致作业饥饿。若进程未能在时间片内运行完成就会被剥夺处理机这种算法属于抢占式算法。优点公平响应快适用于分时操作系统缺点进程切换有一段的开销不区分任务的紧急程度优先级调度算法每个作业或进程各有自己的优先级调度时选择优先级最高的。抢占式、非抢占式都有。优点用优先级区分紧急程度适用于实时操作系统。缺点若有源源不断的高优先级进程到来则可能导致饥饿多级反馈队列调度算法1、设置多级就绪队列各级队列优先级从高到低时间片从小到达2、新进程到达时先进入第1级队列按照FCFS原则排队等待分配时间片若用完时间片进程还未运行结束则进程进入下一级队列队尾。如果此时已经是最下级的队列则重新放回该队列的队尾3、只有第k级队列为空时才会为k1级队列的进程分配时间片。属于抢占式算法多级反馈队列综合了上述大多数算法的优点。可能会导致饥饿。进程同步、进程互斥进程互斥的软件实现方式进程互斥的硬件实现方式信号量机制死锁死锁的处理策略-预防死锁死锁的处理策略-避免死锁安全序列指系统按照这种序列分配资源则每个进程都能顺利完成。只要能找出一个安全序列系统就是安全状态。当然安全序列可能有多个。如果分配了资源之后系统中找不出任何一个安全序列系统就进入了不安全状态。如果系统处于安全状态就一定不会发生死锁。如果系统进入不安全状态就可能发生死锁银行家算法在资源分配之前预先判断这次分配是否会导致系统进入不安全状态以决定是否答应资源分配请求。系统中有三种资源总数是1057某一时刻5个进程P0-P4的最大资源需求和已分配资源如图找出一个安全序列。系统资源总数1057减去已分配资源725剩余资源数为332接着尝试给每一个进程进行分配。1、给P0发现剩余资源无法满足。2、给P1可以满足于是尝试给P1分配资源P1执行完成后释放自己占用的资源200此时系统中剩余资源为532。3、给P0发现剩余资源无法满足。4、给P2发现剩余资源无法满足。5、给P3可以满足于是尝试给P3分配资源P3执行完成后释放自己占用的资源211此时系统中剩余资源为743。6、给P0发现可以满足P0执行完成后释放自己占用的资源010此时系统中剩余资源为753。7、给P2发现可以满足P2执行完成后释放自己占用的资源302此时系统中剩余资源为1055。8、给P4发现可以满足P4执行完成后释放自己占用的资源002此时系统中剩余资源为1057。于是得到安全序列P1、P3、P0、P2、P4结果不唯一死锁的处理策略-检测和解除资源分配图进程使用圆形表示如上图有P1、P2两个进程。资源使用矩形表示其中的小圆形表示资源的数量即有3个R1资源2个R2资源。资源指向进行的箭头表示资源已经分配给该进程箭头的数量表示分配的资源数量进程指向资源的箭头表示进程请求资源箭头数表示请求资源的数量。如上图我们先看资源分配。P1占用2个R1资源P2占用1个R1资源和1个R2资源。现在P1是可以运行的P2是不能运行的因为P2需要2个R1资源。先让P1运行运行完成之后释放掉相应的资源就可以把与P1相关的连线都去掉变成下图。此时P2进行就可以运行了。P2运行完后归还系统资源解除与之相连的边就变成下图了。按照上述步骤最终能消除所有边就称这个图是可以简化的此时一定没有发生死锁。如果不能消除所有的边就表明发生了死锁。解除死锁内存动态分区分配算法基本分页存储管理局部性原理分为时间局部性和空间局部性。时间局部性如果执行了程序中的某条指令那么不久之后这条指令很有可能再次指向如果某个数据被访问过不久之后该数据很有可能再次被访问过因为程序中存在大量的循环空间局部性一旦程序访问了某个存储单元在不久之后其附近的存储单元也很有可能被访问因为很多数据在内存中都是连续存放的。基本分段存储管理段页式管理方式虚拟内存请求分页管理方式页面置换算法页面的换入缓存需要磁盘IO会有较大的开销因此好的页面置换算法应该追求更少的缺页率最佳置换算法OPT每次选择淘汰的页面将是以后永不使用或者在最长时间内不再被访问的页面。按照顺序第一个是7没在内存块中发生一次缺页此时内存块有空闲于是将7放入内存块中接下来是0没在内存块中发生一次缺页此时内存块有空闲于是将0放入内存块中接下来是1没在内存块中发生一次缺页此时内存块有空闲于是将1放入内存块中接下来是2没在内存块中发生一次缺页此时内存块没有空闲需要进行页面置换。最佳置换算法是从当前节点往后看内存块中哪个块后被访问到于是将该块换出。这个例子中内存块中的7在倒数第3次被访问到而0、1在它之前所以将7换出2换入接下来是0在内存块中不发生缺页。其他过程类似。最佳置换算法可以保证最低的缺页率。但实际上只有在进程执行过程组才能知道接下来会访问到的是哪个页面。操作系统无法提前预判页面访问序列。因此最佳置换算法是无法实现的。先进先出置换算法FIFO每次淘汰的页面是最早进入内存的页面。最近最久未使用置换算法LRU每次淘汰的页面是最近最久未使用的页面。LRU是逆向看如图在遇到3号页面不在内存块的场景逆向查询会发现顺序是8、1、2、77号页面是最近最久未使用的页面于是淘汰7号页面。时钟置换算法CLOCK改进型的时钟置换算法页面分配策略抖动刚刚换出的页面马上又要换入内存刚刚换入的页面马上又要缓存外存这种频繁的页面调度行为称为抖动。文件文件存储空间管理IOIO控制方式假脱机技术磁盘调度算法