Skip to content

Commit

Permalink
auto commit
Browse files Browse the repository at this point in the history
  • Loading branch information
CyC2018 committed Mar 8, 2018
1 parent bfc4560 commit 793840a
Showing 1 changed file with 11 additions and 8 deletions.
19 changes: 11 additions & 8 deletions notes/计算机操作系统.md
Original file line number Diff line number Diff line change
Expand Up @@ -233,15 +233,15 @@ shortest remaining time next(SRTN)。

2. 当一个新进程进入内存后,首先将它放入第一队列的末尾,按 FCFS 原则排队等待调度。当轮到该进程执行时,如它能在该时间片内完成,便可准备撤离系统;如果它在一个时间片结束时尚未完成,调度程序便将该进程转入下一个队列的队尾。

3. 仅当前 i -1 个队列均空时,才会调度第 i 个队列中的进程。
3. 仅当前 i-1 个队列均空时,才会调度第 i 个队列中的进程。

优点:实时性好,同时适合运行短作业和长作业。

#### 2.4 短进程优先

### 3. 实时系统中的调度

实时系统要一个服务请求在一个确定时间内得到响应
实时系统要求一个服务请求在一个确定时间内得到响应

分为硬实时和软实时,前者必须满足绝对的截止时间,后者可以容忍一定的超时。

Expand All @@ -261,9 +261,8 @@ shortest remaining time next(SRTN)。

### 2. 同步与互斥

同步指多个进程按一定顺序执行;互斥指多个进程在同一时刻只有一个进程能进入临界区。

同步是在对临界区互斥访问的基础上,通过其它机制来实现有序访问的。
- 同步指多个进程按一定顺序执行;
- 互斥指多个进程在同一时刻只有一个进程能进入临界区。

### 3. 信号量

Expand All @@ -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;
Expand All @@ -294,9 +293,13 @@ void P2() {

**使用信号量实现生产者-消费者问题**

使用一个互斥量 mutex 来对临界资源进行访问;empty 记录空缓冲区的数量,full 记录满缓冲区的数量。
使用一个缓冲区来保存物品,只有缓冲区没有满,生产者才可以放入物品;只有缓冲区不为空,消费者才可以拿走物品。

需要使用一个互斥量 mutex 来对缓冲区这个临界资源进行互斥访问。

为了控制生产者和消费者的行为,需要记录缓冲区中物品的数量。数量可以使用信号量来进行统计,这里需要使用两个信号量:empty 记录空缓冲区的数量,full 记录满缓冲区的数量。其中,empty 信号量是在生产者进程中使用,当 empty 不为 0 时,生产者才可以放入物品;full 信号量是在消费者进行中使用,当 full 信号量不为 0 时,消费者才可以取走物品。

注意,必须先执行 down 操作再用互斥量对临界区加锁,否则会出现死锁。因为如果都先对临界区加锁,然后再执行 down 操作,那么可能会出现这种情况:生产者对临界区加锁后,执行 down(empty) 操作,发现 empty = 0,此时生成者睡眠。消费者此时不能进入临界区,因为生产者对临界区加锁了,也就无法执行 up(empty) 操作,那么生产者和消费者就会一直等待下去。
注意,不能先对缓冲区进行加锁,再测试信号量。也就是说,不能先执行 down(mutex) 再执行 down(empty)。如果这么做了,那么可能会出现这种情况:生产者对缓冲区加锁后,执行 down(empty) 操作,发现 empty=0,此时生成者睡眠。消费者此时不能进入临界区,因为生产者对缓冲区加锁了,也就无法执行 up(empty) 操作,那么生产者和消费者就会一直等待下去。

```c
#define N 100
Expand Down

0 comments on commit 793840a

Please sign in to comment.