操作系统课程设计

发布 2022-10-05 11:23:28 阅读 9210

《操作系统》课程设计。

专业: 计算机科学与技术

班级: 题目名称: 信号量的操作

完成日期: 2024年12月22日

目录。第一章概述 2

1.实验目的 2

2、开发平台及实验环境: 3

3、实验要求 3

第二章设计需求 3

1.信号量的概念 3

2.信号量的分类 4

3.信号量于pv操作的关系 4

第三章实例分析 5

1.设计思想 5

3.运行结果截图 10

4.总结 11

参考文献 12

第一章概述。

1.实验目的。

了解信号量机制,了解并掌握进程同步和互斥机制,熟悉信号量的操作函数,利用信号量实现对共享资源的控制。

2、开发平台及实验环境:

系统平台:windows环境。

实现语言:c++语言。

开发工具:microsoft visual c++ 6.0

3、实验要求。

利用createsemaphore、waitforsingleobject等函数检测内核同步对象的状态。

第二章设计需求。

1.信号量的概念。

信号量(semaphore),有时被称为信号灯,是在多线程环境下使用的一种设施,是可以用来保证两个或多个关键**段不被并发调用。在进入一个关键**段之前,线程必须获取一个信号量;一旦该关键**段完成了,那么该线程必须释放信号量。其它想进入该关键**段的线程必须等待直到第一个线程释放信号量。

为了完成这个过程,需要创建一个信号量vi,然后将acquire semaphore vi以及release semaphore vi分别放置在每个关键**段的首末端。确认这些信号量vi引用的是初始创建的信号量。

2.信号量的分类。

信号量按其用途分为两种:

1)公用信号量:初值常常为1,用来实现进程间的互斥。相关进程均可对其执行p、v操作。

2) 私有信号量:初值常常为可用资源数,多用来实现进程同步。拥有该信号量的一类进程可以对其执行p操作,而另一类进程可以对其执行v操作,多用于并发进程的同步。

信号量按照取值可以分为两种:

1) 二元信号量: 仅允许取0和1,主要用于解决进程互斥;

2) 一般信号量(计数信号量):允许取任意整数值,主要用于解决进程同步问题。

3.信号量于pv操作的关系。

p 操作。信号量的值减一。

如果满足if条件,执行了p操作的进程会挂起,p操作语句之后的语句都不会再执行。

被挂起的进程,除非另一个进程调用v()来唤醒它,否则永远不会执行。

v 操作。信号量的值加一。

如果满足if条件,执行v操作的进程会去唤醒另一个正在等待的进程(被挂起的进程)。

执行v操作的进程不会自愿停止, v操作后面的语句会接着执行。

被唤醒的进程只是进入了就绪队列,并不一定有机会马上被执行。

被唤醒的进程,从挂起点接着执行,也就是p操作之后的语句。

第三章实例分析。

1.设计思想。

假设某个饭店有一公共厕所,但是不分男女,老板规定,当有男生上厕所时,其他男生可以进去,女生不能进入,有女生先进去的时候其他女生可以进去,男生不能进入。

2. 程序**。

#include <>

#include <>

#define threadcount 40

handle ghevent;

int icurrentboy = 0;

int icurrentgirl = 0;

dword winapi boywerewcing( lpvoid );

dword winapi girlwerewcing( lpvoid );

void main()

handle athread[threadcount];

dword threadid;

int i;

// create a mutex with no initial owner

ghevent = createevent(

nulldefault security attributes

falsebe manual reset

trueinitially not owned

nullunnamed mutex

if (ghevent ==null)

// create worker threads

for( i=0; i < threadcount; i+=2 )

athread[i+1] =createthread(

nulldefault security attributes

0default stack size

lpthread_start_routine) girlwerewcing,

nullno thread function arguments

0default creation flags

threadid); receive thread identifier

if( athread[i+1] =null )

// wait for all threads to terminate

waitformultipleobjects(threadcount, athread, true, infinite);

// close thread and mutex handles

for( i=0; i < threadcount; i++

closehandle(athread[i]);

closehandle(ghevent);

dword winapi boywerewcing( lpvoid lpparam )

dword dwwaitresult;

if( icurrentboy ==0 )

elseswitch (dwwaitresult)

the thread got ownership of the mutex

case wait_object_0:

try {

todo: was bathing

printf("boy were wcing...n");

icurrentboy--;

操作系统课程设计

课程设计 河北大学工商学院。装。订。线。操作系统课程设计。题目 操作系统课程设计 学院工商学院 学部信息科学与工程 专 操作系统课程设计。题目 操作系统课程设计 学院工商学院 学部信息科学与工程 专业计算机类 学号 姓名。指导教师。年 6 月 24 日。设备管理 2 2.1设计任务2 2.2设计要求...

操作系统课程设计

银行家算法模拟。系别 班级 组员 银行家算法模拟。1.课程设计目的。通过本次课程设计,加深对最经典的避免死锁的银行家算法的理解,掌握死锁形成必要条件 安全状态等概念的理解,通过用c语言编程模拟该算法,并在windows平台上实现,更好地掌握操作系统的原理及实现方法。2.任务及要求。设n为系统进程的个...

操作系统课程设计

学生实习实训报告。实习类型 操作系统课程设计 学号 0901110005 学生姓名 田兴杰 指导教师 曹春梅 专业班级 信息安全技术0901班 院 部 电子信息系 2011年 1 月 7日。实习实训成绩评定表。目录。目录3 摘要4关键字4 1.1虚拟机简介5 1.1.1 一般意义的虚拟机5 1.1....