Nachos同步机制实习报告概要.docVIP

  • 3
  • 0
  • 约3.35千字
  • 约 13页
  • 2017-08-17 发布于湖北
  • 举报
Nachos同步机制实习报告概要

同步机制实习报告 善良的大姐姐 2015.3.30 目录 一:总体概述 3 二:任务完成情况 3 任务完成列表(Y/N) 3 具体Exercise的完成情况 3 三:遇到的困难以及解决方法 12 四:收获及感想 12 内容五:参考文献 13 一:总体概述 Lab3首先要求阅读chos系统提供的同步机制代码即的基础上实现ock锁和管程的dition(条件变量 二:任务完成情况 任务完成列表(Y/N) Exercise1 Exercise2 Exercise3 Exercise4 Challenge1 Challenge2 Yes Yes Yes Yes Yes Yes 具体Exercise的完成情况 Exercise1:调研 任务 调研 调研情况 Linux的同步机制包括好几层 第一层:原子操作。 以定义在linuxX.X/include/asm-i386/atomic.h文件中文件内定义了原子类型 第二层 以 第三层信号量 以 Exercise2:源代码阅读 任务 code/threads/synch.h和code/threads/synch.cc code/threads/synchlist.h和code/threads/synchlist.cc 阅读情况 Synch.cc(h) 文件中有三个类:Semaphore, Lock, Condition。 其中Semaphore是已经编写完成的主要功能是通过一个名字和一个初始值可以初始化一个maphore。P函数的作用是:判断当前线程能否进入临界区,如果可以(即初始值≠0),则进入,且初始值减一;如果不能(即初始值=0),则将当前线程放入Semaphore的等待队列中,线程进入休眠状态。V函数的作用是:如果Semaphore的等待队列不为空,将等待队列的队头线程取出来,将其状态标识为ReadyToRun,并且初始值加1。 另外两个类是本次作业需要完成的会在之后说明 Synchlist.cc(h) 文件中包括一个 具体来说,类中有一个Append函数,用于将元素加入队列;有一个Remove函数用于将队头元素移出队列而互斥访问的实现方式为保护起来 这两个函数模拟了monitor(管程cise3:实现锁和条件变量 任务 Lock 简述 使用Semaphore作为同步原语,定义的时候创建一个初始值为1的Semaphore。对应的,Acquire函数就是执行maphore的 验证正确性: 采用基于优先级抢占式调度一个线程递归生成优先级更高的线程如果没有Lock 但若在线程一开始加上了互斥锁那么只有当当前线程运行结束后它 Condition 简述 修改情况 简单解释 新增List变量conditionlistWait函数 对传入的Lock参数执行关中断 将当前线程加入 对传入的ck参数执行 开中断lease的原因是由于管程的互斥访问性当一个线程需要 关中断如果oRun队列 开中断cast函数 关中断 将 开中断dcast函数即唤醒所有正在等待这个条件变量的线程4:实现同步互斥实例 任务 基于Nachos中的信号量、锁和条件变量,采用两种方式实现同步和互斥机制应用(其中使用条件变量实现同步互斥机制为必选题目)。具体可选择“生产者-消费者问题”、“读者-写者问题”、“哲学家就餐问题”、“睡眠理发师问题”等。(也可选择其他经典的同步互斥问题) 完成情况 基于 (基于时间片轮转调度,时间片长度随机。为了使得中断有可能在任何地方发生,在所有临界区中的代码语句后面都调用了interrupt-onetick) 修改情况isFull信号量初始值为isEmpty信号量初始值为 M1信号量 生产数组如果生产数组内元素数量达到 M1信号量用于保证生产数组的互斥访问。 Producer函数 isEmpty-P() 在 isFull-V() 由于IsEmpty信号量初始值为Consumer函数 isFull-P() 在 isEmpty-V() 由于isFull信号量在生产者生产之后会被释放,因此此时消费者可以消费。相应的,isEmpty信号量被释放,使得生产者可以继续生产。 Test_Producer函数 For循环函数_consumer函数 For循环函数0次Test函数 新生成1个生产者线程_producer函数和_consumer函数 测试结果截图 基于 修改情况: 增改测试变量和函数 简单解释 Synchlist.cc: 新增变量 ListEmpty条件变量 Full条件变量 Listcount计数值 计数值用于判断生产队列是否满了 加锁 如果生产队列满Empty条件变量 Signal listFull条件变量 解锁 如果生产队列满,则等

文档评论(0)

1亿VIP精品文档

相关文档