auto commit

This commit is contained in:
CyC2018
2018-03-03 22:34:41 +08:00
parent 574e73965d
commit 82055f225f
4 changed files with 166 additions and 166 deletions

View File

@ -43,7 +43,7 @@
* [5. 共享内存](#5-共享内存)
* [6. 套接字](#6-套接字)
* [经典同步问题](#经典同步问题)
* [1. 读者 - 写者问题](#1-读者---写者问题)
* [1. 读者-写者问题](#1-读者-写者问题)
* [2. 哲学家进餐问题](#2-哲学家进餐问题)
* [第三章 死锁](#第三章-死锁)
* [死锁的条件](#死锁的条件)
@ -121,7 +121,7 @@
### 1. 外中断
由 CPU 执行指令以外的事件引起,如 I/O 结束中断,表示设备输入 / 输出处理已经完成,处理器能够发送下一个输入 / 输出请求。此外还有时钟中断、控制台中断等。
由 CPU 执行指令以外的事件引起,如 I/O 结束中断,表示设备输入/输出处理已经完成,处理器能够发送下一个输入/输出请求。此外还有时钟中断、控制台中断等。
### 2. 异常
@ -163,7 +163,7 @@
- 系统开销由于创建或撤销进程时系统都要为之分配或回收资源如内存空间、I/O 设备等,因此操作系统所付出的开销远大于创建或撤销线程时的开销。类似地,在进行进程切换时,涉及当前执行进程 CPU 环境的保存及新调度进程 CPU 环境的设置。而线程切换时只需保存和设置少量寄存器内容,开销很小。
- 通信方面:进程间通信 (IPC) 需要进程同步和互斥手段的辅助,以保证数据的一致性,而线程间可以通过直接读 / 写同一进程中的数据段(如全局变量)来进行通信。
- 通信方面:进程间通信 (IPC) 需要进程同步和互斥手段的辅助,以保证数据的一致性,而线程间可以通过直接读/写同一进程中的数据段(如全局变量)来进行通信。
举例QQ 和浏览器是两个进程,浏览器进程里面有很多线程,例如 HTTP 请求线程、事件响应线程、渲染线程等等,线程的并发执行使得在浏览器中点击一个新链接从而发起 HTTP 请求时,浏览器还可以响应用户的其它事件。
@ -207,7 +207,7 @@ shortest remaining time nextSRTN
除了可以手动赋予优先权之外,还可以把响应比作为优先权,这种调度方式叫做高响应比优先调度算法。
响应比 = ( 等待时间 + 要求服务时间 ) / 要求服务时间 = 响应时间 / 要求服务时间
响应比 = (等待时间 + 要求服务时间) / 要求服务时间 = 响应时间 / 要求服务时间
这种调度算法主要是为了解决 SJF 中长作业可能会饿死的问题,因为随着等待时间的增长,响应比也会越来越高。
@ -269,7 +269,7 @@ down 和 up 操作需要被设计成原语,不可分割,通常的做法是
如果信号量的取值只能为 0 或者 1那么就成为了**互斥量Mutex**0 表示临界区已经加锁1 表示临界区解锁。
```c
typedef int semaphore;
typedef int semaphore ;
semaphore mutex = 1;
void P1() {
down(mutex);
@ -284,7 +284,7 @@ void P2() {
}
```
**使用信号量实现生产者 - 消费者问题**
**使用信号量实现生产者-消费者问题**
使用一个互斥量 mutex 来对临界资源进行访问empty 记录空缓冲区的数量full 记录满缓冲区的数量。
@ -292,7 +292,7 @@ void P2() {
```c
#define N 100
typedef int semaphore;
typedef int semaphore ;
semaphore mutex = 1;
semaphore empty = N;
semaphore full = 0;
@ -324,21 +324,21 @@ void consumer() {
使用信号量机制实现的生产者消费者问题需要客户端代码做很多控制,而管程把控制的代码独立出来,不仅不容易出错,也使得客户端代码调用更容易。
c 语言不支持管程,下面的示例代码使用了类 Pascal 语言来描述管程。示例代码中的管程提供了 insert() 和 remove() 方法,客户端代码通过调用这两个方法来解决生产者 - 消费者问题。
c 语言不支持管程,下面的示例代码使用了类 Pascal 语言来描述管程。示例代码中的管程提供了 insert() 和 remove() 方法,客户端代码通过调用这两个方法来解决生产者-消费者问题。
```pascal
monitor ProducerConsumer
integer i;
condition c;
procedure insert();
begin
end;
procedure remove();
begin
end;
end monitor;
```
@ -347,7 +347,7 @@ end monitor;
管程引入了 **条件变量** 以及相关的操作:**wait()** 和 **signal()** 来实现同步操作。对条件变量执行 wait() 操作会导致调用进程阻塞把管程让出来让另一个进程持有。signal() 操作用于唤醒被阻塞的进程。
**使用管程实现生成者 - 消费者问题**
**使用管程实现生成者-消费者问题**
```pascal
monitor ProducerConsumer
@ -433,7 +433,7 @@ Linux 中管道是通过空文件来实现。
生产者和消费者问题前面已经讨论过。
### 1. 读者 - 写者问题
### 1. 读者-写者问题
允许多个进程同时对数据进行读操作,但是不允许读和写以及写和写操作同时发生。
@ -677,7 +677,7 @@ void philosopher(int i) {
70120304230321201701
进程运行时,先将 7, 0, 1 三个页面装入内存。当进程要访问页面 2 时,产生缺页中断,会将页面 7 换出,因为页面 7 再次被访问的时间最长。
进程运行时,先将 7,0,1 三个页面装入内存。当进程要访问页面 2 时,产生缺页中断,会将页面 7 换出,因为页面 7 再次被访问的时间最长。
### 2. 先进先出FIFO
@ -730,6 +730,6 @@ CSCAN 对 SCAN 进行了改动,要求磁头始终沿着一个方向移动。
# 参考资料
- Tanenbaum A S, Bos H. Modern operating systems[M]. Prentice Hall Press, 2014.
- 汤子瀛 , 哲凤屏 , 汤小丹 . 计算机操作系统 [M]. 西安电子科技大学出版社 , 2001.
- Bryant, R. E., & OHallaron, D. R. (2004). 深入理解计算机系统 .
- [ 进程间的几种通信方式 ](http://blog.csdn.net/yufaw/article/details/7409596)
- 汤子瀛, 哲凤屏, 汤小丹. 计算机操作系统[M]. 西安电子科技大学出版社, 2001.
- Bryant, R. E., & OHallaron, D. R. (2004). 深入理解计算机系统.
- [进程间的几种通信方式](http://blog.csdn.net/yufaw/article/details/7409596)