TWI815622B - 資訊處理裝置 - Google Patents
資訊處理裝置 Download PDFInfo
- Publication number
- TWI815622B TWI815622B TW111131703A TW111131703A TWI815622B TW I815622 B TWI815622 B TW I815622B TW 111131703 A TW111131703 A TW 111131703A TW 111131703 A TW111131703 A TW 111131703A TW I815622 B TWI815622 B TW I815622B
- Authority
- TW
- Taiwan
- Prior art keywords
- aforementioned
- data
- write
- command
- write command
- Prior art date
Links
- 230000010365 information processing Effects 0.000 title claims abstract description 140
- 230000004044 response Effects 0.000 claims abstract description 357
- 230000005540 biological transmission Effects 0.000 claims abstract description 22
- 238000012217 deletion Methods 0.000 claims description 18
- 230000037430 deletion Effects 0.000 claims description 18
- 230000000875 corresponding effect Effects 0.000 description 518
- 238000009966 trimming Methods 0.000 description 407
- 238000007726 management method Methods 0.000 description 333
- 238000012937 correction Methods 0.000 description 325
- 238000012545 processing Methods 0.000 description 272
- 238000000034 method Methods 0.000 description 204
- 230000008569 process Effects 0.000 description 151
- 230000009471 action Effects 0.000 description 87
- 238000012986 modification Methods 0.000 description 52
- 230000004048 modification Effects 0.000 description 52
- 230000002159 abnormal effect Effects 0.000 description 51
- 238000010586 diagram Methods 0.000 description 48
- 238000013138 pruning Methods 0.000 description 44
- 238000011084 recovery Methods 0.000 description 39
- 238000013507 mapping Methods 0.000 description 38
- 230000006870 function Effects 0.000 description 34
- 238000013519 translation Methods 0.000 description 20
- 230000008859 change Effects 0.000 description 19
- 230000003111 delayed effect Effects 0.000 description 19
- 238000003379 elimination reaction Methods 0.000 description 17
- 238000006243 chemical reaction Methods 0.000 description 12
- 230000008030 elimination Effects 0.000 description 9
- NGVDGCNFYWLIFO-UHFFFAOYSA-N pyridoxal 5'-phosphate Chemical group CC1=NC=C(COP(O)(O)=O)C(C=O)=C1O NGVDGCNFYWLIFO-UHFFFAOYSA-N 0.000 description 9
- 238000012546 transfer Methods 0.000 description 7
- 230000007246 mechanism Effects 0.000 description 6
- 230000003252 repetitive effect Effects 0.000 description 6
- 238000013523 data management Methods 0.000 description 4
- 230000001276 controlling effect Effects 0.000 description 3
- 238000005516 engineering process Methods 0.000 description 3
- 239000000284 extract Substances 0.000 description 3
- 238000003780 insertion Methods 0.000 description 3
- 230000037431 insertion Effects 0.000 description 3
- 230000009467 reduction Effects 0.000 description 3
- 230000005856 abnormality Effects 0.000 description 2
- 230000001174 ascending effect Effects 0.000 description 2
- 230000003139 buffering effect Effects 0.000 description 2
- 238000004891 communication Methods 0.000 description 2
- 238000012005 ligant binding assay Methods 0.000 description 2
- 230000008439 repair process Effects 0.000 description 2
- 239000007787 solid Substances 0.000 description 2
- 230000003068 static effect Effects 0.000 description 2
- 101150059273 PTR1 gene Proteins 0.000 description 1
- 239000003990 capacitor Substances 0.000 description 1
- 238000004590 computer program Methods 0.000 description 1
- 230000007423 decrease Effects 0.000 description 1
- 230000007717 exclusion Effects 0.000 description 1
- 239000000835 fiber Substances 0.000 description 1
- 230000010354 integration Effects 0.000 description 1
- 238000002360 preparation method Methods 0.000 description 1
- 238000009418 renovation Methods 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
- 239000000725 suspension Substances 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/0671—In-line storage system
- G06F3/0673—Single storage device
- G06F3/0679—Non-volatile semiconductor memory device, e.g. flash memory, one time programmable memory [OTP]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/0614—Improving the reliability of storage systems
- G06F3/0619—Improving the reliability of storage systems in relation to data integrity, e.g. data losses, bit errors
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
- G06F12/023—Free address space management
- G06F12/0238—Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
- G06F12/023—Free address space management
- G06F12/0238—Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory
- G06F12/0246—Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory in block erasable memory, e.g. flash memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/10—Address translation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0638—Organizing or formatting or addressing of data
- G06F3/064—Management of blocks
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0655—Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
- G06F3/0656—Data buffering arrangements
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0655—Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
- G06F3/0659—Command handling arrangements, e.g. command buffers, queues, command scheduling
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/10—Providing a specific technical effect
- G06F2212/1032—Reliability improvement, data loss prevention, degraded operation etc
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/72—Details relating to flash memory management
- G06F2212/7201—Logical to physical mapping or translation of blocks or pages
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/72—Details relating to flash memory management
- G06F2212/7203—Temporary buffering, e.g. using volatile buffer or dedicated buffer blocks
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/72—Details relating to flash memory management
- G06F2212/7205—Cleaning, compaction, garbage collection, erase control
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/72—Details relating to flash memory management
- G06F2212/7208—Multiple device management, e.g. distributing data over multiple flash devices
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0638—Organizing or formatting or addressing of data
- G06F3/064—Management of blocks
- G06F3/0641—De-duplication techniques
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Human Computer Interaction (AREA)
- Computer Security & Cryptography (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Techniques For Improving Reliability Of Storages (AREA)
- Executing Machine-Instructions (AREA)
- Memory System (AREA)
- Debugging And Monitoring (AREA)
Abstract
本發明之實施形態,係提供一種能夠將記憶體系統內之非揮發性記憶體之損耗減輕的資訊處理裝置。
若依據實施形態,則資訊處理裝置,係具備有非揮發性記憶體與CPU。CPU,係將第1資料、和被與第1資料相互附加有關連性並且包含有相當於對於第1邏輯位址範圍作指定的第1寫入指令之資訊的管理資料,儲存在非揮發性記憶體中,並進行第1寫入指令的對於記憶體之第1次之送訊。CPU,當在接收針對第1寫入指令之第2回應之前,而被要求有將第2資料寫入至包含有第1邏輯位址範圍之至少一部分之第2邏輯位址範圍的第3邏輯位址範圍中、或者是被要求將第3邏輯位址範圍之分配解除的情況時,係對於記憶體系統,而送訊將與第1寫入指令相對應之對於第1邏輯位址範圍的第1資料之寫入之中的至少對於第2邏輯位址範圍之寫入作中止的指令。
Description
本發明之實施形態,係有關於控制非揮發性記憶體之技術。
[關連申請案]
本申請案,係以日本專利申請2022-040562號(申請日:2022年3月15日)作為基礎申請,並享受其優先權。本申請案,係藉由參照此基礎申請案,而包含基礎申請案之所有的內容。
近年來,具備有非揮發性記憶體之記憶體系統係廣泛普及。作為此種記憶體系統之其中一者,具備有NAND型快閃記憶體之固態硬碟(SSD)係為周知。SSD,係作為各種的電腦裝置之主儲存裝置而被作使用。
記憶體系統,例如,在從主機而受理了1個的寫入要求的情況時,係將伴隨著受理了該寫入要求一事而從主機所收訊了的使用者資料寫入至非揮發性記憶體中,並對於主機回送回應。
或者是,記憶體系統,係會有在藉由從主機所受理了的複數之寫入要求而被要求有寫入之使用者資料之總量到達了特定之資料單位之後,將該特定之資料單位之使用者資料寫入至非揮發性記憶體中,並對於主機而回送與複數之寫入要求之各者分別相互對應之回應的情形。特定之資料單位,例如,係身為能夠藉由一次的資料寫入動作而寫入至非揮發性記憶體中之資料量。亦即是,記憶體系統,係能夠使用「並不立即地實行與所受理了的1個的寫入要求相對應之寫入,而是在藉由複數之寫入要求而被要求有寫入之使用者資料之總量到達了特定之資料單位之後,再實行與該些之複數之寫入要求相對應之寫入」的機制。以下,係將此機制,亦稱作延遲寫入完備(Delayed Write Completion)。
在延遲寫入完備(Delayed Write Completion)中,例如,由於係將包含有與複數之寫入要求分別相對應之複數之使用者資料的寫入單位之使用者資料寫入至非揮發性記憶體中,因此,係能夠對於非揮發性記憶體之記憶區域有效率地作利用。在延遲寫入完備(Delayed Write Completion)中,與各個的寫入要求相對應之寫入以及回應,係會有一直延遲至直到受理與寫入單位之使用者資料相對應之複數之寫入要求為止的可能性。
又,當指定了相同的邏輯位址之複數之寫入要求被以短間隔而對於記憶體系統作了送訊的情況時,針對該邏輯位址,因應於較早的寫入要求,資料係被寫入至非揮發性記憶體中,因應於之後的寫入要求,資料係被寫入至非揮發性記憶體中。也就是說,因應於較早的寫入要求而被寫入至了非揮發性記憶體中之資料,係起因於因應於之後的寫入要求而使資料被寫入至非揮發性記憶體中一事,而成為無效資料。
或者是,當指定了相同的邏輯位址之寫入要求與修整(trim)要求被以短間隔而作了發行的情況時,針對該邏輯位址,因應於較早的寫入要求,資料係被寫入至非揮發性記憶體中,因應於之後的修整要求,該邏輯位址之分配係被解除。也就是說,因應於較早的寫入要求而被寫入至了非揮發性記憶體中之資料,係起因於因應於之後的修整要求而使其之邏輯位址之分配被作了解除一事,而成為無效資料。
於此種情況時,為了立即將成為無效資料之資料寫入至非揮發性記憶體中,非揮發性記憶體係會成為有所損耗。
本發明之實施形態,係提供一種能夠將記憶體系統內之非揮發性記憶體之損耗減輕的資訊處理裝置。
若依據實施形態,則資訊處理裝置,係能夠與記憶體系統作連接。資訊處理裝置,係具備有非揮發性記憶體與處理器。處理器,係在非揮發性記憶體中儲存第1資料。處理器,係將被與第1資料相互附加有關連性並且包含有相當於對於第1邏輯位址範圍作指定的第1寫入指令之資訊的第1管理資料,儲存在非揮發性記憶體中。處理器,係進行第1寫入指令的對於記憶體系統之第1次的送訊。處理器,係因應於從記憶體系統而接收了針對第1次所被送訊的第1寫入指令之第1回應一事,而將代表已接收了針對第1次所被送訊的第1寫入指令之第1回應一事的資訊,追加至第1管理資料中。處理器,在接收了第1回應之後,係因應於從記憶體系統而接收了針對第1寫入指令之第2回應一事,而從非揮發性記憶體來將第1資料與第1管理資料刪除。處理器,當在接收針對第1寫入指令之第2回應之前,而被要求有將第2資料寫入至包含有第1邏輯位址範圍之至少一部分之第2邏輯位址範圍的第3邏輯位址範圍中、或者是被要求將第3邏輯位址範圍之分配解除的情況時,係對於記憶體系統,而送訊將與第1寫入指令相對應之對於第1邏輯位址範圍的第1資料之寫入之中的至少對於第2邏輯位址範圍之寫入作中止的指令。處理器,在對於第2邏輯位址範圍之寫入之中止為成功的情況時,係將第1管理資料作更新或者是刪除。
以下,參考圖面,針對實施形態作說明。
若依據實施形態,則資訊處理裝置,係能夠與記憶體系統作連接。資訊處理裝置,係具備有非揮發性記憶體與處理器。處理器,係在非揮發性記憶體中儲存第1資料。處理器,係將被與第1資料相互附加有關連性並且包含有相當於對於第1邏輯位址範圍作指定的第1寫入指令之資訊的第1管理資料,儲存在非揮發性記憶體中。處理器,係進行第1寫入指令的對於記憶體系統之第1次的送訊。處理器,係因應於從記憶體系統而接收了針對第1次所被送訊的第1寫入指令之第1回應一事,而將代表已接收了針對第1次所被送訊的第1寫入指令之第1回應一事的資訊,追加至第1管理資料中。處理器,在接收了第1回應之後,係因應於從記憶體系統而接收了針對第1寫入指令之第2回應一事,而從非揮發性記憶體來將第1資料與第1管理資料刪除。處理器,當在接收針對第1寫入指令之第2回應之前,而被要求有將第2資料寫入至包含有第1邏輯位址範圍之至少一部分之第2邏輯位址範圍的第3邏輯位址範圍中、或者是被要求將第3邏輯位址範圍之分配解除的情況時,係對於記憶體系統,而送訊將與第1寫入指令相對應之對於第1邏輯位址範圍的第1資料之寫入之中的至少對於第2邏輯位址範圍之寫入作中止的指令。處理器,在對於第2邏輯位址範圍之寫入之中止為成功的情況時,係將第1管理資料作更新或者是刪除。
首先,參照圖1,針對包含有第1實施形態之資訊處理裝置的資訊處理系統1之構成作說明。資訊處理系統1,係包含有資訊處理裝置2和記憶體系統3。
資訊處理裝置2,係可為將大量且多樣化的資料保存於記憶體系統3中之儲存伺服器,亦可為伺服器或個人電腦。以下,係將資訊處理裝置2亦稱作主機2。
記憶體系統3,係為以對於如同NAND型快閃記憶體一般之非揮發性記憶體而寫入資料並從非揮發性記憶體而將資料讀出的方式所構成之半導體儲存裝置。記憶體系統3,係亦被稱作儲存裝置。記憶體系統3,例如係可作為固態硬碟(SSD)而被實現。
記憶體系統3,係可作為主機2之儲存設備而被作使用。記憶體系統3,係可內藏於主機2中,亦可經由纜線或網路而被與主機2作連接。
用以將主機2與記憶體系統3相互作連接之介面,係準據於PCI Express(PCIe)(註冊商標)、Ethernet(註冊商標)、Fibre channel、NVM Express(NVMe)(註冊商標)等之規格。
以下,針對主機2與記憶體系統3之個別之構成例作說明。
(主機2之構成例)
主機2,例如,係具備有CPU21、隨機存取記憶體(RAM)22、儲存設備介面(儲存設備I/F)23、非揮發性隨機存取記憶體(NVRAM)24、RAM介面(RAM I/F)25、以及NVRAM介面(NVRAM I/F)26。CPU21、儲存設備I/F23、RAM I/F25以及NVRAM I/F26,係亦可經由匯流排20而被作連接。
CPU21,例如係為至少1個的處理器。CPU21,係對於主機2內之各種的組件之動作進行控制。
RAM22,係為揮發性記憶體。RAM22,例如,係作為動態隨機存取記憶體(DRAM)或靜態隨機存取記憶體(SRAM)而被實現。RAM22之記憶區域,例如,係被分配來作為作業系統(OS)221、驅動器222、各種之應用程式223的儲存區域。以下,係亦將應用程式(application program)223單純稱作應用(application)223。
儲存設備I/F23,係作為對於主機2與記憶體系統3之間之通訊作控制的控制電路而起作用。儲存設備I/F23,係對於記憶體系統3而送訊各種之指令、例如送訊輸入輸出(I/O)指令、各種控制指令。在I/O指令中,例如,係包含有寫入指令、讀取指令等。在控制指令中,例如,係可包含有修整指令(解映射(UNMAP)指令)、中斷指令、修正指令、清除(flush)指令。
修整指令,係為用以將針對所被指定了的邏輯位址範圍而作了分配的快閃記憶體之區域之分配作解除(deallocate)之指令。作為修整指令,例如,係使用藉由NVMe規格所規定的Dataset Management指令。
邏輯位址範圍,係包含1個以上的邏輯位址。邏輯位址,係為了對於記憶體系統3指定位址,而被主機2所使用。記憶體系統3所提供給主機2之邏輯位址範圍,係能夠被分割為複數之名稱空間(name space)。名稱空間,係藉由名稱空間ID而被作辨識,各個的名稱空間係持有相互獨立之邏輯位址空間。邏輯位址,例如係為邏輯區塊位址(LBA)。以下,主要係針對作為邏輯位址而使用有LBA的情況來作例示。1個的名稱空間內之使用者資料,係被邏輯性地儲存在具有一定之容量的扇區(sector)中。扇區,係藉由LBA而被特定。扇區之容量,係並不需要在名稱空間之間而為相同。
修整指令,例如,係包含有代表主機2內之場所的資料指標、指定進行LBA範圍之分配解除處理(修整處理)之值、以及應使分配被作解除的LBA範圍之數量。在藉由資料指標所被展示的主機2內之場所處,係被儲存有代表應使分配被作解除的LBA範圍之資訊。係將代表LBA範圍之資訊亦稱作範圍(range)資訊。被與修整指令相互附加有關連性之範圍資訊,係為代表應因應於修整指令而使分配被作解除的LBA範圍之資訊。
中斷指令,係為用以將對於記憶體系統3所發行的指令之實行中止之指令。中斷指令,例如,係藉由NVMe規格而被作規定。中斷指令,係包含有能夠唯一性地特定出應被中止之指令的資訊。能夠唯一性地特定出指令之資訊,例如,係包含有指令的辨識資訊(指令ID)。中斷指令,例如,係為了將對於記憶體系統3所發行的寫入指令之實行中止,而被作使用。
修正指令,係為用以將對於藉由已發行之寫入指令所指定了的LBA範圍之寫入之一部分取消(中止)之指令。當對於藉由已發行之寫入指令所指定了的LBA範圍之寫入之一部分被作取消的情況時,修正指令,例如,係包含有能夠唯一性地特定出該寫入指令之資訊、和代表應被取消之LBA範圍之資訊(範圍資訊)。修正指令,係亦可包含有代表被儲存有「代表應被作取消的LBA範圍之資訊」的主機2內之場所之資訊。代表應被作取消的LBA範圍之資訊,係亦可代表「藉由相對應的寫入指令所被指定了的LBA範圍」之中之複數之LBA範圍。被與修正指令相互附加有關連性之範圍資訊,係為代表應因應於修正指令而使寫入被作取消的LBA範圍之資訊。
清除(flush)指令,係包含有特殊清除指令和一般清除指令。
特殊清除指令,係為針對未完成之寫入指令或修整指令之中之「記憶體系統3已回送了後述之第1次的完成通知」者,而使記憶體系統3回送第2次的完成通知之指令。更具體而言,特殊清除指令,係為用以藉由「將並未被寫入至記憶體系統3之非揮發性記憶體中的使用者資料從主機2之記憶區域而寫入至記憶體系統3之非揮發性記憶體中」一事來使寫入指令處理完成的指令。又,特殊清除指令,係為用以使修整指令處理完成之指令。
一般清除指令,係為用以「將被寫入至了記憶體系統3內之使用有像是DRAM一般之揮發性記憶體的揮發性寫入快取中的使用者資料,寫入至記憶體系統3之非揮發性記憶體中」之指令。如同後述一般,主機2之IO受理部210,係對於應用程式223或OS221,而提供虛擬性之斷電保護功能(虛擬PLP功能)。故而,應用程式223和OS221,在對於IO受理部210而進行輸入輸出要求時,係並不需要得知在IO受理部210或者是IO受理部210所送出輸入輸出要求的目標(例如記憶體系統3)處是否存在有非揮發性寫入快取。因此,IO受理部210,就算是從應用程式223或OS221而受理了一般清除指令之發行要求,也並不會進行任何動作,而是恆常對於應用程式223或OS221回應「正常完成」。
具備有PLP功能之記憶體系統,若是從主機而接收寫入指令,則係將使用者資料寫入至揮發性寫入快取中,並在將使用者資料寫入至非揮發性記憶體中之前,對於主機而回送完成回應。藉由此,記憶體系統,係對於主機而言看起來像是能夠高速地進行寫入。當對於記憶體系統之電力供給喪失的情況時,記憶體系統,係藉由PLP功能,而將揮發性寫入快取中之尚未被寫入至非揮發性記憶體中的使用者資料,寫入至非揮發性記憶體中。藉由此,記憶體系統,係對於主機而言看起來像是在記憶體系統內並不存在有揮發性寫入快取。以下,係將此種具備有PLP功能之記憶體系統的揮發性寫入快取,稱作附加PLP功能寫入快取。另外,在PLP功能中,於多數的情況,係利用有被儲存在記憶體系統內之電容器中的能量。
IO受理部210,係對於應用程式223或OS221,而提供虛擬PLP功能。虛擬PLP功能,係為使用被儲存於NVRAM24中之資料,來將「起因於主機2之異常結束、由於記憶體系統3之不正常斷電等所導致之異常結束或者是記憶體系統3之非預期之再啟動所造成的無法完成之對於記憶體系統3(更詳細而言,記憶體系統3之非揮發性記憶體)之使用者資料之寫入」作恢復之功能。換言之,IO受理部210,係使用NVRAM24和記憶體系統3,來對於應用程式223或OS221,而提供具備有PLP功能之虛擬記憶體系統。
NVRAM24,係為非揮發性記憶體。NVRAM24,係亦被稱作儲存級記憶體(Storage Class Memory,SCM)。作為NVRAM24,例如,係使用有MRAM(磁阻式隨機存取記憶體,Magnetoresistive Random Access Memory)、PRAM(相變化隨機存取記憶體,Phase change Random Access Memory)、ReRAM(可變電阻式隨機存取記憶體,Resistive Random Access Memory)或者是FeRAM(鐵電式隨機存取記憶體,Ferroelectric Random Access Memory)。NVRAM24之記憶區域,係被分配為作為資料緩衝241而被利用之緩衝區域、提交佇列(SQ)242之區域、完成佇列(CQ)243之區域、指標清單244之儲存區域、在由主機2所致之處理中所被使用之各種之資料的儲存區域。在由主機2所致之處理中所使用的各種資料,例如,係包含有鎖死資料清單(locked data list)245、修正指令資料246。
資料緩衝241,係為用以將應被寫入至記憶體系統3之非揮發性記憶體中的使用者資料以及代表應使分配被作解除的LBA範圍之資訊(範圍資訊)暫時性地作記憶之記憶區域。
提交佇列242,係為為了從主機2來對於記憶體系統3送訊指令而被儲存有指令之佇列。提交佇列242,邏輯性而言係成為環狀。亦即是,相同之區域係被反覆作利用。
完成佇列243,係為為了從記憶體系統3來對於主機2回送回應(完成通知(completion))而被儲存有回應之佇列。記憶體系統3,係能夠針對1個的寫入指令而回應複數之完成通知。記憶體系統3,係能夠針對1個的修整指令而回應複數之完成通知。完成佇列243,亦同樣的,邏輯性而言係成為環狀。
另外,主機2,係亦可針對1個的記憶體系統3,而針對指令之各種類之每一者、例如針對「管理指令用」和像是讀取指令與寫入指令一般之「輸入輸出(I/O)指令用」,而分別設置相異之提交佇列242和完成佇列243。又,主機2,係亦可針對1個的記憶體系統3,而設置複數之「I/O指令用」之提交佇列242/完成佇列243之組。在本實施形態中,雖係構成為將提交佇列242/完成佇列243設置在NVRAM24處,但是,係亦可將除了寫入指令以及修整指令以外的指令用之提交佇列242/完成佇列243設置在RAM22處。
指標清單244,係為代表「被與寫入指令或讀取指令相互附加有關連性之使用者資料的在資料緩衝241上之位置」之指標的清單。在本實施形態中,指標清單244雖係構成為被儲存在NVRAM24中,但是,指標清單244係亦可被儲存在RAM22中。
鎖死資料清單245,係為用以對於從主機2而對於記憶體系統3所發行的寫入指令以及修整指令之處理狀況作管理之清單。1個的鎖死資料清單245,例如係對應於1個的記憶體系統3。更詳細而言,1個的鎖死資料清單245,例如係被與所對應之1個的記憶體系統3之辨識資訊(驅動器ID)相互附加有關連性。
修正指令資料246,係為用以針對有關於從主機2而對於記憶體系統3所發行的修正指令之資訊作管理之資料。1個的修正指令資料246,例如,係對應於使寫入被作了取消之1個的LBA範圍。
RAM I/F25,係作為以對於針對RAM22之存取來進行控制的方式而被構成之RAM控制電路而起作用。
NVRAM I/F26,係作為以對於針對NVRAM24之存取來進行控制的方式而被構成之NVRAM控制電路而起作用。
圖2,係對於在主機2處所被使用之鎖死資料清單245之構成例作展示。鎖死資料清單245,係可包含有分別與從主機2所被送訊至記憶體系統3處之1個以上的寫入指令以及修整指令相對應之1個以上的登錄(entry)。在鎖死資料清單245中,1個以上的登錄,係以從應用程式223或者是OS221而受理了寫入要求或者是修整要求之順序,而被作記憶。因此,被記憶有1個以上的登錄之區域,係藉由像是環形緩衝形式、使用指標而被作了連結的清單構造等之能夠對於被作了釋放的區域作再利用之形式,而被作管理。
各登錄,例如,係包含有SQ登錄資訊欄位、完成通知順序欄位、資料區域管理資訊欄位、完成通知狀態欄位、以及針對修正指令資料之指標欄位。
SQ登錄資訊欄位,係展示有代表所對應的寫入指令或者是修整指令之資訊(SQ登錄資訊)。SQ登錄資訊,係包含有指令之種類、內容、於實行時所必要之參數等之資訊。以下,針對對應於寫入指令之SQ登錄資訊欄位、和對應於修整指令之SQ登錄資訊欄位,而分別具體性地進行說明。
(對應於寫入指令之SQ登錄資訊欄位)
對應於寫入指令之SQ登錄資訊欄位,例如,係展示有指令操作碼(Command operation code)、資料指標、指令ID、名稱空間ID、LBA、以及資料長度。
指令操作碼,係為代表所對應的指令(於此係為寫入指令)之種類之碼。作為指令操作碼,例如,係使用藉由NVMe規格所規定的Opcode。
資料指標,係為代表在主機2處應因應於所對應之寫入指令而被作寫入的使用者資料所被儲存之場所的資訊。作為資料指標,例如,係使用藉由NVMe規格所規定的Physical Region Page(PRP)登錄或是其之清單、或者是Scatter Gather List(SGL)。當使用有PRP的情況時,PRP之登錄的清單之指標,係被儲存在SQ登錄資訊欄位中。在使用有SGL的情況時,代表SGL之最初之SGL段(segment)的位址,係被儲存在SQ登錄資訊欄位中,在此段中,係僅儲存有代表第2個的段以及大小之描述符(descriptor)。另外,PRP登錄之清單和SGL之第2個之後之段,係被儲存在指標清單244中。
首先,針對PRP詳細作說明。PRP,係為將與在邏輯位址空間上而相連續之邏輯位址範圍相互對應的使用者資料之記憶區域,映射至物理位址空間上之物理位址範圍處者。
圖3,係對於邏輯位址空間91與物理位址空間92之間之映射之例作展示。邏輯位址空間91,係為為了對於記憶體系統3指定位址而被主機2所使用的邏輯位址(如同上述一般,例如係為LBA)之空間。在本例中,物理位址空間92,係為對於資料緩衝241之記憶區域進行位址指定的物理位址之空間。邏輯位址空間91與物理位址空間92,例如係以頁面容量單位而被作分割。邏輯位址空間91之頁面(以下,係亦稱作邏輯頁面)與物理位址空間92之頁面(以下,係亦稱作物理頁面),係以一對一而被作映射。另外,通常,物理位址空間92,係較邏輯位址空間91而更窄。在邏輯位址空間91上而相連續之邏輯位址,係可被映射至在物理位址空間92上而為非連續的物理位址處。記憶體系統3,係使用物理位址來對於主機2之資料緩衝241進行存取。因此,主機2,係有必要將在寫入指令中為僅藉由「開頭之邏輯位址」與「資料長度」而被作展示的邏輯位址空間91之邏輯位址之範圍,轉換為物理位址空間92之物理位址之範圍並交給記憶體系統3。此物理位址,係為被稱作PRP登錄之資料。
圖4,係對於PRP登錄之構造之例作展示。PRP登錄,係以全體來代表1個的物理位址。PRP登錄之資料容量,例如,係為8位元組(=64位元)。PRP登錄,係包含有基礎位址(Base Address)與偏位(Offset)之2個的區域。基礎位址之區域,係代表某一物理頁面之開頭之物理位址。基礎位址之區域的容量,例如,係為52位元。偏位之區域,係代表從該物理頁面之開頭起的偏位。偏位之區域的容量,例如,係為12位元。
以下,係將基礎位址乃身為「物理位址N」之物理頁面,亦標記為物理頁面N。另外,例如,當1個的PRP登錄之資料容量係為8位元組的情況時,偏位,係有必要以不會使某一物理頁面中之最後的PRP登錄跨過物理頁面邊界的方式,來與8位元組之邊界相對齊(另外,偏位之下位3位元係為0)。
圖5,係為將在圖3中所示之使用者資料區域藉由PRP登錄清單來作了表現之例。如同在圖5(a)中所示一般,1個的I/O指令(寫入指令)之資料指標之區域,係可包含有2個的PRP登錄之欄位921、922。
第1PRP登錄之欄位921,係包含有使用者資料所被作儲存之最初之物理頁面之基礎位址、和代表在該物理頁面內之使用者資料之開始位置的偏位。
第2PRP登錄之欄位922,係當使用者資料之容量為較第1PRP登錄所展示的資料緩衝241之記憶區域之容量而更大的情況時,會被作使用。當使用者資料之容量為較「第1PRP登錄所展示的記憶區域之容量」與「另外一個的物理頁面之容量」之合計而更小的情況時,第2PRP登錄之欄位922,係包含有第2個的物理頁面之基礎位址。於此情況,由於使用者資料係從第2個的物理頁面之開頭起而被作儲存,因此,偏位係為0。
當使用者資料為橫跨3個以上的頁面的情況時,第2PRP登錄之欄位922,係包含有「儲存有包含第2個以後的PRP登錄之PRP登錄清單的物理位址」。PRP登錄清單,係為指標清單244。
在圖3以及圖5(a)所示之例中,第1PRP登錄之欄位921,係展現有物理頁面D之偏位α的位置,亦即是係代表「使用者資料之開頭為被儲存在物理位址D+α處」。
在圖3以及圖5(a)所示之例中,第2PRP登錄之欄位922,係展現有物理頁面X(未圖示)之偏位λ的位置,亦即是係代表「第2個以後的PRP登錄清單為被儲存在物理位址X+λ處」。
如同在圖5(b)中所示一般,被儲存於物理位址X+λ處之第2個以後的PRP登錄清單,係分別代表在物理頁面A、物理頁面B、物理頁面C、物理頁面(C+1)、・・・以及物理頁面(C+n-1)處被儲存有使用者資料。當無法將PRP登錄清單完全儲存在物理頁面X中的情況時,被儲存於物理頁面X中之最後的PRP登錄,係並非為代表使用者資料所被作儲存之物理位址,而是代表下一個的PRP登錄清單所被作儲存之物理頁面(在圖5(b)所示之例中,係為頁面Y)的物理位址。當PRP登錄之資料容量係為8位元組而1個的物理頁面之容量係為4KiB的情況時,在1個的物理頁面中,係能夠儲存512個的PRP登錄。於圖5(b)所示之例的情況中,由於PRP登錄係從物理頁面Y之開頭起而被作儲存,因此,此PRP登錄之偏位係為0。PRP登錄清單所被作儲存之區域,亦同樣的,在邏輯位址空間91中係為相連續之區域。因此,在PRP清單所被作儲存之邏輯頁面之中的開頭之邏輯頁面處,係會有從途中起而被儲存有PRP清單的情況。又,在最後之邏輯頁面處,係會有直到途中為止而被儲存有PRP清單的情況。另一方面,在途中之邏輯頁面處,係絕對會從開頭起直到最後地而被儲存有PRP清單。因此,PRP登錄清單所被作儲存之物理頁面,就算是在物理位址空間92中並非為相互連續,第2個之後的PRP登錄清單也絕對會從物理頁面之開頭起而被作儲存。
具體而言,如同在圖5(c)中所示一般,被儲存於物理位址Y處之PRP登錄清單之最後的部分,係分別代表在物理頁面(C+n)、物理頁面(C+q)以及物理頁面E處被儲存有使用者資料。代表使用者資料之區域的PRP登錄,係被製作有與被儲存有藉由I/O指令而被作傳輸的資料之1個以上的物理頁面之數量相對應之量。由於物理頁面之容量係較扇區容量而更大,因此,在最後之PRP登錄所代表之物理頁面中,係亦會有只直到途中為止地而被儲存有使用者資料的情形。
接著,針對SGL詳細作說明。SGL,係亦被稱作Vectored I/O。SGL,係為用以成為能夠「將被儲存於邏輯位址空間上之複數之非連續之邏輯位址範圍中的使用者資料,藉由1個的I/O指令來寫入至相連續之LBA範圍中」或者是「從相連續之LBA範圍來藉由1個的I/O指令而讀入至該非連續之邏輯位址範圍中」的資料構造。
圖6,係對於SGL之例作展示。SGL,係包含有1個以上的SGL段(指標清單244)。各SGL段,係為與8位元組單位之邊界相互整合的連續區域,並包含1個以上的SGL描述符。
各SGL段內之除了最後之SGL描述符以外的SGL描述符,係為SGL資料區塊描述符。SGL資料區塊描述符,係代表使用者資料所被作儲存的資料緩衝241之區域之大小與開頭之物理位址。使用者資料所被作儲存之1個的區域之容量,係並不需要身為扇區容量之整數倍。
各SGL段內之除了最後之SGL描述符,係為SGL段描述符、或者是SGL末尾段描述符。SGL段描述符,係代表下一個的SGL段所被作儲存的區域之大小與開頭之物理位址。SGL末尾段描述符(在圖6之例中,係為SGL段N-1內之最後之SGL描述符),係代表下一個的SGL段(在圖6所示之例中,係為SGL段N)乃身為最後的SGL段。
在使用有SGL的情況時,寫入指令,係包含最初之SGL段之位址。寫入指令,係僅能夠儲存1個的SGL描述符。當並無法藉由此最初之SGL段來對於使用者資料所被作儲存之資料緩衝241之區域全部作指定的情況時,於此SGL段之最後處,係被儲存有SGL段描述符或者是SGL末尾段描述符。
回到圖2,並回到針對對應於寫入指令之SQ登錄資訊欄位的說明。
指令ID,係為所對應的寫入指令之辨識資訊。
名稱空間ID,係為所對應的寫入指令所應被實行之名稱空間之辨識資訊。為了對於記憶體系統3進行存取而被主機2所使用的邏輯位址空間(LBA空間),係可存在有複數。各邏輯位址空間,係會有被稱作名稱空間的情形。複數之名稱空間之1個,係可藉由名稱空間ID而被特定出來。
LBA,係為藉由所對應的寫入指令而被作指定之LBA。此LBA,係代表應因應於寫入指令而使使用者資料被作寫入的LBA範圍之開頭之LBA。
資料長度,係為藉由所對應的寫入指令而被作指定之資料長度。此資料長度,係代表應因應於寫入指令而被作寫入的邏輯區塊單位之使用者資料之長度(亦即是,扇區數)。故而,藉由以寫入指令而指定LBA與資料長度,係能夠特定出應因應於該寫入指令而使使用者資料被作寫入的LBA範圍。
(對應於修整指令之SQ登錄資訊欄位)
對應於修整指令之SQ登錄資訊欄位,例如,係展示有指令操作碼、資料指標、範圍數量、指令ID、以及名稱空間ID。
指令操作碼,係為代表所對應的指令(於此係為修整指令)之種類之碼。
資料指標,係為代表在主機2處之「被與所對應之修整指令相互附加有關連性的範圍資訊」所被儲存之場所的資訊。關於被與修整指令相互附加有關連性之範圍資訊的具體性之構成例,係參考圖7而於後再作敘述。
指令ID,係為所對應的修整指令之辨識資訊。
名稱空間ID,係為所對應的修整指令所應被實行之名稱空間之辨識資訊。
圖7,係針對被與修整指令相互附加有關連性之範圍資訊的構成例作展示。範圍資訊,例如,在NVMe規格中,係作為範圍(亦即是,LBA範圍)之清單而被作規定。在範圍資訊中,1個的範圍,例如,係藉由「開頭之LBA」與「邏輯區塊單位之長度(亦即是,扇區數)」之組,而被作表現。範圍資訊,係包含有藉由指令而被作了指定的數量之範圍。
在圖7所示之例中,範圍資訊,係可包含有Range 0~Range 255之256個的範圍。在範圍資訊中,於各範圍之每一者處,係分別被設置有Context Attributes、邏輯區塊單位之長度、以及開頭之LBA之各欄位。另外,在被與修整指令相互附加有關連性之範圍資訊處,Context Attributes之欄位係並不被作使用。
回到圖2中所示之鎖死資料清單245之各欄位的說明。
完成通知順序欄位,係代表對於所對應的寫入指令或者是修整指令之第1次之完成通知之被作了接收的順序。在被主機2所接收之1個以上的完成通知之各者中,係依循於被接收之順序而被分配有序列編號。完成通知順序欄位,係代表被分配給對於所對應的寫入指令或者是修整指令之第1次之完成通知的序列編號。
資料區域管理資訊欄位,係展示有能夠特定出「應因應於所對應之寫入指令而被作寫入的使用者資料所被儲存之NVRAM24內之記憶區域」的資訊、或者是能夠特定出「被與所對應之修整指令相互附加有關連性之範圍資訊所被儲存之NVRAM24內之記憶區域」的資訊。此資訊,例如,係能夠為了「使用OS221之功能來將被特定出之NVRAM24內之記憶區域(例如,頁面)作鎖死或鎖死解除」而被作利用。
完成通知狀態欄位,係代表是否收訊了對於所對應的寫入指令或者是修整指令之第1次之完成通知。另外,係亦可將完成通知狀態欄位省略,並基於在完成通知順序欄位中被儲存有序列編號一事來代表係收訊了對於所對應的寫入指令或者是修整指令之第1次之完成通知。
在對應於寫入指令之登錄中,針對修正指令資料之指標欄位,係代表對於被與該寫入指令相互附加有關連性之修正指令資料246的指標。被與寫入指令相互附加有關連性之修正指令資料246,係代表有關於藉由該寫入指令而被作了指定的LBA範圍之中之「使寫入被作了取消的LBA範圍」之資訊。對於被與寫入指令相互附加有關連性之修正指令資料246的指標,在NVRAM24中,係代表該修正指令資料246所被作儲存之位置。當對於藉由寫入指令而被作了指定的LBA範圍之寫入並未被作取消的情況時,在針對修正指令資料之指標欄位中,例如係被設定有「NULL」。另外,在對應於修整指令之登錄中,於針對修正指令資料之指標欄位中,例如,係被設定有「NULL」。
在以下之關連於鎖死資料清單245之說明中,係將在SQ登錄資訊欄位中所展示之值,亦單純稱作SQ登錄資訊。關於在鎖死資料清單245之其他之各欄位中所展示之值、以及在其他之表之各欄位中所展示之值,亦為相同。
圖8,係對於修正指令資料246之構成例作展示。修正指令資料246,係包含有被作了取消的寫入之開頭之LBA、使寫入被作了取消的扇區數、以及對於下一個的修正指令資料之指標。
根據被作了取消的寫入之開頭之LBA和使寫入被作了取消的扇區數,係能夠特定出在藉由被相互附加有關連性之寫入指令而被作了指定的LBA範圍之中之「使寫入被作了取消的LBA範圍(以下,係稱作第1取消LBA範圍)」。又,針對下一個的修正指令資料之指標,係代表針對被與同一之寫入指令相互附加有關連性之其他的修正指令資料246之指標。此其他的修正指令資料246,係代表有關於藉由寫入指令而被作了指定的LBA範圍之中之「使寫入被作了取消的其他之LBA範圍(以下,係稱作第2取消LBA範圍)」之資訊。亦即是,此其他的修正指令資料246,係代表有關於藉由寫入指令而被作了指定的LBA範圍之中之「與第1取消LBA範圍相異之第2取消LBA範圍」之資訊。另外,當並不存在有針對被與同一之寫入指令相互附加有關連性之其他的修正指令資料246的情況時,在對於下一個的修正指令資料之指標處,例如係被設定有「NULL」。
在鎖死資料清單245之登錄中之針對修正指令資料的指標,係能夠藉由在修正指令資料246處之針對下一個的修正指令資料之指標,來以由鏈結所致之清單(linked list)構造而對於與「對所對應之寫入指令進行修正之1個以上的修正指令」相對應之修正指令資料246進行管理。亦即是,也可以說,鎖死資料清單245之各登錄和修正指令資料246之各登錄,係構成修正指令資料清單。藉由此,係能夠容易地進行取消LBA範圍之(1)追加、(2)修正、(3)插入、(4)刪除。
更具體而言,當取消LBA範圍最初被作追加的情況時,在鎖死資料清單245中之所對應之登錄的「針對修正指令資料之指標」處,係被寫入有對於「代表所追加之取消LBA範圍的修正指令資料246」之指標。當取消LBA範圍更進而被作追加的情況時,在修正指令資料246中之所對應之登錄的「針對下一個的修正指令資料之指標」處,係被寫入有針對「代表所追加之取消LBA範圍的其他之修正指令資料246」之指標。
當「與已被包含於修正指令資料清單中之取消LBA範圍相連續之LBA區域」被追加性地作取消的情況時,於該既存之取消LBA範圍相對應之開頭LBA係變小,並且被作取消之資料長度(扇區數)係增加,或者是,僅有被作取消之資料長度(扇區數)會增加。
當複數之取消LBA範圍被以升順或降順來重新作排列的情況時,在修正指令資料清單中之所對應之登錄的「被改寫為針對下一個的修正指令資料之指標的指標(設為指標A)」,係被覆寫為針對「新產生的修正指令資料246」之指標。之後,在該新產生的修正指令資料246之針對下一個的修正指令資料之指標處,係被寫入有指標A。
在能夠將既存之修正指令資料246之2個的登錄統合為1個的情況時,僅有其中之1個的登錄會被作修正。具體而言,為了將成為了不必要的修正指令資料246(假設在針對下一個的修正指令資料之指標處係被儲存有指標B)之登錄刪除,在被寫入有針對該登錄之指標的其他之修正指令資料246之針對下一個的修正指令資料之指標處,係被寫入有指標B。藉由此,係成為能夠將被記憶有成為了不必要的修正指令資料246之登錄之區域釋放。
以後,將像是此種取消LBA範圍之(1)追加、(2)修正、(3)插入、(4)刪除的操作,稱作「將修正指令資料246登錄在修正指令資料清單中」。
藉由將修正指令資料清單中之各登錄預先並排為取消LBA範圍之升順或者是降順,在將新的取消LBA範圍登錄在修正指令資料清單中時,係能夠使與既存之取消LBA範圍之間之連續性被容易地檢索出來。藉由此,例如,係能夠容易地將修正指令資料清單之容量保持為最小。亦即是,係能夠使對於修正指令資料清單之操作簡略化。
回到圖1。於此,針對CPU21所實行之程式作說明。
CPU21,例如係實行從NVRAM24而被載入至RAM22中的各種之程式。在CPU21所實行之程式中,係包含有OS221、驅動器222以及各種之應用程式223。
OS221,係為用以對於主機2內之各種的組件之基本性的動作進行控制之程式。正實行有OS221之CPU21,例如,係對於輸入輸出、檔案管理、記憶體管理、通訊進行控制。
驅動器222,係為用以對於被與主機2作連接之裝置進行控制之程式。例如,正實行有驅動器222之CPU21,係經由儲存設備I/F23,來對於記憶體系統3送訊指令和資料。正實行有驅動器222之CPU21,係經由儲存設備I/F23,來從記憶體系統3而收訊相對於指令之回應和資料。
CPU21,係藉由實行驅動器222,而例如作為IO受理部210、指令發行部211、寫入/修整管理部212以及恢復控制部213而起作用。關於IO受理部210、指令發行部211、寫入/修整管理部212以及恢復控制部213之具體性之動作,係參照圖11~圖37而於後再述。IO受理部210、指令發行部211、寫入/修整管理部212以及恢復控制部213,係亦可作為主機2內之專用硬體而被實現。
(記憶體系統3之構成例)
記憶體系統3,例如,係具備有控制器4、非揮發性記憶體5以及DRAM6。控制器4,係可藉由如同System-on-a-chip(SoC)一般之電路來實現之。控制器4,係亦可內藏有SRAM(靜態隨機存取記憶體)。又,DRAM6係亦可被內藏於控制器4中。非揮發性記憶體5,例如係為NAND型快閃記憶體。以下,係將非揮發性記憶體5稱作NAND型快閃記憶體5。
DRAM6,係為揮發性之記憶體。在DRAM6等之RAM中,例如,係被設置有韌體(FW)61之儲存區域、邏輯物理位址轉換表62之快取區域、寫入管理表63以及修正指令資料64之儲存區域。
FW61,係為用以對於控制器4之動作進行控制的程式。FW61,例如係被從NAND型快閃記憶體5而載入至DRAM6處。
邏輯物理位址轉換表62,係對於邏輯位址之各者與NAND型快閃記憶體5之物理位址之各者之間的映射作管理。
寫入管理表63,係對於關連於所受理了的寫入指令以及修整指令之資訊作管理。
修正指令資料64,係為用以針對有關於從主機2而對於記憶體系統3所發行的修正指令之資訊作管理之資料。修正指令資料64之構成,例如,係與參照圖8而於前所述之主機2內之修正指令資料246之構成相同。
NAND型快閃記憶體5,係包含有複數之區塊。區塊之各者,係包含有複數之頁面。區塊,係作為資料刪除動作之最小單位而起作用。區塊,係亦會有被稱作「刪除區塊」或者是「物理區塊」的情形。頁面之各者,係包含有被與單一之字元線作了連接的複數之記憶體胞。頁面,係作為資料寫入動作以及資料讀出動作之單位而起作用。另外,係亦可使字元線作為資料寫入動作以及資料讀出動作之單位而起作用。
在針對各區塊之程式化/抹除循環數(P/E循環數)中,係存在有上限,而被稱作最大P/E循環數。某一區塊之1次的P/E循環,係包含有用以將此區塊內之所有的記憶體胞設為刪除狀態之刪除動作、和將資料寫入至此區塊之各頁面中的寫入動作(程式化動作)。
在NAND型快閃記憶體5處,例如,係可被寫入有使用者資料與管理資料。使用者資料,係為被與從主機2所受理了的寫入指令相互附加有關連性之應被寫入至NAND型快閃記憶體5中之資料。管理資料,係為用以對於記憶體系統3之動作作管理之資料。在管理資料中,例如,係包含有在快閃記憶體轉換層(FTL)處而被作使用之資訊、指令日誌51。在管理資料中,係亦可包含有主機2之辨識資訊(主機ID)、有關於記憶體系統3所正進行之動作之模式的資訊。
指令日誌51,係展示所對應的處理已完成了的指令之指令ID。指令日誌51,係被使用在記憶體系統3之除錯(debug)中。控制器4,係以能夠對於「與指令相對應的處理所完成了的順序」作管理的方式,來將指令ID儲存於指令日誌51中。
控制器4,係作為以對於NAND型快閃記憶體5進行控制的方式所構成之記憶體控制器而起作用。
控制器4,係亦可作為以實行NAND型快閃記憶體5之資料管理以及區塊管理的方式所構成之快閃記憶體轉換層(Flash Translation Layer,FTL)而起作用。在此藉由FTL而被實行的資料管理中,係包含有(1)對於代表LBA之各者與NAND型快閃記憶體5之物理位址之各者之間的對應關係之映射資訊之管理以及(2)用以將頁面單位之資料讀出動作/資料寫入動作和區塊單位之資料刪除動作之間之差異作隱蔽之處理。在區塊管理中,係包含有不良區塊之管理、耗損平均技術以及垃圾回收。
LBA之各者與物理位址之各者之間的映射之管理,係使用邏輯物理位址轉換表62而被實行。控制器4,係使用邏輯物理位址轉換表62,來針對LBA之各者與物理位址之各者之間的映射而以特定之管理容量單位來作管理。對應於某一LBA之物理位址,係代表此LBA之資料所被作寫入的NAND型快閃記憶體5內之物理記憶位置。控制器4,係使用邏輯物理位址轉換表62,來對於將NAND型快閃記憶體5之記憶區域邏輯性地作了分割的複數之記憶區域作管理。此些之複數之記憶區域,係與複數之LBA分別相互對應。亦即是,此些之複數之記憶區域之各者,係藉由1個的LBA而被特定出來。邏輯物理位址轉換表62,係亦可在記憶體系統3之電源ON時而被從NAND型快閃記憶體5來載入至DRAM6處。
對於1個的頁面之資料寫入,係在1次的P/E循環中而僅能進行1次。因此,控制器4,係將對應於某一LBA之更新資料,並非寫入至對應於此LBA之以前的資料所被作儲存之物理記憶位置處,而是寫入至其他的物理記憶位置處。之後,控制器4,係藉由以將此LBA與此其他之物理記憶位置相互附加關連的方式來對於邏輯物理位址轉換表62進行更新,而將以前之資料無效化。從邏輯物理位址轉換表62而被作參照之資料(亦即是被與LBA相互附加有關連之資料),係被稱作有效資料。又,並未被與任何之LBA相互附加有關連之資料,係被稱作無效資料。有效資料,係為之後會有從主機2而被讀取的可能性之資料。無效資料,係為已不會有從主機2而被讀取的可能性之資料。
DRAM6上之邏輯物理位址轉換表62,係可作為回寫快取而起作用。亦即是,當在DRAM6上之邏輯物理位址轉換表62之內容中存在有變更的情況時,邏輯物理位址轉換表62,係在適當的時序處而被非揮發化至NAND型快閃記憶體5中。進而,當某一使用者資料被寫入至了NAND型快閃記憶體5中時,該使用者資料之LBA與物理位址之間之映射,亦係被非揮發化至NAND型快閃記憶體5中。藉由此,就算是邏輯物理位址轉換表62從DRAM6而喪失,亦能夠根據被非揮發化至NAND型快閃記憶體5中之資訊,來再度建構出邏輯物理位址轉換表62。換言之,在使用者資料之對於NAND型快閃記憶體5之寫入為完成了的時間點處,就算是對於記憶體系統3之電力供給被切斷,也能夠保全被作了非揮發化的邏輯物理位址轉換表62與被作了寫入的使用者資料。
控制器4,當從主機2而收訊了對於某一LBA作指定之修整指令的情況時,係將此LBA之分配解除。亦即是,控制器4,係以將此LBA與物理記憶位置之間之相互附加關連性作解除的方式,來對於邏輯物理位址轉換表62進行更新。藉由此,控制器4,係將被與此LBA相互附加了關連性之資料無效化。
控制器4,係亦可包含有主機介面(主機I/F)11、CPU12、NAND介面(NAND I/F)13、DRAM介面(DRAM I/F)14以及計時器15。此些之主機I/F11、CPU12、NAND I/F13、DRAM I/F14以及計時器15,係亦可經由匯流排10而被作連接。
主機I/F11,係作為從主機2而收訊各種之指令、例如收訊I/O指令、各種控制指令和資料的電路而起作用。又,主機I/F11,係作為用以將針對指令之回應和資料對於主機2作送訊的電路而起作用。
NAND I/F13,係將控制器4與NAND型快閃記憶體5作電性連接。NAND I/F13,係對應於Toggle DDR、Open NAND Flash Interface(ONFI)等之介面規格。
NAND I/F13,係作為以對於NAND型快閃記憶體5進行控制的方式而被構成之NAND控制電路來起作用。NAND I/F13,係亦可經由複數之通道(Ch),來分別被與NAND型快閃記憶體5內之複數之記憶體晶片作連接。藉由使複數之記憶體晶片被平行地驅動,係能夠將對於NAND型快閃記憶體5全體之存取作廣頻寬化。
DRAM I/F14,係作為以對於針對DRAM6之存取來進行控制的方式而被構成之DRAM控制電路而起作用。
計時器15,係對於時間作計測。計時器15,係能夠將所計測到的時間提供給控制器4內之各部。
CPU12,係為以對於主機I/F11、NAND I/F13、DRAM I/F14以及計時器15作控制的方式而被構成之處理器。CPU12,係藉由實行從NAND型快閃記憶體5而被載入至DRAM6中之FW61,而進行各種之處理。FW61,係為包含有用以使CPU12實行各種之處理的命令群之控制程式。CPU12,係能夠實行用以對於從主機2而來之各種指令進行處理的指令處理等。CPU12之動作,係藉由被CPU12所實行的FW61而被作控制。
控制器4內之各部之功能,係可藉由控制器4內之專用硬體來實現之,亦可藉由使CPU12實行FW61一事來實現之。
CPU12,例如,係作為指令受理部121以及寫入/修整控制部122而起作用。CPU12,例如係藉由實行FW61,而作為此些之各部來起作用。關於由指令受理部121以及寫入/修整控制部122所致之具體性之動作,係參照圖11~圖37而於後再述。
接著,參考圖9以及圖10,針對在記憶體系統3處所被使用之2個的表進行說明。
圖9,係對於邏輯物理位址轉換表62之構成例作展示。邏輯物理位址轉換表62,係對於LBA之各者與NAND型快閃記憶體5之物理位址之各者之間的映射作管理。控制器4,係能夠使用邏輯物理位址轉換表62,來將LBA轉換為物理位址。又,控制器4,係能夠使用邏輯物理位址轉換表62,來將物理位址轉換為LBA。
在圖9所示之例中,於LBA“0”處係被映射有物理位址“A”,於LBA“1”處係被映射有物理位址“B”,於LBA“2”處係被映射有物理位址“C”。
圖10,係對於寫入管理表63之構成例作展示。寫入管理表63,係可包含有分別與1個以上的寫入指令相對應之1個以上的登錄(entry)。各登錄,例如,係包含有指令ID欄位、LBA欄位、資料長度欄位、資料指標欄位以及針對修正指令資料之指標欄位。
指令ID欄位,係代表所對應的寫入指令之指令ID。
LBA欄位,係代表藉由所對應的寫入指令而被作了指定的LBA。此LBA,係代表應因應於寫入指令而使使用者資料被作寫入的LBA範圍之開頭之LBA。
資料長度欄位,係代表藉由所對應的寫入指令而被作了指定的資料長度。此資料長度,係代表應因應於寫入指令而被作寫入的使用者資料之長度。使用藉由寫入指令而被作了指定的LBA與資料長度,係能夠特定出應因應於該寫入指令而使使用者資料被作寫入的LBA範圍。
資料指標欄位,係代表藉由所對應的寫入指令而被作了指定的資料指標。此資料指標,係代表「在主機2內之應因應於寫入指令而被寫入至NAND型快閃記憶體5中的使用者資料所被儲存之場所」,或者是代表「代表在主機2內之使用者資料所被作儲存之場所的指標清單244所被儲存之場所」。亦即是,控制器4,係從藉由資料指標所直接性或者是間接性地展示的主機2內之場所,而取得使用者資料。
針對修正指令資料之指標欄位,係代表對於所對應之寫入指令相互附加有關連性的修正指令資料64之指標。被與寫入指令相互附加有關連性之修正指令資料64,係代表有關於藉由該寫入指令而被作了指定的LBA範圍之中之「使寫入被作了取消的LBA範圍」之資訊。對於被與寫入指令相互附加有關連性之修正指令資料64的指標,在DRAM6中,係代表該修正指令資料64所被作儲存之位置。當對於藉由寫入指令而被作了指定的LBA範圍之寫入並未被作取消的情況時,在針對修正指令資料之指標欄位中,例如係被設定有「NULL」。
接著,參考圖11~圖37,針對在資訊處理系統1處所被使用之數個的動作之例進行說明。
(寫入動作之第1例)
首先,參考圖11~圖18,針對在資訊處理系統1處之寫入動作之第1例進行說明。寫入動作,係為從主機2來對於記憶體系統3送訊寫入指令並用以將被與寫入指令相互附加有關連之使用者資料寫入至NAND型快閃記憶體5中之動作。
於此,針對被設置在主機2之NVRAM24處的提交佇列242以及完成佇列243作說明。主機2,係經由提交佇列242,而將指令對於記憶體系統3作送訊。又,記憶體系統3,係經由完成佇列243,而對於主機2回送相對於指令之完成通知。
提交佇列242,係包含有使主機2將從主機2而對於記憶體系統3所發行的指令分別作儲存的複數之槽(slot)。主機2所應儲存指令之提交佇列242內之位置(亦即是槽),係藉由SQ Tail(標尾)指標而被作展示。記憶體系統3所應提取指令之提交佇列242內之位置,係藉由SQ Head(標頭)指標而被作展示。
完成佇列243,係包含有記憶體系統3將針對指令之回應分別作儲存的複數之槽。記憶體系統3所應儲存回應之完成佇列243內之位置,係藉由CQ Tail指標而被作展示。主機2所應提取回應之完成佇列243內之位置,係藉由CQ Head指標而被作展示。
以下,針對在主機2以及記憶體系統3處之具體性的寫入動作例作說明。在圖11~圖18所示之例中,為了使說明成為易於理解,係針對被寫入至提交佇列242中之指令僅有寫入指令的情況來作例示。
圖11,係對於在資訊處理系統1處的寫入動作之例作展示。於此,係針對主機2之IO受理部210接收了將使用者資料71寫入至NAND型快閃記憶體5中的寫入要求之情況作例示。此寫入要求,例如,係為由CPU21所實行之應用程式223所致的寫入要求。
首先,在主機2處,IO受理部210,係受理由應用程式223所致之寫入要求(圖11中之(1))。IO受理部210,係將所受理了的寫入要求送至寫入/修整管理部212處(圖11中之(2))。寫入/修整管理部212,係使用應用程式223或OS221之功能而將被儲存於資料緩衝241中並且被要求有寫入的使用者資料71作鎖死(圖11中之(3))。更詳細而言,寫入/修整管理部212,係使用OS221之功能而將使用者資料71所被作儲存的記憶區域(例如,頁面)作鎖死。藉由此,來防止被儲存有使用者資料71之記憶區域被非預期性地釋放或者是被作頁面移出(page out)的情形。進而,寫入/修整管理部212,係使用OS221之功能而將使用者資料71所被作儲存的記憶區域設為禁止寫入。
如同後述一般,在使用者資料71之對於NAND型快閃記憶體5之寫入完成之前,寫入要求之完成係被傳達至應用程式223處。在寫入要求之完成被作了傳達之後,應用程式223,由於係辨識到寫入為完成,因此,係會有將原本被儲存有使用者資料71之記憶區域使用在其他之用途中或者是以其他之資料來作覆寫的可能性。故而,為了防止「實際上對於NAND型快閃記憶體5之寫入尚未結束的使用者資料71」從資料緩衝241而喪失,使用者資料71所被作儲存之記憶區域係被鎖死,並且進而被設定為禁止寫入。
於此,針對OS221之記憶體管理機構作說明。
主機2之CPU21,例如,係會有具備有Memory Management Unit(記憶體管理單元,MMU)的情形。MMU,係針對「藉由CPU21而被實行的應用程式223之用以對於物理記憶體進行存取的邏輯位址之各者」與「物理記憶體上之位址(物理位址)之各者」之間的映射作管理。物理記憶體,例如,係為RAM221或NVRAM24。對於物理記憶體之存取,例如,係為從物理記憶體而來之資料之讀出或者是對於物理記憶體之資料之寫入。當應用程式223使用邏輯位址而要求了對於物理記憶體之存取的情況時,MMU,係將該邏輯位址轉換為物理位址。基於藉由轉換所得到的物理位址,對於物理記憶體之存取係被進行。
邏輯位址與物理位址之間之映射的單位,例如,係為頁面。在使用邏輯位址而被作存取之頁面(亦即是,參照圖3而於上所述之邏輯頁面)處,係可被分配有使用物理位址而被作存取的記憶體內之頁面(亦即是,參照圖3而於上所述之物理頁面)。
MMU,係能夠管理複數之邏輯頁面。與複數之邏輯頁面相對應之虛擬性的記憶體(虛擬記憶體)之記憶容量,係亦可較物理記憶體之記憶容量而更大。藉由CPU21而被實行之OS221,係僅針對複數之邏輯頁面之中之例如實際於現在而正被作使用的邏輯頁面,而分配物理頁面。藉由此,應用程式223,係能夠如同存在有較物理記憶體而更大之記憶容量之記憶體一般地而動作。
MMU,係對於複數之邏輯頁面之各別的屬性資訊進行管理。屬性資訊,例如,係包含有代表物理頁面是否有被作映射之資訊、代表是否能夠進行寫入之資訊、因應於被作了存取一事而被作設定之位元、因應於被作了寫入一事而被作設定之壞位元(dirty bit)、對於將物理頁面之映射解除一事作禁止之位元(亦即是,禁止頁面送出(page out)之位元)、或者是代表所對應的物理頁面之位址之資訊。當應用程式223要求進行對於並未被映射有物理頁面之邏輯頁面的存取或者是進行對於不可寫入之邏輯頁面之寫入的情況時,係基於屬性資訊,來對於CPU21而產生插斷(interrupt)。OS221,係能夠因應於插斷而進行適當的處理。
圖12,係為對於在應用程式223進行了寫入要求的時間點處之邏輯位址空間95以及物理位址空間98之狀態之例作說明之圖。邏輯位址空間95,係為MMU所管理的邏輯位址之空間。物理位址空間98,係為MMU所管理的物理位址之空間。邏輯位址空間95,係包含有核心(kernal)記憶體空間96與使用者(user)記憶體空間97。應用程式223,係經由使用者記憶體空間97來對於物理記憶體進行存取。
在圖12中,邏輯位址空間95以及物理位址空間98之各胞,係分別代表邏輯頁面以及物理頁面。邏輯頁面971,係為將使用者資料71邏輯性地作儲存之邏輯頁面。物理頁面981,係為將使用者資料71物理性地作儲存之物理頁面。邏輯頁面971,係被映射至物理頁面981。在圖12中,雖係展示有邏輯頁面971與物理頁面981之1個的映射,但是,係亦可使複數之邏輯頁面分別被映射至複數之物理頁面處。又,在圖中雖係省略記載,但是,在應用程式223所使用的並未包含有使用者資料71之使用者記憶體空間97之邏輯頁面處,亦係被映射有物理頁面。又,在被作使用之核心記憶體空間96之邏輯頁面處,亦係被映射有物理頁面。
使用者記憶體空間97,係於各處理程序(process)之每一者而相互獨立。另一方面,IO受理部210等,係藉由核心模式(kernal mode)而動作,其並不僅是能夠對於使用者記憶體空間97進行存取,而亦能夠對於虛擬性之核心記憶體空間96進行存取。此核心記憶體空間96,雖係於各應用程式223之每一者而為共通,但是,係並無法直接從應用程式223來進行存取。替代於此,應用程式223,係先叫出系統呼叫(system call)並切換為核心模式,之後再使被叫出之系統呼叫對於核心記憶體空間96進行存取。又,OS221之中之以核心模式而動作的部分,係對於核心記憶體空間96進行存取。
圖13,係針對當IO受理部210正要對於寫入要求源頭(例如,應用程式223)而通知寫入要求之完成之前的寫入/修整管理部212所進行之動作之例作展示。寫入/修整管理部212,例如,係在IO受理部210正要對於寫入要求源頭而通知寫入要求之完成之前,使用OS221之功能,來將包含有使用者資料71之邏輯頁面971設為禁止寫入。在指標清單244處,係以物理位址(物理頁面981)來記載有使用者資料71之位置。另外,此禁止寫入操作,係只要在直到IO受理部210對於寫入要求源頭而通知寫入要求之完成為止之前而進行即可。例如,寫入/修整管理部212,係亦可構成為:當從記憶體系統3而收訊針對與寫入要求相對應的寫入指令之第1次的完成通知,並且該完成通知係為正常回應時,進行禁止寫入操作。另外,在圖13中,雖係針對使用者資料71僅存在於1個的邏輯頁面內的情況來作了例示,但是,使用者資料71係亦可存在於複數之邏輯頁面中。於此情況,各個的邏輯頁面係被映射至其他之物理頁面處。
另外,使用者資料71,係亦可使用應用程式223或OS221之功能,而被儲存於RAM22中。當使用者資料71為被儲存於RAM22中的情況時,IO受理部210,係先將使用者資料71從RAM22而複製至NVRAM24之資料緩衝241處,之後再將寫入要求送至寫入/修整管理部212處。於此情況,使用者資料71所被作了複製的NVRAM24之中之區域,由於係並不會有在之後被從身為寫入要求源頭之應用程式223而進行寫入之虞,因此,係亦可並未被設定為禁止寫入。
回到圖11。寫入/修整管理部212,係對於指令發行部211而要求對應於寫入要求之寫入指令的發行(圖11中之(4))。指令發行部211,係因應於由寫入/修整管理部212所致之要求,而發行用以將使用者資料71作寫入的寫入指令。亦即是,指令發行部211,係產生相當於用以將使用者資料71作寫入的寫入指令之SQ登錄(entry)資訊。指令發行部211,係將所產生了的SQ登錄資訊對於寫入/修整管理部212作送出(圖11中之(5))。
寫入/修整管理部212,係使用藉由指令發行部211所被送出的SQ登錄資訊,來產生鎖死資料清單245之登錄。所被產生之登錄,例如,係包含有相當於所發行了的寫入指令之SQ登錄資訊、和資料區域管理資訊。此資料區域管理資訊,係為能夠特定出「使用者資料71所被儲存之資料緩衝241內之記憶區域」的資訊。寫入/修整管理部212,係將所產生了的登錄追加至鎖死資料清單245中(圖11中之(6))。
圖14,係對於在圖11中之(6)之動作中而被追加了登錄後的鎖死資料清單245之例作展示。鎖死資料清單245,係包含有被作了追加的登錄81。
在圖14所示之例中,登錄81,係包含有相當於所被發行的寫入指令之SQ登錄資訊“sqentry_info1”、和代表被與此寫入指令相互附加有關連性的使用者資料71所被作儲存之資料緩衝241內之記憶區域的資料區域管理資訊“region_info1”。另外,登錄81,係尚未包含有完成通知順序與完成通知狀態。
回到圖11。接著,指令發行部211,係將所被發行了的寫入指令(SQ登錄資訊)儲存在提交佇列242中(圖11中之(7))。針對將指令儲存於提交佇列242中之動作更具體性地作說明。首先,指令發行部211,係將指令(於此係為寫入指令)寫入至提交佇列242內之藉由SQ Tail指標所展示之槽(slot)中。指令發行部211,係在SQ Tail指標處加算上「1」。另外,當在SQ Tail指標處而加算上「1」後之值到達了提交佇列242之槽數(亦即是佇列容量)的情況時,指令發行部211係在SQ Tail指標處設定「0」。之後,指令發行部211,係將更新後的SQ Tail指標之值,寫入至記憶體系統3之SQ Tail doorbell暫存器中。如此這般,將指令儲存在提交佇列242中之動作,係包含有將指令寫入至提交佇列242之動作、和更新SQ Tail指標之動作。
若是SQ Tail doorbell暫存器被作更新,則接收此事,記憶體系統3之指令受理部121,係從提交佇列242而取得寫入指令(圖11中之(8))。之後,指令受理部121,係將所取得的寫入指令送出至寫入/修整控制部122處(圖11中之(9))。於此,針對從提交佇列242而取得指令之動作更具體性地作說明。首先,指令受理部121,當在SQ Head指標與SQ Tail指標之間存在有差的情況時,係從提交佇列242內之SQ Head指標所展示之槽而提取指令(於此係為寫入指令)。指令受理部121,係在SQ Head指標處加算上「1」。另外,當在SQ Head指標處加算上「1」後之值為到達了提交佇列242之槽數的情況時,指令受理部121係在SQ Head指標處設定「0」。如此這般,從提交佇列242而取得指令之動作,係包含有從提交佇列242而提取指令之動作、和更新SQ Head指標之動作。
接著,寫入/修整控制部122,係使用藉由指令受理部121所被送出了的寫入指令,而將寫入管理表63作更新(圖11中之(10))。具體而言,寫入/修整控制部122,係將包含有「藉由寫入指令而被作了指定的指令ID、LBA、資料長度以及資料指標」之登錄,追加至寫入管理表63中。另外,寫入/修整控制部122,係先確認「藉由寫入指令而被作了指定的LBA為有效」、「能夠對於該LBA而寫入資料」、「資料指標為有效」,之後再將對應之登錄追加至寫入管理表63中。資料指標,例如,當資料指標係展示有主機2內之可進行存取之區域並且係展示有能夠與資料長度相配合之區域的情況時,係被視為有效。接著,寫入/修整控制部122,係對於指令受理部121,而通知「基於寫入指令所進行之寫入管理表63之更新為完成」一事(圖11中之(11))。
指令受理部121,係因應於由寫入/修整控制部122所致之通知,而將針對寫入指令之第1次的完成通知(代表正常結束之完成通知),儲存於完成佇列243中(圖11中之(12))。此第1次的完成通知,係包含寫入指令之指令ID。又,此第1次的完成通知,係亦可包含有被作了更新的SQ Head指標。
針對將完成通知儲存於完成佇列243中之動作更具體性地作說明。首先,指令受理部121,係將完成通知寫入至完成佇列243內之CQ Tail指標所示之槽中。此時,藉由此槽之Phase Tag欄位之值被作反轉一事,完成通知之寫入係完成。主機2,係能夠藉由讀取Phase Tag欄位之值,來掌握到CQ Tail指標所展示之完成佇列243內之位置。指令受理部121,係在CQ Tail指標處加算上「1」。另外,當在CQ Tail指標處加算上「1」後之值為到達了完成佇列243之槽數的情況時,指令受理部121係在CQ Tail指標處設定「0」。指令受理部121,係發行插斷(interrupt)。另外,指令受理部121,係亦可先將複數之完成通知寫入至完成佇列243中,之後再發行插斷。指令受理部121,係藉由發行插斷,而將「應被處理之新的完成通知係存在於完成佇列243中」一事,對於主機2作通知。如此這般,將完成通知儲存在完成佇列243中之動作,係包含有將完成通知寫入至完成佇列243中之動作、和更新CQ Tail指標之動作、以及發行插斷之動作。如同上述一般,更新CQ Tail指標之動作,係亦可包含有將被作了更新後的SQ Head指標對於主機2作通知之動作。以下,係將進行此些之一連串的動作一事,亦稱作「將完成通知對於主機2作通知」。
另外,指令受理部121,當從提交佇列242所取得之寫入指令係為無法實行之指令的情況時,係亦可將代表「異常結束」之完成通知,作為第1次的完成通知而儲存於完成佇列243中。
接著,主機2之指令發行部211,係從完成佇列243而取得針對寫入指令之第1次的完成通知(圖11中之(13))。之後,指令發行部211,係將所取得之第1次的完成通知對於寫入/修整管理部212作送出(圖11中之(14))。
於此,針對將從完成佇列243而取得完成通知之動作更具體性地作說明。首先,指令發行部211,係因應於藉由記憶體系統3之指令受理部121所發行之插斷,而從完成佇列243內之CQ Head指標所示之槽來提取完成通知。指令發行部211,係在CQ Head指標處加算上「1」。另外,當在CQ Head指標處加算上「1」後之值為到達了完成佇列243之槽數的情況時,指令發行部211係在CQ Head指標處設定「0」。進而,若是將完成通知作了提取的槽之Phase Tag之值與被作了更新後的CQ Head指標所展示之槽(亦稱作下一槽)之Phase Tag之值為相同(在CQ Head指標成為了0的情況時,係為作了反轉之值),則指令發行部211,係從下一槽而提取完成通知,並將CQ Head指標再度作更新。同樣的,在從Phase Tag之值為相同之槽而將完成通知全部作了提取之後,指令發行部211,係將更新後的CQ Head指標之值,寫入至記憶體系統3之CQ Head doorbell暫存器中。之後,指令發行部211,係將從記憶體系統3所收訊了的插斷作清除(clear)。如此這般,從完成佇列243而取得完成通知之動作,係包含有從完成佇列243而提取完成通知之動作、和更新CQ Head指標之動作、以及將插斷清除之動作。
當第1次之完成通知係為代表正常結束之完成通知的情況時,寫入/修整管理部212,係在鎖死資料清單245中,將與從指令發行部211所接收的第1次的完成通知相對應之登錄作更新(圖11中之(15))。具體而言,寫入/修整管理部212,係針對所接收的第1次之完成通知,而分配代表作了接收的順序之序列編號。序列編號,例如,係在每次從記憶體系統3而接收了針對寫入指令之第1次之完成通知時,會作「1」的增加。又,寫入/修整管理部212,係取得在所作了接收之第1次的完成通知中所包含之指令ID。寫入/修整管理部212,係在鎖死資料清單245中,而特定出包含有「與所取得的指令ID相對應之SQ登錄資訊」的登錄。寫入/修整管理部212,係在所特定出之登錄中,追加所被作了分配的序列編號(亦即是,代表接收了第1次的完成通知之順序之資訊)、和代表已完成第1次之完成通知之接收一事的資訊。
當第1次之完成通知係為代表異常結束之完成通知的情況時,寫入/修整管理部212,係將與所接收的第1次的完成通知相對應之資料緩衝241內的使用者資料71之鎖死解除(圖11中之(16))。之後,寫入/修整管理部212,係將與所接收的第1次的完成通知相對應之登錄,從鎖死資料清單245中而刪除(圖11中之(17))。
更具體而言,寫入/修整管理部212,係取得在所接收了的第1次的完成通知中所包含之指令ID。寫入/修整管理部212,係在鎖死資料清單245中,而特定出包含有「與所取得的指令ID相對應之SQ登錄資訊」的登錄。寫入/修整管理部212,係使用所特定出的登錄內之資料區域管理資訊,來解除被與發生了異常結束的寫入指令相互附加有關連性之使用者資料71之鎖死。又,寫入/修整管理部212,在作成有PRP登錄之清單和SGL之第2個之後之段的情況時,係亦將該些所被作儲存的指標清單244之區域釋放。之後,寫入/修整管理部212,係將所特定出之登錄,從鎖死資料清單245中而刪除(亦即是,從NVRAM24而刪除)。進而,當使用者資料71所被作儲存的記憶區域係被鎖死或者是被設為禁止寫入的情況時,寫入/修整管理部212,係亦將此些解除。
另外,當被儲存在使鎖死或者是禁止寫入被作了解除後的記憶區域中之使用者資料71係身為藉由IO受理部210而被作了複製的資料的情況時,係藉由IO受理部210而被從資料緩衝241刪除。具體而言,在此記憶區域中,係能夠儲存其他之資料。當該使用者資料71並非為藉由IO受理部210而被作了複製之資料的情況時,應用程式223或者是OS221,係決定是要對該記憶區域進行再利用或者是將其釋放。
以下,將針對某一寫入指令而如同前述一般所進行之「被相互附加有關連性之使用者資料71之鎖死之解除、所對應的鎖死資料清單245之登錄之刪除、所對應的指標清單244之區域之釋放、包含有使用者資料71之記憶區域的鎖死或者是禁止寫入之解除、以及使用者資料71之刪除」之一連串的操作,亦稱作針對寫入指令之登錄刪除操作。
圖15,係對於在圖11中之(15)之動作中而使登錄被作了更新後的鎖死資料清單245之例作展示。鎖死資料清單245,係包含有被作了更新的登錄81。
在圖15所示之例中,於登錄81中,係被追加有代表所接收了的第1次之完成通知之接收順序之完成通知順序“cseq1”、和代表已完成第1次之完成通知之接收一事的完成通知狀態“completed”。亦即是,登錄81,係展示有「已經以完成通知順序“cseq1”而完成了第1次之完成通知之接收」之內容。
寫入/修整管理部212,係若是鎖死資料清單245之更新完成,則針對藉由應用程式223或者是OS221所產生的寫入要求,而回送回應。具體而言,當第1次的完成通知係代表正常結束的情況時,寫入/修整管理部212,係對於IO受理部210而通知寫入之完成(正常結束)(圖11中之(18))。之後,IO受理部210,係將寫入之完成對於應用程式223或者是OS221作通知(圖11中之(19))。藉由此寫入完成通知,應用程式223或者是OS221,係就算是實際上對於NAND型快閃記憶體5之寫入尚未完成,也能夠使處理繼續往前進行。藉由此,雖然在記憶體系統3處由於係並不存在有附加PLP功能寫入快取,但是,對於應用程式223或OS221而言,看起來像是在記憶體系統3內係存在有附加PLP功能寫入快取。
另一方面,當第1次的完成通知係代表異常結束(錯誤結束)的情況時,寫入/修整管理部212,係對於IO受理部210而通知異常結束(圖11中之(20))。之後,IO受理部210,係將異常結束對於應用程式223或者是OS221作通知(圖11中之(21))。如同上述一般,係會有「應用程式223或者是OS221將使用者資料71儲存於RAM22中,而IO受理部210正在將使用者資料71從RAM22而複製至NVRAM24處」的情況。於此情況,應用程式223或者是OS221,係能夠因應於接收了代表異常結束之第1次之完成通知一事,而將使用者資料71原本所被作了儲存的RAM22之區域釋放並利用在其他之用途中。又,IO受理部210,係亦可將原本被儲存有使用者資料71之NVRAM24的區域釋放,並利用在其他之資料的儲存中。
圖16,係為對於在接續於圖11之後的寫入動作之例作展示。於此,針對「藉由記憶體系統3從主機2所受理的複數之寫入指令而被要求有寫入之使用者資料71之總量為到達了特定之資料單位」的情況作例示。特定之資料單位,例如,係身為能夠藉由一次的資料寫入動作而寫入至NAND型快閃記憶體5中之資料量。
在記憶體系統3中,指令受理部121以及寫入/修整控制部122,係在藉由從主機2所受理了的複數之寫入指令而被要求有寫入之使用者資料71之總量到達了特定之資料單位之後,將該特定之資料單位之使用者資料71寫入至NAND型快閃記憶體5中,並對於主機2而回送與複數之寫入指令之各者分別相互對應之第2次的完成通知。亦即是,指令受理部121以及寫入/修整控制部122,係以「並不立即地實行與所受理了的1個的寫入指令相對應之寫入,而是在藉由複數之寫入指令而被要求有寫入之使用者資料71之總量到達了特定之資料單位之後,再進行與該些之複數之寫入指令相對應之寫入」的機制(延遲寫入完備(Delayed Write Completion))來動作。
具體而言,寫入/修整控制部122,係將寫入單位之使用者資料71從資料緩衝241而傳輸至NAND型快閃記憶體5處,並將被作了傳輸的寫入單位之使用者資料71寫入(程式化)至NAND型快閃記憶體5中(圖16中之(1))。之後,寫入/修整控制部122,當存在有「所對應的使用者資料71之全部係成為了能夠從NAND型快閃記憶體5而讀出」之寫入指令的情況時,係將對應於該寫入指令之處理的完成,對於指令受理部121作通知(圖16中之(2))。寫入/修整控制部122,係將分別對應於「與寫入單位之使用者資料71相對應的複數之寫入指令之各者」之處理之完成,對於指令受理部121作通知。寫入/修整控制部122,係從寫入管理表63,而將與複數之寫入指令之各者相對應的登錄刪除(圖16中之(3))。寫入/修整控制部122,係基於與複數之寫入指令之各者相對應的處理,而將邏輯物理位址轉換表62作更新(圖16中之(4))。具體而言,寫入/修整控制部122,係以將「藉由複數之寫入指令之各者所被指定了的LBA」與「所對應之使用者資料71所被作了寫入的物理記憶位置」相互附加關連性的方式,而將邏輯物理位址轉換表62作更新。又,寫入/修整控制部122,係將複數之寫入指令之各者的指令ID,追加至指令日誌51中(圖16中之(5))。
指令受理部121,係在每次接收由寫入/修整控制部122所致之通知時,將代表「與所對應之寫入指令相應的處理之完成」一事的第2次之完成通知,對於主機2作送訊(圖16中之(6))。更具體而言,指令受理部121,係因應於由寫入/修整控制部122所致之通知,而將針對所對應的寫入指令之第2次的完成通知,儲存於完成佇列243中。由寫入/修整控制部122所致之通知,例如,係包含有處理為完成了的寫入指令之指令ID。
另外,指令受理部121,當在與寫入指令相對應的處理中發生有錯誤的情況時,係將代表錯誤之完成通知,作為第2次之完成通知而對於主機2作送訊。
接著,主機2之指令發行部211,係從完成佇列243而取得第2次的完成通知(圖16中之(7))。之後,指令發行部211,係將所取得之第2次的完成通知對於寫入/修整管理部212作送出(圖16中之(8))。
寫入/修整管理部212,係從指令發行部211而接收第2次的完成通知,並將與所接收的第2次的完成通知相對應之資料緩衝241內的使用者資料71之鎖死解除(圖16中之(9))。之後,寫入/修整管理部212,係將與所接收的第2次的完成通知相對應之登錄,從鎖死資料清單245中而刪除(圖16中之(10))。
更具體而言,寫入/修整管理部212,係取得在所接收了的第2次的完成通知中所包含之指令ID。寫入/修整管理部212,係在鎖死資料清單245中,而特定出包含有「與所取得的指令ID相對應之SQ登錄資訊」的登錄。寫入/修整管理部212,係使用所特定出的登錄內之資料區域管理資訊,來解除完成了寫入的使用者資料71之鎖死。又,寫入/修整管理部212,在作成有PRP登錄之清單和SGL之第2個之後之段的情況時,係亦將該些所被作儲存的指標清單244之區域釋放。之後,寫入/修整管理部212,係將所特定出之登錄,從鎖死資料清單245中而刪除(亦即是,從NVRAM24而刪除)。進而,當使用者資料71所被作儲存的記憶區域係被鎖死或者是被設為禁止寫入的情況時,寫入/修整管理部212,係亦將此些解除。另外,當被儲存在使鎖死或者是禁止寫入被作了解除後的記憶區域中之使用者資料71係身為藉由IO受理部210而被作了複製的資料的情況時,係藉由IO受理部210而被從資料緩衝241刪除。具體而言,在此記憶區域中,係能夠儲存其他之資料。當該使用者資料71並非為藉由IO受理部210而被作了複製之資料的情況時,應用程式223或者是OS221,係決定是要對該記憶區域進行再利用或者是將其釋放。亦即是,寫入/修整管理部212以及IO受理部210,係因應於第2次的完成通知,而進行針對所對應的寫入指令之登錄刪除操作。
另外,當第2次的完成通知為展示有「錯誤」的情況時,主機2(具體而言,指令發行部211、寫入/修整管理部212、IO受理部210),係視為記憶體系統3之故障。主機2,係將對於該記憶體系統3之處理中止,並進行作為資訊處理系統1之異常處理。例如,寫入/修整管理部212,係將關連於該記憶體系統3之一切的資料刪除。被刪除之資料,係包含有與該記憶體系統3相對應之資料緩衝241內之使用者資料71、以及與該記憶體系統3相對應之鎖死資料清單245。又,當使用者資料71所被作儲存的記憶區域係被鎖死或者是被設為禁止寫入的情況時,寫入/修整管理部212,係亦將此些解除。又,指令發行部211,係至少將對於被視為故障的記憶體系統3而送訊寫入指令以及修整指令一事停止。進而,IO受理部210,對於從應用程式223或者是OS221而來之寫入要求以及修整要求,係全部以「錯誤」來回應。
另外,在就算是無法對於記憶體系統3進行寫入也能夠進行讀出的情況時,主機2,係亦可在將關連於該記憶體系統3之一切的資料刪除之前,先將資料作保護。例如,主機2,係將記憶體系統3之所有位址之資料複製至其他之記憶體系統處,之後,將被儲存於資料緩衝241中之使用者資料71,覆寫至該作了複製後的資料處。藉由此,主機2,係能夠將「在記憶體系統3之故障的時間點處而已被非揮發化至主機2內之非揮發性記憶體(NVRAM24)與記憶體系統3內之非揮發性記憶體(NAND型快閃記憶體5)中之所有的使用者資料」作保護。
圖17,係對於在圖16中之(10)之動作中而使登錄被作了刪除後的鎖死資料清單245之例作展示。鎖死資料清單245,係包含有與所接收的第2次的完成通知相對應之登錄81。
在圖17所示之例中,登錄81,係包含有SQ登錄資訊“sqentry_info1”、完成通知順序“cseq1”、資料區域管理資訊“region_info1”、以及完成通知狀態“completed”。亦即是,登錄81,係為展示有「已經完成了第1次之完成通知之接收」之內容的登錄。登錄81,係因應於從記憶體系統3而接收了針對所對應的寫入指令(亦即是,相當於SQ登錄資訊“sqentry_info1”之寫入指令)之第2次的完成通知一事,而被作刪除。
另外,寫入指令(SQ登錄資訊)所被作了儲存的提交佇列242之槽,例如,若是因應於接收了針對此寫入指令之第1次的完成通知一事而導致SQ Head指標前進至較此槽而更前方,則係成為能夠為了發行新的指令而被作覆寫。於此情況,為了對於與主機2所發行了的寫入指令相對應之處理之狀況作管理,在鎖死資料清單245之登錄內,係被保存有相當於寫入指令之SQ登錄資訊。
又,係亦可構成為將被儲存在提交佇列242中之寫入指令作維持,直到接收了針對此寫入指令之第2次的完成通知為止。亦即是,主機2,係亦可因應於收訊了第2次的完成通知一事,而使SQ Head指標前進至較該寫入指令所被作儲存之槽而更前方。於此情況,在鎖死資料清單245之登錄內,係替代SQ登錄資訊,而被保存有代表提交佇列242之登錄之指標。又,被儲存於提交佇列242中的寫入指令本身係被作為SQ登錄資訊而使用。另外,起因於並不從提交佇列242而將寫入指令清除一事,SQ Head指標係並不會被更新,因此,提交佇列242係容易成為全滿(full),而會有成為無法發行像是讀取指令之類的其他之指令的可能性。因此,提交佇列242,係亦可作為用以發行寫入指令之專用之提交佇列而被作設置。
藉由以上之寫入動作,在記憶體系統3基於從主機2所受理的寫入指令而進行由延遲寫入完備(Delayed Write Completion)所致之使用者資料之寫入的期間中,主機2係能夠使用鎖死資料清單245來對於與所發行了的寫入指令相對應之處理之狀況作管理。
具體而言,主機2,在將寫入指令對於記憶體系統3作送訊的情況時,係將與該寫入指令相對應之登錄,追加至鎖死資料清單245中。在被作了追加的登錄中,例如,係並未包含有完成通知順序與完成通知狀態。故而,主機2,係能夠藉由被作了追加的登錄,來對於「並未接收針對所對應的寫入指令之第1次之完成通知以及第2次之完成通知」一事作管理。換言之,主機2,係能夠藉由被作了追加的登錄,來對於係身為「將所對應的寫入指令對於記憶體系統3作發行(送訊),並且並未收訊第1次之完成通知」的狀態一事作管理。
記憶體系統3,當從主機2而接收寫入指令,並在寫入管理表63中追加了所對應之登錄的情況時,係將針對該寫入指令之第1次的完成通知對於主機2作回送。主機2,係基於從記憶體系統3所接收的第1次的完成通知,而將所對應之鎖死資料清單245內之登錄作更新。在被作了更新的登錄中,例如,係被追加有完成通知順序與完成通知狀態。故而,主機2,係能夠藉由被作了更新的登錄,來對於係身為「係已接收了針對所對應的寫入指令之第1次之完成通知,並且並未接收第2次之完成通知」的狀態一事作管理。換言之,主機2,係能夠藉由被作了更新的登錄,來對於係身為「記憶體系統3受理了所對應之寫入指令」的狀態一事作管理。
又,記憶體系統3,在藉由延遲寫入完備(Delayed Write Completion)而完成了與寫入指令相對應之使用者資料之寫入的情況時,係將針對該寫入指令之第2次的完成通知對於主機2作回送。主機2,係基於從記憶體系統3所接收的第2次的完成通知,而將所對應之鎖死資料清單245內之登錄刪除。主機2,係能夠基於登錄被作了刪除一事,而結束關連於所對應之寫入指令的管理。
另外,記憶體系統3之寫入/修整控制部122,在從受理寫入指令起所經過之時間為超過了臨限值的情況時,係亦可將與已受理的寫入指令相對應之使用者資料,附加有填補(padding)地而寫入至NAND型快閃記憶體5中。於此,所謂將使用者資料附加有填補地而作寫入一事,係指將「藉由使用者資料和填補用之資料所構成的寫入單位之資料」作寫入。此臨限值,例如,係基於被主機2所期待的直到能夠得到針對寫入指令之第2次的完成通知為止之時間之上限來設定。從受理寫入指令起所經過之時間,例如,係使用計時器15而被作計測。更具體而言,寫入/修整控制部122,當在從受理寫入指令起所經過之時間為超過了臨限值的情況時,係將與已受理的寫入指令相對應之使用者資料,從主機2之資料緩衝241而傳輸至NAND型快閃記憶體5處。之後,寫入/修整控制部122,係將所被作了傳輸的使用者資料,附加有填補(padding)地而寫入至NAND型快閃記憶體5中。藉由此,指令受理部121,係能夠在被主機2所期待的時間內,而通知針對寫入指令之第2次的完成通知。
於此,對於在當應用程式223對於被鎖死或者是被設為寫入禁止之資料緩衝241之記憶區域而嘗試了寫入的情況時之動作作說明。被鎖死或者是被設為寫入禁止之記憶區域,係能夠儲存應用程式223等所使用的使用者資料71以外之資料。又,正被儲存有使用者資料71之記憶區域自身,在IO受理部210對於應用程式223或者是OS221而將寫入要求之完成作了通知之後,也會有被作覆寫的可能性。若是應用程式223或者是OS221對於被鎖死或者是被設為寫入禁止之記憶區域而嘗試進行寫入,則藉由OS221之功能,被進行了寫入操作一事係會被通知給寫入/修整控制部122。
圖18,係對於當應用程式223對於被鎖死或者是被設為寫入禁止之記憶區域而嘗試了寫入後的動作之例作展示。與在圖12以及圖13中所示之例相同的,邏輯位址空間95以及物理位址空間98之各胞,係分別代表邏輯頁面以及物理頁面。又,在邏輯頁面971處,使用者資料71係被邏輯性地作儲存。在物理頁面981處,使用者資料71係被物理性地作儲存。由於邏輯頁面971係被映射至物理頁面981處,因此,被物理性地儲存於物理頁面981中之使用者資料71,係被邏輯性地儲存於邏輯頁面971中。於此,針對「應用程式223或者是OS221對於被鎖死或者是被設為寫入禁止之邏輯頁面971而嘗試進行寫入,寫入操作係被通知給寫入/修整控制部122」的情況作考慮。
寫入/修整控制部122,係接收通知,而將物理頁面981映射至核心記憶體空間96之空閒邏輯頁面961處(圖18中之(1))。寫入/修整控制部122自身,係並不需要對於包含有此使用者資料71之邏輯頁面961進行讀寫。然而,由於若是並不進行此映射,則在後續之操作中,物理頁面981與邏輯頁面971之間之映射係會被解除,因此,OS221(更具體而言,MMU)係會成為無法對於「物理頁面981乃身為使用中」一事有所掌握。將物理頁面981映射至核心記憶體空間96之空閒邏輯頁面961處一事,由於乃是為了使OS221辨識到物理頁面981乃身為使用中以使OS221不會將物理頁面981使用在其他用途中所進行者,因此,若是能夠藉由其他之方法來實現,則亦可並不進行此映射。
藉由此映射,使用者資料71之邏輯位址空間95上之位置,係成為從邏輯頁面971而移動至邏輯頁面961。
寫入/修整控制部122,係將被儲存在物理頁面981中之使用者資料71,複製至NVRAM24內之未使用之物理頁面982處(圖18中之(2))。寫入/修整控制部122,係將邏輯頁面971之映射目標,變更為此複製目標之物理頁面982(圖18中之(3))。被映射至複製目標之物理頁面982處的邏輯頁面971,係被設定為可進行寫入(圖18中之(4))。
在此插斷處理完成之後,若是寫入/修整控制部122將控制交還給寫入要求源頭之應用程式223或者是OS221,則使插斷作了發生的寫入係被正常地繼續進行。亦即是,新的寫入係在複製目標之物理頁面982處而被實行。藉由此,應用程式223或者是OS221係能夠使動作繼續進行。寫入要求源頭之應用程式223或者是OS221,係並不會感受到發生有插斷一事。故而,寫入要求源頭之應用程式223或者是OS221,係僅會認識到「針對寫入要求之回應係有所延遲」。
另外,當此時在鎖死資料清單245處亦係為了進行在主機2內之存取而使用有邏輯位址的情況時,由於包含有使用者資料71之邏輯頁面係從邏輯頁面971而變更為邏輯頁面961,因此,係有必要因應於此變更來對於鎖死資料清單245進行修正。在並不將物理頁面981映射至邏輯頁面961處的情況時,係有必要對於鎖死資料清單245適宜進行修正。
另一方面,記憶體系統3,係僅使用在物理位址空間98中之位址來對於主機2之記憶體進行存取。由於使用者資料71所被作儲存之物理位址係並未改變,因此,記憶體系統3,係能夠繼續對於複製源頭之物理頁面981內之使用者資料71進行存取。
此被從使用者記憶體空間97而作了切離的複製源頭之物理頁面981,在收訊了第2次的完成通知之後,係使自身與核心記憶體空間96之邏輯頁面961之間之映射被解除,而被釋放。
「使複數之主體共有某一共通之記憶體區域,並當存在有從某一個的主體而對於該記憶體區域之寫入要求的時間點處,將原本被儲存於該記憶體區域中之資料複製至其他之記憶體區域處,並針對複製目標之區域而實行寫入要求」的方式,一般而言,係被稱作寫入時複製(Copy-On-Write)。藉由寫入時複製,係能夠將複製之發生與使用記憶體區域之增加抑制為最低限度。
在先前技術之寫入時複製中,分別具有相互獨立之虛擬記憶體空間的複數之應用程式等,係將被儲存有相同資料之物理記憶體區域作共有。當存在有從1個的應用程式等而對於物理記憶體區域之寫入要求的情況時,對於該應用程式係被分配有其他之物理記憶體區域,被作了共有的物理記憶體區域之資料係被複製至被新分配了的物理記憶體區域處。之後,該其他之物理記憶體區域,係被映射至該應用程式所持有的虛擬記憶體空間處。
在本實施形態之寫入時複製中,資料緩衝241上之記憶區域,係在身為主機2之外部裝置的記憶體系統3與應用程式223等之間而被作共有。記憶體系統3,係並非使用邏輯位址,而是使用物理位址來對於資料緩衝241上之記憶區域進行存取。記憶體系統3,係並不對於此記憶區域而進行寫入,另一方面,應用程式223等,係對於此記憶區域而進行寫入。而,藉由應用程式223等之寫入要求,針對該記憶區域之寫入時複製動作係被進行。在此點上,係與先前技術之寫入時複製相異。
(寫入動作之第2例)
在前述之寫入動作之第1例中,當接收了將使用者資料71寫入至NAND型快閃記憶體5中之要求的情況時,主機2係發行1個的寫入指令,記憶體系統3係針對該寫入指令而回應2個的完成通知。相對於此,在寫入動作之第2例中,當接收了將使用者資料71寫入至NAND型快閃記憶體5中之要求的情況時,主機2係將寫入指令作2次的送訊,記憶體系統3係針對該些之2次的寫入指令之各者而回應2個的完成通知。
具體而言,當接收了將使用者資料71寫入至NAND型快閃記憶體5中之寫入要求的情況時,主機2之指令發行部211係發行第1次的寫入指令。記憶體系統3,係接收第1次的寫入指令,並將第1次的完成通知對於主機2作回送。主機2,係收訊第1次的完成通知,並發行第2次的寫入指令。之後,記憶體系統3,係接收第2次的寫入指令,並在將使用者資料71寫入至NAND型快閃記憶體5中的處理完成之後,將第2次的完成通知對於主機2作回送。第1次的寫入指令與第2次的寫入指令,係均為用以將使用者資料71對於NAND型快閃記憶體5作寫入的指令。記憶體系統3,在接收了第1次的寫入指令與第2次的寫入指令之後,係進行將使用者資料71寫入至NAND型快閃記憶體5中的處理。
在寫入動作之第2例中,從主機2發行第1次的寫入指令起直到記憶體系統3將第1次的完成通知對於主機2作回送為止的動作,係與參照圖11而於前所敘述的寫入動作之第1例相同。
圖19,係對於在寫入動作之第2例中的接續於圖11之後的寫入動作作展示。
主機2之指令發行部211,係從記憶體系統3而接收針對第1次的寫入指令之第1次的完成通知,並將所對應之鎖死資料清單245內之登錄作更新,之後,發行第2次的寫入指令,並儲存在提交佇列242中(圖19中之(1))。第2次的寫入指令,例如,係為要求進行與第1次的寫入指令相同之內容之寫入的寫入指令。第2次的寫入指令,係包含有代表所對應之第1次的寫入指令之資訊(例如,指令ID)。
記憶體系統3之指令受理部121,係從提交佇列242而取得第2次的寫入指令(圖19中之(2))。之後,指令受理部121,係將所取得的第2次的寫入指令送出至寫入/修整控制部122處(圖19中之(3))。
寫入/修整控制部122,係使用藉由指令受理部121所被送出了的第2次的寫入指令,而將寫入管理表63作更新(圖19中之(4))。具體而言,寫入/修整控制部122,係在寫入管理表63中,而特定出與第1次的寫入指令相對應之登錄。在登錄之特定中,例如,係使用有在第2次的寫入指令中所包含之代表第1次的寫入指令之資訊。寫入/修整控制部122,係以會展現受理了第2次的寫入指令一事的方式,來將所特定出之登錄作更新。在寫入管理表63之各登錄中,係除了參照圖10而於前所敘述之構成以外,例如,更進而被設置有代表「是身為受理了第1次的寫入指令之狀態還是身為受理的第2次的寫入指令之狀態」一事的欄位。寫入/修整控制部122,係更進而將寫入管理表63中之指令ID,更新為第2次的寫入指令之指令ID之值。代表受理了第2次的寫入指令一事之登錄,係亦可說是對應於第1次的寫入指令與第2次的寫入指令之組。以下,係將第1次的寫入指令與第2次的寫入指令之組,亦單純稱作寫入指令之組。
於此,針對「基於寫入管理表63內之分別代表係受理了第2次的寫入指令一事之複數之登錄,藉由分別對應於該些之複數之登錄的複數之寫入指令之組而被要求有寫入之使用者資料71之總量為到達了特定之資料單位」的情況作考慮。特定之資料單位,例如,係身為能夠藉由一次的資料寫入動作而寫入至NAND型快閃記憶體5中之資料量。
指令受理部121以及寫入/修整控制部122,係在藉由從主機2所受理了的複數之寫入指令之組而被要求有寫入之使用者資料71之總量到達了特定之資料單位之後,將該特定之資料單位之使用者資料71寫入至NAND型快閃記憶體5中,並對於主機2而回送與複數之寫入指令之組(更詳細而言,複數之第2次的寫入指令)之各者分別相互對應之第2次的完成通知。亦即是,指令受理部121以及寫入/修整控制部122,係以「並不立即地實行與所受理了的1個的寫入指令之組相對應之寫入,而是在藉由複數之寫入指令之組而被要求有寫入之使用者資料71之總量到達了特定之資料單位之後,再進行與該些之複數之寫入指令之組相對應之寫入」的機制(延遲寫入完備(Delayed Write Completion))來動作。
具體而言,寫入/修整控制部122,係將寫入單位之使用者資料71從資料緩衝241而傳輸至NAND型快閃記憶體5處,並將被作了傳輸的寫入單位之使用者資料71寫入至NAND型快閃記憶體5中(圖19中之(5))。之後,寫入/修整控制部122,當存在有「所對應的使用者資料71之全部係成為了能夠從NAND型快閃記憶體5而讀出」之寫入指令之組的情況時,係將對應於該寫入指令之組之處理的完成,對於指令受理部121作通知(圖19中之(6))。寫入/修整控制部122,係將分別對應於「與寫入單位之使用者資料71相對應的複數之寫入指令之組之各者」之處理之完成,對於指令受理部121作通知。寫入/修整控制部122,係從寫入管理表63,而將與複數之寫入指令之組之各者相對應的登錄刪除(圖19中之(7))。寫入/修整控制部122,係基於與複數之寫入指令之組之各者相對應的處理,而將邏輯物理位址轉換表62作更新(圖19中之(8))。具體而言,寫入/修整控制部122,係以將「藉由複數之寫入指令之組之各者所被指定了的LBA」與「所對應之使用者資料71所被作了寫入的物理記憶位置」相互附加關連性的方式,而將邏輯物理位址轉換表62作更新。又,寫入/修整控制部122,係將與複數之寫入指令之組之各者分別相互對應的指令ID,追加至指令日誌51中(圖19中之(9))。
指令受理部121,係在每次接收由寫入/修整控制部122所致之通知時,將代表「與所對應之寫入指令之組相應的處理之完成」一事的第2次之完成通知,對於主機2作送訊(圖19中之(10))。更具體而言,指令受理部121,係因應於由寫入/修整控制部122所致之通知,而將針對構成所對應的寫入指令之組之第2次的寫入指令之完成通知(第2次的完成通知),儲存於完成佇列243中。由寫入/修整控制部122所致之通知,例如,係包含有處理為完成了的寫入指令之組之指令ID。
另外,指令受理部121,當在與寫入指令之組相對應的處理中發生有錯誤的情況時,係將代表錯誤之完成通知,作為第2次之完成通知而對於主機2作送訊。
接著,主機2之指令發行部211,係從完成佇列243而取得第2次的完成通知(圖19中之(11))。之後,指令發行部211,係將所取得之第2次的完成通知對於寫入/修整管理部212作送出(圖19中之(12))。
寫入/修整管理部212,係從指令發行部211而接收第2次的完成通知,並將與所接收的第2次的完成通知相對應之資料緩衝241內的使用者資料71之鎖死解除(圖19中之(13))。之後,寫入/修整管理部212,係將與所接收的第2次的完成通知相對應之登錄,從鎖死資料清單245中而刪除(圖19中之(14))。亦即是,寫入/修整管理部212以及IO受理部210,係因應於第2次的完成通知,而進行針對所對應的寫入指令之登錄刪除操作。
另外,當第2次的完成通知為展示有「錯誤」的情況時,主機2(具體而言,指令發行部211、寫入/修整管理部212、IO受理部210),係視為記憶體系統3之故障。寫入/修整管理部212,係將對於該記憶體系統3之處理中止,並進行作為資訊處理系統1之異常處理。
另外,在上述之說明中,雖係僅將受理了第2次的寫入指令之使用者資料作為對於NAND型快閃記憶體5之寫入之對象,但是,指令受理部121以及寫入/修整控制部122,係亦可將僅受理了第1次的寫入指令使用者資料對於NAND型快閃記憶體5作寫入。藉由此,指令受理部121以及寫入/修整控制部122,係能夠在受理第2次的寫入指令之前,便將使用者資料對於NAND型快閃記憶體5作寫入。於此情況,指令受理部121,係因應於受理了第2次的寫入指令一事,而將第2次的完成通知對於主機2作送訊。因此,在寫入管理表63中,係除了代表「是否身為受理了第2次的寫入指令之狀態」的欄位以外,更進而需要代表「使用者資料之對於NAND型快閃記憶體5之寫入為完成」一事的欄位。指令受理部121以及寫入/修整控制部122,係對於與所接收了第2次的寫入指令相對應之寫入管理表63之登錄作參照,若是使用者資料已對於NAND型快閃記憶體5而作了寫入,則立即對於主機2而回送完成通知,並將該登錄從寫入管理表63而刪除。
如同以上之寫入動作之第2例一般地,資訊處理系統1,係亦可構成為:當接收了將使用者資料71寫入至NAND型快閃記憶體5中之要求的情況時,主機2係將寫入指令作2次的發行,記憶體系統3係回應針對該些之2次的寫入指令之各者之2個的完成通知。記憶體系統3,係受理藉由2次的寫入指令所構成的寫入指令之組。在記憶體系統3基於從主機2所受理的寫入指令之組而進行由延遲寫入完備(Delayed Write Completion)所致之使用者資料之寫入的期間中,主機2係能夠使用鎖死資料清單245來對於與所發行了的寫入指令相對應之處理之狀況作管理。
以下,針對在構成為「當接收了將使用者資料71寫入至NAND型快閃記憶體5中之要求的情況時,主機2係發行1個的寫入指令,記憶體系統3係回應針對該1個的寫入指令之第1次的完成通知與第2次的完成通知」的資訊處理系統1處之動作進行例示。另外,就算是在構成為「當接收了將使用者資料71寫入至NAND型快閃記憶體5中之要求的情況時,主機2係將寫入指令作2次的發行,記憶體系統3係回應針對該些之2次的寫入指令之各者之2個的完成通知」的資訊處理系統1處,亦能夠實現相同的動作。
如同前述一般,主機2,係對於記憶體系統3,而發行與從應用程式223或者是OS221而來之寫入要求相對應的寫入指令。以下,係針對「在與所發行了的寫入指令相對應之處理完成之前(亦即是,在與寫入指令相對應之使用者資料之非揮發化完成之前),從應用程式223或者是OS221而更進而產生了針對以該寫入指令而作了指定的LBA之其他之寫入要求或者是修整要求」的情況,來進行說明。另外,寫入要求或者是修整要求,係亦標記為寫入/修整要求。
例如,當被發行有與更進而所被產生的寫入要求相對應之寫入指令的情況時,在記憶體系統3處,係針對1個的LBA,而先因應於先被發行了的寫入指令來將使用者資料作寫入,之後,因應於之後所被發行了的寫入指令來將使用者資料作寫入。亦即是,因應於先被發行了的寫入指令而被作了寫入的使用者資料,係被無效化。也就是說,就算是立即會被無效化,針對該LBA之與較之前之寫入指令相對應的寫入也成為仍會被進行。此事係會導致記憶體系統3的NAND型快閃記憶體5之損耗。
又,例如,當被發行有與更進而所被產生的修整要求相對應之修整指令的情況時,在記憶體系統3處,係針對1個的LBA,而先因應於先被發行了的寫入指令來將使用者資料作寫入,之後,因應於之後所被發行了的修整指令來將該LBA之分配解除。亦即是,因應於先被發行了的寫入指令而被作了寫入的使用者資料,係被無效化。也就是說,就算是立即會被無效化,針對該LBA之與較之前之寫入指令相對應的寫入也成為仍會被進行。此事係會導致記憶體系統3的NAND型快閃記憶體5之損耗。
因此,在本實施形態中,當「在與所發行了的寫入指令相對應之處理完成之前,從應用程式223或者是OS221而更進而產生了針對以該寫入指令而作了指定的LBA之寫入要求」的情況時,係將與該寫入指令相對應的寫入之中之「針對與被更進而產生了的寫入要求相互重複地而被作了指定的LBA之寫入」取消。藉由此,由於係並不會發生對於被重複地指定了的LBA之覆寫,因此,係能夠降低NAND型快閃記憶體5之損耗。
又,在本實施形態中,當「在與所發行了的寫入指令相對應之處理完成之前,從應用程式223或者是OS221而更進而產生了針對以該寫入指令而作了指定的LBA之修整要求」的情況時,係將與該寫入指令相對應的寫入之中之「針對與被更進而產生了的修整要求相互重複地而被作了指定的LBA之寫入」取消。藉由此,由於係並不會發生對於被重複地指定了的LBA之寫入,因此,係能夠降低NAND型快閃記憶體5之損耗。
以下,係將「身為從主機2所發行至記憶體系統3處之寫入指令,並且與該寫入指令相對應之在記憶體系統3處之處理係尚未完成」的寫入指令,亦稱作「已發行且未完成之寫入指令」。
當「在與所發行了的寫入指令相對應之處理完成之前,從應用程式223或者是OS221而更進而產生了針對以該寫入指令而作了指定的LBA之寫入/修整要求」的情況時,係會包含有(1)「藉由之後所被產生之寫入/修整要求而被作了指定的LBA範圍,係完全包含藉由已發行且未完成之寫入指令而被作了指定的LBA範圍」之情況、和(2)「藉由之後所被產生之寫入/修整要求而被作了指定的LBA範圍,係包含藉由已發行且未完成之寫入指令而被作了指定的LBA範圍之一部分」之情況。
主機2之寫入/修整管理部212,係使用鎖死資料清單245,來判斷是否存在有對於與「藉由之後所被產生的寫入/修整要求而被作了指定的LBA範圍」之間至少有一部分的重複之LBA範圍作了指定的已發行且未完成之寫入指令(以下,係亦稱作重複寫入指令)。當存在有重複寫入指令的情況時,寫入/修整管理部212,係亦判定「藉由之後所被產生的寫入/修整要求而被作了指定的LBA範圍」與「藉由重複寫入指令而被作了指定的LBA範圍」之間之重複關係。重複關係,例如,係為「藉由之後所被產生的寫入/修整要求而被作了指定的LBA範圍」係完全包含「藉由重複寫入指令而被作了指定的LBA範圍」的情形、或者是「藉由之後所被產生的寫入/修整要求而被作了指定的LBA範圍」係包含「藉由重複寫入指令而被作了指定的LBA範圍」之一部分的情形。
另外,為了從鎖死資料清單245而有效率地檢索出重複寫入指令之登錄,鎖死資料清單245,係亦可具備有並非為單純的表單構造之其他的資料構造。例如,鎖死資料清單245,係亦可針對使為了對於記憶體系統3進行存取的LBA空間全體被作了分割後之複數之部分空間之各者而分別被產生。藉由使用對應於包含有「藉由之後所被產生的寫入/修整要求而被作了指定的LBA範圍」之部分空間之鎖死資料清單245,係能夠將重複寫入指令之登錄之檢索高速化。
以下,係針對在(1)「藉由之後所被產生之寫入/修整要求而被作了指定的LBA範圍,係完全包含藉由已發行且未完成之寫入指令而被作了指定的LBA範圍」之情況、和(2)「藉由之後所被產生之寫入/修整要求而被作了指定的LBA範圍,係包含藉由已發行且未完成之寫入指令而被作了指定的LBA範圍之一部分」之情況的各者之情況中之主機2以及記憶體系統3的動作進行說明。
((1)藉由之後所被產生之寫入/修整要求而被作了指定的LBA範圍,係完全包含藉由已發行且未完成之寫入指令而被作了指定的LBA範圍之情況)
圖20,係針對對於「完全包含藉由已發行且未完成之寫入指令#1而被作了指定的LBA範圍之LBA範圍」作指定的寫入/修整要求#2a~#2d之例作展示。在圖20中所示之“X”,係代表藉由所對應的寫入指令#1而被作了指定的LBA。在圖20中所示之“W”,係代表藉由所對應的寫入/修整要求#2a~#2d而被作了指定的LBA。藉由寫入指令而被作了指定的LBA,係代表使用者資料所應被作寫入之扇區。藉由寫入要求而被作了指定的LBA,係代表使用者資料所應被作寫入之扇區。藉由修整要求而被作了指定的LBA,係代表應使分配被作解除之扇區。藉由寫入/修整要求#2a、#2b、#2c以及#2d之各者所被作了指定的LBA範圍,係身為因應於此些之寫入/修整要求(更詳細而言,所對應之寫入指令或者是修整指令)而被進行寫入或者是修整之LBA範圍。
具體而言,在寫入指令#1處,LBA x+1~LBA x+2之LBA範圍係被作指定。藉由寫入指令#1而被作了指定的LBA範圍,係身為與寫入指令#1相對應之使用者資料的非揮發化尚未完成的LBA範圍。
在寫入/修整要求#2a處,LBA x+1~LBA x+2之LBA範圍係被作指定。在寫入/修整要求#2b處,LBA x~LBA x+2之LBA範圍係被作指定。在寫入/修整要求#2c處,LBA x+1~LBA x+3之LBA範圍係被作指定。在寫入/修整要求#2d處,LBA x~LBA x+3之LBA範圍係被作指定。
如此這般,藉由寫入/修整要求#2a、#2b、#2c以及#2d之各者而被作了指定的LBA範圍,係完全包含藉由寫入指令#1而被作了指定的LBA範圍。故而,因應於寫入指令#1而被作寫入的使用者資料,係會因應於分別與寫入/修整要求#2a、#2b、#2c以及#2d之各者相對應的寫入指令或者是分別與寫入/修整要求#2a、#2b、#2c以及#2d之各者相對應的修整指令,而成為無效資料。藉由將與此種寫入指令#1相對應之寫入中止,係能夠減輕記憶體系統3內的NAND型快閃記憶體5之損耗。將「會因應於之後所被產生之寫入/修整要求(更詳細而言,相對應的寫入指令或者是修整指令)而成為無效資料的使用者資料」作寫入之寫入指令(於此,係為寫入指令#1),係身為重複寫入指令。
(對應於「完全包含藉由已發行且未完成之寫入指令而被作了指定的LBA範圍之寫入要求」的動作)
參照圖21以及圖22,針對「藉由之後所被產生之寫入要求而被作了指定的LBA範圍係完全包含藉由已發行且未完成之寫入指令而被作了指定的LBA範圍」的情況時之動作進行說明。
圖21,係針對對應於對於「完全包含藉由已發行且未完成之寫入指令而被作了指定的LBA範圍之LBA範圍」作指定的寫入要求之動作之例作展示。在圖21中所示之動作,例如,係在參照圖11而於前所述的寫入動作之後而被進行。將已發行且未完成之寫入指令,稱作第1寫入指令。將對於「完全包含藉由第1寫入指令而被作了指定的LBA範圍之LBA範圍」作指定的寫入要求,稱作第2寫入要求。將應因應於第1寫入指令而被作寫入的使用者資料,設為第1使用者資料711。又,將藉由第2寫入要求而被要求了寫入的使用者資料,設為第2使用者資料712。第1使用者資料711和第2使用者資料712,係被儲存在資料緩衝241中。
首先,在主機2處,IO受理部210,係受理由應用程式223或者是OS221所致之第2寫入要求(圖21中之(1))。IO受理部210,係將所受理了的第2寫入要求送至寫入/修整管理部212處(圖21中之(2))。
寫入/修整管理部212,當並未接收針對第1寫入指令之第1次之完成通知的情況時,係等待針對第1寫入指令之第1次之完成通知之收訊。記憶體系統3,係可能會將所受理了的寫入指令以及修整指令,以無關於所受理之順序的順序(out of order)來實行。因此,當針對1個的LBA而被進行有複數之寫入或者是修整的情況時,主機2,係有必要依循於藉由應用程式223或者是OS221而使寫入要求或者是修整要求被作了產生的順序,來對於記憶體系統3進行控制。具體而言,主機2,係有必要以會使與在更之後所產生的寫入要求或者是修整要求相對應之內容最終性會被反映於記憶體系統3之NAND型快閃記憶體5處的方式,來進行控制。因此,指令發行部211以及寫入/修整管理部212,係等待針對第1寫入指令之第1次的完成通知之收訊,並進行與第2寫入要求相對應之動作。另外,以下,係對於「針對第1寫入指令之第1次的完成通知係為正常回應(亦即是,代表正常結束之完成通知)」的情況作例示。當「針對第1寫入指令之第1次的完成通知係為異常回應(亦即是,代表異常結束之完成通知)」的情況時,因應於第2寫入要求,參照圖11~圖18而於前所述之寫入動作係被進行。
與「等待針對第1寫入指令之第1次之完成通知」之動作並行地,寫入/修整管理部212,係將第2使用者資料712作鎖死(圖21中之(3))。
在收訊了針對第1寫入指令之正常回應的第1次之完成通知之後,寫入/修整管理部212,係對於指令發行部211而要求對應於第2寫入要求之寫入指令(以下,稱作第2寫入指令)的發行(圖21中之(4))。指令發行部211,係因應於由寫入/修整管理部212所致之要求,而發行用以將第2使用者資料712作寫入的第2寫入指令。亦即是,指令發行部211,係產生相當於用以將第2使用者資料712作寫入的第2寫入指令之SQ登錄資訊。指令發行部211,係將所產生了的SQ登錄資訊對於寫入/修整管理部212作送出(圖21中之(5))。
寫入/修整管理部212,係使用藉由指令發行部211所被送出的SQ登錄資訊,來產生鎖死資料清單245之登錄。係將所被產生了的登錄,稱作第2登錄。第2登錄,例如,係包含有相當於第2寫入指令之SQ登錄資訊、和資料區域管理資訊。此資料區域管理資訊,係為能夠特定出「第2使用者資料712所被儲存之資料緩衝241內之記憶區域」的資訊。寫入/修整管理部212,係將第2登錄追加至鎖死資料清單245中(圖21中之(6))。
接著,指令發行部211,係將第2寫入指令(SQ登錄資訊)儲存在提交佇列242中(圖21中之(7))。
後續之與第2寫入指令相對應的在記憶體系統3處之動作(圖21中之(8)~(12)),係與參照圖11而於前所述之在記憶體系統3處之動作(圖11中之(8)~(12))相同。又,與「針對第2寫入指令之第1次的完成通知」相對應的在主機2處之動作(圖21中之(13)~(17)),係與參照圖11而於前所述之在主機2處之動作(圖11中之(13)~(15)、(18)以及(19))相同。
接著,當針對第2寫入指令之第1次的完成通知係為正常回應的情況時,在資訊處理系統1處,係被進行有用以將第1寫入指令中止之動作(中斷動作)。
圖22,係對於接續於圖21之後所被進行的中斷動作作展示。
首先,指令發行部211,係發行用以將第1寫入指令中止之中斷指令。亦即是,指令發行部211,係產生相當於用以將第1寫入指令中止之中斷指令的SQ登錄資訊。被作了發行的中斷指令,係包含有能夠辨識出進行中止之對象的第1寫入指令之資訊(例如,指令ID)。接著,指令發行部211,係將所被發行了的中斷指令(SQ登錄資訊)儲存在提交佇列242中(圖22中之(1))。
接著,記憶體系統3之指令受理部121,係從提交佇列242而取得中斷指令(圖22中之(2))。之後,指令受理部121,係將所取得的中斷指令送出至寫入/修整控制部122處(圖22中之(3))。
寫入/修整控制部122,係使用藉由指令受理部121所被送出了的中斷指令,而將寫入管理表63作更新(圖22中之(4))。具體而言,寫入/修整控制部122,係使用藉由中斷指令而被作了指定的第1寫入指令之指令ID,來特定出所對應的寫入管理表63之登錄。寫入/修整控制部122,當基於所特定出之登錄所進行的寫入動作尚未被開始的情況時,係將此登錄從寫入管理表63而刪除。藉由此,對應於第1寫入指令的寫入係被中止。寫入/修整控制部122,係對於指令受理部121,而通知「與中斷指令相對應之第1寫入指令之中止為成功(中斷成功)」一事(圖22中之(5))。
另外,當基於所特定出之登錄所進行的寫入動作已被開始的情況時,寫入/修整控制部122,係對於指令受理部121,而通知「與中斷指令相對應之第1寫入指令之中止為失敗(中斷失敗)」一事(圖22中之(5))。亦即是,寫入/修整控制部122,係拒絕「與中斷指令相對應之第1寫入指令之中止」。又,當在寫入管理表63中係並不存在有與第1寫入指令之指令ID相對應之登錄的情況時,寫入/修整控制部122亦係對於指令受理部121而通知中斷失敗(圖22中之(5))。
指令受理部121,係因應於由寫入/修整控制部122所致之通知,而將針對中斷指令之完成通知,儲存於完成佇列243中(圖22中之(6))。具體而言,當從寫入/修整控制部122而被通知有中斷成功的情況時,指令受理部121,係將代表中斷成功(亦即是,正常結束)之完成通知,儲存於完成佇列243中。又,當從寫入/修整控制部122而被通知有中斷失敗的情況時,指令受理部121,係將代表中斷失敗(亦即是,異常結束)之完成通知,儲存於完成佇列243中。
接著,主機2之指令發行部211,係從完成佇列243而取得針對中斷指令之完成通知(圖22中之(7))。之後,指令發行部211,係將所取得之完成通知對於寫入/修整管理部212作送出(圖22中之(8))。
當完成通知係為代表中斷成功之完成通知的情況時,由於第1寫入指令係被中止,因此,寫入/修整管理部212,係將原本應因應於第1寫入指令而被作寫入之資料緩衝241內的第1使用者資料711之鎖死解除(圖22中之(9))。又,寫入/修整管理部212,在作成有PRP登錄之清單和SGL之第2個之後之段的情況時,係亦將該些所被作儲存的指標清單244之區域釋放。之後,寫入/修整管理部212,係將與第1寫入指令相對應之第1登錄,從鎖死資料清單245中而刪除(圖22中之(10))。亦即是,寫入/修整管理部212以及IO受理部210,係進行針對第1寫入指令之登錄刪除操作。
當完成通知係為代表中斷失敗之完成通知的情況時,由於第1寫入指令係並未被中止,因此,因應於第1寫入指令的寫入動作係被繼續進行。亦即是,寫入/修整管理部212,係並不將資料緩衝241內之第1使用者資料711之鎖死解除,並且並不將第1登錄從鎖死資料清單245中而刪除。
圖23,係對於在圖22中之(10)之動作中而使登錄被作了刪除後的鎖死資料清單245之例作展示。鎖死資料清單245,係包含有與第1寫入指令相對應之登錄81、和與第2寫入指令相對應之登錄82。
登錄81,係與圖17中所示之登錄81相同的,為展示有「已經完成了針對第1寫入指令之第1次之完成通知之接收」之內容的登錄。登錄81,係因應於從記憶體系統3而接收了代表第1寫入指令之中斷成功的完成通知一事,而被作刪除。
登錄82,係包含有SQ登錄資訊“sqentry_info2”、完成通知順序“cseq2”、資料區域管理資訊“region_info2”、以及完成通知狀態“completed”。登錄82,係為展示有「已經完成了針對第2寫入指令之第1次之完成通知之接收」之內容的登錄。
藉由以上之寫入以及中斷動作,在「藉由之後所被產生之第2寫入要求而被作了指定的LBA範圍,係完全包含藉由已發行且未完成之第1寫入指令而被作了指定的LBA範圍」的情況時,係能夠將在記憶體系統3處之與第1寫入指令相對應之寫入中止。
具體而言,主機2,係將對應於第2寫入要求之第2寫入指令,送訊至記憶體系統3處。當針對第2寫入指令而從記憶體系統3接收了代表正常結束之第1次的完成通知的情況時,主機2,係對於記憶體系統3而送訊用以將第1寫入指令中止之中斷指令。
記憶體系統3,係從主機2而受理中斷指令,若是與第1寫入指令相對應之寫入尚未被開始,則將第1寫入指令中止。之後,記憶體系統3,係對於主機2而回送代表第1寫入指令之中斷成功的完成通知。主機2,係基於代表中斷成功的完成通知,而進行針對第1寫入指令之登錄刪除操作。
藉由此,在記憶體系統3處,係並不進行對應於第1寫入指令的對於NAND型快閃記憶體5之寫入。亦即是,對於會藉由第2寫入要求而被作覆寫的LBA範圍之寫入,係並不會被進行。故而,係能夠降低NAND型快閃記憶體5之損耗。
於此,針對在前述之寫入動作之第2例中所被使用之情形、亦即是針對使用有「當接收了將使用者資料71寫入至NAND型快閃記憶體5中之要求的情況時,主機2之指令發行部211係將寫入指令作2次的送訊,記憶體系統3係針對該些之2次的寫入指令之各者而回應2個的完成通知」之動作的情形,來進行說明。在此情形中,主機2,當並未收訊針對第1次之第1寫入指令之第1次之完成通知的情況時,或者是當雖然收訊了針對第1次的第1寫入指令之第1次之完成通知但是尚未將第2次的第1寫入指令對於記憶體系統3作送訊的情況時,係並不將第2次的第1寫入指令對於記憶體系統3作送訊。進而,主機2,係亦可對於記憶體系統3,而送訊用以將因應於第1次的第1寫入指令而在記憶體系統3內所產生了的資訊(例如寫入管理表63之登錄)作刪除之中斷指令。此中斷指令,係為針對已完成之第1次之第1寫入指令的指令。亦即是,此中斷指令,係並非為使藉由某一指令而作了要求的動作中斷之先前之中斷指令,而是為了將因應於第1次之第1寫入指令所產生了的資訊刪除之新的種類之中斷指令。藉由此,與在前述之圖22中之中斷成功的情況相同地,係能夠將對應於第1寫入指令的寫入中止。另外,當主機2並未送訊中斷指令的情況時,於第2次的第2寫入指令完成時,主機2,係將第1寫入指令之鎖死資料清單245中的對應登錄等刪除。又,記憶體系統3,當第2寫入指令完成時,係將寫入管理表63之第1寫入指令之登錄刪除。
當已將第2次的第1寫入指令對於記憶體系統3作了送訊的情況時,主機2,係對於記憶體系統3而送訊用以將第2次的第1寫入指令中止之中斷指令。藉由此,係能夠將對應於第1寫入指令的寫入中止。
(對應於「完全包含藉由已發行且未完成之寫入指令而被作了指定的LBA範圍之修整要求」的動作)
就算是在將前述之第2寫入要求置換為修整要求的情況時,也能夠實現同樣的動作。亦即是,就算是在「藉由之後所被產生之修整要求而被作了指定的LBA範圍,係完全包含藉由已發行且未完成之第1寫入指令而被作了指定的LBA範圍」之情況時,也能夠同樣的而將第1寫入指令中止。
參照圖24以及圖25,針對「藉由之後所被產生之修整要求而被作了指定的LBA範圍係完全包含藉由已發行且未完成之寫入指令而被作了指定的LBA範圍」的情況時之動作進行說明。
圖24,係針對對應於對於「完全包含藉由已發行且未完成之寫入指令而被作了指定的LBA範圍之LBA範圍」作指定的修整要求之動作之例作展示。在圖24中所示之動作,例如,係在參照圖11而於前所述的寫入動作之後而被進行。將已發行且未完成之寫入指令,稱作第1寫入指令。將應因應於第1寫入指令而被作寫入的使用者資料,設為第1使用者資料711。修整要求,係對於「完全包含藉由第1寫入指令而被作了指定的LBA範圍之1個以上的LBA範圍」作指定。範圍資訊72,係為代表「藉由修整要求而被作了指定之1個以上的LBA範圍」之資訊。第1使用者資料711和範圍資訊72,係被儲存在資料緩衝241中。
首先,在主機2處,IO受理部210,係受理由應用程式223或者是OS221所致之修整要求(圖24中之(1))。IO受理部210,係將所受理了的修整要求送至寫入/修整管理部212處(圖24中之(2))。
寫入/修整管理部212,當並未接收針對第1寫入指令之第1次之完成通知的情況時,係等待針對第1寫入指令之第1次之完成通知之收訊。另外,以下,係對於「針對第1寫入指令之第1次的完成通知係為正常回應」的情況作例示。
與「等待針對第1寫入指令之第1次之完成通知」之動作並行地,寫入/修整管理部212,係將範圍資訊72作鎖死(圖24中之(3))。
在收訊了針對第1寫入指令之正常回應的第1次之完成通知之後,寫入/修整管理部212,係對於指令發行部211而要求對應於修整要求之修整指令的發行(圖24中之(4))。指令發行部211,係因應於由寫入/修整管理部212所致之要求,而發行用以將基於範圍資訊72所得到的LBA範圍之分配解除之修整指令。亦即是,指令發行部211,係產生相當於用以將基於範圍資訊72所得到的LBA範圍之分配作解除之修整指令的SQ登錄資訊。指令發行部211,係將所產生了的SQ登錄資訊對於寫入/修整管理部212作送出(圖24中之(5))。
寫入/修整管理部212,係使用藉由指令發行部211所被送出的SQ登錄資訊,來產生鎖死資料清單245之登錄。將所被產生了的登錄,稱作第3登錄。第3登錄,例如,係包含有相當於所被發行了的修整指令之SQ登錄資訊、和資料區域管理資訊。此資料區域管理資訊,係為能夠特定出「範圍資訊72所被儲存之資料緩衝241內之記憶區域」的資訊。寫入/修整管理部212,係將第3登錄追加至鎖死資料清單245中(圖24中之(6))。
接著,指令發行部211,係將所被發行了的修整指令(SQ登錄資訊)儲存在提交佇列242中(圖24中之(7))。
記憶體系統3之指令受理部121,係從提交佇列242而取得修整指令(圖24中之(8))。之後,指令受理部121,係將所取得的修整指令送出至寫入/修整控制部122處(圖24中之(9))。
寫入/修整控制部122,係確認藉由指令受理部121所被送出了的修整指令乃身為能夠實行之指令。具體而言,寫入/修整控制部122,例如,係確認「資料指標為有效」、「藉由範圍資訊72所被指定了的LBA範圍係為有效」。寫入/修整控制部122,當修整指令係為能夠實行之指令的情況時,係將「修整指令之受理為完成」一事對於指令受理部121作通知(圖24中之(10))。
指令受理部121,係因應於由寫入/修整控制部122所致之通知,而將針對修整指令之第1次的完成通知(代表正常結束之完成通知),儲存於完成佇列243中(圖24中之(11))。此第1次的完成通知,係包含修整指令之指令ID。
另外,指令受理部121,當從提交佇列242所取得之修整指令係為無法實行之指令的情況時,係亦可將代表「異常結束」之完成通知,作為第1次的完成通知而儲存於完成佇列243中。
接著,主機2之指令發行部211,係從完成佇列243而取得針對修整指令之第1次的完成通知(圖24中之(12))。之後,指令發行部211,係將所取得之第1次的完成通知對於寫入/修整管理部212作送出(圖24中之(13))。
當第1次之完成通知係為代表正常結束之完成通知的情況時,寫入/修整管理部212,係在鎖死資料清單245中,將與修整指令相對應之第3登錄作更新(圖24中之(14))。更詳細而言,寫入/修整管理部212,係在第3登錄中,追加所被作了分配的序列編號(亦即是,代表接收了第1次的完成通知之順序之資訊)、和代表已完成第1次之完成通知之接收一事的資訊。寫入/修整管理部212,係將修整之完成(正常結束)對於IO受理部210作通知(圖24中之(15))。之後,IO受理部210,係將修整之完成對於應用程式223或者是OS221作通知(圖24中之(16))。
當第1次之完成通知係為代表異常結束之完成通知的情況時,寫入/修整管理部212,係將與修整指令相對應之資料緩衝241內的範圍資訊72之鎖死解除(圖24中之(17))。之後,寫入/修整管理部212,係將與修整指令相對應之第3登錄,從鎖死資料清單245中而刪除(圖24中之(18))。寫入/修整管理部212,係將異常結束對於IO受理部210作通知(圖24中之(19))。之後,IO受理部210,係將異常結束對於應用程式223或者是OS221作通知(圖24中之(20))。
當針對修整指令之第1次的完成通知係為正常回應的情況時,在主機2以及記憶體系統3處,係更進而被進行有用以將第1寫入指令中止之動作(中斷動作)。此中斷之動作,係與參照圖22而於前所述之中斷動作相同。
另外,如同上述一般,主機2,係先收訊代表修整指令之正常結束之第1次的完成通知,之後再開始用以將第1寫入指令中止之動作。其原因在於,例如,當第1寫入指令之第1次之完成通知為正常完成之後,於送出修整指令之前,起因於安全性設定而導致修整指令所指定之LBA範圍成為了禁止寫入的情況時,修整指令係並不會成功,第1寫入指令係必須要正常地完成之故。除了起因於記憶體系統3之故障等而導致無法收訊針對修整指令之第1次之完成通知的情況以外、亦即是當保證會收訊代表修整指令之正常結束之第1次的完成通知的情況時,主機2,係可在收訊代表修整指令之正常結束之第1次的完成通知之前,便開始用以將第1寫入指令中止之動作。
又,在主機2以及記憶體系統3處,因應於在記憶體系統3處所受理了的修整指令,用以將被指定了的LBA範圍之分配作解除的動作係被進行。
圖25,係對於與在記憶體系統3處所受理了的修整指令相對應之動作之例作展示。在圖25中所示之動作,例如,係先使「身為先行於修整指令之前之寫入指令並且為對於與藉由修整指令所被指定了的LBA範圍相重複之LBA範圍作指定之寫入指令」完成或者是中斷,之後再被進行。
首先,記憶體系統3之寫入/修整控制部122,係使用對應於修整指令之範圍資訊72,而將藉由範圍資訊72所被作了指定的LBA範圍之分配解除(圖25之(1))。寫入/修整控制部122,例如,係以會展示「藉由範圍資訊72所被作了指定的LBA範圍係並未被映射至任一之物理位址處」之內容的方式,來對於邏輯物理位址轉換表62進行更新,並將該LBA範圍之分配解除。之後,寫入/修整控制部122,係將「對應於修整指令之處理的完成」對於指令受理部121作通知(圖25中之(2))。又,寫入/修整控制部122,係將修整指令之指令ID,追加至指令日誌51中(圖25中之(3))。
指令受理部121,係因應於由寫入/修整控制部122所致之通知,而將代表「與修整指令相對應之處理為完成」一事的第2次之完成通知,對於主機2作送訊(圖25中之(4))。更具體而言,指令受理部121,係因應於由寫入/修整控制部122所致之通知,而將針對修整指令之第2次的完成通知,儲存於完成佇列243中。由寫入/修整控制部122所致之通知,例如,係包含有處理為完成了的修整指令之指令ID。
另外,指令受理部121,當在與修整指令相對應的處理中發生有錯誤的情況時,係將代表錯誤之完成通知,作為第2次之完成通知而對於主機2作送訊。
接著,主機2之指令發行部211,係從完成佇列243而取得第2次的完成通知(圖25中之(5))。之後,指令發行部211,係將所取得之第2次的完成通知對於寫入/修整管理部212作送出(圖25中之(6))。
寫入/修整管理部212,係從指令發行部211而接收第2次的完成通知,並將與修整指令相對應之範圍資訊72之鎖死解除(圖25中之(7))。之後,寫入/修整管理部212,係將與修整指令相對應之第3登錄,從鎖死資料清單245中而刪除(圖25中之(8))。
另外,當第2次的完成通知為展示有「錯誤」的情況時,主機2(具體而言,寫入/修整管理部212),係視為記憶體系統3之故障。寫入/修整管理部212,係將對於該記憶體系統3之處理中止,並進行作為資訊處理系統1之異常處理。
藉由以上之修整以及中斷動作,在「藉由之後所被產生之修整要求而被作了指定的LBA範圍,係完全包含藉由已發行且未完成之第1寫入指令而被作了指定的LBA範圍」的情況時,係能夠將在記憶體系統3處之與第1寫入指令相對應之寫入中止。
具體而言,主機2,係將對應於修整要求之修整指令,送訊至記憶體系統3處。當針對修整指令而從記憶體系統3接收了代表正常結束之第1次的完成通知的情況時,主機2,係對於記憶體系統3而送訊用以將第1寫入指令中止之中斷指令。
記憶體系統3,係從主機2而受理中斷指令,若是與第1寫入指令相對應之寫入尚未被開始,則將第1寫入指令中止。之後,記憶體系統3,係對於主機2而回送代表第1寫入指令之中斷成功的完成通知。主機2,係基於代表中斷成功的完成通知,而將對應於第1寫入指令之登錄,從鎖死資料清單245而刪除。
藉由此,在記憶體系統3處,係並不進行對應於第1寫入指令的對於NAND型快閃記憶體5之寫入。亦即是,對於會藉由修整要求而使分配被作解除的LBA範圍之寫入,係並不會被進行。故而,係能夠降低NAND型快閃記憶體5之損耗。
另外,與前述之寫入動作之第2例相同的,係亦可構成為:當主機2之IO受理部210接收了將LBA範圍之分配作解除之修整要求的情況時,主機2之指令發行部211係將修整指令作2次的發行,記憶體系統3係回應針對該些之2次的修整指令之各者之2個的完成通知。就算是此種構成,亦同樣的,當「藉由之後所被產生之修整要求而被作了指定的LBA範圍,係完全包含藉由已發行且未完成之第1寫入指令而被作了指定的LBA範圍」之情況時,也能夠同樣的而將第1寫入指令中止。
於此,針對對於「完全被包含於藉由之後所被產生之寫入/修整要求而被作了指定的LBA範圍」中之LBA範圍作了指定的「已發行且未完成之寫入指令」係存在有複數的情況,來進行說明。
圖26,係針對對於「完全包含藉由已發行且未完成之寫入指令#1X以及#1Y而被作了指定的LBA範圍之LBA範圍」作指定的寫入/修整要求#2之例作展示。在圖26中所示之“X”,係代表藉由所對應的寫入指令#1X而被作了指定的LBA。在圖26中所示之“Y”,係代表藉由所對應的寫入指令#1Y而被作了指定的LBA。在圖20中所示之“W”,係代表藉由所對應的寫入/修整要求#2而被作了指定的LBA。藉由寫入/修整要求#2所被作了指定的LBA範圍,係身為因應於此寫入/修整要求(更詳細而言,所對應之寫入指令或者是修整指令)而被進行寫入或者是修整之LBA範圍。
具體而言,在寫入指令#1X處,LBA x+1~LBA x+2之LBA範圍係被作指定。藉由寫入指令#1X而被作了指定的LBA範圍,係身為與寫入指令#1X相對應之使用者資料的非揮發化尚未完成的LBA範圍。
在寫入指令#1Y處,LBA x+4~LBA x+5之LBA範圍係被作指定。藉由寫入指令#1Y而被作了指定的LBA範圍,係身為與寫入指令#1Y相對應之使用者資料的非揮發化尚未完成的LBA範圍。
在寫入/修整要求#2處,LBA x~LBA x+6之LBA範圍係被作指定。
如此這般,藉由寫入/修整要求#2而被作了指定的LBA範圍,係完全包含藉由複數之寫入指令#1X以及#1Y而被作了指定的LBA範圍。
當「藉由之後所被產生之寫入/修整要求而被作了指定的LBA範圍,係完全包含藉由已發行且未完成之複數之寫入指令而被作了指定的LBA」的情況時,針對該些之複數之寫入指令之各者,前述之中斷動作係被進行。
((2)藉由之後所被產生之寫入/修整要求而被作了指定的LBA範圍,係包含藉由已發行且未完成之寫入指令而被作了指定的LBA範圍之一部分的情況)
當「藉由之後所被產生之寫入/修整要求而被作了指定的LBA範圍,係包含藉由已發行且未完成之寫入指令而被作了指定的LBA範圍之一部分」的情況時,係可使用(2-a)對於已發行且未完成之寫入指令進行修正之方法與(2-b)將已發行且未完成之寫入指令作中止之方法,此兩者之任一者。針對此些之2個的方法分別進行說明。
((2-a)對於已發行且未完成之寫入指令進行修正之方法)
圖27,係針對對於「包含藉由已發行且未完成之寫入指令#1而被作了指定的LBA範圍之一部分」之LBA範圍作了指定的寫入/修整要求#2a以及#2b之例作展示。在圖27中所示之“X”,係代表藉由所對應的寫入指令#1而被作了指定的LBA。在圖27中所示之“W”,係代表藉由所對應的寫入/修整要求#2a以及#2b而被作了指定的LBA。藉由寫入/修整要求#2a以及#2b之各者所被作了指定的LBA範圍,係身為因應於此些之寫入/修整要求(更詳細而言,所對應之寫入指令或者是修整指令)而被進行寫入或者是修整之LBA範圍。
具體而言,在寫入指令#1處,LBA x+1~LBA x+2之LBA範圍係被作指定。藉由寫入指令#1而被作了指定的LBA範圍,係身為與寫入指令#1相對應之使用者資料的非揮發化尚未完成的LBA範圍。
在寫入/修整要求#2a處,LBA x~LBA x+1之LBA範圍係被作指定。藉由寫入/修整要求#2a而被作了指定的LBA範圍,係包含有藉由寫入指令#1而被作了指定的LBA範圍之中之從開頭起朝向末端而有所連續的一部分。另外,從開頭起朝向末端而有所連續的一部分,係亦可僅為開頭之LBA。
在寫入/修整要求#2b處,LBA x+2~LBA x+3之LBA範圍係被作指定。藉由寫入/修整要求#2b而被作了指定的LBA範圍,係包含有藉由寫入指令#1而被作了指定的LBA範圍之中之從末端起朝向開頭而有所連續的一部分。另外,從末端起朝向開頭而有所連續的一部分,係亦可僅為末端之LBA。
更詳細而言,藉由寫入/修整要求#2a而被作了指定的LBA x~LBA x+1之LBA範圍,係包含有藉由寫入指令#1而被作了指定的LBA x+1以及x+2之中之LBA x+1(亦即是,會被作覆寫或者是修整之扇區),但是並不包含LBA x+2(亦即是,並不會被作覆寫或者是修整之扇區)。換言之,藉由寫入指令#1而被作了指定的LBA x+1以及x+2,係並不僅是包含有在藉由寫入/修整要求#2a所被作了指定的LBA x以及LBA x+1之中之LBA x+1(亦即是,會被作覆寫或者是修整之扇區),而亦包含有LBA x+2(亦即是,並不會被作覆寫或者是修整之扇區)。
又,藉由寫入/修整要求#2b而被作了指定的LBA x+2~LBA x+3之LBA範圍,係包含有藉由寫入指令#1而被作了指定的LBA x+1以及x+2之中之LBA x+2(亦即是,會被作覆寫或者是修整之扇區),但是並不包含LBA x+1(亦即是,並不會被作覆寫或者是修整之扇區)。換言之,藉由寫入指令#1而被作了指定的LBA x+1以及x+2,係並不僅是包含有在藉由寫入/修整要求#2b所被作了指定的LBA x+2以及LBA x+3之中之LBA x+2(亦即是,會被作覆寫或者是修整之扇區),而亦包含有LBA x+1(亦即是,並不會被作覆寫或者是修整之扇區)。
如此這般,對於「包含有藉由已發行且未完成之寫入指令而被作了指定的LBA範圍之一部分」之LBA範圍作了指定的寫入/修整要求,例如,係身為(A)對於「包含有藉由寫入指令而被作了指定的LBA範圍之中之從開頭起朝向末端而有所連續的一部分」之LBA範圍作了指定的寫入/修整要求,或者是身為(B)對於「包含有藉由寫入指令而被作了指定的LBA範圍之中之從末端起朝向開頭而有所連續的一部分」之LBA範圍作了指定的寫入/修整要求。
或者是,對於「包含有藉由已發行且未完成之寫入指令而被作了指定的LBA範圍之一部分」之LBA範圍作了指定的寫入/修整要求,係可能會身為(C)對於「藉由寫入指令而被作了指定的LBA範圍之中之並不包含有開頭也不包含有末端之途中的LBA範圍」而作了指定的寫入/修整要求。
圖28,係針對對於「包含藉由已發行且未完成之寫入指令#1而被作了指定的LBA範圍之中之並不包含有開頭也不包含有末端的途中之LBA範圍」作了指定的寫入/修整要求#2之例作展示。
具體而言,在寫入指令#1處,LBA x~LBA x+4之LBA範圍係被作指定。藉由寫入指令#1而被作了指定的LBA範圍,係身為與寫入指令#1相對應之使用者資料的非揮發化尚未完成的LBA範圍。
在寫入/修整要求#2處,LBA x+1~LBA x+2之LBA範圍係被作指定。藉由寫入/修整要求#2所被作了指定的LBA範圍,係身為因應於此寫入/修整要求(更詳細而言,所對應之寫入指令或者是修整指令)而被進行寫入或者是修整之LBA範圍。
如此這般,藉由寫入/修整要求#2而被作了指定的LBA範圍,係包含有藉由寫入指令#1而被作了指定的LBA範圍之中之途中的部分。
更詳細而言,藉由寫入/修整要求#2而被作了指定的LBA x+1以及x+2,係包含有藉由寫入指令#1而被作了指定的LBA x~x+4之LBA範圍之中之LBA x+1以及x+2(亦即是,會被作覆寫或者是修整之扇區),但是並不包含開頭之LBA x和從末端之LBA x+4起直到LBA x+3為止之朝向開頭有所連續之LBA範圍(亦即是,並不會被作覆寫或者是修整之扇區)。換言之,藉由寫入指令#1而被作了指定的LBA x~x+4之LBA範圍,係並不僅是包含有藉由寫入/修整要求#2所被作了指定的LBA x+1以及x+2(亦即是,會被作覆寫或者是修整之扇區),而亦包含有LBA x與LBA x+3~x+4之LBA範圍(亦即是,並不會被作覆寫或者是修整之扇區)。
如同在圖27中所示一般,藉由之後所被產生之寫入/修整要求#2a以及#2b之各者而被作了指定的LBA範圍,係包含藉由已發行且未完成之寫入指令#1而被作了指定的LBA範圍之一部分。如同在圖28中所示一般,藉由之後所被產生之寫入/修整要求#2而被作了指定的LBA範圍,係包含藉由已發行且未完成之寫入指令#1而被作了指定的LBA範圍之一部分。
針對「藉由之後所被產生之寫入要求而被作了指定的LBA範圍,係包含藉由已發行且未完成之寫入指令而被作了指定的LBA範圍之一部分」的情況時之動作進行說明。
圖29,係針對對應於對於「包含有藉由已發行且未完成之寫入指令而被作了指定的LBA範圍之一部分」之LBA範圍作指定的寫入要求之動作之例作展示。在圖29中所示之動作,例如,係在參照圖11而於前所述的寫入動作之後而被進行。
首先,與在圖21中所示之動作相同的,在主機2接收了針對「已發行且未完成之寫入指令(第1寫入指令)」之第1次之完成通知之後,主機2以及記憶體系統3,係進行與對於「包含有藉由第1寫入指令而被作了指定的LBA範圍之一部分」之LBA範圍作了指定的寫入要求(以下,稱作第3寫入要求)相對應之動作。亦即是,主機2,在接收了針對第1寫入指令之正常回應的第1次之完成通知之後,係將對應於第3寫入要求之寫入指令(以下,稱作第3寫入指令)對於記憶體系統3作送訊,並且對於與第3寫入指令相對應之鎖死資料清單245之登錄進行管理。記憶體系統3,係基於第3寫入指令而將寫入管理表63作更新,並將針對第3寫入指令之第1次的完成通知對於主機2作回送。之後,主機2,當針對第3寫入指令之第1次的完成通知係為正常回應的情況時,係以會代表「已接收了第1次的完成通知」一事的方式,來對於與第3寫入指令相對應之鎖死資料清單245之登錄作更新。
將應因應於第1寫入指令而被作寫入的使用者資料,設為第1使用者資料711。將藉由第3寫入要求而被要求了寫入的使用者資料,設為第3使用者資料713。第1使用者資料711和第3使用者資料713,係被儲存在資料緩衝241中。
指令發行部211,係發行用以對於第1寫入指令進行修正之修正指令。亦即是,指令發行部211,係產生相當於用以對於第1寫入指令進行修正之修正指令的SQ登錄資訊。被作了發行的修正指令,係包含有能夠辨識出進行修正之對象的第1寫入指令之資訊(例如,指令ID)、和代表應使寫入被作取消的LBA範圍之資訊。應使寫入被作取消的LBA範圍,係代表在「藉由第1寫入指令而被作了指定的LBA範圍」與「藉由第3寫入要求而被作了指定的LBA範圍」之間之有所重複的部分。指令發行部211,係將所被發行了的修正指令(SQ登錄資訊)儲存在提交佇列242中(圖29中之(1))。
接著,記憶體系統3之指令受理部121,係從提交佇列242而取得修正指令(圖29中之(2))。之後,指令受理部121,係將所取得的修正指令送出至寫入/修整控制部122處(圖29中之(3))。
寫入/修整控制部122,係使用藉由指令受理部121所被送出了的修正指令,而將寫入管理表63作更新(圖29中之(4))。具體而言,寫入/修整控制部122,係使用藉由修正指令而被作了指定的第1寫入指令之指令ID,來特定出所對應的寫入管理表63之登錄。寫入/修整控制部122,當基於所特定出之登錄所進行的寫入動作尚未被開始並且藉由修正指令而被作了指定的LBA範圍係為有效(亦即是,係身為藉由第1寫入指令而被作了指定的LBA範圍內)的情況時,係以將對於藉由修正指令而被作了指定的LBA範圍之寫入作取消的方式,而將此登錄作更新。更詳細而言,寫入/修整控制部122,係根據代表藉由修正指令而被作了指定的LBA範圍之資訊,而產生修正指令資料64。之後,寫入/修整控制部122,係將對於所被產生了的修正指令資料64之指標,登錄在對於此登錄之修正指令資料之指標欄位中。藉由此,寫入/修整控制部122,當與第1寫入指令相對應之對於NAND型快閃記憶體5之寫入被進行的情況時,係基於被作了更新後的登錄,來以不會使對於「藉由第1寫入指令所被作了指定的LBA範圍」之中之「藉由修正指令所被作了指定的LBA範圍」之寫入被進行的方式,來進行控制。之後,寫入/修整控制部122,係對於指令受理部121,而通知「與修正指令相對應之第1寫入指令之修正為成功(修正成功)」一事(圖29中之(5))。
另外,針對在記憶體系統3處之修正指令資料64,係與在主機2處之針對修正指令資料清單之登錄相同的,藉由設為清單構造,係能夠進行像是將修正指令資料作(1)追加、(2)修正、(3)插入、(4)刪除一般之操作。
另外,當基於所特定出之登錄所進行的寫入動作已被開始的情況時、以及當藉由修正指令所被作了指定的LBA範圍係為無效的情況時,寫入/修整控制部122,係對於指令受理部121,而通知「與修正指令相對應之第1寫入指令之修正為失敗(修正失敗)」一事(圖29中之(5))。亦即是,寫入/修整控制部122,係拒絕「與修正指令相對應之第1寫入指令之修正」。又,當在寫入管理表63中係並不存在有與第1寫入指令之指令ID相對應之登錄的情況時,寫入/修整控制部122亦係對於指令受理部121而通知修正失敗(圖29中之(5))。
指令受理部121,係因應於由寫入/修整控制部122所致之通知,而將針對修正指令之完成通知,儲存於完成佇列243中(圖29中之(6))。具體而言,當從寫入/修整控制部122而被通知有修正成功的情況時,指令受理部121,係將代表修正成功(亦即是,正常結束)之完成通知,儲存於完成佇列243中。又,當從寫入/修整控制部122而被通知有修正失敗的情況時,指令受理部121,係將代表修正失敗(亦即是,異常結束)之完成通知,儲存於完成佇列243中。
接著,主機2之指令發行部211,係從完成佇列243而取得針對修正指令之完成通知(圖29中之(7))。之後,指令發行部211,係將所取得之完成通知對於寫入/修整管理部212作送出(圖29中之(8))。
當完成通知係為代表修正成功之完成通知的情況時,由於第1寫入指令係被修正,因此,寫入/修整管理部212,係產生代表「藉由修正指令而被作了指定的LBA範圍(亦即是,使寫入被作了取消的LBA範圍)」之修正指令資料246(圖29中之(9))。之後,寫入/修整管理部212,係將對於所被產生了的修正指令資料246之指標,登錄在對應於第1寫入指令之鎖死資料清單245內的第1登錄(更詳細而言,針對修正指令資料之指標欄位)中(圖29中之(10))。
進而,當第3寫入要求係身為對於前述之(A)包含有「藉由寫入指令而被作了指定的LBA範圍之中之從開頭起朝向末端而有所連續的一部分」之LBA範圍作了指定的寫入要求的情況時,藉由第1寫入指令而被作了指定的LBA範圍,係因應於修正,而以將從開頭起朝向末端而有所連續的一部分作除外的方式來作縮小。以下,針對此動作,而對於(a)作為資料指標而使用有PRP的情況與(b)作為資料指標而使用有SGL的情況來進行說明。
(a)作為資料指標而使用有PRP的情況
於此情況,係能夠僅藉由鎖死資料清單245之登錄之修正來將LBA範圍作除外。亦即是,寫入/修整管理部212,係替代「產生修正指令資料246,並將所被產生了的修正指令資料246登錄在第1登錄之修正指令資料清單中」一事,而將第1登錄之SQ登錄資訊內的資料指標之資訊,以會代表「應被寫入至被作了縮小後的LBA範圍中之使用者資料之儲存場所」的方式來作更新。進而,寫入/修整管理部212,係將第1登錄之SQ登錄資訊內的LBA範圍之開頭之LBA,更新為會代表被作了縮小後的LBA範圍。另外,寫入/修整管理部212,係亦可將成為了不需要進行寫入的使用者資料71之鎖死解除。
具體而言,當鎖死資料清單245中之第1登錄之SQ登錄資訊內的資料指標為包含有參照圖5(a)所作了說明的第1PRP登錄921的情況時,寫入/修整管理部212,係將第1PRP登錄921,改寫為會代表「應被寫入至新的開頭LBA處之使用者資料71之開頭所被作儲存的記憶區域之物理位址」。又,當第1登錄之SQ登錄資訊內的資料指標為包含有參照圖5(a)所作了說明的第2PRP登錄922的情況時,寫入/修整管理部212,係將第2PRP登錄922,改寫為會代表「應被寫入至新的LBA範圍處之使用者資料71所被作儲存的複數之記憶區域之物理位址」。
另外,在主機2處,係亦可使用邏輯位址空間上之位址,來藉由鎖死資料清單245中之資料區域管理資訊而對於使用者資料71所被作儲存之區域進行管理。寫入/修整管理部212,當資料區域資訊係為藉由開始LBA與結束LBA而被作指定的情況時,係亦可單純將開始LBA變更為新的開頭位址。當資料區域資訊係為藉由開始LBA與資料之長度而被作指定的情況時,寫入/修整管理部212,係將雙方作變更。
寫入/修整管理部212,不論是藉由物理位址來或者是藉由邏輯位址來對於使用者資料71所被作儲存之區域作管理,均同樣的,針對「起因於LBA範圍之開頭位址之變更而導致成為了已不需要被寫入至記憶體系統3中之使用者資料71」所被作儲存之記憶區域,係在確認到了修正指令之正常結束之後,將鎖死作解除。藉由此,該記憶區域係被釋放,並能夠被使用在其他用途中。
(b)作為資料指標而使用有SGL的情況
於此情況,在鎖死資料清單245中之第1登錄之SQ登錄資訊內的資料指標,係代表SGL段之位址。SGL段之各者,係存在於指標清單244上,記憶體系統3亦作參照。當起因於修正指令而使開頭LBA被作了變更時,各SGL段之內容,亦需要因應於此而被作修正。然而,各SGL段由於係亦會被記憶體系統3所參照,因此,在其之修正中,係有必要具有對於各SGL段所被作儲存之記憶區域之鎖死的功能、和異常結束時之恢復功能。亦即是,相較於只要針對僅由主機2所管理之記憶區域和僅由記憶體系統3所管理之記憶區域進行修正即可的PRP,SGL之修正係為複雜。故而,在使用有SGL的情況時,較理想,係個別地而使主機2使用修正指令資料246並使記憶體系統3使用修正指令資料64。
當第3寫入要求係身為對於前述之(B)包含有「藉由寫入指令而被作了指定的LBA範圍之中之從末端起朝向開頭而有所連續的一部分」之LBA範圍作了指定的寫入/修整要求的情況時,藉由第1寫入指令而被作了指定的LBA範圍,係因應於修正,而以將從末端起朝向開頭而有所連續的一部分作除外的方式來作縮小。於此情況,亦同樣的,寫入/修整管理部212,係替代「產生修正指令資料246,並將所被產生了的修正指令資料246登錄在第1登錄之修正指令資料清單中」一事,而將代表「藉由第1登錄內之SQ登錄資訊所展現的LBA範圍」之扇區數,以會代表「被作了縮小後的LBA範圍」的方式來作更新。於此情況,寫入/修整管理部212,係亦可將成為了不需要進行寫入的使用者資料71之鎖死解除。
當第3寫入要求係身為前述之(B)對於「包含有藉由寫入指令而被作了指定的LBA範圍之中之從末端起朝向開頭而有所連續的一部分」之LBA範圍作了指定的寫入/修整要求和身為(C)對於「藉由寫入指令而被作了指定的LBA範圍之中之並不包含有開頭並且也不包含有末端」之途中之LBA範圍作了指定的寫入/修整要求,此兩者之任一者的情況時,藉由第1寫入指令而被作了指定的LBA範圍之開頭係並不被作變更。故而,就算是在並不將修正指令資料246登錄在第1登錄之修正指令資料清單中的情況時,亦同樣的,寫入/修整管理部212,係並不需要對於代表「應因應於第1寫入指令而被作寫入的使用者資料71」之儲存場所之資料指標以及開頭LBA進行變更。
又,當第3寫入要求係身為(C)對於「藉由寫入指令而被作了指定的LBA範圍之中之並不包含有開頭也不包含有末端之途中的LBA範圍」而作了指定的寫入/修整要求的情況時,藉由第1寫入指令而被作了指定的LBA範圍,係因應於修正,而使途中之LBA範圍被作除外,並起因於此,而成為2個的LBA範圍。此2個的LBA範圍,係可根據「藉由第1登錄內之SQ登錄資訊所展示的LBA範圍」與「藉由所被產生了的修正指令資料246所展示之LBA範圍」,而特定出來。
當針對修正指令之完成通知係為代表修正失敗之完成通知的情況時,由於第1寫入指令係並未被修正,因此,與原本之第1寫入指令相對應的寫入動作係被繼續進行。亦即是,寫入/修整管理部212,係並不產生對應於修正指令之修正指令資料246,並且並不將鎖死資料清單245中之第1登錄作更新。
圖30,係對於在圖29中之(9)之動作中所被產生的修正指令資料246之例作展示。修正指令資料246,係包含有被作了取消的寫入之開頭之LBA“LBAx”、使寫入被作了取消的扇區數“n”、以及對於下一個的修正指令資料之指標“NULL”。
被作了取消的寫入之開頭之LBA,係代表藉由修正指令而被作了指定的LBA範圍(亦即是,使寫入被作了取消的LBA範圍)之開頭之LBA。使寫入被作了取消的扇區數,係代表藉由修正指令而被作了指定的LBA範圍之長度。故而,藉由「被作了取消的寫入之開頭之LBA“LBAx”」「和使寫入被作了取消的扇區數“n”」,係能夠得到藉由修正指令而被作了指定的LBA範圍。
對於下一個的修正指令資料之指標,係代表對於針對第1寫入指令而被產生的其他之修正指令資料246之指標。於此,由於修正指令資料246係尚未被產生,因此,在對於下一個的修正指令資料之指標處,係被設定有“NULL”。
另外,當起因於「與針對第1寫入指令之下一個的修正指令相對應之修正」而導致「使寫入被作了取消的LBA範圍」單純地作了擴廣的情況時,主機2,係亦可替代「產生新的修正指令資料246」而將已被儲存的修正指令資料246,以會代表「被作了擴廣後的LBA範圍」的方式來作更新。又,當起因於「與針對第1寫入指令之下一個的修正指令相對應之修正」而導致並不需要展現「使寫入被作了取消的LBA範圍」並能夠作為藉由第1寫入指令而被作了指定的LBA範圍之縮小來作表現的情況時,係亦可構成為將所對應的修正指令資料246刪除,並將藉由所對應的鎖死資料清單245之第1登錄內之SQ登錄資訊所展現的LBA範圍,以會代表「被作了縮小後的LBA範圍」的方式來作更新。
進而,當進行了對應於複數之修正指令的修正後之結果,藉由第1寫入指令而被作了指定的LBA範圍全體之寫入係被作了取消的情況時,係與前述之(1)「藉由之後所被產生之寫入/修整要求而被作了指定的LBA範圍,係完全包含藉由已發行且未完成之寫入指令而被作了指定的LBA範圍」的情況時之動作相同地,而被進行有將第1寫入指令中止之中斷動作(亦即是,在圖22中所示之中斷動作)。
另外,在對應於寫入指令之鎖死資料清單245之登錄被作刪除的情況時,使用對於該登錄內之修正指令資料之指標而被相互附加有關連性的修正指令資料246亦係一併被刪除。當被設定有對於被相互附加有關連性之修正指令資料246內之下一個的修正指令資料之指標的情況時,藉由該指標而被相互附加有關連性之其他的修正指令資料246亦係被刪除。同樣的,針對被作刪除的鎖死資料清單245之登錄,使用指標來以清單構造而被相互附加有關連性之所有的修正指令資料246亦係一併被刪除。
圖31,係對於在圖29中之(10)之動作中而使登錄被作了更新後的鎖死資料清單245之例作展示。鎖死資料清單245,係包含有與第1寫入指令相對應之登錄81、和與第3寫入指令相對應之登錄83。
登錄81,係與圖17中所示之登錄81相同的,為展示有「已經完成了針對第1寫入指令之第1次之完成通知之接收」之內容的登錄。在對於登錄81之修正指令資料之指標欄位中,係被設定有針對修正指令資料246之指標“ptr1”。此修正指令資料246,係身為因應於「從記憶體系統3而接收了代表第1寫入指令之修正成功的完成通知」一事而被產生的修正指令資料。
登錄83,係包含有SQ登錄資訊“sqentry_info3”、完成通知順序“cseq3”、資料區域管理資訊“region_info3”、以及完成通知狀態“completed”。登錄83,係為展示有「已經完成了針對第3寫入指令之第1次之完成通知之接收」之內容的登錄。
藉由以上之寫入以及修正動作,在「藉由之後所被產生之第3寫入要求而被作了指定的LBA範圍,係包含有藉由已發行且未完成之第1寫入指令而被作了指定的LBA範圍之一部分」的情況時,係能夠將在記憶體系統3處之與第1寫入指令相對應之寫入的一部分取消。
具體而言,主機2,係將對應於第3寫入要求之第3寫入指令,送訊至記憶體系統3處。當針對第3寫入指令而從記憶體系統3接收了代表正常結束之第1次的完成通知的情況時,主機2,係對於記憶體系統3而送訊用以對於第1寫入指令進行修正之修正指令。
記憶體系統3,係從主機2而受理修正指令,若是與第1寫入指令相對應之寫入尚未被開始,並且藉由修正指令所被作了指定的LBA範圍係為有效,則對於第1寫入指令進行修正。之後,記憶體系統3,係對於主機2而回送代表第1寫入指令之修正成功的完成通知。主機2,係基於代表修正成功的完成通知,而將對應於第1寫入指令之鎖死資料清單245之登錄作更新。具體而言,主機2,例如,係因應於代表修正成功的完成通知,而產生修正指令資料246。之後,主機2,係將所被產生了的修正指令資料246,登錄在對應於第1寫入指令之鎖死資料清單245之登錄的修正指令資料清單中。
藉由此,在記憶體系統3處,對應於第1寫入指令的對於NAND型快閃記憶體5之寫入之一部分係被取消。亦即是,對於會藉由第3寫入要求而被作覆寫的LBA範圍之寫入,係並不會被進行。故而,係能夠降低NAND型快閃記憶體5之損耗。
於此,針對在前述之寫入動作之第2例中所被使用之情形、亦即是針對使用有「當主機2之IO受理部210接收了將使用者資料71寫入至NAND型快閃記憶體5中之要求的情況時,主機2之指令發行部211係將寫入指令作2次的送訊,記憶體系統3係針對該些之2次的寫入指令之各者而回應2個的完成通知」之動作的情形,來進行說明。在此情形中,主機2,當並未收訊針對第1次的第1寫入指令之第1次之完成通知的情況時,或者是當雖然收訊了針對第1次的第1寫入指令之第1次之完成通知但是尚未將第2次的第1寫入指令對於記憶體系統3作送訊的情況時,係將對於被作了縮小的LBA範圍作指定之第2次的第1寫入指令,對於記憶體系統3作送訊。此被作了縮小的LBA範圍,係為藉由從「藉由第1次之第1寫入指令而被作了指定的LBA範圍」來將「應使寫入被作取消之LBA範圍」作除外一事,所得到的LBA範圍。藉由此,與在前述之圖29中之修正成功的情況相同地,係能夠將對應於第1寫入指令的寫入之一部分取消。於此情況,記憶體系統3之寫入/修整控制部122,係對於寫入管理表63之所相符的登錄之開始LBA、資料指標以及資料長度進行修正。或者是,寫入/修整控制部122,係亦可作成修正指令資料64,並將其之指標寫入至寫入管理表63之所相符的登錄中。
另外,在起因於從「藉由第1次之第1寫入指令而被作了指定的LBA範圍」來將「應使寫入被作取消之LBA範圍」作除外一事,而得到了被作了分割之複數之LBA範圍的情況時,主機2,係將代表被作除外的LBA範圍之指令,對於記憶體系統3作送訊。例如,此指令,係可為具有如同修整指令一般之資料構造的指令。又,主機2,係作成修正指令資料246,並將其之指標寫入至對應於第1寫入指令之鎖死資料清單245之登錄中。
當已將第2次的第1寫入指令對於記憶體系統3作了送訊的情況時,主機2,係對於記憶體系統3而送訊用以對於第1寫入指令進行修正之修正指令。藉由此,係能夠將對應於第1寫入指令的寫入之一部分取消。
另外,就算是在將前述之第3寫入要求置換為修整要求的情況時,也能夠實現同樣的動作。亦即是,就算是在「藉由之後所被產生之修整要求而被作了指定的LBA範圍,係包含有藉由已發行且未完成之第1寫入指令而被作了指定的LBA範圍之一部分」之情況時,也能夠同樣的而對於第1寫入指令進行修正。於此情況,在參照圖21與圖29~圖31而於前所述的動作中,係將第3寫入要求置換為修整要求,並將第3寫入指令置換為修整指令。另外,關於因應於修整要求而在主機2與記憶體系統3處所被進行之修整動作,係如同參照圖24以及圖25而於前所敘述一般。
進而,與前述之寫入動作之第2例相同的,係亦可構成為:當主機2之IO受理部210接收了修整要求的情況時,主機2之指令發行部211係將修整指令作2次的發行,記憶體系統3係回應針對該些之2次的修整指令之各者之2個的完成通知。就算是藉由此構成,也同樣的,當藉由修整要求而被作了指定的LBA範圍,係包含有藉由已發行且未完成之第1寫入指令而被作了指定的LBA範圍之一部分的情況時,係能夠同樣的而對於第1寫入指令進行修正。
於此,針對對於「一部分或者是全部為被包含於藉由之後所被產生之寫入/修整要求而被作了指定的LBA範圍中」之LBA範圍作了指定的「已發行且未完成之寫入指令」係存在有複數的情況,來進行說明。
圖32,係針對對於「一部分或者是全部為被包含於藉由已發行且未完成之寫入指令#1X、#1Y以及#1Z之各者而被作了指定的LBA範圍中」之LBA範圍作指定的寫入/修整要求#2a之例作展示。在圖32中所示之“X”,係代表藉由所對應的寫入指令#1X而被作了指定的LBA。在圖32中所示之“Y”,係代表藉由所對應的寫入指令#1Y而被作了指定的LBA。在圖32中所示之“Z”,係代表藉由所對應的寫入指令#1Z而被作了指定的LBA。在圖32中所示之“W”,係代表藉由所對應的寫入/修整要求#2a而被作了指定的LBA。藉由寫入/修整要求#2a所被作了指定的LBA範圍,係身為因應於此寫入/修整要求(更詳細而言,所對應之寫入指令或者是修整指令)而被進行寫入或者是修整之LBA範圍。
具體而言,在寫入指令#1X處,LBA x~LBA x+1之LBA範圍係被作指定。藉由寫入指令#1X而被作了指定的LBA範圍,係身為與寫入指令#1X相對應之使用者資料的非揮發化尚未完成的LBA範圍。
在寫入指令#1Y處,LBA x+6~LBA x+7之LBA範圍係被作指定。藉由寫入指令#1Y而被作了指定的LBA範圍,係身為與寫入指令#1Y相對應之使用者資料的非揮發化尚未完成的LBA範圍。
在寫入指令#1Z處,LBA x+3係被作指定。藉由寫入指令#1Z而被作了指定的LBA,係身為與寫入指令#1Z相對應之使用者資料的非揮發化尚未完成的LBA。
在寫入/修整要求#2a處,LBA x+1~LBA x+6之LBA範圍係被作指定。
如此這般,藉由寫入/修整要求#2a而被作了指定的LBA範圍,係包含有藉由寫入指令#1X而被作了指定的LBA範圍之一部分、和藉由寫入指令#1Y而被作了指定的LBA範圍之一部分、以及藉由寫入指令#1Z而被作了指定的LBA之全部。於此情況,例如,針對寫入指令#1Z,係被進行有前述之「(1)藉由之後所被產生之寫入/修整要求而被作了指定的LBA範圍,係完全包含藉由已發行且未完成之寫入指令而被作了指定的LBA範圍」的情況時之動作。另一方面,針對寫入指令#1X以及#1Y,在前述之「(2)藉由之後所被產生之寫入/修整要求而被作了指定的LBA範圍,係包含藉由已發行且未完成之寫入指令而被作了指定的LBA範圍之一部分」的情況時,係被進行有使用(2-a)對於已發行且未完成之寫入指令進行修正之方法的動作。
((2-b)將已發行且未完成之寫入指令作中止之方法)
接著,針對將已發行且未完成之寫入指令作中止之方法進行說明。在此方法中,當被產生有對於包含有「藉由已發行且未完成之寫入指令所被作了指定的LBA範圍之一部分」之LBA範圍作了指定的寫入要求的情況時,主機2,係將用以進行使「與該寫入指令相對應之寫入」和「與所被產生的寫入要求相對應之寫入」被作了結合的寫入之寫入指令,對於記憶體系統3作送訊。之後,主機2,係將已發行且未完成之寫入指令作中止。將用以進行使「與已發行且未完成之寫入指令相對應之寫入」和「與對於包含有藉由該寫入指令所被指定了的LBA範圍之一部分之LBA範圍作了指定的寫入要求相對應之寫入」被作了結合的寫入之寫入指令,亦稱作結合寫入指令。
圖33,係針對當產生有對於「包含藉由已發行且未完成之寫入指令#1而被作了指定的LBA範圍之一部分」之LBA範圍作了指定的寫入要求#2的情況時所被作發行的結合寫入指令#3之例作展示。在圖33中所示之“A”~“B”,係代表應被寫入至「藉由所對應的寫入指令#1而被作了指定的LBA」中之使用者資料。在圖33中所示之“C”~“D”,係代表應被寫入至「藉由所對應的寫入要求#2而被作了指定的LBA」中之使用者資料。亦即是,使用者資料A~D之各者,係代表特定之資料列。
具體而言,在寫入指令#1處,LBA x+1~LBA x+2之LBA範圍係被作指定。在寫入指令#1處,係被指定有分別應被寫入至LBA x+1以及x+2處之使用者資料A以及B。藉由寫入指令#1而被作了指定的LBA範圍,係身為與寫入指令#1相對應之使用者資料A以及B的非揮發化尚未完成的LBA範圍。
在寫入要求#2處,LBA x~LBA x+1之LBA範圍係被作指定。在寫入要求#2處,係被指定有分別應被寫入至LBA x以及x+1處之使用者資料C以及D。
藉由寫入要求#2而被作了指定的LBA範圍,係包含有身為「藉由寫入指令#1所被作了指定的LBA範圍之一部分」之LBA x+1(亦即是,會被作覆寫之扇區)、和「藉由寫入指令#1所被作了指定的LBA範圍外」之LBA x(亦即是,不會被作覆寫之扇區)。換言之,藉由寫入指令#1而被作了指定的LBA範圍,係包含有身為「藉由寫入要求#2所被作了指定的LBA範圍之一部分」之LBA x+1(亦即是,會被作覆寫之扇區)、和「藉由寫入要求#2所被作了指定的LBA範圍外」之LBA x+2(亦即是,不會被作覆寫之扇區)。
結合寫入指令#3,係身為用以進行使「與寫入指令#1相對應之寫入」和「與寫入要求#2相對應之寫入」作了結合後的寫入之寫入指令。結合寫入指令#3,係基於當「在與寫入指令#1相對應之寫入被進行之後,被進行有與寫入要求#2相對應之寫入」的情況時,最終而言應被寫入至LBA x~LBA x+2之LBA範圍中的使用者資料C、D以及B,而被產生。故而,在結合寫入指令#3處,LBA x~LBA x+2之LBA範圍係被作指定。LBA x~LBA x+2之LBA範圍,係包含有藉由「藉由寫入指令#1所被作了指定的LBA範圍」與「藉由寫入要求#2所被作了指定的LBA範圍」之中之至少其中一者所被作了指定的LBA範圍。又,分別應被寫入至LBA x、x+1以及x+2處之使用者資料C、D以及B,係對於結合寫入指令#3而被相互附加有關連性。在寫入指令#1與寫入要求#2為相互重複的範圍中,係被寫入有較之後的寫入要求#2之使用者資料。
圖34,係針對當產生有對於「包含藉由已發行且未完成之寫入指令#1而被作了指定的LBA範圍之一部分」之LBA範圍作了指定的寫入要求#2的情況時所被作發行的結合寫入指令#3之其他例作展示。在圖34中所示之“A”~“E”,係代表應被寫入至「藉由所對應的寫入指令#1而被作了指定的LBA」中之使用者資料。在圖34中所示之“F”~“G”,係代表應被寫入至「藉由所對應的寫入要求#2而被作了指定的LBA」中之使用者資料。亦即是,使用者資料A~G之各者,係代表特定之資料列。
具體而言,在寫入指令#1處,LBA x~LBA x+4之LBA範圍係被作指定。在寫入指令#1處,係被指定有分別應被寫入至LBA x、x+1、x+2、x+3以及x+4處之使用者資料A、B、C、D以及E。藉由寫入指令#1而被作了指定的LBA範圍,係身為與寫入指令#1相對應之使用者資料A、B、C、D以及E的非揮發化尚未完成的LBA範圍。
在寫入要求#2處,LBA x+1~LBA x+2之LBA範圍係被作指定。在寫入要求#2處,係被指定有分別應被寫入至LBA x+1以及x+2處之使用者資料F以及G。
藉由寫入要求#2而被作了指定的LBA範圍,係包含有身為「藉由寫入指令#1所被作了指定的LBA範圍之一部分」之LBA x+1以及x+2(亦即是,會被作覆寫之扇區)。換言之,藉由寫入指令#1而被作了指定的LBA範圍,係包含有身為「藉由寫入要求#2所被作了指定的LBA範圍」之LBA x+1以及x+2(亦即是,會被作覆寫之扇區)、和「藉由寫入要求#2所被作了指定的LBA範圍外」之LBA x、x+3以及x+4(亦即是,不會被作覆寫之扇區)。
結合寫入指令#3,係身為用以進行使「與寫入指令#1相對應之寫入」和「與寫入要求#2相對應之寫入」作了結合後的寫入之寫入指令。寫入指令#3,係基於當「在與寫入指令#1相對應之寫入被進行之後,被進行有與寫入要求#2相對應之寫入」的情況時,最終而言應被寫入至LBA x~LBA x+4之LBA範圍中的使用者資料A、F、G、D以及E,而被產生。故而,在結合寫入指令#3處,LBA x~LBA x+4之LBA範圍係被作指定。LBA x~LBA x+4之LBA範圍,係包含有藉由「藉由寫入指令#1所被作了指定的LBA範圍」與「藉由寫入要求#2所被作了指定的LBA範圍」之中之至少其中一者所被作了指定的LBA範圍。又,分別應被寫入至LBA x、x+1、x+2、x+3以及x+4處之使用者資料A、F、G、D以及E,係對於結合寫入指令#3而被相互附加有關連性。在寫入指令#1與寫入要求#2為相互重複的範圍中,係被寫入有較之後的寫入要求#2之使用者資料。
如同在圖33以及圖34中所示一般,當產生有對於「包含藉由已發行且未完成之寫入指令#1而被作了指定的LBA範圍之一部分」之LBA範圍作了指定的寫入要求#2的情況時,為了將寫入指令#1中止,係使用有結合寫入指令#3。
參照圖35以及圖36,針對當「藉由之後所被產生之寫入要求而被作了指定的LBA範圍,係包含藉由已發行且未完成之寫入指令而被作了指定的LBA範圍之一部分」的情況時,發行結合寫入指令並將已發行且未完成之寫入指令作中止之動作進行說明。
圖35,係針對對應於對於「包含有藉由已發行且未完成之寫入指令而被作了指定的邏輯位址範圍之一部分」之邏輯位址範圍作了指定的寫入要求之動作之例作展示。在圖35中所示之動作,例如,係在參照圖11而於前所述的寫入動作之後而被進行。將已發行且未完成之寫入指令,稱作第1寫入指令。將對於「包含有藉由第1寫入指令而被作了指定的LBA範圍之一部分」之LBA範圍作指定的寫入要求,稱作第3寫入要求。將應因應於第1寫入指令而被作寫入的使用者資料,設為第1使用者資料711。又,將藉由第3寫入要求而被要求了寫入的使用者資料,設為第3使用者資料713。第1使用者資料711和第3使用者資料713,係被儲存在資料緩衝241中。
首先,在主機2處,IO受理部210,係受理由應用程式223或者是OS221所致之第3寫入要求(圖35中之(1))。IO受理部210,係將所受理了的第3寫入要求送至寫入/修整管理部212處(圖35中之(2))。
寫入/修整管理部212,當並未接收針對第1寫入指令之第1次之完成通知的情況時,係等待針對第1寫入指令之第1次之完成通知之收訊。記憶體系統3,係可能會將所受理了的寫入指令以及修整指令,以無關於所受理之順序的順序來實行。因此,當針對1個的LBA而被進行有複數之寫入或者是修整的情況時,主機2,係有必要依循於從應用程式223或者是OS221而來之寫入要求或者是修整要求之被作了產生的順序,來以會使與更之後所被產生的寫入要求或者是修整要求相對應之內容最終而言被反映於記憶體系統3之NAND型快閃記憶體5的方式,來進行控制。因此,指令發行部211以及寫入/修整管理部212,係等待針對第1寫入指令之第1次的完成通知之收訊,並進行與第3寫入要求相對應之動作。另外,以下,係對於「針對第1寫入指令之第1次的完成通知係為正常回應」的情況作例示。當「針對第1寫入指令之第1次的完成通知係為異常回應」的情況時,因應於第3寫入要求,參照圖11~圖18而於前所述之寫入動作係被進行。
在收訊了針對第1寫入指令之正常回應的第1次之完成通知之後,寫入/修整管理部212,係決定應因應於結合寫入指令而被作寫入的使用者資料714(以下,稱作結合使用者資料714)。結合使用者資料714,係身為當「在與第1寫入指令相對應之寫入被進行之後,被進行有與第3寫入要求相對應之寫入」的情況時,最終而言應被作寫入的使用者資料。
當作為代表結合使用者資料714之儲存場所的資料指標而使用有PRP的情況時,寫入/修整管理部212,係將作為結合使用者資料714而被作使用的「第1使用者資料711之一部分」與「第3使用者資料713」作複製,並產生結合使用者資料714。寫入/修整管理部212,係將所被產生了的結合使用者資料714儲存於資料緩衝241中。
在PRP中,資料之儲存場所,係藉由將NVRAM24上之物理性為非連續之複數之頁面作了結合的清單(亦即是,PRP登錄之清單),而被作表現。在藉由PRP登錄之清單而被作表現的頁面群之中,於最初之頁面處,資料所被作儲存之區域係亦可為從該頁面之途中起而開始。亦即是,在最初之頁面之開頭部分處,係亦可並未被儲存有資料。於最後之頁面處,資料所被作儲存之區域係亦可為在該頁面之途中處而結束。亦即是,在最後之頁面之末端部分處,係亦可並未被儲存有資料。在位於最初之頁面與最後之頁面之間的途中之頁面處,係並不可存在有並未被儲存有資料之區域。
於此,針對「NVRAM24之頁面容量係為身為LBA之單位的扇區容量之m倍」的情況作考慮。另外,m係為較1而更大的整數。於此情況,被儲存有「作為結合使用者資料714而被作使用的「第1使用者資料711之一部分」與「第3使用者資料713」」的NVRAM24內之區域,係會有在頁面之途中而開始或者是在頁面之途中而結束的可能性。故而,係會有無法將「作為結合使用者資料714而被作使用的「第1使用者資料711之一部分」與「第3使用者資料713」」之儲存場所藉由PRP登錄之清單來作表現的可能性。
因此,當作為代表結合使用者資料714之儲存場所的資料指標而使用有PRP的情況時,寫入/修整管理部212,係將作為結合使用者資料714而被作使用的「第1使用者資料711之一部分」與「第3使用者資料」作複製,並以會使結合使用者資料714之儲存場所成為能夠藉由PRP登錄之清單來表現之頁面群的方式,來儲存在NVRAM24中。
寫入/修整管理部212,係產生代表結合使用者資料714之儲存場所之資料指標(於此,係為PRP登錄之清單)。之後,寫入/修整管理部212,係將結合使用者資料714作鎖死(圖35中之(3))。在圖35中,係針對「結合使用者資料714為被儲存於NVRAM24內之資料緩衝241中,並被作鎖死」之例作展示。
另外,當作為代表結合使用者資料714之儲存場所的資料指標而使用有SGL的情況時,寫入/修整管理部212,係亦可並不將作為結合使用者資料714而被作使用的「第1使用者資料711之一部分」與「第3使用者資料713」作複製。在SGL中,係能夠對於「作為結合使用者資料714而被作使用的「第1使用者資料711之一部分」與「第3使用者資料713」」之儲存場所作表現。因此,寫入/修整管理部212,係產生代表作為結合使用者資料714而被作使用的「第1使用者資料711之一部分」與「第3使用者資料713」之儲存場所的SGL。之後,寫入/修整管理部212,係將作為結合使用者資料714而被作使用的「第1使用者資料711之一部分」與「第3使用者資料713」作鎖死(圖35中之(4))。另外,作為結合使用者資料714而被作使用的「第1使用者資料711之一部分」之儲存場所,係暫時性地會有被第1寫入指令與結合寫入指令之雙方而作參照的情況。於此情況,第1使用者資料711,由於在第1寫入指令被作了發行時係已被作鎖死,因此,寫入/修整管理部212,係將針對作為結合使用者資料714而被作使用的「第1使用者資料711之一部分」之參照計數器作增數。參照計數器,係代表正在對於所對應的特定單位之資料進行參照的指令之數量。當新被發行有對於某一資料進行參照之指令的情況時,與該資料相對應的參照計數器係被作增數。當與對於某一資料進行參照之指令相對應的處理為完成的情況時,與該資料相對應的參照計數器係被作減數。當被作了減數後的參照計數器成為了0的情況時,寫入/修整管理部212,係將所對應的資料之鎖死解除。
當使用有PRP的情況時,在將結合使用者資料714作了鎖死之後,寫入/修整管理部212,係對於指令發行部211而要求發行用以將結合使用者資料714作寫入之寫入指令(結合寫入指令),或者是,當使用有SGL的情況時,在將作為結合使用者資料714而被作使用的「第1使用者資料711之一部分」與「第3使用者資料713」作了鎖死之後,寫入/修整管理部212,係對於指令發行部211而要求發行用以將結合使用者資料714作寫入之寫入指令(結合寫入指令)(圖35中之(5))。指令發行部211,係因應於由寫入/修整管理部212所致之要求,而發行結合寫入指令。亦即是,指令發行部211,係產生相當於用以將結合使用者資料714作寫入的結合寫入指令之SQ登錄資訊。結合寫入指令,係對於包含有「藉由第1寫入指令而被作了指定的LBA範圍」與「藉由第3寫入要求而被作了指定的LBA範圍」之LBA範圍作指定。指令發行部211,係將所產生了的SQ登錄資訊對於寫入/修整管理部212作送出(圖35中之(6))。
寫入/修整管理部212,係使用藉由指令發行部211所被送出的SQ登錄資訊,來產生鎖死資料清單245之登錄。將所被產生了的登錄,稱作第4登錄。第4登錄,例如,係包含有相當於所被發行了的結合寫入指令之SQ登錄資訊、和資料區域管理資訊。此資料區域管理資訊,係為能夠特定出「結合使用者資料714所被儲存之資料緩衝241內之記憶區域」的資訊。寫入/修整管理部212,係將第4登錄追加至鎖死資料清單245中(圖35中之(7))。
接著,指令發行部211,係將所被發行了的結合寫入指令(SQ登錄資訊)儲存在提交佇列242中(圖35中之(8))。
後續之與結合寫入指令相對應的在記憶體系統3處之動作(圖35中之(9)~(13)),係與參照圖11而於前所述之在記憶體系統3處之動作(圖11中之(8)~(12))相同。
接著,主機2之指令發行部211,係從完成佇列243而取得針對結合寫入指令之第1次的完成通知(圖35中之(14))。之後,指令發行部211,係將所取得之第1次的完成通知對於寫入/修整管理部212作送出(圖35中之(15))。
當第1次之完成通知係為代表正常結束之完成通知的情況時,寫入/修整管理部212,係在鎖死資料清單245中,將與結合寫入指令相對應之第4登錄作更新(圖35中之(16))。具體而言,寫入/修整管理部212,係在第4登錄中,追加所被作了分配的序列編號(亦即是,代表接收了第1次的完成通知之順序之資訊)、和代表已完成第1次之完成通知之接收一事的資訊。寫入/修整管理部212,係將寫入之完成(正常結束)對於IO受理部210作通知(圖35中之(17))。之後,IO受理部210,係將寫入之完成對於應用程式223或者是OS221作通知(圖35中之(18))。
當第1次的完成通知係為代表異常結束之完成通知的情況時,寫入/修整管理部212,係將結合使用者資料714之鎖死解除(圖35中之(19)),或者是,將作為結合使用者資料714而被作使用的「第1使用者資料711之一部分」與「第3使用者資料713」之鎖死解除(圖35中之(20))。之後,寫入/修整管理部212,係將第4登錄,從鎖死資料清單245中而刪除(圖35中之(21))。更具體而言,寫入/修整管理部212,係使用第4登錄內之資料區域管理資訊,來解除結合使用者資料714之鎖死。或者是,寫入/修整管理部212,係將作為結合使用者資料714而被作使用的「第1使用者資料711之一部分」之參照計數器作減數,並將「第3使用者資料713」之鎖死解除。又,寫入/修整管理部212,在作成有PRP登錄之清單和SGL之第2個之後之段的情況時,係亦將該些所被作儲存的指標清單244之區域釋放。之後,寫入/修整管理部212,係將第4登錄,從鎖死資料清單245中而刪除。又,寫入/修整管理部212,係將異常結束對於IO受理部210作通知(圖35中之(22))。之後,IO受理部210,係將異常結束對於應用程式223或者是OS221作通知(圖35中之(23))。
當針對結合寫入指令之第1次的完成通知係為正常回應的情況時,在資訊處理系統1處,係被進行有用以將第1寫入指令中止之動作(中斷動作)。此中斷動作,係與參照圖22而於前所述之中斷動作相同。另外,在圖22所示之中斷動作中,當第1寫入指令之中止為成功的情況時,應因應於第1寫入指令而被作寫入的第1使用者資料711之鎖死係被解除(圖22中之(9))。相對於此,在使用有結合寫入指令的方法中,「第1使用者資料711之一部分」係會有不僅是會被第1寫入指令所參照並且也會被結合寫入指令所參照的情況。於此情況,寫入/修整管理部212,係因應於第1寫入指令之中止為成功一事,而在第1使用者資料711中,將並未被結合寫入指令所參照的部分之鎖死解除,並將有被結合寫入指令所參照的部分之參照計數器作減數。另外,在將「第1使用者資料711之一部分」作複製並產生有結合使用者資料714的情況時,寫入/修整管理部212,係因應於第1寫入指令之中止為成功一事,而將第1使用者資料711全體之鎖死解除。
圖36,係對於「當針對結合寫入指令之第1次的完成通知係為正常回應的情況時,在中斷動作中而被作了更新的鎖死資料清單245」之例作展示。鎖死資料清單245,係包含有與第1寫入指令相對應之登錄81、和與結合寫入指令相對應之登錄84。
登錄81,係與圖17中所示之登錄81相同的,為展示有「已經完成了針對第1寫入指令之第1次之完成通知之接收」之內容的登錄。登錄81,係因應於從記憶體系統3而接收了代表第1寫入指令之中斷成功的完成通知一事,而被作刪除。
登錄84,係包含有SQ登錄資訊“sqentry_info4”、完成通知順序“cseq4”、資料區域管理資訊“region_info4”、以及完成通知狀態“completed”。登錄84,係為展示有「已經完成了針對結合寫入指令之第1次之完成通知之接收」之內容的登錄。
藉由以上之寫入以及中斷動作,在「藉由之後所被產生之第3寫入要求而被作了指定的LBA範圍,係包含有藉由已發行且未完成之第1寫入指令而被作了指定的LBA範圍之一部分」的情況時,係能夠將在記憶體系統3處之與第1寫入指令相對應之寫入中止。
具體而言,主機2,係將使第1寫入指令與第3寫入要求作了結合的結合寫入指令,送訊至記憶體系統3處。當針對結合寫入指令而從記憶體系統3接收了代表正常結束之第1次的完成通知的情況時,主機2,係對於記憶體系統3而送訊用以將第1寫入指令中止之中斷指令。
記憶體系統3,係從主機2而受理中斷指令,若是與第1寫入指令相對應之寫入尚未被開始,則將第1寫入指令中止。之後,記憶體系統3,係對於主機2而回送代表第1寫入指令之中斷成功的完成通知。主機2,係基於代表中斷成功的完成通知,而將對應於第1寫入指令之登錄,從鎖死資料清單245而刪除。
藉由此,在記憶體系統3處,對應於第1寫入指令的對於NAND型快閃記憶體5之寫入係被中止。亦即是,對於會藉由第3寫入要求而被作覆寫的LBA範圍之寫入,係並不會被進行。故而,係能夠降低NAND型快閃記憶體5之損耗。
另外,當記憶體系統3為具備有安全保護(security)功能,在記憶體系統3收訊了第1寫入指令之後,並不會起因於第3寫入要求而被作覆寫的LBA範圍成為了禁止寫入的情況時,主機2,係並不發行結合寫入指令。或者是,主機2,係先從記憶體系統3而接收「錯誤」,之後,因應於第3寫入要求,參照圖11~圖18而於前所述之寫入動作係被進行。
(恢復動作)
接著,針對在資訊處理系統1處的恢復(recovery)動作作說明。恢復動作,係為用以將「起因於主機2或者是記憶體系統3之其中一者或者是雙方發生異常結束或者是非預期性地進行了再啟動一事所導致的無法完成之對於記憶體系統3之使用者資料之寫入」使用被儲存於NVRAM24中之資料來作恢復的動作。於此,所謂異常結束,係代表在「與記憶體系統3所接收了的所有的寫入指令相對應之使用者資料之寫入」完成之前,主機2與記憶體系統3之其中一者或者是雙方便結束動作。又,所謂非預期性之再啟動,係指主機2與記憶體系統3之其中一者或者是雙方並未完成關機(shutdown)動作地便進行了再啟動。
圖37,係對於在資訊處理系統1處的恢復動作之例作展示。於此,係針對「主機2與記憶體系統3之其中一者或者是雙方在正要進行此次之啟動之前而發生了異常結束或者是非預期性地進行了再啟動」的情形作考慮。具體而言,係為「雖然主機2係正常地動作但是僅有記憶體系統3為發生了異常結束或者是進行了再啟動」的情況、「雖然記憶體系統3係正常地動作但是僅有主機2為發生了異常結束或者是進行了再啟動」的情況、或者是「主機2與記憶體系統3之雙方發生了異常結束或者是進行了再啟動」的情況。首先,若是存在有維持於發生了異常結束後的狀態之主機2或者是記憶體系統3,則係例如使作業員以手動來將該些進行再啟動。接著,主機2之指令發行部211,係將記憶體系統3作重置(reset)。此時,當主機2為繼續進行了正常動作的情況時,指令發行部211,係將提交佇列242與完成佇列243拋棄,並重新製作。亦即是,係作成有空的佇列。
又,係設想為「係存在有起因於發生異常結束或者是非預期性地進行了再啟動一事所導致的無法完成之對於記憶體系統3之使用者資料之寫入」的情形。亦即是,係針對「在鎖死資料清單245中係包含有代表接收了第1次的完成通知之寫入指令之登錄」的情形作考慮。
首先,主機2之IO受理部210,係中斷從應用程式223或OS221而來之新的I/O要求之受理處理。亦即是,IO受理部210,係就算是受理有新的I/O要求,也並不開始針對該要求之處理。主機2之恢復控制部213,係針對被與記憶體系統3相互附加有關連性的鎖死資料清單245,而以會使對於1個的LBA之重複之寫入被作排除的方式,來進行變更(圖37中之(1))。具體而言,恢復控制部213,係將代表「已接收了第1次的完成通知」一事之1個以上的登錄,從鎖死資料清單245之開頭起而依序特定出來。恢復控制部213,係使用所被特定出之1個以上的登錄,來以「當藉由較之前所被發行了的寫入指令而被作了指定之LBA範圍之至少一部分為與藉由之後所被發行之寫入指令或者是修整指令而被作了指定之LBA範圍有所重複的情況時,使對於該重複部分之寫入不會被進行」的方式,而將與較之前所被發行了的寫入指令相對應之登錄作變更或者是刪除。藉由此,當對於記憶體系統3而再度要求基於鎖死資料清單245所致之寫入或者是修整的情況時,係能夠避免「對於某一LBA而發生覆寫」或者是「對於某一LBA而發生在之後會被作修整的寫入」的情形。故而,係能夠降低記憶體系統3之NAND型快閃記憶體5之損耗。將包含有以會使對於有所重複之LBA之寫入被作排除的方式而被作了變更的登錄之鎖死資料清單245,亦稱作「被進行了重複排除之鎖死資料清單245」。
在取得了被進行了重複排除之鎖死資料清單245之後,恢復控制部213,係從鎖死資料清單245之開頭起,而依序特定出分別代表「接收了第1次的完成通知」一事之n個的登錄(圖37中之(2))。其中,n係為1以上之整數。
恢復控制部213,係從鎖死資料清單245中,而選擇所特定出之n個的登錄之中之1個。在此時間點處,由於重複係已被排除,因此,恢復控制部213,係不論是以何種順序來對於各登錄進行處理均可,而並非絕對需要從開頭起來依序對於各登錄作選擇。以下,係將所被選擇了的登錄,亦稱作對象登錄。在圖37中所示之後續之動作中,n個的登錄,係從開頭起來依序被1個1個地作為對象登錄來使用。
恢復控制部213,係使用在對象登錄中所包含之資料區域管理資訊,來將所對應的資料緩衝241內之使用者資料71或者是範圍資訊72鎖死(圖37中之(3))。之後,恢復控制部213,係使用在對象登錄中所包含之SQ登錄資訊,來對於指令發行部211而要求所對應的寫入指令之發行或者是所對應的修整指令之發行(圖37中之(4))。
另外,當主機2作了再啟動的情況時,恢復控制部213,當在鎖死資料清單245中係存在有代表並未接收第1次的完成通知之登錄的情況時,係將該登錄刪除。此係因為,其之要求源頭之應用程式223等亦係已成為不存在,而並無法從恢復控制部213來送訊完成通知之故。代表並未接收第1次的完成通知一事之登錄,例如,係為並未包含有完成通知順序和完成通知狀態之登錄。恢復控制部213,由於係並未接收第1次的完成通知,因此,係判斷與此登錄相對應的寫入指令或者是修整指令係並未被記憶體系統3所受理。又,由於係並未接收第1次的完成通知,因此,在並未針對「進行了對於與此登錄相對應之寫入或者是修整之要求的應用程式223等」而通知有寫入或者是修整之完成的狀態下,應用程式223等係結束。故而,係並不需要將與代表並未接收第1次的完成通知一事之登錄相對應之寫入指令或者是修整指令對於記憶體系統3而再度作送訊。因此,恢復控制部213,係將代表並未接收第1次的完成通知一事之登錄從鎖死資料清單245而刪除。
指令發行部211,係因應於由恢復控制部213所致之寫入指令與修整指令之其中一者之發行之要求,而將相當於對象登錄內之SQ登錄資訊的寫入指令或者是修整指令儲存在提交佇列242中(圖37中之(5))。
之後,恢復控制部213,係在對象登錄中,將完成通知順序與完成通知狀態刪除(圖37中之(6))。藉由此,對象登錄,係成為代表身為「所對應的寫入指令或者是修整指令被發行(送訊)至記憶體系統3處,並且並未收訊第1次之完成通知」的狀態。
後續之在圖37中之(7)~(11)之動作,係與當對象登錄為對應於寫入指令的情況時參照圖11而於前所述之寫入動作之(8)~(12)之動作相同。另外,當對象登錄為對應於修整指令的情況時,圖37中之(7)~(11)之動作,係被置換為參照圖24而於前所述之修整動作之(8)~(11)之動作。亦即是,記憶體系統3之指令受理部121以及寫入/修整控制部122,係從提交佇列242而受理寫入指令或者是修整指令,並將第1次的完成通知儲存於完成佇列243中。
接著,主機2之指令發行部211,係從完成佇列243而取得針對寫入指令或者是修整指令之第1次的完成通知(圖37中之(12))。指令發行部211,係將所取得之第1次的完成通知對於恢復控制部213作送出(圖37中之(13))。
恢復控制部213,係從指令發行部211而接收第1次的完成通知,並在鎖死資料清單245中,將與所接收的第1次的完成通知相對應之登錄作更新(圖37中之(14))。具體而言,恢復控制部213,係在與所接收了的第1次的完成通知相對應之登錄中,追加代表接收了完成通知的順序之序列編號、和代表已完成第1次之完成通知之接收一事的資訊。
藉由以上之在圖37中所示之動作,主機2,係以會使對於1個的LBA之重複之寫入被作排除並且使會被作修整之寫入被作排除的方式,來將鎖死資料清單245作變更。之後,主機2,係能夠使用分別代表「接收了第1次的完成通知」一事之n個的登錄,來將要求進行所對應的使用者資料71之寫入的寫入指令或者是要求將基於所對應之範圍資訊72所得到的LBA範圍之分配作解除的修整指令,再度送訊至記憶體系統3處。故而,係能夠對於被從應用程式223或者是OS221所作了要求的順序有所考慮地,來再現「起因於主機2與記憶體系統3之其中一者或者是雙方發生異常結束或者是非預期性地進行了再啟動一事所導致的無法完成處理之寫入指令或者是修整指令」之送訊。
在記憶體系統3處,係被進行有與所被送訊了的寫入指令或者是修整指令相對應之動作。在與所被送訊了的寫入指令相對應之寫入中,對於1個的LBA之有所重複之寫入係被作排除。
主機2之恢復控制部213以及指令發行部211,係對於記憶體系統3,而送訊用以使「已收訊有代表正常結束之第1次的完成通知」之寫入指令或者是修整指令結束的特殊清除指令,並在針對從主機2所送訊至記憶體系統3處之所有的寫入指令以及修整指令而接收了第2次的完成通知之後,開始從應用程式223或者是OS221而來之新的I/O要求之處理。或者是,恢復控制部213以及指令發行部211,係亦可構成為當「針對從主機2所送訊至記憶體系統3處之所有的寫入指令以及修整指令而接收了第1次的完成通知」的情況時,開始從應用程式223或者是OS221而來之新的I/O要求之處理。新的I/O要求,係為針對記憶體系統3之新的資料讀出要求或者是資料寫入要求。亦即是,主機2之指令發行部211,係成為能夠將與所受理了的新的I/O要求相對應之讀取指令或寫入指令,對於記憶體系統3作新的發行。
藉由以上之恢復動作,係能夠使「起因於主機2與記憶體系統3之其中一者或者是雙方發生異常結束或者是非預期性地進行了再啟動一事所導致的無法完成之使用者資料之寫入以及LBA範圍之分配之解除」完成。亦即是,主機2,係能夠使用對於所發行了的寫入指令以及修整指令之處理狀況作管理的鎖死資料清單245,來使對於記憶體系統3之未完成之寫入以及修整作恢復。之後,主機2之指令發行部211,係能夠藉由IO受理部210而開始從應用程式223或者是OS221所受理了的新的I/O要求之處理。
另外,不論是在前述之何者之動作中,均同樣的,針對對於記憶體系統3之寫入或者是修整作管理的資料之操作,係有必要以「不論是在任何的時間點處,起因於異常斷電或者是OS221之崩潰等而導致處理停止,也不會發生資料之非整合」的方式,來不可拆分(atomic)地進行。亦即是,關連於針對對於記憶體系統3之寫入或者是修整作管理的資料之一連串的操作,係有必要以不會在途中而結束的方式來進行。因此,在此操作中,例如,係使用有能夠保證會被不可拆分地進行之指令、或者是當不可拆分操作並未完成的情況時能夠回復到可取得有整合性的狀態之機制。有必要不可拆分地而進行之操作,係包含有鎖死資料清單245內之各登錄之變更、對於鎖死資料清單245之登錄之追加、從鎖死資料清單245之登錄之刪除、修正指令資料246之產生、修正指令資料246之刪除等。
又,鎖死資料清單245之各登錄,係包含有完成通知順序。但是,如同前述一般,當針對從應用程式223或者是OS221而來之所有的寫入要求以及修整要求而適用了前述之寫入動作、中斷動作以及修正動作的情況時,於恢復動作中,係不會有「對於1個的LBA而重複地被進行有寫入」以及「在對於1個的LBA而進行了寫入之後,被進行有修整」的情形。因此,在鎖死資料清單245之各登錄處,係亦可並未被設置有完成通知順序之欄位。又,在記憶體系統3處,於恢復動作中所被作了發行的指令之處理順序係亦可並未被保證。但是,在鎖死資料清單245中,係以從應用程式223或者是OS221而受理了寫入要求以及修整要求之順序,而被追加有相對應之登錄,如同前述一般,當存在有發生有重複之先行之指令的情況時,係有必要先收訊針對先行之指令之第1次的完成通知,之後再使下一個指令被發行。
另外,當設置有為了以處理速度為優先而並不適用前述之寫入動作、中斷動作以及修正動作之模式(速度優先模式)的情況時,例如,係成為僅對於從應用程式223或者是OS221而來之一部分之寫入要求以及修整要求,而適用前述之寫入動作、中斷動作以及修正動作。於此情況,係有必要在鎖死資料清單245之各登錄中而包含有完成通知順序。
接著,參考圖38~圖54之流程圖,針對在主機2以及記憶體系統3處所被實行的處理進行說明。
(在主機2處之寫入要求控制處理)
圖38,係為對於藉由主機2之CPU21所被實行的寫入要求控制處理之程序之例作展示之流程圖。此寫入要求控制處理,係為用以因應於在「藉由應用程式223或者是OS221所被產生了的新的寫入要求」與「已發行且未完成之寫入指令」之間是否存在有所被作了指定的LBA範圍之重複一事,來針對對於記憶體系統3之NAND型快閃記憶體5的寫入進行控制之處理。此寫入要求控制處理,係為實現「當在前述之(1)「藉由之後所被產生之寫入/修整要求而被作了指定的LBA範圍,係完全包含藉由已發行且未完成之寫入指令而被作了指定的LBA範圍」之情況時和在(2)「藉由之後所被產生之寫入/修整要求而被作了指定的LBA範圍,係包含藉由已發行且未完成之寫入指令而被作了指定的LBA範圍之一部分」之情況時,而使用有(2-a)對於已發行且未完成之寫入指令進行修正之方法」的動作之處理。CPU21,當藉由應用程式223或者是OS221而被產生有新的寫入要求的情況時,係實行寫入要求控制處理。
首先,CPU21,係判定在鎖死資料清單245中,是否存在有代表「對於至少一部分為與藉由現在之寫入要求所被指定了的LBA範圍有所重複之LBA範圍作了指定的寫入指令(重複寫入指令)」之登錄(步驟S101)。具體而言,CPU21,係判定「基於在鎖死資料清單245之各登錄中所包含的SQ登錄資訊而得到之LBA範圍」與「藉由現在之寫入要求所被指定了的LBA範圍」是否存在有重複。
當在鎖死資料清單245中並不存在有重複寫入指令之登錄的情況時(步驟S101,no),CPU21,係實行基於現在之寫入要求所致的寫入要求處理(步驟S102),並使寫入要求控制處理結束。寫入要求處理,係為用以使主機2對於記憶體系統3而要求使用者資料之寫入的處理。CPU21,在寫入要求處理中,係發行用以將所被指定了的使用者資料寫入至藉由現在之寫入要求所被指定了的LBA範圍中之寫入指令。又,由於在鎖死資料清單245中係並不存在有重複寫入指令之登錄,因此,CPU21,係並不進行用以對於藉由鎖死資料清單245所被展示的寫入指令作中止或者是修正之處理。關於寫入要求處理的具體性之處理程序,係參考圖39之流程圖而於後再作敘述。
當在鎖死資料清單245中係存在有重複寫入指令之登錄的情況時(步驟S101,yes),CPU21,係判定「是否針對所有的重複寫入指令而已接收了第1次的完成通知」(步驟S103)。CPU21,係根據「各登錄中之完成通知狀態係代表已收訊了第1次的完成通知」或者是「起因於第1次的完成通知乃是代表異常結束,而導致登錄被作了刪除」一事,來進行判定。當針對至少1個的重複寫入指令而尚未收訊第1次的完成通知的情況時(步驟S103,no),由CPU21所致之處理係回到步驟S103處。亦即是,CPU21,係進行待機,直到收訊針對所有的重複寫入指令之第1次的完成通知為止。
當已收訊針對所有的重複寫入指令之第1次的完成通知的情況時(步驟S103,yes),CPU21,係確認至少1個的完成通知乃身為正常回應,亦即是確認在鎖死資料清單245上是否殘留有重複寫入指令之登錄(步驟S104)。第1次的完成通知乃身為異常回應之對應於重複寫入指令之登錄,係已被從鎖死資料清單245而刪除。因此,CPU21,係在針對所有的重複寫入指令而收訊了第1次的完成通知之後,判定在鎖死資料清單245中是否仍殘留有重複寫入指令之登錄。
當並未殘留有重複寫入指令之登錄的情況時(步驟S104,no)、亦即是當起因於在記憶體系統3處之針對重複寫入指令之處理而發生有異常,在鎖死資料清單245中係並不存在有重複寫入指令之登錄的情況時,CPU21,係進行基於現在之寫入要求所致的寫入要求處理(步驟S102),並使寫入要求控制處理結束。CPU21,係並不進行用以對於藉由鎖死資料清單245所被展示的寫入指令作中止或者是修正之處理。
當殘留有重複寫入指令之登錄的情況時(步驟S104,yes),CPU21,係實行基於現在之寫入要求所致的寫入要求處理(步驟S105)。在鎖死資料清單245處,較之前之登錄之寫入指令所指定了的LBA範圍,係會有起因於較之後的登錄之寫入指令或者是修整指令而導致被作修正或者是無效化的可能性。另一方面,較之後之登錄之寫入指令所指定了的LBA範圍,係並不會有起因於較之前的登錄之寫入指令或者是修整指令而導致被作修正或者是無效化的可能性。故而,在本實施形態中,序列編號係並非為必須。另外,當並不進行「藉由較之前之寫入指令所指定了的LBA範圍」與「較之後的寫入指令或者是修整指令所指定之LBA範圍」之間之重複排除的情況時,序列編號係為必要。以下,係將在步驟S105之寫入要求處理處所被作了發行的寫入指令,稱作對象寫入指令。
CPU21,係判定「是否收訊了針對對象寫入指令之第1次的完成通知」(步驟S106)。當並未收訊針對對象寫入指令之第1次的完成通知的情況時(步驟S106,no),由CPU21所致之處理係回到步驟S106處。亦即是,CPU21,係進行待機,直到收訊針對對象寫入指令之第1次的完成通知為止。
當收訊了針對對象寫入指令之第1次的完成通知的情況時(步驟S106,yes),CPU21,係判定針對對象寫入指令之第1次的完成通知是否為正常回應(步驟S107)。當「針對對象寫入指令之第1次的完成通知係為異常回應」的情況時(步驟S107,no),CPU21係將寫入要求控制處理結束。亦即是,由於在記憶體系統3處之針對對象寫入指令之處理中係發生有異常,因此,CPU21,係並不進行用以對於藉由鎖死資料清單245所被展示的重複寫入指令作中止或者是修正之處理。
當針對對象寫入指令之第1次的完成通知係為正常回應的情況時(步驟S107,yes),CPU21,係判定藉由對象寫入指令(亦即是,現在的寫入要求)所被作了指定的LBA範圍是否包含有全部的「藉由1個的重複寫入指令所被作了指定的LBA範圍」(步驟S108)。當藉由對象寫入指令所被作了指定的LBA範圍係包含有全部的「藉由1個的重複寫入指令所被作了指定的LBA範圍」的情況時(步驟S108,yes),CPU21,係發行針對重複寫入指令之中斷指令(步驟S109)。中斷指令,係包含有能夠特定出進行中止之對象的重複寫入指令之資訊(例如,指令ID)。接著,CPU21,係將被發行了的中斷指令(亦即是,代表中斷指令之SQ登錄資訊)儲存在提交佇列242中(步驟S110)。藉由此,CPU21,係能夠對於記憶體系統3而要求將「因應於重複寫入指令而被進行的使用者資料之寫入」中止。
當藉由對象寫入指令所被作了指定的LBA範圍係僅包含有一部分的「藉由1個的重複寫入指令所被作了指定的LBA範圍」的情況時(步驟S108,no),CPU21,係發行針對重複寫入指令之修正指令(步驟S111)。修正指令,係包含有能夠特定出進行修正之對象的重複寫入指令之資訊、和代表「在藉由該重複寫入指令而被作了指定的LBA範圍之中之應使寫入被作取消的LBA範圍」之資訊。接著,CPU21,係將被發行了的修正指令(亦即是,代表修正指令之SQ登錄資訊)儲存在提交佇列242中(步驟S112)。藉由此,CPU21,係能夠對於記憶體系統3而要求將「因應於重複寫入指令而被進行的使用者資料之寫入之一部分」取消。
接著,CPU21,係使用鎖死資料清單245,而判定是否存在有其他的重複寫入指令(步驟S113)。當存在有其他的重複寫入指令的情況時(步驟S113,yes),由CPU21所致之處理係回到步驟S108處。藉由此,針對該其他的重複寫入指令,係被發行有中斷指令與修正指令之其中一者。
當並不存在有其他的重複寫入指令的情況時(步驟S113,no),CPU21係將寫入要求控制處理結束。
藉由以上之寫入要求控制處理,CPU21,當藉由應用程式223或者是OS221而被產生有新的寫入要求的情況時,若是存在有對於「與藉由新的寫入要求所被作了指定的LBA範圍有所重複之LBA範圍」作了指定的未完成之寫入指令(重複寫入指令),則係能夠對於記憶體系統3而要求該重複寫入指令之中止或者是修正。
具體而言,CPU21,係使用鎖死資料清單245,而判斷重複寫入指令之有無。當存在有重複寫入指令的情況時,CPU21,係使用鎖死資料清單245,來判斷「藉由新的寫入要求所被指定了的LBA範圍」是包含有「藉由重複寫入指令所被指定了的LBA範圍」之全部還是僅包含有一部分。若是「藉由新的寫入要求所被指定了的LBA範圍」係包含有「藉由重複寫入指令所被指定了的LBA範圍」之全部,則CPU21,係對於記憶體系統3而要求該重複寫入指令之中止。若是「藉由新的寫入要求所被指定了的LBA範圍」係僅包含有「藉由重複寫入指令所被指定了的LBA範圍」之一部分,則CPU21,係對於記憶體系統3而要求該重複寫入指令之修正。
藉由此,CPU21,當存在有LBA範圍為與新的寫入要求有所重複之重複寫入指令的情況時,係能夠對於記憶體系統3,而要求與該重複寫入指令相對應的寫入之中止,或者是要求寫入之一部分的取消。
(在主機2處之用以進行對於記憶體系統3之使用者資料寫入之處理)
圖39,係為對於藉由主機2之CPU21所被實行的寫入要求處理之程序之例作展示之流程圖。寫入要求處理,係為用以使主機2對於記憶體系統3而要求使用者資料之寫入的處理。寫入要求處理,係相當於參照圖38而於前所述的寫入要求控制處理之步驟S102以及步驟S105之各者。
首先,CPU21,係根據寫入要求,而取得應被寫入至NAND型快閃記憶體5中之使用者資料所被作儲存的資料緩衝241中之記憶區域之位置(步驟S201)。另外,當應被寫入至NAND型快閃記憶體5中的使用者資料係被儲存於RAM22中的情況時,CPU21,係將該使用者資料複製至資料緩衝241中。之後,CPU21,係取得複製目標之記憶區域之位置。接著,CPU21,係將被儲存在資料緩衝241中的使用者資料設為鎖死以及禁止寫入(步驟S202)。更詳細而言,CPU21,係使用所正在實行的OS221之功能,而將身為正被儲存有使用者資料之記憶區域(例如,頁面)並且可能會被驅動器222所使用的記憶區域之狀態,設為鎖死以及禁止寫入。藉由此,來防止正被儲存有使用者資料之記憶區域被非預期性地釋放或者是被作覆寫的情形。亦即是,CPU21,在藉由收訊了第1次的完成通知一事而對於應用程式223或者是OS221通知了寫入要求之完成之後,當成為了可能會將正被儲存有使用者資料之記憶區域作覆寫的情況時,係能夠將此事檢測出來。
CPU21,係發行用以將被儲存在資料緩衝241中之使用者資料寫入至NAND型快閃記憶體5中的寫入指令(以下,稱作第1寫入指令)(步驟S203)。更具體而言,CPU21,係將第1寫入指令之SQ登錄資訊儲存在提交佇列242中,並將SQ Tail指標之值,寫入至記憶體系統3之SQ Tail doorbell暫存器中。
接著,CPU21,係將對應於第1寫入指令之登錄追加至鎖死資料清單245中(步驟S204)。所被追加之登錄,例如,係包含有對應於第1寫入指令之SQ登錄資訊、和資料區域管理資訊。對應於第1寫入指令之SQ登錄資訊,係為代表第1寫入指令之資訊。更具體而言,對應於第1寫入指令之SQ登錄資訊,係為為了使記憶體系統3實行與第1寫入指令相對應之處理而被儲存在提交佇列242中之資訊。又,對應於第1寫入指令之資料區域管理資訊,係為能夠特定出「對應於第1寫入指令之使用者資料所被儲存之資料緩衝241內之記憶區域」的資訊。雖然在SQ登錄資訊中亦係存在有用以特定出資料緩衝241內之記憶區域之資訊,但是,此資訊由於係使用物理位址而被作記述,因此,較理想,資料區域管理資訊係藉由邏輯位址來作記述。
另外,CPU21,係亦可在「將第1寫入指令儲存在提交佇列242中」的步驟S203之程序之前,實行將對應於第1寫入指令之登錄追加至鎖死資料清單245中之步驟S204之程序。又,CPU21,係亦可將步驟S203之程序與步驟S204之程序平行地實行。
藉由以上之寫入要求處理,CPU21,係能夠對於記憶體系統3而要求被儲存於資料緩衝241中之使用者資料之寫入。又,CPU21,係能夠使用鎖死資料清單245,來針對關連於對於記憶體系統3所要求了的寫入之資訊(亦即是,關連於所發行了的寫入指令之資訊)作管理。
(在記憶體系統3處之用以進行使用者資料寫入之處理)
圖40,係為對於藉由記憶體系統3之CPU12所被實行的寫入控制處理之程序之例作展示之流程圖。寫入控制處理,係為用以受理藉由主機2所被作了發行的寫入指令並對於與已受理了的寫入指令相對應之使用者資料之寫入作控制的處理。CPU12,係因應於從提交佇列242而取得了藉由主機2所發行了的寫入指令一事,而實行寫入控制處理。於此,係將從提交佇列242所取得了的寫入指令,稱作第1對象寫入指令。
首先,CPU12,係基於第1對象寫入指令而對於寫入管理表63作更新(步驟S301)。具體而言,CPU12,係從第1對象寫入指令,而例如取得指令ID、LBA、資料長度以及資料指標。CPU12,係將展示有「所取得的指令ID、LBA、資料長度以及資料指標」之登錄,追加至寫入管理表63中。
接著,CPU12,係將針對第1對象寫入指令之第1次的完成通知對於主機2作通知(步驟S302)。更具體而言,CPU12,係將第1次的完成通知儲存於完成佇列243中,並對於主機2而通知插斷。另外,CPU12,係亦可在將複數之完成通知儲存於完成佇列243中之後,再對於主機2而將插斷作1次的通知。針對第1對象寫入指令之第1次的完成通知,係包含第1對象寫入指令之指令ID。
接著,CPU12,係判定是否能夠開始使用者資料之寫入(步驟S303)。更具體而言,CPU12,例如,當「回送了第1次的完成通知之1個以上的寫入指令」之「尚未寫入之使用者資料之總量」之中的將「會對應於修正指令而被作取消之量」作了去除後的總量為到達了寫入單位的情況時,係開始使用者資料之寫入。CPU12,係使用寫入管理表63以及修正指令資料64,來算出將對應於修正指令之取消量作了去除後的未寫入之使用者資料之總量。亦即是,CPU12,係算出從「被儲存在主機2之資料緩衝241中的未寫入之使用者資料之總量」而減去了「與因應於修正指令而使寫入被作了取消的LBA範圍相對應之使用者資料之量」之後的資料量。
另外,當為了消除起因於較之前之寫入指令與第1對象指令所產生的重複寫入,而預定要接續於該第1對象寫入指令之後地而送訊針對較之前之寫入指令之中斷指令或者是修正指令的情況時,係亦可對於該第1對象寫入指令而附加代表送訊預定之旗標。當中斷指令或者是修正指令會被作複數之送訊的情況時,係亦可在該些之中斷指令或者是修正指令處,更進而附加代表係會有送訊中斷指令或者是修正指令之預定的旗標。藉由此,CPU12,係就算是因應於受理了第1對象寫入指令一事而導致未寫入之使用者資料之總量到達了寫入單位,也能夠並不開始對於NAND型快閃記憶體5之寫入地而等待後續之中斷指令或者是修正指令。藉由此,係能夠避免中斷指令或者是修正指令之失敗。進而,當起因於中斷指令或者是修正指令之實行而造成未寫入之使用者資料之總量並未到達寫入單位的情況時,係能夠防止未寫入之使用者資料之寫入被開始的情形。
當去除了取消量之後的未寫入之使用者資料之總量並未到達寫入單位的情況時(步驟S303,no),CPU12係將寫入控制處理結束。
當去除了取消量之後的未寫入之使用者資料之總量係到達了寫入單位的情況時(步驟S303,yes),CPU12,係將寫入單位之使用者資料從主機2之資料緩衝241而傳輸至記憶體系統3之NAND型快閃記憶體5處(步驟S304)。CPU12,係將被作了傳輸的使用者資料,寫入至NAND型快閃記憶體5處(步驟S305)。接著,CPU12,係以會展現有使用者資料所被作了寫入的物理位址與LBA之間之對應的方式,來對於邏輯物理位址轉換表62進行更新(步驟S306)。
接著,CPU12,係判定是否存在有「所對應之使用者資料係成為了能夠從NAND型快閃記憶體5而讀出」的寫入指令(步驟S307)。當並不存在有「所對應之使用者資料係成為了能夠讀出」之寫入指令的情況時(步驟S307,no),由CPU12所致之處理係結束。亦即是,由於還無法對於主機2而通知代表「與寫入指令相對應之使用者資料之寫入為完成」一事之第2次的完成通知,因此,由CPU12所致之處理係結束。
當存在有1個以上的「所對應之使用者資料係在步驟S305處而被作寫入,並成為了能夠讀出」之寫入指令、亦即是已完成的寫入指令的情況時(步驟S307,yes),CPU12,係將針對此1個以上的寫入指令之1個以上的第2次的完成通知,對於主機2作通知(步驟S308)。以下,係將「所對應之使用者資料係完成了寫入」的寫入指令,稱作第2對象寫入指令。針對第2對象寫入指令之第2次的完成通知,係包含第2對象寫入指令之指令ID。之後,CPU12,係對於寫入管理表63作更新(步驟S309)。具體而言,CPU12,係從寫入管理表63,而將與第2對象寫入指令相對應之登錄刪除。另外,當存在有被與「對應於第2對象寫入指令之登錄」相互附加有關連性之修正指令資料64的情況時,CPU12,係亦將該修正指令資料64刪除。之後,CPU12,係以追加第2對象寫入指令之指令ID的方式,來對於指令日誌51作更新(步驟S310),並結束寫入控制處理。
藉由以上之寫入控制處理,CPU12,係能夠對於從主機2所受理了的寫入指令作管理,並對於與已受理了的寫入指令相對應之使用者資料之寫入作控制。具體而言,CPU12,當從主機2而受理了寫入指令的情況時,係基於寫入指令來將寫入管理表63作更新,並將第1次的完成通知對於主機2作回送。又,CPU12,當在資料緩衝241中被儲存有寫入單位之使用者資料(將對應於修正指令之取消量作了去除後之使用者資料)的情況時,係將該寫入單位之使用者資料寫入至NAND型快閃記憶體5中。之後,CPU12,係對於主機2而回送針對「與寫入為完成的使用者資料相對應之寫入指令」之第2次的完成通知。
故而,CPU12,係能夠藉由對於主機2而回送第1次的完成通知與第2次的完成通知,而將寫入指令之處理狀態對於主機2作通知。又,CPU12,係能夠藉由由延遲寫入完備(Delayed Write Completion)所致之寫入,來對於NAND型快閃記憶體5之記憶區域有效率地作利用。
另外,CPU12,係亦可並不僅是在「將對應於修正指令之取消量作了去除後的未寫入之使用者資料之總量為到達了寫入單位」的情況時(步驟S303,yes),而亦在「從受理寫入指令起所經過之時間為超過了臨限值」的情況時,將與已受理的寫入指令相對應之使用者資料,附加有填補(padding)地而寫入至NAND型快閃記憶體5中。具體而言,CPU12,當在從受理寫入指令起所經過之時間為超過了臨限值的情況時,係將與已受理的寫入指令相對應並且將對應於修正指令之取消量作了去除後之使用者資料,從主機2之資料緩衝241而傳輸至NAND型快閃記憶體5處。之後,CPU12,係將所被作了傳輸的使用者資料,附加有填補(padding)地而寫入至NAND型快閃記憶體5中。亦即是,CPU12,在從受理寫入指令起所經過之時間為超過了臨限值的情況時,係進行圖40之寫入控制處理之步驟S304以後的處理程序。於此情況,在步驟S304中之「寫入單位之使用者資料」,係被置換為「對於與已受理之寫入指令相對應的使用者資料而附加了填補用之資料後的資料」。藉由此,CPU12,係能夠在被主機2所期待的時間內,而通知針對寫入指令之第2次的完成通知。
進而,CPU12,當從對於NAND型快閃記憶體5之區塊實行刪除動作起所經過的時間為超過了臨限值的情況時,係亦可與上述相同的,而將使用者資料附加有填補(padding)地而一直寫入至區塊之最後端為止。藉由此,係能夠保持被寫入至區塊中之使用者資料的品質。
進而,CPU12,在受理了特殊清除指令的情況時,係亦可將與已受理的所有的寫入指令相對應之使用者資料,附加有填補(padding)地而寫入至NAND型快閃記憶體5中,並使此些之寫入指令完成。亦即是,CPU12,在受理了特殊清除指令的情況時,係亦可進行圖40之寫入控制處理之步驟S304以後的處理程序。於此情況,在步驟S304中之「寫入單位之使用者資料」,係被置換為「對於與已受理之寫入指令相對應的使用者資料而附加了填補用之資料後的資料」。
(用以將在記憶體系統3處之重複寫入指令中止之處理)
圖41,係為對於藉由記憶體系統3之CPU12所被實行的中斷控制處理之程序之例作展示之流程圖。中斷控制處理,係為基於從主機2所受理了的中斷指令而進行之處理。CPU12,係因應於從提交佇列242而取得了藉由主機2所發行了的中斷指令一事,而實行中斷控制處理。於此,係針對由中斷指令所致之中止之對象係為「重複寫入指令」的情況作例示。
首先,CPU12,係取得藉由中斷指令而被指定了的指令ID(步驟S401)。所被取得了的指令ID,係為應因應於中斷指令而被作中止的重複寫入指令之指令ID。CPU12,係判定在寫入管理表63中是否存在「包含有所被取得了的指令ID之登錄」(步驟S402)。
當在寫入管理表63中係並不存在「包含有所被取得了的指令ID之登錄」的情況時(步驟S402,no),CPU12,係由於並不存在有重複寫入指令,因此,係對於主機2而通知代表「中斷失敗」之完成通知(步驟S403),並將中斷控制處理結束。
當在寫入管理表63中係存在「包含有所被取得了的指令ID之登錄」(步驟S402,yes),CPU12,係判定與重複寫入指令相對應的寫入處理是否已被開始(步驟S404)。CPU12,例如,當係基於包含有中止對象之重複寫入指令之1個以上的寫入指令而已正在進行參照圖40而於前所述之寫入控制處理之步驟S305的處理程序或者是已完成該處理程序的情況時,係判斷為對應於該重複寫入指令之寫入處理已被開始。換言之,CPU12,係判斷對於NAND型快閃記憶體5之寫入是否為已開始或者是已完成。
當對應於重複寫入指令之寫入處理已被開始的情況時(步驟S404,yes),CPU12,係由於並無法將對應於重複寫入指令之寫入處理中止,因此,係對於主機2而通知代表「中斷失敗」之完成通知(步驟S403),並將中斷控制處理結束。
當對應於重複寫入指令之寫入處理尚未被開始的情況時(步驟S404,no),CPU12,係將對應於重複寫入指令之登錄(亦即是,包含有所被取得了的指令ID之登錄)從寫入管理表63而刪除(步驟S405)。CPU12,當與重複寫入指令相對應之使用者資料的從資料緩衝241而來之傳輸(圖40之步驟S304)已被開始的情況時,係將此傳輸中止。就算是在此傳輸已結束的情況時,也同樣的,CPU12,係並不進行對於NAND型快閃記憶體5之寫入(圖40之步驟S305)。藉由此,CPU12,係能夠將與重複寫入指令相對應的使用者資料之寫入作中止。之後,CPU12,係將代表中斷成功之完成通知對於主機2作通知(步驟S406)。進而,CPU12,係對於主機2而通知代表「重複寫入指令為被作了中斷」一事之完成通知(步驟S407),並將中斷控制處理結束。
另外,CPU12,在從「發現到包含有所被取得了的指令ID之寫入管理表63之登錄」(步驟S402)起直到「將該登錄作刪除」(步驟S405)為止的期間中,係並不開始與重複寫入指令相對應之使用者資料的對於NAND型快閃記憶體5之寫入處理。亦即是,當在步驟S304與步驟S305之間而受理了中斷指令的情況時,CPU12,係將寫入控制處理停止,直到中斷指令完成為止。由於也會有「去除了取消量之後的未寫入之使用者資料之總量仍然有到達寫入單位」的情況,因此,CPU12,在中斷指令之完成後,係回到步驟S303處並再度開始寫入控制處理。另外,當使用有前述之「代表係會有接續於寫入指令而送訊中斷指令或者是修正指令之預定」一事之旗標的情況時,於步驟S303之判定前,中斷處理係已完成。故而,於此情況,在「去除了取消量之後的未寫入之使用者資料之總量」到達了寫入單位(步驟S303,yes)之後,使用者資料之總量係不會有發生變化的情形,CPU12係並不需要對於使用者資料之總量再度作計算。
又,在「經過了超過臨限值之時間」之後的情況時之寫入處理或者是在「當正在實施由清除指令所致之處理時而收訊針對重複寫入指令之中斷指令,並在步驟S305之前而將處理作了停止」的情況時,CPU12係將作了停止的處理從最初開始而重新進行。
藉由以上之中斷控制處理,CPU12,在從主機2而受理了中斷指令的情況時,若是與重複寫入指令相對應之寫入處理尚未被開始,則係能夠將對應於該重複寫入指令之使用者資料之寫入中止。
(用以將在記憶體系統3處之重複寫入指令作修正之處理)
圖42,係為對於藉由記憶體系統3之CPU12所被實行的修正控制處理之程序之例作展示之流程圖。修正控制處理,係為基於從主機2所受理了的修正指令而進行之處理。CPU12,係因應於從提交佇列242而取得了藉由主機2所發行了的修正指令一事,而實行修正控制處理。
首先,CPU12,係取得藉由修正指令而被指定了的指令ID(步驟S501)。所被取得了的指令ID,係為應因應於修正指令而被作修正的寫入指令(亦即是,重複寫入指令)之指令ID。CPU12,係判定在寫入管理表63中是否存在「包含有所被取得了的指令ID之登錄」(步驟S502)。係將包含有所被取得了的指令ID之登錄,亦稱作修正對象登錄。
當在寫入管理表63中係並不存在修正對象登錄的情況時(步驟S502,no),CPU12,係由於並不存在有重複寫入指令,因此,係對於主機2而通知代表「修正失敗」之完成通知(步驟S503),並將修正控制處理結束。
當在寫入管理表63中係存在有修正對象登錄的情況時(步驟S502,yes),CPU12,係判定與重複寫入指令相對應的寫入處理是否已被開始(步驟S504)。CPU12,例如,當係基於包含有修正對象之重複寫入指令之1個以上的寫入指令而已正在進行參照圖40而於前所述之寫入控制處理之步驟S305的處理程序或者是已完成該處理程序的情況時,係判斷為對應於該重複寫入指令之寫入處理已被開始。換言之,CPU12,係判斷對於NAND型快閃記憶體5之寫入是否為已開始或者是已完成。
當對應於重複寫入指令之寫入處理已被開始的情況時(步驟S504,yes),CPU12,係由於並無法針對對應於重複寫入指令之寫入處理進行修正,因此,係對於主機2而通知代表「修正失敗」之完成通知(步驟S503),並將修正控制處理結束。
當與重複寫入指令相對應的寫入處理尚未被開始的情況時(步驟S504,no),CPU12,係從修正對象登錄而取得LBA範圍(步驟S505)。具體而言,CPU12,係基於修正對象登錄所展示的LBA與資料長度,來取得LBA範圍(第1LBA範圍)。之後,CPU12,係判定藉由修正指令所被作了指定的LBA範圍(第2LBA範圍)是否為落於第1LBA範圍內(步驟S506)。
當第2LBA範圍之至少一部分為落於第1LBA範圍外的情況時(步驟S506,no),CPU12,係由於所被作了指定的第2LBA範圍並非為適當,因此,係對於主機2而通知代表「修正失敗」之完成通知(步驟S503),並將修正控制處理結束。
當第2LBA範圍係落於第1LBA範圍內的情況時(步驟S506,yes),CPU12,係使用第2LBA範圍來對於修正對象登錄進行更新(步驟S507)。具體而言,CPU12,係產生展示第2LBA範圍之修正指令資料64。之後,CPU12,係將對於所被產生了的修正指令資料64之指標,登錄在修正對象登錄之修正指令資料之指標欄位中。藉由此,CPU12,係能夠使用修正對象登錄與修正指令資料64,來對於第1LBA範圍之中之應使寫入被作取消的第2LBA範圍作管理。之後,CPU12,係將代表修正成功之完成通知對於主機2作通知(步驟S508),並將修正控制處理結束。
藉由以上之修正控制處理,CPU12,係能夠因應於從主機2所受理了的修正指令,來以會使對於藉由重複寫入指令所被作了指定的第1LBA範圍之中之第2LBA範圍之寫入被作取消的方式,來將寫入管理表63作更新。亦即是,CPU12,係能夠因應於修正指令,來對於藉由重複寫入指令所被作了指定的第1LBA範圍進行修正。CPU12,係基於被作了更新後的寫入管理表63,而並不進行對於藉由重複寫入指令所被作了指定的第1LBA範圍之中之第2LBA範圍之使用者資料的寫入。
(在主機2處之基於從記憶體系統3而來之針對寫入指令之回應所致的處理)
圖43,係為對於藉由主機2之CPU21所被實行的寫入回應收訊處理之程序之例作展示之流程圖。寫入回應收訊處理,係為基於從記憶體系統3所收訊了的針對寫入指令之回應(完成通知)而進行之處理。CPU21,係因應於從完成佇列243而取得針對寫入指令之完成通知一事,而實行寫入回應收訊處理。
首先,CPU21,係在鎖死資料清單245中,特定出與所取得的完成通知內之指令ID相對應之登錄(步驟S601)。CPU21,係使用所被特定出的登錄,而判定所取得了的完成通知是否為第1次的完成通知(步驟S602)。具體而言,CPU21,例如,當作為所被特定出的登錄內之完成通知狀態而並未被設定有任何之值的情況時,係判斷所取得了的完成通知為第1次的完成通知。又,CPU21,當作為所被特定出的登錄內之完成通知狀態而被設定有代表係已接收了第1次的完成通知之值的情況時,係判斷所取得了的完成通知為第2次的完成通知。
當所取得了的完成通知係身為第1次之完成通知的情況時(步驟S602,yes),CPU21,係判定該完成通知是否身為正常回應(步驟S603)。
當所取得了的完成通知係身為正常回應的情況時(步驟S603,yes),CPU21,係在被使用於針對完成通知之序列編號之分配中的變數Cseq處加算上“1”(亦即是進行增數)(步驟S604)。之後,CPU21,係使用變數Cseq,來將所被特定出的登錄作更新(步驟S605)。具體而言,CPU21,係作為所被特定出的登錄內之完成通知順序,而追加(設定)藉由變數Cseq所展示的序列編號。藉由此,對於所取得了的完成通知,係分配有藉由變數Cseq所展示的序列編號。又,CPU21,係作為所被特定出的登錄內之完成通知狀態,而追加代表「係已接收了第1次的完成通知」一事之值。之後,CPU21,係針對藉由應用程式223或者是OS221所產生的寫入要求,而回送「寫入為完成」之回應(步驟S606),並將寫入回應收訊處理結束。
另外,係會有使用「藉由因應於由應用程式223或者是OS221所產生了的寫入要求,而將寫入指令對記憶體系統3作2次的送訊,來從記憶體系統3而接收針對第1次的寫入指令之第1次的完成通知和針對第2次的寫入指令之第2次的完成通知」之方式的情況。於此情況,CPU21,例如,係在將在步驟S605處所特定出來的登錄作了更新之後,將第2次的寫入指令儲存在提交佇列242中(步驟S607),並將所特定出來的登錄之指令ID覆寫為第2次的寫入指令之指令ID,而將寫入回應收訊處理結束。
當所取得了的完成通知(亦即是,第1次的完成通知)係身為異常回應的情況時(步驟S603,no),CPU21,係將被與完成通知內之指令ID相互附加有關連性之資料緩衝241內的使用者資料之鎖死解除(步驟S608)。應用程式223或者是OS221,係在使資料緩衝241之鎖死被作了解除之後,將使用者資料刪除。CPU21,例如,係能夠使用所特定出的登錄內之資料管理區域資訊,來特定出應解除鎖死之資料緩衝241內的使用者資料。在使用者資料之鎖死被作了解除的情況時,該使用者資料係能夠被刪除。亦即是,該使用者資料所被儲存之資料緩衝241內之記憶區域(亦即是,NVRAM24內之記憶區域)係被釋放。CPU21,係將所被特定出的登錄從鎖死資料清單245而刪除(步驟S609)。另外,CPU21,當針對此登錄而作成有PRP登錄之清單和SGL之第2個之後之段的情況時,係亦將該些所被作儲存的指標清單244之區域釋放。之後,CPU21,係對於應用程式223或者是OS221,而通知「與所特定出之登錄的指令相對應之處理為失敗」一事(步驟S610),並將寫入回應收訊處理結束。
當所取得了的完成通知係身為第2次之完成通知的情況時(步驟S602,no),CPU21,係判定該完成通知是否身為正常回應(步驟S611)。
當所取得了的完成通知係身為正常回應的情況時(步驟S611,yes),CPU21,係將被與完成通知內之指令ID相互附加有關連性之資料緩衝241內的使用者資料之鎖死解除,並且將禁止寫入解除(步驟S612)。之後,CPU21,係將所被特定出的登錄從鎖死資料清單245而刪除(步驟S613),並結束寫入回應收訊處理。另外,CPU21,當針對此登錄而作成有PRP登錄之清單和SGL之第2個之後之段的情況時,係亦將該些所被作儲存的指標清單244之區域釋放。又,CPU21,當針對此登錄而作成有修正指令資料246的情況時,係亦將該修正指令資料246所被作儲存的區域釋放。
當所取得了的完成通知(亦即是,第2次之完成通知)係身為異常回應的情況時(步驟S611,no),CPU21,係視為記憶體系統3為發生了故障,並將對於記憶體系統3所進行之處理中止(步驟S614),並對於OS221而通知「發生異常」,並且將寫入回應收訊處理結束。於此情況,係進行有作為資訊處理系統1之異常處理。之後,IO受理部210,對於像是寫入要求或者是修整要求等之會對於使用者資料作變更的從應用程式223或者是OS221而來之要求,係全部作拒絕。
藉由以上之寫入回應收訊處理,CPU21,係能夠因應於「所收訊了的完成通知係為針對所對應的寫入指令之第1次的完成通知還是第2次的完成通知」以及「所收訊了的完成通知是身為正常回應還是異常回應」一事,來進行相異之處理。亦即是,當所收訊了的完成通知係為第1次的完成通知並且係身為正常回應的情況時,CPU21,係在所對應的鎖死資料清單245內之登錄中,追加被分配給該完成通知之序列編號Cseq、和代表「已接收了第1次的完成通知」一事之資訊,並針對寫入要求而進行「完成」之回應。當所收訊了的完成通知係為第1次的完成通知並且係身為異常回應的情況時,CPU21,係將所對應的使用者資料和所對應的鎖死資料清單245內之登錄,從NVRAM24而刪除,並針對寫入要求而進行「失敗」之回應。當所收訊了的完成通知係為第2次的完成通知並且係身為正常回應的情況時,CPU21,係將所對應的使用者資料(亦即是,完成了寫入的使用者資料)和所對應的鎖死資料清單245內之登錄,從NVRAM24而刪除。又,當所收訊了的完成通知係為第2次之完成通知並且係身為異常回應的情況時,CPU21,係視為記憶體系統3之故障,並將對於記憶體系統3所進行之處理中止。
(在主機2處之基於從記憶體系統3而來之針對中斷指令之回應所致的處理)
圖44,係為對於藉由主機2之CPU21所被實行的中斷回應收訊處理之程序之例作展示之流程圖。中斷回應收訊處理,係為基於從記憶體系統3所收訊了的針對中斷指令之回應(完成通知)而進行之處理。CPU21,係因應於從完成佇列243而取得針對中斷指令之完成通知一事,而實行中斷回應收訊處理。於此,係針對與所取得了的完成通知相對應之中斷指令乃身為「要求重複寫入指令之中止」之中斷指令的情況作例示。
首先,CPU21,係判定所取得了的完成通知是否身為正常回應(步驟S701)。亦即是,CPU21,係基於所取得了的完成通知,而判定重複寫入指令之中止是否為成功。
當所取得了的完成通知係身為正常回應的情況時(步驟S701,yes),CPU21,係在鎖死資料清單245中,特定出與重複寫入指令相對應之登錄(步驟S702)。CPU21,係使用所特定出的登錄,來解除被與重複寫入指令相互附加有關連性之資料緩衝241內的使用者資料之鎖死(步驟S703)。CPU21,例如,係能夠使用所特定出的登錄內之資料區域管理資訊,來特定出應解除鎖死之資料緩衝241內的使用者資料。
之後,CPU21,係將所被特定出的登錄從鎖死資料清單245而刪除(步驟S704),並結束中斷回應收訊處理。另外,CPU21,當針對此登錄而作成有PRP登錄之清單和SGL之第2個之後之段的情況時,係亦將該些所被作儲存的指標清單244之區域釋放。又,CPU21,當針對此登錄而作成有修正指令資料246的情況時,係亦將該修正指令資料246所被作儲存的區域釋放。
當所取得了的完成通知係身為異常回應的情況時(步驟S701,no),CPU21係將中斷回應收訊處理結束。亦即是,CPU21,係由於重複寫入指令之中止為失敗,因此,係並不將被與重複寫入指令相互附加有關連性之使用者資料之鎖死解除並且也並不將與重複寫入指令相對應之登錄從鎖死資料清單245而刪除地,而結束中斷回應收訊處理。
藉由以上之中斷回應收訊處理,CPU21,當重複寫入指令之中止為成功的情況時,係能夠將被與重複寫入指令相互附加有關連性之使用者資料之鎖死解除並且將與重複寫入指令相對應之登錄從鎖死資料清單245而刪除。
(在主機2處之基於從記憶體系統3而來之針對修正指令之回應所致的處理)
圖45,係為對於藉由主機2之CPU21所被實行的修正回應收訊處理之程序之例作展示之流程圖。修正回應收訊處理,係為基於從記憶體系統3所收訊了的針對修正指令之回應(完成通知)而進行之處理。CPU21,係因應於從完成佇列243而取得針對修正指令之完成通知一事,而實行修正回應收訊處理。於此,係針對與所取得了的完成通知相對應之修正指令乃身為「要求進行重複寫入指令之修正」之修正指令並且係使用有PRP的情況,來作例示。
首先,CPU21,係判定所取得了的完成通知是否身為正常回應(步驟S801)。亦即是,CPU21,係基於所取得了的完成通知,而判定重複寫入指令之修正是否為成功。
當所取得了的完成通知係身為正常回應的情況時(步驟S801,yes),CPU21,係在鎖死資料清單245中,特定出與重複寫入指令相對應之登錄(步驟S802)。之後,CPU12,係基於藉由修正指令所被作了指定的LBA範圍(第2LBA範圍),而判定包含有藉由重複寫入指令所被作了指定的LBA範圍(第1LBA範圍)之開頭的部分是否被作了取消(步驟S803)。
當包含有第1LBA範圍之開頭之部分被作了取消的情況時(步驟S803,yes),CPU21,係在所特定出的登錄中,將藉由SQ登錄資訊而被作展示的LBA範圍與資料指標作變更(步驟S804),並將修正回應收訊處理結束。具體而言,CPU21,係以會展示「從第1LBA範圍而將第2LBA範圍作了除外後的LBA範圍」的方式,來對於藉由SQ登錄資訊所展示的LBA範圍(例如,開頭LBA以及資料長度)作變更。之後,CPU21,係以會展示「應被寫入至從第1LBA範圍而將第2LBA範圍作了除外後的LBA範圍中之使用者資料」所被作儲存之場所的方式,來對於藉由SQ登錄資訊所展示的資料指標作變更。又,CPU21,係將起因於此除外而成為了不必要的部分之使用者資料區域之鎖死解除並釋放。
另外,在步驟S804處之資料指標之變更,係在「為了展示使用者資料所被作儲存之記憶區域,係使用有PRP,而能夠僅藉由鎖死資料清單245之登錄之修正來表現包含有開頭LBA之LBA範圍之取消」的情況時,能夠作適用。另一方面,在為了展示使用者資料所被作儲存之記憶區域而使用有SGL的情況時,若是並不對於記憶體系統3也會進行讀入之鎖死資料清單245之資料進行修正,則便無法表現包含有開頭LBA之LBA範圍之取消。於此情況,CPU21,係進行與步驟S807同等之處理。
當包含有第1LBA範圍之開頭之部分係並未被作取消的情況時(步驟S803,no),CPU21,係基於第2LBA範圍,而判定包含有第1LBA範圍之末端的部分是否被作了取消(步驟S805)。
當包含有第1LBA範圍之末端之部分被作了取消的情況時(步驟S805,yes),CPU21,係在所特定出的登錄中,將藉由SQ登錄資訊而被作展示的LBA範圍作變更(步驟S806),並將修正回應收訊處理結束。具體而言,CPU21,係以會展示「從第1LBA範圍而將第2LBA範圍作了除外後的LBA範圍」的方式,來對於藉由SQ登錄資訊所展示的LBA範圍作變更。另外,當包含有第1LBA範圍之末端之部分被作了取消的情況時,CPU21,係能夠基於變更後之LBA範圍,而對於「相當於從正被儲存於藉由SQ登錄資訊之資料指標所展示的場所處之使用者資料之開頭起直到變更後之末端為止之部分」乃身為應作寫入之使用者資料一事作管理。亦即是,應被作寫入之使用者資料之開頭,係被儲存於藉由SQ登錄資訊之資料指標所展示的場所處。因此,CPU21,係亦可並不對於藉由SQ登錄資訊所展示的資料指標作變更。又,CPU21,係將起因於此除外而成為了不必要的部分之使用者資料所被作儲存之記憶區域之鎖死解除並釋放。
當包含有寫入對象之LBA範圍之末端之部分係並未被作取消的情況時(步驟S805,no),亦即是當並不包含寫入對象之LBA範圍之開頭並且也不包含有末端之途中的部分被作了取消的情況時,CPU21,係基於第2LBA範圍,而產生修正指令資料246(步驟S807)。修正指令資料246,例如,係包含有第2LBA範圍之開頭之LBA、和第2LBA範圍之長度(例如,扇區數)。之後,CPU21,係將所產生了的修正指令資料246,登錄在所特定出的登錄之修正指令資料清單中(步驟S808),並將起因於此除外而成為了不必要的部分之使用者資料所被作儲存之記憶區域之鎖死解除,並且將修正回應收訊處理結束。
當完成通知係身為異常回應的情況時(步驟S801,no),CPU21係將修正回應收訊處理結束。亦即是,CPU21,係由於重複寫入指令之修正為失敗,因此,係並不對於與重複寫入指令相對應之登錄進行變更地,而結束修正回應收訊處理。
藉由以上之修正回應收訊處理,CPU21,當重複寫入指令之修正為成功的情況時,係能夠以會展示「使針對藉由修正指令而被作了指定的第2LBA範圍之寫入被作取消」一事的方式,來對於與重複寫入指令相對應之登錄進行變更。
(在主機2處之寫入要求控制處理之變形例)
圖46,係為對於藉由主機2之CPU21所被實行的寫入要求控制處理之程序之變形例作展示之流程圖。在變形例之寫入要求控制處理中,當在「藉由應用程式223或者是OS221而被產生的新的寫入要求」與「已發行且未完成之寫入指令」之間,係於所指定的LBA範圍中存在有重複的情況時,係對於記憶體系統3,而要求有對於將「藉由新的寫入要求所被作了指定的LBA範圍」與「藉由已發行且未完成之寫入指令(重複寫入指令)所被作了指定的LBA範圍」作了結合後之LBA範圍之寫入。之後,係對於記憶體系統3而要求重複寫入指令之中止。亦即是,此寫入要求控制處理,係為實現「當在前述之(1)「藉由之後所被產生之寫入/修整要求而被作了指定的LBA範圍,係完全包含藉由已發行且未完成之寫入指令而被作了指定的LBA範圍」之情況時之動作和在(2)「藉由之後所被產生之寫入/修整要求而被作了指定的LBA範圍,係包含藉由已發行且未完成之寫入指令而被作了指定的LBA範圍之一部分」之情況時,而使用有(2-b)將已發行且未完成之寫入指令作中止之方法」的動作之處理。
藉由寫入要求而被作了指定的LBA範圍,係包含有藉由重複寫入指令而被作了指定的LBA範圍之至少一部分。故而,藉由寫入要求而被作了指定的LBA範圍,係亦可包含有藉由重複寫入指令而被作了指定的LBA範圍之全體。
CPU21,當藉由應用程式223或者是OS221而被產生有新的寫入要求的情況時,係實行寫入要求控制處理。
圖46之步驟S901、步驟S902以及步驟S903之處理程序,係與參照圖38而於前所作了敘述的寫入要求控制處理之步驟S101、步驟S102以及步驟S103之處理程序相同。
當在鎖死資料清單245中係存在有代表「對於至少一部分為與藉由現在之寫入要求所被指定了的LBA範圍有所重複之LBA範圍作了指定的寫入指令(重複寫入指令)」之登錄(步驟S901,yes),並且已收訊了針對所有的重複寫入指令之第1次的完成通知的情況時(步驟S903,yes),CPU21,係判定在鎖死資料清單245中是否仍殘留有重複寫入指令之登錄(步驟S904)。對應於「第1次的完成通知乃身為異常回應之重複寫入指令」之登錄,係已被從鎖死資料清單245而刪除。因此,CPU21,係在針對所有的重複寫入指令而收訊了第1次的完成通知之後,判定在鎖死資料清單245中是否仍殘留有重複寫入指令之登錄。
當並未殘留有重複寫入指令之登錄的情況時(步驟S904,no)、亦即是當針對所有的重複寫入指令之第1次的完成通知係為異常回應的情況時,CPU21,係實行基於現在之寫入要求所致的寫入要求處理(步驟S902),並使寫入要求控制處理結束。關於寫入要求處理的具體性之處理程序,係如同參考圖39之流程圖而於前所述一般。
當殘留有重複寫入指令之登錄的情況時(步驟S904,yes),CPU21,係實行基於寫入要求與重複寫入指令所致的結合寫入要求處理(步驟S905)。結合寫入要求處理,係為用以對於記憶體系統3而要求進行使重複寫入指令與現在之寫入要求作了結合之寫入的處理。更詳細而言,在結合寫入要求處理中,「當因應於重複寫入指令與現在之寫入要求而使使用者資料被寫入至了記憶體系統3之NAND型快閃記憶體5中的情況時,最終性而言會被寫入至NAND型快閃記憶體5中之使用者資料(結合使用者資料)」係被作決定。之後,係對於記憶體系統3而被發行有用以將所決定了的結合使用者資料作寫入之1個的寫入指令(結合寫入指令)。關於結合寫入要求處理的具體性之處理程序,係參考圖47之流程圖而於後再作敘述。
接著,CPU21,係判定「是否收訊了針對結合寫入指令之第1次的完成通知」(步驟S906)。當並未收訊針對結合寫入指令之第1次的完成通知的情況時(步驟S906,no),由CPU21所致之處理係回到步驟S906處。亦即是,CPU21,係進行待機,直到收訊針對結合寫入指令之第1次的完成通知為止。
當收訊了針對結合寫入指令之第1次的完成通知的情況時(步驟S906,yes),CPU21,係判定此完成通知是否為正常回應(步驟S907)。
當針對結合寫入指令之完成通知係為正常回應的情況時(步驟S907,yes),CPU21,係發行用以將重複寫入指令中止之中斷指令(步驟S908)。CPU21,係將所發行了的中斷指令儲存於提交佇列242中(步驟S909)。接著,CPU21,係使用鎖死資料清單245,而判定是否存在有其他的重複寫入指令(步驟S910)。當存在有其他的重複寫入指令的情況時(步驟S910,yes),由CPU21所致之處理係回到步驟S908處。藉由此,針對該其他的重複寫入指令,係被發行有中斷指令。
當並不存在有其他的重複寫入指令的情況時(步驟S910,no),CPU21係將寫入要求控制處理結束。
又,當「針對結合寫入指令之完成通知係為異常回應」的情況時(步驟S907,no),CPU21係將寫入要求控制處理結束。亦即是,CPU21,由於係並不進行對應於結合寫入指令之寫入,因此,係並不進行用以將重複寫入指令中止之處理地,而將寫入要求控制處理結束。
藉由以上之變形例之寫入要求控制處理,CPU21,當藉由應用程式223或者是OS221而被產生有新的寫入要求的情況時,若是存在有對於「與藉由新的寫入要求所被作了指定的LBA範圍有所重複之LBA範圍」作了指定的未完成之寫入指令(重複寫入指令),則係能夠對於記憶體系統3而要求進行「將新的寫入要求與重複寫入指令作了結合」的寫入,並對於記憶體系統3而要求重複寫入指令之中止。
具體而言,CPU21,係使用鎖死資料清單245,而判斷重複寫入指令之有無。當存在有重複寫入指令的情況時,CPU21,係實行基於新的寫入要求與重複寫入指令所致的結合寫入指令。之後,當針對結合寫入指令之第1次的完成通知係為正常回應的情況時,CPU21,係發行用以將重複寫入指令中止之中斷指令。
藉由此,CPU21,當相對於新的寫入要求而存在有重複寫入指令的情況時,係能夠對於記憶體系統3,而要求與該重複寫入指令相對應的寫入之中止。
(在主機2處之結合寫入要求處理)
圖47,係為對於藉由主機2之CPU21所被實行的結合寫入要求處理之程序之例作展示之流程圖。結合寫入要求處理,係為用以對於記憶體系統3而要求進行使「身為未完成,並且第1次的完成通知乃身為正常回應」之至少1個的重複寫入指令與藉由應用程式223或者是OS221所被產生了的新的寫入要求作了結合之寫入的處理。結合寫入要求處理,係相當於參照圖46而於前所述的寫入要求控制處理之步驟S905。在參照圖47所進行之以下之說明中,係將「身為未完成,並且第1次的完成通知乃身為正常回應」之至少1個的重複寫入指令,單純稱作重複寫入指令。
首先,CPU21,係決定「當因應於重複寫入指令與現在之寫入要求而使使用者資料被寫入至了記憶體系統3之NAND型快閃記憶體5中的情況時,最終性而言應會被寫入至NAND型快閃記憶體5中之使用者資料(結合使用者資料)」(步驟S1001)。結合使用者資料,係依循於重複寫入指令與現在之寫入要求之間之寫入要求順序,而被作決定。亦即是,應被寫入至某一LBA中之使用者資料,係身為對應於「最後而要求了對於該LBA之寫入」的重複寫入指令或者是寫入要求之使用者資料。另外,當藉由現在之寫入要求而被作了指定的LBA範圍係完全包含藉由重複寫入指令而被作了指定的LBA範圍的情況時,結合使用者資料,係身為對應於現在之寫入要求之使用者資料。
CPU21,係將結合使用者資料儲存在資料緩衝241中(步驟S1002)。更詳細而言,CPU21,係將因應於現在之寫入要求而應被作寫入的使用者資料,儲存於資料緩衝241中。應因應於重複寫入指令而被作寫入的使用者資料,係已被儲存於資料緩衝241中。
針對「當作為代表結合使用者資料之儲存場所之資訊(亦即是,資料指標)而使用有PRP的情況」,具體性地進行說明。CPU21,係能夠將「應因應於重複寫入指令而被作寫入的使用者資料」之中之「應被包含於結合使用者資料中之使用者資料」,複製至資料緩衝241內之其他之記憶區域處。例如,針對「CPU21將分別被儲存在物理頁面A以及物理頁面B中之使用者資料依序作結合並作成結合使用者資料」的情況作考慮。於此情況,CPU21,例如,係藉由將「被儲存在物理頁面B中之使用者資料」複製至「物理位址為與物理頁面A相連續之資料緩衝241內之其他之記憶區域」處,而產生結合使用者資料。以下,係將被儲存有結合使用者資料之複數之記憶區域,稱作結合記憶區域。此時,結合記憶區域,係構成為在邏輯位址上會成為1個的相連續之區域。又,在結合記憶區域中,係亦可從最初之物理頁面之途中起而被儲存有結合使用者資料。同樣的,在結合記憶區域中,係亦可直到最後之物理頁面之途中為止地而被儲存有結合使用者資料。但是,在被包含於結合記憶區域中之其他的物理頁面處,係必須要從最初起直到最後為止地而被儲存有結合使用者資料。藉由此,來成為能夠藉由PRP而對於結合使用者資料之儲存場所作指定。另外,當在「物理位址為與物理頁面A相連續之資料緩衝241內之其他之記憶區域」處係被儲存有其他之使用者資料的情況時,CPU21,係藉由將「被儲存在物理頁面A中之使用者資料」複製至「與物理頁面B相連續之資料緩衝241內之其他之記憶區域」處,而產生結合使用者資料。
當作為代表結合使用者資料之儲存場所之資訊而使用有SGL的情況時,CPU21,係並不需要將應因應於重複寫入指令而被作寫入的使用者資料作複製。此係因為,SGL,係能夠將NVRAM24內之從物理頁面之途中起而開始的複數之記憶區域作為使用者資料之儲存場所來作指定之故。於此情況,CPU21,係作成「包含有分別代表被儲存有結合使用者資料之複數之記憶區域的複數之SGL描述符」之SGL。
CPU21,係將已被儲存之結合使用者資料鎖死(步驟S1003)。另外,當應因應於重複寫入指令而被作寫入的使用者資料係並未被作複製地而作為結合使用者資料之一部分來作使用的情況時,該使用者資料係已被作鎖死。CPU21,當結合使用者資料之一部分係已被作鎖死的情況時,係將與該已鎖死之使用者資料相對應的參照計數器作增數。CPU21,係亦將結合使用者資料之尚未被鎖死之部分重新作鎖死。參照計數器,當新被發行有將所對應之使用者資料作為寫入對象之寫入指令的情況時,係會被作增數。又,參照計數器,當收訊了針對將所對應之使用者資料作為寫入對象之寫入指令之第2次的完成通知的情況時、或者是當該寫入指令被作了中止的情況時,係會被作減數。而,CPU21,當起因於減數而導致參照計數器成為了0的情況時,係將所對應的使用者資料之鎖死解除。
接著,CPU21,係發行將重複寫入指令與現在之寫入要求作了結合的寫入指令(結合寫入指令)(步驟S1004)。結合寫入指令,係對於包含有「藉由重複寫入指令而被作了指定的LBA範圍」與「藉由現在之寫入要求而被作了指定的LBA範圍」之LBA範圍作指定。又,應因應於結合寫入指令而被作寫入的使用者資料,係為結合使用者資料。另外,當藉由現在之寫入要求而被作了指定的LBA範圍係完全包含藉由重複寫入指令而被作了指定的LBA範圍的情況時,結合寫入指令,係身為對應於現在之寫入要求之寫入指令。
CPU21,係將對應於結合寫入指令之登錄追加至鎖死資料清單245中(步驟S1005)。之後,CPU21,係將結合寫入指令儲存於提交佇列242中(步驟S1006),並將結合寫入要求處理結束。
藉由以上之結合寫入要求處理,CPU21,係能夠基於重複寫入指令與現在之寫入要求,而對於記憶體系統3要求結合使用者資料之寫入。結合使用者資料,係為當因應於重複寫入指令與現在之寫入要求而使使用者資料被寫入至了記憶體系統3之NAND型快閃記憶體5中的情況時,最終性而言應會被寫入至NAND型快閃記憶體5中之使用者資料。
接著,參考圖48以及圖49,針對修整要求控制處理作說明。修整要求控制處理,係為用以因應於在「藉由應用程式223或者是OS221所被產生了的新的修整要求」與「已發行且未完成之寫入指令」之間是否存在有所被作了指定的LBA範圍之重複一事,來針對對於記憶體系統3之NAND型快閃記憶體5的寫入進行控制之處理。
(在主機2處之修整要求控制處理)
圖48,係為對於藉由主機2之CPU21所被實行的修整要求控制處理之程序之例作展示之流程圖。CPU21,當藉由應用程式223或者是OS221而被產生有修整要求的情況時,係實行修整要求控制處理。
首先,CPU21,係判定在鎖死資料清單245中,是否存在有代表「對於至少一部分為與藉由修整要求所被指定了的LBA範圍有所重複之LBA範圍作了指定的寫入指令(重複寫入指令)」之登錄(步驟S1101)。具體而言,CPU21,係判定「基於在鎖死資料清單245之各登錄中所包含的SQ登錄資訊而得到之LBA範圍」與「藉由修整要求所被指定了的LBA範圍」是否存在有重複。
當在鎖死資料清單245中並不存在有重複寫入指令之登錄的情況時(步驟S1101,no),CPU21,係實行基於修整要求所致的修整要求處理(步驟S1102),並使修整要求控制處理結束。修整要求處理,係為用以使主機2對於記憶體系統3而要求LBA範圍之分配之解除的處理。CPU21,在修整要求處理中,係發行用以將藉由修整要求而被作了指定的LBA範圍之分配解除之修整指令。又,由於在鎖死資料清單245中係並不存在有重複寫入指令之登錄,因此,CPU21,係並不進行用以對於藉由鎖死資料清單245所被展示的寫入指令作中止或者是修正之處理。關於修整要求處理的具體性之處理程序,係參考圖49之流程圖而於後再作敘述。
當在鎖死資料清單245中係存在有重複寫入指令之登錄的情況時(步驟S1101,yes),CPU21,係判定「是否針對所有的重複寫入指令而已接收了第1次的完成通知」(步驟S1103)。當針對至少1個的重複寫入指令而尚未收訊第1次的完成通知的情況時(步驟S1103,no),由CPU21所致之處理係回到步驟S1103處。亦即是,CPU21,係進行待機,直到收訊針對所有的重複寫入指令之第1次的完成通知為止。
當已收訊針對所有的重複寫入指令之第1次的完成通知的情況時(步驟S1103,yes),CPU21,係確認至少1個的完成通知乃身為正常回應。亦即是,CPU21,係確認在鎖死資料清單245中是否殘留有重複寫入指令之登錄(步驟S1104)。當並未殘留有重複寫入指令之登錄的情況時(步驟S1104,no),由於係已成為不存在有重複寫入指令,因此,CPU21,係並不進行用以將重複寫入指令作中止或者是修正之處理地,而前進至步驟S1102之修整要求處理處。
當殘留有重複寫入指令之登錄的情況時(步驟S1104,yes),CPU21,係實行基於修整要求所致的修整要求處理(步驟S1105)。以下,係將在步驟S1105之修整要求處理處所被作了發行的修整指令,稱作對象修整指令。
CPU21,係判定「是否收訊了針對對象修整指令之第1次的完成通知」(步驟S1106)。當並未收訊針對對象修整指令之第1次的完成通知的情況時(步驟S1106,no),由CPU21所致之處理係回到步驟S1106處。亦即是,CPU21,係進行待機,直到收訊針對對象修整指令之第1次的完成通知為止。
當收訊了針對對象修整指令之第1次的完成通知的情況時(步驟S1106,yes),CPU21,係判定針對對象修整指令之第1次的完成通知是否為正常回應(步驟S1107)。當「針對對象修整指令之第1次的完成通知係為異常回應」的情況時(步驟S1107,no),CPU21係將修整要求控制處理結束。亦即是,由於在記憶體系統3處之針對對象修整指令之處理中係發生有異常,因此,CPU21,係並不進行用以將藉由鎖死資料清單245所被展示的重複寫入指令作中止或者是修正之處理。
CPU21,當針對對象寫入指令之第1次的完成通知係為正常回應的情況時(步驟S1107,yes),CPU21,係判定藉由對象修整指令(亦即是,現在之修整要求)所被作了指定的LBA範圍是否包含有全部的「藉由1個的重複寫入指令所被作了指定的LBA範圍」(步驟S1108)。當藉由對象修整指令所被作了指定的LBA範圍係包含有全部的「藉由1個的重複寫入指令所被作了指定的LBA範圍」的情況時(步驟S1108,yes),CPU21,係發行針對重複寫入指令之中斷指令(步驟S1109)。之後,CPU21,係將所發行了的中斷指令儲存於提交佇列242中(步驟S1110)。藉由此,CPU21,係能夠對於記憶體系統3而要求將「應因應於重複寫入指令而被進行的使用者資料之寫入」中止。
當藉由對象修整指令所被作了指定的LBA範圍係僅包含有一部分的「藉由1個的重複寫入指令所被作了指定的LBA範圍」的情況時(步驟S1108,no),CPU21,係發行針對重複寫入指令之修正指令(步驟S1111)。之後,CPU21,係將所發行了的修正指令儲存於提交佇列242中(步驟S1112)。藉由此,CPU21,係能夠對於記憶體系統3而要求將「應因應於重複寫入指令而被進行的使用者資料之寫入之一部分」取消。
接著,CPU21,係使用鎖死資料清單245,而判定是否存在有其他的重複寫入指令(步驟S1113)。當存在有其他的重複寫入指令的情況時(步驟S1113,yes),由CPU21所致之處理係回到步驟S1108處。藉由此,針對該其他的重複寫入指令,係被發行有中斷指令與修正指令之其中一者。
當並不存在有其他的重複寫入指令的情況時(步驟S1113,no),CPU21係將修整要求控制處理結束。
藉由以上之修整要求控制處理,CPU21,當藉由應用程式223或者是OS221而被產生有修整要求的情況時,若是存在有對於「與藉由修整要求所被作了指定的LBA範圍有所重複之LBA範圍」作了指定的未完成之寫入指令(重複寫入指令),則係能夠對於記憶體系統3而要求該重複寫入指令之中止或者是修正。
具體而言,CPU21,係使用鎖死資料清單245,而判斷重複寫入指令之有無。當存在有重複寫入指令的情況時,CPU21,係使用鎖死資料清單245,來判斷「藉由修整要求所被指定了的LBA範圍」是包含有「藉由重複寫入指令所被指定了的LBA範圍」之全部還是僅包含有一部分。若是「藉由修整要求所被指定了的LBA範圍」係包含有「藉由重複寫入指令所被指定了的LBA範圍」之全部,則CPU21,係對於記憶體系統3而要求該重複寫入指令之中止。若是「藉由修整要求所被指定了的LBA範圍」係僅包含有「藉由重複寫入指令所被指定了的LBA範圍」之一部分,則CPU21,係對於記憶體系統3而要求該重複寫入指令之修正。
藉由此,CPU21,當存在有相對於修整要求之重複寫入指令的情況時,係能夠對於記憶體系統3,而要求與該重複寫入指令相對應的寫入之中止,或者是要求寫入之一部分的取消。
(在主機2處之對於記憶體系統3之修整要求處理)
圖49,係為對於藉由主機2之CPU21所被實行的修整要求處理之程序之例作展示之流程圖。修整要求處理,係為用以使主機2對於記憶體系統3而要求LBA範圍之分配之解除(亦即是,修整)的處理。修整要求處理,係相當於參照圖48而於前所述的修整要求控制處理之步驟S1102以及步驟S1105之各者。
首先,CPU21,係將代表應使分配被作解除的LBA範圍之範圍資訊,儲存在資料緩衝241中(步驟S1201)。範圍資訊,係代表1個以上的LBA範圍。CPU21,係將被儲存在資料緩衝241中的範圍資訊鎖死(步驟S1202)。藉由此,來防止被儲存有範圍資訊之記憶區域被非預期性地釋放的情形。
CPU21,係發行用以基於被儲存在資料緩衝241中之範圍資訊來將LBA範圍之分配作解除的修整指令(以下,稱作第1修整指令)(步驟S1203)。
接著,CPU21,係將對應於第1修整指令之登錄追加至鎖死資料清單245中(步驟S1204)。所被追加之登錄,例如,係包含有對應於第1修整指令之SQ登錄資訊、和資料區域管理資訊。對應於第1修整指令之SQ登錄資訊,係為代表第1修整指令之資訊。更具體而言,對應於第1修整指令之SQ登錄資訊,係為為了使記憶體系統3實行與第1修整指令相對應之處理而被儲存在提交佇列242中之資訊。又,對應於第1修整指令之資料區域管理資訊,係為能夠特定出「對應於第1修整指令之範圍資訊所被儲存之資料緩衝241內之記憶區域」的資訊。
接著,CPU21,係將第1修整指令(亦即是,代表第1修整指令之SQ登錄資訊)儲存在提交佇列242中(步驟S1205)。
另外,CPU21,係亦可在「將第1修整指令儲存在提交佇列242中」的步驟S1205之程序之後,實行將對應於第1修整指令之登錄追加至鎖死資料清單245中之步驟S1204之程序。又,CPU21,係亦可將步驟S1204之程序與步驟S1205之程序平行地實行。
藉由以上之修整要求處理,CPU21,係能夠對於記憶體系統3而要求基於被儲存於資料緩衝241中之範圍資訊所致的修整。又,CPU21,係能夠使用鎖死資料清單245,來針對關連於對於記憶體系統3所要求了的修整之資訊(亦即是,關連於所發行了的修整指令之資訊)作管理。
(在記憶體系統3處之用以進行LBA範圍之修整之處理)
圖50,係為對於藉由記憶體系統3之CPU12所被實行的修整控制處理之程序之例作展示之流程圖。修整控制處理,係為用以接收藉由主機2所發行了的修整指令並將所被作了指定的LBA範圍之分配解除之處理。CPU12,係因應於從提交佇列242而取得了藉由主機2所發行了的修整指令一事,而實行修整控制處理。於此,係將從提交佇列242所取得了的修整指令,稱作對象修整指令。
首先,CPU12,係將針對對象修整指令之第1次的完成通知對於主機2作通知(步驟S1301)。針對對象修整指令之第1次的完成通知,係包含對象修整指令之指令ID。
接著,CPU12,係判定是否能夠開始進行修整(步驟S1302)。更具體而言,CPU12,例如,當「係從提交佇列242,而取得針對「與對象修整指令相對應之重複寫入指令」的中斷指令或者是修正指令,並進行該指令之處理,並將完成通知對於主機2作通知,並且進而開始了與重複寫入指令對應之對於NAND型快閃記憶體5之寫入」的情況時,於該寫入完成了的情況時,係判斷能夠開始進行修整。另外,針對「在將針對對象修整指令之第1次的完成通知作了回送之後」所收訊了的寫入指令,CPU12,係就算是在將針對該寫入指令之第1次的完成通知對於主機2作了回送之後,也並不開始對於NAND型快閃記憶體5之寫入處理,直到對象修整指令完成為止。
與上述之寫入指令相同的,當有預定要接續於對象修整指令之後地而送訊針對寫入指令(亦即是,重複寫入指令)之中斷指令或者是修正指令的情況時,係亦可對於該修整指令而附加代表送訊預定之旗標。藉由此,CPU12,係成為能夠進行對於針對上述之重複寫入指令之中斷指令與修正指令而確實地有所掌握的處理。當中斷指令或者是修正指令會被作複數之送訊的情況時,係亦可在該些之中斷指令或者是修正指令處,更進而附加代表係會有送訊中斷指令或者是修正指令之預定的旗標。
當並非為能夠開始進行修整的情況時(步驟S1302,no),由CPU12所致之處理係回到步驟S1302處。
當係為能夠開始進行修整的情況時(步驟S1302,yes),CPU12,係從主機2之資料緩衝241,而取得藉由對象修整指令所被作了指定的範圍資訊(步驟S1303)。範圍資訊,係代表1個以上的LBA範圍。CPU12,係將針對藉由範圍資訊所展示了的1個以上的LBA範圍之分配作解除(步驟S1304)。亦即是,CPU12,係以會展示「藉由範圍資訊所被展示之1個以上的LBA範圍,係並未被映射至NAND型快閃記憶體5之任一之物理位址處」之內容的方式,來對於邏輯物理位址轉換表62進行更新。之後,CPU12,係將針對對象修整指令之第2次的完成通知對於主機2作通知(步驟S1305),並將修整控制處理結束。
另外,CPU12,在受理了特殊清除指令的情況時,係將與已受理的所有的寫入指令相對應之使用者資料,附加有填補(padding)地而寫入至NAND型快閃記憶體5中,並使此些之寫入指令完成。藉由此,步驟S1302之條件係被滿足,CPU12係進行步驟S1303~步驟S1305之處理。CPU12,係在針對所有的修整指令而將第2次的完成通知對於主機2作了通知之後,對於主機2而通知特殊清除指令之完成。
藉由以上之修整控制處理,CPU12,係能夠因應於從主機2所受理了的修整指令,而將所被作了指定的LBA範圍之分配解除。
(在主機2處之基於從記憶體系統3而來之針對修整指令之回應所致的處理)
圖51,係為對於藉由主機2之CPU21所被實行的修整回應收訊處理之程序之例作展示之流程圖。修整回應收訊處理,係為基於從記憶體系統3所收訊了的針對修整指令之回應(完成通知)而進行之處理。CPU21,係因應於從完成佇列243而取得針對修整指令之完成通知一事,而實行修整回應收訊處理。
首先,CPU21,係在鎖死資料清單245中,特定出與所取得的完成通知內之指令ID相對應之登錄(步驟S1901)。CPU21,係使用所被特定出的登錄,而判定所取得了的完成通知是否為第1次的完成通知(步驟S1902)。具體而言,CPU21,例如,當作為所被特定出的登錄內之完成通知狀態而並未被設定有任何之值的情況時,係判斷所取得了的完成通知為第1次的完成通知。又,CPU21,當作為所被特定出的登錄內之完成通知狀態而被設定有代表係已接收了第1次的完成通知之值的情況時,係判斷所取得了的完成通知為第2次的完成通知。
當所取得了的完成通知係身為第1次之完成通知的情況時(步驟S1902,yes),CPU21,係判定該完成通知是否身為正常回應(步驟S1903)。
當所取得了的完成通知係身為正常回應的情況時(步驟S1903,yes),CPU21,係在被使用於針對完成通知之序列編號之分配中的變數Cseq處加算上“1”(亦即是進行增數)(步驟S1904)。之後,CPU21,係使用變數Cseq,來將所被特定出的登錄作更新(步驟S1905)。具體而言,CPU21,係作為所被特定出的登錄內之完成通知順序,而追加(設定)藉由變數Cseq所展示的序列編號。藉由此,對於所取得了的完成通知,係分配有藉由變數Cseq所展示的序列編號。又,CPU21,係作為所被特定出的登錄內之完成通知狀態,而追加代表「係已接收了第1次的完成通知」一事之值。之後,CPU21,係針對藉由應用程式223或者是OS221所產生的修整要求,而回送「修整為完成」之回應(步驟S1906),並將修整回應收訊處理結束。
另外,係會有使用「藉由因應於由應用程式223或者是OS221所產生了的修整要求,而將修整指令對記憶體系統3作2次的送訊,來從記憶體系統3而接收針對第1次的修整指令之第1次的完成通知和針對第2次的修整指令之第2次的完成通知」之方式的情況。於此情況,CPU21,例如,係在將在步驟S1905處所特定出來的登錄作了更新之後,將第2次的修整指令儲存在提交佇列242中(步驟S1907),並將所特定出來的登錄之指令ID覆寫為第2次的修整指令之指令ID,而將修整回應收訊處理結束。
當所取得了的完成通知(亦即是,第1次的完成通知)係身為異常回應的情況時(步驟S1903,no),CPU21,係將被與完成通知內之指令ID相互附加有關連性之資料緩衝241內的範圍資訊之鎖死解除(步驟S1908)。應用程式223或者是OS221,係在使資料緩衝241之鎖死被作了解除之後,將範圍資訊刪除。CPU21,例如,係能夠使用所特定出的登錄內之資料管理區域資訊,來特定出應解除鎖死之資料緩衝241內的範圍資訊。在範圍資訊之鎖死被作了解除的情況時,該範圍資訊係能夠被刪除。亦即是,該範圍資訊所被儲存之資料緩衝241內之記憶區域(亦即是,NVRAM24內之記憶區域)係被釋放。CPU21,係將所被特定出的登錄從鎖死資料清單245而刪除(步驟S1909)。之後,CPU21,係對於應用程式223或者是OS221,而通知「與所特定出之登錄的修整指令相對應之處理為失敗」一事(步驟S1910),並將修整回應收訊處理結束。
當所取得了的完成通知係身為第2次之完成通知的情況時(步驟S1902,no),CPU21,係判定該完成通知是否身為正常回應(步驟S1911)。
當所取得了的完成通知係身為正常回應的情況時(步驟S1911,yes),CPU21,係將被與完成通知內之指令ID相互附加有關連性之資料緩衝241內的範圍資訊之鎖死解除,並且將禁止寫入解除(步驟S1912)。之後,CPU21,係將所被特定出的登錄從鎖死資料清單245而刪除(步驟S1913),並結束修整回應收訊處理。
當所取得了的完成通知(亦即是,第2次之完成通知)係身為異常回應的情況時(步驟S1911,no),CPU21,係視為記憶體系統3為發生了故障,並將對於記憶體系統3所進行之處理中止(步驟S1914),並對於OS221而通知「發生異常」,並且將修整回應收訊處理結束。於此情況,係進行有作為資訊處理系統1之異常處理。之後,IO受理部210,對於像是寫入要求或者是修整要求等之會對於使用者資料作變更的從應用程式223或者是OS221而來之要求,係全部作拒絕。
藉由以上之修整回應收訊處理,CPU21,係能夠因應於「所收訊了的完成通知係為針對所對應的修整指令之第1次的完成通知還是第2次的完成通知」以及「所收訊了的完成通知是身為正常回應還是異常回應」一事,來進行相異之處理。亦即是,當所收訊了的完成通知係為第1次的完成通知並且係身為正常回應的情況時,CPU21,係在所對應的鎖死資料清單245內之登錄中,追加被分配給該完成通知之序列編號Cseq、和代表「已接收了第1次的完成通知」一事之資訊,並針對修整要求而進行「完成」之回應。當所收訊了的完成通知係為第1次的完成通知並且係身為異常回應的情況時,CPU21,係將所對應的範圍資訊和所對應的鎖死資料清單245內之登錄,從NVRAM24而刪除,並針對修整要求而進行「失敗」之回應。當所收訊了的完成通知係為第2次的完成通知並且係身為正常回應的情況時,CPU21,係將所對應的範圍資訊(亦即是,代表完成了修整後的LBA範圍之範圍資訊)和所對應的鎖死資料清單245內之登錄,從NVRAM24而刪除。又,當所收訊了的完成通知係為第2次之完成通知並且係身為異常回應的情況時,CPU21,係視為記憶體系統3之故障,並將對於記憶體系統3所進行之處理中止。
接著,參考圖52~圖54,針對恢復寫入要求處理作說明。恢復寫入要求處理,係為用以使用鎖死資料清單245,來使「起因於主機2與記憶體系統3之其中一者或者是雙方在正要進行此次之啟動之前而發生了異常結束或者是非預期性地進行了再啟動一事所導致的無法完成之使用者資料之寫入與LBA範圍之修整」作恢復的處理。
(在主機2處之恢復寫入要求處理)
圖52,係為對於藉由主機2之CPU21所被實行的恢復寫入要求處理之程序之例作展示之流程圖。CPU21,當「主機2與記憶體系統3之其中一者或者是雙方在正要進行此次之啟動之前而發生了異常結束」的情況時,以及當「主機2與記憶體系統3之其中一者或者是雙方或者是非預期性地進行了再啟動」的情況時,係實行恢復寫入要求處理。於此,係針對「在鎖死資料清單245中係包含有代表接收了第1次的完成通知之登錄」的情形作考慮。
首先,CPU21,係實行針對鎖死資料清單245之重複排除處理(步驟S1401)。重複排除處理,係為為了以「當藉由較之前所被發行了的寫入指令而被作了指定之LBA範圍之至少一部分為與藉由之後所被發行之寫入指令或者是修整指令而被作了指定之LBA範圍有所重複的情況時,使對於該重複部分之寫入不會被進行」的方式,來將與較之前所被發行了的寫入指令相對應之鎖死資料清單245之登錄作變更的處理。藉由重複排除處理,在恢復寫入要求處理中,係能夠避免「對於某一LBA而發生覆寫」或者是「對於某一LBA而發生在之後會被作修整的寫入」的情形。藉由此,係能夠降低記憶體系統3之NAND型快閃記憶體5之損耗。關於重複排除處理的具體性之處理程序,係參考圖53而於後再作敘述。
由於係被進行有重複排除,因此,係能夠無關於鎖死資料清單245之各登錄之實行順序地而得到相同之結果,但是,於此,假設CPU21係從開頭之登錄起而進行處理。
CPU21,係從藉由重複排除處理所得到的鎖死資料清單245,來將開頭之登錄作為對象登錄而取得之(步驟S1402)。
CPU21,係使用對象登錄之資料區域管理資訊,來將所對應的資料緩衝241內之使用者資料或者是範圍資訊鎖死(步驟S1403)。更詳細而言,CPU21,係使用對象登錄之資料區域管理資訊,來特定出使用者資料或者是範圍資訊所被儲存之資料緩衝241內之記憶區域。之後,CPU21,係使用所正在實行的OS221之功能,而將所特定出之記憶區域鎖死。
接著,CPU21,係發行基於對象登錄之SQ登錄資訊所致的指令(步驟S1404)。所被發行之指令,係為寫入指令與修整指令之其中一者。另外,當「藉由對象登錄之SQ登錄資訊所展示的LBA範圍」係基於被與對象登錄相互附加有關連性之修正指令資料246而被作縮小的情況時,CPU21,係發行對於被作了縮小後的LBA範圍作指定之寫入指令。又,當存在有「藉由對象登錄之SQ登錄資訊所展示的LBA範圍」和「應基於被與對象登錄相互附加有關連性之修正指令資料246而藉由寫入指令所被作指定的複數之LBA範圍」的情況時,CPU21,係發行與該些之複數之LBA範圍相對應之數量的寫入指令。於此情況,CPU21,最初係僅發行1個的寫入指令,關於剩餘之寫入指令,則係在對於鎖死資料清單245之登錄進行了追加後再發行。例如,當存在有應藉由寫入指令而被作指定之2個的LBA範圍的情況時,CPU21,係發行對於其中一者之LBA範圍作指定之寫入指令,並對於鎖死資料清單245而追加對另外一者之LBA範圍進行寫入的寫入指令之登錄。
CPU21,係將所發行了的指令儲存於提交佇列242中(步驟S1405)。之後,CPU21,係在對象登錄中,將作為完成通知順序與完成通知狀態所分別被作了設定之值刪除(步驟S1406)。亦即是,CPU21,係將對象登錄,在所對應的指令被作了發行之後,更新為會代表「尚未收訊第1次之完成通知」。又,CPU21,係在對象登錄中,而亦將指令ID作更新。又,當從1個的登錄而發行了2個以上的寫入指令的情況時,CPU21,係作成第2個的寫入指令之登錄,並修正為第1個的寫入指令之登錄也會使LBA範圍成為1個。
接著,CPU21,係判定在鎖死資料清單245中是否存在有後續之登錄(步驟S1407)。當存在有後續之登錄的情況時(步驟S1407,yes),CPU21,係將該後續之登錄作為新的對象登錄而取得之(步驟S1408),由CPU21所致之處理係回到步驟S1403處。亦即是,CPU21,係更進而進行用以將基於其他之登錄所致之寫入指令或者是修整指令對於記憶體系統3而作送訊之處理。
當並不存在有後續之登錄的情況時(步驟S1407,no),CPU21係將恢復寫入要求處理結束。
藉由以上之恢復寫入要求處理,CPU21,係能夠對於記憶體系統3而要求「起因於記憶體系統3在正要進行此次之啟動之前而發生異常結束或者是非預期性地進行了再啟動一事」所導致的無法完成之使用者資料之寫入或者是LBA範圍之修整。又,藉由在要求使用者資料之寫入或者是LBA範圍之修整之前,先進行針對鎖死資料清單245之重複排除處理,在恢復寫入要求處理中,係能夠避免「對於某一LBA而發生覆寫」或者是「對於某一LBA而發生在之後會被作修整的寫入」的情形。藉由此,係能夠降低記憶體系統3之NAND型快閃記憶體5之損耗。
CPU21,係在「針對在恢復寫入要求處理中所發行了的所有的指令而接收了第1次的完成通知」之後,發行特殊清除指令。之後,CPU21,在針對在恢復寫入要求處理中所發行了的所有的指令而收訊了第2次的完成通知的情況時,係判斷記憶體系統3為完成了「起因於記憶體系統3在正要進行此次之啟動之前而發生了異常結束或者是非預期性地進行了再啟動」一事所導致的無法完成之使用者資料之寫入以及LBA範圍之修整。之後,CPU21,係開始從應用程式223等而來之新的I/O要求之受理。
或者是,CPU21,係亦可在針對在恢復寫入要求處理中所發行了的所有的指令而收訊了第1次的完成通知的情況時,判斷記憶體系統3為完成了「起因於記憶體系統3在正要進行此次之啟動之前而發生了異常結束或者是非預期性地進行了再啟動」一事所導致的無法完成之使用者資料之寫入以及LBA範圍之修整。於此情況,CPU21,係在「針對在恢復寫入要求處理中所發行了的所有的指令而接收了第1次的完成通知」的情況時,開始從應用程式223等而來之新的I/O要求之受理。
(在主機2處之重複排除處理)
圖53,係為對於藉由主機2之CPU21所被實行的重複排除處理之程序之例作展示之流程圖。重複排除處理,係為為了以「當藉由較之前所被發行了的寫入指令而被作了指定之LBA範圍之至少一部分為與藉由之後所被發行之寫入指令或者是修整指令而被作了指定之LBA範圍有所重複的情況時,使對於該重複部分之寫入不會被進行」的方式,來將與較之前所被發行了的寫入指令相對應之鎖死資料清單245之登錄作變更的處理。重複排除處理,係相當於參照圖52之流程圖而於前所述的恢復寫入要求處理之步驟S1401。
首先,CPU21,係將代表並未接收第1次的完成通知一事之登錄從鎖死資料清單245而刪除(步驟S1501)。針對代表並未接收第1次的完成通知一事之登錄,對於進行了與此登錄相對應之寫入或者是修整之要求的應用程式223等,係並未被通知有與要求相對應之處理之完成。故而,係並不需要將與代表並未接收第1次的完成通知一事之登錄相對應之寫入指令或者是修整指令對於記憶體系統3而再度作送訊。因此,CPU21,係將代表並未接收第1次的完成通知一事之登錄從鎖死資料清單245而刪除。
接著,CPU21,係將鎖死資料清單245內之分別代表「已接收了第1次的完成通知」一事之n個的登錄,從開頭起而依序取得(步驟S1502)。其中,n係為1以上之整數。之後,CPU21係在變數i處設定“1”(步驟S1503)。變數i,係為了特定出n個的登錄中之其中1個而被作使用。以下,係將n個的登錄中之第i個的登錄,稱作第i登錄。
CPU21,係判定第i登錄是否身為寫入指令之登錄(步驟S1504)。更具體而言,CPU21,係基於在第i登錄內之SQ登錄資訊中所包含的指令操作碼(command operation code),來判定第i登錄是身為寫入指令之登錄還是身為修整指令之登錄。
當第i登錄係身為寫入指令之登錄的情況時(步驟S1504,yes),CPU21,係取得基於第i登錄所致之LBA範圍(以下,稱作第iLBA範圍)(步驟S1505)。具體而言,CPU21,係將藉由第i登錄內之SQ登錄資訊所展示的LBA範圍,作為第iLBA範圍而取得之。另外,當存在有被與第i登錄相互附加有關連性之修正指令資料246的情況時,CPU21,係將從「基於SQ登錄資訊所得到的LBA範圍」來將「藉由該修正指令資料246所展示的LBA範圍」作了除外後之LBA範圍,作為第iLBA範圍來取得之。
接著,CPU21係實行針對第i登錄之登錄控制處理(步驟S1506),由CPU21所致之處理係前進至步驟S1507處。登錄控制處理,係為為了以使對於第iLBA範圍之中之「與基於第(i+1)登錄起之1個以上的登錄所致之LBA範圍有所重複之部分」的寫入不會被進行的方式,來將第i登錄作刪除或者是變更的處理。在登錄控制處理中,係進行有(1)第i登錄之刪除、(2)藉由第i登錄之SQ登錄資訊(更詳細而言,開頭LBA與資料長度)所展示的LBA範圍之縮小、以及(3)代表有所重複的部分之修正指令資料246的對於第i登錄之修正指令資料清單之登錄,此些之中之其中一者。關於登錄控制處理的具體性之處理程序,係參考圖54之流程圖而於後再作敘述。
在步驟S1507處,CPU21係對於變數i而作“1”的加算。藉由此,後續之登錄係被作為新的第i登錄而被作設定。接著,CPU21,係判定變數i是否為n-1以下(步驟S1508)。當變數i係為n-1以下的情況時(步驟S1508,yes),由CPU21所致之處理係回到步驟S1504處。亦即是,CPU21,係進行與「基於新的第i登錄所得到的LBA範圍和較第i登錄而更之後的登錄所得到的LBA範圍之間之重複之有無」相對應的處理。當變數i為較n-1而更大的情況時(步驟S1508,no),CPU21係將重複排除處理結束。
又,當第i登錄係並非為寫入指令之登錄的情況時(步驟S1504,no)、亦即是當第i登錄係身為修整指令之登錄的情況時,由CPU21所致之處理係前進至步驟S1507處。關於修整指令,由於其係並不會產生對於NAND型快閃記憶體5之寫入,因此,係並不需要在其與較此修整指令而更之後的寫入指令以及修整指令之間而將所被指定的LBA範圍之重複作排除。因此,由CPU21所致之處理,係前進至用以進行有關於下一個的登錄之重複排除的處理。關於步驟S1507以及步驟S1508的具體性之處理程序,係如同前述一般。
藉由以上之重複排除處理,在恢復寫入要求處理中,係能夠以會避免「對於某一LBA而發生覆寫」或者是「對於某一LBA而發生在之後會被作修整的寫入」的方式,來對於鎖死資料清單245進行變更。藉由此,係能夠降低起因於無謂的寫入之發生所導致的記憶體系統3之NAND型快閃記憶體5之損耗。
(在主機2處之登錄控制處理)
圖54,係為對於藉由主機2之CPU21所被實行的登錄控制處理之程序之例作展示之流程圖。登錄控制處理,係為為了在鎖死資料清單245中,以使對於「基於第i登錄所致的第iLBA範圍之中之與基於第(i+1)登錄起之1個以上的登錄所致之LBA範圍有所重複之部分」的寫入不會被進行的方式,來將第i登錄作刪除或者是變更的處理。第i登錄,係身為寫入指令之登錄。從第(i+1)登錄起之登錄,係身為寫入指令與修整指令之其中一者之登錄。登錄控制處理,係相當於參照圖53之流程圖而於前所述的重複排除處理之步驟S1506。
首先,CPU21,係在變數j處設定“i+1”(步驟S1601)。變數j,係為了特定出在參照圖53而於前所作了敘述的重複排除處理之步驟S1502中所取得了的n個的登錄中之其中1個,而被作使用。以下,係將n個的登錄中之第j個的登錄,稱作第j登錄。第j登錄,係為成為對於「與第i登錄之寫入指令之間之LBA範圍之重複之有無」進行判斷的對象之寫入指令或者是修整指令之登錄。CPU21,係取得基於第j登錄所致之LBA範圍(第jLBA範圍)(步驟S1602)。接著,CPU21,係判定第jLBA範圍是否包含有第iLBA範圍之至少一部分(步驟S1603)。
當第jLBA範圍並不存在有與第iLBA範圍相重複之部分的情況時(步驟S1603,no),由CPU21所致之處理係前進至步驟S1604處。
當第jLBA範圍係包含有第iLBA範圍之至少一部分的情況時(步驟S1603,yes),CPU21,係判定第jLBA範圍是否包含有第iLBA範圍之全部(步驟S1606)。當第jLBA範圍係包含有第iLBA範圍之全部的情況時(步驟S1606,yes),CPU21,係將第i登錄從鎖死資料清單245而刪除(步驟S1607),並結束登錄控制處理。亦即是,由於「由對應於第i登錄之寫入指令所致的對於第iLBA範圍之寫入」係會起因於「對應於第j登錄之寫入指令」而被作覆寫,或者是會起因於「對應於第j登錄之修整指令」而被無效化,因此,CPU21,係以使對應於第i登錄之寫入指令不會被發行的方式,來將第i登錄刪除。
當第jLBA範圍係僅包含有第iLBA範圍之一部分的情況時(步驟S1606,no),CPU21,係判定第jLBA範圍是否包含有第iLBA範圍之開頭(步驟S1608)。當第jLBA範圍係包含有第iLBA範圍之開頭的情況時(步驟S1608,yes),CPU21,係以會展示「起因於將與第jLBA範圍相重複之部分作除外一事而被作了縮小的第iLBA範圍」的方式,來對於藉由第i登錄之SQ登錄資訊所展示的LBA範圍作變更(步驟S1609)。之後,CPU21,係配合於被作了縮小後的第iLBA範圍,而將藉由第i登錄之SQ登錄資訊所展示的資料指標作變更(步驟S1610),由CPU21所致之處理係前進至步驟S1604處。另外,當使用有SGL的情況時,於藉由SQ登錄資訊所展示的資料指標資訊之變更中,係並無法對於LBA範圍進行修正。於此情況,CPU21,係如同後述之步驟S1613一般地,將代表與第jLBA範圍有所重複之部分的修正指令資料246,登錄在第i登錄之修正指令資料清單中。
當第jLBA範圍係並未包含有第iLBA範圍之開頭的情況時(步驟S1608,no),CPU21,係判定第jLBA範圍是否包含有第iLBA範圍之末端(步驟S1611)。當第jLBA範圍係包含有第iLBA範圍之末端的情況時(步驟S1611,yes),CPU21,係以會展示「起因於將與第jLBA範圍相重複之部分作除外一事而被作了縮小的第iLBA範圍」的方式,來對於藉由第i登錄之SQ登錄資訊所展示的LBA範圍作變更(步驟S1612),由CPU21所致之處理係前進至步驟S1604處。另外,在步驟S1612處,由於第iLBA範圍之開頭係並未被作變更,因此,係並不需要將藉由第i登錄之SQ登錄資訊所展示的資料指標作變更。
當第jLBA範圍係並未包含有第iLBA範圍之末端的情況時(步驟S1611,no)、亦即是當第jLBA範圍係並未包含有第iLBA範圍之開頭以及末端而僅包含有途中之部分的情況時,CPU21,係將代表與第jLBA範圍有所重複之部分的修正指令資料246,登錄在第i登錄之修正指令資料清單中(步驟S1613),由CPU21所致之處理係前進至步驟S1604處。更具體而言,CPU21,係產生代表與第jLBA範圍有所重複的部分之修正指令資料246。之後,CPU21,係將所被產生了的修正指令資料246,登錄在第i登錄的修正指令資料清單中。
在步驟S1604處,CPU21係對於變數j而作“1”的加算。藉由此,後續之登錄係被作為新的第j登錄而被作設定。CPU21,係判定變數j是否為n以下(步驟S1605)。當變數j係為n以下的情況時(步驟S1605,yes),由CPU21所致之處理係回到步驟S1602處。亦即是,CPU21,係進行與「第iLBA範圍和基於新的第j登錄所得到的LBA範圍之間之重複之有無」相對應的處理。
當變數j為較n而更大的情況時(步驟S1605,no),CPU21係將登錄控制處理結束。
藉由以上之登錄控制處理,CPU21,係能夠以使對於「第iLBA範圍之中之與基於第(i+1)登錄起之1個以上的登錄所致之LBA範圍有所重複之部分」的寫入不會被進行的方式,來將第i登錄作刪除或者是變更。
(在記憶體系統3處之寫入控制處理)
當於在主機2處之恢復寫入要求處理中而被發行有寫入指令的情況時,在記憶體系統3處,係被進行有與所被發行了的寫入指令相對應之寫入控制處理。關於寫入控制處理的具體性之處理程序,係如同參考圖40之流程圖而於前所述一般。
(在記憶體系統3處之修整控制處理)
當於在主機2處之恢復寫入要求處理中而被發行有修整指令的情況時,在記憶體系統3處,係被進行有與所被發行了的修整指令相對應之修整控制處理。關於修整控制處理的具體性之處理程序,係如同參考圖50之流程圖而於前所述一般。
(關於讀出動作)
針對當應用程式223或者是OS221對於IO受理部210而進行了讀出要求的情況進行說明。於此情況,IO受理部210,首先,係透過寫入/修整管理部212,而將鎖死資料清單245中之登錄,從新的登錄起而依序進行讀出,直到找到包含有「將接收了讀出要求之LBA作為寫入範圍而作了指定的寫入指令」之登錄為止。當找到了包含有此種寫入指令之登錄的情況時,IO受理部210,係將在資料緩衝241中所包含之使用者資料71之中的與該LBA相對應之部分交給要求源頭。當並未找到包含有此種寫入指令之登錄的情況時,IO受理部210,係將與該LBA相對應之使用者資料從記憶體系統3而讀出並交給要求源頭。另外,當找到了包含有「將接收了讀出要求之LBA之一部分作為寫入範圍而作了指定的寫入指令」之登錄的情況時,IO受理部210,係將從資料緩衝241所讀出了的使用者資料和從記憶體系統3所讀出了的使用者資料一起交給要求源頭。藉由此動作,IO受理部210,係能夠將被視為虛擬性地寫入至了記憶體系統3中的資料正確地回送給要求源頭。又,當在NVRAM24(資料緩衝241)中仍然殘留有使用者資料的情況時,藉由將其交給要求源頭,IO受理部210係能夠針對要求而高速地進行回應。
(第2實施形態)
在第1實施形態中,當藉由「已對於記憶體系統3而作了發行並且為未完成之寫入指令」而被作了指定的LBA範圍與藉由「新的寫入要求」而被作了指定的LBA範圍係在至少一部分而存在有重複的情況時,於與寫入指令相對應之寫入中,至少對於有所重複的部分之寫入係被作取消。相對於此,在第2實施形態中,當在「用以將記憶體對映檔案內之更新資料部分作寫入」的寫入指令已對於記憶體系統3而作了發行並且尚未完成的期間中,該更新資料部分之至少一部分係更進而被作了更新的情況時,於與寫入指令相對應之寫入中,被作了更新的至少一部分之寫入係被作取消。記憶體對映檔案,係為「藉由將正被儲存於記憶體系統3(更詳細而言,NAND型快閃記憶體5)中之檔案映射至主機2內之主記憶體中,而使實行應用程式223之CPU21能夠並不使用針對記憶體系統3之讀取/寫入要求地來使用對於記憶體之讀取/寫入命令而進行資料之讀出以及寫入」的檔案。
第2實施形態之主機2以及記憶體系統3之構成,係與第1實施形態之主機2以及記憶體系統3相同。在第2實施形態與第1實施形態中,於「在NVRAM24之資料緩衝241內設置記憶體對映檔案之儲存區域,並進行有與針對記憶體對映檔案之讀出以及寫入相對應的動作」一點上,係存在有差異。以下,主要針對與第1實施形態相異之部分作說明。
圖55,係對於包含有第2實施形態之資訊處理裝置(例如,主機2)的資訊處理系統1之構成作展示。如同前述一般,在第2實施形態之主機2處,係除了第1實施形態之主機2的構成以外,更進而在NVRAM24之中設置有記憶體對映檔案247之儲存區域。此記憶體對映檔案247之區域的一部分,係藉由以OS221所產生的對於IO受理部210之寫入要求,而更進而被作為使用者資料71來處理。
接著,針對記憶體對映檔案247進行說明。
記憶體對映檔案247,係為「將正被儲存於儲存空間中之檔案映射至主記憶體上,而使應用程式223能夠並不使用針對儲存空間之讀取/寫入指令地來使用由CPU21所致之對於記憶體之讀出/寫入要求而進行資料之讀出以及寫入」的檔案。儲存空間,例如,係為記憶體系統3(更詳細而言,NAND型快閃記憶體5)。主記憶體,例如,係為RAM22、NVRAM24。當主記憶體上之記憶體對映檔案247係藉由在CPU21上所被實行之複數之處理程序(process)而被作共有的情況時,記憶體對映檔案247,係可作為複數之處理程序間之共有檔案而被作使用。
在記憶體對映檔案247中,係利用有前述之虛擬記憶體。故而,因應於被要求有檔案之開啟(open,亦即是,檔案之利用開始)一事,在物理記憶體(實際記憶體)處,係並未被分配有用以將該檔案之全體作記憶的記憶區域。
當應用程式223要求了對於某一邏輯位址之存取的情況時,對於包含有該邏輯位址之邏輯頁面,若是並未被分配有物理記憶體上之物理頁面,則係會發生頁面錯誤(page fault)。
OS221,係進行與所發生了的頁面錯誤相對應之處理。具體而言,OS221,當對於所被要求了的邏輯位址之存取係身為對於新的檔案之存取或者是身為對於將既存之檔案作了擴張的部分之存取的情況時,係分配物理記憶體內之記憶區域(物理頁面),並將所被分配了的記憶區域以特定之資料(例如,全零(all zero))來作填埋。
OS221,當對於所被要求了的邏輯位址之存取係身為對於既存之檔案之存取的情況時,係特定出與包含有該邏輯位址之邏輯頁面相對應的LBA。OS221,係具備有對於「代表被虛擬性地儲存有檔案之虛擬記憶體上的記憶區域之邏輯位址(或者是邏輯位址範圍)」與「代表被邏輯性地儲存有該檔案之記憶體系統3上的記憶區域之LBA(或者是LBA範圍)」之間的對應關係作管理之功能(例如,檔案系統)。OS221,係將所被特定出之LBA的資料從記憶體系統3而讀出。OS221,係將所被讀出了的資料,寫入至被對於該邏輯頁面而作了分配的物理頁面中。
藉由此,應用程式223,係成為能夠從包含有要求了存取之邏輯位址的邏輯頁面來將該邏輯位址之資料讀出,或者是成為能夠將資料寫入至該邏輯頁面中之所要求了的邏輯位址處。當從應用程式223而使資料被寫入至了邏輯位址中的情況時,在包含有該邏輯位址的邏輯頁面處,係被設定有壞位元(dirty bit)。OS221,係在應將壞位元消除之特定的時序處,而將被設定有壞位元之邏輯頁面內的資料使用所對應之LBA來寫入至記憶體系統3中。藉由此,在記憶體對映檔案247上而被作了覆寫之資料,係被反映為所對應的記憶體系統3內之檔案。
特定之時序,例如,係為「於一段時間中並不存在有對於被設定有壞位元之邏輯頁面所進行的讀寫,而想要將該邏輯頁面以及被分配給該邏輯頁面之物理頁面作釋放而使用於其他之用途中」的情況。於此情況,OS221,係在將該邏輯頁面內之資料寫入至記憶體系統3中之後,將壞位元清除,並進而將該邏輯頁面與所對應的物理頁面之間之映射解除(亦即是,進行頁面送出(page out)動作)。藉由此,該物理頁面係成為能夠被使用在其他之用途中。對於進行頁面送出動作的對象之邏輯頁面作選擇的機制,係並不被限定於上述構成。
於此,針對「作為記憶體對映檔案247之儲存區域,而被分配有RAM22之記憶區域」的情況作考慮。應用程式223,係會有在「與被對於記憶體系統3而作了送訊的寫入指令相對應之處理」完成之前,而要求進行針對記憶體對映檔案247內之1個的邏輯頁面之寫入的情況。如同前述一般,在資料所被作了寫入的邏輯頁面處,係被設定有壞位元。IO受理部210,係對於記憶體系統3而要求該邏輯頁面內之資料的寫入。更具體而言,首先,IO受理部210,係如同在第1實施形態中所作了說明一般地,為了提供「將對於記憶體系統3之資料之寫入,使用被儲存於NVRAM24中之資料來作恢復」的功能(虛擬PLP功能),而將寫入對象之資料從RAM22來複製至NVRAM24處。之後,IO受理部210,係指定與被設定有壞位元之邏輯頁面相對應的LBA,而將用以將被作了複製的資料作寫入之寫入指令,送訊至記憶體系統3處。若是IO受理部210接收針對該寫入指令之第1次的完成通知,則OS221,係作為已完成了寫入者,而將壞位元清除。
因此,之後,當在「與被作了送訊的寫入指令相對應之處理」完成之前,而應用程式223要求了進行針對記憶體對映檔案247內之相同之邏輯頁面之寫入的情況時,係會有能夠將被送訊至了記憶體系統3處之寫入指令作取消的可能性。另一方面,由於OS221係已將其視為寫入為完成者來處理,因此,如此一來,取消係並不會被發行。
為了防止此種情形,係有必要以會「在先使OS221對於IO受理部210而發出寫入要求之後,才會從IO受理部210而通知係收訊了第2次的完成通知」的方式、或者是以「使OS221將該邏輯頁面設為禁止寫入,直到接收第2次的完成通知為止」的方式,來對於OS221進行修正。之後,若是針對該邏輯頁面之寫入被產生,則OS221,係對於IO受理部210,而發出針對「與未完成之寫入指令相對應的寫入」之中之「和更進而所被產生之寫入要求有所重複的LBA範圍」之取消要求。進而,OS221,係有必要將禁止寫入解除,而設為能夠進行對於該邏輯頁面之寫入。起因於新的寫入,係再度被設定有壞位元,OS221,係在之後的適當之時序處,對於IO受理部210而送訊寫入要求。
關於將「與未完成之寫入指令相對應的寫入」之中之針對「和更進而所被產生之寫入要求有所重複的LBA」所進行之寫入作取消的方法,除了並不發行追加之寫入指令一事以外,係如同在第1實施形態中所作了說明一般。藉由此,由於係並不會發生對於有所重複的LBA之覆寫,因此,係能夠降低NAND型快閃記憶體5之損耗。
但是,在「作為記憶體對映檔案247之儲存區域,而被分配有RAM22之記憶區域」的情況時,係恆常會發生寫入對象之資料的對於NVRAM24之複製。為了進行複製所需之動作和為了進行複製所被使用的記憶區域,係會造成主機2之負擔。又,如同上述一般,在使OS221對於記憶體對映檔案247進行控制的情況時,亦係有必要以「使OS221將邏輯頁面設為禁止寫入,直到接收第2次的完成通知為止」的方式,來對於OS221進行修正。若是並不進行此種對於OS221之修正,則係無法進行寫入之取消,而仍成為無法減少NAND型快閃記憶體5之損耗。
因此,在本實施形態之主機2處,作為記憶體對映檔案247之儲存區域,係被從NVRAM24而分配有記憶區域。藉由此,IO受理部210係成為並不需要將寫入對象之資料作複製。
如同前述一般,當應用程式223要求進行針對記憶體對映檔案247內之1個的邏輯頁面之寫入,並使資料被寫入至了邏輯位址中的情況時,在該邏輯頁面處,係藉由CPU21而被設定有壞位元。OS221,係對於IO受理部210而要求該邏輯頁面內之資料之寫入,IO受理部210,係透過將有關於禁止寫入之處理如同後述一般地來從第1實施形態而作了變更的指令發行部211,而對於記憶體系統3要求該邏輯頁面內之資料的寫入。
在第1實施形態中,將包含有使用者資料71之邏輯頁面設為禁止寫入的處理,係只要在從IO受理部210受理寫入要求起直到對於寫入要求源頭而回送「正常結束」為止的期間中而被進行即可。此係因為,在第1實施形態中,身為寫入要求源頭之應用程式223等,係以「在從發出寫入要求起直到寫入要求完成為止的期間中,係並不對使用者資料71作變更」一事作為前提之故。另一方面,在第2實施形態中,將包含有使用者資料71之邏輯頁面設為禁止寫入的處理,係在直到將寫入指令送至記憶體系統3處之前為止的期間中而被進行。此係因為,在記憶體對映檔案247的情況時,「由應用程式223所致之使用者資料71的對於邏輯頁面之寫入」和「由OS221所致之用以將使用者資料71寫入至記憶體系統3中的對於寫入/修整管理部212之要求」,係被相互獨立地進行,在直到寫入要求完成為止的期間中,仍存在有應用程式223對於使用者資料71作變更的可能性,因此,需要構成為能夠偵測出此事之故。
當在「與被作了送訊的寫入指令相對應之處理」完成之前,而應用程式223進行了針對記憶體對映檔案247內之相同之邏輯頁面之寫入的情況時,係會有能夠將針對「藉由該寫入指令而被作了指定的LBA」之寫入作取消的可能性。於此情況,本實施形態之OS221,係將「與該未完成之寫入指令相對應的寫入」之中之針對「和更進而所被產生之寫入要求有所重複的LBA」所進行之寫入作取消。若是取消處理被開始,則針對該邏輯頁面之禁止寫入亦係被解除。藉由此,應用程式223,係能夠將對於該邏輯頁面之寫入完成,而並不需要等待由寫入指令之完成所致的禁止寫入之解除。故而,係能夠縮短停止期間。進而,由於係並不會發生對於有所重複的LBA之寫入,因此,係能夠降低NAND型快閃記憶體5之損耗。
更詳細而言,替代在第1實施形態中所作了說明的「當對於設為禁止寫入的邏輯頁面而嘗試有寫入時之寫入時複製處理」,係設置有「將與設為禁止寫入的邏輯頁面相對應之使用者資料71之在記憶體系統3處的寫入作取消」之功能。
另外,會發生此種事態的情況,係為「當於一段時間中並不存在有從應用程式223而來之對於該邏輯頁面之存取,而OS221準備將所對應之物理記憶體頁面作釋放、亦即是準備進行頁面送出之後,應用程式223再度進行了寫入」的情況。
在先前技術之主機之記憶體對映檔案中,OS,係藉由對於記憶體系統進行寫入要求並僅接收1次的完成通知,便成為能夠進行頁面送出。之後,OS,係藉由將邏輯頁面與物理頁面之間之映射解除,而進行頁面送出。之後,當存在有從應用程式而對於並未被映射至物理頁面處之邏輯頁面之存取要求的情況時,OS,係對於並未被映射至任何之邏輯頁面處的物理頁面,而再度從記憶體系統來將存在有存取要求之邏輯頁面之資料作讀入。之後,OS,係將把資料作了讀入的物理頁面與存在有存取要求之邏輯頁面作映射(亦即是進行頁面送入(page in)動作)。
如同在第1實施形態中所作了說明一般,使用者資料71所被作儲存之資料緩衝241之記憶區域,由於直到藉由寫入/修整管理部212而接收第2次的完成通知為止,係被作鎖死,因此,實際上頁面送出係尚未被進行。在本實施形態中,係會有「由OS221所致之用以進行頁面送出之針對記憶體系統3的寫入」並無法立即完成而需要耗費時間的情況。於此種情況,就算是應用程式223對於頁面送出尚未結束之被設為禁止寫入的邏輯頁面而嘗試進行寫入,亦係與第1實施形態的情況相異,而並不會發生複製。OS221,係將針對「已藉由被送訊至記憶體系統3處之寫入指令而被作了指定的LBA範圍」之中之「與想要新進行寫入的邏輯頁面相對應的LBA」之寫入作取消。OS221,係進而亦將針對該邏輯頁面之禁止寫入作解除。藉由此,從應用程式223而來之對於該邏輯頁面之寫入亦係完成。
具體而言,在第1實施形態中之「針對禁止寫入頁面之處理」,係被如同下述一般地作變更。
當針對「OS221對於IO受理部210而要求了寫入的邏輯頁面」,而進而起因於應用程式223等而新被產生有寫入要求的情況時,如同在第1實施形態中所作了說明一般,在寫入/修整管理部212處係被通知有插斷之發生。接收到通知,寫入/修整管理部212,係求取出與「被嘗試有寫入的邏輯頁面」相對應之LBA範圍。之後,寫入/修整管理部212,係從鎖死資料清單245之登錄中,而找出正對於記憶體系統3而要求針對該LBA範圍之寫入的寫入指令之指令ID。IO受理部210,在接收了該寫入指令之第1次的完成通知之後,係對於OS221而回送寫入要求之正常完成。
之後,寫入/修整管理部212,係因應於該LBA範圍,而對於指令發行部211要求將中斷指令或者是修正指令送至記憶體系統3處。此處理,除了並不發行新的寫入指令一事以外,係為與在第1實施形態中所作了說明的「當接收了與該LBA範圍有所重複之寫入要求時之處理」相同之處理。無關於中斷指令或者是修正指令之成功之有無地,寫入/修整管理部212,均係對於「是否藉由接收了寫入要求之正常完成的OS221而使壞位元被作了清除」一事作確認。另外,寫入/修整管理部212,係若是壞位元並未被清除,則進行等待,直到壞位元被清除為止。之後,寫入/修整管理部212,係將針對該邏輯頁面之禁止寫入作解除。藉由此,由應用程式223等所致之寫入係再度被開始。起因於新的寫入,係又會被設定有壞位元,但是,之後,OS221係會進行用以將新的壞位元作清除之對於記憶體系統3的寫入。
針對前述之主機2以及記憶體系統3之動作,於以下作具體性的說明。
圖56,係對於記憶體對映檔案247之覆寫之例作展示。在圖56中,最初,在記憶體對映檔案247內之p~p+7之邏輯頁面中,係分別被儲存有資料X0~X7。資料X0~X7之各者,例如,係為構成從記憶體系統3所被作了讀出的檔案之資料部。
在圖56中,因應於由應用程式223所致之寫入要求,原本被儲存在邏輯頁面p+2、p+3以及p+4中之資料X2、X3以及X4,係分別被覆寫為資料Y2、Y3以及Y4。在資料被作了覆寫的邏輯頁面p+2、p+3以及p+4之各者處,係被設定有壞位元。
OS221,係在特定之時序處,而對於IO受理部210要求將被設定有壞位元之邏輯頁面p+2、p+3以及p+4內的資料Y2、Y3以及Y4寫入至記憶體系統3中。
圖57,係對於用以將被設定有壞位元之邏輯頁面內的資料作寫入之寫入動作之例作展示。於此,針對藉由OS221,而對於IO受理部210送出了「要求將被設定有壞位元之相連續之1個以上的邏輯頁面內的資料作寫入」之寫入要求的情形作考慮。以下,係將被設定有壞位元之相連續之1個以上的邏輯頁面,稱作第1對象邏輯頁面。將被儲存在第1對象邏輯頁面中之資料,稱作第1對象資料。
首先,在主機處,IO受理部210,係受理由OS221所致之寫入要求(圖57中之(1))。IO受理部210,係將所受理了的寫入要求送至寫入/修整管理部212處(圖57中之(2))。
寫入/修整管理部212,係因應於從IO受理部210所接收了的寫入要求,而將記憶體對映檔案247內之第1對象邏輯頁面作鎖死並設為禁止寫入(圖57中之(3))。亦即是,寫入/修整管理部212,係將針對第1對象邏輯頁面之物理頁面的映射之解除(頁面送出)作禁止。之後,寫入/修整管理部212,係對於指令發行部211而要求對應於寫入要求之寫入指令的發行(圖57中之(4))。
指令發行部211,係因應於由寫入/修整管理部212所致之要求,而發行用以將第1對象資料作寫入的寫入指令(以下,稱作第4寫入指令)。亦即是,指令發行部211,係產生相當於第4寫入指令的SQ登錄資訊。所被產生了的SQ登錄資訊,係包含有代表「與第1對象邏輯頁面相對應之LBA範圍(亦即是,第1對象資料所應被作寫入之LBA範圍)」之資訊、和代表「第1對象資料之在主機2內的儲存場所」之資料指標。指令發行部211,係將所產生了的SQ登錄資訊對於寫入/修整管理部212作送出(圖57中之(5))。
寫入/修整管理部212,係使用藉由指令發行部211所被送出的SQ登錄資訊,來產生鎖死資料清單245之登錄。將所被產生了的登錄,稱作第5登錄。第5登錄,例如,係包含有相當於所被發行了的寫入指令之SQ登錄資訊、和資料區域管理資訊。此資料區域管理資訊,係為能夠特定出「第1對象資料所被儲存之記憶體對映檔案247內之記憶區域(亦即是,NVRAM24內之記憶區域)」的資訊。寫入/修整管理部212,係將第5登錄追加至鎖死資料清單245中(圖57中之(6))。
接著,指令發行部211,係將所被發行了的第4寫入指令(SQ登錄資訊)儲存在提交佇列242中(圖57中之(7))。
後續之與第4寫入指令相對應的在記憶體系統3處之動作(圖57中之(8)~(12)),係與參照圖11而於前所述之在記憶體系統3處之動作(圖11中之(8)~(12))相同。
接著,主機2之指令發行部211,係從完成佇列243而取得針對第4寫入指令之第1次的完成通知(圖57中之(13))。之後,指令發行部211,係將所取得之第1次的完成通知對於寫入/修整管理部212作送出(圖57中之(14))。
當第1次之完成通知係為代表正常結束之完成通知的情況時,寫入/修整管理部212,係將鎖死資料清單245內之第5登錄作更新(圖57中之(15))。具體而言,寫入/修整管理部212,係在第5登錄中,追加所被作了分配的序列編號(亦即是,代表接收了第1次的完成通知之順序之資訊)、和代表已完成第1次之完成通知之接收一事的資訊。寫入/修整管理部212,係將寫入之完成(正常結束)對於IO受理部210作通知(圖57中之(16))。之後,IO受理部210,係對於OS221而通知正常結束(圖57中之(17))。接收到正常結束之通知,OS221,係將被設定於第1對象邏輯頁面中之壞位元作清除(圖57中之(18))。
當第1次之完成通知係為代表異常結束之完成通知的情況時,寫入/修整管理部212,係將記憶體對映檔案247內之第1對象邏輯頁面之鎖死解除(圖57中之(19))。之後,寫入/修整管理部212,係將第5登錄,從鎖死資料清單245中而刪除(圖57中之(20))。進而,寫入/修整管理部212,係將針對第1對象邏輯頁面之禁止寫入作解除。寫入/修整管理部212,係將異常結束對於IO受理部210作通知(圖57中之(21))。之後,IO受理部210,係對於OS221而通知異常結束(圖57中之(22))。OS221,係對於正在利用記憶體對映檔案247之應用程式223等,而通知「錯誤」。
圖58,係對於接續於圖57之後的寫入動作作展示。
與所受理了的寫入指令相對應之在記憶體系統3處之動作(圖58中之(1)~(6)),係與參照圖16而於前所述之在記憶體系統3處之動作(圖16中之(1)~(6))相同。亦即是,記憶體系統3,係基於從主機2所受理的寫入指令,而進行由延遲寫入完備(Delayed Write Completion)所致之使用者資料之寫入。
接著,主機2之指令發行部211,係從完成佇列243而取得針對第4寫入指令之第2次的完成通知(圖58中之(7))。之後,指令發行部211,係將所取得之第2次的完成通知對於寫入/修整管理部212作送出(圖58中之(8))。
寫入/修整管理部212,係從指令發行部211而接收針對第4寫入指令之第2次的完成通知,並將記憶體對映檔案247內之第1對象邏輯頁面之鎖死解除,並且亦將禁止寫入作解除。(圖58中之(9))。之後,寫入/修整管理部212,係將第5登錄,從鎖死資料清單245中而刪除(圖58中之(10))。
另外,當第2次的完成通知為展示有「錯誤」的情況時,主機2(具體而言,寫入/修整管理部212),係視為記憶體系統3之故障。寫入/修整管理部212,係將對於該記憶體系統3之處理中止,並進行作為資訊處理系統1之異常處理。
藉由以上之寫入動作,在記憶體對映檔案247處,係能夠使被設定有壞位元之邏輯頁面內之資料,被反映為記憶體系統3內之所對應的檔案。又,在記憶體系統3基於從主機2所受理的寫入指令而進行由延遲寫入完備(Delayed Write Completion)所致之資料之寫入的期間中,主機2係能夠使用鎖死資料清單245來對於與所發行了的寫入指令相對應之處理之狀況作管理。
於此,針對在從主機2發行用以將第1對象資料作寫入的第4寫入指令起直到接收針對第4寫入指令之第2次的完成通知為止的期間中,應用程式223更進而要求了進行對於第1對象邏輯頁面之至少一部分之寫入的情況,來進行說明。
當第1次之完成通知係為代表正常結束之完成通知的情況時,就算是被設定於第1對象邏輯頁面處之壞位元被作清除,對於第1對象邏輯頁面之寫入亦仍為被禁止的狀態。假設若是因應於壞位元被作清除一事而使對於第1對象邏輯頁面之寫入被作了許可,則因應於對於第1對象邏輯頁面之新的寫入,壞位元係再度被作設定。之後,係藉由OS221,而在之後之適當的時序處被要求有對於再度被設定有壞位元之第1對象邏輯頁面內之新的第1對象資料之寫入,用以將新的第1對象資料作寫入之其他的寫入指令係被送訊至記憶體系統3處。此事,係會導致在記憶體系統3處而發生針對同一之LBA的重複之寫入。因此,就算是被設定於第1對象邏輯頁面處之壞位元被作清除,寫入/修整管理部212亦係禁止對於第1對象邏輯頁面之寫入,直到在記憶體系統3處之與第4寫入指令相對應的第1對象資料之寫入完成為止。藉由此,寫入/修整管理部212,係能夠將「與想要寫入至記憶體系統3中之LBA範圍相對應的邏輯頁面為被作了更新」一事檢測出來,並將之前所被發行了的未完成之寫入指令之對於所對應之LBA範圍的寫入作取消。
當應用程式223要求了對於被作了鎖死之第1對象邏輯頁面內之邏輯位址之寫入的情況時,由於寫入係被禁止,因此,係發生插斷,並藉由OS221而被通知至寫入/修整管理部212處。
寫入/修整管理部212,係因應於所被通知了的插斷,而從鎖死資料清單245內之未完成之寫入指令之登錄中,找出包含有以「包含有被要求了進行寫入的邏輯位址之邏輯頁面」作為對象的寫入指令之登錄。寫入/修整管理部212,當針對所找到的登錄中之寫入指令而尚未接收第1次的完成通知的情況時,係進行等待,直到接收到為止。寫入/修整管理部212,係若是接收到第1次的完成通知,則嘗試進行針對與「包含有被要求有寫入的邏輯位址之邏輯頁面」相對應之LBA範圍之寫入的取消。將包含有被要求有寫入的邏輯位址之邏輯頁面,稱作第2對象邏輯頁面。第2對象邏輯頁面,係為第1對象邏輯頁面之中之1個以上的頁面。第2對象邏輯頁面內之資料的對於記憶體系統3之寫入,係藉由「已對於指令發行部211以及寫入/修整管理部212而作了要求,並且已收訊了第1次的完成通知,並且尚未完成」的寫入指令,而準備被進行。
寫入/修整管理部212,係進行用以將第2對象邏輯頁面內之資料的對於記憶體系統3之寫入作中止的動作。具體而言,寫入/修整管理部212,係在鎖死資料清單245中,而特定出對於「包含有與第2對象邏輯頁面相對應的LBA範圍之LBA範圍」作了指定的第4寫入指令之登錄。寫入/修整管理部212,若是特定出登錄,則當在完成通知狀態欄位(或者是完成通知順序欄位)中並未被設定有值的情況時,係進行等待,直到被作設定為止。所被特定出之登錄,係為與「用以將第1對象邏輯頁面內之第1對象資料作寫入」的第4寫入指令相對應之第5登錄。將與第1對象邏輯頁面相對應之LBA範圍,稱作第3LBA範圍。將與第2對象邏輯頁面相對應之LBA範圍,稱作第4LBA範圍。指令發行部211以及寫入/修整管理部212,係使用所被特定出之第5登錄,而因應於第3LBA範圍與第4LBA範圍之間之重複關係(亦即是,第1對象邏輯頁面與第2對象邏輯頁面之間之重複關係),來進行將第4寫入指令作中止或者是修正之動作。關於用以因應於第3LBA範圍與第4LBA範圍之間之重複關係來將第4寫入指令作中止或者是修正的具體性之動作例,係參照圖59~圖62而於後再述。
寫入/修整管理部212,係等待「第2對象邏輯頁面之壞位元被OS221而作了清除」一事,並將禁止寫入作解除。藉由此,藉由應用程式223所被作了要求的對於第2對象邏輯頁面之寫入係再度被開始。藉由此,被作了停止的應用程式223係再度被開始,壞位元係再度被作設定,OS221係在適當之時序處而對於IO受理部210發出寫入要求。
接著,針對因應於第3LBA範圍與第4LBA範圍之間之重複關係來將第4寫入指令作中止或者是修正的具體性之動作例進行說明。
(第4LBA範圍為與第3LBA範圍相互一致的情況)
圖59,係針對「在從發行對於與第1對象邏輯頁面相對應之第3LBA範圍作了指定的第4寫入指令起直到與第4寫入指令相對應之處理完成為止的期間中,在第1對象邏輯頁面處更進一步被寫入有資料」的記憶體對映檔案247之第1例作展示。在圖59中,最初,在記憶體對映檔案247內之p~p+7之邏輯頁面中,係分別被儲存有資料X0~X7。
原本被儲存在邏輯頁面p+3(第1對象邏輯頁面)中之資料X3,係因應於由應用程式223所致之寫入要求,而被覆寫為資料Y3。在資料被作了覆寫的邏輯頁面p+3處,係被設定有壞位元。
OS221,係在特定之時序處,而對於IO受理部210要求將被設定有壞位元之邏輯頁面p+3內的資料Y3寫入至記憶體系統3中。IO受理部210,係將要求送至寫入/修整管理部212處。寫入/修整管理部212,係將邏輯頁面p+3設為禁止寫入。寫入/修整管理部212,係將與「從此時起所發行之對於與邏輯頁面p+3相對應的LBA範圍(第3LBA範圍)作了指定的第4寫入指令」相對應的關連資料作鎖死。寫入/修整管理部212,係將第4寫入指令之登錄追加至鎖死資料清單245中。因應於從寫入/修整管理部212而來之指示,指令發行部211係發行第4寫入指令。
當在從記憶體系統3而接收到針對所被發行了的第4寫入指令之第2次的完成通知之前,便藉由應用程式223而產生了針對邏輯頁面p+3(第2對象邏輯頁面)之寫入要求的情況時,由於邏輯頁面p+3係成為禁止寫入,因此,係發生插斷,並藉由OS221而被通知至寫入/修整管理部212處。接收到通知之寫入/修整管理部212,係等待「指令發行部211收訊針對第4寫入指令之第1次的完成通知,並經由寫入/修整管理部212以及IO受理部210而被通知至OS221處,OS221將邏輯頁面p+3之壞位元作清除」之發生。若是邏輯頁面p+3之壞位元被作了清除,則寫入/修整管理部212,係許可對於該頁面之寫入。之後,寫入/修整管理部212,係對於指令發行部211而要求將針對邏輯頁面p+3之寫入作中止。之後,原本被儲存在邏輯頁面p+3中之資料Y3,係因應於由應用程式223所致之寫入要求,而被覆寫為資料Z3,邏輯頁面p+3之壞位元係再度被作設定。
於此情況,「之後所被產生之寫入要求的對象之邏輯頁面p+3(第2對象邏輯頁面)」,係和「與藉由已發行且未完成之寫入指令而被作了指定的第3LBA範圍相對應之邏輯頁面p+3(第1對象邏輯頁面)」相互一致。亦即是,與「之後所被產生之寫入要求的對象之邏輯頁面p+3」相對應的LBA範圍(第4LBA範圍),係和「藉由已發行且未完成之寫入指令而被作了指定的第3LBA範圍」相互一致。
當第4LBA範圍為與第3LBA範圍相互一致的情況時,在主機2以及記憶體系統3處,係被進行有用以將該已發行且未完成之寫入指令中止之動作(中斷動作)。
圖60,係針對當第4LBA範圍為與第3LBA範圍相互一致的情況時所被實行之中斷動作之例作展示。於此,係針對「此中斷動作係為在圖57之寫入動作之後而被進行」的情況來作例示。
首先,指令發行部211,係發行用以將對於第3LBA範圍作了指定的第4寫入指令中止之中斷指令。亦即是,指令發行部211,係產生相當於用以將第4寫入指令中止之中斷指令的SQ登錄資訊。被作了發行的中斷指令,係包含有能夠辨識出進行中止之對象的第4寫入指令之資訊(例如,指令ID)。接著,指令發行部211,係將所被發行了的中斷指令(SQ登錄資訊)儲存在提交佇列242中(圖60中之(1))。
後續之與中斷指令相對應的在記憶體系統3處之動作(圖60中之(2)~(6)),係與參照圖22而於前所述之在記憶體系統3處之動作(圖22中之(2)~(6))相同。
接著,主機2之指令發行部211,係從完成佇列243而取得針對中斷指令之完成通知(圖60中之(7))。之後,指令發行部211,係將所取得之完成通知對於寫入/修整管理部212作送出(圖60中之(8))。
當完成通知係為代表中斷成功之完成通知的情況時,由於第4寫入指令係被中止,因此,寫入/修整管理部212,係將原本應因應於第4寫入指令而被作寫入之記憶體對映檔案247內的第1對象邏輯頁面之鎖死解除(圖60中之(9))。之後,寫入/修整管理部212,係將與第4寫入指令相對應之第5登錄,從鎖死資料清單245中而刪除(圖60中之(10))。
當完成通知係為代表中斷失敗之完成通知的情況時,由於第4寫入指令係並未被中止,因此,因應於第4寫入指令的寫入動作係被繼續進行。亦即是,寫入/修整管理部212,係並不將記憶體對映檔案247內之第1對象邏輯頁面之鎖死解除,並且並不將第5登錄從鎖死資料清單245中而刪除。於此情況,關於邏輯頁面p+3(第2對象邏輯頁面)之資料Y3與Z3之何者會被作寫入一事,係依存於記憶體系統3從與資料相對應之主機2之物理頁面所進行讀出的時序而並非為一定。因此,OS221,係視為Y3為被作了寫入者來進行處理。但是,由於在應用程式223將Z3作了寫入時係已被設定有壞位元,因此,OS221,係又會在特定之時序處,而對於IO受理部210要求進行此邏輯頁面內的資料之寫入。
藉由以上之中斷動作,主機2,當第4LBA範圍為與第3LBA範圍相互一致的情況時,係能夠將在記憶體系統3處之與第4寫入指令相對應之寫入中止。
具體而言,主機2,係將用以中止第4寫入要求之中斷指令,送訊至記憶體系統3處。
記憶體系統3,係從主機2而受理中斷指令,若是與第4寫入指令相對應之寫入尚未被開始,則將第4寫入指令中止。之後,記憶體系統3,係對於主機2而回送代表第4寫入指令之中斷成功的完成通知。主機2,係基於代表中斷成功的完成通知,而將對於使用者資料等之鎖死解除,並將對應於第4寫入指令之第5登錄,從鎖死資料清單245而刪除。
藉由此,在記憶體系統3處,係並不進行對應於第4寫入指令的對於NAND型快閃記憶體5之寫入。亦即是,對於「與記憶體對映檔案247內之被作了覆寫的邏輯頁面相對應之LBA範圍」之寫入,係並不會被進行。故而,係能夠降低NAND型快閃記憶體5之損耗。
(第4LBA範圍乃身為第3LBA範圍之一部分的情況)
圖61,係針對「在從發行對於與第1對象邏輯頁面相對應之第3LBA範圍作了指定的第4寫入指令起直到與第4寫入指令相對應之處理完成為止的期間中,在第1對象邏輯頁面之一部分處更進一步被寫入有資料」的記憶體對映檔案247之例作展示。在圖61中,最初,在記憶體對映檔案247內之p~p+7之邏輯頁面中,係分別被儲存有資料X0~X7。
原本被儲存在邏輯頁面p+2、p+3以及p+4(第1對象邏輯頁面)中之資料X2、X3以及X4,係因應於由應用程式223所致之寫入要求,而分別被覆寫為資料Y2、Y3以及Y4。在資料被作了覆寫的邏輯頁面p+2、p+3以及p+4之各者處,係被設定有壞位元。
OS221,係在特定之時序處,而對於IO受理部210要求將被設定有壞位元之邏輯頁面p+2、p+3以及p+4內的資料Y2、Y3以及Y4寫入至記憶體系統3中。IO受理部210,係將要求送至寫入/修整管理部212處,寫入/修整管理部212,係將邏輯頁面p+2、p+3以及p+4設為禁止寫入。寫入/修整管理部212,係將與「從此時起所發行之對於與邏輯頁面p+2、p+3以及p+4相對應的LBA範圍(第3LBA範圍)作了指定的第4寫入指令」相對應的關連資料作鎖死。之後,寫入/修整管理部212,係將第4寫入指令之登錄追加至鎖死資料清單245中。因應於從寫入/修整管理部212而來之指示,指令發行部211係發行第4寫入指令。
當在從記憶體系統3而接收到針對所被發行了的第4寫入指令之第2次的完成通知之前,便藉由應用程式223而產生了針對邏輯頁面p+2、p+3以及p+4(第1對象邏輯頁面)之中之邏輯頁面p+2(第2對象邏輯頁面)之寫入要求的情況時,由於邏輯頁面p+2係成為禁止寫入,因此,係發生插斷,並藉由OS221而被通知至寫入/修整管理部212處。接收到通知之寫入/修整管理部212,係等待「指令發行部211收訊針對第4寫入指令之第1次的完成通知,並經由寫入/修整管理部212以及IO受理部210而被通知至OS221處,OS221將邏輯頁面p+2之壞位元作清除」之發生。若是邏輯頁面p+2之壞位元被作了清除,則寫入/修整管理部212,係許可對於該頁面之寫入。之後,原本被儲存在邏輯頁面p+2中之資料Y2,係因應於由應用程式223所致之寫入要求,而被覆寫為資料Z2,邏輯頁面p+2之壞位元係再度被作設定。
於此情況,「之後所被產生之寫入要求的對象之邏輯頁面p+2(第2對象邏輯頁面)」,係身為「與藉由已發行且未完成之寫入指令而被作了指定的第3LBA範圍相對應之邏輯頁面p+2、p+3以及p+4(第1對象邏輯頁面)」之一部分。亦即是,與「之後所被產生之寫入要求的對象之邏輯頁面p+2」相對應的LBA範圍(第4LBA範圍),係身為「藉由已發行且未完成之寫入指令而被作了指定的第3LBA範圍」之一部分。更詳細而言,第4LBA範圍,係為(A)從第3LBA範圍之開頭起朝向末端而有所連續的一部分。
第4LBA範圍,係亦可為(B)從第3LBA範圍之末端起朝向開頭而有所連續的一部分。此情況,例如,在圖61所示之例中,係為「在資料Y2、Y3以及Y4被儲存在邏輯頁面p+2、p+3以及p+4中之後,被儲存在邏輯頁面p+4中之資料Y4被覆寫為資料Z4」的情況。
進而,第4LBA範圍,係亦可僅為(C)第3LBA範圍之中之並不包含開頭也不包含末端的途中之部分。此情況,例如,係如同在圖62中所示一般,為「在資料Y2、Y3以及Y4被儲存在邏輯頁面p+2、p+3以及p+4中之後,被儲存在邏輯頁面p+3中之資料Y3被覆寫為資料Z3」的情況。
當第4LBA範圍係身為第3LBA範圍之一部分的情況時,在主機2以及記憶體系統3處,係被進行有用以將該已發行且未完成之寫入指令作修正之動作(修正動作)。
圖63,係針對當第4LBA範圍係身為第3LBA範圍之一部分的情況時所被實行之修正動作之例作展示。於此,係針對「此修正動作係為在圖57之寫入動作之後而被進行」的情況來作例示。
首先,指令發行部211,係發行用以針對「對於第3LBA範圍作了指定的第4寫入指令」進行修正之修正指令。亦即是,指令發行部211,係產生相當於用以對於第4寫入指令進行修正之修正指令的SQ登錄資訊。被作了發行的修正指令,係包含有能夠辨識出進行修正之對象的第4寫入指令之資訊、和代表應使寫入被作取消的第4LBA範圍之資訊。指令發行部211,係將所被發行了的修正指令(SQ登錄資訊)儲存在提交佇列242中(圖63中之(1))。
後續之與修正指令相對應的在記憶體系統3處之動作(圖62中之(2)~(6)),係與參照圖29而於前所述之在記憶體系統3處之動作(圖29中之(2)~(6))相同。
接著,主機2之指令發行部211,係從完成佇列243而取得針對修正指令之完成通知(圖63中之(7))。之後,指令發行部211,係將所取得之完成通知對於寫入/修整管理部212作送出(圖63中之(8))。
當完成通知係為代表修正成功之完成通知的情況時,寫入/修整管理部212,係將記憶體對映檔案247內之第2對象邏輯頁面之鎖死解除(圖63中之(9))。由於第4寫入指令係被修正,因此,寫入/修整管理部212,係產生代表「藉由修正指令而被作了指定的第4LBA範圍(亦即是,使寫入被作了取消的第4LBA範圍)」之修正指令資料246(圖63中之(10))。之後,寫入/修整管理部212,係將所被產生了的修正指令資料246,登錄在對應於第4寫入指令之鎖死資料清單245內的第5登錄之修正指令資料清單中(圖63中之(11))。
另外,當第4LBA範圍係身為前述之(A)第3LBA範圍之從開頭起朝向末端而有所連續的一部分的情況時,藉由第4寫入指令而被作了指定的第3LBA範圍,係因應於修正,而以將從開頭起朝向末端而有所連續的一部分(第4LBA範圍)作除外的方式來作縮小。因此,替代「將修正指令資料246作登錄」一事,寫入/修整管理部212,係亦可構成為:在與第4寫入指令相對應之鎖死資料清單245內的第5登錄處,將SQ登錄資訊內的資料指標,以會代表「應被寫入至被作了縮小後的LBA範圍中之使用者資料之儲存場所」的方式來作更新,並且將藉由第5登錄內之SQ登錄資訊所展示的LBA範圍,以會代表被作了縮小後的LBA範圍的方式來作更新。例如,寫入/修整管理部212,係在圖2所示之SQ登錄資訊中,將LBA欄位之值作X之增加,並將資料長度欄位之值作X之減少。另外,此方法,係僅能夠在使用有PRP的情況時來作使用,而並無法在使用有SGL的情況中而作使用。
當第4LBA範圍係身為前述之(B)第3LBA範圍之從末端起朝向開頭而有所連續的一部分的情況時,藉由第4寫入指令而被作了指定的第3LBA範圍,係因應於修正,而以將從末端起朝向開頭而有所連續的一部分作除外的方式來作縮小。於此情況,亦同樣的,寫入/修整管理部212,係亦可替代「產生修正指令資料246,並將所被產生了的修正指令資料246登錄在第5登錄之修正指令資料清單中」一事,而將藉由第5登錄內之SQ登錄資訊所展現的LBA範圍,以會代表被作了縮小後的LBA範圍的方式來作更新。
當第4LBA範圍係身為前述之(B)第3LBA範圍之從末端起朝向開頭而有所連續的一部分以及(C)僅為第3LBA範圍之中之並不包含開頭也不包含末端的途中之部分,此兩者之任一者的情況時,藉由第4寫入指令而被作了指定的第3LBA範圍之開頭係並不被作變更。故而,寫入/修整管理部212,係並不對於代表「應因應於第4寫入指令而被作寫入的使用者資料」之儲存場所之資料指標進行變更。
又,當第4LBA範圍係身為(C)僅為第3LBA範圍之中之並不包含開頭也不包含末端的途中之部分的情況時,藉由第4寫入指令而被作了指定的第3LBA範圍,係因應於修正,而使途中之第4LBA範圍被作除外,並起因於此,而成為2個的LBA範圍。此2個的LBA範圍,係可根據「藉由第5登錄內之SQ登錄資訊所展示的第3LBA範圍」與「藉由所被產生了的修正指令資料246所展示之第4LBA範圍」,而特定出來。
當針對修正指令之完成通知係為代表修正失敗之完成通知的情況時,由於第4寫入指令係並未被修正,因此,與第4寫入指令相對應的寫入動作係被繼續進行。亦即是,寫入/修整管理部212,係並不產生對應於修正指令之修正指令資料246,並且並不將對應於第4寫入指令之鎖死資料清單245中之第5登錄作更新。於此情況,關於更新前之資料與更新後之資料之何者會被作寫入一事,係依存於記憶體系統3從與資料相對應之主機2之物理頁面所進行讀出的時序而並非為一定。因此,OS221,係視為更新前之資料為被作了寫入者來進行處理。但是,由於在應用程式223將更新後之資料作了寫入時係已被設定有壞位元,因此,OS221,係又會在特定之時序處,而對於IO受理部210要求進行此邏輯頁面內的資料之寫入。
藉由以上之修正動作,當第4LBA範圍係身為第3LBA範圍之一部分的情況時,若是在記憶體系統3處之與第4寫入指令相對應之寫入尚未被開始,則係能夠對於與第4寫入指令相對應之寫入進行修正。
具體而言,主機2,係將用以對於第4寫入要求進行修正之修正指令,送訊至記憶體系統3處。
記憶體系統3,係從主機2而受理修正指令,若是與第4寫入指令相對應之寫入尚未被開始,並且藉由修正指令所被作了指定的LBA範圍係為有效,則對於第4寫入指令進行修正。之後,記憶體系統3,係對於主機2而回送代表第4寫入指令之修正成功的完成通知。主機2,係基於代表修正成功的完成通知,而將針對「成為了不會被作寫入的使用者資料」之鎖死解除,並且將對應於第4寫入指令之鎖死資料清單245之登錄作更新。具體而言,主機2,例如,係因應於代表修正成功的完成通知,而產生修正指令資料246。之後,主機2,係將所被產生了的修正指令資料246,登錄在對應於第4寫入指令之鎖死資料清單245之登錄的修正指令資料清單中。
藉由此,在記憶體系統3處,對應於第4寫入指令的對於NAND型快閃記憶體5之寫入之一部分係被取消。亦即是,對於「與被作了覆寫的記憶體對映檔案247內之邏輯頁面(第2對象邏輯頁面)相對應之LBA範圍」之寫入,係並不會被進行。故而,係能夠降低NAND型快閃記憶體5之損耗。
在被作了覆寫的第2對象邏輯頁面處,係被設定有壞位元。OS221,係在應消除壞位元之下一個的時序處,而對於IO受理部210要求將第2對象邏輯頁面內的資料寫入至記憶體系統3中。藉由此,用以將第2對象邏輯頁面內之資料寫入至記憶體系統3中之新的寫入指令係被送訊至記憶體系統3處。
最終而言,在應用程式223結束了對於記憶體對映檔案247之利用之後,或者是當在應用程式223對於OS221所作了要求的時序處而於記憶體對映檔案247中仍殘留有被設定有壞位元之頁面的情況時,應用程式223或者是OS221,係對於IO受理部210,而要求將被設定有壞位元之頁面內的資料寫入至記憶體系統3中。藉由此,在記憶體對映檔案247上而被作了覆寫之資料,係被反映為所對應的記憶體系統3內之檔案,而成為具有統整性之檔案。
接著,針對在主機2以及記憶體系統3處所被實行的處理進行說明。
(在主機2處之寫入要求處理)
圖64,係為對於藉由主機2之CPU21所被實行的寫入要求處理之程序之例作展示之流程圖。寫入要求處理,係為用以使主機2對於記憶體系統3而要求「在記憶體對映檔案247處而被設定有壞位元的邏輯頁面」內之使用者資料之寫入的處理。CPU21,係在應消除壞位元之特定的時序處,而實行寫入要求處理。
首先,CPU21,係在記憶體對映檔案247中,特定出被設定有壞位元之相連續之1個以上的邏輯頁面(第1對象邏輯頁面)(步驟S1701)。
CPU21,係特定出與第1對象邏輯頁面相對應之LBA範圍(第3LBA範圍)(步驟S1702)。具體而言,CPU21,係基於在記憶體對映檔案247中之第1對象邏輯頁面之位置、和藉由OS221之檔案系統所被管理的檔案之LBA範圍,來特定出第3LBA範圍。之後,應用程式223或者是OS221,係對於驅動器222,而要求「將被儲存在第1對象邏輯頁面中之使用者資料寫入至第3LBA範圍中」(步驟S1703)。
接著,CPU21,係將第1對象邏輯頁面設為禁止寫入(步驟S1704),並將第1對象邏輯頁面之狀態鎖死(步驟S1705)。藉由此,來防止第1對象邏輯頁面被非預期性地釋放的情形。CPU21,係發行對於第3LBA範圍作了指定的「用以將被儲存在第1對象邏輯頁面中之使用者資料作寫入」的寫入指令(第4寫入指令)(步驟S1706)。
CPU21,係將對應於第4寫入指令之登錄追加至鎖死資料清單245中(步驟S1707)。所被追加之登錄,例如,係包含有對應於第4寫入指令之SQ登錄資訊、和資料區域管理資訊。對應於第4寫入指令之SQ登錄資訊,係為代表第4寫入指令之資訊。更具體而言,對應於第4寫入指令之SQ登錄資訊,係為為了使記憶體系統3實行與第4寫入指令相對應之處理而被儲存在提交佇列242中之資訊。又,對應於第4寫入指令之資料區域管理資訊,係為能夠特定出「對應於第4寫入指令之使用者資料所被儲存之記憶體對映檔案247內之記憶區域」的資訊。
接著,CPU21,係將第4寫入指令(亦即是,代表第4寫入指令之SQ登錄資訊)儲存在提交佇列242中(步驟S1708)。
另外,前述之步驟S1701~步驟S1703之處理程序,例如,係藉由實行OS221之CPU21而被實現。又,步驟S1704~步驟S1708之處理程序,例如,係藉由實行驅動器222之CPU21而被實現。
藉由以上之寫入要求處理,CPU21,係能夠特定出在記憶體對映檔案247處而被設定有壞位元的相連續之1個以上的邏輯頁面,並對於記憶體系統3而要求進行被儲存在所特定出之1個以上的邏輯頁面中之使用者資料之寫入。又,CPU21,係能夠使用鎖死資料清單245,來針對關連於對於記憶體系統3所要求了的寫入之資訊(亦即是,關連於所發行了的寫入指令之資訊)作管理。
(在主機2處之寫入要求控制處理)
圖65,係為對於藉由主機2之CPU21所被實行的寫入要求控制處理之程序之例作展示之流程圖。寫入要求控制處理,係為當「針對使寫入被作禁止之記憶體對映檔案247內之邏輯頁面,而被要求有寫入」的情況時,用以在與「已針對記憶體系統3而作了發行的寫入指令」相對應之寫入中而將正被儲存於該邏輯頁面中之使用者資料之寫入作取消的處理。於此,「當被要求有針對某一邏輯頁面之寫入的情況時,對於該邏輯頁面之寫入為被作禁止」一事,假設係代表「要求進行被儲存在該邏輯頁面中之使用者資料之寫入的寫入指令,係已針對記憶體系統3而作了發行,並且係為未完成」。CPU21,當被要求了進行對於使寫入被作禁止之邏輯頁面(第2對象邏輯頁面)之寫入的情況時,係實行寫入要求控制處理。
首先,CPU21,係特定出與第2對象邏輯頁面相對應之LBA範圍(第4LBA範圍)(步驟S1801)。具體而言,CPU21,係基於在記憶體對映檔案247中之第2對象邏輯頁面之位置、和藉由OS221之檔案系統所被管理的檔案之LBA範圍,來特定出第4LBA範圍。之後,CPU21,係在鎖死資料清單245中,而特定出對於「包含有第4LBA範圍之LBA範圍」作了指定的寫入指令之登錄(步驟S1802)。將對於「包含有第4LBA範圍之LBA範圍」作了指定的寫入指令,稱作重複寫入指令。
接著,CPU21,係判定「是否已收訊了針對重複寫入指令之第1次的完成通知」(步驟S1803)。當針對重複寫入指令而尚未收訊第1次的完成通知的情況時(步驟S1803,no),由CPU21所致之處理係回到步驟S1803處。亦即是,CPU21,係進行待機,直到收訊針對重複寫入指令之第1次的完成通知為止。
當針對重複寫入指令而已收訊了第1次的完成通知的情況時(步驟S1803,yes),CPU21,係將第2對象邏輯頁面之壞位元解除,並許可對於第2對象邏輯頁面之寫入(步驟S1804)。之後,CPU21,係判定藉由重複寫入指令所被作了指定的LBA範圍(第3LBA範圍)是否為與第4LBA範圍完全相互一致(步驟S1805)。亦即是,CPU21,係判定藉由重複寫入指令所被作了指定的第3LBA範圍是僅包含第4LBA範圍還是更進而包含有其他之LBA範圍。
當藉由重複寫入指令所被作了指定的第3LBA範圍係與第4LBA範圍完全相互一致的情況時(步驟S1805,yes),CPU21,係發行針對重複寫入指令之中斷指令(步驟S1806)。之後,CPU21,係將所發行了的中斷指令儲存於提交佇列242中(步驟S1807),並將寫入要求控制處理結束。藉由此,CPU21,係能夠對於記憶體系統3而要求將「因應於重複寫入指令而被進行的使用者資料之寫入」中止。亦即是,CPU21,係能夠對於記憶體系統3而要求「被儲存於第2對象邏輯頁面中之使用者資料之寫入」的中止。
當藉由重複寫入指令所被作了指定的第3LBA範圍係亦包含有第4LBA範圍以外之LBA範圍的情況時(步驟S1805,no),CPU21,係發行針對重複寫入指令之修正指令(步驟S1808),並將寫入要求控制處理結束。修正指令,係包含有能夠特定出重複寫入指令之資訊、和代表應使寫入被作取消的第4LBA範圍之資訊。之後,CPU21,係將所發行了的修正指令儲存於提交佇列242中(步驟S1809)。藉由此,CPU21,係能夠對於記憶體系統3而要求將「應因應於重複寫入指令而被進行的使用者資料之寫入」之中之「對應於第4LBA範圍」之寫入作取消。
藉由以上之寫入要求控制處理,CPU21,當被要求了對於記憶體對映檔案247內之禁止寫入之邏輯頁面之寫入的情況時,係能夠對於記憶體系統3,而要求至少對於與該邏輯頁面相對應之LBA範圍作了指定的未完成之寫入指令(重複寫入指令)之中止或者是修正。
具體而言,CPU21,係判定藉由重複寫入指令所被作了指定的第3LBA範圍是僅包含「與被要求有寫入的禁止寫入之邏輯頁面相對應之LBA範圍(第4LBA範圍)」還是更進而包含有其他之LBA範圍。當藉由重複寫入指令所被指定了的第3LBA範圍係僅包含有第4LBA範圍的情況時,CPU21,係對於記憶體系統3而要求該重複寫入指令之中止。當藉由重複寫入指令所被指定了的第3LBA範圍係亦包含有第4LBA範圍以外之LBA範圍的情況時,CPU21,係對於記憶體系統3而要求該重複寫入指令之修正。
藉由此,CPU21,當被產生有對於禁止寫入之邏輯頁面(第2對象邏輯頁面)之寫入要求的情況時,係能夠對於記憶體系統3,而要求與該「對於與第2對象邏輯頁面相對應之第3LBA範圍作了指定的重複寫入指令」相對應的寫入之中止,或者是要求寫入之一部分的取消。
又,在步驟S1804處,由於對於第2對象邏輯頁面之寫入係被作了許可,因此,起因於禁止寫入而被作了中斷的由應用程式223等所致之寫入要求係再度被開始,使用者資料係被覆寫至第2對象邏輯頁面處。CPU21,係檢測出該覆寫,並設定第2對象邏輯頁面之壞位元。OS221,係在應消除壞位元之下一個的時序處,而對於記憶體系統3送訊用以將第2對象邏輯頁面內的資料寫入至記憶體系統3中之新的寫入指令。
(在記憶體系統3處之寫入控制處理、中斷控制處理、修正控制處理)
在記憶體系統3處,CPU12,係實行與被儲存在提交佇列242中之寫入指令相對應的寫入控制處理。關於寫入控制處理的具體性之處理程序,係如同參考圖40之流程圖而於前所述一般。
CPU12,係實行與被儲存在提交佇列242中之中斷指令相對應的中斷控制處理。關於中斷控制處理的具體性之處理程序,係如同參考圖41之流程圖而於前所述一般。
CPU12,係實行與被儲存在提交佇列242中之修正指令相對應的修正控制處理。關於修正控制處理的具體性之處理程序,係如同參考圖42之流程圖而於前所述一般。
(在主機2處之寫入回應收訊處理、中斷回應收訊處理、修正回應收訊處理)
在主機2處,CPU21,係實行與被儲存在完成佇列243中之針對寫入指令之回應(更具體而言,第1次的完成通知、第2次的完成通知)相對應的寫入回應收訊處理。在第2實施形態之寫入回應收訊處理中,相對於參照圖43之流程圖而於前所述之寫入回應收訊處理之處理程序,係追加有「當在步驟S603處而判定第1次的完成通知係為正常回應的情況時,將所對應的記憶體對映檔案247內之邏輯頁面之壞位元清除」的處理程序。
CPU12,係實行與被儲存在完成佇列243中之針對中斷指令之回應相對應的中斷回應收訊處理。關於中斷回應收訊處理的具體性之處理程序,係如同參考圖44之流程圖而於前所述一般。
CPU12,係實行與被儲存在完成佇列243中之針對修正指令之回應相對應的修正回應收訊處理。關於修正回應收訊處理的具體性之處理程序,係如同參考圖45之流程圖而於前所述一般。
如同以上所作了說明一般,若依據第1以及第2實施形態,則係能夠減輕記憶體系統3內之非揮發性記憶體(例如,NAND型快閃記憶體5)之損耗。
寫入/修整管理部212以及指令發行部211,係將被與第1資料相互附加有關連性並且包含有相當於對於第1邏輯位址範圍作指定的第1寫入指令之資訊的第1管理資料,儲存在NVRAM24中,並進行第1寫入指令的對於記憶體系統3之第1次之送訊。寫入/修整管理部212,係因應於從記憶體系統而接收了針對第1次所被送訊的第1寫入指令之第1回應一事,而將代表已接收了針對第1次所被送訊的第1寫入指令之第1回應一事的資訊,追加至第1管理資料中。寫入/修整管理部212,在接收了第1回應之後,係因應於從記憶體系統3而接收了針對第1寫入指令之第2回應一事,而從NVRAM24來將第1資料與第1管理資料刪除。寫入/修整管理部212以及指令發行部211,當在接收針對第1寫入指令之第2回應之前,而被要求有將第2資料寫入至包含有第1邏輯位址範圍之至少一部分之第2邏輯位址範圍的第3邏輯位址範圍中、或者是被要求將第3邏輯位址範圍之分配解除的情況時,係對於記憶體系統3,而送訊將與第1寫入指令相對應之對於第1邏輯位址範圍的第1資料之寫入之中的至少對於第2邏輯位址範圍之寫入作中止的指令。寫入/修整管理部212,在對於第2邏輯位址範圍之寫入之中止為成功的情況時,係將第1管理資料作更新或者是刪除。
藉由此,當在接收針對第1寫入指令之第2回應之前,而被要求有將第2資料寫入至包含有第1邏輯位址範圍之至少一部分之第2邏輯位址範圍的第3邏輯位址範圍中、或者是被要求將第3邏輯位址範圍之分配解除的情況時,在記憶體系統3,若是與第1寫入指令相對應之對於NAND型快閃記憶體5之寫入尚未被開始,則係能夠將與第1寫入指令相對應之對於第1邏輯位址範圍的第1資料之寫入之中的至少對於第2邏輯位址範圍之寫入作中止。故而,係能夠降低NAND型快閃記憶體5之損耗。
在第1以及第2實施形態之說明中所記載之各種之功能的各者,係亦可藉由電路(處理電路)而被實現。在處理電路之例中,係包含有如同中央處理裝置(CPU) 一般之被作了程式化的處理器。此處理器,係藉由實行被儲存於記憶體中之電腦程式(命令群),而實行在本實施形態之說明中所記載的各者之功能。此處理器,係亦可為包含有電性電路之微處理器。在處理電路之例中,係亦包含有數位訊號處理器(DSP)、特殊應用積體電路(ASIC)、微控制器、控制器、其他之電性電路零件。在此些之實施形態之說明中所記載之CPU以外的其他之組件(component)之各者,係亦可藉由處理電路而被實現。
雖係針對本發明之數種實施形態作了說明,但是,該些實施形態,係僅為作為例子所提示者,而並非為對於本發明之範圍作限定者。此些之新穎的實施形態,係可藉由其他之各種形態來實施,在不脫離發明之要旨的範圍內,係可進行各種之省略、置換、變更。此些之實施形態或其變形,係亦被包含於發明之範圍或要旨中,並且亦被包含在申請專利範圍中所記載的發明及其均等範圍內。
1:資訊處理系統
2:主機
3:記憶體系統
4:控制器
5:NAND型快閃記憶體
6:DRAM
11:主機I/F
12:CPU
13:NAND I/F
14:DRAM I/F
15:計時器
21:CPU
22:RAM
23:儲存設備I/F
24:NVRAM
25:RAM I/F
26:NVRAM I/F
51:指令日誌
61:FW
62:邏輯物理位址轉換表
63:寫入管理表
64:修正指令資料
121:指令受理部
122:寫入/修整控制部
210:IO受理部
211:指令發行部
212:寫入/修整管理部
213:恢復控制部
221:OS
222:驅動器
223:應用程式
241:資料緩衝
242:提交佇列
243:完成佇列
244:指標清單
245:鎖死資料清單
246:修正指令資料
247:記憶體對映檔案
[圖1]係為對於包含有第1實施形態之資訊處理裝置與記憶體系統的資訊處理系統之構成例作展示之區塊圖。
[圖2]係為對於在第1實施形態的資訊處理裝置處所被使用之鎖死資料清單之構成例作展示之圖。
[圖3]係為對於在第1實施形態的資訊處理裝置處所被使用之邏輯位址空間與物理位址空間之間之映射之例作展示之圖。
[圖4]係為對於在第1實施形態的資訊處理裝置處所被使用之Physical Region Page(物理區域頁面,PRP)登錄(entry)之構造之例作展示之圖。
[圖5]係為對於在第1實施形態的資訊處理裝置處所被使用之PRP登錄清單之例作展示之圖。
[圖6]係為對於在第1實施形態的資訊處理裝置處所被使用之Scatter Gather List(分散聚合清單,SGL)之例作展示之圖。
[圖7]係為對於在包含有第1實施形態的資訊處理裝置之資訊處理系統處所被使用之配方(recipe)資訊之構成例作展示之圖。
[圖8]係為對於在包含有第1實施形態的資訊處理裝置之資訊處理系統處所被使用之修正指令資料之構成例作展示之圖。
[圖9]係為對於在與第1實施形態的資訊處理裝置進行通訊之記憶體系統處所被使用之邏輯物理位址轉換表之構成例作展示之圖。
[圖10]係為對於在與第1實施形態的資訊處理裝置進行通訊之記憶體系統處所被使用之寫入管理表之構成例作展示之圖。
[圖11]係為對於在包含有第1實施形態之資訊處理裝置的資訊處理系統處之寫入動作之例作展示之區塊圖。
[圖12]係為對於在第1實施形態的資訊處理裝置處之在應用程式進行了寫入要求的時間點處之邏輯位址空間以及物理位址空間之狀態之例作展示之圖。
[圖13]係為對於在第1實施形態的資訊處理裝置處之當正要將「寫入完成」對於寫入要求源頭進行通知之前所被進行的動作之例作展示之圖。
[圖14]係為對於在第1實施形態的資訊處理裝置處而被作了更新的鎖死資料清單之第1例作展示之圖。
[圖15]係為對於在第1實施形態的資訊處理裝置處而被作了更新的鎖死資料清單之第2例作展示之圖。
[圖16]係為對於在包含有第1實施形態之資訊處理裝置的資訊處理系統處之寫入動作之其他例作展示之區塊圖。
[圖17]係為對於在第1實施形態的資訊處理裝置處而被作了更新的鎖死資料清單之第3例作展示之圖。
[圖18]係為對於在第1實施形態的資訊處理裝置處之當應用程式對於被設為寫入禁止之記憶區域而嘗試了寫入後的動作之例作展示之圖。
[圖19]係為對於在包含有第1實施形態之資訊處理裝置的資訊處理系統處之寫入動作之又一其他例作展示之區塊圖。
[圖20]係為對於在第1實施形態的資訊處理裝置處之寫入要求或者是修整要求(寫入/修整要求)之例作展示之圖。
[圖21]係為對於在包含有第1實施形態之資訊處理裝置的資訊處理系統處之寫入動作之又一其他例作展示之區塊圖。
[圖22]係為對於在包含有第1實施形態之資訊處理裝置的資訊處理系統處之中斷(abort)動作之例作展示之區塊圖。
[圖23]係為對於在包含有第1實施形態的資訊處理裝置之資訊處理系統處而被作了更新的鎖死資料清單之第4例作展示之圖。
[圖24]係為對於在包含有第1實施形態之資訊處理裝置的資訊處理系統處之修整動作之例作展示之區塊圖。
[圖25]係為對於在包含有第1實施形態之資訊處理裝置的資訊處理系統處之修整動作之其他例作展示之區塊圖。
[圖26]係為對於在第1實施形態的資訊處理裝置處之寫入/修整要求之其他例作展示之圖。
[圖27]係為對於在第1實施形態的資訊處理裝置處之寫入/修整要求之又一其他例作展示之圖。
[圖28]係為對於在第1實施形態的資訊處理裝置處之寫入/修整要求之又一其他例作展示之圖。
[圖29]係為對於在包含有第1實施形態之資訊處理裝置的資訊處理系統處之修正動作之例作展示之區塊圖。
[圖30]係為對於在包含有第1實施形態的資訊處理裝置之資訊處理系統處所被產生之修正指令資料之例作展示之圖。
[圖31]係為對於在包含有第1實施形態的資訊處理裝置之資訊處理系統處而被作了更新的鎖死資料清單之第5例作展示之圖。
[圖32]係為對於在第1實施形態的資訊處理裝置處之寫入/修整要求之又一其他例作展示之圖。
[圖33]係為對於在第1實施形態的資訊處理裝置處所被發行之寫入指令之例作展示之圖。
[圖34]係為對於在第1實施形態的資訊處理裝置處所被發行之寫入指令之其他例作展示之圖。
[圖35]係為對於在包含有第1實施形態之資訊處理裝置的資訊處理系統處之寫入動作之又一其他例作展示之區塊圖。
[圖36]係為對於在包含有第1實施形態的資訊處理裝置之資訊處理系統處而被作了更新的鎖死資料清單之第6例作展示之圖。
[圖37]係為對於在包含有第1實施形態之資訊處理裝置的資訊處理系統處之回復(recovery)動作之例作展示之區塊圖。
[圖38]係為對於在第1實施形態之資訊處理裝置處所被實行的寫入要求控制處理之程序之例作展示之流程圖。
[圖39]係為對於在第1實施形態之資訊處理裝置處所被實行的寫入要求處理之程序之例作展示之流程圖。
[圖40]係為對於在與第1實施形態之資訊處理裝置進行通訊的記憶體系統處所被實行之寫入控制處理之程序之例作展示之流程圖。
[圖41]係為對於在與第1實施形態之資訊處理裝置進行通訊的記憶體系統處所被實行之中斷控制處理之程序之例作展示之流程圖。
[圖42]係為對於在與第1實施形態之資訊處理裝置進行通訊的記憶體系統處所被實行之修正控制處理之程序之例作展示之流程圖。
[圖43]係為對於在第1實施形態之資訊處理裝置處所被實行的寫入回應收訊處理之程序之例作展示之流程圖。
[圖44]係為對於在第1實施形態之資訊處理裝置處所被實行的中斷回應收訊處理之程序之例作展示之流程圖。
[圖45]係為對於在第1實施形態之資訊處理裝置處所被實行的修正回應收訊處理之程序之例作展示之流程圖。
[圖46]係為對於在第1實施形態之資訊處理裝置處所被實行的寫入要求控制處理之其他之程序之例作展示之流程圖。
[圖47]係為對於在第1實施形態之資訊處理裝置處所被實行的結合寫入要求處理之程序之例作展示之流程圖。
[圖48]係為對於在第1實施形態之資訊處理裝置處所被實行的修整要求控制處理之程序之例作展示之流程圖。
[圖49]係為對於在第1實施形態之資訊處理裝置處所被實行的修整要求處理之程序之例作展示之流程圖。
[圖50]係為對於在與第1實施形態之資訊處理裝置進行通訊的記憶體系統處所被實行之修整控制處理之程序之例作展示之流程圖。
[圖51]係為對於在第1實施形態之資訊處理裝置處所被實行的修整回應收訊處理之程序之例作展示之流程圖。
[圖52]係為對於在第1實施形態之資訊處理裝置處所被實行的回復寫入要求處理之程序之例作展示之流程圖。
[圖53]係為對於在第1實施形態之資訊處理裝置處所被實行的重複排除處理之程序之例作展示之流程圖。
[圖54]係為對於在第1實施形態之資訊處理裝置處所被實行的登錄控制處理之程序之例作展示之流程圖。
[圖55]係為對於包含有第2實施形態之資訊處理裝置與記憶體系統的資訊處理系統之構成例作展示之區塊圖。
[圖56]係為對於在第2實施形態的資訊處理裝置處之記憶體對映檔案(memory mapped file)之覆寫之例作展示之圖。
[圖57]係為對於在包含有第2實施形態之資訊處理裝置的資訊處理系統處之寫入動作之例作展示之區塊圖。
[圖58]係為對於在包含有第2實施形態之資訊處理裝置的資訊處理系統處之寫入動作之其他例作展示之區塊圖。
[圖59]係為對於在第2實施形態的資訊處理裝置處之記憶體對映檔案之第1例作展示之圖。
[圖60]係為對於在包含有第2實施形態之資訊處理裝置的資訊處理系統處之中斷動作之例作展示之區塊圖。
[圖61]係為對於在第2實施形態的資訊處理裝置處之記憶體對映檔案之第2例作展示之圖。
[圖62]係為對於在第2實施形態的資訊處理裝置處之記憶體對映檔案之第3例作展示之圖。
[圖63]係為對於在包含有第2實施形態之資訊處理裝置的資訊處理系統處之修正動作之例作展示之區塊圖。
[圖64]係為對於在第2實施形態之資訊處理裝置處所被實行的寫入要求處理之程序之例作展示之流程圖。
[圖65]係為對於在第2實施形態之資訊處理裝置處所被實行的寫入要求控制處理之程序之例作展示之流程圖。
2:主機
3:記憶體系統
5:NAND型快閃記憶體
24:NVRAM
51:指令日誌
62:邏輯物理位址轉換表
63:寫入管理表
121:指令受理部
122:寫入/修整控制部
211:指令發行部
212:寫入/修整管理部
241:資料緩衝
242:提交佇列
243:完成佇列
245:鎖死資料清單
711:第1使用者資料
712:第2使用者資料
Claims (20)
- 一種資訊處理裝置,係能夠與記憶體系統作連接,並具備有: 非揮發性記憶體;和 處理器,係構成為: 在前述非揮發性記憶體中儲存第1資料, 將被與前述第1資料相互附加有關連性並且包含有相當於對於第1邏輯位址範圍作指定的第1寫入指令之資訊的第1管理資料,儲存在前述非揮發性記憶體中, 進行前述第1寫入指令的對於前述記憶體系統之第1次的送訊, 因應於從前述記憶體系統而接收了針對前述第1次所被送訊的第1寫入指令之第1回應一事,將代表已接收了針對前述第1次所被送訊的第1寫入指令之前述第1回應一事的資訊,追加至前述第1管理資料中, 在接收了前述第1回應之後,因應於從前述記憶體系統而接收了針對前述第1寫入指令之第2回應一事,從前述非揮發性記憶體而將前述第1資料與前述第1管理資料刪除, 前述處理器,係更進而構成為: 當在接收針對前述第1寫入指令之前述第2回應之前,而被要求有將第2資料寫入至包含有前述第1邏輯位址範圍之至少一部分之第2邏輯位址範圍的第3邏輯位址範圍中、或者是被要求將前述第3邏輯位址範圍之分配解除的情況時,係對於前述記憶體系統,而送訊將與前述第1寫入指令相對應之對於前述第1邏輯位址範圍的前述第1資料之寫入之中的至少對於前述第2邏輯位址範圍之寫入作中止的指令, 在對於前述第2邏輯位址範圍之寫入之中止為成功的情況時,將前述第1管理資料作更新或者是刪除。
- 如請求項1所記載之資訊處理裝置,其中, 前述處理器,係構成為: 在接收了前述第1回應之後,因應於將前述第2回應作為針對前述第1次所被送訊的第1寫入指令之第2次的回應而從前述記憶體系統作了接收一事,而從前述非揮發性記憶體來將前述第1資料與前述第1管理資料刪除。
- 如請求項1所記載之資訊處理裝置,其中, 前述處理器,係構成為: 在接收了前述第1回應之後,進行前述第1寫入指令的對於前述記憶體系統之第2次的送訊, 因應於將前述第2回應作為針對前述第2次所被送訊的第1寫入指令之回應而從前述記憶體系統作了接收一事,而從前述非揮發性記憶體來將前述第1資料與前述第1管理資料刪除。
- 如請求項1~3中之任一項所記載之資訊處理裝置,其中, 當前述第3邏輯位址範圍為包含前述第1邏輯位址範圍之全體的情況時, 前述處理器,係更進而構成為: 當在接收針對前述第1次所被送訊的第1寫入指令之前述第2回應之前,而被要求有將前述第2資料寫入至前述第3邏輯位址範圍中的情況時, 在前述非揮發性記憶體中儲存前述第2資料, 將被與前述第2資料相互附加有關連性並且包含有相當於對於前述第3邏輯位址範圍作指定的第2寫入指令之資訊的第2管理資料,儲存在前述非揮發性記憶體中, 進行前述第2寫入指令的對於前述記憶體系統之第1次的送訊, 前述處理器,係更進而構成為: 在從前述記憶體系統而接收了針對前述第1次所被送訊的第2寫入指令之第3回應的情況時, 將代表已接收了針對前述第1次所被送訊的第2寫入指令之前述第3回應一事的資訊,追加至前述第2管理資料中, 對於前述記憶體系統,而送訊將與前述第1寫入指令相對應之對於前述第1邏輯位址範圍的前述第1資料之寫入作中止的指令, 在對於前述第1邏輯位址範圍之寫入之中止為成功的情況時,將前述第1資料與前述第1管理資料從前述非揮發性記憶體而刪除, 在接收了前述第3回應之後,因應於從前述記憶體系統而接收了針對前述第2寫入指令之第4回應一事,從前述非揮發性記憶體而將前述第2資料與前述第2管理資料刪除。
- 如請求項1所記載之資訊處理裝置,其中, 前述第1邏輯位址範圍,係包含有前述第2邏輯位址範圍、和身為與前述第2邏輯位址範圍相異的邏輯位址範圍之1個以上的第4邏輯位址範圍, 當前述第3邏輯位址範圍為包含前述第2邏輯位址範圍並且並不包含前述第4邏輯位址範圍的情況時, 前述處理器,係更進而構成為: 當在接收針對前述第1次所被送訊的第1寫入指令之前述第2回應之前,而被要求有將前述第2資料寫入至前述第3邏輯位址範圍中的情況時, 在前述非揮發性記憶體中儲存前述第2資料, 將被與前述第2資料相互附加有關連性並且包含有相當於對於前述第3邏輯位址範圍作指定的第2寫入指令之資訊的第2管理資料,儲存在前述非揮發性記憶體中, 進行前述第2寫入指令的對於前述記憶體系統之第1次的送訊, 前述處理器,係更進而構成為: 在從前述記憶體系統而接收了針對前述第1次所被送訊的第2寫入指令之第3回應的情況時, 將代表已接收了針對前述第1次所被送訊的第2寫入指令之前述第3回應一事的資訊,追加至前述第2管理資料中, 對於前述記憶體系統,而送訊將與前述第1寫入指令相對應之對於前述第1邏輯位址範圍的前述第1資料之寫入之中之對於前述第2邏輯位址範圍之寫入作中止的指令, 在對於前述第2邏輯位址範圍之寫入之中止為成功的情況時,以會使前述第1寫入指令指定前述1個以上的第4邏輯位址範圍並且並不指定前述第2邏輯位址範圍的方式,來將前述第1管理資料作更新, 在接收了前述第3回應之後,因應於從前述記憶體系統而接收了針對前述第2寫入指令之第4回應一事,從前述非揮發性記憶體而將前述第2資料與前述第2管理資料刪除。
- 如請求項5所記載之資訊處理裝置,其中, 前述處理器,係更進而構成為: 在對於前述第2邏輯位址範圍之寫入之中止為成功的情況時,以會使前述第1寫入指令指定前述1個以上的第4邏輯位址範圍並且並不指定前述第2邏輯位址範圍的方式,來將前述第1管理資料作更新。
- 如請求項1所記載之資訊處理裝置,其中, 前述第1邏輯位址範圍,係包含有前述第2邏輯位址範圍、和身為與前述第2邏輯位址範圍相異的邏輯位址範圍之1個以上的第4邏輯位址範圍, 當前述第1資料為包含有應分別被寫入至前述1個以上的第4邏輯位址範圍中之1個以上的第1資料部和應被寫入至前述第2邏輯位址範圍中之第2資料部的情況時, 前述處理器,係更進而構成為: 當在接收針對前述第1次所被送訊的第1寫入指令之前述第2回應之前,而被要求有將前述第2資料寫入至前述第3邏輯位址範圍中的情況時, 在前述非揮發性記憶體中儲存前述第2資料, 將被與前述第2資料以及前述1個以上的第1資料部相互附加有關連性並且包含有相當於對於包含前述1個以上的第4邏輯位址範圍與前述第3邏輯位址範圍之邏輯位址範圍作指定的第2寫入指令之資訊的第2管理資料,儲存在前述非揮發性記憶體中, 進行前述第2寫入指令的對於前述記憶體系統之第1次的送訊, 前述處理器,係更進而構成為: 在從前述記憶體系統而接收了針對前述第1次所被送訊的第2寫入指令之第3回應的情況時, 將代表已接收了針對前述第1次所被送訊的第2寫入指令之前述第3回應一事的資訊,追加至前述第2管理資料中, 對於前述記憶體系統,而送訊將與前述第1寫入指令相對應之對於前述第1邏輯位址範圍的前述第1資料之寫入作中止的指令, 在對於前述第1邏輯位址範圍之寫入之中止為成功的情況時,將前述第1管理資料與至少前述第2資料部從前述非揮發性記憶體而刪除, 在接收了前述第3回應之後,因應於從前述記憶體系統而接收了針對前述第2寫入指令之第4回應一事,從前述非揮發性記憶體而將前述第2資料與前述1個以上的第1資料部以及前述第2管理資料刪除。
- 如請求項4所記載之資訊處理裝置,其中, 前述處理器,係構成為: 在接收了前述第3回應之後,因應於將前述第4回應作為針對前述第1次所被送訊的第2寫入指令之第2次的回應而從前述記憶體系統作了接收一事,而從前述非揮發性記憶體來將前述第2資料與前述第2管理資料刪除。
- 如請求項4所記載之資訊處理裝置,其中, 前述處理器,係構成為: 在接收了前述第3回應之後,進行前述第2寫入指令的對於前述記憶體系統之第2次的送訊, 因應於將前述第4回應作為針對前述第2次所被送訊的第2寫入指令之回應而從前述記憶體系統作了接收一事,而從前述非揮發性記憶體來將前述第2資料與前述第2管理資料刪除。
- 如請求項1~3中之任一項所記載之資訊處理裝置,其中, 當前述第3邏輯位址範圍為包含前述第1邏輯位址範圍之全體的情況時, 前述處理器,係更進而構成為: 當在接收針對前述第1次所被送訊的第1寫入指令之前述第2回應之前,而被要求有將前述第3邏輯位址範圍之分配解除的情況時, 在前述非揮發性記憶體中儲存代表前述第3邏輯位址範圍之第3資料, 將包含有相當於對於前述第3邏輯位址範圍作指定的第1解除指令之資訊的第3管理資料,儲存在前述非揮發性記憶體中, 進行前述第1解除指令的對於前述記憶體系統之第1次的送訊, 前述處理器,係更進而構成為: 在從前述記憶體系統而接收了針對前述第1次所被送訊的第1解除指令之第5回應的情況時, 將代表已接收了針對前述第1次所被送訊的第1解除指令之前述第5回應一事的資訊,追加至前述第3管理資料中, 對於前述記憶體系統,而送訊將與前述第1寫入指令相對應之對於前述第1邏輯位址範圍的前述第1資料之寫入作中止的指令, 在對於前述第1邏輯位址範圍之寫入之中止為成功的情況時,將前述第1資料與前述第1管理資料從前述非揮發性記憶體而刪除, 在接收了前述第5回應之後,因應於從前述記憶體系統而接收了針對前述第1解除指令之第6回應一事,從前述非揮發性記憶體而將前述第3資料與前述第3管理資料刪除。
- 如請求項1~3中之任一項所記載之資訊處理裝置,其中, 前述第1邏輯位址範圍,係包含有前述第2邏輯位址範圍、和身為與前述第2邏輯位址範圍相異的邏輯位址範圍之1個以上的第4邏輯位址範圍, 當前述第3邏輯位址範圍為包含前述第2邏輯位址範圍並且並不包含前述第4邏輯位址範圍的情況時, 前述處理器,係更進而構成為: 當在接收針對前述第1次所被送訊的第1寫入指令之前述第2回應之前,而被要求有將前述第3邏輯位址範圍之分配解除的情況時, 在前述非揮發性記憶體中儲存代表前述第3邏輯位址範圍之第3資料, 將包含有相當於對於前述第3邏輯位址範圍作指定的第1解除指令之資訊的第3管理資料,儲存在前述非揮發性記憶體中, 進行前述第1解除指令的對於前述記憶體系統之第1次的送訊, 前述處理器,係更進而構成為: 在從前述記憶體系統而接收了針對前述第1次所被送訊的第1解除指令之第5回應的情況時, 將代表已接收了針對前述第1次所被送訊的第1解除指令之前述第5回應一事的資訊,追加至前述第3管理資料中, 對於前述記憶體系統,而送訊將與前述第1寫入指令相對應之對於前述第1邏輯位址範圍的前述第1資料之寫入之中之對於前述第2邏輯位址範圍之寫入作中止的指令, 在對於前述第2邏輯位址範圍之寫入之中止為成功的情況時,以會使前述第1寫入指令指定前述1個以上的第4邏輯位址範圍並且並不指定前述第2邏輯位址範圍的方式,來將前述第1管理資料作更新, 在接收了前述第5回應之後,因應於從前述記憶體系統而接收了針對前述第1解除指令之第6回應一事,從前述非揮發性記憶體而將前述第3資料與前述第3管理資料刪除。
- 如請求項11所記載之資訊處理裝置,其中, 前述處理器,係更進而構成為: 在對於前述第2邏輯位址範圍之寫入之中止為成功的情況時,以會使前述第1寫入指令指定前述1個以上的第4邏輯位址範圍並且並不指定前述第2邏輯位址範圍的方式,來將前述第1管理資料作更新。
- 如請求項10所記載之資訊處理裝置,其中, 前述處理器,係構成為: 在接收了前述第5回應之後,因應於將前述第6回應作為針對前述第1次所被送訊的第1解除指令之第2次的回應而從前述記憶體系統作了接收一事,而從前述非揮發性記憶體來將前述第3資料與前述第3管理資料刪除。
- 如請求項10所記載之資訊處理裝置,其中, 前述處理器,係構成為: 在接收了前述第5回應之後,進行前述第1解除指令的對於前述記憶體系統之第2次的送訊, 因應於將前述第6回應作為針對前述第2次所被送訊的第1解除指令之回應而從前述記憶體系統作了接收一事,而從前述非揮發性記憶體來將前述第3資料與前述第3管理資料刪除。
- 一種資訊處理裝置,係能夠與記憶體系統作連接,並具備有: 非揮發性記憶體;和 處理器, 該處理器,係構成為: 將被儲存在第1邏輯位址範圍中之1個以上的第1資料部,從前述記憶體系統而讀出, 在前述非揮發性記憶體中儲存所被讀出的前述1個以上的第1資料部, 在使被儲存於前述非揮發性記憶體中之前述1個以上的第1資料部之中之相連續之1個以上的第2資料部被作了覆寫之後, 將被與前述1個以上的第2資料部相互附加有關連性並且包含有相當於對於與前述1個以上的第2資料部相對應之第2邏輯位址範圍作指定的第1寫入指令之資訊的第1管理資料,儲存在前述非揮發性記憶體中, 進行前述第1寫入指令的對於前述記憶體系統之第1次的送訊, 因應於從前述記憶體系統而接收了針對前述第1次所被送訊的第1寫入指令之第1回應一事,將代表已接收了針對前述第1次所被送訊的第1寫入指令之前述第1回應一事的資訊,追加至前述第1管理資料中, 在接收了前述第1回應之後,因應於從前述記憶體系統而接收了針對前述第1寫入指令之第2回應一事,從前述非揮發性記憶體而將前述第1管理資料刪除, 前述處理器,係更進而構成為: 當在接收前述第2回應之前,而前述1個以上的第2資料部之中之第3資料部被作了覆寫的情況時,對於前述記憶體系統,而送訊將與前述第1寫入指令相對應之對於前述第2邏輯位址範圍的前述1個以上的第2資料部之寫入之中的對於與前述第3資料部相對應之第3邏輯位址範圍之寫入作中止的指令, 在對於前述第3邏輯位址範圍之寫入之中止為成功的情況時,將前述第1管理資料作更新或者是刪除。
- 如請求項15所記載之資訊處理裝置,其中, 前述處理器,係構成為: 在接收了前述第1回應之後,因應於將前述第2回應作為針對前述第1次所被送訊的第1寫入指令之第2次的回應而從前述記憶體系統作了接收一事,而從前述非揮發性記憶體來將前述第1管理資料刪除。
- 如請求項15所記載之資訊處理裝置,其中, 前述處理器,係構成為: 在接收了前述第1回應之後,進行前述第1寫入指令的對於前述記憶體系統之第2次的送訊, 因應於將前述第2回應作為針對前述第2次所被送訊的第1寫入指令之回應而從前述記憶體系統作了接收一事,而從前述非揮發性記憶體來將前述第1管理資料刪除。
- 如請求項15~17中之任一項所記載之資訊處理裝置,其中, 當前述第3資料部為包含前述1個以上的第2資料部之全體的情況時, 前述處理器,係構成為: 在對於前述第3邏輯位址範圍之寫入之中止為成功的情況時,將前述第1管理資料從前述非揮發性記憶體而刪除。
- 如請求項15~17中之任一項所記載之資訊處理裝置,其中, 當前述第3資料部係包含前述1個以上的第2資料部之開頭之資料部與末端之資料部之其中一者,而前述第2邏輯位址範圍為包含前述第3邏輯位址範圍與第4邏輯位址範圍的情況時, 前述處理器,係更進而構成為: 在對於前述第3邏輯位址範圍之寫入之中止為成功的情況時,以會使前述第1寫入指令並不指定前述第3邏輯位址範圍並被與前述1個以上的第2資料部之中之對應於前述第4邏輯位址範圍之資料部相互附加關連性並且指定前述第4邏輯位址範圍的方式,來將前述第1管理資料作更新。
- 如請求項15~17中之任一項所記載之資訊處理裝置,其中, 當前述第3資料部係並不包含前述1個以上的第2資料部之開頭之資料部與末端之資料部之任一者,而前述第2邏輯位址範圍為包含前述第3邏輯位址範圍與1個以上的第4邏輯位址範圍的情況時, 前述處理器,係更進而構成為: 在對於前述第3邏輯位址範圍之寫入之中止為成功的情況時,以會使前述第1寫入指令並不指定前述第3邏輯位址範圍並被與前述1個以上的第2資料部之中之對應於前述1個以上的第4邏輯位址範圍之資料部相互附加關連性並且指定前述1個以上的第4邏輯位址範圍的方式,來將前述第1管理資料作更新。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2022-040562 | 2022-03-15 | ||
JP2022040562A JP2023135390A (ja) | 2022-03-15 | 2022-03-15 | 情報処理装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
TWI815622B true TWI815622B (zh) | 2023-09-11 |
TW202338841A TW202338841A (zh) | 2023-10-01 |
Family
ID=87995135
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
TW111131703A TWI815622B (zh) | 2022-03-15 | 2022-08-23 | 資訊處理裝置 |
Country Status (4)
Country | Link |
---|---|
US (1) | US20230297246A1 (zh) |
JP (1) | JP2023135390A (zh) |
CN (1) | CN116775504A (zh) |
TW (1) | TWI815622B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20230297236A1 (en) * | 2022-03-17 | 2023-09-21 | Lenovo Global Technology (United States) Inc. | Far memory direct caching |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9507711B1 (en) * | 2015-05-22 | 2016-11-29 | Sandisk Technologies Llc | Hierarchical FTL mapping optimized for workload |
TWI664529B (zh) * | 2016-04-14 | 2019-07-01 | 美光科技公司 | 記憶體裝置及其操作方法及記憶體系統 |
TWI712881B (zh) * | 2018-03-26 | 2020-12-11 | 日商東芝記憶體股份有限公司 | 電子機器及其控制方法、電腦系統及其控制方法以及主機之控制方法 |
US11157342B2 (en) * | 2018-04-06 | 2021-10-26 | Samsung Electronics Co., Ltd. | Memory systems and operating methods of memory systems |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP6194784B2 (ja) * | 2013-12-13 | 2017-09-13 | 富士通株式会社 | ストレージ制御装置、制御方法および制御プログラム |
US10402107B2 (en) * | 2017-12-13 | 2019-09-03 | International Business Machines Corporation | Determining tracks to release in a source volume being copied to a target volume |
US11233874B2 (en) * | 2018-08-06 | 2022-01-25 | Vmware, Inc. | Ordinary write in distributed system maintaining data storage integrity |
JP2022052484A (ja) * | 2020-09-23 | 2022-04-04 | 富士通株式会社 | ストレージ装置及びストレージ制御方法 |
-
2022
- 2022-03-15 JP JP2022040562A patent/JP2023135390A/ja active Pending
- 2022-08-23 TW TW111131703A patent/TWI815622B/zh active
- 2022-09-07 US US17/939,150 patent/US20230297246A1/en active Pending
- 2022-09-09 CN CN202211107056.8A patent/CN116775504A/zh active Pending
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9507711B1 (en) * | 2015-05-22 | 2016-11-29 | Sandisk Technologies Llc | Hierarchical FTL mapping optimized for workload |
TWI664529B (zh) * | 2016-04-14 | 2019-07-01 | 美光科技公司 | 記憶體裝置及其操作方法及記憶體系統 |
TWI712881B (zh) * | 2018-03-26 | 2020-12-11 | 日商東芝記憶體股份有限公司 | 電子機器及其控制方法、電腦系統及其控制方法以及主機之控制方法 |
US11157342B2 (en) * | 2018-04-06 | 2021-10-26 | Samsung Electronics Co., Ltd. | Memory systems and operating methods of memory systems |
Also Published As
Publication number | Publication date |
---|---|
US20230297246A1 (en) | 2023-09-21 |
JP2023135390A (ja) | 2023-09-28 |
CN116775504A (zh) | 2023-09-19 |
TW202338841A (zh) | 2023-10-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10725878B2 (en) | Storage apparatus, storage system, and control method of storage system for dynamically securing free space when a storage apparatus is disused | |
JP3704573B2 (ja) | クラスタシステム | |
JP4250914B2 (ja) | 記憶装置システム | |
US9563636B2 (en) | Allowing writes to complete without obtaining a write lock to a file | |
JP6441171B2 (ja) | メモリシステム | |
JP4295333B2 (ja) | データベースの制御方法及びプログラム | |
TW201205286A (en) | Controller, data storage device, and program product | |
JP6398102B2 (ja) | メモリシステム | |
JP2006127106A (ja) | ストレージシステム及びその制御方法 | |
CN102073739A (zh) | 带有快照功能的分布式文件系统中的数据读与数据写方法 | |
TWI815622B (zh) | 資訊處理裝置 | |
TWI812012B (zh) | 資訊處理裝置 | |
JP6197816B2 (ja) | ストレージシステム、ストレージの管理方法、及び、コンピュータ・プログラム | |
TWI787848B (zh) | 記憶體系統 | |
JP2005276158A (ja) | ストレージシステム、計算機システムまたは記憶領域の属性設定方法 | |
US9111114B1 (en) | Method of transforming database system privileges to object privileges | |
JPH07319627A (ja) | 外部記憶装置 | |
EP3136245A1 (en) | Computer | |
JP2009123187A (ja) | ストレージシステム | |
JP5665518B2 (ja) | データベースシステム、その情報処理方法、およびそのプログラム | |
JP2004295272A (ja) | トランザクション制御方法 | |
JP6675466B2 (ja) | メモリシステム | |
US11531474B1 (en) | Storage system and data replication method in storage system | |
US20240176520A1 (en) | Storage system and storage control method | |
JP6202026B2 (ja) | データ管理装置、データ管理方法およびデータ管理プログラム |