資源簡介
一、UNIX文件系統的基本原理
? ? ? ?UNIX采用樹型目錄結構,每個目錄表稱為一個目錄文件。一個目錄文件是由目錄項組成的。每個目錄項包含16B,一個輔存磁盤塊(512B)包含32個目錄項。在目錄項中,第1、2字節為相應文件的外存i節點號,是該文件的內部標識;后14B為文件名,是該文件的外部標識。所以,文件目錄項記錄了文件內、外部標識的對照關系。根據文件名可以找到輔存i節點號,由此便得到該文件的所有者、存取權、文件數據的地址健在等信息。UNIX的存儲介質以512B為單位劃分為塊,從0開始直到最大容量并順序加以編號就成了一個文件卷,也叫文件系統。本次課程設計是要實現一個簡單的模擬UNIX文件系統。我們在磁盤中申請一個二進制文件模擬UNIX內存,依次初始化建立位示圖區,I節點區,數據塊區。
二、基本要點思路?
? ? ? ?1、模擬磁盤塊的實現:因為文件系統需要從磁盤中讀取數據操作數據,在實現時是使用文件來模擬磁盤,一個文件是一塊磁盤,在文件中以劃分磁盤塊那樣劃分不同的區域,主要有三個區域:位圖區,inode索引節點區,磁盤塊區。位圖區我是使用一個512byte的數組存放,inode區和磁盤塊區我采用一種自認為比較巧妙的方法,就是存放對象列表,之前說過,在本次實驗的所有的結構都使用對象進行存儲,而inode節點和磁盤塊就是兩個重要的數據結構,在初始化時我實例化32個inode對象和512個block對象(至于這些類的具體定義下面會提到),然后將這些對象加入各自對應的對象列表中,在存儲時,使用java的對象序列化技術將這個對象數組存到磁盤中。當使用文件系統時,程序會先從磁盤文件中讀取出位圖數組,inode對象列表,block對象列表,之后的操作就是通過對這些列表進行修改來實現。使用這種方法可以減小存儲的空間(對象序列話技術)而且不需要在使用時進行無用的查找,只要第一次初始化中將這些對象都讀取出來。
? ? ? ?2、界面的實現:在實現這個文件系統時使用了兩種方案,一種是直接在java控制臺來進行輸入輸出,因為原本想著UNIX文件系統原本也是使用的命令行語句,所以在控制臺上實現也很接近。后來在老師的建議下又將整個程序重新修改,改成在UI界面上進行輸入輸出,這樣確實界面美觀舒服了不少,只不過兩者用的技術很不一樣,前者主要使用的是系統的輸入輸出流,后者使用java監聽器。
? ? ? ?3、權限的實現:在實現多用戶的權限方面,我給文件和文件夾各定義了三級權限1、訪問:在文件中是可以查看文件的內容,在文件夾中是可以進入該文件夾。2、修改:文件中是可以對文件進行編輯,文件夾中是可以在該文件夾中創建新的文件或目錄。3、刪除:顧名思義。文件或文件夾的創建者擁有最高級別的權限,只有擁有最高級權限的用戶才可以給其他用戶針對該文件或文件夾進行授權和授權操作。在每次對文件或文件夾進行訪問修改刪除操作時都會檢查當前用戶在該文件或文件夾所擁有的權限,只有擁有的權限大于想要實現的權限時才可以進行該操作。

代碼片段和文件信息
package?OS_Project;
import?java.io.Serializable;
public?class?Block?implements?Serializable{
public?static?final?int?BLOCKSIZE?=?512;
private?int?num;
private?byte?[]memery?=?new?byte[512];
public?Block(int?numbyte[]?memery)?{
super();
this.num?=?num;
this.memery?=?memery;
}
public?Block(int?num)?{
super();
this.num?=?num;
}
public?void?setMemery(byte[]?memery)?{
this.memery?=?memery;
}
public?byte[]?getMemery()?{
return?memery;
}
public?int?getNum()?{
return?num;
}
}
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件????????541??2018-07-04?11:23??OS_Project\Block.java
?????文件??????30478??2018-07-21?16:45??OS_Project\FileSystem.java
?????文件???????1997??2018-07-04?10:31??OS_Project\I_Node.java
?????文件???????8819??2018-07-21?16:46??OS_Project\MemeryTable.txt
?????文件?????????42??2018-07-21?16:48??OS_Project\user.txt
?????文件????????650??2018-07-04?09:53??OS_Project\User_Message.java
?????目錄??????????0??2018-07-21?16:46??OS_Project
-----------?---------??----------?-----??----
????????????????42527????????????????????7
- 上一篇:xm
l的登錄與注冊 - 下一篇:數據庫大作業Java---采購系統滿分
評論
共有 條評論