操作系統 文件管理實驗報告

實驗要求

實驗目的與要求
用高級語言編寫和調試一個簡單的文件系統,模擬文件管理的工作過程,從而對各種文件操作命令的實質內容和執行過程有比較深入的瞭解。
要求設計一個 n個用戶的文件系統,每次用戶可保存m個文件,用戶在一次運行中只能打開一個文件,對文件必須設置保護措施,且至少有Create、delete、open、close、read、write等命令。
二、例題:
設計一個10個用戶的文件系統,每次用戶可保存10個文件,一次運行用戶可以打開5個文件。
程序採用二級文件目錄(即設置主目錄[MFD])和用戶文件目錄(UED);另外,爲打開文件設置了運行文件目錄(AFD)。
爲了便於實現,對文件的讀寫作了簡化,在執行讀寫命令時,只需改讀寫指針,並不進行實際的讀寫操作
算法與框圖:
因系統小,文件目錄的檢索使用了簡單的線性搜索。文件保護簡單使用了三位保護碼:允許讀寫執行、對應位爲 1,對應位爲0,則表示不允許讀寫、執行。
程序中使用的主要設計結構如下:
主文件目錄和用戶文件目錄( MFD、UFD)打開文件目錄( AFD)(即運行文件目錄)
在這裏插入圖片描述
文件系統算法的流程圖如下:
在這裏插入圖片描述
三、實驗題:
增加 2~3個文件操作命令,並加以實現(如移動讀寫指針,改變文件屬性,更換文件名,改變文件保護級別)。
編一個通過屏幕選擇命令的文件管理系統,每屏要爲用戶提供足夠的選擇信息,不需要打入冗長的命令。
設計一個樹型目錄結構的文件系統,其根目錄爲 root,各分支可以是目錄,也可以是文件,最後的葉子都是文件。
根據學校各級機構,編制一文件系統。

實驗報告

1.實驗目的

用高級語言編寫和調試一個簡單的文件系統,模擬文件管理的工作過程,從而對各種文件操作命令的實質內容和執行過程有比較深入的瞭解。

要求設計一個 n個用戶的文件系統,每次用戶可保存m個文件,用戶在一次運行中只能打開一個文件,對文件必須設置保護措施,且至少有Create、delete、open、close、read、write等命令。

2.實驗內容與要求

設計一個10個用戶的文件系統,每次用戶可保存10個文件,一次運行用戶可以打開5個文件。

程序採用二級文件目錄(即設置主目錄[MFD])和用戶文件目錄(UED);另外,爲打開文件設置了運行文件目錄(AFD)。

爲了便於實現,對文件的讀寫作了簡化,在執行讀寫命令時,只需改讀寫指針,並不進行實際的讀寫操作
算法與框圖:
因系統小,文件目錄的檢索使用了簡單的線性搜索。文件保護簡單使用了三位保護碼:允許讀寫執行、對應位爲 1,對應位爲0,則表示不允許讀寫、執行。
程序中使用的主要設計結構如下:
主文件目錄和用戶文件目錄( MFD、UFD)打開文件目錄( AFD)(即運行文件目錄)在這裏插入圖片描述

3.流程圖與模塊調用

在這裏插入圖片描述

4.實驗分析

想要完成操作系統算法,首先要弄清楚操作系統相關的專業術語。弄清各個算法的流程和目的要求。才能模擬出相關算法的過程。

一般情況下,操作系統中,文件管理提供瞭如下功能:

①統一管理文件存儲空間(即外存),實施存儲空間的分配與回收。
②確定文件信息的存放位置及存放形式。
③實現文件從名字空間到外存地址空間的映射,即實現文件的按名存取。
④有效實現對文件的各種控制操作(如建立、撤銷、打開、關閉文件等)和存取操作(如讀、寫、修改、複製、轉儲等)

其實就是對文件進行管理。

本次實驗對文件定義瞭如下數據結構:

class file:
    def __init__(self, uid, fid, name, status):
        self.uid = uid
        self.fid = fid
        self.name = name
        self.status = status

定義了文件的id標識,文件名,狀態等等。

5.運行情況

在這裏插入圖片描述

6.實驗體會

通過本次實驗,我深刻的理解了操作系統中文件管理可視化的優點。操作系統實驗重在理解每一個算法的意圖和目的,那麼就選擇適當的數據結構模擬過程就可以完成相關算法了。

文件管理系統作爲一個統一的信息管理機制,可以解決海量文件存儲,管理困難;查找緩慢,效率低下;文件版本管理混亂;文件安全缺乏保障;文件無法有效協作共享;知識管理舉步維艱等問題。

本次實驗採用python完成,IDE是pycharm。

【附】實驗代碼

mfd = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J']  # 存用戶信息
ufd = []  # 存放文件


class file:
    def __init__(self, uid, fid, name, status):
        self.uid = uid
        self.fid = fid
        self.name = name
        self.status = status


# 輸出用戶
def display1():
    print("用戶:\n1、A\t2、B\n3、C\t4、D\n5、E\t6、F\n7、G\t8、H\n9、I\t10、J\n")


# 輸出用戶文件夾目錄
def display2(arr):
    str = '該用戶的文件目錄爲:\n'
    for index, item in enumerate(arr):
        if (index + 1) % 2:
            str += '{}、文件名:{} 文件fid:{} 文件狀態:{}\t'.format((index + 1), item.name, item.fid, item.status)
        else:
            str += '{}、{}\n'.format((index + 1), item.name)
    print(str, '\n')


# 輸出命令表
def display3():
    print('指令集:\n1、創建新文件\t2、刪除文件\n3、打開文件\t4、關閉文件\n5、讀出文件\t6、寫入文件\n7、查看文件目錄\t8、退出\n')


display1()
option = input('請輸入用戶名以進入UFD:')

if option in mfd:
    files = []  # 存放屬於該用戶的文件
    for item in ufd:
        if item.uid == option:
            files.append(item)
    display2(files)
    display3()
    option2 = int(input('請輸入指令序號:'))
    while option2 != 8:
        if option2 == 1:
            if len(files) < 10:
                a = input('請輸入新建的文件名:')
                p = file(option, len(files) + 1, a, 'close')
                ufd.append(p)
                files.append(p)
                option2 = int(input('請輸入指令序號:'))
            else:
                print('最多隻能創建10個文件')
                option2 = int(input('請輸入指令序號:'))
        elif option2 == 2:
            b = int(input('請輸入你需要刪除文件的fid:'))
            for item in files:
                if item.fid == b:
                    files.remove(item)
                    print("已刪除")
            option2 = int(input('請輸入指令序號:'))
        elif option2 == 3:
            c = int(input('請輸入你需要打開文件的fid:'))
            for item in files:
                if item.fid == c:
                    item.status = 'open'
                    print('已打開')
            option2 = int(input('請輸入指令序號:'))
        elif option2 == 4:
            d = int(input('請輸入你需要關閉文件的fid:'))
            for item in files:
                if item.fid == d:
                    item.status = 'close'
                    print('已關閉')
            option2 = int(input('請輸入指令序號:'))
        elif option2 == 5:
            e = int(input('請輸入你需要讀取文件的fid:'))
            for item in files:
                if item.fid == e:
                    item.status = 'read'
                    print('已讀取')
            option2 = int(input('請輸入指令序號:'))
        elif option2 == 6:
            f = int(input('請輸入你需要寫入文件的fid:'))
            for item in files:
                if item.fid == f:
                    item.status = 'write'
                    print('已寫入')
            option2 = int(input('請輸入指令序號:'))
        elif option2 == 7:
            display2(files)
            option2 = int(input('請輸入指令序號:'))



else:
    print("無此用戶!")

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章