最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 正文

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

来源:动视网 责编:小OO 时间:2025-09-24 10:59:13
文档

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

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

实验报告书

题   目:

售票员与乘客(信号量操作)
题目编号:2
院   系:

计算机科学与技术软件服务与外包学院
班   级:

11级9班

小组成员:组长:杨扬

学号:111810059

组员:沈菲菲学号:111810060

组员:学号:
2013-06-30

目 录

一、课程设计任务划分    1

(一)课程内容    2

(二)算法    2

(三)算法基本原理    2

三、基本思路    4

(一)变量    4

(二)所用函数    5

(三)流程图    9

四、调试及实验结果    14

五、个人体会    15

一、课程设计任务划分

组员具体分工
沈菲菲网上搜索程序资料
程序合并
实验报告书书写
杨扬程序调试
设计项目流程
心得体会

二、基本原理

(一)课程内容

编程序模拟车站售票厅内进程同步问题,售票厅任何时刻最多可容纳20名购票者进入,否则需要在外面等待。每个购票者可看成一个进程。

(二)算法

信号量与P,V操作

(三)算法基本原理

生产者-消费者问题是一个经典的线程同步问题,该问题最早由Dijkstra提出,用以演示他提出的信号量机制。在同一个线程地址空间内执行的两个线程。生产者线程生产物品,然后将物品放置在一个空缓冲区中供消费者线程消费。消费者线程从缓冲区中获得物品,然后释放缓冲区。当生产者线程生产物品时,如果没有空缓冲区可用,那么生产者线程必须等待消费者线程释放出一个空缓冲区。当消费者线程消费物品时,如果没有满的缓冲区,那么消费者线程将被阻塞,直到新的物品被生产出来。

多个生产/消费者在有界缓冲上操作。它利用N个字节的共享内存作为有界循环缓冲区,利用写一字符模拟放一个产品,利用读一字符模拟消费一个产品。当缓冲区空时消费者应阻塞睡眠,而当缓冲区满时生产者应当阻塞睡眠。一旦缓冲区中有空单元,生产者线程就向空单元中入写字符,并报告写的内容和位置。一旦缓冲区中有未读过的字符,消费者线程就从该单元中读出字符,并报告读取位置。生产者不能向同一单元中连续写两次以上相同的字符,消费者也不能从同一单元中连续读两次以上相同的字符。

因此售票员与乘客也可转化为生产者与消费者的问题,第一步:确定进程间的关系。售票厅是各进程共享的公有资源,当售票厅中多于20名购票者时,厅外的购票者需要在外面等待。所以进程间是互斥的关系。第二步:确定信号量及其值。只有一个公有资源:售票厅,所以设置一个信号量s。售票厅最多容纳20个进程,即可用资源实体数为20,s的初值就设为20。

实现:begin

      s:semaphore;

s:=20;

cobegin

process PI(I=1,2,……)

begin P(s);

进入售票厅;

购票;

退出;

V(s);

end;

coend

当购票者进入售票厅前要执行P(s)操作,执行后若s大于或等于零,说明售票厅的人数还未满可进入。执行后若s小于零,则说明售票厅的人数已满不能进入。这个实现中同时最多允许20个进程进入售票厅购票,其余进程只能等待。

三、基本思路

(一)变量

#define N 2   // 乘客或售票员的数目

#define M 20 // 售票厅大小

int in = 0;   // 售票员售票的位置

int out = 0; // 乘客买票的位置

int buff[M] = {0}; // 售票厅初始化为0, 开始时没有售票员

sem_t empty_sem; // 同步信号量, 当满了时阻止售票员售票

sem_t full_sem;   // 同步信号量, 当没售票员时阻止乘客买票

pthread_mutex_t mutex; // 互斥信号量, 一次只有一个线程访问缓冲

int conductor_id = 0;   //售票员id

int passenger_id = 0; //乘客id

(二)所用函数

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,调用线程就被进入睡眠状态,直到该值变为大于0,这时再将他减1,函数随后返回。sem_wait操作必须是原子的。

6. 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 shared,unsigned int value);

参数:

sem 指向信号灯的指针

shared 作用范围

value 信号灯初始值

返回值:

若成功则返回0,否则返回-1。

基于内存的信号灯是由sem_init初始化的。sem参数指向必须由应用程序分配的sem_t变量。如果shared为0,那么待初始化的信号灯是在同 一进程的各个线程共享的,否则该信号灯是在进程间共享的。当shared为零时,该信号灯必须存放在即将使用它的所有进程都能访问的某种类型的共享内存 中。

8 pthread_mutex_init(&mutex, NUL

互斥锁的初始化

函数原型:

int pthread_mutex_init(pthread_mutex_t *restrict mutex,const pthread_mutexattr_t *restrict attr);

函数作用:

pthread_mutex_init() 函数是以动态方式创建互斥锁的,参数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);

参数

   第一个参数为指向线程标识符的指针。

   第二个参数用来设置线程属性。

   第三个参数是线程运行函数的起始地址。

      最后一个参数是运行函数的参数。

返回值

     若成功则返回0,否则返回出错编号

 返回成功时,由tidp指向的内存单元被设置为新创建线程的线程ID。attr参数用于制定各种不同的线程属性。新创建的线程从start_rtn函数的地址开始运行,该函数只有一个万能指针参数arg,如果需要向start_rtn函数传递的参数不止一个,那么需要把这些参数放到一个结构中,然后把这个结构的地址作为arg的参数传入。

(三)流程图

A、主函数

B、统计线程

C、生产者线程

D、消费者线程

四、调试及实验结果

实验结果:

五、个人体会

给出设计文档和调试编码的感受,或对原理知识的理解。(100字以上)

由于时间有限,本次设计完成的并不是很完美,下面从以下几点来说明本次课程设计的个人体会:

1.本次课程设计中做的比较好的地方:

做的好的地方就是在于对题目意思的正确理解,以及在此基础上的模型设计。最开始一看题目的时候有点不知道如何着手,只是模糊地知道是怎么回事,能够在思想上想清楚具体的运转过程,参照教科书之后,学会了怎样用P,V原语操作。然后最关键的就是怎样用程序表现这个过程,最后我想出来的方法就是通过乘客上下车的过程来表现,我觉得这样是最好的体现方式。

2.做得不太好的地方,以及以后如何改正:

做得不太好的地方就是不能把自己所学的C知识和本次课程设计的相关知识很好的结合起来,以至于没有很好的表达出本次课程设计的细节。在以后的过程中,我会运用本次课程设计中所学的知识,以及思考问题的方式和方法,争取能够发扬优点,尽量克服不细心,不严谨等缺点。

3.从本次设计中得到的收获(在编写,调试,执行过程中的经验和教训):

通过本次课程设计,我学会了综合运用所学相关知识的能力,动手能力以及思考问题的能力。下面具体的收一个边学程序是遇到的困难,首先就是如何把想法变为做法的问题,最开始一拿到题目,我就觉得无从下手,因为我的阅历,不知道如何把这样一个问题变成程序,变成能够让人一目了然的东西,于是,我就先写下了p,v操作的实现过程,因为这个对我来说简单一些,然后,在此基础之上,就好办了,结果最后用了2个函数就解决问题了,所以,我觉得有时候思考问题不要太死脑筋,换一个角度的话,也许会更好,说不定就能达到事半功倍的效果,还有就是,想问题要想明白,想透彻,不能是懂非懂,模模糊糊,想透彻之后再去思考下一步问题,这样办事效率会更高。

文档

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

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

最新推荐

猜你喜欢

热门推荐

专题
Top