作業系統實驗個人總結

2021-03-14 13:58:22 字數 3064 閱讀 8719

作業系統實驗報告

班級:姓名:

學號:實驗一程序控制與描述

一、實驗目的

通過對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資料結構和演算法設計...