3 进程和线程

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第三章處理程序與執行緒的描述和排程

這個章節將詳細介紹Windows CE 系統中的處理程序(process) 和執行緒(thread),並對Windows CE作業系統所使用的排程策略進行分析。處理程序是資源分配的基本單位,而執行緒是排程的基本單位。這一章的程式碼主要節選於[CEROOT]PRIVATE\WINCEOS\COREOS\NK\KERNEL\ 目錄的schedule.c、intrapi.c 以及[CEROOT]PRIVA TE\WINCEOS\COREOS\NK\INC 目錄的schedule.c、kernel.h的幾個檔案,其目的在於了解程式在開發執行時,對系統資源的共享以及程式的排程。

3.1 處理程序的定義和描述

3.1.1 處理程序概述

處理程序是一個具有一定獨立功能之程式的動態執行過程。處理程序由正文段(text)、用戶資料段(user segment) 以及系統資料段(system segment) 共同組成一個執行環境,負責處理器、記憶體和週邊等資源的分配和回收。處理程序是電腦系統資源的使用主體,是作業系統分配資源的基本單位。

處理程序具有動態性、獨立性、並行性和結構化等特徵。動態性是指處理程序具有動態的位址空間,位址空間的大小和內容都是動態變化的。位址空間的內容包括程式碼(指令執行和處理器狀態的改變)、資料(變數的生成和初始化) 和系統控制資訊(PCB (Process Control Block) 的生成和刪除)。獨立性是指各個處理程序的位址空間相互獨立,除非採用處理程序間通信服務,否則不能相互影響。並行性也稱為非同步性,是指從宏觀上來看,各個處理程序是同時獨立運行的。結構化是指處理程序對於位址空間的結構劃分,如程式碼段、資料段和核心段劃分。

我們必頇瞭解處理程序和程式的區別,程式是一個普通檔案,是一個程式碼指令和資料的集合,這些指令和程式碼儲存在磁片上成為可執行映射(Executable Image),是一個靜態的實體。我們可以用下面簡單的方式了解處理程序和程式的關係:

1.處理程序和程式的關係

程式是處理程序的兩個重要組成之一。處理程序的主要目的是執行它所對應的程式。

2.處理程序和程式的區別

主要有以下三種:

●程式是靜態的,處理程序是動態的;

●程式可以在儲存設備(如:磁片) 上長期保存,而處理程序則是在

建立處理程序後產生,結束處理程序後消失。

●一個程式可以對應多個處理程序,但是一個處理程序只能對應一個程

式。例如:打開Word的兩個視窗,編輯兩個不同的文字檔,就對應到

兩個不同的處理程序。

3.1.2 Windows CE處理程序的描述

Windows CE的處理程序不同於Windows 98或Windows NT,最大差別在於Windows CE最多只可以支援32個處理程序在系統中同時運行,系統啟動的時候,將至少自動啟動四個處理程序,一個是NK.exe,用來提供作業系統中kernel 的服務,第二個是FILESYS.EXE,它用來提供相關檔案系統的服務,第三個是GWES.EXE,它用來提供對GUI系統的支援,第四個是DEVICE.EXE,它用來載入和管理週邊的驅動程式。他們佔據虛擬位址的前四個slots,一個slot有32MB 空間,詳見資料儲存部分的介紹,目前執行的處理程序將會對應到第一個slot (slot 0)。大部分的Windows CE系統,也會同時建立EXEPLORER.EXE處理程序﹔如果Windows CE系統正在與個人電腦相連,則會啟動REPLLOG.EXE和PAPISRV.EXE,他們用來管理個人電腦和Windows CE系統之間的連接服務。所以使用者可以啟動的處理程序最多大概有24個,或稍微多一點,但是對一般的使用來說,這是足夠的。

不同於Windows 98或Windows NT系統,Windows CE系統不支援一些功能,例如Windows CE系統不支援許多處理程序和與執行緒相關的函數。Windows CE系統不支援環境(environment),所有與處理環境有關的Win32函數在Windows CE系統中並不存在。

3.1.3 Windows CE處理程序結構分析

在Windows CE中,每一個處理程序由一個程序結構來描述。也就是我們平時說的PCB。它定義於NK/INC/kernel.h。處理程序的所有資訊都保存在這個結構中,當系統建立一個處理程序時,將分配一個新的程序結構,處理程序結束時,這個結構將被回收。

與Windows 98或Windows NT的處理程序相比較,Windows CE處理程序包含比較少的狀態資訊。由於Windows CE不支援驅動程式及工作目錄(Working Directory) 的概念,所以每個處理程序不需要保存這些資訊。Windows CE也不需要保存一系列的環境變數,所以PCB中不需要有關於環境變數的部分。Windows CE不支援控制碼繼承,所以也不需要告訴處理程序這些相關的資訊。

由於以上種種原因,Windows CE處理程序的結構相對地簡單很多。

處理程序是系統資源分配的基本單位,為方便管理,在Windows CE中把處理程序當作物件(HANDLE hProc)。下面將簡單介紹一個程序結構的主要部分:●procnum:BYTE類別,目前處理程序的識別號碼(ID),用來辨識不同的處

理程序。

●pProxList:存放proxy的佇列,LPPROXY結構的鏈結。

●hProc:這是此處理程序的控制碼,在呼叫SC_GetProcFromPtr時使用。●dwVMBase:DWORD類別,記錄處理程序在記憶體所占區域中的基底位址。

●pTh:一個處理程序可能擁有多個執行緒(詳見執行緒介紹部分),pTh表示

當前處理程序中的第一個執行緒。

●BasePtr:LPVOID類別,指向載入.EXE可執行檔的基底指標。

●lpszProcName:LPWSTR類別,記錄處理程序的名稱。

●PfnEH:處理程序例外處理器,PEXCEPTION_ROUTINE類別。

●pMainTh:此處理程序所擁有的主執行緒,當主執行緒結束後,處理程序

也隨之結束。

●pmodResource:PMODULE類別,MODULE結構在NK/INC/kernel.h中所

定義。包含資源的模組指標,其中的資源可以被目前的處理程序用到。

●oe:openexe_t類別。指向可執行檔控制碼的指標。

為了讓讀者容易理解,下面列出Windows CE中所定義的程序結構。

程序的結構如下:

相关文档
最新文档