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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

操作系统Nachos总结

發布時間:2023/12/10 windows 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 操作系统Nachos总结 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

由于大家的操作系統設計思想都不一樣,直接貼代碼也沒什么意思,就簡單記錄下自己的思路吧。

實驗一

這個實驗就是搭建環境,分析一下源碼各個文件的作用。沒什么好記錄的。

實驗二 具有優先級的線程調度

個人感覺這個實驗比較簡單。

  • 修改thread文件,為線程增加成員優先級以及相應的set、get函數。按照自己的設計來就行
  • 修改scheduler文件, 使得等待隊列按照優先級將線程排序,而不是之前的直接插入。
  • 修改ThreadTest文件,按照自己的設計改測試函數

PS:優先級調度分搶占式和非搶占式的。按照上面來只能實現非搶占式的,至于搶占式的的實現,估計還得修改machine下面的Interrupt文件。

實驗三 信號量

實驗比較簡單,信號量的實現已經很明白了,直接拿來用就可。

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

實驗四 擴展文件

實驗四和實驗五就是有關文件系統的了,難度明顯比之前的要大。

這個實驗主要改的就是filehdr和openfile。

filehdr文件

這個類相當于inode,記錄了文件基本信息。包括大小、占用了幾個扇區、內容分別放在哪些扇區中。

openfile文件

用于實現文件的打開、讀入等,使用一個filehdr對象。

  • filehdr中就是多了擴充文件大小的函數,為了方便,還加了設置文件長度的函數。
  • openfile中要新加一個inode請求空間函數,還加了WriteBack函數,用于將hdr修會磁盤
  • openfile中要根據以上兩步的修改,重寫WriteAt函數

實驗五 二級索引

這個我是在實驗四的基礎上就地修改的,只需要改filehdr。這個實現方案能百度到一大堆,我就記錄下我的。
引入了一個新的類subhdr,基本成員類似于filehdr。原來的filehdr中的數組留出一個int的大小。數組前面的仍然為一級,最后一個指向的扇區是subhdr對象的扇區。

其實也可以直接最后一個指向filehdr對象,這樣就實現了多級索引,就是類似于鏈表的實現,但是估計很出很多bug,有創新意識的讀者可以試下。

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

實驗六

這兩個實驗都是關于內存管理的。

交叉編譯環境的注意事項

我在按照實驗指導書的步驟來,是獲得不了Nachos下的用戶可執行程序的,make時報錯如下:

所以,我查看了../bin/arch/unknown-i386-linux/bin/這個目錄,發現兩個可執行文件都是沒有可執行權限的:

這樣子Permission denied是理所當然的了,所以要先給他們可執行的權限
命令:chmod 764 *。再次make,就OK了。

這個實驗考察兩個方面,一是內存中要有多個程序駐留,二是系統調用Exec的實現。這兩個要求是相輔相成。一是二的基礎,二是一實現的證明。
先說要求一,就是重新設計分配內存方案,目錄中也有bitmap文件,就明示要用位圖來記錄,當然位圖一個就ok,要么聲明稱全局變量,要么聲明成AddrSpace的靜態屬性,我選了后者,因為前者要改別的文件,怕改亂了,再牽扯到其他實驗。
要求二也很直白了,就是改exception.cc實現Exec的處理,就是要注意文件名的獲得和PC的推進。(我就是忽視了這個,之前一直陷入死循環找不出錯)。

實驗七

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

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

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

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。