版權說明:本文檔由用戶提供并上傳,收益歸屬內(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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度產(chǎn)業(yè)園品牌推廣及市場合作合同3篇
- 2025年度濟南旅游開發(fā)合作合同2篇
- 2025版文化藝術行業(yè)崗位勞動合同規(guī)范匯編3篇
- 二零二五年度冠梁材料供應與安裝承包合同3篇
- 二零二五年度房屋買賣合同:針對共有產(chǎn)權及子女入學權益3篇
- 2025年度版權許可使用合同:數(shù)字音樂平臺著作權授權協(xié)議2篇
- 皮帶修復課程設計
- 海南外國語職業(yè)學院《西方思想文化專題研究》2023-2024學年第一學期期末試卷
- 海南外國語職業(yè)學院《環(huán)保設備基礎》2023-2024學年第一學期期末試卷
- 海南體育職業(yè)技術學院《建筑力學(一)》2023-2024學年第一學期期末試卷
- 蘇教版六年級科學上冊復習資料-已整理
- 科勒衛(wèi)浴行業(yè)分析
- 湖南省邵陽市初中聯(lián)考2023-2024學年九年級上學期期末地理試題
- 美術概論課件
- 綠籬移栽施工方案
- 機器人論文3000字范文
- 中國保險行業(yè)協(xié)會-2022年度商業(yè)健康保險經(jīng)營數(shù)據(jù)分析報告
- 新人教版小學五年級數(shù)學上冊知識點歸納總結(jié)
- 四年級上冊口算、豎式計算、脫式計算
- 腎內(nèi)科降低透析器凝血發(fā)生率品管圈PDCA成果匯報
- 回族做禮拜的念詞集合6篇
評論
0/150
提交評論