搜档网
当前位置:搜档网 › 操作系统课程设计--基于Windows进程互斥实现机制

操作系统课程设计--基于Windows进程互斥实现机制

操作系统课程设计--基于Windows进程互斥实现机制
操作系统课程设计--基于Windows进程互斥实现机制

操作系统课程实验报告

学生姓名:

班学号:193121

指导教师:袁国斌

中国地质大学计算机学院

2013年12 月4 日

实习题目:基于Windows进程互斥实现机制

【需求规格说明】

基于Microsoft Visual Studio环境的多线程编程验证互斥的原理,理解多线程编程中关键元素的定义与使用,通过使用Semaphore,mutex等控制元素,实现对生产者消费者模型的真实模拟。函数的功能与实现自己定义。

【算法设计】

(1)设计思想:

通过输入生产者消费者数量信息,以及缓冲区大小、循环次数来实现对生产者消费者模型的真实模拟。当缓冲区Buffer为空时,等待生产者生产,消费者停止消费;当缓冲区Buffer 为满时,等待消费者消费,生产者停止生产。

(2)设计表示:

●用Buffer_Size 定义缓冲区大小

●用变量Thread[]数组来存储线程

●使用函数调用ProducerPrintf()来输出生产的情况

●使用函数调用ConsumerPrintf()来输出正在消费的情况

●通过如下同步对象实现互斥:

◆设一个互斥量Mutex,实现生产者在查询和保留缓冲区的下一个空位

置时进行互斥。

◆设置Semaphore信号量数组表示相应产品已经生产,实现生产者与消

费者之间的同步。同时,用表示空缓冲区树木的信号量semephore

指示是否存在空位置,实现类似的同步,以便开始下一个产品的生产。

◆设置临界区对象数组Critical实现每个缓冲区上消费者之间的互斥

(3)详细设计表示:

主要过程:

1. 主函数

2. 输入并读取消费者生产者数量信息

3. 输入缓冲区大小及循环操作次数

4. 创建生产线程和消费线程完成线程相关同步对象的初始化

5. 创建线程,模拟生产者和消费者

6. 等待所有线程结束

7. 程序结束

消费者线程:

1. 有无消费请求?有,则继续,无,则结束

2. 进入临界区(请求同一产品的消费者之间互斥)

3. 消费产品,并判断是否应该释放产品所占缓冲区

4. 退出临界区

5. 结束消费者线程

生产者线程:

1. 存在空缓冲区?有,则继续;无,则阻塞退出

2. 进入临界区(请求同一产品的生产者之间互斥)

3. 在缓冲区中为本线程产品分配空间

4. 退出临界区

5. 写入产品到分配的缓冲区空间中

6. 结束生产者线程

【调试报告】

【附录】

#include

#include

#include

#include

#define N 40

int NUM=0; //定义缓冲区中产品数量的变量int P_NUM=1; //生产次数计数

int C_NUM=1; //消费次数计数

int times=0; //循环次数

int Buffer_Size=0; //定义缓冲区大小的变量

HANDLE Mutex; //互斥信号量

HANDLE FullSemaphore; //当缓冲区满是使生产者等待HANDLE EmptySemaphore; //当缓冲区空时使消费者等待HANDLE Thread[N]; //存储线程的数组

DWORD WINAPI producer(LPVOID);

DWORD WINAPI consumer(LPVOID);

DWORD Producer_ID[N/2];

DWORD Consumer_ID[N/2];

void ProducerPrintf(); //输出生产的情况

void ConsumerPrintf(); //输出正在消费的情况

void main()

{

int i=1;

int P_thread=0,C_thread=0; //定义线程变量

int choice=0;

printf("\t*****************************************\n");

printf("\t*\t欢迎进入P-C进程调度系统 *\n");

printf("\t*\t 1、进入模拟调度 *\n");

printf("\t*\t 0、退出本系统 *\n");

printf("\t*****************************************\n");

printf("\t\t请选择:");

scanf("%d",&choice);

while(choice)

{

printf("\t*****************************************\n");

//输入生产和消费线程的数量以及缓冲区的大小、循环操作次数

printf("\t\t1、请输入生产者线程数量:");

scanf("%d",&P_thread);

printf("\t\t2、请输入消费者线程数量:");

scanf("%d",&C_thread);

printf("\t\t3、请输入缓冲区的大小:");

scanf("%d",&Buffer_Size);

printf("\t\t4、请输入循环操作次数:");

scanf("%d",×);

printf("\t*****************************************\n");

printf("\t\t生产消费情况如下");

//创建生产线程和消费线程

for(i=0;i

Thread[i]=CreateThread(NULL,0,producer,NULL,0,&Producer_ID[i]);

for(i=P_thread;i

Thread[i]=CreateThread(NULL,0,consumer,NULL,0,&Consumer_ID[i-P_thread]);

//创建信号量

Mutex=CreateMutex(NULL,FALSE,NULL);

FullSemaphore=CreateSemaphore(NULL,Buffer_Size-1,Buffer_Size-1,NULL);

EmptySemaphore=CreateSemaphore(NULL,0,Buffer_Size,NULL);

WaitForMultipleObjects(P_thread+C_thread,Thread,TRUE,INFINITE);

//while(P_NUM

}

}

DWORD WINAPI producer(LPVOID lpParameter)

{

while(P_NUM

{

WaitForSingleObject(FullSemaphore,INFINITE);

WaitForSingleObject(Mutex,INFINITE);

ProducerPrintf();

Sleep(500); //设置延迟时间

ReleaseMutex(Mutex); //释放互斥信号量

ReleaseSemaphore(EmptySemaphore,1,NULL); //释放信号量}

return 0;

}

DWORD WINAPI consumer(LPVOID lpParameter)

{

while(C_NUM

{

WaitForSingleObject(EmptySemaphore,INFINITE);

WaitForSingleObject(Mutex,INFINITE);

ConsumerPrintf();

Sleep(500);

ReleaseMutex(Mutex);

ReleaseSemaphore(FullSemaphore,1,NULL);

}

return 0;

}

void ProducerPrintf()

{

int i=0;

if(P_NUM<=times)

{

NUM++;

printf("\n生产者正在生产\n");

for(i=1;i<=NUM;i++)

if(P_NUM==P_NUM-NUM+i)

printf("(%d)",P_NUM-NUM+i);

else

printf("%d ",P_NUM-NUM+i);

printf(" <-\n");

}

}

void ConsumerPrintf()

{

int i=0;

if(C_NUM<=times)

{

NUM--;

printf("\n消费者正在消费\n");

for(i=0;i<=NUM;i++)

if(C_NUM==C_NUM+i)

printf("<-(%d) ",C_NUM+i);

else

printf("%d ",C_NUM+i);

printf("\n");

if(C_NUM==times)

printf("\n消费完毕!\n");

C_NUM++;

}

}

常见系统进程大全

常见系统进程大全 常见系统进程大全 mdm.exe(windows管理控制台) wmiprvse.exe(windows wmi provider host) services.exe(windows服务和控制器应用程序) inetinfo.exe(windows iis admin service helper) wscntfy.exe(windows security center系统安全警示程序) msiexec.exe(windows installer组件) wudfhost.exe(windows用户模式驱动程序框架主机进程) wdfmgr.exe(windows用户模式驱动程序框架) alg.exe(windows应用层网关服务) lsass.exe:lsa shell (export version)本地安全认证服务iexplore.exe是进程(ie浏览器) csrss.exe(客户服务器运行时流程) explorer.exe(windows图像壳程序) taskmgr.exe(windows任务管理器) winlogon.exe(windows登陆程序) lsass.exe进程(本地安全认证服务) dwm.exe进程(桌面窗口管理器) conhost.exe进程(控制台窗口主机) ctfmon.exe(windows文本输入)

conime.exe(命令提示符输入支持) svchost.exe(windows服务主进程) ohotfix.exe(安装客户端更新文件) ose.exe(microsoft office源引擎) imjpmig.exe(windows输入法编辑器) mmc.exe(windows machine debug manager) smss.exe(windows会话管理器) wuauclt.exe(windows系统自动更新) spoolsv.exe(spooler subsystem app后台处理程序子系统应用程序) wuauclt.exe(windows系统自动更新) 常见系统进程大全的

进程同步机制与互斥-生产者消费者问题

学习中心: 专业: 年级:年春/秋季 学号: 学生: 题目:进程同步与互斥生产者-消费者问题 1.谈谈你对本课程学习过程中的心得体会与建议? 转眼间,学习了一个学期的计算机操作系统课程即将结束。在这个学期中,通过老师的悉心教导,让我深切地体会到了计算机操作系统的一些原理和具体操作过程。在学习操作系统之前,我只是很肤浅地认为操作系统只是单纯地讲一些关于计算机方面的操作应用,并不了解其中的具体操作过程 1.1设计思路 在这次设计中定义的多个缓冲区不是环形循环的,并且不需要按序访问。其中生产者可以把产品放到某一个空缓冲区中,消费者只能消费被指定生产者生产的产品。本设计在测试用例文件中指定了所有生产和消费的需求,并规定当共享缓冲区的数据满足了所有有关它的消费需求后,此共享才可以作为空闲空间允许新的生产者使用。

本设计在为生产者分配缓冲区时各生产者之间必须互斥,此后各个生产者的具体生产活动可以并发。而消费者之间只有在对同一个产品进行消费时才需要互斥,它们在消费过程结束时需要判断该消费者对象是否已经消费完毕并释放缓冲区的空间。 1.2程序流程图 1.3基本内容 在设计程序时主要有三个主体部分、三个辅助函数和一个数据结构。 其中主体部分为一个主函数main(),用于初始化缓冲区和各个同步对象,并完成线程信息的读入,最后根据该组的线程记录启动模拟线程,并等待所有线程的运 Y

行结束后退出程序; 生产者函数Produce()和消费者函数Consume(),生产者和消费者函数运行于线程中完成对缓冲区的读、写动作,根据此处生产消费的模型的特点,生产者和消费者之间通过使用同步对象实现了生产和消费的同步与互斥,是本实验的核心所在。 另外三个辅助性函数被生产者和消费者函数调用,是上述生产和消费函数中对缓冲区进行的一系列处理。 3)在实现本程序的消费生产模型时,具体的通过如下同步对象实现互斥: ①设一个互斥量h_mutex,以实现生产者在查询和保留缓冲区内的下一个位置时进行互斥。 ②每一个生产者用一个信号量与其消费者同步,通过设置h_Semaphore[MAX_THREAD_NUM]信号量 ③数组实现,该组信号量用于相应的产品已产生。同时用一个表示空缓冲区

进程同步与通信作业习题与答案

第三章 一.选择题(50题) 1.以下_B__操作系统中的技术是用来解决进程同步的。 A.管道 B.管程 C.通道 2.以下_B__不是操作系统的进程通信手段。 A.管道 B.原语 C.套接字 D.文件映射 3.如果有3个进程共享同一程序段,而且每次最多允许两个进程进入该程序段,则信号量的初值应设置为_B__。 4.设有4个进程共享一个资源,如果每次只允许一个进程使用该资源,则用P、V操作管理时信号量S的可能取值是_C__。 ,2,1,0,-1 ,1,0,-1,-2 C. 1,0,-1,-2,-3 ,3,2,1,0 5.下面有关进程的描述,是正确的__A__。 A.进程执行的相对速度不能由进程自己来控制 B.进程利用信号量的P、V 操作可以交换大量的信息 C.并发进程在访问共享资源时,不可能出现与时间有关的错误 、V操作不是原语操作 6.信号灯可以用来实现进程之间的_B__。 A.调度 B.同步与互斥 C.同步 D.互斥 7.对于两个并发进程都想进入临界区,设互斥信号量为S,若某时S=0,表示_B__。 A.没有进程进入临界区 B.有1个进程进入了临界区 C. 有2个进程进入了临界区 D. 有1个进程进入了临界区并且另一个进程正等待进入 8. 信箱通信是一种_B__方式 A.直接通信 B.间接通信 C.低级通信 D.信号量 9.以下关于临界区的说法,是正确的_C__。

A.对于临界区,最重要的是判断哪个进程先进入 B.若进程A已进入临界区,而进程B的优先级高于进程A,则进程B可以 打断进程A而自己进入临界区 C. 信号量的初值非负,在其上只能做PV操作 D.两个互斥进程在临界区内,对共享变量的操作是相同的 10. 并发是指_C__。 A.可平行执行的进程 B.可先后执行的进程 C.可同时执行的进程 D.不可中断的进程 11. 临界区是_C__。 A.一个缓冲区 B.一段数据区 C.一段程序 D.栈 12.进程在处理机上执行,它们的关系是_C__。 A.进程之间无关,系统是封闭的 B.进程之间相互依赖相互制约 C.进程之间可能有关,也可能无关 D.以上都不对 13. 在消息缓冲通信中,消息队列是一种__A__资源。 A.临界 B.共享 C.永久 D.可剥夺 14. 以下关于P、V操作的描述正确的是__D_。 A.机器指令 B. 系统调用 C.高级通信原语 D.低级通信原语 15.当对信号量进行V源语操作之后,_C__。 A.当S<0,进程继续执行 B.当S>0,要唤醒一个就绪进程 C. 当S<= 0,要唤醒一个阻塞进程 D. 当S<=0,要唤醒一个就绪 16.对临界区的正确论述是__D_。 A.临界区是指进程中用于实现进程互斥的那段代码 B. 临界区是指进程中用于实现进程同步的那段代码 C. 临界区是指进程中用于实现进程通信的那段代码 D. 临界区是指进程中访问临界资源的那段代码 17. __A__不是进程之间的通信方式。 A.过程调用 B.消息传递 C.共享存储器 D.信箱通信 18. 同步是指进程之间逻辑上的__A__关系。

常用的系统状态查询命令

常用的系统状态查询命令 # lsdev –C –s scsi 列出各个SCSI设备的所有相关信息:如逻辑单元号,硬件地址及设备文件名等。 # ps -ef 列出正在运行的所有进程的各种信息:如进程号及进程名等。 ps aux查看进程信息 # netstat -rn 列出网卡状态及路由信息等。 # netstat -in 列出网卡状态及网络配置信息。 # df -k 列出已加载的逻辑卷及其大小信息。 #top 查看系统应用信息,如CPU、内存使用率。按u,输入用户名则可监视用户;按k然后输入特定进程PID可关闭此进程,输入信号代码15关闭进程,输入信号代码9强行关闭。 # mount 列出已加载的逻辑卷及其加载位置。 # ntsysv 选择启动服务 # uname -a 列出系统ID 号,系统名称,OS版本等信息。 # hostname 列出系统网络名称。 # lsvg –l rootvg,lsvg –p rootvg 显示逻辑卷组信息,如包含哪些物理盘及逻辑卷等。 # lslv –l datalv,lslv –p datalv 显示逻辑卷各种信息,如包含哪些盘,是否有镜像等。 八网络故障定位方法 网络不通的诊断过程: ifconfig 查看网卡是否启动 (up) netstat –i 查看网卡状态 Ierrs/Ipkts 和 Oerrs/Opkts是否>1% ping自己网卡地址 (ip 地址) ping其它机器地址,如不通,在其机器上用diag检测网卡是否有问题。 在同一网中, subnetmask 应一致。 网络配置的基本方法: (1) 如需修改网络地址、主机名等,一定要用 chdev 命令 # chdev –l inet0 –a hostname=myhost # chdev -l en0 -a netaddr='9.3.240.58' -a netmask=255.255.255.0’ (2) 查看网卡状态:# lsdev –Cc if

进程的同步实验报告

操作系统 实验报告 哈尔滨工程大学 计算机科学与技术学院

一、实验概述 1. 实验名称 进程的同步 2. 实验目的 ⑴使用EOS的信号量,编程解决生产者 消费者问题,理解进程同步的意义。 ⑵调试跟踪EOS信号量的工作过程,理解进程同步的原理。 ⑶修改EOS的信号量算法,使之支持等待超时唤醒功能(有限等待),加深理解进程同步的原理。 3. 实验类型 验证+设计 4. 实验内容 ⑴准备实验 ⑵使用EOS的信号量解决生产者-消费者问题 ⑶调试EOS信号量的工作过程 ①创建信号量 ②等待释放信号量 ③等待信号量(不阻塞) ④释放信号量(不唤醒) ⑤等待信号量(阻塞) ⑥释放信号量(唤醒) ⑷修改EOS的信号量算法 二、实验环境 WindowsXP + EOS集成实验环境 三、实验过程 1. 设计思路和流程图

图4-1.整体试验流程图

图4-2.Main 函数流程图、生产者消费、消费者流程图 2. 算法实现 3. 需要解决的问题及解答 (1). 思考在ps/semaphore.c 文件内的PsWaitForSemaphore 和PsReleaseSemaphore 函数中,为什么要使用原子操作?

答:在执行等待信号量和释放信号量的时候,是不允许cpu响应外部中断的,如果此时cpu响应了外部中断,会产生不可预料的结果,无法正常完成原子操作。 (2). 绘制ps/semaphore.c文件内PsWaitForSemaphore和PsReleaseSemaphore函数的流程图。 (3).P143生产者在生产了13号产品后本来要继续生产14号产品,可此时生产者为什么必须等待消费者消费了4号产品后,才能生产14号产品呢?生产者和消费者是怎样使用同步对象来实现该同步过程的呢? 答:这是因为临界资源的限制。临界资源就像产品仓库,只有“产品仓库”空闲生产者才能生产东西,有权向里面放东西。所以它必须等到消费者,取走产品,“产品空间”(临界资源)空闲时,才继续生产14号产品。 (4). 根据本实验3.3.2节中设置断点和调试的方法,自己设计一个类似的调试方案来验证消费者线程在消费24号产品时会被阻塞,直到生产者线程生产了24号产品后,消费者线程才被唤醒并继续执行的过程。 答:可以按照下面的步骤进行调试 (1) 删除所有的断点。 (2) 按F5启动调试。OS Lab会首先弹出一个调试异常对话框。 (3) 在调试异常对话框中选择“是”,调试会中断。 (4) 在Consumer函数中等待Full信号量的代码行(第173行)WaitForSingleObject(FullSemaphoreHandle, INFINITE); 添加一个断点。 (5) 在“断点”窗口(按Alt+F9打开)中此断点的名称上点击右键。 (6) 在弹出的快捷菜单中选择“条件”。 (7) 在“断点条件”对话框(按F1获得帮助)的表达式编辑框中,输入表达式“i == 24”。 (8) 点击“断点条件”对话框中的“确定”按钮。 (9) 按F5继续调试。只有当消费者线程尝试消费24号产品时才会在该条件断点处中断。 4. 主要数据结构、实现代码及其说明 修改PsWaitForSemaphore函数 if (Semaphore->Count>0){ Semaphore->Count--; flag=STATUS_SUCCESS; }//如果信号量大于零,说明尚有资源,可以为线程分配 else flag=PspWait(&Semaphore->WaitListHead, Milliseconds); KeEnableInterrupts(IntState); // 原子操作完成,恢复中断。 return flag; }//否则,说明资源数量不够,不能再为线程分配资源,因此要使线程等待 修改PsReleaseSemaphore函数 if (Semaphore->Count + ReleaseCount > Semaphore->MaximumCount) {

李建伟版实用操作系统第二版最新习题 3 进程同步与通信

李建伟版实用操作系统第二版最新习题 3 进程同步与通信 一、选择题 题号1 2 3 4 5 6 7 8 9 10 答案A D D C B C A B A A 题号11 12 答案D C 二、综合题 1、答:临界资源也称独占资源、互斥资源,它是指某段时间内只充许一个进程使用的资源。比如打印机等硬件资源,以及只能互斥使用的变量、表格、队列等软件资源。各个进程中访问临界资源的、必须互斥执行的程序代码段称为临界区,各进程中访问同一临界资源的程序代码段必须互斥执行。 为防止两个进程同时进入临界区,可采用软件解决方法或同步机构来协调它们。但是,不论是软件算法还是同步机构都应遵循下述准则: ①空闲让进。②忙则等待。③有限等待。④让权等待。 2、答:忙等待意味着一个进程正在等待满足一个没有闲置处理器的严格循环的条件。因为只有一个CPU 为多个进程服务,因此这种等待浪费了CPU 的时钟。 其他类型的等待:与忙等待需要占用处理器不同,另外一种等待则允许放弃处理器。如进程阻塞自己并且等待在合适的时间被唤醒。忙等可以采用更为有效的办法来避免。例如:执行请求(类似于中断)机制以及PV 信号量机制,均可避免“忙等待”现象的发生。 3、答: 在生产者—消费者问题中,Producer 进程中P(empty)和P(mutex)互换先后次序。先 执行P(mutex),假设成功,生产者进程获得对缓冲区的访问权,但如果此时缓冲池已满,没有空缓冲区可供其使用,后续的P(empty)原语没有通过,Producer 阻塞在信号量empty 上,而此时mutex 已被改为0,没有恢复成初值1。切换到消费者进程后,Consumer 进程执行P(full)成功,但其执行P(mutex)时由于Producer 正在访问缓冲区,所以不成功,阻塞在信号量mutex 上。生产者进程和消费者进程两者均无法继续执行,相互等待对方释放资源,会产生死锁。 在生产者和消费者进程中,V 操作的次序无关紧要,不会出现死锁现象。 4、答:

操作系统常见问答题总结

操作系统常见问答题总结 1、简述操作系统的定义。 操作系统是计算机系统的一种系统软件,它统一管理计算机系统的资源和控制程序的执行。 2、在多道程序设计技术的系统中,操作系统怎样才会占领中央处理器? 只有当中断装置发现有事件发生时,它才会中断当前占用中央处理器的程序执行,让操作系统的处理服务程序占用中央处理器并执行之。 3、简述“删除文件”操作的系统处理过程。 用户用本操作向系统提出删除一个文件的要求,系统执行时把指定文件的名字从目录和索引表中除去,并收回它所占用的存储区域,但删除一个文件前应先关闭该文件。 4、对相关临界区的管理有哪些要求? 为了使并发进程能正确地执行,对若干进程共享某一变量(资源)的相关临界区应满足以下三个要求: ①一次最我让一个进程在临界区中执行,当有进程在临界区中时,其他想进入临界区执行的进程必须等待; ②任何一个进入临界区执行的进程必须在有限的时间内退出临界区,即任何一个进程都不应该无限逗留在自己的临界区中; ③不能强迫一个进程无限地等待进入它的临界区,即有进程退出临界区时应让下一个等待进入临界区的进程进入它的临界区。 5、简述解决死锁问题的三种方法。 ①死锁的防止。系统按预定的策略为进程分配资源,这些分配策略能使死锁的四个必要条件之一不成立,从而使系统不产生死锁。 ②死锁的避免。系统动态地测试资源分配情况,仅当能确保系统安全时才给进程分配资源。 ③死锁的检测。对资源的申请和分配不加限制,只要有剩余的资源就呆把资源分配给申请者,操作系统要定时判断系统是否出现了死锁,当有死锁发生时设法解除死锁。 6、从操作系统提供的服务出发,操作系统可分哪几类? 批处理操作系统、分时操作系统、实时操作系统、网络操作系统、分布式操作系统。 7、简述计算机系统的中断机制及其作用。 中断机制包括硬件的中断装置和操作系统的中断处理服务程序。 中断装置由一些特定的寄存器和控制线路组成,中央处理器和外围设备等识别到的事件保存在特定的寄存器中,中央处理器每执行完一条指令,均由中断装置判别是否有事件发生。 若无事件发生,CPU继续执行;若有事件发生,则中断装置中断原占有CPU的程序的执行,让操作系统的处理事件服务程序占用CPU,对出现的事件进行处理,事件处理完后,再让原来的程序继续占用CPU执行。 8、选择进程调度算法的准则是什么? 由于各种调度算法都有自己的特性,因此,很难评价哪种算法是最好的。一般说来,选择算法时可以考虑如下一些原则: ①处理器利用率; ②吞吐量; ③等待时间; ④响应时间。 在选择调度算法前,应考虑好采用的准则,当确定准则后,通过对各种算法的评估,从中选择出最合适的算法。 9、独占设备采用哪种分配方式?

[操作系统]经典进程同步问题题库

1、测量控制系统中的数据采集任务把所采集的数据送一单缓冲区;计算任务则从该缓冲区中取出数据并进行计算。试写出利用信号量机制实现两者共享单缓冲区的同步算法。 Var Sempty,Sfull: semaphore:= 1,0 Begin Parbegin Collection:begin repeat 采集一个数据; wait(Sempty); 数据放入缓冲区; signal(Sfull); untill false; end; Compute:begin repeat wait(Sfull); 从缓冲区取出数据; signal(Sempty); 计算; ` until false; end; Parend End 2、有一阅览室,共有100个座位。读者进入时必须先在一种登记表上登记,该表为每一座位列一个表目,包括座号和读者姓名。读者离开时要注销掉登记内容。试用wait和signal原语描述读者进程的同步问题。 var mutex, readcount :semaphore := 1,100; Begin Parbegin Process Reader:begin repeat wait(readcount); wait(mutex); <填入座号和姓名完成登记>; signal(mutex); <阅读> wait(mutex) <删除登记表中的相关表项,完成注销> signal(mutex); signal(readcount); until false; end; parend; End; 1)、桌上有一空盘,只允许放一个水果,爸爸专向盘中放苹果,妈妈专向盘中放桔子;女儿专吃盘中的苹果,儿子专吃盘中的桔子;试用wait 和signal原语实现爸爸、妈妈、女儿、儿子之间的同步问题。 var Sempty, Sapple, Sorange,: semaphore:= 1,0,0; begin parbegin Father: begin repeat wait(Sempty); ; signal(Sapple); until false; end; Mother: begin repeat wait(Sempty); ; signal(Sorange); until false; end; Son: begin repeat wait(Sorange); ; signal(Sempty); until false; end; Daughter: begin repeat wait(Sapple); ; signal(Sempty); until false; end; parend; end; 1、在4×100米接力赛中,4个运动员之间存在如下关系,运动员1跑到终点把接力棒交给运动员2;运动员2一开始处于等待状态,在接到运动员1传来的接力棒后才能往前跑,他跑完100米后交给运动员3,运动员3也只有在接到运动员2传来的棒后才能跑,他跑完100米后交给运动员4,运动员4接到棒后跑完全程。请试用信号量机制对其上过程进行分析。 var s1,s2,s3:semaphpre:=0,0,0; begin parbegin Athlete1: begin Run 100m; signal(s1); end; Athlete2: begin wait(s1); Run 100m; signal(s2); end; Athlete3: begin wait(s2); Run 100m; signal(s3); end; Athlete4: begin wait(s3); Run 100m; end; parend; end 2、在公共汽车上,司机和售票员各行其职,司机负责开车和到站停车;售票员负责售票和开、关车门;当售票员关好车门后驾驶员才能开车行驶。试用wait和signal操作实现司机和售票员的同步。

进程同步实验报告

实验三进程的同步 一、实验目的 1、了解进程同步和互斥的概念及实现方法; 2、更深一步的了解fork()的系统调用方式。 二、实验内容 1、预习操作系统进程同步的概念及实现方法。 2、编写一段源程序,用系统调用fork()创建两个子进程,当此程序运行时,在系统中有一个父进程和两个子进程活动。让每一个进程在屏幕上显示一个字符:父进程显示字符“a”;子进程分别显示字符“b”和字符“c”。程序的输出是什么?分析原因。 3、阅读模拟火车站售票系统和实现进程的管道通信源代码,查阅有关进程创建、进程互斥、进程同步的系统功能调用或API,简要解释例程中用到的系统功能或API的用法,并编辑、编译、运行程序,记录程序的运行结果,尝试给出合理的解释。 4、(选做)修改问题2的代码,使得父子按顺序显示字符“a”;“b”、“c”编辑、编译、运行。记录程序运行结果。 三、设计思想 1、程序框架 (1)创建两个子进程:(2)售票系统:

(3)管道通信: 先创建子进程,然后对内容加锁,将输出语句存入缓存,并让子进程自己进入睡眠,等待别的进程将其唤醒,最后解锁;第二个子进程也执行这样的过程。父进程等待子进程后读内容并输出。 (4)修改程序(1):在子进程的输出语句前加上sleep()语句,即等待父进程执行完以后再输出。 2、用到的文件系统调用函数 (1)创建两个子进程:fork() (2)售票系统:DWORD WINAPI Fun1Proc(LPVOID lpPartameter); CreateThread(NULL,0,Fun1Proc,NULL,0,NULL); CloseHandle(hThread1); (HANDLE)CreateMutex(NULL,FALSE,NULL); Sleep(4000)(sleep调用进程进入睡眠状态(封锁), 直到被唤醒); WaitForSingleObject(hMutex,INFINITE); ReleaseMutex(hMutex); (3)管道通信:pipe(fd),fd: int fd[2],其中: fd[0] 、fd[1]文件描述符(读、写); lockf( fd,function,byte)(fd: 文件描述符;function: 1: 锁定 0:解锁;byte: 锁定的字节数,0: 从当前位置到文件尾); write(fd,buf,byte)、read(fd,buf,byte) (fd: 文件描述符;buf : 信息传送的源(目标)地址;byte: 传送的字节数); sleep(5); exit(0); read(fd[0],s,50) (4)修改程序(1):fork(); sleep(); 四、调试过程 1、测试数据设计 (1)创建两个子进程:

进程通信与进程同步机制实现

一.课程设计题目 某银行提供10个服务窗口(7个对私服务窗口,3个对公服务窗口)和100个供顾客等待的座位。顾客到达银行时,若有空座位,则到取号机上领取一个号,等待叫号。取号机每次仅允许一位顾客使用,有对公和对私两类号,美味顾客只能选取其中一个。当营业员空闲时,通过叫号选取一位顾客,并为其服务。请用P、V操作写出进程的同步算法。 二.课程设计目的 1、掌握基本的同步与互斥算法,理解银行排队系统操作模型。 2、学习使用Windows 2000/XP中基本的同步对象,掌握相关API 的使用方法。 3、了解Windows 2000/XP中多线程的并发执行机制,实现进程的同步与互斥。 三.课程设计要求 ◆学习并理解生产者/消费者模型及其同步/互斥规则; ◆学习了解Windows同步对象及其特性; ◆熟悉实验环境,掌握相关API的使用方法; ◆设计程序,实现生产者/消费者进程(线程)的同步与互斥; ◆提交实验报告。 四.需要了解的知识

1.同步对象 同步对象是指Windows中用于实现同步与互斥的实体,包括信号量(Semaphore)、互斥量(Mutex)、临界区(Critical Section)和事件(Events)等。本实验中使用到信号量、互斥量和临界区三个同步对象。 2.同步对象的使用步骤: ◆创建/初始化同步对象。 ◆请求同步对象,进入临界区(互斥量上锁)。 ◆释放同步对象(互斥量解锁)。 五.需要用到的API函数及相关函数我们利用Windows SDK提供的API编程实现实验题目要求,而VC中包含有Windows SDK的所有工具和定义。要使用这些API,需要包含堆这些函数进行说明的SDK头文件——最常见的是Windows.h(特殊的API调用还需要包含其他头文件)。 本实验使用到的API的功能和使用方法简单介绍 1、WaitForSingleObject( hSemaphoreChairs , INFINITE ); WaitForSingleObject( hMutex , INFINITE ); ●功能——使程序处于等待状态,直到信号量hHandle出现(即其值大于等于1)或超过规定的等待时间 ●格式 DWORD WaitForSingleObject(HANDLE hHandle, DWORD dwMilliseconds); ●参数说明

WINDOWS系列操作系统常见进程列表(精华)

WINDOWS系列操作系统常见进程列表(精华) 下面是系统的进程列表 最基本的系统进程(也就是说,这些进程是系统运行的基本条件,有了这些进程,系统就能正常运行) smss.exe session manager csrss.exe 子系统服务器进程 winlogon.exe 管理用户登录 services.exe 包含很多系统服务 lsass.exe 管理 ip 安全策略以及启动 isakmp/oakley (ike) 和 ip 安全驱动程序。(系统服务) 产生会话密钥以及授予用于交互式客户/服务器验证的服务凭据(ticket)。(系统服务) svchost.exe 包含很多系统服务 svchost.exe spoolsv.exe 将文件加载到内存中以便迟后打印。(系统服务) explorer.exe 资源管理器 internat.exe 托盘区的拼音图标 附加的系统进程(这些进程不是必要的,你可以根据需要通过服务管理器来增加或减少) mstask.exe 允许程序在指定时间运行。(系统服务) regsvc.exe 允许远程注册表操作。(系统服务) winmgmt.exe 提供系统管理信息(系统服务)。 inetinfo.exe 通过 internet 信息服务的管理单元提供 ftp 连接和管理。(系统服务) tlntsvr.exe 允许远程用户登录到系统并且使用命令行运行控制台程序。(系统服务) 允许通过 internet 信息服务的管理单元管理 web 和 ftp 服务。(系统服务) tftpd.exe 实现 tftp internet 标准。该标准不要求用户名和密码。远程安装服务 的一部分。(系统服务) termsrv.exe 提供多会话环境允许客户端设备访问虚拟的 windows 2000 professional 桌面会话以及运行在服务器上的基于 windows 的程序。(系统服务) dns.exe 应答对域名系统(dns)名称的查询和更新请求。(系统服务) 以下服务很少会用到,上面的服务都对安全有害,如果不是必要的应该关掉 tcpsvcs.exe 提供在 pxe 可远程启动客户计算机上远程安装 windows 2000 professional 的能力。(系统服务) 支持以下 tcp/ip 服务:character generator, daytime, discard, echo, 以及 quote of the day。(系统服务) ismserv.exe 允许在 windows advanced server 站点间发送和接收消息。(系统服 务) ups.exe 管理连接到计算机的不间断电源(ups)。(系统服务) wins.exe 为注册和解析 netbios 型名称的 tcp/ip 客户提供 netbios 名称服务。(系统服务)

常见进程一览表

常见进程一览表 N ndisuio.sys ndisuio.sys属于NDIS User Mode I/O (NDISUIO)协议驱动,用于支持无线设备,例如蓝 netdde.exe 据在网络传输。这不是纯粹的系统程序,但是如果终止它,可能会导致不可知的问题。 ntoskrnl.exe 管理器是不会有该进程的。注意:ntoskrnl.exe也可能是w32.bolzano病毒。请使用杀毒软件进行查杀。 ntvdm.exe ntvdm.exe是Windows 16位虚拟机的一部分。该进程用于使16位的进程能够运行在32位的系统环境下。这个程序对你系统的正常运行是非常重要的。 [TOP↑]

P pchschd.exe pchschd.exe用于监视分析系统硬件使用。这不是纯粹的系统程序,但是如果终止它,可能会导致不可知的问题。 pstores.exe pstores.exe属于储存保护服务。它用于应用程序储存,如Internet Explorer储存机密数据。这不是纯粹的系统程序,但是如果终止它,可能会导致不可知的问题。 [TOP↑] R

rasautou.exe rasautou.exe是微软远程访问拨号器程序。它用于系统或者第三方应用程序,管理调制解调器Modem拨号连接。这不是纯粹的系统程序,但是如果终止它,可能会导致不可知的问题。 rdpclip.exe rdpclip.exe用于文件复制。它用于从服务器到本地拷贝粘贴文件。这个程序对你系统的正常运行是非常重要的。 regsvc.exe 是Windows服务集中的一个系统服务。它用于远程计算机访问本地注册表。一些本地程序也能够通过该服务编辑注册表。这个程序对你系统的正常运行是非常重要的。 regsvr32.exe regsvr32.exe用于注册Windows操作系统的动态链接库和ActiveX控件。这个程序对你系统的正常运行是非常重要的。 rnaapp.exe rnaapp.exe是微软Windows 98/Me操作系统的进程,用于进行拨号网络连接。这不是纯粹的系统程序,但是如果终止它,可能会导致不可知的问题。 rpcss.exe

分布式系统中进程的同步方法

分布式系统中进程的同步方法 【摘要】在分布式操作系统中,为了实现进程的同步,首先要对系统中发生的事件进行排序,还要有良好的分布式同步算法。本文对分布式操作系统中的一些常见算法进行了分析,从而解析才能使进程在分布式操作系统中更加正确有效地协同工作。 【关键字】分布式操作系统,进程,同步,算法。 【Abstract】In the distributed operating system,in order to achieve the process of synchronization,First, you want to sort of events that occur in the system,but you also distributed synchronization algorithm.This article analyzes some common algorithms in the distributed operating system, to resolve to make the process more correctly and effectively work together in a distributed operating system. 【Key words】Distributed operating system, Process, Synchronous, Algorithm.

在分布式系统中,处于不同物理位置的若干进程通过传递消息相互通信,进行协同工作完成同一任务。工作过程中,进程产生了大量的事件和消息,这些事件和消息在时间上的先后顺序对工作正确有效的完成往往是有影响的。由于进程所处的物理位置不同带来的时钟差异如各地时钟值的差异和时钟运行精度的差异等)和网络传输延时等方面的原因,一个进程所看到的系统内事件和消息的先后顺序很可能与它们的实际顺序是不一致的,这样就带来了问题,如图1所示。 100 150 300 350 物理时间 图1 分布式进程通信示例 在一个先来先服务的分布式系统中,X地的进程Pi在时刻100时向Z滴的进程Pk发出了请求服务的消息Rq,并盖上了本地的时间戳130,随后Y地的进程Pj也向Pk发出了请求服务消息,并盖上了本地的时间戳120。Pj的消息在时刻300到达Pk,而Pi的消息在时刻350才到达Pk。这样,对Pk而言,不管到达的顺序还是按照时间戳的大小都应该先对Pj进行服务,这显然是不公平的。因此,在分布式系统中必须采取一定的同步机制来保证工作的顺利进行和结果正确。 进程同步大致有两种程度:一种是局部的松散同步,即事件和消息产生的逻辑顺序上简单同步;一种是全局的精确同步,即各进程的本地时钟基于现实世界物理时间标准同步。前一种同步能由Lamport算法和Ricart and Agrawla 算法等算法实现。在这种同步机制中,各进程利用逻辑时钟产生时间戳,能保证按序发送消息,同样接收进程也能按序接收。或者说,接受进程能按序从各个不同进程接收消息,而且从同一进程接收的消息也是顺序的。但这种同步仅仅保证了事件和消息的顺序一致性,而不能反映它们产生的真实时间,因为同步机制中所采用的时间戳只能看作是一个数字编号,并没有和物理时钟精确对应起来。这种同步机制在分布式系统的实际应用中有着很大的局限,因为很多现实的分

进程同步:实验报告

1.实验内容(进程的同步) (1) 阅读理解示例程序。 (2) 说明示例程序是否能适合解决 N 个生产者和 1 个消费者问题,并设计实验验证 (3) 参照教材修改为 N 个生产者和 1 个消费者问题 (4) 思考 N 个生产者和 M 个消费者问题的解决方案(不要求) (5) 利用信号量解决同步问题。 2.实验目的 通过程序模拟及验证生产者消费者问题等经典问题,深入理解并发中的同步和互斥的概念 3.实验原理 (1)进程概念: (1.定义:程序的一次执行过程 ( 2.三种基本状态 :就绪状态,执行状态,阻塞状态 (2)进程同步: (1.定义:并发进程在执行次序上的协调,以达到有效的资源共享和相互合作,使程序执行有可再现性。 ( 2.两种形式的制约关系: (一:资源共享关系:进程间接制约,需互斥地访问临界资源。)、(二:相互合作关系:进程直接制约) (3.临界资源:一次仅允许一个进程访问的资源,引起不可再现性是因为临界资源没有互斥访问。 (3)信号量:定义一个用于表示资源数目的整型量S,它与一般的整型量不同,除初始化 外,仅能通过两个标准的原子操作 wait(S)和 signal(S)来访问,俗称 P,V操作。通俗来讲就是用P 来访问资源后减去一个单位资源,用 V 操作来释放一个单位资源就是现有资源上加一个单位资源。 4.实验内容一:说明示例程序是否能适合解决 N 个生产者和 1 个消费者问题,并设计实验验证答:示例程序不能解决多个生产者和消费者的问题,它是解决单个消费者和生产者的。如果可以就要修改代码,如“二”所说。 二:多个消费者和生产者的问题

生产者 1 如上图所示 :如果要解决多个生产者和消费者的问题: 第一步:分析上图得出了两种关系,分别是异步和同步的关系 第 二步:异步关系的是生产者和生产者之间的, 因为同一时刻只能 有一个生产者 访问缓冲区,所以我们就可以设置临界资源 .获得 临界资源的生产者才能把产品 放到缓冲区里 第三步:同步关系有两个, 首先是生产者和缓冲区之间, 再是缓冲区和消费者之 间。他们都满足一前一后的关系, 即当缓冲区空间未满时, 生产者才可以放产品; 缓冲区不为空的时候才可以让消费者取出产品消费。 第四步:设计变量,用 C 语言编程,在 linux 上运行,观察结果。代码如下: #include #include #include #include #include #include int n=10; int buffer[10];// 缓冲区空间大小 int in=0,out=0; sem_t mutex,empty,full;// 设置临界资源,定义两个同步关系的信号量 void* producer(void *arg){ // 生产者 sem_wait(&mutex); // 访问临界资源 int tag= pthread_self()%100; int nextPro; srand(time(NULL)+tag); 生产者 6 缓冲区 消费者 生产者 2 生产者 3 生产者 4 生产者 5 相关头文件

进程管理系统设计

目录 一、设计系统目的 (1) (1) 三、系统分析 (1) 四、系统设计 (1) 五、程序设计流程图 (5) 六、源程序清单 (5) 七、调试过程中的问题及系统测试情况 (12) 1 (12) 2、系统测试结果 (12) 八、系统设计总结 (14)

一、设计系统目的 本设计的目的是加深对进程概念及进程管理各部分内容的理解,熟悉进程管理中主要数据结构的设计及进程调度算法、进程控制机构、同步机构及通讯机构实施。 设计一个允许n个进程并发运行的进程管理模拟系统。该系统包括有简单的进程控制、同步与通讯机构,其进程调度算法可任意选择。每个进程用一个PCB表示,其内容根据具体情况设置。各进程之间有一定的同步关系可选。系统在运行过程中应能显示或打印各进程的状态及有关参数的变化情况,以便观察诸进程的运行过程及系统的管理过程。 三、系统分析 1、进程控制和同步等 可以控制进程的就绪执行和阻塞三种状态等基本功能。 2、进程调度 调度算法采用的是先来先服务算法。 3 输出的内容包括—就绪的进程队列,当前cup正在执行的进程,被阻塞的进程队 列。 四、系统设计 本系统所包括的数据结构是对列类 本系统由于需要输出就绪队列,执行队列,阻塞对列,故需要利用对列来实现。 最好利用队列类来实现,这样可以充分利用类的继承来简化程序。 class queue { public:

queue():rear(NULL),front(NULL){}; ~queue(); void enqueue( char &item); char dequeue(); void del(char item); void display(); int find(char item); int isempty(){return front==NULL;} private: queuenode *front,*rear; }; queue::~queue() { queuenode * p; while(front!=NULL) { p=front;front=front->link;delete p; } 队列类的成员函数的定义如下: void queue::enqueue(char &item) { if(front==NULL) front=rear=new queuenode(item,NULL); else rear=rear->link=new queuenode(item,NULL); } char queue::dequeue() {

进程同步典型例题(操作系统)

进程同步练习题 1.在公共汽车上,司机和售票员的工作流程如图所示。为保证乘客的安全,司机和售票员应密切配合协调工作。请用信号量来实现司机与售票员之间的同步。 司机 售票员 图司机和售票员工作流程图 2.桌子上有一只盘子,盘子中只能放一只水果。爸爸专向盘子中放苹果,妈妈专向盘子中放橘子,一个儿子专等吃盘子中的橘子,一个女儿专等吃盘子中的苹果。用PV操作实现他们之间的同步机制。 3.a,b两点之间是一段东西向的单行车道,现要设计一个自动管理系统,管理规则如下:(1)当ab之间有车辆在行驶时同方向的车可以同时驶入ab段,但另一方向的车必须在ab 段外等待; (2)当ab之间无车辆在行驶时,到达a点(或b点)的车辆可以进入ab段,但不能从a 点和b点同时驶入; (3)当某方向在ab段行驶的车辆驶出了ab段且暂无车辆进入ab段时,应让另一方向等待的车辆进入ab段行驶。 请用信号量为工具,对ab段实现正确管理以保证行驶安全。 4.将只读数据的进程称为“读者”进程,而写或修改数据的进程称为“写者”进程。允许多个“读者”同时读数据,但不允许“写者”与其他“读者”或“写者”同时访问数据。另外,要保证:一旦有“写者”等待时,新到达的“读者”必须等待,直到该“写者”完成数据访问为止。试用P、V操作正确实现“读者”与“写者”的同步。(第二类读者写者问题,信号量解决方法) 5.一条河上架设了由若干个桥墩组成的一座桥。若一个桥墩只能站一个人,过河的人只能沿着桥向前走而不能向后退。过河时,只要对岸无人过,就可以过。但不允许河对岸的两个人同时过,以防止出现死锁。请给出两个方向的人顺利过河的同步算法。

相关主题