进程:程序的一次执行,有唯一的PID
操作系统会记录PID,进程所属用户ID,还要记录给进程分配了哪些资源,进程的运行情况等信息,这些信息都被保存在一个数据结构PCB中,即进程控制块中。
pcb:是进程存在的唯一标志,当进程被创建的时候,操作系统为其创建PCB,结束时收回。
进程是进程实体的运行过程,是系统进行资源分配和调度的一个独立单位。
动态性是进程的最基本的特征
进程的组织:
进程控制:实现进程的状态转换
进程控制的过程需要一气呵成(原语,使用开中断,关中断,为特权指令)
在进程切换时现在PCB中保存这个进程的运行环境(保存一些必要的寄存器信息)
无论哪个进程控制原语,要做的事情无非就是三类事情:
1.更新PCB中的信息
2.将PCB插入合适的队列
3.分配/回收资源
进程通信:(进城之间的信息交换)
为了保证安全,一个进程不能直接访问另一个进程的地址空间,但是进程通信又是必须实现的所以有一些方法:
1.共享储存
包括基于数据结构的共享(低级通信方式)、基于存储区的共享(高级通信方式)
2.消息传递
3.管道通信
一个管道只能实现半双工通信。写满时不能再写。读空时,不能再读。没写满不能读。没读空不能写。
线程是处理机调度的单位,进程时系统分配资源的的那位
线程的实现方式:
1.用户级线程
2.内核级线程
“内核级线程才是处理机分配的单位”
高级调度:作业调度
低级调度:进程调度,处理机调度,进程调度的频率很高,一般几十毫秒一次
中级调度:按照某种策略决定将哪个处于挂起状态的进程重新调入内存
临界资源
临界区
进程调度的方式
1.非剥夺调度方式(非抢占)
2.剥夺调度方式
进程调度、切换是有代价的,并不是调度越频繁、并发度就越高
调度算法:
先来先服务(FCFS)
短作业优先(SJF)
高响应比优先(HRRN)
时间片轮转调度(RR)
优先级调度算法
多级反馈队列调度算法
进程同步、进程互斥
进程互斥的软件实现方法:
1.单标志法
2.双标志前检查法
3.双标志后检查法
4.peterson算法
进程互斥的硬件实现方法:
1.中断屏蔽方法
2.testandset指令
ts或tsl指令
3.swap指令
信号量机制(整形信号量、记录型信号量)semaphore
整形信号量:会出现忙等,不满足让权等待的原则
记录型信号量:不会(PV操作)
typedef struct {
int value;
struct process *L;
}semaphore
用信号量机制实现进程同步关系
用信号量机制实现进程互斥
用信号量机制实现进程的前驱关系
生产者-消费者问题:
…
死锁产生的必要条件:
1.互斥条件
2.不剥夺条件
3.请求和保持条件
4.循环等待条件(必要不充分条件)
如果同类资源数大于1,则即使有循环等待,也未必发生死锁。但如果系统中每类资源都只有一个,那循环等待就是死锁的充分必要条件了
装入的三种方式;
1.绝对装入(只适用于单道程序环境)
2.静态重定位(可重定位装入)
3.动态重定位(动态运行装入)
链接的三种方式:
覆盖与交换技术
动态分区分配算法:
1.首次适应算法
2.最佳适应算法
3.最坏适应算法
4.领近适应算法