OS实验指导书教程文件.docx

上传人:b****8 文档编号:9244039 上传时间:2023-05-17 格式:DOCX 页数:33 大小:30.82KB
下载 相关 举报
OS实验指导书教程文件.docx_第1页
第1页 / 共33页
OS实验指导书教程文件.docx_第2页
第2页 / 共33页
OS实验指导书教程文件.docx_第3页
第3页 / 共33页
OS实验指导书教程文件.docx_第4页
第4页 / 共33页
OS实验指导书教程文件.docx_第5页
第5页 / 共33页
OS实验指导书教程文件.docx_第6页
第6页 / 共33页
OS实验指导书教程文件.docx_第7页
第7页 / 共33页
OS实验指导书教程文件.docx_第8页
第8页 / 共33页
OS实验指导书教程文件.docx_第9页
第9页 / 共33页
OS实验指导书教程文件.docx_第10页
第10页 / 共33页
OS实验指导书教程文件.docx_第11页
第11页 / 共33页
OS实验指导书教程文件.docx_第12页
第12页 / 共33页
OS实验指导书教程文件.docx_第13页
第13页 / 共33页
OS实验指导书教程文件.docx_第14页
第14页 / 共33页
OS实验指导书教程文件.docx_第15页
第15页 / 共33页
OS实验指导书教程文件.docx_第16页
第16页 / 共33页
OS实验指导书教程文件.docx_第17页
第17页 / 共33页
OS实验指导书教程文件.docx_第18页
第18页 / 共33页
OS实验指导书教程文件.docx_第19页
第19页 / 共33页
OS实验指导书教程文件.docx_第20页
第20页 / 共33页
亲,该文档总共33页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

OS实验指导书教程文件.docx

《OS实验指导书教程文件.docx》由会员分享,可在线阅读,更多相关《OS实验指导书教程文件.docx(33页珍藏版)》请在冰点文库上搜索。

OS实验指导书教程文件.docx

OS实验指导书教程文件

 

OS实验指导书

实验一UNIX/LINUIX入门

实验学时:

2学时

实验类型:

验证型

一、实验目的

了解UNIX/LINUX运行环境,熟悉UNIX/LINUX的常用基本命令,熟悉和掌握UNIX/LINUX下c语言程序的编写、编译、调试和运行方法。

二、实验内容

●熟悉UNIX/LINUX的常用基本命令如ls、who、pwd、ps等。

●练习UNIX/LINUX的文本行编辑器vi的使用方法

●熟悉UNIX/LINUX下c语言编译器cc/gcc的使用方法。

用vi编写一个简单的显示“Hello,World!

”c语言程序,用gcc编译并观察编译后的结果,然后运行它。

三、实验要求

按照要求编写程序,放在相应的目录中,编译成功后执行,并按照要求分析执行结果,并写出实验报告。

四、Linux常用命令

Linux系统常用命令格式:

command[option][argument1][argument2]...

其中option以“-”开始,多个option可用一个“-”连起来,如“ls-l-a”与“ls-la”的效果是一样的。

根据命令的不同,参数分为可选的或必须的;所有的命令从标准输入接受输入,输出结果显示在标准输出,而错误信息则显示在标准错误输出设备。

可使用重定向功能对这些设备进行重定向。

命令在正常执行结果后返回一个0值,如果命令出错可未完全完成,则返回一个非零值(在shell中可用变量$?

查看)。

在shellscript中可用此返回值作为控制逻辑的一部分。

帮助命令:

man获取相关命令的帮助信息

例如:

mandir可以获取关于dir的使用信息。

info获取相关命令的详细使用方法

例如:

infoinfo可以获取如何使用info的详细信息。

 

bzip2/bunzip2.bz2文件的压缩/解压缩程序

cpio备份文件

dump备份文件系统

gzip/gunzip.gz文件的压缩/解压缩程序

gzexe压缩可执行文件

restore还原由倾倒(Dump)操作所备份下来的文件或整个文件系统(一个分区)

tar将若干文件存档或读取存档文件

unarj解压缩.arj文件

zip/unzip压缩/解压缩zip文件

磁盘操作:

cd/pwd切换目录/显示当前工作目录

df显示磁盘的相关信息

du显示目录或文件的大小

e2fsck检查ext2/ext3文件系统的正确性

fdisk对硬盘进行分区

fsck检查文件系统并尝试修复错误

losetup设置循环设备

ls列出目录内容

mkdir创建目录

mformat对MS-DOS文件系统的磁盘进行格式化

mkbootdisk建立目前系统的启动盘

mke2fs建立ext2文件系统

mkisofs制作iso光盘映像文件

mount/umount加载文件系统/卸载文件系统

quota显示磁盘已使用的空间与限制

sync将内存缓冲区内的数据写入磁盘

tree以树状图列出目录的内容

 

系统操作:

alias设置指令的别名

chkconfig检查,设置系统的各种服务

clock调整RTC时间

date显示或设置系统时间与日期

dmesg显示开机信息

eval重新运算求出参数的内容

exit退出目前的shell

export设置或显示环境变量

finger查找并显示用户信息

free显示内存状态

hostid显示主机标识

hostname显示主机名

id显示用户标识

kill删除执行中的程序或工作

last列出目前与过去登入系统的用户相关信息

logout退出系统

lsmod显示已载入系统的模块

modprobe自动处理可载入模块

passwd设置用户密码

psprocessstatus报告程序状况

reboot重启计算机

rhwo查看系统用户

rlogin远程登入

rpm管理Linux各项套件的程序

shutdown关机

suswitchuser变更用户身份

top显示,管理执行中的程序

uname显示系统信息

useradd/userdel添加用户/删除用户

userinfo图形界面的修改工具

usermod修改用户属性,包括用户的shell类型,用户组等,甚至还能改登录名

w显示目前注册的用户及用户正运行的命令

whereis确定一个命令的二进制执行码,源码及帮助所在的位置

who列出正在使用系统的用户

whois查找并显示用户信息

网络通信:

arp网地址的显示及控制

ftp文件传输

lftp文件传输

mail发送/接收电子邮件

mesg允许或拒绝其他用户向自己所用的终端发送信息

muttE-mail管理程序

ncftp文件传输

netstat显示网络连接、路由表和网络接口信息

pine收发电子邮件,浏览新闻组

ping向网络上的主机发送icmpechorequest包

ssh安全模式下的远程登录

telnet远程登录

talk与另一用户对话

traceroute显示到达某一主机所经由的路径及所使用的时间

wget从网络上自动下载文件

write向其他用户的终端写信息

文件操作:

cat显示文件内容和合并多个文件

clear清屏

chattr改变文件属性

chgrp改变文件组权

chmod改变文件或目录的权限

chown改变文件的属权

comm比较两个已排过序的文件

cp将文件拷贝至另一文件

dd从指定文件读取数据写到指定文件

df报告磁盘空间使用情况

diff比较两个文本文件,列出行不同之处

du统计目录/文件所占磁盘空间的大小

file辨识文件类型

emacs功能强大的编辑环境

find搜索文件并执行指定操作(find2)

grep按给定模式搜索文件内容

head显示指定文件的前若干行

less按页显示文件

ln创建文件链接

locate查找符合条件的文件

more在终端屏幕按帧显示文本文件

mv文件或目录的移动或更名

rm/rmdir删除文件/目录

sed利用script来处理文本文件

sort对指定文件按行进行排序

tail显示指定文件的最后部分

touch创建文件

tr转换字符

vi全屏编辑器

wc显示指定文件中的行数,词数或字符数

which在环境变量$PATH设置的目录里查找符合条件的文件mv文件或目录的移动或更名

rm/rmdir删除文件/目录

sed利用script来处理文本文件

sort对指定文件按行进行排序

tail显示指定文件的最后部分

touch创建文件

tr转换字符

vi全屏编辑器

wc显示指定文件中的行数,词数或字符数

 

实验二进程管理

实验学时:

2学时

实验类型:

验证型、设计型

一、实验目的

加深对进程概念的理解,明确进程与程序的区别;进一步认识并发执行的实质。

二、实验内容

(1)进程创建

编写一段程序,使用系统调用fork()创建两个子进程。

当此程序运行时,在系统中有一个父进程和两个子进程活动。

让每一个进程在屏幕上显示一个字符:

父进程显示“a“;子进程分别显示字符”b“和字符“c”。

试观察记录屏幕上的显示结果,并分析原因。

(2)进程控制

修改已编写的程序,将每一个进程输出一个字符改为每一个进程输出一句话,再观察程序执行时屏幕上出现的现象,并分析原因。

(3)进程的管道通信

编写程序实现进程的管道通信。

使用系统调用pipe()建立一个管道,二个子进程P1和P2分别向管道各写一句话:

Child1issendingamessage!

Child2issendingamessage!

父进程从管道中读出二个来自子进程的信息并显示(要求先接收P1,再接收P2)。

三、实验要求

按照要求编写程序,放在相应的目录中,编译成功后执行,并按照要求分析执行结果,并写出实验报告。

四、实验报告要求

●实验目的

●实验内容

●实验要求

●实验设计(功能设计、数据结构、程序框图)

●实验结果及分析

●运行结果

●感想

●参考资料

五、补充材料

管道是进程间通信中最古老的方式,它包括无名管道和有名管道两种,前者用于父进程和子进程间的通信,后者用于运行于同一台机器上的任意两个进程间的通信。

无名管道由pipe()函数创建:

#include

intpipe(intfiledis[2]);

参数filedis返回两个文件描述符:

filedes[0]为读而打开,filedes[1]为写而打开。

filedes[1]的输出是filedes[0]的输入。

下面的例子示范了如何在父进程和子进程间实现通信。

#defineINPUT0

#defineOUTPUT1

voidmain(){

intfile_descriptors[2];

/*定义子进程号*/

pid_tpid;

charbuf[256];

intreturned_count;a

/*创建无名管道*/

pipe(file_descriptors);

/*创建子进程*/

if((pid=fork())==-1){

printf("Errorinfork\n");

exit

(1);

}

/*执行子进程*/

if(pid==0){

printf("inthespawned(child)process...\n");

/*子进程向父进程写数据,关闭管道的读端*/

close(file_descriptors[INPUT]);

write(file_descriptors[OUTPUT],"testdata",strlen("testdata"));

exit(0);

}else{

/*执行父进程*/

printf("inthespawning(parent)process...\n");

/*父进程从管道读取子进程写的数据,关闭管道的写端*/

close(file_descriptors[OUTPUT]);

returned_count=read(file_descriptors[INPUT],buf,sizeof(buf));

printf("%dbytesofdatareceivedfromspawnedprocess:

%s\n",

returned_count,buf);

}

}

 

实验三一个进程启动另一个程序的执行

实验学时:

2学时

实验类型:

设计

一、实验目的

编写Linux环境下,fork()与exec()的结合使用实现一个进程启动另一个程序的执行的基本方法,掌握exec()的几种调用方法。

二、实验内容

父进程从终端读取要执行的命令,并交给子进程执行。

父进程等待子进程结束,并打印子进程的返回值。

提示:

从终端读取要执行的命令可用fgets()实现。

三、实验要求

按照要求编写程序,放在相应的目录中,编译成功后执行,并按照要求分析执行结果,并写出实验报告。

四、实验报告要求

●实验目的

●实验内容

●实验要求

●实验设计(功能设计、数据结构、程序框图)

●实验结果及分析

●运行结果

●感想

●参考资料

五、补充材料

一个进程如何来启动另一个程序的执行?

在Linux中要使用exec()类的函数实现在一个进程来启动另一个程序。

exec类的函数不止一个,但大致相同,在Linux中,它们分别是:

execl,execlp,execle,execv,execve和execvp,下面以execlp为例,其它函数究竟与execlp有何区别,请通过manexec命令来了解它们的具体情况。

一个进程一旦调用exec类函数,它本身就“死亡”了,系统把代码段替换成新的程序的代码,废弃原有的数据段和堆栈段,并为新程序分配新的数据段与堆栈段,唯一留下的,就是进程号,也就是说,对系统而言,还是同一个进程,不过已经是另一个程序了。

如果你的程序想启动另一程序的执行但自己仍想继续运行的话,怎么办呢?

那就是结合fork与exec()的使用。

下面一段代码显示如何启动运行其它程序:

 

#include

charcommand[256];

intmain()

{

intrtn;/*子进程的返回数值*/

interrorno;

while

(1){

/*从终端读取要执行的命令*/

printf(">");

fgets(command,256,stdin);

command[strlen(command)-1]=0;

if(fork()==0){

/*子进程执行此命令*/

errorno=execlp(command,command,NULL,NULL);

/*如果exec函数返回,表明没有正常执行命令,打印错误信息*/

perror(command);

exit(errorno);

}

else{

/*父进程,等待子进程结束,并打印子进程的返回值*/

wait(&rtn);

printf("childprocessreturn%d\n",rtn);

}

}

return0;

}

表1exec()族调用

execl(执行文件)

相关函数

fork,execle,execlp,execv,execve,execvp

表头文件

#includeFxhLinux联盟

定义函数

intexecl(constchar*path,constchar*arg,....);FxhLinux联盟

函数说明

execl()用来执行参数path字符串所代表的文件路径,接下来的参数代表执行该文件时传递过去的argv(0)、argv[1]……,最后一个参数必须用空指针(NULL)作结束。

FxhLinux联盟

返回值

如果执行成功则函数不会返回,执行失败则直接返回-1,失败原因存于errno中。

FxhLinux联盟

范例

#includeFxhLinux联盟

main()FxhLinux联盟

{FxhLinux联盟

execl(“/bin/ls”,”ls”,”-al”,”/etc/passwd”,(char*)0);FxhLinux联盟

}FxhLinux联盟

执行

/*执行/bin/ls-al/etc/passwd*/FxhLinux联盟

-rw-r--r--1rootroot705Sep313:

52/etc/passwdFxhLinux联盟

FxhLinux联盟

FxhLinux联盟execlp(从PATH环境变量中查找文件并执行)

相关函数

fork,execl,execle,execv,execve,execvpFxhLinux联盟

表头文件

#includeFxhLinux联盟

定义函数

intexeclp(constchar*file,constchar*arg,……);FxhLinux联盟

函数说明

execlp()会从PATH环境变量所指的目录中查找符合参数file的文件名,找到后便执行该文件,然后将第二个以后的参数当做该文件的argv[0]、argv[1]……,最后一个参数必须用空指针(NULL)作结束。

FxhLinux联盟

返回值

如果执行成功则函数不会返回,执行失败则直接返回-1,失败原因存于errno中。

FxhLinux联盟

错误代码

参考execve()。

FxhLinux联盟

范例

/*执行ls-al/etc/passwdexeclp()会依PATH变量中的/bin找到/bin/ls*/FxhLinux联盟

#includeFxhLinux联盟

main()FxhLinux联盟

{FxhLinux联盟execlp(“ls”,”ls”,”-al”,”/etc/passwd”,(char*)0);FxhLinux联盟}FxhLinux联盟

执行

-rw-r--r--1rootroot705Sep313:

52/etc/passwdFxhLinux联盟

FxhLinux联盟

FxhLinux联盟execv(执行文件)

相关函数

fork,execl,execle,execlp,execve,execvpFxhLinux联盟

表头文件

#includeFxhLinux联盟

定义函数

intexecv(constchar*path,char*constargv[]);FxhLinux联盟

函数说明

execv()用来执行参数path字符串所代表的文件路径,与execl()不同的地方在于execve()只需两个参数,第二个参数利用数组指针来传递给执行文件。

FxhLinux联盟

返回值

如果执行成功则函数不会返回,执行失败则直接返回-1,失败原因存于errno中。

FxhLinux联盟

错误代码

请参考execve()。

FxhLinux联盟

范例

/*执行/bin/ls-al/etc/passwd*/FxhLinux联盟

#includeFxhLinux联盟

main()FxhLinux联盟

{FxhLinux联盟char*argv[]={“ls”,”-al”,”/etc/passwd”,(char*)}};FxhLinux联盟

execv(“/bin/ls”,argv);FxhLinux联盟}FxhLinux联盟

执行

-rw-r--r--1rootroot705Sep313:

52/etc/passwdFxhLinux联盟

FxhLinux联盟

FxhLinux联盟execve(执行文件)

相关函数

fork,execl,execle,execlp,execv,execvpFxhLinux联盟

表头文件

#includeFxhLinux联盟

定义函数

intexecve(constchar*filename,char*constargv[],char*constenvp[]);FxhLinux联盟

函数说明

execve()用来执行参数filename字符串所代表的文件路径,第二个参数系利用数组指针来传递给执行文件,最后一个参数则为传递给执行文件的新环境变量数组。

FxhLinux联盟

返回值

如果执行成功则函数不会返回,执行失败则直接返回-1,失败原因存于errno中。

范例

#include

main()

{

char*argv[]={“ls”,”-al”,”/etc/passwd”,(char*)0};

char*envp[]={“PATH=/bin”,0}

execve(“/bin/ls”,argv,envp);

}

执行

-rw-r--r--1rootroot705Sep313:

52/etc/passwd

execvp(执行文件)

相关函数

fork,execl,execle,execlp,execv,execve

表头文件

#include

定义函数

intexecvp(constchar*file,char*constargv[]);

函数说明

execvp()会从PATH环境变量所指的目录中查找符合参数file的文件名,找到后便执行该文件,然后将第二个参数argv传给该欲执行的文件。

返回值

如果执行成功则函数不会返回,执行失败则直接返回-1,失败原因存于errno中。

错误代码

请参考execve()。

范例

/*请与execlp()范例对照*

#include

main()

{char*argv[]={“ls”,”-al”,”/etc/passwd”,0};execvp(“ls”,argv);

}

执行

-rw-r--r--1rootroot705Sep313:

52/etc/passwd

 

实验四基于消息队列和共享内存的进程间通信

一、实验目的

Linux系统的进程通信机构(IPC)允许在任意进程间大批量地交换数据。

本实验的目的是了解和熟悉:

1.Linux支持的消息通信机制及其使用方法

2.Linux系统的共享存储区的原理及使用方法。

二、实验内容

1.消息的创建、发送和接收

使用消息调用msgget()、msgsnd()、msggrev()、msgctrl()编制长度为1K的消息的发送和接收程序。

2.共享存储取得创建、附接和断接

使用系统调用shmget()、shmat()、shmctl()、shmctl(),编制一个与上述功能相同的程序。

三、实验要求

按照要求编写程序,放在相应的目录中,编译成功后执行,并按照要求分析执行结果,并写出实验报告。

四、实验报告要求

●实验目的

●实验内容

●实验要求

●实验设计(功能设计、数据结构、程序框图)

●实验结果及分析

●运行结果

●感想

●参考资料

五、设计提示

为了便于操作和观察结果,用一个程序作为“引子”,先后fork()两个子进程,server和client,进行通信;

server端建立一个key为75的消息队列,等待其他进程发来的消息。

当遇到类型为1的消息时,则作为结束信号,取消该队列,并退出Server。

Server每收到一个消息后显示一句“(Server)received”;

Client端使用key为75的消息队列,先后发送类型为10到1的消息,然后退出。

最后一个消息即server端需要的结束信号。

Client每发送一条消息,显示一句“(Client)sent”;

父进程在server和client均退出后结束。

六、相关系统调用

1、共享内存

(1)共享存储区的建立

shmid=shmget(key,size,flag):

建立(获得)一块共享存储区,返回该共享存储区的描述符shmid;若尚未建立,便为进程建立一个指定大小的共享存储区。

(2)共享存储区的控制

shmctl(id,cmd,buf)

对共享存储区的状态信息进行查询,如其长度、所连接的进程数、创建者标识符等;也可设置或修改其属性,如共享存储区的许可权、当前连接的进程计数等;还

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

当前位置:首页 > IT计算机 > 电脑基础知识

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

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