1、进程的实质是进程实体的一次执行过程。
2、
PCB是进程存在的唯一标识,OS是根据PCB来对并发执行的进程进行控制和管理的。
PCB是OS中最重要的纪录型数据结构;
PCB中记录了
OS所需的,用于
描述进程的当前情况以及
控制进程运行的全部信息。
PCB的作用是是是一个在多道程序环境下不能独立运行的程序,成为一个能独立运行的基本单位,一个能与其他进程并发执行的进程。
进程的控制都是通过pcb来实现的,如将新建进程放入就绪队列,其实只不过是将该进程的pcb加入到就绪队列中罢了。
进程实体=程序段+数据段+PCB
在早期的UNIX版本中,把这三部分称为“进程映像”
PCB中主要包括以下四方面的信息。
- 进程标识符:唯一的标识一个进程
- 处理机状态:各种寄存器的内容
- 进程调度信息:调度和兑换的依据,如优先级,进程状态,进程等待的事件,调度算法所需的数据(已等待时间,已执行时间)
- 进程控制信息:数据和程序的地址,同步和通信机制,资源清单,链接指针(指向所在队列中的下一个PCB)
PCB的组织方式:
链接方式,索引方式
3、
原子操作在管态下进行,常驻内存(这里的管态应该是说内核的管理状态),原语的作用是实现进程的通信与控制。
4、子进程可以继承父进程所拥有的资源,例如,打开的文件,所分配到的缓冲区等。
5、进程控制是进程管理中最基本的功能。用于创建一个新进程,终止一个已完成的进程,还负责进程运行中的状态转换。
6、进程的创建:
申请空白PCB-->
为新进程分配资源-->
初始化PCB-->
将PCB插入就绪队列
7、进程同步
熟悉概念:进程同步的主要任务是对多个相关进程在
执行次序上进行协调,以使并发执行的多个进程之间能有效的
共享资源和
相互合作。
同步机制应遵循的规则:
空闲让进,忙则等待,有限等待,让权等待;
进程同步工具:信号量,管程;
经典进程同步问题:生产者-消费者问题,哲学家进餐问题,读者-写者问题
8、进程通信
进程的互斥和同步,也是一种进程通信,由于其交换的信息量少而被归结为低级通信。
高级通信机制:
共享存储器系统,(共享数据结构 如 缓冲区,共享存储区 如 共享内存)
消息传递系统,(直接通信 如 消息队列,间接通信 如 信箱)
管道通信系统;(pipe文件,可用于大量数据的传送)
总结:
本地的进程间通信(IPC)有很多种方式,但可以总结为下面4类:
- 消息传递(管道、FIFO、消息队列)
- 同步(互斥量、条件变量、读写锁、文件和写记录锁、信号量)
- 共享内存(匿名的和具名的)
- 远程过程调用(Solaris门和Sun RPC)[扩展]
9、进程调度
进程调度可大致分为两大类:非抢占方式和抢占方式
这里我想强调的是
非抢占方式的概念:采用这种调度方式时,一旦把处理机分配给某进程后,不管它运行多长时间,都一直让它运行下去;直至该进程完成,自愿释放处理机,或发生某事件而被阻塞,才把处理机分配给其他进程。
另外,需要格外记忆的是:
时间片 分配原则是属于 抢占方式 的一种。
10、讲到这里,我还需要用书上的文字强调一遍
挂起的概念:
为使那些暂时不能运行的进程不再占用宝贵的内存资源,而将他们调至外存上去等待,把此时的进程状态称为就绪外存状态或
挂起状态;
当这些进程又具备了运行条件且又稍有空闲时,由中级调度来决定把外存上的那些又具备运行条件的就绪进程重新调入内存,并修改器状态为就绪状态,挂在就绪队列上等待进程调度。
位于外存上的进程不管是就绪还是阻塞,只要他们全部都放入外存,则它们都是挂起状态。
我们要知道
由于暂时用不到的挂起 和
出现或被怀疑出现问题的挂起 是两种不同的挂起。(
进程的部分对换应该也是挂起)
11、中级调度实际上就是存储器管理中的对换功能。
12、在OS中调度的实质是一种资源分配。
调度算法
|
适用范围
|
备注
|
先来先服务FCFS
|
作业调度+进程调度
|
周转时间=完成时间-到达时间
带权周转世间=周转时间/服务时间
|
短作业优先SJF
|
作业调度+进程调度
|
此处的 作业长度 应该也可算作一种静态优先权 |
高优先权优先调度
|
作业调度+进程调度
|
- 非抢占式(优先权比较发生在一个进程完成或阻塞时)
- 抢占式(优先权比较发生在新进程加入时)
优先权又可分为:静态优先权和动态优先权
|
基于时间片的轮转调度算法RR
|
进程调度
|
|
多级反馈队列调度
|
进程调度
|
FCFS+SJF+高优先权优先+RR
|
实时调度其实算不上是一种独立的调度算法,我们这里可以将它看作是上面几种调度算法的实际应用:
它的独特之处便是对进程的执行时间有要求,进程调度的信息更加复杂 如 新添加了开始截止时间 完成截止时间 处理时间等等,
具体的有: 最早截止时间优先(EDF) 最低松弛度优先(LLF)
13、死锁
产生死锁的原因:
竞争资源,进程间推进顺序非法
产生死锁的必要条件:
互斥条件,请求和保持,不剥夺条件,环路等待
处理死锁的基本方法:
- 预防死锁(预防死锁的方法是使四个必要条件中的第2,3,4个条件之一不能成立)
- 避免死锁(系统在分配资源时,使系统不进入不安全状态)
- 检测死锁(检测死锁需要和解除死锁结合使用才能解决问题;一个状态为死锁状态的充分条件是:当且仅当s状态的资源分配图可以完全简化。
- 解除死锁 解除死锁的两种方法是:剥夺资源, 撤销进程)
14、程序的装入和链接
把一个用户源程序变为一个可在内存中执行的程序,常常都要经过一下几个步骤:
首先是编译,由编译程序将用户源代码编译成若干个目标模块;
其次是链接,由链接程序将编译后的一组目标模块和他们所需要的库函数链接在一起,形成一个完整的装入模块;
最后是装入,由装入程序将装入模块装入内存。
- 绝对装入方式(编译时)
- 可重定位装入方式(装入时)
- 动态运行时装入方式(运行时,为了适应运行程序在内存中经常要变的情形,如常见的内存紧凑)
15、为用户程序分配内存空间:(
此处的连续或者分散,指的并不是进程内部的内存空间,而是相邻分配内存的两个进程之间的组织方式)
- 连续分配方式
- 单一连续分配(单用户,单任务,【非重点】)
- 固定分区分配(将内存中用户空间划分为若干个固定大小的分区(大小一样或者大小不一),在每个分区只装入一道作业)
- 动态分区分配(根据进程的需要,动态的为之分配内存空间)
- 首次适应算法(每次都从空闲分区链首开始查找)
- 循环首次适应算法(从上次查找位置开始查找)
- 最佳适应算法(寻找满足要求的最小空闲分区,从小到大的查找链表,直到找到第一个满足要求的空闲分区)
- 最坏适应算法(挑选一个最大的空闲分区分割使用)
- 快速适应算法(将空闲分区按大小分类,对相同容量的分区单独设立一个空闲分区链表,使用但不分割,这样不会产生碎片)
- 伙伴系统(按照大小为2的k次幂来划分内存,使用且分割回收,容量为2的k次幂,是为了便于回收)
- 可重定位分区分配(基于动态分区分配,添加了紧凑)
- 离散分配方式
- 分页存储管理方式
- 分段存储管理方式
- 段页式存储管理方式
分段的必要性:分页系统中的“页”只是存放信息的物理单位,并无完整的意义,然而段却是信息的逻辑单位。
16、对换
对换可分为
整体对换 和
部分对换
整体对换 是为了将暂时用不到的进程挂起,目的是解决内存紧张问题,并可进一步提高内存的
利用率。
部分对换 是以“页”或 “段”为单位进行的,目的是为了支持虚拟存储系统,摆脱主存
容量的限制。
可能他们用到存放的位置都是对换区(当然我不确定,而且其管理方式我也没搞懂),但是他们确确实实的是两个不同的东西,它们最起码的出发点就是不一样的。
这里贴下有关面试题:
什么是虚拟存储器?虚拟存储器的特点是什么?
虚拟存储器:在具有层次结构存储器的计算机系统系统中,自动实现部分装入和部分替换功能,能从逻辑上为用户提供一个比物理存储容量大得多,可寻址的“主存储器”。虚拟存储区的容量与物理主存的大小无关,而受限于计算机的地址结构和可用磁盘容量
特点:多次性,对换性,虚拟性
多次性是指一个作业被分多次调入内存运行,亦即在作业运行时没有必要将其全部装入,只需要将当前要运行的那部分程序和数据装入内存即可;以后每当要运行到尚未调入的那部分程序时,再将它调入。
对换性是指允许在作业的运行过程中进行换进,换出,亦即,在进程运行期间,允许将那些暂不使用的程序和数据从内存调至外存的对换区,待以后需要时再将它们从外存调至内存。
虚拟性是指能从逻辑上扩充内存容量,使用户所看到的内存容量远大于实际内存容量。
17、虚拟存储器 实现方式:
- 请求分页式存储管理方式
- 最佳置换算法OPT
- 先进先出页面置换算法FIFO
- 最近最久未使用置换算法LRU
- Clock算法
- LRU算法是一种较好的算法,但由于它要求有较多的硬件支持,故在实际应用中,大多采用LRU的近似算法。Clock算法就是用得较多的一种LRU近似算法
- 最少使用置换算法LFU
- 页面缓冲算法PBA
- 请求分段式存储管理方式
18、计算机系统的一个重要组成部分是IO系统,在该系统中包括用于实现信息输入,输出,和存储功能的设备和相应的设备控制器。(
内存不属于IO设备)
设备管理的对象主要是IO设备, 还可能设计到设备控制器和IO通道。
设备管理的主要功能有:缓冲区管理,设备分配,设备处理,虚拟设备及实现设备独立性等。
磁盘是典型的块设备,即信息的存取总是以数据块为单位。
设备控制器是计算机中的一个
实体,其主要职责是控制一个或多个IO设备。
设备控制器的基本功能:接受和识别命令;数据交换;标识和报告设备的状态;地址识别;数据缓冲;差错控制;
IO通道设立的目的是:为了建立独立的IO操作,不仅是数据的传送能独立于CPU,而且也希望有关对IO操作的组织,管理及结束处理尽量独立,以保证Cpu有更多地时间去进行数据处理。在设置了通道后,CPU只需向通道发送一条IO指令。通道在接收到该指令后,便从内存中取出本次要执行的通道程序,然后执行该通道程序,仅当完成了规定的IO任务后,才向CPU发中断信号。
实际上,IO通道是一种特殊的处理机,它具有执行IO指令的能力,并通过执行通道程序来控制IO操作。可以实现并行的IO操作。
IO控制
- 程序IO方式
- 中断驱动IO控制方式(唤醒被阻塞的驱动进程(变为 [就绪])-->保护被中断的CPU环境-->转入相应的设备处理程序-->中断处理-->恢复被中断进程的现场)
- 直接存储器访问IO控制方式(DMA)
- 特点:
- 数据传送的基本单位是数据快
- 所传送的数据是从设备直接送入内存,或者从内存直接送入设备
- 仅在传送 一个或多个数据块开始和结束时,才需CPU干预,整块的数据是在控制器的控制下完成的。
综上所述,当系统中同时拥有IO通道和DMA控制的时候,数据传送效率会大大提高,它的工作流程:当CPU要完成一组相关的读或写操作时,只需向IO通道发送一条IO指令,以给出其所要执行的通道程序的首址和要访问的IO设备,通道接到该指令后,通过执行通道程序便可完成CPU指定的任务。 大体的控制流:
CPU-->IO通道-->DMA-->设备
驱动程序的特点:
- 驱动程序主要是指在请求IO的进程与设备之间的一个通信和转换程序。
- 驱动程序与设备控制器和IO设备的硬件特性紧密相关,因而不同类型的设备应配置不同的驱动程序。
- 驱动程序与IO设备所采用的IO控制方式紧密相关,常用的IO控制方式是中断驱动和DMA方式。
- 由于驱动程序与硬件紧密相关,因而其中的一部分必须用汇编语言编写,目前有很多的驱动程序已经固化在ROM中。
- 驱动程序应允许可重入。
- 驱动程序不允许系统调用,但是为了满足其与内核其他部分的交互,可以允许对某些内核过程的调用。
驱动程序的处理过程:将抽象要求转换为具体要求-->检查IO请求的合法性-->读出和检查设备的状态(从设备控制器读取)-->传送必要的参数-->工作方式的设置-->启动设备-->主动阻塞,等待中断到来(设备在控制器的指导下开始工作)-->中断唤醒驱动进程(设备工作完毕)-->将数据传送给请求进程(唤醒阻塞的用户进程)-->任务结束,自我阻塞
SPOOLing技术:
如果说多道程序技术将一台物理CPU虚拟为多台逻辑CPU,从而允许多个用户共享一台主机,那么通过SPOOLing技术,便可将一台物理IO设备虚拟为多台逻辑IO设备,同样允许多个用户共享一台物理IO设备
Spooling技术是对脱机输入,输出系统的模拟。
利用SPOOLing技术共享打印机:
- 由输出进程在在输出井中为之申请一个空闲磁盘块区,并将要打印的数据送入其中;
- 输出进程再为用户进程申请一张空白的用户请求打印表,并将用户的打印要求填入其中(相当于作业说明书),在将表挂到请求打印队列上
- 如果打印机空闲,输出进程将从请求打印队列的队首取出一张请求打印表,根据表中的要求将要打印的数据,从输出井传送到缓冲区,在由打印机进行打印。
SPOOLing系统的特点:
提高了IO的速度;将独占设备改造为共享设备;实现了虚拟设备的功能;
磁盘调度:(磁盘是可供多个进程共享的设备,当有多个进程 都要求访问磁盘是,应采用一种最佳调度算法,以使各进程对磁盘的平均时间最小)
- 先来先服务(FCFS)
- 最短寻道时间优先(SSTF)
- 扫描算法(SCAN)
- 循环扫描算法(CSCAN)
- NStepSCAN和FSCAN调度算法
提高磁盘IO速度的方法:
- 设置磁盘高速缓存
- 提前读
- 延迟写
- 优化物理快的分布
- 虚拟盘
RAID的优点:
可靠性高(除了RAID0级外,其余各级都采用了容错技术);磁盘IO速度高(并行交叉存取方式 );性能/价格比高;
19、文件
- 文件是指由创建者所定义的,具有文件名的一组相关元素的集合,可分为有结构文件和无结构文件两种;
- 有结构的文件中,文件由若干个相关记录组成
- 无结构文件则被看作一个字符流
- 文件在文件系统中是一个最大的数据单位
- 所谓文件“打开”,是指系统将指名文件的属性从外存拷贝到内存打开文件表的一个表目中,并将该表目的编号返回给用户。以后当用户再要求对该文件进行相应的操作时,便可利用系统所返回的索引号向系统提出操作请求,系统这里便可直接利用该索引号到打开文件表中查找,从而避免了对该文件的再次检索。如果用户已不再需要对该文件实施相应的操作,可利用“关闭”系统调用来关闭此文件,Os将会把该文件从打开文件表中的表目上删除掉。
- 如果说大量的数据结构和数据库是采用有结构的文件形式的话,则大量的原程序,可执行文件,库函数等,所采用的就是无结构的文件形式,即流式文件。其长度已字节为单位。
- 对流式文件的访问,则是采用读写指针的来指出下一个要访问的字符,
- 可以把流式文件看做是记录式文件的一个特例。在UNIX系统中,所有的文件都被看做是流式文件,即使是有结构文件,也被视为流式文件,系统不对文件进行格式处理。
- 直接文件:对于直接文件,在查找时不必利用给定的键值对线性表或链表进行检索,而是根据给定的记录键值直接获得指定记录的物理地址(文件内部记录的查找),换言之,记录键值本身就决定了记录的物理地址,这种由键值到记录物理地址的转换被称为键值转换,而哈希文件就是目前应用最为广泛的一种直接文件。
- 文件的外存分配方式:连续分配,链接分配(隐式,显示),索引分配;
- 微软的FAT和NTFS文件系统所采用的文件分配方式基本上都是类似于上述的显示链接方法;
- 在现代OS中,一个物理磁盘可以划分为多个卷,一个卷也可以由多个物理磁盘组成,如RAID磁盘阵列等。
- 引入“卷”的概念,可以支持将一个物理磁盘分成四个逻辑磁盘,每个逻辑磁盘就是一个卷(也称为 分区),也就是说每个卷都是一个能够被单独格式化和使用的逻辑单元,共文件系统分配空间时使用。一个卷中包含了文件系统信息,一组文件以及空闲空间。每个卷都专门划出一个单独区域来存放自己的目录和FAT表,以及自己的逻辑驱动器字母。
20、操作系统接口
- 用户接口(支持OS与用户之间的交互)
- 程序接口(应用程序接口(API),该接口是为程序员在编程时使用的,也是程序能取得操作系统服务的唯一途径)
- 网络用户接口