R
(
p
1
)
∩
W
(
p
2
)
∪
R
(
p
2
)
∩
W
(
p
1
)
∪
W
(
p
1
)
∩
W
(
p
2
)
=
∅
\mathrm{R}\left(\mathrm{p}_{1}\right) \cap \mathrm{W}\left(\mathrm{p}_{2}\right) \cup \mathrm{R}\left(\mathrm{p}_{2}\right) \cap \mathrm{W}\left(\mathrm{p}_{1}\right) \cup \mathrm{W}\left(\mathrm{p}_{1}\right) \cap \mathrm{W}\left(\mathrm{p}_{2}\right)=\varnothing
R(p1)∩W(p2)∪R(p2)∩W(p1)∪W(p1)∩W(p2)=∅
进程特征
动态性:最基本的特性
它由创建而产生,由调度而执行,因得不到资源而暂停执行,以及由撤销而消亡
并发性
独立性
进程是一个能独立运行的基本单位,也是系统中独立获得资源和独立调度的基本单位
异步性
进程按各自独立的、不可预知的速度向前推进
结构特征
进程映像 = 程序段 + 数据段 + 进程控制块
进程状态
因自身原因而等待的叫wait,因外部的叫挂起
进程控制块
PCB是进程存在的唯一标志
多道程序度
内存中的进程数
IO密集型
大多时间用来做IO而不是运算,有许多短期的CPU bursts
CPU密集型
大部分时间做运算,有不多的长期的CPU bursts
上下文切换
CPU 寄存器
进程状态
内存控制信息
fork & exec
#include<stdio.h>#include<unistd.h>intmain(void){
pid_t pid;/* fork another process */
pid =fork();if(pid <0){/* 出错了 */fprintf(stderr, “Fork Failed”);exit(-1);}elseif(pid ==0){/* 子进程要做的 */execlp(“/bin/ls”, “ls”,NULL);}else{/* 父进程要做的 *//* parent will wait for the child to complete */
wait (NULL);
printf (“Child Complete”);exit(0);}}
进程间通信(IPC)
第五章
程序运行就是不停的CPU-I/O Burst Cycle
Process execution= n (CPU execution + I/O wait)+ CPU execution
抢占和非抢占
非抢占 4&5
抢占 全
需要硬件:时钟
提前对共享数据同步
调度延迟时间
调度器用于停止一个进程,再运行一个进程的时间
调度标准
CPU 利用率
吞吐率
周转时间
执行一个进程的时间:
等待进入内存
在就绪队列里等待:等待时间
CPU上运行
做IO
等待时间
响应时间
从提交请求到产生第一响应的时间
调度算法
FCFS
非抢占
护航效应
短进程位于长进程后
SJF
最优的
可抢占 可非抢占
预测下一次CPU burst
τ
n
+
1
=
α
t
n
+
(
1
−
α
)
τ
n
\tau_{\mathrm{n}+1}=\alpha \mathrm{t}_{\mathrm{n}}+(1-\alpha) \tau_{\mathrm{n}}
τn+1=αtn+(1−α)τn
<
P
1
,
P
2
,
⋯
 
,
P
n
>
<P_1,P_2,\cdots,P_n>
<P1,P2,⋯,Pn>,
P
i
P_i
Pi仍然可申请的资源小于当前可用资源和所有
P
j
(
j
<
i
)
P_j(j<i)
Pj(j<i)已占有的资源和 – 安全序列