1. 程式人生 > >三種外存分配方式的區別

三種外存分配方式的區別

檔案分配方式分為三種:連續分配、連結分配、索引分配。其中連結分配又分為隱式連結分配和顯式連結分配;索引分配又分為單級索引分配、兩級(多級)索引分配,混合索引分配。


這裡要說的是顯式連結分配和索引分配(指單級)的區別。
連結分配的特點是已知一個物理塊位置尋找下一個物理塊位置必須通過指標進行,而且必須順序尋找。比如我們當前位於3號物理塊要去4號物理塊,必須根據3號物理塊中4號物理塊的指標(地址)尋找,而且我們下一個訪問必須是4號,而不能是5號(即使4號我們不需要)。這是連結分配的基本思想,優缺點對比連續分配很明顯,自己找就可以了,這裡不贅述。但是這種樸素的連結分配思想有一個致命的問題,就是一旦出現斷鏈,後續物理塊無法訪問,並且我們需要的物理塊不在鏈的前方時,順序尋找花費大量讀磁碟時間(讀磁碟時間遠遠大於讀記憶體時間)。所以需要對這種樸素的連結分配思想進行改造。




於是出現了顯式連結分配(樸素的連結分配也是隱式連結分配),即把所有的物理塊中的指標收集在一起統一放在記憶體的一張FAT表中(請注意是記憶體),這樣就大大減輕了樸素連結分配思想上述致命缺點,由於地址存放在一起,所以不太容易出現丟失個別地址現象,而且記憶體訪問速度快。但是這本質上仍然是連結分配,即程序給出檔案物理塊起始地址等資訊,然後根據記憶體FAT中地址的連結情況進行查詢,得到所需物理塊。在查詢過程中仍然是一個一個的順序查詢。


下面敘述索引分配的特點。顯式連結分配雖然解決了隱式連結分配的致命缺點,但仍有一些問題,主要是非直接訪問時間長(相對於CPU來說記憶體訪問還是慢),所以出現了索引分配。索引分配和顯式連結分配唯一類似之處在於它有索引表(相對於FAT),但是索引表中資料並不是連結存放,而是順序存放,也就是說在索引表中可以進行直接訪問。而在物理塊中,則是任意存放,條件是必須存索引於索引表。索引表一般存放於磁碟(與FAT不同)但在使用時可以先調入記憶體,程序需要查詢檔案時,提供的不是檔案物理塊地址,而是索引表中的索引地址,這個與顯式連結分配也不同。



總的來說,顯式連結分配是將地址連結集中在記憶體中的FAT表中,FAT表中是連結尋找;索引分配是將地址位置存放在索引表中,索引表中是直接尋找,簡單的說索引分配是連續分配和連結分配的綜合。

在顯示連結中,磁碟上有多少塊,這個FAT表就有多少項,磁碟上的塊和FAT中的項一一對應,而每項中的內容就是磁碟中對應塊的下一塊地址
換句話來說,就是對於顯式連結來說,一個磁碟中只有一塊FAT,而索引分配的話一個檔案就有一個索引表。一個磁碟中含有多個檔案就有多個索引表。
或者說,顯式連結是面向磁碟的,把每個磁碟項對應的下一塊拿出來組成一張表,而索引連結是面向檔案的,把每個檔案的幾塊的位置拿出來組成一個表。多個檔案就有多個表。


相關推薦

外存分配方式區別

檔案分配方式分為三種:連續分配、連結分配、索引分配。其中連結分配又分為隱式連結分配和顯式連結分配;索引分配又分為單級索引分配、兩級(多級)索引分配,混合索引分配。這裡要說的是顯式連結分配和索引分配(指單級)的區別。連結分配的特點是已知一個物理塊位置尋找下一個物理塊位置必須通過

理順一下C++記憶體分配方式

C/C++記憶體分配有三種方式:[1]從靜態儲存區域分配。記憶體在程式編譯的時候就已經分配好,這塊記憶體在程式的整個執行期間都存在。例如全域性變數,static變數。靜態分配的區域的生命期是整個軟體執行期,就是說從軟體執行開始到軟體終止退出。只有軟體終止執行後,這塊記憶體才會被系統回收[2]在棧上建立。在執行

linux網路連線方式區別

1、橋接:虛擬機器通過本機的真實網絡卡和主機進行通訊。不僅可以和你的本機進行通訊,如果區域網內有同網段的計算機,也可以進行通訊。不過需要佔用同網段的一個ip地址。 2、NAT:虛擬機器通過VMware-8這塊虛擬出來的網絡卡和你的本機進行通訊。 3、host-only:虛擬機器通過VMware-1這

Java記憶體分配策略:靜態的.棧式的和堆式的區別

我的想法是(應該說代表TIJ的觀點),如果沒有Garbage Collector(GC),上面的說法就是成立的.堆不象棧是連續的空間,沒有辦法指望堆本身的記憶體分配能夠象堆疊一樣擁有傳送帶般的速度,因為,誰會為你整理龐大的堆空間,讓你幾乎沒有延遲的從堆中獲取新的空間呢?這個時候,GC站出來解決問題.我們都知道

Jsp-賦值方式、include指令和動作元素的區別

一、三種賦值方式 1.value 說明:最直接的賦值方式 value賦值<br/> <jsp:useBean id="ls" class="model.Employee" scope="session" /> <jsp:s

同一功能不同實現方式你選哪個

img com png 指令 con 段落 gin 表示 alt 例題一枚:在input框中輸入內容,會相應的顯示在下面的div中的不同做法: <!DOCTYPE html> <html> <head> &

集合的遍歷方式

叠代器 whl print 循環 下一個 sys 三種 iterator for 1、for循環 代碼實現: for(int i=0;i<list.size();i++){ product p=list.get(i); System.println(p); } 2、叠

java中循環的區別

一次 for ava 循環 初始 條件 如果 -- pre while(條件){循環體}先判斷條件,滿足就執行循環體,不滿足則退出;do{循環體}while(條件)先執行一次循環體,再判斷條件,如果條件滿足,繼續執行,不滿足,退出循環,最少執行一次;for(<初始化&

redis連接方式

root用戶 存在 number base 配置 bash 更改 拷貝 title 安裝 tar zxvf redis-2.8.9.tar.gz cd redis-2.8.9 #直接make 編譯 make #可使用root用戶執行`make install`,將可執行文件

LVS:負載均衡方式比較+另負載均衡方式

bytes com 方式 工作 domain rtu href 端口號 速度 轉:http://blog.csdn.net/u013256816/article/details/50705578 什麽是LVS? ??首先簡單介紹一下LVS (Linux Virtual

設計模式:單例模式的創建方式及其各自的優缺點

singleton dmi 創建 檢查 public pos return style tin 單例模式: 確保一個類僅僅有一個實例,並提供全局訪問點。在Java中實現單例模式須要私有的構造器,一個靜態方法和一個靜態變量。確定在性能和資源上 的限制,怎樣選擇適當的方案來

【轉】WebView的JavaScript與本地代碼交互方式

添加 lba 文件 abr cli 漏洞 大致 execution span WebView的漏洞分析 漏洞產生的原因 最近在開發過程中遇到一個問題,就是 WebView 使用的時候,還是需要解決之前系統(4.2之前)導致的一個漏洞,雖然現在這個系統版本用戶很少了,但是也不

Asp.Net中的分頁方式總結

rom chang clas 綁定 select proc dll xtend tinc 本人ASP.net初學,網上找了一些分頁的資料,看到這篇文章,沒看到作者在名字,我轉了你的文章,只為我可以用的時候方便查看,2010的文章了,不知道這技術是否過期。 以下才是正文

《轉載》Apache HTTP Server 與 Tomcat 的連接方式介紹

之前 img 6.2 自定義 con 訪問 ont 是什麽 bsp 本文轉載自IBM developer 首先我們先介紹一下為什麽要讓 Apache 與 Tomcat 之間進行連接。事實上 Tomcat 本身已經提供了 HTTP 服務,該服務默認的端口是 8080,裝好 t

LVS:負載均衡方式比較

什麽是 redirect cti enter 通過 主服務器 ip隧道 一般來說 lvs 轉載於http://soft.chinabyte.com/25/13169025.shtml  1、什麽是LVS?   首先簡單介紹一下LVS (Linux Virtual Serve

java倒計時簡單實現方式

idt 使用 instance too rgs 設置 private block ace 寫完js倒計時,突然想用java實現倒計時,寫了三種實現方式 一:設置時長的倒計時; 二:設置時間戳的倒計時; 三:使用java.util.Timer類實現的時間戳倒計時 代碼如下:

Nginx upstream的5權重分配方式分享

weight 一個 當前 共享 結果 壓力 宕機 clas 機器 Nginx負載均衡的分發方式有4種: 1.輪詢,默認采取此方式,Nginx會按照請求時間的先後順序進行輪詢分發,若某臺Web Server宕機,Nginx自動將其摘掉。 2.

(6個name="hobby"的復選項,兩個按鈕)來區分方法的不同---區別getElementByID,getElementsByName,getElem

-- cnblogs checkbox javascrip int ava mage clear img <form> 請選擇你愛好:<br> <input type="checkbox" name="hob

oracle的連接方式

service sin 文件中 val ice blog ora 讀取 配置文件 1.sid: 格式一: Oracle JDBC Thin using an SID: jdbc:oracle:thin:@host:port:SID Example: jdbc:oracle:

ThreadPoolExecutor 的提交任務方式

添加 正在 一次 數據 copy stack 多線程 ont ole 學習內容: ExecutorService線程池的應用... 1.如何創建線程池... 2.調用線程池的方法,獲取線程執行完畢後的結果... 3.關閉線程... 首先我們先了解一下到底什麽是線程池