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 )