操作系统

信号量:边

进程:点

实现一个银行系统,该银行设置有M个窗口。每个用户需要先取号,只有一台取号机。用户分为对公用户,私人用户。私人用户又分为普通用户,VIP用户。其中窗口的柜员在服务时,按优先级给用户服务,其中对公用户的优先级最高,VIP用户次之,普通用户优先级最低。请使用同步与互斥解决此银行的叫号服务系统。
https://blog.csdn.net/Yun_Ge/article/details/89048991

  1. 几个关系=几个信号量,相当于点之间的线段
    对公-VIP,VIP-私人,共2个关系,设置2个信号量
  2. 实现进程互斥
semaphore mutex; 
mutex=1; // 互斥,初始化为 1
while(1){
	wait(mutex);	//p操作-1且阻塞
	临界区;
	signal(mutex);	//v操作+1且唤醒
	剩余区;
}
  1. 实现前趋关系
main(){
	Semaphore a,b,c,d,e,f,g; 
	a.value=0;b.value=0;c.value=0;
	d.value=0;e.value=0;f.value=0;g.value=0;
	//以下代码并发执行
	{ S1;signal(a);signal(b); }
	{ wait(a);S2;signal(c) ;signal(d);}
	{ wait(b);S3;signal(e); }
	{ wait(c);S4;signal(f); }
	{ wait(d);S5;signal(g); }
	{ wait(e);wait(f);wait(g);S6; }
}

image
4. 实现进程同步
image

用户态转内核态

主动系统调用sysCall (系统接口)
中断 (I/O设备完成I/O任务)
异常 (÷0)

I/O操作都会让running陷入waiting

快表节省了找页表的时间,但找到后仍要从内存访问取出数据

读者优先:插队读者一起读,读者可插 写者 的队;写者无限等待

写者优先:连续读者一起读,读者不可插写者队;读写公平

posted @ 2023-05-04 22:27  Nolca  阅读(53)  评论(0编辑  收藏  举报