操作系统实验指导.docx
- 文档编号:4258143
- 上传时间:2022-11-28
- 格式:DOCX
- 页数:13
- 大小:20.81KB
操作系统实验指导.docx
《操作系统实验指导.docx》由会员分享,可在线阅读,更多相关《操作系统实验指导.docx(13页珍藏版)》请在冰豆网上搜索。
操作系统实验指导
安全操作系统实验指导书
2007-12-5
绪论
实验报告内容
1,命令接口的使用
2,多进程程序设计(同步、互斥、通信)
3,linux的文件操作
4,Socket网络编程
实验报告的格式和要求
实验报告的格式
1,封皮(姓名班级学号)
2,试验目的
3,实验内容
4,试验步骤
5,试验结论
实验报告的要求
●按照要求格式,字体用宋体,字号小四
●每个实验报告篇幅控制在6-8页
●总共8次试验课,需要写4个实验报告
●以班级为单位按时上交
实验内容
1,linux基本命令的使用:
ls、cd、chmod等命令的使用
2,linux命令接口的使用:
Vi编辑器与shell程序的编写
3,linux的C语言开发:
gcc、gdb、make的使用
4,linux多线程设计:
fork等系统调用的使用
5,linux下程序的同步:
同步算法的实现
6,linux下程序的通信:
进程间的通信
7,linux的文件操作:
有关文件操作的系统调用
8,linux下的网络程序设计
实验一基本命令的使用
实验目的
熟悉linux的基本命令
熟悉运用Linux的在线求助系统。
(maninfohelp)
实验内容
1,文件与磁盘操作
man/infocdls(-a-l-h-t)cp(-R-f-l)mvcat/less/morepwdmkdirrm(-r-f)chmod[-R]user[:
group]filefind(-name-user)grepdf(-h)mount/umountcleartime
2,用户管理
useradd(-g-d-s-G)userdel(-r)passwdgroupadd/groupdelgpasswd(-a-d)sukernelversionhostname
3,软件安装
rpm(-i-e-ivh-U-q-qa-qd-ql-qi-qR)tar
4,网络命令
ifconfig(up/down)netstate(-t-p-u)
5,进程管理
ps(-a-f-x)pstree-pukill-9pidldconfig
killallreboothalt
实验二命令接口的使用
实验目的
1.熟练使用vi编辑器
2,熟悉Shell程序的设计
实验内容:
1vi编辑器的使用
1,三种模式
进入命令模式
vi<文件名>
进入编辑模式
i/Ia/Ao/OESC
进入特殊模式
:
q:
q!
:
e!
:
w:
wq:
wqfile:
n1,n2wfile
:
rfile
:
efilename
:
!
command
2,光标移动
bejklh0$ctrl+fctrl+b
n+spacen+enter6GGHL
3,删除操作
xdwDdd
4,替换操作
rcwCcc
5,查询命令
/abc?
abcnN:
n1,n2s/word1/word2/gc
6,拷贝粘贴
yY2yypP
7,其他命令
:
setnu;:
setnonu;u.;vyp
gfCTRL-SHIFT-6
2shell程序的编写
环境变量
echoenvset$“”‘’?
``
(1)熟悉shellscript的结构和运行、调试方法。
(2)熟悉shellscript的变量声明方法及其输入输出。
declare–ia=3;read
(3)熟悉shellscript的分支结构。
编写shellscript文件test1.sh,判断用户根目录下是否有名为test的文件或者目录,如果有的话,将其删除。
if[-etest];thenxxxelsexxxfi
(4)熟悉shellscript的循环结构。
编写shellscript文件test2.sh,实现1到100所有奇数的和并输出。
试验三linux的C语言开发
试验目的
熟悉gcc的使用
熟悉gdb的使用
熟悉make的使用
试验内容
1gcc
(1)过程
gcchello.c–ohello
输入选项输出命令注释
.c-E.icpp预编译,文件包含、条件编译、宏展开
.i-S.scc1编译,生成汇编文件,注意命令的路径
.s-c.oas汇编,生成目标文件
.o[ELF]ld链接
(2)常用选项
-v显示进度
-W[all]显示警告信息
-I头文件路径,不要空格
-L库路径,不要空格
-lName库名字(libName.或者libName.so)
-shared编译成共享库
-static链接静态库
-fpic[fPIC]编译成共享库
-O[n]优化
-Dmacro=BAR在命令行定义预处理宏FOO,其值为BAR
-Wl,option传递给ld程序option选项,比如-Wl,-dn和-Wl,-dy
注意区别:
gcchello.c–ohello.static–Wl,-dn[-Bstatic][-static]
gcchello.c–ohello.dynatic–Wl,-dy[-Bdynamic]默认
(3)c++
编写hello.cxx程序:
#include
usingnamespcestd;
intmain()
{
Cout<<”hello”< Return0; } 编译命令: g++hello.cxx-ohello (4)静态库的建立和使用 a)建立 gcc-cadd.c gcc-csub.c ar-rlibaddsub.aadd.osub.o(查ar命令,注意/r/t/x的用法) b)调用 gcctest2.c-otest2.static-I./-L./-Wl,-dn–laddsub -Wl,-dn后面的库使用静态版本 (5)共享库的建立和使用 a)建立 gcc-fpic[-shared]add.csub.c-olibaddsub.so b)安装 为了让动态链接库为系统所认识及共享,就需要运行ldconfig命令。 (manldconfig,注意命令作用) 默认目录/lib和/usr/lib 配置文件/etc/ld.so.conf内所列的目录 缓存文件/etc/ld.so.cache 四种安装方式: #cplibaddsub.so/usr/bin#ldconfig #pwd>>/etc/ld.so.conf#ldconfig #ldconfig`pwd`//更新缓存无效 #exportLD_LIBRARY_PATH="."//另开shell则无效 c)共享调用 gcctest2.c-otest2-I./-L./-Wl,-dy–laddsub -Wl,-dy用于指定链接动态库版本,默认 d)动态调用 Linux提供4个库函数(dlopen,dlerror,dlsym和dlclose),一个include文件(dlfcn.h)以及两个共享库(静态库libdl.a和动态库libdl.so),以支持动态链接装入器。 gcctest2.c-otest2–ldl 参考: #include #include intmain() { inta,b; scanf("%d,%d",&a,&b); void*pHandle; int(*sub)(intm,intn); pHandle=dlopen("libsub.so",RTLD_LAZY); sub=dlsym(pHandle,"sub"); printf("%d\n",sub(a,b)); dlclose(pHandle); return0; } 附: 几个命令 ldd查看文件的依赖关系 nm查看文件的符号表,比如: nmtest2|grepadd objdump查看文件的信息 2gdb (1)准备gcc-g (2)打开gdbfilename/filefilename (3)运行run/next/step(进入子程序)/continue (4)设置断点break/delete (5)显示表达式的值 printexp立即输出表达式的值 watchexp表达式的值发生变化时,程序停止并输出其新旧值 displayexp程序一旦停止就显示表达式的值 (6)显示栈的信息 backtrace/backtracefull frametraceNum (7)显示程序的信息 list/listnum/listfunc infobreakpoints/infobreak infofunc/intovar/infofiles infolocal/infoprog/infoargs disassemblefunc/infoframe/examine(x)addr (8)退出quit帮助help执行命令shellcommandstr 3make (1)Make命本: Make[flags][macrodefinitions][targets] [flags]如果没有"-f"参数,则系统将默认当前目录下名为makefile或者名为Makefile的文件为描述文件。 在Linux中,GNUmake工具在当前工作目录中按照GNUmakefile、makefile、Makefile的顺序搜索makefile文件。 [macrodefinitions]makefile文件中的变量定义 [targets]make的目标,默认是makefile文件中的第一个目标 (2)makefile文件: 规则的集合 a: b command a为目标。 可以是.o,也可以是ELF,还可以是一个伪目标。 b为依赖文件。 就是,要生成那个a所需要的文件或是目标。 command也就是make需要执行的,从b生成a的命令 (3)其他 变量: 定义CFLAGS=-c引用$(CFLAGS) 特殊变量$@目标文件,$^所有的依赖文件,$<第一个依赖文件 命令: 不显示命令内容@ 命令出错不处理- 多条相关命令; 伪目标与自动推导: add.o: addsub.h .PHONY: clean clean: rmedit$(objects) 文件搜索: 特殊变量VPATH=./include: ../include 特殊指令vpath%.h./include: ../include 4实验任务 (1)编写程序: main函数所在的文件名字为test3.c,程序功能为从键盘输入两个数求其和(调用add.c中的函数)和差(调用sub.c中的函数)。 (2)编写一个makefile文件,并用make编译刚才的程序 (3)设置断点,观察点,调试程序 实验四linux多进程设计 实验目的 1.了解进程与程序的区别,加深对进程概念的理解; 2.了解fork()系统调用的返回值,掌握用fork()创建进程的方法; 实验内容 1,用vi输入下面的程序,编译、调试、输出结果 #include #include intmain() { pid_tchild_pid; /*fork函数 *作用: 系统调用,产生一个子进程,调用一次返回两次 *返回值: pid_t类型,在头文件中定义,通常为整形 *0子进程返回 *ID父进程返回的子进程ID */ child_pid=fork(); if(child_pid==0) { inti=0; for(;i<5;i++) { printf("child\n"); sleep (1);//waitonesecond } } else { printf("child'spidis%d",child_pid); } intj=0; for(;i<5;i++) { printf("child\n"); sleep (1); } return0; } 2,用man察看fork、sleep的用法 3,试验任务 编写一C语言程序,实现在程序运行时通过系统调用fork()创建两个子进程,使父、子三进程并发执行,父亲进程执行时屏幕显示“Iamfather”,儿子进程执行时屏幕显示“Iamson”,女儿进程执行时屏幕显示“Iamdaughter”。 实验五Linux进程间的同步 实验目的 1.掌握进程并发执行的原理,理解进程并发执行的特点,区分进程并发执行与串行执行; 2.熟悉wait、exit等系统调用。 3.熟悉信号同步的方法。 实验内容 1.用man察看wait、exit的用法 2.修改实验四的程序,在父、子进程中分别使用wait、exit等系统调用“实现”其同步推进,多次反复运行改进后的程序,观察并记录运行结果。 实验六Linux进程间的通信 实验目的 学习如何利用管道机制、消息缓冲队列、共享存储区机制进行进程间的通信,并加深对上述通信机制的理解。 实验内容 1.了解系统调用pipe()、msgget()、msgsnd()、msgrcv()、msgctl()、shmget()、shmat()、shmdt()、shmctl()的功能和实现过程。 semget()semop()semctl() 2.编写一C语言程序,使其用管道来实现父子进程间通信。 子进程向父进程发送字符串“issendingamessagetoparent! ”;父进程则从管道中读出子进程发来的消息,并将其显示到屏幕上,然后终止。 3.运行该程序,观察、记录并简单分析其运行结果。 实验七Linux文件操作 实验目的 复习标准C语言的文件操作函数,熟悉linux有关文件操作的系统调用,并理解他们之间的关系。 实验内容 1、标准的文件操作的函数 #include 文件指针(FILE) fopen/fclose,fread/fwrite,fputc/fgetc,fprintf/fscanf,fseek/frewind,remove,rename,feof 2、系统调用中的文件操作 #include #incldue #include #include 文件描述符(int) open/close,creat/unlink,read/write,lseek,eof mkdir/rmdir,opendir/closedir,readdir,stat,access 3.建立一个目录(mkdir),在目录下建立两个文件(creat)a.txt、b.bin;在a.txt中输入你的姓名和学号;在b.bin中输入你的年龄的二进制表示。 4.编写程序实现对文本文件指定行的读取。 附录 man的使用 1,man的介绍 linux下的man页包括用户命令、系统调用、库函数等的帮助文档。 其中每一类别对应一个section,每一个section对应一个数字id。 常用的类别以及对应的数字如下: (1)用户命令Usercommands (2)系统调用Systemcalls (3)标准库函数Standardlibraryfunctions (8)系统管理命令System/administrativecommands 2,man的命令行参数 详细参考#manman,常见的有 (以sleep为例子) #mansleep显示用户命令 (1)中sleep的man页 #man3sleep显示库函数(3)中sleep的man页 #man-fsleep显示名称为sleep的所有man页 #man-ksleep显示行描述中包含sleep的所有man页 #man-Ksleep显示页内包含sleep的所有man页 3,man的浏览命令 详细输入h或者H查看,常见的有 w向下翻一页 d向上翻半页 f向上翻一页 e向下翻一行 y向上翻一行 /str向下搜索str str向上搜索str n下一个str help命令 1,ar–help 2,(gdb)help等 设置环境变量: 全局设置: 直接修改/etc/profile 针对用户修改: 修改~/.bashrc~/.bash_profie 添加变量: exportPEAK=“zhaofeng”: peakzhao: $PEAK 删除变量: unsetPEAK 其他命令: env/set
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 操作系统 实验 指导