2023年操作系統(tǒng)Linu課程實驗報告_第1頁
2023年操作系統(tǒng)Linu課程實驗報告_第2頁
2023年操作系統(tǒng)Linu課程實驗報告_第3頁
2023年操作系統(tǒng)Linu課程實驗報告_第4頁
2023年操作系統(tǒng)Linu課程實驗報告_第5頁
已閱讀5頁,還剩33頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

實驗1.1、1.2LinuxUbuntu的安裝、創(chuàng)建新的虛擬機

VMWare

訃遹££以帆1刁一

歡迎使用新建虛擬機向?qū)?/p>

您希望使用什么類型的酉U置?

。

通過幾個簡單的步驟創(chuàng)建Workstation10.0

虛似機。

自定義(高級)(0

誦帶有SCSI控制器類型、虛擬磁盤類裂

VMware*以及與舊版VMware產(chǎn)品兼咨性等高級通項

Workstation的虛擬機。

新建虎找炳導

笥易安裝信息

這用于安裝Ubuntuo

個性化Linux

全名(E):

用戶名01):

密碼但):

確認(0:

新建虛擬機向?qū)?/p>

命名醫(yī)m機

您要為此虛似機使用什么名稱?

虛擬機名稱(U:

Ubuntu

位置(U:

E:\Ubuntuinux

在"編揖首選項"中可更改默認位貫。

新建虛擬機向?qū)?/p>

指定磁盤容里

磁盤大小為多少?

虛擬機的硬盤作為一個或多個文件存儲在主機的物理磁盤中。這些文件最初很

小,隨著急向虛擬機申添加應用程序、文件和數(shù)據(jù)而逐漸變大。

最大磁盤大小(GB)(S):20.0:

Ubuntu的建議大小:20GB

。將虛擬運盤存儲為單個文件(Q)

將虛陽磁盤折分成多個文件(M)

折分磁盤后,可以更輕松地在計算機之間移動虛擬機,但可能會降低大容里磁盤的

性能。

新建虛擬曬導

已準備好創(chuàng)建虛扳機

單擊浜成”創(chuàng)建虛擬機,并開始安蕓Ubuntu和VMwareTools*

將使用下列設置創(chuàng)建虛擬機:

Ubuntu

E:\Ubuntubnux

Workstation10.0

Ubuntu

硬盤:20GB

內(nèi)存:1024MB

網(wǎng)絡通配器:NAT

其他設備:CD/DVD,USBControler,Printer,SoundCard

自定義硬件(£)…

U創(chuàng)建后開啟此虛擬機(E)

實驗1.3Shel1編程

1.實驗目的與內(nèi)容

通過本實驗,了解Linux系統(tǒng)的she11機制,掌握簡樸的shell編程技巧。

編制簡樸的She11程序,該程序在用戶登錄時自動執(zhí)行,顯示某些提醒信息,如

"Welcomet。Linux",并在命令提醒符中包含當前時間、當前目錄和當前用

戶名等基本信息。

2.程序源代碼清單

#inc1ude<stdio.h>

#include<sys/wait.h>

intmain(){

printf("HelloLinux\n");

intpid;

intstate;

intpfd[2];

pipe(pfd);

if(fork()==O){

o?printf("Inthegrepprogress\n");

dup2(pfd[0],0);

<1ose(pfd[O]);

c1ose(pfd[1]);

oexeclp("grep","grep","sh",0);

?perror("exeIpgreperror");

)

?esleif(fork()==0){

printf("Inthepsprogress\n");

dup2(pfd[l],1);

<lose(pfd[0]);

?close(pfd[1]);

oexeclp("ps","ps","-ef",0);

。perror("execlpps-ef");

°)

close(pfd[l]);

c1ose(pfd[0]);

<>wait(&state);

?wait(&state);

)

實驗2.3內(nèi)核模塊

實驗環(huán)節(jié):

(1).編寫內(nèi)核模塊

文獻中重要包含init_c1ock(),exit_clock(),read_clock()三

個函數(shù)。其中init_clock(),exit_clock()負責將模塊從系統(tǒng)中加載或卸載,

以及增長或刪除模塊在/proc中的入口。read_cl。ck()負責產(chǎn)生/proc/

cIock被讀時的動作。

(2).編譯內(nèi)核模塊Makefile文獻

#Makefileunder2.6.25

ifneq($(KERNELRELEASE),)

#kbuildsyntax.dependencyrelationshsipoffilesandta

rgetmodulesareIistedhere.

obj-m:=proc_clock.o

e1se

PWD:=$(shel1pwd)

KVER?=$(shelluname-r)

KDIR:=/lib/modules/$(KVER)/build

all:

$(MAKE)-C$(KDIR)M=$(PWD)modu1es

cIean:

rm-rf.*.cmd*.o*.mod.c*.ko.tmp_versions*.symvers*.or

der

endif

編譯完畢之后生成proc_clock.ko模塊文獻。

(3).內(nèi)核模塊源代碼clock.c

#include<linux/kerne1.h>

#include<linux/modu1e.h>

#include<linux/proc_fs.h>

#incIude<linux/string.h>

#include<1inux/vma11oc.h>

#include<asm/uaccess.h>

#defineMODULE

#defineMODULE,VERSION"1.0"

#defineMODULE_NAME"clock"

structproc_dir_entry*my_clock;

intread_clock(char*page,char**start,off_toff,intc

ount,int*eof,

void*data){

intlen;

structtimevalxtime;

do_gettimeofday(&xtime);

1en=sprintf(page,"%d%d\n",xtime.tv_sec,xti

me.tv_usec);

printk("clock:read_func()\n");

returnlen;

)

structproc_dir_entry*c1ock_proc_file;

intinit_c1ock(void)

{

clock_proc_file=create_proc_read_entry("clock",0,

NULL,read_clock,NULL);

return0;

)

voidexit_clock(void)

remove_proc_entry("clock",c1ock_proc_file);

}

modu1e_init(init_clock)

module_exit(exit_clock)

MODULE_LICENSE("GPL");

(4).編譯內(nèi)核模塊

#make

FileEditViewTerminalHelp

proc.clockmodules

make[1]:Enteringdirectory'/usr/src/linux-headers-2.6.32-26-generic'

CC[M]/home/xuweilin/os_experiment/2.3.proc.clock/proc.clock,o

/home/xuweilin/os_experiment/2.3_proc_clock/proc_clock.c:9:1:warning:"MODULE"

redefined

<command-lino:warning:thisisthelocationofthepreviousdefinition

/home/xuweilin/os_experiment/2.5_proc.clock/proc_clock.c:10:1:warning:"MODULE.

VERSION"redefined

Infileincludedfrom/home/xuweilin/os_experiment/2.3_proc_clock/proc_clock.c:2

include/linux/module.h:162:1:warning:thisisthelocationofthepreviousdefi

nition

/home/xuweilin/os_experiment/2.3_proc_clock/proc_clock.c:Infunction'read.cloc

k*:

/home/xuweilin/os_experiment/2.3_proc_clock/proc_clock.c:22:warning:format4%d

'expectstype'int',butargument3hastype\_kernel_time_t,

/home/xuweilin/os_experiment/2.3_proc_clock/proc_clock.c:22:warning:format'*d

'expectstype'int',butargument4hastypekernel.suseconds_t*

Buildingmodules,stage2.

MODPOST1modules

CC/home/xuweilin/os_experiment/2.3_proc.clock/proc.clock.mod.o

LD[M]/home/xuweilin/os_experiment/2.3_proc_clock/proc.clock.ko

make[1]:Leavingdirectory'/usr/src/linux-headers-2.6.32-26-generic,

xuweilin6xuweilin-desktop:'/os_experiment/2.5_proc_clock$「

(5).加載內(nèi)核模塊

在系統(tǒng)root用戶下運營用戶態(tài)模塊命令裝載內(nèi)核模塊

#insmodproc_clock.ko

xuweilinexuweilin-desktop:'/osexperiment/2.5procclock!sudoinsmodprocclock,

.ko

[sudo]passwordforxuweilin:

xuweilinexuweil.in-desktop:'/os_experiment/2.3_proc_clock$cat/proc/clock

1293006692797591

xuweilinexuweilin-desktop:'/osexperiment/2.3procclock$|

(6).測試

在終端中輸入以下命令:

#cat/proc/clock

(7).卸載內(nèi)核模塊

在系統(tǒng)root用戶下運營用戶態(tài)模塊命令卸載內(nèi)核模塊

#rmmodproc_clock.ko

實驗2.4系統(tǒng)調(diào)用

實驗環(huán)節(jié):

(1).添加新調(diào)用的源代碼

在./linux-2.6.33.7/arch/x86/kernel/sys」386_32.c中添加相應的調(diào)

用代碼

asmlinkageintsys_xw1cal1(structtimevaI*tv)

(

structtimeva1ktv;

do_gettimeofday(&ktv);

copy_to_user(tv,&ktv,sizeof(ktv));

printk(KERN_ALERT"PID%ldcalledsys_xwlcall()./n",(long)

current->pid);

return0;

}

(2).連接系統(tǒng)調(diào)用

a、修改./1inux-2.6.33.7/arch/x86/indude/asm/unistd_32.h,

在系統(tǒng)調(diào)用列表后面相應位置添加一行,這樣在用戶空間做系統(tǒng)調(diào)用時就不

需要知道系統(tǒng)調(diào)用號了,假如在用戶空間指明了調(diào)用號,就可以省略這一步,事

實上我就沒寫:

#define_NR_xwlcall338

新增長的調(diào)用號位338

b、修改./1inux-2.6.33.7/arch/x86/kernel/syscal1_table_3

2.S

在ENTRY(sys_call_table)清單最后添加一行,這步至關重要,338就是

這里來的:

Jongsys_xw1call

(3).重建新的Linux內(nèi)核

先安裝好編譯內(nèi)核必要的軟件包:

#sudoapt-getinstallbuild-essentialkernel-packagelibn

curses5-dev

復制當前內(nèi)核的配置文獻

#cp/boot/config-'uname-r'./.config

保存配置文獻

#sudomakemenuconfig

FileEditViewTerminalHelp

.config-LinuxKernelVConfiguration

LinuxKernelConfiguration

Arrowkeysnavigatethemenu.<Enter>selectssubmenus——>

Highlightedlettersarehotkeys.Pressing<Y>includes,<N>excludes,

<M>modularizesfeatures.Press<EscxEsc>toexit,<?>forHelp,</>

forSearch.Legend:[*]built-in[]excluded<M>module<

|Generalsetup4

[*]Enableloadablemodulesupport——>

Enabletheblocklayer——>

Processortypeandfeatures——>

PowermanagementandACPIoptions-

Busoptions(PCIetc.)-->

Executablefileformats/Emulations

Networkingsupport——>

DeviceDrivers——>

FirmwareDrivers——>

<Select><Exit><Help>

使用debian的的內(nèi)核編譯方法,要簡樸很多

#sudomake-kpkg-initrd--initrd—append-to-version=xwlcall

kerneljmagekernel-headers

FileEditViewTerminalHelp

======makingtargetdebian/stamp/build/kernel[newprereqs:vars]======

Thisiskernelpackageversion12.032.

restore.upstream_debianization

test!"fscripts/package/builddeb.kpkg-dist||mv-fscripts/package/builddeb.k

pkg-distscripts/package/builddeb

test!-fscripts/package/Makefile.kpkg-dist||mv-fscripts/package/Makefile.k

pkg-distscripts/package/Makefile

/usr/bin/makeEXTRAVERSION:.7xwlcallARCH=i386\

bzlmage

make[1]:Enteringdirectory'/home/xuweilin/交換空間/software/linux-'

scripts/kconfig/conf-sarch/x86/Kconfig

make[1]:Leavingdirectory'/home/xuweilin/交換空間/software/linux-2.6.33.7'

make[1]:Enteringdirectory'/home/xuweilin/交換空間/software/linux-'

CHKinclude/Linux/version.h

CHKinclude/generated/utsrelease.h

CALLscripts/checksyscalls.sh

CHKinclude/generated/compile.h

VDSOSYMarch/x86/vdso/vdso32-int80-syms.lds

VDSOSYMarch/x86/vdso/vdso32-sysenter-syms.Ids

VDSOSYMarch/x86/vdso/vdso32-syms.Ids

LDarch/x86/vdso/built-in.o

nLDarch/x86/built-in.o

linux-headers-2.633.

7xwlcall_2.6.33.

7xwlcalH0.00.Custo--

linux-image-2.6.33.

7xwlcall_2.6.33.

7xwlcall-10.00.Custo-

運營以下deb包,安裝內(nèi)核鏡像和模塊:

linux-image-2.6.33.7xwlcall_2.6.33.7xwlcall-10.OO.Custom_i

386.deb

FileHelp

Package:linux-image-xwlcaIIReinstallPackae

Status:Sameversionisalreadyinstalled

DescriptionDetailsIncludedfiles

Linuxkernelbinaryimageforversionxwlcall

ThispackagecontainstheLinuxkernelimageforversionxwlcall.

ItalsocontainsthecorrespondingSystem.mapfile,andthemodulesbuiltbythepackager.

Italsocontainsscriptsthattrytoensurethatthesystemisnotleftinaunbootablestateafteran

update.

Kernelimagepackagesaregenerallyproducedusingkernel-package,anditissuggestedthatyou

installthatpackageifyouwishtocreateacustomkernelfromthesources.Pleaselookatkernel-

img.conf(5)rand/usr/share/doc/kernel-package/README.gz

fromthepackagekernel-packagefordetailsonhowtotailorthe

installationofthisoranyotherkernelimagepackage

運營以下deb包,安裝內(nèi)核頭文獻:

linux-headers-xwlca1l_2.6.33.7xwlcall-10.00,Cu

stomi386.deb

FileHelp

Package:linux-headers-xwlcall-;

°ReinstallPackage

Status:Sameversionisalreadyinstalled

DescriptionDetailsIncludedfiles

HeaderfilesrelatedtoLinuxkernel,specifically,

versionxwlcall

Thispackageprovideskernelheaderfilesforsitesthatwantthelatestkernelheadersforversion

xwlcall.Pleaseread/usr/share/doc/linux-headers-xwlcall/debian.README.gzfor

details

運營以下命令,使內(nèi)核啟動時能調(diào)用模塊,比如硬件驅(qū)動:

#sudoupdate-initramfs-c-k2.6.33.7xwlca11

本次編譯的內(nèi)核采用ubuntu默認配置文獻,通用性非常好,可以拷貝到大部

分x86機器上安裝。安裝后系統(tǒng)自動會修改grub啟動選單。

4.重建引導信息

a、安裝deb包就自動重建引導信息了,無須另行解決。

b、假如仍然不放心,可以運營

#update-grub

5.重新引導從新的內(nèi)核進入

FileEditViewTerminalHelp

xuweilin@xuweilin-desktop:'$uname-r

xwlcall

xuweilinexuweilin-desktop:'$「

6.修改系統(tǒng)調(diào)用表

7.測試

實驗3.3Shell編程實驗(進程管理實驗)

1、實驗目的

通過編寫she11程序,了解子進程的創(chuàng)建和父進程與子進程間的協(xié)同,獲得多進

程程序的編程經(jīng)驗。

2、實驗內(nèi)容1

設計一個簡樸的shell解釋程序,能實現(xiàn)基本的bsh功能。

3、實驗原理

將每一條命令分子段壓入argv棧。然后再子進程中調(diào)用execvp()來實現(xiàn)該

命令的功能。

4、代碼(源代碼清單)

#include<stdio.h>

#include<string.h>

#include<stdlib.h>

#defineBUFFERSIZE256

〃最簡樸的she11,只是簡樸的執(zhí)行命令調(diào)用,沒有任何的其他功能

intmain()

(

charbuf[BUFFERSIZE],*cmd,*argv[100];

charinchar;

intn,sv,bufIength;

intresuIt;

buflength=0;

for(;;){

printf("=>");

〃解決過長的命令;

inchar=getchar();〃讀取命令

while(inchar!='\n'&&buflength<BUFFERSIZE){

buf[buflength++]=inchar;

inchar=getchar();

)

if(buflength>BUFFERSIZE){

printf("CommandtooIong,p1easeenteraga

in!\n");

buflength=0;

continue;

)

else

buf[buflength]='\O';

〃解析命令行提成一個個的標記

//char*strtok(char*s,char*de1im)

//分解字符串為一組字符串。s為要分解的字符串,delim為分隔符

字符串。

cmd=strtok(buf,"\t\n");

if(cmd){

if(strcmp(cmd,"exit")==O)exit(O);

n=0;

argv[n++]=cmd;

while(argv[n++]=strtok(NULL,"\t\n"));

if(fork()==0){

execvp(cmd,argv);

fprintf(stderr,"sxh:%s:commandnotfound.\n",b

uf);〃假如子進程III頁利執(zhí)行,這段話是不會執(zhí)行的

exit(1);

)

wait(&sv);

buf1ength=0;

)

)

)

實驗內(nèi)容2

編寫一個帶有重定向和管道功能的SheII

1.設計思緒

通過f。業(yè)()創(chuàng)建子進程,用execvp()更改子進程代碼,用wait()等待子進

程結(jié)束。這三個系統(tǒng)調(diào)用可以很好地創(chuàng)建多進程。另一方面,編寫的Shell要實

現(xiàn)管道功能,需要用pipe。創(chuàng)建管道使子進程進行通信。

2.源代碼清單

#inc1ude<stdio.h>

#include<stdlib.h>

#include<string.h>

#include<fcntl.h>

#defineBUFFERSIZE256

〃具有輸入輸出重定向的功能和管道功能

int

main()

(

charbuf[256],*buf2,*cmd,*cmd2,*argv[64],*argv2[64],*i

nfile,*outfile;

charinchar;

intn,sv,buf1ength,fd[2];

for(;;){

buflength=0;

printf("=>");

inchar=getchar();

while(inchar!='\n'&&buflength<BU

FFERSIZE){

buf[buflength++]=inchar;

inchar=getchar();

)

if(buf1ength>BUFFERSIZE){

fprintf(stderr,"CommandtooIong,pleaseenter

again!\n");

buflength0;

continue;

)

else

buf[buflength]='\0';

〃檢查是否具有管道操作符

//strstr()在字符串中查找指定字符串的第一次出現(xiàn),buf2指向管道符號

前端的命令

buf2=strstr(buf,"|n);

if(b32)

*buf2++='\0';

else{

//否則查看是否具有重定向的操作符

infi1e=strstr(buf,"<");

outfile=strstr(buf,;

if(infile){

*infile='\0';

infile=strtok(infile+1,"\t\n");

)

if(outfi1e){

*outfile='\0';

outfi1e=strtok(outfi1e+1,"\t\n");

)

)

//解析命令行提成一個個的標記

cmd=strtok(but"\t\n");

//執(zhí)行管道命令

if(buf2){

if(strcmp(cmd,"exit")==0)exit(O);

if(!cmd){

fprintf(stderr,"Commandtokenerror.\n");

exit(1);

)

n=0;

〃管道后端的命令

argv[n++]=cmd;

whi1e(argv[n++]=strtok(NULL,"\t\n"));

//管道前端的命令

cmd2=strtok(buf2,"\t\n");

if(!cmd2){

fprintf(stderr/'Commandtokenerror.\n");

exit(1);

)

n=0;

argv2[n++]=cmd2;

while(argv2[n++]=strtok(NULL,"\t\n"));

pipe(fd);

if(fork0==0){

dup2(fd[0],0);//dup2復制文獻句柄,將fd[0]復

制到描述符0o

close(fd[O]);c1ose(fd[1]);

execvp(cmd2,argv2);

fprintf(stderr,"**badcommand\n");ex

it(l);

}e1seif(fork()==0){

dup2(fd[l],l);

close(fd[0]);close(fd[1]);

execvp(cmd,argv);

fprintf(stderr;"**badcommand\n");exit(l);

)

close(fd[O]);

close(fd[l]);

wait(&sv);

wait(&sv);

buflength=0;

)

〃假如沒有管道命令,假如有重定向就執(zhí)行重定向操作,假如沒有重

定向就當作普通sheII命令執(zhí)行

else{

if(cmd){

if(strcmp(cmd,"exit")==O)exit(O);

n=0;

argv[n++]=cmd;

while(argv[n++]=strtok(NULL,"\t\n"));

if(fork()==0){

intfdO=-l,fdl=-1;

if(infile)fd0=open(infile,O_RDONLY);

if(outfile)fdl=open(outfile,O_CREAT|O_WRONL

Y,0666);

if(fdO!=-l)dup2(fd0,0);//dup2復制文獻句

柄,將復制到描述符

fdO0o

if(fdl!=-l)dup2(fdl,l);//dup2復制文獻句柄,

將復制到描述符

fdllo

close(fdO);

close(fd1);

execvp(cmd,argv);

fprintf(stderr,"**Badcommand\n");

exit(1);

)

wait(&sv);

buflength=0;

)

)

}//for

)

實驗4.1觀測實驗(存儲管理實驗)

1.實驗環(huán)節(jié)

(1)、安裝GDB

(2)、編寫觀測程序

(3)、按照指令手冊進行觀測操作

2.觀測程序源代碼

#include<stdio.h>

#include<stdlib.h>

charstr[50]="HelloLinux

intmain()

(

intnum=10;

while(num--){

printf("%s\n",str);

)

)

//gcc-g-otestingtesting.c

3.實驗結(jié)果及分析

(1).Gdb程序觀測一個程序文獻的內(nèi)容和結(jié)構(gòu)

結(jié)果截圖:

?huwaiting@liuwaiting*desktop:~

文件(F)編輯(E)查看(V)終篇(T)幫助(H)

Iiuwaitinq0liuwaiting-desktop:*$gcc-g-otestingtesting.c

liuwaitinq@liuwaitinq-desktop:*$gdbtesting

GNUqdb(GDB)7.1-ubuntu

Copyright(C)2616FreeSoftwareFoundation,Inc.

LicenseGPLv3+:GNUGPLversion3orlater<http:///iicenses/gpL.html>

Thisisfreesoftware:youarefreetochangeandredistributeit.

ThereisNOWARRANTY,totheextentpermittedbylaw.TypeMshowcopying*'

and"showwarranty"fordetails.

ThisGDBwasconfiguredasMi486-iinux-gnuM.

Forbugreportinginstructions,pleasesee:

<http://www.qnu.orq/software/qdb/buqs/>...

Readingsymbolsfrom/home/iiuwaiting/testing...done.

(qdb)list

#inciude<stdio.h>

2#inciude<stdlib.h>

charstr[56]="HelloLinux.":

intmain()

5

bintnum=16:

7whiie(num--){

8pnntfC%s\n",str);

9}

10

(qdb)break8

Breakpoint1at0x80483f7:filetesting.c,line8.

(gdb)I

(2).GDB觀測程序內(nèi)存映象的內(nèi)容和結(jié)構(gòu)

(gdb)list

1#include<stdio.h>

i2#include<stdlib.h>

34charstr(5G]="HelloLinux.";

5intmain()

6{

7intnum=10;

8while(num--){

9printf("%s\n",str);

)

10}

(gdb)break8

Breakpoint1atex89483f7:filetesting.c,line8.

(gdb)r

Startingprogram:/home/Uuwaiting/testing

Breakpoint1,nain()attesting.c:8

8printf(w%s\n",str);

(gdb)print/cstr

$1={721G1198'I',168'l\11132*\761、165*i\

lie'n?,117120,X1,466Aoee*<repeats38times〉}

(gdb)print/dnum

$2=9

(gdb)x/lcbstr

0x8643040<Str>:72

(gdb)x/lcbstr+1

9x8043041<str^l>:lei*e

(gdb)disassemble

Dumpofassemblercodeforfunctionmain:

6xe80483e4<+e>:push*ebp

exe86483e5v+l>:mov%esp,%ebp

0x08e483e7v+3》:andSQxfffffffe,^esp

6x086483ea<+6>:sub$ex20v%esp

Gxe80483edv+9〉:movl$exatexlc(%esp)

0x08e483f5<+17>:jmp0x8048463<main+31>

=>6xe86483f7v+19>:movl$0x8043649J^esp)

exe8G483fe<+26>:call9x8048318<puts@plt>

0x08048463<*31>:cmpl$0xe,9xlc(%esp)

6x98048468<+36>:setne

6x0804846b<*39>:subl$0xltOxlc(Vesp)

6x68048416<+44>:test

6x68648412<*46>:jne8x8。483f7<main*19>

0x68648414v+48>:leave

0X08048415<+49>:ret

Endofassemblerdump,

(gdb)|

(3).在Linux下,用free和vmstat命令觀測內(nèi)存使用情況

?liuwaiting@liuwaiting-desktop:~???

文件(F)編輯(E)查看(V)終湍(T)幫助(H)

liuwaiting@liuwaiting-desktop:~$free

totalusedfreesharedbufferscached

960636673292287344088592181596

-/+buffers/cache:403164557532

Swap:623608117664506004

liuwaiting@liuwaiting-desktop:-$vmstat

procs-memoryswap--io-system---—cpu

rbswpdfreebuffcachesisobiboincsussyidwa

0011760428722088600181604210102937511456165772

liuwaiting@liuwaiting-desktop:~$I

(4)在Linux下,查看/proc與內(nèi)存管理相關的文獻,并解釋顯示結(jié)果

?liuwaiting@liuwaiting-desktop:~009

文件(F)編輯(E)查看(V)終端(T)幫助(H)

liuwaiting@liuwaiting-desktop:*$cat/proc/meminfo

MemTotal:960636kB

MemFree:288100kB

Buffers:88992kB

Cached:181808kB

SwapCached:21844kB

Active:252120kB

Inactive:304524kB

Active(anon):105852kB

Inactive(anon):186644kB

Active(file):146268kB

Inactive(file):117880kB

Unevictable:0kB

Mlocked:ekB

HighTotal:72584kB

HighFree:200kB

LowTotal:888052kB

LowFree:287900kB

SwapTotal:623608kB

SwapFree:506132kB

Dirty:200kB

Writeback:0kB

AnonPages:270468kB

Mapped:73060kB

Shmem:6652kB

Slab:54148kB

SReclaimable:43356kB

Sllnreclaim:16792kB

Kernelstack:2224kB

PageTables:7136kB

NFSUnstable:0kB

Bounce:ekB

WritebackTmp:6kB

CommitLimit:1103924kB

CommittedAS:1089640kB

VmallocTotal:122880kB

VmallocUsed:70940kB

VmallocChunk:44532kB

HardwareCorrupted:0kB

HugePagesTotal:e

HugePagesFree:e

HugePagesRsvd:e

HugePagesSurp:0

Hugepagesize:4096kB

DirectMap4k:892920kB

DirectMap4M:16384kB

實驗5.1觀測實驗(進程通信)

在Linux下,用ipcs()命令觀測進程通信情況,了解Linux基本通信機制

實驗結(jié)果(截圖):

IFileEditViewTerminalHelp

xuweilin@xuweilin-desktop:'$ipcs

SharedMemorySegments

keyshmidownerpermsbytesnattchstatus

0X00000000131072xuweilin6003932162dest

0X00000000163841xuweilin6003932162dest

0X00000000196610xuweilin6003932162dest

0X00000000229379xuweilin6003932162dest

0X00000000262148xuweilin6003932162dest

0X00000000294917xuweilin6003932162dest

0X00000000327686xuweilin6003932162dest

0X00000000360455xuweilin6003932162dest

0X00000000393224xuweilin6003952162dest

0X00000000425993xuweilin6003932162dest

0X00000000458762xuweilin6003952162dest

0X00000000491531xuweilin6003932162dest

0X00000000524500xuweilin6003932162dest

0X00000000557069xuweilin6005932162dest

0X00000000589838xuweilin6003932162dest

0X00000000622607xuweilin6003932162dest

0X0000000011960336xuweilin6003932162dest

0X0000000011993105xuweilin6003932162dest

0X000000005603346xuweilin6003932162dest

0X0000000012025875xuweilin6003932162dest▼

實驗6.3IO系統(tǒng)編程實驗

1、實驗目的

編寫一個daemon進程,該進程定期執(zhí)行ps命令,然后將該命令的輸出

寫至文獻F1尾部。通過此實驗,掌握LinuxI/O系統(tǒng)相關內(nèi)容。

2、實驗內(nèi)容

編寫一個daemon進程,該進程定期執(zhí)行ps命令,然后將該命令的輸出

寫至文獻F1尾部。

3、實驗原理

在這個程序中,一方面fork一個子程序,然后,關閉父進程,這樣,新生成的子

進程被交給init進程接管,并在后臺執(zhí)行。

新生成的子進程里,使用system系統(tǒng)調(diào)用,將ps的輸出重定向輸入到fl.txt

里面。

4、實驗環(huán)節(jié)

編寫daemon.c

代碼如下:

#include<stdio.h>

#include<stdIib.h>

intmain(intargc,char*argv[])

(

inti,p;

p=fork();

if(P>0){

exit(0);

)

elseif(p==0){

for(i=0;i<100;i++){

sIeep(100);

system("ps>fl.txt");

}

)

else{

perror("Createnewprocess!");

)

return1;

}

)

編譯程序

#gcc-odaemondaemon,c

執(zhí)行程序

#./daemon

xuweilin@xuweilin-desktop:'/os_experiment/2.3_proc_clock$cd../6.3.daemon/

xuweilinexuweilin-desktop:'/os_experiment/6.3_daemon$Is

daemon.cf1.txt

xuweilinexuweilin-desktop:'/os_experiment/6.3_daemon$gcc-odaemondaemon.c

xuweilin€xuweilin-desktop:'/os_experiment/6.3_daemon$rmfl.txt

xuweilin€xuweilin-desktop:'/os_experiment/6.5_daemon$Is

daemon.c

xuweilinexuweilin-desktop:'/os_experiment/6.3_daemon$./daemon

xuweilin@xuweilin-desktop:'/os_expe「iment/6.3_daemon$口[▼

實驗7.1代碼分析(文獻系統(tǒng)管理實驗)

1.實驗目的

了解與文獻管理有關的Linux內(nèi)核模塊的代碼結(jié)構(gòu)。

2.實驗結(jié)果(源代碼分析)

A.創(chuàng)建文獻模塊分析

5780/*

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論