agenda•Nachos用户程序生成过程•Nachos用户程序可执行文件格式•Nachos使用MIPS模拟器执行用户程序过程•装载用户程序到MIPS模拟器•使用MIPS模拟器执行用户程序用户线程用户线程如何让Nachos支持用户程序?userprog/Makefile:DEFINES=-DUSER_PROGRAM-DFILESYS_NEEDED-DFILESYS_STUB#ifdefUSER_PROGRAM…#endif用户线程如何执行test中的用户程序?userprog/:./nachos–x../test/haltthreads/main.cc:StartProcess1.创建useraddressspace并初始化2.用machine-Run来运行useraddressspace中的指令用户线程1.如何创建useraddressspace?AddrSpace::AddrSpace()1.在machine里为userprogram分配物理内存并初始化2.建立页表3.把noff可执行文件load到内存中StartProcess:1.创建useraddressspace并初始化2.用machine-Run来运行useraddressspace中的指令ELFheaderSegmentheadertable(requiredforexecutables).textsection.rodatasection.bsssection.symtabsection.rel.txtsection.rel.datasection.debugsectionSectionheadertable.datasectionnoffheader.textsection.bsssection.datasection生成NOFF:1.用gccMIPS交叉编译器产生UNIX的一般COFF格式的二进制文件2.用/bin/下的coff2noff把COFF格式转换成NOFF格式用户线程用户线程2.如何运行useraddressspace中的指令?machine::Run()OneInstruction:取指,译码,执行StartProcess:1.创建useraddressspace并初始化2.用machine-Run来运行useraddressspace中的指令只能运行一个用户程序用户线程执行多个用户程序•Machine-Run()多次•用户内存管理•……UserstackuninitData_seginitData_segCode_seg0MemSizesphalt.c•filehalt.c:Csource,ASCIItexthalt.o•gnu-decstation-ultrix/decstation-ultrix/2.95.3/gcc•filehalt.o:MIPSELECOFFexecutable(impure)notstripped-version2.11halt•coff2noff•filehalt:data用户程序生成过程用户可执行程序示例更改后的halt.c#includesyscall.hinti=1;intj;intmain(){inta=1;intb;Halt();}最终的Halt可执行文件内容0x456789abvirtualAddr0x0inFileAddr0x28size2720x1100x138160x1200x80490a032Code内容Initdata内容Uninitdata内容0高NOFFheader用户可执行程序示例更改后的halt.c#includesyscall.hinti=1;intj;intmain(){inta=1;intb;Halt();}最终的Halt可执行文件内容0x456789abvirtualAddr0x0inFileAddr0x28size2720x1100x138160x1200x80490a032Code内容Initdata内容Uninitdata内容0高NOFFheader0x0:JAL520x4:SLLr0,r0,00x8:JAL80xc:ADDUr4,r0,r00x10:ADDIUr2,r0,00x14:SYSCALL0x18:JRr0,r310x1c:SLLr0,r0,00x20:ADDIUr2,r0,10x24:SYSCALL0x28:JRr0,r310x2c:SLLr0,r0,00x30:ADDIUr2,r0,20x34:SYSCALL0x38:JRr0,r310x3c:SLLr0,r0,00x40:ADDIUr2,r0,30x44:SYSCALL0x48:JRr0,r310x4c:SLLr0,r0,00x50:ADDIUr2,r0,40x54:SYSCALL0x58:JRr0,r31…….Thread类中关于用户程序的属性#ifdefUSER_PROGRAMintuserRegisters[NumTotalRegs];AddrSpace*space;#endif…………0x8:JAL80x4:SLLr0,r0,00x14:SYSCALL0x10:ADDIUr2,r0,00x0:JAL52InitdatauninitdataUserStack0x00x…虚拟地址空间0x00x…物理地址空间MIPS虚拟机物理内存用户页表VPPPVALIDUSEDIRTYRO11TFFF22TFFF………………StackRegPCRegspace-pageTable装载用户程序Thread类中关于用户程序的属性#ifdefUSER_PROGRAMintuserRegisters[NumTotalRegs];AddrSpace*space;#endif…………0x8:JAL80x4:SLLr0,r0,00x14:SYSCALL0x10:ADDIUr2,r0,00x0:JAL52InitdatauninitdataUserStack0x00x…虚拟地址空间0x00x…物理地址空间MIPS虚拟机物理内存用户页表VPPPVALIDUSEDIRTYRO11TFFF22TFFF………………执行用户程序Machine类中关于用户程序的属性intregisters[NumTotalRegs];TranslationEntry*tlb;TranslationEntry*pageTable;TLBVPPPVALIDUSEDIRTYRO