Nachos小问题汇集

  • 我写好了实验要求的方法不知道怎么测试怎么办?

  • 用了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
              
          }
      };
    

    然后我运行了一下程序,它执行不下去了,于是我意识到应该不是这样的


    Nachos小问题汇集_第1张图片
  • 解决问题

        waitQueue=ThreadedKernel.scheduler.newThreadQueue(false);
    

像上面那样解决就初始化了。

  • 怎么想到的
    KThread里面本身就有一个readyQueue,也就是预备队列,它就是一个ThreadQueue的实例,模仿它就好了( • ̀ω•́ )
  • 更深的东西...
    没有了哈哈哈哈哈哈哈,找了一张大神的图自己感受
    Nachos小问题汇集_第2张图片

最后

附上我的博客( • ̀ω•́ )

你可能感兴趣的:(Nachos小问题汇集)