当前位置:首页 > 操作系统实验指导书
实验四、Window进程管理实验
一、实验目的
1、学习信号量的使用。
2、使用MFC提供的函数创建线程。
二、实验内容
1、配合操作系统课程的学习,加深对线程的控制与描述的理解并熟悉VC的使用。
2、学会VC下信号量的使用。
3、利用信号量机制完成5个生产者10个消费者的同步。 4、设计一个有 N个进程共行的进程调度程序。
三、实验步骤
(一)、用CSemaphore类实现信号量同步
1、创建MFC AppWizard工程
2、在stdafx.h中加入#include
3、在**View.cpp中定义线程函数UINT ThreadFunc(LPVOID lpParameter) {HWND hWnd=(HWND)lpParameter;
::MessageBox(hWnd,\semaphore.Lock();
::MessageBox(hWnd,\semaphore.Unlock();
::MessageBox(hWnd,\return 1;}
4、定义全局信号量CSemaphore semaphore(2,2,\5、创建线程响应函数:void CMy**View::OnThread() {HWND hWnd=GetSafeHwnd();
AfxBeginThread(ThreadFunc,(LPVOID)hWnd); }
- 9 -
(二)多线程控制实验
从屏幕左上角向右下角显示运动的“HELLO”,从右上角向左下角显示运动的“GOOD”,并能控制线程结束。
1、创建线程函数_beginthread(CharThread,0,(void*)&posChar) _beginthread(NumThread,0,(void*)&posNum) _beginthread(KillThread,0,NULL)
2、函数定义部分:void CharThread(void *posChar)
{ … }
(三)利用信号量机制完成5个生产者10个消费者的同步。 (四)设计一个有 N个进程共行的进程调度程序。进程调度算法:采用最高优先数优先的调度算法(即把处理机分配给优先数最高的进程)和先来先服务算法。
每个进程有一个进程控制块( PCB)表示。进程控制块可以包含如下信息:进程名、优先数、到达时间、需要运行时间、已用CPU时间、进程状态等。
进程的优先数及需要的运行时间可以事先人为地指定。进程的到达时间为进程输入的时间。 进程的运行时间以时间片为单位进行计算。 每个进程的状态可以是就绪 Wait、运行Run、或完成Finish三种状态之一。
就绪进程获得 CPU后都只能运行一个时间片。用已占用CPU时间加1来表示。
如果运行一个时间片后,进程的已占用 CPU时间已达到所需要的运行时间,则撤消该进程,如果运行一个时间片后进程的已占用CPU时间还未达所需要的运行时间,也就是进程还需要继续运行,此时应将进程的优先数减1(即降低一级),然后把它插入就绪队列等待CPU。
- 10 -
每进行一次调度程序都打印一次运行进程、就绪队列、以及各个进程的 PCB,以便进行检查。
重复以上过程,直到所要进程都完成为止。
- 11 -
实验五、进程间通信机制
一、实验目的
1、由于Windows是事件驱动的,所以消息传递对于Windows编程是很重要的。通过实践来掌握Windows的消息传递机制。
二、实验内容
1、在客户端(Client端)使用SendMessage函数发送消息到服务器端(Server端)实现进程间通信。 发送进程在发送消息之前,先在自己的内存空间设置一个发送区,把欲发送的消息填入其中,然后再用发送过程将其发送出去。接收进程则在接收消息之前,在自己的内存空间内设置相应的接收区,然后用接收过程接收消息。发送进程向消息缓冲区写消息,而不用管接收进程是否已经准备好要接收。接收进程则从消息缓冲区内读消息。
三、实验步骤
1、客户端:
(1)创建基于对话框的MFC工程。在对话框中添加控件如下。
(2)为编辑框Edit添加类型为CString的成员变量m_msg。方法将鼠标放到Edit框上点击鼠标右键选择ClassWizard,打开MFC ClassWizard选项卡,选中第二个选项Member Variables,在IDC_EDIT1上双击,即可看到如下对话框。
- 12 -
共分享92篇相关文档