1《操作系统》思政实验大纲一、课程基本信息课程代码:110114课程名称:操作系统英文名称:OperationSystem实验总学时:12学时适用专业:计算机科学专业、软件工程专业、信息管理专业、电子商务专业课程类别:学科基础课先修课程:高级程序设计语言、汇编语言、计算机组成原理、数据结构二、实验教学的总体目的和要求1、总体目标毛主席说:"实践是检验真理的唯一标准",阐明了检验真理的标准只能是社会实践,理论与实践的统一是马克思主义的一个最基本的原则.
学习中也是如此,"读万卷书不如行万里路",而学校教育检验理论知识最有效的方法就是利用教学条件开展实验教学.
通过实验教学,使学生更好地理解操作系统的基本概念、基本原理和实现技术,再以理论指导实践进行深入开发和创新实践.
2、总体要求(1)对学生的要求①完成先修课程,尤其是C语言;②实验课前预习,做好知识准备;③明确实验目的,完成实验内容;④分析实验结果,总结实验过程;⑤撰写实验报告,验证理论知识.
(2)对教师的要求①有一定编程能力,尤其是C语言编程;②熟悉Linux的常用命令和系统调用;③熟悉操作系统工作原理,能够解释实验结果.
2(3)对实验条件的要求Ubuntu虚拟机、VisualC++6.
0三、实验教学内容《论语·为政》子曰:"温故而知新,可以为师矣.
"在新时代的教育背景下,不仅要温故知新,更要推陈出新.
因此,通过适当的课后练习不仅可以帮助学生巩固和内化知识,还可以启发学生运用知识解决问题,并培养创新意识和创造能力.
课程配套六个验证型实验,帮助理解抽象的概念和原理.
实验一和实验二是文件与目录的常用命令以及文件和目录权限的设置与修改,通过实验帮助学时理解联机命令用户接口的使用以及文件系统的基本操作.
实验三是练习Linux编辑器Vi和C语言编译器Gcc的使用,为后面的实验做准备.
实验四是父进程创建子进程形成进程家族树,通过实验分析各种可能的执行顺序,帮助理解并发执行的概念.
实验五是父进程创建子进程和线程,对比分析线程与子进程在资源共享、继承以及运行方面的异同.
实验六是进程的高级通信,通过管道通信体会进程高级通信的实现.
实实验项目一览实验项目名称实验时数实验要求(必修或选修)开课周数实验准备虚拟机的安装与启动0事先装机,不占学时,用作学习实验一文件与目录的基本操作2必修2实验二权限的设置与修改2必修4实验三Vi和Gcc的使用2必修6实验四进程的并发执行2必修8实验五进程与线程2必修10实验六进程的高级通信2必修123实验准备实验名称:文件与目录的基本操作实验内容:1.
安装虚拟机步骤(1)需要的软件DaemonToolsLite:镜像驱动程序VMWareWorkation:虚拟机软件UbuntuKylinLTS版:乌班图Linux(2)安装步骤安装DaemonToolsLite安装VMWareWorkation安装Ubuntu2.
Linux命令的格式bash命令的一般格式是:命令名[选项][参数1][参数2]…示例:cp–ffile1.
cfile2.
c格式说明:(1)命令名必须是小写的英文字母;(2)Linux的文件名长度不超过256个字符,且不能使用如下字符:空格(3)Linux文件名区分大小写;文件名中如有多个圆点,则最右边一个为分隔符,且多表示文件类型;(4)Linux使用"/"为根目录、目录分隔符和目录与文件的分隔符;(5)命令中通配符的使用*代表任意个任意字符代表一个任意字符[]只要文件名中[]位置处的字符在[]中指定的范围内,那么该文件名就与给定的模式相匹配.
[!
]是对[]中内容的排除,不在这个范围就匹配.
3.
超级用户与普通用户4(1)超级用户是对系统的一切资源均具有访问权限的用户,即系统管理员,用户名为:root,命令提示符为:#;(2)普通用户由超级用户创建和删除,仅具有超级用户指定的访问权限,命令提示符为:$.
(3)超级用户和普通用户可以相互切换;要养成用普通用户登录、使用系统的习惯.
实验性质:综合性实验学时:0实验目的与要求:1.
掌握虚拟机的安装;2.
了解超级用户和普通用户的切换;3.
掌握用户的创建和删除;4.
掌握系统的启动和退出.
实验条件:Ubuntu虚拟机、VisualC++6.
0研究与思考:1.
尝试安装自己的虚拟机;2.
创建和删除自己的用户;3.
熟练登录与退出系统.
理论与实践的辩证思考:1、实践决定理论,实践是理论的来源,是理论发展的根本动力、是理论的最终目的、是检验真理的唯一标准.
2、理论对实践有能动的反作用.
理论产生的最终目的是为了更好地指导实践,真理和科学理论对实践有巨大的推动作用.
3、理论和实践是相辅相成的,缺一不可的,不能任意割裂两者的辩证关系,孤立地强调一个方面.
4、要坚持理论与实践相结合.
必须坚持理论和实践的具体的、历史的统一.
5实验项目一实验名称:文件与目录的基本操作实验内容:1.
目录操作(1)查看当前目录$pwd(2)显示目录内容ls[选项][目录或文件](3)改变目录cd[路径](4)创建目录mkdir[选项]目录名(5)删除空目录rmdir[选项]目录名2.
文件操作(1)创建空文档touch[选项]文件名(2)查看文件内容cat文件名(3)分页查看文件内容more[选项]文件名/less[选项]文件名(4)复制文件cp[选项]源文件路径名目标文件路径名(5)移动文件mv[选项]源文件路径名目标文件路径名(6)删除文件rm[选项]文件名|目录名3.
查看系统目录和文件(1)查看/bin子目录内容(2)查看/home子目录内容(3)查看/etc子目录下的文件(4)查看环境变量设置$gedit/etc/environment(用gedit显示全局环境变量)$gedit/etc/profile(用gedit显示登录用户环境设置)$gedit~/profile(用gedit显示当前用户环境设置)(5)认识环境变量$PATH在PATH中设置命令的搜索路径,在任何目录都可以执行常用命令.
4.
文件的其他操作(1)查找文件find目录名[选项](2)按指定模式查找文件grep[选项]字符串文件列表(3)对指定文件按行排序sort[选项]文件名5.
群命令及续行符6实验性质:验证性实验学时:2实验目的与要求:1.
了解Linux文件系统的结构和功能;2.
了解Linux文件系统的访问方式;3.
掌握常用的文件和目录操作命令;4.
熟悉字符界面的联机命令工作方式.
实验条件:Ubuntu虚拟机、VisualC++6.
0研究与思考:1.
Linux的文件组织与Windows有什么不同2.
创建如下的工作目录,然后尝试删除student1和student2.
3.
在用户主目录下创建myfiel1,myfile2,myfile3三个文件,总结创建文件的几种方法.
4.
总结查看文本文件内容的几种方法.
5.
在自己的目录下进行显示、复制、移动、删除等基本操作.
6.
了解Linux群命令的执行.
homeuserXstudent2mydirectorystudent22student21student17实验项目二实验名称:权限的设置与修改实验内容:1.
权限说明(1)独立的权限级别文件拥有者(u—user)所在组成员(g—group)其他用户(o—others)(2)文件权限r(read):查看文件内容w(write):修改文件x(execute):运行可执行文件(3)目录权限r(read):列出目录内容w(write):在目录中增删文件x(execute):进入并访问目录中的文件2.
文件属性(1)文件类型-:普通文件d:目录l:符号链接c:字符型设备节点b:块设备节点(2)文件访问权限(3级独立权限)(3)文件的硬链接数(4)文件拥有者的用户名(5)文件所属用户组名(6)文件的字符数(7)文件创建的日期和时间(8)文件的路径名83.
具体操作(1)查看文件权限ls–l(2)修改文件更改时间touch–t[时间][文件名](3)创建文件链接ln[-s]旧文件名新文件名硬链接$ln.
/mydirectory/hellomy_hello符号链接$ln–s.
/mydirectory/hellomy_symbol两者的区别$rm–f.
/mydirectory/hello$catmy_hello可用硬链接my_hello显示其内容$catmy_symbol不能显示符号链接my_symbol内容(4)修改文件或目录权限格式一:chmodwhooperatorpermission文件名/目录名who的含义:u:文件属主权限g:同组用户权限o:其他用户权限a:所有用户权限operator的含义:+:增加权限-:取消权限=:设定权限permission的含义:r:读权限w:写权限x:执行权限s:文件属主和组set-IDt:粘性位l:给文件加锁,使其他用户无法访问格式二:chmod***文件名/目录名r--:4—读-w-:2—写--x:1—执行rw-:4+2=6r-x:4+1=5rwx:4+2+1=79(5)改变文件或目录所属组chgrp[选项]组文件(6)改变文件的属主或属组chown[选项]用户或属组文件实验性质:验证性实验学时:2实验目的与要求:1.
理解文件和目录权限的概念;2.
掌握权限的设置和修改.
实验条件:Ubuntu虚拟机、VisualC++6.
0研究与思考:1.
(1)在主目录下创建工作目录mywork,将/usr/bin/cal以文件名mycal、将/bin/cat以文件名mycat均复制到mywork下,分别查看文件cal和cat的权限,以及文件mycal和mycat的权限,有什么不同(2)分别运行cal和mycal,是什么结果思考原因.
(3)要使文件mycal运行,应该怎么做2.
(1)在主目录下用cat命令创建内容为"Hello,World!
"的文本文件hello,然后在子目录mywork下创建名为my_hello的硬链接,以及名为my_symbol的符号链接,分别显示这两个链接的内容;(2)修改主目录下的文件hello的内容,再次显示这两个链接的内容,有什么不同(3)然后删除主目录下的文件hello,再次显示这两个链接,结果又有什么不同3.
(1)在主目录下,显示文件hello的权限;(2)去掉文件属主的r权限,可以显示其内容吗添加r权限再试试;(3)去掉文件属主的w权限,可以修改其内容吗添加w权限再试试.
4.
(1)在主目录下,显示子目录mywork的权限;(2)去掉文件属主的x权限,能否进入该子目录加上再试试;(3)去掉文件属主的r权限,能否显示该子目录的内容加上再试试;(4)去掉文件属主的w权限,能否在该子目录下创建或删除文件加上再试试.
5.
尝试用格式二的方法为文件或子目录设置权限.
10实验项目三实验名称:Vi编辑器和Gcc编译器的使用实验内容:1.
在当前目录下创建一个exercise子目录,并切换到该目录;2.
用vi输入一个名为hello.
c的源程序3.
练习命令模式、插入模式和底线模式的常用命令,存盘退出;4.
再次进入hello.
c,将源程序修改为以下代码5.
以文件名nihao.
c存盘退出,用ls查看文件信息6.
gcc的用法gcc[选项][文件名]选项说明:-E:仅对输入文件进行预处理-c:把源代码编译为目标文件,不执行汇编和链接的过程-s:编译产生汇编语言文件后停止编译-o:编译并直接产生可执行文件(1)分四个阶段对该程序进行编译$gcc–Ehello.
c–ohello.
i#includeintmain(){printf("Helloworld,Linuxprogramming!
\n\n");return0;}#includeintmain(){charname[10];printf("pleaseinputaname:\n");scanf("%s",name);printf("%s%s","Hello",name);printf("\n");return0;}11(将hello.
c的预处理结果保存在hello.
i中)$gcc–chello.
i–ohello.
o(将预处理结果hello.
i编译为目标文件hello.
o)$gcc–shello.
i–ohello.
s(也可将预处理结果hello.
i编译为汇编文件hello.
s)$gcchello.
o–ohello(将目标文件hello.
o编译为可执行文件hello)(2)运行可执行文件$.
/hello(运行可执行文件hello)实验性质:验证性实验学时:2实验目的与要求:1.
理解文件和目录权限的概念;2.
掌握权限的设置和修改.
实验条件:Ubuntu虚拟机、VisualC++6.
0研究与思考:1.
Vi有几种工作模式掌握各种模式下的基本操作;2.
如何用Gcc实现源程序的编译和调试3.
如何运行可执行程序12实验项目四实验名称:进程的并发执行实验内容:(1)进程的资源继承对比分析以下两段代码的执行结果和原因.
2.
进程的并发执行编写一段程序,利用fork()创建两个子进程,其中父进程显示字符"AAA",两个子进程分别显示字符"BBB"和"CCC".
观察和记录屏幕上的显示结果,并分析原因.
#include#includevoidmain(){printf("Beforefork.
.
.
");if(fork()==0){printf("Son\n");}else{printf("Father\n");}}//A#include#includevoidmain(){printf("Beforefork.
.
.
\n");if(fork()==0){printf("Son\n");}else{printf("Father\n");}}//B#include#includemain(){intp1,p2;while((p1=fork())==-1);/*创建子进程p1*/if(p1==0)/*子进程1创建成功*/printf("BBB\t");else{while((p2=fork())==-1);/*创建子进程p2*/if(p2==0)/*子进程2创建成功*/printf("CCC\t");elseprintf("AAA\t");}/*父进程执行*/}//abc133.
进程的并发控制对比以下两段代码,分析可能的输出结果和原因.
#include#includemain(){intp1,p2;while((p1=fork())==-1);/*创建子进程p1*/if(p1==0)/*子进程1创建成功*/for(i=0;i#includemain(){intp1,p2,i;while((p1=fork())==-1);/*创建子进程p1*/if(p1==0)/*子进程1创建成功*/{lockf(1,1,0);for(i=0;i#includevoidmain(){inti,pid;for(i=1;i0)printf("test\n");else{printf("test\n");exit(0);}}}//A#include#includevoidmain(){inti,pid;for(i=1;i0)printf("test\n");elseprintf("test\n");}}//B15实验项目五实验名称:认识进程和线程实验内容:1.
用fork()创建进程fork系统调用创建的子进程复制了父亲进程的资源,包括内存的内容task_struct内容(两个进程的pid不同).
这里是资源的复制不是指针的复制.
显示结果:Thisisson,hiscountis:2.
andhispidis:302Thisisfather,hiscountis:1,hispidis:3012.
用vfork()创建线程vfork系统调用创建出来的是一个线程,因为它缺少了自己独立的内存资源.
//testFork.
c#include"stdio.
h"intmain(){intcount=1;intchild;if(!
(child=fork())){//开始创建子进程printf("Thisisson,hiscountis:%d.
andhispidis:%d\n",++count,getpid());//子进程的内容}else{printf("Thisisfather,hiscountis:%d,hispidis:%d\n",count,getpid());}}16显示结果:Beforecreateson,thefather'scountis:1Thisisson,hispidis:4185andthecountis:2Afterson,Thisisfather,hispidis:4184andthecountis:2,andthechildis:41853.
用vfork()创建线程和父进程的同步问题由vfork创造出来的子进程还会导致父进程挂起,除非子进程执行exit或者execve才会唤起父进程.
看下面程序:实验性质:验证性//testVfork.
c#include"stdio.
h"intmain(){intcount=1;intchild;printf("Beforecreateson,thefather'scountis:%d\n",count);if(!
(child=vfork())){printf("Thisisson,hispidis:%dandthecountis:%d\n",getpid(),++count);exit(1);}else{printf("Afterson,Thisisfather,hispidis:%dandthecountis:%d,andthechildis:%d\n",getpid(),count,child);}}//testVfork.
c#include"stdio.
h"intmain(){intcount=1;intchild;printf("Beforecreateson,thefather'scountis:%d\n",count);if(!
(child=vfork())){inti;for(i=0;i#include#include#defineMSGSIZE16char*msg1="hello,world#1";char*msg2="hello,world#2";char*msg3="hello,world#3";voidmain(){charinbuf[MSGSIZE];intfd[2],j;if(pipe(fd)==-1){printf("pipecall");exit(1);}write(fd[1],msg1,MSGSIZE);write(fd[1],msg2,MSGSIZE);write(fd[1],msg3,MSGSIZE);for(j=0;j#includevoidmain(){intpid,fd[2];charbuf1[20],buf2[20];pipe(fd);while((pid=fork())==-1);if(pid==0){sprintf(buf1,"Thisisanexample\n");write(fd[1],buf1,50);exit(0);}//ifelse{wait(0);read(fd[0],buf2,50);printf("%s",buf2);}//else}//main20实验性质:验证性实验学时:2实验目的与要求:#include#include#includemain(){intfd[2],pid1,pid2;charOutPipe[100],InPipe[100];pipe(fd);/*创建管道*/while((pid1=fork())==-1);/*创建子进程1*/if(pid1==0)/*子进程1创建成功*/{lockf(fd[1],1,0);/*锁定管道写入端*/sprintf(OutPipe,"Child1issendingmessage!
");/*定义发送缓冲区*/write(fd[1],OutPipe,50);/*写入管道*/sleep(5);lockf(fd[1],0,0);/*释放管道写入端*/exit(0);}/*子进程终止*/else{while((pid2=fork())==-1);if(pid2==0){lockf(fd[1],1,0);sprintf(OutPipe,"Child2issendingmessage!
");write(fd[1],OutPipe,50);sleep(5);lockf(fd[1],0,0);exit(0);}else{wait(0);/*等待子进程终止*/read(fd[0],InPipe,50);/*从管道读出端读消息到接收缓冲区*/printf("%s\n",InPipe);/*输出读到的消息*/wait(0);read(fd[0],InPipe,50);printf("%s\n",InPipe);exit(0);}}//else}//main211.
理解文件和目录权限的概念;2.
掌握权限的设置和修改.
实验条件:Ubuntu虚拟机、VisualC++6.
0研究与思考:1.
进程通信的本质是什么问题2.
管道通信时如何实现的3.
如何实现管道通信的同步与互斥四、考核方式撰写实验报告,实验报告成绩占平时成绩的40%.
五、推荐实验教材和教学参考书实验教材:自编教材参考教材:胡峰松.
操作系统原理实验教程(基于Linux)(第1版).
北京:清华大学出版社,2010年六、其他需说明的大纲修订人:白雪梅修订日期:2020年11月大纲审定者:沈永珞审定日期:2020年12月
香港大带宽服务器香港大带宽云服务器目前市场上可以选择的商家十分少,这次给大家推荐的是我们的老便宜提速啦的香港大带宽云服务器,默认通用BGP线路(即CN2+BGP)是由三网直连线路 中国电信骨干网以及HGC、NTT、PCCW等国际线路混合而成的高品质带宽(精品带宽)线路,可有效覆盖全球200多个国家和地区。(适用于绝大部分应用场景,适合国内外访客访问,域名无需备案)提速啦官网链接:点击进入香港Cer...
RAKsmart怎么样?RAKsmart香港机房新增了付费的DDoS高防保护服务,香港服务器默认接入20Mbps的大陆优化带宽(电信走CN2、联通和移动走BGP)。高防服务器需要在下单页面的IP Addresses Option里面选择购买,分:40Gbps大陆优化高防IP-$461/月、100Gbps国际BGP高防IP-$692/月,有兴趣的可以根据自己的需求来选择!点击进入:RAKsmart官...
野草云月末准备了一些促销,主推独立服务器,也有部分云服务器,价格比较有性价比,佣金是10%循环,如果有时间请帮我们推推,感谢!公司名:LucidaCloud Limited官方网站:https://www.yecaoyun.com/香港独立服务器:CPU型号内存硬盘带宽价格购买地址E3-1230v216G240GB SSD或1TB 企盘30M299元/月点击购买E5-265016G240GB SS...
vmware tools 安装为你推荐
手机区号手机号码+86是移动区号还是联通的区号?神雕侠侣礼包大全神雕侠侣手游版四重大礼包怎么得到啊?迅雷云点播账号求迅雷云播账号srv记录exchange 2010 自动发现需不需要srv记录聚美优品红包聚美优品里怎么合并红包去鼠标加速度请教如何正确的去处鼠标加速度~防钓鱼游戏中的防钓鱼检查是什么?淘宝软文范例做微商让淘宝代写一篇软文发布招代理有效果吗网页窗口最大化怎么现在不能直接将网页窗口最大化adobephotoshop教程哪有入门到精通的photoshop 视频教程?
服务器空间租用 北京域名注册 qq空间域名 如何注销域名备案 免费动态域名 google电话 新秒杀 vpsio 美国主机代购 68.168.16.150 patcha 魔兽世界台湾服务器 hostker 域名转接 域名接入 免费活动 服务器合租 重庆双线服务器托管 免费的域名 论坛主机 更多