讨论:Nachos 2013: Build a thread system
外观
为什么不能直接建类,每次都要constructObject.
不直接建类的原因是你不知道要建哪个类,这是由conf文件确定的
是不是每个Kthread带一个runnable,每个TCB带一个KThread,然后统一由threadedKernel里的shceduler来调配?
是
为什么要套这么多层,只有Kthread,或者直接TCB带一个Runnable不就可以了吗?
因为要模拟实际的机器和操作系统
关于yield
一个线程如果没有yield,会有别的线程打断它并执行吗? 如果有,怎么打断? 一个时刻应该是只有一个线程在执行吧,它自己不yield(),不停止,那么别的线程都没有执行,怎么interrupt? 如果没有,那既然没有别的线程能interrupt,那么interrupt的disable与enable有什么意义?
nachos 最不真实的地方就在于,没有时钟中断 所以 nachos 里的线程都是在调用某些同步原语(如 Lock acquire)的时候进行切换的 即便如此,中断的 disable 和 enable 对于锁的实现仍然是需要的,这个可以自己想原因
enable之后,即使不yield也会被打断的,这是为了模拟真实硬件
nachos.machine.interrupt里面说,线程只会在一个计数器达到某些定值时被中断,该计数器只会在两种情况下加1:执行1条mips后,或者中断的disable变enable时。也就是说中断只会发生在userprog的程序(?)中间任意处,或者自己写的某个interrupt.enable()之后。所以我估计nachos里interrupt的disable与enable没啥用,它也没办法判断你写没写。因为实际的操作系统必须有,所以要自觉地加上=_=
操作系统内部代码不会变成mips指令执行?
不会
可能会同时存在多个PriorityQueue吗,Scheduler和ThreadQueue全设计成单例模式可好?
一个priorityqueue是一个资源,多个priorityqueue对应多种资源,我是这么理解的。
可以有多个优先级队列,比如每个锁,等待它的所有程序被放到一个优先级队列中,决定谁是下一个拿到锁的。 系统中可能有多个锁,当然也就有多个优先级队列,Kai Sun的理解挺好的。
Slides上说task1,2要用ThreadQueue实现,指的是说一定要用nachos.threads.ThreadQueue,还是自己随便用个队列就可以了?
一定要用 nachos.threads.ThreadQueue
ThreadGrader2是不是有问题
我这儿会出现 前一轮 count = 49, total = 50 下一轮 count = 51; total = 50 的情况。 因而一直count != total 我觉得是因为,程序里没有同步的机制,没办法保证不会连续调用两次b的线程,然后再回到grader的主线程。因而可能会跳过一些count 是否应该吧条件改成while(count < total)
https://groups.google.com/d/topic/nachos-acm-sjtu/J0c4mzxdug8/discussion
应该怎么测试呢?
/preview1/doc/USAGE
是否要用assert判断出现两个join的情况?
这个行为的效果是undefined的吧,随便
再次确认一下多人的时候是否需要保证使listen和speak是First in first out的
讨论地址:https://groups.google.com/forum/#!searchin/nachos-acm-sjtu/Communicator/nachos-acm-sjtu/bSXc-G1tv5E/a11w9Ra5D1gJ
You will reach a point in your simulation where the adult and child threads BELIEVE that everyone is across on Molokai. At this point, you are allowed to do ONE-WAY COMMUNICATION from the threads to begin() in order to inform it that the simulation MAY BE
整个模拟过程的结束,是通过子线程给主线程发送通知来完成,而不是通过主线程给子线程发送通知来完成。 in https://groups.google.com/forum/#!searchin/nachos-acm-sjtu/boat/nachos-acm-sjtu/S1aGKwVC1Vk/Lmi-eMqPS2wJ