freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

geekos操作系統(tǒng)的研究與實(shí)現(xiàn)操作系統(tǒng)課程設(shè)計(jì)(存儲(chǔ)版)

2025-07-24 06:16上一頁面

下一頁面
  

【正文】 。/* Write to console. 將字符串打印到屏幕 */ Put_Buf(buf, length)。}static int Sys_Exit(struct Interrupt_State* state){ //TODO(Exit system call)。 goto fail。 //為用戶態(tài)進(jìn)程 if (kthread != 0){ Setup_User_Thread(kthread, userContext)。 /* esi */ Push(kthread, 0)。 //文本選擇子 Push(kthread, userContextentryAddr)。 ulong_t eflags = EFLAGS_IF。}//將內(nèi)核態(tài)的進(jìn)程復(fù)制到用戶態(tài)bool Copy_To_User(ulong_t destInUser, void* srcInKernel, ulong_t bufSize){ //TODO(Copy memory from kernel buffer to user buffer) struct User_Context * UserContext = g_currentThreaduserContext。 userContextstackPointerAddr = argBlockAddr。 for (i = 0。 } Get_Argument_Block_Size(mand, amp。//參數(shù)塊的大小 ulong_t size, argBlockAddr。 userContextmemory=0。/* Free the context39。 return UserContext。 //新建一個(gè)LDT選擇子 UserContextldtSelector = Selector(KERNEL_PRIVILEGE, true, Get_Descriptor_Index(UserContextldtDescriptor))。 //內(nèi)存為空 if (0 == UserContextmemory) goto fail。 //if (userDebug) // Print(S[%lx]\n, esp0)。 /* last user context used */ //extern int userDebug。 rc = processpid。exeFormat, mand, amp。//調(diào)用Parse_ELF_Executable函數(shù)得到的可執(zhí)行文件信息 if ((rc = Read_Fully(program, (void**) amp。 要求用戶實(shí)現(xiàn)的有Sys_Exit()函數(shù)、Sys_PrintString()函數(shù)、Sys_GetKey()、Sys_SetAttr()、Sys_GetCursor()、Sys_PutCursor()、Sys_Spawn()函數(shù)、Sys_Wait()函數(shù)和Sys_GetPID( )函數(shù)。 Destroy_User_Context()函數(shù)的功能是釋放用戶態(tài)進(jìn)程占用的內(nèi)存資源。 } exeFormatnumSegments = hdrphnum。 for( i=0。 struct Kernel_Thread *thread。 Init_Interrupts()。) ? 39。 KEY_CTRL_FLAG)==KEY_CTRL_FLAG amp。 項(xiàng)目設(shè)計(jì)的實(shí)現(xiàn)1. Project0項(xiàng)目的具體實(shí)現(xiàn)(1)include geekos/include geekos/include geekos/include geekos/include geekos/include geekos/include geekos/include geekos/include geekos/include geekos/include geekos/void project0(){ Print(To Exit hit Ctrl + d.\n)。其中, Wait_For_Key(void),循環(huán)等待一個(gè)鍵盤事件,然后返回一個(gè)16位的數(shù)據(jù) Keycode型的, 。利用make工具,可以將大型的開發(fā)項(xiàng)目分解成為多個(gè)更易于管理的模塊,對于一個(gè)包括幾百個(gè)源文件的應(yīng)用程序,使用make和makefile工具就可以簡潔明快地理順各個(gè)源文件之間紛繁復(fù)雜的相互關(guān)系。VMWare是真正“同時(shí)”運(yùn)行,多個(gè)操作系統(tǒng)在主系統(tǒng)的平臺上,就象標(biāo)準(zhǔn)Windows應(yīng)用程序那樣切換。(7) :Spawn_Init_Process(void) 。3. Project2:要求用戶對以下幾個(gè)文件進(jìn)行修改:(1) “src/GeekOS/”文件中的函數(shù)Spawn(),其功能是生成一個(gè)新的用戶級進(jìn)程;(2) “src/GeekOS/”文件中的函數(shù)Switch_To_User_Context(),調(diào)度程序在執(zhí)行一個(gè)新的進(jìn)程前調(diào)用該函數(shù)以切換用戶地址空間;(3) “src/GeekOS/”文件中的函數(shù)Parse_ELF_Executable()。3. Project2:擴(kuò)充GeekOS操作系統(tǒng)內(nèi)核,使得系統(tǒng)能夠支持用戶級進(jìn)程的動(dòng)態(tài)創(chuàng)建和執(zhí)行。該進(jìn)程的功能是:接收鍵盤輸入的字符并顯示到屏幕上,當(dāng)輸入ctrl+d時(shí),結(jié)束進(jìn)程的運(yùn)行。(5) “src/GeekOS/”文件中的Start_User_Thread函數(shù)和Setup_User_Thread函數(shù)。出于教學(xué)目的,這個(gè)系統(tǒng)內(nèi)核設(shè)計(jì)簡單,卻又兼?zhèn)鋵?shí)用性,它可以運(yùn)行在真正的X86 PC硬件平臺。(3)Bochs PC 模擬器 GeekOS運(yùn)行于Windows(或Linux)下的Bochs PC模擬器,Bochs 是用 C++ 開發(fā)的可移植的 IA32 (x86) PC 模擬器,Bochs仿真器其實(shí)質(zhì)就是一臺虛擬PC機(jī),它包括對 Intel x86 CPU 、通用 I/O 設(shè)備和可定制的 BIOS 的模擬,幾乎可以運(yùn)行在所有流行的平臺上。$ make$ make install(7):vgaromimage: file=$BXSHARE/VGABIOSlgpllatestromimage: file=$BXSHARE/BIOSbochslatest, address=0xf0000megs: aboot: cfloppya: 1_44=, status=insertedfloppya: 1_44=, status=insertedlog: ./keyboard_serial_delay: 200floppy_mand_delay: 500vga_update_interval: 300000ips: 1000000mouse: enabled=0private_colormap: enabled=0i440fxsupport: enabled=0(8)啟動(dòng)Boch環(huán)境,在提示的出現(xiàn)GeekOS的歡迎界面。可執(zhí)行文件包含一些基本的要素——代碼、數(shù)據(jù)、重定位信息和符合信息。keycode) ) //讀取鍵盤按鍵狀態(tài) { if(!( (keycode amp。d39。 } } } }}void Main(struct Boot_Info* bootInfo){ Init_BSS()。 Init_Timer()。 Exit(0)。 segmentlengthInFile = phdrfileSize。}(2)編譯文件終端打開目錄: $ cd project1/build 在其目錄下:$ make $ make depend 編譯,生成文件 (3)建立配置文件bochsrc終端打開目錄: $ cd project1/build建立配置文件: $ gedit .bochs修改其內(nèi)容如下:config_interface: textconfigromimage: file=$BXSHARE/BIOSbochslatestmegs: 8vgaromimage: file=$BXSHARE/VGABIOSlgpllatest floppya: 1_44=./, status=insertedata0: enabled=1, ioaddr1=0x1f0, ioaddr2=0x3f0, irq=14ata1: enabled=0, ioaddr1=0x170, ioaddr2=0x370, irq=15ata2: enabled=0, ioaddr1=0x1e8, ioaddr2=0x3e0, irq=11ata3: enabled=0, ioaddr1=0x168, ioaddr2=0x360, irq=9ata0master: type=disk, path=, mode=flat, cylinders=40, heads=8, spt=64ata0slave: type=cdrom, path=/dev/cdrom, status=insertedboot: aips: 1000000log:./vga_update_interval: 300000keyboard_serial_delay: 250keyboard_paste_delay: 100000private_colormap: enabled=0 (4)運(yùn)行在build目錄下輸入:$ bochs –f bochsrc3. Project2項(xiàng)目的具體實(shí)現(xiàn)1. 添加代碼(1)修改src/GeekOS/(),其功能是生成一個(gè)用戶級進(jìn)程。 Switch_To_Address_Space()函數(shù)的功能是通過將進(jìn)程的LDT裝入到LDT寄存器來激活用戶的地址空間(5)src/GeekOS/。 //標(biāo)記各函數(shù)的返回值,為0則表示成功,否則失敗 char *exeFileData = 0。 goto fail。 }//在堆分配方式下釋放內(nèi)存并再次初始化exeFileData Free(exeFileData)。fail: //如果新進(jìn)程創(chuàng)建失敗則注銷User_Context對象 if (exeFileData != 0) Free(exeFileData)。 if (userContext == 0) { //userContext為0表示此進(jìn)程為核心態(tài)進(jìn)程就不用切換地址空間 return。 }} ================== ====================copy project1 ===================
點(diǎn)擊復(fù)制文檔內(nèi)容
法律信息相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1