操作系统实验指导.docx

上传人:b****0 文档编号:17097441 上传时间:2023-07-22 格式:DOCX 页数:15 大小:21.23KB
下载 相关 举报
操作系统实验指导.docx_第1页
第1页 / 共15页
操作系统实验指导.docx_第2页
第2页 / 共15页
操作系统实验指导.docx_第3页
第3页 / 共15页
操作系统实验指导.docx_第4页
第4页 / 共15页
操作系统实验指导.docx_第5页
第5页 / 共15页
操作系统实验指导.docx_第6页
第6页 / 共15页
操作系统实验指导.docx_第7页
第7页 / 共15页
操作系统实验指导.docx_第8页
第8页 / 共15页
操作系统实验指导.docx_第9页
第9页 / 共15页
操作系统实验指导.docx_第10页
第10页 / 共15页
操作系统实验指导.docx_第11页
第11页 / 共15页
操作系统实验指导.docx_第12页
第12页 / 共15页
操作系统实验指导.docx_第13页
第13页 / 共15页
操作系统实验指导.docx_第14页
第14页 / 共15页
操作系统实验指导.docx_第15页
第15页 / 共15页
亲,该文档总共15页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

操作系统实验指导.docx

《操作系统实验指导.docx》由会员分享,可在线阅读,更多相关《操作系统实验指导.docx(15页珍藏版)》请在冰点文库上搜索。

操作系统实验指导.docx

操作系统实验指导

安全操作系统实验指导书

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

配置文件内所列的目录

缓存文件

四种安装方式:

#cplibaddsub.so/usr/bin#ldconfig

#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

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 经管营销 > 经济市场

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2