欢迎来到天天文库
浏览记录
ID:863701
大小:176.03 KB
页数:17页
时间:2017-09-21
《操作系统课程设计-linux系统管理实践与线程通信实现》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、操作系统课程设计题目:Linux系统管理实践与线程通信实现完成日期:2012年1月1日一、题目:Linux系统管理实践与线程通信实现二、内容:1.Linux系统的熟悉与常用操作命令的掌握。2.Linux环境下线程通信的实现。(实现父亲、母亲、儿子、女儿之间呢同步互斥问题,一共有1个盘子,父亲、母亲互斥的向盘子里放水果,女儿、儿子互斥的取水果)三、Linux环境介绍Linux是一种自由和开放源码的类Unix操作系统。目前存在着许多不同的Linux,但它们都使用了Linux内核。Linux的基本思想有两点:第一,一切都是文件;第二,每个软件都有确定的用途
2、。其中第一条详细来讲就是系统中的所有都归结为一个文件,包括命令、硬件和软件设备、操作系统、进程等等对于操作系统内核而言,都被视为拥有各自特性或类型的文件。至于说Linux是基于Unix的,很大程度上也是因为这两者的基本思想十分相近。Linux的应用前景比较广阔,尤其值得一提的当属谷歌研发的基于Linux的移动操作系统——Android。Android把Linux交到了全球无数移动设备消费者的手里,大概是Linux迄今为止在主流界取得的最大成功。由于Linux的内核几乎完全由C语言编制,且非常稳定,大部分运行在unix系统下的工具已经被移值到linux
3、系统上,最重要的是它的开放代码性,这对学习及开发都是较有利的.四、常用命令介绍1.pwd:用于显示用户当前所在的目录。2.cd:命令不仅显示当前状态,还改变当前状态 cd某个文件路径可进入上一层目录cd..可进入上一层目录 cd-可进入上一个进入的目录 cd~可进入用户的home目录1.cp:该命令的功能是将给出的文件或目录拷贝到另一文件或目录中。2../可执行文件:用来执行某个可执行文件3.ls:查看年当前文件夹所包含的文件,而且可以查看文件权限(包括目录、文件夹、文件权限),查看目录信息等等4.mkdir:创建一个新的文件夹5.rm:移除文
4、件6.ipcXX:对进程通信有关操作的控制,应用的操作主要有:ipcs,ipcrm等7.cc:用来对C语言的程序进行编译8.dgb:在linux环境下对程序进行调试,主要功能包括:启动程序,设置断点,单步执行等,功能相当强大。小结:linux下的命令当然是非常多,以上列出的只是我在这次课程设计中所用到一些命令。此外,在我们在使用过程中遇到一些生僻的命令时,我们可以应用互联网来搜索相应的功能。在知道相关命令,但是忘记具体操作的时候我们还可以通过命令--help的方式来查看该命令的具体操作用法,非常实用。三、程序设计思想本题儿子、女儿吃水果的问题可以抽象
5、为:两个生产者,两个消费者,一个缓冲区的问题。在计算机系统中每个进程都可产生某些资源或消耗一定的资源,当其产生资源的时候其就作为生产者,当其消耗资源的时候其就变为消费者。但是这些进程在执行的过程中只能互斥的访问临界区,否则就会产生一些错误。为了避免这种情况的发生,就必须引入一些信号量来控制程序有序的执行。本次我采用了P、V原语来实现这样的功能。具体到本次课程设计的内容,设计思想如下:首先,父亲、母亲中只能有一人将水果放入盘中,这是一种互斥关系。当母亲(父亲)放入了橘子(苹果)后,会通知儿子(女儿)来取苹果(橘子),儿子(女儿)在收到母亲(父亲)发来的
6、信号之前一直处于等待状态,收到后取走水果,因此父亲与女儿,母亲与儿子之间是一种同步的关系。当儿子或女儿吃完水果后又会发出信号通知父母盘子已空可以放入水果。如此循环往复。本设计中采用线程实现父亲、母亲、女儿、儿子的调度。三、流程创建father线程创建mother线程创建dauter线程创建son线程完成相关信号量,共享存储区域的初始化竞争盘子资源Father线程竞争到资源等待被father线程唤醒等待被mother线程唤醒Father线程执行放入apple,通知女儿来取Mother进入阻塞状态mother线程执行放入orange,通知儿子来取fath
7、er进入阻塞状态接收到信号吃掉apple,通知父母盘子已空可以放入水果接收到信号吃掉orange,通知父母盘子已空可以放入水果Father,mother线程进入就绪状态NY三、数据结构及信号量说明数据结构:voidset_sembuf_struct(structsembuf*sem,intsemnum,intsemop,intsemflg)//设置信号量结构intP(intsemid)//P操作intV(intsemid)//V操作void*father()//父亲程序void*mother()//母亲程序void*dauter()//女儿程序voi
8、d*son()//儿子程序intmain(intargc,char*argv[])//主程序,包含了初始化程
此文档下载收益归作者所有