第一部分 课程笔记
1.peterson算法
int turn;
int like[2];
void process(int uid){
turn=uid;
like[uid]=true;
while(turn==uid&&like[1-uid]==true);
like[uid]=false;
}
2.生产消费者问题
3.读写者问题
4.哲学家就餐问题
第二部分 试题解析
16.在讨论线程中的全局变量时,曾使用过程create_global将存储分配给指向
变量的指针,而不是变量自身。这是必需的,还是由于该过程也需要使用这些
值?
17.考虑线程全部在用户空间实现的一个系统,其中运行时系统每秒钟得到一
个时钟中断。假设在该运行时系统中,当某个线程正在执行时发生一个时钟中
断,此时会出现什么问题?你有什么解决该问题的建议吗?
18.假设一个操作系统中不存在类似于select的系统调用来提前了解在从文
件、管道或设备中读取时是否安全,不过该操作系统确实允许设置报警时钟,以
便中断阻塞的系统调用。在上述条件下,是否有可能在用户空间中实现一个线程
包?请加以讨论。
19.在2.3.4节中所讨论的优先级反转问题是否可能在用户级线程中发生?为什
么?
20.在2.3.4节中,描述了一种有高优先级进程H和低优先级进程L的情况,导
致了H陷入死循环。若采用轮转调度算法而不是优先级调度算法,还会发生同样
问题吗?请给予讨论。
21.在使用线程的系统中,若使用用户级线程,是每个线程一个堆栈还是每个
进程一个堆栈?如果使用内核级线程情况又如何呢?请给予解释。
22.在开发计算机时,通常首先用一个程序模拟,一次运行一条指令,甚至多
处理器也严格按此模拟。在类似于这种没有同时事件发生的情形下,会出现竞争
条件吗?
25.给出一个可以屏蔽中断的操作系统如何实现信号量的框架