2015-05-06 77 views
0

評價的問題操作系統 - 一般進程創建

考慮計劃

#include <stdio.h> 
int main(){ 
    putchar('X'); 
    exit(0); 
} 

假設它是一個編譯生成的a.out文件。現在假設在本地控制檯窗口中的用戶鍵入a.out並點擊返回鍵。怎麼了?一定要描述一個合理但詳細而全面的操作系統操作和事件序列,而不僅僅是用戶看到的。

我的回答

  • 首先,外殼將創建在用戶空間的過程

  • 然後,它會執行系統調用「的putchar」的模擬輸入,並且進程將切換到內核​​模式

  • 然後它會將進程(線程)添加到長期調度程序,在此它將加入準備運行的所有進程的集合

  • 一旦它被選擇時,它會移動到短期調度程序,在那裏將接收一些處理時間 - 由於該處理是一個IO結合過程(準備>運行)

  • ,它將然後頭到IO隊列,它將被存儲在等待執行的緩衝區中(運行 - >等待)

  • IO完成後,putchar調用將在其所應用的外設上打印X( (等待 - >運行)

  • 一旦過程返回到短期調度程序,它將再次獲得更多的處理時間。由於沒有什麼可以做但終止,進程終止(運行 - >終止)

這是否有效的理解?我是否錯過了創建流程的一些關鍵概念?我知道這是相對簡單的過程,但請告訴我缺少的任何東西。

感謝您閱讀,並提前感謝您的幫助。

回答

1

首先,外殼將在用戶空間創建一個進程

//很多事情在此之前發生的!

//程序將被載入。

//將爲此過程創建VM區域。

//鏈接庫文件將完成。

//然後一系列頁缺失將發生會發生帶來的物理和虛擬內存文件

然後,它會執行系統調用「的putchar」的模擬輸入,並且進程將切換到內核模式

// putchar根本沒有系統調用!!!!

//的putchar將調用它的庫實現,這將進一步調用write()系統調用,你的程序將被困在內核中

然後它將過程(線程)添加到長期調度它將加入準備運行的所有進程的集合

//完全取決於調度算法..可能您的進程將首先運行!

一旦它被選擇時,它會移動到短期調度程序,在那裏將接收一些處理時間(就緒 - >運行)

//右,等待RunQ

由於該處理是一個IO綁定進程,它將會進入IO隊列,在那裏它將被存儲在一個緩衝區,並等待執行(運行 - >等待)

//排序,它將等待I/O隊列,等待中斷,寫在o/p設備上

一旦IO完成後,呼叫的putchar將打印對它所應用的外圍設備(監視器)的X(等待 - >運行) //正確

一旦該過程返回到短期調度它將再次獲得更多的處理時間。由於沒有什麼可以做但終止,進程終止(運行 - >終止)

//在此之前,它將再次陷入內核當你的程序將執行RETURN語句。

//它會調用後面的負責調用main()函數的啓動函數。

//然後啓動()函數將返回0操作系統,因此操作系統將終止該進程,並moce到終止狀態..

我仍然不認爲它是一個完整的版本爲100的機器指令將會對這一計劃的執行,其難度每一個人針點..

但是,還是如果你有一些疑問,發表您的評論!]

希望這將幫助!