auto commit
This commit is contained in:
parent
bfc45601c7
commit
793840a9d4
|
@ -233,7 +233,7 @@ shortest remaining time next(SRTN)。
|
|||
|
||||
2. 当一个新进程进入内存后,首先将它放入第一队列的末尾,按 FCFS 原则排队等待调度。当轮到该进程执行时,如它能在该时间片内完成,便可准备撤离系统;如果它在一个时间片结束时尚未完成,调度程序便将该进程转入下一个队列的队尾。
|
||||
|
||||
3. 仅当前 i -1 个队列均空时,才会调度第 i 个队列中的进程。
|
||||
3. 仅当前 i-1 个队列均空时,才会调度第 i 个队列中的进程。
|
||||
|
||||
优点:实时性好,同时适合运行短作业和长作业。
|
||||
|
||||
|
@ -241,7 +241,7 @@ shortest remaining time next(SRTN)。
|
|||
|
||||
### 3. 实时系统中的调度
|
||||
|
||||
实时系统要一个服务请求在一个确定时间内得到响应。
|
||||
实时系统要求一个服务请求在一个确定时间内得到响应。
|
||||
|
||||
分为硬实时和软实时,前者必须满足绝对的截止时间,后者可以容忍一定的超时。
|
||||
|
||||
|
@ -261,9 +261,8 @@ shortest remaining time next(SRTN)。
|
|||
|
||||
### 2. 同步与互斥
|
||||
|
||||
同步指多个进程按一定顺序执行;互斥指多个进程在同一时刻只有一个进程能进入临界区。
|
||||
|
||||
同步是在对临界区互斥访问的基础上,通过其它机制来实现有序访问的。
|
||||
- 同步指多个进程按一定顺序执行;
|
||||
- 互斥指多个进程在同一时刻只有一个进程能进入临界区。
|
||||
|
||||
### 3. 信号量
|
||||
|
||||
|
@ -274,7 +273,7 @@ shortest remaining time next(SRTN)。
|
|||
|
||||
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
|
||||
|
|
Loading…
Reference in New Issue
Block a user