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

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

ID:9938896

大小:1.10 MB

页数:30页

时间:2018-05-16

操作系统课程设计实验报告_第1页
操作系统课程设计实验报告_第2页
操作系统课程设计实验报告_第3页
操作系统课程设计实验报告_第4页
操作系统课程设计实验报告_第5页
资源描述:

《操作系统课程设计实验报告》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库

1、操作系统课程设计实验报告——nachos目录Laboratory3:SynchronizationUsingSemaphores——信号量实现同步Laboratory5:ExtendableFiles——扩展文件系统Laboratory7-8:ExtensionofAddrSpace&SystemCallsExec()andExit()——扩展地址空间&实现系统调用Laboratory9:设计并实现具有优先级的线程调度策略Laboratory10:设计并实现具有二级索引的文件系统Laboratory3:SynchronizationUsingSemaphore

2、s——信号量实现同步一、实验目的:1、在原有的程序框架的基础上,通过使用信号量添加关键代码实现生产者/消费者同步问题。2、深入理解Nachos的信号量的使用、实现,以及在Nachos中是如何创建线程,实现多线程。3、掌握生产者/消费者问题是如何用信号量实现的。二、实验步骤1.首先初始化三个信号量,代码如下:mutex=newSemaphore("mutux",1);信号量初始化为1,才能起到加锁功能nfull=newSemaphore("full",0);nfull的大小在生产者没生产前为0nempty=newSemaphore("empty",BUFF_SI

3、ZE);nempty的大小应该为buffer的大小2.首先考虑生产者进程,首先要查看buffer是否有空,nempty->P();ifnempty>0,nempty=nempty-1,当对缓冲区操作时必须要加锁:mutex->P();加锁.然后向ring中放入message信息,其次还要解锁mutex->V();解锁.最后通知消费者buffer有新信息,nfull->V();nfull=nfull+1;具体实现代码如下:3.考虑消费者进程,像生产者进程一样,查看buffer中是否有信息nfull->P();ifnfull>0,nfull-1;取消息时也要上锁,

4、即:mutex->P();加锁.然后从ringbuffer中取出信息;其次mutex->V();解锁;最后通知生产者buffer有空nempty->V();nempty=nempty+1,具体代码如下:4.创建线程生成一个生产者的代码:producers[i]=newThread(prod_names[i]);producers[i]->Fork(Producer,i);5.创建线程生成一个消费者的代码:consumers[i]=newThread(cons_names[i]);consumers[i]->Fork(Consumer,i);三、实验关键代码在p

5、rodcons++中,定义ring的BUFF_SIZE大小为3。生产者voidProducer(_intwhich){intnum;slot*message=newslot(0,0);//建立slot实例,此信息message将被放到ringbuffer里。每个信息message有一个id和一个value。//每个生产者产生的商品的个数必须使用N_MESSG限定,否则程序没有结束 for(num=0;numthread_id=which;//生产者的idmessage->value=num;  //产生的mes

6、sage的编号nempty->P();//查看buffer是否有空,ifnempty>0,nempty=nempty-1mutex->P();//加锁ring->Put(message);//向ring中放入message信息mutex->V();//加锁nfull->V();//通知消费者buffer有新信息,nfull=nfull+1.}}消费者voidConsumer(_intwhich){charstr[MAXLEN];charfname[LINELEN];intfd;slot*message=newslot(0,0);//建立slot实例,此信息me

7、ssage将被放到ringbuffer里。每个信息message有一个id和一个value。n//为消费者线程建立message信息文件sprintf(fname,"tmp_%d",which);//createafile.NotethatthisisaUNIXsystemcall.if((fd=creat(fname,0600))==-1){perror("creat:filecreatefailed");exit(1);}//不需要规定每个消费者消费的商品的个数 for(;;){nfull->P();//查看buffer中是否有信息,ifnfull>0,n

8、full=nfull-1mutex->

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。