日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > windows >内容正文

windows

操作系统Nachos总结

發(fā)布時(shí)間:2023/12/10 windows 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 操作系统Nachos总结 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

由于大家的操作系統(tǒng)設(shè)計(jì)思想都不一樣,直接貼代碼也沒什么意思,就簡(jiǎn)單記錄下自己的思路吧。

實(shí)驗(yàn)一

這個(gè)實(shí)驗(yàn)就是搭建環(huán)境,分析一下源碼各個(gè)文件的作用。沒什么好記錄的。

實(shí)驗(yàn)二 具有優(yōu)先級(jí)的線程調(diào)度

個(gè)人感覺這個(gè)實(shí)驗(yàn)比較簡(jiǎn)單。

  • 修改thread文件,為線程增加成員優(yōu)先級(jí)以及相應(yīng)的set、get函數(shù)。按照自己的設(shè)計(jì)來就行
  • 修改scheduler文件, 使得等待隊(duì)列按照優(yōu)先級(jí)將線程排序,而不是之前的直接插入。
  • 修改ThreadTest文件,按照自己的設(shè)計(jì)改測(cè)試函數(shù)

PS:優(yōu)先級(jí)調(diào)度分搶占式和非搶占式的。按照上面來只能實(shí)現(xiàn)非搶占式的,至于搶占式的的實(shí)現(xiàn),估計(jì)還得修改machine下面的Interrupt文件。

實(shí)驗(yàn)三 信號(hào)量

實(shí)驗(yàn)比較簡(jiǎn)單,信號(hào)量的實(shí)現(xiàn)已經(jīng)很明白了,直接拿來用就可。

prodcons++文件里面要改的地方也有英文的代碼注釋,很清晰。比如:

實(shí)驗(yàn)四 擴(kuò)展文件

實(shí)驗(yàn)四和實(shí)驗(yàn)五就是有關(guān)文件系統(tǒng)的了,難度明顯比之前的要大。

這個(gè)實(shí)驗(yàn)主要改的就是filehdr和openfile。

filehdr文件

這個(gè)類相當(dāng)于inode,記錄了文件基本信息。包括大小、占用了幾個(gè)扇區(qū)、內(nèi)容分別放在哪些扇區(qū)中。

openfile文件

用于實(shí)現(xiàn)文件的打開、讀入等,使用一個(gè)filehdr對(duì)象。

  • filehdr中就是多了擴(kuò)充文件大小的函數(shù),為了方便,還加了設(shè)置文件長(zhǎng)度的函數(shù)。
  • openfile中要新加一個(gè)inode請(qǐng)求空間函數(shù),還加了WriteBack函數(shù),用于將hdr修會(huì)磁盤
  • openfile中要根據(jù)以上兩步的修改,重寫WriteAt函數(shù)

實(shí)驗(yàn)五 二級(jí)索引

這個(gè)我是在實(shí)驗(yàn)四的基礎(chǔ)上就地修改的,只需要改filehdr。這個(gè)實(shí)現(xiàn)方案能百度到一大堆,我就記錄下我的。
引入了一個(gè)新的類subhdr,基本成員類似于filehdr。原來的filehdr中的數(shù)組留出一個(gè)int的大小。數(shù)組前面的仍然為一級(jí),最后一個(gè)指向的扇區(qū)是subhdr對(duì)象的扇區(qū)。

其實(shí)也可以直接最后一個(gè)指向filehdr對(duì)象,這樣就實(shí)現(xiàn)了多級(jí)索引,就是類似于鏈表的實(shí)現(xiàn),但是估計(jì)很出很多bug,有創(chuàng)新意識(shí)的讀者可以試下。

這樣子確定好思路后,就可以改.cc文件了,可以說是全部重寫一遍了,除了FetchFrom、WriteBack 和FileLength,所有方法都改了,還需要根據(jù)你的設(shè)計(jì)重新定義宏。但說白了就是按照一級(jí)二級(jí)的邊界劃分改就行,就多了幾個(gè)判斷條件多了幾種可能的情況罷了。
邏輯理清楚了,改的時(shí)候就很簡(jiǎn)單了,但是一定要仔細(xì),我就是忘了改一個(gè)邊界條件導(dǎo)致一用到二級(jí)的時(shí)候就報(bào)段錯(cuò)誤,核心已轉(zhuǎn)儲(chǔ),還不知道哪里錯(cuò)了,這是最要命的。(就是太菜了,一個(gè)bug在眼前就是看不出來。。。)

實(shí)驗(yàn)六

這兩個(gè)實(shí)驗(yàn)都是關(guān)于內(nèi)存管理的。

交叉編譯環(huán)境的注意事項(xiàng)

我在按照實(shí)驗(yàn)指導(dǎo)書的步驟來,是獲得不了Nachos下的用戶可執(zhí)行程序的,make時(shí)報(bào)錯(cuò)如下:

所以,我查看了../bin/arch/unknown-i386-linux/bin/這個(gè)目錄,發(fā)現(xiàn)兩個(gè)可執(zhí)行文件都是沒有可執(zhí)行權(quán)限的:

這樣子Permission denied是理所當(dāng)然的了,所以要先給他們可執(zhí)行的權(quán)限
命令:chmod 764 *。再次make,就OK了。

這個(gè)實(shí)驗(yàn)考察兩個(gè)方面,一是內(nèi)存中要有多個(gè)程序駐留,二是系統(tǒng)調(diào)用Exec的實(shí)現(xiàn)。這兩個(gè)要求是相輔相成。一是二的基礎(chǔ),二是一實(shí)現(xiàn)的證明。
先說要求一,就是重新設(shè)計(jì)分配內(nèi)存方案,目錄中也有bitmap文件,就明示要用位圖來記錄,當(dāng)然位圖一個(gè)就ok,要么聲明稱全局變量,要么聲明成AddrSpace的靜態(tài)屬性,我選了后者,因?yàn)榍罢咭膭e的文件,怕改亂了,再牽扯到其他實(shí)驗(yàn)。
要求二也很直白了,就是改exception.cc實(shí)現(xiàn)Exec的處理,就是要注意文件名的獲得和PC的推進(jìn)。(我就是忽視了這個(gè),之前一直陷入死循環(huán)找不出錯(cuò))。

實(shí)驗(yàn)七

我的思想是固定分配 + 局部置換的策略。
看TranslateEntry類中用use和dirty,而且注釋中也是寫明了通過這兩個(gè)位可以構(gòu)造虛擬內(nèi)存,很明顯是在提示用二次機(jī)會(huì)法。不過,用其他的犧牲頁面選擇方法(比如FIFO、LRU)也是可行的。
(上學(xué)期,h老師說二次機(jī)會(huì)法只需要兩次循環(huán),但我總是覺得是三次循環(huán),沒怎么想明白,有明白的小伙伴可以在下方留言,萬分感謝)
寫代碼的時(shí)候,要注意的倒不是操作系統(tǒng)方面的問題,反倒是C++的語法問題(沒辦法就是菜。。。)

  • 在AddrSpace的構(gòu)造函數(shù)中,不僅要通過file = executable;來保存可執(zhí)行文件,還要在progtest文件中,將delete exectuable注釋掉。
  • 在二次機(jī)會(huì)法中,是不能將虛擬地址直接作為文件中的位置的。而且要根據(jù)數(shù)據(jù)類型(代碼、初始化數(shù)據(jù)、未初始化數(shù)據(jù)、堆棧)的不同分別與原始可執(zhí)行文件或者交換區(qū)文件進(jìn)行頁面的換入換出,就是說要修改TranslateEntry進(jìn)行類型區(qū)別。
  • 總結(jié)

    以上是生活随笔為你收集整理的操作系统Nachos总结的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。