操作系统 复习提纲 整理
操作系统 复习提纲 整理
核心态、用户态,它们之间的切换,尤其是用户态如何转为核心态
核心态(管态):运行在内核上,可以执行所有指令,可以访问所有内存与其他资源,可以改变处理器状态
用户态(目态):运行在一般应用程序上,只能执行非特权指令,只能访问属于该进程的内存和其他资源,不能改变处理器状态,除非采用特定的方式
它们之间的切换(从用户态到核心态):
(1)程序请求操作系统的服务,执行系统调用。
(2)程序运行时,产生中断或异常事件,运行程序被中断,转向中断处理程序或异常处理程序工作。
PS:通过中断机制发生,是用户态到核心态的仅有途径。
中断的概念
在程序执行过程中,遇到急需处理的事件时,暂停中止现行程序在CPU上的运行,转而执行相应的事件处理程序,待处理完成后再返回断点或调度其他执行程序。
中断的分类(按事件的来源和实现的手段)
硬中断:由硬件发给CPU的中断
(1)外中断(中断、异步中断),来自处理器之外的硬件产生的中断信号(键盘中断,设备中断)
①可屏蔽中断
②不可屏蔽中断:紧急情况,不可忽略,须立即处理
(2)内中断(异常、同步中断),来自处理器内部的硬件产生的中断。不可屏蔽,一旦出现须立即响应,进行处理
①访管中断:由执行系统调用而引起
②硬件故障中断:电源失效、协处理器错误、奇偶校验错误等
③程序性异常:非法操作、地址越界、页面故障、调试指令等
软中断:由软件发给软件的中断
(1)信号:用于内核或进程,对某个进程的中断
(2)软件中断:用于硬中断服务程序对内核的中断
为何外部中断有些可屏蔽,而异常都不可屏蔽
有一些中断,是比较紧急的情况,是不可以忽略的,CPU在收到这些中断信号后,必须马上进行处理,否则会引起系统的问题,这些就是不可屏蔽中断。
时钟中断及其作用(主要的两大作用)
时钟是内核进行调度工作的重要工具,利用定时器能够确保内核可以获得控制权
(1)规定时间内,内核可以获得CPU控制权
(2)获取时间
进程的几种状态,它们之间的转换(尤其注意,不存在从阻塞态到运行态的转换)
(1)运行态(running):满足运行条件、占有CPU
(2)就绪态(ready):满足运行条件、不占有CPU(等待被调度)
(3)等待态(wait):不满足运行条件、不占有CPU,也叫睡眠,阻塞
为了便于管理,特意加了:
新建态(new)和终止态(exit),描述进程刚创建和结束时候的两种状态
挂起态(suspend),指暂时把进程换到磁盘缓冲区内
(1) 就绪→执行
处于就绪状态的进程,当进程调度分配了处理机后,该进程便由就绪状态转变成执行状态。
(2) 执行→就绪
处于执行状态的进程在其执行过程中,因分配给它的一个时间片而不得不让出处理机,于是进程从执行状态转变成就绪状态。
(3) 执行→阻塞
正在执行的进程因等待某种事件发生而无法继续执行时,便从执行状态变成阻塞状态。
(4)阻塞→就绪
处于阻塞状态的进程,若其等待的事件已经发生,于是进程由阻塞状态转变为就绪状态。
进程的三种上下文
(1) 用户级上下文(user level contex):进程自己的代码、数据、栈等
(2) 系统级上下文(system level contex):进程陷入内核后,内核所使用的内存管理信息表、核心栈,也包括进程控制块
(3) 寄存器上下文(register contex):各个寄存器当时的信息,用于保护和恢复现场
进程控制块的概念和作用
进程存在的唯一标识
内核用来记录和刻画进程状态的数据结构
管理和调度进程的依据
进程切换的过程
略
线程的概念
线程是进程中能够并发执行的实体,是进程的组成部分,也是处理器调度和分派的基本单位。传统的进程,都是运行在同一个处理器上,在同一个进程内,是串行的。
PS:线程只有三态(运行、就绪、等待)由于线程不是资源的拥有单位,挂起状态对于线程是没有意义的。
为什么要引入线程?
引入了线程,是为了减少程序并发执行时所付出的时空开销,使得并发力度更细、并发性更好。(实质是把CPU的分配权,进行进一步的细分)
对外:就可以把进程的不同部分放到不同的处理器上
对内:可以在一个功能暂时不执行时,转而去执行其他的功能
线程与进程的区别与联系
线程与进程的主要区别,就是进程有自己的独立空间,线程没有自己完全独立的空间。各个线程共享进程的代码区和全局数据区,各个线程执行的代码区的不同代码,访问全局数据的不同数据。
为什么线程没有挂起态?
由于线程不是资源的拥有单位,挂起状态对于线程是没有意义的。
(线程的挂起和激活,是随着宿主进程挂起和激活)
什么叫处理器调度
(原因:主存、处理器与作业、进程之间,永远是供不应求的关系)
按照何种原则挑选作业进入主存运行,如何把处理器进行分
衡量一个调度算法好坏的标准
①资源利用率
②吞吐量
③公平性
④响应时间
⑤周转时间
一言蔽之,先公平,后效率
同步、通信与死锁
Peterson算法(Dekker算法的演化)一种纯软件算法,通过两个变量来实现互斥访问临界区。
是免锁编程的基本算法之一,这个算法设计得很巧妙,核心就是三个标志位是怎样控制两个方法对临界区的访问的。
信号量的定义,取值含义,PV操作
信号量:表示物理资源的实体,是一个与队列有关的整型变量。
取值:用一个结构型数据结构表示,有两个分量(1)信号量的值(2)信号量队列的指针PV 操作:
P(s):将信号量value值减1,若结果小于0,则执行P操作的进程被阻塞,排入与s信号量有关的list所指队列中;若结果大于等于0,则执行P操作的进程继续执行。
V(s):将信号量value值加1,若结果不大于0,则执行V操作的进程从信号量s有关的list所指队列中释放一个进程,使其转换为就绪态,自己则继续执行;若结果大于0,则执行V操作的进程继续执行。
另种说法:信号量:强大的同步原语,既可以用于进程同步,也可以用于进程通信信号量sem为一个整型变量,对它可以有两个操作:增加(V)、减少(P)
P操作(down):
sem - 1
if ( sem < 0 )
睡眠
V操作(up):
sem + 1
if ( sem <= 0 )
唤醒
几种进程间的通信机制
(1)信号通信机制
(2)管道通信机制
(3)共享主存通信机制
(4)信息传递机制
(5)信号量机制
死锁产生的四个必要条件、破坏死锁方法的原则
(1)互斥条件(2)占有和等待(3)不剥夺条件(4)循环等待
这四个条件是死锁发生的必要条件,只要其中有一个不成立,则不会发生死锁
解决方法:
①死锁防止----分别破坏四个条件之一
②死锁避免----可以允许前三个条件发生,但不允许第四个条件发生
③死锁检测与恢复----定期检测,发生死锁后采取措施
④不采取任何措施
破坏条件(1):不大现实的做法,因为资源的独占性通常是不可改变的
破坏条件(2):进程运行前,只有资源全部申请到了,才能运行,运行过程中不能再申请新的资源
破坏条件(3):当进程去申请新的资源时,必须释放原来占用的资源,重新申请
破坏条件(4):建立一种策略,对资源进行分类,只能按照某种规则进行资源申请
⑤结束所有进程,重启操作系统
⑥撤销处于死锁状态的所有进程
⑦逐个撤销处于死锁状态的进程,回收其占用的资源,直到死锁解除
⑧逐个剥夺处于死锁状态进程占用的资源,直到死锁解除
⑨回滚到死锁发生前的状态