📄 progtest.cc
字号:
// progtest.cc // Test routines for demonstrating that Nachos can load// a user program and execute it. //// Also, routines for testing the Console hardware device.//// Copyright (c) 1992-1993 The Regents of the University of California.// All rights reserved. See copyright.h for copyright notice and limitation // of liability and disclaimer of warranty provisions.#include "copyright.h"#include "system.h"#include "console.h"#include "addrspace.h"#include "synch.h"//----------------------------------------------------------------------// StartProcess// Run a user program. Open the executable, load it into// memory, and jump to it.//----------------------------------------------------------------------voidStartProcess(char *filename){ OpenFile *executable = fileSystem->Open(filename); AddrSpace *space; if (executable == NULL) { printf("Unable to open file %s\n", filename); return; } space = new AddrSpace(executable); currentThread->space = space; delete executable; // close file space->InitRegisters(); // set the initial register values space->RestoreState(); // load page table register machine->Run(); // jump to the user progam ASSERT(FALSE); // machine->Run never returns; // the address space exits // by doing the syscall "exit"}// Data structures needed for the console test. Threads making// I/O requests wait on a Semaphore to delay until the I/O completes.static Console *console;static Semaphore *readAvail;static Semaphore *writeDone;//----------------------------------------------------------------------// ConsoleInterruptHandlers// Wake up the thread that requested the I/O.//----------------------------------------------------------------------static void ReadAvail(int arg) { readAvail->V(); }static void WriteDone(int arg) { writeDone->V(); }//----------------------------------------------------------------------// ConsoleTest// Test the console by echoing characters typed at the input onto// the output. Stop when the user types a 'q'.//----------------------------------------------------------------------void ConsoleTest (char *in, char *out){ char ch; console = new Console(in, out, ReadAvail, WriteDone, 0); readAvail = new Semaphore("read avail", 0); writeDone = new Semaphore("write done", 0); for (;;) { readAvail->P(); // wait for character to arrive ch = console->GetChar(); console->PutChar(ch); // echo it! writeDone->P() ; // wait for write to finish if (ch == 'q') return; // if q, quit }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -