版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
操作系统原理实验报告实验一:顾客接口实验实验目的理解面对操作命令的接口Shell。学会简朴的shell编码。理解操作系统调用的运行机制。掌握创立系统调用的办法。实验内容1)控制台命令接口实验该实验是通过“几个操作系统的控制台命令”、“终端解决程序”、“命令解释程序”和“Linux操作系统的bash”来让实验者理解面对操作命令的接口shell和进行简朴的shell编程。查看bash版本。编写bash脚本,统计/my目录下c语言文献的个数2)系统调用实验该实验是通过实验者对“Linux操作系统的系统调用机制”的进一步理解来理解操作系统调用的运行机制;同时通过“自己创立一种系统调用mycall()”和“编程调用自己创立的系统调用”进一步掌握创立和调用系统调用的办法。编程调用一种系统调用fork(),观察成果。编程调用创立的系统调用foo(),观察成果。自己创立一种系统调用mycall(),实现功效:显示字符串到屏幕上。编程调用自己创立的系统调用。实验原理1.控制台命令接口操作系统向顾客提供一组控制台命令,顾客能够通过终端输入命令的方式获得操作系统的服务,并由此来控制自己作业的运行。普通来讲,控制台命令应当包含:一组命令、终端解决程序以及命令解释程序。bash的由来当登录Linux或者打开一种xterm时,现在默认的shell就是bash。Bash是GNUProject的shell。GNUProject是自由软件基金会(FreeSoftwareFoundation)的一部分。它对Linux下的许多编程工具负责。Bash(BourneAgainShell)是自由软件基金会公布的Bourneshell的兼容程序。它包含了其它有些shell的许多良好的特性,功效非常的全方面。诸多Linux版本都供bash。bash的大致原理bash解决自己的脚本时,先找到需要解决的命令名称,进而在现在顾客的默认命令目录中找到对应的命令,这些默认目录普通是/usr/bin、/bin或/sbin。在执行这些命令时,先使用进程创立系统调用fork(),在使用exex()来执行这些命令。2.系统调用系统调用是操作系统为程序员提供的接口服务。使用系统调用,程序员能够更充足的运用计算机资源,使编写的程序更加灵活,功效更加强大。程序员在对系统充足理解的状况下甚至能够订做系统调用,实现那些非专业程序员所难以实现的功效。实验环节1.控制台命令接口实验指导查看bash版本在shell提示符下输入:$echo$BASH_VERSION显示以下成果:编写bash脚本:统计/my目录下c语言文献的个数通过bash脚本,能够有多个方式实现这个功效,而使用函数是其中个一种选择。在使用函数之前,必须先定义函数。(1)进入自己的工作目录,用vi编写名为count的文献cd/home/student#在home/student目录下编程vicount下面是脚本程序:#!/bin/bashfunctioncount{echo–n"Numberofmatchesfor$1:"#接受程序的第一种参数ls$1|wc–l#对子程序的第一种参数所在的目录进行操作}(2)执行将count文献复制到现在目录下,然后在现在目录下建立文献夹my:mkdirmycdmyvi1.c#在my目录下建立几个c文献,方便用来进行测试...cd...chmod+xcountcount./my/*.c2.系统调用实验指导编程调用一种系统调用fork()在应用程序中调用系统调用fork()非常简朴,下面的程序能够很清晰的显示出有fork()系统调用生成了子进程,而产生的分叉作用:#include<stdio.h>intmain(){ intiUid; iUid=fork(); if(iUid==0) for(;;){printf("Thisisparent.\n");sleep(1); } if(iUid>0) for(;;){ printf("Thisischild.\n"); sleep(1); } if(iUid<0)printf("Cannotusesystemcall.\n"); return0;}下面是可能得到的一种成果:thisischild.thisisparent.thisischild.thisisparent.thisisparent.thisischild.thisischild.thisisparent.thisisparent.thisischild.thisischild.thisisparent.thisisparent.thisischild.执行成果:实验成果分析:学会了基本的文献操作以及函数执行,验证了成果;父进程与子进程交替执行系统调用,由于完毕系统调用后都会睡眠,因此其它进程能够执行,得到上述成果。实验总结:本次实验通过内核编译的方式来理解操作系统的具体调用方式。在此过程中重要是熟悉Linux系统的几个终端命令上。通过本次操作系统实验,我对Linux操作系统内核有了初步的理解。实验二:进程管理实验实验目的加深对进程概念的理解,明确进程和程序的区别。进一步认识并发执行的实质。分析进程争用资源的现象,学习解决进程互斥的办法。理解Linux系统中进程通信的基本原理。实验内容1.编制实现软中断通信的程序使用系统调用fork()创立两个子进程,再用系统调用signal()让父进程捕获键盘上发出的中断信号(即按delete键),当父进程接受到这两个软中断的某一种后,父进程用系统调用kill()向两个子进程分别发出整数值为16和17软中断信号,子进程获得对应软中断信号,然后分别输出下列信息后终止:Childprocess1iskilledbyparent!!Childprocess2iskilledbyparent!!父进程调用wait()函数等待两个子进程终止后,输入下列信息,结束进程执行:Parentprocessiskilled!!多运行几次编写的程序,简略分析出现不同成果的因素。2.编制实现进程的管道通信的程序使用系统调用pipe()建立一条管道线,两个子进程分别向管道写一句话:Childprocess1issendingamessage!Childprocess2issendingamessage!而父进程则从管道中读出来自于两个子进程的信息,显示在屏幕上。规定:父进程先接受子进程P1发来的消息,然后再接受子进程P2发来的消息。实验原理进程的软中断通信算法流程图(2)源程序以下(旁边有加补充注释):#include<stdio.h>#include<signal.h>#include<unistd.h>#include<sys/types.h>intwait_flag;voidstop();main(){intpid1,pid2; //定义两个进程号变量signal(3,stop); //或者signal(14,stop);while((pid1=fork())==-1); //若创立子进程1不成功,则空循环if(pid1>0){ //子进程创立成功,pid1为进程号while((pid2=fork())==-1); //创立子进程2if(pid2>0){wait_flag=1;sleep(5); //父进程等待5秒kill(pid1,16); //杀死进程1kill(pid2,17); //杀死进程2wait(0); //等待第1个子进程1结束的信号wait(0); //等待第2个子进程2结束的信号printf("\nParentprocessiskilled!!\n");exit(0); //父进程结束}else{wait_flag=1;signal(17,stop); //等待进程2被杀死的中断号17printf("\nChildprocess2iskilledbyparent!!\n");exit(0);}}else{wait_flag=1;signal(16,stop); //等待进程1被杀死的中断号16printf("\nChildprocess1iskilledbyparent!!\n");exit(0);}}voidstop(){wait_flag=0;}2、进程的管道通信算法流程图(2)参考程序源代码#include<unistd.h>#include<signal.h>#include<stdio.h>intpid1,pid2;//定义两个进程变量main(){intfd[2];charOutPipe[100],InPipe[100]; //定义两个字符数组pipe(fd); //创立管道while((pid1=fork())==-1); //如果进程1创立不成功,则空循环if(pid1==0){//如果子进程1创立成功,pid1为进程号lockf(fd[1],1,0); //锁定管道sprintf(OutPipe,"\nChildprocess1issendingmessage!\n");//给Outpipe赋值write(fd[1],OutPipe,50); //向管道写入数据sleep(5); //等待读进程读出数据lockf(fd[1],0,0); //解除管道的锁定exit(0); //结束进程1}else{while((pid2=fork())==-1); //若进程2创立不成功,则空循环if(pid2==0){lockf(fd[1],1,0);sprintf(OutPipe,"\nChildprocess2issendingmessage!\n");write(fd[1],OutPipe,50);sleep(5);lockf(fd[1],0,0);exit(0);}else{wait(0); //等待子进程1结束read(fd[0],InPipe,50); //从管道中读出数据printf("%s\n",InPipe); //显示读出的数据wait(0); //等待子进程2结束read(fd[0],InPipe,50);printf("%s\n",InPipe);exit(0); //父进程结束}}}实验过程:编写程序;执行并分析成果五.实验成果:1.进程的软中断通信:实验成果:2.进程的管道通信:实验成果:
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026青岛啤酒股份有限公司招聘88人备考题库附答案详解(突破训练)
- 2026青海海北建工工程建设有限公司招聘1人备考题库附答案详解(典型题)
- 2026黑龙江佳木斯市汤原县人大代表联络服务中心招聘公益性岗位人员1人备考题库附答案详解(预热题)
- 2026黑龙江牡丹江医科大学博士招聘100人备考题库附答案详解(模拟题)
- 2026黑龙江绥化市青冈县乡镇卫生院招聘医学相关专业毕业生5人备考题库带答案详解
- 2026黑龙江黑河市孙吴县社区卫生服务中心招聘2人备考题库完整参考答案详解
- 南充职业技术学院2026年引进高层次人才公开考核招聘的备考题库(10人)附答案详解(综合题)
- 四川省市场监督管理局宣传和档案中心关于2026年公开招聘编外工作人员的备考题库(3人)附答案详解(b卷)
- 2026年海绵城市道路透水铺装图纸
- 2026年加油站站区绿化与水土保持措施
- CJ/T 216-2013给水排水用软密封闸阀
- 安全员c1证考试试题及答案
- 2025-2030年牛仔服装行业市场深度调研及发展趋势与投资战略研究报告
- 陪玩俱乐部合同协议
- 2025年四川“蓉漂”人才荟成都市事业单位招聘412人历年自考难、易点模拟试卷(共500题附带答案详解)
- 中国高校餐饮研究报告2025-红餐产业研究院
- 现场泥工管理制度内容
- ICH《M10:生物分析方法验证及样品分析》
- 【MOOC】英国小说-南京大学 中国大学慕课MOOC答案
- 烧烤门店合伙人协议书模板
- 化肥进出口业务操作考核试卷
评论
0/150
提交评论