作業系統實驗報告
班級:姓名:
學號:實驗一程序控制與描述
一、實驗目的
通過對windows 2000程式設計,進一步熟悉作業系統的基本概念,較好地理解windows 2000的結構。通過建立程序、觀察正在執行的程序和終止程序的程式設計和除錯操作,進一步熟悉作業系統的程序概念,理解windows 2000中程序的「一生」。
二、實驗環境
硬體環境:計算機一台,區域網環境;
軟體環境:windows 2000 professional、visual c++ 6.0企業版。
三、實驗內容和步驟
第一部分:
程式1-1windows 2000 的gui 應用程式
windows 2000 professional下的gui應用程式,使用visual c++編譯器建立乙個gui應用程式,**中包括了winmain()方法,該方法gui型別的應用程式的標準入口點。
# include
# pragma ***ment(lib, 「user32.lib」 )
int apientry winmain(hinstancehinstance */ ,
hinstancehprevinstance */,
lpstrlpcmdline */,
intncmdshow */ )
在程式1-1的gui應用程式中,首先需要windows.h標頭檔案,以便獲得傳送給winmain() 和messagebox() api函式的資料型別定義。
接著的pragma指令指示編譯器/聯結器找到user32.lib庫檔案並將其與產生的exe檔案連線起來。這樣就可以執行簡單的命令列命令cl msgbox.
cpp來建立這一應用程式,如果沒有pragma指令,則messagebox() api函式就成為未定義的了。這一指令是visual studio c++ 編譯器特有的。
接下來是winmain() 方法。其中有四個由實際的低階入口點傳遞來的引數。hinstance引數用來裝入與**相連的圖示或位圖一類的資源,無論何時,都可用getmodulehandle() api函式將這些資源提取出來。
系統利用例項控制代碼來指明**和初始的資料裝在記憶體的何處。控制代碼的數值實際上是exe檔案映像的基位址,通常為0x00400000。下乙個引數hprevinstance是為向後相容而設的,現在系統將其設為null。
應用程式的命令列 (不包括程式的名稱) 是lpcmdline引數。另外,系統利用ncmdshow引數告訴應用程式如何顯示它的主視窗 (選項包括最小化、最大化和正常) 。
最後,程式呼叫messagebox() api函式並退出。如果在進入訊息迴圈之前就結束執行的話,最後必須返回0。
先分析程式功能,再寫出執行結果:
作業系統將當前執行的應用程式看作是程序物件。利用系統提供的惟一的稱為控制代碼 (handle) 的號碼,就可與程序物件互動。這一號碼只對當前程序有效。
在系統中執行的任何程序都可呼叫getcurrentprocess() api函式,此函式可返回標識程序本身的控制代碼。然後就可在windows需要該程序的有關情況時,利用這一句柄來提供。
程式1-2: 獲得和使用程序的控制代碼
# include
# include
void main()
std :: cout << std :: endl;
}程式1-2中列出的是一種獲得程序控制代碼的方法。對於程序控制代碼可進行的惟一有用的操作是在api呼叫時,將其作為引數傳送給系統,正如程式1-2中對getpriorityclass() api函式的呼叫那樣。在這種情況下,系統向程序物件內「窺視」,以決定其優先順序,然後將此優先順序返回給應用程式。
openprocess() 和createprocess() api函式也可以用於提取程序控制代碼。前者提取的是已經存在的程序的控制代碼,而後者建立乙個新程序,並將其控制代碼提供出來。
先分析程式功能,再寫出執行結果:
程式1-3顯示如何找出系統中正在執行的所有程序,如何利用openprocess() api函式來獲得每乙個訪問程序的進一步資訊。
程式1-3 利用控制代碼查出程序的詳細資訊
// proclist專案
# include
# include
# include
dword getkernelmodepercentage(const filetime & ftkernel,
const filetime & ftuser)
void main()
{ handle hsnapshot = :: createtoolhelp32snapshot(
th32cs_snapprocess,
0 processentry32 pe;
zeromemory(&pe, sizeof(pe) ) ;
pe.dwsize = sizeof(pe) ;
bool bmore = :: process32first(hsnapshot, &pe) ;
while(bmore)
{handle hprocess = :: openprocess(
process_query_information,
false
pe.th32processid
if (hprocess != null)
filetime ftcreation, ftexit, ftkernelmode, ftusermode;
getprocesstimes(
hprocess
&ftcreation
&ftexit
&ftkernelmode
&ftusermode
dword dwpctkernel = :: getkernelmodepercentage(
ftkernelmode
ftusermode
std :: cout << 「process id: 」 << pe.th32processid
<< 「, exe file: 」 << pe.szexefile
<< 「, % in kernel mode: 」 << dwpctkernel
<< std :: endl;
closehandle(hprocess) ;
作業系統實驗
1.共享記憶體的通訊方式 1 2.訊息佇列的通訊方式 3 迴圈從訊息佇列中接收訊息,讀入end結束接收 43.管道通訊 6 4.訊號機制 7 5.兩個執行緒的同步。posix的無名訊號量機制 96.system r訊號量機制實現同步 117.使用訊號量保證語句沒有交叉 16 1 如下 共享記憶體的傳...
Linux作業系統實驗
計算機與資訊工程系實驗報告 課程名稱 linux作業系統任課教師 李小芳2014 2015學年第1學期班級實驗名稱實驗地點 學號程序管理 二 文理樓a507 姓名實驗日期成績評定ab c實驗內容 一 程序與作業的前後臺操作 1 利用vi手工啟動兩個程序在後台執行 2 用vi編輯乙個檔案,並轉入到後台...
作業系統實驗報告
電腦科學與應用系 課程設計報告 作業系統原理 目錄1 題目簡述 2 2 需求分析 2 2.1設計思想 2 2.2要求 2 2.3任務 3 2.4執行環境 3 2.5開發工具 3 3 概要設計與詳細設計 3 3.1系統流程圖 3 3.2演算法流程圖 5 4 編碼與實現 10 4.1資料結構和演算法設計...