我写好了实验要求的方法不知道怎么测试怎么办?
用了new ThreadQueue(),没法初始化怎么办?
Q1.我写好了实验要求的方法不知道怎么测试怎么办?
-
简单的说就是....
在KThread中找到selfTest,然后在里面写自己的方法就可以了,如下就是写对实验一join()方法的测试
public static void selfTest() { Lib.debug(dbgThread, "Enter KThread.selfTest"); KThread th = new KThread(new PingTest(1)).setName("forked thread"); th.fork(); th.join(); new PingTest(0).run(); }
-
如果你一定想要知道为什么呢....(这不是为难我吗ヽ(ー_ー )ノ)总的来说呢,就是....
我们来看Nacho整个系统,它的执行是从Machine.java 的 main 方法开始主要进行的是处理启动参数、载 入配置文件、设置工作目录、安装安全管理器、创建设备、并启动第一块 TCB 等操作
new TCB().start(new Runnable() { public void run() { autoGrader.start(privilege); } });
在 TCB 启动时会调用 AutoGrader 的 start 方法,其中启动了内核。
在 AutoGrader 的 start 方法执行时,AutoGrader 首先会解析启动命令传入的参数,接着 执行初始化操作,然后从配置文件中读取 Kernel.kernel 的值,构造内核,并且执行内核 的初始化方法。紧接着,执行 run 方法,内含 kernel
的自检、run 方法以及最后的终止。重点来了,看下面,有一个selfTest,尝试把它注释掉以后KThread中的selfTest里面的东西也就不执行了,所以这两个应该是对应的关系。(其实里面的Kernel比较复杂,大家可以再研究一下)
void run() { kernel.selfTest(); kernel.run(); kernel.terminate(); }
Q2.用了new ThreadQueue(),没法初始化怎么办?
-
遇到问题
不知道别人是什么情况,按照我简单的直觉,哟,这不是一个简单的java 类吗,new一个就好啦。兴冲冲地new了一个..恩..它就给我看这个!waitQueue=new ThreadQueue() { @Override public void waitForAccess(KThread thread) { // TODO Auto-generated method stub } @Override public void print() { // TODO Auto-generated method stub } @Override public KThread nextThread() { // TODO Auto-generated method stub return null; } @Override public void acquire(KThread thread) { // TODO Auto-generated method stub } };
然后我运行了一下程序,它执行不下去了,于是我意识到应该不是这样的
-
解决问题
waitQueue=ThreadedKernel.scheduler.newThreadQueue(false);
像上面那样解决就初始化了。
-
怎么想到的
KThread里面本身就有一个readyQueue,也就是预备队列,它就是一个ThreadQueue的实例,模仿它就好了( • ̀ω•́ ) -
更深的东西...
没有了哈哈哈哈哈哈哈,找了一张大神的图自己感受
最后
附上我的博客( • ̀ω•́ )