课程设计说明(含软件工程11和软件工程(嵌入式系统11)).ppt_第1页
课程设计说明(含软件工程11和软件工程(嵌入式系统11)).ppt_第2页
课程设计说明(含软件工程11和软件工程(嵌入式系统11)).ppt_第3页
课程设计说明(含软件工程11和软件工程(嵌入式系统11)).ppt_第4页
课程设计说明(含软件工程11和软件工程(嵌入式系统11)).ppt_第5页
已阅读5页,还剩28页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

江苏大学计算机学院 适用于软件工程11级和嵌软11级 操作系统课程设计 Page2 题目 进程通信与进程同步机制实践 Linux或Windows或Unix环境下 采用系统调用中的信号量 P V操作 编程解决以下问题 题目 某银行提供5个服务窗口 4个对私服务窗口 1个对公服务窗口 和10个供顾客等待的座位 顾客到达银行时 若有空座位 则到取号机上领取一个号 等待叫号 若没有空座位 则在门外等待或离开 取号机每次仅允许一位顾客使用 有对公和对私两类号 每位顾客只能选取其中一个 当营业员空闲时 通过叫号选取一位顾客 并为其服务 请用P V操作写出进程的同步算法 说明 1 可模拟设立一个服务时间区间如9 00 17 00 也可限定最大服务人数 2 顾客达到时间随机 办理对私或对公业务随机 可通过随机数产生 要求打印 初始状态中间变化的状态信息以及最终状态信息 Page3 题目 进程通信与进程同步机制实践 课程设计报告撰写要求1 内容 课程设计题目 目的 要求 原理及算法 主要数据结构和流程 实验测试结果及结果分析 课程设计总结 源程序清单 2 将设计报告 源程序打包压缩为一个文件 上传到ftp 202 195 168 13的操作系统目录下的软件2011课程设计或嵌软2011课程设计中 同时提交纸质报告 实验安排时间 18周周一 周六下午5 8节 19周周一 周二下午5 8节地点 计算机楼304 310机房 Page4 涉及到的相关知识 Linux操作系统环境下C的编译 编辑环境一般采用vi 编译命令 g 源文件名可执行文件名用到的相关系统调用 shmget 开辟共享存储区 semget 用于产生一个信号量数组或查找已创建的信号量数组的描述字 其中 semkey是用户指定的关键字 count规定信号量数组的长度 flag为操作标志 semop 用于进行P V操作 其中 semid是semget返回的描述字 oplist是用户提供的操作数组的指针 count是该数组的大小 Semop返回最后被操作的信号量在操作完成前的值 oplist中的每个元素包含三个内容 信号量序号 欲进行的操作值和标识 Page5 gcc的使用 基本使用格式 gcc 选项 常用选项及含义 Page6 gcc的常用选项 Page7 必须包含的头文件 include include include include include用到的数据结构 sembuf Page8 P操作的实现 设置oplist中的欲进行的操作值为 1 后执行semop 例如程序段如下 Structsembuf unsignedshortsem num shortsem op shortsem flg Psembuf semid semget SEMKEY 2 0777 Psembuf sem num first Psem sem op 1 Psem sem flg SEM UNDO semop semid Page9 V操作的实现 设置oplist中的欲进行的操作值为1 后执行semop 例如程序段如下 Structsembuf unsignedshortsem num shortsem op shortsem flg Psembuf semid semget SEMKEY 2 0777 Psembuf sem num first Psem sem op 1 Psem sem flg SEM UNDO semop semid Page10 1 如何创建信号量 用来实现同步与互斥 2 P V如何实现 例子 Page11 程序说明 这个程序用于实现生产者 消费者问题 原理 producer 任意多个 缓冲区 存放多个产品 consumer 任意多个 producer和consumer通过共享缓冲区进行通信 信号量用于对缓冲区互斥访问 对producer和consumer进行同步 共有三个程序 control producer consumer 其中control是主控程序 producer是生产者 consumer是消费者 control 实现对缓冲区的初始化 要最先执行 且只需要执行一次 producer 生产一个产品放入缓冲区 从屏幕输入一个字符串 32字节以内 consumer 从缓冲区取出一个产品 向屏幕上输出一个字符串 Page12 程序说明 3 注意 信号量 共享缓冲区都是系统资源 其总个数是有上限的 每个资源的id在系统中唯一 并且系统不会主动释放它们 所以要小心使用 及时释放 本程序中 control在执行一次后 成功执行 信号量 共享缓冲区就会分配 如果再执行它 control会提示资源已经分配 是否要释放它们 如果键入y Y 则资源释放 此后执行producer consumer都会报错 当然也可以使用ipcsipcrm命令来查看或释放资源 4 为了结构清晰 程序没有多余的输入或输出 可以在producer consumer程序中适当的位置增加输出语句 和输入字符语句将程序暂停在某个位置 以观察运行的详细进程 5 建议增加功能 查看信号量的值 等待该信号量的进程等信息 使用的函数为 semctrl6 这个程序是一个框架 稍作修改 可以用于其它进程同步互斥问题 Page13 程序说明 include include include include include include defineSHMKEY9075 共享存储区的键 defineSEMKEY PRODUCER9085 defineSEMKEY CONSUMER9086 defineSEMKEY MUTEX9087 信号量数组的键 注意 上面的键在系统中必须唯一 defineBUFF LEN10 缓冲区可以存放10个产品 definePRODUCT LEN32 每个产品是一个字符串 32字符 Page14 程序说明 voidset sembuf struct structsembuf sem intsemnum intsemop intsemflg 设置信号量结构 sem sem num semnum sem sem op semop sem sem flg semflg main char addr end intshmid intsemid producer semid consumer semid mutex 信号量id structsembufsem tmp Page15 程序说明 开辟共享存储区 if shmid shmget SHMKEY BUFF LEN PRODUCT LEN 2 0777 IPC CREAT IPC EXCL 1 if errno EEXIST printf TheBufferHasExisted n printf DoYouWantToDeleteTheBuffer Y yes n scanf c Page16 程序说明 if end y end Y 共享存储区 信号量并不随程序的结束而被删除 如果我们没删除的话 可以用ipcs命令查看 用ipcrm删除 释放缓冲区 shmid shmget SHMKEY BUFF LEN PRODUCT LEN 2 0777 if shmctl shmid IPC RMID 0 0 perror shmctl 同时释放信号量 semid mutex semget SEMKEY MUTEX 1 0777 semid consumer semget SEMKEY CONSUMER 1 0777 semid producer semget SEMKEY PRODUCER 1 0777 semctl semid mutex 0 IPC RMID semctl semid consumer 0 IPC RMID semctl semid producer 0 IPC RMID Page17 程序说明 elseprintf FailToCreateBuffer n return 1 addr char shmat shmid 0 0 连接缓冲区 memset addr 0 BUFF LEN PRODUCT LEN 2 shmdt addr 离开缓冲区 创建3个信号量 1个用于对缓冲区互斥 2个用于生产者 消费者同步 if semid mutex semget SEMKEY MUTEX 1 0777 IPC CREAT IPC EXCL 1 if errno EEXIST printf TheSEMKEY MUTEXHasExisted n elseprintf FailToCreateSEMKEY MUTEX n return 1 Page18 程序说明 if semid consumer semget SEMKEY CONSUMER 1 0777 IPC CREAT IPC EXCL 1 if errno EEXIST printf TheSEMKEY CONSUMERHasExisted n elseprintf FailToCreateSEMKEY CONSUMER n return 1 if semid producer semget SEMKEY PRODUCER 1 0777 IPC CREAT IPC EXCL 1 if errno EEXIST printf TheSEM PRODUCERHasExisted n else Page19 程序说明 printf FailToCreateSEM PRODUCER n return 1 给信号量赋初值 set sembuf struct Page20 程序说明 if semid consumer semget SEMKEY CONSUMER 1 0777 IPC CREAT IPC EXCL 1 if errno EEXIST printf TheSEMKEY CONSUMERHasExisted n elseprintf FailToCreateSEMKEY CONSUMER n return 1 if semid producer semget SEMKEY PRODUCER 1 0777 IPC CREAT IPC EXCL 1 if errno EEXIST printf TheSEM PRODUCERHasExisted n elseprintf FailToCreateSEM PRODUCER n return 1 Page21 程序说明 if semid consumer semget SEMKEY CONSUMER 1 0777 IPC CREAT IPC EXCL 1 if errno EEXIST printf TheSEMKEY CONSUMERHasExisted n elseprintf FailToCreateSEMKEY CONSUMER n return 1 Page22 程序说明 if semid producer semget SEMKEY PRODUCER 1 0777 IPC CREAT IPC EXCL 1 if errno EEXIST printf TheSEM PRODUCERHasExisted n elseprintf FailToCreateSEM PRODUCER n return 1 Page23 程序说明 给信号量赋初值 set sembuf struct Page24 Windows环境下的关知识介绍 1 同步对象同步对象是指Windows中用于实现同步与互斥的实体 包括信号量 Semaphore 互斥量 Mutex 临界区 CriticalSection 和事件 Events 等 本实验中使用到信号量 互斥量和临界区三个同步对象 同步对象的使用步骤 创建 初始化同步对象 请求同步对象 进入临界区 互斥量上锁 释放同步对象 互斥量解锁 这些对象在一个线程中创建 在其他线程中都可以使用 实现同步与互斥 Page25 Windows环境下的关知识介绍 2 相关API的功能及使用利用WindowsSDK提供的API编程实现实验题目要求 而VC中包含有WindowsSDK的所有工具和定义 要使用这些API 需要包含堆这些函数进行说明的SDK头文件 最常见的是Windows h 特殊的API调用还需要包含其他头文件 下面给出的是本实验使用到的API的功能和使用方法简单介绍 Page26 Windows环境下的关知识介绍 2 相关API的功能及使用 1 CreateThread功能 创建一个在调用进程的地址空间中执行的线程格式HANDLECreateThread LPSECURITY ATTRIBUTESlpThreadAttributes DWORDdwStackSize LPTHREAD START ROUTINElpStartAddress LPVOIDlpParamiter DWORDdwCreationFlags LpdwordlpThread Page27 Windows环境下的关知识介绍 参数说明lpThreadAttributes 指向一个LPSECURITY ATTRIBUTES 新线程的安全性描述符 dwStackSize 定义原始堆栈大小 lpStartAddress 指向使LPTHRAED START ROUTINE类型定义的函数 lpParamiter 定义一个给进程传递参数的指针 dwCreationFlags 定义控制线程创建的附加标志 lpThread 保存线程标志符 32位 Page28 Windows环境下的关知识介绍 2 CreateMutex功能 创建一个命名或匿名的互斥量对象格式HANDLECreateMutex LPSECURITY ATTRIBUTESlpMutexAttributes BOOLbInitialOwner LPCTSTRlpName 参数说明lpMutexAttributes 必须取值NULL bInitialOwner 指示当前线程是否马上拥有该互斥量 即马上加锁 lpName 互斥量名称 Page29 Windows环境下的关知识介绍 3 CreateSemaphore功能 创建一个命名或匿名的信号量对象格式HANDLECreateSemaphore LPSECURITY ATTRIBUTESlpSemaphoreAttributes LONGlInitialCount LONGlMaximumCount LPCTSTRlpName 参数说明lpSemaphoreAttributes 必须取值NULL lInitialCount 信号量的初始值 该值大于0 但小于lMaximumCount指定的最大值 lMaximumCount 信号量的最大值 lpName 信号量名称 Page30 Windows环境下的关知识介绍 4 WaitForSingleObject功能 使程序处于等待状态 直到信号量hHandle出现 即其值大于等于1 或超过规定的等待时间格式DWORDWaitForSingleObject HANDLEhHandle DWORDdwMilliseconds 参数说明hHandle 信号量指针 dwMilliseconds 等待的最长时间 INFINITE为无限等待 Page31 Windows环境下的关知识介绍 5 ReleaseSemaphore功能 对指定

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论