參數(shù)不一定需要在它改變時被寫入到數(shù)據(jù)閃存I。參數(shù)(i,t(x))表示對于第X次寫入到數(shù)據(jù)閃存I的第i個參數(shù)的在時間t(x)處的值。每當參數(shù)(i,t(l))、參數(shù)(i,t(2))、參數(shù)(i,t(3))……被寫入到數(shù)據(jù)閃存I時,對應的記錄(i,l)、記錄(i,2)、記錄(i,3)被創(chuàng)建并且從對應片段(i)的開始地址依次寫入。最后寫入的值為最新值,并且片段中的最后寫入的記錄之后的地址指示空白區(qū)域(未使用的區(qū)域)。圖1示出當一次宏塊2_1為現(xiàn)用系統(tǒng)并且二次宏塊2_2為待機系統(tǒng)時的記錄的寫入狀態(tài)。記錄(0,I)、記錄(0,2)和記錄(0,3)被寫入到片段(0),記錄(1,I)被寫入到片段(I),并且記錄(6,I)和記錄(6,2)被寫入到片段出)。每個片段中的記錄的尺寸為可變長度。
[0121]圖2為示出數(shù)據(jù)閃存I上的記錄6的構(gòu)成的說明圖。部分(a)示出片段中的寫入?yún)^(qū)域和參數(shù)之間的關系。當作為第6個參數(shù)的更新值的參數(shù)(6,t(l))、參數(shù)(6,t(2))、……、參數(shù)(6,t(N))被寫入到片段(6)時,與各自更新值對應的記錄(6,I)、記錄(6,2)、……、記錄(6,N)被構(gòu)成并且從片段(6)的開始地址依次寫入。部分(b)示出記錄的構(gòu)成。記錄6由數(shù)據(jù)區(qū)域9和頭部區(qū)域10構(gòu)成。數(shù)據(jù)區(qū)域9為參數(shù)(6,t(N))本身并且具有可變長度。頭部區(qū)域10由例如4字節(jié)組成。部分(c)示出頭部的構(gòu)成示例。頭部由Con(拼接)字段
ll、rsvl (保留)字段12、ID (標識)字段13、rsv2字段14、DivP (分割能力)字段15和偏移字段16構(gòu)成。
[0122]圖3是更詳細示出頭部的構(gòu)成的說明圖。用高位優(yōu)先(big-endian)格式表示頭部的內(nèi)容。
[0123]位31和30為Con字段11,其指示參數(shù)是落入一個記錄內(nèi)還是繼續(xù)到后續(xù)的記錄。在該字段中,b’ 01指示無拼接,即,參數(shù)落入一個記錄內(nèi),b’ 10指示拼接,即,參數(shù)繼續(xù)到后續(xù)的記錄,并且b’ 00和b’ 11是無效的。
[0124]位28到24是ID字段13,其指示存儲片段的ID,并且取從O到31的值,因為片段的最大數(shù)量是32。
[0125]位19 - 16是DivP字段15,其指示在分割數(shù)量用2的冪來表示時的指數(shù),并且取從O到5的值,因為分割數(shù)量是1、2、4、8、16、或32。
[0126]位15到O是偏移字段16,其指示到下一個記錄的偏移地址。偏移地址的范圍能夠從最小的寫入單位(最小值)到通過從片段尺寸中減去最小的寫入單位而獲得的值(最大值)。由于最小的寫入單位是8字節(jié)并且在分割數(shù)量是2的情況下片段尺寸最大,因此它取從 H’ 0008 到 H’ 3FF8 的值。
[0127]位29以及位23到20是保留字段,其是rsvl字段12和rsv2字段14。
[0128]〈寫入操作〉
[0129]將更詳細地描述通過數(shù)據(jù)管理驅(qū)動器92將參數(shù)5寫入到數(shù)據(jù)閃存I的操作。
[0130]圖6和7是示出用于將參數(shù)5寫入到數(shù)據(jù)閃存I的操作的流程圖。圖6示出前半部而圖7示出后半部。
[0131]假設數(shù)據(jù)閃存I具有32千字節(jié)的容量并且被分成16KB的一次宏塊和16KB的二次宏塊,并且11個類型的參數(shù)被寫入到數(shù)據(jù)閃存I。在下文中,將通過其中一次和二次宏塊中的每一個被分成16個片段(分割數(shù)量為16)并且寫入第M個參數(shù)(參數(shù)(M,t(N)))的示例的方式進行描述。頭部和記錄的數(shù)據(jù)結(jié)構(gòu)與在圖2和3中示出的相同。
[0132]作為一次宏塊的頂部的片段(O)的最初8個字節(jié)被讀取并且進行空白檢查(SI)。在空白檢查中,確定讀取區(qū)域是否是空白區(qū)域,即,在擦除之后還沒有寫入數(shù)據(jù)的區(qū)域。通常,數(shù)據(jù)閃存具有空白檢查功能,并且訪問驅(qū)動器93使用空白檢查功能來確定空白區(qū)域;然而,某些閃速存儲器可能利用以下的閃速存儲器的規(guī)范(specificat1n)。根據(jù)閃速存儲器的規(guī)范,擦除狀態(tài)是全O或全I。在擦除狀態(tài)為全O的情況下,如果寫入除O以外的值,則確定該區(qū)域不是空白區(qū)域。在擦除狀態(tài)為全I的情況下,如果寫入除I以外的值,則確定該區(qū)域不是空白區(qū)域。例如,假設已經(jīng)將記錄寫入到片段(O)。最初8個字節(jié)中的四個字節(jié)是其中位31和30為Con字段11的頭部信息。由于在Con字段11中b’ 00和b’ 11為無效的,因此如果寫入記錄,則指示除b’ 00和b’ 11以外的值。因此,在b’ 00或b’ 11的情況下能夠確定該區(qū)域為空白區(qū)域。類似地,可以檢查讀取的8個字節(jié)的全部位。此外,最初8個字節(jié)僅僅為示例,并且可以檢查任意數(shù)目的字節(jié)。例如,可以讀取并且空白檢查作為頭部區(qū)域的四個字節(jié),或者可以讀取并且空白檢查包括Con字段11的僅僅第一個I字節(jié)。
[0133]確定SI中的空白檢查的結(jié)果(S2)。作為S2的結(jié)果,如果片段(O)的最初8個字節(jié)為空白區(qū)域,在這時候一次宏塊為待機系統(tǒng)并且現(xiàn)用系統(tǒng)的二次宏塊為向其寫入?yún)?shù)的宏塊;因此,執(zhí)行向二次宏塊的寫入操作(S3)。到二次宏塊的寫入操作與現(xiàn)用系統(tǒng)的一次宏塊相同,其在S4之后示出,并且因此不會被描述。
[0134]作為S2的結(jié)果,如果片段(O)的最初8個字節(jié)不是空白區(qū)域,則在這時候一次宏塊是現(xiàn)用系統(tǒng)。讀取作為一次宏塊中的片段(O)的開始記錄的記錄(0,I)的頭部(S4)。從S4中讀取的記錄(0,I)的頭部的DivP字段15中獲得宏塊中的分割數(shù)量,基于分割數(shù)量計算片段(M)的開始地址,并且對片段(M)的最初8個字節(jié)進行空白檢查(S5)?;谠摻Y(jié)果,確定片段(M)是否是空白區(qū)域(S6)。如果片段(M)是空白區(qū)域,則將參數(shù)(M,t(N))寫入到記錄(M,O),并且該過程結(jié)束(S7)。這是初始值的寫入。
[0135]作為S6的結(jié)果,如果片段(M)不是空白區(qū)域,則將計數(shù)器N初始化為零(S8)。在這時候,計數(shù)器N被用來確定空白記錄編號。然后,從片段(M)讀取記錄(M,N)的頭部(S9)。從S9中讀取的記錄(M,N)的頭部獲取偏移地址(SlO)。對從在SlO中獲取的偏移地址開始的八個字節(jié)進行空白檢查(Sll),并且確定片段(M)中的記錄(M,N)之后的區(qū)域是否是空白區(qū)域(S12)。如果在S12中確定該區(qū)域是空白區(qū)域,則確定是否能夠?qū)?shù)(M,t(N))寫入片段(M)內(nèi)(S13)。如果在S13中確定能夠?qū)?shù)(M,t(N))寫入片段(M)內(nèi),則將參數(shù)(M,t(N))寫入到記錄(M,N+1) (S14),并且寫入操作結(jié)束。這是沒有拼接的寫入。如果在S12中確定該區(qū)域不是空白區(qū)域,則用于確定片段(M)中的空白記錄編號的計數(shù)器N加1(S15),并且流程返回到S9。
[0136]如上所述,通過讀取寫入到宏塊的頂部的記錄的頭部中包含的DivP字段15,獲得宏塊中的分割數(shù)量。由于參數(shù)與片段彼此一對一關聯(lián),因此根據(jù)參數(shù)的ID唯一地確定要寫入?yún)?shù)的片段。為了搜索其中能夠?qū)懭雲(yún)?shù)的空白區(qū)域(未使用的區(qū)域),僅僅需要在片段中從頂部開始依次檢查頭部中包含的偏移,因此使得可以最小化搜索步驟。由此,可以在短搜索時間(搜索步驟)中發(fā)現(xiàn)空白區(qū)域并且將參數(shù)寫入到空白區(qū)域。
[0137]如果在S13中確定不能將參數(shù)(M,t(N))寫入片段(M)內(nèi),則執(zhí)行到片段(M)以外的其它片段的寫入操作。后續(xù)的流程被示出在圖7中。
[0138]計數(shù)器L被初始化為M+1 (S16)。在這時候,計數(shù)器L被用來確定空白片段編號。確定在一次宏塊中是否存在未使用的片段,即,片段編號(L)是否小于分割數(shù)量(=16)(S17)。
[0139]如果在S17中確定一次宏塊中存在未使用的片段,則對片段(L)的最初8個字節(jié)進行空白檢查(S18)。確定片段(L)是否是空白區(qū)域(S19)。如果片段(L)不是空白區(qū)域,則流程返回到S16。如果片段(L)是空白區(qū)域,則將參數(shù)(M,t(N))的前半部寫入到片段(M)并且將參數(shù)(M,t(N))的后半部寫入到片段(L) (S20),并且寫入操作結(jié)束。這是具有拼接的寫入。
[0140]由此,如果在對應片段中沒有空間,則可以搜索未使用的片段(空白片段)并且使用它作為新的可寫的片段。此外,能夠根據(jù)最后寫入第M個片段中的數(shù)據(jù)的頭部信息中的偏移字段容易地計算要向其寫入下一個第M個參數(shù)的所選片段。
[0141]如果在S17中確定現(xiàn)用系統(tǒng)的一次宏塊中不存在未使用的片段(空白片段),則將參數(shù)(M,t(N))寫入到待機系統(tǒng)的二次宏塊中的對應片段(M’)的開始記錄(M’,0) (S21)。S21之后的操作是具有塊擦除的寫入操作,并且構(gòu)成用于在現(xiàn)用系統(tǒng)的宏塊與待機系統(tǒng)的宏塊之間進行切換的操作的一部分。
[0142]用于片段編號的計數(shù)器L被初始化為零(S22)。在用于在現(xiàn)用系統(tǒng)的宏塊與待機系統(tǒng)的宏塊之間進行切換的操作中,僅僅每個參數(shù)的最新記錄被從現(xiàn)用系統(tǒng)轉(zhuǎn)錄到待機系統(tǒng)。在這時候,計數(shù)器L被用作用于指示具有要取回和轉(zhuǎn)錄的最新記錄的片段的片段編號的指針。
[0143]確定由計數(shù)器L指示的片段是否為片段(M),S卩,計數(shù)器L是否等于片段編號M(S23)。作為確定的結(jié)果,如果由計數(shù)器L指示的片段等于片段(M),則流程進行到S26。在S23中如果由計數(shù)器L指示的片段不同于片段(M),則取回片段(L)的最新記錄(S24)。通過基于頭部的偏移地址計算下一個記錄區(qū)域的開始地址并且對該區(qū)域進行空白檢查,來執(zhí)行取回。片段(L)的最新記錄被寫入到二次宏塊中的對應片段(L’)的開始記錄(L’,0)(S25)。確定是否存在剩余的具有需要被取回和轉(zhuǎn)錄的最新記錄的片段,即,片段編號L是否等于作為宏塊的最后的片段編號的15(S26)。如果在S26中確定存在剩余的片段,則指示具有要取回的最新記錄的片段的片段編號的計數(shù)器L加I (S28),并且流程返回到S23。如果在S26中確定不存在剩余的片段,則擦除整個一次宏塊(S27),并且寫入操作結(jié)束。此后,一次宏塊變?yōu)榇龣C系統(tǒng),并且二次宏塊變?yōu)楝F(xiàn)用系統(tǒng)。
[0144]由此,可以在一次和二次宏塊的現(xiàn)用系統(tǒng)和待機系統(tǒng)之間交替地進行切換。
[0145]〈寫入操作的示例〉
[0146]將基于如上所述的32千字節(jié)的容量以及11個類型的參數(shù)更詳細地描述到數(shù)據(jù)閃存I的寫入操作的示例。
[0147]圖8是示出用于將參數(shù)寫入到數(shù)據(jù)閃存(沒有拼接)的操作的說明圖。圖9是示出圖8中的記錄(M,N)的內(nèi)容的說明圖。
[0148]由于有11個類型的參數(shù),一次宏塊和二次宏塊中的每一個被分成16個片段,使得能夠在不同片段中存儲不同類型的參數(shù)。在用戶在第一次激活時通過應用提供參數(shù)的類型的數(shù)量時,塊分割的數(shù)量被設定為不小于參數(shù)的類型的數(shù)量的最小值。在參數(shù)的類型的數(shù)量大于預定數(shù)量(例如,在圖1到3中示出的32)的情況下,用戶合并參數(shù)使得參數(shù)的類型的數(shù)量變?yōu)榈扔诨蛐∮?2。
[0149]將通過第M個參數(shù)的示例的方式描述頭部中的設定值。
[0150]在時間t" (N)處更新第M個參數(shù)(參數(shù)(M,t" (N)))并且記錄(M,N)被寫入到片段(M)的情況下,頭部中的設定值如下。也就是說,Con字段指定指示沒有拼接的b’01,ID字段指定片段ID的M, DivP字段指定指示16個片段分割的4,并且偏移字段指定“參數(shù)(M,t" (N))的尺寸+4(頭部尺寸)+對準量(alignment amount)”。對準量是用于將在相鄰的舊記錄和新記錄之間的邊界與用于地址的例如每8個字節(jié)的邊界對準的量(8字節(jié)對準)?;跇?gòu)成數(shù)據(jù)閃存I的閃速存儲器的寫入單位確定對準的尺寸。在寫入單位是8個字節(jié)的情況下,復數(shù)個8字節(jié)能夠被用作對準尺寸。典型地,與寫入單位相同的數(shù)量的字節(jié)被用作對準尺寸。
[0151]通過將頭部添加到作為時間t (I)處的第一參數(shù)的值并且寫入到片段(O)的開始地址的參數(shù)(0,t(l)),創(chuàng)建記錄(0,1)。擦除之后還沒有寫入數(shù)據(jù)的區(qū)域是空白區(qū)域。在這時候,在片段(O)中,寫入記錄(0,I)的區(qū)域之后的地址的區(qū)域是空白區(qū)域。訪問驅(qū)動器93對片段(O)的最初8個字節(jié)進行空白檢查,由此確認片段(O)是否是空白區(qū)域。此外,在時間t (2)處更新第一參數(shù)并且寫入?yún)?shù)(O, t (2))時,根據(jù)參數(shù)(O, t (2))創(chuàng)建記錄(O, 2),并且將記錄(0,2)從片段(O