观察内核linux行为,观察linux行为 实验报告.doc
觀察linux行為 實(shí)驗(yàn)報(bào)告
實(shí)驗(yàn)二 觀察Linux行為
實(shí)驗(yàn)時(shí)間
小時(shí)實(shí)驗(yàn)?zāi)康摹 W(xué)習(xí)Linux內(nèi)核、進(jìn)程、存儲(chǔ)和其他資源的一些重要特征。實(shí)驗(yàn)?zāi)繕?biāo) 編寫一個(gè)程序使用/proc機(jī)制檢查反映機(jī)器平均負(fù)載、進(jìn)程資源利用等方面的各種內(nèi)核值。在得到內(nèi)核狀態(tài)之后,將所觀察到的行為在屏幕上輸出。背景知識(shí) Linux、Solaris和其他版本的UNIX提供了一種非常有用的檢查內(nèi)核狀態(tài)機(jī)制,叫做/proc文件系統(tǒng)。這是可以用來(lái)完成本練習(xí)的關(guān)鍵機(jī)制。
1/proc文件系統(tǒng)
/proc文件系統(tǒng)是一種操作系統(tǒng)機(jī)制,它的接口就像傳統(tǒng)UNIX文件系統(tǒng)的一個(gè)目錄(在根目錄中)。可以改變到/proc正如改變到任何其他目錄,例如,
bash$ cd /proc
使/proc作為當(dāng)前目錄。一旦把/proc作為當(dāng)前目錄,就可以用ls命令列出它的內(nèi)容。其內(nèi)容看起來(lái)像普通的文件和目錄。但是,/proc或者其子目錄中的文件實(shí)際上是讀取內(nèi)核變量并以ASCII字符串方式報(bào)告它們的程序。這些例程中的一些僅在偽文件打開時(shí)讀取內(nèi)核表,而其他例程在每次文件被訪問(wèn)時(shí)讀表。因此各種讀函數(shù)的工作方式可能與預(yù)期的有所不同,因?yàn)樗鼈儾](méi)有在真正操作文件。
Linux提供的/proc實(shí)現(xiàn)可以讀取很多不同的內(nèi)核表。/proc中包含一些目錄和文件,每個(gè)文件讀取一個(gè)或多個(gè)內(nèi)核變量。而具有數(shù)字名稱的子目錄包括更多的偽文件讀取其進(jìn)程ID和目錄名相同的進(jìn)程的有關(guān)信息。self目錄包含了正在使用/proc進(jìn)程的特定進(jìn)程信息。/proc目錄樹的確切內(nèi)容隨Linux的版本而不同,所以必須對(duì)偽文件進(jìn)行實(shí)驗(yàn)查看所提示的信息。
/proc中的文件可以像普通的ASCII文件一樣進(jìn)行讀取。例如,向shell敲入以下命令:
bash$ cat /proc/version
將得到打印到stdout的類似下面的信息:
Linux version 2.2.12 (gcc version egcs-2.91.66
Linux (egcs-1.1.2 release)) #1 Mon Sep 27 10:40:35
EDT 1999
為了讀取一個(gè)偽文件的內(nèi)容,可以打開文件然后使用stdio程序庫(kù)中的例程如fgets()或者fscanf()來(lái)讀取文件。所讀的確切文件(和表)依賴于所使用的特定Linux版本。想要知道到底有些什么文件接口通過(guò)/proc對(duì)你可用,請(qǐng)查看系統(tǒng)上的proc使用手冊(cè)頁(yè)。
2.使用argc和argv
在程序的B部分和C部分,需要從shell向程序傳遞參數(shù)。Linux中,C主程序依然可以采用argc和argv來(lái)傳遞參數(shù)。具體用法這里不再贅述。問(wèn)題陳述 編寫一個(gè)程序,通過(guò)檢查內(nèi)核狀態(tài)報(bào)告Linux內(nèi)核行為。程序在stdout上打印以下信息:
CPU類型和型號(hào)。
內(nèi)核版本
從系統(tǒng)最后一次啟動(dòng)以來(lái)的時(shí)間,形式為dd:hh:mm:ss(例如,3天13小時(shí)46分32秒應(yīng)該寫出03:13:46:32)。
改寫A部分程序,加入命令行參數(shù),在stdout上再打印以下信息:
CPU花費(fèi)在用戶態(tài)、系統(tǒng)態(tài)和空閑態(tài)的時(shí)間。
系統(tǒng)接收到的磁盤請(qǐng)求。
內(nèi)核執(zhí)行的上下文轉(zhuǎn)換的次數(shù)。
系統(tǒng)最后啟動(dòng)的時(shí)間。
從系統(tǒng)啟動(dòng)開始創(chuàng)建的進(jìn)程數(shù)。
改寫B(tài)部分程序,根據(jù)不同的命令行參數(shù),在stdout上再打印以下信息:
計(jì)算機(jī)配置的內(nèi)存數(shù)量。
當(dāng)前可用的內(nèi)存數(shù)量。
平均負(fù)載列表(至上一分鐘的平均數(shù))。 該信息將使另外的程序可以查看各個(gè)時(shí)間的這些值,因此用戶可以了解平均負(fù)載如何隨時(shí)間間隔而變化。對(duì)于本程序,提供兩個(gè)命令行參數(shù):
一個(gè)表明應(yīng)該以什么樣的頻率從內(nèi)核讀取平均負(fù)載。
2) 一個(gè)表明應(yīng)該以多長(zhǎng)的時(shí)間間隔讀取平均負(fù)載。
A部分程序可以叫做ksamp,B部分程序ksamp –s,C部分程序ksamp –l 2 60,表示平均負(fù)載觀察將運(yùn)行60秒,每隔2秒取樣一次。為了觀察系統(tǒng)上的負(fù)載,需要確保計(jì)算機(jī)正在做一些其他的工作而不是僅僅運(yùn)行你的程序。例如,打開和關(guān)閉窗口、移動(dòng)窗口,甚至在其他窗口運(yùn)行一些程序。組織方案 對(duì)于B部分和C部分,程序必須在命令行上有不同的參數(shù)。因此最先的動(dòng)作之一應(yīng)該是解析調(diào)用程序的命令行以確定通過(guò)argv數(shù)組傳遞到它的shell參數(shù)。可參考如下代碼:
int main( int argc, char *argv[] ) {
char repTypeName[16];
…
// 決定報(bào)告類型
reportType = STANDARD;
strcpy( repTypeName, “Standard” );
if ( argc > 1) {
sscanf( argv[1], “%c%c”, &c1, &c2 );
總結(jié)
以上是生活随笔為你收集整理的观察内核linux行为,观察linux行为 实验报告.doc的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: window挂载到linux服务器上,W
- 下一篇: linux传输文件无密码,Linux下s