进程
进程就是程序的一次执行
多道程序:进程会因为I/O中断打断,所以多个进程同时进行。
CPU利用率 = 1-pn(p I/O占比 n程序个数)
线程
一个进程需要多种活动(一个word需要监控键盘 磁盘 显示器)
调度
高级调度
作业调度,从后备作业挑一个,为它创建进程
中级调度
对换调度,缓解内存紧张,将内存和外存进程对调
低级调度
进程级调度,决定哪个进程占据CPU
调度算法
(低级调度)
先来先服务FCFS
短作业优先SJF
高响应度优先HRP:RP=响应时间/运行时间(响应时间为等待时间+运行时间)
优先级调度
均衡级调度
基于优先数
时间片轮转
多级队列
周转时间=等待时间+运行时间
周转系数=周转时间/运行时间=RP
管态
运行系统程序时,需先进入管态。
运行用户程序时,需进入算态。
而有时用户程序需要调用系统功能需要使用 访管指令 进入管态。
同步/互斥
同步:进程需要相互合作
互斥:进程抢临界资源
信号量
互斥:公用信号量 设为0/1
同步:私用信号量 设为0/n
PV操作 P检测 V增量
P(S)
{
S--;
if(S<0)
阻塞,插入阻塞队列;
}
V(S)
{
S++;
if(S<=0)
唤醒1个;
}
S>=0 表示还有的资源数
S<0 表示堵塞数
一般是P自己的变量,V别人的变量
生产者消费者
多个生产者,多个消费者,n个缓冲区
生产者
while(true)
{
P(S1);
P(mutex);
生产;
V(mutex);
V(S2);
}
消费者
while(true)
{
P(S2);
P(mutex);
消费;
V(mutex);
V(S1);
}
S1,S2为私有变量,初值分别n、0,进程同步问题,实现n个缓冲区
mutex临界区资源 互斥问题 初值为1;
读者写者
读者之间可以共享,而写者必须是互斥的。
读者与写者互斥,写者与写者互斥
读者
while(true)
{
P(mutex);
readnum++;
if(readnum==1)
P(write);
V(mutex);
readfile();
P(mutex);
readnum--;
if(readnum==0)
V(write);
V(mutex);
}
写者
while(true)
{
P(write);
writefile();
V(write);
}
mutex保护readnum;write同步读者与写者、写者与写者;写者容易饥饿
Sn=n;
S=1;
读者
while(true)
{
P(S);
P(Sn);
V(S);
readfile();
V(Sn);
}
写者
while(true)
{
P(S);
for(int i=0;i<n;i++)
P(Sn);
writefile();
for(int i=0;i<n;i++)
V(Sn);
V(S);
}
写者优先,Sn使读者不超过n个,S控制读者与写者、写者之间;
理发
一个理发师、n个座位;有座位,顾客就坐下;没座位即离开;有顾客即理发;无顾客及睡觉;
理发师
while(true)
{
P(customer);
wait--;
V(baber);
cut();
}
顾客
while(true)
{
if(wait<chair)
{
wait++;
V(customer);
P(baber);
cut();
}
else
leave();
}
这个代码没有考虑wait变量。