KR102541897B1 - 메모리 시스템 - Google Patents

메모리 시스템 Download PDF

Info

Publication number
KR102541897B1
KR102541897B1 KR1020180100118A KR20180100118A KR102541897B1 KR 102541897 B1 KR102541897 B1 KR 102541897B1 KR 1020180100118 A KR1020180100118 A KR 1020180100118A KR 20180100118 A KR20180100118 A KR 20180100118A KR 102541897 B1 KR102541897 B1 KR 102541897B1
Authority
KR
South Korea
Prior art keywords
write
transaction
write data
buffer
controller
Prior art date
Application number
KR1020180100118A
Other languages
English (en)
Other versions
KR20200023757A (ko
Inventor
최해기
Original Assignee
에스케이하이닉스 주식회사
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 에스케이하이닉스 주식회사 filed Critical 에스케이하이닉스 주식회사
Priority to KR1020180100118A priority Critical patent/KR102541897B1/ko
Priority to US16/377,741 priority patent/US11182285B2/en
Priority to CN201910604144.0A priority patent/CN110865770B/zh
Publication of KR20200023757A publication Critical patent/KR20200023757A/ko
Priority to US17/516,280 priority patent/US11782825B2/en
Application granted granted Critical
Publication of KR102541897B1 publication Critical patent/KR102541897B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input 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/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0655Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
    • G06F3/0658Controller construction arrangements
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/023Free address space management
    • G06F12/0238Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory
    • G06F12/0246Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory in block erasable memory, e.g. flash memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input 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/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0673Single storage device
    • G06F3/0679Non-volatile semiconductor memory device, e.g. flash memory, one time programmable memory [OTP]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0891Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches using clearing, invalidating or resetting means
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/16Handling requests for interconnection or transfer for access to memory bus
    • G06F13/1668Details of memory controller
    • G06F13/1689Synchronisation and timing concerns
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input 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/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/0604Improving or facilitating administration, e.g. storage management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input 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/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/061Improving I/O performance
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input 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/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/061Improving I/O performance
    • G06F3/0613Improving I/O performance in relation to throughput
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input 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/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/0626Reducing size or complexity of storage systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input 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/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0629Configuration or reconfiguration of storage systems
    • G06F3/0631Configuration or reconfiguration of storage systems by allocating resources to storage systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input 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/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0638Organizing or formatting or addressing of data
    • G06F3/064Management of blocks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input 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/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0646Horizontal data movement in storage systems, i.e. moving data in between storage devices or systems
    • G06F3/0652Erasing, e.g. deleting, data cleaning, moving of data to a wastebasket
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input 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/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0655Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
    • G06F3/0656Data buffering arrangements
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input 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/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0655Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
    • G06F3/0659Command handling arrangements, e.g. command buffers, queues, command scheduling
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input 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/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0673Single storage device
    • G06F3/068Hybrid storage device
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input 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/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0683Plurality of storage devices
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/72Details relating to flash memory management
    • G06F2212/7203Temporary buffering, e.g. using volatile buffer or dedicated buffer blocks
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

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)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

본 기술은 비휘발성 메모리 장치; 호스트에서 입력된 라이트 데이터들을 임시로 저장하기 위한 휘발성 메모리; 및 호스트로부터, 트랜젝션(transaction)으로 그룹화되지 않은 노말 라이트 데이터들이 입력되는 것에 응답하여 노말 라이트 버퍼를 휘발성 메모리에 할당하고, 제1 트랜젝션으로 그룹화된 제1 라이트 데이터들 및 제1 트랜젝션의 커밋(commit)이 완료될 때까지 필요한 제1 전체크기정보가 입력되는 것에 응답하여 제1 라이트 버퍼를 휘발성 메모리에 할당하며, 제2 트랜젝션으로 그룹화된 제2 라이트 데이터들 및 제2 트랜젝션의 커밋이 완료될 때까지 필요한 제2 전체크기정보가 입력되는 것에 응답하여 제2 라이트 버퍼를 휘발성 메모리에 할당하는 컨트롤러를 포함하는 메모리 시스템에 있어서, 컨트롤러는, 제1 및 제2 전체크기정보 각각에 응답하여 제1 및 제2 라이트 버퍼의 크기를 각각 가변하는 형태로 관리하고, 노말 라이트 버퍼의 크기를 설정된 크기로 고정하는 형태로 관리한다.

Description

메모리 시스템{MEMORY SYSTEM}
본 발명은 메모리 시스템에 관한 것으로서, 구체적으로 트랜젝션(transaction)으로 그룹화되는 다수의 라이트 데이터들을 저장하는 메모리 시스템에 관한 것이다.
최근 컴퓨터 환경에 대한 패러다임(paradigm)이 언제, 어디서나 컴퓨터 시스템을 사용할 수 있도록 하는 유비쿼터스 컴퓨팅(ubiquitous computing)으로 전환되고 있다. 이로 인해 휴대폰, 디지털 카메라, 노트북 컴퓨터 등과 같은 휴대용 전자 장치의 사용이 급증하고 있다. 이와 같은 휴대용 전자 장치는 일반적으로 메모리 장치를 이용하는 메모리 시스템, 다시 말해 데이터 저장 장치를 사용한다. 데이터 저장 장치는 휴대용 전자 장치의 주 기억 장치 또는 보조 기억 장치로 사용된다.
메모리 장치를 이용한 데이터 저장 장치는 기계적인 구동부가 없어서 안정성 및 내구성이 뛰어나며, 또한 정보의 액세스 속도가 매우 빠르고 전력 소모가 적다는 장점이 있다. 이러한 장점을 갖는 메모리 시스템의 일 예로 데이터 저장 장치는, USB(Universal Serial Bus) 메모리 장치, 다양한 인터페이스를 갖는 메모리 카드, 솔리드 스테이트 드라이브(SSD: Solid State Drive) 등을 포함한다.
본 발명의 실시예는 트랜젝션(transaction)으로 그룹화된 다수의 라이트 데이터들을 효과적으로 관리할 수 있는 메모리 시스템을 제공한다.
본 발명의 실시예에 따른 메모리 시스템은, 비휘발성 메모리 장치; 호스트에서 입력된 라이트 데이터들을 임시로 저장하기 위한 휘발성 메모리; 및 상기 호스트로부터, 트랜젝션(transaction)으로 그룹화되지 않은 노말 라이트 데이터들이 입력되는 것에 응답하여 노말 라이트 버퍼를 상기 휘발성 메모리에 할당하고, 제1 트랜젝션으로 그룹화된 제1 라이트 데이터들 및 상기 제1 트랜젝션의 커밋(commit)이 완료될 때까지 필요한 제1 전체크기정보가 입력되는 것에 응답하여 제1 라이트 버퍼를 상기 휘발성 메모리에 할당하며, 제2 트랜젝션으로 그룹화된 제2 라이트 데이터들 및 상기 제2 트랜젝션의 커밋이 완료될 때까지 필요한 제2 전체크기정보가 입력되는 것에 응답하여 제2 라이트 버퍼를 상기 휘발성 메모리에 할당하는 컨트롤러를 포함할 수 있다. 또한, 상기 컨트롤러는, 상기 제1 및 제2 전체크기정보 각각에 응답하여 상기 제1 및 제2 라이트 버퍼의 크기를 각각 가변하는 형태로 관리하고, 상기 노말 라이트 버퍼의 크기를 설정된 크기로 고정하는 형태로 관리할 수 있다.
또한, 상기 컨트롤러는, 상기 제1 전체크기정보에 응답하여 상기 제1 라이트 데이터가 커밋될 때까지 필요한 제1 예정크기를 확인한 뒤, 확인된 제1 예정크기만큼을 상기 제1 라이트 버퍼로서 상기 휘발성 메모리에서 할당하며, 상기 제2 전체크기정보에 응답하여 상기 제2 라이트 데이터가 커밋될 때까지 필요한 제2 예정크기를 확인한 뒤, 확인된 제2 예정크기만큼을 상기 제2 라이트 버퍼로서 상기 휘발성 메모리에서 할당할 수 있다.
또한, 상기 컨트롤러는, 상기 제1 라이트 버퍼에 저장된 상기 제1 라이트 데이터들에 대해 상기 제1 트랜젝션의 커밋/어보트(abort) 여부를 확인하며, 확인결과 커밋된 경우, 상기 제1 라이트 버퍼에 대한 제1 플러시(flush)동작을 수행하여 상기 제1 라이트 버퍼에 저장된 상기 제1 라이트 데이터들을 상기 비휘발성 메모리 장치에 저장하는 제1 라이트동작을 수행한 뒤, 상기 제1 라이트 버퍼를 상기 휘발성 메모리에서 릴리즈(release)하고, 확인결과 어보트된 경우, 상기 제1 라이트 버퍼를 상기 휘발성 메모리에서 릴리즈할 수 있다.
또한, 상기 컨트롤러는, 상기 제2 라이트 버퍼에 저장된 상기 제2 라이트 데이터들에 대해 상기 제2 트랜젝션의 커밋/어보트(abort) 여부를 확인하며, 확인결과 커밋된 경우, 상기 제2 라이트 버퍼에 대한 제2 플러시동작을 수행하여 상기 제2 라이트 버퍼에 저장된 상기 제2 라이트 데이터들을 상기 비휘발성 메모리 장치에 저장하는 제2 라이트동작을 수행한 뒤, 상기 제2 라이트 버퍼를 상기 휘발성 메모리에서 릴리즈하고, 확인결과 어보트된 경우, 상기 제2 라이트 버퍼를 상기 휘발성 메모리에서 릴리즈할 수 있다.
또한, 상기 컨트롤러는, 상기 제1 트랜젝션의 커밋이 확인된 시점과 상기 제2 트랜젝션의 커밋이 확인된 시점이 설정된 제1 시간간격 이내인 경우, 상기 제1 플러시동작의 수행시작시점 및 제2 플러시동작의 수행시작시점을 서로 동기화(Synchronize)시킬 수 있다.
또한, 상기 컨트롤러는, 상기 제1 플러시동작의 수행시작시점 및 제2 플러시동작의 수행시작시점이 동기화된 경우, 상기 제1 라이트동작의 수행완료에 대응하는 제1 확인(ack)신호를 상기 호스트로 전달하는 시점 및 상기 제2 라이트동작의 수행완료에 대응하는 제2 확인신호를 상기 호스트로 전달하는 시점을 서로 동기화시킬 수 있다.
또한, 상기 컨트롤러는, 상기 제1 플러시동작의 수행시작시점 및 제2 플러시동작의 수행시작시점이 동기화된 상태에서, 상기 제1 라이트동작의 수행완료에 대응하는 제1 확인(ack)신호가 생성되는 시점 및 상기 제2 라이트동작의 수행완료에 대응하는 제2 확인신호가 생성되는 시점이 설정된 제2 시간간격 이내인 경우, 상기 제1 확인신호를 상기 호스트로 전달하는 시점 및 상기 제2 확인신호를 상기 호스트로 전달하는 시점을 서로 동기화시킬 수 있다.
또한, 상기 컨트롤러는, 상기 라이트 데이터들 각각에 대응하는 다수의 라이트 커맨드들을 상기 호스트로부터 입력받으며, 상기 라이트 커맨드들 각각에는, 그에 대응하는 상기 라이트 데이터들 각각의 트랜젝션정보가 포함되고, 상기 라이트 데이터들 각각의 트랜젝션정보에는, 트랜젝션 아이디(IDentify)정보와, 커밋정보, 및 어보트정보가 포함되며, 상기 제1 라이트 데이터들 중 제1 트랜젝션 시작데이터에 대응하는 상기 라이트 커맨드에는, 상기 제1 전체크기정보가 더 포함되고, 상기 제2 라이트 데이터들 중 제2 트랜젝션 시작데이터에 대응하는 상기 라이트 커맨드에는, 상기 제2 전체크기정보가 더 포함될 수 있다.
또한, 상기 컨트롤러는, 상기 라이트 데이터들 각각의 트랜젝션정보 중 트랜젝션 아이디(IDentity)정보를 확인하여, 트랜젝션 아이디정보가 제1 값으로 설정되어 상기 제1 트랜젝션으로 그룹화된 상기 제1 라이트 데이터들이 확인되는 경우, 상기 제1 라이트 버퍼를 상기 휘발성 메모리에 할당하여 상기 제1 라이트 데이터들을 저장하고, 트랜젝션 아이디정보가 제2 값으로 설정되어 상기 제2 트랜젝션으로 그룹화된 상기 제2 라이트 데이터들이 확인되는 경우, 상기 제2 라이트 버퍼를 상기 휘발성 메모리에 할당하여 상기 제2 라이트 데이터들을 저장하며, 트랜젝션 아이디정보가 설정되지 않아 트랜젝션으로 그룹화되지 않은 상기 노말 라이트 데이터들이 확인되는 경우, 상기 노말 라이트 버퍼를 상기 휘발성 메모리에 할당하여 상기 노말 라이트 데이터를 저장할 수 있다.
본 발명의 또 다른 실시예에 따른 메모리 시스템은, 비휘발성 메모리 장치; 호스트에서 입력된 라이트 데이터들을 임시로 저장하기 위한 휘발성 메모리; 및 각각 미리 정의된 크기를 갖는 다수의 라이트 버퍼를 상기 휘발성 메모리에 할당한 뒤, 상기 호스트로부터 입력되는 트랜젝션으로 그룹화되지 않은 노말 라이트 데이터들을 트랜젝션 전용으로 설정되지 않은 상기 라이트 버퍼들에 저장하는 컨트롤러를 포함할 수 있다. 또한, 상기 컨트롤러는, 제1 트랜젝션(transaction)으로 그룹화된 제1 라이트 데이터들 및 커밋(commit)이 완료될 때까지 필요한 제1 전체크기정보가 상기 호스트로부터 입력될 때, 상기 제1 전체크기정보에 응답하여 상기 라이트 버퍼들 중 적어도 하나의 제1 라이트 버퍼를 상기 제1 트랜젝션을 위해 전용(exclusive use)하기 위한 제1 전용옵션을 설정(set)할 수 있다.
또한, 상기 컨트롤러는, 상기 제1 라이트 데이터들이 상기 호스트로부터 입력되는 시점에서 상기 라이트 버퍼들 각각의 빈(empty)공간을 확인한 뒤, 확인된 빈공간 및 상기 제1 전체크기정보에 응답하여 상기 라이트 버퍼들 중 조합 가능한 최소개수의 라이트 버퍼에 대해 상기 제1 전용옵션을 설정하여 상기 제1 라이트 버퍼로서 사용할 수 있다.
또한, 상기 컨트롤러는, 제2 트랜젝션으로 그룹화된 제2 라이트 데이터들 및 커밋이 완료될 때까지 필요한 제2 전체크기정보가 상기 호스트로부터 입력될 때, 상기 제2 전체크기정보에 응답하여 상기 라이트 버퍼들에서 상기 제1 라이트 버퍼를 제외한 나머지 버퍼들 중 적어도 하나의 제2 라이트 버퍼를 상기 제2 트랜젝션을 위해 전용하기 위한 제2 전용옵션을 설정할 수 있다.
또한, 상기 컨트롤러는, 상기 제2 라이트 데이터들이 상기 호스트로부터 입력되는 시점에서 상기 나머지 버퍼들 각각의 빈공간을 확인한 뒤, 확인된 빈공간 및 상기 제2 전체크기정보에 응답하여 상기 나머지 버퍼들 중 조합 가능한 최소개수의 라이트 버퍼에 대해 상기 제2 전용옵션을 설정하여 상기 제2 라이트 버퍼로서 사용할 수 있다.
또한, 상기 컨트롤러는, 상기 제1 라이트 버퍼에 저장된 상기 제1 라이트 데이터들에 대해 상기 제1 트랜젝션의 커밋/어보트(abort) 여부를 확인하며, 확인결과 커밋된 경우, 상기 제1 라이트 버퍼에 대한 제1 플러시(flush)동작을 수행하여 상기 제1 라이트 버퍼에 저장된 상기 제1 라이트 데이터들을 상기 비휘발성 메모리 장치에 저장하는 제1 라이트동작을 수행한 뒤, 상기 제1 라이트 버퍼에 대한 상기 제1 전용옵션을 리셋(reset)하고, 확인결과 어보트된 경우, 상기 제1 라이트 버퍼에 저장된 상기 제1 라이트 데이터들을 디스카드(discard)시킨 뒤, 상기 제1 라이트 버퍼에 대한 상기 제1 전용옵션을 리셋할 수 있다.
또한, 상기 컨트롤러는, 상기 제2 라이트 버퍼에 저장된 상기 제2 라이트 데이터들에 대해 상기 제2 트랜젝션의 커밋/어보트(abort) 여부를 확인하며, 확인결과 커밋된 경우, 상기 제2 라이트 버퍼에 대한 제2 플러시동작을 수행하여 상기 제2 라이트 버퍼에 저장된 상기 제2 라이트 데이터들을 상기 비휘발성 메모리 장치에 저장하는 제2 라이트동작을 수행한 뒤, 상기 제2 라이트 버퍼에 대한 상기 제2 전용옵션을 리셋하고, 확인결과 어보트된 경우, 상기 제2 라이트 버퍼에 저장된 상기 제2 라이트 데이터들을 디스카드시킨 뒤, 상기 제2 라이트 버퍼에 대한 상기 제2 전용옵션을 리셋할 수 있다.
또한, 상기 컨트롤러는, 상기 제1 트랜젝션의 커밋이 확인된 시점과 상기 제2 트랜젝션의 커밋이 확인된 시점이 설정된 제1 시간간격 이내인 경우, 상기 제1 플러시동작의 수행시작시점 및 제2 플러시동작의 수행시작시점을 서로 동기화(Synchronize)시킬 수 있다.
또한, 상기 컨트롤러는, 상기 제1 플러시동작의 수행시작시점 및 제2 플러시동작의 수행시작시점이 동기화된 경우, 상기 제1 라이트동작의 수행완료에 대응하는 제1 확인(ack)신호를 상기 호스트로 전달하는 시점 및 상기 제2 라이트동작의 수행완료에 대응하는 제2 확인신호를 상기 호스트로 전달되는 시점을 서로 동기화시킬 수 있다.
또한, 상기 컨트롤러는, 상기 제1 플러시동작의 수행시작시점 및 제2 플러시동작의 수행시작시점이 동기화된 상태에서, 상기 제1 라이트동작의 수행완료에 대응하는 제1 확인(ack)신호가 생성되는 시점 및 상기 제2 라이트동작의 수행완료에 대응하는 제2 확인신호가 생성되는 시점이 설정된 제2 시간간격 이내인 경우, 상기 제1 확인신호를 상기 호스트로 전달하는 시점 및 상기 제2 확인신호를 상기 호스트로 전달하는 시점을 서로 동기화시킬 수 있다.
또한, 상기 컨트롤러는, 상기 라이트 데이터들 각각에 대응하는 다수의 라이트 커맨드들을 상기 호스트로부터 입력받으며, 상기 라이트 커맨드들 각각에는, 그에 대응하는 상기 라이트 데이터들 각각의 트랜젝션정보가 포함되고, 상기 라이트 데이터들 각각의 트랜젝션정보에는, 트랜젝션 아이디(IDentify)정보와, 커밋정보, 및 어보트정보가 포함되며, 상기 제1 라이트 데이터들 중 제1 트랜젝션 시작데이터에 대응하는 상기 라이트 커맨드에는, 상기 제1 전체크기정보가 더 포함되고, 상기 제2 라이트 데이터들 중 제2 트랜젝션 시작데이터에 대응하는 상기 라이트 커맨드에는, 상기 제2 전체크기정보가 더 포함될 수 있다.
또한, 상기 컨트롤러는, 상기 라이트 데이터들 각각의 트랜젝션정보 중 트랜젝션 아이디(IDentity)정보를 확인하여, 트랜젝션 아이디정보가 제1 값으로 설정되어 상기 제1 트랜젝션으로 그룹화된 상기 제1 라이트 데이터들이 확인되는 경우, 상기 라이트 버퍼들 중 상기 제1 라이트 버퍼를 설정하여 상기 제1 라이트 데이터들을 저장하고, 트랜젝션 아이디정보가 제2 값으로 설정되어 상기 제2 트랜젝션으로 그룹화된 상기 제2 라이트 데이터들이 확인되는 경우, 상기 나머지 버퍼들 중 상기 제2 라이트 버퍼를 설정하여 상기 제2 라이트 데이터들을 저장하며, 트랜젝션 아이디정보가 설정되지 않아 트랜젝션으로 그룹화되지 않은 노말 라이트 데이터들이 확인되는 경우, 상기 라이트 버퍼들 중 상기 제1 및 제2 라이트 버퍼를 제외한 나머지 라이트 버퍼들에 저장할 수 있다.
본 기술은 호스트로부터 트랜젝션(transaction)으로 그룹화된 라이트 데이터들이 입력될 때, 트랜젝션 전용 라이트 버퍼를 휘발성 메모리에 할당한다. 이때, 트랜젝션 전용 라이트 버퍼는 노말 라이트 데이터들을 관리하기 위한 노말 라이트 버퍼와는 구분될 수 있다. 이를 통해, 트랜젝션 라이트 데이터들을 효과적으로 관리할 수 있다.
또한, 적어도 두 개 이상의 트랜젝션이 커밋(commit)되는 것에 응답하여 적어도 두 개 이상의 트랜젝션 전용 라이트 버퍼에서 각각 수행되어야 하는 플러시(flush)동작이 수행되는 시점을 가능한 범위에서 최대한 동기화(Synchronize)시켜준다. 이를 통해, 트랜젝션 데이터의 원자성(atomicity)을 유지하기 위한 알고리즘이 단순해지는 효과를 기대할 수 있다.
또한, 적어도 두 개 이상의 트랜젝션 전용 라이트 버퍼가 플러시되는 것에 응답하여 호스트로 전송되어야 하는 적어도 두 개 이상의 확인(ack)신호가 호스트로 전송되는 시점을 가능한 범위에서 최대한 동기화시켜준다. 이를 통해, 메모리 시스템에서 호스트로 확인신호를 전송하는 횟수를 최소화시키는 효과를 기대할 수 있다.
도 1 및 도 2는 본 발명의 제1 실시예에 따른 메모리 시스템을 포함하는 데이터 처리 시스템의 구성을 설명하기 위해 도시한 도면.
도 3a 내지 도 3d 및 도 4a 내지 도 4d는 본 발명의 제1 실시예에 따른 메모리 시스템의 동작을 설명하기 위해 도시한 도면.
도 5a 내지 도 5c는 본 발명의 제1 실시예에 따른 메모리 시스템의 동작을 설명하기 위해 도시한 순서도.
도 6 및 도 7은 본 발명의 제2 실시예에 따른 메모리 시스템을 포함하는 데이터 처리 시스템의 구성을 설명하기 위해 도시한 도면.
도 8a 내지 도 8e 및 도 9a 내지 도 9d는 본 발명의 제2 실시예에 따른 메모리 시스템의 동작을 설명하기 위해 도시한 도면.
도 10a 내지 도 10c는 본 발명의 제2 실시예에 따른 메모리 시스템의 동작을 설명하기 위해 도시한 순서도.
이하, 첨부된 도면을 참조하여 본 발명의 바람직한 실시예를 설명하기로 한다. 그러나, 본 발명은 이하에서 개시되는 실시예에 한정되는 것이 아니라 서로 다른 다양한 형태로 구성될 수 있으며, 단지 본 실시예는 본 발명의 개시가 완전하도록하며 통상의 지식을 가진자에게 본 발명의 범주를 완전하게 알려주기 위해 제공되는 것이다.
<제1 실시예>
도 1 및 도 2는 본 발명의 제1 실시예에 따른 메모리 시스템을 포함하는 데이터 처리 시스템의 구성을 설명하기 위해 도시한 도면이다.
도 1을 참조하면, 본 발명의 실시예에 따른 데이터 처리 시스템(Data Processing System)은, 호스트(A10)와, 메모리 시스템(A20)을 포함한다. 또한, 메모리 시스템(A20)은, 컨트롤러(A30)와, 제1 비휘발성 메모리 장치(A40)와, 제2 비휘발성 메모리 장치(A50), 및 제3 비휘발성 메모리 장치(A60)를 포함한다.
참고로, 도 1 및 도 2에서는, 메모리 시스템(A20)에 3개의 비휘발성 메모리 장치들(A40, A50, A60)즉, 제1 내지 제3 비휘발성 메모리 장치들(A40, A50, A60)이 포함된 형태인 것을 알 수 있다. 하지만, 이는 어디까지나 하나의 실시예일 뿐이며, 실제로는 더 적거나 더 많은 개수의 비휘발성 메모리 장치가 메모리 시스템에 포함되는 것도 얼마든지 가능하다. 이와 같이 메모리 시스템(A20)에 3개의 비휘발성 메모리 장치(A40, A50, A60)가 포함되는 형태의 실시예는, 하기에서 설명될 나머지 설명에서도 계속 사용되지만, 이는 어디까지나 하나의 실시예일 뿐이며, 실제로는 더 적거나 더 많은 개수의 비휘발성 메모리 장치가 메모리 시스템에 포함되는 것도 얼마든지 가능하다.
여기서, 호스트(A10)는, 사용자 요청에 해당하는 다수의 커맨드들(CMD)을 메모리 시스템(A20)로 전송하며, 그에 따라 메모리 시스템(A20)에서는 커맨드들(CMD)에 해당하는 동작들, 즉 사용자 요청에 상응하는 동작들을 수행한다.
그리고, 메모리 시스템(A20)은, 호스트(A10)의 요청에 응답하여 동작하며, 특히 호스트(A10)에 의해서 액세스되는 데이터를 저장한다. 다시 말해, 메모리 시스템(A20)은, 호스트(A10)의 주 기억 장치 또는 보조 기억 장치로 사용될 수 있다. 여기서, 메모리 시스템(A20)은 호스트(A10)과 연결되는 호스트 인터페이스 프로토콜에 따라, 다양한 종류의 저장 장치들 중 어느 하나로 구현될 수 있다. 예를 들면, 메모리 시스템(A20)은, 솔리드 스테이트 드라이브(SSD: Solid State Drive), MMC, eMMC(embedded MMC), RS-MMC(Reduced Size MMC), micro-MMC 형태의 멀티 미디어 카드(MMC: Multi Media Card), SD, mini-SD, micro-SD 형태의 시큐어 디지털(SD: Secure Digital) 카드, USB(Universal Storage Bus) 저장 장치, UFS(Universal Flash Storage) 장치, CF(Compact Flash) 카드, 스마트 미디어(Smart Media) 카드, 메모리 스틱(Memory Stick) 등과 같은 다양한 종류의 저장 장치들 중 어느 하나로 구현될 수 있다.
또한, 메모리 시스템(A20)은, 하나의 반도체 장치로 집적되어 메모리 카드를 구성할 수도 있으며, 일 예로 PC 카드(PCMCIA: Personal Computer Memory Card International Association), 컴팩트 플래시 카드(CF), 스마트 미디어 카드(SM, SMC), 메모리 스틱, 멀티미디어 카드(MMC, RS-MMC, MMCmicro), SD 카드(SD, miniSD, microSD, SDHC), 유니버설 플래시 기억 장치(UFS) 등과 같은 메모리 카드를 구성할 수 있다.
또한, 다른 일 예로, 메모리 시스템(A20)은, 컴퓨터, UMPC(Ultra Mobile PC), 워크스테이션, 넷북(net-book), PDA(Personal Digital Assistants), 포터블(portable) 컴퓨터, 웹 타블렛(web tablet), 태블릿 컴퓨터(tablet computer), 무선 전화기(wireless phone), 모바일 폰(mobile phone), 스마트폰(smart phone), e-북(e-book), PMP(portable multimedia player), 휴대용 게임기, 네비게이션(navigation) 장치, 블랙박스(black box), 디지털 카메라(digital camera), DMB(Digital Multimedia Broadcasting) 재생기, 3차원 텔레비전(3-dimensional television), 스마트 텔레비전(smart television), 디지털 음성 녹음기(digital audio recorder), 디지털 음성 재생기(digital audio player), 디지털 영상 녹화기(digital picture recorder), 디지털 영상 재생기(digital picture player), 디지털 동영상 녹화기(digital video recorder), 디지털 동영상 재생기(digital video player), 데이터 센터를 구성하는 스토리지, 정보를 무선 환경에서 송수신할 수 있는 장치, 홈 네트워크를 구성하는 다양한 전자 장치들 중 하나, 컴퓨터 네트워크를 구성하는 다양한 전자 장치들 중 하나, 텔레매틱스 네트워크를 구성하는 다양한 전자 장치들 중 하나, RFID(radio frequency identification) 장치, 또는 컴퓨팅 시스템을 구성하는 다양한 구성 요소들 중 하나 등을 구성할 수 있다.
아울러, 메모리 시스템(A20)에는, DRAM(Dynamic Random Access Memory), SRAM(Static RAM) 등과 같은 휘발성 메모리 장치와, ROM(Read Only Memory), MROM(Mask ROM), PROM(Programmable ROM), EPROM(Erasable ROM), EEPROM(Electrically Erasable ROM), FRAM(Ferromagnetic ROM), PRAM(Phase change RAM), MRAM(Magnetic RAM), RRAM(Resistive RAM), 플래시 메모리 등과 같은 비휘발성 메모리 장치와 같은 저장장치가 포함될 수 있다.
그리고, 메모리 시스템(A20)은, 호스트(A10)로부터 입력된 라이트 데이터들(WDATA)을 임시로 저장하기 위한 휘발성 메모리(144)를 포함한다.
그리고, 컨트롤러(A30)는, 호스트(A10)로부터 트랜젝션(transaction)으로 그룹화되지 않은 노말 라이트 데이터들(NMAL_WDATA)이 입력되는 것에 응답하여 노말 라이트 버퍼(A31)를 휘발성 메모리(144)에 할당한다.
또한, 컨트롤러(A30)는, 호스트(A10)로부터 제1 트랜젝션으로 그룹화된 제1 라이트 데이터들(TRAN_WDATA1) 및 제1 트랜젝션의 커밋(commit)이 완료될 때까지 필요한 제1 전체크기정보(TTSIZE1)가 입력되는 것에 응답하여 제1 라이트 버퍼(A32)를 휘발성 메모리(144)에 할당한다.
또한, 컨트롤러(A30)는, 호스트(A10)로부터 제2 트랜젝션으로 그룹화된 제2 라이트 데이터들(TRAN_WDATA2) 및 제2 트랜젝션의 커밋이 완료될 때까지 필요한 제2 전체크기정보(TTSIZE2)가 입력되는 것에 응답하여 제2 라이트 버퍼(A33)를 휘발성 메모리에 할당한다.
여기서, 라이트 데이터들(WDATA)이 트랜젝션으로 그룹화된다는 것은, 라이트 데이터들(WDATA) 중 같은 용도로 사용되는 여러개의 라이트 데이터들(WDATA)이 하나의 트랜젝션으로 그룹화된다는 것을 의미한다.
예컨대, 데이터 베이스(data base)에서 이미 저장된 데이터의 수정/추가/업데이트 등의 용도를 위해 사용되는 데이터들이 각각의 용도에 따라 각각의 트랜젝션으로 그룹화될 수 있다. 이때, 데이터 베이스의 수정을 위한 용도의 데이터들이 하나의 트랜젝션 그룹이되고, 데이터 베이스의 추가를 위한 용도의 데이터들이 또 다른 하나의 트랜젝션 그룹이 되는 방식으로 설정될 수 있다.
따라서, 하나의 트랜젝션으로 그룹화된 라이트 데이터들(TRAN_WDATA1 or TRAN_WDATA2)이 호스트(A10)에서 메모리 시스템(A20)으로 전송될 때는, 모두 정상적으로 전송 및 저장되어 모두 유효(valid)한 커밋(commit)상태 아니면, 어느 하나라도 제대로 전송 및 저장되지 못하거나 호스트(A10)의 어보트(abort) 요청에 따라 모두 무효(invalid)한 어보트(abort)상태만 존재한다. 즉, 하나의 트랜젝션으로 그룹화된 라이트 데이터들(TRAN_WDATA1 or TRAN_WDATA2)은 모두 정상적으로 전송 및 저장되어 모두 유효한 커밋상태일 때에만 의미가 있다.
예컨대, 호스트(A10)에서 메모리 시스템(A20)로 전송된 라이트 데이터들(WDATA) 중 제1 트랜젝션으로 그룹화된 제1 라이트 데이터들(TRAN_WDATA1)이 메모리 시스템(A20)에서 커밋상태로 확인되기 위해서는, 다수의 제1 라이트 데이터들(TRAN_WDATA1)이 모두 호스트(A10)에서 메모리 시스템(A20)로 정상적으로 전송 및 저장이 완료되어야 하고, 동시에 호스트(A10)로부터 어보트 요청이 없어야 한다. 만약, 다수의 제1 라이트 데이터들(TRAN_WDATA1) 중 어느 하나라도 정상적으로 전송 및 저장되지 못하거나 호스트(A10)로부터 어보트 요청이 있게되면, 제1 라이트 데이터들(TRAN_WDATA1)은 모두 마스터 시스템(A20)에서 어보트상태로 확인될 것이다.
마찬가지로, 호스트(A10)에서 메모리 시스템(A20)로 전송된 라이트 데이터들(WDATA) 중 제2 트랜젝션으로 그룹화된 제2 라이트 데이터들(TRAN_WDATA2)이 메모리 시스템(A20)에서 커밋상태로 확인되기 위해서는, 다수의 제2 라이트 데이터들(TRAN_WDATA2)이 모두 호스트(A10)에서 메모리 시스템(A20)로 정상적으로 전송 및 저장이 완료되어야 하고, 동시에 호스트(A10)로부터 어보트 요청이 없어야 한다. 만약, 다수의 제2 라이트 데이터들(TRAN_WDATA2) 중 어느 하나라도 정상적으로 전송 및 저장되지 못하거나 호스트(A10)로부터 어보트 요청이 있게되면, 제2 라이트 데이터들(TRAN_WDATA2)은 모두 마스터 시스템(A20)에서 어보트상태로 확인될 것이다.
참고로, 전술한 것과 같이 트랜젝션으로 그룹화된 라이트 데이터들(TRAN_WDATA1 or TRAN_WDATA2)을 커밋상태 또는 어보트상태로 구분하여 관리하는 동작을, 일반적으로는 트랜젝션의 어토믹(atomic)을 보장하기 위한 동작이라고 한다.
한편, 도 1에서 컨트롤러(A30)의 휘발성 메모리(144)에 할당되는 노말 라이트 버퍼(A31)가 실선이 아닌 점선으로 도시되어 있는 이유는, 컨트롤러(A30)에서 호스트(A10)로부터 노말 라이트 데이터들(NMAL_WDATA)이 입력되는 것에 응답하여 노말 라이트 버퍼(A31)를 할당하기 때문이다. 즉, 컨트롤러(A30)는, 호스트(A10)로부터 노말 라이트 데이터들(NMAL_WDATA)이 입력되는 않는 경우, 노말 라이트 버퍼(A31)를 휘발성 메모리(144)에서 할당하지 않을 수 있다.
마찬가지로, 도 1에서 컨트롤러(A30)의 휘발성 메모리(144)에 할당되는 제1 라이트 버퍼(A32)가 실선이 아닌 점선으로 도시되어 있는 이유는, 컨트롤러(A30)에서 호스트(A10)로부터 제1 트랜젝션으로 그룹화된 제1 라이트 데이터들(TRAN_WDATA1)이 입력되는 것에 응답하여 제1 라이트 버퍼(A32)를 할당하기 때문이다. 즉, 컨트롤러(A30)는, 호스트(A10)로부터 제1 트랜젝션으로 그룹화된 제1 라이트 데이터들(TRAN_WDATA1)이 입력되는 않는 경우, 제1 라이트 버퍼(A32)를 휘발성 메모리(144)에서 할당하지 않을 수 있다.
마찬가지로, 도 1에서 컨트롤러(A30)의 휘발성 메모리(144)에 할당되는 제2 라이트 버퍼(A33)가 실선이 아닌 점선으로 도시되어 있는 이유는, 컨트롤러(A30)에서 호스트(A10)로부터 제2 트랜젝션으로 그룹화된 제2 라이트 데이터들(TRAN_WDATA2)이 입력되는 것에 응답하여 제2 라이트 버퍼(A33)를 할당하기 때문이다. 즉, 컨트롤러(A30)는, 호스트(A10)로부터 제2 트랜젝션으로 그룹화된 제2 라이트 데이터들(TRAN_WDATA2)이 입력되는 않는 경우, 제2 라이트 버퍼(A33)를 휘발성 메모리(144)에서 할당하지 않을 수 있다.
그리고, 컨트롤러(A30)는, 노말 라이트 버퍼(A31)의 크기를 설정된 크기로 고정하는 형태로 관리한다. 즉, 컨트롤러(A30)는, 설정된 크기로 고정된 노말 라이트 버퍼(A31)를 휘발성 메모리(144)에 할당한 뒤, 호스트(A10)로부터 입력된 노말 라이트 데이터들(NMAL_WDATA)을 저장한다.
참고로, 노말 라이트 버퍼(A31)의 크기가 '설정된 크기'로 고정된다는 것은, 설계자에 의해 결정된 '설정된 크기'의 값이 메모리 시스템(A20)의 동작중에 고정된 형태를 유지한다는 것을 의미한다. 즉, 설계자의 선택에 따라 유휴(idle)상태와 같은 메모리 시스템(A20)의 특정모드에서 '설정된 크기'를 다른 값으로 변경한 후 그 값을 다시 고정된 형태로 유지시키는 것도 얼마든지 가능하다.
그리고, 컨트롤러(A30)는, 제1 전체크기정보(TTSIZE1)에 응답하여 제1 라이트 버퍼(A32)의 크기를 가변하는 형태로 관리한다.
즉, 컨트롤러(A30)는, 제1 트랜젝션으로 그룹화된 제1 라이트 데이터들(TRAN_WDATA1)이 호스트(A10)로부터 입력될 때, 제1 라이트 데이터들(TRAN_WDATA1)과 함께 입력되는 제1 전체크기정보(TTSIZE1)에 응답하여 제1 라이트 데이터들(TRAN_WDATA1)이 커밋될 때까지 필요한 제1 예정크기를 확인한 뒤, 확인된 제1 예정크기만큼을 제1 라이트 버퍼(A32)로서 휘발성 메모리(144)에서 할당한다.
따라서, 제1 라이트 버퍼(A32)의 크기는, 제1 전체크기정보(TTSIZE1)에 응답하여 제1 예정크기가 어떤 값으로 확인되는지에 따라 가변될 수 있다.
예컨대, 제1 시점에서 제1 전체크기정보(TTSIZE1)에 응답하여 제1 예정크기가 '5'로 확인되면, 컨트롤러(A30)는, 제1 시점에서 5개의 제1 라이트 데이터들(TRAN_WDATA1)을 저장할 수 있는 메모리 영역을 휘발성 메모리(144)로부터 할당받아 제1 라이트 버퍼(A32)로서 관리할 것이다.
또 다른 예로서, 제1 시점과는 다른 제2 시점에서 제1 전체크기정보(TTSIZE1)에 응답하여 제1 예정크기가 '3'으로 확인되면, 컨트롤러(A30)는, 제2 시점에서 3개의 제1 라이트 데이터들(TRAN_WDATA1)을 저장할 수 있는 메모리 영역을 휘발성 메모리(144)로부터 할당받아 제1 라이트 버퍼(A32)로서 관리할 것이다.
그리고, 컨트롤러(A30)는, 제2 전체크기정보(TTSIZE2)에 응답하여 제2 라이트 버퍼(A33)의 크기를 가변하는 형태로 관리한다.
즉, 컨트롤러(A30)는, 제2 트랜젝션으로 그룹화된 제2 라이트 데이터들(TRAN_WDATA2)이 호스트(A10)로부터 입력될 때, 제2 라이트 데이터들(TRAN_WDATA2)과 함께 입력되는 제2 전체크기정보(TTSIZE2)에 응답하여 제2 라이트 데이터들(TRAN_WDATA2)이 커밋될 때까지 필요한 제2 예정크기를 확인한 뒤, 확인된 제2 예정크기만큼을 제2 라이트 버퍼(A33)로서 휘발성 메모리(144)에서 할당한다.
따라서, 제2 라이트 버퍼(A33)의 크기는, 제2 전체크기정보(TTSIZE2)에 응답하여 제2 예정크기가 어떤 값으로 확인되는지에 따라 가변될 수 있다.
예컨대, 제3 시점에서 제2 전체크기정보(TTSIZE2)에 응답하여 제2 예정크기가 '6'으로 확인되면, 컨트롤러(A30)는, 제3 시점에서 6개의 제2 라이트 데이터들(TRAN_WDATA2)을 저장할 수 있는 메모리 영역을 휘발성 메모리(144)로부터 할당받아 제2 라이트 버퍼(A33)로서 관리할 것이다.
또 다른 예로서, 제3 시점과는 다른 제4 시점에서 제2 전체크기정보(TTSIZE2)에 응답하여 제2 예정크기가 '4'로 확인되면, 컨트롤러(A30)는, 제4 시점에서 4개의 제2 라이트 데이터들(TRAN_WDATA2)을 저장할 수 있는 메모리 영역을 휘발성 메모리(144)로부터 할당받아 제2 라이트 버퍼(A33)로서 관리할 것이다.
도 2를 참조하면, 전술한 도 1에서 설명한 메모리 시스템(A20)의 상세한 구성을 알 수 있다.
먼저, 메모리 시스템(A20)에 포함된 컨트롤러(A30)는, 호스트(A10)로부터의 요청에 응답하여 제1 내지 제3 비휘발성 메모리 장치(A40, A50, A60)을 제어한다. 예컨대, 컨트롤러(A30)는, 제1 내지 제3 비휘발성 메모리 장치(A40, A50, A60)로부터 리드된 데이터를 호스트(A10)로 제공하고, 호스트(A10)로부터 제공된 데이터를 제1 내지 제3 비휘발성 메모리 장치(A40, A50, A60)에 저장하며, 이를 위해 컨트롤러(A30)는, 제1 내지 제3 비휘발성 메모리 장치(A40, A50, A60)의 리드, 라이트, 프로그램(program), 이레이즈(erase) 등의 동작을 제어한다.
구체적으로, 메모리 시스템(A20)에 포함된 컨트롤러(A30)는, 호스트 인터페이스 유닛(HOST INTERFACE, 132)과, 프로세서(PROCESS, 134)와, 메모리(144)와, 제1 메모리 인터페이스 유닛(MEMORY INTERFACE1, B10)과, 제2 메모리 인터페이스 유닛(MEMORY INTERFACE2, B20), 및 제3 메모리 인터페이스 유닛(MEMORY INTERFACE3, B30)을 포함한다.
여기서, 호스트 인터페이스 유닛(132)은, 호스트(A10)와의 사이에서 전달되는 커맨드(command) 및 데이터를 주고받는 동작을 수행하며, USB(Universal Serial Bus), MMC(Multi-Media Card), PCI-E(Peripheral Component Interconnect-Express), SAS(Serial-attached SCSI), SATA(Serial Advanced Technology Attachment), PATA(Parallel Advanced Technology Attachment), SCSI(Small Computer System Interface), ESDI(Enhanced Small Disk Interface), IDE(Integrated Drive Electronics), MIPI(Mobile Industry Processor Interface) 등과 같은 다양한 인터페이스 프로토콜들 중 적어도 하나를 통해 호스트(A10)와 통신하도록 구성될 수 있다. 이때, 호스트 인터페이스 유닛(132)은, 호스트(A10)와 데이터를 주고 받는 영역으로 호스트 인터페이스 계층(HIL: Host Interface Layer, 이하 'HIL'이라 칭하기로 함)이라 불리는 펌웨어(firmware)를 통해 구동될 수 있다.
그리고, 제1 내지 제3 메모리 인터페이스 유닛(B10, B20, B30) 각각은, 컨트롤러(A30)이 호스트(A10)로부터의 요청에 응답하여 제1 내지 제3 비휘발성 메모리 장치(A40, A50, A60) 각각을 제어하기 위해, 컨트롤러(A30)과 제1 내지 제3 비휘발성 메모리 장치(A40, A50, A60) 간의 인터페이싱을 수행하는 메모리/스토리지(storage) 인터페이스가 된다. 여기서, 제1 내지 제3 메모리 인터페이스 유닛(B10, B20, B30) 각각은, 제1 내지 제3 비휘발성 메모리 장치(A40, A50, A60)이 플래시 메모리, 특히 일 예로 NAND 플래시 메모리일 경우에 NAND 플래시 컨트롤러(NFC: NAND Flash Controller)로서, 프로세서(134)의 제어에 따라, 제1 내지 제3 비휘발성 메모리 장치(A40, A50, A60) 각각을 제어하기 위한 신호를 생성하고 데이터를 처리한다.
또한, 제1 내지 제3 메모리 인터페이스 유닛(B10, B20, B30) 각각은, 컨트롤러(A30)와 제1 내지 제3 비휘발성 메모리 장치(A40, A50, A60) 간의 커맨드 및 데이터를 처리하는 인터페이스, 일 예로 NAND 플래시 인터페이스의 동작, 특히 컨트롤러(A30)과 제1 내지 제3 비휘발성 메모리 장치(A40, A50, A60) 간 데이터 입출력을 지원하며, 제1 내지 제3 비휘발성 메모리 장치(A40, A50, A60)과 데이터를 주고 받는 영역으로 플래시 인터페이스 계층(FIL: Flash Interface Layer, 이하 'FIL'이라 칭하기로 함)이라 불리는 펌웨어(firmware)를 통해 구동될 수 있다.
그리고, 메모리(144)는, 메모리 시스템(A20) 및 컨트롤러(A30)의 동작 메모리로서, 메모리 시스템(A20) 및 컨트롤러(A30)의 구동을 위한 데이터를 저장한다. 보다 구체적으로 설명하면, 메모리(144)는, 컨트롤러(A30)이 호스트(A10)로부터의 요청에 응답하여 제1 내지 제3 비휘발성 메모리 장치(A40, A50, A60)을 제어할 때, 예컨대, 컨트롤러(A30)가, 제1 내지 제3 비휘발성 메모리 장치(A40, A50, A60)의 리드, 라이트, 프로그램, 이레이즈(erase) 등의 동작을 제어할 때, 관리되어야 하는 데이터를 임시로 저장한다.
여기서, 메모리(144)는, 휘발성 메모리로 구현될 수 있으며, 예컨대 정적 랜덤 액세스 메모리(SRAM: Static Random Access Memory), 또는 동적 랜덤 액세스 메모리(DRAM: Dynamic Random Access Memory) 등으로 구현될 수 있다.
또한, 메모리(144)는, 도 2에 도시된 것과 같이 컨트롤러(A30)의 내부에 존재할 수도 있고, 도 2에 도시된 것과 다르게 컨트롤러(A30)의 외부에 존재할 수도 있다. 만약, 도 2에 도시된 것과 다르게 컨트롤러(A30)의 외부에 메모리(144)가 존재하는 경우, 별도의 메모리 인터페이스(미도시)를 통해 컨트롤러(A30)로부터 데이터가 입출력되는 외부 휘발성 메모리로 구현되어야 할 것이다.
또한, 메모리(144)는, 제1 내지 제3 비휘발성 메모리 장치(A40, A50, A60)의 동작을 제어하는 과정에서 관리되어야 하는 데이터를 저장하며, 이러한 데이터의 저장을 위해, 프로그램 메모리, 데이터 메모리, 라이트 버퍼(buffer)/캐시(cache), 리드 버퍼/캐시, 데이터 버퍼/캐시, 맵(map) 버퍼/캐시 등을 포함하는 형태가 될 수 있다.
이때, 도 2에서 설명되는 메모리(144)는 도 1에서 설명한 휘발성 메모리(144)에 대응되는 구성요소이다. 다만, 도 1에서 설명한 휘발성 메모리(144)는, 도 2에서 설명한 메모리(144)의 역할 중 라이트 버퍼로서의 역할만 포함하는 것을 알 수 있다. 따라서, 도 1에서 휘발성 메모리(144)에 대해 설명한 바와 같이 도 2에 도시된 메모리(144) 내부에는 노말 라이트 버퍼(A31)와, 제1 라이트 버퍼(A32), 및 제2 라이트 버퍼(A33)가 포함될 것이다.
그리고, 프로세서(134)는, 컨트롤러(A30)의 전체적인 동작을 제어하며, 특히 호스트(A10)로부터의 라이트 요청 또는 리드 요청에 응답하여, 제1 내지 제3 비휘발성 메모리 장치(A40, A50, A60)에 대한 프로그램 동작 또는 리드 동작을 제어한다. 여기서, 프로세서(134)는, 제1 내지 제3 비휘발성 메모리 장치(A40, A50, A60)에 대한 컨트롤러(A30)의 제반 동작을 제어하기 위해 플래시 변환 계층(FTL: Flash Translation Layer, 이하 'FTL'이라 칭하기로 함)이라 불리는 펌웨어(firmware)를 구동한다. 또한, 프로세서(134)는, 마이크로프로세서 또는 중앙 처리 장치(CPU) 등으로 구현될 수 있다.
일 예로, 컨트롤러(A30)는, 마이크로프로세서 또는 중앙 처리 장치(CPU) 등으로 구현된 프로세서(134)를 통해, 호스트(A10)로부터 요청된 동작을 제1 내지 제3 비휘발성 메모리 장치(A40, A50, A60)에서 수행, 다시 말해 호스트(A10)로부터 수신된 커맨드에 해당하는 커맨드 동작을, 제1 내지 제3 비휘발성 메모리 장치(A40, A50, A60)와 수행한다. 여기서, 컨트롤러(A30)는, 호스트(A10)로부터 수신된 커맨드에 해당하는 커맨드 동작으로 포그라운드(foreground) 동작을 수행, 예컨대 라이트 커맨드에 해당하는 프로그램 동작, 리드 커맨드에 해당하는 리드 동작, 이레이즈 커맨드(erase command)에 해당하는 이레이즈 동작, 셋 커맨드(set command)로 셋 파라미터 커맨드(set parameter command) 또는 셋 픽쳐 커맨드(set feature command)에 해당하는 파라미터 셋 동작 등을 수행할 수 있다.
그리고, 컨트롤러(A30)는, 마이크로프로세서 또는 중앙 처리 장치(CPU) 등으로 구현된 프로세서(134)를 통해, 제1 내지 제3 비휘발성 메모리 장치(A40, A50, A60)에 대한 백그라운드(background) 동작을 수행할 수도 있다. 여기서, 제1 내지 제3 비휘발성 메모리 장치(A40, A50, A60)에 대한 백그라운드 동작은, 제1 내지 제3 비휘발성 메모리 장치(A40, A50, A60) 각각의 메모리 블록들(MEMORY BLOCK<0, 1, 2,...>)에서 임의의 메모리 블록에 저장된 데이터를 다른 임의의 메모리 블록으로 카피(copy)하여 처리하는 동작, 일 예로 가비지 컬렉션(GC: Garbage Collection) 동작을 포함할 수 있다. 또한, 제1 내지 제3 비휘발성 메모리 장치(A40, A50, A60) 에 대한 백그라운드 동작은, 제1 내지 제3 비휘발성 메모리 장치(A40, A50, A60) 각각의 메모리 블록들(MEMORY BLOCK<0, 1, 2,...>)간에 저장된 데이터 간을 스왑(swap)하여 처리하는 동작, 일 예로 웨어 레벨링(WL: Wear Leveling) 동작을 포함할 수 있다. 또한, 제1 내지 제3 비휘발성 메모리 장치(A40, A50, A60)에 대한 백그라운드 동작은, 컨트롤러(A30)에 저장된 맵 데이터를 제1 내지 제3 비휘발성 메모리 장치(A40, A50, A60) 각각의 메모리 블록들(MEMORY BLOCK<0, 1, 2,...>)로 저장하는 동작, 일 예로 맵 플러시(map flush) 동작을 포함할 수 있다. 또한, 제1 내지 제3 비휘발성 메모리 장치(A40, A50, A60)에 대한 백그라운드 동작은, 제1 내지 제3 비휘발성 메모리 장치(A40, A50, A60)에 대한 배드 관리(bad management)하는 동작, 일 예로 제1 내지 제3 비휘발성 메모리 장치(A40, A50, A60) 각각에 포함된 복수의 메모리 블록들(MEMORY BLOCK<0, 1, 2,...>)에서 배드 블록을 확인하여 처리하는 배드 블록 관리(bad block management) 동작을 포함할 수 있다.
그리고, 컨트롤러(A30)는, 마이크로프로세서 또는 중앙 처리 장치(CPU) 등으로 구현된 프로세서(134)를 통해, 제1 내지 제3 비휘발성 메모리 장치(A40, A50, A60) 각각의 메모리 블록들(MEMORY BLOCK<0, 1, 2,...>)에 액세스(access)하는 동작에 대응하여 로그(log) 데이터를 생성 및 관리할 수도 있다. 여기서, 제1 내지 제3 비휘발성 메모리 장치(A40, A50, A60) 각각의 메모리 블록들(MEMORY BLOCK<0, 1, 2,...>)에 액세스하는 동작은, 제1 내지 제3 비휘발성 메모리 장치(A40, A50, A60)의 메모리 블록들(MEMORY BLOCK<0, 1, 2,...>)에 대한 포어그라운드(foreground) 동작을 수행하거나 백그라운드(background) 동작을 수행하는 것을 모두 포함한다.
그리고, 컨트롤러(A30)의 프로세서(134)에는, 제1 내지 제3 비휘발성 메모리 장치(A40, A50, A60)의 배드 관리를 수행하기 위한 유닛(도시하지 않음)이 포함될 수 있다. 이때, 제1 내지 제3 비휘발성 메모리 장치(A40, A50, A60)의 배드 관리를 수행하기 위한 유닛은, 제1 내지 제3 비휘발성 메모리 장치(A40, A50, A60) 각각에 포함된 복수의 메모리 블록들(MEMORY BLOCK<0, 1, 2,...>)에서 배드 블록을 확인한 후, 확인된 배드 블록을 배드 처리하는 배드 블록 관리를 수행한다. 여기서, 배드 블록 관리는, 제1 내지 제3 비휘발성 메모리 장치(A40, A50, A60)이 플래시 메모리, 예컨대 낸드 플래시 메모리일 경우, 낸드의 특성으로 인해 데이터 라이트, 예컨대 데이터 프로그램(program) 시에 프로그램 실패(program fail)가 발생할 수 있으며, 프로그램 실패가 발생한 메모리 블록을 배드(bad) 처리한 후, 프로그램 실패된 데이터를 새로운 메모리 블록에 라이트, 즉 프로그램하는 것을 의미한다.
그리고, 컨트롤러(A30)는, 마이크로프로세서 또는 중앙 처리 장치(CPU) 등으로 구현된 프로세서(134)를 통해, 컨트롤러(A30)과 제1 내지 제3 비휘발성 메모리 장치(A40, A50, A60) 사이에서 입/출력될 수 있는 커맨드 및 데이터를 전송하는 동작을 수행한다. 이때, 컨트롤러(A30)과 제1 내지 제3 비휘발성 메모리 장치(A40, A50, A60) 사이에서 입/출력될 수 있는 커맨드 및 데이터는, 호스트(A10)에서 컨트롤러(A30)로 전송될 수도 있고, 컨트롤러(A30) 내부에서 생성될 수도 있다.
그리고, 컨트롤러(A30)는, 전술한 프로세서(134)와, 호스트 인터페이스 유닛(132), 및 메모리(144)를 통해 호스트(A10)로부터 입력되는 라이트 데이터들(WDATA)이 트랜젝션으로 그룹화되었는지 여부를 확인하여 트랜젝션으로 그룹화되지 않은 노말 라이트 데이터들(NMAL_WDATA)과 트랜젝션으로 그룹화된 제1 라이트 데이터들(TRAN_WDATA1) 및 제2 라이트 데이터들(TRAN_WDATA2)을 구분하는 동작을 수행할 수 있다.
또한, 컨트롤러(A30)는, 전술한 프로세서(134)와, 호스트 인터페이스 유닛(132), 및 메모리(144)를 통해 트랜젝션으로 그룹화되지 않은 노말 라이트 데이터들(NMAL_WDATA)를 임시로 저장하기 위한 노말 라이트 버퍼(A31)를 메모리(144) 내부에 할당하는 동작을 수행할 수 있다.
또한, 컨트롤러(A30)는, 전술한 프로세서(134)와, 호스트 인터페이스 유닛(132), 및 메모리(144)를 통해 제1 트랜젝션으로 그룹화된 제1 라이트 데이터들(TRAN_WDATA1)과 함께 입력되는 제1 전체크기정보(TTSIZE1)를 확인하여 제1 라이트 데이터들(TRAN_WDATA1)을 임시로 저장하기 위한 제1 라이트 버퍼(A32)를 메모리(144) 내부에 할당하는 동작을 수행할 수 있다.
또한, 컨트롤러(A30)는, 전술한 프로세서(134)와, 호스트 인터페이스 유닛(132), 및 메모리(144)를 통해 제2 트랜젝션으로 그룹화된 제2 라이트 데이터들(TRAN_WDATA2)과 함께 입력되는 제2 전체크기정보(TTSIZE2)를 확인하여 제2 라이트 데이터들(TRAN_WDATA2)을 임시로 저장하기 위한 제2 라이트 버퍼(A33)를 메모리(144) 내부에 할당하는 동작을 수행할 수 있다.
한편, 제1 내지 제3 비휘발성 메모리 장치(A40, A50, A60) 각각은, 전원이 공급되지 않아도 저장된 데이터를 유지할 수 있으며, 특히 라이트(write) 동작을 통해 호스트(A10)로부터 제공된 라이트 데이터들(WDATA)을 저장하고, 리드(read) 동작을 통해 내부에 저장된 리드 데이터들(미도시)을 호스트(A10)로 제공할 수 있다.
또한, 제1 내지 제3 비휘발성 메모리 장치(A40, A50, A60) 각각은, 플래시 메모리, 예컨대 NAND 플래시 메모리 등과 같은 비휘발성 메모리 등으로 구현될 수 있지만, 상변환 메모리(PCRAM: Phase Change Random Access Memory), 저항 메모리(RRAM(ReRAM): Resistive Random Access Memory), 강유전체 메모리(FRAM: Ferroelectrics Random Access Memory), 및 스핀 주입 자기 메모리(STT-RAM(STT-MRAM): Spin Transfer Torque Magnetic Random Access Memory) 등과 같은 메모리들 중 어느 하나의 메모리로 구현될 수도 있다.
여기서, 제1 내지 제3 비휘발성 메모리 장치(A40, A50, A60) 각각은, 다수의 메모리 블록(memory block)들(MEMORY BLOCK<0, 1, 2,...>)을 포함한다. 즉, 제1 내지 제3 비휘발성 메모리 장치(A40, A50, A60) 각각은, 라이트(write) 동작을 통해 호스트(A10)로부터 제공된 라이트 데이터들(WDATA)을 메모리 블록들(MEMORY BLOCK<0, 1, 2,...>)에 저장하고, 리드(read) 동작을 통해 메모리 블록들(MEMORY BLOCK<0, 1, 2,...>)에 저장된 리드 데이터들(미도시)을 호스트(A10)로 제공할 수 있다.
그리고, 제1 내지 제3 비휘발성 메모리 장치(A40, A50, A60) 각각에 포함된 메모리 블록들(MEMORY BLOCK<0, 1, 2,...>) 각각은, 다수의 페이지들(pages, P<0, 1, 2, 3, 4,...>)을 포함한다. 또한, 도면에 구체적으로 도시되진 않았지만, 페이지들(P<0, 1, 2, 3, 4,...>) 각각에는, 다수의 메모리 셀(memory cell)들이 포함될 것이다.
그리고, 제1 내지 제3 비휘발성 메모리 장치(A40, A50, A60) 각각에 포함된 메모리 블록들(MEMORY BLOCK<0, 1, 2,...>) 각각은, 내부에 포함된 하나의 메모리 셀에 저장 또는 표현할 수 있는 비트의 수에 따라 단일 레벨 셀(SLC: Single Level Cell) 메모리 블록 및 멀티 레벨 셀(MLC: Multi Level Cell) 메모리 블록 등으로 구분될 수 있다. 여기서, SLC 메모리 블록은, 하나의 메모리 셀에 1비트 데이터를 저장하는 메모리 셀들에 의해 구현된 다수의 페이지들을 포함하고, 데이터 연산 성능이 빠르며 내구성이 높다. 그리고, MLC 메모리 블록은, 하나의 메모리 셀에 멀티 비트 데이터(예를 들면, 2비트 또는 그 이상의 비트)를 저장하는 메모리 셀들에 의해 구현된 다수의 페이지들을 포함하며, SLC 메모리 블록보다 큰 데이터 저장 공간을 가지므로 SLC 메모리 블록보다 고집적화할 수 있다.
특히, MLC 메모리 블록은, 하나의 메모리 셀에 2비트 데이터를 저장할 수 있는 메모리 셀들에 의해 구현된 다수의 페이지들을 포함하는 MLC 메모리 블록뿐만 아니라, 하나의 메모리 셀에 3비트 데이터를 저장할 수 있는 메모리 셀들에 의해 구현된 다수의 페이지들을 포함하는 트리플 레벨 셀(TLC: Triple Level Cell) 메모리 블록, 하나의 메모리 셀에 4비트 데이터를 저장할 수 있는 메모리 셀들에 의해 구현된 다수의 페이지들을 포함하는 쿼드러플 레벨 셀(QLC: Quadruple Level Cell) 메모리 블록, 또는 하나의 메모리 셀에 5비트 또는 그 이상의 비트 데이터를 저장할 수 있는 메모리 셀들에 의해 구현된 다수의 페이지들을 포함하는 다중 레벨 셀(multiple level cell) 메모리 블록 등으로 구분될 수 있다.
도 3a 내지 도 3d 및 도 4a 내지 도 4d는 본 발명의 제1 실시예에 따른 메모리 시스템의 동작을 설명하기 위해 도시한 도면이다.
먼저, 도 3a 내지 도 3d에서 사용된 몇가지 도면부호를 참조하여 전술한 도 1 및 도 2의 컨트롤러(A30)에서 호스트(A10)로부터 입력되는 라이트 데이터들(WDATA)을 어떤 방식으로 노말 라이트 데이터들(NMAL_WDATA)과 제1 라이트 데이터들(TRAN_WDATA1) 및 제2 라이트 데이터들(TRAN_WDATA2)로 구분하는지에 대해 설명하도록 하겠다.
구체적으로, 호스트(A10)에서 메모리 시스템(A20)으로 라이트 데이터들(WDATA)이 입력될 때는, 라이트 데이터들(WDATA) 각각에 대응하는 라이트 커맨드들(미도시)이 함께 입력되며, 라이트 커맨드들 각각에는, 라이트 데이터들(WDATA) 각각의 트랜젝션정보(미도시)가 포함된다.
이때, 라이트 데이터들(WDATA) 각각의 트랜젝션정보에는, 트랜젝션 아이디(IDentify)정보(TRID)와, 트랜젝션 커밋(commit)정보(미도시)와, 트랜젝션 어보트(abort)정보(미도시)가 포함될 수 있다.
따라서, 메모리 시스템(A20)에 포함된 컨트롤러(A30)는, 라이트 커맨드들(WCMD)에 포함된 트랜젝션정보 중 트랜젝션 아이디정보(TRID)를 확인하여, 라이트 데이터들(WDATA)을 트랜젝션으로 그룹화되지 않은 노말 라이트 데이터들(NMAL_WDATA) 또는 트랜젝션으로 그룹화된 트랜젝션 라이트 데이터들(TRAN_WDATA1 or TRAN_WDATA2)로 구분할 수 있다.
예컨대, 컨트롤러(A30)는, 호스트(A10)로부터 입력된 라이트 데이터들(WDATA)의 트랜젝션 아이디정보(TRID)가 1값을 갖는 라이트 데이터들(WDATA)을 제1 라이트 데이터들(TRAN_WDATA1)으로 구분할 수 있다.
마찬가지로, 컨트롤러(A30)는, 호스트(A10)로부터 입력된 라이트 데이터들(WDATA)의 트랜젝션 아이디정보(TRID)가 2값을 갖는 라이트 데이터들(WDATA)을 제2 라이트 데이터들(TRAN_WDATA2)으로 구분할 수 있다.
또한, 컨트롤러(A30)는, 호스트(A10)로부터 입력된 라이트 데이터들(WDATA)의 트랜젝션 아이디정보(TRID)가 어떠한 값으로도 설정되어 있지 않은 라이트 데이터들(WDATA)을 노말 라이트 데이터들(NMAL_WDATA)로 구분할 수 있다.
참고로, 트랜젝션 아이디정보(TRID)가 어떠한 값으로도 설정되지 않았다는 것은, 미리 정의된 초기값 또는 트랜젝션 아이디정보로서의 의미가 없는 값으로 설정된 경우를 의미할 수도 있다.
한편, 트랜젝션으로 그룹화된 라이트 데이터들(TRAN_WDATA1 or TRAN_WDATA2)의 시작데이터에 대응하는 시작커맨드에는 라이트 데이터들(TRAN_WDATA1 or TRAN_WDATA2)의 커밋이 완료될 때까지 필요한 전체크기정보(TTSIZE1 or TTSIZE2)가 더 포함된다.
예컨대, 제1 트랜젝션으로 그룹화된 제1 라이트 데이터들(TRAN_WDATA1)의 시작데이터에 대응하는 제1 시작커맨드에는 제1 라이트 데이터들(TRAN_WDATA1)의 커밋이 완료될 때까지 필요한 제1 전체크기정보(TTSIZE1)가 더 포함된다.
때문에, 컨트롤러(A30)는, 호스트(A10)로부터 제1 라이트 데이터들(TRAN_WDATA1) 중 가장 먼저 입력되는 시작데이터가 입력되기 이전에 제1 시작커맨드를 확인하여 제1 전체크기정보(TTSIZE1)를 확인하는 것이 가능하다.
즉, 컨트롤러(A30)는, 호스트(A10)로부터 제1 라이트 데이터들(TRAN_WDATA1)이 입력되기 이전에 제1 전체크기정보(TTSIZE1)를 확인하여 제1 라이트 데이터들(TRAN_WDATA1)의 커밋이 완료되기까지 필요한 제1 예정크기를 확인할 수 있고, 확인된 제1 예정크기만큼을 제1 라이트 버퍼(A32)로서 휘발성 메모리(144)에 할당할 수 있다.
따라서, 컨트롤러(A30)는, 제1 예정크기만큼의 메모리 영역을 제1 라이트 버퍼(A32)로서 휘발성 메모리(144)에 할당한 후에, 제1 라이트 데이터들(TRAN_WDATA1)을 제1 라이트 버퍼(A32)에 저장할 수 있다.
마찬가지로, 제2 트랜젝션으로 그룹화된 제2 라이트 데이터들(TRAN_WDATA2)의 시작데이터에 대응하는 라이트 커맨드에는 제2 라이트 데이터들(TRAN_WDATA2)의 커밋이 완료될 때까지 필요한 제2 전체크기정보(TTSIZE2)가 더 포함된다.
때문에, 컨트롤러(A30)는, 호스트(A10)로부터 제2 라이트 데이터들(TRAN_WDATA2) 중 가장 먼저 입력되는 시작데이터가 입력되기 이전에 제2 시작커맨드를 확인하여 제2 전체크기정보(TTSIZE2)를 확인하는 것이 가능하다.
즉, 컨트롤러(A30)는, 호스트(A10)로부터 제2 라이트 데이터들(TRAN_WDATA2)이 입력되기 이전에 제2 전체크기정보(TTSIZE2)를 확인하여 제2 라이트 데이터들(TRAN_WDATA2)의 커밋이 완료되기까지 필요한 제2 예정크기를 확인할 수 있고, 확인된 제2 예정크기만큼을 제2 라이트 버퍼(A33)로서 휘발성 메모리(144)에 할당할 수 있다.
따라서, 컨트롤러(A30)는, 제2 예정크기만큼의 메모리 영역을 제2 라이트 버퍼(A33)로서 휘발성 메모리(144)에 할당한 후에, 제2 라이트 데이터들(TRAN_WDATA2)을 제2 라이트 버퍼(A33)에 저장할 수 있다.
전술한 바와 같이 컨트롤러(A30)는, 노말 라이트 버퍼(A31)와 제1 라이트 버퍼(A32) 및 제2 라이트 버퍼(A33)를 휘발성 메모리(144)에 각각 할당한다. 이어서, 컨트롤러(A30)는, 특정 시점이 되면, 노말 라이트 버퍼(A31)와 제1 라이트 버퍼(A32) 및 제2 라이트 버퍼(A33) 각각에 대한 플러시(flush)동작을 통해 노말 라이트 버퍼(A31)와 제1 라이트 버퍼(A32) 및 제2 라이트 버퍼(A33) 각각에 저장된 데이터를 비휘발성 메모리 장치들(A40, A50, A60)에 저장한다.
먼저, 노말 라이트 버퍼(A31)의 경우, 설정된 크기로 고정된 저장공간을 가지므로, 컨트롤러(A30)는, 설정된 크기에 해당하는 만큼 노말 라이트 데이터들(NMAL_WDATA)을 노말 라이트 버퍼(A31)에 저장한 시점에서 노말 라이트 버퍼(A31)에 대한 플러시동작을 수행하여 노말 라이트 버퍼(A31)에 저장된 노말 라이트 데이터들(NMAL_WDATA)을 비휘발성 메모리 장치들(A40, A50, A60)에 저장하는 노말 라이트 동작을 수행한다.
그리고, 제1 라이트 버퍼(A32)의 경우, 제1 전체크기정보(TTSIZE1)에 대응하는 제1 예정크기만큼의 저장공간을 가지므로, 컨트롤러(A30)는, 제1 예정크기에 해당하는 만큼 제1 라이트 데이터들(TRAN_WDATA1)을 제1 라이트 버퍼(A32)에 저장한 시점에서 커밋 여부를 확인한다. 확인결과, 제1 라이트 버퍼(A32)에 저장된 제1 라이트 데이터들(TRAN_WDATA1)의 커밋이 완료된 경우, 컨트롤러(A30)는, 제1 라이트 버퍼(A32)에 대한 제1 플러시동작을 수행하여 제1 라이트 버퍼(A32)에 저장된 제1 라이트 데이터들(TRAN_WDATA1)을 비휘발성 메모리 장치들(A40, A50, A60)에 저장하는 제1 라이트동작을 수행한다. 이렇게, 제1 라이트동작을 수행한 뒤, 컨트롤러(A30)는, 제1 라이트 버퍼(A32)를 휘발성 메모리(144)에서 릴리즈(release)시킨다.
또한, 컨트롤러(A30)는, 제1 예정크기에 해당하는 만큼 제1 라이트 데이터들(TRAN_WDATA1)을 제1 라이트 버퍼(A32)에 저장하기 이전에도 정해진 시점마다 제1 라이트 데이터들(TRAN_WDATA1)에 대한 어보트(abort) 여부를 확인한다. 확인결과, 제1 라이트 버퍼(A32)에 저장된 제1 라이트 데이터들(TRAN_WDATA1)이 어보트된 경우, 컨트롤러(A30)는, 제1 라이트 버퍼(A32)를 휘발성 메모리(144)에서 릴리즈시킨다. 이때, 제1 라이트 데이터들(TRAN_WDATA1)에 대한 어보트 여보를 확인하는'정해진 시점'은, 제1 라이트 버퍼(A32)에 제1 라이트 데이터들(TRAN_WDATA1) 각각이 입력되는 시점일 수 있다.
그리고, 제2 라이트 버퍼(A33)의 경우, 제2 전체크기정보(TTSIZE2)에 대응하는 제2 예정크기만큼의 저장공간을 가지므로, 컨트롤러(A30)는, 제2 예정크기에 해당하는 만큼 제2 라이트 데이터들(TRAN_WDATA1)을 제2 라이트 버퍼(A33)에 저장한 시점에서 커밋 여부를 확인한다. 확인결과, 제2 라이트 버퍼(A33)에 저장된 제2 라이트 데이터들(TRAN_WDATA2)의 커밋이 완료된 경우, 컨트롤러(A30)는, 제2 라이트 버퍼(A33)에 대한 제2 플러시동작을 수행하여 제2 라이트 버퍼(A33)에 저장된 제2 라이트 데이터들(TRAN_WDATA2)을 비휘발성 메모리 장치들(A40, A50, A60)에 저장하는 제2 라이트동작을 수행한다. 이렇게, 제2 라이트동작을 수행한 뒤, 컨트롤러(A30)는, 제2 라이트 버퍼(A33)를 휘발성 메모리(144)에서 릴리즈(release)시킨다.
또한, 컨트롤러(A30)는, 제2 예정크기에 해당하는 만큼 제2 라이트 데이터들(TRAN_WDATA2)을 제2 라이트 버퍼(A33)에 저장하기 이전에도 정해진 시점마다 제2 라이트 데이터들(TRAN_WDATA2)에 대한 어보트(abort) 여부를 확인한다. 확인결과, 제2 라이트 버퍼(A33)에 저장된 제2 라이트 데이터들(TRAN_WDATA2)이 어보트된 경우, 컨트롤러(A30)는, 제2 라이트 버퍼(A33)를 휘발성 메모리(144)에서 릴리즈시킨다. 이때, 제2 라이트 데이터들(TRAN_WDATA2)에 대한 어보트 여보를 확인하는'정해진 시점'은, 제2 라이트 버퍼(A33)에 제2 라이트 데이터들(TRAN_WDATA2) 각각이 입력되는 시점일 수 있다.
그리고, 컨트롤러(A30)는, 제1 트랜젝션의 커밋이 확인된 시점과 제2 트랜젝션의 커밋이 확인된 시점이 설정된 제1 시간간격 이내인 경우, 제1 트랜젝션의 커밋에 대응하는 제1 라이트 버퍼(A32)에 대한 제1 플러시동작의 수행시점과 제2 트랜젝션의 커밋에 대응하는 제2 라이트 버퍼(A33)에 대한 제2 플러시동작의 수행시점을 서로 동기화(Synchronize)시킨다.
그리고, 컨트롤러(A30)는, 제1 플러시동작의 수행시점과 제2 플러시동작의 수행시점이 동기화되는 경우, 제1 라이트 버퍼(A32)에 저장된 제1 라이트 데이터들(TRAN_WDATA1)을 비휘발성 메모리 장치들(A40, A50, A60)에 저장하는 제1 라이트동작의 수행이 시작되는 시점과 제2 라이트 버퍼(A33)에 저장된 제2 라이트 데이터들(TRAN_WDATA2)을 비휘발성 메모리 장치들(A40, A50, A60)에 저장하는 제2 라이트동작의 수행이 시작되는 시점이 동기화된다고 볼 수 있다. 따라서, 제1 라이트동작의 수행이 완료되는 시점과 제2 라이트동작의 수행이 완료되는 시점이 큰 차이를 갖지 않을 가능성이 높다.
따라서, 컨트롤러(A30)는, 제1 플러시동작의 수행시점과 제2 플러시동작의 수행시점이 동기화되는 경우, 제1 플러시동작에 연결된 제1 라이트동작의 수행이 완료되었음을 호스트(A10)에 알려주기 위한 제1 확인(ack)신호를 호스트(A10)로 전달하는 시점과 제2 플러시동작에 연결된 제2 라이트동작의 수행이 완료되었음을 호스트(A10)에 알려주기 위한 제2 확인신호를 호스트(A10)로 전달하는 시점을 서로 동기화시킬 수 있다.
물론, 컨트롤러(A30)는, 제1 플러시동작의 수행시점과 제2 플러시동작의 수행시점이 동기화되는 경우에도, 제1 라이트동작의 수행이 완료되는 시점과 제2 라이트동작의 수행이 완료되는 시점이 큰 차이를 갖는 경우가 있을 수 있다.
따라서, 컨트롤러(A30)는, 제1 플러시동작의 수행시점과 제2 플러시동작의 수행시점이 동기화된 경우에도, 제1 플러시동작에 연결된 제1 라이트동작의 수행이 완료되었음을 호스트(A10)에 알려주기 위한 제1 확인신호가 생성되는 시점과 제2 플러시동작에 연결된 제2 라이트동작의 수행이 완료되었음을 호스트(A10)에 알려주기 위한 제2 확인신호가 생성되는 시점이 설정된 제2 시간간격 이내인 경우에만, 제1 확인신호를 호스트(A10)로 전달하는 시점과 제2 확인신호를 호스트(A10)로 전달하는 시점을 서로 동기화시킬 수 있다.
정리하면, 컨트롤러(A30)는, 제1 플러시동작의 수행시점과 제2 플러시동작의 수행시점이 동기화 여부만을 확인하여, 제1 확인신호를 호스트(A10)로 전달하는 시점과 제2 확인신호를 호스트(A10)로 전달하는 시점의 동기화 여부를 선택하는 제1 동기화 선택동작을 수행할 수 있다.
또한, 컨트롤러(A30)는, 제1 플러시동작의 수행시점과 제2 플러시동작의 수행시점이 동기화되는 경우에도, 제1 확인신호가 생성되는 시점과 제2 확인신호가 생성되는 시점이 설정된 제2 시간간격 이내일 경우에만, 제1 확인신호를 호스트(A10)로 전달하는 시점과 제2 확인신호를 호스트(A10)로 전달하는 시점의 동기화 여부를 선택하는 제2 동기화 선택동작을 수행할 수 있다.
참고로, 제1 동기화 선택동작과 제2 동기화 선택동작은 동시에 선택될 수 없는 동작이다. 따라서, 컨트롤러(A30)에서 제1 동기화 선택동작을 선택하여 수행하는 경우, 제2 동기화 선택동작은 선택되지 않을 것이다. 반대로, 컨트롤러(A30)에서 제2 동기화 선택동작을 선택하여 수행하는 경우, 제1 동기화 선택동작은 선택되지 않을 것이다. 이때, 컨트롤러(A30)에서 제1 동기화 선택동작을 수행하지 아니면 제2 동기화 선택동작을 수행할지 여부는 메모리 특성 및 설계자의 선택에 따라 미리 정의될 수 있다.
또한, 제1 플러시동작의 수행시점과 제2 플러시동작의 수행시점의 동기화여부의 기준이 되는 '설정된 제1 시간간격'은, 메모리 시스템의 특성 및 설계자의 선택에 따라 미리 정의될 수 있다.
마찬가지로, 제1 확인신호를 호스트(A10)로 전달하는 시점과 상기 제2 확인신호를 호스트(A10)로 전달하는 시점의 동기화 여부의 기준이 되는 '설정된 제2 시간간격'은, 메모리 시스템의 특성 및 설계자의 선택에 따라 미리 정의될 수 있다.
도 3a를 참조하면, 호스트(A10)에서 총 9개의 라이트 데이터들(WDATA)이 입력되는 것을 가정할 수 있다. 이때, 9개의 라이트 데이터들(WDATA)이 호스트(A10)로부터 입력되는 순서는 미리 정의되지 않으며, 랜덤하게 섞여서 입력되는 것을 가정할 수 있다.
구체적으로, 컨트롤러(A30)는, 호스트(A10)에서 입력되는 9개의 라이트 데이터들(WDATA) 각각의 트랜젝션 아이디정보(TRID)를 확인하여 3개의 제1 라이트 데이터들(TRAN_WDATA1)과 2개의 제2 라이트 데이터들(TRAN_WDATA2) 및 4개의 노말 라이트 데이터들(NMAL_WDATA)로 구분한다.
좀 더 구체적으로, 컨트롤러(A30)는, 호스트(A10)에서 입력되는 9개의 라이트 데이터들(WDATA) 각각의 트랜젝션 아이디정보(TRID)가 1값을 갖는 3개의 라이트 데이터들(WDATA)인 '0, 1, 2'이 제1 트랜젝션으로 그룹화된 라이트 데이터들(WDATA)이라고 판단하고 제1 라이트 데이터들(TRAN_WDATA1)로서 구분한다.
이때, 제1 라이트 데이터들(TRAN_WDATA1)로 구분될 수 있는 '0, 1, 2' 중 시작데이터인 '0'에 대응하는 제1 시작커맨드(미도시)에는 제1 전체크기정보(TTSIZE1)가 포함되어 있다. 따라서, 컨트롤러(A30)는, '0'에 대응하는 제1 시작커맨드로부터 제1 전체크기정보(TTSIZE1)가 '5'라는 것을 확인할 수 있다. 이렇게, 컨트롤러(A30)는, 제1 전체크기정보(TTSIZE1)가 '5'라는 것을 확인하는 것에 응답하여 총 5개의 라이트 데이터를 저장할 수 있는 메모리 영역을 휘발성 메모리(144)에서 할당하여 제1 라이트 버퍼(A32)로서 관리한다.
따라서, 컨트롤러(A30)는, 제1 라이트 데이터들(TRAN_WDATA1)로 구분될 수 있는 '0, 1, 2' 중 시작데이터인 '0'이 입력되기 이전에 5개의 라이트 데이터를 저장할 수 있는 공간을 갖는 제1 라이트 버퍼(A32)를 휘발성 메모리(144)에서 할당할 수 있다.
또한, 컨트롤러(A30)는, 호스트(A10)로부터 9개의 라이트 데이터들(WDATA)가 모두 입력된 후에도 제1 트랜젝션으로 구분되는 제1 라이트 데이터들(TRAN_WDATA1)은 '0, 1, 2'만 존재하는 것을 확인할 수 있다. 즉, 컨트롤러(A30)는, 호스트(A10)로부터 9개의 라이트 데이터들(WDATA)가 입력된 시점에서 제1 트랜젝션은 아직 커밋되지 않은 상태(Transaction Uncomplete)라는 것을 확인할 수 있다.
정리하면, 컨트롤러(A30)는, 총 5개의 라이트 데이터를 저장할 수 있는 공간을 갖는 제1 라이트 버퍼(A32)에 3개의 제1 라이트 데이터들(TRAN_WDATA1)인 '0, 1, 2'를 저장한 후, 나머지 2개의 라이트 데이터를 저장할 수 있는 공간은 비워둔(empty)다.
그리고, 컨트롤러(A30)는, 호스트(A10)에서 입력되는 9개의 라이트 데이터들(WDATA) 각각의 트랜젝션 아이디정보(TRID)가 2값을 갖는 2개의 라이트 데이터들(WDATA)인 '110, 111'이 제2 트랜젝션으로 그룹화된 라이트 데이터들(WDATA)이라고 판단하고 제2 라이트 데이터들(TRAN_WDATA2)로서 구분한다.
이때, 제2 라이트 데이터들(TRAN_WDATA2)로 구분될 수 있는 '110, 111' 중 시작데이터인 '110'에 대응하는 제2 시작커맨드(미도시)에는 제2 전체크기정보(TTSIZE2)가 포함되어 있다. 따라서, 컨트롤러(A30)는, '110'에 대응하는 제2 시작커맨드로부터 제2 전체크기정보(TTSIZE2)가 '4'라는 것을 확인할 수 있다. 이렇게, 컨트롤러(A30)는, 제2 전체크기정보(TTSIZE2)가 '4'라는 것을 확인하는 것에 응답하여 총 4개의 라이트 데이터를 저장할 수 있는 메모리 영역을 휘발성 메모리(144)에서 할당하여 제2 라이트 버퍼(A33)로서 관리한다.
따라서, 컨트롤러(A30)는, 제2 라이트 데이터들(TRAN_WDATA2)로 구분될 수 있는 '110, 111' 중 시작데이터인 '110'이 입력되기 이전에 4개의 라이트 데이터를 저장할 수 있는 공간을 갖는 제2 라이트 버퍼(A33)를 휘발성 메모리(144)에서 할당할 수 있다.
또한, 컨트롤러(A30)는, 호스트(A10)로부터 9개의 라이트 데이터들(WDATA)가 모두 입력된 후에도 제2 트랜젝션으로 구분되는 제2 라이트 데이터들(TRAN_WDATA2)은 '110, 111'만 존재하는 것을 확인할 수 있다. 즉, 컨트롤러(A30)는, 호스트(A10)로부터 9개의 라이트 데이터들(WDATA)가 입력된 시점에서 제2 트랜젝션은 아직 커밋되지 않은 상태(Transaction Uncomplete)라는 것을 확인할 수 있다.
정리하면, 컨트롤러(A30)는, 총 4개의 라이트 데이터를 저장할 수 있는 공간을 갖는 제2 라이트 버퍼(A33)에 2개의 제2 라이트 데이터들(TRAN_WDATA2)인 '110, 111'를 저장한 후, 나머지 2개의 라이트 데이터를 저장할 수 있는 공간은 비워둔다.
그리고, 컨트롤러(A30)는, 호스트(A10)에서 입력되는 9개의 라이트 데이터들(WDATA) 각각의 트랜젝션 아이디정보(TRID)가 어떠한 값으로도 설정되어 있지 않은 라이트 데이터들(WDATA)인 'A, B, C, D'이 트랜젝션으로 그룹화되지 않은 라이트 데이터들(WDATA)이라고 판단하고 노말 라이트 데이터들(NMAL_WDATA)로서 구분한다.
이때, 노말 라이트 데이터들(NMAL_WDATA)로 구분될 수 있는 'A, B, C, D' 중 시작데이터인 'A'에 대응하는 라이트 커맨드(미도시)에 포함된 트랜젝션 아이디정보(TRID)는 어떠한 값으로도 설정되어 있지 않다.
따라서, 컨트롤러(A30)는, 'A'에 대응하는 라이트 커맨드에 포함된 트랜젝션 아이디정보(TRID)가 어떠한 값으로도 설정되어 있지 않다는 것을 확인하는 것에 응답하여 총 10개의 라이트 데이터를 저장할 수 있는 메모리 영역을 휘발성 메모리(144)에서 할당하여 노말 라이트 버퍼(A31)로서 관리한다.
이때, 컨트롤러(A30)에서 10개 라이트 데이터를 저장할 수 있는 휘발성 메모리(144)의 공간을 노말 라이트 버퍼(A31)로 할당하는 것은, 노말 라이트 버퍼(A31)의 기준이 되는 '설정된 크기'를 10이라고 가정하였기 때문이다. 따라서, 도면과 다르게 '설정된 크기'를 20이라고 가정할 경우, 컨트롤러(A30)는, 20개 라이트 데이터를 저장할 수 있는 휘발성 메모리(144)의 공간을 노말 라이트 버퍼(A31)로 할당할 것이다.
정리하면, 컨트롤러(A30)는, 총 10개의 라이트 데이터를 저장할 수 있는 공간을 갖는 노말 라이트 버퍼(A31)에 4개의 노말 라이트 데이터들(NMAL_WDATA)인 'A, B, C, D'를 저장한 후, 나머지 6개의 라이트 데이터를 저장할 수 있는 공간이 비워둔다.
전술한 바와 같이 9개의 라이트 데이터들(WDATA)이 입력되어 도 3a에 도시된 것과 같은 상태에서는, 노말 라이트 버퍼(A31)에 노말 라이트 데이터(WRITE_DATA)가 꽉 찬 상태가 아니므로, 노말 라이트 버퍼(A31)를 플러시(flush)해야 하는 경우가 아닌 것을 알 수 있다. 마찬가지로, 제1 트랜젝션과 제2 트랜젝션이 모두 완료되지 않은 상태이므로, 제1 라이트 버퍼(A32) 및 제2 라이트 버퍼(A33)를 플러시 해야 하는 경우가 아닌 것을 알 수 있다.
도 3a에 도시된 상태에 이어서 도 3b를 참조하면, 호스트(A10)에서 총 8개의 라이트 데이터들(WDATA)이 입력되는 것을 가정할 수 있다. 이때, 8개의 라이트 데이터들(WDATA)이 호스트(A10)로부터 입력되는 순서는 미리 정의되지 않으며, 랜덤하게 섞여서 입력되는 것을 가정할 수 있다.
구체적으로, 컨트롤러(A30)는, 호스트(A10)에서 입력되는 8개의 라이트 데이터들(WDATA) 각각의 트랜젝션 아이디정보(TRID)를 확인하여 2개의 제1 라이트 데이터들(TRAN_WDATA1)과 2개의 제2 라이트 데이터들(TRAN_WDATA2) 및 4개의 노말 라이트 데이터들(NMAL_WDATA)로 구분한다.
좀 더 구체적으로, 컨트롤러(A30)는, 호스트(A10)에서 입력되는 8개의 라이트 데이터들(WDATA) 각각의 트랜젝션 아이디정보(TRID)가 1값을 갖는 2개의 라이트 데이터들(WDATA)인 '3, 4'가 제1 트랜젝션으로 그룹화된 라이트 데이터들(WDATA)이라고 판단하고 제1 라이트 데이터들(TRAN_WDATA1)로서 구분한다.
이때, 제1 트랜젝션으로 그룹화된 제1 라이트 데이터들(TRAN_WDATA1)을 저장하기 위한 제1 라이트 버퍼(A32)는, 도 3a에서 설명한 동작을 통해 이미 휘발성 메모리(144)에 할당되어 있는 상태이다.
따라서, 컨트롤러(A30)는, 제1 라이트 데이터들(TRAN_WDATA1)로 구분될 수 있는 '3, 4'를 별도의 추가동작없이 제1 라이트 버퍼(A32)에 즉시 저장한다. 이때, 도 3a에서 설명한 동작을 통해 제1 라이트 버퍼(A32)는, 총 5개의 라이트 데이터를 저장할 수 있는 공간을 휘발성 메모리(144)에서 할당받았으며, 3개의 데이터인 '0, 1, 2'만 저장하고 2개의 라이트 데이터를 저장할 수 있는 공간을 비워둔 상태였다.
때문에, 컨트롤러(A30)는, 도 3b에서와 같이 제1 라이트 데이터들(TRAN_WDATA1)로 구분될 수 있는 '3, 4'를 별도의 추가동작없이 제1 라이트 버퍼(A32)에 즉시 저장한다. 이렇게, 도 3b에서 제1 라이트 데이터들(TRAN_WDATA1)로 구분될 수 있는 '3, 4'가 제1 라이트 버퍼(A32)에 저장되면서, 제1 라이트 버퍼(A32)의 모든 공간, 즉, 5개의 라이트 데이터를 저장할 수 있는 공간이 꽉찬상태가 된다.
또한, 컨트롤러(A30)는, 제1 트랜젝션으로 구분되는 제1 라이트 데이터들(TRAN_WDATA1)인 '0, 1, 2, 3, 4'가 제1 라이트 버퍼(A32)에 모두 저장되어 제1 라이트 버퍼(A32)의 모든 공간이 꽉차는 시점에서 제1 트랜젝션의 커밋이 완료된 상태(Transaction Complete)라는 것을 확인할 수 있다.
그리고, 컨트롤러(A30)는, 호스트(A10)에서 입력되는 8개의 라이트 데이터들(WDATA) 각각의 트랜젝션 아이디정보(TRID)가 2값을 갖는 2개의 라이트 데이터들(WDATA)인 '112, 113'이 제2 트랜젝션으로 그룹화된 라이트 데이터들(WDATA)이라고 판단하고 제2 라이트 데이터들(TRAN_WDATA2)로서 구분한다.
이때, 제2 트랜젝션으로 그룹화된 제2 라이트 데이터들(TRAN_WDATA2)을 저장하기 위한 제2 라이트 버퍼(A33)는, 도 3a에서 설명한 동작을 통해 이미 휘발성 메모리(144)에 할당되어 있는 상태이다.
따라서, 컨트롤러(A30)는, 제2 라이트 데이터들(TRAN_WDATA2)로 구분될 수 있는 '112, 113'를 별도의 추가동작없이 제2 라이트 버퍼(A33)에 즉시 저장한다. 이때, 도 3a에서 설명한 동작을 통해 제2 라이트 버퍼(A33)는, 총 4개의 라이트 데이터를 저장할 수 있는 공간을 휘발성 메모리(144)에서 할당받았으며, 2개의 데이터인 '110, 111'만 저장하고 2개의 라이트 데이터를 저장할 수 있는 공간을 비워둔 상태였다.
때문에, 컨트롤러(A30)는, 도 3b에서와 같이 제2 라이트 데이터들(TRAN_WDATA2)로 구분될 수 있는 '112, 113'를 별도의 추가동작없이 제2 라이트 버퍼(A33)에 즉시 저장한다. 이렇게, 도 3b에서 제2 라이트 데이터들(TRAN_WDATA2)로 구분될 수 있는 '112, 113'가 제2 라이트 버퍼(A33)에 저장되면서, 제2 라이트 버퍼(A33)의 모든 공간, 즉, 4개의 라이트 데이터를 저장할 수 있는 공간이 꽉찬상태가 된다.
또한, 컨트롤러(A30)는, 제2 트랜젝션으로 구분되는 제2 라이트 데이터들(TRAN_WDATA2)인 '110, 111, 112, 113'가 제2 라이트 버퍼(A33)에 모두 저장되어 제2 라이트 버퍼(A33)의 모든 공간이 꽉차는 시점에서 제2 트랜젝션의 커밋이 완료된 상태(Transaction Complete)라는 것을 확인할 수 있다.
그리고, 컨트롤러(A30)는, 호스트(A10)에서 입력되는 8개의 라이트 데이터들(WDATA) 각각의 트랜젝션 아이디정보(TRID)가 어떠한 값으로도 설정되어 있지 않은 라이트 데이터들(WDATA)인 'E, F, G, H'가 트랜젝션으로 그룹화되지 않은 라이트 데이터들(WDATA)이라고 판단하고 노말 라이트 데이터들(NMAL_WDATA)로서 구분한다.
이때, 트랜젝션으로 그룹화되지 않은 노말 라이트 데이터들(NMAL_WDATA)을 저장하기 위한 노말 라이트 버퍼(A31)는, 도 3a에서 설명한 동작을 통해 이미 휘발성 메모리(144)에 할당되어 있는 상태이다.
따라서, 컨트롤러(A30)는, 노말 라이트 데이터들(NMAL_WDATA)로 구분될 수 있는 'E, F, G, H'를 별도의 추가동작없이 노말 라이트 버퍼(A31)에 즉시 저장한다. 이때, 도 3a에서 설명한 동작을 통해 노말 라이트 버퍼(A31)는, 총 10개의 라이트 데이터를 저장할 수 있는 공간을 휘발성 메모리(144)에서 할당받았으며, 4개의 데이터인 'A, B, C, D'만 저장하고 6개의 라이트 데이터를 저장할 수 있는 공간을 비워둔 상태였다.
때문에, 컨트롤러(A30)는, 도 3b에서와 같이 노말 라이트 데이터들(NMAL_WDATA)로 구분될 수 있는 'E, F, G, H'를 별도의 추가동작없이 노말 라이트 버퍼(A31)에 즉시 저장한다. 이렇게, 도 3b에서 노말 라이트 데이터들(NMAL_WDATA)로 구분될 수 있는 'E, F, G, H'가 노말 라이트 버퍼(A31)에 저장되면서, 총 10개의 라이트 데이터를 저장할 수 있는 공간을 갖는 노말 라이트 버퍼(A31)에 8개의 노말 라이트 데이터들(NMAL_WDATA)인 'A, B, C, D, E, F, G, H'가 저장되고, 나머지 2개의 라이트 데이터를 저장할 수 있는 공간이 비어있는 상태가 된다.
한편, 도 3a에 도시된 것과 같은 상태에 이어서 8개의 라이트 데이터들(WDATA)이 더 입력된 도 3b와 같은 상태에서는, 노말 라이트 버퍼(A31)에 노말 라이트 데이터(WRITE_DATA)가 꽉 찬 상태가 아니므로, 노말 라이트 버퍼(A31)를 플러시(flush)해야 하는 경우가 아닌 것을 알 수 있다. 하지만, 제1 트랜젝션과 제2 트랜젝션은 모두 커밋이 완료된 상태이므로, 제1 라이트 버퍼(A32) 및 제2 라이트 버퍼(A33)를 플러시해야 하는 경우인 것을 알 수 있다.
이때, 도 3a에 도시된 것과 같은 상태에서 도 3b와 같은 상태로 넘어갈 때, 호스트(A10)로 부터 입력되는 라이트 데이터들(WDATA)의 입력순서는 랜덤이라고 가정하였으므로, 제1 트랜젝션의 커밋이 완료되는 시점이 제2 트랜젝션의 커밋이 완료되는 시점보다 앞선 시점이 될 수도 있고, 제2 트랜젝션의 커밋이 완료되는 시점이 제1 트랜젝션의 커밋이 완료되는 시점보다 앞선 시점이 될 수 있다.
여기서, 제1 트랜젝션의 커밋이 완료되는 시점이 제2 트랜젝션의 커밋이 완료되는 시점보다 앞선 시점이 되는 경우, 제1 트랜젝션의 커밋이 완료되는 시점으로부터 설정된 제1 시간간격 이내에 제2 트랜젝션의 커밋이 완료되었다고 가정할 수 있다.
반대로, 제2 트랜젝션의 커밋이 완료되는 시점이 제1 트랜젝션의 커밋이 완료되는 시점보다 앞선 시점이 되는 경우, 제2 트랜젝션의 커밋이 완료되는 시점으로부터 설정된 제1 시간간격 이내에 제1 트랜젝션의 커밋이 완료되었다고 가정할 수 있다.
이렇게, 제1 트랜젝션의 커밋이 완료되는 시점과 제2 트랜젝션의 커밋이 완료되는 시점이 설정된 제1 시간간격 이내가 되는 경우, 컨트롤러(A30)는, 제1 트랜젝션의 커밋에 대응하는 제1 라이트 버퍼(A32)에 대한 제1 플러시동작(FLUSH1)의 수행시점과 제2 트랜젝션의 커밋에 대응하는 제2 라이트 버퍼(A33)에 대한 제2 플러시동작(FLUSH2)의 수행시점을 서로 동기화(Synchronize)시킨다.
이렇게, 컨트롤러(A30)는, 제1 플러시동작(FLUSH1)의 수행시점과 제2 플러시동작(FLUSH2)의 수행시점을 동기화시킴으로써, 제1 라이트 버퍼(A32)에 저장된 제1 라이트 데이터들(TRAN_WDATA1)을 비휘발성 메모리 장치들(A40, A50, A60)에 저장하는 제1 라이트동작(WRTIE1)의 수행이 시작되는 시점과 제2 라이트 버퍼(A33)에 저장된 제2 라이트 데이터들(TRAN_WDATA2)을 비휘발성 메모리 장치들(A40, A50, A60)에 저장하는 제2 라이트동작(WRITE2)을 동기화시킨다고 볼 수 있다.
따라서, 컨트롤러(A30)는, 도 4a에 도시된 '제1 동기화 선택동작'의 경우와 같이, 제1 플러시동작(FLUSH1)의 수행시점과 제2 플러시동작(FLUSH2)의 수행시점을 동기화시키는 것에 응답하여 제1 라이트동작(WRTIE1)의 수행이 완료되었음을 호스트(A10)에 알려주기 위한 제1 확인(ack)신호(ACK1)를 호스트(A10)로 전달하는 시점과 제2 플러시동작(FLUSH2)에 연결된 제2 라이트동작(WRITE2)의 수행이 완료되었음을 호스트(A10)에 알려주기 위한 제2 확인신호(ACK2)를 호스트(A10)로 전달하는 시점을 서로 동기화시킬 수 있다.
물론, 컨트롤러(A30)는, 도 4b에 도시된 '제1 동기화 선택동작'의 경우와 같이, 제1 플러시동작(FLUSH1)의 수행시점과 제2 플러시동작(FLUSH2)의 수행시점을 동기화시키지 않는 것에 응답하여 제1 라이트동작(WRTIE1)의 수행이 완료되었음을 호스트(A10)에 알려주기 위한 제1 확인(ack)신호(ACK1)를 호스트(A10)로 전달하는 시점과 제2 플러시동작(FLUSH2)에 연결된 제2 라이트동작(WRITE2)의 수행이 완료되었음을 호스트(A10)에 알려주기 위한 제2 확인신호(ACK2)를 호스트(A10)로 전달하는 시점을 서로 동기화시키지 않을 수 있다(Asynchronize).
또한, 컨트롤러(A30)는, 도 4c에 도시된 '제2 동기화 선택동작'의 경우와 같이, 제1 플러시동작(FLUSH1)의 수행시점과 제2 플러시동작(FLUSH2)의 수행시점이 동기화된 경우에도, 제1 플러시동작(FLUSH1)에 연결된 제1 라이트동작(WRTIE1)의 수행이 완료되었음을 호스트(A10)에 알려주기 위한 제1 확인신호(ACK1)가 생성되는 시점과 제2 플러시동작(FLUSH2)에 연결된 제2 라이트동작(WRITE2)의 수행이 완료되었음을 호스트(A10)에 알려주기 위한 제2 확인신호(ACK2)가 생성되는 시점이 설정된 제2 시간간격 이내인 경우에, 제1 확인신호(ACK1)를 호스트(A10)로 전달하는 시점과 제2 확인신호(ACK2)를 호스트(A10)로 전달하는 시점을 서로 동기화시킬 수 있다.
물론, 컨트롤러(A30)는, 도 4d에 도시된 '제2 동기화 선택동작'의 경우와 같이, 제1 플러시동작(FLUSH1)의 수행시점과 제2 플러시동작(FLUSH2)의 수행시점이 동기화된 경우에도, 제1 플러시동작(FLUSH1)에 연결된 제1 라이트동작(WRTIE1)의 수행이 완료되었음을 호스트(A10)에 알려주기 위한 제1 확인신호(ACK1)가 생성되는 시점과 제2 플러시동작(FLUSH2)에 연결된 제2 라이트동작(WRITE2)의 수행이 완료되었음을 호스트(A10)에 알려주기 위한 제2 확인신호(ACK2)가 생성되는 시점이 설정된 제2 시간간격을 넘어서는 경우에, 제1 확인신호(ACK1)를 호스트(A10)로 전달하는 시점과 제2 확인신호(ACK2)를 호스트(A10)로 전달하는 시점을 서로 동기화시키지 않을 수 있다(Asynchronize).
한편, 다시 도 3b를 참조하면, 컨트롤러(A30)는, 제1 라이트동작(WRTIE1)의 수행을 완료한 후, 제1 라이트 버퍼(A32)를 휘발성 메모리(144)에서 릴리즈(release) 시킨다(WRITE BUFFER1 RELEASE). 즉, 컨트롤러(A30)는, 호스트(A10)로부터 제1 라이트 데이터들(TRAN_WDATA1)이 입력되는 것에 응답하여 휘발성 메모리(144)에 할당하였던 제1 라이트 버퍼(A32)를, 제1 라이트동작(WRTIE1)을 수행한 이후에 휘발성 메모리(144)에서 릴리즈시킨다.
마찬가지로, 컨트롤러(A30)는, 제2 라이트동작(WRTIE2)의 수행을 완료한 후, 제2 라이트 버퍼(A33)를 휘발성 메모리(144)에서 릴리즈(release) 시킨다(WRITE BUFFER2 RELEASE). 즉, 컨트롤러(A30)는, 호스트(A10)로부터 제2 라이트 데이터들(TRAN_WDATA2)이 입력되는 것에 응답하여 휘발성 메모리(144)에 할당하였던 제2 라이트 버퍼(A33)를, 제2 라이트동작(WRTIE2)을 수행한 이후에 휘발성 메모리(144)에서 릴리즈시킨다.
도 3a에 도시된 상태에 이어서 도 3c를 참조하면, 호스트(A10)에서 총 7개의 라이트 데이터들(WDATA)이 입력되는 것을 가정할 수 있다. 이때, 7개의 라이트 데이터들(WDATA)이 호스트(A10)로부터 입력되는 순서는 미리 정의되지 않으며, 랜덤하게 섞여서 입력되는 것을 가정할 수 있다.
구체적으로, 컨트롤러(A30)는, 호스트(A10)에서 입력되는 7개의 라이트 데이터들(WDATA) 각각의 트랜젝션 아이디정보(TRID)를 확인하여 1개의 제1 라이트 데이터들(TRAN_WDATA1)과 2개의 제2 라이트 데이터들(TRAN_WDATA2) 및 4개의 노말 라이트 데이터들(NMAL_WDATA)로 구분한다.
좀 더 구체적으로, 컨트롤러(A30)는, 호스트(A10)에서 입력되는 7개의 라이트 데이터들(WDATA) 각각의 트랜젝션 아이디정보(TRID)가 1값을 갖는 1개의 라이트 데이터들(WDATA)인 '3'이 제1 트랜젝션으로 그룹화된 라이트 데이터들(WDATA)이라고 판단하고 제1 라이트 데이터들(TRAN_WDATA1)로서 구분한다.
이때, 제1 트랜젝션으로 그룹화된 제1 라이트 데이터들(TRAN_WDATA1)을 저장하기 위한 제1 라이트 버퍼(A32)는, 도 3a에서 설명한 동작을 통해 이미 휘발성 메모리(144)에 할당되어 있는 상태이다.
따라서, 컨트롤러(A30)는, 제1 라이트 데이터들(TRAN_WDATA1)로 구분될 수 있는 '3'을 별도의 추가동작없이 제1 라이트 버퍼(A32)에 즉시 저장한다. 이때, 도 3a에서 설명한 동작을 통해 제1 라이트 버퍼(A32)는, 총 5개의 라이트 데이터를 저장할 수 있는 공간을 휘발성 메모리(144)에서 할당받았으며, 3개의 데이터인 '0, 1, 2'만 저장하고 2개의 라이트 데이터를 저장할 수 있는 공간을 비워둔 상태였다.
때문에, 컨트롤러(A30)는, 도 3c에서와 같이 제1 라이트 데이터들(TRAN_WDATA1)로 구분될 수 있는 '3'을 별도의 추가동작없이 제1 라이트 버퍼(A32)에 즉시 저장한다. 이렇게, 도 3c에서 제1 라이트 데이터들(TRAN_WDATA1)로 구분될 수 있는 '3'이 제1 라이트 버퍼(A32)에 저장되면서, 총 5개의 라이트 데이터를 저장할 수 있는 공간을 갖는 제1 라이트 버퍼(A32)에 4개의 제1 라이트 데이터들(TRAN_WDATA1)인 '0, 1, 2, 3'을 저장한 후, 나머지 1개의 라이트 데이터를 저장할 수 있는 공간은 비워둔다.
또한, 컨트롤러(A30)는, 제1 트랜젝션으로 구분되는 제1 라이트 데이터들(TRAN_WDATA1)인 '0, 1, 2, 3'만 제1 라이트 버퍼(A32)에 저장되어 제1 라이트 버퍼(A32)에 남는 공간이 존재하며, 그에 따라, 제1 트랜젝션의 커밋이 완료되지 않은 상태(Transaction Uncomplete)라는 것을 확인할 수 있다.
그리고, 컨트롤러(A30)는, 호스트(A10)에서 입력되는 7개의 라이트 데이터들(WDATA) 각각의 트랜젝션 아이디정보(TRID)가 2값을 갖는 2개의 라이트 데이터들(WDATA)인 '112, 113'이 제2 트랜젝션으로 그룹화된 라이트 데이터들(WDATA)이라고 판단하고 제2 라이트 데이터들(TRAN_WDATA2)로서 구분한다.
이때, 제2 트랜젝션으로 그룹화된 제2 라이트 데이터들(TRAN_WDATA2)을 저장하기 위한 제2 라이트 버퍼(A33)는, 도 3a에서 설명한 동작을 통해 이미 휘발성 메모리(144)에 할당되어 있는 상태이다.
따라서, 컨트롤러(A30)는, 제2 라이트 데이터들(TRAN_WDATA2)로 구분될 수 있는 '112, 113'를 별도의 추가동작없이 제2 라이트 버퍼(A33)에 즉시 저장한다. 이때, 도 3a에서 설명한 동작을 통해 제2 라이트 버퍼(A33)는, 총 4개의 라이트 데이터를 저장할 수 있는 공간을 휘발성 메모리(144)에서 할당받았으며, 2개의 데이터인 '110, 111'만 저장하고 2개의 라이트 데이터를 저장할 수 있는 공간을 비워둔 상태였다.
때문에, 컨트롤러(A30)는, 도 3c에서와 같이 제2 라이트 데이터들(TRAN_WDATA2)로 구분될 수 있는 '112, 113'를 별도의 추가동작없이 제2 라이트 버퍼(A33)에 즉시 저장한다. 이렇게, 도 3c에서 제2 라이트 데이터들(TRAN_WDATA2)로 구분될 수 있는 '112, 113'가 제2 라이트 버퍼(A33)에 저장되면서, 제2 라이트 버퍼(A33)의 모든 공간, 즉, 4개의 라이트 데이터를 저장할 수 있는 공간이 꽉찬상태가 된다.
또한, 컨트롤러(A30)는, 제2 트랜젝션으로 구분되는 제2 라이트 데이터들(TRAN_WDATA2)인 '110, 111, 112, 113'가 제2 라이트 버퍼(A33)에 모두 저장되어 제2 라이트 버퍼(A33)의 모든 공간이 꽉차는 시점에서 제2 트랜젝션의 커밋이 완료된 상태(Transaction Complete)라는 것을 확인할 수 있다.
그리고, 컨트롤러(A30)는, 호스트(A10)에서 입력되는 7개의 라이트 데이터들(WDATA) 각각의 트랜젝션 아이디정보(TRID)가 어떠한 값으로도 설정되어 있지 않은 라이트 데이터들(WDATA)인 'E, F, G, H'가 트랜젝션으로 그룹화되지 않은 라이트 데이터들(WDATA)이라고 판단하고 노말 라이트 데이터들(NMAL_WDATA)로서 구분한다.
이때, 트랜젝션으로 그룹화되지 않은 노말 라이트 데이터들(NMAL_WDATA)을 저장하기 위한 노말 라이트 버퍼(A31)는, 도 3a에서 설명한 동작을 통해 이미 휘발성 메모리(144)에 할당되어 있는 상태이다.
따라서, 컨트롤러(A30)는, 노말 라이트 데이터들(NMAL_WDATA)로 구분될 수 있는 'E, F, G, H'를 별도의 추가동작없이 노말 라이트 버퍼(A31)에 즉시 저장한다. 이때, 도 3a에서 설명한 동작을 통해 노말 라이트 버퍼(A31)는, 총 10개의 라이트 데이터를 저장할 수 있는 공간을 휘발성 메모리(144)에서 할당받았으며, 4개의 데이터인 'A, B, C, D'만 저장하고 6개의 라이트 데이터를 저장할 수 있는 공간을 비워둔 상태였다.
때문에, 컨트롤러(A30)는, 도 3c에서와 같이 노말 라이트 데이터들(NMAL_WDATA)로 구분될 수 있는 'E, F, G, H'를 별도의 추가동작없이 노말 라이트 버퍼(A31)에 즉시 저장한다. 이렇게, 도 3c에서 노말 라이트 데이터들(NMAL_WDATA)로 구분될 수 있는 'E, F, G, H'가 노말 라이트 버퍼(A31)에 저장되면서, 총 10개의 라이트 데이터를 저장할 수 있는 공간을 갖는 노말 라이트 버퍼(A31)에 7개의 노말 라이트 데이터들(NMAL_WDATA)인 'A, B, C, D, E, F, G, H'가 저장되고, 나머지 2개의 라이트 데이터를 저장할 수 있는 공간이 비어있는 상태가 된다.
한편, 도 3a에 도시된 것과 같은 상태에 이어서 7개의 라이트 데이터들(WDATA)이 더 입력된 도 3c와 같은 상태에서는, 노말 라이트 버퍼(A31)에 노말 라이트 데이터(WRITE_DATA)가 꽉 찬 상태가 아니므로, 노말 라이트 버퍼(A31)를 플러시(flush)해야 하는 경우가 아닌 것을 알 수 있다. 또한, 제1 트랜젝션은 커밋이 완료된 상태가 아니므로, 제1 라이트 버퍼(A32)를 플러시해야 하는 경우가 아닌 것을 알 수 있다. 하지만, 제2 트랜젝션은 커밋이 완료된 상태이므로, 제2 라이트 버퍼(A33)를 플러시해야 하는 경우인 것을 알 수 있다.
이때, 도 3a에 도시된 것과 같은 상태에서 도 3c와 같은 상태로 넘어갈 때, 제1 트랜젝션은 커밋이 완료되지 않은 상태를 유지하고, 제2 트랜젝션은 커밋이 완료된 상태로 전환된다. 따라서, 도 3c와 같은 상태에서 제1 트랜젝션의 커밋이 어느 시점에 완료될지 알 수 없지만, 제2 트랜젝션의 커밋이 완료되는 시점은 제1 트랜젝션의 커밋이 완료되는 시점보다 앞선 상태라는 것을 알 수 있다. 이를 통해, 제2 트랜젝션의 커밋이 완료되는 시점으로부터 설정된 제1 시간간격 이내에 제1 트랜젝션의 커밋이 완료되지 못했다는 것을 가정할 수 있다.
이렇게, 제1 트랜젝션의 커밋이 완료되는 시점과 제2 트랜젝션의 커밋이 완료되는 시점이 설정된 제1 시간간격을 초과하는 경우, 컨트롤러(A30)는, 제1 트랜젝션의 커밋에 대응하는 제1 라이트 버퍼(A32)에 대한 제1 플러시동작(FLUSH1)의 수행시점과 제2 트랜젝션의 커밋에 대응하는 제2 라이트 버퍼(A33)에 대한 제2 플러시동작(FLUSH2)의 수행시점을 동기화 시키지 않는다(Asynchronize).
즉, 도면에서와 같이 커밋이 완료된 제2 트랜젝션에 대응하는 제2 라이트 버퍼(A33)에 대한 제2 플러시동작(FLUSH2)이 수행된 후, 설정된 제1 시간간격을 초과한 어떤 임의의 시점에서 제1 트랜젝션의 커밋이 완료될 때, 제1 트랜젝션에 대응하는 제1 라이트 버퍼(A32)에 대한 제1 플러시동작(FLUSH1)이 수행될 수 있을 것이다.
이렇게, 컨트롤러(A30)는, 제1 플러시동작(FLUSH1)의 수행시점과 제2 플러시동작(FLUSH2)의 수행시점을 동기화시키지 않음으로써, 제1 라이트 버퍼(A32)에 저장된 제1 라이트 데이터들(TRAN_WDATA1)을 비휘발성 메모리 장치들(A40, A50, A60)에 저장하는 제1 라이트동작(WRTIE1)의 수행이 시작되는 시점과 제2 라이트 버퍼(A33)에 저장된 제2 라이트 데이터들(TRAN_WDATA2)을 비휘발성 메모리 장치들(A40, A50, A60)에 저장하는 제2 라이트동작(WRITE2)을 동기화시키지 않는다고 볼 수 있다. 그에 따라, 제1 라이트동작의 수행이 완료되는 시점과 제2 라이트동작의 수행이 완료되는 시점이 큰 차이를 가질 가능성이 높다.
따라서, 컨트롤러(A30)는, 도 4b에 도시된 '제1 동기화 선택동작'의 경우와 같이, 제1 플러시동작(FLUSH1)의 수행시점과 제2 플러시동작(FLUSH2)의 수행시점을 동기화시키지 않는 것에 응답하여 제1 라이트동작(WRTIE1)의 수행이 완료되었음을 호스트(A10)에 알려주기 위한 제1 확인(ack)신호(ACK1)를 호스트(A10)로 전달하는 시점과 제2 플러시동작(FLUSH2)에 연결된 제2 라이트동작(WRITE2)의 수행이 완료되었음을 호스트(A10)에 알려주기 위한 제2 확인신호(ACK2)를 호스트(A10)로 전달하는 시점을 서로 동기화시키지 않을 수 있다(Asynchronize).
이때, 도 3c에서는 제1 플러시동작(FLUSH1)의 수행시점과 제2 플러시동작(FLUSH2)의 수행시점을 동기화시키지 않는 것을 가정하므로, 도 4c 및 도 4d에 도시된 '제2 동기화 선택동작'의 경우가 선택되어 수행되는 것은 불가능하다.
한편, 다시 도 3c를 참조하면, 컨트롤러(A30)는, 컨트롤러(A30)는, 제2 라이트동작(WRTIE2)의 수행을 완료한 후, 제2 라이트 버퍼(A33)를 휘발성 메모리(144)에서 릴리즈(release) 시킨다(WRITE BUFFER2 RELEASE). 즉, 컨트롤러(A30)는, 호스트(A10)로부터 제2 라이트 데이터들(TRAN_WDATA2)이 입력되는 것에 응답하여 휘발성 메모리(144)에 할당하였던 제2 라이트 버퍼(A33)를, 제2 라이트동작(WRTIE2)을 수행한 이후에 휘발성 메모리(144)에서 릴리즈시킨다.
반면, 제1 라이트 버퍼(A32)에 대해서는 제1 플러시동작(FLUSH1)과, 그에 연결된 제1 라이트 동작(WRTIE1)이 수행되지 않은 상태이므로, 제1 라이트 버퍼(A32)는 휘발성 메모리(144)에서 계속 할당된 상태를 유지할 것이다.
도 3a에 도시된 상태에 이어서 도 3d를 참조하면, 호스트(A10)에서 총 7개의 라이트 데이터들(WDATA)이 입력되는 것을 가정할 수 있다. 이때, 7개의 라이트 데이터들(WDATA)이 호스트(A10)로부터 입력되는 순서는 미리 정의되지 않으며, 랜덤하게 섞여서 입력되는 것을 가정할 수 있다.
구체적으로, 컨트롤러(A30)는, 호스트(A10)에서 입력되는 7개의 라이트 데이터들(WDATA) 각각의 트랜젝션 아이디정보(TRID)를 확인하여 1개의 제1 라이트 데이터들(TRAN_WDATA1)과 2개의 제2 라이트 데이터들(TRAN_WDATA2) 및 4개의 노말 라이트 데이터들(NMAL_WDATA)로 구분한다.
좀 더 구체적으로, 컨트롤러(A30)는, 호스트(A10)에서 입력되는 7개의 라이트 데이터들(WDATA) 각각의 트랜젝션 아이디정보(TRID)가 1값을 갖는 1개의 라이트 데이터들(WDATA)인 '3'이 제1 트랜젝션으로 그룹화된 라이트 데이터들(WDATA)이라고 판단하고 제1 라이트 데이터들(TRAN_WDATA1)로서 구분한다.
이때, 제1 트랜젝션으로 그룹화된 제1 라이트 데이터들(TRAN_WDATA1)을 저장하기 위한 제1 라이트 버퍼(A32)는, 도 3a에서 설명한 동작을 통해 이미 휘발성 메모리(144)에 할당되어 있는 상태이다.
따라서, 컨트롤러(A30)는, 제1 라이트 데이터들(TRAN_WDATA1)로 구분될 수 있는 '3'을 별도의 추가동작없이 제1 라이트 버퍼(A32)에 즉시 저장한다. 이때, 도 3a에서 설명한 동작을 통해 제1 라이트 버퍼(A32)는, 총 5개의 라이트 데이터를 저장할 수 있는 공간을 휘발성 메모리(144)에서 할당받았으며, 3개의 데이터인 '0, 1, 2'만 저장하고 2개의 라이트 데이터를 저장할 수 있는 공간을 비워둔 상태였다.
때문에, 컨트롤러(A30)는, 도 3d에서와 같이 제1 라이트 데이터들(TRAN_WDATA1)로 구분될 수 있는 '3'을 별도의 추가동작없이 제1 라이트 버퍼(A32)에 즉시 저장한다. 이렇게, 도 3d에서 제1 라이트 데이터들(TRAN_WDATA1)로 구분될 수 있는 '3'이 제1 라이트 버퍼(A32)에 저장되면서, 총 5개의 라이트 데이터를 저장할 수 있는 공간을 갖는 제1 라이트 버퍼(A32)에 4개의 제1 라이트 데이터들(TRAN_WDATA1)인 '0, 1, 2, 3'을 저장한 후, 나머지 1개의 라이트 데이터를 저장할 수 있는 공간은 비워둔다.
이렇게, 제1 트랜젝션으로 구분되는 제1 라이트 데이터들(TRAN_WDATA1)인 '0, 1, 2, 3'를 제1 라이트 버퍼(A32)에 저장한 시점에서, 컨트롤러(A30)는, 제1 트랜젝션이 어보트되었다는 정보를 호스트(A10)로부터 전달받을 수 있다. 예컨대, 제1 라이트 데이터들(TRAN_WDATA1)로 구분되는 '3'을 제1 라이트 버퍼(A32)에 저장한 이후, 호스트(A10)로부터 제1 트랜젝션의 어보트정보를 포함하는 별도의 커맨드가 전송될 수 있다. 그에 따라, 제1 트랜젝션으로 구분되는 제1 라이트 데이터들(TRAN_WDATA1)인 '0, 1, 2, 3'만 제1 라이트 버퍼(A32)에 저장된 상태에서 제1 트랜젝션이 어보트된 상태(Transaction Abort)라는 것을 확인할 수 있다.
그리고, 컨트롤러(A30)는, 호스트(A10)에서 입력되는 7개의 라이트 데이터들(WDATA) 각각의 트랜젝션 아이디정보(TRID)가 2값을 갖는 2개의 라이트 데이터들(WDATA)인 '112, 113'이 제2 트랜젝션으로 그룹화된 라이트 데이터들(WDATA)이라고 판단하고 제2 라이트 데이터들(TRAN_WDATA2)로서 구분한다.
이때, 제2 트랜젝션으로 그룹화된 제2 라이트 데이터들(TRAN_WDATA2)을 저장하기 위한 제2 라이트 버퍼(A33)는, 도 3a에서 설명한 동작을 통해 이미 휘발성 메모리(144)에 할당되어 있는 상태이다.
따라서, 컨트롤러(A30)는, 제2 라이트 데이터들(TRAN_WDATA2)로 구분될 수 있는 '112, 113'를 별도의 추가동작없이 제2 라이트 버퍼(A33)에 즉시 저장한다. 이때, 도 3a에서 설명한 동작을 통해 제2 라이트 버퍼(A33)는, 총 4개의 라이트 데이터를 저장할 수 있는 공간을 휘발성 메모리(144)에서 할당받았으며, 2개의 데이터인 '110, 111'만 저장하고 2개의 라이트 데이터를 저장할 수 있는 공간을 비워둔 상태였다.
때문에, 컨트롤러(A30)는, 도 3d에서와 같이 제2 라이트 데이터들(TRAN_WDATA2)로 구분될 수 있는 '112, 113'를 별도의 추가동작없이 제2 라이트 버퍼(A33)에 즉시 저장한다. 이렇게, 도 3d에서 제2 라이트 데이터들(TRAN_WDATA2)로 구분될 수 있는 '112, 113'가 제2 라이트 버퍼(A33)에 저장되면서, 제2 라이트 버퍼(A33)의 모든 공간, 즉, 4개의 라이트 데이터를 저장할 수 있는 공간이 꽉찬상태가 된다.
또한, 컨트롤러(A30)는, 제2 트랜젝션으로 구분되는 제2 라이트 데이터들(TRAN_WDATA2)인 '110, 111, 112, 113'가 제2 라이트 버퍼(A33)에 모두 저장되어 제2 라이트 버퍼(A33)의 모든 공간이 꽉차는 시점에서 제2 트랜젝션의 커밋이 완료된 상태(Transaction Complete)라는 것을 확인할 수 있다.
그리고, 컨트롤러(A30)는, 호스트(A10)에서 입력되는 7개의 라이트 데이터들(WDATA) 각각의 트랜젝션 아이디정보(TRID)가 어떠한 값으로도 설정되어 있지 않은 라이트 데이터들(WDATA)인 'E, F, G, H'가 트랜젝션으로 그룹화되지 않은 라이트 데이터들(WDATA)이라고 판단하고 노말 라이트 데이터들(NMAL_WDATA)로서 구분한다.
이때, 트랜젝션으로 그룹화되지 않은 노말 라이트 데이터들(NMAL_WDATA)을 저장하기 위한 노말 라이트 버퍼(A31)는, 도 3a에서 설명한 동작을 통해 이미 휘발성 메모리(144)에 할당되어 있는 상태이다.
따라서, 컨트롤러(A30)는, 노말 라이트 데이터들(NMAL_WDATA)로 구분될 수 있는 'E, F, G, H'를 별도의 추가동작없이 노말 라이트 버퍼(A31)에 즉시 저장한다. 이때, 도 3a에서 설명한 동작을 통해 노말 라이트 버퍼(A31)는, 총 10개의 라이트 데이터를 저장할 수 있는 공간을 휘발성 메모리(144)에서 할당받았으며, 4개의 데이터인 'A, B, C, D'만 저장하고 6개의 라이트 데이터를 저장할 수 있는 공간을 비워둔 상태였다.
때문에, 컨트롤러(A30)는, 도 3d에서와 같이 노말 라이트 데이터들(NMAL_WDATA)로 구분될 수 있는 'E, F, G, H'를 별도의 추가동작없이 노말 라이트 버퍼(A31)에 즉시 저장한다. 이렇게, 도 3d에서 노말 라이트 데이터들(NMAL_WDATA)로 구분될 수 있는 'E, F, G, H'가 노말 라이트 버퍼(A31)에 저장되면서, 총 10개의 라이트 데이터를 저장할 수 있는 공간을 갖는 노말 라이트 버퍼(A31)에 7개의 노말 라이트 데이터들(NMAL_WDATA)인 'A, B, C, D, E, F, G, H'가 저장되고, 나머지 2개의 라이트 데이터를 저장할 수 있는 공간이 비어있는 상태가 된다.
한편, 도 3a에 도시된 것과 같은 상태에 이어서 7개의 라이트 데이터들(WDATA)이 더 입력된 도 3d와 같은 상태에서는, 노말 라이트 버퍼(A31)에 노말 라이트 데이터(WRITE_DATA)가 꽉 찬 상태가 아니므로, 노말 라이트 버퍼(A31)를 플러시(flush)해야 하는 경우가 아닌 것을 알 수 있다. 또한, 제1 트랜젝션은 어보트된 상태이므로, 제1 라이트 버퍼(A32)를 플러시해야 하는 경우가 아닌 것을 알 수 있다. 하지만, 제2 트랜젝션은 커밋이 완료된 상태이므로, 제2 라이트 버퍼(A33)를 플러시해야 하는 경우인 것을 알 수 있다.
이렇게, 도 3a에 도시된 것과 같은 상태에서 도 3d와 같은 상태로 넘어갈 때, 제1 트랜젝션은 어보트된 상태로 전환되고, 제2 트랜젝션은 커밋이 완료된 상태로 전환된다. 따라서, 도 3d와 같은 상태에서 제1 트랜젝션의 커밋이 완료되는 것은 불가능하다. 따라서, 제2 트랜젝션의 커밋이 완료되는 시점으로부터 설정된 제1 시간간격 이내에 제1 트랜젝션이 커밋되지 못한다는 것을 확정할 수 있다.
이렇게, 제2 트랜젝션의 커밋이 완료되는 것과 별개로 제1 트랜젝션이 어보트되는 경우, 컨트롤러(A30)는, 제1 트랜젝션의 어보트에 대응하여 제1 라이트 버퍼(A32)를 휘발성 메모리(144)에서 릴리즈(WRITE BUFFER1 RELEASE)시킨다.
그리고, 제1 트랜젝션이 어보트되는 것과는 별개로 제2 트랜젝션의 커밋이 완료되는 것에 대응하여 제2 라이트 버퍼(A33)에 대해서만 제2 플러시동작(FLUSH2)의 수행하고, 그에 따라 제2 라이트 버퍼(A33)에 저장된 제2 라이트 데이터들(TRAN_WDATA2)을 비휘발성 메모리 장치들(A40, A50, A60)에 저장하는 제2 라이트동작(WRITE2)을 수행한다.
이때, 도 3d에서는 제1 라이트 버퍼(A32)에 대한 제1 플러시동작(FLUSH1)의 수행되지 않는 것을 가정하므로, 도 4a 내지 도 4d에 도시된 '제1 동작화 선택동작' 및 '제2 동기화 선택동작'이 수행되지 않는다.
한편, 다시 도 3d를 참조하면, 컨트롤러(A30)는, 컨트롤러(A30)는, 제2 라이트동작(WRTIE2)의 수행을 완료한 후, 제2 라이트 버퍼(A33)를 휘발성 메모리(144)에서 릴리즈(release) 시킨다(WRITE BUFFER2 RELEASE). 즉, 컨트롤러(A30)는, 호스트(A10)로부터 제2 라이트 데이터들(TRAN_WDATA2)이 입력되는 것에 응답하여 휘발성 메모리(144)에 할당하였던 제2 라이트 버퍼(A33)를, 제2 라이트동작(WRTIE2)을 수행한 이후에 휘발성 메모리(144)에서 릴리즈시킨다.
반면, 컨트롤러(A30)는, 제1 트랜젝션이 어보트되는 것을 확인하는 시점에서, 제1 라이트 버퍼(A32)를 휘발성 메모리(144)에서 릴리즈시킨다.
이상에서 살펴본 바와 같이 본 발명의 제1 실시예에 따른 메모리 시스템(A20)은, 호스트(A10)로부터 제1 트랜젝션으로 그룹화된 제1 라이트 데이터들(TRAN_WDATA1)이 입력될 때, 제1 트랜젝션을 위해 전용으로 사용하기 위한 제1 라이트 버퍼(A32)를 휘발성 메모리에 할당할 수 있다. 또한, 호스트(A10)로부터 제2 트랜젝션으로 그룹화된 제2 라이트 데이터들(TRAN_WDATA2)이 입력될 때, 제2 트랜젝션을 위해 전용으로 사용하기 위한 제2 라이트 버퍼(A33)를 휘발성 메모리에 할당할 수 있다. 이때, 제1 라이트 버퍼(A32)와 제2 라이트 버퍼(A33)는 서로 구분될 수 있다. 마찬가지로, 제1 및 제2 라이트 버퍼(A33, A33)는, 노말 라이트 데이터들(NMAL_WDATA)을 관리하기 위한 노말 라이트 버퍼(A31)와 구분될 수 있다. 이를 통해, 본 발명의 제1 실시예에 따른 메모리 시스템(A20)은, 트랜젝션 라이트 데이터들을 효과적으로 관리하는 것이 가능하다.
또한, 본 발명의 제1 실시예에 따른 메모리 시스템(A20)은, 제1 트랜젝션이 커밋(commit)되는 것에 응답하여 제1 라이트 버퍼(A32)에서 수행되어야 하는 제1 플러시(flush)동작이 수행되는 시점과 제2 트랜젝션이 커밋되는 것에 응답하여 제2 라이트 버퍼(A33)에서 수행되어야 하는 제2 플러시동작이 수행되는 시점을 가능한 범위에서 최대한 동기화(Synchronize)시켜준다. 이를 통해, 제1 라이트 버퍼(A32)에 저장되어 있던 제1 라이트 데이터들(TRAN_WDATA1)을 비휘발성 메모리 장치들(A40, A50, A60)에 저장하는 제1 라이트동작(WRTIE1)과 제2 라이트 버퍼(A33)에 저장되어 있던 제2 라이트 데이터들(TRAN_WDATA2)을 비휘발성 메모리 장치들(A40, A50, A60)에 저장하는 제2 라이트동작(WRTIE2)을 동기화시켜 시작할 수 있으며, 제1 라이트 데이터들(TRAN_WDATA1)과 제2 라이트 데이터들(TRAN_WDATA2)을 비휘발성 메모리 장치들(A40, A50, A60)의 특정 저장공간에 모아서 저장시킬 가능성을 높일 수 있다. 즉, 제1 트랜젝션 및 제2 트랜젝션의 원자성(atomicity)을 유지하기 위한 알고리즘을 보다 단순화시킬 수 있다.
또한, 본 발명의 제1 실시예에 따른 메모리 시스템(A20)은, 제1 및 제2 라이트 버퍼(A33, A33)가 동기화된 상태로 플러시되는 것에 따라 동기화된 상태로 수행이 시작된 제1 및 제2 라이트동작(WRTIE1, WRITE2)의 수행이 각각 완료되는 것을 호스트(A10)에 알려주기 위한 제1 및 제2 확인신호(ACK1, ACK2)가 호스트로 전송되는 시점을 가능한 범위에서 최대한 동기화시켜준다. 즉, 메모리 시스템(A20)은, 두 개의 확인신호를 (ACK1, ACK2)를 한 번의 타이밍에 호스트(A10)로 전달할 수 있다. 이를 통해, 메모리 시스템(A20)에서 호스트(A10)로 확인신호를 전송하는 횟수를 최소화 시킬 수 있다.
도 5a 내지 도 5c는 본 발명의 제1 실시예에 따른 메모리 시스템의 동작을 설명하기 위해 도시한 순서도이다.
도 5를 참조하면, 호스트(A10)에서 메모리 시스템(A20)으로 라이트 데이터들(WDATA)이 전송되는 것(S5)에 응답하여 본 발명의 제1 실시예에 따른 메모리 시스템(A20)의 동작이 시작되는 것을 알 수 있다.
S5동작에 의해 전송된 라이트 데이터(WDATA)가 트랜젝션의 시작데이터인지를 확인한다(S10).
S10동작에서 트랜젝션의 시작데이터인 경우(YES), 메모리 시스템(A20)은, 트랜젝션 데이터를 저장하기 위한 새로운 트랜젝션 전용 라이트 버퍼(Transaction WRITE Buffer)를 생성한다(S20). 이때, S20동작에서는 트랜젝션의 종류에 대응하는 개수만큼 새로운 트랜젝션 전용 라이트 버퍼(Transaction WRITE Buffer)를 생성한다. 즉, 제1 트랜젝션에 대응하여 제1 트랜젝션 전용 라이트 버퍼를 생성하고, 제2 트랜젝션에 대응하여 제2 트랜젝션 전용 라이트 버퍼를 생성한다. 또한, S20동작에서는 트랜젝션의 시작데이터와 함께 전달되는 트랜젝션의 전체크기정보에 따라 새롭게 생성되는 트랜젝션 전용 라이트 버퍼의 크기를 가변할 수 있다.
S10동작에서 트랜젝션의 시작데이터가 아닌 경우(NO)는, S5동작에 의해 전송된 라이트 데이터(WDATA)가 노말 라이트 데이터(NMAL_WDATA)이거나 또는 트랜젝션의 시작데이터가 아닌 나머지 데이터라고 볼 수 있다.
만약, S5동작에 의해 전송된 라이트 데이터(WDATA)가 노말 라이트 데이터(NMAL_WDATA)인 경우라면, 노말 라이트 버퍼(Normal WRITE Buffer)에 저장한다(S30).
만약, S5동작에 의해 전송된 라이트 데이터(WDATA)가 트랜젝션의 시작데이터가 아닌 나머지 데이터인 경우 S20동작에서 생성된 트랜젝션 전용 라이트 버퍼(Transaction WRITE Buffer)에 저장한다(S30). 이때, S30동작에서는, S5동작에 의해 전송된 라이트 데이터(WDATA)가 어떤 트랜젝션의 종류인지를 확인하고, 확인된 트랜젝션에 대응하는 트랜젝션 전용 라이트 버퍼에 저장한다. 즉, S30동작에서는, S5동작에 의해 전송된 라이트 데이터(WDATA)가 제1 트랜젝션의 나머지 데이터인 경우 제1 트랜젝션 전용 라이트 버퍼에 저장하고, S5동작에 의해 전송된 라이트 데이터(WDATA)가 제2 트랜젝션의 나머지 데이터인 경우 제2 트랜젝션 전용 라이트 버퍼에 저장한다.
S30동작 이후, 트랜젝션 전용 라이트 버퍼 중 커밋이 완료된 버퍼가 존재하는지 여부를 확인한다(S40).
S40동작에서 커밋이 완료된 버퍼가 존재하지 않는 경우(NO), S5동작을 통해 다시 새로운 라이트 데이터(WDATA)가 입력될 때까지 별도의 동작을 수행하지 않는다.
S40동작에서 커밋이 완료된 버퍼가 존재하는 경우(YES), 또 다른 트랜젝션 전용 라이트 버퍼가 커밋이 완료되었는지 여부를 확인한다(S50). 즉, S40동작 및 S50동작을 통해 적어도 두 개 이상의 트랜젝션 전용 라이트 버퍼가 커밋되었는지 여부를 확인할 수 있다.
S50동작의 결과 하나의 트랜젝션 전용 라이트 버퍼만 커밋된 경우(NO), 커밋된 하나의 트랜젝션 전용 라이트 버퍼만 단독으로 플러시시킨다(S80). 이때, S80동작에서 플러시되는 트랜젝션 전용 라이트 버퍼는, 다른 트랜젝션 전용 라이트 버퍼와 동시에 플러시되지 않는 것(Asynchronize)을 알 수 있다.
S50동작의 결과 적어도 두 개 이상의 트랜젝션 전용 라이트 버퍼가 커밋된 경우(YES), 적어도 두 개 이상의 트랜젝션 전용 라이트 버퍼의 커밋시점이 설정된 제1 시간간격(SET TIME1) 이내인지 여부를 확인한다(S60). 즉, S40동작에서 커밋이 확인된 트랜젝션 전용 라이트 버퍼(Transaction WRITE Buffer<S40>)의 커밋시점과 S50동작에서 커밋이 확인된 트랜젝션 전용 라이트 버퍼(Transaction WRITE Buffer<S50>)의 커밋시점이 설정된 제1 시간간격(SET TIME1) 이내인지 여부를 확인한다(S60).
S60동작에서 적어도 두 개 이상의 트랜젝션 전용 라이트 버퍼의 커밋시점이 설정된 제1 시간간격(SET TIME1)을 초과하는 경우(NO), 커밋이 완료된 적어도 두 개 이상의 트랜젝션 전용 라이트 버퍼 각각에 대한 플러시동작을 서로 동기화시키지 않는다(Asynchronize, S80). 즉, S40동작에서 커밋이 확인된 트랜젝션 전용 라이트 버퍼(Transaction WRITE Buffer<S40>)에 대한 플러시동작과 S50동작에서 커밋이 확인된 트랜젝션 전용 라이트 버퍼(Transaction WRITE Buffer<S50>)에 대한 플러시 동작을 서로 동기화시키지 않는다(S80).
S60동작에서 적어도 두 개 이상의 트랜젝션 전용 라이트 버퍼의 커밋시점이 설정된 제1 시간간격(SET TIME1) 이내인 경우(YES), 커밋이 완료된 적어도 두 개 이상의 트랜젝션 전용 라이트 버퍼 각각에 대한 플러시동작을 서로 동기화시킨다(Synchronize, S70). 즉, S40동작에서 커밋이 확인된 트랜젝션 전용 라이트 버퍼(Transaction WRITE Buffer<S40>)에 대한 플러시동작과 S50동작에서 커밋이 확인된 트랜젝션 전용 라이트 버퍼(Transaction WRITE Buffer<S50>)에 대한 플러시 동작을 서로 동기화시킨다(S70).
S70동작에서 커밋이 완료된 적어도 두 개 이상의 트랜젝션 전용 라이트 버퍼 각각에 대한 플러시동작을 서로 동기화시킨 후에는 도 5b와 도 5c를 참조하여 두 가지 동작 중 어느 하나의 동작을 선택하여 수행할 수 있다.
먼저, 도 5b를 참조하면, S70동작에서 커밋이 완료된 적어도 두 개 이상의 트랜젝션 전용 라이트 버퍼 각각에 대한 플러시동작을 서로 동기화시킨 것에 대응하여 적어도 두 개 이상의 트랜젝션 전용 라이트 버퍼 각각에 저장된 트랜젝션 데이터를 비휘발성 메모리 장치들(A40, A50, A60)에 저장하는 적어도 두 개 이상의 라이트 동작(Write to Non-Volatile Memory, Transaction WRITE Buffer <S40&S50>)을 동기화시킨다(S90).
S70동작 및 S90동작을 통해 커밋이 완료된 적어도 두 개 이상의 트랜젝션 전용 라이트 버퍼 각각에 대한 플러시동작이 동기화되고, 그에 따라 적어도 두 개 이상의 라이트 동작이 동기화되었으므로, 도 5b에서는 추가적으로 별도의 조건을 확인하지 않고, 적어도 두 개 이상의 라이트 동작이 완료되는 것을 호스트에 알려주기 위한 적어도 두 개 이상의 확인신호(Ack<S40&S50> of Write Complete corresponding to (Transaction WRITE)Buffer<S40&S50>)가 호스트로 전송되는 시점을 동기화시킨다(S100).
그리고, 도 5c를 참조하면, S70동작에서 커밋이 완료된 적어도 두 개 이상의 트랜젝션 전용 라이트 버퍼 각각에 대한 플러시동작을 서로 동기화시킨 것에 대응하여 적어도 두 개 이상의 트랜젝션 전용 라이트 버퍼 각각에 저장된 트랜젝션 데이터를 비휘발성 메모리 장치들(A40, A50, A60)에 저장하는 적어도 두 개 이상의 라이트 동작(Write to Non-Volatile Memory, Transaction WRITE Buffer <S40&S50>)을 동기화시킨다(S90).
S70동작 및 S90동작을 통해 커밋이 완료된 적어도 두 개 이상의 트랜젝션 전용 라이트 버퍼 각각에 대한 플러시동작이 동기화되고, 그에 따라 적어도 두 개 이상의 라이트 동작이 동기화되었지만, 도 5c에서는, 적어도 두 개 이상의 라이트 동작이 각각 완료되는 시점이 설정된 제2 시간간격(SET TIME2) 이내인지 여부를 확인한다(S110).
S110동작에서 적어도 두 개 이상의 라이트 동작이 각각 완료되는 시점이 설정된 제2 시간간격(SET TIME2) 이내인 경우(YES), 적어도 두 개 이상의 라이트 동작이 완료되는 것을 호스트에 알려주기 위한 적어도 두 개 이상의 확인신호(Ack<S40&S50> of Write Complete corresponding to (Transaction WRITE)Buffer<S40&S50>)가 호스트로 전송되는 시점을 동기화시킨다(S120).
S110동작에서 적어도 두 개 이상의 라이트 동작이 각각 완료되는 시점이 설정된 제2 시간간격(SET TIME2)을 초과하는 경우(NO), 적어도 두 개 이상의 라이트 동작이 완료되는 것을 호스트에 알려주기 위한 적어도 두 개 이상의 확인신호(Ack<S40&S50> of Write Complete corresponding to (Transaction WRITE)Buffer<S40&S50>)가 호스트로 전송되는 시점을 동기화시키지 않는다(S130).
<제2 실시예>
도 6 및 도 7은 본 발명의 제2 실시예에 따른 메모리 시스템을 포함하는 데이터 처리 시스템의 구성을 설명하기 위해 도시한 도면이다.
도 6을 참조하면, 본 발명의 실시예에 따른 데이터 처리 시스템(Data Processing System)은, 호스트(C10)와, 메모리 시스템(C20)을 포함한다. 또한, 메모리 시스템(C20)은, 컨트롤러(C30)와, 제1 비휘발성 메모리 장치(C40)와, 제2 비휘발성 메모리 장치(C50), 및 제3 비휘발성 메모리 장치(C60)를 포함한다.
참고로, 도 6 및 도 7에서는, 메모리 시스템(C20)에 3개의 비휘발성 메모리 장치들(C40, C50, C60)즉, 제1 내지 제3 비휘발성 메모리 장치들(C40, C50, C60)이 포함된 형태인 것을 알 수 있다. 하지만, 이는 어디까지나 하나의 실시예일 뿐이며, 실제로는 더 적거나 더 많은 개수의 비휘발성 메모리 장치가 메모리 시스템에 포함되는 것도 얼마든지 가능하다. 이와 같이 메모리 시스템(C20)에 3개의 비휘발성 메모리 장치(C40, C50, C60)가 포함되는 형태의 실시예는, 하기에서 설명될 나머지 설명에서도 계속 사용되지만, 이는 어디까지나 하나의 실시예일 뿐이며, 실제로는 더 적거나 더 많은 개수의 비휘발성 메모리 장치가 메모리 시스템에 포함되는 것도 얼마든지 가능하다.
여기서, 호스트(C10)는, 사용자 요청에 해당하는 다수의 커맨드들(CMD)을 메모리 시스템(C20)로 전송하며, 그에 따라 메모리 시스템(C20)에서는 커맨드들(CMD)에 해당하는 동작들, 즉 사용자 요청에 상응하는 동작들을 수행한다.
그리고, 메모리 시스템(C20)은, 호스트(C10)의 요청에 응답하여 동작하며, 특히 호스트(C10)에 의해서 액세스되는 데이터를 저장한다. 다시 말해, 메모리 시스템(C20)은, 호스트(C10)의 주 기억 장치 또는 보조 기억 장치로 사용될 수 있다. 여기서, 메모리 시스템(C20)은 호스트(C10)과 연결되는 호스트 인터페이스 프로토콜에 따라, 다양한 종류의 저장 장치들 중 어느 하나로 구현될 수 있다. 예를 들면, 메모리 시스템(C20)은, 솔리드 스테이트 드라이브(SSD: Solid State Drive), MMC, eMMC(embedded MMC), RS-MMC(Reduced Size MMC), micro-MMC 형태의 멀티 미디어 카드(MMC: Multi Media Card), SD, mini-SD, micro-SD 형태의 시큐어 디지털(SD: Secure Digital) 카드, USB(Universal Storage Bus) 저장 장치, UFS(Universal Flash Storage) 장치, CF(Compact Flash) 카드, 스마트 미디어(Smart Media) 카드, 메모리 스틱(Memory Stick) 등과 같은 다양한 종류의 저장 장치들 중 어느 하나로 구현될 수 있다.
또한, 메모리 시스템(C20)은, 하나의 반도체 장치로 집적되어 메모리 카드를 구성할 수도 있으며, 일 예로 PC 카드(PCMCIA: Personal Computer Memory Card International Association), 컴팩트 플래시 카드(CF), 스마트 미디어 카드(SM, SMC), 메모리 스틱, 멀티미디어 카드(MMC, RS-MMC, MMCmicro), SD 카드(SD, miniSD, microSD, SDHC), 유니버설 플래시 기억 장치(UFS) 등과 같은 메모리 카드를 구성할 수 있다.
또한, 다른 일 예로, 메모리 시스템(C20)은, 컴퓨터, UMPC(Ultra Mobile PC), 워크스테이션, 넷북(net-book), PDA(Personal Digital Assistants), 포터블(portable) 컴퓨터, 웹 타블렛(web tablet), 태블릿 컴퓨터(tablet computer), 무선 전화기(wireless phone), 모바일 폰(mobile phone), 스마트폰(smart phone), e-북(e-book), PMP(portable multimedia player), 휴대용 게임기, 네비게이션(navigation) 장치, 블랙박스(black box), 디지털 카메라(digital camera), DMB(Digital Multimedia Broadcasting) 재생기, 3차원 텔레비전(3-dimensional television), 스마트 텔레비전(smart television), 디지털 음성 녹음기(digital audio recorder), 디지털 음성 재생기(digital audio player), 디지털 영상 녹화기(digital picture recorder), 디지털 영상 재생기(digital picture player), 디지털 동영상 녹화기(digital video recorder), 디지털 동영상 재생기(digital video player), 데이터 센터를 구성하는 스토리지, 정보를 무선 환경에서 송수신할 수 있는 장치, 홈 네트워크를 구성하는 다양한 전자 장치들 중 하나, 컴퓨터 네트워크를 구성하는 다양한 전자 장치들 중 하나, 텔레매틱스 네트워크를 구성하는 다양한 전자 장치들 중 하나, RFID(radio frequency identification) 장치, 또는 컴퓨팅 시스템을 구성하는 다양한 구성 요소들 중 하나 등을 구성할 수 있다.
아울러, 메모리 시스템(C20)에는, DRAM(Dynamic Random Access Memory), SRAM(Static RAM) 등과 같은 휘발성 메모리 장치와, ROM(Read Only Memory), MROM(Mask ROM), PROM(Programmable ROM), EPROM(Erasable ROM), EEPROM(Electrically Erasable ROM), FRAM(Ferromagnetic ROM), PRAM(Phase change RAM), MRAM(Magnetic RAM), RRAM(Resistive RAM), 플래시 메모리 등과 같은 비휘발성 메모리 장치와 같은 저장장치가 포함될 수 있다.
그리고, 메모리 시스템(C20)은, 호스트(C10)로부터 입력된 라이트 데이터들(WDATA)을 임시로 저장하기 위한 휘발성 메모리(144)를 포함한다.
그리고, 컨트롤러(C30)는, 각각 미리 정의된 크기를 갖는 다수의 라이트 버퍼(C31, C32, C33, C34)를 휘발성 메모리(144)에 할당한다. 이어서, 컨트롤러(C30)는, 호스트(C10)로부터 입력되는 트랜젝션(transaction)으로 그룹화되지 않은 노말 라이트 데이터들(NMAL_WDATA)을 다수의 라이트 버퍼(C31, C32, C33, C34) 중 트랜젝션 전용으로 설정되지 않은 라이트 버퍼들에 저장한다.
또한, 컨트롤러(C30)는, 호스트(C10)로부터 제1 트랜젝션으로 그룹화된 제1 라이트 데이터들(TRAN_WDATA1) 및 제1 트랜젝션의 커밋(commit)이 완료될 때까지 필요한 제1 전체크기정보(TTSIZE1)가 입력될 때, 제1 전체크기정보(TTSIZE1)에 응답하여 다수의 라이트 버퍼(C31, C32, C33, C34) 중 적어도 하나의 제1 라이트 버퍼를 제1 트랜젝션을 위해 전용(exclusive use)하기 위한 제1 전용옵션을 설정(set)한다.
좀 더 구체적으로 컨트롤러(C30)는, 제1 라이트 데이터들(TRAN_WDATA1)이 호스트(C10)로부터 입력되는 시점에서 다수의 라이트 버퍼들(C31, C32, C33, C34) 각각의 빈(empty)공간을 확인한 뒤, 확인된 빈공간 및 제1 전체크기정보(TTSIZE1)에 응답하여 다수의 라이트 버퍼들(C31, C32, C33, C34) 중 조합 가능한 최소개수의 라이트 버퍼에 대해 제1 전용옵션을 설정하여 제1 라이트 버퍼로서 사용한다.
또한, 컨트롤러(C30)는, 호스트(C10)로부터 제2 트랜젝션으로 그룹화된 제2 라이트 데이터들(TRAN_WDATA2) 및 제2 트랜젝션의 커밋이 완료될 때까지 필요한 제2 전체크기정보(TTSIZE2)가 입력될 때, 제2 전체크기정보(TTSIZE2)에 응답하여 다수의 라이트 버퍼(C31, C32, C33, C34) 중 제1 라이트 버퍼를 제외한 나머지 라이트 버퍼들 중 적어도 하나의 제2 라이트 버퍼를 제2 트랜젝션을 위해 전용하기 위한 제2 전용옵션을 설정한다.
좀 더 구체적으로 컨트롤러(C30)는, 제2 라이트 데이터들(TRAN_WDATA2)이 호스트(C10)로부터 입력되는 시점에서 다수의 라이트 버퍼들(C31, C32, C33, C34) 중 제1 라이트 버퍼를 제외한 나머지 라이트 버퍼들 각각의 빈(empty)공간을 확인한 뒤, 확인된 빈공간 및 제2 전체크기정보(TTSIZE2)에 응답하여 다수의 라이트 버퍼들(C31, C32, C33, C34)에서 제1 라이트 버퍼를 제외한 나머지 라이트 버퍼들 중 조합 가능한 최소개수의 라이트 버퍼에 대해 제2 전용옵션을 설정하여 제2 라이트 버퍼로서 사용한다.
참고로, 제1 트랜젝션으로 그룹화된 제1 라이트 데이터들(TRAN_WDATA1)이 제2 트랜젝션으로 그룹화된 제2 라이트 데이터들(TRAN_WDATA2)보다 먼저 입력되는 것을 가정하여 제1 트랜젝션을 위해 전용하기 위한 제1 라이트 버퍼를 설정하는 것이 제2 트랜젝션을 위해 전용하기 위한 제2 라이트 버퍼를 설정하는 것보다 앞서는 것을 가정하였다. 따라서, 제1 라이트 버퍼를 설정할 때에는 다수의 라이트 버퍼(C31, C32, C33, C34) 중에서 적어도 하나의 라이트 버퍼를 선택하여 제1 라이트 버퍼로 설정하지만, 제2 라이트 버퍼를 설정할 때에는 다수의 라이트 버퍼(C31, C32, C33, C34) 중 제1 라이트 버퍼로 설정된 라이트 버퍼를 제외한 나머지 라이트 버퍼 중에서 적어도 하나의 라이트 버퍼를 선택하여 제2 라이트 버퍼로 설정하는 것을 알 수 있다.
정리하면, 컨트롤러(C30)는, 호스트(C10)로부터 라이트 데이터(WDATA)가 입력되기 이전에, 먼저 다수의 라이트 버퍼(C31, C32, C33, C34)를 휘발성 메모리(144)에 할당한다. 이렇게, 다수의 라이트 버퍼(C31, C32, C33, C34)를 휘발성 메모리(144) 먼저 할당한다. 이후, 컨트롤러(C30)는, 호스트(C10)로부터 트랜젝션으로 그룹화된 라이트 데이터가 입력되는 경우, 다수의 라이트 버퍼(C31, C32, C33, C34) 중 일부 라이트 버퍼를 트랜젝션을 위해 전용으로 설정한 뒤, 트랜젝션으로 그룹화된 데이터를 트랜젝션 전용 라이트 버퍼에 모아서 저장한다. 또한, 호스트(C10)로부터 노말 라이트 데이터들(NMAL_WDATA)이 입력되는 경우, 다수의 라이트 버퍼(C31, C32, C33, C34) 중 트랜젝션 전용으로 설정되지 않은 라이트 버퍼들에 적절히 분산하여 저장한다.
여기서, 라이트 데이터들(WDATA)이 트랜젝션으로 그룹화된다는 것은, 라이트 데이터들(WDATA) 중 같은 용도로 사용되는 여러개의 라이트 데이터들(WDATA)이 하나의 트랜젝션으로 그룹화된다는 것을 의미한다.
예컨대, 데이터 베이스(data base)에서 이미 저장된 데이터의 수정/추가/업데이트 등의 용도를 위해 사용되는 데이터들이 각각의 용도에 따라 각각의 트랜젝션으로 그룹화될 수 있다. 이때, 데이터 베이스의 수정을 위한 용도의 데이터들이 하나의 트랜젝션 그룹이되고, 데이터 베이스의 추가를 위한 용도의 데이터들이 또 다른 하나의 트랜젝션 그룹이 되는 방식으로 설정될 수 있다.
따라서, 하나의 트랜젝션으로 그룹화된 라이트 데이터들(TRAN_WDATA1 or TRAN_WDATA2)이 호스트(C10)에서 메모리 시스템(C20)으로 전송될 때는, 모두 정상적으로 전송 및 저장되어 모두 유효(valid)한 커밋(commit)상태 아니면, 어느 하나라도 제대로 전송 및 저장되지 못하거나 호스트(C10)의 어보트(abort) 요청에 따라 모두 무효(invalid)한 어보트(abort)상태만 존재한다. 즉, 하나의 트랜젝션으로 그룹화된 라이트 데이터들(TRAN_WDATA1 or TRAN_WDATA2)은 모두 정상적으로 전송 및 저장되어 모두 유효한 커밋상태일 때에만 의미가 있다.
예컨대, 호스트(C10)에서 메모리 시스템(C20)로 전송된 라이트 데이터들(WDATA) 중 제1 트랜젝션으로 그룹화된 제1 라이트 데이터들(TRAN_WDATA1)이 메모리 시스템(C20)에서 커밋상태로 확인되기 위해서는, 다수의 제1 라이트 데이터들(TRAN_WDATA1)이 모두 호스트(C10)에서 메모리 시스템(C20)로 정상적으로 전송 및 저장이 완료되어야 하고, 동시에 호스트(C10)로부터 어보트 요청이 없어야 한다. 만약, 다수의 제1 라이트 데이터들(TRAN_WDATA1) 중 어느 하나라도 정상적으로 전송 및 저장되지 못하거나 호스트(C10)로부터 어보트 요청이 있게되면, 제1 라이트 데이터들(TRAN_WDATA1)은 모두 마스터 시스템(C20)에서 어보트상태로 확인될 것이다.
마찬가지로, 호스트(C10)에서 메모리 시스템(C20)로 전송된 라이트 데이터들(WDATA) 중 제2 트랜젝션으로 그룹화된 제2 라이트 데이터들(TRAN_WDATA2)이 메모리 시스템(C20)에서 커밋상태로 확인되기 위해서는, 다수의 제2 라이트 데이터들(TRAN_WDATA2)이 모두 호스트(C10)에서 메모리 시스템(C20)로 정상적으로 전송 및 저장이 완료되어야 하고, 동시에 호스트(C10)로부터 어보트 요청이 없어야 한다. 만약, 다수의 제2 라이트 데이터들(TRAN_WDATA2) 중 어느 하나라도 정상적으로 전송 및 저장되지 못하거나 호스트(C10)로부터 어보트 요청이 있게되면, 제2 라이트 데이터들(TRAN_WDATA2)은 모두 마스터 시스템(C20)에서 어보트상태로 확인될 것이다.
참고로, 전술한 것과 같이 트랜젝션으로 그룹화된 라이트 데이터들(TRAN_WDATA1 or TRAN_WDATA2)을 커밋상태 또는 어보트상태로 구분하여 관리하는 동작을, 일반적으로는 트랜젝션의 어토믹(atomic)을 보장하기 위한 동작이라고 한다.
한편, 도 6에서 컨트롤러(C30)의 휘발성 메모리(144)에 할당되는 다수의 라이트 버퍼(C31, C32, C33, C34)가 실선으로 도시되어 있는 이유는, 호스트(C10)로부터 라이트 데이터들(WDATA)이 입력되기 이전에 컨트롤러(C30)에서 다수의 라이트 버퍼(C31, C32, C33, C34)를 휘발성 메모리(144)에 할당하기 때문이다.
그리고, 컨트롤러(C30)는, 다수의 라이트 버퍼(C31, C32, C33, C34) 각각을 미리 정의된 크기로 고정하여 설정한다.
참고로, 다수의 라이트 버퍼(C31, C32, C33, C34) 각각의 크기가 '미리 정의된 크기'로 고정된다는 것은, 설계자에 의해 결정된 '미리 정의된 크기'의 값이 메모리 시스템(C20)의 동작중에 고정된 형태를 유지한다는 것을 의미한다. 즉, 설계자의 선택에 따라 유휴(idle)상태와 같은 메모리 시스템(C20)의 특정모드에서 '미리 정의된 크기'를 다른 값으로 변경한 후 그 값을 다시 고정된 형태로 유지시키는 것도 얼마든지 가능하다.
그리고, 컨트롤러(C30)는, 제1 트랜젝션으로 그룹화된 제1 라이트 데이터들(TRAN_WDATA1)이 호스트(C10)로부터 입력될 때, 제1 라이트 데이터들(TRAN_WDATA1)과 함께 입력되는 제1 전체크기정보(TTSIZE1)에 응답하여 제1 라이트 데이터들(TRAN_WDATA1)이 커밋될 때까지 필요한 제1 예정크기를 확인한 뒤, 휘발성 메모리(144)에 미리 할당된 라이트 버퍼들(C31, C32, C33, C34) 각각의 빈공간 중에서 제1 예정크기를 수용할 수 있는 라이트 버퍼가 존재하는지 확인한다.
만약, 다수의 라이트 버퍼들(C31, C32, C33, C34) 중 오직 한 개의 라이트 버퍼에서만 제1 예정크기를 수용할 수 있는 빈공간이 존재하는 경우, 한 개의 라이트 버퍼에 대해 제1 전용옵션을 설정하여 제1 라이트 버퍼로서 선택한다.
또한, 다수의 라이트 버퍼들(C31, C32, C33, C34) 중 적어도 한 개 이상의 라이트 버퍼 각각에서 제1 예정크기를 수용할 수 있는 빈공간이 존재하는 경우, 제1 예정크기를 각각 수용할 수 있는 적어도 한 개 이상의 라이트 버퍼 중 빈공간의 크기가 가장 작은 라이트 버퍼에 대해 제1 전용옵션을 설정하여 제1 라이트 버퍼로서 선택한다.
또한, 다수의 라이트 버퍼들(C31, C32, C33, C34) 중 한 개의 라이트 버퍼의 빈공간 크기만으로는 제1 예정크기를 수용할 수 없으며, 적어도 두 개 이상의 라이트 버퍼 각각의 빈공간을 합한 크기가 제1 예정크기를 수용할 수 있는 경우, 각각의 빈공간을 합한 크기가 제1 예정크기에 가장 가까운 적어도 두 개 이상의 라이트 버퍼 모두에 대해 제1 전용옵션을 설정하여 제1 라이트 버퍼로서 선택한다.
그리고, 컨트롤러(C30)는, 제1 트랜젝션으로 그룹화된 제1 라이트 데이터들(TRAN_WDATA1)이 호스트(C10)로부터 입력된 후, 이어서 제2 트랜젝션으로 그룹화된 제2 라이트 데이터들(TRAN_WDATA2)이 호스트(C10)로부터 입력될 때, 제2 라이트 데이터들(TRAN_WDATA2)과 함께 입력되는 제2 전체크기정보(TTSIZE2)에 응답하여 제2 라이트 데이터들(TRAN_WDATA2)이 커밋될 때까지 필요한 제2 예정크기를 확인한 뒤, 휘발성 메모리(144)에 미리 할당된 라이트 버퍼들(C31, C32, C33, C34) 중 제1 라이트 버퍼를 제외한 나머지 라이트 버퍼들 각각의 빈공간 중에서 제2 예정크기를 수용할 수 있는 라이트 버퍼가 존재하는지 확인한다.
만약, 다수의 라이트 버퍼들(C31, C32, C33, C34)에서 제1 라이트 버퍼를 제외한 나머지 라이트 버퍼들 중 오직 한 개의 라이트 버퍼에서만 제2 예정크기를 수용할 수 있는 빈공간이 존재하는 경우, 한 개의 라이트 버퍼에 대해 제2 전용옵션을 설정하여 제2 라이트 버퍼로서 선택한다.
또한, 다수의 라이트 버퍼들(C31, C32, C33, C34)에서 제1 라이트 버퍼를 제외한 나머지 라이트 버퍼들 중 적어도 한 개 이상의 라이트 버퍼 각각에서 제2 예정크기를 수용할 수 있는 빈공간이 존재하는 경우, 제2 예정크기를 각각 수용할 수 있는 적어도 한 개 이상의 라이트 버퍼 중 빈공간의 크기가 가장 작은 라이트 버퍼에 대해 제2 전용옵션을 설정하여 제2 라이트 버퍼로서 선택한다.
또한, 다수의 라이트 버퍼들(C31, C32, C33, C34)에서 제1 라이트 버퍼를 제외한 나머지 라이트 버퍼들 중 한 개의 라이트 버퍼의 빈공간 크기만으로는 제2 예정크기를 수용할 수 없으며, 적어도 두 개 이상의 라이트 버퍼 각각의 빈공간을 합한 크기가 제2 예정크기를 수용할 수 있는 경우, 각각의 빈공간을 합한 크기가 제2 예정크기에 가장 가까운 적어도 두 개 이상의 라이트 버퍼 모두에 대해 제2 전용옵션을 설정하여 제2 라이트 버퍼로서 선택한다.
도 7을 참조하면, 전술한 도 6에서 설명한 메모리 시스템(C20)의 상세한 구성을 알 수 있다.
먼저, 메모리 시스템(C20)에 포함된 컨트롤러(C30)는, 호스트(C10)로부터의 요청에 응답하여 제1 내지 제3 비휘발성 메모리 장치(C40, C50, C60)을 제어한다. 예컨대, 컨트롤러(C30)는, 제1 내지 제3 비휘발성 메모리 장치(C40, C50, C60)로부터 리드된 데이터를 호스트(C10)로 제공하고, 호스트(C10)로부터 제공된 데이터를 제1 내지 제3 비휘발성 메모리 장치(C40, C50, C60)에 저장하며, 이를 위해 컨트롤러(C30)는, 제1 내지 제3 비휘발성 메모리 장치(C40, C50, C60)의 리드, 라이트, 프로그램(program), 이레이즈(erase) 등의 동작을 제어한다.
구체적으로, 메모리 시스템(C20)에 포함된 컨트롤러(C30)는, 호스트 인터페이스 유닛(HOST INTERFACE, 132)과, 프로세서(PROCESS, 134)와, 메모리(144)와, 제1 메모리 인터페이스 유닛(MEMORY INTERFACE1, D10)과, 제2 메모리 인터페이스 유닛(MEMORY INTERFACE2, D20), 및 제3 메모리 인터페이스 유닛(MEMORY INTERFACE3, D30)을 포함한다.
여기서, 호스트 인터페이스 유닛(132)은, 호스트(C10)와의 사이에서 전달되는 커맨드(command) 및 데이터를 주고받는 동작을 수행하며, USB(Universal Serial Bus), MMC(Multi-Media Card), PCI-E(Peripheral Component Interconnect-Express), SAS(Serial-attached SCSI), SATA(Serial Advanced Technology Attachment), PATA(Parallel Advanced Technology Attachment), SCSI(Small Computer System Interface), ESDI(Enhanced Small Disk Interface), IDE(Integrated Drive Electronics), MIPI(Mobile Industry Processor Interface) 등과 같은 다양한 인터페이스 프로토콜들 중 적어도 하나를 통해 호스트(C10)와 통신하도록 구성될 수 있다. 이때, 호스트 인터페이스 유닛(132)은, 호스트(C10)와 데이터를 주고 받는 영역으로 호스트 인터페이스 계층(HIL: Host Interface Layer, 이하 'HIL'이라 칭하기로 함)이라 불리는 펌웨어(firmware)를 통해 구동될 수 있다.
그리고, 제1 내지 제3 메모리 인터페이스 유닛(D10, D20, D30) 각각은, 컨트롤러(C30)이 호스트(C10)로부터의 요청에 응답하여 제1 내지 제3 비휘발성 메모리 장치(C40, C50, C60) 각각을 제어하기 위해, 컨트롤러(C30)과 제1 내지 제3 비휘발성 메모리 장치(C40, C50, C60) 간의 인터페이싱을 수행하는 메모리/스토리지(storage) 인터페이스가 된다. 여기서, 제1 내지 제3 메모리 인터페이스 유닛(D10, D20, D30) 각각은, 제1 내지 제3 비휘발성 메모리 장치(C40, C50, C60)이 플래시 메모리, 특히 일 예로 NAND 플래시 메모리일 경우에 NAND 플래시 컨트롤러(NFC: NAND Flash Controller)로서, 프로세서(134)의 제어에 따라, 제1 내지 제3 비휘발성 메모리 장치(C40, C50, C60) 각각을 제어하기 위한 신호를 생성하고 데이터를 처리한다.
또한, 제1 내지 제3 메모리 인터페이스 유닛(D10, D20, D30) 각각은, 컨트롤러(C30)와 제1 내지 제3 비휘발성 메모리 장치(C40, C50, C60) 간의 커맨드 및 데이터를 처리하는 인터페이스, 일 예로 NAND 플래시 인터페이스의 동작, 특히 컨트롤러(C30)과 제1 내지 제3 비휘발성 메모리 장치(C40, C50, C60) 간 데이터 입출력을 지원하며, 제1 내지 제3 비휘발성 메모리 장치(C40, C50, C60)과 데이터를 주고 받는 영역으로 플래시 인터페이스 계층(FIL: Flash Interface Layer, 이하 'FIL'이라 칭하기로 함)이라 불리는 펌웨어(firmware)를 통해 구동될 수 있다.
그리고, 메모리(144)는, 메모리 시스템(C20) 및 컨트롤러(C30)의 동작 메모리로서, 메모리 시스템(C20) 및 컨트롤러(C30)의 구동을 위한 데이터를 저장한다. 보다 구체적으로 설명하면, 메모리(144)는, 컨트롤러(C30)이 호스트(C10)로부터의 요청에 응답하여 제1 내지 제3 비휘발성 메모리 장치(C40, C50, C60)을 제어할 때, 예컨대, 컨트롤러(C30)가, 제1 내지 제3 비휘발성 메모리 장치(C40, C50, C60)의 리드, 라이트, 프로그램, 이레이즈(erase) 등의 동작을 제어할 때, 관리되어야 하는 데이터를 임시로 저장한다.
여기서, 메모리(144)는, 휘발성 메모리로 구현될 수 있으며, 예컨대 정적 랜덤 액세스 메모리(SRAM: Static Random Access Memory), 또는 동적 랜덤 액세스 메모리(DRAM: Dynamic Random Access Memory) 등으로 구현될 수 있다.
또한, 메모리(144)는, 도 7에 도시된 것과 같이 컨트롤러(C30)의 내부에 존재할 수도 있고, 도 7에 도시된 것과 다르게 컨트롤러(C30)의 외부에 존재할 수도 있다. 만약, 도 7에 도시된 것과 다르게 컨트롤러(C30)의 외부에 메모리(144)가 존재하는 경우, 별도의 메모리 인터페이스(미도시)를 통해 컨트롤러(C30)로부터 데이터가 입출력되는 외부 휘발성 메모리로 구현되어야 할 것이다.
또한, 메모리(144)는, 제1 내지 제3 비휘발성 메모리 장치(C40, C50, C60)의 동작을 제어하는 과정에서 관리되어야 하는 데이터를 저장하며, 이러한 데이터의 저장을 위해, 프로그램 메모리, 데이터 메모리, 라이트 버퍼(buffer)/캐시(cache), 리드 버퍼/캐시, 데이터 버퍼/캐시, 맵(map) 버퍼/캐시 등을 포함하는 형태가 될 수 있다.
이때, 도 7에서 설명되는 메모리(144)는 도 6에서 설명한 휘발성 메모리(144)에 대응되는 구성요소이다. 다만, 도 6에서 설명한 휘발성 메모리(144)는, 도 7에서 설명한 메모리(144)의 역할 중 라이트 버퍼로서의 역할만 포함하는 것을 알 수 있다. 따라서, 도 6에서 휘발성 메모리(144)에 대해 설명한 바와 같이 도 7에 도시된 메모리(144) 내부에는 다수의 라이트 버퍼(C31, C32, C33, C34)가 포함될 것이다.
그리고, 프로세서(134)는, 컨트롤러(C30)의 전체적인 동작을 제어하며, 특히 호스트(C10)로부터의 라이트 요청 또는 리드 요청에 응답하여, 제1 내지 제3 비휘발성 메모리 장치(C40, C50, C60)에 대한 프로그램 동작 또는 리드 동작을 제어한다. 여기서, 프로세서(134)는, 제1 내지 제3 비휘발성 메모리 장치(C40, C50, C60)에 대한 컨트롤러(C30)의 제반 동작을 제어하기 위해 플래시 변환 계층(FTL: Flash Translation Layer, 이하 'FTL'이라 칭하기로 함)이라 불리는 펌웨어(firmware)를 구동한다. 또한, 프로세서(134)는, 마이크로프로세서 또는 중앙 처리 장치(CPU) 등으로 구현될 수 있다.
일 예로, 컨트롤러(C30)는, 마이크로프로세서 또는 중앙 처리 장치(CPU) 등으로 구현된 프로세서(134)를 통해, 호스트(C10)로부터 요청된 동작을 제1 내지 제3 비휘발성 메모리 장치(C40, C50, C60)에서 수행, 다시 말해 호스트(C10)로부터 수신된 커맨드에 해당하는 커맨드 동작을, 제1 내지 제3 비휘발성 메모리 장치(C40, C50, C60)와 수행한다. 여기서, 컨트롤러(C30)는, 호스트(C10)로부터 수신된 커맨드에 해당하는 커맨드 동작으로 포그라운드(foreground) 동작을 수행, 예컨대 라이트 커맨드에 해당하는 프로그램 동작, 리드 커맨드에 해당하는 리드 동작, 이레이즈 커맨드(erase command)에 해당하는 이레이즈 동작, 셋 커맨드(set command)로 셋 파라미터 커맨드(set parameter command) 또는 셋 픽쳐 커맨드(set feature command)에 해당하는 파라미터 셋 동작 등을 수행할 수 있다.
그리고, 컨트롤러(C30)는, 마이크로프로세서 또는 중앙 처리 장치(CPU) 등으로 구현된 프로세서(134)를 통해, 제1 내지 제3 비휘발성 메모리 장치(C40, C50, C60)에 대한 백그라운드(background) 동작을 수행할 수도 있다. 여기서, 제1 내지 제3 비휘발성 메모리 장치(C40, C50, C60)에 대한 백그라운드 동작은, 제1 내지 제3 비휘발성 메모리 장치(C40, C50, C60) 각각의 메모리 블록들(MEMORY BLOCK<0, 1, 2,...>)에서 임의의 메모리 블록에 저장된 데이터를 다른 임의의 메모리 블록으로 카피(copy)하여 처리하는 동작, 일 예로 가비지 컬렉션(GC: Garbage Collection) 동작을 포함할 수 있다. 또한, 제1 내지 제3 비휘발성 메모리 장치(C40, C50, C60) 에 대한 백그라운드 동작은, 제1 내지 제3 비휘발성 메모리 장치(C40, C50, C60) 각각의 메모리 블록들(MEMORY BLOCK<0, 1, 2,...>)간에 저장된 데이터 간을 스왑(swap)하여 처리하는 동작, 일 예로 웨어 레벨링(WL: Wear Leveling) 동작을 포함할 수 있다. 또한, 제1 내지 제3 비휘발성 메모리 장치(C40, C50, C60)에 대한 백그라운드 동작은, 컨트롤러(C30)에 저장된 맵 데이터를 제1 내지 제3 비휘발성 메모리 장치(C40, C50, C60) 각각의 메모리 블록들(MEMORY BLOCK<0, 1, 2,...>)로 저장하는 동작, 일 예로 맵 플러시(map flush) 동작을 포함할 수 있다. 또한, 제1 내지 제3 비휘발성 메모리 장치(C40, C50, C60)에 대한 백그라운드 동작은, 제1 내지 제3 비휘발성 메모리 장치(C40, C50, C60)에 대한 배드 관리(bad management)하는 동작, 일 예로 제1 내지 제3 비휘발성 메모리 장치(C40, C50, C60) 각각에 포함된 복수의 메모리 블록들(MEMORY BLOCK<0, 1, 2,...>)에서 배드 블록을 확인하여 처리하는 배드 블록 관리(bad block management) 동작을 포함할 수 있다.
그리고, 컨트롤러(C30)는, 마이크로프로세서 또는 중앙 처리 장치(CPU) 등으로 구현된 프로세서(134)를 통해, 제1 내지 제3 비휘발성 메모리 장치(C40, C50, C60) 각각의 메모리 블록들(MEMORY BLOCK<0, 1, 2,...>)에 액세스(access)하는 동작에 대응하여 로그(log) 데이터를 생성 및 관리할 수도 있다. 여기서, 제1 내지 제3 비휘발성 메모리 장치(C40, C50, C60) 각각의 메모리 블록들(MEMORY BLOCK<0, 1, 2,...>)에 액세스하는 동작은, 제1 내지 제3 비휘발성 메모리 장치(C40, C50, C60)의 메모리 블록들(MEMORY BLOCK<0, 1, 2,...>)에 대한 포어그라운드(foreground) 동작을 수행하거나 백그라운드(background) 동작을 수행하는 것을 모두 포함한다.
그리고, 컨트롤러(C30)의 프로세서(134)에는, 제1 내지 제3 비휘발성 메모리 장치(C40, C50, C60)의 배드 관리를 수행하기 위한 유닛(도시하지 않음)이 포함될 수 있다. 이때, 제1 내지 제3 비휘발성 메모리 장치(C40, C50, C60)의 배드 관리를 수행하기 위한 유닛은, 제1 내지 제3 비휘발성 메모리 장치(C40, C50, C60) 각각에 포함된 복수의 메모리 블록들(MEMORY BLOCK<0, 1, 2,...>)에서 배드 블록을 확인한 후, 확인된 배드 블록을 배드 처리하는 배드 블록 관리를 수행한다. 여기서, 배드 블록 관리는, 제1 내지 제3 비휘발성 메모리 장치(C40, C50, C60)이 플래시 메모리, 예컨대 낸드 플래시 메모리일 경우, 낸드의 특성으로 인해 데이터 라이트, 예컨대 데이터 프로그램(program) 시에 프로그램 실패(program fail)가 발생할 수 있으며, 프로그램 실패가 발생한 메모리 블록을 배드(bad) 처리한 후, 프로그램 실패된 데이터를 새로운 메모리 블록에 라이트, 즉 프로그램하는 것을 의미한다.
그리고, 컨트롤러(C30)는, 마이크로프로세서 또는 중앙 처리 장치(CPU) 등으로 구현된 프로세서(134)를 통해, 컨트롤러(C30)과 제1 내지 제3 비휘발성 메모리 장치(C40, C50, C60) 사이에서 입/출력될 수 있는 커맨드 및 데이터를 전송하는 동작을 수행한다. 이때, 컨트롤러(C30)과 제1 내지 제3 비휘발성 메모리 장치(C40, C50, C60) 사이에서 입/출력될 수 있는 커맨드 및 데이터는, 호스트(C10)에서 컨트롤러(C30)로 전송될 수도 있고, 컨트롤러(C30) 내부에서 생성될 수도 있다.
그리고, 컨트롤러(C30)는, 전술한 프로세서(134)와, 호스트 인터페이스 유닛(132), 및 메모리(144)를 통해 호스트(C10)로부터 입력되는 라이트 데이터들(WDATA)이 트랜젝션으로 그룹화되었는지 여부를 확인하여 트랜젝션으로 그룹화되지 않은 노말 라이트 데이터들(NMAL_WDATA)과 트랜젝션으로 그룹화된 제1 라이트 데이터들(TRAN_WDATA1) 및 제2 라이트 데이터들(TRAN_WDATA2)을 구분하는 동작을 수행할 수 있다.
또한, 컨트롤러(C30)는, 전술한 프로세서(134)와, 호스트 인터페이스 유닛(132), 및 메모리(144)를 통해, 호스트(C10)로부터 입력되는 라이트 데이터들(WDATA)을 임시로 저장하기 위한 다수의 라이트 버퍼(C31, C32, C33, C34)를 메모리(144) 내부에 할당하는 동작을 수행할 수 있다.
또한, 컨트롤러(C30)는, 전술한 프로세서(134)와, 메모리(144)를 통해 메모리(144)에 할당된 다수의 라이트 버퍼(C31, C32, C33, C34) 중 트랜젝션 전용으로 설정되지 않은 라이트 버퍼에 노말 라이트 데이터들(NMAL_WDATA)을 임시로 저장할 수 있다.
또한, 컨트롤러(C30)는, 전술한 프로세서(134)와, 호스트 인터페이스 유닛(132), 및 메모리(144)를 통해 제1 트랜젝션으로 그룹화된 제1 라이트 데이터들(TRAN_WDATA1)과 함께 입력되는 제1 전체크기정보(TTSIZE1)를 확인한 뒤, 확인결과에 따라 다수의 라이트 버퍼(C31, C32, C33, C34) 중 적어도 하나의 제1 라이트 버퍼를 제1 트랜젝션 전용으로 설정하여 제1 라이트 데이터들(TRAN_WDATA1)을 임시로 저장할 수 있다.
또한, 컨트롤러(C30)는, 전술한 프로세서(134)와, 호스트 인터페이스 유닛(132), 및 메모리(144)를 통해 제2 트랜젝션으로 그룹화된 제2 라이트 데이터들(TRAN_WDATA2)과 함께 입력되는 제2 전체크기정보(TTSIZE2)를 확인한 뒤, 확인결과에 따라 다수의 라이트 버퍼(C31, C32, C33, C34)에서 제1 라이트 버퍼를 제외한 나머지 라이트 버퍼들 중 적어도 하나의 제2 라이트 버퍼를 제2 트랜젝션 전용으로 설정하여 제2 라이트 데이터들(TRAN_WDATA2)을 임시로 저장할 수 있다.
한편, 제1 내지 제3 비휘발성 메모리 장치(C40, C50, C60) 각각은, 전원이 공급되지 않아도 저장된 데이터를 유지할 수 있으며, 특히 라이트(write) 동작을 통해 호스트(C10)로부터 제공된 라이트 데이터들(WDATA)을 저장하고, 리드(read) 동작을 통해 내부에 저장된 리드 데이터들(미도시)을 호스트(C10)로 제공할 수 있다.
또한, 제1 내지 제3 비휘발성 메모리 장치(C40, C50, C60) 각각은, 플래시 메모리, 예컨대 NAND 플래시 메모리 등과 같은 비휘발성 메모리 등으로 구현될 수 있지만, 상변환 메모리(PCRAM: Phase Change Random Access Memory), 저항 메모리(RRAM(ReRAM): Resistive Random Access Memory), 강유전체 메모리(FRAM: Ferroelectrics Random Access Memory), 및 스핀 주입 자기 메모리(STT-RAM(STT-MRAM): Spin Transfer Torque Magnetic Random Access Memory) 등과 같은 메모리들 중 어느 하나의 메모리로 구현될 수도 있다.
여기서, 제1 내지 제3 비휘발성 메모리 장치(C40, C50, C60) 각각은, 다수의 메모리 블록(memory block)들(MEMORY BLOCK<0, 1, 2,...>)을 포함한다. 즉, 제1 내지 제3 비휘발성 메모리 장치(C40, C50, C60) 각각은, 라이트(write) 동작을 통해 호스트(C10)로부터 제공된 라이트 데이터들(WDATA)을 메모리 블록들(MEMORY BLOCK<0, 1, 2,...>)에 저장하고, 리드(read) 동작을 통해 메모리 블록들(MEMORY BLOCK<0, 1, 2,...>)에 저장된 리드 데이터들(미도시)을 호스트(C10)로 제공할 수 있다.
그리고, 제1 내지 제3 비휘발성 메모리 장치(C40, C50, C60) 각각에 포함된 메모리 블록들(MEMORY BLOCK<0, 1, 2,...>) 각각은, 다수의 페이지들(pages, P<0, 1, 2, 3, 4,...>)을 포함한다. 또한, 도면에 구체적으로 도시되진 않았지만, 페이지들(P<0, 1, 2, 3, 4,...>) 각각에는, 다수의 메모리 셀(memory cell)들이 포함될 것이다.
그리고, 제1 내지 제3 비휘발성 메모리 장치(C40, C50, C60) 각각에 포함된 메모리 블록들(MEMORY BLOCK<0, 1, 2,...>) 각각은, 내부에 포함된 하나의 메모리 셀에 저장 또는 표현할 수 있는 비트의 수에 따라 단일 레벨 셀(SLC: Single Level Cell) 메모리 블록 및 멀티 레벨 셀(MLC: Multi Level Cell) 메모리 블록 등으로 구분될 수 있다. 여기서, SLC 메모리 블록은, 하나의 메모리 셀에 1비트 데이터를 저장하는 메모리 셀들에 의해 구현된 다수의 페이지들을 포함하고, 데이터 연산 성능이 빠르며 내구성이 높다. 그리고, MLC 메모리 블록은, 하나의 메모리 셀에 멀티 비트 데이터(예를 들면, 2비트 또는 그 이상의 비트)를 저장하는 메모리 셀들에 의해 구현된 다수의 페이지들을 포함하며, SLC 메모리 블록보다 큰 데이터 저장 공간을 가지므로 SLC 메모리 블록보다 고집적화할 수 있다.
특히, MLC 메모리 블록은, 하나의 메모리 셀에 2비트 데이터를 저장할 수 있는 메모리 셀들에 의해 구현된 다수의 페이지들을 포함하는 MLC 메모리 블록뿐만 아니라, 하나의 메모리 셀에 3비트 데이터를 저장할 수 있는 메모리 셀들에 의해 구현된 다수의 페이지들을 포함하는 트리플 레벨 셀(TLC: Triple Level Cell) 메모리 블록, 하나의 메모리 셀에 4비트 데이터를 저장할 수 있는 메모리 셀들에 의해 구현된 다수의 페이지들을 포함하는 쿼드러플 레벨 셀(QLC: Quadruple Level Cell) 메모리 블록, 또는 하나의 메모리 셀에 5비트 또는 그 이상의 비트 데이터를 저장할 수 있는 메모리 셀들에 의해 구현된 다수의 페이지들을 포함하는 다중 레벨 셀(multiple level cell) 메모리 블록 등으로 구분될 수 있다.
도 8a 내지 도 8e 및 도 9a 내지 도 9d는 본 발명의 제2 실시예에 따른 메모리 시스템의 동작을 설명하기 위해 도시한 도면이다.
먼저, 도 8a 내지 도 8e에서 사용된 몇가지 도면부호를 참조하여 전술한 도 6 및 도 7의 컨트롤러(C30)에서 호스트(C10)로부터 입력되는 라이트 데이터들(WDATA)을 어떤 방식으로 노말 라이트 데이터들(NMAL_WDATA)과 제1 라이트 데이터들(TRAN_WDATA1) 및 제2 라이트 데이터들(TRAN_WDATA2)로 구분하는지에 대해 설명하도록 하겠다.
구체적으로, 호스트(C10)에서 메모리 시스템(C20)으로 라이트 데이터들(WDATA)이 입력될 때는, 라이트 데이터들(WDATA) 각각에 대응하는 라이트 커맨드들(미도시)이 함께 입력되며, 라이트 커맨드들 각각에는, 라이트 데이터들(WDATA) 각각의 트랜젝션정보(미도시)가 포함된다.
이때, 라이트 데이터들(WDATA) 각각의 트랜젝션정보에는, 트랜젝션 아이디(IDentify)정보(TRID)와, 트랜젝션 커밋(commit)정보(미도시)와, 트랜젝션 어보트(abort)정보(미도시)가 포함될 수 있다.
따라서, 메모리 시스템(C20)에 포함된 컨트롤러(C30)는, 라이트 커맨드들(WCMD)에 포함된 트랜젝션정보 중 트랜젝션 아이디정보(TRID)를 확인하여, 라이트 데이터들(WDATA)을 트랜젝션으로 그룹화되지 않은 노말 라이트 데이터들(NMAL_WDATA) 또는 트랜젝션으로 그룹화된 트랜젝션 라이트 데이터들(TRAN_WDATA1 or TRAN_WDATA2)로 구분할 수 있다.
예컨대, 컨트롤러(C30)는, 호스트(C10)로부터 입력된 라이트 데이터들(WDATA)의 트랜젝션 아이디정보(TRID)가 1값을 갖는 라이트 데이터들(WDATA)을 제1 라이트 데이터들(TRAN_WDATA1)으로 구분할 수 있다.
마찬가지로, 컨트롤러(C30)는, 호스트(C10)로부터 입력된 라이트 데이터들(WDATA)의 트랜젝션 아이디정보(TRID)가 2값을 갖는 라이트 데이터들(WDATA)을 제2 라이트 데이터들(TRAN_WDATA2)으로 구분할 수 있다.
또한, 컨트롤러(C30)는, 호스트(C10)로부터 입력된 라이트 데이터들(WDATA)의 트랜젝션 아이디정보(TRID)가 어떠한 값으로도 설정되어 있지 않은 라이트 데이터들(WDATA)을 노말 라이트 데이터들(NMAL_WDATA)로 구분할 수 있다.
참고로, 트랜젝션 아이디정보(TRID)가 어떠한 값으로도 설정되지 않았다는 것은, 미리 정의된 초기값 또는 트랜젝션 아이디정보로서의 의미가 없는 값으로 설정된 경우를 의미할 수도 있다.
한편, 트랜젝션으로 그룹화된 라이트 데이터들(TRAN_WDATA1 or TRAN_WDATA2)의 시작데이터에 대응하는 시작커맨드에는 라이트 데이터들(TRAN_WDATA1 or TRAN_WDATA2)의 커밋이 완료될 때까지 필요한 전체크기정보(TTSIZE1 or TTSIZE2)가 더 포함된다.
예컨대, 제1 트랜젝션으로 그룹화된 제1 라이트 데이터들(TRAN_WDATA1)의 시작데이터에 대응하는 제1 시작커맨드에는 제1 라이트 데이터들(TRAN_WDATA1)의 커밋이 완료될 때까지 필요한 제1 전체크기정보(TTSIZE1)가 더 포함된다.
때문에, 컨트롤러(C30)는, 호스트(C10)로부터 제1 라이트 데이터들(TRAN_WDATA1) 중 가장 먼저 입력되는 시작데이터가 입력되기 이전에 제1 시작커맨드를 확인하여 제1 전체크기정보(TTSIZE1)를 확인하는 것이 가능하다.
즉, 컨트롤러(C30)는, 호스트(C10)로부터 제1 라이트 데이터들(TRAN_WDATA1)이 입력되기 이전에 제1 전체크기정보(TTSIZE1)를 확인하여 제1 라이트 데이터들(TRAN_WDATA1)의 커밋이 완료되기까지 필요한 제1 예정크기를 확인할 수 있다.
마찬가지로, 제2 트랜젝션으로 그룹화된 제2 라이트 데이터들(TRAN_WDATA2)의 시작데이터에 대응하는 라이트 커맨드에는 제2 라이트 데이터들(TRAN_WDATA2)의 커밋이 완료될 때까지 필요한 제2 전체크기정보(TTSIZE2)가 더 포함된다.
때문에, 컨트롤러(C30)는, 호스트(C10)로부터 제2 라이트 데이터들(TRAN_WDATA2) 중 가장 먼저 입력되는 시작데이터가 입력되기 이전에 제2 시작커맨드를 확인하여 제2 전체크기정보(TTSIZE2)를 확인하는 것이 가능하다.
즉, 컨트롤러(C30)는, 호스트(C10)로부터 제2 라이트 데이터들(TRAN_WDATA2)이 입력되기 이전에 제2 전체크기정보(TTSIZE2)를 확인하여 제2 라이트 데이터들(TRAN_WDATA2)의 커밋이 완료되기까지 필요한 제2 예정크기를 확인할 수 있다.
그리고, 컨트롤러(C30)는, 호스트(C10)로부터 라이트 데이터들(WDATA)이 입력되기 이전에 다수의 라이트 버퍼(C31, C32, C33, C34)를 휘발성 메모리(144)에 할당한다. 이때, 다수의 라이트 버퍼(C31, C32, C33, C34) 각각은 미리 정의된 크기로 고정된다. 예컨대, 도 8a 내지 도 8e에 예시된 것과 같이 '미리 정의된 크기'는 '6'으로 설정될 수 있다. 즉, 다수의 라이트 버퍼(C31, C32, C33, C34) 각각은 6개의 라이트 데이터를 저장할 수 있는 형태가 된다.
이렇게, 휘발성 메모리(144)에 다수의 라이트 버퍼(C31, C32, C33, C34)를 미리 할당한 후, 컨트롤러(C30)는, 호스트(C10)로부터 트랜젝션으로 그룹화되지 않은 노말 라이트 데이터들(NMAL_WDATA)이 입력될 때, 다수의 라이트 버퍼(C31, C32, C33, C34) 중 트랜젝션 전용으로 설정되지 않은 라이트 버퍼들에 적절히 분산하여 저장한다.
또한, 휘발성 메모리(144)에 다수의 라이트 버퍼(C31, C32, C33, C34)를 미리 할당한 후, 컨트롤러(C30)는, 호스트(C10)로부터 제1 트랜젝션으로 그룹화된 제1 라이트 데이터들(TRAN_WDATA1) 및 제1 트랜젝션의 커밋(commit)이 완료될 때까지 필요한 제1 전체크기정보(TTSIZE1)가 입력될 때, 제1 전체크기정보(TTSIZE1)에 응답하여 다수의 라이트 버퍼(C31, C32, C33, C34) 중 적어도 하나의 제1 라이트 버퍼를 제1 트랜젝션을 위해 전용(exclusive use)하기 위한 제1 전용옵션을 설정(set)한다.
또한, 휘발성 메모리(144)에 다수의 라이트 버퍼(C31, C32, C33, C34)를 미리 할당한 후, 컨트롤러(C30)는, 호스트(C10)로부터 제2 트랜젝션으로 그룹화된 제2 라이트 데이터들(TRAN_WDATA2) 및 제2 트랜젝션의 커밋이 완료될 때까지 필요한 제2 전체크기정보(TTSIZE2)가 입력될 때, 제2 전체크기정보(TTSIZE2)에 응답하여 다수의 라이트 버퍼(C31, C32, C33, C34) 중 제1 라이트 버퍼를 제외한 나머지 라이트 버퍼들 중 적어도 하나의 제2 라이트 버퍼를 제2 트랜젝션을 위해 전용하기 위한 제2 전용옵션을 설정한다.
그리고, 컨트롤러(C30)는, 노말 라이트 데이터(NMAL_WDATA)를 다수의 라이트 버퍼(C31, C32, C33, C34) 중 트랜젝션 전용으로 설정되지 않은 라이트 버퍼들에 적절히 분산하여 저장한다. 즉, 노말 라이트 데이터들(NMAL_WDATA)을 저장하기 위한 전용 라이트 버퍼가 별도로 존재하는 것이 아니다. 따라서, 다수의 라이트 버퍼(C31, C32, C33, C34)에 분산저장된 노말 라이트 데이터들(NMAL_WDATA)을 비휘발성 메모리 장치들(C40, C50, C60)에 저장하는 시점은 미리 정의될 수 없다.
그리고, 제1 트랜젝션 전용으로 설정된 제1 라이트 버퍼의 경우, 제1 전체크기정보(TTSIZE1)에 대응하는 제1 예정크기 이상의 저장공간을 갖는다. 이때, 컨트롤러(C30)는, 제1 예정크기에 해당하는 만큼 제1 라이트 데이터들(TRAN_WDATA1)이 제1 라이트 버퍼에 저장된 시점에서 제1 트랜젝션의 커밋여부가 확정되므로 제1 라이트 데이터들(TRAN_WDATA1)이 더 이상 입력되지 않는다는 것을 알고 있다. 따라서, 컨트롤러(C30)는, 제1 예정크기에 해당하는 만큼 제1 라이트 데이터들(TRAN_WDATA1)을 제1 라이트 버퍼에 저장한 시점에서 제1 트랜젝션의 커밋 여부를 확인한다. 확인결과, 제1 라이트 버퍼에 저장된 제1 라이트 데이터들(TRAN_WDATA1)의 커밋이 완료된 경우, 컨트롤러(C30)는, 제1 라이트 버퍼에 대한 제1 플러시동작을 수행하여 제1 라이트 버퍼에 저장된 제1 라이트 데이터들(TRAN_WDATA1)을 비휘발성 메모리 장치들(C40, C50, C60)에 저장하는 제1 라이트동작을 수행한다. 이렇게, 제1 라이트동작을 수행한 뒤, 컨트롤러(C30)는, 제1 라이트 버퍼에 대한 제1 전용옵션을 리셋(reset)한다. 이때, 제1 라이트 버퍼에 대한 제1 전용옵션이 리셋된다는 것은, 제1 라이트 버퍼를 더 이상 제1 트랜젝션 전용으로 사용하지 않는다는 것을 의미한다.
또한, 컨트롤러(C30)는, 제1 예정크기에 해당하는 만큼 제1 라이트 데이터들(TRAN_WDATA1)을 제1 라이트 버퍼에 저장하기 이전에도 정해진 시점마다 제1 라이트 데이터들(TRAN_WDATA1)에 대한 어보트(abort) 여부를 확인한다. 확인결과, 제1 라이트 버퍼에 저장된 제1 라이트 데이터들(TRAN_WDATA1)이 어보트된 경우, 컨트롤러(C30)는, 제1 라이트 버퍼에 저장된 제1 라이트 데이터들(TRAN_WDATA1)을 디스카드(discard)시킨 뒤, 제1 라이트 버퍼에 대한 제1 전용옵션을 리셋한다. 이때, 제1 라이트 데이터들(TRAN_WDATA1)에 대한 어보트 여보를 확인하는'정해진 시점'은, 제1 라이트 버퍼에 제1 라이트 데이터들(TRAN_WDATA1) 각각이 입력되는 시점일 수 있다.
그리고, 제2 트랜젝션 전용으로 설정된 제2 라이트 버퍼의 경우, 제2 전체크기정보(TTSIZE2)에 대응하는 제2 예정크기 이상의 저장공간을 갖는다. 이때, 컨트롤러(C30)는, 제2 예정크기에 해당하는 만큼 제2 라이트 데이터들(TRAN_WDATA2)이 제2 라이트 버퍼에 저장된 시점에서 제2 트랜젝션의 커밋여부가 확정되므로 제2 라이트 데이터들(TRAN_WDATA2)이 더 이상 입력되지 않는다는 것을 알고 있다. 따라서, 컨트롤러(C30)는, 제2 예정크기에 해당하는 만큼 제2 라이트 데이터들(TRAN_WDATA2)을 제2 라이트 버퍼에 저장한 시점에서 제2 트랜젝션의 커밋 여부를 확인한다. 확인결과, 제2 라이트 버퍼에 저장된 제2 라이트 데이터들(TRAN_WDATA2)의 커밋이 완료된 경우, 컨트롤러(C30)는, 제2 라이트 버퍼에 대한 제2 플러시동작을 수행하여 제2 라이트 버퍼에 저장된 제2 라이트 데이터들(TRAN_WDATA2)을 비휘발성 메모리 장치들(C40, C50, C60)에 저장하는 제2 라이트동작을 수행한다. 이렇게, 제2 라이트동작을 수행한 뒤, 컨트롤러(C30)는, 제2 라이트 버퍼에 대한 제2 전용옵션을 리셋(reset)한다. 이때, 제2 라이트 버퍼에 대한 제2 전용옵션이 리셋된다는 것은, 제2 라이트 버퍼를 더 이상 제2 트랜젝션 전용으로 사용하지 않는다는 것을 의미한다.
또한, 컨트롤러(C30)는, 제2 예정크기에 해당하는 만큼 제2 라이트 데이터들(TRAN_WDATA2)을 제2 라이트 버퍼에 저장하기 이전에도 정해진 시점마다 제2 라이트 데이터들(TRAN_WDATA2)에 대한 어보트(abort) 여부를 확인한다. 확인결과, 제2 라이트 버퍼에 저장된 제2 라이트 데이터들(TRAN_WDATA2)이 어보트된 경우, 제2 라이트 버퍼에 저장된 제2 라이트 데이터들(TRAN_WDATA2)을 디스카드(discard)시킨 뒤, 제2 라이트 버퍼에 대한 제2 전용옵션을 리셋한다. 이때, 제2 라이트 데이터들(TRAN_WDATA2)에 대한 어보트 여보를 확인하는'정해진 시점'은, 제2 라이트 버퍼에 제2 라이트 데이터들(TRAN_WDATA2) 각각이 입력되는 시점일 수 있다.
그리고, 컨트롤러(C30)는, 제1 트랜젝션의 커밋이 확인된 시점과 제2 트랜젝션의 커밋이 확인된 시점이 설정된 제1 시간간격 이내인 경우, 제1 트랜젝션의 커밋에 대응하는 제1 라이트 버퍼에 대한 제1 플러시동작의 수행시점과 제2 트랜젝션의 커밋에 대응하는 제2 라이트 버퍼에 대한 제2 플러시동작의 수행시점을 서로 동기화(Synchronize)시킨다.
그리고, 컨트롤러(C30)는, 제1 플러시동작의 수행시점과 제2 플러시동작의 수행시점이 동기화되는 경우, 제1 라이트 버퍼에 저장된 제1 라이트 데이터들(TRAN_WDATA1)을 비휘발성 메모리 장치들(C40, C50, C60)에 저장하는 제1 라이트동작의 수행이 시작되는 시점과 제2 라이트 버퍼에 저장된 제2 라이트 데이터들(TRAN_WDATA2)을 비휘발성 메모리 장치들(C40, C50, C60)에 저장하는 제2 라이트동작의 수행이 시작되는 시점이 동기화된다고 볼 수 있다. 따라서, 제1 라이트동작의 수행이 완료되는 시점과 제2 라이트동작의 수행이 완료되는 시점이 큰 차이를 갖지 않을 가능성이 높다.
따라서, 컨트롤러(C30)는, 제1 플러시동작의 수행시점과 제2 플러시동작의 수행시점이 동기화되는 경우, 제1 플러시동작에 연결된 제1 라이트동작의 수행이 완료되었음을 호스트(C10)에 알려주기 위한 제1 확인(ack)신호를 호스트(C10)로 전달하는 시점과 제2 플러시동작에 연결된 제2 라이트동작의 수행이 완료되었음을 호스트(C10)에 알려주기 위한 제2 확인신호를 호스트(C10)로 전달하는 시점을 서로 동기화시킬 수 있다.
물론, 컨트롤러(C30)는, 제1 플러시동작의 수행시점과 제2 플러시동작의 수행시점이 동기화되는 경우에도, 제1 라이트동작의 수행이 완료되는 시점과 제2 라이트동작의 수행이 완료되는 시점이 큰 차이를 갖는 경우가 있을 수 있다.
따라서, 컨트롤러(C30)는, 제1 플러시동작의 수행시점과 제2 플러시동작의 수행시점이 동기화된 경우에도, 제1 플러시동작에 연결된 제1 라이트동작의 수행이 완료되었음을 호스트(C10)에 알려주기 위한 제1 확인신호가 생성되는 시점과 제2 플러시동작에 연결된 제2 라이트동작의 수행이 완료되었음을 호스트(C10)에 알려주기 위한 제2 확인신호가 생성되는 시점이 설정된 제2 시간간격 이내인 경우에만, 제1 확인신호를 호스트(C10)로 전달하는 시점과 제2 확인신호를 호스트(C10)로 전달하는 시점을 서로 동기화시킬 수 있다.
정리하면, 컨트롤러(C30)는, 제1 플러시동작의 수행시점과 제2 플러시동작의 수행시점이 동기화 여부만을 확인하여, 제1 확인신호를 호스트(C10)로 전달하는 시점과 제2 확인신호를 호스트(C10)로 전달하는 시점의 동기화 여부를 선택하는 제1 동기화 선택동작을 수행할 수 있다.
또한, 컨트롤러(C30)는, 제1 플러시동작의 수행시점과 제2 플러시동작의 수행시점이 동기화되는 경우에도, 제1 확인신호가 생성되는 시점과 제2 확인신호가 생성되는 시점이 설정된 제2 시간간격 이내일 경우에만, 제1 확인신호를 호스트(C10)로 전달하는 시점과 제2 확인신호를 호스트(C10)로 전달하는 시점의 동기화 여부를 선택하는 제2 동기화 선택동작을 수행할 수 있다.
참고로, 제1 동기화 선택동작과 제2 동기화 선택동작은 동시에 선택될 수 없는 동작이다. 따라서, 컨트롤러(C30)에서 제1 동기화 선택동작을 선택하여 수행하는 경우, 제2 동기화 선택동작은 선택되지 않을 것이다. 반대로, 컨트롤러(C30)에서 제2 동기화 선택동작을 선택하여 수행하는 경우, 제1 동기화 선택동작은 선택되지 않을 것이다. 이때, 컨트롤러(C30)에서 제1 동기화 선택동작을 수행하지 아니면 제2 동기화 선택동작을 수행할지 여부는 메모리 특성 및 설계자의 선택에 따라 미리 정의될 수 있다.
또한, 제1 플러시동작의 수행시점과 제2 플러시동작의 수행시점의 동기화여부의 기준이 되는 '설정된 제1 시간간격'은, 메모리 시스템의 특성 및 설계자의 선택에 따라 미리 정의될 수 있다.
마찬가지로, 제1 확인신호를 호스트(C10)로 전달하는 시점과 상기 제2 확인신호를 호스트(C10)로 전달하는 시점의 동기화 여부의 기준이 되는 '설정된 제2 시간간격'은, 메모리 시스템의 특성 및 설계자의 선택에 따라 미리 정의될 수 있다.
도 8a를 참조하면, 컨트롤러(C30)는, 제1 시점 이전부터 각각 6개의 라이트 데이터(WDATA)를 저장할 수 있는 4개의 라이트 버퍼들(C31, C32, C33, C34)을 휘발성 메모리(144)에 할당해놓은 상태라는 것을 가정할 수 있다.
이어서, 제1 시점에 호스트(A10)에서 총 4개의 라이트 데이터들(WDATA)이 입력되는 것을 가정할 수 있다. 이때, 컨트롤러(C30)는, 호스트(C10)로부터 입력된 4개의 라이트 데이터들(WDATA) 각각의 트랜젝션 아이디정보(TRID)를 확인하여 4개의 라이트 데이터들(WDATA)을 모두 트랜젝션으로 그룹화되지 않은 노말 라이트 데이터들(NMAL_WDATA)로 구분할 수 있다.
이어서, 컨트롤러(C30)는, 제1 시점에서 휘발성 메모리(144)에 할당되어 있는 4개의 라이트 버퍼들(C31, C32, C33, C34) 중 트랜젝션 전용으로 설정된 라이트 버퍼가 존재하는지 여부를 확인한다. 확인결과, 제1 시점에서 휘발성 메모리(144)에 할당되어 있는 4개의 라이트 버퍼들(C31, C32, C33, C34)은 모두 트랜젝션 전용으로 설정되지 않은 상태라는 것을 알 수 있다.
따라서, 컨트롤러(C30)는, 제1 시점에서 호스트(C10)로부터 입력된 4개의 노말 라이트 데이터들(NMAL_WDATA)인 'A, B, C, D'를 4개의 라이트 버퍼들(C31, C32, C33, C34)에 적절히 분산저장할 수 있다. 예컨대, 도면에서는, 제1 시점에서 호스트(C10)로부터 입력된 4개의 노말 라이트 데이터들(NMAL_WDATA)인 'A, B, C, D' 중 앞선 2개의 데이터인'A, B'를 첫 번째 라이트 버퍼(C31)에 저장한다. 이어서, 호스트(C10)로부터 입력된 4개의 노말 라이트 데이터들(NMAL_WDATA)인 'A, B, C, D' 중 뒤선 2개의 데이터인 'C, D'를 두 번째 라이트 버퍼(C32)에 저장한다.
정리하면, 컨트롤러(C30)는, 제1 시점에서 호스트(C10)로부터 입력된 4개의 노말 라이트 데이터들(NMAL_WDATA)인 'A, B, C, D'를 4개의 라이트 버퍼들(C31, C32, C33, C34) 중 첫 번째 라이트 버퍼(C31) 및 두 번째 라이트 버퍼(C32)에 2개씩 분산저장한다. 그 결과, 각각 6개씩의 저장공간을 갖는 첫 번째 라이트 버퍼(C31) 및 두 번째 라이트 버퍼(C32)에는, 각각 2개씩의 노말 라이트 데이터들(NMAL_WDATA)이 저장되고, 각각 4개씩의 라이트 데이터를 저장할 수 있는 공간이 빈 상태가 된다.
도 8b를 참조하면, 도 8a에 도시된 제1 시점 이후 이어지는 제2 시점에서 호스트(C10)로부터 총 5개의 라이트 데이터들(WDATA)이 입력되는 것을 가정할 수 있다. 이때, 5개의 라이트 데이터들(WDATA)이 호스트(C10)로부터 입력되는 순서는 미리 정의되지 않으며, 랜덤하게 섞여서 입력되는 것을 가정할 수 있다.
구체적으로, 컨트롤러(C30)는, 제2 시점에서 호스트(C10)로부터 입력되는 5개의 라이트 데이터들(WDATA) 각각의 트랜젝션 아이디정보(TRID)를 확인하여 3개의 제1 라이트 데이터들(TRAN_WDATA1) 및 2개의 노말 라이트 데이터들(NMAL_WDATA)로 구분한다.
좀 더 구체적으로, 컨트롤러(C30)는, 제2 시점에서 호스트(C10)로부터 입력되는 5개의 라이트 데이터들(WDATA) 각각의 트랜젝션 아이디정보(TRID)가 1값을 갖는 3개의 라이트 데이터들(WDATA)인 '0, 1, 2'이 제1 트랜젝션으로 그룹화된 라이트 데이터들(WDATA)이라고 판단하고 제1 라이트 데이터들(TRAN_WDATA1)로서 구분한다.
이때, 제1 라이트 데이터들(TRAN_WDATA1)로 구분될 수 있는 '0, 1, 2' 중 시작데이터인 '0'에 대응하는 제1 시작커맨드(미도시)에는 제1 전체크기정보(TTSIZE1)가 포함되어 있다. 따라서, 컨트롤러(C30)는, '0'에 대응하는 제1 시작커맨드로부터 제1 전체크기정보(TTSIZE1)가 '5'라는 것을 확인할 수 있다.
이렇게, 컨트롤러(C30)는, 제1 전체크기정보(TTSIZE1)가 '5'라는 것을 확인한 후, 휘발성 메모리(144)에 할당되어 있는 4개의 라이트 버퍼들(C31, C32, C33, C34) 중 제1 트랜젝션으로 그룹화된 총 5개의 제1 라이트 데이터들(TRAN_WDATA1)을 저장할 수 있는 빈공간을 갖는 라이트 버퍼가 존재하는지 확인한다.
확인결과, 4개의 라이트 버퍼들(C31, C32, C33, C34) 중 첫 번째 라이트 버퍼(C31) 및 두 번째 라이트 버퍼(C32)에는, 전술한 제1 시점에서 노말 라이트 데이터들(NMAL_WDATA)이 각각 2개씩 저장된 바 있기 때문에 각각 4개씩의 빈공간을 갖고 있는 상태이다. 따라서, 첫 번째 라이트 버퍼(C31) 및 두 번째 라이트 버퍼(C32) 각각은, 제1 트랜젝션으로 그룹화된 총 5개의 제1 라이트 데이터들(TRAN_WDATA1)를 수용하기에 적합하지 않다.
반면, 4개의 라이트 버퍼들(C31, C32, C33, C34) 중 세 번째 라이트 버퍼(C33)와 네 번째 라이트 버퍼(C34)에는, 전술한 제1 시점에서 어떠한 라이트 데이터도 저장된 바 없기 때문에 각각 6개씩의 빈공간을 갖고 잇는 상태이다. 따라서, 세 번째 라이트 버퍼(C33)와 네 번째 라이트 버퍼(C34) 각각은, 제1 트랜젝션으로 그룹화된 총 5개의 제1 라이트 데이터들(TRAN_WDATA1)를 수용하기에 적합하다.
즉, 4개의 라이트 버퍼들(C31, C32, C33, C34) 중 적어도 한 개 이상의 라이트 버퍼(C33, C34) 각각에서 제1 예정크기를 수용할 수 있는 빈공간이 존재하는 것을 알 수 있다.
또한, 전술한 제1 시점에서 4개의 라이트 버퍼들(C31, C32, C33, C34) 중 세 번째 라이트 버퍼(C33)와 네 번째 라이트 버퍼(C34) 각각에 어떠한 라이트 데이터도 저장된 바 없기 때문에, 제2 시점이 시작될 때 세 번째 라이트 버퍼(C33)와 네 번째 라이트 버퍼(C34) 각각은 동일하게 6개의 빈공간을 갖는 상태이다.
따라서, 4개의 라이트 버퍼들(C31, C32, C33, C34) 중 세 번째 라이트 버퍼(C33)와 네 번째 라이트 버퍼(C34) 중 어느 하나의 라이트 버퍼에 대해 제1 전용옵션을 설정하여 제1 라이트 버퍼로서 관리하는 것이 가능하다. 참고로, 도 8b에서는 세 번째 라이트 버퍼(C33)에 대해 제1 전용옵션을 설정하여 제1 트랜젝션 전용으로 사용하는 것을 예시하고 있다.
이렇게, 컨트롤러(C30)는, 제1 라이트 데이터들(TRAN_WDATA1)로 구분될 수 있는 '0, 1, 2' 중 시작데이터인 '0'이 입력되기 이전에 제1 전체크기정보(TTSIZE1)를 확인하여 휘발성 메모리(144)에 미리 할당되어 있는 4개의 라이트 버퍼들(C31, C32, C33, C34) 중 세 번째 라이트 버퍼(C33)를 제1 트랜젝션 전용의 제1 라이트 버퍼로 설정할 수 있다.
또한, 컨트롤러(C30)는, 제2 시점에서 호스트(C10)로부터 5개의 라이트 데이터들(WDATA)가 모두 입력된 후에도 제1 트랜젝션으로 구분되는 제1 라이트 데이터들(TRAN_WDATA1)은 '0, 1, 2'만 존재하는 것을 확인할 수 있다. 즉, 컨트롤러(C30)는, 제2 시점에서 호스트(C10)로부터 5개의 라이트 데이터들(WDATA)가 입력된 시점에서 제1 트랜젝션은 아직 커밋되지 않은 상태(Transaction Uncomplete)라는 것을 확인할 수 있다.
정리하면, 컨트롤러(C30)는, 제2 시점에서 총 6개의 라이트 데이터를 저장할 수 있는 공간을 갖는 세 번째 라이트 버퍼(C33)를 제1 트랜젝션 전용의 제1 라이트 버퍼로서 선택한 뒤, 호스트(C10)로부터 입력된 3개의 제1 라이트 데이터들(TRAN_WDATA1)인 '0, 1, 2'를 저장한 후, 나머지 3개의 라이트 데이터를 저장할 수 있는 공간은 비워둔(empty)다.
그리고, 컨트롤러(C30)는, 제2 시점에서 호스트(C10)에서 입력되는 5개의 라이트 데이터들(WDATA) 각각의 트랜젝션 아이디정보(TRID)가 어떠한 값으로도 설정되어 있지 않은 라이트 데이터들(WDATA)인 'E, F'가 트랜젝션으로 그룹화되지 않은 라이트 데이터들(WDATA)이라고 판단하고 노말 라이트 데이터들(NMAL_WDATA)로서 구분한다.
이어서, 컨트롤러(C30)는, 제2 시점에서 휘발성 메모리(144)에 할당되어 있는 4개의 라이트 버퍼들(C31, C32, C33, C34) 중 트랜젝션 전용으로 설정된 라이트 버퍼가 존재하는지 여부를 확인한다. 확인결과, 제2 시점에서 세 번째 라이트 버퍼(C33)가 제1 트랜젝션 전용으로 설정된 상태라는 것을 알 수 있다. 참고로, 제2 시점에서 세 번째 라이트 버퍼(C33)가 제1 트랜젝션 전용의 제1 라이트 버퍼로 설정되기 위해서는 적어도 한 개 이상의 제1 라이트 데이터(TRAN_WDATA1)가 입력되어야 하므로, 도 8b에 도시된 경우는, 적어도 한 개 이상의 제1 라이트 데이터(TRAN_WDATA1)가 노말 라이트 데이터들(NMAL_WDATA)보다 먼저 입력된 것을 가정하도록 하겟다.
따라서, 컨트롤러(C30)는, 제2 시점에서 호스트(C10)로부터 입력된 2개의 노말 라이트 데이터들(NMAL_WDATA)인 'E, F'를 4개의 라이트 버퍼들(C31, C32, C33, C34) 중 제1 트랜젝션 전용으로 설정된 세 번째 라이트 버퍼(C33)를 제외한 나머지 라이트 버퍼들(C31, C32, C34)에 적절히 분산저장할 수 있다. 예컨대, 도면에서는, 제2 시점에서 호스트(C10)로부터 입력된 2개의 노말 라이트 데이터들(NMAL_WDATA)인 'E, F'를 첫 번째 라이트 버퍼(C31)에 저장한다.
정리하면, 컨트롤러(C30)는, 제2 시점에서 호스트(C10)로부터 입력된 2개의 노말 라이트 데이터들(NMAL_WDATA)인 'E, F'를 4개의 라이트 버퍼들(C31, C32, C33, C34) 중 첫 번째 라이트 버퍼(C31)에 저장한다. 그 결과, 6개의 저장공간을 갖는 첫 번째 라이트 버퍼(C31)에는, 제1 시점과 제2 시점에서 각각 2개씩 저장되어 총 4개의 노말 라이트 데이터들(NMAL_WDATA)이 저장되고, 2개의 라이트 데이터를 저장할 수 있는 공간이 빈 상태가 된다.
도 8c를 참조하면, 도 8b에 도시된 제2 시점 이후 이어지는 제3 시점에서 호스트(C10)로부터 총 8개의 라이트 데이터들(WDATA)이 입력되는 것을 가정할 수 있다. 이때, 8개의 라이트 데이터들(WDATA)이 호스트(C10)로부터 입력되는 순서는 미리 정의되지 않으며, 랜덤하게 섞여서 입력되는 것을 가정할 수 있다.
구체적으로, 컨트롤러(C30)는, 제3 시점에서 호스트(C10)로부터 입력되는 8개의 라이트 데이터들(WDATA) 각각의 트랜젝션 아이디정보(TRID)를 확인하여 2개의 제1 라이트 데이터들(TRAN_WDATA1)과 4개의 제2 라이트 데이터들(TRAN_WDATA2) 및 2개의 노말 라이트 데이터들(NMAL_WDATA)로 구분한다.
좀 더 구체적으로, 컨트롤러(C30)는, 제3 시점에서 호스트(C10)로부터 입력되는 8개의 라이트 데이터들(WDATA) 각각의 트랜젝션 아이디정보(TRID)가 1값을 갖는 2개의 라이트 데이터들(WDATA)인 '3, 4'를 제1 트랜젝션으로 그룹화된 라이트 데이터들(WDATA)이라고 판단하고 제1 라이트 데이터들(TRAN_WDATA1)로서 구분한다.
이때, 도 8b에서 설명한 제2 시점에서의 동작을 통해 휘발성 메모리(144)에 할당된 4개의 라이트 버퍼들(C31, C32, C33, C34) 중 세 번째 라이트 버퍼(C33)가 이미 제1 트랜젝션 전용으로 설정되어 제1 라이트 데이터들(TRAN_WDATA1)을 저장하기 위한 제1 라이트 버퍼로서 사용되고 있는 상태이다.
따라서, 컨트롤러(C30)는, 제3 시점에서 제1 라이트 데이터들(TRAN_WDATA1)로 구분될 수 있는 '3, 4'를 별도의 추가동작없이 제1 라이트 버퍼에 즉시 저장한다. 이때, 컨트롤러(C30)는, 도 8b에서 설명한 제2 시점에서의 동작을 통해 총 6개의 라이트 데이터를 저장할 수 있는 세 번째 라이트 버퍼(C33)를 제1 트랜젝션 전용의 제1 라이트 버퍼로서 설정한 뒤, 3개의 데이터인 '0, 1, 2'만 저장하고 3개의 라이트 데이터를 저장할 수 있는 공간을 비워둔 상태였다.
때문에, 컨트롤러(C30)는, 제3 시점에서 제1 라이트 데이터들(TRAN_WDATA1)로 구분될 수 있는 '3, 4'를 별도의 추가동작없이 제1 라이트 버퍼에 즉시 저장한다. 이렇게, 제3 시점에서 제1 라이트 데이터들(TRAN_WDATA1)로 구분될 수 있는 '3, 4'가 제1 라이트 버퍼에 저장되면서, 제1 라이트 버퍼에 포함된 6개의 빈공간 중 5개의 공간에 제1 라이트 데이터들(TRAN_WDATA1)이 저장된 상태가 된다.
또한, 컨트롤러(C30)는, 제1 트랜젝션으로 구분되는 제1 라이트 데이터들(TRAN_WDATA1)인 '0, 1, 2, 3, 4'가 제1 라이트 버퍼에 저장되어 제1 라이트 버퍼에 포함된 6개의 빈공간 중 5개의 공간에 제1 라이트 데이터들(TRAN_WDATA1)이 저장되는 시점에서 제1 트랜젝션의 커밋이 완료된 상태(Transaction Complete)라는 것을 확인할 수 있다.
정리하면, 컨트롤러(C30)는, 전술한 제2 시점에서 제1 트랜젝션 전용의 제1 라이트 버퍼로 설정된 세 번째 라이트 버퍼(C33)로 제3 시점에서 호스트(C10)로부터 입력된 2개의 제1 라이트 데이터들(TRAN_WDATA1)인 '3, 4'를 추가로 저장함으로써, 제1 트랜젝션의 커밋이 완료된 상태(Transaction Complete)라는 것을 확인할 수 있다.
그리고, 컨트롤러(C30)는, 제3 시점에서 호스트(C10)로부터 입력되는 8개의 라이트 데이터들(WDATA) 각각의 트랜젝션 아이디정보(TRID)가 2값을 갖는 4개의 라이트 데이터들(WDATA)인 '110, 111, 112, 113'이 제2 트랜젝션으로 그룹화된 라이트 데이터들(WDATA)이라고 판단하고 제2 라이트 데이터들(TRAN_WDATA2)로서 구분한다.
이때, 제2 라이트 데이터들(TRAN_WDATA2)로 구분될 수 있는 '110, 111, 112, 113' 중 시작데이터인 '110'에 대응하는 제2 시작커맨드(미도시)에는 제2 전체크기정보(TTSIZE2)가 포함되어 있다. 따라서, 컨트롤러(C30)는, '110'에 대응하는 제2 시작커맨드로부터 제2 전체크기정보(TTSIZE2)가 '4'라는 것을 확인할 수 있다.
이렇게, 컨트롤러(C30)는, 제2 전체크기정보(TTSIZE1)가 '4'라는 것을 확인한 후, 휘발성 메모리(144)에 할당되어 있는 4개의 라이트 버퍼들(C31, C32, C33, C34) 중 제1 트래젝션 전용으로 설정된 제1 라이트 버퍼를 제외한 나머지 버퍼들(C31, C32, C34) 중 제2 트랜젝션으로 그룹화된 총 4개의 제2 라이트 데이터들(TRAN_WDATA2)을 저장할 수 있는 빈공간을 갖는 라이트 버퍼가 존재하는지 확인한다.
확인결과, 4개의 라이트 버퍼들(C31, C32, C33, C34) 중 세 번째 라이트 버퍼(C33)는 전술한 제2 시점에서 제1 트랜젝션 전용의 제1 라이트 버퍼로서 설정된 상태라는 것을 알 수 있다.
따라서, 4개의 라이트 버퍼들(C31, C32, C33, C34) 중 세 번째 라이트 버퍼(C33)를 제외한 나머지 3개의 라이트 버퍼들(C31, C32, C34) 중 제2 트랜젝션으로 그룹화된 총 4개의 제2 라이트 데이터들(TRAN_WDATA2)을 저장할 수 있는 빈공간을 갖는 라이트 버퍼가 존재하는지 확인한다.
확인결과, 3개의 라이트 버퍼들(C31, C32, C34) 중 첫 번째 라이트 버퍼(C31)에는, 전술한 제1 시점 및 제2 시점 각각에서 2개씩 총 4개의 노말 라이트 데이터들(NMAL_WDATA)이 저장된 바 있기 때문에 2개의 빈공간을 갖고 있는 상태이다. 따라서, 첫 번째 라이트 버퍼(C31)는, 제2 트랜젝션으로 그룹화된 총 4개의 제2 라이트 데이터들(TRAN_WDATA2)을 저장하기에 수용하기에 적합하지 않다.
그리고, 3개의 라이트 버퍼들(C31, C32, C34) 중 두 번째 라이트 버퍼(C32)에는, 전술한 제1 시점에서 2개의 노말 라이트 데이터들(NMAL_WDATA)(C31)이 저장된 바 있기 때문에 4개의 빈공간을 갖고 있는 상태이다. 따라서, 두 번째 라이트 버퍼(C32)는, 제2 트랜젝션으로 그룹화된 총 4개의 제2 라이트 데이터들(TRAN_WDATA2)을 저장하기에 수용하기에 적합하다.
그리고, 3개의 라이트 버퍼들(C31, C32, C34) 중 네 번째 라이트 버퍼(C34)에는, 전술한 제1 시점 및 2시점에서 어떠한 라이트도 저장된 바 없기 때문에 6개의 빈공간을 갖고 있는 상태이다. 따라서, 네 번째 라이트 버퍼(C34)는, 제2 트랜젝션으로 그룹화된 총 4개의 제2 라이트 데이터들(TRAN_WDATA2)을 수용하기에 적합하다.
즉, 3개의 라이트 버퍼들(C31, C32, C34) 중 적어도 한 개 이상의 라이트 버퍼(C32, C34) 각각에서 제1 예정크기를 수용할 수 있는 빈공간이 존재하는 것을 알 수 있다.
이렇게, 한 개 이상의 라이트 버퍼(C32, C34) 각각이 제1 예정크기를 수용할 수 있는 빈공간을 갖고 있기 때문에, 컨트롤러(C30)는, 그 중 빈공간의 크기가 상대적으로 더 작은 라이트 버퍼에 대해 제2 전용옵션을 설정하여 제2 라이트 버퍼로서 관리한다. 즉, 컨트롤러(C30)는, 각각 제1 예정크기 이상의 빈공간을 갖는 두 번째 라이트 버퍼(C32)와 네 번째 라이트 버퍼(C34) 중 빈공간의 크기가 상대적으로 더 작은 두 번째 라이트 버퍼(C32)에 대해 제2 전용옵션을 설정하여 제2 라이트 버퍼로 관리한다.
이렇게, 컨트롤러(C30)는, 제2 라이트 데이터들(TRAN_WDATA2)로 구분될 수 있는 '110, 111, 112, 113' 중 시작데이터인 '110'이 입력되기 이전에 제2 전체크기정보(TTSIZE2)를 확인하여 휘발성 메모리(144)에 미리 할당되어 있는 4개의 라이트 버퍼들(C31, C32, C33, C34) 중 두 번째 라이트 버퍼(C32)를 제2 트랜젝션 전용의 제2 라이트 버퍼로 설정할 수 있다.
따라서, 컨트롤러(C30)는, 컨트롤러(C30)는, 제3 시점에서 호스트(C10)로부터 8개의 라이트 데이터들(WDATA) 중 제2 트랜젝션으로 구분되는 4개의 제2 라이트 데이터들(TRAN_WDATA2) 각각이 입력될 때마다 제2 트랜젝션 전용으로 설정된 제2 라이트 버퍼에 저장한다.
이렇게, 제3 시점에서 제2 라이트 데이터들(TRAN_WDATA2)로 구분될 수 있는 '110, 111, 112, 1133'가 제2 라이트 버퍼에 저장되면서, 제2 라이트 버퍼에 포함된 4개의 빈공간 전체에 제2 라이트 데이터들(TRAN_WDATA2)이 저장된 상태가 된다.
또한, 컨트롤러(C30)는, 제2 트랜젝션으로 구분되는 제2 라이트 데이터들(TRAN_WDATA2)인 '110, 111, 112, 113'가 제2 라이트 버퍼에 저장되어 제2 라이트 버퍼에 포함된 4개의 빈공간 전체에 제2 라이트 데이터들(TRAN_WDATA2)이 저장되는 시점에서 제2 트랜젝션의 커밋이 완료된 상태(Transaction Complete)라는 것을 확인할 수 있다.
정리하면, 컨트롤러(C30)는, 제3 시점에서 총 4개의 라이트 데이터를 저장할 수 있는 공간을 갖는 두 번째 라이트 버퍼(C32)를 제2 트랜젝션 전용의 제2 라이트 버퍼로서 선택한 뒤, 호스트(C10)로부터 입력된 4개의 제2 라이트 데이터들(TRAN_WDATA2)인 '110, 111, 112, 113'를 저장함으로써, 제2 트랜젝션의 커밋이 완료된 상태(Transaction Complete)라는 것을 확인할 수 있다.
그리고, 컨트롤러(C30)는, 제3 시점에서 호스트(C10)에서 입력되는 8개의 라이트 데이터들(WDATA) 각각의 트랜젝션 아이디정보(TRID)가 어떠한 값으로도 설정되어 있지 않은 라이트 데이터들(WDATA)인 'G, H'가 트랜젝션으로 그룹화되지 않은 라이트 데이터들(WDATA)이라고 판단하고 노말 라이트 데이터들(NMAL_WDATA)로서 구분한다.
이어서, 컨트롤러(C30)는, 제3 시점에서 휘발성 메모리(144)에 할당되어 있는 4개의 라이트 버퍼들(C31, C32, C33, C34) 중 트랜젝션 전용으로 설정된 라이트 버퍼가 존재하는지 여부를 확인한다. 확인결과, 제3 시점에서 세 번째 라이트 버퍼(C33)가 제1 트랜젝션 전용으로 설정되고 두 번째 라이트 버퍼(C32)가 제2 트랜젝션 전용으로 설정된 상태라는 것을 알 수 있다. 참고로, 제3 시점에서 두 번째 라이트 버퍼(C32)가 제2 트랜젝션 전용의 제2 라이트 버퍼로 설정되기 위해서는 적어도 한 개 이상의 제2 라이트 데이터(TRAN_WDATA2)가 입력되어야 하므로, 도 8c에 도시된 경우는, 적어도 한 개 이상의 제2 라이트 데이터(TRAN_WDATA2)가 노말 라이트 데이터들(NMAL_WDATA)보다 먼저 입력된 것을 가정하도록 하겟다.
따라서, 컨트롤러(C30)는, 제3 시점에서 호스트(C10)로부터 입력된 2개의 노말 라이트 데이터들(NMAL_WDATA)인 'G, H'를 4개의 라이트 버퍼들(C31, C32, C33, C34) 중 제1 트랜젝션 전용으로 설정된 세 번째 라이트 버퍼(C33) 및 제2 트랜젝션 전용으로 설정된 두 번째 라이트 버퍼(C32)를 제외한 나머지 라이트 버퍼들(C31, C34)에 적절히 분산저장할 수 있다. 예컨대, 도면에서는, 제3 시점에서 호스트(C10)로부터 입력된 2개의 노말 라이트 데이터들(NMAL_WDATA)인 'G, H'를 네 번째 라이트 버퍼(C34)에 저장한다.
정리하면, 컨트롤러(C30)는, 제3 시점에서 호스트(C10)로부터 입력된 2개의 노말 라이트 데이터들(NMAL_WDATA)인 'G, H'를 4개의 라이트 버퍼들(C31, C32, C33, C34) 중 네 번째 라이트 버퍼(C34)에 저장한다. 그 결과, 6개의 저장공간을 갖는 네 번째 라이트 버퍼(C31)에는, 제3 시점에서 2개의 노말 라이트 데이터들(NMAL_WDATA)이 저장되고, 4개의 라이트 데이터를 저장할 수 있는 공간이 빈 상태가 된다.
한편, 도 8c에 도시된 것과 같은 상태에서, 제1 트랜젝션과 제2 트랜젝션은 모두 커밋이 완료된 상태이므로, 제1 라이트 버퍼 및 제2 라이트 버퍼를 플러시해야 하는 경우인 것을 알 수 있다.
이때, 제3 시점에서 호스트(C10)로부터 입력되는 라이트 데이터들(WDATA)의 입력순서는 랜덤이라고 가정하였으므로, 제1 트랜젝션의 커밋이 완료되는 시점이 제2 트랜젝션의 커밋이 완료되는 시점보다 앞선 시점이 될 수도 있고, 제2 트랜젝션의 커밋이 완료되는 시점이 제1 트랜젝션의 커밋이 완료되는 시점보다 앞선 시점이 될 수 있다.
여기서, 제1 트랜젝션의 커밋이 완료되는 시점이 제2 트랜젝션의 커밋이 완료되는 시점보다 앞선 시점이 되는 경우, 제1 트랜젝션의 커밋이 완료되는 시점으로부터 설정된 제1 시간간격 이내에 제2 트랜젝션의 커밋이 완료되었다고 가정할 수 있다.
반대로, 제2 트랜젝션의 커밋이 완료되는 시점이 제1 트랜젝션의 커밋이 완료되는 시점보다 앞선 시점이 되는 경우, 제2 트랜젝션의 커밋이 완료되는 시점으로부터 설정된 제1 시간간격 이내에 제1 트랜젝션의 커밋이 완료되었다고 가정할 수 있다.
이렇게, 제1 트랜젝션의 커밋이 완료되는 시점과 제2 트랜젝션의 커밋이 완료되는 시점이 설정된 제1 시간간격 이내가 되는 경우, 컨트롤러(C30)는, 제1 트랜젝션의 커밋에 대응하는 제1 라이트 버퍼에 대한 제1 플러시동작(FLUSH1)의 수행시점과 제2 트랜젝션의 커밋에 대응하는 제2 라이트 버퍼에 대한 제2 플러시동작(FLUSH2)의 수행시점을 서로 동기화(Synchronize)시킨다.
이렇게, 컨트롤러(C30)는, 제1 플러시동작(FLUSH1)의 수행시점과 제2 플러시동작(FLUSH2)의 수행시점을 동기화시킴으로써, 제1 라이트 버퍼에 저장된 제1 라이트 데이터들(TRAN_WDATA1)을 비휘발성 메모리 장치들(C40, C50, C60)에 저장하는 제1 라이트동작(WRTIE1)의 수행이 시작되는 시점과 제2 라이트 버퍼에 저장된 제2 라이트 데이터들(TRAN_WDATA2)을 비휘발성 메모리 장치들(C40, C50, C60)에 저장하는 제2 라이트동작(WRITE2)을 동기화시킨다고 볼 수 있다.
따라서, 컨트롤러(C30)는, 도 9a에 도시된 '제1 동기화 선택동작'의 경우와 같이, 제1 플러시동작(FLUSH1)의 수행시점과 제2 플러시동작(FLUSH2)의 수행시점을 동기화시키는 것에 응답하여 제1 라이트동작(WRTIE1)의 수행이 완료되었음을 호스트(C10)에 알려주기 위한 제1 확인(ack)신호(ACK1)를 호스트(C10)로 전달하는 시점과 제2 플러시동작(FLUSH2)에 연결된 제2 라이트동작(WRITE2)의 수행이 완료되었음을 호스트(C10)에 알려주기 위한 제2 확인신호(ACK2)를 호스트(C10)로 전달하는 시점을 서로 동기화시킬 수 있다.
물론, 컨트롤러(C30)는, 도 9b에 도시된 '제1 동기화 선택동작'의 경우와 같이, 제1 플러시동작(FLUSH1)의 수행시점과 제2 플러시동작(FLUSH2)의 수행시점을 동기화시키지 않는 것에 응답하여 제1 라이트동작(WRTIE1)의 수행이 완료되었음을 호스트(C10)에 알려주기 위한 제1 확인(ack)신호(ACK1)를 호스트(C10)로 전달하는 시점과 제2 플러시동작(FLUSH2)에 연결된 제2 라이트동작(WRITE2)의 수행이 완료되었음을 호스트(C10)에 알려주기 위한 제2 확인신호(ACK2)를 호스트(C10)로 전달하는 시점을 서로 동기화시키지 않을 수 있다(Asynchronize).
또한, 컨트롤러(C30)는, 도 9c에 도시된 '제2 동기화 선택동작'의 경우와 같이, 제1 플러시동작(FLUSH1)의 수행시점과 제2 플러시동작(FLUSH2)의 수행시점이 동기화된 경우에도, 제1 플러시동작(FLUSH1)에 연결된 제1 라이트동작(WRTIE1)의 수행이 완료되었음을 호스트(C10)에 알려주기 위한 제1 확인신호(ACK1)가 생성되는 시점과 제2 플러시동작(FLUSH2)에 연결된 제2 라이트동작(WRITE2)의 수행이 완료되었음을 호스트(C10)에 알려주기 위한 제2 확인신호(ACK2)가 생성되는 시점이 설정된 제2 시간간격 이내인 경우에, 제1 확인신호(ACK1)를 호스트(C10)로 전달하는 시점과 제2 확인신호(ACK2)를 호스트(C10)로 전달하는 시점을 서로 동기화시킬 수 있다.
물론, 컨트롤러(C30)는, 도 9d에 도시된 '제2 동기화 선택동작'의 경우와 같이, 제1 플러시동작(FLUSH1)의 수행시점과 제2 플러시동작(FLUSH2)의 수행시점이 동기화된 경우에도, 제1 플러시동작(FLUSH1)에 연결된 제1 라이트동작(WRTIE1)의 수행이 완료되었음을 호스트(C10)에 알려주기 위한 제1 확인신호(ACK1)가 생성되는 시점과 제2 플러시동작(FLUSH2)에 연결된 제2 라이트동작(WRITE2)의 수행이 완료되었음을 호스트(C10)에 알려주기 위한 제2 확인신호(ACK2)가 생성되는 시점이 설정된 제2 시간간격을 넘어서는 경우에, 제1 확인신호(ACK1)를 호스트(C10)로 전달하는 시점과 제2 확인신호(ACK2)를 호스트(C10)로 전달하는 시점을 서로 동기화시키지 않을 수 있다(Asynchronize).
한편, 다시 도 8c를 참조하면, 컨트롤러(C30)는, 제1 라이트동작(WRTIE1)의 수행을 완료한 후, 제1 라이트 버퍼에 대한 제1 트랜젝션 전용 설정을 리셋(reset)한다. 즉, 컨트롤러(C30)는, 전술한 제2 시점에서 휘발성 메모리(144)에 할당된 4개의 라이트 버퍼들(C31, C32, C33, C34) 중 세 번째 라이트 버퍼(C33)에 대해 제1 전용옵션을 설정하여 제1 트랜젝션 전용의 제1 라이트 버퍼로서 사용한 바 있다. 따라서, 제3 시점에서 제1 라이트동작(WRTIE1)의 수행을 완료한 후에 제1 라이트 버퍼에 대한 제1 전용옵션을 리셋하게 되면, 제1 라이트 버퍼로서 사용된 세 번째 라이트 버퍼(C33)를 제2 시점이전과 같이 다시 제1 트랜젝션 전용으로 사용하지 않게 된다. 즉, 제2 시점 및 제3 시점에서 제1 라이트 데이터들(TRAN_WDATA1)을 저장하기 위해 전용으로 사용된 세 번째 라이트 버퍼(C33)를 제3 시점이후에는 다시 노말 라이트 데이터들(NMAL_WDATA)을 저장하기 위해 사용할 수 있다.
마찬가지로, 컨트롤러(C30)는, 제2 라이트동작(WRTIE2)의 수행을 완료한 후, 제2 라이트 버퍼에 대한 제2 트랜젝션 전용 설정을 리셋(reset)한다. 즉, 컨트롤러(C30)는, 제3 시점에서 휘발성 메모리(144)에 할당된 4개의 라이트 버퍼들(C31, C32, C33, C34) 중 두 번째 라이트 버퍼(C32)에 대해 제2 전용옵션을 설정하여 제2 트랜젝션 전용의 제2 라이트 버퍼로서 사용한 바 있다. 따라서, 제3 시점에서 제2 라이트동작(WRTIE2)의 수행을 완료한 후에 제2 라이트 버퍼에 대한 제2 전용옵션을 리셋하게 되면, 제2 라이트 버퍼로서 사용된 두 번째 라이트 버퍼(C32)를 제3 시점이전과 같이 다시 제2 트랜젝션 전용으로 사용하지 않게 된다. 즉, 제3 시점에서 제2 라이트 데이터들(TRAN_WDATA2)을 저장하기 위해 전용으로 사용된 두 번째 라이트 버퍼(C32)를 제3 시점이후에는 다시 노말 라이트 데이터들(NMAL_WDATA)을 저장하기 위해 사용할 수 있다.
도 8d를 참조하면, 도 8b에 도시된 제2 시점 이후 이어지는 제3 시점에서 호스트(C10)로부터 총 7개의 라이트 데이터들(WDATA)이 입력되는 것을 가정할 수 있다. 이때, 7개의 라이트 데이터들(WDATA)이 호스트(C10)로부터 입력되는 순서는 미리 정의되지 않으며, 랜덤하게 섞여서 입력되는 것을 가정할 수 있다.
구체적으로, 컨트롤러(C30)는, 제3 시점에서 호스트(C10)로부터 입력되는 7개의 라이트 데이터들(WDATA) 각각의 트랜젝션 아이디정보(TRID)를 확인하여 1개의 제1 라이트 데이터들(TRAN_WDATA1)과 4개의 제2 라이트 데이터들(TRAN_WDATA2) 및 2개의 노말 라이트 데이터들(NMAL_WDATA)로 구분한다.
좀 더 구체적으로, 컨트롤러(C30)는, 제3 시점에서 호스트(C10)로부터 입력되는 7개의 라이트 데이터들(WDATA) 각각의 트랜젝션 아이디정보(TRID)가 1값을 갖는 1개의 라이트 데이터들(WDATA)인 '3'를 제1 트랜젝션으로 그룹화된 라이트 데이터들(WDATA)이라고 판단하고 제1 라이트 데이터들(TRAN_WDATA1)로서 구분한다.
이때, 도 8b에서 설명한 제2 시점에서의 동작을 통해 휘발성 메모리(144)에 할당된 4개의 라이트 버퍼들(C31, C32, C33, C34) 중 세 번째 라이트 버퍼(C33)가 이미 제1 트랜젝션 전용으로 설정되어 제1 라이트 데이터들(TRAN_WDATA1)을 저장하기 위한 제1 라이트 버퍼로서 사용되고 있는 상태이다.
따라서, 컨트롤러(C30)는, 제3 시점에서 제1 라이트 데이터들(TRAN_WDATA1)로 구분될 수 있는 '3'을 별도의 추가동작없이 제1 라이트 버퍼에 즉시 저장한다. 이때, 컨트롤러(C30)는, 도 8b에서 설명한 제2 시점에서의 동작을 통해 총 6개의 라이트 데이터를 저장할 수 있는 세 번째 라이트 버퍼(C33)를 제1 트랜젝션 전용의 제1 라이트 버퍼로서 설정한 뒤, 3개의 데이터인 '0, 1, 2'만 저장하고 3개의 라이트 데이터를 저장할 수 있는 공간을 비워둔 상태였다.
때문에, 컨트롤러(C30)는, 제3 시점에서 제1 라이트 데이터들(TRAN_WDATA1)로 구분될 수 있는 '3'을 별도의 추가동작없이 제1 라이트 버퍼에 즉시 저장한다. 이렇게, 제3 시점에서 제1 라이트 데이터들(TRAN_WDATA1)로 구분될 수 있는 '3'이 제1 라이트 버퍼에 저장되면서, 제1 라이트 버퍼에 포함된 6개의 빈공간 중 4개의 공간에 제1 라이트 데이터들(TRAN_WDATA1)이 저장된 상태가 된다.
또한, 컨트롤러(C30)는, 제3 시점에서 호스트(C10)로부터 7개의 라이트 데이터들(WDATA)이 모두 입력된 후에도 제1 트랜젝션으로 구분되는 제1 라이트 데이터들(TRAN_WDATA1)은 '0, 1, 2, 3'만 존재하는 것을 확인할 수 있다. 즉, 컨트롤러(C30)는, 호스트(C10)로부터 5개의 라이트 데이터들(WDATA)이 입력된 시점에서 제1 트랜젝션은 아직 커밋되지 않은 상태(Transaction Uncomplete)라는 것을 확인할 수 있다.
정리하면, 컨트롤러(C30)는, 전술한 제2 시점에서 제1 트랜젝션 전용의 제1 라이트 버퍼로 설정된 세 번째 라이트 버퍼(C33)로 제3 시점에서 호스트(C10)로부터 입력된 1개의 제1 라이트 데이터들(TRAN_WDATA1)인 '3'을 추가로 저장한 후, 나머지 2개의 라이트 데이터를 저장할 수 있는 공간은 비워둔(empty)다.
그리고, 컨트롤러(C30)는, 제3 시점에서 호스트(C10)로부터 입력되는 7개의 라이트 데이터들(WDATA) 각각의 트랜젝션 아이디정보(TRID)가 2값을 갖는 4개의 라이트 데이터들(WDATA)인 '110, 111, 112, 113'이 제2 트랜젝션으로 그룹화된 라이트 데이터들(WDATA)이라고 판단하고 제2 라이트 데이터들(TRAN_WDATA2)로서 구분한다.
이때, 제2 라이트 데이터들(TRAN_WDATA2)로 구분될 수 있는 '110, 111, 112, 113' 중 시작데이터인 '110'에 대응하는 제2 시작커맨드(미도시)에는 제2 전체크기정보(TTSIZE2)가 포함되어 있다. 따라서, 컨트롤러(C30)는, '110'에 대응하는 제2 시작커맨드로부터 제2 전체크기정보(TTSIZE2)가 '4'라는 것을 확인할 수 있다.
이렇게, 컨트롤러(C30)는, 제2 전체크기정보(TTSIZE1)가 '4'라는 것을 확인한 후, 휘발성 메모리(144)에 할당되어 있는 4개의 라이트 버퍼들(C31, C32, C33, C34) 중 제1 트래젝션 전용으로 설정된 제1 라이트 버퍼를 제외한 나머지 버퍼들(C31, C32, C34) 중 제2 트랜젝션으로 그룹화된 총 4개의 제2 라이트 데이터들(TRAN_WDATA2)을 저장할 수 있는 빈공간을 갖는 라이트 버퍼가 존재하는지 확인한다.
확인결과, 4개의 라이트 버퍼들(C31, C32, C33, C34) 중 세 번째 라이트 버퍼(C33)는 전술한 제2 시점에서 제1 트랜젝션 전용의 제1 라이트 버퍼로서 설정된 상태라는 것을 알 수 있다.
따라서, 4개의 라이트 버퍼들(C31, C32, C33, C34) 중 세 번째 라이트 버퍼(C33)를 제외한 나머지 3개의 라이트 버퍼들(C31, C32, C34) 중 제2 트랜젝션으로 그룹화된 총 4개의 제2 라이트 데이터들(TRAN_WDATA2)을 저장할 수 있는 빈공간을 갖는 라이트 버퍼가 존재하는지 확인한다.
확인결과, 3개의 라이트 버퍼들(C31, C32, C34) 중 첫 번째 라이트 버퍼(C31)에는, 전술한 제1 시점 및 제2 시점 각각에서 2개씩 총 4개의 노말 라이트 데이터들(NMAL_WDATA)이 저장된 바 있기 때문에 2개의 빈공간을 갖고 있는 상태이다. 따라서, 첫 번째 라이트 버퍼(C31)는, 제2 트랜젝션으로 그룹화된 총 4개의 제2 라이트 데이터들(TRAN_WDATA2)을 저장하기에 수용하기에 적합하지 않다.
그리고, 3개의 라이트 버퍼들(C31, C32, C34) 중 두 번째 라이트 버퍼(C32)에는, 전술한 제1 시점에서 2개의 노말 라이트 데이터들(NMAL_WDATA)이 저장된 바 있기 때문에 4개의 빈공간을 갖고 있는 상태이다. 따라서, 두 번째 라이트 버퍼(C32)는, 제2 트랜젝션으로 그룹화된 총 4개의 제2 라이트 데이터들(TRAN_WDATA2)을 저장하기에 수용하기에 적합하다.
그리고, 3개의 라이트 버퍼들(C31, C32, C34) 중 네 번째 라이트 버퍼(C34)에는, 전술한 제1 시점 및 2시점에서 어떠한 라이트도 저장된 바 없기 때문에 6개의 빈공간을 갖고 있는 상태이다. 따라서, 네 번째 라이트 버퍼(C34)는, 제2 트랜젝션으로 그룹화된 총 4개의 제2 라이트 데이터들(TRAN_WDATA2)을 수용하기에 적합하다.
즉, 3개의 라이트 버퍼들(C31, C32, C34) 중 적어도 한 개 이상의 라이트 버퍼(C32, C34) 각각에서 제1 예정크기를 수용할 수 있는 빈공간이 존재하는 것을 알 수 있다.
이렇게, 한 개 이상의 라이트 버퍼(C32, C34) 각각이 제1 예정크기를 수용할 수 있는 빈공간을 갖고 있기 때문에, 컨트롤러(C30)는, 그 중 빈공간의 크기가 상대적으로 더 작은 라이트 버퍼에 대해 제2 전용옵션을 설정하여 제2 라이트 버퍼로서 관리한다. 즉, 컨트롤러(C30)는, 각각 제1 예정크기 이상의 빈공간을 갖는 두 번째 라이트 버퍼(C32)와 네 번째 라이트 버퍼(C34) 중 빈공간의 크기가 상대적으로 더 작은 두 번째 라이트 버퍼(C32)에 대해 제2 전용옵션을 설정하여 제2 라이트 버퍼로 관리한다.
이렇게, 컨트롤러(C30)는, 제2 라이트 데이터들(TRAN_WDATA2)로 구분될 수 있는 '110, 111, 112, 113' 중 시작데이터인 '110'이 입력되기 이전에 제2 전체크기정보(TTSIZE2)를 확인하여 휘발성 메모리(144)에 미리 할당되어 있는 4개의 라이트 버퍼들(C31, C32, C33, C34) 중 두 번째 라이트 버퍼(C32)를 제2 트랜젝션 전용의 제2 라이트 버퍼로 설정할 수 있다.
따라서, 컨트롤러(C30)는, 컨트롤러(C30)는, 제3 시점에서 호스트(C10)로부터 7개의 라이트 데이터들(WDATA) 중 제2 트랜젝션으로 구분되는 4개의 제2 라이트 데이터들(TRAN_WDATA2) 각각이 입력될 때마다 제2 트랜젝션 전용으로 설정된 제2 라이트 버퍼에 저장한다.
이렇게, 제3 시점에서 제2 라이트 데이터들(TRAN_WDATA2)로 구분될 수 있는 '110, 111, 112, 1133'가 제2 라이트 버퍼에 저장되면서, 제2 라이트 버퍼에 포함된 4개의 빈공간 전체에 제2 라이트 데이터들(TRAN_WDATA2)이 저장된 상태가 된다.
또한, 컨트롤러(C30)는, 제2 트랜젝션으로 구분되는 제2 라이트 데이터들(TRAN_WDATA2)인 '110, 111, 112, 113'가 제2 라이트 버퍼에 저장되어 제2 라이트 버퍼에 포함된 4개의 빈공간 전체에 제2 라이트 데이터들(TRAN_WDATA2)이 저장되는 시점에서 제2 트랜젝션의 커밋이 완료된 상태(Transaction Complete)라는 것을 확인할 수 있다.
정리하면, 컨트롤러(C30)는, 제3 시점에서 총 4개의 라이트 데이터를 저장할 수 있는 공간을 갖는 두 번째 라이트 버퍼(C32)를 제2 트랜젝션 전용의 제2 라이트 버퍼로서 선택한 뒤, 호스트(C10)로부터 입력된 4개의 제2 라이트 데이터들(TRAN_WDATA2)인 '110, 111, 112, 113'를 저장함으로써, 제2 트랜젝션의 커밋이 완료된 상태(Transaction Complete)라는 것을 확인할 수 있다.
그리고, 컨트롤러(C30)는, 제3 시점에서 호스트(C10)에서 입력되는 7개의 라이트 데이터들(WDATA) 각각의 트랜젝션 아이디정보(TRID)가 어떠한 값으로도 설정되어 있지 않은 라이트 데이터들(WDATA)인 'G, H'가 트랜젝션으로 그룹화되지 않은 라이트 데이터들(WDATA)이라고 판단하고 노말 라이트 데이터들(NMAL_WDATA)로서 구분한다.
이어서, 컨트롤러(C30)는, 제3 시점에서 휘발성 메모리(144)에 할당되어 있는 4개의 라이트 버퍼들(C31, C32, C33, C34) 중 트랜젝션 전용으로 설정된 라이트 버퍼가 존재하는지 여부를 확인한다. 확인결과, 제3 시점에서 세 번째 라이트 버퍼(C33)가 제1 트랜젝션 전용으로 설정되고 두 번째 라이트 버퍼(C32)가 제2 트랜젝션 전용으로 설정된 상태라는 것을 알 수 있다. 참고로, 제3 시점에서 두 번째 라이트 버퍼(C32)가 제2 트랜젝션 전용의 제2 라이트 버퍼로 설정되기 위해서는 적어도 한 개 이상의 제2 라이트 데이터(TRAN_WDATA2)가 입력되어야 하므로, 도 8d에 도시된 경우는, 적어도 한 개 이상의 제2 라이트 데이터(TRAN_WDATA2)가 노말 라이트 데이터들(NMAL_WDATA)보다 먼저 입력된 것을 가정하도록 하겟다.
따라서, 컨트롤러(C30)는, 제3 시점에서 호스트(C10)로부터 입력된 2개의 노말 라이트 데이터들(NMAL_WDATA)인 'G, H'를 4개의 라이트 버퍼들(C31, C32, C33, C34) 중 제1 트랜젝션 전용으로 설정된 세 번째 라이트 버퍼(C33) 및 제2 트랜젝션 전용으로 설정된 두 번째 라이트 버퍼(C32)를 제외한 나머지 라이트 버퍼들(C31, C34)에 적절히 분산저장할 수 있다. 예컨대, 도면에서는, 제3 시점에서 호스트(C10)로부터 입력된 2개의 노말 라이트 데이터들(NMAL_WDATA)인 'G, H'를 네 번째 라이트 버퍼(C34)에 저장한다.
정리하면, 컨트롤러(C30)는, 제3 시점에서 호스트(C10)로부터 입력된 2개의 노말 라이트 데이터들(NMAL_WDATA)인 'G, H'를 4개의 라이트 버퍼들(C31, C32, C33, C34) 중 네 번째 라이트 버퍼(C34)에 저장한다. 그 결과, 6개의 저장공간을 갖는 네 번째 라이트 버퍼(C31)에는, 제3 시점에서 2개의 노말 라이트 데이터들(NMAL_WDATA)이 저장되고, 4개의 라이트 데이터를 저장할 수 있는 공간이 빈 상태가 된다.
한편, 도 8d에 도시된 것과 같은 상태에서, 제1 트랜젝션은 커밋이 완료되지 못한 상태이고, 제2 트랜젝션은 커밋이 완료된 상태이므로, 제1 라이트 버퍼에 대해서는 플러시동작을 수행할 필요가 없고, 제2 라이트 버퍼는 플러시해야 하는 경우인 것을 알 수 있다.
이렇게, 도 8b에 도시된 것과 같은 상태에서 도 8d와 같은 상태로 넘어갈 때, 제1 트랜젝션은 커밋이 완료되지 않은 상태를 유지하고, 제2 트랜젝션은 커밋이 완료된 상태로 전환된다. 따라서, 도 8d와 같은 상태에서 제1 트랜젝션의 커밋이 어느 시점에 완료될지 알 수 없지만, 제2 트랜젝션의 커밋이 완료되는 시점은 제1 트랜젝션의 커밋이 완료되는 시점보다 앞선 상태라는 것을 알 수 있다. 이를 통해, 제2 트랜젝션의 커밋이 완료되는 시점으로부터 설정된 제1 시간간격 이내에 제1 트랜젝션의 커밋이 완료되지 못했다는 것을 가정할 수 있다.
이렇게, 제1 트랜젝션의 커밋이 완료되는 시점과 제2 트랜젝션의 커밋이 완료되는 시점이 설정된 제1 시간간격을 초과하는 경우, 컨트롤러(C30)는, 제1 트랜젝션의 커밋에 대응하는 제1 라이트 버퍼에 대한 제1 플러시동작(FLUSH1)의 수행시점과 제2 트랜젝션의 커밋에 대응하는 제2 라이트 버퍼에 대한 제2 플러시동작(FLUSH2)의 수행시점을 동기화 시키지 않는다(Asynchronize).
즉, 도면에서와 같이 커밋이 완료된 제2 트랜젝션에 대응하는 제2 라이트 버퍼에 대한 제2 플러시동작(FLUSH2)이 수행된 후, 설정된 제1 시간간격을 초과한 어떤 임의의 시점에서 제1 트랜젝션의 커밋이 완료될 때, 제1 트랜젝션에 대응하는 제1 라이트 버퍼에 대한 제1 플러시동작(FLUSH1)이 수행될 수 있을 것이다.
이렇게, 컨트롤러(C30)는, 제1 플러시동작(FLUSH1)의 수행시점과 제2 플러시동작(FLUSH2)의 수행시점을 동기화시키지 않음으로써, 제1 라이트 버퍼에 저장된 제1 라이트 데이터들(TRAN_WDATA1)을 비휘발성 메모리 장치들(C40, C50, C60)에 저장하는 제1 라이트동작(WRTIE1)의 수행이 시작되는 시점과 제2 라이트 버퍼에 저장된 제2 라이트 데이터들(TRAN_WDATA2)을 비휘발성 메모리 장치들(C40, C50, C60)에 저장하는 제2 라이트동작(WRITE2)을 동기화시키지 않는다고 볼 수 있다. 그에 따라, 제1 라이트동작의 수행이 완료되는 시점과 제2 라이트동작의 수행이 완료되는 시점이 큰 차이를 가질 가능성이 높다.
따라서, 컨트롤러(C30)는, 도 9b에 도시된 '제1 동기화 선택동작'의 경우와 같이, 제1 플러시동작(FLUSH1)의 수행시점과 제2 플러시동작(FLUSH2)의 수행시점을 동기화시키지 않는 것에 응답하여 제1 라이트동작(WRTIE1)의 수행이 완료되었음을 호스트(C10)에 알려주기 위한 제1 확인(ack)신호(ACK1)를 호스트(C10)로 전달하는 시점과 제2 플러시동작(FLUSH2)에 연결된 제2 라이트동작(WRITE2)의 수행이 완료되었음을 호스트(C10)에 알려주기 위한 제2 확인신호(ACK2)를 호스트(C10)로 전달하는 시점을 서로 동기화시키지 않을 수 있다(Asynchronize).
이때, 도 8d에서는 제1 플러시동작(FLUSH1)의 수행시점과 제2 플러시동작(FLUSH2)의 수행시점을 동기화시키지 않는 것을 가정하므로, 도 9c 및 도 9d에 도시된 '제2 동기화 선택동작'의 경우가 선택되어 수행되는 것은 불가능하다.
한편, 다시 도 8d를 참조하면, 컨트롤러(C30)는, 제2 라이트동작(WRTIE2)의 수행을 완료한 후, 제2 라이트 버퍼에 대한 제2 트랜젝션 전용 설정을 리셋(reset)한다. 즉, 컨트롤러(C30)는, 제3 시점에서 휘발성 메모리(144)에 할당된 4개의 라이트 버퍼들(C31, C32, C33, C34) 중 두 번째 라이트 버퍼(C32)에 대해 제2 전용옵션을 설정하여 제2 트랜젝션 전용의 제2 라이트 버퍼로서 사용한 바 있다. 따라서, 제3 시점에서 제2 라이트동작(WRTIE2)의 수행을 완료한 후에 제2 라이트 버퍼에 대한 제2 전용옵션을 리셋하게 되면, 제2 라이트 버퍼로서 사용된 두 번째 라이트 버퍼(C32)를 제3 시점이전과 같이 다시 제2 트랜젝션 전용으로 사용하지 않게 된다. 즉, 제3 시점에서 제2 라이트 데이터들(TRAN_WDATA2)을 저장하기 위해 전용으로 사용된 두 번째 라이트 버퍼(C32)를 제3 시점이후에는 다시 노말 라이트 데이터들(NMAL_WDATA)을 저장하기 위해 사용할 수 있다.
반면, 제1 라이트 버퍼에 대해서는 제1 플러시동작(FLUSH1)과, 그에 연결된 제1 라이트 동작(WRTIE1)이 수행되지 않은 상태이므로, 제3 시점이후에도 제1 라이트 버퍼에 대해서는 제1 전용옵션이 설정된 상태를 계속 유지하여 제1 트랜젝션 전용으로 계속 사용한다.
도 8e를 참조하면, 도 8b에 도시된 제2 시점 이후 이어지는 제3 시점에서 호스트(C10)로부터 총 7개의 라이트 데이터들(WDATA)이 입력되는 것을 가정할 수 있다. 이때, 7개의 라이트 데이터들(WDATA)이 호스트(C10)로부터 입력되는 순서는 미리 정의되지 않으며, 랜덤하게 섞여서 입력되는 것을 가정할 수 있다.
구체적으로, 컨트롤러(C30)는, 제3 시점에서 호스트(C10)로부터 입력되는 7개의 라이트 데이터들(WDATA) 각각의 트랜젝션 아이디정보(TRID)를 확인하여 1개의 제1 라이트 데이터들(TRAN_WDATA1)과 4개의 제2 라이트 데이터들(TRAN_WDATA2) 및 2개의 노말 라이트 데이터들(NMAL_WDATA)로 구분한다.
좀 더 구체적으로, 컨트롤러(C30)는, 제3 시점에서 호스트(C10)로부터 입력되는 7개의 라이트 데이터들(WDATA) 각각의 트랜젝션 아이디정보(TRID)가 1값을 갖는 1개의 라이트 데이터들(WDATA)인 '3'를 제1 트랜젝션으로 그룹화된 라이트 데이터들(WDATA)이라고 판단하고 제1 라이트 데이터들(TRAN_WDATA1)로서 구분한다.
이때, 도 8b에서 설명한 제2 시점에서의 동작을 통해 휘발성 메모리(144)에 할당된 4개의 라이트 버퍼들(C31, C32, C33, C34) 중 세 번째 라이트 버퍼(C33)가 이미 제1 트랜젝션 전용으로 설정되어 제1 라이트 데이터들(TRAN_WDATA1)을 저장하기 위한 제1 라이트 버퍼로서 사용되고 있는 상태이다.
따라서, 컨트롤러(C30)는, 제3 시점에서 제1 라이트 데이터들(TRAN_WDATA1)로 구분될 수 있는 '3'을 별도의 추가동작없이 제1 라이트 버퍼에 즉시 저장한다. 이때, 컨트롤러(C30)는, 도 8b에서 설명한 제2 시점에서의 동작을 통해 총 6개의 라이트 데이터를 저장할 수 있는 세 번째 라이트 버퍼(C33)를 제1 트랜젝션 전용의 제1 라이트 버퍼로서 설정한 뒤, 3개의 데이터인 '0, 1, 2'만 저장하고 3개의 라이트 데이터를 저장할 수 있는 공간을 비워둔 상태였다.
때문에, 컨트롤러(C30)는, 제3 시점에서 제1 라이트 데이터들(TRAN_WDATA1)로 구분될 수 있는 '3'을 별도의 추가동작없이 제1 라이트 버퍼에 즉시 저장한다. 이렇게, 제3 시점에서 제1 라이트 데이터들(TRAN_WDATA1)로 구분될 수 있는 '3'이 제1 라이트 버퍼에 저장되면서, 제1 라이트 버퍼에 포함된 6개의 빈공간 중 4개의 공간에 제1 라이트 데이터들(TRAN_WDATA1)이 저장된 상태가 된다.
정리하면, 컨트롤러(C30)는, 전술한 제2 시점에서 제1 트랜젝션 전용의 제1 라이트 버퍼로 설정된 세 번째 라이트 버퍼(C33)로 제3 시점에서 호스트(C10)로부터 입력된 1개의 제1 라이트 데이터들(TRAN_WDATA1)인 '3'을 추가로 저장한 후, 나머지 2개의 라이트 데이터를 저장할 수 있는 공간은 비워둔(empty)다.
이렇게, 제1 트랜젝션으로 구분되는 제1 라이트 데이터들(TRAN_WDATA1)인 '0, 1, 2, 3'를 제1 라이트 버퍼에 저장한 시점에서, 컨트롤러(C30)는, 제1 트랜젝션이 어보트되었다는 정보를 호스트(C10)로부터 전달받을 수 있다. 예컨대, 제1 라이트 데이터들(TRAN_WDATA1)로 구분되는 '3'을 제1 라이트 버퍼에 저장한 이후, 호스트(C10)로부터 제1 트랜젝션의 어보트정보를 포함하는 별도의 커맨드가 전송될 수 있다. 그에 따라, 제1 트랜젝션으로 구분되는 제1 라이트 데이터들(TRAN_WDATA1)인 '0, 1, 2, 3'만 제1 라이트 버퍼에 저장된 상태에서 제1 트랜젝션이 어보트된 상태(Transaction Abort)라는 것을 확인할 수 있다.
그리고, 컨트롤러(C30)는, 제3 시점에서 호스트(C10)로부터 입력되는 7개의 라이트 데이터들(WDATA) 각각의 트랜젝션 아이디정보(TRID)가 2값을 갖는 4개의 라이트 데이터들(WDATA)인 '110, 111, 112, 113'이 제2 트랜젝션으로 그룹화된 라이트 데이터들(WDATA)이라고 판단하고 제2 라이트 데이터들(TRAN_WDATA2)로서 구분한다.
이때, 제2 라이트 데이터들(TRAN_WDATA2)로 구분될 수 있는 '110, 111, 112, 113' 중 시작데이터인 '110'에 대응하는 제2 시작커맨드(미도시)에는 제2 전체크기정보(TTSIZE2)가 포함되어 있다. 따라서, 컨트롤러(C30)는, '110'에 대응하는 제2 시작커맨드로부터 제2 전체크기정보(TTSIZE2)가 '4'라는 것을 확인할 수 있다.
이렇게, 컨트롤러(C30)는, 제2 전체크기정보(TTSIZE1)가 '4'라는 것을 확인한 후, 휘발성 메모리(144)에 할당되어 있는 4개의 라이트 버퍼들(C31, C32, C33, C34) 중 제1 트래젝션 전용으로 설정된 제1 라이트 버퍼를 제외한 나머지 버퍼들(C31, C32, C34) 중 제2 트랜젝션으로 그룹화된 총 4개의 제2 라이트 데이터들(TRAN_WDATA2)을 저장할 수 있는 빈공간을 갖는 라이트 버퍼가 존재하는지 확인한다.
확인결과, 4개의 라이트 버퍼들(C31, C32, C33, C34) 중 세 번째 라이트 버퍼(C33)는 전술한 제2 시점에서 제1 트랜젝션 전용의 제1 라이트 버퍼로서 설정된 상태라는 것을 알 수 있다.
따라서, 4개의 라이트 버퍼들(C31, C32, C33, C34) 중 세 번째 라이트 버퍼(C33)를 제외한 나머지 3개의 라이트 버퍼들(C31, C32, C34) 중 제2 트랜젝션으로 그룹화된 총 4개의 제2 라이트 데이터들(TRAN_WDATA2)을 저장할 수 있는 빈공간을 갖는 라이트 버퍼가 존재하는지 확인한다.
확인결과, 3개의 라이트 버퍼들(C31, C32, C34) 중 첫 번째 라이트 버퍼(C31)에는, 전술한 제1 시점 및 제2 시점 각각에서 2개씩 총 4개의 노말 라이트 데이터들(NMAL_WDATA)이 저장된 바 있기 때문에 2개의 빈공간을 갖고 있는 상태이다. 따라서, 첫 번째 라이트 버퍼(C31)는, 제2 트랜젝션으로 그룹화된 총 4개의 제2 라이트 데이터들(TRAN_WDATA2)을 저장하기에 수용하기에 적합하지 않다.
그리고, 3개의 라이트 버퍼들(C31, C32, C34) 중 두 번째 라이트 버퍼(C32)에는, 전술한 제1 시점에서 2개의 노말 라이트 데이터들(NMAL_WDATA)이 저장된 바 있기 때문에 4개의 빈공간을 갖고 있는 상태이다. 따라서, 두 번째 라이트 버퍼(C32)는, 제2 트랜젝션으로 그룹화된 총 4개의 제2 라이트 데이터들(TRAN_WDATA2)을 저장하기에 수용하기에 적합하다.
그리고, 3개의 라이트 버퍼들(C31, C32, C34) 중 네 번째 라이트 버퍼(C34)에는, 전술한 제1 시점 및 2시점에서 어떠한 라이트도 저장된 바 없기 때문에 6개의 빈공간을 갖고 있는 상태이다. 따라서, 네 번째 라이트 버퍼(C34)는, 제2 트랜젝션으로 그룹화된 총 4개의 제2 라이트 데이터들(TRAN_WDATA2)을 수용하기에 적합하다.
즉, 3개의 라이트 버퍼들(C31, C32, C34) 중 적어도 한 개 이상의 라이트 버퍼(C32, C34) 각각에서 제1 예정크기를 수용할 수 있는 빈공간이 존재하는 것을 알 수 있다.
이렇게, 한 개 이상의 라이트 버퍼(C32, C34) 각각이 제1 예정크기를 수용할 수 있는 빈공간을 갖고 있기 때문에, 컨트롤러(C30)는, 그 중 빈공간의 크기가 상대적으로 더 작은 라이트 버퍼에 대해 제2 전용옵션을 설정하여 제2 라이트 버퍼로서 관리한다. 즉, 컨트롤러(C30)는, 각각 제1 예정크기 이상의 빈공간을 갖는 두 번째 라이트 버퍼(C32)와 네 번째 라이트 버퍼(C34) 중 빈공간의 크기가 상대적으로 더 작은 두 번째 라이트 버퍼(C32)에 대해 제2 전용옵션을 설정하여 제2 라이트 버퍼로 관리한다.
이렇게, 컨트롤러(C30)는, 제2 라이트 데이터들(TRAN_WDATA2)로 구분될 수 있는 '110, 111, 112, 113' 중 시작데이터인 '110'이 입력되기 이전에 제2 전체크기정보(TTSIZE2)를 확인하여 휘발성 메모리(144)에 미리 할당되어 있는 4개의 라이트 버퍼들(C31, C32, C33, C34) 중 두 번째 라이트 버퍼(C32)를 제2 트랜젝션 전용의 제2 라이트 버퍼로 설정할 수 있다.
따라서, 컨트롤러(C30)는, 컨트롤러(C30)는, 제3 시점에서 호스트(C10)로부터 7개의 라이트 데이터들(WDATA) 중 제2 트랜젝션으로 구분되는 4개의 제2 라이트 데이터들(TRAN_WDATA2) 각각이 입력될 때마다 제2 트랜젝션 전용으로 설정된 제2 라이트 버퍼에 저장한다.
이렇게, 제3 시점에서 제2 라이트 데이터들(TRAN_WDATA2)로 구분될 수 있는 '110, 111, 112, 1133'가 제2 라이트 버퍼에 저장되면서, 제2 라이트 버퍼에 포함된 4개의 빈공간 전체에 제2 라이트 데이터들(TRAN_WDATA2)이 저장된 상태가 된다.
또한, 컨트롤러(C30)는, 제2 트랜젝션으로 구분되는 제2 라이트 데이터들(TRAN_WDATA2)인 '110, 111, 112, 113'가 제2 라이트 버퍼에 저장되어 제2 라이트 버퍼에 포함된 4개의 빈공간 전체에 제2 라이트 데이터들(TRAN_WDATA2)이 저장되는 시점에서 제2 트랜젝션의 커밋이 완료된 상태(Transaction Complete)라는 것을 확인할 수 있다.
정리하면, 컨트롤러(C30)는, 제3 시점에서 총 4개의 라이트 데이터를 저장할 수 있는 공간을 갖는 두 번째 라이트 버퍼(C32)를 제2 트랜젝션 전용의 제2 라이트 버퍼로서 선택한 뒤, 호스트(C10)로부터 입력된 4개의 제2 라이트 데이터들(TRAN_WDATA2)인 '110, 111, 112, 113'를 저장함으로써, 제2 트랜젝션의 커밋이 완료된 상태(Transaction Complete)라는 것을 확인할 수 있다.
그리고, 컨트롤러(C30)는, 제3 시점에서 호스트(C10)에서 입력되는 7개의 라이트 데이터들(WDATA) 각각의 트랜젝션 아이디정보(TRID)가 어떠한 값으로도 설정되어 있지 않은 라이트 데이터들(WDATA)인 'G, H'가 트랜젝션으로 그룹화되지 않은 라이트 데이터들(WDATA)이라고 판단하고 노말 라이트 데이터들(NMAL_WDATA)로서 구분한다.
이어서, 컨트롤러(C30)는, 제3 시점에서 휘발성 메모리(144)에 할당되어 있는 4개의 라이트 버퍼들(C31, C32, C33, C34) 중 트랜젝션 전용으로 설정된 라이트 버퍼가 존재하는지 여부를 확인한다. 확인결과, 제3 시점에서 세 번째 라이트 버퍼(C33)가 제1 트랜젝션 전용으로 설정되고 두 번째 라이트 버퍼(C32)가 제2 트랜젝션 전용으로 설정된 상태라는 것을 알 수 있다. 참고로, 제3 시점에서 두 번째 라이트 버퍼(C32)가 제2 트랜젝션 전용의 제2 라이트 버퍼로 설정되기 위해서는 적어도 한 개 이상의 제2 라이트 데이터(TRAN_WDATA2)가 입력되어야 하므로, 도 8d에 도시된 경우는, 적어도 한 개 이상의 제2 라이트 데이터(TRAN_WDATA2)가 노말 라이트 데이터들(NMAL_WDATA)보다 먼저 입력된 것을 가정하도록 하겟다.
따라서, 컨트롤러(C30)는, 제3 시점에서 호스트(C10)로부터 입력된 2개의 노말 라이트 데이터들(NMAL_WDATA)인 'G, H'를 4개의 라이트 버퍼들(C31, C32, C33, C34) 중 제1 트랜젝션 전용으로 설정된 세 번째 라이트 버퍼(C33) 및 제2 트랜젝션 전용으로 설정된 두 번째 라이트 버퍼(C32)를 제외한 나머지 라이트 버퍼들(C31, C34)에 적절히 분산저장할 수 있다. 예컨대, 도면에서는, 제3 시점에서 호스트(C10)로부터 입력된 2개의 노말 라이트 데이터들(NMAL_WDATA)인 'G, H'를 네 번째 라이트 버퍼(C34)에 저장한다.
정리하면, 컨트롤러(C30)는, 제3 시점에서 호스트(C10)로부터 입력된 2개의 노말 라이트 데이터들(NMAL_WDATA)인 'G, H'를 4개의 라이트 버퍼들(C31, C32, C33, C34) 중 네 번째 라이트 버퍼(C34)에 저장한다. 그 결과, 6개의 저장공간을 갖는 네 번째 라이트 버퍼(C31)에는, 제3 시점에서 2개의 노말 라이트 데이터들(NMAL_WDATA)이 저장되고, 4개의 라이트 데이터를 저장할 수 있는 공간이 빈 상태가 된다.
한편, 도 8e에 도시된 것과 같은 상태에서, 제1 트랜젝션은 어보트된 상태이고, 제2 트랜젝션은 커밋이 완료된 상태이므로, 제1 라이트 버퍼에 대해서는 플러시동작을 수행할 필요가 없고, 제2 라이트 버퍼는 플러시해야 하는 경우인 것을 알 수 있다.
이렇게, 도 8b에 도시된 것과 같은 상태에서 도 8e와 같은 상태로 넘어갈 때, 제1 트랜젝션은 어보트된 상태로 전환되고, 제2 트랜젝션은 커밋이 완료된 상태로 전환된다. 따라서, 도 8e와 같은 상태에서 제1 트랜젝션의 커밋이 완료되는 것은 불가능하다. 따라서, 제2 트랜젝션의 커밋이 완료되는 시점으로부터 설정된 제1 시간간격 이내에 제1 트랜젝션이 커밋되지 못한다는 것을 확정할 수 있다.
이렇게, 제2 트랜젝션의 커밋이 완료되는 것과 별개로 제1 트랜젝션이 어보트되는 경우, 컨트롤러(C30)는, 제1 트랜젝션의 어보트에 대응하여 제1 라이트 버퍼에 저장된 제1 라이트 데이터들(TRAN_WDATA1)을 디스카드시킨 뒤, 제1 라이트 버퍼에 대한 제1 트랜젝션 전용 설정을 리셋(reset)한다. 즉, 컨트롤러(C30)는, 제2 시점에서 휘발성 메모리(144)에 할당된 4개의 라이트 버퍼들(C31, C32, C33, C34) 중 세 번째 라이트 버퍼(C33)에 대해 제1 전용옵션을 설정하여 제1 트랜젝션 전용의 제1 라이트 버퍼로서 사용한 바 있다. 따라서, 제3 시점에서 제1 트랜젝션의 어보트에 대응하여 제1 라이트 버퍼에 저장된 제1 라이트 데이터들(TRAN_WDATA1)을 디스카드시킨 뒤, 제1 라이트 버퍼에 대한 제1 트랜젝션 전용 설정을 리셋하게 되면, 제1 라이트 버퍼로서 사용된 세 번째 라이트 버퍼(C33)를 제2 시점이전과 같이 다시 제1 트랜젝션 전용으로 사용하지 않게 된다. 즉, 제2 시점 및 제3 시점에서 제1 라이트 데이터들(TRAN_WDATA1)을 저장하기 위해 전용으로 사용된 세 번째 라이트 버퍼(C33)를 제3 시점이후에는 다시 노말 라이트 데이터들(NMAL_WDATA)을 저장하기 위해 사용할 수 있다.
그리고, 제1 트랜젝션이 어보트되는 것과는 별개로 제2 트랜젝션의 커밋이 완료되는 것에 대응하여 제2 라이트 버퍼에 대해서는 제2 플러시동작(FLUSH2)을 수행하고, 그에 따라 제2 라이트 버퍼에 저장된 제2 라이트 데이터들(TRAN_WDATA2)을 비휘발성 메모리 장치들(C40, C50, C60)에 저장하는 제2 라이트동작(WRITE2)을 수행한다.
이때, 도 8e에서는 제1 라이트 버퍼에 대한 제1 플러시동작(FLUSH1)의 수행되지 않는 것을 가정하므로, 도 9a 내지 도 9d에 도시된 '제1 동작화 선택동작' 및 '제2 동기화 선택동작'이 수행되지 않는다.
한편, 다시 도 8e를 참조하면, 컨트롤러(C30)는, 제2 라이트동작(WRTIE2)의 수행을 완료한 후, 제2 라이트 버퍼에 대한 제2 트랜젝션 전용 설정을 리셋(reset)한다. 즉, 컨트롤러(C30)는, 제3 시점에서 휘발성 메모리(144)에 할당된 4개의 라이트 버퍼들(C31, C32, C33, C34) 중 두 번째 라이트 버퍼(C32)에 대해 제2 전용옵션을 설정하여 제2 트랜젝션 전용의 제2 라이트 버퍼로서 사용한 바 있다. 따라서, 제3 시점에서 제2 라이트동작(WRTIE2)의 수행을 완료한 후에 제2 라이트 버퍼에 대한 제2 전용옵션을 리셋하게 되면, 제2 라이트 버퍼로서 사용된 두 번째 라이트 버퍼(C32)를 제3 시점이전과 같이 다시 제2 트랜젝션 전용으로 사용하지 않게 된다. 즉, 제3 시점에서 제2 라이트 데이터들(TRAN_WDATA2)을 저장하기 위해 전용으로 사용된 두 번째 라이트 버퍼(C32)를 제3 시점이후에는 다시 노말 라이트 데이터들(NMAL_WDATA)을 저장하기 위해 사용할 수 있다.
이상에서 살펴본 바와 같이 본 발명의 제2 실시예에 따른 메모리 시스템(C20)은, 호스트(C10)로부터 제1 트랜젝션으로 그룹화된 제1 라이트 데이터들(TRAN_WDATA1)이 입력될 때, 휘발성 메모리(144)에 할당된 다수의 라이트 버퍼(C31, C32, C33, C34) 중 제1 라이트 버퍼에 대해 제1 전용옵션을 설정하여 제1 트랜젝션을 위해 전용으로 사용할 수 있다. 또한, 호스트(C10)로부터 제2 트랜젝션으로 그룹화된 제2 라이트 데이터들(TRAN_WDATA2)이 입력될 때, 휘발성 메모리(144)에 할당된 다수의 라이트 버퍼(C31, C32, C33, C34) 중 제1 라이트 버퍼를 제외한 나머지 라이트 버퍼 중 제2 라이트 버퍼에 대해 제2 전용옵션을 설정하여 제2 트랜젝션을 위해 전용으로 사용할 수 있다. 이때, 제1 라이트 버퍼와 제2 라이트 버퍼는 서로 구분될 수 있다. 이를 통해, 본 발명의 제2 실시예에 따른 메모리 시스템(C20)은, 트랜젝션 라이트 데이터들을 효과적으로 관리하는 것이 가능하다.
또한, 본 발명의 제2 실시예에 따른 메모리 시스템(C20)은, 제1 트랜젝션이 커밋(commit)되는 것에 응답하여 제1 라이트 버퍼에서 수행되어야 하는 제1 플러시(flush)동작이 수행되는 시점과 제2 트랜젝션이 커밋되는 것에 응답하여 제2 라이트 버퍼에서 수행되어야 하는 제2 플러시동작이 수행되는 시점을 가능한 범위에서 최대한 동기화(Synchronize)시켜준다. 이를 통해, 제1 라이트 버퍼에 저장되어 있던 제1 라이트 데이터들(TRAN_WDATA1)을 비휘발성 메모리 장치들(C40, C50, C60)에 저장하는 제1 라이트동작(WRTIE1)과 제2 라이트 버퍼에 저장되어 있던 제2 라이트 데이터들(TRAN_WDATA2)을 비휘발성 메모리 장치들(C40, C50, C60)에 저장하는 제2 라이트동작(WRTIE2)을 동기화시켜 시작할 수 있으며, 제1 라이트 데이터들(TRAN_WDATA1)과 제2 라이트 데이터들(TRAN_WDATA2)을 비휘발성 메모리 장치들(C40, C50, C60)의 특정 저장공간에 모아서 저장시킬 가능성을 높일 수 있다. 즉, 제1 트랜젝션 및 제2 트랜젝션의 원자성(atomicity)을 유지하기 위한 알고리즘을 보다 단순화시킬 수 있다.
또한, 본 발명의 제2 실시예에 따른 메모리 시스템(C20)은, 제1 및 제2 라이트 버퍼(C32, C33)가 동기화된 상태로 플러시되는 것에 따라 동기화된 상태로 수행이 시작된 제1 및 제2 라이트동작(WRTIE1, WRITE2)의 수행이 각각 완료되는 것을 호스트(C10)에 알려주기 위한 제1 및 제2 확인신호(ACK1, ACK2)가 호스트로 전송되는 시점을 가능한 범위에서 최대한 동기화시켜준다. 즉, 메모리 시스템(C20)은, 두 개의 확인신호를 (ACK1, ACK2)를 한 번의 타이밍에 호스트(C10)로 전달할 수 있다. 이를 통해, 메모리 시스템(C20)에서 호스트(C10)로 확인신호를 전송하는 횟수를 최소화 시킬 수 있다.
도 10a 내지 도 10c는 본 발명의 제2 실시예에 따른 메모리 시스템의 동작을 설명하기 위해 도시한 순서도이다.
도 10을 참조하면, 호스트(C10)에서 메모리 시스템(C20)으로 라이트 데이터들(WDATA)이 전송되는 것(L5)에 응답하여 본 발명의 제2 실시예에 따른 메모리 시스템(C20)의 동작이 시작되는 것을 알 수 있다.
L5동작에 의해 전송된 라이트 데이터(WDATA)가 트랜젝션의 시작데이터인지를 확인한다(L10).
L10동작에서 트랜젝션의 시작데이터인 경우(YES), 메모리 시스템(C20)은, 내부의 휘발성 메모리(144)에 미리 할당된 다수의 라이트 버퍼들(C31, C32, C33, C34) 중 트랜젝션 데이터를 저장하기에 적합한 적어도 하나의 라이트 버퍼를 찾아서(Search Suitable WRITE Buffer) 트랜젝션 전용으로 설정한다(Set Private WRITE Buffer, L20). 이때, L20동작에서 트랜젝션 데이터를 저장하기에 적합한 적어도 하나의 라이트 버퍼를 찾아낸다는 것은, L10동작에서 트랜젝션의 시작데이터와 함께 전달되는 전체크기정보(TTSIZE)를 참조하여 알 수 있는 트랜젝션의 전체크기 이상의 빈공간(empty area)을 포함하는 적어도 하나의 라이트 버퍼를 찾아낸다는 것을 의미한다.
또한, L20동작에서는 트랜젝션의 종류에 대응하는 개수만큼 새로운 라이트 버퍼를 트랜젝션 전용으로 설정(Set Private WRITE Buffer)한다. 즉, 제1 트랜젝션에 대응하여 제1 트랜젝션 전용 라이트 버퍼를 설정하고, 제2 트랜젝션에 대응하여 제2 트랜젝션 전용 라이트 버퍼를 설정한다.
L10동작에서 트랜젝션의 시작데이터가 아닌 경우(NO)는, L5동작에 의해 전송된 라이트 데이터(WDATA)가 노말 라이트 데이터(NMAL_WDATA)이거나 또는 트랜젝션의 시작데이터가 아닌 나머지 데이터라고 볼 수 있다.
만약, L5동작에 의해 전송된 라이트 데이터(WDATA)가 노말 라이트 데이터(NMAL_WDATA)인 경우라면, 트랜젝션 전용으로 설정되지 않은 라이트 버퍼(Public WRITE buffer)에 저장한다(L30).
만약, L5동작에 의해 전송된 라이트 데이터(WDATA)가 트랜젝션의 시작데이터가 아닌 나머지 데이터인 경우 L20동작에서 트랜젝션 전용으로 설정된 라이트 버퍼(Private WRITE Buffer)에 저장한다(L30). 이때, L30동작에서는, L5동작에 의해 전송된 라이트 데이터(WDATA)가 어떤 트랜젝션의 종류인지를 확인하고, 확인된 트랜젝션에 대응하는 트랜젝션 전용 라이트 버퍼에 저장한다. 즉, L30동작에서는, L5동작에 의해 전송된 라이트 데이터(WDATA)가 제1 트랜젝션의 나머지 데이터인 경우 제1 트랜젝션 전용 라이트 버퍼에 저장하고, L5동작에 의해 전송된 라이트 데이터(WDATA)가 제2 트랜젝션의 나머지 데이터인 경우 제2 트랜젝션 전용 라이트 버퍼에 저장한다.
L30동작 이후, 트랜젝션 전용 라이트 버퍼 중 커밋이 완료된 버퍼가 존재하는지 여부를 확인한다(L40).
L40동작에서 커밋이 완료된 버퍼가 존재하지 않는 경우(NO), L5동작을 통해 다시 새로운 라이트 데이터(WDATA)가 입력될 때까지 별도의 동작을 수행하지 않는다.
L40동작에서 커밋이 완료된 버퍼가 존재하는 경우(YES), 또 다른 트랜젝션 전용 라이트 버퍼가 커밋이 완료되었는지 여부를 확인한다(L50). 즉, L40동작 및 L50동작을 통해 적어도 두 개 이상의 트랜젝션 전용 라이트 버퍼가 커밋되었는지 여부를 확인할 수 있다.
L50동작의 결과 하나의 트랜젝션 전용 라이트 버퍼만 커밋된 경우(NO), 커밋된 하나의 트랜젝션 전용 라이트 버퍼만 단독으로 플러시시킨다(L80). 이때, L80동작에서 플러시되는 트랜젝션 전용 라이트 버퍼는, 다른 트랜젝션 전용 라이트 버퍼와 동시에 플러시되지 않는 것(Asynchronize)을 알 수 있다.
L50동작의 결과 적어도 두 개 이상의 트랜젝션 전용 라이트 버퍼가 커밋된 경우(YES), 적어도 두 개 이상의 트랜젝션 전용 라이트 버퍼의 커밋시점이 설정된 제1 시간간격(SET TIME1) 이내인지 여부를 확인한다(L60). 즉, L40동작에서 커밋이 확인된 트랜젝션 전용 라이트 버퍼(Private WRITE Buffer<L40>)의 커밋시점과 L50동작에서 커밋이 확인된 트랜젝션 전용 라이트 버퍼(Private WRITE Buffer<L50>)의 커밋시점이 설정된 제1 시간간격(SET TIME1) 이내인지 여부를 확인한다(L60).
L60동작에서 적어도 두 개 이상의 트랜젝션 전용 라이트 버퍼의 커밋시점이 설정된 제1 시간간격(SET TIME1)을 초과하는 경우(NO), 커밋이 완료된 적어도 두 개 이상의 트랜젝션 전용 라이트 버퍼 각각에 대한 플러시동작을 서로 동기화시키지 않는다(Asynchronize, L80). 즉, L40동작에서 커밋이 확인된 트랜젝션 전용 라이트 버퍼(Private WRITE Buffer<L40>)에 대한 플러시동작과 L50동작에서 커밋이 확인된 트랜젝션 전용 라이트 버퍼(Private WRITE Buffer<L50>)에 대한 플러시 동작을 서로 동기화시키지 않는다(L80).
L60동작에서 적어도 두 개 이상의 트랜젝션 전용 라이트 버퍼의 커밋시점이 설정된 제1 시간간격(SET TIME1) 이내인 경우(YES), 커밋이 완료된 적어도 두 개 이상의 트랜젝션 전용 라이트 버퍼 각각에 대한 플러시동작을 서로 동기화시킨다(Synchronize, L70). 즉, L40동작에서 커밋이 확인된 트랜젝션 전용 라이트 버퍼(Private WRITE Buffer<L40>)에 대한 플러시동작과 L50동작에서 커밋이 확인된 트랜젝션 전용 라이트 버퍼(Private WRITE Buffer<L50>)에 대한 플러시 동작을 서로 동기화시킨다(L70).
L70동작에서 커밋이 완료된 적어도 두 개 이상의 트랜젝션 전용 라이트 버퍼 각각에 대한 플러시동작을 서로 동기화시킨 후에는 도 10b와 도 10c를 참조하여 두 가지 동작 중 어느 하나의 동작을 선택하여 수행할 수 있다.
먼저, 도 10b를 참조하면, L70동작에서 커밋이 완료된 적어도 두 개 이상의 트랜젝션 전용 라이트 버퍼 각각에 대한 플러시동작을 서로 동기화시킨 것에 대응하여 적어도 두 개 이상의 트랜젝션 전용 라이트 버퍼 각각에 저장된 트랜젝션 데이터를 비휘발성 메모리 장치들(C40, C50, C60)에 저장하는 적어도 두 개 이상의 라이트 동작(Write to Non-Volatile Memory, Private WRITE Buffer <L40&L50>)을 동기화시킨다(L90).
L70동작 및 L90동작을 통해 커밋이 완료된 적어도 두 개 이상의 트랜젝션 전용 라이트 버퍼 각각에 대한 플러시동작이 동기화되고, 그에 따라 적어도 두 개 이상의 라이트 동작이 동기화되었으므로, 도 10b에서는 추가적으로 별도의 조건을 확인하지 않고, 적어도 두 개 이상의 라이트 동작이 완료되는 것을 호스트에 알려주기 위한 적어도 두 개 이상의 확인신호(ACK<L40&L50> of Write Complete corresponding to (Transaction WRITE)Buffer<L40&L50>)가 호스트로 전송되는 시점을 동기화시킨다(L100).
그리고, 도 10c를 참조하면, L70동작에서 커밋이 완료된 적어도 두 개 이상의 트랜젝션 전용 라이트 버퍼 각각에 대한 플러시동작을 서로 동기화시킨 것에 대응하여 적어도 두 개 이상의 트랜젝션 전용 라이트 버퍼 각각에 저장된 트랜젝션 데이터를 비휘발성 메모리 장치들(C40, C50, C60)에 저장하는 적어도 두 개 이상의 라이트 동작(Write to Non-Volatile Memory, Private WRITE Buffer <L40&L50>)을 동기화시킨다(L90).
L70동작 및 L90동작을 통해 커밋이 완료된 적어도 두 개 이상의 트랜젝션 전용 라이트 버퍼 각각에 대한 플러시동작이 동기화되고, 그에 따라 적어도 두 개 이상의 라이트 동작이 동기화되었지만, 도 10c에서는, 적어도 두 개 이상의 라이트 동작이 각각 완료되는 시점이 설정된 제2 시간간격(SET TIME2) 이내인지 여부를 확인한다(L110).
L110동작에서 적어도 두 개 이상의 라이트 동작이 각각 완료되는 시점이 설정된 제2 시간간격(SET TIME2) 이내인 경우(YES), 적어도 두 개 이상의 라이트 동작이 완료되는 것을 호스트에 알려주기 위한 적어도 두 개 이상의 확인신호(ACK<L40&L50> of Write Complete corresponding to (Transaction WRITE)Buffer<L40&L50>)가 호스트로 전송되는 시점을 동기화시킨다(L120).
L110동작에서 적어도 두 개 이상의 라이트 동작이 각각 완료되는 시점이 설정된 제2 시간간격(SET TIME2)을 초과하는 경우(NO), 적어도 두 개 이상의 라이트 동작이 완료되는 것을 호스트에 알려주기 위한 적어도 두 개 이상의 확인신호(ACK<L40&L50> of Write Complete corresponding to (Transaction WRITE)Buffer<L40&L50>)가 호스트로 전송되는 시점을 동기화시키지 않는다(L130).
이상에서 설명한 본 발명은 전술한 실시예 및 첨부된 도면에 의해 한정되는 것이 아니고, 본 발명의 기술적 사상을 벗어나지 않는 범위 내에서 여러 가지 치환, 변형 및 변경이 가능하다는 것이 본 발명이 속한 기술분야에서 통상의 지식을 가진자에게 있어 명백할 것이다.

Claims (20)

  1. 비휘발성 메모리 장치;
    호스트에서 입력된 라이트 데이터들을 임시로 저장하기 위한 휘발성 메모리; 및
    상기 호스트로부터, 트랜젝션(transaction)으로 그룹화되지 않은 노말 라이트 데이터들이 입력되는 것에 응답하여 설정된 크기로 고정된 노말 라이트 버퍼를 상기 휘발성 메모리에 할당하고, 제1 트랜젝션으로 그룹화된 제1 라이트 데이터들 중 적어도 하나 이상의 데이터 및 상기 제1 트랜젝션의 커밋(commit)이 완료될 때까지 필요한 제1 전체크기정보가 입력되는 시점에서 상기 제1 전체크기정보에 대응하는 크기를 갖는 상기 제1 라이트 버퍼를 상기 휘발성 메모리에 할당하며, 제2 트랜젝션으로 그룹화된 제2 라이트 데이터들 중 적어도 하나 이상의 데이터 및 상기 제2 트랜젝션의 커밋이 완료될 때까지 필요한 제2 전체크기정보가 입력되는 시점에서 상기 제2 전체크기정보에 대응하는 크기를 갖는 상기 제2 라이트 버퍼를 상기 휘발성 메모리에 할당하는 컨트롤러를 포함하는 메모리 시스템에 있어서,
    상기 컨트롤러는,
    상기 제1 및 제2 전체크기정보 각각에 응답하여 상기 제1 및 제2 라이트 버퍼의 크기를 각각 가변하는 형태로 관리하고,
    상기 제1라이트 데이터들만 상기 제1라이트 버퍼에 저장하며, 상기 제2라이트 데이터들만 상기 제2 라이트 버퍼에 저장하고, 상기 노말 라이트 데이터들만 상기 노말 라이트 버퍼에 저장하는 메모리 시스템.
  2. ◈청구항 2은(는) 설정등록료 납부시 포기되었습니다.◈
    제1항에 있어서,
    상기 컨트롤러는,
    상기 제1 전체크기정보에 응답하여 상기 제1 라이트 데이터들이 커밋될 때까지 필요한 제1 예정크기를 확인한 뒤, 확인된 제1 예정크기만큼을 상기 제1 라이트 버퍼로서 상기 휘발성 메모리에서 할당하며,
    상기 제2 전체크기정보에 응답하여 상기 제2 라이트 데이터들이 커밋될 때까지 필요한 제2 예정크기를 확인한 뒤, 확인된 제2 예정크기만큼을 상기 제2 라이트 버퍼로서 상기 휘발성 메모리에서 할당하는 메모리 시스템.
  3. ◈청구항 3은(는) 설정등록료 납부시 포기되었습니다.◈
    제2항에 있어서,
    상기 컨트롤러는,
    상기 제1 라이트 버퍼에 저장된 상기 제1 라이트 데이터들에 대해 상기 제1 트랜젝션의 커밋/어보트(abort) 여부를 확인하며,
    확인결과 커밋된 경우, 상기 제1 라이트 버퍼에 대한 제1 플러시(flush)동작을 수행하여 상기 제1 라이트 버퍼에 저장된 상기 제1 라이트 데이터들을 상기 비휘발성 메모리 장치에 저장하는 제1 라이트동작을 수행한 뒤, 상기 제1 라이트 버퍼를 상기 휘발성 메모리에서 릴리즈(release)하고,
    확인결과 어보트된 경우, 상기 제1 라이트 버퍼를 상기 휘발성 메모리에서 릴리즈하는 메모리 시스템.
  4. ◈청구항 4은(는) 설정등록료 납부시 포기되었습니다.◈
    제3항에 있어서,
    상기 컨트롤러는,
    상기 제2 라이트 버퍼에 저장된 상기 제2 라이트 데이터들에 대해 상기 제2 트랜젝션의 커밋/어보트(abort) 여부를 확인하며,
    확인결과 커밋된 경우, 상기 제2 라이트 버퍼에 대한 제2 플러시동작을 수행하여 상기 제2 라이트 버퍼에 저장된 상기 제2 라이트 데이터들을 상기 비휘발성 메모리 장치에 저장하는 제2 라이트동작을 수행한 뒤, 상기 제2 라이트 버퍼를 상기 휘발성 메모리에서 릴리즈하고,
    확인결과 어보트된 경우, 상기 제2 라이트 버퍼를 상기 휘발성 메모리에서 릴리즈하는 메모리 시스템.
  5. ◈청구항 5은(는) 설정등록료 납부시 포기되었습니다.◈
    제4항에 있어서,
    상기 컨트롤러는,
    상기 제1 트랜젝션의 커밋이 확인된 시점과 상기 제2 트랜젝션의 커밋이 확인된 시점이 설정된 제1 시간간격 이내인 경우, 상기 제1 플러시동작의 수행시작시점 및 제2 플러시동작의 수행시작시점을 서로 동기화(Synchronize)시키는 메모리 시스템.
  6. ◈청구항 6은(는) 설정등록료 납부시 포기되었습니다.◈
    제5항에 있어서,
    상기 컨트롤러는,
    상기 제1 플러시동작의 수행시작시점 및 제2 플러시동작의 수행시작시점이 동기화된 경우,
    상기 제1 라이트동작의 수행완료에 대응하는 제1 확인(ack)신호를 상기 호스트로 전달하는 시점 및 상기 제2 라이트동작의 수행완료에 대응하는 제2 확인신호를 상기 호스트로 전달하는 시점을 서로 동기화시키는 메모리 시스템.
  7. ◈청구항 7은(는) 설정등록료 납부시 포기되었습니다.◈
    제5항에 있어서,
    상기 컨트롤러는,
    상기 제1 플러시동작의 수행시작시점 및 제2 플러시동작의 수행시작시점이 동기화된 상태에서, 상기 제1 라이트동작의 수행완료에 대응하는 제1 확인(ack)신호가 생성되는 시점 및 상기 제2 라이트동작의 수행완료에 대응하는 제2 확인신호가 생성되는 시점이 설정된 제2 시간간격 이내인 경우,
    상기 제1 확인신호를 상기 호스트로 전달하는 시점 및 상기 제2 확인신호를 상기 호스트로 전달하는 시점을 서로 동기화시키는 메모리 시스템.
  8. ◈청구항 8은(는) 설정등록료 납부시 포기되었습니다.◈
    제4항에 있어서,
    상기 컨트롤러는, 상기 라이트 데이터들 각각에 대응하는 다수의 라이트 커맨드들을 상기 호스트로부터 입력받으며,
    상기 라이트 커맨드들 각각에는, 그에 대응하는 상기 라이트 데이터들 각각의 트랜젝션정보가 포함되고,
    상기 라이트 데이터들 각각의 트랜젝션정보에는, 트랜젝션 아이디(IDentify)정보와, 커밋정보, 및 어보트정보가 포함되며,
    상기 제1 라이트 데이터들 중 제1 트랜젝션 시작데이터에 대응하는 상기 라이트 커맨드에는, 상기 제1 전체크기정보가 더 포함되고,
    상기 제2 라이트 데이터들 중 제2 트랜젝션 시작데이터에 대응하는 상기 라이트 커맨드에는, 상기 제2 전체크기정보가 더 포함되는 메모리 시스템.
  9. ◈청구항 9은(는) 설정등록료 납부시 포기되었습니다.◈
    제8항에 있어서,
    상기 컨트롤러는,
    상기 라이트 데이터들 각각의 트랜젝션정보 중 트랜젝션 아이디(IDentity)정보를 확인하여,
    트랜젝션 아이디정보가 제1 값으로 설정되어 상기 제1 트랜젝션으로 그룹화된 상기 제1 라이트 데이터들이 확인되는 경우, 상기 제1 라이트 버퍼를 상기 휘발성 메모리에 할당하여 상기 제1 라이트 데이터들을 저장하고,
    트랜젝션 아이디정보가 제2 값으로 설정되어 상기 제2 트랜젝션으로 그룹화된 상기 제2 라이트 데이터들이 확인되는 경우, 상기 제2 라이트 버퍼를 상기 휘발성 메모리에 할당하여 상기 제2 라이트 데이터들을 저장하며,
    트랜젝션 아이디정보가 설정되지 않아 트랜젝션으로 그룹화되지 않은 상기 노말 라이트 데이터들이 확인되는 경우, 상기 노말 라이트 버퍼를 상기 휘발성 메모리에 할당하여 상기 노말 라이트 데이터를 저장하는 메모리 시스템.
  10. 비휘발성 메모리 장치;
    호스트에서 입력된 라이트 데이터들을 임시로 저장하기 위한 휘발성 메모리; 및
    각각 미리 정의된 크기를 갖는 다수의 라이트 버퍼들을 상기 휘발성 메모리에 할당한 뒤, 상기 라이트 버퍼들 중 트랜젝션을 위한 전용옵션이 설정(set)되지 않은 버퍼를 노말 라이트 버퍼로 설정하고, 상기 호스트로부터 입력되는 트랜젝션으로 그룹화되지 않은 노말 라이트 데이터들만 상기 노말 라이트 버퍼에 저장하는 컨트롤러를 포함하는 메모리 시스템에 있어서,
    상기 컨트롤러는,
    제1 트랜젝션(transaction)으로 그룹화된 제1 라이트 데이터들 중 적어도 하나 이상의 데이터 및 커밋(commit)이 완료될 때까지 필요한 제1 전체크기정보가 상기 호스트로부터 입력되는 시점에서, 상기 제1 전체크기정보에 대응하는 크기에 따라 상기 라이트 버퍼들 중 적어도 하나 이상의 버퍼에 대해 상기 제1트랜젝션을 위한 제1 전용옵션을 설정하여 제1 라이트 버퍼로서 설정한 뒤, 상기 제1라이트 데이터들만 상기 제1 라이트 버퍼에 저장하는 메모리 시스템.
  11. ◈청구항 11은(는) 설정등록료 납부시 포기되었습니다.◈
    제10항에 있어서,
    상기 컨트롤러는,
    상기 제1 전체크기정보가 상기 호스트로부터 입력되는 시점에서 상기 라이트 버퍼들 각각의 빈(empty)공간을 확인한 뒤, 확인된 빈공간 및 상기 제1 전체크기정보에 응답하여 상기 라이트 버퍼들 중 조합 가능한 최소개수의 라이트 버퍼에 대해 상기 제1 전용옵션을 설정하여 상기 제1 라이트 버퍼로서 사용하는 메모리 시스템.
  12. ◈청구항 12은(는) 설정등록료 납부시 포기되었습니다.◈
    제11항에 있어서,
    상기 컨트롤러는,
    제2 트랜젝션으로 그룹화된 제2 라이트 데이터들 중 적어도 하나 이상의 데이터 및 커밋이 완료될 때까지 필요한 제2 전체크기정보가 상기 호스트로부터 입력되는 시점에서, 상기 제2 전체크기정보에 대응하는 크기에 따라 상기 라이트 버퍼들 중 적어도 하나 이상의 버퍼에 대해 상기 제2트랜젝션을 위한 제2 전용옵션을 설정하여 제2 라이트 버퍼로서 설정한 뒤, 상기 제2라이트 데이터들만 상기 제2 라이트 버퍼에 저장하는 메모리 시스템.
  13. ◈청구항 13은(는) 설정등록료 납부시 포기되었습니다.◈
    제12항에 있어서,
    상기 컨트롤러는,
    상기 제2 전체크기정보가 상기 호스트로부터 입력되는 시점에서 상기 나머지 버퍼들 각각의 빈공간을 확인한 뒤, 확인된 빈공간 및 상기 제2 전체크기정보에 응답하여 상기 나머지 버퍼들 중 조합 가능한 최소개수의 라이트 버퍼에 대해 상기 제2 전용옵션을 설정하여 상기 제2 라이트 버퍼로서 사용하는 메모리 시스템.
  14. ◈청구항 14은(는) 설정등록료 납부시 포기되었습니다.◈
    제13항에 있어서,
    상기 컨트롤러는,
    상기 제1 라이트 버퍼에 저장된 상기 제1 라이트 데이터들에 대해 상기 제1 트랜젝션의 커밋/어보트(abort) 여부를 확인하며,
    확인결과 커밋된 경우, 상기 제1 라이트 버퍼에 대한 제1 플러시(flush)동작을 수행하여 상기 제1 라이트 버퍼에 저장된 상기 제1 라이트 데이터들을 상기 비휘발성 메모리 장치에 저장하는 제1 라이트동작을 수행한 뒤, 상기 제1 라이트 버퍼에 대한 상기 제1 전용옵션을 리셋(reset)하고,
    확인결과 어보트된 경우, 상기 제1 라이트 버퍼에 저장된 상기 제1 라이트 데이터들을 디스카드(discard)시킨 뒤, 상기 제1 라이트 버퍼에 대한 상기 제1 전용옵션을 리셋하는 메모리 시스템.
  15. ◈청구항 15은(는) 설정등록료 납부시 포기되었습니다.◈
    제14항에 있어서,
    상기 컨트롤러는,
    상기 제2 라이트 버퍼에 저장된 상기 제2 라이트 데이터들에 대해 상기 제2 트랜젝션의 커밋/어보트(abort) 여부를 확인하며,
    확인결과 커밋된 경우, 상기 제2 라이트 버퍼에 대한 제2 플러시동작을 수행하여 상기 제2 라이트 버퍼에 저장된 상기 제2 라이트 데이터들을 상기 비휘발성 메모리 장치에 저장하는 제2 라이트동작을 수행한 뒤, 상기 제2 라이트 버퍼에 대한 상기 제2 전용옵션을 리셋하고,
    확인결과 어보트된 경우, 상기 제2 라이트 버퍼에 저장된 상기 제2 라이트 데이터들을 디스카드시킨 뒤, 상기 제2 라이트 버퍼에 대한 상기 제2 전용옵션을 리셋하는 메모리 시스템.
  16. ◈청구항 16은(는) 설정등록료 납부시 포기되었습니다.◈
    제15항에 있어서,
    상기 컨트롤러는,
    상기 제1 트랜젝션의 커밋이 확인된 시점과 상기 제2 트랜젝션의 커밋이 확인된 시점이 설정된 제1 시간간격 이내인 경우, 상기 제1 플러시동작의 수행시작시점 및 제2 플러시동작의 수행시작시점을 서로 동기화(Synchronize)시키는 메모리 시스템.
  17. ◈청구항 17은(는) 설정등록료 납부시 포기되었습니다.◈
    제16항에 있어서,
    상기 컨트롤러는,
    상기 제1 플러시동작의 수행시작시점 및 제2 플러시동작의 수행시작시점이 동기화된 경우,
    상기 제1 라이트동작의 수행완료에 대응하는 제1 확인(ack)신호를 상기 호스트로 전달하는 시점 및 상기 제2 라이트동작의 수행완료에 대응하는 제2 확인신호를 상기 호스트로 전달되는 시점을 서로 동기화시키는 메모리 시스템.
  18. ◈청구항 18은(는) 설정등록료 납부시 포기되었습니다.◈
    제16항에 있어서,
    상기 컨트롤러는,
    상기 제1 플러시동작의 수행시작시점 및 제2 플러시동작의 수행시작시점이 동기화된 상태에서, 상기 제1 라이트동작의 수행완료에 대응하는 제1 확인(ack)신호가 생성되는 시점 및 상기 제2 라이트동작의 수행완료에 대응하는 제2 확인신호가 생성되는 시점이 설정된 제2 시간간격 이내인 경우,
    상기 제1 확인신호를 상기 호스트로 전달하는 시점 및 상기 제2 확인신호를 상기 호스트로 전달하는 시점을 서로 동기화시키는 메모리 시스템.
  19. ◈청구항 19은(는) 설정등록료 납부시 포기되었습니다.◈
    제14항에 있어서,
    상기 컨트롤러는, 상기 라이트 데이터들 각각에 대응하는 다수의 라이트 커맨드들을 상기 호스트로부터 입력받으며,
    상기 라이트 커맨드들 각각에는, 그에 대응하는 상기 라이트 데이터들 각각의 트랜젝션정보가 포함되고,
    상기 라이트 데이터들 각각의 트랜젝션정보에는, 트랜젝션 아이디(IDentify)정보와, 커밋정보, 및 어보트정보가 포함되며,
    상기 제1 라이트 데이터들 중 제1 트랜젝션 시작데이터에 대응하는 상기 라이트 커맨드에는, 상기 제1 전체크기정보가 더 포함되고,
    상기 제2 라이트 데이터들 중 제2 트랜젝션 시작데이터에 대응하는 상기 라이트 커맨드에는, 상기 제2 전체크기정보가 더 포함되는 메모리 시스템.
  20. ◈청구항 20은(는) 설정등록료 납부시 포기되었습니다.◈
    제19항에 있어서,
    상기 컨트롤러는,
    상기 라이트 데이터들 각각의 트랜젝션정보 중 트랜젝션 아이디(IDentity)정보를 확인하여,
    트랜젝션 아이디정보가 제1 값으로 설정되어 상기 제1 트랜젝션으로 그룹화된 상기 제1 라이트 데이터들이 확인되는 경우, 상기 라이트 버퍼들 중 상기 제1 라이트 버퍼를 설정하여 상기 제1 라이트 데이터들을 저장하고,
    트랜젝션 아이디정보가 제2 값으로 설정되어 상기 제2 트랜젝션으로 그룹화된 상기 제2 라이트 데이터들이 확인되는 경우, 상기 나머지 버퍼들 중 상기 제2 라이트 버퍼를 설정하여 상기 제2 라이트 데이터들을 저장하며,
    트랜젝션 아이디정보가 설정되지 않아 트랜젝션으로 그룹화되지 않은 노말 라이트 데이터들이 확인되는 경우, 상기 라이트 버퍼들 중 상기 제1 및 제2 라이트 버퍼를 제외한 나머지 라이트 버퍼들에 저장하는 메모리 시스템.
KR1020180100118A 2018-08-27 2018-08-27 메모리 시스템 KR102541897B1 (ko)

Priority Applications (4)

Application Number Priority Date Filing Date Title
KR1020180100118A KR102541897B1 (ko) 2018-08-27 2018-08-27 메모리 시스템
US16/377,741 US11182285B2 (en) 2018-08-27 2019-04-08 Memory system which stores a plurality of write data grouped into a transaction
CN201910604144.0A CN110865770B (zh) 2018-08-27 2019-07-05 存储器系统
US17/516,280 US11782825B2 (en) 2018-08-27 2021-11-01 Memory system which stores a plurality of write data grouped into a transaction

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020180100118A KR102541897B1 (ko) 2018-08-27 2018-08-27 메모리 시스템

Publications (2)

Publication Number Publication Date
KR20200023757A KR20200023757A (ko) 2020-03-06
KR102541897B1 true KR102541897B1 (ko) 2023-06-12

Family

ID=69583248

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020180100118A KR102541897B1 (ko) 2018-08-27 2018-08-27 메모리 시스템

Country Status (3)

Country Link
US (2) US11182285B2 (ko)
KR (1) KR102541897B1 (ko)
CN (1) CN110865770B (ko)

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112748865A (zh) * 2019-10-31 2021-05-04 伊姆西Ip控股有限责任公司 用于存储管理的方法、电子设备和计算机程序产品
US11243804B2 (en) * 2019-11-19 2022-02-08 Micron Technology, Inc. Time to live for memory access by processors
US11199995B2 (en) 2019-11-19 2021-12-14 Micron Technology, Inc. Time to live for load commands
US20220283735A1 (en) * 2021-03-08 2022-09-08 Micron Technology, Inc. Enabling memory access transactions for persistent memory
KR20220127067A (ko) 2021-03-10 2022-09-19 에스케이하이닉스 주식회사 저장 장치 및 그 동작 방법
US20220405243A1 (en) * 2021-06-17 2022-12-22 Vmware, Inc. Batching of metadata updates in journaled filesystems using logical metadata update transactions

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2011516971A (ja) * 2008-05-02 2011-05-26 ザイリンクス インコーポレイテッド 同期トランザクションのためのコンフィギュラブルトランザクションメモリ
JP2015046164A (ja) * 2013-08-28 2015-03-12 バイオセンス・ウエブスター・(イスラエル)・リミテッドBiosense Webster (Israel), Ltd. リアルタイムデータフローの永続記憶装置用のアトミックトランザクションによるダブルバッファリング

Family Cites Families (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4428064A (en) * 1981-03-06 1984-01-24 International Business Machines Corporation Controlling buffered peripheral subsystems
KR100449807B1 (ko) * 2002-12-20 2004-09-22 한국전자통신연구원 호스트 버스 인터페이스를 갖는 데이터 전송 프로토콜제어 시스템
KR100862661B1 (ko) * 2006-11-16 2008-10-10 삼성전자주식회사 지연된 로깅 방법 및 그 장치
US7945741B2 (en) * 2007-07-09 2011-05-17 International Business Machines Corporation Reservation required transactions
US8959280B2 (en) * 2008-06-18 2015-02-17 Super Talent Technology, Corp. Super-endurance solid-state drive with endurance translation layer (ETL) and diversion of temp files for reduced flash wear
US8762642B2 (en) * 2009-01-30 2014-06-24 Twinstrata Inc System and method for secure and reliable multi-cloud data replication
KR20110066526A (ko) * 2009-12-11 2011-06-17 한국전자통신연구원 다중포트 메모리 콘트롤러 및 다중포트 캐시
US9146774B2 (en) * 2013-12-12 2015-09-29 International Business Machines Corporation Coalescing memory transactions
US20150317248A1 (en) * 2014-05-01 2015-11-05 International Business Machines Corporation Sizing a write cache buffer based on emergency data save parameters
US9733847B2 (en) 2014-06-02 2017-08-15 Micron Technology, Inc. Systems and methods for transmitting packets in a scalable memory system protocol
EP2988222B1 (en) * 2014-08-21 2019-12-11 Dot Hill Systems Corporation Method and apparatus for efficiently destaging sequential i/o streams
KR102238652B1 (ko) 2014-11-12 2021-04-09 삼성전자주식회사 데이터 저장 장치, 이의 작동 방법, 및 이를 포함하는 데이터 처리 시스템의 작동 방법
KR102245822B1 (ko) * 2014-11-26 2021-04-30 삼성전자주식회사 불휘발성 메모리 장치를 포함하는 저장 장치 및 그것의 프로그램 방법
US10127165B2 (en) 2015-07-16 2018-11-13 Samsung Electronics Co., Ltd. Memory system architecture including semi-network topology with shared output channels
KR102371916B1 (ko) 2015-07-22 2022-03-07 삼성전자주식회사 가상 머신을 지원하는 스토리지 장치, 그것을 포함하는 스토리지 시스템 및 그것의 동작 방법
US20170046260A1 (en) * 2015-08-14 2017-02-16 Kabushiki Kaisha Toshiba Storage device and method for saving write cache data
US10282298B2 (en) * 2017-06-13 2019-05-07 Microsoft Technology Licensing, Llc Store buffer supporting direct stores to a coherence point

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2011516971A (ja) * 2008-05-02 2011-05-26 ザイリンクス インコーポレイテッド 同期トランザクションのためのコンフィギュラブルトランザクションメモリ
JP2015046164A (ja) * 2013-08-28 2015-03-12 バイオセンス・ウエブスター・(イスラエル)・リミテッドBiosense Webster (Israel), Ltd. リアルタイムデータフローの永続記憶装置用のアトミックトランザクションによるダブルバッファリング

Also Published As

Publication number Publication date
US20200065240A1 (en) 2020-02-27
CN110865770B (zh) 2023-08-01
US11782825B2 (en) 2023-10-10
US11182285B2 (en) 2021-11-23
CN110865770A (zh) 2020-03-06
US20220050773A1 (en) 2022-02-17
KR20200023757A (ko) 2020-03-06

Similar Documents

Publication Publication Date Title
KR102541897B1 (ko) 메모리 시스템
KR102042904B1 (ko) 비차단 제어 업데이트 동작을 수행하도록 구성되는 데이터 저장 디바이스
US20190171392A1 (en) Method of operating storage device capable of reducing write latency
KR20210027642A (ko) 메모리 시스템에서 맵 정보를 전송하는 방법 및 장치
JP6734768B2 (ja) 二重書込みを遂行するストレージ装置を含むシステム、装置、及びその方法
US11392309B2 (en) Memory system for performing migration operation and operating method thereof
KR102349381B1 (ko) 데이터 저장 장치 및 그것의 동작 방법
KR20200113989A (ko) 메모리 시스템의 쓰기 동작을 제어하는 방법 및 장치
KR20200065489A (ko) 데이터 처리 시스템 내 자원 사용에 대응하여 데이터 패스를 동적 할당하는 방법 및 장치
KR20200132047A (ko) 메모리 시스템에서 맵 데이터를 전송하는 방법 및 장치
KR20200122685A (ko) 메모리 시스템 내에서 서로 다른 종류의 데이터를 처리하기 위한 장치 및 방법
US11409444B2 (en) Memory system and operation method thereof
KR20200014175A (ko) 소요시간을 예측하여 가비지 컬렉션을 수행하는 방법 및 장치
US11182329B2 (en) Data processing system and operating method thereof
KR20230081505A (ko) 메모리 컨트롤러 및 그의 동작 방법
CN110825317B (zh) 用于分布式存储输入数据的存储器系统和数据处理系统
US11656996B2 (en) Controller for managing order information of data, operation method thereof, and memory system including the same
US20220156003A1 (en) Controller and operation method thereof
US11249686B2 (en) Controller for handling an abort command using a regeneration queue and operation method thereof
US20220164119A1 (en) Controller, and memory system and data processing system including the same
US11657000B2 (en) Controller and memory system including the same
US11275694B2 (en) Memory system and method of operating method thereof
US20230418521A1 (en) Memory system for optimizing parameter values according to workload class and data processing system including the same
CN112015670A (zh) 传送存储器系统中的映射信息的设备

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant