Я работаю над заданием, в котором я должен реализовать базовый модуль ЦП и памяти, используя Process в качестве "fork" и InputStream / OutputStream в качестве "pipe".У меня возникают проблемы при правильной работе основного обмена данными.
Мой код для процессора:
public static void main(String[] args) {
try {
Runtime rt = Runtime.getRuntime();
Process proc = rt.exec("java Memory.java " + "testInput.txt");
InputStream is = proc.getInputStream();
OutputStream os = proc.getOutputStream();
Scanner fromMem = new Scanner(is);
PrintWriter toMem = new PrintWriter(os);
//Now the main loop
IR = 0;
PC = 0;
while(IR != 50){ //END command
System.out.println("PC: " + PC);
//Get the next instruction
toMem.println("READU");
toMem.println(PC);
toMem.flush();
String temp = fromMem.nextLine();
System.out.println(temp);
PC++;
}
}catch (Throwable t){
t.printStackTrace();
}
}
А мой код для Memory.java:
static int[] mem = new int[2000];
public static void main(String[] args) {
initMemory(args[0]); //Fills the mem array with values from input file
Scanner fromCPU = new Scanner(System.in);
String input = "";
while(input != "END"){
int toSend;
input = fromCPU.nextLine();
switch (input){
case "READU": toSend = read(Integer.parseInt(fromCPU.nextLine()),true); //returns value at given address in memory
System.out.println(toSend); //Send the value returned from memory
break;
default: break;
}
}
}
static int read(int address,Boolean userMode){
if(userMode && address > 999){
System.out.println("Memory Violation. Accessing system address " + address + " in user mode.");
return -999999999;
}
return mem[address];
}
Мой входной файл имеет следующий текст:
1
2
3
Если я просто запускаю Memory.java, он прекрасно работает с чтением «READU», затем адреса, затем он печатаетзначение по этому адресу в массиве памяти.Однако, когда я запускаю CPU, я получаю java.util.NoSuchElementException: No line found
из строки String temp = fromMem.nextLine();
в CPU.
Надеюсь, мой вопрос понятен.Я удалил любой код, который не влияет на эту проблему, которая у меня есть.Пожалуйста, дайте мне знать, если вам нужен какой-либо другой код.
Спасибо.