
操作系统
kinnisoy
独立独立
展开
-
[操作系統實驗]進程管理器、磁盤調度、內存分配
一、为啥做这么无聊的东西? 某不知名高校计算机学院,操作系统课程实验最终要求完成进程管理 内存分配 磁盘调度三个小实验,并制作UI 界面二、用啥做的? 工具:Visual Stdio 2017 语言:C\C++、 图形化工具:MFC 于是花了两周自学MFC,完成最终如下的内容。三、长啥样?1.登陆界面:2.进程管理界面:...原创 2019-12-29 14:41:13 · 249 阅读 · 0 评论 -
死锁处理之【一】---------死锁避免(银行家算法)
死锁避免在程序运行时避免发生死锁。1. 安全状态图 a 的第二列 Has 表示已拥有的资源数,第三列 Max 表示总共需要的资源数,Free 表示还有可以使用的资源数。从图 a 开始出发,先让 B 拥有所需的所有资源(图 b),运行结束后释放 B,此时 Free 变为 5(图 c);接着以同样的方式运行 C 和 A,使得所有进程都能成功运行,因此可以称图 a 所示的状态时安全...转载 2019-11-11 17:36:18 · 402 阅读 · 0 评论 -
死锁处理之【二】---------死锁检测与死锁恢复
死锁检测与死锁恢复不试图阻止死锁,而是当检测到死锁发生时,采取措施进行恢复。1. 每种类型一个资源的死锁检测上图为资源分配图,其中方框表示资源,圆圈表示进程。资源指向进程表示该资源已经分配给该进程,进程指向资源表示进程请求获取该资源。图 a 可以抽取出环,如图 b,它满足了环路等待条件,因此会发生死锁。每种类型一个资源的死锁检测算法是通过检测有向图是否存在环来实现,从...转载 2019-11-11 17:16:03 · 762 阅读 · 0 评论 -
哲学家进餐问题
五个哲学家围着一张圆桌,每个哲学家面前放着食物。哲学家的生活有两种交替活动:吃饭以及思考。当一个哲学家吃饭时,需要先拿起自己左右两边的两根筷子,并且一次只能拿起一根筷子。下面是一种错误的解法,考虑到如果所有哲学家同时拿起左手边的筷子,那么就无法拿起右手边的筷子,造成死锁。#define N 5void philosopher(int i) { while(TRUE) {...转载 2019-11-10 18:17:20 · 540 阅读 · 0 评论 -
作家-读者问题
问题描述:允许多个进程同时对数据进行读操作,但是不允许读和写以及写和写操作同时发生。信号量:一个整型变量 count 记录在对数据进行读操作的进程数量,一个互斥量 count_mutex 用于对 count 加锁,一个互斥量 data_mutex 用于对读写的数据加锁。简单信号量版本<version 1.0>:typedef int semaphore;semaphor...翻译 2019-11-10 18:07:35 · 1014 阅读 · 0 评论 -
使用管程实现生产者-消费者问题
使用信号量机制实现的生产者消费者问题需要客户端代码做很多控制,而管程把控制的代码独立出来,不仅不容易出错,也使得客户端代码调用更容易。c 语言不支持管程,下面的示例代码使用了类 Pascal 语言来描述管程。示例代码的管程提供了 insert() 和 remove() 方法,客户端代码通过调用这两个方法来解决生产者-消费者问题。monitor ProducerConsumer i...转载 2019-11-10 17:33:14 · 2928 阅读 · 0 评论 -
使用信号量实现生产者-消费者问题
问题描述:使用一个缓冲区来保存物品,只有缓冲区没有满,生产者才可以放入物品;只有缓冲区不为空,消费者才可以拿走物品。因为缓冲区属于临界资源,因此需要使用一个互斥量 mutex 来控制对缓冲区的互斥访问。为了同步生产者和消费者的行为,需要记录缓冲区中物品的数量。数量可以使用信号量来进行统计,这里需要使用两个信号量:empty 记录空缓冲区的数量,full 记录满缓冲区的数量。其中,empty...转载 2019-11-10 17:20:12 · 2706 阅读 · 0 评论