1、 操作系统课程设计操作系统课程设计 报告报告 班班 级级 学学 号号 姓姓 名名 指导老师指导老师 操作系统课程设计报告 2 一、一、 课程设计题目课程设计题目 某银行提供 10 个服务窗口(7 个对私服务窗口,3 个对公服务窗口)和 100 个供顾客等待的座位。 顾客到达银行时, 若有空座位, 则到取号机上领取一个号, 等待叫号。取号机每次仅允许一位顾客使用,有对公和对私两类号,每位顾客只 能选取其中一个。当营业员空闲时,通过叫号选取一位顾客,并为其服务。请用 P、V 操作写出进程的同步算法。 二、二、 课程设计目的课程设计目的 熟练掌握 pv 操作的相关知识; 认识信号量的相关含义; 加深
2、对线程(进程)的认识; 三、三、 课程设计要求课程设计要求 要求打印: a) 初始状态 b) 中间变化的状态信息 c) 以及最终状态信息。 四、四、 原理及算法原理及算法 目前,在以银行营业大厅为代表的窗口业务,大量客户的拥挤排队已成 为了这些企事业单位改善服务品质、提升企业形象的主要障碍。排队叫号系统 的使用将成为改变这种情况的有力手段。 排队系统完全模拟了人群排队的全过 程,通过取票进队。排队等待、叫号服务等功能,很好的解决了客户在服务机 构办理业务是所遇到的各种排队、拥挤和混乱现象,代替了人们站队的辛苦, 把顾客等待的烦恼变成了一段难得的休闲时光, 使客户拥有了一个自由的空间 和一份美好
3、的心情。 排队过程大致流程为: 操作系统课程设计报告 3 本次的银行叫号系统有 pv 操作来模拟实现。 1) 实验中用到的相关知识介绍(windows 环境下) 1同步对象 同步对象是指 Windows 中用于实现同步与互斥的实体,包括信号量 (Semaphore)、互斥量(Mutex)、临界区(Critical Section)和事件(Events) 等。本实验中使用到信号量、互斥量和临界区三个同步对象。 同步对象的使用步骤: 创建/初始化同步对象。 请求同步对象,进入临界区(互斥量上锁)。 释放同步对象(互斥量解锁)。 这些对象在一个线程中创建,在其他线程中都可以使用,实现同步与互 斥。
4、2相关 API 的功能及使用 利用 Windows SDK 提供的 API 编程实现实验题目要求,而 VC 中包含有 Windows SDK 的所有工具和定义。要使用这些 API,需要包含堆这些函数进 行说明的SDK头文件最常见的是Windows.h(特殊的API调用还需要包含 其他头文件) 下面给出的是本实验使用到的 API 的功能和使用方法简单介绍 (1) CreateThread 功能创建一个在调用进程的地址空间中执行的线程 格式 HANDLE CreateThread( LPSECURITY_ATTRIBUTES lpThreadAttributes, 1、 顾客取号 需要办理 业 务
5、 的 顾 客 到 取 票 机 前 取号, 并获得 打 印 出 的 排 队号票 2、顾客休息 等待 取 到 排 队号的顾客 在休息区休 息等待, 注意 大厅的提示 信息 4、顾客到 窗口办理 休 息 区 的 顾 客 听 到 呼 叫 就 到 响 应 窗 口 进 行 一 对一服务。 3、营业员按钮 呼叫 窗口操作员 按“下一位” , 当前窗口就显 示顾客排队号 并语音呼叫 “请 XX到 X号窗口” 操作系统课程设计报告 4 DWORD dwStackSize, LPTHREAD_START_ROUTINE lpStartAddress, LPVOID lpParamiter, DWORD dwCre
6、ationFlags, Lpdword lpThread) 参数说明 lpThreadAttributes指向一个 LPSECURITY_ATTRIBUTES(新线程的 安全性描述符)。 dwStackSize定义原始堆栈大小。 lpStartAddress指向使 LPTHRAED_START_ROUTINE 类型定义的函数。 lpParamiter定义一个给进程传递参数的指针。 dwCreationFlags定义控制线程创建的附加标志。 lpThread保存线程标志符(32 位) (2) CreateMutex 功能创建一个命名或匿名的互斥量对象 格式 HANDLE CreateMutex(LPSECURITY_ATTRIBUTES lpMutexAttributes, BOOL bInitialOwner, LPCTSTR lpName); 参数说明 lpMutexAttributes必须取值 NU