1. <ul id="0c1fb"></ul>

      <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
      <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区

      RELATEED CONSULTING
      相關(guān)咨詢(xún)
      選擇下列產(chǎn)品馬上在線溝通
      服務(wù)時(shí)間:8:30-17:00
      你可能遇到了下面的問(wèn)題
      關(guān)閉右側(cè)工具欄

      新聞中心

      這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷(xiāo)解決方案
      怎樣進(jìn)行Linux內(nèi)核文件系統(tǒng)的分析

      怎樣進(jìn)行Linux內(nèi)核文件系統(tǒng)的分析,相信很多沒(méi)有經(jīng)驗(yàn)的人對(duì)此束手無(wú)策,為此本文總結(jié)了問(wèn)題出現(xiàn)的原因和解決方法,通過(guò)這篇文章希望你能解決這個(gè)問(wèn)題。

      成都創(chuàng)新互聯(lián)公司主要業(yè)務(wù)有網(wǎng)站營(yíng)銷(xiāo)策劃、網(wǎng)站制作、成都網(wǎng)站建設(shè)、微信公眾號(hào)開(kāi)發(fā)、微信小程序開(kāi)發(fā)H5頁(yè)面制作、程序開(kāi)發(fā)等業(yè)務(wù)。一次合作終身朋友,是我們奉行的宗旨;我們不僅僅把客戶(hù)當(dāng)客戶(hù),還把客戶(hù)視為我們的合作伙伴,在開(kāi)展業(yè)務(wù)的過(guò)程中,公司還積累了豐富的行業(yè)經(jīng)驗(yàn)、全網(wǎng)整合營(yíng)銷(xiāo)推廣資源和合作伙伴關(guān)系資源,并逐漸建立起規(guī)范的客戶(hù)服務(wù)和保障體系。 

      Linux內(nèi)核存儲(chǔ)棧

      1. 總覽

      內(nèi)核存儲(chǔ)棧從上到下主要分為三層:1. VFS 2.Block layer 3.驅(qū)動(dòng)

      1. 簡(jiǎn)單介紹

      這張圖來(lái)自https://blog.vmsplice.net/2020/04/how-linux-vfs-block-layer-and-device.html。主要介紹了內(nèi)核中存儲(chǔ)棧幾個(gè)重要的數(shù)據(jù)結(jié)構(gòu)之間的連接關(guān)系。VFS層數(shù)據(jù)結(jié)構(gòu)struct block_device連接著快層數(shù)據(jù)結(jié)構(gòu)struct gendisk。塊層接收到VFS的請(qǐng)求發(fā)送到request_queue,驅(qū)動(dòng)最后會(huì)響應(yīng)該請(qǐng)求,操作最后的物理設(shè)備。

      怎樣進(jìn)行Linux內(nèi)核文件系統(tǒng)的分析

      2.1 VFS層

      • VFS為不同的底層文件系統(tǒng)(ext4,XFS,NFS等)提供了一個(gè)接口層。

      • open,read等系統(tǒng)調(diào)用由VFS處理,然后分發(fā)給相應(yīng)struct file_operations的處理函數(shù)。

      • 塊設(shè)備使用struct block_device表示,VFS層數(shù)據(jù)結(jié)構(gòu)。struct block_device使用塊層數(shù)據(jù)結(jié)構(gòu)struct gendisk和struct request_queue連接VFS inode和struct file_operations接口。

      • block device nodes如/dev/sda在fs/block_dev.c中實(shí)現(xiàn),提供了橋的作用,連接VFS和Linux block layer。塊層處理實(shí)際的IO請(qǐng)求,并且知道磁盤(pán)的特定信息,如磁盤(pán)容量,塊大小等。

      2.2 Block layer層

      • 每一個(gè)磁盤(pán)使用數(shù)據(jù)結(jié)構(gòu)struct gendisk表示,struct hd_struct表示磁盤(pán)分區(qū)。

      • 總是存在part0分區(qū),表示整個(gè)磁盤(pán)

      • IO請(qǐng)求隊(duì)列使用struct request_queue表示

      2.3 驅(qū)動(dòng)層

      • 磁盤(pán)設(shè)備驅(qū)動(dòng)程序向塊層注冊(cè)struct genhd,并設(shè)置struct request_queue以接收需要提交給物理設(shè)備的請(qǐng)求。

      • 即使用戶(hù)空間可能為磁盤(pán)上的多個(gè)分區(qū)打開(kāi)struct block_device實(shí)例,整個(gè)設(shè)備也只有一個(gè)struct genhd。

      • 驅(qū)動(dòng)層看不到磁盤(pán)分區(qū),因?yàn)镮O請(qǐng)求已經(jīng)根據(jù)分區(qū)的起始位置偏移做了邏輯地址的調(diào)整處理

      VFS連接著塊層struct gendisk。設(shè)備驅(qū)動(dòng)連接著塊層和VFS層struct block_device。塊層和其他兩層沒(méi)有直接聯(lián)系,只是有驅(qū)動(dòng)層注冊(cè)的回調(diào)函數(shù)。

      1. 詳細(xì)介紹

      內(nèi)核中的I/O流所經(jīng)過(guò)的組件如下圖所示:

      怎樣進(jìn)行Linux內(nèi)核文件系統(tǒng)的分析

      這里列出一張內(nèi)核中存儲(chǔ)棧中主要數(shù)據(jù)結(jié)構(gòu)之間的關(guān)聯(lián)關(guān)系圖。

      怎樣進(jìn)行Linux內(nèi)核文件系統(tǒng)的分析

      這里追蹤一個(gè)從用戶(hù)空間出發(fā)的read函數(shù)調(diào)用的數(shù)據(jù)流,來(lái)分析從內(nèi)核到驅(qū)動(dòng)最終到物理設(shè)備硬件的過(guò)程。

      3.1 內(nèi)核執(zhí)行系統(tǒng)調(diào)用sys_read響應(yīng)用戶(hù)空間的read操作。

      3.2 在VFS層調(diào)用vfs_read通用的文件系統(tǒng)read接口。這里會(huì)根據(jù)具體的文件系統(tǒng)類(lèi)型調(diào)用相應(yīng)的read函數(shù)。

      3.3 這里以ext4文件系統(tǒng)為例。會(huì)執(zhí)行ext4_file_read_iter。

      3.4 VFS層最主要的數(shù)據(jù)結(jié)構(gòu)式bio,它定義的一系列對(duì)文件操作的具體行為。在構(gòu)造了相應(yīng)的bio數(shù)據(jù)結(jié)構(gòu)后,會(huì)調(diào)用ext4_file_read_iter將請(qǐng)求提交到塊層。

      3.5 塊層收到請(qǐng)求后會(huì)根據(jù)文件系統(tǒng)是否有定義自己的submit_bio函數(shù)來(lái)調(diào)用自定義函數(shù)還是通用submit_bio。ext4文件系統(tǒng)調(diào)用的是通用submit_bio。

      3.6 塊層對(duì)于VFS的請(qǐng)求不會(huì)直接提交到設(shè)備驅(qū)動(dòng)去執(zhí)行。而是會(huì)做合并的延遲處理,因?yàn)樵谖锢泶疟P(pán)上的尋到處理是十分耗時(shí)的操作。對(duì)于可以與請(qǐng)求隊(duì)列中的請(qǐng)求進(jìn)行合并的操作,會(huì)首先進(jìn)行合并。否則會(huì)插入請(qǐng)求隊(duì)列中。內(nèi)核對(duì)于I/O調(diào)度有多種不同的算法:1.電梯調(diào)度 2. 最后期限算法 3. CFQ完全公平隊(duì)列算法 4.預(yù)期算法 5.No Operations算法。

      3.7 最后會(huì)調(diào)用驅(qū)動(dòng)的queue_rq方法,將請(qǐng)求發(fā)送給驅(qū)動(dòng)程序。不同的驅(qū)動(dòng)會(huì)注冊(cè)不同的queue_rq方法。這里以iscsi驅(qū)動(dòng)程序?yàn)槔U{(diào)用執(zhí)行scsi_queue_rq方法

      3.8 scsi_queue_rq會(huì)構(gòu)造請(qǐng)求cmd,然后調(diào)用scsi_dispatch_cmd,分發(fā)cmd到底層驅(qū)動(dòng)。

      3.9 之后根據(jù)不同的底層設(shè)備類(lèi)型,調(diào)用相應(yīng)的queuecommand函數(shù)執(zhí)行cmd命令。

      內(nèi)核的存儲(chǔ)棧中,塊層起著承上啟下的作用。北向承接VFS的發(fā)送過(guò)來(lái)的IO請(qǐng)求,南向?qū)釉O(shè)備驅(qū)動(dòng)程序,提交請(qǐng)求到設(shè)備驅(qū)動(dòng)。這當(dāng)中比較重要的幾個(gè)點(diǎn)是:1. 塊層對(duì)于I/O請(qǐng)求的合并優(yōu)化處理。這塊對(duì)于I/O的性能的影響巨大。2. 對(duì)于頁(yè)高速緩存的處理。設(shè)計(jì)到如何將磁盤(pán)數(shù)據(jù)導(dǎo)入到內(nèi)存,以及inode等數(shù)據(jù)結(jié)構(gòu)如何操作訪問(wèn)頁(yè)數(shù)據(jù)。對(duì)于很多細(xì)節(jié)好有待分析。

      看完上述內(nèi)容,你們掌握怎樣進(jìn)行Linux內(nèi)核文件系統(tǒng)的分析的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!


      文章題目:怎樣進(jìn)行Linux內(nèi)核文件系統(tǒng)的分析
      網(wǎng)頁(yè)地址:http://www.ef60e0e.cn/article/jiedci.html
      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区
      1. <ul id="0c1fb"></ul>

        <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
        <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

        凭祥市| 莱芜市| 河北区| 吴忠市| 都匀市| 吉首市| 华安县| 通州区| 横峰县| 河北省| 调兵山市| 深州市| 东乌| 陆良县| 自治县| 绥德县| 个旧市| 临沧市| 和田县| 新安县| 汽车| 亳州市| 凤凰县| 莲花县| 安岳县| 呼和浩特市| 类乌齐县| 察雅县| 通渭县| 榆树市| 巴塘县| 察隅县| 镇远县| 柏乡县| 麻江县| 济宁市| 杭州市| 松阳县| 化隆| 英德市| 玛曲县|