iT邦幫忙

2

【小黑馬作業系統考古】範圍: 恐龍書第一章~第四章

<撰文緣由>: 作業系統是當今資工重要科目,
然而讀了上課講義、恐龍書,
卻無法有效檢測自己讀懂了沒,
即便於網上找了考古題,
卻苦於無人整理正確答案,
無法知道自己是否理解正確。

小馬將整理自己一學期來修課及準備考試的心路歷程,
期由【小黑馬作業系統考古】整理真實考試常出現的問題,
幫助莘莘學子準備作業系統科目。
(如有發現答案有錯可不吝告訴小馬,小馬不勝感激)

<整理範圍>: 恐龍書第一章~第四章,內容涵蓋:
Ch1 簡介-什麼是作業系統?中斷
Ch2 系統呼叫、常見OS結構
Ch3 行程(process)
Ch4 多執行緒程式 (multithread-programming)

<分析>: 此部分為對於作業系統的基礎介紹及初步認識,
相對於後面的章節而言,
出題比率較低,
觀念清楚了方能得心應手。

基礎自我檢測題

  • 選擇題: 用來執行電腦程式(process)的裝置稱為 (A)CPU (B)dispatcher (C)scheduler
  • 選擇題: I/O指令是什麼的縮寫? (A)In Order (B)Input/Output (C)India Ocean
  • 什麼是interrupt?
  • 什麼是context switch?
  • 什麼是system call?
  • 什麼是dual mode?

實戰演練(以下題目與答案間刻意留白,方便有心練習的人先思考後再對答案)

熱門題型一、interrupt相關概念

【清大博士班資格考- 2010春、2017春】
(1) What is the purpose of interrupts?
(2) What are the differences between a trap and an interrupt?
(3) Can traps be generated intentionally by a user program? If so, for what purpose?






答案解析:
(1) interrupts的目的是為了避免CPU空等,當程式有需要時,才主動去打斷CPU工作。
(2) trap 和 interrupt都是打斷CPU工作的「打斷源」,但trap通常指來自軟體的打斷,interrupt通常指來自硬體的打斷。
(3) 可以,當使用者呼叫system call的時候。(註: 這邊題目問說使用者會不會有需求而去製造trap打斷CPU工作,既然有其目的性,如果是使用者故意寫錯程式碼導致的trap應該就不在題目想問的範圍中)

【某課堂小考】
What is the interrupt vector?





答案解析:
它是存function pointer的vector,記錄當interrupt發生時,應該讓CPU呼叫哪個函數處理該interrupt。

【清大博士班資格考- 2011秋】
Please give short description for the following terms:
(a) preemptive and non –preemptive
(b) Interrupt and Trap
(c) Time sharing
(d) What is the relationship between (a) and (c)
(e) What is the relationship between (b) and (c)






答案解析: (由於問題a超出範圍,這邊暫且先寫b, c, e的解析)
(b) trap 和 interrupt都是打斷CPU工作的「打斷源」,但trap通常指來自軟體的打斷,interrupt通常指來自硬體的打斷。
(c) Time sharing指的是OS讓很多process可以同時執行的機制
(e) Time sharing 的系統會固定時間發送interrupt以觸發scheduler 做 context switch.
(註: (e)小題如果寫「因為很多process可以同時執行,所以必須在process有需要時,自己發送「打斷源」告訴CPU,避免CPU空等的情況」,這樣寫還不夠,因為Time sharing的特色是希望每隻程式都公平的執行到,所以interrupt應該指觸發scheduler 做 context switch的interrupt才對。)

熱門題型二、什麼是privileged instruction?

重點分析: privileged instruction(特權指令)是只能在kernal mode執行的受保護的指令,
學校期中考常常會來上這樣一題: 給你一堆指令,讓你判斷哪些是特權指令

【某學校期中考題】
下列哪些是特權指令?(複選)
(a)IO指令
(b)關掉interrupt
(c)軟體程式產生trap
(d)context switch
(e)寫記憶體
(f)讀取process 狀態






答案: (a)(b)(d)
(註: 會有同學想選(e)選項,感覺上「寫記憶體」是需要被保護的指令,但實際上「寫記憶體」這項指令並非由硬體保護,而是透過軟體page table的方式來保護,這邊跨第八章的觀念,由page table檢查程式欲寫的記憶體是否在自己可寫的page中)

熱門題型三、程式生命週期

【經常出現於OS的各大、小考試中】
說明: 這類型的問題通常會給你部分提示,要你把下圖「程式生命週期圖」完成。
https://ithelp.ithome.com.tw/upload/images/20191112/20117114yUH4wTXxEm.png

熱門題型四、thread與process的觀念比較

【某學校期中考題】
為什麼context switch在process的代價比thread高?






答案: 因為thread是輕量的process

【清大博士班資格考- 2016春】
Why creating a thread is faster than a process? (You need to be specific about what are the resources that do not need to be created in threads)





答案: thread之間共用的code segment及data segment
解析: 題目特別要求要寫出什麼是thread需要創建的東西而process不需創建。一支process裡面可以有很多threads,在同一支process中thread的變數是共用的,這些共用的變數即是創建thread時建的。

熱門題型五、process的創建計算

重點分析:

  • fork()可以自我複製一支process
  • execlp()被呼叫後,之後的程式碼都不再執行
  • 每支process會有自己的pid,但透過fork()複製出來的chlid process的pid是0

【清大博士班資格考- 2011春】
Including the initial parent process, how many processes are created by the program shown below?

https://ithelp.ithome.com.tw/upload/images/20191227/20117114FulcVJ3gQA.png






答案解析: 8支。
fork() 會自我複製一支子process,
所以應該有 2^3=8 支 process。

【清大102年期中考】
How many process are created in the following program?
https://ithelp.ithome.com.tw/upload/images/20191227/20117114zqLI45QIg8.png






答案解析: 6支。(下圖畫的是一種process可能的產生順序)
https://ithelp.ithome.com.tw/upload/images/20191227/201171143gM4QSKLjF.png

其它重點名詞解釋題

解析: 學會作業系統不光是死背,這類問題常會需要比較不同名詞觀念。

【清大101年期中考】
Briefly explain and compare the following terminologies:
(a) Multi-programming system vs. Time sharing system
(b) API vs. System call






答案解析:
(a)

  • Multi-programming system的目的是讓CPU不要空等,當一支程式在做I/O時換程式執行,增加CPU使用率。
  • Time sharing system 的目的是讓每支process公平的執行到,每隔一段時間會發出interrupt觸發context switch,可以滿足多個user的程式都被執行。

(b) API是使用者介面可以使用的函式庫,而System call是OS的介面的函式庫,一般使用者寫程式不會直接呼叫它。

【清大102年期中考】
Briefly explain the definition of following terminologies, and do a simple comparison in terms of their strength and weakness:
(a) Layered OS structure vs. Microkernal
(b) Message passing communication vs. Shared memory communication






答案解析:
(a)

  • Layered OS level分成一層一層的,level N只能從levelN-1去呼叫函數,較容易debug。
  • Microkernal則是將一些非必要的OS部分移至user space,以message passing 做為process間的溝通。process間的溝通效率較差但kernal結構比較簡單。

(b) Process之間傳遞訊息時,

  • Message passing: Process直接將在記憶體的資訊傳給其它process
  • Shared memory: 不同Process共享同一個記憶體
  • Message passing的優、缺點: 速度較慢但不資料不易出錯
  • Shared memory的優、缺點: 速度較快但有不同程式間同時存取相同記憶體以致資料拿錯的問題。

【清大博士班資格考- 2012秋】
Describe the purposes of short-term, medium-term, and long-term schedulers.






答案解析:

  • Short-term scheduler 選擇哪支程式可以從Ready state進入running state被CPU執行。目的為合理安排每支程式的執行時間,避免有些程式都沒被執行到。
  • Long-term scheduler 選擇哪些程式可以從new state進入ready state,決定的是當前可以有多少支程式同時執行。目的為避免同時太多程式在執行使CPU負荷不了
  • Medium-Term Scheduler 會在程式要做IO, sleep這類耗時長的事情時,先將程式移出記憶體,用意為挪出記憶體空間以達到好的空間使用

其它重點題目或活用題

【某學校期中考題】
請解釋為什麼message passing在process之間傳遞訊息會比memory sharing 慢的多的兩個主要原因。






答案解析:

  1. 因為 message passing需要複製整份資料傳遞,而memory sharing只需processes之間參考同一份位置
  2. message passing需要呼叫system call由OS處理,故較慢

【某學校期中考題】
在需求即時互動,有很多IO指令的單核系統,你會用many-to-one還是one-to-one multikernal實作?為什麼?






答案解析:
應選one-to-one,因為系統需要即時互動,若是選many-to-one,則可能會因為一個user thread做IO卡住kernal thread,整個程式就卡住了。

【某學校期中考題】
multiprogramming 系統為何能提升CPU使用率?





答案解析: 因為multi-programming system 可以在程式要做IO的時候發送interrupt打斷CPU,告訴OS可以換程式執行,以避免CPU idle,進而提高CPU使用率

【清大102年期中考-OS】
Briefly explain why context switch will cause system performance degradation in terms of program execution time and memory access time.





答案解析:

  • context switch在交換process的過程花時間,因而增加了program execution time
  • 因為TLB在context switch之後必須刷新,因此增加了memory access time (註: 觀念跨第八章的TLB)

尚未有邦友留言

立即登入留言