您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 公司方案 > 81操作系统实验报告
学生实验报告姓名:黄维津年级专业班级计科141班学号201415210137成绩课程名称操作系统实验名称实验1操作系统界面【实验目的、要求】1.熟悉Linux字符操作界面;2.熟悉常用的Shell命令;3.熟悉Linux文本编辑方法;4.掌握利用GCC编译器在Linux环境下编译C程序的能力【实验内容】1.Linux字符操作界面;2.Shell操作命令;3.VIM编辑器的使用方法;4.Linux下的C程序开发。【实验环境】(含主要设计设备、器材、软件等)计算机C语言编程软件redhat操作系统VM虚拟机【实验步骤、过程】(含原理图、流程图、关键代码,或实验过程中的记录、数据等)1.同时按住“Ctrl+Alt+Shift+F2”键进入字符操作界面;2.熟悉常用的Shell操作命令(1)查看系统分区情况:fdisk-l(2)查看当前运行级别:runlevel可知,当前运行级别为:5(3)将当前运行级别改变为3:init3运行后的结果如下图:输入命令runlevel查看当前运行级别可知为3(4)新建文件:touch文件名这里创建了一个文件名为test.txt的文件(5)删除文件:rm要删除的文件名这里我删除了刚新建的test.txt文件,输入ls命令已查看不到test.txt文件了,证明已删除成功。(6)查看文件权限:ls-l可知hello.c文件的权限是644(7)更改文件权限:chmod文件权限文件名这里将hello.c文件的权限更改为755,即rwxr-xr-x3.VIM编辑器的使用方法(1)一般模式:以vi打开一个文件就直接进入一般模式了(这是默认的模式)。(2)编辑模式:在一般模式中可以进行删除、复制、粘贴等的操作,但是却无法编辑文件的内容,只有当到你按下【i,I,o,O,a,A,r,R】等任何一个字母之后才会进入编辑模式。按下【Esc】即可退出编辑模式(3)命令行模式:输入【:/?】三个中的任何一个,就可以将光标移动到最底下那一行。在命令行模式下,可选用以下指令离开vi::q!退出,不保存;:wq保存退出;4.Linux下的C程序开发(1)使用touch命令创建c文件hello.c;(2)使用vihello.c命令编辑c文件:#includestdio.hintmain(){printf(“hello,word”);return0;}(3)按esc键[进入命令模式](4)输入:“:wq!”保存退出;(5)编译程序:gcc-ohellohello.c(6)运行程序:./hello(7)运行结果:输出hello,word2016年11月20日【实验结果或总结】(对实验结果进行相应分析,或总结实验的心得体会,并提出实验的改进意见)在实验的过程中,我用的是VM虚拟机和redhat操作系统(linux系统中的一种),学会了如何在虚拟机上安装并运行linux操作系统,也熟悉了Linux字符操作界面和常用的shell命令。虽然我一开始从图形操作界面转到命令行操作界面多少有些不适应,但随着对命令行的熟悉应用,发现也没那么难,只是命令行太多了会记不住。与此同时,第一次在linux系统下编写c程序,感觉用vi比较麻烦,因为有错了不能调试,只是提示错误。不过此次实验要求掌握编写并运行一个简单的c程序,我就直接输出一句话就好了,所以不需要怎么调试了,直接用gcc编译并运行。在这实验的过程中,加深了对一些术语的理解,也让我学到了新的知识。要说到实验的改进意见,我想最大要改进的地方就是要提高虚拟机运行的流畅度,不能在使用虚拟机中的操作系统时出现运行卡顿等的情况,以保住实验的流畅进行。指导教师签名:20年月日【备注】学生实验报告姓名:黄维津年级专业班级计科141学号201415210137成绩课程名称操作系统实验名称实验2进程管理【实验目的、要求】1.熟悉进程与程序的区别,加深对进程概念的理解;2.了解并发进程的执行过程;3.掌握解决进程互斥使用资源的方法。【实验内容】1.编写一段程序,实现进程的管理;2.编写一段程序实现进程的通信。【实验环境】(含主要设计设备、器材、软件等)信息楼505机房Linux环境【实验步骤、过程】(含原理图、流程图、关键代码,或实验过程中的记录、数据等)1.编写一个程序,创建两个子进程,然后分别在父、子进程中显示它们的进程号,以及对于的父进程号(1)思路:使用系统调用fork()创建两个子进程。当此程序运行时,在系统中有一个父进程和两个子进程活动。让每一个进程在屏幕上显示一个字符:父进程显示字符“A”,子进程分别显示字符“b”和“c”。(2)程序关键代码#includestdio.hmain(){intp1,p2;if(p1=fork())/*子进程创建成功,如果失败fork函数会返回一个负值*/putchar('b');else{if(p2=fork())/*子进程创建成功,如果失败fork函数会返回一个负值*/putchar('c');elseputchar('A');/*父进程执行*/}}(3)运行结果:Abc任意的排序(4)结果分析:从进程执行并发来看,输出Abc的排列都是有可能的。fork()函数创建进程所需的时间虽然可能多于输出一个字符的时间,但各个进程的时间片的获得却不一定是顺序的,所以输出Abc的排列都是有可能的。2.写一个程序,实现父子进程之间的通信用管道实现:pipe_named_write.c//向管道文件写信息#includestdio.h#includeunistd.h#includesys/types.hintmain(){FILE*out_file;intcount=1;charbuf[80];out_file=fopen(“mypipe”,”w”);if(out_file==NULL){printf(“Erroropeningpipe”);exit(1);}sprintf(buf,”thisisthetestdataforthenamedpipeexample\n”);fwrite(buf,1,88,out_file);fclose(out_file);}pipe_named_read.c//从管道文件读信息intmain(){FILE*in_file;intcount=1;charbuf[80];in_file=fopen(“mypipe”,“r”);if(in_file==NULL){printf(“Errorinfopen.\n”);exit(1);}while((count=fread(buf,1,80,in_file))0)printf(“receivedfrompipe:%s\n”,buf);fclose()in_file;}使用FIFO实现进程间的通信。用mkfifo函数创建管道文件my_fifo,然后从Data.txt文件中读取数据,并写入管道文件my_fifo中;在从管道文件my_fifo中读取数据,写入DataFromFIFO.txt文件中。整个过程用两个C程序来实现:fifowrite.c文件实现管道文件的创建,以及将Data.txt文件中的数据读入管道文件中;fiforead.c文件实现从管道文件中读取数据,并写入DataFromFIFO.txt文件中。fifowrite.c的源代码如下:#includeunistd.h#includestdlib.h#includefcntl.h#includelimits.h#includesys/types.h#includesys/stat.h#includestdio.h#includestring.hintmain(){constchar*fifo_name=/home/c/my_fifo;intpipe_fd=-1;intdata_fd=-1;intres=0;constintopen_mode=O_WRONLY;intbytes_sent=0;charbuffer[PIPE_BUF+1];if(access(fifo_name,F_OK)==-1){//管道文件不存在//创建命名管道res=mkfifo(fifo_name,0777);if(res!=0){fprintf(stderr,Couldnotcreatefifo%s\n,fifo_name);exit(EXIT_FAILURE);}}printf(Process%dopeningFIFOO_WRONLY\n,getpid());//以只写阻塞方式打开FIFO文件,以只读方式打开数据文件pipe_fd=open(fifo_name,open_mode);data_fd=open(Data.txt,O_RDONLY);printf(Process%dresult%d\n,getpid(),pipe_fd);if(pipe_fd!=-1){intbytes_read=0;//向数据文件读取数据bytes_read=read(data_fd,buffer,PIPE_BUF);buffer[bytes_read]='\0';while(bytes_read0){//向FIFO文件写数据res=write(pipe_fd,buffer,bytes_read);if(res==-1){fprintf(stderr,Writeerroronpipe\n);exit(EXIT_FAILURE);}//累加写的字节数,并继续读取数据bytes_sent+=res;bytes_read=read(data_fd,buffer,PIPE_BUF);buffer[bytes_read]='\0';}close(pipe_fd);close(data_fd);}elseexit(EXIT_FAILURE);printf(Process%dfinished\n,getpid());exit(EXIT_SUCCESS);}源文件fiforead.c的代码如下:#includeunistd.h#includestdlib.h#includestdio.h#includefcntl.h#includesys/types.h#includesys/stat.h#includelimits.h#includestring.hintmain(){constchar*fifo_name=/home/c/my_fifo;intpipe_fd=-1;intdata_fd=-1;intres=0;intopen_mode=O_RDONLY;charbuffer[PIPE_BUF+1];intbytes_read=0;intbytes_write=0;//清空缓冲数组memset(buffer,'\0',sizeof(buffer));printf(Process%dopeningFIFOO_RDONLY\n,getpid());//以只读阻塞方式打开管道文件,注意与fifowrite.c文件中的FIFO同名pipe_fd=open(fifo_name,open_mode);//以只写方式创建保存数据的文件data_fd=open(DataFormFIFO.txt,O_WRONLY|O_CREAT,0644);printf(Process%dresult%d\n,getpid(),pipe_fd);if(pipe_fd!=-1){do{//读取FIFO中的数据,并把它保存在文件DataFormFIFO.txt文件中res=read(pipe_fd,buffer,PIPE_BUF);bytes_write=write(data_fd,buffer,res);bytes_read+=res;}while(res0);close(pipe_fd);close(data_fd);}elseexit(EXIT_FAILURE);printf(Process%dfinished,%dbytesread\n,getp
本文标题:81操作系统实验报告
链接地址:https://www.777doc.com/doc-3960331 .html