CPU卡內(nèi)的文件類型
文章出處:http://www.mjagi.com 作者:興邦科技 人氣: 發(fā)表時間:2011年01月31日
根據(jù)樹狀的卡內(nèi)文件結(jié)構(gòu),CPU卡內(nèi)的文件分為3種類型:主文件MF、專用文件DF、基本文件EF。
??? 1、主文件MF
??? 在每一張卡片文件系統(tǒng)的文件樹中都只存在著一個根文件,其他所有文件都是該文件的子文件。
??? 這個文件也是整個卡片的入口,稱為MF(Master File)。每一張卡片中有且只有一個MF。
??? MF也是文件系統(tǒng)中最重要的一個文件,對卡片的操作通常從選擇MF開始。此外,由于MF的特殊性,通常將MF的標(biāo)識符定義為3F00,這樣,對于不同的卡片,通常都可以通過這一默認(rèn)的標(biāo)識符進行MF的選擇操作。由于MF不存在父文件,在卡片的應(yīng)用階段又必須存在,所以在卡片的初始化階段就必須首先建立MF。除此之外,MF的其他屬性與DF完全類似。
??? 2、專用文件DF
??? DF類似于PC文件系統(tǒng)中的目錄文件,一般情況下,也可以將MF看作是特殊的DF。
??? 如果把MF作為卡片的邏輯映射的話,一個DF往往可以看作是一類數(shù)據(jù)或者一個應(yīng)用在卡內(nèi)的映射。通常,同級的DF之間完全獨立,COS能夠確保它們之間的數(shù)據(jù)獨立性和安全性;對于不同級的DF之間,包括具有父子關(guān)系的DF,在實際的應(yīng)用階段可以根據(jù)實際應(yīng)用的定義實現(xiàn)隔絕或者托管的安全邏輯。
??? 為了標(biāo)識不同的DF,每一個DF具有一個同級DF下唯一的文件標(biāo)識符和一個卡內(nèi)全局唯一的應(yīng)用標(biāo)識符(AID)。
??? 在實現(xiàn)上,文件標(biāo)識符通常采用一個Word類型的整數(shù)來標(biāo)識,而且其值為0x100的倍數(shù),例如3F00、4F00、5F00等等。1F00和2F00通常保留作為系統(tǒng)特殊文件標(biāo)識。應(yīng)用標(biāo)識符AID通常是一個有限長的二進制串,通常作為該DF對應(yīng)的應(yīng)用的簡單描述。使用文件標(biāo)識符和應(yīng)用標(biāo)識符都可以對當(dāng)前文件子層DF文件進行檢索,如果使用3F00使用文件標(biāo)識符檢索條件,則COS自動選擇MF;如果卡片資源允許的話,COS也可以實現(xiàn)對卡內(nèi)所有DF或者當(dāng)前DF以下包含的所有子DF文件進行檢索,這時一般采用AID作為檢索條件。
??? 可以將DF分為DDF和ADF兩類。
??? (1)目錄專用文件DDF
??? 如果在一個DF下還包含子DF的話,也就是,在文件樹中如果子結(jié)點不全部為葉子結(jié)點的話,這樣的DF被稱為DDF(Directory Definition File)。
??? 一般的,DDF可以作為一組應(yīng)用(DF)的集合,也可以作為一個復(fù)雜多層次應(yīng)用的入口。
??? 在多應(yīng)用卡中,MF下通常包含了多個DF,這里的MF就是一個典型的DDF。為了維護管理DDF下所有的DF,在每一個DDF下一般可以包含一個系統(tǒng)文件(DIR文件),記錄所有子DF的入口。
??? (2)應(yīng)用專用文件ADF
??? 如果在一個DF下不包含有其它的子DF的話,也就是,在文件樹中如果所有的子結(jié)點全部都是葉子結(jié)點的話,這樣的DF稱為ADF(Application Definition File)。
??? 一般的,ADF是一個應(yīng)用在卡內(nèi)的邏輯映射,ADF下包含的都是存數(shù)據(jù)文件,從卡外來看,一個ADF可以看作是一個只包含了文件控制信息和存數(shù)據(jù)對象的集合。
??? ADF下沒有DF文件,所以也就不需要DIR文件。
??? 從理論上說,只要卡片空間允許,在卡內(nèi)可以建立無數(shù)多層的文件結(jié)構(gòu)。但是,從卡片的實際應(yīng)用來看,很少有應(yīng)用會要求超過3層的DF結(jié)構(gòu),即MF、DDF、ADF;更一般的來看,如果卡片資源有限,應(yīng)用目標(biāo)明確的話,COS可以只支持兩層的DF結(jié)構(gòu),即MF、ADF(MF是卡內(nèi)唯一的DDF)。
??? COS對多層次DF結(jié)構(gòu)的支持可以帶來很大的應(yīng)用靈活性,但是同時也會造成COS開發(fā)的復(fù)雜度大大提升。DF層次的選擇和卡片面向的應(yīng)用有很大的關(guān)系,可以根據(jù)不同的應(yīng)用需求來進行選擇。例如,在只支持單一應(yīng)用的COS中,可以直接將MF作為ADF,不支持DDF;對于支持多應(yīng)用的COS,通??梢赃x擇兩層的DF結(jié)構(gòu),MF下的每一個ADF對應(yīng)一個獨立的應(yīng)用;對于卡片資源豐富,可以支持復(fù)雜應(yīng)用模式,建立動態(tài)應(yīng)用體系的卡片來說,可以選擇實現(xiàn)3層甚至無限多層DF的模式。
??? 3、基本數(shù)據(jù)文件EF
??? 在文件樹中,如果一個文件節(jié)點沒有子節(jié)點,也就是說它本身是一個葉子節(jié)點的話,這樣的文件稱為EF(Elementary File,基本數(shù)據(jù)文件)。
??? EF是卡內(nèi)數(shù)據(jù)的基本載體,根據(jù)不同的形式,EF文件可以分為不同的類型,COS根據(jù)EF的各種類型定義了不同的文件操作邏輯。
??? 在卡內(nèi),EF都隸屬于某一個DF,COS采用兩種方式來標(biāo)識EF。一個是EF的文件標(biāo)識符FID,一般的,EF和其父DF的FID高字節(jié)相同,EF的FID低字節(jié)作為EF文件的擴展短文件標(biāo)識符,稱為eSFI,eSFI的低5位稱為短文件標(biāo)識符SFI,在同一個DF下,所有EF的SFI要求都不相同。二是EF的文件類型,在每一個EF的文件屬性描述中都包含有文件類型標(biāo)識,某些特殊類型的EF在同一DF下要求唯一。
??? 對EF的選擇方式和DF不同。對DF的操作一般要求事先進行顯式的選擇操作,被選的DF作為當(dāng)前文件,接下來的所有文件操作都針對當(dāng)前文件進行;對EF操作之前要求先選擇其父DF作為當(dāng)前文件,對EF的選擇在具體的操作命令中隱式的進行。EF的選擇方式有兩種,一是通過SFI進行選擇,SFI在當(dāng)前DF下唯一;二是通過文件類型進行選擇,主要針對一些系統(tǒng)文件的操作,例如個人密碼PIN文件、對稱密鑰文件等,這些類型的文件在當(dāng)前DF下也要求唯一存在。
??? 下面我們來看看不同的EF及其操作模式。
??? (1)按數(shù)據(jù)結(jié)構(gòu)分類
??? 卡內(nèi)保存的數(shù)據(jù)可以分為兩類,一類是透明的流數(shù)據(jù),具體的數(shù)據(jù)內(nèi)容和格式在卡外進行解釋,卡內(nèi)解釋為一個連續(xù)的二進制數(shù)據(jù)流;第二類是結(jié)構(gòu)數(shù)據(jù),數(shù)據(jù)以記錄的形式存在,COS能夠?qū)?shù)據(jù)解釋為若干條二進制的記錄流。根據(jù)所存儲數(shù)據(jù)的結(jié)構(gòu)不同,EF可以分為不同的類別,不同結(jié)構(gòu)的EF對應(yīng)了不同類型的操作。
??? a. 透明二進制文件
??? 透明二進制文件是卡內(nèi)所有文件的基礎(chǔ),卡片將數(shù)據(jù)作為一個字節(jié)流來進行處理,二進制文件的主要屬性只有文件體的大小。
??? 對二進制文件夾的操作包括文件數(shù)據(jù)的讀、寫兩種模式。
??? 數(shù)據(jù)的讀寫操作包括以下兩種方式。
??? 文件體全部數(shù)據(jù)的讀寫操作。
??? 文件體某一區(qū)段數(shù)據(jù)的讀寫操作。在讀寫操作之前,必須給出要讀寫區(qū)段起始位置在文件體的偏移量和要讀寫區(qū)段的長度。
??? 需要注意的是,對于區(qū)段讀寫需要嚴(yán)格檢查區(qū)段是否超出了文件體的范圍。
??? b. 定長記錄文件
??? 在定長記錄文件中,文件體劃分為n個等長的區(qū)段,每一個區(qū)段對應(yīng)一條數(shù)據(jù)記錄。
??? 二進制文件的主要屬性包括:所容納的記錄每一條的大小,能夠容納的總的記錄條數(shù)。在實際的使用階段,為了標(biāo)識記錄的有效性,還可以包括當(dāng)前已經(jīng)寫入的記錄的數(shù)目,為了進行記錄逐一檢索,還需要記錄當(dāng)前操作的記錄序號等。
??? 當(dāng)前操作的記錄序號由COS來進行自動維護,在文件第一次被選擇時自動置為空,以后根據(jù)實際訪問進行修改。
??? 對定長記錄文件的操作都以記錄為對象進行,包括記錄的讀、寫、添加3種模式。
??? 記錄的讀寫操作包括幾種方式。
??? 指定記錄序號的記錄讀寫操作,這一操作不改變當(dāng)前操作記錄序號。
??? 相對當(dāng)前記錄位置的定位方式,包括當(dāng)前記錄的前一條、后一條記錄等。如果當(dāng)前記錄號為空時,如果訪問前一條記錄的話,返回第一條記錄,并置當(dāng)前記錄為第一條記錄;如果訪問后一條記錄的話,返回最后一條記錄,并置當(dāng)前記錄為最后一條記錄。
??? 相對全局記錄位置的定位方式,例如第一條、最后一條記錄等,這一操作將把該記錄設(shè)置為當(dāng)前記錄。
??? 在定長記錄的操作過程中,需要嚴(yán)格檢查記錄號是否在文件包含的記錄數(shù)的范圍內(nèi),當(dāng)前記錄號對應(yīng)的記錄數(shù)據(jù)是否有效等。
??? 記錄的添加操作即在最后一條記錄的后面添加新的記錄。
??? 如果邏輯上的最后一條記錄不是物理上的最后一條,即其后還有空閑的記錄空間,新的記錄順序添加在后面,同時將新的記錄設(shè)為邏輯的“最后一條記錄”。
??? 如果邏輯上的最后一條記錄是物理上的最后一條,即其后沒有空閑的記錄空間了,則添加操作失敗,卡片返回相應(yīng)的錯誤碼。