您好,欢迎来到意榕旅游网。
搜索
您的当前位置:首页《操作系统原理》实验指导书

《操作系统原理》实验指导书

来源:意榕旅游网
《操作系统原理》实验指导书

《操作系统原理》实验指导书罗琼

⼴州⼤学物理与电⼦⼯程学院1、Linux环境下基本命令的使⽤2、进程管理实验3、命令解释程序的实现

1、实验⼀Linux环境下基本命令的使⽤⼀、实验⽬的:

(1)掌握Shell命令在Unix或Linux操作系统中的作⽤。(2)理解Shell命令的解释和运⾏机制。

(3)掌握Unix或Linux系统环境下的常⽤的Shell基本操作命令。⼆、实验内容:

(1)查看系统的命令提⽰符,确定系统使⽤的Shell程序类型,列出Linux系统常见的Shell 种类。(2)查看当前登录在系统中的⽤户列表、系统中的⽤户总数和系统启动时间。(3)查看当前的⽇期和时间。

(4)显⽰当前⽬录,改变到⽤户主⽬录并列出当前⽬录的内容。

(5)在当前⽬录下,创建名为“⾃⼰姓名(⽤⾃⼰学号代替)”的新⽬录。在所创建的⽬录下创建名为“newfile”的新⽂件。(6)在屏幕上显⽰⽂件newfile的内容。(7)删除“⾃⼰姓名”中的newfile⽂件。(8)当前⽬录的⽬录“⾃⼰姓名”。(9)列出所有⽂件。三、实验步骤:1、登录和退出

<1> 登录服务器系统: root (实际的⽤户名⾃⼰设置)。<2> 在login:后输⼊⽤户帐号(第⼀次进⼊输⼊ root):密码:未知

<3> 登录后,输⼊passwd命令来修改密码。根据提⽰输⼊当前密码,再输⼊两次新的密码。<4> 输⼊logout命令或exit命令退出系统。2、获取帮助信息

命令man提供了系统操作命令的在线帮助。例如,输⼊man passwd 可以获取命令passwd 的帮助说明;输⼊man open 可以获取open 函数的帮助说明。按空格键,翻页浏览。按<:>,再按q退出帮助。3、基本操作命令

<1>pwd:确定你当前的⼯作⽬录<2> ls -al:显⽰当前⼯作⽬录的内容

<3> mkdir:建⽴⼀个⼦⽬录<4> cd:转换⽬录

<5> cat或more:查看⽂件内容<6> cp:复制⽂件<7> rm -i:删除⽂件<8> mv:重命名⽂件<9> find:查找⽂件<10> vi编辑命令新⽂件

<11> who查看当前登录在系统中的⽤户列表、系统中的⽤户总数和系统启动时间。各个命令的具体使⽤⽅法,可以⽤man命令查看。4、vi编辑器

vi编辑器是⼀个⼩巧但功能强⼤的程序。vi编辑器有三种不同的模式:插⼊模式——这个模式是通过在命令模式按下“i”键进⼊的。

命令模式——这是⽤户输⼊单键命令的模式。在其他模式中按下ESC键就可以进⼊命令模式。常见的执⾏删除操作的命令有:dd 删除整个⾏

#dd 按照输⼊的数字(#),从当前⾏删除⼏⾏D 删除光标位置后⾯全部内容dw 删除光标所在位置的单词

冒号模式——从命令模式输⼊⼀个冒号(:)就可以进⼊这个模式。常见的冒号模式命令有::wq 保存且退出编辑器:w 保存但不退出:q 退出且不保存:q! 强⾏退出vi,不保存。:help 获取帮助

1)在系统提⽰符($)下输⼊命令vi和想要编辑(建⽴)的⽂件名vi test.c

2)按键I进⼊插⼊模式。屏幕上看不到字符i,屏幕下⽅出现--INSERT--字样。3)输⼊你的程序:

/*********************************************************************#include

void my_print1(char *);void my_print2(char *);main (){

char string[] = “hello world”;my_print1 (string);my_print2 (string);}

void my_print1(char *string){

printf(“The string is %s\\n”, string);}

void my_print2(char *string){

char *string2;int size, i;

size = strlen (string);

string2 = (char *) malloc (size + 1);for (i = 0; i < size; i++){

string2[size – i] = string[i];}

string2[size+1] = ‘\\0’;

printf (“The string printed backward is %s\\n”, string2); }4)按〈Esc〉键,从插⼊模式进⼊冒号模式。5)输⼊wq,保存退出四、实验报告要求:

1.记录输⼊LINUX相关命令后系统输出。2.使⽤过程出现的问题及解决⽅法实验⼆:进程管理实验⼀、实验⽬的:

(1)了解有关Linux系统调⽤。

(2)学习有关Linux的进程创建,理解进程创建后两个并发进程的执⾏。(3)加深对进程概念的理解,明确进程和程序的区别。⼆、实验内容(1)进程的创建。

在Linux环境下,编写⼀个程序使⽤系统调⽤fork()创建2个⼦进程。当此⼦进程运⾏时,在系统中由⼀个⽗进程和两个⼦进程活动。让每个进程在屏幕上显⽰⼀个字符;⽗进程显⽰字符’x’,⼦进程分别显⽰’y’和’z’。试记录屏幕上的显⽰结果,并分析原因。

(2)进程的管道通信。

编写⼀个程序使⽤系统调⽤fork⽣成3个⼦进程,并使⽤系统调⽤pipe创建⼀个管道,使得这3个⼦进程和⽗进程公⽤同⼀管道进⾏信息通信要求该程序实现数据的输⼊、输出以及信息提⽰(3)加深对进程概念的理解,明确进程和程序的区别。三、实验提⽰:

(⼀)、Linux的系统调⽤1. 进程控制的系统调⽤

1)fork系统调⽤创建新的⼦进程格式: pid=int fork()

fork调⽤返回时,系统中已有两个⽤户级环境完全相同的进程存在,这两个进程从fork调⽤中得到的返回值不同,其中⼦进程得到的返回值为零,⽗进程得到的返回值是新创建⼦进程的进程标识号。2)exec系统调⽤

格式:int execl(path,arg0,arg1,…,argn,(char *)0)char *path, *arg0, *arg1, …, *argn ;

exec调⽤进程的正⽂段被指定的⽬标⽂件的正⽂段所覆盖,其属性的变化⽅式与fork成功后从⽗进程那⾥继承属性的⽅式⼏乎是⼀样的。系统中绝⼤多数命令都是通过exec来执⾏的,不但shell进程所创建的⼦进程使⽤它来执⾏⽤户命令,shell进程本⾝和它的祖先进程也是⽤exec来启动执⾏的。3) exit 系统调⽤终⽌进程执⾏格式:void exit(status) ;int status ;

参数status是调⽤进程终⽌时传递给其⽗进程的值。如调⽤进程还有⼦进程,则将其所有⼦进程的⽗进程改为1号进程。4) wait 系统调⽤等待⼦进程暂仃或终⽌格式:int wait(stat_loc) int wait((int *)0)int stat_loc ;

wait 调⽤将调⽤进程挂起,直到该进程收到⼀个被其捕获的信号或者它的任何⼀个⼦进程暂仃或终⽌为⽌。如果wait 调⽤之前已有⼦进程暂仃或终⽌,则该调⽤⽴即返回。5) lockf 锁定⽂件

格式:int lockf(fd,fuction,size)

int files, fuction; long size; fd –锁定⽂件标识

function=0表⽰不锁定;function =1(锁定);function=2(测试和锁定);function=3测试有否被锁定

size --锁定或解锁的字节数,0表⽰从⽂件的当前位置到⽂件尾。(⼆)、进程创建程序#include

void main(int argc, char *argv[ ]){ int pid;

pid=fork(); /* fork child process */if (pid<0)

{ fprintf(stderr, “Fork Failed”); exit(-1);}

else

if (pid= =0) /* child process */{ execlp(“/bin/ls”,”ls”,NULL);}else /* 进⼊⽗进程 */{

wait(NULL);

printf(“child Complete”);exit(0);}}

(三)、进程通信的系统调⽤函数实例1)pipe系统调⽤格式: int pipe (filedes)int filedes [2];管道通信程序#include#include

char parent[]={“A message from parent .”};char child[]={“A message from child .”};main(){

int chan1[2],chan2[2];char buf[100];

if (pipe(chan1)==-1 || pipe(chan2)==-1) errexit(“pipe”);if (fork()){

close(chan1[0]); close(chan2[1]);write(chan1[1],parent,sizeof parent);close(chan1[1]);read(chan2[0],buf,100);

printf(“parent process : %s \\n”,buf);close(chan2[0]);}else{

close(chan1[1]); close(chan2[0]);read(chan1[0],buf,100);

printf(“child process : %s \\n”,buf);write(chan2[1],child,sizeof child);close(chan2[1]); close(chan1[0]);}}

四、程序实现1、进程的创建2、进程间通信的实现五、实验报告要求

1.记录输⼊LINUX相关命令后系统输出。2.记录C程序,进⾏编译运⾏和调试。3.分析运⾏结果。4.体会

实验三综合上机-命令解释程序的实现⼀、实验⽬的:

实现⼀个简单的命令解释程序,掌握操作系统命令解释程序的实现原理。⼆、实验内容:

编写C程序parse来完成⼀个简单的命令解释程序,能够⽀持以下四个命令:quit、disp、list、changedir。三、实验要求:

(1)parse应提供⼀个命令提⽰符,如parse>,表⽰接收⽤户的输⼊,每次执⾏完成后再打印下⼀个命令提⽰符parse>。当⽤户没有输⼊时,parse需要⼀直处于随时等待输⼊状态,同时再屏幕上显⽰⼀些必要的信息。

(2)如果⽤户提交了⼀个内部命令,parse应当按照下⾯的描述执⾏相应动作。●quit:结束所有的⼦进程并退出parse.●disp: 显⽰命令⾏后的所有字符。●list:列出当前⽬录下的所有⽂件。●changedir:改变当前⽬录到所输⼊⽬录。(3)分析⽤户输⼊

1)分析⽤户输⼊的语法分析器应具有下⾯介绍的功能,它能够检查⽤户的输⼊错误。如⽤户输⼊的某些地⽅出错了,parse应提供合理的出错信息。

2)就像shell⼀样,parse每次接受⽤户输⼊的⼀⾏命令,在⽤户按下回车键(Enter)后开始执⾏分析动作。四、实验环境

本实验的程序⽤C语⾔编写,使⽤makefile⽂件编译整个程序,⽣成⼀个名为parse可执⾏程序,在终端输⼊“/parse”即可执

⾏。

makefile⽂件的内容如下:parse: parse.ccc parse.c –o parse五、流程图

六、程序实现

●quit:退出parse程序的执⾏.●disp: 显⽰命令⾏后的所有字符。●list:列出当前⽬录下的所有⽂件。

●changedir:改变当前⽬录到所输⼊⽬录。#include \"stdio.h\"#include \"string.h\"#include \"unistd.h\"

char re al_cmd[200],refe rence[200];get_cmd(char cmd[200]){

int i=0,j=0,k=0;real_cmd[0]='\\0';refe rence[0]='\\0';

while (cmd[i]!='\\0' && cmd[i]=' 'i++;

while (cmd[i]!='\\0' && cmd[i]!=' 'real_cmd[j++]=cmd[i++];

real_cmd[j]='\\0';if (cmd[i]!='\\0')

strcpy(re fere nce,cmd+i+1);}main(){

char cmd[200];

int quit=0,ch=0,cmd_le n,c[10];while (quit==0){ printf(\">\");

fgets(cmd,200,stdin);cmd[strlen(cmd)-1]='\\0';ge t_cmd[cmd];if (re al_cmd[0]=='\\0'continue;

printf(\"input command:[%s][%s]\\n\if (strcmp(re al_cmd,\"list\")==0){ sprintf(cmd,\"ls %s\system(cmd);}elseif ( )quit=1;e lse

if (strcmp(re al_cmd,\"change dir\")==0)if (re fere nce!=NULL){ if (chdir(refe re nce)<0)

printf(\"change dir:%s Error file or dire ctory!\\n\}e lse

if (strcmp(re ad_cmd,\"disp\")==0)( );else

if (strcmp(re al_cmd,\"pwd\")==0)syste m(\"pwd\");

else

printf(\"unknown command\\n\");}}

七、实验报告要求

1.记录输⼊LINUX相关命令后系统输出。2.记录C程序,进⾏编译运⾏和调试。3.分析运⾏结果。4.体会

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- yrrf.cn 版权所有 赣ICP备2024042794号-2

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务