<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Linux文件系統(tǒng)究竟是怎么工作的?

          共 14261字,需瀏覽 29分鐘

           ·

          2021-08-23 16:39

          點(diǎn)擊上方“程序員大白”,選擇“星標(biāo)”公眾號(hào)

          重磅干貨,第一時(shí)間送達(dá)

          鏈接:https://time.geekbang.org/column/article/76876

          和 CPU、內(nèi)存一樣,磁盤(pán)和文件系統(tǒng)的管理,也是操作系統(tǒng)最核心的功能。

          磁盤(pán)為系統(tǒng)提供了最基本的持久化存儲(chǔ)。

          文件系統(tǒng)則在磁盤(pán)的基礎(chǔ)上,提供了一個(gè)用來(lái)管理文件的樹(shù)狀結(jié)構(gòu)。

          那么,磁盤(pán)和文件系統(tǒng)是怎么工作的呢?又有哪些指標(biāo)可以衡量它們的性能呢?

          索引節(jié)點(diǎn)和目錄項(xiàng)

          文件系統(tǒng),本身是對(duì)存儲(chǔ)設(shè)備上的文件,進(jìn)行組織管理的機(jī)制。組織方式不同,就會(huì)形成不同的文件系統(tǒng)。

          我們要記住最重要的一點(diǎn),在 Linux 中一切皆文件。不僅普通的文件和目錄,就連塊設(shè)備、 套接字、管道等,也都要通過(guò)統(tǒng)一的文件系統(tǒng)來(lái)管理。

          為了方便管理,Linux 文件系統(tǒng)為每個(gè)文件都分配兩個(gè)數(shù)據(jù)結(jié)構(gòu),索引節(jié)點(diǎn)(index node)和目錄項(xiàng)(directory entry)。它們主要用來(lái)記錄文件的元信息和目錄結(jié)構(gòu)。

          索引節(jié)點(diǎn),簡(jiǎn)稱(chēng)為 inode,用來(lái)記錄文件的元數(shù)據(jù),比如 inode 編號(hào)、文件大小、訪(fǎng)問(wèn) 權(quán)限、修改日期、數(shù)據(jù)的位置等。索引節(jié)點(diǎn)和文件一一對(duì)應(yīng),它跟文件內(nèi)容一樣,都會(huì) 被持久化存儲(chǔ)到磁盤(pán)中。所以記住,索引節(jié)點(diǎn)同樣占用磁盤(pán)空間。

          目錄項(xiàng),簡(jiǎn)稱(chēng)為 dentry,用來(lái)記錄文件的名字、索引節(jié)點(diǎn)指針以及與其他目錄項(xiàng)的關(guān)聯(lián) 關(guān)系。多個(gè)關(guān)聯(lián)的目錄項(xiàng),就構(gòu)成了文件系統(tǒng)的目錄結(jié)構(gòu)。不過(guò),不同于索引節(jié)點(diǎn),目錄項(xiàng)是由內(nèi)核維護(hù)的一個(gè)內(nèi)存數(shù)據(jù)結(jié)構(gòu),所以通常也被叫做目錄項(xiàng)緩存。

          換句話(huà)說(shuō),索引節(jié)點(diǎn)是每個(gè)文件的唯一標(biāo)志,而目錄項(xiàng)維護(hù)的正是文件系統(tǒng)的樹(shù)狀結(jié)構(gòu)。目錄項(xiàng)和索引節(jié)點(diǎn)的關(guān)系是多對(duì)一,你可以簡(jiǎn)單理解為,一個(gè)文件可以有多個(gè)別名。

          舉個(gè)例子,通過(guò)硬鏈接為文件創(chuàng)建的別名,就會(huì)對(duì)應(yīng)不同的目錄項(xiàng),不過(guò)這些目錄項(xiàng)本質(zhì)上還是鏈接同一個(gè)文件,所以,它們的索引節(jié)點(diǎn)相同。

          索引節(jié)點(diǎn)和目錄項(xiàng)紀(jì)錄了文件的元數(shù)據(jù),以及文件間的目錄關(guān)系,那么具體來(lái)說(shuō),文件數(shù)據(jù)到底是怎么存儲(chǔ)的呢?是不是直接寫(xiě)到磁盤(pán)中就好了呢?

          實(shí)際上,磁盤(pán)讀寫(xiě)的最小單位是扇區(qū),然而扇區(qū)只有 512B 大小,如果每次都讀寫(xiě)這么小的單位,效率一定很低。所以,文件系統(tǒng)又把連續(xù)的扇區(qū)組成了邏輯塊,然后每次都以邏 輯塊為最小單元,來(lái)管理數(shù)據(jù)。常見(jiàn)的邏輯塊大小為 4KB,也就是由連續(xù)的 8 個(gè)扇區(qū)組成。

          為了幫助我們理解目錄項(xiàng)、索引節(jié)點(diǎn)以及文件數(shù)據(jù)的關(guān)系,畫(huà)了一張示意圖。我們可以對(duì)照著這張圖,來(lái)回憶剛剛講過(guò)的內(nèi)容,把知識(shí)和細(xì)節(jié)串聯(lián)起來(lái)。

          不過(guò),這里有兩點(diǎn)需要我們注意:

          第一,目錄項(xiàng)本身就是一個(gè)內(nèi)存緩存,而索引節(jié)點(diǎn)則是存儲(chǔ)在磁盤(pán)中的數(shù)據(jù)。在前面的 Buffer 和 Cache 原理中,我曾經(jīng)提到過(guò),為了協(xié)調(diào)慢速磁盤(pán)與快速 CPU 的性能差異,文 件內(nèi)容會(huì)緩存到頁(yè)緩存 Cache 中。那么,我們也應(yīng)該想到,這些索引節(jié)點(diǎn)自然也會(huì)緩存到內(nèi)存中,加速文件的訪(fǎng)問(wèn)。

          第二,磁盤(pán)在執(zhí)行文件系統(tǒng)格式化時(shí),會(huì)被分成三個(gè)存儲(chǔ)區(qū)域,超級(jí)塊、索引節(jié)點(diǎn)區(qū)和數(shù)

          據(jù)塊區(qū)。其中,

          超級(jí)塊,存儲(chǔ)整個(gè)文件系統(tǒng)的狀態(tài)。

          索引節(jié)點(diǎn)區(qū),用來(lái)存儲(chǔ)索引節(jié)點(diǎn)。

          數(shù)據(jù)塊區(qū),則用來(lái)存儲(chǔ)文件數(shù)據(jù)。

          虛擬文件系統(tǒng)

          目錄項(xiàng)、索引節(jié)點(diǎn)、邏輯塊以及超級(jí)塊,構(gòu)成了 Linux 文件系統(tǒng)的四大基本要素。不過(guò), 為了支持各種不同的文件系統(tǒng),Linux 內(nèi)核在用戶(hù)進(jìn)程和文件系統(tǒng)的中間,又引入了一個(gè)抽象層,也就是虛擬文件系統(tǒng) VFS(Virtual File System)。

          VFS 定義了一組所有文件系統(tǒng)都支持的數(shù)據(jù)結(jié)構(gòu)和標(biāo)準(zhǔn)接口。這樣,用戶(hù)進(jìn)程和內(nèi)核中的其他子系統(tǒng),只需要跟 VFS 提供的統(tǒng)一接口進(jìn)行交互就可以了,而不需要再關(guān)心底層各種文件系統(tǒng)的實(shí)現(xiàn)細(xì)節(jié)。

          這里,下圖是 Linux 文件系統(tǒng)的架構(gòu)圖,幫我們更好地理解系統(tǒng)調(diào)用、VFS、緩存、文 件系統(tǒng)以及塊存儲(chǔ)之間的關(guān)系。

          通過(guò)這張圖,可以看到,在 VFS 的下方,Linux 支持各種各樣的文件系統(tǒng),如 Ext4、 XFS、NFS 等等。按照存儲(chǔ)位置的不同,這些文件系統(tǒng)可以分為三類(lèi)。

          第一類(lèi)是基于磁盤(pán)的文件系統(tǒng),也就是把數(shù)據(jù)直接存儲(chǔ)在計(jì)算機(jī)本地掛載的磁盤(pán)中。常見(jiàn)的 Ext4、XFS、OverlayFS 等,都是這類(lèi)文件系統(tǒng)。

          第二類(lèi)是基于內(nèi)存的文件系統(tǒng),也就是我們常說(shuō)的虛擬文件系統(tǒng)。這類(lèi)文件系統(tǒng),不需要任何磁盤(pán)分配存儲(chǔ)空間,但會(huì)占用內(nèi)存。我們經(jīng)常用到的 /proc 文件系統(tǒng),其實(shí)就是 一種最常見(jiàn)的虛擬文件系統(tǒng)。此外,/sys 文件系統(tǒng)也屬于這一類(lèi),主要向用戶(hù)空間導(dǎo)出層次化的內(nèi)核對(duì)象。

          第三類(lèi)是網(wǎng)絡(luò)文件系統(tǒng),也就是用來(lái)訪(fǎng)問(wèn)其他計(jì)算機(jī)數(shù)據(jù)的文件系統(tǒng),比如 NFS、 SMB、iSCSI 等。

          這些文件系統(tǒng),要先掛載到 VFS 目錄樹(shù)中的某個(gè)子目錄(稱(chēng)為掛載點(diǎn)),然后才能訪(fǎng)問(wèn)其中的文件。拿第一類(lèi),也就是基于磁盤(pán)的文件系統(tǒng)為例,在安裝系統(tǒng)時(shí),要先掛載一個(gè)根 目錄(/),在根目錄下再把其他文件系統(tǒng)(比如其他的磁盤(pán)分區(qū)、/proc 文件系統(tǒng)、/sys 文件系統(tǒng)、NFS 等)掛載進(jìn)來(lái)。


          文件系統(tǒng) I/O

          把文件系統(tǒng)掛載到掛載點(diǎn)后,你就能通過(guò)掛載點(diǎn),再去訪(fǎng)問(wèn)它管理的文件了。VFS 提供了一組標(biāo)準(zhǔn)的文件訪(fǎng)問(wèn)接口。這些接口以系統(tǒng)調(diào)用的方式,提供給應(yīng)用程序使用。

          就拿 cat 命令來(lái)說(shuō),它首先調(diào)用 open() ,打開(kāi)一個(gè)文件;然后調(diào)用 read() ,讀取文件的內(nèi)容;最后再調(diào)用 write() ,把文件內(nèi)容輸出到控制臺(tái)的標(biāo)準(zhǔn)輸出中:

          int open(const char *pathname, int flags, mode_t mode)
          ssize_t read(int fd, void *buf, size_t count);
          ssize_t write(int fd, const void *buf, size_t count);

          文件讀寫(xiě)方式的各種差異,導(dǎo)致 I/O 的分類(lèi)多種多樣。最常見(jiàn)的有,緩沖與非緩沖 I/O、 直接與非直接 I/O、阻塞與非阻塞 I/O、同步與異步 I/O 等。接下來(lái),我們就詳細(xì)看這四種分類(lèi)。

          第一種,根據(jù)是否利用標(biāo)準(zhǔn)庫(kù)緩存,可以把文件 I/O 分為緩沖 I/O 與非緩沖 I/O。

          緩沖 I/O,是指利用標(biāo)準(zhǔn)庫(kù)緩存來(lái)加速文件的訪(fǎng)問(wèn),而標(biāo)準(zhǔn)庫(kù)內(nèi)部再通過(guò)系統(tǒng)調(diào)度訪(fǎng)問(wèn)文件。

          非緩沖 I/O,是指直接通過(guò)系統(tǒng)調(diào)用來(lái)訪(fǎng)問(wèn)文件,不再經(jīng)過(guò)標(biāo)準(zhǔn)庫(kù)緩存。

          注意,這里所說(shuō)的“緩沖”,是指標(biāo)準(zhǔn)庫(kù)內(nèi)部實(shí)現(xiàn)的緩存。比方說(shuō),你可能見(jiàn)到過(guò),很多程序遇到換行時(shí)才真正輸出,而換行前的內(nèi)容,其實(shí)就是被標(biāo)準(zhǔn)庫(kù)暫時(shí)緩存了起來(lái)。

          無(wú)論緩沖 I/O 還是非緩沖 I/O,它們最終還是要經(jīng)過(guò)系統(tǒng)調(diào)用來(lái)訪(fǎng)問(wèn)文件。我們知道,系統(tǒng)調(diào)用后,還會(huì)通過(guò)頁(yè)緩存,來(lái)減少磁盤(pán)的 I/O 操作。

          第二,根據(jù)是否利用操作系統(tǒng)的頁(yè)緩存,可以把文件 I/O 分為直接 I/O 與非直接 I/O。

          直接 I/O,是指跳過(guò)操作系統(tǒng)的頁(yè)緩存,直接跟文件系統(tǒng)交互來(lái)訪(fǎng)問(wèn)文件。

          非直接 I/O 正好相反,文件讀寫(xiě)時(shí),先要經(jīng)過(guò)系統(tǒng)的頁(yè)緩存,然后再由內(nèi)核或額外的系統(tǒng)調(diào)用,真正寫(xiě)入磁盤(pán)。

          想要實(shí)現(xiàn)直接 I/O,需要你在系統(tǒng)調(diào)用中,指定 O_DIRECT 標(biāo)志。如果沒(méi)有設(shè)置過(guò),默認(rèn) 的是非直接 I/O。

          不過(guò)要注意,直接 I/O、非直接 I/O,本質(zhì)上還是和文件系統(tǒng)交互。如果是在數(shù)據(jù)庫(kù)等場(chǎng)景中,還會(huì)看到,跳過(guò)文件系統(tǒng)讀寫(xiě)磁盤(pán)的情況,也就是我們通常所說(shuō)的裸 I/O。

          第三,根據(jù)應(yīng)用程序是否阻塞自身運(yùn)行,可以把文件 I/O 分為阻塞 I/O 和非阻塞 I/O

          所謂阻塞 I/O,是指應(yīng)用程序執(zhí)行 I/O 操作后,如果沒(méi)有獲得響應(yīng),就會(huì)阻塞當(dāng)前線(xiàn)程,自然就不能執(zhí)行其他任務(wù)。

          所謂非阻塞 I/O,是指應(yīng)用程序執(zhí)行 I/O 操作后,不會(huì)阻塞當(dāng)前的線(xiàn)程,可以繼續(xù)執(zhí)行其他的任務(wù),隨后再通過(guò)輪詢(xún)或者事件通知的形式,獲取調(diào)用的結(jié)果。

          比方說(shuō),訪(fǎng)問(wèn)管道或者網(wǎng)絡(luò)套接字時(shí),設(shè)置 O_NONBLOCK 標(biāo)志,就表示用非阻塞方式訪(fǎng)問(wèn);而如果不做任何設(shè)置,默認(rèn)的就是阻塞訪(fǎng)問(wèn)。

          第四,根據(jù)是否等待響應(yīng)結(jié)果,可以把文件 I/O 分為同步和異步 I/O

          所謂同步 I/O,是指應(yīng)用程序執(zhí)行 I/O 操作后,要一直等到整個(gè) I/O 完成后,才能獲得 I/O 響應(yīng)。

          所謂異步 I/O,是指應(yīng)用程序執(zhí)行 I/O 操作后,不用等待完成和完成后的響應(yīng),而是繼續(xù)執(zhí)行就可以。等到這次 I/O 完成后,響應(yīng)會(huì)用事件通知的方式,告訴應(yīng)用程序。

          例如,在操作文件時(shí),如果設(shè)置了 O_SYNC 或者 O_DSYNC 標(biāo)志,就代表同步 I/O。如果設(shè)置了 O_DSYNC,就要等文件數(shù)據(jù)寫(xiě)入磁盤(pán)后,才能返回;而 O_SYNC,則是在 O_DSYNC 基礎(chǔ)上,要求文件元數(shù)據(jù)也要寫(xiě)入磁盤(pán)后,才能返回。

          再比如,在訪(fǎng)問(wèn)管道或者網(wǎng)絡(luò)套接字時(shí),設(shè)置了 O_ASYNC 選項(xiàng)后,相應(yīng)的 I/O 就是異步I/O。這樣,內(nèi)核會(huì)再通過(guò) SIGIO 或者 SIGPOLL,來(lái)通知進(jìn)程文件是否可讀寫(xiě)。

          我們可能發(fā)現(xiàn)了,這里的好多概念也經(jīng)常出現(xiàn)在網(wǎng)絡(luò)編程中。比如非阻塞 I/O,通常會(huì)跟 select/poll 配合,用在網(wǎng)絡(luò)套接字的 I/O 中。

          這下我們也應(yīng)該可以理解,“Linux 一切皆文件”的深刻含義。無(wú)論是普通文件和塊設(shè)備、還是網(wǎng)絡(luò)套接字和管道等,它們都通過(guò)統(tǒng)一的 VFS 接口來(lái)訪(fǎng)問(wèn)。

          性能觀測(cè)

          接下來(lái),打開(kāi)一個(gè)終端,SSH 登錄到服務(wù)器上,我們一起來(lái)探索,如何觀測(cè)文件系統(tǒng)的性能。

          容量

          對(duì)文件系統(tǒng)來(lái)說(shuō),最常見(jiàn)的一個(gè)問(wèn)題就是空間不足。當(dāng)然,你可能本身就知道,用 df 命 令,就能查看文件系統(tǒng)的磁盤(pán)空間使用情況。比如:

          df /dev/vda1
          文件系統(tǒng)           1K-塊         已用         可用        已用%    掛載點(diǎn)
          /dev/vda1      104846316     28228044     76618272      27%     /

          可以看到,我的根文件系統(tǒng)只使用了 27% 的空間。這里還要注意,總空間用 1K- 快 的數(shù)量來(lái)表示,你可以給 df 加上 -h 選項(xiàng),以獲得更好的可讀性:

          df -h /dev/vda1
           文件系統(tǒng)         容量     已用     可用   已用%   掛載點(diǎn)
          /dev/vda1       100G     27G      74G   27%     /

          不過(guò)有時(shí)候,明明碰到了空間不足的問(wèn)題,可是用 df 查看磁盤(pán)空間后,卻發(fā)現(xiàn)剩余空間還有很多。這是怎么回事呢?

          其實(shí)除了文件數(shù)據(jù),索引節(jié)點(diǎn)也占用磁盤(pán)空間??梢越o df 命令加上 -i 參數(shù),查看索引節(jié)點(diǎn)的使用情況,如下所示:

          df -h -i /dev/vda1
          文件系統(tǒng)         Inode    已用(I)   可用(I)   已用(I)%  掛載點(diǎn)
          /dev/vda1        50M     162K     50M        1%       /

          索引節(jié)點(diǎn)的容量,(也就是 Inode 個(gè)數(shù))是在格式化磁盤(pán)時(shí)設(shè)定好的,一般由格式化工具自動(dòng)生成。當(dāng)發(fā)現(xiàn)索引節(jié)點(diǎn)空間不足,但磁盤(pán)空間充足時(shí),很可能就是過(guò)多小文件導(dǎo)致的。

          所以,一般來(lái)說(shuō),刪除這些小文件,或者把它們移動(dòng)到索引節(jié)點(diǎn)充足的其他磁盤(pán)中,就可以解決這個(gè)問(wèn)題。

          緩存

          可以用 free 或 vmstat,來(lái)觀察頁(yè)緩存的大小。free 輸出的 Cache,是頁(yè)緩存和可回收 Slab 緩存的和,你可以從 /proc/meminfo ,直接得到它們的大?。?/span>

          cat /proc/meminfo | grep -E "SReclaimable|Cached"
          Cached:          2014100 kB
          SwapCached:         5316 kB
          SReclaimable:     216128 kB

          話(huà)說(shuō)回來(lái),文件系統(tǒng)中的目錄項(xiàng)和索引節(jié)點(diǎn)緩存,又該如何觀察呢?

          實(shí)際上,內(nèi)核使用 Slab 機(jī)制,管理目錄項(xiàng)和索引節(jié)點(diǎn)的緩存。/proc/meminfo 只給出了 Slab 的整體大小,具體到每一種 Slab 緩存,還要查看 /proc/slabinfo 這個(gè)文件。

          比如,運(yùn)行下面的命令,你就可以得到,所有目錄項(xiàng)和各種文件系統(tǒng)索引節(jié)點(diǎn)的緩存情況:

          # name <active_objs> <num_objs> <objsize> <objperslab> <pagesperslab> : tunab
          cat /proc/slabinfo | grep -E '^#|dentry|inode'
          # name            <active_objs> <num_objs> <objsize> <objperslab> <pagesperslab> : tunables <limit> <batchcount> <sharedfactor> : slabdata <active_slabs> <num_slabs> <sharedavail>
          ovl_inode             66     66    736   22    4 : tunables    0    0    0 : slabdata      3      3      0
          fuse_inode             0      0    832   19    4 : tunables    0    0    0 : slabdata      0      0      0
          xfs_inode         100470 110736   1024   16    4 : tunables    0    0    0 : slabdata   6921   6921      0
          mqueue_inode_cache     64     64   1024   16    4 : tunables    0    0    0 : slabdata      4      4      0
          hugetlbfs_inode_cache     48     48    680   24    4 : tunables    0    0    0 : slabdata      2      2      0
          sock_inode_cache    4581   4807    704   23    4 : tunables    0    0    0 : slabdata    209    209      0
          shmem_inode_cache   1816   2541    760   21    4 : tunables    0    0    0 : slabdata    121    121      0
          proc_inode_cache   10210  13024    728   22    4 : tunables    0    0    0 : slabdata    592    592      0
          inode_cache        36498  38832    656   24    4 : tunables    0    0    0 : slabdata   1618   1618      0
          dentry            150086 183204    192   21    1 : tunables    0    0    0 : slabdata   8724   8724      0

          這個(gè)界面中,dentry 行表示目錄項(xiàng)緩存,inode_cache 行,表示 VFS 索引節(jié)點(diǎn)緩存,其 余的則是各種文件系統(tǒng)的索引節(jié)點(diǎn)緩存。

          /proc/slabinfo 的列比較多,具體含義可以查詢(xún) man slabinfo。在實(shí)際性能分析中,我們更常使用 slabtop ,來(lái)找到占用內(nèi)存最多的緩存類(lèi)型。

          比如,下面就是運(yùn)行 slabtop 得到的結(jié)果:

          # 按下 c 按照緩存大小排序,按下 a 按照活躍對(duì)象數(shù)排序 
          slabtop
          Active / Total Objects (% used)    : 991123 / 1087653 (91.1%)
           Active / Total Slabs (% used)      : 40627 / 40627 (100.0%)
           Active / Total Caches (% used)     : 103 / 138 (74.6%)
           Active / Total Size (% used)       : 329426.37K / 371563.66K (88.7%)
           Minimum / Average / Maximum Object : 0.01/ 0.34K / 8.00K

           OBJS  ACTIVE   USE OBJ SIZE  SLABS OBJ/SLAB CACHE SIZE    NAME                   
          183204 150026   81%    0.19K   8724      21       34896K    dentry
           38832  36498   93%    0.64K   1618      24       25888K    inode_cache
          ....
            6174   6009   97%    0.19K   294      21       1176K    cred_jar
            6066   5878   96%    0.44K   337      18       2696K    xfrm_dst_cache
            5950   5950   100%   0.02K   35      170      140K     avtab_node
            4807   4581   95%    0.69K   209      23       3344K    sock_inode_cache
            3948   3812   96%    1.12K   141      28       4512K    signal_cache
            3744   3680   98%    0.25K   234      16       936K     skbuff_head_cache
            3634   3634   100%   0.09K   79      46       316K     trace_event_file

          從這個(gè)結(jié)果你可以看到,在我的系統(tǒng)中,目錄項(xiàng)(dentry)和索引節(jié)點(diǎn)(inode_cache)占用了最多的 Slab 緩存。不 過(guò)它們占用的內(nèi)存其實(shí)并不大,加起來(lái)也只有 60MB 左右。

          總結(jié)

          文件系統(tǒng),是對(duì)存儲(chǔ)設(shè)備上的文件,進(jìn)行組織管理的一種機(jī)制。為了支持各類(lèi)不同的文件系統(tǒng),Linux 在各種文件系統(tǒng)實(shí)現(xiàn)上,抽象了一層虛擬文件系統(tǒng)(VFS)。

          VFS 定義了一組所有文件系統(tǒng)都支持的數(shù)據(jù)結(jié)構(gòu)和標(biāo)準(zhǔn)接口。這樣,用戶(hù)進(jìn)程和內(nèi)核中的其他子系統(tǒng),就只需要跟 VFS 提供的統(tǒng)一接口進(jìn)行交互。

          為了降低慢速磁盤(pán)對(duì)性能的影響,文件系統(tǒng)又通過(guò)頁(yè)緩存、目錄項(xiàng)緩存以及索引節(jié)點(diǎn)緩存,緩和磁盤(pán)延遲對(duì)應(yīng)用程序的影響。

          “拍一拍” 能撤回了 ?。?!

          5款Chrome插件,第1款絕對(duì)良心!

          為開(kāi)發(fā)色情游戲,這家公司赴日尋找AV女優(yōu)拍攝,期望暴力賺錢(qián)結(jié)果...

          拼多多終于釀成慘劇

          華為阿里下班時(shí)間曝光:所有的光鮮,都有加班的味道


          關(guān)


          ,學(xué),西學(xué)學(xué)運(yùn)營(yíng)護(hù)號(hào)樂(lè)質(zhì)結(jié)識(shí),關(guān)[],學(xué)習(xí)進(jìn)!


          瀏覽 79
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  天堂俺去俺来也WWW | 精品国产视频 | 午夜成人中文字幕 | 日韩不卡一区 | 亚洲AV无码在线影视 |