當下開發人員應用最多的兩大操作系統,linux & windows。
在程序開發中,進程與線程的概念,是一個好的程序員所必備的基礎知識。如果對這兩個概念沒有很好的理解與應用,想要成為一個優秀的開發人員是很難的。
應侯捷MFC快速入門中的概念,對有關進程的概念進行下述簡單的闡述。
執行一個應用程序,必然就產生一個進程(process)。
在windows最直接的程序執行的方式就是在shell中以鼠標雙擊某一個可執行文件圖標,執行起來的App進程其實是shell調用CreateProcess激活的。相應的在linux下,你可能更會選擇使用terminal的方式執行一個應用程序,現在linux完美的圖形化界面下,也同樣支持windows下這種執行方式。
其實兩種系統大體的執行方式都可以概括如下:
注:這裡針對windows下MFC的調用以及系統調用,linux沒有多大區別。
1、shell調用CreateProcess激活App.exe。
2、系統產生一個“進程核心對象”,計數值加1.
3、系統為此進程建立一個4GB地址空間。
4、加載器將必要的代碼加載到上述地址空間中,包括App.exe的程序、數據,以及所需的動態加載函數庫(DLLs)。
5、系統為此進程建立一個線程,稱為主線程(primary thread)。線程才是CPU時間的分配對象。
6、系統調用C runtime函數庫的Startup Code
7、Startup Code調用App程序的WinMain函數。
8、App程序開始運行。
9、使用者關閉App主窗口,使WinMain中的消息循環結束,於是WinMain結束。
10、回到Startup Code。
11、回到系統,系統調用ExitProcess技術進程。