動態(tài)多應用智能卡文件系統(tǒng)的研究與設計
所有EF 文件頭中都含有屬性字段,指明此文件的特殊信息。屬性字段占兩字節(jié),字段中的每一 比特位代表一種屬性。它們在創(chuàng)建時確定,不允許更改。目前只使用了前三個比特位,分別是:
1)可刪除屬性。此屬性位為1 表示可以被刪除,0 表示不可被刪除。
2)可寫屬性。此屬性位為1 表示可以被修改,0 則表明此文件為只讀文件。
3)可讀屬性。此屬性位為1 表明此文件可以被瀏覽,0 表示不可以被瀏覽。
應用要對文件訪問需要達到一定的安全狀態(tài)。當該應用的進程現(xiàn)有狀態(tài)滿足所需要狀態(tài),并且符 合和該文件的屬性要求時,該進程才能訪問文件。當前進程的安全狀態(tài)是由其是否滿足當前目錄文件 下的KEF 中的相應密鑰決定的。在MF 下僅有DF(應用目錄),沒有EF 文件,其KEF 則只含有創(chuàng) 建密鑰,讀密鑰,刪除密鑰。而一般的KEF 文件中含有四個密鑰,分別是讀密鑰,寫密鑰, 創(chuàng)建密 鑰,刪除密鑰。
為了方便文件管理,有一些典型變量要保存在 RAM 中,把這些變量封裝成一個結構體CMB, 放在進程的PCB 中。一個CMB 塊包含如下變量:1)mfhead。此變量總指向最高層MF 文件頭地址。 2)mfsecurity。此變量表明MF 達到的安全狀態(tài)。其初始值在進程建立時賦值。3)dfsecurity。此變量 表明現(xiàn)行選擇的DF 達到的安全狀態(tài)。其初值在進程建立時賦值。4)currentdf、currentwef。這兩個 變量分別為當前DF、當前WEF 文件頭地址。在進程時它們的值為NULL,在進程運行過程中由 SELECT 命令顯式賦值。5)currentrecord_adr。此變量在當前WEF 為記錄結構時使用,它指向當前使 用記錄號, 如為透明文件,無效地址。在進程建立或者重新選擇WEF 時,其值被賦為0。由記錄結構 WEF 讀、寫命令更改。6)currentef_kef。此變量為當前DF 下KEF 文件頭地址。當創(chuàng)建進程時,就 會創(chuàng)建一個CMB 塊,其 currentdf 被賦為當時正在訪問的DF,安全狀態(tài)被賦為0。如果currentdf 為 0 時,表示當前的工作目錄為MF。
1.3 EEPROM 的劃分
該智能卡的EEPROM 大小為256K,其中分為應用數(shù)據區(qū)(32K),應用代碼去(160K),系統(tǒng)區(qū) (16K)以及交換區(qū)(48K)。
應用數(shù)據區(qū)存放著應用的配置數(shù)據,并且都是以文件的形式存儲的。應用數(shù)據區(qū)的 EEPROM 是 以頁的形式動態(tài)分配給各個應用,每頁大小為32 字節(jié)。每個文件的頁地址信息由文件分配表詳細記 錄。應用代碼區(qū)存放著應用的運行代碼。應用代碼區(qū)分為40 塊,每塊大小為4K。塊和應用是一一對 應的關系,即每塊對映一個應用。系統(tǒng)區(qū):存放操作系統(tǒng)的信息以及用于管理應用及文件的一些系統(tǒng) 表:應用使用表,文件分配表,文件打開表,數(shù)據區(qū)使用表。文件打開表是用來防止讀寫沖突的,當 某文件正在被改寫時,需要給該文件上鎖,等對該文件操作完成后再對該文件解鎖。
數(shù)據區(qū)使用表記錄了應用數(shù)據文件在數(shù)據區(qū)的存儲情況,當一個應用要訪問某一個數(shù)據文件時,需要查看該表,檢查 該文件是否屬于該應用,防止應用篡改其他應用的數(shù)據文件。操作系統(tǒng)的信息用超級塊記錄。交換區(qū) 就是當內存不足時,使用交換區(qū)來擴充內存。
2 文件系統(tǒng)
2.1 文件分配表
該操作系統(tǒng)中,文件系統(tǒng)僅設計到應用數(shù)據區(qū),和應用系統(tǒng)區(qū)以及應用代碼去無關,所以文件系 統(tǒng)占32K 的EEPROM 空間。數(shù)據區(qū)是以頁的形式分配給文件的,每頁大小是32 字節(jié),共設有1024 頁。存儲在系統(tǒng)區(qū)的文件分配表占用1K 空間。分配表如圖2 所示:該表一共有1024 頁(用十六進制 表示),第1 頁代表數(shù)據區(qū)的前32 個字節(jié),以后依次類推。當表項為FFFF,表示文件結束。當記錄 為FFFE 時,該頁可用。每頁的表項記錄該文件下一頁的頁碼。如圖所示。該文件占用的頁碼分別是 1,0xC,0xD,0x10,0x14。
評論