CS-Notes/notes/计算机操作系统.md

740 lines
21 KiB
Markdown
Raw Normal View History

2018-02-20 10:40:05 +08:00
<!-- GFM-TOC -->
2018-02-22 14:47:22 +08:00
* [????? ????](#?????-????)
* [??????????????](#??????????????)
* [1. ????](#1-????)
* [2. ????](#2-????)
* [3. ????](#3-????)
* [4. ??](#4-??)
* [??????](#??????)
* [?<3F><>????](#?<3F><>????)
* [1. ???<3F><>?](#1-???<3F><>?)
* [2. ??](#2-??)
* [3. ????](#3-????)
* [??????????](#??????????)
* [1. ?????](#1-?????)
* [2. ????](#2-????)
* [????? ???????](#?????-???????)
* [?????????](#?????????)
* [1. ????](#1-????)
* [2. ???](#2-???)
* [3. ????](#3-????)
* [?????????<3F><>?](#?????????<3F><>?)
* [??????](#??????)
* [1. ?????????<3F><>????](#1-?????????<3F><>????)
* [1.1 ?????????FCFS??](#11-?????????fcfs??)
* [1.2 ??????????SJF??](#12-??????????sjf??)
* [1.3 ??????????????SRTN??](#13-??????????????srtn??)
* [2. ????????<3F><>????](#2-????????<3F><>????)
* [2.1 ?????????](#21-?????????)
* [2.2 ???????](#22-???????)
* [2.3 ??????????](#23-??????????)
* [2.4 ?????????](#24-?????????)
* [3. ?????<3F><>????](#3-?????<3F><>????)
* [???????](#???????)
* [1. ?????](#1-?????)
* [2. ???????](#2-???????)
* [3. ?????](#3-?????)
* [4. ???](#4-???)
* [???????](#???????)
* [1. ???](#1-???)
* [2. ?????](#2-?????)
* [3. ???????](#3-???????)
* [4. ???](#4-???)
* [5. ???????](#5-???????)
* [6. ?????](#6-?????)
* [???????????](#???????????)
* [1. ????-<2D><>??????](#1-????-<2D><>??????)
* [2. ????????????](#2-????????????)
* [?????? ????](#??????-????)
* [??????????](#??????????)
* [???????????](#???????????)
* [1. ???????](#1-???????)
* [2. ???????](#2-???????)
* [2.1 ???????????](#21-???????????)
* [2.2 ???????????????](#22-???????????????)
* [2.3 ??????????????](#23-??????????????)
* [2.4 ?????<3F><>???](#24-?????<3F><>???)
* [3. ????????](#3-????????)
* [3.1 ?????](#31-?????)
* [3.2 ????????????<3F><>???](#32-????????????<3F><>???)
* [3.3 ???????????<3F><>???](#33-???????????<3F><>???)
* [4. ????????????????](#4-????????????????)
* [4.1 ?????????](#41-?????????)
* [4.2 ???????](#42-???????)
* [?????? ?<3F><>??????](#??????-?<3F><>??????)
* [???????](#???????)
* [???????](#???????)
* [1. ???](#1-???)
* [2. ???](#2-???)
* [3. ????](#3-????)
* [4. ???????????](#4-???????????)
* [????????](#????????)
* [1. ????Optimal??](#1-????optimal??)
* [2. ????????FIFO??](#2-????????fifo??)
* [3. ??????<3F><>????LRU??Least Recently Used??](#3-??????<3F><>????lru??least-recently-used??)
* [4. ????Clock??](#4-????clock??)
* [?????? ?<3F><>????](#??????-?<3F><>????)
* [?????????](#?????????)
* [1. ?????????FCFS??First Come First Serverd??](#1-?????????fcfs??first-come-first-serverd??)
* [2. ??????????????SSTF??Shortest Seek Time First??](#2-??????????????sstf??shortest-seek-time-first??)
* [3. ???????SCAN??](#3-???????scan??)
* [4. ??????????CSCAN??](#4-??????????cscan??)
* [?<3F><>?????](#?<3F><>?????)
2018-02-20 10:40:05 +08:00
<!-- GFM-TOC -->
2018-02-22 14:47:22 +08:00
# ????? ????
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
## ??????????????
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
### 1. ????
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
???????????????????????????????<3F><>??????????????????????????<3F><>????<3F><>
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
????????????????????????????????
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
???????????????????????<3F><>?????????????<3F><>?
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
### 2. ????
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
??????????<3F><>?????????????????????????<3F><>?
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
?????????????????????????
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
????????????????????????????????????????????????????????????????????????????????????????????????
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
### 3. ????
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
??????????????????????????????<3F>^??????????????????????<3F><>?????????<3F><>???????????????????????????????????????????????<3F><>????????????????????<3F><>???????????????<3F><>?????????????<3F><>?????????????<3F><>???????????<3F><>???
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
### 4. ??
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
???????????????????????????????????????????????????????
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
## ??????
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
???????????????????????????????<3F><>?????????????????????????????????????????<3F><>?
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
???????????????????????<3F><>???????????????????????????<3F><>????????
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
## ?<3F><>????
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
### 1. ???<3F><>?
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
?? CPU ???????????????????? I/O ?????<3F><>??????<3F><>????/????????????????????????????????????/????????????????<3F><>????????<3F><>???
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
### 2. ??
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
?? CPU ????????????????????????????????<3F><>??????????
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
### 3. ????
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
???????????????????<3F><>?
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
## ??????????
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
### 1. ?????
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
????????????????????????????????????????????????<3F>s???????????<3F><>????????
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
### 2. ????
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????<3F><>?????????????????????
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
# ????? ???????
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
## ?????????
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
### 1. ????
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
????????????????????????????<3F><>??
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
???????? (Process Control Block, PCB) ???????????????????????????<3F><>????????????????????????? PCB ???????
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
### 2. ???
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
???????<3F><>????<3F><>?????????????????????<3F><>???????????<3F><>?????????????????<3F><>????????????????
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
### 3. ????
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
?? ???????????????????????????<3F><>?????????????????????????????????????????
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
?? ???????????????????????<3F><>???????????<3F><>??????<3F><>?????????????<3F><>???????????????????<3F><>?????????????<3F><>?????????????????<3F><>???
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
?? ?????????????????????????????????????????????????????I/O ?<3F><>???????????????????????????????????????????????????????<3F><>????<3F><>?????<3F>p?????<3F><>??? CPU ????????<3F>p???????? CPU ?????????<3F><>???????<3F><>????<3F>b???????????????????????????<3F><>??????????????????????????????????????????<3F><>????????????????????????????????????????????
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
?? ?????<3F><>???????? (IPC) ?????????????????<3F><>?????????????????????????????????????/<2F><>????????<3F><>?????????????????????
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
??????QQ ?? ??????????????????????????????<3F><>?????????? http ????????????????????????????????????????????????<3F><>????????????????? http ???????????????????????????????????
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
## ?????????<3F><>?
2018-02-20 10:40:05 +08:00
![](https://github.com/CyC2018/InterviewNotes/blob/master/pics/1706ce58-a081-4fed-9b36-c3c0d7e22b3a.jpg)
2018-02-22 14:47:22 +08:00
????????????????????????????????????????????????????? CPU????? CPU ????????????????????????
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
??<3F><>????????????????????????????????????????????????????????????????? CPU ????????????????????????????????????? CPU ??????????????????????????????<3F><>????
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
## ??????
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
?????????????????????????
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
### 1. ?????????<3F><>????
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
#### 1.1 ?????????FCFS??
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
first-come first-serverd??
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
?????????????????<3F><>??????
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
??????????????????????????????????????????????????????????????<3F><>???????????????<3F><>?????????????????????????
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
#### 1.2 ??????????SJF??
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
shortest job first??
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
???????????????????????
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
??????<3F><>????????????????????????????????????????<3F><>??????????????????????<3F><>????????
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
#### 1.3 ??????????????SRTN??
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
shortest remaining time next??
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
### 2. ????????<3F><>????
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
#### 2.1 ?????????
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
???????????????????????????????????????????????????????????????????????????
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
????? = (?????? + ?????????) / ????????? = ?????? / ?????????
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
??????????????????? SJF ?<3F><>????????????????????????????????????????????????????
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
#### 2.2 ???????
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
?????<3F><>???????? FCFS ??????????????<3F><>???<3F><>???????? CPU ????????????????????????????????????????????????????????????<3F><>????????????????????<3F><>??????????????????<3F><>??<3F><>?????????? CPU ??????????????
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
???????????<3F><>????????<3F><>???????????<3F><>????<3F><>??????????????????????????????????????????????????<3F><>?????????????<3F><>????????????
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
#### 2.3 ??????????
2018-02-20 10:40:05 +08:00
![](https://github.com/CyC2018/InterviewNotes/blob/master/pics/042cf928-3c8e-4815-ae9c-f2780202c68f.png)
2018-02-22 14:47:22 +08:00
?? ?????????????<3F><>???????????<3F><>??<3F>M??????????????????<3F><>??????????????????<3F><>????????????<3F><>??????????????????????????????<3F><>?????????????<3F><>?????????????????????????<3F><>????????????<3F><>????????????<3F><>??
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
?? ?????????????????????????????????<3F><>??<3F><>???? FCFS ???????????????????????????????????????????????????????????????????????????????????<3F><>????????????????????????????<3F><>??<3F><>??
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
?? ????? i -1 ?????<3F><>????????????? i ?????<3F><>???????<3F><>?
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
????????????????<3F><>????????????
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
#### 2.4 ?????????
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
### 3. ?????<3F><>????
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
????????????????????????????????????
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
?????????????????????????????????????????????????????
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
## ???????
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
### 1. ?????
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
???????????<3F><>??????<3F><>????????????
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
?????????????????????????????????????????????<3F><>?<3F><>
2018-02-20 10:40:05 +08:00
```html
// entry section
// critical section;
// exit section
```
2018-02-22 14:47:22 +08:00
### 2. ???????
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
????????????????????<3F><>??????????????????????????????????????????
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
????????????????????????????????????????????????????
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
### 3. ?????
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
**???????Samaphore??**???????????????????????? down ?? up ???????????????? P ?? V ??????
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
- **down** : ???????????? 0 ????? - 1 ?????????????????? 0???????????????????????? 0??
- **up**???????????? + 1 ????????????????????????????? down ??????
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
down ?? up ????????????????????????????????????????<3F><>??????????????<3F><>??
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
???????????????? 0 ???? 1???????????**????????Mutex??**??0 ?????????????????1 ??????????????
2018-02-20 10:40:05 +08:00
```c
typedef int samaphore;
samaphore mutex = 1;
void P1() {
down(mutex);
2018-02-22 14:47:22 +08:00
// ?????
2018-02-20 10:40:05 +08:00
up(mutex);
}
void P2() {
down(mutex);
2018-02-22 14:47:22 +08:00
// ?????
2018-02-20 10:40:05 +08:00
up(mutex);
}
```
2018-02-22 14:47:22 +08:00
**?????????????????-??????????**
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
???????????? mutex ?????????????<3F><>????empty ??????????????????full ???????????????????
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
???????????? down ??????????????????????????????????????????????????????????????????? down ???????????????????????????????????????? down(empty) ?????????? empty = 0?????????????????????????????????????????????????????????????????????? up(empty) ??????????????????????????????????
2018-02-20 10:40:05 +08:00
```c
#define N 100
typedef int samaphore;
samaphore mutex = 1;
samaphore empty = N;
samaphore full = 0;
void producer() {
while(TRUE){
int item = produce_item;
down(empty);
down(mutex);
insert_item(item);
up(mutex);
up(full);
}
}
void consumer() {
while(TRUE){
down(full);
down(mutex);
int item = remove_item(item);
up(mutex);
up(empty);
consume_item(item);
}
}
```
2018-02-22 14:47:22 +08:00
### 4. ???
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
???????????????????????????????????????????????????????????????????????????????????????????????????????????
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
c ?????????????????????????????? Pascal ??????????????????????<3F><>??????? insert() ?? remove() ??????????????????????????????????????????-??????????
2018-02-20 10:40:05 +08:00
```html
monitor ProducerConsumer
integer i;
condition c;
procedure insert();
begin
end;
procedure remove();
begin
end;
end monitor;
```
2018-02-22 14:47:22 +08:00
??????????????????????????????????????<3F><>??????????????????<3F><>??????????<3F><>??????????????????????????????????????<3F><>???
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
????????? **????????** ????????????**wait()** ?? **signal()** ??????????????????????????? wait() ?????????????????????????<3F><>????????????????<3F><>?signal() ??????????????????????
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
**??<3F><>???????????-??????????**
2018-02-20 10:40:05 +08:00
```html
monitor ProducerConsumer
condition full, empty;
integer count := 0;
condition c;
procedure insert(item: integer);
begin
if count = N then wait(full);
insert_item(item);
count := count + 1;
if count = 1 ten signal(empty);
end;
function remove: integer;
begin
if count = 0 then wait(empty);
remove = remove_item;
count := count - 1;
if count = N -1 then signal(full);
end;
end monitor;
procedure producer
begin
while true do
begin
item = produce_item;
ProducerConsumer.insert(item);
end
end;
procedure consumer
begin
while true do
begin
item = ProducerConsumer.remove;
consume_item(item);
end
end;
```
2018-02-22 14:47:22 +08:00
## ???????
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
??????????????????????????????????????????????????????????????????????????????????????
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
### 1. ???
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
??????????????????????????????<3F><>?????????????????????????????????????????????????????<3F><>??????????<3F><>??<3F><>???????????????????????????????????????????????????????????????????????<3F><>?????
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
???????????????????????????????????????????<3F><>??????????????????????????????????????????????<3F><>????????????????????????????????<3F><>?????????????
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
Linux ?<3F><>??????????????????
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
??????????
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
?? ?????????????????????????????????????????????????????????????????????
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
?? ????????????????????????????
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
?? ?????????????????????????????????????????????
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
### 2. ?????
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????<3F><>?
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
### 3. ???????
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
??????<3F><>?????????????????????????????????????????????<3F><>????????
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
### 4. ???
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
?????????????????????????????????????????????????
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
### 5. ???????
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
????????????????????????????????????<3F><>??<3F><>??????????????????????????????????????????????????? IPC ??????????????????????????????<3F><>??????????????????????????????????????????????????????????????????
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
### 6. ?????
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
?????????????????????????????????????????????????????????????????
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
## ???????????
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
??????????????????????????????
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
### 1. ????-<2D><>??????
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
????????????????????<3F><>???????????????????<3F><>???<3F><>??<3F><>????????????
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
?????????? count ????????????<3F><>????????????????????????? count_mutex ????? count ??????????????? data_mutex ??????<3F><>???????????
2018-02-20 10:40:05 +08:00
```c
typedef int semaphore;
semaphore count_mutex = 1;
semaphore data_mutex = 1;
int count = 0;
void reader() {
while(TRUE) {
down(count_mutex);
count++;
2018-02-22 14:47:22 +08:00
if(count == 1) down(data_mutex); // ????????????????????<3F><>????????<3F><>???????
2018-02-20 10:40:05 +08:00
up(count_mutex);
read();
down(count_mutex);
count--;
if(count == 0) up(data_mutex);
up(count_mutex);
}
}
void writer() {
while(TRUE) {
down(data_mutex);
write();
up(data_mutex);
}
}
```
2018-02-22 14:47:22 +08:00
### 2. ????????????
2018-02-20 10:40:05 +08:00
![](https://github.com/CyC2018/InterviewNotes/blob/master/pics/a9077f06-7584-4f2b-8c20-3a8e46928820.jpg)
2018-02-22 14:47:22 +08:00
????????<3F><>???????????????????????????????????????????????????????????????????????????????????????????????????????
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
???????????????????????????????????????????????????????????????????????????????
2018-02-20 10:40:05 +08:00
```c
#define N 5
#define LEFT (i + N - 1) % N
#define RIGHT (i + N) % N
typedef int semaphore;
semaphore chopstick[N];
void philosopher(int i) {
while(TURE){
think();
down(chopstick[LEFT[i]]);
down(chopstick[RIGHT[i]]);
eat();
up(chopstick[RIGHT[i]]);
up(chopstick[LEFT[i]]);
}
}
```
2018-02-22 14:47:22 +08:00
???????????????????????????????????????????????????????????????????????????????????????????<3F><>????????
2018-02-20 10:40:05 +08:00
```c
semaphore mutex = 1;
void philosopher(int i) {
while(TURE){
think();
down(mutex);
down(chopstick[LEFT[i]]);
down(chopstick[RIGHT[i]]);
up(mutex);
eat();
down(mutex);
up(chopstick[RIGHT[i]]);
up(chopstick[LEFT[i]]);
up(mutex);
}
}
```
2018-02-22 14:47:22 +08:00
# ?????? ????
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
## ??????????
2018-02-20 10:40:05 +08:00
![](https://github.com/CyC2018/InterviewNotes/blob/master/pics/c037c901-7eae-4e31-a1e4-9d41329e5c3e.png)
2018-02-22 14:47:22 +08:00
1. ????
2. ????????????????????????????????????????????????????
3. ???????
4. ??<3F><>???
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
## ???????????
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
### 1. ???????
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
????????????????????????????
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
?????????????
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
### 2. ???????
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
????????????????????????
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
#### 2.1 ???????????
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
?????????????????????????????????????<3F><>????????????????????????????????????
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
#### 2.2 ???????????????
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
??????????<3F><>???<3F><>??????????????????????????????
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
#### 2.3 ??????????????
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
#### 2.4 ?????<3F><>???
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
????????????????????????????????????
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
### 3. ????????
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
??????????????????????
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
#### 3.1 ?????
2018-02-20 10:40:05 +08:00
![](https://github.com/CyC2018/InterviewNotes/blob/master/pics/ed523051-608f-4c3f-b343-383e2d194470.png)
2018-02-22 14:47:22 +08:00
? a ?????? has ???????<3F><>?????????????? max ??????????????????free ??????<3F><>????????????????? a ????????????? B ????????????????????<3F><>???????? B????? free ??? 4??????????????????? C ?? A????????<3F><>???????????<3F><>????????? a ??????????????
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
???<3F><>?????????????????????????<3F><>??????????????????????????????????????????????????????????????????????????
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
#### 3.2 ????????????<3F><>???
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
???<3F><>????????<3F><>???????????????????????????????????????<3F><>?????????????????????????????????????????????????
2018-02-20 10:40:05 +08:00
![](https://github.com/CyC2018/InterviewNotes/blob/master/pics/d160ec2e-cfe2-4640-bda7-62f53e58b8c0.png)
2018-02-22 14:47:22 +08:00
??? c ????????????????????????????????????? c ?<3F><>?????
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
#### 3.3 ???????????<3F><>???
2018-02-20 10:40:05 +08:00
![](https://github.com/CyC2018/InterviewNotes/blob/master/pics/62e0dd4f-44c3-43ee-bb6e-fedb9e068519.png)
2018-02-22 14:47:22 +08:00
????????????????????????????????????????????????????????????????????????? E??P ??? A ???????????????????????????????????????????????????????????????????? A=(1020)????? 4 ??????????? 1/0/2/0??
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
?????????????????????
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
?? ????????????????????<3F><>????????? A??????????????????<3F><>?????????????????????????????
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
?? ?????????????<3F><>????????????????????????????????? A ?<3F><>?
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
?? ???????????????????<3F><>????????????????????????
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
### 4. ????????????????
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
??????????????????????????????????????????<3F><>????
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
#### 4.1 ?????????
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
?????????????????????????????????????????????????????????<3F><>????????<3F><>????????????????????????????????????<3F><>?
2018-02-20 10:40:05 +08:00
![](https://github.com/CyC2018/InterviewNotes/blob/master/pics/e1eda3d5-5ec8-4708-8e25-1a04c5e11f48.png)
2018-02-22 14:47:22 +08:00
????<3F><>??????????????????????????????????????
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
E ?????????????
A ??????????????
C ???????????????<3F><>?????????????<3F><>????????????????????????
R ???????????????????????
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
???? P<sub>1</sub> ?? P<sub>2</sub> ?????????????<3F><>?????????<3F><>??? P<sub>3</sub> ??????? P<sub>3</sub> ??<3F><>??????? P<sub>3</sub> ??<3F><>????????? A = (2 2 2 0)??P<sub>1</sub> ??????<3F><>???<3F><>???? P<sub>1</sub> ??<3F><>?????? A = (4 2 2 2) ??P<sub>2</sub> ???????<3F><>????<3F><>?????????????<3F><>??????????
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
??????????
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
???????????????????????<3F><>????<3F><>????????????????????<3F><>???<3F><>????????????????????
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
?? ????????<3F><>?????? P<sub>i</sub>??????????????<3F><>????? A??
?? ????????????????????????? C ?????? i ????????? A ?<3F><>?????????????? ???
?? ???????????????????????????
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
#### 4.2 ???????
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
?? ??????????
?? ???????
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
# ?????? ?<3F><>??????
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
## ???????
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
????????????????????????????????????<3F><>??????? ?????<3F><>????????????<3F><>??????????????????????<3F><>???????????????????????????<3F><>?
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
??????????????????????????<3F><>????????????????????<3F><>??????????????????????????????????<3F><>????????????????????????????????????<3F>g?????????????<3F><>
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
## ???????
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
### 1. ???
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
??????????????????????????<3F><>?????????????????????????????????????<3F><>??????<3F><>?????????????????????????????????<3F><>?????????????????????????????????????????
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
### 2. ???
2018-02-20 10:40:05 +08:00
![](https://github.com/CyC2018/InterviewNotes/blob/master/pics/22de0538-7c6e-4365-bd3b-8ce3c5900216.png)
2018-02-22 14:47:22 +08:00
??????????????????????<3F><>??????????? 4 ????????????????????<3F><>?????????????????????????????????????????
2018-02-20 10:40:05 +08:00
![](https://github.com/CyC2018/InterviewNotes/blob/master/pics/e0900bb2-220a-43b7-9aa9-1d5cd55ff56e.png)
2018-02-22 14:47:22 +08:00
??<3F><>???????????????<3F><>?????<3F><>?????????????????????<3F><>????????????????????
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
????<3F><>????????????????
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
### 3. ????
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
?<3F><>?<3F><>?????????????????<3F><>???????????????????<3F><>????????????<3F><>????????????????????????<3F><>??????<3F><>?????????
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
?<3F><>??????????????????<3F><>???????????????????????<3F><>????<3F><>?<3F><>???????????<3F><>????????????????????????????<3F><>????????????????????????
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
### 4. ???????????
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
?? ???????????????????????????????????????????????<3F><>?
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
?? ??????????????????????????????????
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
?? ??<3F><>????????????<3F><>??????<3F><>??<3F><>?????????
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
?? ??????????????????????????<3F><>?????????????????????????????????????????????????????????????????????????????
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
## ????????
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
????????<3F><>????<3F><>???????????????<3F><>????????????????????<3F><>?????????????<3F><>????????????????<3F><>????????<3F><>?????????<3F><>???????????????????????????<3F><>?????????????????????????????????????????????????
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
### 1. ????Optimal??
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
???????????????<3F><>???????????????????????????????????????
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
????????????????????????????????????????????
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
??????????????????????????????<3F><>??????????????????<3F><>?
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
7??0??1??2??0??3??0??4??2??3??0??3??2??1??2??0??1??7??0??1
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
?????????????? 7,0,1 ????????????<3F><>?????????????? 2 ??????????<3F><>??????? 7 ???????????? 7 ??<3F><>?????????????
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
### 2. ????????FIFO??
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
???????????????????????<3F><>
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
????????<3F><>????????????????????????????????????
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
### 3. ??????<3F><>????LRU??Least Recently Used??
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
???????????????????????????????????????????????????LRU ????????<3F><>??????<3F>I????
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
???????????????????<3F>՛<EFBFBD>???????????????????????????????????????????????????????????????????????????????????????????????????????<3F><>??????????????????????
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
4??7??0??7??1??0??1??2??1??2??6
2018-02-20 10:40:05 +08:00
![](https://github.com/CyC2018/InterviewNotes/blob/master/pics/eb859228-c0f2-4bce-910d-d9f76929352b.png)
2018-02-22 14:47:22 +08:00
### 4. ????Clock??
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
Clock ?????????????????????<3F><>?????????<3F>R????????????????? 1??
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
???????????<3F><>??????????????????????<3F><>??????<3F><>?????????<3F>n????????????????<3F><>?????????<3F><>? 0?????????<3F>I???????????????<3F><>????? 0????????????<3F><>???????????????<3F><>
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
# ?????? ?<3F><>????
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
## ?????????
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
??????????????????????????????<3F><>?????????????????????????????????????????????????????????
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
### 1. ?????????FCFS??First Come First Serverd??
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
?????????????????????????????<3F><>?????????????????????????????<3F><>????????<3F><>???????????????????????
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
### 2. ??????????????SSTF??Shortest Seek Time First??
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
????????????????????????????????????<3F><>???????????????????????????????????? FCFS ?<3F><>??
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
### 3. ???????SCAN??
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
SSTF ???????<3F><>???????????????????????????????????????????????????????????????????????????????????????????????
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
SCAN ???? SSTF ????????????????????????????????????????????????????????????????????????????????????????????????????????????????
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
??????????????????????????????????????????????????????????????????????????<3F><>????????? SCAN ??????????????
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
### 4. ??????????CSCAN??
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
CSCAN ?? SCAN ??????????????????????????????????
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
# ?<3F><>?????
2018-02-20 10:40:05 +08:00
- Tanenbaum A S, Bos H. Modern operating systems[M]. Prentice Hall Press, 2014.
2018-02-22 14:47:22 +08:00
- ?????, ?????, ??<3F><>??. ???????????[M]. ???????????????????, 2001.
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
- Bryant, R. E., & O??Hallaron, D. R. (2004). ?????????????.
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
- [<EFBFBD><EFBFBD>???????????????](http://wdxtub.com/interview/index.html)
2018-02-20 10:40:05 +08:00
2018-02-22 14:47:22 +08:00
- [??????????????](http://blog.csdn.net/yufaw/article/details/7409596)