操作系统 进程 线程

进程

进程就是程序的一次执行
在这里插入图片描述
多道程序:进程会因为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变量。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值