【问题标题】:Creating Register Set Values in a PCB class在 PCB 类中创建寄存器设置值
【发布时间】:2012-09-17 18:52:29
【问题描述】:

我的 OS 类作业的一部分要求我用 Java 创建一个包含各种字段的 Process Control Block 类。我已经创建了包含所有不同字段的类,例如名称、状态、到达时间等。但是当被要求这样做时,我被卡住了:

  • 寄存器设置值(“RegisterSet”类的对象,包含以下字段:XAR、XDI、XDO、PC、IR、EMIT、RR、PSW、R0、R1、R2、R3、R4、R5、R6、 R7)。

似乎我必须创建另一个名为 RegisterSet 的类,其中包含所有这些不同的字段,但是我一直坚持我应该如何做到这一点,然后是如何在我的 PCB 类中创建设置值。 ..

任何帮助将不胜感激。

这就是我所拥有的。我有 RegisterSet 类,每个 Register 都有 setter 和 getter,然后在我的 PCB 类中,我有一个 setValues 函数,如下所示:

public void setValues(String XAR,
                        String XDO, String PC, String IR,
                        String EMIT, String RR, String PSW,
                        String R0, String R1, String R2,
                        String R3, String R4, String R5, String R6,
                        String R7){
    RegisterSet reg = new RegisterSet();
    reg.setXAR(XAR);
    reg.setXDO(XDO);
    reg.setPC(PC);
    reg.setIR(IR);
    reg.setEMIT(EMIT);
    reg.setRR(RR);
    reg.setPSW(PSW);
    reg.setR0(R0);
    reg.setR1(R1);
    reg.setR2(R2);
    reg.setR3(R3);
    reg.setR4(R4);
    reg.setR5(R5);
    reg.setR6(R6);
    reg.setR7(R7);
}

然后我有运行我在 RegisterSet 类中创建的 ToString() 的 getValues 方法:

public String getValues(){
    RegisterSet reg = new RegisterSet();
    return reg.ToString();
}

最后,这是我试图在我的 sim 中运行的内容:

//Remaining are Registers
String xar = st.nextToken();
String xdi = st.nextToken();
String xdo = st.nextToken();
String pc = st.nextToken();
String ir = st.nextToken();
String emit = st.nextToken();
String rr = st.nextToken();
String psw = st.nextToken();
String r0 = st.nextToken();
String r1 = st.nextToken();
String r2 = st.nextToken();
String r3 = st.nextToken();
String r4 = st.nextToken();
String r5 = st.nextToken();
String r6 = st.nextToken();
String r7 = st.nextToken();
PCB.setValues(xar, xdi, xdo, pc, ir, emit, rr, psw,
        r0, r1, r2, r3, r4, r5, r6, r7);

我尝试编译时遇到的错误是这样的:

 required:     String,String,String,String,String,String,String,String,String,String,String,String,String,String,String
 found: String,String,String,String,String,String,String,String,String,String,String,String,String,String,String,String
 reason: actual and formal argument lists differ in length

基本上,我是从许多进程中读取不同的细节,将数据填充到PCB中,然后将PCB添加到Process Table中,这实际上只是一个ArrayList。之后我遍历 ArrayList,并打印出每个进程。

【问题讨论】:

  • 发布您的一些代码/类,我们也许可以看到您的错误在哪里。

标签: java operating-system


【解决方案1】:

您是否尝试过类似的方法:

class PCB {
    ...
    RegisterSet registerSet = new RegisterSet();

    public RegisterSet getRegisterSet() { return this.registerSet; }
    public void setRegisterSet(RegisterSet rs) { this.registerSet = rs; }
    ...
}

这回答了您的直接问题,但不知何故我不确定您要问的是什么。

【讨论】:

  • 好吧,我有自己的 RegisterSet 类,每个 Register 都有 setter/getter。然后,在 PCB 类中,我有一个名为 setValues 的函数,用于设置每个寄存器的值。然后,在我的模拟中,我运行了 PCB.setValues(xar, xdi, xdo, etc.) 但它一直给我一个错误。
  • 错误是什么?更新您的帖子并添加 COMPLETE 堆栈跟踪。
  • 您似乎误解了一些基础知识。您的 getValues() 创建一个新的 empty RegisterSet 对象,执行其 toString() 方法并返回结果,这不是您想要的。至于错误,您忘记在setValues() 的定义中包含XDI。该错误告诉您您为方法调用提供了太多参数。
  • 嗯,你是对的。当我尝试运行它时,我得到每个寄存器的所有 Null 值。你看到我想要做什么了吗?我想调用 getValues() 方法并能够根据它打印它们。
  • 你需要阅读班级成员。在您的setValues() 中,您正在创建一个新的RegisterSet,但不会将其保存在任何地方,因此一旦setValues() 完成,RegisterSet 对象就会被丢弃。仔细查看我上面答案中的代码,了解在 PCB 类中定义、设置和检索 RegisterSet 成员的正确方法。
猜你喜欢
  • 2018-02-24
  • 1970-01-01
  • 2018-09-24
  • 1970-01-01
  • 2017-04-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多