當雙擊某程序到它顯示運行界面時,操作系統都做了啥?
假設:我們現在想要讓操作系統運行「微信」,那么首先我們會怎么做嘞?在整個過程中,操作系統又做了啥?
如果這是一個面試題,你會怎么回答呢?來看看阿粉的解釋~
1. 雙擊微信圖標。
但是打開一個程序的方式不止一種,不要限制了自己,比如也可以通過命令行鍵入命令的方式將它打開(不過一般不會這么做吧;
當我們雙擊了微信圖標時,就告訴了操作系統,我希望你能幫我運行「微信」
2 . 此時操作系統接收到請求之后,就去磁盤上找到「微信」程序的相關信息,檢測它的類型是不是可執行文件,同時通過程序首部信息確定代碼和數據在可執行文件中的位置并且計算出對應的磁盤塊地址。
看完上面的解釋,你有沒有疑問呢?操作系統怎么檢測它是不是可執行文件呢?對于 Windows 系統來說,可執行文件是 PE(Portable Executable),對于 Linux 系統來說,可執行文件是 ELF(Executable and Linkable Format),對于 Mac 系統來說,可執行文件是Mach-O(Mach Object)
所以操作系統檢測的時候,就看一下是否符合文件規范就能確定了
3. 操作系統做完第 2 步之后,就會創建一個進程,并且將「微信」的可執行文件映射到該進程結構,意思就是,這個進程負責執行「微信」程序。
4. 接下來操作系統會為「微信」程序設置 CPU 上下文環境,此時我們假設這個調度程序選中了「微信」程序,那么操作系統就會跳到程序開始處
5. 接下來執行「微信」程序的第一條指令。但是它會發生缺頁異常。
為什么會發生缺頁異常? 因為程序在執行時,要將代碼和數據讀入內存, CPU 才能執行,但此時因為內存中還沒有相關數據,進而觸發了硬件機制,捕獲到缺頁異常,將控制權交給操作系統
6. 操作系統此時會分配一頁物理內存,同時將代碼從磁盤讀入內存,然后繼續執行「微信」程序。如果程序很大,一頁內存不夠的話,會在執行過程中重復 5,6 步驟,直至將程序全部讀入內存為止
7. 之后,「微信」程序執行相關函數(系統調用),在顯示器上顯示「微信」圖標
8. 操作系統接收到這個請求,然后找到顯示設備,通常顯示設備是由一個進程控制的,所以操作系統將要顯示的「微信」圖標給該進程
9. 控制設備的進程告訴設備的窗口系統它要顯示「微信」圖標,窗口系統在確定這是一個合法的操作之后,會將「微信」圖標轉換成像素,將像素寫入設備的存儲映像區
10. 視頻硬件將像素轉換成顯示器可以接收的一組控制數據信號
11. 顯示器解釋數據信號,激發液晶屏 此時,我們就能夠在屏幕上看到「微信」的登錄界面。
至此,當我們雙擊某個程序,到顯示運行界面時,操作系統做的工作就比較清楚了。
如果真的有面試管問你的話,你也能和面試官扯皮了