* [????? ????](#?????-????) * [??????????????](#??????????????) * [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)