杭州电子科技大学操作系统课程设计:简单文件系统的实现
本實驗的代碼地址:https://github.com/yjc567/HDU_OS_Assignment_2017_SimpleFileSystem,如有需要,歡迎自行取用,但是不建議你拿著這個代碼去驗收,自己的知識永遠是自己的,好好學習才是王道!
emmmm想寫一個操作系統的課程設計說明,因為自己寫的時候也遇到了好多問題,外加感覺對實驗指導書的說明有些疑問,覺得寫出來可以給別人看看。但是感覺寫出來的東西……沒什么好看的。
因為這個系統還是有點復雜,但是自己又沒有太多的時間和能力把這個復雜的系統說清楚。
存儲功能的接口實現
課程設計的文件系統是個類似fat的文件系統結構。fat的結構可以大致參考一下課程設計書或者上課ppt的內容,如下圖。磁盤被分為若干塊相同大小的磁盤塊,一個文件的fcb會記錄一個文件的大小和這個文件對應的fat起始物理塊號,fat表會標記出一個物理塊號的下一個物理塊號,如果是EOF,則表明這個物理塊是一個文件的最后一個物理塊。這些物理塊號的二進制文件串聯起來后,就是一個文件的內容。
每次文件系統程序運行的時候,程序會申請一個大小為1024000字節的內存空間,作為虛擬的磁盤空間。申請完成后,程序就會試圖打開一個名為myfsys的文件,這個文件是上一次程序運行結束時,內存中的虛擬磁盤空間的備份。如果myfsys文件不存在,或者myfsys的前八個字節不是二進制數01010101的話,程序就會進行系統的初始化,反之會通過fread()函數把myfsys讀進內存空間。
那么怎么把fcb結構體或字符串寫進虛擬磁盤空間或者從虛擬磁盤空間讀出fcb結構體或字符串呢?利用memcpy()函數就好了,這個函數可以自行地把各種變量的內存寫到其它內存上。因此,如果我們要讀出一個目錄文件下有哪些文件,只要根據這個目錄文件的fcb從虛擬磁盤上讀出相應的信息,然后把信息加載到一個個fcb結構體中,就得到了其目錄下的fcb文件。
文件系統基礎功能的分析和實現
創建文件功能
不管是創建文件夾還是創建文件,其實都是在其父目錄對應的文件目錄下新增一個新的fcb,只不過fcb的內容稍有不同,所以自己用my_touch()函數來創建對應的文件(其實Linux下就有touch命令,就是用來創建文件的),然后再根據這個文件的類型進行其它的相應操作。
打開文件功能
與上同理,不管是打開文件夾還是打開文件,其實就是打開一個文件fcb并讀取相關信息。于是my_cd()函數和my_open()函數其實都是一樣的功能,寫一個,調用一個就好了。
指導書中的一些問題和疑惑
文件夾fcb中的.和..文件項有什么用
沒用,真的沒用,至少我認為用了這兩個文件項會出bug,因為當你用./這個目錄打開當前目錄的時候,當前目錄會把./當成自己的父目錄,當當前目錄發生了修改,需要把修改后的信息寫入父目錄時,其實際父目錄不會發生修改。
然后自己是寫了一個rewrite_dir()函數來把輸入的目錄改寫成一個完整的目錄,每次從根目錄打開文件夾,避免使用.和..文件項。
總結
以上是生活随笔為你收集整理的杭州电子科技大学操作系统课程设计:简单文件系统的实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 前端学习(1779):前端调试之cach
- 下一篇: 前端学习(1873)vue之电商管理系统