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

正文內(nèi)容

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

2025-06-10 00:34本頁(yè)面
  

【正文】 參考文獻(xiàn) [1] 黃廷輝 ,王宇英 .計(jì)算機(jī)操作系統(tǒng)實(shí)踐教程 .北京:清華大學(xué)出版社, 2021. [2] 孫鐘秀,費(fèi)翔林,駱斌 .操作系統(tǒng)教程 .北 京:高等教育出版社, 2021. 。同時(shí),也使我認(rèn)識(shí)到自己動(dòng)手能力太差,為我以后的學(xué)習(xí)和發(fā)展提供了一個(gè)警鐘!本次課程設(shè)計(jì)的過程中,雖然遇到了不少問題,但最后還是成功的完成了。本次課程設(shè)計(jì)使我明白了知識(shí)的重要性,同時(shí)也更加懂得 實(shí)踐更不可少。首先,我進(jìn)一步弄懂了 C語(yǔ)言的編程方法和原則。 5 學(xué)習(xí)總結(jié) 經(jīng)過兩個(gè)星期的學(xué)習(xí)和實(shí)踐,我也算是順利的完成了操作系統(tǒng)課程設(shè)計(jì),同時(shí)對(duì)計(jì)算機(jī)網(wǎng)絡(luò)有一個(gè)大致的了解,在實(shí)踐過程中遇到了很多的困難,感覺自 己很難將理論與實(shí)踐相結(jié)合,覺得我們學(xué)習(xí)的那些知識(shí)也派不上用場(chǎng),通過這次課設(shè),我深刻的認(rèn)識(shí)到實(shí)踐與理論必須 要想結(jié)合才能使所學(xué)的知識(shí)變成可用的,通過自己的努力和老師同學(xué)們的幫助, 多了一種看待問題的角度;我也發(fā)現(xiàn)了我所學(xué)知識(shí) 不扎實(shí) , 只是走馬觀花的應(yīng)付考試,在以后的學(xué)習(xí)中需要時(shí)刻的告誡自己,踏踏實(shí)實(shí)做好每一步。項(xiàng)目 2和項(xiàng)目 1都是要運(yùn)行用戶程序,基本原理一樣的。 項(xiàng)目 2要做的工作就很多了,也花費(fèi)了比較多的時(shí)間。 項(xiàng)目 1雖然只要實(shí)現(xiàn)一個(gè)函數(shù),但主要理解 ELF文件的裝入與執(zhí)行。 項(xiàng)目 0相對(duì)比較簡(jiǎn)單,并且已經(jīng)有人已經(jīng)做過了,做起來相對(duì)容易。在編譯好項(xiàng)目后要在 bochs下運(yùn)行,由于對(duì) bochs的應(yīng)用方法并不清楚,所以出現(xiàn)了不能正常啟動(dòng)的情況,經(jīng)過后來查找資料,發(fā)現(xiàn)這個(gè)問題主要和 bochs 的配置文件有關(guān),還與安裝不同的 LINUX系統(tǒng)有關(guān)。 . 編寫相應(yīng)的 bochs 配置文件,配置文件需加上以下內(nèi)容 vgaromimage: file=$BXSHARE/VGABIOSlgpllatest romimage: file=$BXSHARE/BIOSbochslatest, address=0xf0000 megs: 8 boot: a floppya: 1_44=, status=inserted log: ./ keyboard_serial_delay: 200 floppy_mand_delay: 500 vga_update_interval: 300000 ips: 1000000 mouse: enabled=0 private_colormap: enabled=0 i440fxsupport: enabled=0 ata0:enabled=1, ioaddr1=0x1f0, ioaddr2=0x3f0, irq=14 ata0master:type=disk,mode=flat,path=,cylinders=40,heads=8,spt=64 進(jìn)入 /os/ pp/project1/build 目錄 執(zhí)行 make depend 執(zhí)行 make 成功之后在 build 目錄下生成 、 文件。pThread)。 struct Kernel_Thread *pThread。 return g_currentThreadpid。 return exitCode。 exitCode = Join(kthread)。 if (kthread == 0) return 12。 int exitCode。 return rc。//關(guān)中斷 0 的錯(cuò)誤代碼 if (program != 0) Free(program)。 rc = processpid。process)。 } Enable_Interrupts()。 } if(rc = Copy_User_String(stateedx, stateesi, 1023, amp。 /* Copy program name and mand from user space. */ if ((rc = Copy_User_String(stateebx, stateecx, VFS_MAX_PATH_LEN, amp。 //進(jìn)程名稱 char *mand = 0。 int rc。 return Put_Cursor(stateebx, stateecx) ? 0 : 1。 return 0。row, sizeof(int)) ||!Copy_To_User(stateecx, amp。col)。 Get_Cursor(amp。 } static int Sys_GetCursor(struct Interrupt_State* state) { //TODO(GetCursor system call)。 Set_Current_Attr((uchar_t) stateebx)。 return Wait_For_Key()。 return rc。 /* Write to console. 將字符串打印到屏幕 */ Put_Buf(buf, length)。 if (length 0) { /* Copy string into kernel. 將字符串復(fù)制到內(nèi)核 */ if ((rc = Copy_User_String(stateebx, length, 1023, (char**) amp。//返回值 uint_t length = stateecx。 } static int Sys_PrintString(struct Interrupt_State* state) { //TODO(PrintString system call)。 } static int Sys_Exit(struct Interrupt_State* state) { //TODO(Exit system call)。 //成功 *pStr = str。 } str[len] = 39。 Free(str)。 goto fail。 } str = (char*) Malloc(len+1)。 char *str。 } return kthread。 //為用戶態(tài)進(jìn)程 if (kthread != 0){ Setup_User_Thread(kthread, userContext)。 /* gs */ } //開始用戶進(jìn)程 struct Kernel_Thread* Start_User_Thread(struct User_Context* userContext, bool detached) { //TODO(Start user thread)。 /* es */ Push(kthread, dsSelector)。 /* ebp */ //初始化數(shù)據(jù)段寄存單元 Push(kthread, dsSelector)。 /* esi */ Push(kthread, 0)。 /* edx */ Push(kthread, 0)。 /* eax */ Push(kthread, 0)。 //錯(cuò)誤代碼 (0) Push(kthread, 0)。 //文本選擇子 Push(kthread, userContextentryAddr)。 //堆棧指針 Push(kthread, eflags)。 //初始化用戶態(tài)進(jìn)程堆棧,使之看上去像剛被中斷運(yùn)行一樣 //分別調(diào)用 Push 函數(shù)將以下數(shù)據(jù)壓入堆棧 Push(kthread, dsSelector)。//CS 選擇子 unsigned dsSelector=userContextdsSelector。 ulong_t eflags = EFLAGS_IF。/* Switch to the LDT of the new user context */ __asm__ __volatile__ (lldt %0::a(ldtSelector))。 } //切換到用戶地址空間 void Switch_To_Address_Space(struct User_Context *userContext) { //TODO(Switch to user address space using segmentation/LDT)。 //:kerneluser memcpy(UserContextmemory + destInUser, srcInKernel, bufSize)。 } //將內(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。 //:userkernel memcpy(destInKernel, UserContextmemory + srcInUser, bufSize)。 struct User_Context * UserContext = g_currentThreaduserContext。 return 0。 userContextstackPointerAddr = argBlockAddr。 //初始化數(shù)據(jù)段,堆棧段及代碼段信息 userContextentryAddr = exeFormatentryAddr。 //根據(jù)段信息將用戶程序中的各段內(nèi)容復(fù)制到分配的用戶內(nèi)存空間 memcpy(userContextmemory + segmentstartAddress, exeFileData + segmentoffsetInFile,segmentlengthInFile)。 ++i) { struct Exe_Segment *segment = amp。 for (i = 0。 userContext = Create_User_Context(size)。//用戶進(jìn)程大小 =參數(shù)塊總大小 + 進(jìn)程堆棧大小 (8192) argBlockAddr = size。argBlockSize)。 } Get_Argument_Block_Size(mand, amp。 ulong_t topva = segmentstartAddress + segmentsizeInMemory。 ++i) { // struct Exe_Segment *segment = amp。
點(diǎn)擊復(fù)制文檔內(nèi)容
畢業(yè)設(shè)計(jì)相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1