版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、重庆大学学生实验报告实验课程名称操作系统原理开课实验室 重庆大学 DS1501学 院软件工程年级2013 专业班学生姓名 学 号开课时间 2015 至2016 学年第 一 学期总成绩教师签名洪明坚重庆大学软件学院制操作系统原理实验报告开课实验室:DS15012016年1月7日学院软件学院年级、专业、班姓名成绩课程名称操作系统原理实验项目名 称线程同步指导教师教 师 评 语教师签名:年 月 日? 实验目的(软件需求文档)掌握信号量的实现与应用二、实验原理(软件设计文档)互斥的实现? 一般小直接用sti/cli ,而是用-save_flags_cli(flags)保存EFLAGS勺值到一个变量fl
2、ags中,然后IF=0一restore_flags(flags)把变量flags 的值恢复到EFLAG浒线程的睡眠和唤醒? 睡眠void sleep_on(struct wait_queue *head)? 参数head是睡眠队列的头指针的指针? 唤醒void wake_up(struct wait_queue *head, int n)? 参数n表不要唤醒的线程个数-n小于0表示唤醒该队列中的所有线程? sleep_on和wake_up必须在美中断环境中运行一用 save_flags_cli/restore_flags保护实现信号量编辑文件epos/sem.c ,实现如卜四个函数void *
3、sys_sem_create(int value)value是信号重的初值分配内存要用 kmalloc ,不能用 malloc !成功返回信号量句柄hsem,否则返回NULLint sys_sem_destroy(void *hsem)释放内存要用kfree ,不能用free !成功返回0,否则返回-1int sys_sem_wait(void *hsem)P 操作, 要用 save_flags_cli/restore_flags 和函数 sleep_on成功返回0,否则返回-1int sys_sem_signal(void *hsem)V 操作,要用 save_flags_cli/resto
4、re_flags 和函数 wake_up成功返回0,否则返回-1把这四个函数做成系统调用,分别是 sem_create/destroy/wait/signal解决实验(二)中的花屏现象在 graphics.c 中,定义一个表示信号量的全局变量static void *hsem = NULL;分别在函数initGraphics 和exitGraphics中创建和销毁信号量hsem在函数setPixel中,用信号量hsem保护下面的临界区switchBank(HIWORD(addr);p = getBValue(cr);(p+1) = getGValue(cr);(p+2) = getRValue
5、(cr);实现生产者/消费者生产者生成随机数后,要画到缓冲区消费者排序后,要清空缓冲区三、使用仪器、材料(软硬件开发环境)Notepad+expenv四、实验步骤(实现的过程)/定义信号量结构体struct semaphore(int value;/*processes blocked by this semaphore*/ struct wait queue *wq kbd);sem.c:void *sys sem create (int value )(struct semaphore *hsemchar *p;p = (char *) kmalloc (sizeof (struct se
6、maphore);hsem = (struct semaphore *) p;hsem- value =value ; / 赋初值 hsem-wq_kbd = NULL/! 非常重要!if (hsem=NULI)return NULLelsereturn (struct semaphore *) hsem/成功返回信号量句柄 hsem)nt sys sem destroy (void *hsen) (kfree (hsem); return 0;)int sys sem wait (void *hsen)(uint32 tflags ;save flags cli(flags );(struc
7、t semaphore*) hsem)- value -; /P 操作if ( struct semaphore*) hsem)-value wq_kbd);) restore_flags (flags ); return 0;) int sys sem signal (void *hsem(uint32_t flags ;save_flags_cli (flags );(struct semaphore*) hsen)- value +; /V 操作if ( struct semaphore*) hsem)- value wq_kbc), 1); / 等待队列中唤醒一个线程 restore
8、flags(flags );return 0;把这四个函数做成系统调用sem_create/destroy/wait/signalgraphics.c 中声明信号量:# define arrayNumber 50#define N 4 /缓冲区数static void * mutex = NULL / 互斥信号量 staticvoid * full = NULL/ 已生产产品数staticvoid * empty = NULL / 空闲数int startposition = 0;/生产者缓冲区坐标static int count = 0; /消费者缓冲区坐标 nt temp450= 0 ;i
9、nt array N arrayNumber;生产者消费者函数:void tsk_producer (void *pv)while (1)int i = 0;srand ( unsigned )time ( NULL);sem_wait(empty); /是否有空闲位置?sem_wait( mutex);for (i = 0; i = arrayNumber - 1; i +) startposition = (+ startposition ) % N; sem_signal (mutex);sem signal (full ); / 有产品生产好 task_exit (0);void tsk_consumer (
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年宜昌市卫生健康委所属事业单位“招才兴业”高层次人才引进公开招聘111人备考题库参考答案详解
- 2025年第四季度芜湖市第一人民医院公开招聘劳务派遣工作人员备考题库及1套完整答案详解
- 2026年成都市龙王庙正街小学员额教师招聘补招备考题库完整答案详解
- 2026年安龙县美团合伙人招聘备考题库及答案详解一套
- 2026年惠州大亚湾开发区管委会石化能源产业局公开招聘事业单位编外人员备考题库及参考答案详解1套
- 2026年东台市市级机关公开转任公务员备考题库及答案详解1套
- 2026年扬州市新华中学公开招聘教师6人备考题库及完整答案详解一套
- 2026年司法鉴定所鉴定助理招聘备考题库含答案详解
- 2026年孟定海关综合技术中心医学检验工作人员招聘备考题库及参考答案详解一套
- 2026年成都市锦江区东华小学公开招聘员额教师的补招备考题库附答案详解
- 2025年荆楚理工学院马克思主义基本原理概论期末考试真题汇编
- 2026年恒丰银行广州分行社会招聘备考题库带答案详解
- 纹绣风险协议书
- 【语文】湖南省长沙市雨花区桂花树小学小学一年级上册期末试卷(含答案)
- 贵港市利恒投资集团有限公司关于公开招聘工作人员备考题库附答案
- 广东省部分学校2025-2026学年高三上学期9月质量检测化学试题
- 【道 法】期末综合复习 课件-2025-2026学年统编版道德与法治七年级上册
- 中国心力衰竭诊断和治疗指南2024解读
- 冬季防静电安全注意事项
- 2025年国家工作人员学法用法考试题库(含答案)
- 2025版煤矿安全规程题库
评论
0/150
提交评论