操作系統(四)文件管理

操作系統(四)文件管理

  • 一、文件系統基礎
    • 1.文件邏輯結構
      • 無結構文件
      • 有結構文件
    • 2.文件目錄
      • 文件控制塊(FCB)
      • 目錄結構
        • 單級目錄
      • 兩級目錄結構
      • 多級目錄結構
      • 無環圖目錄結構
    • 3.文件保護
      • 口令保護
      • 加密保護
      • 訪問控制
    • 4.文件共享
      • 硬鏈接
      • 軟鏈接
    • 5.文件系統實現
      • 文件物理結構
        • 連續分配
        • 鏈接分配
          • 隱式鏈接
          • 顯式鏈接
          • 索引分配
    • 6.文件存儲空間管理
    • 7.文件系統的層次結構
    • 8.磁盤結構
    • 9.磁盤調度算法
        • 先來先服務算法(FCFS)
        • 最短尋找時間優先(SSTF)
        • 掃描算法(SCAN)
        • LOOK 調度算法
        • 循環掃描算法(C-SCAN)
        • C-LOOK 調度算法

一、文件系統基礎

1.文件邏輯結構

無結構文件

無結構文件:文件內部的數據就是一系列二進制流或字符流組成。又稱“流式文件”。如:Windows 操作系統中的 .txt 文件。

在這里插入圖片描述

有結構文件

有結構文件:由一組相似的記錄組成,又稱“記錄式文件”。每條記錄又若干個數據項組成。如:數據庫表文件。一般來說,每條記錄有一個數據項可作為關鍵字(作為識別不同記錄的ID)
在這里插入圖片描述
有結構文件分為順序文件、索引文件、索引順序文件和直接文件或散列文件

順序文件
在這里插入圖片描述
在這里插入圖片描述

定長記錄的順序文件,若物理上采用順序存儲,則可實現隨機存取;若能再保證記錄的順序結構,則可實現快速檢索(即根據關鍵字快速找到對應記錄)

索引文件
在這里插入圖片描述

索引表本身是定長記錄的順序文件。因此可以快速找到第 i 個記錄對應的索引項。可將關鍵字作為索引號內容,若按關鍵字順序排列,則還可以支持按照關鍵字折半查找。每當要增加/刪除一個記錄時,需要對索引表進行修改。由于索引文件有很快的檢索速度,因此主要用于對信息處理的及時性要求比較高的場合

索引順序文件
在這里插入圖片描述
索引順序文件是索引文件和順序文件思想的結合。索引順序文件中,同樣會為文件建立一張索引表,但不同的是:并不是每個記錄對應一個索引表項,而是一組記錄對應一個索引表項。

多級索引順序文件
在這里插入圖片描述

2.文件目錄

文件控制塊(FCB)

在這里插入圖片描述
FCB 的有序集合稱為“文件目錄”,一個FCB就是一個文件目錄項。FCB 中包含了文件的基本信息(文件名、物理地址、邏輯結構、物理結構等),存取控制信息(是否可讀/可寫、禁止訪問的用戶名單等),使用信息(如文件的建立時間、修改時間等)。最重要,最基本的還是文件名、文件存放的物理地址。

目錄結構

單級目錄

在這里插入圖片描述

單級目錄實現了“按名存取”,但是不允許文件重名。在創建一個文件時,需要先檢查目錄表中有沒有重名文件,確定不重名后才能允許建立文件,并將新文件對應的目錄項插入目錄表中

兩級目錄結構

在這里插入圖片描述

多級目錄結構

在這里插入圖片描述

無環圖目錄結構

在這里插入圖片描述
可以用不同的文件名指向同一個文件,甚至可以指向同一個目錄(共享同一目錄下的所有內容)。需要為每個共享結點設置一個共享計數器,用于記錄此時有多少個地方在共享該結點。用戶提出刪除結點的請求時,只是刪除該用戶的FCB、并使共享計數器減1,并不會直接刪除共享結點。只有共享計數器減為0時,才刪除結點。

注意:共享文件不同于復制文件。在共享文件中,由于各用戶指向的是同一個文件,因此只要其中一個用戶修改了文件數據,那么所有用戶都可以看到文件數據的變化。

3.文件保護

口令保護

為文件設置一個“口令”(如:abc112233),用戶請求訪問該文件時必須提供“口令”。口令一般存放在文件對應的 FCB 或索引結點中。用戶訪問文件前需要先輸入“口令”,操作系統會將用戶提供的口令與FCB中存儲的口令進行對比,如果正確,則允許該用戶訪問文件

優點:保存口令的空間開銷不多,驗證口令的時間開銷也很小。
缺點:正確的“口令”存放在系統內部,不夠安全。

加密保護

用某個“密碼”對文件進行加密,在訪問文件時需要提供正確的“密碼”才能對文件進行正確的解密。
例如:一個最簡單的加密算法——異或加密
假設用于加密/解密的“密碼”為“01001”
在這里插入圖片描述

優點:保密性強,不需要在系統中存儲“密碼”
缺點:編碼/譯碼,或者說加密/解密要花費一定時間。

訪問控制

在每個文件的FCB(或索引結點)中增加一個訪問控制列表(Access-Control List, ACL),該表中記錄了各個用戶可以對該文件執行哪些操作。

在這里插入圖片描述

4.文件共享

硬鏈接

在這里插入圖片描述

索引結點中設置一個鏈接計數變量 count,用于表示鏈接到本索引結點上的用戶目錄項數。

若 count = 2,說明此時有兩個用戶目錄項鏈接到該索引結點上,或者說是有兩個用戶在共享此文件。
若某個用戶決定“刪除”該文件,則只是要把用戶目錄中與該文件對應的目錄項刪除,且索引結點的count值減 1。
若 count>0,說明還有別的用戶要使用該文件,暫時不能把文件數據刪除,否則會導致指針懸空。
當 count = 0 時系統負責刪除文件。

軟鏈接

在這里插入圖片描述
當 User3 訪問“ccc”時,操作系統判斷文件“ccc”屬于 Link 類型文件,于是會根據其中記錄的路徑層層查找目錄,最終找到 User1 的目錄表中的“aaa”表項,于是就找到了文件1的索引結點。

5.文件系統實現

文件物理結構

磁盤塊
在這里插入圖片描述
在這里插入圖片描述

連續分配

在這里插入圖片描述

鏈接分配

隱式鏈接

在這里插入圖片描述

用戶給出要訪問的邏輯塊號 i,操作系統找到該文件對應的目錄項(FCB),從目錄項中找到起始塊號(即0號塊),將0號邏輯塊讀入內存,由此知道1號邏輯塊存放的物理塊號,于是讀入1號邏輯塊,再找到2號邏輯塊的存放位置……以此類推。因此,讀入i號邏輯塊,總共需要 i+1 次磁盤I/O。

結論:采用鏈式分配(隱式鏈接)方式的文件,只支持順序訪問,不支持隨機訪問,查
找效率低。另外,指向下一個盤塊的指針也需要耗費少量的存儲空間。

顯式鏈接

在這里插入圖片描述

索引分配

在這里插入圖片描述

6.文件存儲空間管理

文件空間劃分:
在這里插入圖片描述

文件空間管理:

  1. 空閑表法
    在這里插入圖片描述
  2. 空閑鏈表
    在這里插入圖片描述

  1. 位式圖法
    在這里插入圖片描述
  2. 成組鏈接法

空閑表法、空閑鏈表法不適用于大型文件系統,因為空閑表或空閑鏈表可能過大。UNIX系統中采用了成組鏈接法對磁盤空閑塊進行管理。
文件卷的目錄區中專門用一個磁盤塊作為“超級塊”,當系統啟動時需要將超級塊讀入內存。并且要保證內存與外存中的“超級塊”數據一致。

在這里插入圖片描述

在這里插入圖片描述

7.文件系統的層次結構

在這里插入圖片描述

8.磁盤結構

在這里插入圖片描述

在這里插入圖片描述

在這里插入圖片描述
在這里插入圖片描述

9.磁盤調度算法

先來先服務算法(FCFS)

在這里插入圖片描述

最短尋找時間優先(SSTF)

在這里插入圖片描述

掃描算法(SCAN)

在這里插入圖片描述

LOOK 調度算法

在這里插入圖片描述

循環掃描算法(C-SCAN)

在這里插入圖片描述

C-LOOK 調度算法

在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/384307.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/384307.shtml
英文地址,請注明出處:http://en.pswp.cn/news/384307.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

struct stat結構體簡介

轉載&#xff1a;http://www.cnblogs.com/CSU-PL/archive/2013/06/06/3120757.html 在使用這個結構體和方法時&#xff0c;需要引入&#xff1a; <sys/types.h> <sys/stat.h> struct stat這個結構體是用來描述一個linux系統文件系統中的文件屬性的結構。 可以有兩種…

如何在Ubuntu上安裝GCC編譯器

如何在Ubuntu上安裝GCC編譯器1.首先更新包列表sudo apt update2.安裝build-essential軟件包&#xff1a; sudo apt install build-essential3.驗證GCC編譯器是否已成功安裝&#xff0c;請使用gcc --version命令打印GCC版本 rootubuntu:/home/csd# gcc --version

操作系統(五)輸入/輸出(I/O)管理

操作系統&#xff08;五&#xff09;輸入/輸出&#xff08;I/O&#xff09;管理一、I/O控制器二、I/O控制方式程序直接控制方式中斷驅動方式DMA方式通道控制方式I/O軟件層次結構假脫機技術設備的分配與回收緩沖區單緩沖雙緩沖循環緩沖區緩沖池一、I/O控制器 I/O設備由機械部件…

Linux下的I/O多路復用select,poll,epoll淺析

轉載&#xff1a;http://blog.csdn.net/u011573853/article/details/52105365 一&#xff0c;什么是I/O多路復用 所謂的I/O多路復用在英文中其實叫 I/O multiplexing. 就是單個線程&#xff0c;通過記錄跟蹤每個I/O流(sock)的狀態&#xff0c;來同時管理多個I/O流 。) I/O mu…

計算機組成原理(一)計算機系統概述

計算機組成原理&#xff08;一&#xff09;計算機系統概述一、計算機系統層次結構馮諾伊曼機計算機工作過程多級層次結構一、計算機系統層次結構 馮諾伊曼機 特點&#xff1a; 計算機由五大部件組成指令和數據以同等地位存于存儲 器&#xff0c;可按地址尋訪指令和數據用二進…

計算機組成原理(二)數據的表示和運算

計算機組成原理&#xff08;二&#xff09;數據的表示和運算一、BCD碼二、奇偶校驗碼三、海明碼四、循環冗余校驗碼&#xff08;CRC&#xff09;五、乘法運算原碼乘法補碼乘法六、除法運算原碼除法補碼除法七、浮點數的表示與運算浮點數的運算一、BCD碼 組合式BCD碼&#xff1…

select read write

轉載&#xff1a;http://blog.csdn.net/beginning1126/article/details/8057498 [cpp] view plaincopy <p style"color: rgb(51, 51, 51); font-family: Arial; font-size: 14px; line-height: 26px; text-align: left; "><span style"font-size:14px;…

數據結構(七)圖的遍歷(遞歸非遞歸方法)

圖的遍歷&#xff08;遞歸非遞歸方法&#xff09;#include<iostream> #include<stdio.h> #include<stack> #include<queue> using namespace std;typedef char VertexType; typedef int EdgeType;#define MAXVEX 100 #define INF 65535 bool visited[M…

Linux IO復用區別與epoll詳解

轉載&#xff1a;http://blog.csdn.net/hacker00011000/article/details/52160590 一、select、poll、epoll之間的區別總結[整理]   select&#xff0c;poll&#xff0c;epoll都是IO多路復用的機制。I/O多路復用就通過一種機制&#xff0c;可以監視多個描述符&#xff0c;一…

簡單圖和多重圖

一、簡單圖 ?? ① 不存在重復邊&#xff1b; ?? ② 不存在頂點到自身的邊&#xff1b; 二、多重圖 ??① 某兩結點之間邊數多于一條&#xff1b; ??② 允許頂點通過一條邊和自己關聯&#xff1b;

C++筆記:select多路復用機制

轉載&#xff1a;http://blog.csdn.net/qdx411324962/article/details/42499535 函數作用&#xff1a; 系統提供select函數來實現多路復用輸入/輸出模型。select系統調用是用來讓我們的程序監視多個文件句柄的狀態變化的。程序會停在select這里等待&#xff0c;直到被監視的文件…

交叉編譯執行應用程序出現:No such file or directory

問題分析 當我在arm板子上執行交叉編譯過的程序的時候發現了這個錯誤。通過百度查詢基本都是缺少32位庫什么的,但是都不能解決問題。 然后我用ll指令&#xff0c;也排除了權限的原因。 我們用ldd指令發現&#xff0c;它不是動態執行的&#xff0c;雖然我們可以使用-static指…

select、poll、epoll 比較

轉載&#xff1a;http://blog.csdn.net/dodo_328/article/details/39081183 1.Selet&#xff1a;本質上是通過設置或者檢查存放fd標志位的數據結構來進行下一步處理。 缺點&#xff1a;1 單個進程可監視的fd數量被限制&#xff0c;因為受描述符集合fd_set限制&#xff0c;fd數量…

C庫函數 File

C庫函數常用的有&#xff1a;fopen, fclose, fread, fwrite, fgets, fputs, fscanf, fprintf, fseek, fgetc, fputc, ftell, feof, flush等&#xff0c; 當使用fopen打開一個文件時通常返回一個文件指針 FILE *fp。FILE類型是一個結構體&#xff0c;包含文件描述符&#xff08;…

Unix 網絡編程(四)- 典型TCP客服服務器程序開發實例及基本套接字API介紹

轉載&#xff1a;http://blog.csdn.net/michael_kong_nju/article/details/43457393 寫在開頭&#xff1a; 在上一節中我們學習了一些基礎的用來支持網絡編程的API&#xff0c;包括“套接字的地址結構”、“字節排序函數”等。這些API幾乎是所有的網絡編程中都會使用的一些&…

C庫函數與系統函數的關系

轉載于:https://www.cnblogs.com/lr1402585172/p/10464933.html

Unix網絡編程(六)高級I/O技術之復用技術 select

轉載&#xff1a;http://blog.csdn.net/michael_kong_nju/article/details/44887411 I/O復用技術 本文將討論網絡編程中的高級I/O復用技術&#xff0c;將從下面幾個方面進行展開&#xff1a; a. 什么是復用技術呢&#xff1f; b. 什么情況下需要使用復用技術呢&#xff1f; c. …

open、read、write、文件類型

open&#xff0c;打開一個文件、創建一個文件或判斷一個文件是否存在。 頭文件&#xff1a;<sys/types.h> <sys/stat.h> <fcntl.h> 重載函數有&#xff1a;int open(const char *pathname, int flags) int open(const char *pathname, int flags, mode_t m…

用模板寫單鏈表 尹成

轉載&#xff1a;http://blog.csdn.net/itcastcpp/article/details/39081953 為了加深對模板的理解&#xff0c;我們今天一起用模板寫一個單鏈表&#xff0c;希望通過這個例子&#xff0c;能夠幫助大家加深對模板的體會&#xff0c;具體如下&#xff1a; SList.hpp內容&#xf…

lseek、stat、access、chmod、strtol、truncate、unlink

lseek&#xff0c;可實現計算文件長度&#xff0c;以及文件擴展。 int ret lseek(fd, 0, SEEK_END); //文件長度printf("file lendth %d\n", ret); int ret lseek(fd, 2000, SEEK_END); //文件拓展2000個byte 在文件末尾偏移2000printf("return va…