auto commit

This commit is contained in:
CyC2018
2019-11-02 12:07:41 +08:00
parent 182e1440a4
commit bb6e0df82d
784 changed files with 7545 additions and 2827 deletions

View File

@ -87,19 +87,19 @@ QQ 和浏览器是两个进程,浏览器进程里面有很多线程,例如 H
批处理系统没有太多的用户操作在该系统中调度算法目标是保证吞吐量和周转时间从提交到终止的时间
**1.1 先来先服务 first-come first-serverdFCFS**
**1.1 先来先服务 first-come first-serverdFCFS**
非抢占式的调度算法按照请求的顺序进行调度
有利于长作业但不利于短作业因为短作业必须一直等待前面的长作业执行完毕才能执行而长作业又需要执行很长时间造成了短作业等待时间过长
**1.2 短作业优先 shortest job firstSJF**
**1.2 短作业优先 shortest job firstSJF**
非抢占式的调度算法按估计运行时间最短的顺序进行调度
长作业有可能会饿死处于一直等待短作业执行完毕的状态因为如果一直有短作业到来那么长作业永远得不到调度
**1.3 最短剩余时间优先 shortest remaining time nextSRTN**
**1.3 最短剩余时间优先 shortest remaining time nextSRTN**
最短作业优先的抢占式版本按剩余运行时间的顺序进行调度 当一个新的作业到达时其整个运行时间与当前进程的剩余时间作比较如果新的进程需要的时间更少则挂起当前进程运行新的进程否则新的进程等待
@ -107,7 +107,7 @@ QQ 和浏览器是两个进程,浏览器进程里面有很多线程,例如 H
交互式系统有大量的用户交互操作在该系统中调度算法的目标是快速地进行响应
**2.1 时间片轮转**
**2.1 时间片轮转**
将所有就绪进程按 FCFS 的原则排成一个队列每次调度时 CPU 时间分配给队首进程该进程可以执行一个时间片当时间片用完时由计时器发出时钟中断调度程序便停止该进程的执行并将它送往就绪队列的末尾同时继续把 CPU 时间分配给队首的进程
@ -118,13 +118,13 @@ QQ 和浏览器是两个进程,浏览器进程里面有很多线程,例如 H
<div align="center"> <img src="pics/8c662999-c16c-481c-9f40-1fdba5bc9167.png"/> </div><br>
**2.2 优先级调度**
**2.2 优先级调度**
为每个进程分配一个优先级按优先级进行调度
为了防止低优先级的进程永远等不到调度可以随着时间的推移增加等待进程的优先级
**2.3 多级反馈队列**
**2.3 多级反馈队列**
一个进程需要执行 100 个时间片如果采用时间片轮转调度算法那么需要交换 100
@ -165,12 +165,12 @@ QQ 和浏览器是两个进程,浏览器进程里面有很多线程,例如 H
信号量Semaphore是一个整型变量可以对其执行 down up 操作也就是常见的 P V 操作
- **down** : 如果信号量大于 0 执行 -1 操作如果信号量等于 0进程睡眠等待信号量大于 0
- **up** 对信号量执行 +1 操作唤醒睡眠的进程让其完成 down 操作
- **down** : 如果信号量大于 0 执行 -1 操作如果信号量等于 0进程睡眠等待信号量大于 0
- **up** 对信号量执行 +1 操作唤醒睡眠的进程让其完成 down 操作
down up 操作需要被设计成原语不可分割通常的做法是在执行这些操作的时候屏蔽中断
如果信号量的取值只能为 0 或者 1那么就成为了 **互斥量Mutex** 0 表示临界区已经加锁1 表示临界区解锁
如果信号量的取值只能为 0 或者 1那么就成为了 **互斥量Mutex** 0 表示临界区已经加锁1 表示临界区解锁
```c
typedef int semaphore;
@ -188,7 +188,7 @@ void P2() {
}
```
<font size=3> **使用信号量实现生产者-消费者问题** </font> </br>
<font size=3> **使用信号量实现生产者-消费者问题** </font> </br>
问题描述使用一个缓冲区来保存物品只有缓冲区没有满生产者才可以放入物品只有缓冲区不为空消费者才可以拿走物品
@ -253,9 +253,9 @@ end monitor;
管程有一个重要特性在一个时刻只能有一个进程使用管程进程在无法继续执行的时候不能一直占用管程否则其它进程永远不能使用管程
管程引入了 **条件变量** 以及相关的操作**wait()** **signal()** 来实现同步操作对条件变量执行 wait() 操作会导致调用进程阻塞把管程让出来给另一个进程持有signal() 操作用于唤醒被阻塞的进程
管程引入了 **条件变量** 以及相关的操作**wait()** **signal()** 来实现同步操作对条件变量执行 wait() 操作会导致调用进程阻塞把管程让出来给另一个进程持有signal() 操作用于唤醒被阻塞的进程
<font size=3> **使用管程实现生产者-消费者问题** </font><br>
<font size=3> **使用管程实现生产者-消费者问题** </font><br>
```pascal
// 管程