◆内核程序<- - ->应用程序
◆核心态<--->用户态
◆特权指令<- - ->非特权指令
时钟管理
◆计时:提供系统时间
◆时钟中断:比如进程切换
中断机制
◆提高多道程序环境下CPU利用率
◆外中断:中断信号来源于->外部设备 (被迫的)
◆内中断:中断信号来源于->当前指令 (自愿的)
内中断的三种情况(内中断也叫:异常/陷入/例外):
◆陷阱/陷入(Trap) :由应用程序主动弓|发
◆故障(fault) :由错误条件弓|发
◆终止(abort) :由致命错误引发
一个程序正直执行,当执行到指令3需要“调用系统服务:读文件”,这时候CPU就会中断,然后产生一个陷入指令。注意:陷入指令是由应用程序引发的,由CPU产生的。
接下来CPU就转到内核态,进行文件读取的特权指令。
假设还是一个程序在执行,当执行到指令3的时候出现“内存页故障”的普通错误(如一个游戏动辄几个G几十个G,当内存里没找到文件时,需要去磁盘查找相应文件),这时候CPU会产生一个故障中断,然后去执行当前指令的后续指令4,不会直接去执行特权指令的。
还有一些致命错误,如算术溢出、地址越界、非法操作码、非法访问特权指令等等。出现这个错误CPU会发现处理不了直接会终止中断,程序直接就不要执行了。
注意:无论是内中断还是外中断,所有中断都会产生对应的中断处理程序,对中断程序是去从外存上重新加载剩余的文件,还是直接让程序shut down,就看具体情况了。
每一个中断都有对应的中断服务程序;CPU在处理中断的时候大致分为三步,首先是保存犯罪现场,然后是执行中断服务程序,最后就是恢复犯罪现场。
原语是一个程序段
◆由若干条指令组成
◆ 用来完成某个特定功能
◆ 执行过程不会被中断(具有原子性)
原语是在内核中运行的,假设由一个进程调度的模块,该模块可能需要执行很多的步骤(保存原来的进程镜像、进行进程切换、切换到另外一个进程...)来完成一个进程的调度,每个步骤都会涉及到大量的指令操作,计算机在运行的时候都是在执行指令,这时候我们会发现,完成某些动作的过程,并且这些指令与指令的执行过程都是差不多的,甚至是一致的,这时我们就想着将这些指令进行一个封装与合并,打包成一个程序段,就叫做一个原语。
◆进程管理:作业控制块、进程控制块
◆存储器管理:存储器分配与回收
◆设备管理:缓冲区、设备控制块
◆由操作系统实现,给应用程序调用
◆是一套接口的集合
◆应用程序访问内核服务的方式
进程
1.什么是进程?
2.进程是怎么运行的?
进程控制
●即OS对进程实现有效的管理,包括创建新进程、撤销已有进程、挂起、阻塞和唤醒、进程
切换等多种操作。OS通过原语(Primitive) 操作实现进程控制。
◆原语的概念:
由若干条指令组成,完成特定的功能,是一种原子操作(Action Operation)
◆原语的特点:
原子操作,要么全做,要么全不做,执行过程不会被中断
在管态/系统态/内核态下执行,常驻内存
是内核三大支撑功能(中断处理/时钟管理/原语操作)之一
创建原语: create、阻塞原语: block、唤醒原语: wakeup、撤销原语: destroy
●进程控制:挂起与激活
为了系统和用户观察和分析进程
◆挂起原语:suspend
◆静止就绪:放外存,不调度
◆静止阻塞:等待事件
◆激活原语: active
◆活动就绪:等待调度
◆活动阻塞: 等待唤醒
处理机调度
根据一定的算法和原则将处理机资源进行重新分配的过程。
◆前提:作业/进程数远远大于处理机数
◆目的:提高资源利用率,减少处理机空闲时间
◆调度程序: - -方面要满足特定系统用户的需求(快速响应),另-方面要考虑系统整体效
率(系统平均周转时间)和调度算法本身的开销
处理机调度——调度的层次
高级调度/作业调度
◆把后备作业调入内存
◆只调入一次,调出一-次
中级调度/内存调度
◆将进程调至外存,条件合适再调入内存
◆在内、 外存对换区进行进程对换
低级调度/进程调度
◆从就绪队列选取进程分配给处理机
◆ 最基本的调度,频率非常高(相当于一个时间片完成)
处理机调度——调度方式
剥夺式/抢占式调度:立即暂停当前进程;分配处理机给另一个进程
◆原则:优先权/短进程优先/时间片原则
非剥夺/非抢占式调度:若有进程请求执行;等待直到当前进程完成或阻塞
◆缺点:适用于批处理系统,不适用分时/实
处理机调度——调度时机
进程运行完毕、进程时间片用完、进程要求I/O操作、执行某种原语操作、高优先级进程申请运行(剥夺式调度)
处理机调度——调度过程
1)保存镜像:记录进程现场信息;2)调度算法:确定分配处理机的原则;3)进程切换: 分配处理机给其它进程;4)处理机回收:从进程收回处理机
进程调度——调度算法指标
◆CPU利用率↑忙碌时间/总时间
◆系统吞吐量↑完成作业数/总时间
◆周转时间↓作业完成时间-提交时间
◆带权周转时间: 周转时间/实际运行时间
◆等待时间↓作业等待处理机调度时间
◆关注平均值
◆响应时间↓提交请求到首次响应间隔
调度程序一方面要满足特定系统用户的要求(实时和交互进程要求快速响应),另-一方面要考虑系统整体效率(减少整个系统进程平均周转时间)和调度算法本身
3.进程之间是怎么协作的?
进程通信
概念:进程通信即进程间的信息交换
◆进程是资源分配的基本单位,各进程内存空间彼此独立
◆一个进程不能随意访问其它进程的地址空间
特点:
◆共享存储(Shared-Memory)
◆消息传递(Message-Passing)
◆管道通信(Pipe)
进程通信——共享存储(Shared-Memory)
基于共享数据结构的通信方式
◆多个进程共用某 个数据结构(OS提供并控制)
◆由用户(程序员)负责同步处理
◆低级通信:可以传递少量数据,效率低
基于共享存储区的通信方式
◆多个进程共用内存中的一块存储区域
◆由进程控制数据的形式和方式方式
◆高级通信:可以传递大量数据,效率高
缺点:数据收发双方不可见,存在安全隐患
进程通信——消息传递(Message-Passing
直接通信: 点到点发送
发送和接收时指明双方进程的ID;每个进程维护一个消息缓冲队列
间接通信:广播信箱
以信箱为媒介,作为中间实体;发进程将消息发送到信箱,收进程从信箱读取;可以广播,容易建立双向通信链
进程通信——管道通信(Pipe)
管道
◆用于连接读/写进程的共享文件,pipe文件
◆本质是内存中固定大小的缓冲区
半双工通信.
◆同一时段只能单向通信,双工通信需要两个管道
◆以先进先出(FIFO) 方式组织数据传输
◆通过系统调用read()/write()函数进行读写操作
进程同步
协调进程间的相互制约关系,使它们按照预期的方式执行的过程
前提
◆进程是并发执行的, 进程间存在着相互制约关系
◆并发的进程对系统共享资源进行竞争
◆进程通信,过程中相互发送的信号称为消息或事件
两种相互制约形式
◆间接相互制约关系 (互斥) :进程排他性地访问共享资源
◆直接相互制约关系 (同步) :进程间的合作,比如管道通信
进程同步——互斥的访问临界资源
访问过程
1.进入区:尝试进入临界区,成功则加锁(lock)
2.临界区:访问共享资源
3.退出区:解锁(unlock) ,唤醒其它阻塞进程
4.剩余区:其它代码
代码:
repeat
entry section; //进入区.
critical section; //临界区
exit section; //退出区
remainder section; //剩余区
until false;
访问原则
◆空闲让进:临界区空闲,允许一个进程进入
◆忙则等待:临界区已有进程,其它进程等待(阻塞状态)
◆有限等待:处于等待的进程,等待时间有限
◆让权等待:等待时应让出CPU执行权,防止“忙等待”
软件实现方法
◆单标志法:违背“空闲让进”
必须要求两个进程反复的交替运行,若一个进程不在进入临界区而另外一个进程需要再次进入临界区者会导致另一个进程的一直等待....
◆双标志法先检查
◆双标志法后检查
◆皮特森算法(Peterson's Algorithm)
4.如何处理死锁问题?