os_exercises

同步互斥(lec 19) spoc 思考题

  • 有"spoc"标记的题是要求拿清华学分的同学要在实体课上完成,并按时提交到学生对应的ucore_code和os_exercises的git repo上。

个人思考题

总体介绍

  • 信号量与条件变量有什么不同?
  • 同步机制、处理机调度、等待队列和定时器有些什么相互影响?

底层支撑

  • 操作系统内核如何利用定时器实现sleep系统?在定时队列中保存的时间格式是什么?
  • 中断屏蔽控制位在哪个寄存器中?如何修改中断屏蔽控制位?
  • 在ucore中有多少种等待队列?
  • 等待队列的两个基本操作down()和up()对线程状态和等待队列有什么影响?

信号量设计实现

  • ucore中的信号量实现能实现是按FIFO获取信号量资源吗?给出你的理由。
  • 为什么down()要加一个_down()函数来进行实质的处理?类似情况还出现在up()和_up()。

    参考回答:有多个有小差异的类似函数要使用相同的核心功能实现。类似情况还出现在do_fork()函数。

管程和条件变量设计实现

  • 管程与信号量是等价的。如何理解?
  • 基于信号量的管程中在什么地方用到信号量?
  • 管程实现中的monitor.next的作用是什么?
  • 分析管程实现中PV操作的配对关系,并解释PV操作的目的。
  • 基于视频中对管程的17个状态或操作的分析,尝试分析管程在入口队列和条件变量等待队列间的等待和唤醒关系。注意分析各队列在什么情况下会有线程进入等待,在什么时候会被唤醒,以及这个等待和唤醒的依赖关系。

哲学家就餐问题

  • 哲学家就餐问题的管程实现中的外部操作成员函数有哪几个?
  • 哲学家就餐问题的管程实现中用了几个条件变量?每个条件变量的作用是什么?

小组思考题

  1. (扩展练习) 每人用ucore中的信号量和条件变量两种手段分别实现47个同步问题中的一题。向勇老师的班级从前往后,陈渝老师的班级从后往前。请先理解与采用python threading 机制实现的异同点。