auto commit

This commit is contained in:
CyC2018 2018-03-08 21:56:48 +08:00
parent bfc45601c7
commit 793840a9d4

View File

@ -233,7 +233,7 @@ shortest remaining time nextSRTN
2. 当一个新进程进入内存后,首先将它放入第一队列的末尾,按 FCFS 原则排队等待调度。当轮到该进程执行时,如它能在该时间片内完成,便可准备撤离系统;如果它在一个时间片结束时尚未完成,调度程序便将该进程转入下一个队列的队尾。
3. 仅当前 i -1 个队列均空时,才会调度第 i 个队列中的进程。
3. 仅当前 i-1 个队列均空时,才会调度第 i 个队列中的进程。
优点:实时性好,同时适合运行短作业和长作业。
@ -241,7 +241,7 @@ shortest remaining time nextSRTN
### 3. 实时系统中的调度
实时系统要一个服务请求在一个确定时间内得到响应。
实时系统要一个服务请求在一个确定时间内得到响应。
分为硬实时和软实时,前者必须满足绝对的截止时间,后者可以容忍一定的超时。
@ -261,9 +261,8 @@ shortest remaining time nextSRTN
### 2. 同步与互斥
同步指多个进程按一定顺序执行;互斥指多个进程在同一时刻只有一个进程能进入临界区。
同步是在对临界区互斥访问的基础上,通过其它机制来实现有序访问的。
- 同步指多个进程按一定顺序执行;
- 互斥指多个进程在同一时刻只有一个进程能进入临界区。
### 3. 信号量
@ -274,7 +273,7 @@ shortest remaining time nextSRTN
down 和 up 操作需要被设计成原语,不可分割,通常的做法是在执行这些操作的时候屏蔽中断。
如果信号量的取值只能为 0 或者 1那么就成为了 **互斥量Mutex** 0 表示临界区已经加锁1 表示临界区解锁。
如果信号量的取值只能为 0 或者 1那么就成为了 **互斥量Mutex** 0 表示临界区已经加锁1 表示临界区解锁。
```c
typedef int semaphore;
@ -294,9 +293,13 @@ void P2() {
**使用信号量实现生产者-消费者问题**
使用一个互斥量 mutex 来对临界资源进行访问empty 记录空缓冲区的数量full 记录满缓冲区的数量
使用一个缓冲区来保存物品,只有缓冲区没有满,生产者才可以放入物品;只有缓冲区不为空,消费者才可以拿走物品
注意,必须先执行 down 操作再用互斥量对临界区加锁,否则会出现死锁。因为如果都先对临界区加锁,然后再执行 down 操作,那么可能会出现这种情况:生产者对临界区加锁后,执行 down(empty) 操作,发现 empty = 0此时生成者睡眠。消费者此时不能进入临界区因为生产者对临界区加锁了也就无法执行 up(empty) 操作,那么生产者和消费者就会一直等待下去。
需要使用一个互斥量 mutex 来对缓冲区这个临界资源进行互斥访问。
为了控制生产者和消费者的行为需要记录缓冲区中物品的数量。数量可以使用信号量来进行统计这里需要使用两个信号量empty 记录空缓冲区的数量full 记录满缓冲区的数量。其中empty 信号量是在生产者进程中使用,当 empty 不为 0 时生产者才可以放入物品full 信号量是在消费者进行中使用,当 full 信号量不为 0 时,消费者才可以取走物品。
注意,不能先对缓冲区进行加锁,再测试信号量。也就是说,不能先执行 down(mutex) 再执行 down(empty)。如果这么做了,那么可能会出现这种情况:生产者对缓冲区加锁后,执行 down(empty) 操作,发现 empty=0此时生成者睡眠。消费者此时不能进入临界区因为生产者对缓冲区加锁了也就无法执行 up(empty) 操作,那么生产者和消费者就会一直等待下去。
```c
#define N 100