* [????? ????](#?????-????)
* [??????????????](#??????????????)
* [1. ????](#1-????)
* [2. ????](#2-????)
* [3. ????](#3-????)
* [4. ??](#4-??)
* [??????](#??????)
* [?忪????](#?忪????)
* [1. ???忪?](#1-???忪?)
* [2. ??](#2-??)
* [3. ????](#3-????)
* [??????????](#??????????)
* [1. ?????](#1-?????)
* [2. ????](#2-????)
* [????? ???????](#?????-???????)
* [?????????](#?????????)
* [1. ????](#1-????)
* [2. ???](#2-???)
* [3. ????](#3-????)
* [?????????抖?](#?????????抖?)
* [??????](#??????)
* [1. ?????????快????](#1-?????????快????)
* [1.1 ?????????FCFS??](#11-?????????fcfs??)
* [1.2 ??????????SJF??](#12-??????????sjf??)
* [1.3 ??????????????SRTN??](#13-??????????????srtn??)
* [2. ????????快????](#2-????????快????)
* [2.1 ?????????](#21-?????????)
* [2.2 ???????](#22-???????)
* [2.3 ??????????](#23-??????????)
* [2.4 ?????????](#24-?????????)
* [3. ?????快????](#3-?????快????)
* [???????](#???????)
* [1. ?????](#1-?????)
* [2. ???????](#2-???????)
* [3. ?????](#3-?????)
* [4. ???](#4-???)
* [???????](#???????)
* [1. ???](#1-???)
* [2. ?????](#2-?????)
* [3. ???????](#3-???????)
* [4. ???](#4-???)
* [5. ???????](#5-???????)
* [6. ?????](#6-?????)
* [???????????](#???????????)
* [1. ????-忱??????](#1-????-忱??????)
* [2. ????????????](#2-????????????)
* [?????? ????](#??????-????)
* [??????????](#??????????)
* [???????????](#???????????)
* [1. ???????](#1-???????)
* [2. ???????](#2-???????)
* [2.1 ???????????](#21-???????????)
* [2.2 ???????????????](#22-???????????????)
* [2.3 ??????????????](#23-??????????????)
* [2.4 ?????﹞???](#24-?????﹞???)
* [3. ????????](#3-????????)
* [3.1 ?????](#31-?????)
* [3.2 ????????????技???](#32-????????????技???)
* [3.3 ???????????技???](#33-???????????技???)
* [4. ????????????????](#4-????????????????)
* [4.1 ?????????](#41-?????????)
* [4.2 ???????](#42-???????)
* [?????? ???????](#??????-???????)
* [???????](#???????)
* [???????](#???????)
* [1. ???](#1-???)
* [2. ???](#2-???)
* [3. ????](#3-????)
* [4. ???????????](#4-???????????)
* [????????](#????????)
* [1. ????Optimal??](#1-????optimal??)
* [2. ????????FIFO??](#2-????????fifo??)
* [3. ??????汛????LRU??Least Recently Used??](#3-??????汛????lru??least-recently-used??)
* [4. ????Clock??](#4-????clock??)
* [?????? ?蘟????](#??????-?蘟????)
* [?????????](#?????????)
* [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??)
* [?羊?????](#?羊?????)
# ????? ????
## ??????????????
### 1. ????
???????????????????????????????忪??????????????????????????忪????
????????????????????????????????
???????????????????????車?????????????妊?
### 2. ????
??????????快?????????????????????????芍?
?????????????????????????
????????????????????????????????????????????????????????????????????????????????????????????????
### 3. ????
??????????????????????????????^??????????????????????邦?????????邦???????????????????????????????????????????????邦????????????????????忱???????????????妊?????????????抖?????????????忪???????????忱???
### 4. ??
???????????????????????????????????????????????????????
## ??????
???????????????????????????????宏?????????????????????????????????????????阱?
???????????????????????蘟???????????????????????????????????
## ?忪????
### 1. ???忪?
?? CPU ???????????????????? I/O ?????忪??????蘟????/????????????????????????????????????/????????????????忪????????忪???
### 2. ??
?? CPU ??????????????????????????????????????????
### 3. ????
???????????????????芍?
## ??????????
### 1. ?????
????????????????????????????????????????????????s???????????抗????????
### 2. ????
????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????抖?????????????????????
# ????? ???????
## ?????????
### 1. ????
????????????????????????????竹??
???????? (Process Control Block, PCB) ???????????????????????????糸????????????????????????? PCB ???????
### 2. ???
???????扭????忪?????????????????????竹???????????快?????????????????孝????????????????
### 3. ????
?? ???????????????????????????竹?????????????????????????????????????????
?? ???????????????????????竹???????????孝??????抖?????????????抖???????????????????抖?????????????快?????????????????抖???
?? ?????????????????????????????????????????????????????I/O ?蘟???????????????????????????????????????????????????????扶????抖?????p?????扶??? CPU ????????p???????? CPU ?????????芍???????抖????匒???????????????????????????妊??????????????????????????????????????????宏????????????????????????????????????????????
?? ?????塽???????? (IPC) ?????????????????汍?????????????????????????????????????/忱????????曳?????????????????????
??????QQ ?? ??????????????????????????????抗?????????? http ????????????????????????????????????????????????快????????????????? http ???????????????????????????????????
## ?????????抖?
![](https://github.com/CyC2018/InterviewNotes/blob/master/pics/1706ce58-a081-4fed-9b36-c3c0d7e22b3a.jpg)
????????????????????????????????????????????????????? CPU????? CPU ????????????????????????
??抉????????????????????????????????????????????????????????????????? CPU ????????????????????????????????????? CPU ??????????????????????????????汍????
## ??????
?????????????????????????
### 1. ?????????快????
#### 1.1 ?????????FCFS??
first-come first-serverd??
?????????????????快??????
??????????????????????????????????????????????????????????????孝???????????????抗?????????????????????????
#### 1.2 ??????????SJF??
shortest job first??
???????????????????????
??????扭????????????????????????????????????????忪??????????????????????辰????????
#### 1.3 ??????????????SRTN??
shortest remaining time next??
### 2. ????????快????
#### 2.1 ?????????
???????????????????????????????????????????????????????????????????????????
????? = (?????? + ?????????) / ????????? = ?????? / ?????????
??????????????????? SJF ?忍????????????????????????????????????????????????????
#### 2.2 ???????
?????抉???????? FCFS ??????????????孝???汍???????? CPU ????????????????????????????????????????????????????????????忪????????????????????孝??????????????????快??汕?????????? CPU ??????????????
???????????完????????抗???????????糸????抖??????????????????????????????????????????????????抖?????????????抖????????????
#### 2.3 ??????????
![](https://github.com/CyC2018/InterviewNotes/blob/master/pics/042cf928-3c8e-4815-ae9c-f2780202c68f.png)
?? ?????????????孝???????????我??愐??????????????????快??????????????????忱????????????快??????????????????????????????扶?????????????妊?????????????????????????孝????????????梀????????????妊??
?? ?????????????????????????????????快??汕???? FCFS ???????????????????????????????????????????????????????????????????????????????????汛????????????????????????????快??汕??
?? ????? i -1 ?????抉????????????? i ?????快???????妊?
????????????????忪????????????
#### 2.4 ?????????
### 3. ?????快????
????????????????????????????????????
?????????????????????????????????????????????????????
## ???????
### 1. ?????
???????????戒??????汛????????????
?????????????????????????????????????????????技?
```html
// entry section
// critical section;
// exit section
```
### 2. ???????
????????????????????孝??????????????????????????????????????????
????????????????????????????????????????????????????
### 3. ?????
**???????Samaphore??**???????????????????????? down ?? up ???????????????? P ?? V ??????
- **down** : ???????????? 0 ????? - 1 ?????????????????? 0???????????????????????? 0??
- **up**???????????? + 1 ????????????????????????????? down ??????
down ?? up ????????????????????????????????????????宏??????????????忪??
???????????????? 0 ???? 1???????????**????????Mutex??**??0 ?????????????????1 ??????????????
```c
typedef int samaphore;
samaphore mutex = 1;
void P1() {
down(mutex);
// ?????
up(mutex);
}
void P2() {
down(mutex);
// ?????
up(mutex);
}
```
**?????????????????-??????????**
???????????? mutex ?????????????戒????empty ??????????????????full ???????????????????
???????????? down ??????????????????????????????????????????????????????????????????? down ???????????????????????????????????????? down(empty) ?????????? empty = 0?????????????????????????????????????????????????????????????????????? up(empty) ??????????????????????????????????
```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);
}
}
```
### 4. ???
???????????????????????????????????????????????????????????????????????????????????????????????????????????
c ?????????????????????????????? Pascal ??????????????????????快??????? insert() ?? remove() ??????????????????????????????????????????-??????????
```html
monitor ProducerConsumer
integer i;
condition c;
procedure insert();
begin
end;
procedure remove();
begin
end;
end monitor;
```
??????????????????????????????????????迄??????????????????快??????????迄??????????????????????????????????????迄???
????????? **????????** ????????????**wait()** ?? **signal()** ??????????????????????????? wait() ?????????????????????????車????????????????妊?signal() ??????????????????????
**??迄???????????-??????????**
```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;
```
## ???????
??????????????????????????????????????????????????????????????????????????????????????
### 1. ???
??????????????????????????????妊?????????????????????????????????????????????????????忱??????????汕??忱???????????????????????????????????????????????????????????????????????宏?????
???????????????????????????????????????????忱??????????????????????????????????????????????忱????????????????????????????????忱?????????????
Linux ?抄??????????????????
??????????
?? ?????????????????????????????????????????????????????????????????????
?? ????????????????????????????
?? ?????????????????????????????????????????????
### 2. ?????
?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????曲?
### 3. ???????
??????扭?????????????????????????????????????????????妊????????
### 4. ???
?????????????????????????????????????????????????
### 5. ???????
??????????????????????????????????????牝??????????????????????????????????????????????????? IPC ??????????????????????????????完??????????????????????????????????????????????????????????????????
### 6. ?????
?????????????????????????????????????????????????????????????????
## ???????????
??????????????????????????????
### 1. ????-忱??????
????????????????????忪???????????????????忱???忱??忱????????????
?????????? count ????????????忪????????????????????????? count_mutex ????? count ??????????????? data_mutex ??????忱???????????
```c
typedef int semaphore;
semaphore count_mutex = 1;
semaphore data_mutex = 1;
int count = 0;
void reader() {
while(TRUE) {
down(count_mutex);
count++;
if(count == 1) down(data_mutex); // ????????????????????技????????忱???????
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);
}
}
```
### 2. ????????????
![](https://github.com/CyC2018/InterviewNotes/blob/master/pics/a9077f06-7584-4f2b-8c20-3a8e46928820.jpg)
????????朱???????????????????????????????????????????????????????????????????????????????????????????????????????
???????????????????????????????????????????????????????????????????????????????
```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]]);
}
}
```
???????????????????????????????????????????????????????????????????????????????????????????汛????????
```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);
}
}
```
# ?????? ????
## ??????????
![](https://github.com/CyC2018/InterviewNotes/blob/master/pics/c037c901-7eae-4e31-a1e4-9d41329e5c3e.png)
1. ????
2. ????????????????????????????????????????????????????
3. ???????
4. ??﹞???
## ???????????
### 1. ???????
????????????????????????????
?????????????
### 2. ???????
????????????????????????
#### 2.1 ???????????
?????????????????????????????????????朵????????????????????????????????????
#### 2.2 ???????????????
??????????梀???扶??????????????????????????????
#### 2.3 ??????????????
#### 2.4 ?????﹞???
????????????????????????????????????
### 3. ????????
??????????????????????
#### 3.1 ?????
![](https://github.com/CyC2018/InterviewNotes/blob/master/pics/ed523051-608f-4c3f-b343-383e2d194470.png)
? a ?????? has ???????快?????????????? max ??????????????????free ??????扭????????????????? a ????????????? B ????????????????????扶???????? B????? free ??? 4??????????????????? C ?? A????????扶???????????孝????????? a ??????????????
????????????????????????????扶??????????????????????????????????????????????????????????????????????????
#### 3.2 ????????????技???
???妊????????技???????????????????????????????????????忪?????????????????????????????????????????????????
![](https://github.com/CyC2018/InterviewNotes/blob/master/pics/d160ec2e-cfe2-4640-bda7-62f53e58b8c0.png)
??? c ????????????????????????????????????? c ?快?????
#### 3.3 ???????????技???
![](https://github.com/CyC2018/InterviewNotes/blob/master/pics/62e0dd4f-44c3-43ee-bb6e-fedb9e068519.png)
????????????????????????????????????????????????????????????????????????? E??P ??? A ???????????????????????????????????????????????????????????????????? A=(1020)????? 4 ??????????? 1/0/2/0??
?????????????????????
?? ????????????????????妊????????? A??????????????????孝?????????????????????????????
?? ?????????????孝????????????????????????????????? A ?妊?
?? ???????????????????扶????????????????????????
### 4. ????????????????
??????????????????????????????????????????抖????
#### 4.1 ?????????
?????????????????????????????????????????????????????????孝????????快????????????????????????????????????妊?
![](https://github.com/CyC2018/InterviewNotes/blob/master/pics/e1eda3d5-5ec8-4708-8e25-1a04c5e11f48.png)
????孝??????????????????????????????????????
E ?????????????
A ??????????????
C ???????????????快?????????????忪????????????????????????
R ???????????????????????
???? P1 ?? P2 ?????????????辰?????????扶??? P3 ??????? P3 ??孝??????? P3 ??快????????? A = (2 2 2 0)??P1 ??????孝???抗???? P1 ??快?????? A = (4 2 2 2) ??P2 ???????妊????扶?????????????孝??????????
??????????
???????????????????????抄????扭????????????????????百???忌????????????????????
?? ????????忌?????? Pi??????????????妊????? A??
?? ????????????????????????? C ?????? i ????????? A ?孝?????????????? ???
?? ???????????????????????????
#### 4.2 ???????
?? ??????????
?? ???????
# ?????? ???????
## ???????
??????????????????????????????????????????? ?????宏?????????????????????????????????????????????????????????????妊?
??????????????????????????快????????????????????忌??????????????????????????????????快????????????????????????????????????g?????????????
## ???????
### 1. ???
??????????????????????????妊???????????????????????????????????????????妊?????????????????????????????????孝?????????????????????????????????????????
### 2. ???
![](https://github.com/CyC2018/InterviewNotes/blob/master/pics/22de0538-7c6e-4365-bd3b-8ce3c5900216.png)
??????????????????????扶??????????? 4 ????????????????????‾?????????????????????????????????????????
![](https://github.com/CyC2018/InterviewNotes/blob/master/pics/e0900bb2-220a-43b7-9aa9-1d5cd55ff56e.png)
??汍???????????????曳?????牝?????????????????????汍????????????????????
????汎????????????????
### 3. ????
?‾?灰????????????????????????????????????竹????????????曳????????????????????????灰??????妊?????????
?‾??????????????????紫???????????????????????妊????????????????百????????????????????????????快????????????????????????
### 4. ???????????
?? ???????????????????????????????????????????????曲?
?? ??????????????????????????????????
?? ??妊????????????妊??????汍??妊?????????
?? ???????????????????????????????????????????????????????????????????????????????????????????????????????
## ????????
????????抄????孝???????????????笥?????????????????????????????????扭????????????????快?????????????????孝???????????????????????????妊?????????????????????????????????????????????????
### 1. ????Optimal??
??????????????????????????????????????????????????????
????????????????????????????????????????????
????????????????????????????????????????????????孝?
7??0??1??2??0??3??0??4??2??3??0??3??2??1??2??0??1??7??0??1
?????????????? 7,0,1 ????????????紫?????????????? 2 ??????????忪??????? 7 ???????????? 7 ??汐?????????????
### 2. ????????FIFO??
???????????????????????紫
????????宏????????????????????????????????????
### 3. ??????汛????LRU??Least Recently Used??
???????????????????????????????????????????????????LRU ????????汛??????I????
???????????????????忱???????????????????????????????????????????????????????????????????????????????????????????????????????汛??????????????????????
4??7??0??7??1??0??1??2??1??2??6
![](https://github.com/CyC2018/InterviewNotes/blob/master/pics/eb859228-c0f2-4bce-910d-d9f76929352b.png)
### 4. ????Clock??
Clock ?????????????????????竹?????????R????????????????? 1??
???????????快??????????????????????孝??????忪?????????蠼????????????????竹?????????竹? 0?????????I???????????????竹????? 0????????????汍???????????????
# ?????? ?蘟????
## ?????????
??????????????????????????????忱?????????????????????????????????????????????????????????
### 1. ?????????FCFS??First Come First Serverd??
?????????????????????????????快?????????????????????????????汛????????百???????????????????????
### 2. ??????????????SSTF??Shortest Seek Time First??
????????????????????????????????????快???????????????????????????????????? FCFS ?迆??
### 3. ???????SCAN??
SSTF ???????技???????????????????????????????????????????????????????????????????????????????????????????????
SCAN ???? SSTF ????????????????????????????????????????????????????????????????????????????????????????????????????????????????
??????????????????????????????????????????????????????????????????????????孝????????? SCAN ??????????????
### 4. ??????????CSCAN??
CSCAN ?? SCAN ??????????????????????????????????
# ?羊?????
- Tanenbaum A S, Bos H. Modern operating systems[M]. Prentice Hall Press, 2014.
- ?????, ?????, ??妊??. ???????????[M]. ???????????????????, 2001.
- Bryant, R. E., & O??Hallaron, D. R. (2004). ?????????????.
- [妊???????????????](http://wdxtub.com/interview/index.html)
- [??????????????](http://blog.csdn.net/yufaw/article/details/7409596)