并发:是一个处理器在一段时间内处理多个任务
并行:是多个处理器在同一时间同时处理多个任务
进程的状态:运行、就绪、阻塞、创建和结束
在虚拟内存管理的操作系统中,通常会把阻塞状态的进程的物理内存空间换到硬盘,等到再次需要运行的时候,在从硬盘换入到物理内存。
挂起状态:一个新的状态用来描述进程没有占用实际的物理内存空间的情况
进程控制块(PCB)用来描述进程
PCB中包含的信息:
- 进程描述信息 (进程标志符、用户标志符)
- 进行控制和管理信息 (进程当前状态、进程优先级)
- 资源分配清单
- CPU相关信息
创建进程
操作系统允许一个进程创建另一个进程
子进程被终止时,其在父进程处继承的资源应当还给父进程;同时父进程终止的时候,也会终止所有的子进程
过程:首先分配一个唯一的进程标识号,同时申请一个空白的PCB,PCB有限,若申请失败就创建失败;然后为进程分配资源,如果资源不足,进程就会进入一个等待状态,以等待资源;初始化PCB;将进程插入到就绪队列(如果此时的调度队列能够接纳新的进程)
终止进程
三种方式:正常结束、异常结束、外界干预
过程:寻找PCB;终止进程的执行,将CPU分给其他的进程;如果有子进程,递归进行终止;将该进程拥有的全部资源全都归还给父进程或者操作系统;将PCB从所在的队列中删除
//TODO 阻塞和唤醒
进程的上下文切换
一个进程切换到另外一个进程,就是进程的上下文切换
进程与线程的比较
进程是资源分配的单位,线程是CPU调度的单位
进程拥有一个完整的资源平台,而线程则只是独享必不可少的资源
进程间的通信方式
管道:传输数据是单向的 范围是存在父子关系的进程中
命名管道:FIFO 可以在不相关的进程间进行通信
消息队列
消息队列的生命周期是随内核的,如果没有释放消息队列或者关闭操作系统,消息队列会一直存在的
缺点:不适合较大数据的传输;存在用户态与内核态之间的数据拷贝开销
共享内存
拿出一快虚拟地址空间,映射到相同的物理内存中去,不需要拷贝来拷贝去,大大提升了进程间通信的速度。
信号量
是一个整型的计数器,主要用于实现进程间的互斥与同步,而不是用于缓存进程间的通信数据。
两种原子操作:P操作(信号量减一)、V操作(信号量加一)
信号
在异常情况下的工作模式,需要用信号的方式来通知进程
信号是进程通信机制中的唯一的异步通信机制,可以在任何时候发送信号给某一个进程
用户进程对信号的处理方式:执行默认操作、捕捉信号、忽略信号
Socket通信
进行跨网络和不同主机上的进程之间的通信的
进程调度算法
先来先服务(FCFS):适用与CPU繁忙型的系统,不适合IO繁忙型的
最短作业优先(Shortest Job First):优先选择运行时间最短的进程来运行
高响应比优先调度算法:优先权=(等待时间+要求服务时间)/要求服务时间
时间片轮转调度算法:每个进程被分配一个时间段,称为时间片
最高优先级算法(Highest Priority First):静态优先级(创建进程的时候就确定了优先级,整个运行时间优先级不变)、动态优先级(会根据进程动态的调整优先级)
也分为了两类:非抢占式和抢占式
多级反馈队列调度算法:时间片轮转算法与最高优先级抢占算法的综合
缺页异常
当CPU访问的页面不在物理内存中的时候,就会产生一个缺页中断,请求操作系统将所缺页调入到物理内存
内存页面置换算法
最佳页面置换算法:置换在未来最长时间不访问的页面
先进先出置换算法:选择在内存驻留时间很长的页面进行置换
最久未使用的置换算法(LRU):选择最长时间没有被访问的页面进行置换
时钟页面置换算法:将所有的页面都保存在一个环形链表中,当发生缺页的时候,算法会首先检查表指针指向的页面,如果访问位为0就淘汰该页面,同时将新的页面插入这个位置;如果访问位是1就清除访问位,同时找到前面为0的页面。
最不常用置换算法:选择访问次数最少的页面进行淘汰
磁盘调度算法
先来先服务算法
最短寻道时间优先算法:优先选择从当前的磁头位置所需寻道时间最短的请求(可能会产生饥饿,某些请求永远不会被访问到)
扫描算法:解决上边产生的饥饿问题,磁头在一个方向上移动,访问所有未完成的请求,知道磁头到大该方向上最后的磁道,再调换方向
循环扫描算法:对扫描算法进行改进;只在一边进行读取,读取完成之后立即返回,然后在开始读取
LOOK与C-LOOK算法:对扫描算法和循环扫描算法进行的改进;磁盘不必移动到最始端或这最末端才开始调换方向;而是移动到最远的请求处就开始反向移动。