ImageVerifierCode 换一换
格式:DOC , 页数:19 ,大小:242.50KB ,
资源ID:2614739      下载积分:20 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.docduoduo.com/d-2614739.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录   微博登录 

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(操作系统课程设计实验报告.doc)为本站会员(dreamzhangning)主动上传,道客多多仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知道客多多(发送邮件至docduoduo@163.com或直接QQ联系客服),我们立即给予删除!

操作系统课程设计实验报告.doc

1、操作系统课程设计实验报告书题 目: 售票员与乘客(信号量操作)题目编号: 2院 系: 计算机科学与技术软件服务与外包学院班 级: 11 级 9 班小组成员: 组长:杨扬 学号:111810059组员:沈菲菲 学号:111810060组员: 学号:2013-06-30目 录一、课程设计任务划分 1(一)课程内容 2(二)算法 2(三)算法基本原理 2三、基本思路 4(一)变量 4(二)所用函数 5(三)流程图 9四、调试及实验结果 14五、个人体会 151一、课程设计任务划分组员 具体分工网上搜索程序资料程序合并沈菲菲实验报告书书写程序调试设计项目流程杨扬心得体会2二、基本原理(一)课程内容编程

2、序模拟车站售票厅内进程同步问题,售票厅任何时刻最多可容纳 20 名购票者进入,否则需要在外面等待。每个购票者可看成一个进程。(二)算法信号量与 P,V 操作(三)算法基本原理生产者-消费者问题是一个经典的线程同步问题,该问题最早由Dijkstra 提出,用以演示他提出的信号量机制。在同一个线程地址空间内执行的两个线程。生产者线程生产物品,然后将物品放置在一个空缓冲区中供消费者线程消费。消费者线程从缓冲区中获得物品,然后释放缓冲区。当生产者线程生产物品时,如果没有空缓冲区可用,那么生产者线程必须等待消费者线程释放出一个空缓冲区。当消费者线程消费物品时,如果没有满的缓冲区,那么消费者线程将被阻塞,

3、直到新的物品被生产出来。多个生产/消费者在有界缓冲上操作。它利用 N 个字节的共享内3存作为有界循环缓冲区,利用写一字符模拟放一个产品,利用读一字符模拟消费一个产品。当缓冲区空时消费者应阻塞睡眠,而当缓冲区满时生产者应当阻塞睡眠。一旦缓冲区中有空单元,生产者线程就向空单元中入写字符,并报告写的内容和位置。一旦缓冲区中有未读过的字符,消费者线程就从该单元中读出字符,并报告读取位置。生产者不能向同一单元中连续写两次以上相同的字符,消费者也不能从同一单元中连续读两次以上相同的字符。因此售票员与乘客也可转化为生产者与消费者的问题,第一步:确定进程间的关系。售票厅是各进程共享的公有资源,当售票厅中多于

4、20 名购票者时,厅外的购票者需要在外面等待。所以进程间是互斥的关系。第二步:确定信号量及其值。只有一个公有资源:售票厅,所以设置一个信号量 s。售票厅最多容纳 20 个进程,即可用资源实体数为 20,s 的初值就设为 20。实现:begins:semaphore;s:=20;cobeginprocess PI(I=1,2,)begin P(s);进入售票厅;购票;退出;4V(s);end;coend当购票者进入售票厅前要执行 P(s)操作,执行后若 s 大于或等于零,说明售票厅的人数还未满可进入。执行后若 s 小于零,则说明售票厅的人数已满不能进入。这个实现中同时最多允许 20 个进程进入售

5、票厅购票,其余进程只能等待。三、基本思路(一)变量#define N 2 / 乘客或售票员的数目#define M 20 / 售票厅大小int in = 0; / 售票员售票的位置int out = 0; / 乘客买票的位置int buffM = 0; / 售票厅初始化为 0, 开始时没有售票员sem_t empty_sem; / 同步信号量, 当满了时阻止售票员售票sem_t full_sem; / 同步信号量, 当没售票员时阻止乘客买票pthread_mutex_t mutex; / 互斥信号量, 一次只有一个线程访问缓冲int conductor_id = 0; /售票员 idint p

6、assenger_id = 0; /乘客 id5(二)所用函数1. void print() 打印售票厅情况2. void *conductor () 售票员方法 3. void *passenger () 乘客方法 4. int main() 主方法5. sem_wait()函数原形:int sem_wait(sem_t *sem);参数:sem 指向信号灯的指针返回值:若成功则返回 0,否则返回-1。我们能用 sem_wait 来申请共享资源,sem_wait 函数能测试所指定信号灯的值,如果该值大于 0,那就将他减 1 并即时返回。我们就能使用申请来的 共享资源了。如果该值等于 0,调用

7、线程就被进入睡眠状态,直到该值变为大于 0,这时再将他减 1,函数随后返回。sem_wait 操作必须是原子的。66. sem_post()挂出共享资源函数原形:int sem_post(sem_t *sem);参数:sem 指向信号灯的指针返回值:若成功则返回 0,否则返回-1。当一个线程使用完某个信号灯时,他应该调用 sem_post 来告诉系统申请的资源已用完。本函数和 sem_wait 函数的功能正好相反,他把所指定的信号灯的值加 1,然后唤醒正在等待该信号灯值变为正数的任意线程。7. sem_init()初始化信号等函数原形:int sem_init(sem_t *sem,int s

8、hared,unsigned int value);7参数:sem 指向信号灯的指针shared 作用范围value 信号灯初始值返回值:若成功则返回 0,否则返回-1。基于内存的信号灯是由 sem_init 初始化的。sem 参数指向必须由应用程序分配的 sem_t 变量。如果 shared 为 0,那么待初始化的信号灯是在同 一进程的各个线程共享的,否则该信号灯是在进程间共享的。当 shared 为零时,该信号灯必须存放在即将使用它的所有进程都能访问的某种类型的共享内存 中。8 pthread_mutex_init(函数作用:8pthread_mutex_init() 函数是以动态方式创建

9、互斥锁的,参数attr 指定了新建互斥锁的属性。如果参数 attr 为空,则使用默认的互斥锁属性,默认属性为快速互斥锁 。互斥锁的属性在创建锁的时候指定,在 LinuxThreads 实现中仅有一个锁类型属性,不同的锁类型在试图对一个已经被锁定的互斥锁加锁时表现不同。9. pthread_create()创建线程函数函数原型:int pthread_create(pthread_t*restrict tidp,const pthread_attr_t *restrict_attr,void*(*start_rtn)(void*),void *restrict arg);参数第一个参数为指向线程

10、标识符的指针。第二个参数用来设置线程属性。第三个参数是线程运行函数的起始地址。最后一个参数是运行函数的参数。返回值若成功则返回 0,否则返回出错编号9返回成功时,由 tidp 指向的内存单元被设置为新创建线程的线程 ID。attr 参数用于制定各种不同的线程属性。新创建的线程从 start_rtn 函数的地址开始运行,该函数只有一个万能指针参数 arg,如果需要向 start_rtn 函数传递的参数不止一个,那么需要把这些参数放到一个结构中,然后把这个结构的地址作为 arg 的参数传入。(三)流程图10生产者进程消费者进程A、主函数11Main 函数开始定时到初始化公共数据区初始化信号量创建售

11、票员进程创建乘客进程创建统计进程成功成功成功退出YYYNNNB、统计线程12进程开始定时到 修改退出标记时间+1 秒打印售票买票情况记清屏进程结束C、生产者线程13要求退出进程开始加锁成功要求加锁检查资源数目是否有空位减少资源数目目设置买票成功目设置买票失败失败计数器-1目解锁取得成功?售票员数据要求加速解锁加锁成功?成功?YN结束进程YNYNYND、消费者线程14要求退出进程开始加锁成功要求加锁检查资源数目有售票员减少资源数目目设置买票成功目设置买票失败失败计数器-1目解锁取得成功?乘客数据要求加速解锁加锁成功?成功?YN结束进程YNYNYN四、调试及实验结果15实验结果:五、个人体会给出设

12、计文档和调试编码的感受,或对原理知识的理解。 (100 字以上)由于时间有限,本次设计完成的并不是很完美,下面从以下几点来说明本次课程设计的个人体会:161.本次课程设计中做的比较好的地方:做的好的地方就是在于对题目意思的正确理解,以及在此基础上的模型设计。最开始一看题目的时候有点不知道如何着手,只是模糊地知道是怎么回事,能够在思想上想清楚具体的运转过程,参照教科书之后,学会了怎样用 P,V 原语操作。然后最关键的就是怎样用程序表现这个过程,最后我想出来的方法就是通过乘客上下车的过程来表现,我觉得这样是最好的体现方式。2.做得不太好的地方,以及以后如何改正:做得不太好的地方就是不能把自己所学的

13、 C 知识和本次课程设计的相关知识很好的结合起来,以至于没有很好的表达出本次课程设计的细节。在以后的过程中,我会运用本次课程设计中所学的知识,以及思考问题的方式和方法,争取能够发扬优点,尽量克服不细心,不严谨等缺点。3.从本次设计中得到的收获(在编写,调试,执行过程中的经验和教训):通过本次课程设计,我学会了综合运用所学相关知识的能力,动手能力以及独立思考问题的能力。下面具体的收一个边学程序是遇到的困难,首先就是如何把想法变为做法的问题,最开始一拿到题目,我就觉得无从下手,因为我的阅历,不知道如何把这样一个问题变成程序,变成能够让人一目了然的东西,于是,我就先写下了 p,v操作的实现过程,因为这个对我来说简单一些,然后,在此基础之上,就好办了,结果最后用了 2 个函数就解决问题了,所以,我觉17得有时候思考问题不要太死脑筋,换一个角度的话,也许会更好,说不定就能达到事半功倍的效果,还有就是,想问题要想明白,想透彻,不能是懂非懂,模模糊糊,想透彻之后再去思考下一步问题,这样办事效率会更高。

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报