?? 15.1.1 進程.txt
字號:
第15章 多線程
本章將介紹多線程程序的編寫,井利用多線程技術創建一個圖形界面的網絡聊天室程序。
15.1:基本概念
15.1.1 進程
.
1.程序和進程
初學者經常混淆程序和進程的概念。程序是計算機指令的集合,官以文件的形式存儲
而進程通常被定義為一個正在運行的程序的實例,是一個程序在其自身的地址空間中的一次執行活
動。我們編寫的程序在編譯后生成的后綴為 .exe的可執行程序,是以文件的形式存儲在磁盤上的,
當運行這個可執行程序時,就啟動了該程序的一個實例,我們把它稱之為進程。一個程序可以對應
多個進程,例如可以同時打開多個記事本程序的進程,同時,在一個進程中也可以同時訪問多個程
序。
進程是資源申請、調度和獨立運行的單位,因此,它使用系統中的運行資源:而程序不能申請系統資
源,不能被系統調度,也不能作為獨立運行的單位,因此,它不占用系統的運行資源。
2.進程組成
進程由兩個部分組成:
(1)操作系統用來管理進程的內核對象
內核對象也是系統用來存放關于進程的統計信息的地方。內核對象是操作系統內部分配的一個內存
塊,該內存塊是一種數據結構,其成員負責維護該對象的各種信息。由于內核對象的數據結構只能
被內核訪問使用,因此應用程序在內存中無法找到該數據結構,并直接改變其內容,只能通過
Windows提供的一些函數來對內核對象進行操作。
, (2)地址空間它包含所有可執行模塊或 DLL模塊的代碼和數據。另外,它也包含動態內存分配的空間,
例如線程的戰 Cstacks)和堆 Cheap)分配空間。
進程從來不執行任何東西,它只是線程的容器。若要使進程完成某項操作,它必須擁有一個在它的
環境中運行的線程,此線程負責執行包含在進程的地址空間中的代碼。也就是說,真正完成代碼執
行的是線程,而進程只是線程的容器,或者說是線程的執行環境。
單個進程可能包含若干個線程,這些線程都"同時"執行進程地址空間中的代碼。每個進程至少擁有
一個線程,來執行進程的地址空間中的代碼。當創建一個進程時,操作系統會自動創建這個進程的
第一個線程,稱為主線程,也就是執行main函數或WinMain函數的線程,可以把main函數或WinMain
函數看作是主線程的進入點函數。此后,主線程可以創建其他線程。
3.進程地址空間
系統賦予每個進程獨立的虛擬地址空間。對于 32位進程來說,這個地址空間是4GB。因為對32位指
針來說,它能尋址的范圍是232,即4GB。
每個進程都有它自己的私有地址空間。進程 A可能有一個存放在它的地址空間中的數據結構,地址
是 Oxl 2345678 ,而進程 B則有一個完全不同的數據結構存放在它的地址空間中,地址也是
Ox12345678o當進程A中運行的線程訪問地址為Ox12345678的內存時,這些線程訪問的是進程A的數據
結構。當進程B中運行的線程訪問地址為Ox12345678的內存時,這些線程訪問的是進程B的數據結構。
進程A中運行的線程不能訪問進程B的地址空間中的數據結構,反之亦然。
4GB是虛擬的地址空間,只是內存地址的一個范圍。在你能成功地訪問數據而不會出現非法訪問之前,
必須賦予物理存儲器,或者將物理存儲器映射到各個部分的地址空間。這里所說的物理存儲器包括
內存和頁文件的大小,讀者可以同時按下鍵盤上的【Ctrl+Alt+Del】鍵,然后在彈出的對話框上單
擊【任務管理器】按鈕,在隨后顯示的Windows任務管理器對話框的右下方就可以看到當前內存的使
用情況,如圖 15.1所示。
圖 15.1 系統當前內存使用情況
由圖 15.1可知,筆者機器上的內存大小為942856K,它實際上包括了物理內存和頁文件的大小。本
機物理內存是384M,頁文件大小是576M。我們可以在資源管理器中選中系統安裝所在的盤符,接著
選擇【工具\文件夾選項. ..】菜單項,然后打開查看選項 卡,取消"隱藏受保護的操作系統文件 (推
薦)"選項的復選狀態,如圖 15.2所示。然后在該驅動器下就可以看到有一個名為: pagefile.sys
的文件,在筆者的機器上,該文件的大小是576M,這個文件就是頁文件。頁文件透明地為應用程序
增加了可以使用的內存。它通過在磁盤上劃分出一塊空間當作內存使用,從而增加了應用程序可以
使用的內存,我們把這塊內存稱為虛擬內存。
圖 15.2文件夾選項對話框
如果想要修改頁文件的大小,可以在桌面上用鼠標右鍵單擊"我的電腦"圖標,然后從彈出的快捷菜
單中選擇【屬性】命令,即可打開系統特性對話框,打開高級選項卡,可以看到該頁上有一個【性
能選項】按鈕,單擊該按鈕,即可彈出如圖 15.3所示的對話框。
圖 15.3性能選項對話框
可以看到,筆者機器上當前虛擬內存的大小為576MB。如果想要修改其大小的話,可以單擊【更改】
按鈕,即可彈出虛擬內存設置對話框,如圖 15.4所示。利用這個對話框,連可以在其他驅動器下設
置頁文件的初始人小和最大值。應用程序在運行時,如果使用的內存超過了頁文件的初始大小,頁
文件會自動增長。一旦超過設定的頁文件的最大值時,系統有可能會崩潰。在這里,如果修改了頁
文件的大小,需要單擊【設置】按鈕,然后更改才會生效。
圖 15 .4虛擬內存設置對話框
實際上, 4GB虛擬地址空間中, 2GB是內核方式分區,供內核代碼、設備驅動程序、設備 1/0高速
緩沖、非頁面內存池的分配和進程頁面表等使用,而用戶方式分區使用的地址空間約為 2GB,這個
分區是進程的私有地址空間所在的地方,其中還有一部分地址空間是作為 NULL指針分區。一個進程
不能讀取、寫入、或者以任何方式訪問駐留在該分區中的另一個進程的數據。對于所有應用程序來
說,該分區是維護進程的大部分數據的地方。
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -