国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【Linux】基礎IO_文件系統(tǒng)

這篇具有很好參考價值的文章主要介紹了【Linux】基礎IO_文件系統(tǒng)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

?環(huán)境:centos7.6,騰訊云服務器
Linux文章都放在了專欄:【Linux】歡迎支持訂閱

相關文章推薦:

【Linux】馮.諾依曼體系結構與操作系統(tǒng)

【C/進階】如何對文件進行讀寫(含二進制)操作?

【Linux】基礎IO_文件操作

【Linux】基礎IO_文件描述符與重定向


前言

在前文我們所講的都是已經打開的文件,而沒有被打開的文件又存儲在哪里呢?又是如何進行管理的呢?事實上,沒有被打開的文件存儲在磁盤,稱之為磁盤文件。磁盤的存在不僅僅是為了存儲文件,還有后續(xù)能對文件進行快速定位以及讀取和寫入。而對于磁盤文件的管理,則離不開文件系統(tǒng),本次文章將對此進行探討。

磁盤的物理結構

磁盤是什么?

磁盤是一種存儲數(shù)據的存儲器,早期主要計算機使用的磁盤是軟磁盤(軟盤),而如今則主要使用硬磁盤(硬盤)。而如今市面上的硬盤主要有機械硬盤以及固態(tài)硬盤。兩者各有優(yōu)缺點。

  1. 機械硬盤容量大、價格便宜、但讀取速度非常慢、個頭還大(很多公司還在使用,因為成本低)
  2. 固態(tài)硬盤讀取速度快、個頭小、但是價格貴,且存儲空間有限(當前我們的大多數(shù)計算機都是固態(tài)硬盤)【Linux】基礎IO_文件系統(tǒng)這里我們所講解的是機械硬盤,顧名思義,機械硬盤是我們計算機上的唯一一個機械設備

基本結構

機械硬盤的基本結構主要包含以下部分:

  • 盤片一片兩面、每一面都可以存儲數(shù)據、有一摞盤片
  • 磁頭盤片每一面各有一個磁頭,磁頭負責盤面數(shù)據的讀取
  • 傳動軸:用來控制磁頭的進退
  • 主軸:控制盤片的穩(wěn)定旋轉
  • ......

【Linux】基礎IO_文件系統(tǒng)

存儲結構

物理存儲結構

機械硬盤的邏輯結構主要分為磁道、扇區(qū)拄面。(部分內容來源于:硬盤結構(機械硬盤和固態(tài)硬盤)詳解)

【Linux】基礎IO_文件系統(tǒng)

  1. 磁道:每個盤片都在邏輯上有很多的不同半徑的同心圓,最外面的同心圓就是 0 磁道。我們將每個同心圓稱作磁道(注意,磁道只是邏輯結構,在盤面上并沒有真正的同心圓)。
  2. 扇區(qū):在磁盤上每個同心圓是磁道,從圓心向外呈放射狀地產生分割線(扇骨),將每個磁道等分為若干弧段,每個弧段就是一個扇區(qū)。每個扇區(qū)的大小是固定的,為 512Byte。扇區(qū)也是磁盤的最小存儲單位。
  3. 柱面不同盤片中的相同磁道形成的一個圓柱。

數(shù)據的寫入與讀取:

扇區(qū)作為磁盤中存儲的基本單元,大小為512byte。(一個文件的數(shù)據在存儲時可能占用多個扇區(qū))。所以我們在進行數(shù)據的寫入和讀取時,只需要定位到具體的扇區(qū)即可。而定位一個扇區(qū),首先要定位該扇區(qū)在哪一個盤面上(由磁頭定位,每一個面都有一個磁頭),接著通過同心圓的半徑,確定扇區(qū)所在的磁道,最后再通過扇區(qū)的編號,確定該扇區(qū)的具體位置。這種通過磁頭、磁道、扇區(qū)編號來定位扇區(qū)的放法,稱之為CHS定位法。

磁盤的存儲介質為磁性材料,我們知道計算機內的數(shù)據都是大量的0和1,而磁頭則會將0和1這種電信號轉化為磁信號,也就說機械硬盤是通過磁頭對南北極的更改,來實現(xiàn)數(shù)據的讀取與寫入。當我們通過CHS定位到具體扇區(qū)時:

  • 向磁盤中寫入數(shù)據N -> S (0->1)
  • 刪除數(shù)據:S ->N (1->0)
  • 對數(shù)據的寫入/刪除 與讀取的本質更改基本元素的南北極,讀取南北極。

邏輯抽象

如上所說,如果OS能知道任意的CHS地址,就能訪問任意一個扇區(qū),但是OS內部并不是直接使用CHS定位法。

這是因為OS是一個用來對軟硬件資源做管理的軟件,而CHS定位法是磁盤作為硬件來使用的方法。由于硬件可能會隨著時代的發(fā)展而不斷改變,如果此時OS采用CHS,那么OS也要不斷隨著硬件的更新而更新。耦合度太高,成本太大。因此為了實現(xiàn)與硬件的解耦,OS采用一種新的定位方法---LBA邏輯塊地址。

如下圖所示:將磁道從最外層鋪開,就像扯膠帶一樣拉開,就會得到一串連續(xù)的線性的空間,我們把它想象成一個大數(shù)組,如下圖所示:

【Linux】基礎IO_文件系統(tǒng)

此時計算機的常規(guī)訪問方式,就變成了某一個數(shù)據塊的起始地址+偏移量。此時也就完成了CHS到BA的轉換。因此,OS對于磁盤的管理,實際上就轉化為了對這個大數(shù)組的管理。

當然,OS進行IO的基本單位是可以進行調整的,一般都是4KB,即一個數(shù)據塊的大小,這也是為什么磁盤會被稱之為塊設備的原因之一。這樣也是為了提高IO效率,根據內存對齊原則。

文件系統(tǒng)

分治管理

【Linux】基礎IO_文件系統(tǒng)
Windows下的分盤

我們目前所使用的計算機,實際上只有一個盤,那么為什么我們還要將它分成C盤、D盤呢?答案是為了讓我們能更好的管理這些資源。同樣,Linux操作系統(tǒng)為了更好的管理整個磁盤空間,也會對磁盤進行分區(qū),對OS來說,管理好一個分區(qū),就能管理好所有的分區(qū)(每一個分區(qū)的管理方法都一樣),而為了更好的管理一個分區(qū),又會在該區(qū)內進行分組管理,再次細分為一個一個塊組。同樣,管理好一個塊組,即可管理好整個塊組,進而管理好整個分區(qū),實現(xiàn)對整個文件系統(tǒng)的管理。

【Linux】基礎IO_文件系統(tǒng)

?這種管理策略,有點類似于我們國內為了管理好整個國家,設置了各個省,而為了管理好一個省,又設置了各個市。只不過計算機的這種管理方式要更加簡單些,因為管理的策略都一樣,不像國內各個省市的管理要考慮當?shù)鼐唧w情況。

塊組內的信息

如上所說,OS只需要管理好一個塊組,就能管理好所有的塊組,進而管理好一個分區(qū),再進而管理好整個文件系統(tǒng)。那么,一個塊組內,都包含些什么呢?如下所示:

【Linux】基礎IO_文件系統(tǒng)

上面提到了一個inode節(jié)點,我們知道,Linux下一切皆文件,文件=內容+屬性,Linux是將文件的內容與屬性的數(shù)據分離開來,一個inode節(jié)點內,保存文件的各種屬性信息,比如:文件的讀寫權限、擁有者、文件大小、對應的inode編號等。而文件的內容數(shù)據,則保存在date blocks中對應的一個或多個數(shù)據塊中。

這里需要注意的是:

  • 在文件的inode中,不包含文件名
  • 目錄也是文件,也有自己的inode編號,其中目錄的數(shù)據塊中存放的則是該目錄下的文件名與對應的inode編號的映射關系。兩者互為Key值。
  • inode編號只在該分組所在的分區(qū)內有效。通過inode編號,就可以先確定所在分區(qū),再確定所在分組。
  • 一個文件對應一個inode編號。任何文件,都在處于一個目錄內。所以可以先通過inode Table找到目錄的inode編號,找到inode編號,就找到了inode節(jié)點,節(jié)點內記載著各種屬性,進而找到Block Bitmap的使用情況,根據Block Bitmap再來確定目錄所使用的數(shù)據塊,目錄的數(shù)據塊內包含目錄下的文件名與文件的inode編號的映射關系,從而找到目錄下的某一個具體文件。

我們通過指令ls -l -i查看文件的inode編號

【Linux】基礎IO_文件系統(tǒng)

磁盤文件的創(chuàng)建與刪除

文件創(chuàng)建

  1. 對于文件的創(chuàng)建,首先會找到一個空閑的inode節(jié)點,將文件屬性記錄在該節(jié)點內,同時將該inode節(jié)點對應的inode Bitmap的比特位由0置1
  2. 尋找空閑的數(shù)據塊,用來存儲文件的相關內容,并將數(shù)據塊的相關信息填入inode節(jié)點中,同時將對應的BlockBitmap由0置1
  3. 將該文件名添加到當前目錄文件的Dateblock中,并將該文件名與對應的inode編號連接起來。

文件刪除

  • 文件的刪除,其實只需要對位圖信息進行修改即可
  • 首先根據文件所在的目錄。目錄中的dateBlock記載著該目錄下的文件名與inode編號的映射關系,根據映射關系,找到該文件對應的inode
  • 根據inode,將對應的BlockBitmap由1置0(刪除內容)
  • 再根據inode,將對應的inodeBitmap由1置0。(刪除屬性)

也就是說,假如我們的文件被誤刪除的話,是有一定希望可以進行恢復,只需要將該文件的inode編號對應的位圖信息由0恢復成1即可。當然,這種恢復技術還是由專業(yè)人員來進行操作,我們只要保證刪除文件的inode編號不被其它文件使用即可。

對于其它的一些補充

補充一、

我們知道,在文件的inode節(jié)點中,記載了數(shù)據塊的相關使用信息,可能是用一個數(shù)組來記載,但是此時可能會面臨一個問題,就是假如一個文件使用了15個數(shù)據塊,而一個數(shù)據塊的大小為4kb,也是不是意味著該文件最多能放入15*4=60kb的內容?

答案是否定的,因為數(shù)據塊里面有的可能并不是放著文件的內容,而是存放著該文件使用的其它數(shù)據塊的索引。(有點類似套娃)如下所示:

【Linux】基礎IO_文件系統(tǒng)

?如上所示,一個數(shù)據塊內,可能存在多級的索引關系,從而實現(xiàn)對大量數(shù)據的存儲。

補充二、

如上所說,文件的內容采用數(shù)據塊存儲,而一個數(shù)據塊的大小為4kb,那么就可能會出現(xiàn)文件系統(tǒng)中存在大量的,內容非常少導致實際使用的空間很?。赡懿艓讉€字節(jié),甚至更?。藭r就會出現(xiàn)大量的空間浪費。

實際上假如出現(xiàn)這種情況,確實會出現(xiàn)空間浪費的情況。但是為什么我們不選擇將數(shù)據塊大小設置為1kb呢?實際上這樣做雖然可以處理,但是對于大型文件,就會占用更多的數(shù)據塊,inode也要記錄更多的所使用的數(shù)據塊情況。此時就可能造成文件系統(tǒng)讀寫性能不佳,定義成4kb的原因最主要還是由于普適性。并且如今的磁盤空間容量都比較大,所以一般都是采用4kb的大小來定義一個數(shù)據塊。


end.

生活原本沉悶,但跑起來就會有風!??文章來源地址http://www.zghlxwxcb.cn/news/detail-445482.html

到了這里,關于【Linux】基礎IO_文件系統(tǒng)的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!

本文來自互聯(lián)網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • 【Linux】基礎IO——文件系統(tǒng)|軟硬鏈接|動靜態(tài)庫

    【Linux】基礎IO——文件系統(tǒng)|軟硬鏈接|動靜態(tài)庫

    基于上篇博客所寫到的文件各種操作都是基于被打開文件所進行操作的,那么如果一個文件沒有被打開它存在哪里呢?這個答案毫無疑問肯定是存在于磁盤上的。那么,對于一個沒有打開的文件(也就是磁盤文件)我們應該如何理解呢? 這里我們所要講的磁盤是機械硬盤、即

    2024年02月04日
    瀏覽(21)
  • 【Linux】基礎 IO(文件系統(tǒng) & inode & 軟硬鏈接)-- 詳解

    【Linux】基礎 IO(文件系統(tǒng) & inode & 軟硬鏈接)-- 詳解

    1、前言 我們一直都在說打開的文件,磁盤中包含了上百萬個文件,肯定不可能都是以打開的方式存在。其實文件包含打開的文件和普通的未打開的文件,下面重點談談未打開的文件。 我們知道打開的文件是通過操作系統(tǒng)被進程打開,一旦打開,操作系統(tǒng)就要維護多個文件,

    2024年03月21日
    瀏覽(30)
  • 【Linux后端服務器開發(fā)】基礎IO與文件系統(tǒng)

    【Linux后端服務器開發(fā)】基礎IO與文件系統(tǒng)

    目錄 一、基礎IO 1. C語言文件讀寫 2. 標志位傳參 3. C語言與系統(tǒng)調用關系 二、文件系統(tǒng) 1. 文件描述符 2. 輸入輸出重定向 文件調用 庫函數(shù)接口: fopen、fclose、fwrite、fread、fseek 系統(tǒng)調用接口:open、close、write、read、lseek r/w/a :讀/寫/追加 若打開的文件不存在,“r”報錯,“

    2024年02月15日
    瀏覽(24)
  • [Linux]基礎IO詳解(系統(tǒng)文件I/O接口、文件描述符、理解重定向)

    [Linux]基礎IO詳解(系統(tǒng)文件I/O接口、文件描述符、理解重定向)

    ? ? ? ? hello,大家好,這里是bang___bang_ ,今天和大家談談Linux中的基礎IO,包含內容有對應的系統(tǒng)文件I/O接口,文件描述符,理解重定向。 ?? 目錄 1??初識文件 2?? 系統(tǒng)文件I/O接口 ??open ??write ??read ??close 3??文件描述符 ??012 ??內核中文件描述符的探究 ??分配

    2024年02月12日
    瀏覽(20)
  • Linux 文件-基礎IO

    Linux 文件-基礎IO

    文件=內容+屬性 1 所有對文件的操作可分為兩類:a 對內容操作 b 對屬性操作 2 內容是數(shù)據,屬性也是數(shù)據,存儲文件必須既要存儲內容,也要存儲屬性數(shù)據 ? ?默認文件在磁盤上 3 進程訪問一個文件的時候,都要先把這個文件打開 ? ?打開前:普通的磁盤文件 ? ?打開后:將

    2024年02月22日
    瀏覽(20)
  • 【Linux】 基礎IO——文件(下)

    【Linux】 基礎IO——文件(下)

    修改test.c文件內容 運行可執(zhí)行程序, 發(fā)現(xiàn)文件描述符返回的是3 但為啥是3,不是0 ,1,2 任何一個進程,在啟動的時候,默認會打開當前進程的三個文件: 標準輸入、標準輸出、標準錯誤 ——本質都是文件 C語言:標準輸入(stdin) 標準輸出(stdout) 、標準錯誤(stderr) ——文件在

    2023年04月10日
    瀏覽(21)
  • Linux 基礎IO(2)磁盤文件

    Linux 基礎IO(2)磁盤文件

    扇區(qū):整個盤片分成不同的區(qū)塊,每一個區(qū)塊就是一個扇區(qū)。 扇區(qū)是磁盤IO的基本單位,一般為 512Byte 或 4KB , 一般磁盤都是512Byte 磁道:同一半徑一圈區(qū)域是磁道 磁盤讀寫依靠的是磁頭,盤面高速旋轉,磁頭來回擺動。 首先,確定在那個盤面,也就是 磁頭 head , 其次,磁頭

    2024年04月28日
    瀏覽(21)
  • 【Linux】基礎 IO(文件描述符)-- 詳解

    【Linux】基礎 IO(文件描述符)-- 詳解

    1、 文件的宏觀理解 文件在哪呢? 從廣義上理解,鍵盤、顯示器、網卡、聲卡、顯卡、磁盤等幾乎所有的外設都可以稱之為文件,因為 “Linux 下,一切皆文件”。 從狹義上的理解, 文件在 磁盤(硬件) 上放著 ,只有操作系統(tǒng)才能真正的去訪問磁盤。磁盤是一種永久存儲介

    2024年03月24日
    瀏覽(22)
  • Linux基礎IO【文件理解與操作】

    Linux基礎IO【文件理解與操作】

    ?個人主頁: Yohifo ??所屬專欄: Linux學習之旅 ??每篇一句: 圖片來源 ??操作環(huán)境: CentOS 7.6 阿里云遠程服務器 Great minds discuss ideas. Average minds discuss events. Small minds discuss people. 大智論道,中智論事,小智論人。 文件操作是 基礎IO 學習的第一步,我們在 C語言 進階中,就

    2024年02月02日
    瀏覽(29)
  • Linux(基礎IO、文件權限、Makefile)

    Linux(基礎IO、文件權限、Makefile)

    目錄 1、man 手冊 1.1 漢化 1.2 具體使用 2、文件權限 2.1 權限理解 2.2 文件詳細信息查詢 2.3 權限更改 3、常用函數(shù)接口 3.1 open 3.2 read 3.3?write 3.4?close 3.5 函數(shù)使用示例 4、make與Makefile 4.1 make 與 Makefile區(qū)別 4.2 Makefile的編寫 5、vim簡單操作 安裝中文包 使用三種方式查詢open接口的詳

    2024年02月11日
    瀏覽(42)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包