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

正文內(nèi)容

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

2025-08-08 06:16上一頁面

下一頁面
  

【正文】 lse goto fail。 //將引用數(shù)清0 UserContextrefCount = 0。 //釋放內(nèi)存空間 Free(userContextmemory)。 /* FIXME: range check */ if (topva maxva) maxva = topva。 userContextargBlockAddr = argBlockAddr。} ================= ===============添加頭文件 include geekos///創(chuàng)建一個(gè)用戶進(jìn)程/*static*/ void Setup_User_Thread(struct Kernel_Thread* kthread, struct User_Context* userContext){ //TODO(Create a new thread to execute in user mode)。 /* edx */ Push(kthread, userContextargBlockAddr)。 if (0 == str){ rc = ENOMEM。buf)) != 0) goto done。col, sizeof(int))) return 1。//得到進(jìn)程名稱和用戶命令后便可生成一個(gè)新進(jìn)程 if (rc == 0) {//若成功則返回新進(jìn)程ID號 KASSERT(process != 0)。}================= ==================static void Spawn_Init_Process(void){ //TODO(Spawn the init process)。之前學(xué)習(xí)到的都是課本上概念性的東西,當(dāng)要自己做一個(gè)東西的時(shí)候就覺得不知從何下手了,看老師給的PPT講解Geekos內(nèi)核、bochs安裝、make的工作原理、makefile的使用等,也還是不怎么清楚。最初的想法是在虛擬機(jī)掛載U盤,并上網(wǎng)下載了不少資料,但以失敗告終。 Disable_Interrupts()。mand)) != 0) {//從用戶空間復(fù)制用戶命令 goto fail。row, amp。 int rc = 0。} ================ =================//需在此文件別的函數(shù)前增加一個(gè)函數(shù),函數(shù)名為Copy_User_String,它被函數(shù)Sys_PrintString調(diào)用,具體實(shí)現(xiàn)如下:static int Copy_User_String(ulong_t uaddr, ulong_t len, ulong_t maxLen, char **pStr){ int rc = 0。 //中斷號(0) //初始化通用寄存單元,將ESI用戶傳遞參數(shù)塊地址 Push(kthread, 0)。 return true。exeFormatsegmentList[i]。 i exeFormatnumSegments。// Free(userContext)。 //新建一個(gè)數(shù)據(jù)段 Init_Data_Segment_Descriptor( amp。 }} ================== ====================copy project1 =================== ===================//需在此文件各函數(shù)前增加一個(gè)函數(shù),此函數(shù)的功能是按給定的大小創(chuàng)建一個(gè)用戶級進(jìn)程上下文,具體實(shí)現(xiàn)如下://函數(shù)功能:按給定的大小創(chuàng)建一個(gè)用戶級進(jìn)程上下文static struct User_Context* Create_User_Context(ulong_t size){ struct User_Context * UserContext。fail: //如果新進(jìn)程創(chuàng)建失敗則注銷User_Context對象 if (exeFileData != 0) Free(exeFileData)。 goto fail。 Switch_To_Address_Space()函數(shù)的功能是通過將進(jìn)程的LDT裝入到LDT寄存器來激活用戶的地址空間(5)src/GeekOS/。 segmentlengthInFile = phdrfileSize。 Init_Timer()。d39??蓤?zhí)行文件包含一些基本的要素——代碼、數(shù)據(jù)、重定位信息和符合信息。(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)行在所有流行的平臺上。(5) “src/GeekOS/”文件中的Start_User_Thread函數(shù)和Setup_User_Thread函數(shù)。3. Project2:擴(kuò)充GeekOS操作系統(tǒng)內(nèi)核,使得系統(tǒng)能夠支持用戶級進(jìn)程的動態(tài)創(chuàng)建和執(zhí)行。(7) :Spawn_Init_Process(void) 。利用make工具,可以將大型的開發(fā)項(xiàng)目分解成為多個(gè)更易于管理的模塊,對于一個(gè)包括幾百個(gè)源文件的應(yīng)用程序,使用make和makefile工具就可以簡潔明快地理順各個(gè)源文件之間紛繁復(fù)雜的相互關(guān)系。 項(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)。) ? 39。 struct Kernel_Thread *thread。 } exeFormatnumSegments = hdrphnum。 要求用戶實(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ù)。exeFormat, mand, amp。 /* last user context used */ //extern int userDebug。 //內(nèi)存為空 if (0 == UserContextmemory) goto fail。 return UserContext。 userContextmemory=0。 } Get_Argument_Block_Size(mand, amp。 userContextstackPointerAddr = argBlockAddr。 ulong_t eflags = EFLAGS_IF。 /* esi */ Push(kthread, 0)。 goto fail。/* Write to console. 將字符串打印到屏幕 */ Put_Buf(buf, length)。 return 0。 rc = processpid。 struct Kernel_Thread *pThread。只能先請教做的比較好的同學(xué),跟他們一起討論這些步驟該如何進(jìn)行。由于所安裝的linux系統(tǒng)是虛擬設(shè)備,就必須解決物理機(jī)與虛擬機(jī)的數(shù)據(jù)交換問題。 exitCode = Join(kthread)。 } if(rc = Copy_User_String(stateedx, stateesi, 1023, amp。 Get_Cursor(amp。}static int Sys_PrintString(struct Interrupt_State* state){ //TODO(PrintString system call)。 } return kthread。 //錯(cuò)誤代碼(0) Push(kthread, 0)。 //:kerneluser memcpy(UserContextmemory + destInUser, srcInKernel, bufSize)。 ++i) { struct Exe_Segment *segment = amp。 //計(jì)算用戶態(tài)進(jìn)程所需的最大內(nèi)存空間 for (i = 0。// Free(userContextmemory)。UserContextldt[0], (ulong_t) UserContextmemory, size / PAGE_SIZE, USER_PRIVILEGE )。//設(shè)置內(nèi)核堆棧指針/* New user context is active */ s_currentUserContext = userContext。 return rc。exeFileLength)) != 0 ) {//調(diào)用Read_Fully函數(shù)將名為program的可執(zhí)行文件全部讀入內(nèi)存緩沖區(qū) Print(Failed to Read File %s!\n, program)。 Copy_From_User()和Copy_To_User()函數(shù)的功能是在用戶地址空間和內(nèi)核地址空間之間復(fù)制數(shù)據(jù),在分段存儲器管理模式下,只要段有效,調(diào)用memcpy函數(shù)就可以實(shí)現(xiàn)這兩個(gè)函數(shù)的功能。 i++) { segmentoffsetInFile = phdroffset。 Init_Traps()。 asciiCode==39??蓤?zhí)行文件是通過源程序被編譯成目標(biāo)文件,多給目標(biāo)文件連接生成的,然后被加載到內(nèi)存運(yùn)行。安裝在VMware操作系統(tǒng)性能上比直接安裝在硬盤上的系統(tǒng)低不少,因此,比較適合學(xué)習(xí)和測試。(4) “src/GeekOS/”文件中主要是實(shí)現(xiàn)一些為實(shí)現(xiàn)對“src/GeekOS/”中高層操作支持的函數(shù)。 項(xiàng)目設(shè)計(jì)要求1. Project0(1) 搭建GeekOS的編譯和調(diào)試平臺,掌握GeekOS的內(nèi)核進(jìn)程工作原理。 開發(fā)環(huán)境的建立1. 開發(fā)環(huán)境的介紹(1) Geekos是一個(gè)基于X86架構(gòu)的PC機(jī)上運(yùn)行的微操作系統(tǒng)內(nèi)核,由美國馬理蘭大學(xué)的教師
點(diǎn)擊復(fù)制文檔內(nèi)容
法律信息相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1