KR20210076143A - 비순차적 구역 네임스페이스들 - Google Patents

비순차적 구역 네임스페이스들 Download PDF

Info

Publication number
KR20210076143A
KR20210076143A KR1020217016550A KR20217016550A KR20210076143A KR 20210076143 A KR20210076143 A KR 20210076143A KR 1020217016550 A KR1020217016550 A KR 1020217016550A KR 20217016550 A KR20217016550 A KR 20217016550A KR 20210076143 A KR20210076143 A KR 20210076143A
Authority
KR
South Korea
Prior art keywords
logical blocks
command
region
data associated
write
Prior art date
Application number
KR1020217016550A
Other languages
English (en)
Other versions
KR102569783B1 (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 웨스턴 디지털 테크놀로지스, 인코포레이티드
Publication of KR20210076143A publication Critical patent/KR20210076143A/ko
Application granted granted Critical
Publication of KR102569783B1 publication Critical patent/KR102569783B1/ko

Links

Images

Classifications

    • 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
    • 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/10Address translation
    • G06F12/1081Address translation for peripheral access to main memory, e.g. direct memory access [DMA]
    • 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/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/0638Organizing or formatting or addressing of data
    • G06F3/0644Management of space entities, e.g. partitions, extents, pools
    • 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
    • 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
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1016Performance improvement
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1056Simplification
    • 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/7201Logical to physical mapping or translation of blocks or pages
    • 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/7204Capacity control, e.g. partitioning, end-of-life degradation
    • 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/7205Cleaning, compaction, garbage collection, erase control

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

본 개시는 일반적으로 저장 디바이스들을 동작시키는 방법들에 관한 것이다. 저장 디바이스의 제어기는 데이터를 제1 구역의 하나 이상의 제1 논리 블록들에 기입하기 위한 제1 커맨드를 검색하도록 그리고 제1 커맨드와 연관된 데이터를 직접 메모리 액세스(DMA) 판독하고 이를 제1 논리 블록들에 기입하도록 구성된다. 제1 논리 블록들은 제1 구역의 구역 시작 지점과 제1 구역의 구역 용량 사이에 있다. 제어기는 데이터를 제1 구역의 하나 이상의 제2 논리 블록들에 기입하기 위한 제2 커맨드를 검색하도록 그리고 제2 커맨드와 연관된 데이터를 DMA 판독하고 이를 제2 논리 블록들에 기입하도록 구성된다. 제2 논리 블록들은 제1 구역의 구역 시작부와 구역 용량 사이에 있고, 제1 논리 블록들은 제2 논리 블록들에 대해 비순차적이다.

Description

비순차적 구역 네임스페이스들
관련 출원의 상호 참조
본 출원은 2019년 12월 4일자로 출원된 미국 출원 제16/703,643호에 대한 우선권을 주장하며, 이는 2019년 9월 12일자로 출원된 미국 가특허 출원 제62/899,717호에 대한 우선권 및 이익을 주장하고, 이들 둘 모두는 그들 전체가 본 명세서에 참고로 포함된다.
기술분야
본 개시의 실시예들은 일반적으로 솔리드 스테이트 드라이브(sold state drive, SSD)들과 같은 저장 디바이스들에 관한 것이다.
SSD들과 같은 저장 디바이스들은 컴퓨터들 내에서 비교적 낮은 레이턴시(latency)와 고용량 저장이 요구되는 애플리케이션들에서 사용될 수 있다. 예를 들어, SSD들은, 특히 랜덤 판독들 및 기입들에 대해, 하드 디스크 드라이브들(HDD들)보다 더 낮은 레이턴시를 나타낼 수 있다. 전형적으로, SSD의 제어기(controller)는 호스트 디바이스로부터 메모리 디바이스로 데이터를 판독 또는 기입하는 커맨드를 수신한다. 메모리 디바이스의 양은 네임스페이스(namespace)로 지칭되고, 제어기는 메모리 디바이스의 하나 이상의 네임스페이스들로부터 데이터를 판독하거나 그에 데이터를 기입하도록 구성된다. 각각의 네임스페이스는 복수의 논리 블록 어드레스(logical block address, LBA)들 또는 섹터들로 구성된다. 제어기는 언제든지 임의의 네임스페이스 내의 임의의 LBA에 액세스할 수 있다.
그러나, 네임스페이스 내의 연속적인 LBA들(예컨대, LBA1 내지 LBA8)의 섹션이 이미 데이터를 저장하고 있고 그리고 섹션 내의 LBA(예컨대, LBA4)의 선택된 데이터에 대한 사후-기입이 수신될 때, 제어기는 섹션 내의 모든 데이터를 판독하고, 선택된 데이터를 수정하고, 섹션의 각각의 LBA와 연관된 데이터를 새로운 위치에 재기입해야 한다. 이러한 판독-수정-기입 처리는 저장 디바이스 및 호스트 둘 모두의 성능을 감소시킬 수 있을 뿐만 아니라, 저장 디바이스의 내구성을 감소시키고 호스트 오버헤드를 증가시킬 수 있다.
따라서, 저장 디바이스를 동작시키는 새로운 방법이 필요하다.
본 개시는 일반적으로 저장 디바이스들을 동작시키는 방법들에 관한 것이다. 저장 디바이스의 제어기는 데이터를 제1 구역(zone)의 하나 이상의 제1 논리 블록들에 기입하기 위한 제1 커맨드를 검색하도록, 그리고 제1 커맨드와 연관된 데이터를 직접 메모리 액세스(direct memory access, DMA) 판독하고 이를 제1 논리 블록들에 기입하도록 구성된다. 제1 논리 블록들은 제1 구역의 구역 시작 지점과 제1 구역의 구역 용량 사이에 있다. 제어기는 데이터를 제1 구역의 하나 이상의 제2 논리 블록들에 기입하기 위한 제2 커맨드를 검색하도록, 그리고 제2 커맨드와 연관된 데이터를 DMA 판독하고 이를 제2 논리 블록들에 기입하도록 구성된다. 제2 논리 블록들은 제1 구역의 구역 시작부와 구역 용량 사이에 있고, 제1 논리 블록들은 제2 논리 블록들에 대해 비순차적이다.
일 실시예에서, 저장 디바이스는 매체 유닛을 포함하고, 여기서 매체 유닛의 용량은 복수의 구역들로 분할되고, 각각의 구역은 복수의 논리 블록들을 포함하고, 제어기는 매체 유닛에 결합된다. 제어기는, 데이터를 제1 구역에 기입하기 위한 제1 커맨드를 검색하고 제1 커맨드와 연관된 데이터를 직접 메모리 액세스(DMA) 판독하도록, 제1 커맨드와 연관된 데이터를 기입하기 위한 제1 구역의 하나 이상의 제1 논리 블록들을 식별하도록 - 하나 이상의 제1 논리 블록들은 제1 구역의 구역 시작 논리 블록 어드레스와 제1 구역의 구역 용량 사이에 있음 -, 데이터를 제1 구역에 기입하기 위한 제2 커맨드를 검색하고 제2 커맨드와 연관된 데이터를 DMA 판독하도록, 그리고 제2 커맨드와 연관된 데이터를 기입하기 위한 제1 구역의 하나 이상의 제2 논리 블록들을 식별하도록 - 하나 이상의 제2 논리 블록들은 제1 구역의 구역 시작 논리 블록 어드레스와 제1 구역의 구역 용량 사이에 있고, 하나 이상의 제2 논리 블록들은 하나 이상의 비어 있는 논리 블록들에 의해 하나 이상의 제1 논리 블록들로부터 이격됨 - 구성된다.
다른 실시예에서, 저장 디바이스는 매체 유닛을 포함하고, 여기서 매체 유닛의 용량은 복수의 구역들로 분할되고, 각각의 구역은 복수의 논리 블록들을 포함하고, 제어기는 매체 유닛에 결합된다. 제어기는, 데이터를 제1 구역 내의 하나 이상의 제1 논리 블록들에 기입하기 위한 제1 커맨드를 검색하도록 - 하나 이상의 제1 논리 블록들은 제1 구역의 구역 시작 논리 블록 어드레스와 제1 구역의 구역 용량 사이에 있음 -, 제1 커맨드와 연관된 데이터를 제1 구역의 하나 이상의 제1 논리 블록들에 그리고 매체 유닛 내의 제1 위치에 기입하도록, 데이터를 제1 구역 내의 하나 이상의 제2 논리 블록들에 기입하기 위한 제2 커맨드를 검색하도록 - 하나 이상의 제2 논리 블록들은 제1 구역의 구역 시작 논리 블록 어드레스와 제1 구역의 구역 용량 사이에 있고, 하나 이상의 제2 논리 블록들은 하나 이상의 제1 논리 블록들에 대해 비순차적임 -, 그리고 제2 커맨드와 연관된 데이터를 제1 구역의 하나 이상의 제2 논리 블록들에 그리고 매체 유닛 내의 제2 위치에 기입하도록 - 제2 위치는 제1 위치에 대해 순차적으로 위치되어 있음 - 구성된다.
또 다른 실시예에서, 저장 시스템은 호스트 디바이스를 포함하고, 호스트 디바이스는 제1 추적 표 및 저장 시스템을 포함한다. 저장 시스템은 매체 유닛을 포함하고, 여기서 매체 유닛의 용량은 복수의 구역들로 분할되고, 각각의 구역은 복수의 논리 블록들을 포함하고, 여기서 매체 유닛은 제2 추적 표를 저장하고 제어기는 매체 유닛에 결합된다. 제어기는, 데이터를 제1 구역 내의 하나 이상의 제1 논리 블록들에 기입하기 위한 제1 커맨드를 검색하고 제1 커맨드와 연관된 데이터를 DMA 판독하도록 - 하나 이상의 제1 논리 블록들은 제1 구역의 구역 시작 논리 블록 어드레스와 제1 구역의 구역 용량 사이에 있음 -, 제1 커맨드와 연관된 데이터를 제1 구역의 하나 이상의 제1 논리 블록들에 기입하도록, 하나 이상의 제1 논리 블록들이 후속 커맨드들과 연관된 데이터를 기입하는 데 이용가능하지 않음을 나타내기 위해 제1 및 제2 추적 표들을 업데이트하도록, 데이터를 제1 구역 내의 하나 이상의 제2 논리 블록들에 기입하기 위한 제2 커맨드를 검색하고 제2 커맨드와 연관된 데이터를 DMA 판독하도록 - 하나 이상의 제2 논리 블록들은 제1 구역의 구역 시작 논리 블록 어드레스와 제1 구역의 구역 용량 사이에 있고, 하나 이상의 제2 논리 블록들 중 적어도 하나는 하나 이상의 제1 논리 블록들에 대해 비순차적임 -, 제2 커맨드와 연관된 데이터를 제1 구역의 하나 이상의 제2 논리 블록들에 기입하도록, 그리고 하나 이상의 제2 논리 블록들이 후속 커맨드들과 연관된 데이터를 기입하는 데 이용가능하지 않음을 나타내기 위해 제1 및 제2 추적 표들을 업데이트하도록 구성된다.
상기에 언급된 본 발명의 특징들이 상세히 이해될 수 있는 방식으로, 상기에 간략하게 요약된 본 발명의 보다 구체적인 설명이 실시예들을 참조하여 이루어질 수 있으며, 이들 실시예 중 일부가 첨부 도면에 예시되어 있다. 그러나, 첨부 도면은 단지 본 발명의 전형적인 실시예들을 도시하는 것이므로 본 발명의 범주를 제한하는 것으로 간주되지 않아야 한다는 것에 유의해야 하는데, 이는 본 발명이 다른 균등하게 유효한 실시예들을 허용할 수 있기 때문이다.
도 1은 일 실시예에 따른, 저장 시스템을 예시하는 개략 블록도이다.
도 2는 다른 실시예에 따른, 호스트 디바이스에 결합된 저장 디바이스를 포함하는 저장 시스템을 예시한다.
도 3은 일 실시예에 따른, 판독 또는 기입 커맨드를 실행하기 위해 저장 디바이스를 동작시키는 방법을 예시하는 블록도이다.
도 4a는 일 실시예에 따른, 저장 디바이스에서 이용되는 구역 네임스페이스들을 예시한다.
도 4b는 일 실시예에 따른, 도 4a의 저장 디바이스의 구역 네임스페이스들에 대한 상태도를 예시한다.
도 5a는 일 실시예에 따른, 순차적 검사가 턴 오프(turn off)되는 구역 네임스페이스들을 예시한다.
도 5b는 일 실시예에 따른, 도 5a의 구역 네임스페이스들에 대해 수신되는 기입 커맨드들의 대응하는 표를 예시한다.
도 6a는 다른 실시예에 따른, 순차적 검사가 턴 온(turn on)되는 구역 네임스페이스들을 예시한다.
도 6b는 일 실시예에 따른, 도 6a의 구역 네임스페이스들에 대해 수신되는 기입 커맨드들의 대응하는 표를 예시한다.
도 7a 내지 도 7f는 일 실시예에 따라, 비순차적으로 그리고 구역 추가(zone append) 커맨드들을 수신하지 않으면서 구역 네임스페이스(Zoned Namespace, ZNS)의 구역에 기입하는 것을 예시한다.
도 8은 도 7a 내지 도 7f의 구역에 의해 검색되는 기입 커맨드들을 추적하는 대응하는 표를 예시한다.
이해를 촉진하기 위해, 도면들에 공통인 동일한 요소들을 지시하기 위해, 가능한 경우, 동일한 도면 부호들이 사용되었다. 일 실시예에 개시된 요소들이 구체적인 언급 없이도 다른 실시예들에서 유익하게 이용될 수 있다는 것이 고려된다.
하기에서, 본 발명의 실시예들을 참조한다. 그러나, 본 발명은 설명된 특정 실시예들로 제한되지 않는다는 것이 이해되어야 한다. 대신에, 하기의 특징들 및 요소들의 임의의 조합이, 상이한 실시예들과 관련되든지 또는 그렇지 않든지 간에, 본 발명을 구현하고 실시하기 위해 고려된다. 게다가, 본 발명의 실시예가 다른 가능한 해법들에 비해 그리고/또는 종래 기술에 비해 이점을 달성할 수 있지만, 특정 이점이 주어진 실시예에 의해 달성되는지 여부는 본 발명의 제한이 아니다. 따라서, 하기의 태양들, 특징들, 실시예들, 및 이점들은 단지 예시적인 것이며, 청구항(들)에 명시적으로 언급된 경우를 제외하고는 첨부된 청구항들의 요소 또는 제한으로 간주되지 않는다. 마찬가지로, "본 발명"에 대한 언급은 본 명세서에 개시되는 임의의 발명의 주제의 일반화로서 해석되어서는 안되며, 청구항(들)에 명시적으로 언급된 경우를 제외하고는 첨부된 청구항들의 요소 또는 제한인 것으로 간주되어서는 안된다.
본 개시는 일반적으로 저장 디바이스들을 동작시키는 방법들에 관한 것이다. 저장 디바이스의 제어기는 데이터를 제1 구역의 하나 이상의 제1 논리 블록들에 기입하기 위한 제1 커맨드를 검색하도록 그리고 제1 커맨드와 연관된 데이터를 직접 메모리 액세스(DMA) 판독하고 이를 제1 논리 블록들에 기입하도록 구성된다. 제1 논리 블록들은 제1 구역의 구역 시작 지점과 제1 구역의 구역 용량 사이에 있다. 제어기는 데이터를 제1 구역의 하나 이상의 제2 논리 블록들에 기입하기 위한 제2 커맨드를 검색하도록 그리고 제2 커맨드와 연관된 데이터를 DMA 판독하고 이를 제2 논리 블록들에 기입하도록 구성된다. 제2 논리 블록들은 제1 구역의 구역 시작부와 구역 용량 사이에 있고, 제1 논리 블록들은 제2 논리 블록들에 대해 비순차적이다.
도 1은 본 개시의 하나 이상의 기술에 따른, 저장 디바이스(106)가 호스트 디바이스(104)를 위한 저장 디바이스로서 기능할 수 있는 저장 시스템(100)을 예시하는 개략 블록도이다. 예를 들어, 호스트 디바이스(104)는 데이터를 저장 및 검색하기 위해 저장 디바이스(106)에 포함된 비휘발성 메모리 디바이스들(110)을 이용할 수 있다. 호스트 디바이스(104)는 호스트 DRAM(138)을 포함한다. 일부 예들에서, 저장 시스템(100)은 저장 어레이로서 동작할 수 있는, 저장 디바이스(106)와 같은, 복수의 저장 디바이스를 포함할 수 있다. 예를 들어, 저장 시스템(100)은 호스트 디바이스(104)를 위한 대용량 저장 디바이스로서 집합적으로 기능하는 RAID(redundant array of inexpensive/independent disk)로서 구성되는 복수의 저장 디바이스들(106)을 포함할 수 있다.
저장 시스템(100)은 저장 디바이스(106)와 같은 하나 이상의 저장 디바이스에 그리고/또는 그로부터 데이터를 저장 및/또는 검색할 수 있는 호스트 디바이스(104)를 포함한다. 도 1에 예시된 바와 같이, 호스트 디바이스(104)는 인터페이스(114)를 통해 저장 디바이스(106)와 통신할 수 있다. 호스트 디바이스(104)는 컴퓨터 서버, NAS(network attached storage) 유닛, 데스크톱 컴퓨터, 노트북(즉, 랩톱) 컴퓨터, 태블릿 컴퓨터, 셋톱 박스, 전화 핸드셋, 예컨대 소위 "스마트" 폰, 소위 "스마트" 패드, 텔레비전, 카메라, 디스플레이 디바이스, 디지털 미디어 플레이어, 비디오 게임 콘솔, 비디오 스트리밍 디바이스 등을 포함한, 광범위한 디바이스들 중 임의의 것을 포함할 수 있다.
저장 디바이스(106)는 제어기(108), 비휘발성 메모리(110)(NVM(110)), 전력 공급부(111), 휘발성 메모리(112), 및 인터페이스(114)를 포함한다. 제어기(108)는 구역 관리(120)를 포함한다. 일부 예들에서, 저장 디바이스(106)는 명료함을 위해 도 1에 도시되지 않은 추가적인 컴포넌트들을 포함할 수 있다. 예를 들어, 저장 디바이스(106)는 저장 디바이스(106)의 컴포넌트들이 기계적으로 부착되고 저장 디바이스(106)의 컴포넌트들 등을 전기적으로 상호접속하는 전기전도성 트레이스(trace)들을 포함하는 인쇄 회로 기판(printed circuit board, PCB)을 포함할 수 있다. 일부 예들에서, 저장 디바이스(106)의 물리적 치수들 및 커넥터(connector) 구성들은 하나 이상의 표준 폼 팩터(standard form factor)를 따를 수 있다. 일부 예시적인 표준 폼 팩터들은 3.5" 데이터 저장 디바이스(예컨대, HDD 또는 SSD), 2.5" 데이터 저장 디바이스, 1.8" 데이터 저장 디바이스, PCI(peripheral component interconnect), PCI-X(PCI-extended), PCIe(PCI Express)(예컨대, PCIe x1, x4, x8, x16, PCIe Mini Card, MiniPCI 등)를 포함하지만, 이로 제한되지 않는다. 일부 예들에서, 저장 디바이스(106)는 호스트 디바이스(104)의 마더보드에 직접 결합(예컨대, 직접 솔더링)될 수 있다.
저장 디바이스(106)의 인터페이스(114)는 호스트 디바이스(104)와 데이터를 교환하기 위한 데이터 버스 및 호스트 디바이스(104)와 커맨드들을 교환하기 위한 제어 버스 중 하나 또는 둘 모두를 포함할 수 있다. 인터페이스(114)는 임의의 적합한 프로토콜에 따라 동작할 수 있다. 예를 들어, 인터페이스(114)는 다음의 프로토콜들 중 하나 이상에 따라 동작할 수 있다: ATA(advanced technology attachment)(예컨대, SATA(serial-ATA) 및 PATA(parallel-ATA)), FCP(Fibre Channel Protocol), SCSI(small computer system interface), SAS(serially attached SCSI), NVMe(non-volatile memory express), OpenCAPI, GenZ, CCIX(Cache Coherent Interface Accelerator), OCSSD(Open Channel SSD), CXL(Coherent Accelerator) 등. 인터페이스(114)의 전기 접속(예컨대, 데이터 버스, 제어 버스, 또는 둘 모두)은 제어기(108)에 전기적으로 접속되어, 호스트 디바이스(104)와 제어기(108) 사이의 전기 접속을 제공하여서, 데이터가 호스트 디바이스(104)와 제어기(108) 사이에서 교환될 수 있게 한다. 일부 예들에서, 인터페이스(114)의 전기 접속은 또한 저장 디바이스(106)가 호스트 디바이스(104)로부터 전력을 수신할 수 있게 할 수 있다. 예를 들어, 도 1에 예시된 바와 같이, 전력 공급부(111)는 인터페이스(114)를 통해 호스트 디바이스(104)로부터 전력을 수신할 수 있다.
저장 디바이스(106)는 복수의 메모리 디바이스들을 포함할 수 있는 NVM(110)을 포함한다. NVM(110)은 데이터를 저장 및/또는 검색하도록 구성될 수 있다. 예를 들어, NVM(110)의 메모리 디바이스는 제어기(108)로부터 데이터를 저장하도록 메모리 디바이스에 지시하는 메시지 및 데이터를 수신할 수 있다. 유사하게, NVM(110)의 메모리 디바이스는 제어기(108)로부터 데이터를 검색하도록 메모리 디바이스에 지시하는 메시지를 수신할 수 있다. 일부 예들에서, 메모리 디바이스들 각각은 다이(die)로 지칭될 수 있다. 일부 예들에서, 단일 물리적 칩이 복수의 다이들(즉, 복수의 메모리 디바이스들)을 포함할 수 있다. 일부 예들에서, 메모리 디바이스들 각각은 비교적 많은 양들의 데이터(예컨대, 128 MB, 256 MB, 512 MB, 1 GB, 2 GB, 4 GB, 8 GB, 16 GB, 32 GB, 64 GB, 128 GB, 256 GB, 512 GB, 1 TB 등)를 저장하도록 구성될 수 있다.
일부 예들에서, NVM(110)의 각각의 메모리 디바이스는 플래시 메모리 디바이스들, PCM(phase-change memory) 디바이스들, ReRAM(resistive random-access memory) 디바이스들, MRAM(magnetoresistive random-access memory) 디바이스들, F-RAM(ferroelectric random-access memory), 홀로그래픽 메모리 디바이스들, HDD들, 및 임의의 다른 유형의 비휘발성 메모리 디바이스들과 같은 임의의 유형의 비휘발성 메모리 디바이스들을 포함할 수 있다.
NVM(110)은 복수의 플래시 메모리 디바이스들을 포함할 수 있다. 플래시 메모리 디바이스들은 NAND 또는 NOR 기반 플래시 메모리 디바이스들을 포함할 수 있고, 각각의 플래시 메모리 셀에 대한 트랜지스터의 플로팅 게이트에 포함된 전하에 기초하여 데이터를 저장할 수 있다. NAND 플래시 메모리 디바이스들에서, 플래시 메모리 디바이스는 복수의 블록들로 분할될 수 있으며, 이들은 복수의 페이지들로 분할될 수 있다. 특정 메모리 디바이스 내의 복수의 블록들 중의 각각의 블록은 복수의 NAND 셀들을 포함할 수 있다. NAND 셀들의 행(row)들은 워드라인(wordline)을 이용하여 전기적으로 접속되어 복수의 페이지들 중 소정 페이지를 정의할 수 있다. 복수의 페이지들 각각 내의 각자의 셀들은 각자의 비트 라인들에 전기적으로 접속될 수 있다. 또한, NAND 플래시 메모리 디바이스들은 2D 또는 3D 디바이스들일 수 있고, 싱글 레벨 셀(SLC), 멀티-레벨 셀(MLC), 트리플 레벨 셀(TLC), 또는 쿼드 레벨 셀(QLC)일 수 있다. 제어기(108)는 페이지 레벨에서 NAND 플래시 메모리 디바이스들에 데이터를 기입하고 그로부터 데이터를 판독하고 블록 레벨에서 NAND 플래시 메모리 디바이스들로부터 데이터를 소거할 수 있다.
저장 디바이스(106)는 저장 디바이스(106)의 하나 이상의 컴포넌트에 전력을 제공할 수 있는 전력 공급부(111)를 포함한다. 표준 모드에서 동작할 때, 전력 공급부(111)는 호스트 디바이스(104)와 같은 외부 디바이스에 의해 제공되는 전력을 이용하여 하나 이상의 컴포넌트에 전력을 제공할 수 있다. 예를 들어, 전력 공급부(111)는 인터페이스(114)를 통해 호스트 디바이스(104)로부터 수신된 전력을 이용하여 하나 이상의 컴포넌트에 전력을 제공할 수 있다. 일부 예들에서, 전력 공급부(111)는 셧다운 모드에서 동작할 때, 예컨대 외부 디바이스로부터의 전력 수신이 중단되는 경우 하나 이상의 컴포넌트에 전력을 제공하도록 구성된 하나 이상의 전력 저장 컴포넌트를 포함할 수 있다. 이러한 방식으로, 전력 공급부(111)는 온보드 백업 전원으로서 기능할 수 있다. 하나 이상의 전력 저장 컴포넌트의 일부 예들은 커패시터들, 수퍼 커패시터들, 배터리들 등을 포함하지만 이로 제한되지 않는다. 일부 예들에서, 하나 이상의 전력 저장 컴포넌트에 의해 저장될 수 있는 전력의 양은 하나 이상의 전력 저장 컴포넌트의 비용 및/또는 크기(예를 들어, 면적/부피)의 함수일 수 있다. 다시 말해서, 하나 이상의 전력 저장 컴포넌트에 의해 저장되는 전력의 양이 증가함에 따라, 하나 이상의 전력 저장 컴포넌트의 비용 및/또는 크기가 또한 증가한다.
저장 디바이스(106)는 또한 휘발성 메모리(112)를 포함하며, 이는 제어기(108)에 의해 정보를 저장하는 데 사용될 수 있다. 휘발성 메모리(112)는 하나 이상의 휘발성 메모리 디바이스들로 구성될 수 있다. 일부 예들에서, 제어기(108)는 휘발성 메모리(112)를 캐시로서 사용할 수 있다. 예를 들어, 제어기(108)는 캐싱된 정보가 NVM(110)에 기입될 때까지 캐싱된 정보를 휘발성 메모리(112)에 저장할 수 있다. 도 1에 예시된 바와 같이, 휘발성 메모리(112)는 전력 공급부(111)로부터 수신된 전력을 소비할 수 있다. 휘발성 메모리(112)의 예들은 RAM(random-access memory), DRAM(dynamic random access memory), SRAM(static RAM), 및 SDRAM(synchronous dynamic RAM)(예컨대, DDR1, DDR2, DDR3, DDR3L, LPDDR3, DDR4, LPDDR4 등)을 포함하지만, 이로 제한되지 않는다.
저장 디바이스(106)는 제어기(108)를 포함하며, 이는 저장 디바이스(106)의 하나 이상의 동작을 관리할 수 있다. 예를 들어, 제어기(108)는 NVM(110)으로부터의 데이터의 판독 및/또는 그에의 데이터의 기입을 관리할 수 있다. 제어기(108)는 구역들에 대한 판독 및 기입뿐만 아니라, 가비지 컬렉션(garbage collection) 목적들을 위한 구역들로의 그리고 구역들로부터의 유효 데이터의 재위치를 관리하기 위한 구역 관리(120)를 포함할 수 있다. 일부 실시예들에서, 저장 디바이스(106)가 호스트 디바이스(104)로부터 기입 커맨드를 수신할 때, 제어기(108)는 NVM(110)에 데이터를 저장하는 데이터 저장 커맨드를 개시하고 데이터 저장 커맨드의 진행을 모니터링할 수 있다. 제어기(108)는 저장 시스템(100)의 적어도 하나의 동작 특성을 결정하고 적어도 하나의 동작 특성을 NVM(110)에 저장할 수 있다.
도 2는 다른 실시예에 따른, 호스트 디바이스(204)에 결합된 저장 디바이스(206)를 포함하는 저장 시스템(200)을 예시한다. 저장 시스템(200)은 도 1의 저장 시스템(100), 호스트 디바이스(104), 및 저장 디바이스(106)일 수 있다.
저장 디바이스(206)는 호스트 디바이스(204)로부터 커맨드들 및 데이터를 전송 및 수신할 수 있고, 커맨드 프로세서(220)를 포함한다. 커맨드 프로세서(220)는 도 1의 제어기(108)일 수 있다. 커맨드 프로세서(220)는 NAND 액세스와 같은 메모리 디바이스 액세스를 스케줄링할 수 있고, 이전에 수신된 커맨드가 동일한 메모리 디바이스에 대한 기입을 요구하기 전에 메모리 디바이스에 대한 판독을 수행할 수 있다. 커맨드 프로세서(220)는 하나 이상의 메모리 디바이스(228) 및 커맨드 페치(command fetch)(222)에 결합된다. 하나 이상의 메모리 디바이스(228)는 NAND 비휘발성 메모리 디바이스들일 수 있다. 커맨드 페치(222)는 제출 큐 중재(224)에 결합된다. 제출 큐 중재(224)는 하나 이상의 제출 큐 헤드 및 테일 포인터(submission queue head and tail pointer)(226)에 결합된다.
호스트 디바이스(204)는 하나 이상의 처리 유닛 또는 CPU 애플리케이션(234)에 결합된 하나 이상의 호스트 소프트웨어 애플리케이션(232)으로 구성된다. 일 실시예에서, 소프트웨어 애플리케이션(232)은 시스템(200)의 각각의 사용자에 대한 레이턴시 QoS를 도출하기 위해 제한된 솔리드 스테이트 드라이브 큐 깊이를 갖는다. 호스트 디바이스(204)는 연관된 QoS가 없는 운영 시스템(OS) 또는 소프트웨어 애플리케이션(240)을 추가로 포함한다. CPU(234)는 인터커넥트(interconnect)(236)에 그리고 호스트 DRAM(238)에 결합된다. 호스트 DRAM(238)은 제출 큐 데이터를 저장할 수 있다. 인터커넥트(236)는 저장 디바이스(206)에 결합된다. 인터커넥트(236)는 제출 큐 헤드 및 테일 포인터들(226)과 커맨드 페치(222) 둘 모두와 통신할 수 있다.
CPU(234)는 저장 디바이스(206)에 전송할 하나 이상의 커맨드(216)를 생성하며, 커맨드 페치 신호(244)를 통해 저장 디바이스(206)로부터 커맨드들을 전송 및 수신할 수 있다. CPU(234)는 추가로 인터럽트(interrupt) 또는 도어벨(doorbell)(218)을 저장 디바이스(206)에 전송하여 저장 디바이스(206)에게 하나 이상의 커맨드(216)를 통지할 수 있다. CPU(234)는 저장 디바이스(206)에 제출된 데이터-큐 깊이를 제한할 수 있다. 큐 깊이(QD)는 저장 디바이스(206)에 큐잉된 커맨드들의 최대 수이고, 데이터-QD는 QD로 큐잉된 커맨드들과 연관된 데이터의 양이다. 일 실시예에서, 저장 디바이스(206)의 데이터-QD(242)는 저장 디바이스(206)의 대역폭과 동등하다. 데이터-QD(242)는 최고 레벨로 제한되는데, 그 최고 레벨 아래에서 저장 디바이스(206)는 원하는 레이턴시 QoS를 여전히 유지할 수 있다. 이어서 커맨드 프로세서(220)는 호스트 디바이스(204)로부터 수신된 커맨드들을 처리한다.
도 3은 일 실시예에 따른, 판독 또는 기입 커맨드를 실행하기 위해 저장 디바이스를 동작시키는 방법(300)을 예시하는 블록도이다. 방법(300)은 호스트 디바이스(104) 및 제어기(108)를 포함하는 저장 디바이스(106)를 갖는 저장 시스템(100)과 함께 사용될 수 있다. 방법(300)은 추가로 호스트 디바이스(204) 및 커맨드 프로세서(220)를 포함하는 저장 디바이스(206)를 갖는 저장 시스템(200)과 함께 사용될 수 있다.
방법(300)은 동작 350에서 시작되며, 여기서 호스트 디바이스는 엔트리로서 제출 큐 내에 커맨드를 기입한다. 호스트 디바이스는 동작 350에서 제출 큐 내에 하나 이상의 커맨드를 기입할 수 있다. 커맨드들은 판독 커맨드들 또는 기입 커맨드들일 수 있다. 호스트 디바이스는 하나 이상의 제출 큐를 포함할 수 있다. 호스트 디바이스는 하나 이상의 커맨드들의 순차적 기입 순서(즉, 순차적 처리 순서)와 무관하게, 임의의 순서(즉, 제출 순서)로 하나 이상의 커맨드들을 제출 큐에 기입할 수 있다.
동작 352에서, 호스트 디바이스는 하나 이상의 업데이트된 제출 큐 테일 포인터를 기입하고 도어벨을 울리거나 인터럽트 신호를 전송하여 저장 디바이스에게 실행될 준비가 된 새로운 커맨드를 통지하거나 시그널링한다. 도어벨 신호는 도 2의 도어벨(218)일 수 있다. 호스트는 업데이트된 제출 큐 테일 포인터를 기입하고 하나 초과의 제출 큐가 있다면 제출 큐들 각각에 대한 도어벨 또는 인터럽트 신호를 전송할 수 있다. 동작 354에서, 도어벨 또는 인터럽트 신호의 수신에 응답하여, 저장 디바이스의 제어기는 하나 이상의 제출 큐로부터 커맨드를 페치하고, 제어기는 커맨드를 수신하거나 DMA 판독한다.
동작 356에서, 제어기는 커맨드를 처리하고 커맨드와 연관된 데이터를 호스트 디바이스 메모리에 기입하거나 전송한다. 제어기는 한 번에 하나 초과의 커맨드를 처리할 수 있다. 제어기는 하나 이상의 커맨드를 제출 순서로 또는 순차적 순서로 처리할 수 있다. 기입 커맨드를 처리하는 것은 커맨드와 연관된 데이터를 기입할 구역을 식별하는 것, 구역의 하나 이상의 LBA에 데이터를 기입하는 것, 및 구역 내의 다음 이용가능 LBA를 식별하기 위해 구역의 기입 포인터를 전진시키는 것을 포함할 수 있다.
동작 358에서, 일단 커맨드가 완전히 처리되면, 제어기는 실행된 커맨드에 대응하는 완료 엔트리를 호스트 디바이스의 완료 큐에 기입하고 새로 기입된 완료 엔트리를 가리키도록 CQ 헤드 포인터를 이동시키거나 업데이트한다.
동작 360에서, 제어기는 인터럽트 신호 또는 도어벨을 생성하여 호스트 디바이스에 전송한다. 인터럽트 신호는 커맨드가 실행되었고 커맨드와 연관된 데이터가 메모리 디바이스에서 이용가능하다는 것을 나타낸다. 인터럽트 신호는 추가로 호스트 디바이스에게 완료 큐가 판독 또는 처리될 준비가 되었음을 통지한다.
동작 362에서, 호스트 디바이스는 완료 엔트리를 처리한다. 동작 364에서, 호스트 디바이스는 업데이트된 CQ 헤드 포인터를 저장 디바이스에 기입하고 도어벨을 울리거나 인터럽트 신호를 저장 디바이스에 전송하여 완료 엔트리를 해제한다.
도 4a는 일 실시예에 따른, 저장 디바이스(400)에서 이용되는 구역 네임스페이스(ZNS)(402) 뷰를 예시한다. 저장 디바이스(400)는 ZNS(402) 뷰를 호스트 디바이스에 제공할 수 있다. 도 4b는 일 실시예에 따른, 저장 디바이스(400)의 ZNS(402)에 대한 상태도(450)를 예시한다. 저장 디바이스(400)는 도 1의 저장 시스템(100)의 저장 디바이스(106) 또는 도 2의 저장 시스템(200)의 저장 디바이스(206)일 수 있다. 저장 디바이스(400)는 하나 이상의 ZNS(402)를 가질 수 있고, 각각의 ZNS(402)는 상이한 크기들일 수 있다. 저장 디바이스(400)는 하나 이상의 구역 네임스페이스(402)에 더하여 하나 이상의 종래의 네임스페이스를 추가로 포함할 수 있다. 또한, ZNS(402)는 SAS를 위한 구역 블록 커맨드(zoned block command, ZBC) 및/또는 SATA를 위한 구역-디바이스 ATA 커맨드 세트(zoned-device ATA command set, ZAC)일 수 있다.
저장 디바이스(400)에서, ZNS(402)는 용량이 복수의 구역(406a 내지 406n)(집합적으로 구역들(406)로 지칭됨)으로 분할되도록 논리 블록들로 포맷될 수 있는 NVM의 양이다. 구역들(406) 각각은 매체 유닛 또는 NVM(404)의 복수의 물리적 또는 소거 블록(이제 도시됨)을 포함하고, 소거 블록들 각각은 복수의 논리 블록(도시되지 않음)과 연관된다. 제어기(408)가 예컨대 호스트 디바이스(도시되지 않음) 또는 호스트 디바이스의 제출 큐로부터 커맨드를 수신할 때, 제어기(408)는 ZNS(402)의 복수의 소거 블록과 연관된 복수의 논리 블록으로부터 데이터를 판독하고 그에 데이터를 기입할 수 있다. 논리 블록들 각각은 고유 LBA 또는 섹터와 연관된다.
일 실시예에서, NVM(404)은 NAND 디바이스이다. NAND 디바이스는 하나 이상의 다이를 포함한다. 하나 이상의 다이들 각각은 하나 이상의 평면들을 포함한다. 하나 이상의 평면들 각각은 하나 이상의 소거 블록들을 포함한다. 하나 이상의 소거 블록 각각은 하나 이상의 워드라인(예를 들어, 256개의 워드라인)을 포함한다. 하나 이상의 워드라인 각각은 하나 이상의 페이지에서 어드레싱될 수 있다. 예를 들어, MLC NAND 다이는 전체 워드라인의 각각의 셀에서 2개의 비트에 도달하기 위해 상위 페이지 및 하위 페이지를 사용할 수 있다(예를 들어, 페이지당 16 kB). 또한, 각각의 페이지는 전체 페이지와 동일하거나 그보다 작은 입도로 액세스될 수 있다. 제어기는 512 바이트의 사용자 데이터 입도 LBA 크기들로 NAND에 자주 액세스할 수 있다. 따라서, 아래의 설명에 언급된 바와 같이, NAND 위치들은 512 바이트의 입도와 동일하다. 그렇기 때문에, MCL NAND의 2개의 페이지에 대한 512 바이트의 LBA 크기 및 16 kB의 페이지 크기는 워드라인당 약 16개의 NAND 위치를 야기한다. 그러나, 이 NAND 위치 크기는 제한적인 것으로 의도되지 않으며, 단지 예로서 사용된다.
데이터가 소거 블록에 기입될 때, NVM(404) 내에서 데이터가 위치하는 곳을 추적하기 위해 구역(406) 내에서 하나 이상의 논리 블록이 대응하여 업데이트된다. 데이터는 구역(406)이 가득 찰 때까지 한 번에 하나의 구역(406)에 기입되거나, 다수의 구역(406)이 부분적으로 찰 수 있도록 다수의 구역(406)에 기입될 수 있다. 유사하게, 특정 구역(406)에 데이터를 기입할 때, 데이터는 인접한 블록으로 이동할 때까지 워드라인 별로 또는 NAND 위치들의 순차적 순서로, 복수의 소거 블록에 한 번에 하나의 블록씩 기입되거나(즉, 제2 소거 블록으로 이동하기 전에 제1 소거 블록이 가득 찰 때까지 제1 소거 블록에 기입), 더 병렬 방식으로 각각의 블록을 부분적으로 채우기 위해 워드라인 별로 또는 NAND 위치들의 순차적 순서로, 한 번에 다수의 블록에 기입될 수 있다(즉, 각각의 소거 블록의 제2 NAND 위치에 기입하기 전에 각각의 소거 블록의 제1 NAND 위치에 기입).
제어기(408)가 각각의 구역에 대한 데이터를 저장할 소거 블록들을 선택할 때, 제어기(408)는 구역 열림 시간에 소거 블록들을 선택할 수 있거나, 또는 제어기(408)는 그 특정 소거 블록의 제1 NAND 위치 또는 워드라인을 채울 필요에 도달함에 따라 소거 블록들을 선택할 수 있을 것이다. 이는, 다음 소거 블록을 시작하기 전에 하나의 소거 블록을 완전히 채우는 전술된 방법이 이용될 때 더 차별화될 수 있다. 제어기(408)는 적시 기준(just-in-time basis)으로 더 최적의 소거 블록을 선택하기 위해 시간 차이를 사용할 수 있다. 어느 소거 블록이 각각의 구역 및 그의 연속적인 LBA들에 대해 할당되고 배정되는지는 항상 제어기(408) 내의 0개 이상의 동시 구역에 대해 결정될 수 있다.
구역들(406) 각각은 구역 시작 논리 블록 어드레스(zone starting logical block address, ZSLBA) 또는 구역 시작 섹터와 연관된다. ZSLBA는 구역(406) 내의 제1 이용가능 LBA이다. 예를 들어, 제1 구역(406a)은 ZaSLBA와 연관되고, 제2 구역(406b)은 ZbSLBA와 연관되고, 제3 구역(406c)은 ZcSLBA와 연관되고, 제4 구역(406d)은 ZdSLBA와 연관되고, 제n 구역(406n)(즉, 마지막 구역)은 ZnSLBA와 연관된다. 각각의 구역(406)은 그의 ZSLBA에 의해 식별되고, 순차적 기입들(즉, 기입 커맨드들이 수신되는 순서로 NVM(110)에 데이터를 기입)을 수신하도록 구성된다.
데이터가 구역(406)에 기입됨에 따라, 기입 포인터(410)는 다음 기입 시작 지점(즉, 이전 기입의 완료 지점이 후속 기입의 시작 지점과 동일함)을 추적하기 위해 데이터를 기입할 구역(406) 내의 다음 이용가능 블록을 가리키거나 지시하기 위해 전진되거나 업데이트된다. 따라서, 기입 포인터(410)는 구역(406)에 대한 후속 기입이 시작될 곳을 지시한다. 후속 기입 커맨드들은 '구역 추가' 커맨드들이며, 여기서 후속 기입 커맨드와 연관된 데이터는 기입 포인터(410)가 다음 시작 지점으로서 나타내고 있는 위치에서 구역(406)에 추가된다. 기입 순서화를 위해 구역(406) 내의 LBA들의 순서화된 리스트가 저장될 수 있다. 각각의 구역(406)은 그 자신의 기입 포인터(410)를 가질 수 있다. 따라서, 기입 커맨드가 수신될 때, 구역(406)이 그의 ZSLBA에 의해 식별되고, 기입 포인터(410)는 식별된 구역(406) 내에서 데이터의 기입이 시작되는 곳을 결정한다.
도 4b는 도 4a의 ZNS(402)에 대한 상태도(450)를 예시한다. 상태도(450)에서, 각각의 구역은 비어 있음(empty), 활성(active), 가득 참(full), 또는 오프라인(offline)과 같은 상이한 상태에 있을 수 있다. 구역이 비어 있을 때, 구역에는 데이터가 없고(즉, 구역 내의 소거 블록들 중 어느 것도 현재 데이터를 저장하고 있지 않음) 기입 포인터는 ZSLBA에 있다(즉, WP=0). 일단 구역에 대해 기입이 스케줄링되면 또는 호스트에 의해 구역 열기 커맨드가 발행되면 비어 있는 구역이 열림 및 활성 구역으로 전환된다. 구역 열림 상태와 구역 닫힘 상태 - 이들은 둘 모두 활성 상태들임 - 간에 구역을 이동시키기 위해 구역 관리(ZM) 커맨드들이 사용될 수 있다. 구역이 활성이면, 구역은 기입될 수 있는 열린 블록들을 포함하고, 호스트는 ZM 또는 제어기(408)에 의해 활성 상태에서의 권장 시간에 대한 설명을 제공받을 수 있다. 제어기는 ZM을 포함할 수 있다.
용어 "기입됨"은, 사용자 데이터가 모든 이용가능 NAND 위치들을 채우지는 않았을 때, 소거 블록 내의 0개 이상의 NAND 위치들 및/또는 소거 블록 내의 부분적으로 채워진 NAND 위치들에 대해 사용자 데이터를 프로그래밍하는 것을 포함한다. 용어 "기입됨"은, 내부 드라이브 처리 요구들(에러 비트들이 열린 소거 블록들 상에 더 빨리 축적되기 때문으로 인한 열린 블록 데이터 보유 문제들)로 인해 구역을 채우도록 이동시키는 것, 특히 결함 상태를 추적하거나 발견하기에 너무 많은 열린 구역들과 같이, 리소스 제약들로 인해 저장 디바이스(400)가 구역을 닫거나 채우는 것, 또는 특히 드라이브를 전송할 데이터가 더 이상 없음, 컴퓨터 셧다운, 호스트 상의 에러 처리, 추적을 위한 제한된 호스트 리소스들과 같은 문제들로 인해 호스트 디바이스가 구역을 닫는 것을 추가로 포함할 수 있다.
활성 구역들은 열린 상태 또는 닫힌 상태일 수 있다. 열린 구역은, 기입될 준비가 되어 있고 현재 리소스들이 할당되어 있는 비어 있는 또는 부분적으로 채워진 구역이다. 기입 커맨드 또는 구역 추가 커맨드와 함께 호스트 디바이스로부터 수신된 데이터는 현재 이전 데이터로 채워지지 않은 열린 소거 블록에 프로그래밍될 수 있다. 닫힌 구역은, 현재 계속적으로 호스트로부터 기입들을 수신하고 있지 않은 비어 있는 또는 부분적으로 채워진 구역이다. 열린 상태로부터 닫힌 상태로의 구역의 이동은 제어기(408)가 다른 작업들에 리소스들을 재할당할 수 있게 한다. 이들 작업은 열려 있는 다른 구역들, 다른 종래의 비-구역 영역들, 또는 다른 제어기 요구들을 포함할 수 있지만, 이로 제한되지 않는다.
열린 구역과 닫힌 구역 둘 모두에서, 기입 포인터는 ZSLBA와 구역의 마지막 LBA의 끝 사이의 어딘가의 구역 내의 위치를 가리키고 있다(즉, WP>0). 활성 구역들은 ZM에 의한 지정에 따라, 또는 구역에 대해 기입이 스케줄링되면 열린 상태와 닫힌 상태 사이에서 전환할 수 있다. 또한, ZM은 구역이 다시 비어 있는 구역으로 전환되도록 구역에 저장된 데이터를 클리어(clear)하거나 소거하기 위해 활성 구역을 리셋할 수 있다. 일단 활성 구역이 가득 차면, 구역은 가득 찬 상태로 전환된다. 가득 찬 구역은 데이터로 완전히 채워진, 그리고 더 이상 데이터를 기입할 이용가능 블록이 없는 구역이다(즉, WP=구역 용량(ZCAP)). 가득 찬 구역들에 저장된 데이터의 판독 커맨드들은 여전히 실행될 수 있다.
ZM은 가득 찬 구역을 리셋하여, 구역이 다시 비어 있는 구역으로 전환되도록 구역에 저장된 데이터의 소거를 스케줄링할 수 있다. 가득 찬 구역이 리셋될 때, 구역이 기입될 준비가 된 비어 있는 구역으로서 마킹될 수 있지만, 구역으로부터 데이터가 즉시 클리어되지 않을 수 있다. 그러나, 리셋 구역은 열린 및 활성 구역으로 전환하기 전에 소거되어야 한다. ZM 리셋과 ZM 열기 사이에서 언제든지 구역이 소거될 수 있다. 오프라인 구역은 데이터를 기입하는 데 이용할 수 없는 구역이다. 오프라인 구역은 활성 상태임이 없이 가득 찬 상태, 비어 있는 상태, 또는 부분적으로 찬 상태에 있을 수 있다.
구역을 리셋하는 것은 구역에 저장된 모든 데이터의 소거를 스케줄링하거나 클리어하기 때문에, 개별 소거 블록들의 가비지 컬렉션에 대한 필요성이 제거되어, 저장 디바이스(400)의 전체 가비지 컬렉션 처리를 개선한다. 저장 디바이스(400)는 소거를 위해 하나 이상의 소거 블록을 마킹할 수 있다. 새로운 구역이 형성될 예정이고 저장 디바이스(400)가 ZM 열기를 예상할 때, 소거를 위해 마킹된 하나 이상의 소거 블록이 이어서 소거될 수 있다. 저장 디바이스(400)는 추가로 소거 블록들의 소거 시에 구역의 물리적 지원을 결정 및 생성할 수 있다. 따라서, 일단 새로운 구역이 열리고 구역을 형성하기 위해 소거 블록들이 선택되고 있다면, 소거 블록들은 소거되었을 것이다. 또한, 구역이 리셋될 때마다, 구역(406)에 대한 기입 포인터(410) 및 LBA들에 대한 새로운 순서가 선택될 수 있어, 구역(406)이 순차적 순서를 벗어나 커맨드들을 수신하는 것에 관대해지게 할 수 있다. 기입 포인터(410)는 선택적으로 어떤 시작 LBA가 커맨드에 대해 지시될지라도 커맨드가 기입될 수 있도록 턴 오프될 수 있다.
다시 도 4a를 참조하면, 제어기(408)가 호스트(204)로부터 기입 커맨드를 수신하거나 기입 데이터를 직접 메모리 액세스(DMA) 판독할 때, 제어기(408)는 커맨드와 연관된 데이터를 기입할 비어 있는 소거 블록을 선택할 수 있고, 비어 있는 구역(406)은 활성 및 열린 구역(406)으로 전환된다. 기입 커맨드는 새로운 데이터를 기입하는 커맨드이거나, 가비지 컬렉션 목적으로 유효 데이터를 다른 구역으로 이동시키는 커맨드일 수 있다. 제어기(408)는 호스트 디바이스에 의해 채워진 제출 큐로부터 새로운 커맨드들을 DMA 판독 또는 인입(pull-in)하도록 구성된다.
활성 구역(406)으로 방금 전환된 비어 있는 구역(406)에서, 데이터는 ZSLBA에서 시작하여 구역(406) 및 구역(406)의 순차적 LBA들의 연관된 세트에 할당되는데, 그 이유는 기입 포인터(410)가 ZSLBA와 연관된 논리 블록을 제1 이용가능 논리 블록으로서 지시하고 있기 때문이다. 데이터는 구역(406)의 물리적 위치에 할당된 하나 이상의 소거 블록 또는 NAND 위치에 기입될 수 있다. 기입 커맨드와 연관된 데이터가 구역(406)에 기입된 후에, 기입 포인터(410)는 호스트 기입을 위해 이용가능한 다음 LBA(즉, 제1 기입의 완료 지점)를 가리키도록 업데이트된다. 그러한 호스트 기입 커맨드로부터의 기입 데이터는 구역의 물리적 지원을 위해 선택된 소거 블록 내의 다음 이용가능 NAND 위치로 순차적으로 프로그래밍된다.
일부 실시예들에서, NAND 위치는 워드라인과 동일할 수 있다. 그러한 실시예에서, 기입 커맨드가 워드라인보다 더 작은 경우, 제어기는 다수의 기입 커맨드들로 구성된 전체 워드라인을 프로그래밍하기 전에 DRAM 또는 SRAM과 같은 다른 메모리 위치 내의 여러 기입 커맨드들을 선택적으로 병합(aggregate)할 수 있다. 워드라인보다 더 긴 기입 커맨드들은 데이터의 일부로 완전한 워드라인을 프로그래밍하고 채울 수 있을 것이고, 워드라인을 넘는 초과 데이터는 다음 워드라인을 채우도록 사용될 것이다. 이러한 설명의 목적들을 위해, 기입 데이터 크기는 512 바이트의 NAND 위치와 동일하지만; 그러나, NAND 위치의 크기는 제한적인 것으로 의도되는 것은 아니다.
예를 들어, 제어기(408)는 제3 구역(406c)에 대한 제1 기입 커맨드, 또는 제1 구역 추가 커맨드를 수신할 수 있다. 호스트는 구역(406)의 어느 논리 블록에 제1 커맨드와 연관된 데이터를 기입할지를 순차적으로 식별한다. 이어서 제1 커맨드와 연관된 데이터는 기입 포인터(410)에 의해 지시된 바와 같은 제3 구역(406c) 내의 제1 또는 다음 이용가능 LBA(들)에 기입되고, 기입 포인터(410)는 호스트 기입을 위해 이용가능한 다음 이용가능 LBA를 가리키도록 전진되거나 업데이트된다(즉, WP>0). 제어기(408)가 제3 구역(406c)에 대한 제2 기입 커맨드 또는 제2 구역 추가 커맨드를 수신하면, 제2 기입 커맨드와 연관된 데이터는 기입 포인터(410)에 의해 식별된 제3 구역(406c) 내의 다음 이용가능 LBA(들)에 기입된다. 일단 제2 커맨드와 연관된 데이터가 제3 구역(406c)에 기입되면, 기입 포인터(410)는 호스트 기입을 위해 이용가능한 다음 이용가능 LBA를 가리키도록 다시 한 번 전진되거나 업데이트된다. 구역(406c)을 리셋하는 것은 기입 포인터(410)를 다시 ZcSLBA로 이동시키고(즉, WP=0), 구역(406c)은 비어 있는 구역으로 전환된다.
그러나, 엄격한 기입 순서는 호스트 기입들을 구역(406)당 단일 기입 I/O로 퇴보시킬 수 있으며, 이는 호스트 성능을 제한하고 호스트 오버헤드를 증가시킨다. 그렇기 때문에, 저장 디바이스(400)는 순차적 검사를 턴 오프하기 위한 제조 또는 판매사 특정 커맨드를 수신하도록 구성된다.
도 5a는 일 실시예에 따른, 구역 추가 커맨드들을 수신하는 동안 순차적 검사가 턴 오프되는 ZNS(500)를 예시한다. 도 5b는 ZNS(500)에 대해 검색된 기입 커맨드들의 대응하는 표(550)를 예시한다. 표(550)는 제어기 내에 또는 저장 디바이스의 메모리 디바이스 내에 저장될 수 있다. ZNS(500)는 도 4의 ZNS(402)일 수 있다. 도 5a의 ZNS(500)가 하나의 구역(506)을 포함하는 것으로 도시되어 있지만, ZNS(500)는 복수의 구역들(506)을 포함할 수 있다. 또한, ZNS(500)의 복수의 구역들의 각각의 구역(506)이 그 자신의 개별 표(550)를 가질 수 있거나, 또는 하나의 표(550)가 복수의 구역들의 각각의 구역(506)에 의해 검색된 기입 커맨드들 모두를 추적할 수 있다. 도 6a는 다른 실시예에 따른, 구역 추가 커맨드들을 수신하는 동안 순차적 검사가 턴 온되는 ZNS(600)를 예시한다. 도 6b는 ZNS(600)에 대해 검색된 기입 커맨드들의 대응하는 표(650)를 예시한다. ZNS(600)은 도 4의 ZNS(402)일 수 있다.
도 5a에서, 제1 기입 커맨드(write0)(520), 제2 기입 커맨드(522)(write1), 및 제3 기입 커맨드(524)(write2)가 수신되거나 DMA 판독되고, 구역(506)이 그의 ZSLBA에 의해 식별되어 제1, 제2, 및 제3 기입 커맨드들(520, 522, 524) 각각과 연관된 데이터를 저장한다. 기입 커맨드들(520, 522, 524)은 각각 새로운 데이터를 기입하기 위한 커맨드이거나, 가비지 컬렉션 목적으로 유효 데이터를 하나의 구역으로부터 다른 구역으로 이동시키기 위한 커맨드일 수 있다. 도 4a의 제어기(408)와 같은 제어기는 호스트 디바이스로부터의 새로운 커맨드들을 검색하도록 그리고 새로운 커맨드들과 연관된 데이터를 DMA 판독하도록 구성된다. 순차적으로, 제1 기입 커맨드(520)가 첫 번째로 기입되도록 의도되고, 제2 기입 커맨드(522)가 두 번째로 기입되도록 의도되고, 제3 기입 커맨드(524)가 세 번째로 기입되도록 의도된다. 구역(506)은 복수의 논리 블록들(5120 내지 5127)(집합적으로 논리 블록들(512)로 지칭됨)을 포함한다. 논리 블록들 각각은 표(550)에 도시된 LBA에 대응한다. 8개의 논리 블록들(512)이 도시되어 있지만, 구역(506)은 임의의 수의 논리 블록들(512)을 포함할 수 있다.
도 5b는 구역(506)에 의해 검색되는 기입 커맨드들을 추적하는 대응하는 표(550)를 예시한다. 표(550)는, 커맨드들의 기입 ID(즉, 커맨드들의 순차적 순서)를 식별하는 제1 열(column)(552), 시작 LBA를 식별하는 제2 열(554), 커맨드와 연관된 데이터를 기입하는 데 필요한 논리 블록들의 수 및 예상되는 시작 LBA를 식별하는 제3 열(556), 기입이 완료 큐에 로그인된 후에 기입 포인터(510)가 전진한 논리 블록들의 수를 식별하는 제4 열(558), ZSLBA로부터의 구역의 LBA 오프셋을 식별하는 제5 열(560), 및 데이터를 저장하는 데 사용되는 LBA와 연관된 NAND 어드레스의 물리적 위치를 식별하는 제6 열(562)을 포함한다. 3개의 기입 포인터들(5100, 5101, 5102)이 도시되어 있지만, 구역(506)은 하나의 기입 포인터(510)만을 포함하고, 3개의 기입 포인터들(5100, 5101, 5102)은, 후술되는 바와 같이 데이터가 상이한 시간에 구역(506)에 기입될 때의, 단일 기입 포인터(510)의 위치를 나타낸다.
각각의 기입 커맨드(520, 522, 524)는 순차적 순서가 아니라, 제출 순서로 표(550)에 디스플레이된다. 표(550)에서, 기입 ID 1에 의해 식별되는 제2 기입 커맨드(522)는 기입 ID 0에 의해 식별되는 제1 기입 커맨드(520) 이전에 수신된다. 제2 열(554)은 제2 기입 커맨드(522)에 대한 시작 LBA를 ZSLBA로서 식별하고, 제3 열(556)에서 식별된 바와 같이, 데이터를 저장하기 위해 2개의 논리 블록들(2 LBA)을 필요로 한다. 제1 기입 커맨드(520)가 구역(506)에 대한 제1 순차 기입일 것이라고 추정되고 하나의 논리 블록(1 LBA)만을 요구하기 때문에, 제3 열(556)은 제2 커맨드(522)에 대한 예상되는 시작 LBA를 구역(506)의 제2 논리 블록(5121)으로서 추가로 식별한다.
그러나, 제2 커맨드(522)가 제1 커맨드(520) 이전에 제출되었기 때문에, 제2 커맨드(522)는 기입 포인터(5100)가 나타내는 구역(506)의 제1 이용가능 논리 블록(5120)에서 시작한다. 표(550)가 단지 시작 LBA를 ZSLBA로서 나타내므로, 제2 커맨드(522)와 연관된 데이터는 기입 포인터(5100)가 나타내는 제1 이용가능 논리 블록(5120)에 기입된다. 제2 커맨드(522)와 연관된 데이터를 구역(506)의 제1 논리 블록(5120) 및 제2 논리 블록(5121)에 기입할 시에, 기입 포인터(510)는 2개의 논리 블록들을 전진하고, 제4 열(558)은 대응하여 업데이트된다. 표(550)의 제6 열(562)에 도시된 바와 같이, 제1 논리 블록(5120) 및 제2 논리 블록(5121)이 각각 제1 NAND 위치(NL0) 및 제2 NAND 위치(NL1)에 대응하므로, 제2 커맨드(522)와 연관된 데이터는 제1 및 제2 NAND 위치들(NL0, NL1) 내에 저장된다.
이어서, 저장 디바이스의 제어기는 ZSLBA로부터의 LBA 오프셋을 결정하고, 완료 엔트리가 구역(506)에 기입된 마지막 LBA로서 완료 큐로 반환된다. 기입 포인터(510)의 전진, 오프셋의 결정, 및 완료 엔트리의 완료 큐로의 반환은 동시에 또는 임의의 순서로 발생할 수 있다. 이어서, 제5 열(560)은 제2 커맨드(522)와 연관된 데이터가 구역(506)에 기입된 후에, LBA들이 ZSLBA로부터 2만큼 오프셋되는 것(ZSLBA+2)을 식별하도록 업데이트된다. 완료 엔트리를 완료 큐로 반환하는 것 및 제5 열(560)을 업데이트하는 것은 제2 커맨드와 연관된 데이터가 저장되는 곳을 호스트 디바이스에게 통지한다.
제1 기입 커맨드(520)는 제2 기입 커맨드(522) 이후에 제출되었다. 그렇기 때문에, 제1 커맨드(기입 ID 0)에 대한 제2 열(554)은 제1 기입 커맨드(520)에 대한 시작 LBA를 ZSLBA로서 식별하고, 제3 열(556)에서 식별된 바와 같이, 1개의 논리 블록(1 LBA)을 필요로 한다. 제1 기입 커맨드(520)와 연관된 데이터가 제3 열(556)에서 식별된 바와 같이, 제1 논리 블록(5120)에 기입될 것으로 추정되었지만, 제2 커맨드(기입 ID 1)에 대한 제5 열(560)에서 식별된 바와 같이, 제2 기입 커맨드(522)와 연관된 데이터는 제1 논리 블록(5120)에 이미 기입되어 있었다.
제어기는 제5 열(560) 내의 LBA 오프셋을 추적하고 이에 대응하여 기입 포인터(510)를 전진시키기 때문에, 제어기는 제1 논리 블록(5120)이 사용됨을 인정하고, 제1 커맨드(520)와 연관된 데이터를, 기입 포인터(5101)에 의해 나타낸 바와 같이, 다음 이용가능 논리 블록(5122)에 기입한다. 제1 커맨드(520)와 연관된 데이터를 구역(506)의 제3 논리 블록(5122)에 기입할 시에, 기입 포인터(510)는 1개의 논리 블록을 전진하고, 제4 열(558)은 대응하여 업데이트된다. 표(550)의 제6 열(562)에 도시된 바와 같이, 제3 논리 블록(5122)이 제3 NAND 위치(NL2)에 대응하므로, 제1 커맨드(520)와 연관된 데이터는 제3 NAND 위치(NL2)에 저장된다.
이어서, 저장 디바이스의 제어기는 ZSLBA로부터의 LBA 오프셋을 결정하고, 완료 엔트리가 구역(506)에 기입된 마지막 LBA로서 완료 큐로 반환된다. 기입 포인터(510)의 전진, 오프셋의 결정, 및 완료 엔트리의 완료 큐로의 반환은 동시에 또는 임의의 순서로 발생할 수 있다. 이어서, 제5 열(560)은 제1 및 제2 커맨드들(520, 522)과 연관된 데이터가 구역(506)에 기입된 후에, LBA들이 이제 ZSLBA로부터 3만큼 오프셋되는 것(ZSLBA+3)을 식별하도록 업데이트된다. 완료 엔트리를 완료 큐로 반환하는 것 및 제5 열(560)을 업데이트하는 것은 제1 커맨드와 연관된 데이터가 저장되는 곳을 호스트 디바이스에게 통지한다.
제3 커맨드(524)는 세 번째로 제출되었다. 제3 커맨드(524)(기입 ID 2)에 대해서, 표(550)는 제2 열(554)에서 ZSLBA로서 시작 LBA를 식별하고, 제3 열(556)에서 4개의 논리 블록들(4 LBA)이 요구됨을 식별한다. 제어기는 제3 커맨드(524)와 연관된 데이터를, 기입 포인터(5101)에 의해 나타낸 바와 같이, 다음 이용가능 논리 블록(5123)에 기입한다. 제3 커맨드(524)와 연관된 데이터를 제4 논리 블록(5123) 내지 제7 논리 블록(5126)에 기입할 시에, 기입 포인터(5102)는 4개의 논리 블록들을 전진하고, 제4 열(558)은 대응하여 업데이트된다. 표(550)의 제6 열(562)에 도시된 바와 같이, 제4 내지 제7 논리 블록들(5123 내지 5126)이 각각 제4 내지 제7 NAND 위치들(NL3 내지 NL6)에 대응하므로, 제3 커맨드(524)와 연관된 데이터는 제4 내지 제7 NAND 위치들(NL3 내지 NL6)에 저장된다.
이어서, 저장 디바이스의 제어기는 ZSLBA로부터의 LBA 오프셋을 결정하고, 완료 엔트리가 구역(506)에 기입된 마지막 LBA로서 완료 큐로 반환된다. 기입 포인터(510)의 전진, 오프셋의 결정, 및 완료 엔트리의 완료 큐로의 반환은 동시에 또는 임의의 순서로 발생할 수 있다. 이어서, 제5 열(560)은 제1, 제2, 및 제3 커맨드들(520, 522, 524)과 연관된 데이터가 구역(506)에 기입된 후에, LBA들이 이제 ZSLBA로부터 7만큼 오프셋되는 것(ZSLBA+7)을 식별하도록 업데이트된다. 완료 엔트리를 완료 큐로 반환하는 것 및 제5 열(560)을 업데이트하는 것은 제3 커맨드와 연관된 데이터가 저장되는 곳을 호스트 디바이스에게 통지한다.
대안적으로, 도 6a 및 도 6b는 순차적 검사가 턴 온되는 ZNS(600) 및 ZNS(600)에 대해 검색되는 기입 커맨드들의 대응하는 표(650)를 예시한다. 도 6a의 ZNS(600)가 하나의 구역(606)을 포함하는 것으로 도시되어 있지만, ZNS(600)는 복수의 구역들(606)을 포함할 수 있다. 또한, ZNS(600)의 복수의 구역들의 각각의 구역(606)이 그 자신의 개별 표(650)를 가질 수 있거나, 또는 하나의 표(650)가 복수의 구역들의 각각의 구역(606)에 의해 검색된 기입 커맨드들 모두를 추적할 수 있다.
도 6a에서, 제1 기입 커맨드(write0)(620), 제2 기입 커맨드(622)(write1), 및 제3 기입 커맨드(624)(write2)가 검색되거나 DMA 판독되고, 구역(606)이 그의 ZSLBA에 의해 식별되어 제1, 제2, 및 제3 기입 커맨드들(620, 622, 624) 각각과 연관된 데이터를 저장한다. 도 4a의 제어기(408)와 같은 제어기는, 호스트 디바이스로부터의 새로운 커맨드들을 DMA 판독하도록 구성된다. 순차적으로, 제1 기입 커맨드(620)가 첫 번째로 기입되도록 의도되고, 제2 기입 커맨드(622)가 두 번째로 기입되도록 의도되고, 제3 기입 커맨드(624)가 세 번째로 기입되도록 의도된다. 구역(606)은 복수의 논리 블록들(6120 내지 6127)(집합적으로 논리 블록들(612)로 지칭됨)을 포함한다. 논리 블록들 각각은 표(650)에 도시된 LBA에 대응한다. 8개의 논리 블록들(612)이 도시되어 있지만, 구역(606)은 임의의 수의 논리 블록들(612)을 포함할 수 있다.
도 6b는 구역(606)에 대해 검색되는 기입 커맨드들을 추적하는 대응하는 표(650)를 예시한다. 표(650)는, 커맨드들의 기입 ID를 식별하는 제1 열(652), 시작 LBA를 식별하는 제2 열(654), 커맨드와 연관된 데이터를 기입하는 데 필요한 논리 블록들의 수 및 시작 LBA를 식별하는 제3 열(656), 기입이 완료 큐에 로그인된 후에 기입 포인터(610)가 전진한 논리 블록들의 수를 식별하는 제4 열(658), 및 데이터를 저장하는 데 사용되는 LBA와 연관된 NAND 어드레스의 물리적 위치를 식별하는 제5 열(662)을 포함한다.
각각의 기입 커맨드(620, 622, 624)는 순차적 순서가 아니라, 제출 순서로 표(650)에 디스플레이된다. 표(650)에서, 기입 ID 1에 의해 식별된 제2 기입 커맨드(622)는 기입 ID 0에 의해 식별되는 제1 기입 커맨드(620) 이전에 수신된다. 제2 열(654)은 제2 기입 커맨드(622)에 대한 시작 LBA를 ZSLBA 뒤의 제2 논리 블록(ZSLBA+1)(즉, 제2 LBA(6121))으로서 식별하고, 제3 열(656)에서 식별된 바와 같이, 데이터를 저장하기 위해 2개의 논리 블록들(2 LBA)을 필요로 한다. 제1 기입 커맨드(620)가 구역(606)에 대한 제1 순차 기입일 것이라고 추정되고 데이터를 저장하기 위해 하나의 논리 블록(1 LBA)만을 요구하기 때문에, 제3 열(656)은 제2 커맨드(622)에 대한 시작 LBA를 구역(606)의 제2 LBA(6121)로서 추가로 식별한다.
제2 커맨드(622)가 제1 커맨드(620) 이전에 제출되었기 때문에, 제어기는 제1 커맨드(620)와 연관된 데이터 이전에 제2 커맨드(622)와 연관된 데이터를 기입하려고 시도한다. 그러나, 기입 포인터(610)는 제1 논리 블록 어드레스와 연관된 제1 논리 블록(6120)을 제1 이용가능 논리 블록으로서 나타내지만, 표(650)는 충돌적으로 제2 논리 블록(6121)을 제2 커맨드(622)에 대한 시작 논리 블록으로서 나타낸다. 기입 포인터(610) 및 표(650)가 제2 커맨드(622)에 대한 상이한 시작 LBA들을 나타내기 때문에, 제2 커맨드(622)와 연관된 데이터는 구역(606)에 기입될 수 없다.
도 7a 내지 도 7f는 일 실시예에 따른, 비순차적으로 그리고 구역 추가 커맨드들을 수신하지 않으면서 ZNS(700)의 구역(706)에 기입하는 것을 예시한다. ZNS(700)는 도 4의 저장 디바이스(400) 및 NVM(404)과 함께 이용될 수 있다. ZNS(700)는 도 4의 ZNS(402)일 수 있다. 하나의 구역(706)만이 ZNS(700)에 도시되어 있지만, ZNS(700)는 복수의 구역들을 포함할 수 있고, 후술되는 유사한 순서를 벗어난 기입 활동이 복수의 구역들 중 하나 이상에서 발생할 수 있다. 도 8은 구역(706)에 의해 검색되는 기입 커맨드들을 추적하는 예시적인 대응하는 표(800)를 예시한다. ZNS(700)의 복수의 구역들의 각각의 구역(706)이 그 자신의 개별 표(800)를 가질 수 있거나, 또는 하나의 표(800)가 복수의 구역들의 각각의 구역(706)에 의해 검색된 기입 커맨드들 모두를 추적할 수 있다. 표(800)는 제어기 내에, 저장 디바이스의 메모리 디바이스 내에, 및/또는 호스트 디바이스 내에 저장될 수 있다. 일 실시예에서, 저장 디바이스 및 호스트 디바이스 둘 모두는 개별적으로 표(800)를 저장한다.
전술된 바와 같이, 예시적인 NAND 위치들은 512 바이트의 입도와 동일하다. 따라서, MCL NAND의 2개의 페이지에 대한 512 바이트의 LBA 크기 및 16 kB의 페이지 크기는 워드라인당 약 16개의 NAND 위치를 야기한다. 그러나, 이 NAND 위치 크기는 제한적인 것으로 의도되지 않으며, 단지 예로서 사용된다. 추가적으로, NAND가 예로서 사용되지만, 다른 유형들의 메모리가 또한 사용될 수 있으며, NAND는 제한적인 것으로 의도되지 않는다.
도 7a는 구역(706)이 비어 있고 아무 데이터도 저장하고 있지 않다는 것을 예시한다(즉, 아직 구역(706)에 데이터를 기입하기 위해 어떠한 커맨드도 검색되지 않았음). 구역(706)은 비어 있는 상태 또는 활성 상태에 있을 수 있다. 구역(706)은 복수의 논리 블록들(7120 내지 7127)(집합적으로 논리 블록들(712)로 지칭됨)을 포함한다. 논리 블록들(712) 각각은 LBA 또는 섹터에 대응하고, 이는 도 8의 대응하는 표(800)에서 추적되어 있다. 8개의 논리 블록들(712)이 도시되어 있지만, 구역(706)은 임의의 수의 논리 블록들(712)을 포함할 수 있다. ZSLBA는 구역(706)의 시작 또는 제1 LBA를 나타내는 반면, ZSLBA + ZCAP는 구역(706)의 끝 또는 전체 용량(즉, 구역 용량)을 나타낸다.
도 4a의 제어기(408)와 같은 제어기는 호스트 디바이스로부터의 구역(706)에 대한 새로운 커맨드들을 검색하도록 그리고 새로운 커맨드들과 연관된 데이터를 DMA 판독하도록 구성된다. 이어서, 제어기는 커맨드와 연관된 데이터를 구역(706)의 하나 이상의 논리 블록들(712)에 기입할 수 있다. 기입 포인터가 다음의 순차적으로 이용가능한 논리 블록(712)을 식별하는 데 사용되기 때문에, 구역(706)은 기입 포인터를 이용하지 않는다. 또한, 상기 도 5a 및 도 5b에 기술된 바와 같이, 순차적 검사는 턴 오프되어 있다. 그러나, 제어기는, 구역 활성 상태의 현재 지속기간 동안 특정 LBA가 이미 기입되었는지 여부를 결정하기 위해 선택적인 안전 특징을 여전히 구현할 수 있다. 구역 활성 상태의 현재 지속기간 동안 특정 LBA가 이미 기입되었다면, 제어기는 LBA에 대한 제2 기입을 선택적으로 거절할 수 있다.
도 8은 구역(706)에 의해 수신되는 기입 커맨드들을 추적하는 대응하는 표(800)를 예시한다. 표(800)는 DRAM에 저장될 수 있다. 표(800)는, 커맨드들의 기입 ID(즉, 커맨드들의 순차적 순서)를 식별하는 제1 열(852), 시작 LBA를 식별하는 제2 열(854), 커맨드와 연관된 데이터를 기입하는 데 필요한 논리 블록들의 수 및 예상되는 시작 LBA를 식별하는 제3 열(856), 커맨드와 연관된 데이터를 저장하는 데 사용되는 LBA를, 기입하는데 이용가능하지 않은(즉, 가득 참) 것으로서 식별하는 제4 열(860), 및 데이터를 저장하는 데 사용되는 LBA와 연관된 NAND 어드레스의 물리적 위치를 식별하는 제5 열(862)을 포함한다.
도 7b는 구역(706)에 대한 제1 커맨드(730)가 호스트 디바이스로부터 검색되고, 제1 커맨드(730)와 연관된 데이터가 구역(706)의 제4 논리 블록(7123)에 기입된 후의 구역(706)을 예시한다. 호스트는 구역(706)의 어느 논리 블록(712)에 제1 커맨드(730)와 연관된 데이터를 기입할지를 식별한다. 호스트 디바이스는 ZSLBA와 ZSLBA+ZCAP 사이의 구역(706)의 임의의 이용가능 논리 블록(들)(712)을 선택할 수 있고, 선택은 순차적일 필요가 없다. 호스트 디바이스가 데이터를 저장할 구역(706)의 하나 이상의 논리 블록들(712)을 구체적으로 식별하므로, 기입 포인터는 이용될 필요가 없다.
이어서, 제어기는 제1 커맨드(730)를 검색하고, 제1 커맨드(730)와 연관된 데이터를 DMA 판독하고, 호스트 디바이스에 의해 식별된 선택된 논리 블록(712)(즉, 제4 논리 블록(7123))에 데이터를 기입한다. 제1 커맨드(730)와 연관된 데이터가 제4 논리 블록(7123)에 프로그래밍되는 동안, 제4 논리 블록(7123)과 연관된 NAND 어드레스는 저장 디바이스의 NVM 또는 NAND 내의 제1 이용가능 NAND 위치일 수 있다(즉, 대응하는 LBA 포인터는 NAND 내의 제1 이용가능 NL을 가리킴). 예를 들어, 제1 커맨드(730)의 데이터의 NAND 어드레스는 제1 NAND 위치(NL0)일 수 있다. 종래의 구역 추가 커맨드들에 의해, 제4 논리 블록(7123)은 NAND 내의 제4 NL(예컨대, 제4 NAND 위치(NL3))에 대응한다. 따라서, NAND 또는 NVM은, 구역(706)의 LBA들은 아니더라도, 순차적으로 프로그래밍된다. 이어서, 도 8의 표(800)가 업데이트되고, 완료 엔트리가 호스트 디바이스의 완료 큐로 반환되어, 제1 커맨드(730)와 연관된 데이터가 호스트 디바이스에 의해 식별된 선택된 논리 블록(7123)에 저장되었음을 호스트 디바이스에게 통지한다.
호스트 디바이스 및 저장 디바이스 둘 모두는 구역(706)의 어느 논리 블록들(712)이 데이터를 저장하는 데 사용되었는지를 개별적으로 추적할 수 있다. 일단 논리 블록(712)에 기입되었으면, 호스트 디바이스 및 저장 디바이스 둘 모두는, 구역(706)이 다시 한 번 비어 있는 상태로 되돌아갈 때까지, 기입된 논리 블록(들)(712)이 데이터를 더 저장하는 데 사용될 수 없거나 이용가능하지 않다는 것을 추적한다.
도 7c는 구역(706)에 대한 제2 커맨드(732)가 호스트 디바이스로부터 검색되고, 제2 커맨드(732)와 연관된 데이터가 구역(706)의 제7 논리 블록(7126)에 기입된 후의 구역(706)을 예시한다. 호스트는 구역(706)의 어느 논리 블록(712)에 제2 커맨드(732)와 연관된 데이터를 기입할지를 다시 식별한다. 호스트 디바이스는 제1 커맨드(730)와 연관된 상태를 이미 저장하고 있는 제4 논리 블록(7123)을 제외하고 ZSLBA와 ZSLBA+ZCAP 사이의, 구역(706)의 임의의 이용가능 논리 블록(들)(712)을 선택할 수 있다. 호스트 디바이스에 의한 논리 블록(712)의 선택은 순차적일 필요는 없다. 예를 들어, 제1 커맨드(730)와 연관된 데이터는 제4 논리 블록(7123)에 저장되는 반면, 제2 커맨드(732)와 연관된 데이터는 제7 논리 블록(7126)에 저장될 것이다.
이어서, 제어기는 제2 커맨드(732)를 검색하고, 제2 커맨드(732)와 연관된 데이터를 DMA 판독하고, 호스트 디바이스에 의해 식별된 선택된 논리 블록(712)(즉, 제7 논리 블록(7126))에 데이터를 기입한다. 제2 커맨드(732)와 연관된 데이터가 제7 논리 블록(7126)에 프로그래밍되는 동안, 제7 논리 블록(7126)과 연관된 NAND 어드레스는 저장 디바이스의 NVM 또는 NAND 내의 다음 이용가능 NL일 수 있다(즉, 대응하는 LBA 포인터는 NAND 내의 다음 이용가능 NL을 가리킴). 예를 들어, 제2 커맨드(732)의 데이터의 NAND 어드레스는 제2 NAND 위치(NL1)일 수 있다. 종래의 구역 추가 커맨드들에 의해, 제7 논리 블록(7126)은 NAND 내의 제7 NL(예컨대, 제7 NL6)에 대응한다. 따라서, NAND 또는 NVM은, 구역(706)의 LBA들은 아니더라도, 순차적으로 프로그래밍된다. 이어서, 도 8의 표(800)가 업데이트되고, 완료 엔트리가 호스트 디바이스의 완료 큐로 반환되어, 제2 커맨드(732)와 연관된 데이터가 호스트 디바이스에 의해 식별된 선택된 논리 블록(7126)에 저장되었음을 호스트 디바이스에게 통지한다.
도 7d는 구역(706)에 대한 제3 커맨드(734)가 호스트 디바이스로부터 검색되고, 제3 커맨드(734)와 연관된 데이터가 구역(706)의 제2 논리 블록(7121), 제3 논리 블록(7122), 및 제8 논리 블록(7127)에 기입된 후의 구역(706)을 예시한다. 호스트는 구역(706)의 어느 논리 블록(712)에 제3 커맨드(734)와 연관된 데이터를 기입할지를 다시 식별하는데, 이는 하나 초과의 논리 블록(712)을 요구한다. 호스트 디바이스는 각각 제1 및 제2 커맨드들(730, 732)과 연관된 상태를 이미 저장하고 있는 제4 논리 블록(7123) 및 제7 논리 블록(7126)을 제외하고 ZSLBA와 ZSLBA+ZCAP 사이의, 구역(706)의 임의의 이용가능 논리 블록들(712)을 선택할 수 있다. 호스트 디바이스에 의한 논리 블록들(712)의 선택은 순차적일 필요는 없다. 예를 들어, 제3 커맨드(734)와 연관된 데이터는 제2, 제3, 및 제8 논리 블록들(7121, 7122, 7127)에 저장될 것이다.
이어서, 제어기는 제3 커맨드(734)를 검색하고, 제3 커맨드(734)와 연관된 데이터를 DMA 판독하고, 호스트 디바이스에 의해 식별된 선택된 논리 블록들(712)(즉, 제2, 제3, 및 제8 논리 블록들(7121, 7122, 7127))에 데이터를 기입한다. 제3 커맨드(734)와 연관된 데이터가 제2, 제3, 및 제8 논리 블록들(7121, 7122, 7127)에 프로그래밍되는 동안, 제2, 제3, 및 제8 논리 블록들(7121, 7122, 7127)과 연관된 NAND 어드레스는 저장 디바이스의 NVM 또는 NAND 내의 다음 이용가능 NL들일 수 있다(즉, 대응하는 LBA 포인터는 NAND 내의 다음 이용가능 NL들을 가리킴). 예를 들어, 제3 커맨드(734)의 데이터의 NAND 어드레스는 제3, 제4, 제5 NAND 위치들(NL2, NL3, NL4)일 수 있다. 종래의 구역 추가 커맨드들에 의해, 제2, 제3, 및 제8 논리 블록들(7121, 7122, 7127)은 NAND 내의 제2, 제3, 및 제8 NL들(예컨대, 제2, 제3, 및 제8 NAND 위치들(NL1, NL2, NL7))에 각각 대응한다. 따라서, NAND 또는 NVM은, 구역(706)의 LBA들은 아니더라도, 순차적으로 프로그래밍된다. 이어서, 도 8의 표(800)가 업데이트되고, 완료 엔트리가 호스트 디바이스의 완료 큐로 반환되어, 제3 커맨드(734)와 연관된 데이터가 호스트 디바이스에 의해 식별된 선택된 논리 블록들(7121, 7122, 7127)에 저장되었음을 호스트 디바이스에게 통지한다.
도 7e는 구역(706)에 대한 제4 커맨드(736)가 호스트 디바이스로부터 검색되고, 제4 커맨드(736)와 연관된 데이터가 구역(706)의 제5 논리 블록(7124) 및 제6 논리 블록(7125)에 기입된 후의 구역(706)을 예시한다. 호스트는 구역(706)의 어느 논리 블록(712)에 제4 커맨드(736)와 연관된 데이터를 기입할지를 다시 식별하는데, 이는 하나 초과의 논리 블록(712)을 요구한다. 호스트 디바이스는 제1, 제2, 및 제3 커맨드들(730, 732, 734)과 연관된 상태를 이미 저장하고 있는 제2 내지 제4 논리 블록들(7121 내지 7123), 제7 논리 블록(7126), 및 제8 논리 블록(7127)을 제외하고 ZSLBA와 ZSLBA+ZCAP 사이의, 구역(706)의 임의의 이용가능 논리 블록들(712)을 선택할 수 있다. 호스트 디바이스에 의한 논리 블록들(712)의 선택은 순차적일 필요는 없지만; 그러나, 그렇게 선택된 경우, 호스트 디바이스는 순차적 논리 블록들을 선택할 수 있다. 예를 들어, 제4 커맨드(736)와 연관된 데이터는 제4, 및 제5 논리 블록들(7123, 7124)에 저장될 것이다.
이어서, 제어기는 제4 커맨드(736)를 검색하고, 제4 커맨드(736)와 연관된 데이터를 DMA 판독하고, 호스트 디바이스에 의해 식별된 선택된 논리 블록들(712)(즉, 제4 및 제5 논리 블록들(7123, 7124))에 데이터를 기입한다. 제4 커맨드(736)와 연관된 데이터가 제4 및 제5 논리 블록들(7123, 7124)에 프로그래밍되는 동안, 제4 및 제5 논리 블록들(7123, 7124)과 연관된 NAND 어드레스는 저장 디바이스의 NVM 또는 NAND 내의 다음 이용가능 NL들일 수 있다(즉, 대응하는 LBA 포인터는 NAND 내의 다음 이용가능 NL들을 가리킴). 예를 들어, 제4 커맨드(736)의 데이터의 NAND 어드레스는 제6 및 제7 NAND 위치들(NL5, NL6)일 수 있다. 종래의 구역 추가 커맨드들에 의해, 제4 및 제5 논리 블록들(7123, 7124)은 NAND 내의 제4 및 제5 NL들(예컨대, 제4 및 제5 NAND 위치들(NL3, NL4))에 각각 대응한다. 따라서, NAND 또는 NVM은, 구역(706)의 LBA들은 아니더라도, 순차적으로 프로그래밍된다. 이어서, 도 8의 표(800)가 업데이트되고, 완료 엔트리가 호스트 디바이스의 완료 큐로 반환되어, 제4 커맨드(736)와 연관된 데이터가 호스트 디바이스에 의해 식별된 선택된 논리 블록들(7123, 7124)에 저장되었음을 호스트 디바이스에게 통지한다.
도 7f는 구역(706)에 대한 제5 커맨드(738)가 호스트 디바이스로부터 검색되고, 제5 커맨드(738)와 연관된 데이터가 구역(706)의 제1 논리 블록(7120)에 기입된 후의 구역(706)을 예시한다. 호스트는 구역(706)의 어느 논리 블록(712)에 제5 커맨드(738)와 연관된 데이터를 기입할지를 다시 식별한다. 호스트 디바이스는 제1 내지 제4 커맨드들(730 내지 736)과 연관된 상태를 이미 저장하고 있는 제2 내지 제8 논리 블록들(7121 내지 7127)을 제외하고 ZSLBA와 ZSLBA+ZCAP 사이의, 구역(706)의 임의의 이용가능 논리 블록들(712)을 선택할 수 있다.
이어서, 제어기는 제5 커맨드(738)를 검색하고, 제5 커맨드(738)와 연관된 데이터를 DMA 판독하고, 호스트 디바이스에 의해 식별된 선택된 논리 블록들(712)(즉, 제1 논리 블록(7120))에 데이터를 기입한다. 제5 커맨드(738)와 연관된 데이터가 제1 논리 블록(7120)에 프로그래밍되는 동안, 제1 논리 블록(7120)과 연관된 NAND 어드레스는 저장 디바이스의 NVM 또는 NAND 내의 다음 이용가능 NL일 수 있다(즉, 대응하는 LBA 포인터는 NAND 내의 다음 이용가능 NL을 가리킴). 예를 들어, 제5 커맨드(738)의 데이터의 NAND 어드레스는 제8 NAND 위치(NL7)일 수 있다. 종래의 구역 추가 커맨드들에 의해, 제1 논리 블록(7120)은 NAND 내의 제1 NL(예컨대, 제1 NAND 위치(NL0))에 대응한다. 따라서, NAND 또는 NVM은, 구역(706)의 LBA들은 아니더라도, 순차적으로 프로그래밍된다. 이어서, 도 8의 표(800)가 업데이트되고, 완료 엔트리가 호스트 디바이스의 완료 큐로 반환되어, 제5 커맨드(738)와 연관된 데이터가 호스트 디바이스에 의해 식별된 선택된 논리 블록들(7120)에 저장되었음을 호스트 디바이스에게 통지한다.
제5 커맨드(738)와 연관된 데이터를 제1 논리 블록(7120)에 기입할 시에, 구역(706)은 가득 찬 상태에 있고, 구역(706)의 용량은 완전히 이용되고 있다. 가득 찬 구역은 데이터로 완전히 채워진, 그리고 더 이상 데이터를 기입할 이용가능 블록이 없는 구역이다. 가득 찬 구역들에 저장된 데이터의 판독 커맨드들은 여전히 실행될 수 있다. ZM은 가득 찬 구역을 리셋하여, 구역이 다시 비어 있는 구역으로 전환되도록 구역에 저장된 데이터의 소거를 스케줄링할 수 있다. 일단 구역(706)에서 데이터가 소거되고, 구역(706)이 소거 상태로 전환되고, 이어서 활성 상태로 전환되면, 호스트 디바이스는 전술된 방법에 따라 임의의 순서로 데이터를 기입할 구역(706)의 논리 블록들(712)을 선택할 수 있다. 호스트 디바이스는 전술된 바와 동일한 시퀀스로 구역(706)에 데이터를 기입하는 것으로 제한되지 않고, 임의의 이용가능 논리 블록(712)을 임의의 순서로 선택할 수 있다.
구역(706)을 소거할 시에, LBA 포인터들 모두는 NULL, 0x0000, 0xFFFF 등과 같은 물리적 위치를 의미하지 않는 디폴트 값을 가리킨다. 각각의 기입이 제어기에 의해 수신됨에 따라, 데이터가 다음 NAND 위치에 기입되는 동시에, 기존의 LBA 값을 검사하여 그것이 NULL을 가리키고 있었다는 것을 보장한다. 추적 표(800)에서 LBA 값이 NULL을 가리키고 있지 않은 경우, 제어기는 이것이, 구역 활성 상태에 걸친 이러한 지속기간 동안 LBA가 처음으로 기입된 것이 아니라고 결정한다. 호스트가 각각의 LBA를 단 한번만 기입하기 위한 새로운 규칙들을 준수하고 있지 않기 때문에, 기입은 선택적으로 거절될 수 있다. 기입의 거절 및 안전 특징은 저장 디바이스가 순차적 기입 트래픽을 유지할 수 있게 하고, 백그라운드 가비지 컬렉션 특징이 계속 턴 오프될 수 있음을 보장한다.
반대로, 종래의 방법들에서는, 일단 구역이 소거되면, 모든 LBA들은 NULL, 0x0000, 0xFFFF 등과 같은 센티넬(sentinel) 값을 가리킨다. 기입들이 순차적으로 구역을 채움에 따라, 기입되는 각각의 LBA는 데이터가 배치된 다음 NAND 위치를 가리킨다. 동시에, 현재 기입의 LBA는 그것이 마지막 기입 LBA에 대해 순차적인지만을 결정하기 위해 검사된다.
도 7 및 도 8에 기술된 바와 같이, 구역 추가 커맨드들을 사용하기보다, 구역으로의 비순차적 기입을 이용하는 것은, 저장 디바이스가 기입을 추적하지만 기입 포인터를 추적 및 업데이트할 필요가 없기 때문에, 저장 디바이스가 수행되는 작업의 양을 축소(cut-down)시키게 할 수 있다. 또한, 구역 추가 커맨드들과 달리, 호스트 디바이스는 데이터를 저장하기 위한 LBA를 결정하게 된다. 그렇기 때문에, 저장 디바이스 성능 및 호스트 성능 둘 모두가 증가되고, 저장 디바이스 오버헤드가 감소된다.
데이터를 저장하기 위한 LBA를 결정하게 되는 호스트 디바이스는 경합 조건들을 회피하기 위해 이러한 이점을 사용할 수 있다. 이는 호스트 측 애플리케이션들에서의 일부 기존의 구조들이 수정 없이 계속될 수 있게 한다. 예를 들어, 일부 호스트 측 애플리케이션들은 모든 이용가능 저장 LBA들을 알고 있는 하나의 엔티티(entity)를 갖고, 이러한 엔티티가 다른 호스트 애플리케이션들에 대한 기입 위치들을 관리할 것이다. 도 7 및 도 8에 기술된 바와 같이, 구역으로의 비순차적 기입을 이용하여, 호스트 내의 다른 애플리케이션들은 그들의 할당된 LBA들을 유지하고 그들의 할당된 LBA들을 나중에 소비하도록 허용된다. 그렇기 때문에, 구역들로의 비순차적 기입들의 위험이 존재하지 않는다. 저장 디바이스가 순차적 기입 검사를 턴 오프할 수 있기 때문에, 저장 디바이스의 내구성이 개선된다. 착신 데이터가 여전히 다음 이용가능 NAND 위치 상에 배치될 수 있기 때문에, 저장 디바이스의 내구성이 유지된다.
일 실시예에서, 저장 디바이스는 매체 유닛을 포함하고, 여기서 매체 유닛의 용량은 복수의 구역들로 분할되고, 각각의 구역은 복수의 논리 블록들을 포함하고, 제어기는 매체 유닛에 결합된다. 제어기는, 데이터를 제1 구역에 기입하기 위한 제1 커맨드를 검색하고 제1 커맨드와 연관된 데이터를 DMA 판독하도록, 제1 커맨드와 연관된 데이터를 기입하기 위한 제1 구역의 하나 이상의 제1 논리 블록들을 식별하도록 - 하나 이상의 제1 논리 블록들은 제1 구역의 구역 시작 논리 블록 어드레스와 제1 구역의 구역 용량 사이에 있음 -, 데이터를 제1 구역에 기입하기 위한 제2 커맨드를 검색하고 제2 커맨드와 연관된 데이터를 DMA 판독하도록, 그리고 제2 커맨드와 연관된 데이터를 기입하기 위한 제1 구역의 하나 이상의 제2 논리 블록들을 식별하도록 - 하나 이상의 제2 논리 블록들은 제1 구역의 구역 시작 논리 블록 어드레스와 제1 구역의 구역 용량 사이에 있고, 하나 이상의 제2 논리 블록들은 하나 이상의 비어 있는 논리 블록들에 의해 하나 이상의 제1 논리 블록들로부터 이격됨 - 구성된다.
제어기는, 데이터를 기입하기 위한 제2 커맨드를 검색하기 전에 제1 커맨드와 연관된 데이터를 기입하도록, 그리고 제1 구역의 하나 이상의 제2 논리 블록들을 식별한 후에 제2 커맨드와 연관된 데이터를 기입하도록 추가로 구성된다. 제어기는, 제1 커맨드와 연관된 데이터를 기입한 후에 제1 완료 엔트리를 호스트 디바이스의 완료 큐에 반환하도록, 그리고 제2 커맨드와 연관된 데이터를 기입한 후에 제2 완료 엔트리를 호스트 디바이스의 완료 큐에 반환하도록 추가로 구성된다. 제어기는, 제1 완료 엔트리를 반환한 후에 하나 이상의 제1 논리 블록들이 후속 커맨드들과 연관된 데이터를 기입하는 데 이용가능하지 않음을 나타내기 위해 제1 커맨드와 연관된 데이터를 기입한 후에 하나 이상의 추적 표들을 업데이트하도록, 그리고 제2 완료 엔트리를 반환한 후에 하나 이상의 제2 논리 블록들이 후속 커맨드들과 연관된 데이터를 기입하는 데 이용가능하지 않음을 나타내기 위해 제2 커맨드와 연관된 데이터를 기입한 후에 하나 이상의 추적 표들을 업데이트하도록 추가로 구성된다.
하나 이상의 추적 표들은 저장 디바이스에 저장된 제1 추적 표 및 호스트 디바이스에 저장된 제2 추적 표를 포함한다. 호스트 디바이스는 제2 추적 표를 사용하여 제2 커맨드와 연관된 데이터를 저장하기 위한 하나 이상의 제2 블록들을 선택한다. 호스트 디바이스는 제1 커맨드와 연관된 데이터를 저장하기 위한 하나 이상의 제1 블록들을 선택한다.
다른 실시예에서, 저장 디바이스는 매체 유닛을 포함하고, 여기서 매체 유닛의 용량은 복수의 구역들로 분할되고, 각각의 구역은 복수의 논리 블록들을 포함하고, 제어기는 매체 유닛에 결합된다. 제어기는, 데이터를 제1 구역 내의 하나 이상의 제1 논리 블록들에 기입하기 위한 제1 커맨드를 검색하도록 - 하나 이상의 제1 논리 블록들은 제1 구역의 구역 시작 논리 블록 어드레스와 제1 구역의 구역 용량 사이에 있음 -, 제1 커맨드와 연관된 데이터를 제1 구역의 하나 이상의 제1 논리 블록들에 그리고 매체 유닛 내의 제1 위치에 기입하도록, 데이터를 제1 구역 내의 하나 이상의 제2 논리 블록들에 기입하기 위한 제2 커맨드를 검색하도록 - 하나 이상의 제2 논리 블록들은 제1 구역의 구역 시작 논리 블록 어드레스와 제1 구역의 구역 용량 사이에 있고, 하나 이상의 제2 논리 블록들은 하나 이상의 제1 논리 블록들에 대해 비순차적임 -, 그리고 제2 커맨드와 연관된 데이터를 제1 구역의 하나 이상의 제2 논리 블록들에 그리고 매체 유닛 내의 제2 위치에 기입하도록 - 제2 위치는 제1 위치에 대해 순차적으로 위치되어 있음 - 구성된다.
제어기는, 데이터를 제1 구역 내의 하나 이상의 제3 논리 블록들에 기입하기 위한 제3 커맨드를 검색하도록 - 하나 이상의 제3 논리 블록들은 제1 구역의 구역 시작 논리 블록 어드레스와 제1 구역의 구역 용량 사이에 있고, 하나 이상의 제3 논리 블록들은 하나 이상의 제2 논리 블록들에 대해 비순차적임 -, 그리고 제3 커맨드와 연관된 데이터를 제1 구역의 하나 이상의 제3 논리 블록들에 그리고 매체 유닛 내의 제3 위치에 기입하도록 - 제3 위치는 제2 위치에 대해 순차적으로 위치되어 있음 - 추가로 구성된다. 제2 커맨드와 연관된 데이터는 2개 이상의 제2 논리 블록들에 기입되고, 2개 이상의 제2 논리 블록들은 서로 비순차적이다. 호스트 디바이스는 제1 커맨드와 연관된 데이터를 저장하기 위한 하나 이상의 제1 블록들 및 제2 커맨드와 연관된 데이터를 저장하기 위한 하나 이상의 제2 논리 블록들을 선택한다.
제어기는, 제1 커맨드와 연관된 데이터를 기입한 후에 제1 완료 엔트리를 호스트 디바이스의 완료 큐에 반환하도록, 그리고 하나 이상의 제1 논리 블록들이 후속 커맨드들과 연관된 데이터를 기입하는 데 이용가능하지 않음을 나타내기 위해 제1 커맨드와 연관된 데이터를 기입한 후에 하나 이상의 추적 표들을 업데이트하도록 추가로 구성된다. 하나 이상의 추적 표들 중 적어도 하나는 저장 디바이스의 매체 유닛에 저장된다.
또 다른 실시예에서, 저장 시스템은 호스트 디바이스를 포함하고, 호스트 디바이스는 제1 추적 표 및 저장 시스템을 포함한다. 저장 시스템은 매체 유닛을 포함하고, 여기서 매체 유닛의 용량은 복수의 구역들로 분할되고, 각각의 구역은 복수의 논리 블록들을 포함하고, 여기서 매체 유닛은 제2 추적 표를 저장하고 제어기는 매체 유닛에 결합된다. 제어기는, 데이터를 제1 구역 내의 하나 이상의 제1 논리 블록들에 기입하기 위한 제1 커맨드를 검색하고 제1 커맨드와 연관된 데이터를 DMA 판독하도록 - 하나 이상의 제1 논리 블록들은 제1 구역의 구역 시작 논리 블록 어드레스와 제1 구역의 구역 용량 사이에 있음 -, 제1 커맨드와 연관된 데이터를 제1 구역의 하나 이상의 제1 논리 블록들에 기입하도록, 하나 이상의 제1 논리 블록들이 후속 커맨드들과 연관된 데이터를 기입하는 데 이용가능하지 않음을 나타내기 위해 제1 및 제2 추적 표들을 업데이트하도록, 데이터를 제1 구역 내의 하나 이상의 제2 논리 블록들에 기입하기 위한 제2 커맨드를 검색하고 제2 커맨드와 연관된 데이터를 DMA 판독하도록 - 하나 이상의 제2 논리 블록들은 제1 구역의 구역 시작 논리 블록 어드레스와 제1 구역의 구역 용량 사이에 있고, 하나 이상의 제2 논리 블록들 중 적어도 하나는 하나 이상의 제1 논리 블록들에 대해 비순차적임 -, 제2 커맨드와 연관된 데이터를 제1 구역의 하나 이상의 제2 논리 블록들에 기입하도록, 그리고 하나 이상의 제2 논리 블록들이 후속 커맨드들과 연관된 데이터를 기입하는 데 이용가능하지 않음을 나타내기 위해 제1 및 제2 추적 표들을 업데이트하도록 구성된다.
제어기는, 데이터를 제1 구역 내의 하나 이상의 제3 논리 블록들에 기입하기 위한 제3 커맨드를 검색하고 제3 커맨드와 연관된 데이터를 DMA 판독하도록 - 하나 이상의 제3 논리 블록들은 제1 구역의 구역 시작 논리 블록 어드레스와 제1 구역의 구역 용량 사이에 있고, 하나 이상의 제3 논리 블록들은 적어도 하나 이상의 제2 논리 블록들에 대해 비순차적임 -, 제3 커맨드와 연관된 데이터를 제1 구역의 하나 이상의 제3 논리 블록들에 기입하도록, 그리고 하나 이상의 제3 논리 블록들이 후속 커맨드들과 연관된 데이터를 기입하는 데 이용가능하지 않음을 나타내기 위해 제1 및 제2 추적 표들을 업데이트하도록 추가로 구성된다. 제어기는, 데이터를 제1 구역 내의 2개 이상의 제3 논리 블록들에 기입하기 위한 제3 커맨드를 검색하고 제3 커맨드와 연관된 데이터를 DMA 판독하도록 - 2개 이상의 제3 논리 블록들은 제1 구역의 구역 시작 논리 블록 어드레스와 제1 구역의 구역 용량 사이에 있고, 2개 이상의 제3 논리 블록들 중 적어도 하나는 하나 이상의 제1 논리 블록들과 하나 이상의 제2 논리 블록들 사이에 배치됨 -, 제3 커맨드와 연관된 데이터를 제1 구역의 2개 이상의 제3 논리 블록들에 기입하도록, 그리고 2개 이상의 제3 논리 블록들이 후속 커맨드들과 연관된 데이터를 기입하는 데 이용가능하지 않음을 나타내기 위해 제1 및 제2 추적 표들을 업데이트하도록 추가로 구성된다.
제어기는, 데이터를 제1 구역 내의 2개 이상의 제3 논리 블록들에 기입하기 위한 제3 커맨드를 검색하고 제3 커맨드와 연관된 데이터를 DMA 판독하도록 - 2개 이상의 제3 논리 블록들은 제1 구역의 구역 시작 논리 블록 어드레스와 제1 구역의 구역 용량 사이에 있고, 2개 이상의 제3 논리 블록들 중 적어도 하나는 하나 이상의 제1 논리 블록들 또는 하나 이상의 제2 논리 블록들 앞에 순차적으로 위치됨 -, 제3 커맨드와 연관된 데이터를 제1 구역의 2개 이상의 제3 논리 블록들에 기입하도록, 그리고 2개 이상의 제3 논리 블록들이 후속 커맨드들과 연관된 데이터를 기입하는 데 이용가능하지 않음을 나타내기 위해 제1 및 제2 추적 표들을 업데이트하도록 추가로 구성된다. 호스트 디바이스는 제1 추적 표에 기초하여, 제1 커맨드와 연관된 데이터를 저장하기 위한 하나 이상의 제1 블록들 및 제2 커맨드와 연관된 데이터를 저장하기 위한 하나 이상의 제2 논리 블록들을 선택한다.
제어기는 제1 커맨드와 연관된 데이터를 기입한 후에, 제1 완료 엔트리를 호스트 디바이스의 완료 큐에 반환하도록 추가로 구성되고, 호스트 디바이스는 제1 완료 엔트리를 수신한 후에 제1 추적 표를 업데이트한다. 제2 커맨드와 연관된 데이터는 2개 이상의 제2 논리 블록들에 기입되고, 2개 이상의 제2 논리 블록들은 하나 이상의 비어 있는 논리 블록들 또는 더 많은 제1 논리 블록들에 의해 서로 이격된다.
전술한 것은 본 발명의 실시예들에 관한 것이지만, 본 발명의 다른 및 추가 실시예들이 본 발명의 기본 범주로부터 벗어남이 없이 고안될 수 있으며, 본 발명의 그 범주는 후속하는 청구범위에 의해 결정된다.

Claims (20)

  1. 저장 디바이스로서,
    매체 유닛 - 상기 매체 유닛의 용량은 복수의 구역(zone)들로 분할되고, 각각의 구역은 복수의 논리 블록들을 포함함 -; 및
    상기 매체 유닛에 결합된 제어기(controller)를 포함하며, 상기 제어기는,
    데이터를 제1 구역에 기입하기 위한 제1 커맨드를 검색하고 상기 제1 커맨드와 연관된 데이터를 직접 메모리 액세스(direct memory access, DMA) 판독하도록;
    상기 제1 커맨드와 연관된 상기 데이터를 기입하기 위한 상기 제1 구역의 하나 이상의 제1 논리 블록들을 식별하도록 - 상기 하나 이상의 제1 논리 블록들은 상기 제1 구역의 구역 시작 논리 블록 어드레스와 상기 제1 구역의 구역 용량 사이에 있음 -;
    데이터를 상기 제1 구역에 기입하기 위한 제2 커맨드를 검색하고 상기 제2 커맨드와 연관된 데이터를 DMA 판독하도록; 그리고
    상기 제2 커맨드와 연관된 상기 데이터를 기입하기 위한 상기 제1 구역의 하나 이상의 제2 논리 블록들을 식별하도록 - 상기 하나 이상의 제2 논리 블록들은 상기 제1 구역의 구역 시작 논리 블록 어드레스와 상기 제1 구역의 구역 용량 사이에 있고, 상기 하나 이상의 제2 논리 블록들은 하나 이상의 비어 있는 논리 블록들에 의해 상기 하나 이상의 제1 논리 블록들로부터 이격됨 - 구성되는, 저장 디바이스.
  2. 제1항에 있어서, 상기 제어기는,
    데이터를 기입하기 위한 상기 제2 커맨드를 검색하기 전에 상기 제1 커맨드와 연관된 상기 데이터를 기입하도록; 그리고
    상기 제1 구역의 하나 이상의 제2 논리 블록들을 식별한 후에 상기 제2 커맨드와 연관된 상기 데이터를 기입하도록 추가로 구성되는, 저장 디바이스.
  3. 제2항에 있어서, 상기 제어기는,
    상기 제1 커맨드와 연관된 상기 데이터를 기입한 후에 제1 완료 엔트리(completion entry)를 호스트 디바이스의 완료 큐(queue)에 반환하도록; 그리고
    상기 제2 커맨드와 연관된 상기 데이터를 기입한 후에 제2 완료 엔트리를 상기 호스트 디바이스의 완료 큐에 반환하도록 추가로 구성되는, 저장 디바이스.
  4. 제3항에 있어서, 상기 제어기는,
    상기 제1 완료 엔트리를 반환한 후에 상기 하나 이상의 제1 논리 블록들이 후속 커맨드들과 연관된 데이터를 기입하는 데 이용가능하지 않음을 나타내도록 상기 제1 커맨드와 연관된 상기 데이터를 기입한 후에 하나 이상의 추적 표들을 업데이트하도록; 그리고
    상기 제2 완료 엔트리를 반환한 후에 상기 하나 이상의 제2 논리 블록들이 후속 커맨드들과 연관된 데이터를 기입하는 데 이용가능하지 않음을 나타내도록 상기 제2 커맨드와 연관된 상기 데이터를 기입한 후에 상기 하나 이상의 추적 표들을 업데이트하도록 추가로 구성되는, 저장 디바이스.
  5. 제4항에 있어서, 상기 하나 이상의 추적 표들은 상기 저장 디바이스에 저장된 제1 추적 표 및 상기 호스트 디바이스에 저장된 제2 추적 표를 포함하는, 저장 디바이스.
  6. 제5항에 있어서, 상기 호스트 디바이스는 상기 제2 추적 표를 사용하여 상기 제2 커맨드와 연관된 상기 데이터를 저장하기 위한 상기 하나 이상의 제2 블록들을 선택하는, 저장 디바이스.
  7. 제1항에 있어서, 호스트 디바이스는 상기 제1 커맨드와 연관된 상기 데이터를 저장하기 위한 상기 하나 이상의 제1 블록들을 선택하는, 저장 디바이스.
  8. 저장 디바이스로서,
    매체 유닛 - 상기 매체 유닛의 용량은 복수의 구역들로 분할되고, 각각의 구역은 복수의 논리 블록들을 포함함 -; 및
    상기 매체 유닛에 결합된 제어기를 포함하며, 상기 제어기는,
    데이터를 제1 구역 내의 하나 이상의 제1 논리 블록들에 기입하기 위한 제1 커맨드를 검색하도록 - 상기 하나 이상의 제1 논리 블록들은 상기 제1 구역의 구역 시작 논리 블록 어드레스와 상기 제1 구역의 구역 용량 사이에 있음 -;
    상기 제1 커맨드와 연관된 상기 데이터를 상기 제1 구역의 하나 이상의 제1 논리 블록들에 그리고 상기 매체 유닛 내의 제1 위치에 기입하도록;
    데이터를 상기 제1 구역 내의 하나 이상의 제2 논리 블록들에 기입하기 위한 제2 커맨드를 검색하도록 - 상기 하나 이상의 제2 논리 블록들은 상기 제1 구역의 구역 시작 논리 블록 어드레스와 상기 제1 구역의 구역 용량 사이에 있고, 상기 하나 이상의 제2 논리 블록들은 상기 제1 하나 이상의 논리 블록들에 대해 비순차적임 -; 그리고
    상기 제2 커맨드와 연관된 상기 데이터를 상기 제1 구역의 하나 이상의 제2 논리 블록들에 그리고 상기 매체 유닛 내의 제2 위치에 기입하도록 - 상기 제2 위치는 상기 제1 위치에 대해 순차적으로 위치되어 있음 - 구성되는, 저장 디바이스.
  9. 제8항에 있어서, 상기 제어기는,
    데이터를 상기 제1 구역 내의 하나 이상의 제3 논리 블록들에 기입하기 위한 제3 커맨드를 검색하도록 - 상기 하나 이상의 제3 논리 블록들은 상기 제1 구역의 구역 시작 논리 블록 어드레스와 상기 제1 구역의 구역 용량 사이에 있고, 상기 하나 이상의 제3 논리 블록들은 상기 하나 이상의 제2 논리 블록들에 대해 비순차적임 -; 그리고
    상기 제3 커맨드와 연관된 상기 데이터를 상기 제1 구역의 하나 이상의 제3 논리 블록들에 그리고 상기 매체 유닛 내의 제3 위치에 기입하도록 - 상기 제3 위치는 상기 제2 위치에 대해 순차적으로 위치되어 있음 - 추가로 구성되는, 저장 디바이스.
  10. 제8항에 있어서, 상기 제2 커맨드와 연관된 상기 데이터는 2개 이상의 제2 논리 블록들에 기입되고, 상기 2개 이상의 제2 논리 블록들은 서로 비순차적인, 저장 디바이스.
  11. 제8항에 있어서, 호스트 디바이스는 상기 제1 커맨드와 연관된 상기 데이터를 저장하기 위한 상기 하나 이상의 제1 블록들 및 상기 제2 커맨드와 연관된 상기 데이터를 저장하기 위한 상기 하나 이상의 제2 논리 블록들을 선택하는, 저장 디바이스.
  12. 제8항에 있어서, 상기 제어기는,
    상기 제1 커맨드와 연관된 상기 데이터를 기입한 후에 제1 완료 엔트리를 호스트 디바이스의 완료 큐에 반환하도록; 그리고
    상기 하나 이상의 제1 논리 블록들이 후속 커맨드들과 연관된 데이터를 기입하는 데 이용가능하지 않음을 나타내도록 상기 제1 커맨드와 연관된 상기 데이터를 기입한 후에 하나 이상의 추적 표들을 업데이트하도록 추가로 구성되는, 저장 디바이스.
  13. 제12항에 있어서, 상기 하나 이상의 추적 표들 중 적어도 하나는 상기 저장 디바이스의 매체 유닛에 저장되는, 저장 디바이스.
  14. 저장 시스템으로서,
    호스트 디바이스를 포함하고, 상기 호스트 디바이스는 제1 추적 표; 및 저장 시스템을 포함하고, 상기 저장 시스템은,
    매체 유닛 - 상기 매체 유닛의 용량은 복수의 구역들로 분할되고, 각각의 구역은 복수의 논리 블록들을 포함하고, 상기 매체 유닛은 제2 추적 표를 저장함 -; 및
    상기 매체 유닛에 결합된 제어기를 포함하며, 상기 제어기는,
    데이터를 제1 구역 내의 하나 이상의 제1 논리 블록들에 기입하기 위한 제1 커맨드를 검색하고 상기 제1 커맨드와 연관된 데이터를 DMA 판독하도록 - 상기 하나 이상의 제1 논리 블록들은 상기 제1 구역의 구역 시작 논리 블록 어드레스와 상기 제1 구역의 구역 용량 사이에 있음 -;
    상기 제1 커맨드와 연관된 상기 데이터를 상기 제1 구역의 하나 이상의 제1 논리 블록들에 기입하도록;
    상기 하나 이상의 제1 논리 블록들이 후속 커맨드들과 연관된 데이터를 기입하는 데 이용가능하지 않음을 나타내기 위해 상기 제1 및 제2 추적 표들을 업데이트하도록;
    데이터를 상기 제1 구역 내의 하나 이상의 제2 논리 블록들에 기입하기 위한 제2 커맨드를 검색하고 상기 제2 커맨드와 연관된 데이터를 DMA 판독하도록 - 상기 하나 이상의 제2 논리 블록들은 상기 제1 구역의 구역 시작 논리 블록 어드레스와 상기 제1 구역의 구역 용량 사이에 있고, 상기 하나 이상의 제2 논리 블록들 중 적어도 하나는 상기 하나 이상의 제1 논리 블록들에 대해 비순차적임 -;
    상기 제2 커맨드와 연관된 상기 데이터를 상기 제1 구역의 하나 이상의 제2 논리 블록들에 기입하도록; 그리고
    상기 하나 이상의 제2 논리 블록들이 후속 커맨드들과 연관된 데이터를 기입하는 데 이용가능하지 않음을 나타내기 위해 상기 제1 및 제2 추적 표들을 업데이트하도록 구성되는, 저장 시스템.
  15. 제14항에 있어서, 상기 제어기는,
    데이터를 상기 제1 구역 내의 하나 이상의 제3 논리 블록들에 기입하기 위한 제3 커맨드를 검색하고 상기 제3 커맨드와 연관된 데이터를 DMA 판독하도록 - 상기 하나 이상의 제3 논리 블록들은 상기 제1 구역의 구역 시작 논리 블록 어드레스와 상기 제1 구역의 구역 용량 사이에 있고, 상기 하나 이상의 제3 논리 블록들은 적어도 상기 하나 이상의 제2 논리 블록들에 대해 비순차적임 -;
    상기 제3 커맨드와 연관된 상기 데이터를 상기 제1 구역의 하나 이상의 제3 논리 블록들에 기입하도록; 그리고
    상기 하나 이상의 제3 논리 블록들이 후속 커맨드들과 연관된 데이터를 기입하는 데 이용가능하지 않음을 나타내기 위해 상기 제1 및 제2 추적 표들을 업데이트하도록 추가로 구성되는, 저장 시스템.
  16. 제14항에 있어서, 상기 제어기는,
    데이터를 상기 제1 구역 내의 2개 이상의 제3 논리 블록들에 기입하기 위한 제3 커맨드를 검색하고 상기 제3 커맨드와 연관된 데이터를 DMA 판독하도록 - 상기 2개 이상의 제3 논리 블록들은 상기 제1 구역의 구역 시작 논리 블록 어드레스와 상기 제1 구역의 구역 용량 사이에 있고, 상기 2개 이상의 제3 논리 블록들 중 적어도 하나는 상기 하나 이상의 제1 논리 블록들과 상기 하나 이상의 제2 논리 블록들 사이에 배치됨 -;
    상기 제3 커맨드와 연관된 상기 데이터를 상기 제1 구역의 2개 이상의 제3 논리 블록들에 기입하도록; 그리고
    상기 2개 이상의 제3 논리 블록들이 후속 커맨드들과 연관된 데이터를 기입하는 데 이용가능하지 않음을 나타내기 위해 상기 제1 및 제2 추적 표들을 업데이트하도록 추가로 구성되는, 저장 시스템.
  17. 제14항에 있어서, 상기 제어기는,
    데이터를 상기 제1 구역 내의 2개 이상의 제3 논리 블록들에 기입하기 위한 제3 커맨드를 검색하고 상기 제3 커맨드와 연관된 데이터를 DMA 판독하도록 - 상기 2개 이상의 제3 논리 블록들은 상기 제1 구역의 구역 시작 논리 블록 어드레스와 상기 제1 구역의 구역 용량 사이에 있고, 상기 2개 이상의 제3 논리 블록들 중 적어도 하나는 상기 하나 이상의 제1 논리 블록들 또는 상기 하나 이상의 제2 논리 블록들 앞에 순차적으로 위치됨 -;
    상기 제3 커맨드와 연관된 상기 데이터를 상기 제1 구역의 2개 이상의 제3 논리 블록들에 기입하도록; 그리고
    상기 2개 이상의 제3 논리 블록들이 후속 커맨드들과 연관된 데이터를 기입하는 데 이용가능하지 않음을 나타내기 위해 상기 제1 및 제2 추적 표들을 업데이트하도록 추가로 구성되는, 저장 시스템.
  18. 제14항에 있어서, 상기 호스트 디바이스는 상기 제1 추적 표에 기초하여, 상기 제1 커맨드와 연관된 상기 데이터를 저장하기 위한 상기 하나 이상의 제1 블록들 및 상기 제2 커맨드와 연관된 상기 데이터를 저장하기 위한 상기 하나 이상의 제2 논리 블록들을 선택하는, 저장 시스템.
  19. 제18항에 있어서, 상기 제어기는 상기 제1 커맨드와 연관된 상기 데이터를 기입한 후에, 제1 완료 엔트리를 상기 호스트 디바이스의 완료 큐에 반환하도록 추가로 구성되고, 상기 호스트 디바이스는 상기 제1 완료 엔트리를 수신한 후에 상기 제1 추적 표를 업데이트하는, 저장 시스템.
  20. 제14항에 있어서, 상기 제2 커맨드와 연관된 상기 데이터는 2개 이상의 제2 논리 블록들에 기입되고, 상기 2개 이상의 제2 논리 블록들은 하나 이상의 비어 있는 논리 블록들 또는 더 많은 제1 논리 블록들에 의해 서로 이격되는, 저장 시스템.
KR1020217016550A 2019-09-12 2020-03-17 비순차적 구역 네임스페이스들 KR102569783B1 (ko)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US201962899717P 2019-09-12 2019-09-12
US62/899,717 2019-09-12
US16/703,643 2019-12-04
US16/703,643 US11294827B2 (en) 2019-09-12 2019-12-04 Non-sequential zoned namespaces
PCT/US2020/023171 WO2021050107A1 (en) 2019-09-12 2020-03-17 Non-sequential zoned namespaces

Publications (2)

Publication Number Publication Date
KR20210076143A true KR20210076143A (ko) 2021-06-23
KR102569783B1 KR102569783B1 (ko) 2023-08-22

Family

ID=74865996

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020217016550A KR102569783B1 (ko) 2019-09-12 2020-03-17 비순차적 구역 네임스페이스들

Country Status (5)

Country Link
US (1) US11294827B2 (ko)
KR (1) KR102569783B1 (ko)
CN (1) CN113179658A (ko)
DE (1) DE112020000139T5 (ko)
WO (1) WO2021050107A1 (ko)

Families Citing this family (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11593258B2 (en) 2019-11-26 2023-02-28 Micron Technology, Inc. Enhanced filesystem support for zone namespace memory
KR20210108107A (ko) * 2020-02-25 2021-09-02 에스케이하이닉스 주식회사 메모리 시스템 및 그것의 동작방법
US11860791B2 (en) * 2020-04-24 2024-01-02 Netapp, Inc. Methods for managing input-output operations in zone translation layer architecture and devices thereof
US11789611B2 (en) * 2020-04-24 2023-10-17 Netapp, Inc. Methods for handling input-output operations in zoned storage systems and devices thereof
KR20220058224A (ko) * 2020-10-30 2022-05-09 에스케이하이닉스 주식회사 메모리 시스템 및 이에 포함된 메모리 컨트롤러의 동작 방법
KR20220104511A (ko) * 2021-01-18 2022-07-26 에스케이하이닉스 주식회사 컨트롤러 및 이를 포함하는 메모리 시스템
US11340987B1 (en) 2021-03-04 2022-05-24 Netapp, Inc. Methods and systems for raid protection in zoned solid-state drives
US11797377B2 (en) 2021-10-05 2023-10-24 Netapp, Inc. Efficient parity determination in zoned solid-state drives of a storage system
US11803329B2 (en) * 2021-11-22 2023-10-31 Netapp, Inc. Methods and systems for processing write requests in a storage system
CN114138193B (zh) * 2021-11-25 2024-03-26 郑州云海信息技术有限公司 一种分区命名空间固态硬盘的数据写入方法、装置及设备
US11861231B2 (en) 2021-12-16 2024-01-02 Netapp, Inc. Scalable solid-state storage system and methods thereof
US11995316B2 (en) 2022-06-15 2024-05-28 Samsung Electronics Co., Ltd. Systems and methods for a redundant array of independent disks (RAID) using a decoder in cache coherent interconnect storage devices
US20240111456A1 (en) * 2022-10-02 2024-04-04 Silicon Motion, Inc. Storage device controller and method capable of allowing incoming out-of-sequence write command signals

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20080235489A1 (en) * 2007-03-19 2008-09-25 Sergey Anatolievich Gorobets Systems for forcing an update block to remain sequential
US20190102291A1 (en) * 2017-09-29 2019-04-04 Shannon Systems Ltd. Data storage device and method for operating non-volatile memory

Family Cites Families (19)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7526599B2 (en) 2002-10-28 2009-04-28 Sandisk Corporation Method and apparatus for effectively enabling an out of sequence write process within a non-volatile memory system
US8112574B2 (en) 2004-02-26 2012-02-07 Super Talent Electronics, Inc. Swappable sets of partial-mapping tables in a flash-memory system with a command queue for combining flash writes
US8504798B2 (en) 2003-12-30 2013-08-06 Sandisk Technologies Inc. Management of non-volatile memory systems having large erase blocks
US7139864B2 (en) 2003-12-30 2006-11-21 Sandisk Corporation Non-volatile memory and method with block management system
US8607016B2 (en) * 2004-07-21 2013-12-10 Sandisk Technologies Inc. FAT analysis for optimized sequential cluster management
US7779056B2 (en) 2006-09-15 2010-08-17 Sandisk Corporation Managing a pool of update memory blocks based on each block's activity and data order
KR100771521B1 (ko) * 2006-10-30 2007-10-30 삼성전자주식회사 멀티 레벨 셀을 포함하는 플래시 메모리 장치 및 그것의데이터 쓰기 방법
US20080235464A1 (en) * 2007-03-19 2008-09-25 Shai Traister System for conversion of update blocks based on comparison with a threshold size
US9612948B2 (en) * 2012-12-27 2017-04-04 Sandisk Technologies Llc Reads and writes between a contiguous data block and noncontiguous sets of logical address blocks in a persistent storage device
US20150212752A1 (en) * 2013-04-08 2015-07-30 Avalanche Technology, Inc. Storage system redundant array of solid state disk array
KR102148889B1 (ko) * 2014-08-18 2020-08-31 삼성전자주식회사 메모리 컨트롤러의 동작 방법 및 메모리 컨트롤러를 포함하는 불휘발성 메모리 시스템
KR20160027805A (ko) * 2014-09-02 2016-03-10 삼성전자주식회사 비휘발성 메모리 장치를 위한 가비지 컬렉션 방법
WO2016112957A1 (en) * 2015-01-13 2016-07-21 Hitachi Data Systems Engineering UK Limited Computer program product, method, apparatus and data storage system for managing defragmentation in file systems
US9696934B2 (en) * 2015-02-12 2017-07-04 Western Digital Technologies, Inc. Hybrid solid state drive (SSD) using PCM or other high performance solid-state memory
US9940261B2 (en) * 2016-05-05 2018-04-10 Western Digital Technology, Inc. Zoning of logical to physical data address translation tables with parallelized log list replay
KR20170128012A (ko) 2016-05-13 2017-11-22 주식회사 맴레이 플래시 기반 저장 장치 및 이를 포함하는 컴퓨팅 디바이스
JP6855704B2 (ja) * 2016-08-22 2021-04-07 富士通株式会社 ストレージシステム、ストレージ制御装置及びデータ格納方法
JP6765321B2 (ja) * 2017-02-28 2020-10-07 キオクシア株式会社 メモリシステムおよび制御方法
US10621084B2 (en) * 2018-03-05 2020-04-14 International Business Machines Corporation Efficient garbage collection in the presence of block dependencies

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20080235489A1 (en) * 2007-03-19 2008-09-25 Sergey Anatolievich Gorobets Systems for forcing an update block to remain sequential
US20190102291A1 (en) * 2017-09-29 2019-04-04 Shannon Systems Ltd. Data storage device and method for operating non-volatile memory

Also Published As

Publication number Publication date
US20210081330A1 (en) 2021-03-18
WO2021050107A1 (en) 2021-03-18
CN113179658A (zh) 2021-07-27
DE112020000139T5 (de) 2021-07-29
US11294827B2 (en) 2022-04-05
KR102569783B1 (ko) 2023-08-22

Similar Documents

Publication Publication Date Title
KR102569783B1 (ko) 비순차적 구역 네임스페이스들
KR102370760B1 (ko) 존 네임스페이스에 대한 존 형성
US11126378B1 (en) Rate limit on the transitions of zones to open
US11055176B1 (en) Storage devices hiding parity swapping behavior
CN113196226A (zh) 固态驱动器中的分区命名空间
US20200409601A1 (en) Hold of Write Commands in Zoned Namespaces
US11500727B2 (en) ZNS parity swapping to DRAM
US11436153B2 (en) Moving change log tables to align to zones
US11960753B2 (en) Solution for super device imbalance in ZNS SSD
US11210027B2 (en) Weighting of read commands to zones in storage devices
US11847337B2 (en) Data parking for ZNS devices
US11656984B2 (en) Keeping zones open with intermediate padding
CN114730605A (zh) 用于存储设备的加权读取命令和开放块定时器

Legal Events

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