版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
学生学号实验课成绩武汉理工大学学生实验报告书实验课程名称操作系统开课学院计算机科学与技术学院指导老师姓名刘军学生姓名姬琪学生专业班级软件工程SY10012012—2013学年第一学期实验课程名称:操作系统实验项目名称Linux键盘命令和vi实验成绩实验者姬琪软件工程组别专业班级SY1001同组者实验日期年月日第一部分:实验分析与设计(可加页)一、实验内容描述(问题域描述)Linux键盘命令和vi1.要求:掌握Linux系统键盘命令的使用方法使用mkdir命令建立一个子目录subdir2.使用cat或more命令查察file1文件的内容。3.将date命令的用法附带到文件file1的后边:4.利用ls-lfile1命令列出文件file1的较详细的信息。5.利用rmfa命令将文件fa删除。再利用ls-l命令查察工作目录内容。6.运转mvfile1file_a命令,而后用ls命令查察这两个文件能否都还在工作目录中2.vi操作认识vi编写器的作用和功能熟习vi的操作环境和切换方法掌握vi操作的方式(几个常用键)认识常用的快捷键二、实验基根源理与设计(包含实验方案设计,实验手段的确定,试验步骤等,用硬件逻辑也许算法描述)VI编写器的常有命令:filename:打开或新建文件,并将光标置于第一行首vi+nfilename:打开文件,并将光标置于第n行首+filename:打开文件,并将光标置于最后一行首vi+/patternfilename:打开文件,并将光标置于第一个与
pattern
般配的串处vi-rfilename:在上一次正用vi编写时发生系统崩溃,恢复vifilename....filename:打开多个文件,挨次进行编写
filename键盘命令:1.cat,
more
,
less
命令2.Is命令3.cp命令4.rm命令5.mv命令VI
命令:vi进入vi缓冲区vifile1:进入文件file1退出vi三、主要仪器设备及耗材Ubuntu操作体统Vi编写器第二部分:实验调试与结果分析(可加页)一、调试过程(包含调试方法描述、实验数据记录,实验现象记录,实验过程发现的问题等)使用mkdir命令建立一个子目录subdir$mkdirsubdir$2使用cat或more命令查察file1文件的内容。$catfile1SatMar1721:25:14CST2012$3将date命令的用法附带到文件file1的后边:mandate>>file1$mandate>>file1$4利用ls-lfile1命令列出文件file1的较详细的信息。$ls-lfile1-rw-rw-r--1ml2010ml20105690Mar1721:28file1$5利用rmfa命令将文件fa删除。再利用ls-l命令查察工作目录内容。$rmfa$ls-ltotal12-rw-rw-r--1ml2010ml20105690Mar1721:28file1$6运转mvfile1file_a命令,而后用ls命令查察这两个文件能否都还在工作目录中[ml2010@tansubdir]$mvfile1file_a[ml2010@tansubdir]$lsfile_a[ml2010@tansubdir]$明显,只有file_a在工作目录中,而file1不在工作目录中
?共分为三种模式(1)命令模式:命令模式为vi的初始模式,可以使用“上下左右”按键来挪动光标,您可以使用“删除字符”或“删除整行”来办理文档。在编写模式或指令列模式中按【ESC】键可换回命令模式。(2)编写模式:在命令模式中按下【
i,I,o,O,a,A,r,R
】等字母以后才会进入编辑模式。按下上述的字母时,在画面的左下方会出现【
--INSERT--
或
--
插入--
】的字样,才可以做文字数据输入。(3)指令列模式:在命令模式中间,输入【:】或【那一行,进入指令列模式。在这个模式中间,可以存盘、结束
/
】就可以将光标挪动到最底下vi、显示行号等操作。二、实验结果及分析(包含结果描述、实验现象分析、影响要素谈论、综合分析和结论等)Free显示系统中已用悠闲内存数目Rm:删除文件或目录三、实验小结、建议及领会Linux比较Windows有些不一样需要时间去适应。经过此次实验对Linux操作系统有了进一步的认识。初步掌握了一些Linux系统常用的命令。经过这仅一个周时间的学习,我们不过认识了linux的一些最基本知识,我会在后的学习中不停完美和加以扩大linux知识的学习。实验课程名称:
操作系统实验项目名称
Linux
下C编程
实验成绩实验者
姬琪
专业班级
软件
SY1001
组别同组者
实验日期
年代
日第一部分:实验分析与设计(可加页)一、实验内容描述(问题域描述)Linux下的C编程要求:掌握vi编写器的使用方法;掌握Linux下C程序的源程序编写方法;编译、连接和运转方法。内容:设计、编写、编译、连接以及运转一个C程序,此中包含键盘输入和屏幕输出语句。掌握vi编写器的使用方法;2.掌握gcc的使用格式二、实验基根源理与设计(包含实验方案设计,实验手段的确定,试验步骤等,用硬件逻辑也许算法描述)#include<iostream>usingnamespacestd;intmain(){intbegin,end;inttemp=0;cout<<"Pleaseentertwonumber:"<<endl;cin>>begin>>end;if(begin>end){temp=begin;begin=end;end=temp;}for(inti=begin;i<=end;i++){cout<<i<<"";}cout<<endl;return0;}三、主要仪器设备及耗材Ubuntu操作体统Vi编写器G++编译第二部分:实验调试与结果分析(可加页)一、调试过程(包含调试方法描述、实验数据记录,实验现象记录,实验过程发现的问题等)(1).先用viJamesJi.c建立文件(2).在vi的插入界面输入#include<stdio.h>intmain(void){printf("JamesJi.gcc!\r\n");return0;}(3).编译生成JamesJi文件:gcc-oJamesJiJamesJi.c(4).运转JamesJi文件:./JamesJi二、实验小结、建议及领会经过此次实验vi编写器有了进一步的应用,同时学会了在Linux进行简单的C语言编程,掌握Linux下C程序的源程序编写方法;编译、连接和运转方法。在此后的学习中会加大努力增强自己的编程能力。加深了对linux的印象,linux的兼容性很强。C/C++仍旧可以在上边编译成功。实验课程名称:
操作系统实验项目名称
SHELL编程和后台批办理
实验成绩实验者
姬琪
专业班级
软件
SY1001
组别同组者
实验日期
年代
日第一部分:实验分析与设计(可加页)三、实验内容描述(问题域描述)SHELL编程和后台批办理要求:掌握Linux系统的SHELL编程方法和后台批办理方法。内容:(1)将编译、连接以及运转上述C程序各步骤用SHELL程序批办理完成,前台运转。将上边SHELLL程序后台运转。观察原C程序运转时输入输出状况。更正调试上边SHELL程序和C程序,使得在后台批办理方式下,原键盘输入内容可以键盘命令行地点参数方式交互式输入代替原键盘输入内容,而后输出到屏幕。四、实验基根源理与设计(包含实验方案设计,实验手段的确定,试验步骤等,用硬件逻辑也许算法描述)test.cpp文件以下:#include<iostream>usingnamespacestd;intmain(){inti,j;inta[10][10]={0};a[0][0]=1;for(i=1;i<=9;i++){for(j=0;j<=i;j++){if((j==0)||(i==j))a[i][j]=1;elsea[i][j]=a[i-1][j-1]+a[i-1][j];}}for(i=0;i<=9;i++){for(j=0;j<=i;j++)cout<<""<<a[i][j];cout<<endl;}return0;}test.sh文件以下#!/bin/bash#Program:Thisprogramisusedtocompileandrunafileofcpp#History#2011/06/01chmodu+xtest.out./test.out三、主要仪器设备及耗材Ubuntu操作系统Vi编写器第二部分:实验调试与结果分析(可加页)四、调试过程(包含调试方法描述、实验数据记录,实验现象记录,实验过程发现的问题等)调试过程中未发现任何问题五、实验结果及分析(包含结果描述、实验现象分析、影响要素谈论、综合分析和结论等)六、实验小结、建议及领会经过此次实验熟习了shell编程,对Linux下的编程有了进一步的认识。也对终端方式使用的编写器vi有进一步的认识,如何使用命令来打开文件以及在编写器
Linux系统vi里面编写内容等,。总之,经过此次实验,对课本上的知识有了进一步的理解以及坚固。实验课程名称:
操作系统实验项目名称
Linux
系统调用(
time)
实验成绩实验者
姬琪
专业班级
软件
SY1001
组别同组者
实验日期
年代
日第一部分:实验分析与设计(可加页)一、实验内容描述(问题域描述)学习Linux内核的系统调用,理解、掌握Linux系统调用的实现框架、用户界面、参数传达、进入/返回过程。阅读Linux内核源代码,经过增添一个简单的系统调用实验,进一步理解Linux操作系统办理系统调用的一致流程。Linux系统调用使用方法。要求:掌握Linux系统调用使用方法。内容:学习使用time,ctime,sleep,exit
等
Linux
系统调用使用方法。二、实验基根源理与设计(包含实验方案设计,实验手段的确定,试验步骤等,用硬件逻辑也许算法描述)#include<stdio.h>#include<unistd.h>#include<time.h>#include<iostream>usingnamespacestd;intmain(){while(1){chartimebuf[100];time_tt;time(&t);strftime(timebuf,sizeof(timebuf),"%Y
年
%m
月
%d日%H:%M:%S",localtime(&t));cout<<timebuf<<endl;fflush(stdout);sleep(1);}return0;}在现有的系统中增添一个不用传达参数的系统调用。这个系统调用的功能是实现遍历进度。实验主要内容:增添系统调用的名字利用标准C库进行包装增添系统调用号在系统调用表中增添相应表项sys_mysyscall的实现三、主要仪器设备及耗材Ubuntu操作系统Vi编写器G++编译器第二部分:实验调试与结果分析(可加页)一、调试过程(包含调试方法描述、实验数据记录,实验现象记录,实验过程发现的问题等)【1】下载并部署内核源代码此步已经在实验2中完成。【2】增添系统调用号系统调用号在文件unistd.h里面定义。这个文件在ubuntu10.10下位于/usr/include/asm/unistd_32.h。此刻我们在unistd.h中增添我们的系统调用号:__NR_mysyscall,以下所示:231#define__NR_mysyscall
223/*
增添或更正为
mysyscall*//*注意:不一样版本的内核系统调用号不一样样,您可以依据内核版本不一样对系统调用号进行修改*/增添系统调用号以后,系统才能依据这个号,作为索引,去找syscall_table中的相应表项。【3】在系统调用表中增添或更正相应表项我们知道,系统调用办理程序(system_call)会依据eax中的索引到系统调用表(sys_call_table)中找寻相应的表项。所以,我们一定在那边增添我们自己的一个值。在的内核下,只要要更正arch/x86/kernel/syscall_table_32.S。注意,更正该文件第一要切换到root权限,其余使用
gedit
打开该文件时注意它的扩展名是大写的
S。233
.longsys_mysyscall
/*
在对应的地点更正或增添
*/234
.longsys_gettid235
.longsys_readahead
/*225*/到此刻为止,系统已经可以正确地找到并且调用sys_mysyscall。剩下的就只有一件事情,那就是sys_mysyscall的实现。4】sys_mysyscall的实现我们把一小段程序增添在kernel/sys.c里面。在这里,我们并无在kernel目录下其余增添自己的一个文件,这样做的目的是为了简单,并且不用更正makefile,省去不用要的麻烦。mysyscall系统调用实现遍历系统中的全部的进度,并打印每个进度的进度名字,进度表记符,进度的状态和父进度的表记符。进度名字、pid、进度状态、父进度的指针在task-struct结构的字段中。在内核中使用printk函数打印相关变量的值。遍历进度可以使用next_task宏,init_task进度为0号进度。asmlinkageintsys_mysyscall(void){在此处加入遍历进度的代码;return0;}【5】重新编译内核必定要重新编译内核。内核编译完成后,重新启动编译后的新内核。【6】编写用户态程序要测试新增添的系统调用,需要编写一个用户态测试程序(test.c)调用mysyscall系统调用。mysyscall系统调用中printk函数输出的信息在/var/log/message文件中。也可以在shell下用dmesg命令查察。用户态测试程序可以用以下方法实现#include<linux/unistd.h>include<sys/syscall.h>#define__NR_mysyscall223intmain(){syscall(__NR_mysyscall);/*或syscall(223)*/在此加入在屏幕输出每个进度相关信息的代码;}用gcc编译源程序gcc–otesttest.c运转程序./test用shell命令查察遍历进度输出的信息#dmesg二、实验结果及分析(包含结果描述、实验现象分析、影响要素谈论、综合分析和结论等)三、实验小结、建议及领会此次实验有点难度,但是经过查找资料和与老师的交流以后还是顺利完成了实验,希望此后相关能力可以获得增强。实验课程名称:
操作系统实验项目名称
Linux
进度控制(fork)
实验成绩实验者
姬琪
专业班级
软件
SY1001
组别同组者
实验日期
年代
日第一部分:实验分析与设计(可加页)一、实验内容描述(问题域描述)Linux系统进度控制要求:掌握Linux系统中进度控制原语fork的使用方法。内容:设计C程序,此中主进度创立一个子进度,以特定次序各自执行规定操作退后出。二、实验基根源理与设计(包含实验方案设计,实验手段的确定,试验步骤等,用硬件逻辑也许算法描述)#include<stdlib.h>#include<unistd.h>#include<iostream>usingnamespacestd;intmain(){cout<<"Parentprocessid:"<<getpid()<<endl;pid_tiRet=fork();if(iRet<0)cout<<"Createchildprocessfail!"<<endl;elseif(iRet==0){cout<<"I'mchildprocess,andidis"<<getpid()<<"ppidis:"<<getppid()<<endl;}else{cout<<"Createchildprocesssuccesschild"<<"theidis:"<<iRet<<endl;}return0;}三、主要仪器设备及耗材Ubuntu操作体统Vi编写器G++编译第二部分:实验调试与结果分析(可加页)一、调试过程(包含调试方法描述、实验数据记录,实验现象记录,实验过程发现的问题等)(1)【进度的创立】编写一段程序,使用系统调用fork()创立两个子进度,当此进度运转时,在系统中有一个父进度和两个子进度活动,让每一个进度在屏幕上显示一个字符,父进度显示字符“a”;子进度分别显示字符“b”和字符“c”,试观察记录屏幕上的显示结果,并分析原由。【源程序】:#include<stdio.h>intmain(){intp1,p2;while((p1=fork())==-1);if(p1==0)//putchar('b');else{while((p2=fork())==-1);if(p2==0)putchar('c');//elseputchar('a');//
第一子进度第二子进度父进度}return0;}运转多次:主要输出有bca,有时输出cab和cba,abc,bac,acb会有这样多种不一样输出,主若是因为fork()生成的子进度和父进度是并行运转的,所以先运转哪个进度是由系统的调换算法决定的,ubuntu9.04很大概率系统会先输出bca是因为ubuntu9.04在fork()运转以后很大概抢先运转子进度,再运转父进度。自然也有可能先运转父进度后子进度,再加长进度间的并发性;导致了输出的多样性。输出次序带有随机性。。【进度的控制】更正已编写的程序,将每个进度输出一个字符改为每个进度输出一句话,在观察程序执行时屏幕上出现的现象,并分析原由。【源代码】:#include<stdio.h>intmain(){intp1,p2;while((p1=fork())==-1);if(p1==0);第一个子进度printf("Child1isrunning!\n");else{while((p2=fork())==-1);if(p2==0)
;第二子进度printf("Child2isrunning!\n");else
;父进度printf("Fatherisrunning!\n");}return0;}运转多次,大部分运转后输出:Child1isrunning!Child2isrunning!Fatherisrunning!少量输出:Child2isrunning!Child1isrunning!Fatherisrunning!Fatherisrunning!Child1isrunning!Child2isrunning!理论上是有6种不一样的结果,还是因为系统的调换算法,程序的并发性影响;但因为函数printf()在输出字符串时不会被中断,所以,字符串内部字符次序输出不变。所以与打印单字符的结果相同。创立进度,使用exec函数族使子进度执行新的目标程序,观察并分析出现的现象。【源代码】:#include<stdio.h>#include<unistd.h>intmain(){printf("===systemcallexecltesting===\n");execlp("date","date",0);printf("execerror!\n");return0;}输出:===systemcallexecltesting===2009年12月04日礼拜五21:35:18CST输出结果分析:execlp是一种exec函数,当进度调用一种exec函数时,用指定的目标进度更好进度的执行映像。Exec调用成功后,调用进度的正文段被指定的文件的正文段所覆盖。调用成功时,exec不返回,从而不执行exec此后的全部语句,所以本例就只有输出“2009年12月04日礼拜五21:35:18CST”的状况。假如调用失败,返回-1,执行节余指令。【进度信号办理】编写程序使用系统调用fork()创立两个子进度,再用系统调用singal()让父进度捕获键盘上来的中断信号(即按Ctrl+c键);当捕获到中断信号后,父进度用系统调用Kill()向两个子进度发出信号,子进度捕获到信号后分别输出以下信息后停止:ChildProcess11isKilledbyParent!ChildProcess12isKilledbyParent!父进度等候两个子进度停止后,输出以下的信息后停止:ParentProcessisKilled!
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 供应商资格审查信息确认书(3篇范文)
- 风险评估与防范操作标准化指南
- 2026初中家风建设第一课课件
- 确保项目经济效益承诺函范文7篇
- 食品生产卫生管理规范手册
- 办公自动化系统使用培训与问题解决指南
- 资源分配与时间管理模板
- 业务行为规范承诺暨保证承诺书(3篇)
- 工业废气处理与环保规范指南
- 2026年户外登山杖调节高度技巧
- 鞋业安全检查指南讲解
- 《YBT 4268-2020矿热炉低压无功补偿技术规范》(2026年)实施指南
- 2025至2030中国微球行业调研及市场前景预测评估报告
- 中国人身保险业经验生命表2025
- (独家!)“十五五”防震减灾发展规划
- 2025年河北省廊坊市三河市小升初数学试卷(含答案)
- 欧盟陶瓷法规研究-洞察与解读
- 成人反流误吸高危人群全身麻醉管理专家共识(2025版)解读 3
- 吉利集团笔试题库及答案
- 合同增项协议模板模板
- 自动化设备装配流程步骤
评论
0/150
提交评论