基于nachos線程工作機(jī)制與系統(tǒng)調(diào)用及多道程序分析_第1頁
基于nachos線程工作機(jī)制與系統(tǒng)調(diào)用及多道程序分析_第2頁
基于nachos線程工作機(jī)制與系統(tǒng)調(diào)用及多道程序分析_第3頁
基于nachos線程工作機(jī)制與系統(tǒng)調(diào)用及多道程序分析_第4頁
基于nachos線程工作機(jī)制與系統(tǒng)調(diào)用及多道程序分析_第5頁
已閱讀5頁,還剩9頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

操作系統(tǒng)課程設(shè)計(jì)專業(yè)名稱:_軟件工程______________________操作系統(tǒng)課程設(shè)計(jì)——基于nachos的課程設(shè)計(jì)主要完成工作:閱讀代碼,完成基于線程優(yōu)先級(jí)調(diào)度,多道程序設(shè)計(jì),完成小組課程設(shè)計(jì)報(bào)告基于線程優(yōu)先級(jí)調(diào)度部分一、問題分析及工作原理線程運(yùn)行機(jī)制圖:Thread::Yield()Thread::Thread()Thread::Yield()Thread::Thread()Thread::Fork()Thread*Scheduler::Thread::Fork()Thread*Scheduler::FindNextToRun()callScheduler::ReadyToRunvoidThread::Sleep(boolfinishing)voidThread::Sleep(boolfinishing)ReadyReadyScheduler::RunRunning(Thread*nextThread,Yield()Runningboolfinishing)voidThread::SleepScheduler::(boolfinishing)ReadyToRun(Thread*thread)BlockedBlocked進(jìn)程的基本狀態(tài):就緒,運(yùn)行,阻塞進(jìn)程程的基本操作:創(chuàng)建,阻塞,喚醒Fork方法調(diào)用StackAllocate,分配一塊固定大小的內(nèi)存作為線程的堆棧,設(shè)置棧首指針,線程準(zhǔn)備好運(yùn)行后進(jìn)行線程切換,會(huì)切換到ThreadRoot函數(shù)。ThreadRoot函數(shù)將會(huì)開中斷,并調(diào)用func(arg)成為一個(gè)獨(dú)立的調(diào)度單位。然后設(shè)置PC指針,從ThreadRoot開始運(yùn)行,初始化宿主機(jī)寄存器,為ThreadRoot作好準(zhǔn)備,ThreadRoot將分別調(diào)用InterruptEnable, func(arg)和ThreadFinish。Yield方法用于本線程放棄處理機(jī)。Sleep方法可以使當(dāng)前線程轉(zhuǎn)入阻塞態(tài),并放棄CPU,直到被另一個(gè)線程喚醒,把它放回就緒線程隊(duì)列。如果沒有就緒線程時(shí),就把時(shí)鐘前進(jìn)到一個(gè)中斷發(fā)生的時(shí)刻,讓中斷發(fā)生并處理此中斷,這是因?yàn)樵跊]有線程占用CPU時(shí),只有中斷處理程序可能喚醒一個(gè)線程,并把它放入就緒線程隊(duì)列。Scheduler類用于實(shí)現(xiàn)線程的調(diào)度。它維護(hù)一個(gè)就緒線程隊(duì)列,當(dāng)一個(gè)線程可以占用處理機(jī)時(shí),就可以調(diào)用ReadyToRun方法把這個(gè)線程放入就緒線程隊(duì)列,并把線程狀態(tài)改成就緒態(tài)。FindNextToRun方法根據(jù)調(diào)度策略,取出下一個(gè)應(yīng)運(yùn)行的線程,并把這個(gè)線程從就緒線程隊(duì)列中刪除。如果就緒線程隊(duì)列為空,則此函數(shù)返回空(NULL)?,F(xiàn)有的調(diào)度策略是先進(jìn)先出策略(FIFO)二、算法思想設(shè)計(jì):為線程(Thread)添加priority屬性,用來描述每個(gè)線程的優(yōu)先級(jí),并在線程創(chuàng)建時(shí)設(shè)置或創(chuàng)建后修改線程的優(yōu)先級(jí),加入就緒隊(duì)列(readyList)時(shí),先比較當(dāng)前線程和就緒隊(duì)列里的線程的優(yōu)先級(jí),優(yōu)先級(jí)高的插入在前面,如果優(yōu)先級(jí)相同,則兩個(gè)線程按先后順序排列,相當(dāng)與先來先服務(wù)(FCFS),這樣,當(dāng)CPU空閑時(shí)需要從就緒隊(duì)列取出一個(gè)線程時(shí),取出的總是優(yōu)先級(jí)最高的線程。三、詳細(xì)設(shè)計(jì)及關(guān)鍵代碼分析:首先,為線程(Thread)添加priority屬性,用來描述每個(gè)線程的優(yōu)先級(jí),并添加intsetpriority()設(shè)置進(jìn)程優(yōu)先級(jí)和getpriority()獲得線程優(yōu)先級(jí)的函數(shù),并增加新的構(gòu)造函數(shù)Thread(char*threadName,intprio)//Thread.h//添加了priority屬性以及getPriority()和setpriority()//添加了新的構(gòu)造函數(shù)Thread(char*threadName,intprio)//thread.cc//在原來的構(gòu)造函數(shù)Thread(char*threadName)中設(shè)置默認(rèn)優(yōu)先級(jí)為最高(0)//新的構(gòu)造方法Thread(char*threadName,intprio)然后修改readyList為SortedList類型(原來為List類型),方便插入就緒線程,對(duì)線程進(jìn)行排序。//Scheduler.h當(dāng)一個(gè)線程需要加入到就緒隊(duì)列時(shí)不是采用原來的(thread)將線程加入到最后,而是利用Insert(thread)將線程按優(yōu)先級(jí)插入到就緒隊(duì)列//Scheduler.cc修改SelfTest()創(chuàng)建幾個(gè)不同優(yōu)先級(jí)的進(jìn)程進(jìn)行測試//Thread.cc以上創(chuàng)建了四個(gè)不同優(yōu)先級(jí)的線程,按優(yōu)先級(jí)高的線程優(yōu)先執(zhí)行,如果優(yōu)先級(jí)相同,則按照等待時(shí)間長的優(yōu)先運(yùn)行,線程優(yōu)先級(jí)為t3>t1>t2=t4而由于線程2先于線程4加入等待隊(duì)列則線程2先執(zhí)行,故執(zhí)行順序應(yīng)該為:t3->t1->t2->t4四、測試及結(jié)果分析:./nachos-K實(shí)際運(yùn)行結(jié)果如下:由以上運(yùn)行結(jié)果可知進(jìn)程是按優(yōu)先級(jí)高低順序來執(zhí)行的五、多道程序部分主要完成以下設(shè)計(jì):1.exec系統(tǒng)調(diào)用exec用于執(zhí)行一個(gè)可執(zhí)行文件首先從4號(hào)寄存器讀取系統(tǒng)調(diào)用的參數(shù)(即傳遞的可執(zhí)行文件名指針,也就是在內(nèi)存的地址),然后從內(nèi)存讀取文件名,打開文件,使用該可執(zhí)行文件初始化一個(gè)新的進(jìn)程空間,將當(dāng)前的進(jìn)程的地址空間覆蓋,初始化所有的寄存器值,恢復(fù)到進(jìn)程空間,開始執(zhí)行。2.Open系統(tǒng)調(diào)用Open系統(tǒng)調(diào)用用于打開一個(gè)文件,返回文件描述符??梢哉{(diào)用nachos系統(tǒng)封裝的打開文件的方法,這個(gè)方法是調(diào)用了底層的操作系統(tǒng)的方法,然后打開的是宿主系統(tǒng)的文件。然后將打開的文件描述符寫到2號(hào)寄存器,執(zhí)行下一條指令。3.Read系統(tǒng)調(diào)用read系統(tǒng)調(diào)用傳遞打開的文件描述符,讀的大小,緩沖區(qū)地址用于存放讀的內(nèi)容,返回讀得字節(jié)數(shù)。首先從寄存器取得參數(shù),然后調(diào)用nachos封裝宿主機(jī)的方法讀取內(nèi)容以及讀到的字節(jié)數(shù),然后將內(nèi)容寫到nachos模擬的物理內(nèi)存,地址是剛剛接受的參數(shù),最后將讀到的字節(jié)數(shù)寫道2號(hào)寄存器,執(zhí)行下一條指令。4.Write系統(tǒng)調(diào)用先讀取內(nèi)容的地址(在內(nèi)存中),讀取寫入的大小以及要寫入的文件描述符,然后寫到文件中(調(diào)用nachos封裝的方法)。六、問題分析在實(shí)現(xiàn)多道程序時(shí)出現(xiàn)了比較多的問題,導(dǎo)致最后沒能完成,首先,我們對(duì)多道程序運(yùn)行機(jī)制進(jìn)行了詳細(xì)的了解,并根據(jù)源碼中的樣例ADD的執(zhí)行過程,單步跟蹤,深入了解了NACHOS是如何執(zhí)行用戶程序的,然后進(jìn)行算法思想的設(shè)計(jì),即如何實(shí)現(xiàn)多道程序,在實(shí)現(xiàn)系統(tǒng)調(diào)用程序設(shè)計(jì)階段,主要系統(tǒng)調(diào)用未能實(shí)現(xiàn),主要原因是由于對(duì)代碼的整體把握出錯(cuò),由于在設(shè)計(jì)及分析階段只了解了NACHOS運(yùn)行用戶程序的詳細(xì)流程以及如何進(jìn)行用戶程序的調(diào)用,而對(duì)代碼的整體了解不夠,導(dǎo)致在根據(jù)設(shè)計(jì)思路完成程序設(shè)計(jì)的過程中,出現(xiàn)了比較大的問題,比如在實(shí)現(xiàn)EXEC系統(tǒng)調(diào)用時(shí),根據(jù)NACHOS的每個(gè)寄存器存的內(nèi)容不同,按規(guī)則讀取寄存的內(nèi)容,然后再進(jìn)行對(duì)其內(nèi)容的操作,模仿源代碼已有的操作ADD系統(tǒng)調(diào)用,實(shí)現(xiàn)EXEC系統(tǒng)調(diào)用。在測試程序運(yùn)行時(shí),出現(xiàn)了cannotopenfile的錯(cuò)誤,主要原因是:由于在代碼實(shí)現(xiàn)時(shí),寫錯(cuò)了文件名所在寄存器,導(dǎo)致無法打開文件,所以就沒能完成文件調(diào)用的測試。而對(duì)EXEC系統(tǒng)調(diào)用的其他部分則是正確的,其他幾個(gè)系統(tǒng)調(diào)用也出現(xiàn)了同樣的問題,但是這個(gè)問題一直未能發(fā)現(xiàn),導(dǎo)致本次設(shè)計(jì)無法順利進(jìn)行下去。七、心得及體會(huì)本次課程設(shè)計(jì)對(duì)我的提升還是非常大的,首先,由于分析了NACHOS的主要代碼以及詳細(xì)運(yùn)行過程,對(duì)操作系統(tǒng)中的基本原理和核心算法有一個(gè)全面和完整的了解。對(duì)操作系統(tǒng)課上的內(nèi)容有了更深了理解,包括線程管理,內(nèi)存管理,系統(tǒng)調(diào)用機(jī)制,時(shí)鐘中斷,多道程序,文件系統(tǒng)等等都有了比較清楚的認(rèn)識(shí),由原來抽象的概念變成了形象的認(rèn)識(shí)。其次,在本次課程設(shè)計(jì)中由于對(duì)涉及源代碼比較多,理解起來比較費(fèi)時(shí),而這正提高了我的理解代碼以及分析和解決問題的能力,最重要的是NACHOS帶給我的是一種自信,用老師的話來說就是一種巔峰認(rèn)知,讓我以后在面對(duì)較困難的事情時(shí)有了更多的自信,同時(shí)提高了分析解決問題的能力。

論大學(xué)生寫作能力寫作能力是對(duì)自己所積累的信息進(jìn)行選擇、提取、加工、改造并將之形成為書面文字的能力。積累是寫作的基礎(chǔ),積累越厚實(shí),寫作就越有基礎(chǔ),文章就能根深葉茂開奇葩。沒有積累,胸?zé)o點(diǎn)墨,怎么也不會(huì)寫出作文來的。寫作能力是每個(gè)大學(xué)生必須具備的能力。從目前高校整體情況上看,大學(xué)生的寫作能力較為欠缺。一、大學(xué)生應(yīng)用文寫作能力的定義那么,大學(xué)生的寫作能力究竟是指什么呢?葉圣陶先生曾經(jīng)說過,“大學(xué)畢業(yè)生不一定能寫小說詩歌,但是一定要寫工作和生活中實(shí)用的文章,而且非寫得既通順又扎實(shí)不可。”對(duì)于大學(xué)生的寫作能力應(yīng)包含什么,可能有多種理解,但從葉圣陶先生的談話中,我認(rèn)為:大學(xué)生寫作能力應(yīng)包括應(yīng)用寫作能力和文學(xué)寫作能力,而前者是必須的,后者是“不一定”要具備,能具備則更好。眾所周知,對(duì)于大學(xué)生來說,是要寫畢業(yè)論文的,我認(rèn)為寫作論文的能力可以包含在應(yīng)用寫作能力之中。大學(xué)生寫作能力的體現(xiàn),也往往是在撰寫畢業(yè)論文中集中體現(xiàn)出來的。本科畢業(yè)論文無論是對(duì)于學(xué)生個(gè)人還是對(duì)于院系和學(xué)校來說,都是十分重要的。如何提高本科畢業(yè)論文的質(zhì)量和水平,就成為教育行政部門和高校都很重視的一個(gè)重要課題。如何提高大學(xué)生的寫作能力的問題必須得到社會(huì)的廣泛關(guān)注,并且提出對(duì)策去實(shí)施解決。二、造成大學(xué)生應(yīng)用文寫作困境的原因:(一)大學(xué)寫作課開設(shè)結(jié)構(gòu)不合理。就目前中國多數(shù)高校的學(xué)科設(shè)置來看,除了中文專業(yè)會(huì)系統(tǒng)開設(shè)寫作的系列課程外,其他專業(yè)的學(xué)生都只開設(shè)了普及性的《大學(xué)語文》課。學(xué)生寫作能力的提高是一項(xiàng)艱巨復(fù)雜的任務(wù),而我們的課程設(shè)置僅把這一任務(wù)交給了大學(xué)語文教師,可大學(xué)語文教師既要在有限課時(shí)時(shí)間內(nèi)普及相關(guān)經(jīng)典名著知識(shí),又要適度提高學(xué)生的鑒賞能力,且要教會(huì)學(xué)生寫作規(guī)律并提高寫作能力,任務(wù)之重實(shí)難完成。(二)對(duì)實(shí)用寫作的普遍性不重視。“大學(xué)語文”教育已經(jīng)被嚴(yán)重地“邊緣化”。目前對(duì)中國語文的態(tài)度淡漠,而是呈現(xiàn)出全民學(xué)英語的大好勢頭。中小學(xué)如此,大學(xué)更是如此。對(duì)我們的母語中國語文,在大學(xué)反而被漠視,沒有相關(guān)的課程的設(shè)置,沒有系統(tǒng)的學(xué)習(xí)實(shí)踐訓(xùn)練。這其實(shí)是國人的一種偏見。應(yīng)用寫作有它自身的規(guī)律和方法。一個(gè)人學(xué)問很大,會(huì)寫小說、詩歌、戲劇等,但如果不曉得應(yīng)用文寫作的特點(diǎn)和方法,他就寫不好應(yīng)用文。(三)部分大學(xué)生學(xué)習(xí)態(tài)度不端正。很多非中文專業(yè)的大學(xué)生對(duì)寫作的學(xué)習(xí)和訓(xùn)練都只是集中在《大學(xué)語文》這一門課上,大部分學(xué)生只愿意被動(dòng)地接受大學(xué)語文老師所講授的文學(xué)經(jīng)典故事,而對(duì)于需要學(xué)生動(dòng)手動(dòng)腦去寫的作文,卻是盡可能應(yīng)付差事,這樣勢必不能讓大學(xué)生的寫作水平有所提高。(四)教師的實(shí)踐性教學(xué)不強(qiáng)。學(xué)生寫作能力的提高是一項(xiàng)艱巨復(fù)雜的任務(wù),但在教學(xué)中有不少教師過多注重理論知識(shí),實(shí)踐性教學(xué)環(huán)節(jié)卻往往被忽視。理論講了一大堆,但是實(shí)踐卻幾乎沒有,訓(xùn)練也少得可憐。閱讀與寫作都需要很強(qiáng)的實(shí)踐操作,學(xué)習(xí)理論固然必不可少,但是閱讀方法和寫作技巧的掌握才是最重要的。由于以上的原因,我們的大學(xué)生的寫作水平著實(shí)令人堪憂,那么如何走出這一困境,筆者提出一些建議,希望能對(duì)大學(xué)生寫作水平的提高有所幫助。三、提高大學(xué)生應(yīng)用寫作能力的對(duì)策(一)把《應(yīng)用寫作》課設(shè)置為大學(xué)生的必修課。在中國的每一所大學(xué),《應(yīng)用寫作》應(yīng)該成為大學(xué)生的必修課。因?yàn)樵谶@個(gè)被某些人形容為實(shí)用主義、功利主義甚囂塵上的時(shí)代,也是個(gè)人生存競爭最激烈的時(shí)代,人們比任何時(shí)代都更需要學(xué)會(huì)寫作實(shí)用性的文章,比如職場競爭中的求職信,生活中的財(cái)經(jīng)文書、法律文書等,以提高個(gè)人的生存競爭能力。(二)端正大學(xué)生的學(xué)習(xí)態(tài)度。首先,要讓大學(xué)生充分認(rèn)識(shí)到實(shí)用寫作課的重要性,這門課關(guān)乎到他人生的每一個(gè)方面,諸如就職,求愛,理財(cái),人際交往等,是他終生都需要使用的一些基礎(chǔ)性的知識(shí),也是他必備的一項(xiàng)生存技能。其次,實(shí)用寫作有它自身的規(guī)律和方法。它不是你想怎樣寫都行的,它有嚴(yán)格的格式性的要求,所以需要系統(tǒng)的研究學(xué)習(xí)。最后,實(shí)用寫作課的實(shí)踐性非常強(qiáng),所以學(xué)生們不能只學(xué)不練,并且要克服手懶的壞習(xí)慣,勤學(xué)勤練,為今后的工作生活打好基礎(chǔ)。(三)注重實(shí)踐課的訓(xùn)練。要提高大學(xué)生的實(shí)用寫作能力,那么實(shí)踐寫作環(huán)節(jié)是必不可少的。要想使學(xué)員真正具備實(shí)用寫作能力,必須重視實(shí)用寫作訓(xùn)練,力求使理論講授與寫作訓(xùn)練互相緊扣進(jìn)行。教師在授課過程中,應(yīng)該把理論教學(xué)的部分適當(dāng)壓縮,把更多的時(shí)間用來

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論