KR20240030955A - 불휘발성 메모리 장치를 포함하는 스토리지 장치 및 스토리지 장치의 동작 방법 - Google Patents

불휘발성 메모리 장치를 포함하는 스토리지 장치 및 스토리지 장치의 동작 방법 Download PDF

Info

Publication number
KR20240030955A
KR20240030955A KR1020230005050A KR20230005050A KR20240030955A KR 20240030955 A KR20240030955 A KR 20240030955A KR 1020230005050 A KR1020230005050 A KR 1020230005050A KR 20230005050 A KR20230005050 A KR 20230005050A KR 20240030955 A KR20240030955 A KR 20240030955A
Authority
KR
South Korea
Prior art keywords
zone
memory controller
data
write
controller
Prior art date
Application number
KR1020230005050A
Other languages
English (en)
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 US18/237,806 priority Critical patent/US20240069782A1/en
Priority to US18/238,301 priority patent/US20240070033A1/en
Priority to US18/238,283 priority patent/US20240070067A1/en
Priority to US18/238,282 priority patent/US20240069777A1/en
Priority to US18/238,262 priority patent/US20240070066A1/en
Priority to EP23193507.3A priority patent/EP4332968A3/en
Priority to EP23193746.7A priority patent/EP4332969A1/en
Priority to EP23193824.2A priority patent/EP4332970A1/en
Priority to EP23193881.2A priority patent/EP4343767A3/en
Priority to EP23193980.2A priority patent/EP4332971A3/en
Priority to US18/240,169 priority patent/US20240069750A1/en
Priority to EP23194454.7A priority patent/EP4332972A1/en
Publication of KR20240030955A publication Critical patent/KR20240030955A/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/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
    • 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/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/023Free address space management
    • G06F12/0253Garbage collection, i.e. reclamation of unreferenced 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/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/0614Improving the reliability 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/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/0658Controller construction 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
    • 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/1032Reliability improvement, data loss prevention, degraded operation etc
    • 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)
  • Techniques For Improving Reliability Of Storages (AREA)

Abstract

본 기재는 스토리지 장치에 관한 것이다. 본 기재의 스토리지 장치는 복수의 메모리 셀들을 포함하는 불휘발성 메모리 장치, 그리고 복수의 메모리 셀들에 대해 쓰기 유닛으로 쓰기 동작을 수행하고, 그리고 소거 유닛의 단위로 소거 동작을 수행하도록 구성되는 컨트롤러를 포함하고, 컨트롤러는 외부의 호스트 장치의 요청에 응답하여 불휘발성 메모리 장치의 저장 공간에 복수의 존들을 할당하도록 구성되고, 컨트롤러는 복수의 메모리 셀들의 복수의 소거 유닛들 중 둘 이상의 소거 유닛들을 선택하여 복수의 존들의 각각에 할당하도록 구성되고, 컨트롤러는 복수의 존들에 기입되는 데이터의 논리 주소들을 고정적으로 그리고 순차적으로 관리하도록 구성되고, 그리고 컨트롤러는 복수의 존들의 각각에 대해 서로 다른 적어도 두 개의 맵 테이블들을 생성하도록 구성된다.

Description

불휘발성 메모리 장치를 포함하는 스토리지 장치 및 스토리지 장치의 동작 방법{STORAGE DEVICE INCLUDING NONVOLATILE MEMORY DEVICE AND OPERATING METHOD OF STORAGE DEVICE}
본 기재는 전자 장치에 관한 것으로, 더 상세하게는 불휘발성 메모리 장치를 포함하는 스토리지 장치 및 스토리지 장치의 동작 방법에 관한 것이다.
스토리지 장치는 컴퓨터, 스마트 폰, 스마트 패드 등과 같은 호스트 장치의 제어에 따라 데이터를 저장하는 장치이다. 스토리지 장치는 하드 디스크 드라이브(HDD, Hard Disk Drive)와 같이 자기 디스크에 데이터를 저장하는 장치, 솔리드 스테이트 드라이브(SSD, Solid State Drive), 메모리 카드 등과 같이 반도체 메모리, 특히 불휘발성 메모리에 데이터를 저장하는 장치를 포함한다.
불휘발성 메모리는 ROM (Read Only Memory), PROM (Programmable ROM), EPROM (Electrically Programmable ROM), EEPROM (Electrically Erasable and Programmable ROM), 플래시 메모리, PRAM (Phase-change RAM), MRAM (Magnetic RAM), RRAM (Resistive RAM), FRAM (Ferroelectric RAM) 등을 포함한다.
반도체 제조 기술이 발전되면서, 스토리지 장치와 통신하는 컴퓨터, 스마트폰, 스마트패드 등과 같은 호스트 장치의 동작 속도가 향상되고 있다. 또한, 스토리지 장치 및 스토리지 장치의 호스트 장치에서 사용되는 콘텐츠의 용량이 증가하고 있다. 이에 따라, 더 향상된 동작 속도를 갖는 스토리지 장치에 대한 요구가 지속적으로 제기되고 있다.
본 기재의 목적은 향상된 동작 속도를 갖는 스토리지 장치 및 스토리지 장치의 동작 방법을 제공하는 데에 있다.
본 기재의 실시 예에 따른 스토리지 장치는 복수의 메모리 셀들을 포함하는 불휘발성 메모리 장치, 그리고 복수의 메모리 셀들에 대해 쓰기 유닛으로 쓰기 동작을 수행하고, 그리고 소거 유닛의 단위로 소거 동작을 수행하도록 구성되는 컨트롤러를 포함하고, 컨트롤러는 외부의 호스트 장치의 요청에 응답하여 불휘발성 메모리 장치의 저장 공간에 복수의 존들을 할당하도록 구성되고, 컨트롤러는 복수의 메모리 셀들의 복수의 소거 유닛들 중 둘 이상의 소거 유닛들을 선택하여 복수의 존들의 각각에 할당하도록 구성되고, 컨트롤러는 복수의 존들에 기입되는 데이터의 논리 주소들을 고정적으로 그리고 순차적으로 관리하도록 구성되고, 그리고 컨트롤러는 복수의 존들의 각각에 대해 서로 다른 적어도 두 개의 맵 테이블들을 생성하도록 구성된다.
본 기재의 실시 예에 따른 스토리지 장치는 복수의 메모리 셀들을 포함하는 불휘발성 메모리 장치, 그리고 복수의 메모리 셀들에 대해 쓰기 유닛으로 쓰기 동작을 수행하고, 그리고 소거 유닛의 단위로 소거 동작을 수행하도록 구성되는 컨트롤러를 포함하고, 컨트롤러는 외부의 호스트 장치의 요청에 응답하여 불휘발성 메모리 장치의 저장 공간에 복수의 존들을 할당하도록 구성되고, 컨트롤러는 복수의 메모리 셀들의 복수의 소거 유닛들 중 둘 이상의 소거 유닛들을 선택하여 복수의 존들의 각각에 할당하도록 구성되고, 컨트롤러는 복수의 존들에 기입되는 데이터의 논리 주소들을 고정적으로 그리고 순차적으로 관리하도록 구성되고, 그리고 복수의 존들에 대한 가비지 컬렉션은 서로 다른 두 개의 단위로 수행된다.
불휘발성 메모리 장치 및 컨트롤러를 포함하는 본 기재의 실시 예에 따른 스토리지 장치의 동작 방법은, 컨트롤러가 각각 불휘발성 메모리 장치의 둘 이상의 소거 유닛들을 포함하는 복수의 존들을 할당하는 단계, 컨트롤러가 복수의 존들의 각각에 대해 서로 다른 적어도 두 개의 맵 테이블들을 생성하는 단계, 컨트롤러가 외부의 호스트 장치의 요청에 응답하여 존의 단위로 제1 가비지 컬렉션을 수행하는 단계, 그리고 컨트롤러가 외부의 호스트 장치의 요청 없이 존과 다른 단위로 제2 가비지 컬렉션을 수행하는 단계를 포함하고, 컨트롤러는 복수의 존들에 기입되는 데이터의 논리 주소들을 고정적으로 그리고 순차적으로 관리하도록 구성된다.
본 기재에 따르면, 불휘발성 메모리 장치의 저장 공간은 순차 쓰기가 수행되는 존들로 관리되며, 존 할당, 맵 테이블, 리커버리, 백업, 마이그레이션, 프리페치, 가비지 컬렉션과 연관되어 다양한 알고리즘들이 제공된다. 따라서, 향상된 동작 속도를 갖는 스토리지 장치 및 스토리지 장치의 동작 방법이 제공된다.
도 1은 본 발명의 실시 예에 따른 스토리지 장치를 보여준다.
도 2는 본 기재의 실시 예에 따른 불휘발성 메모리 장치를 보여주는 블록도이다.
도 3a 내지 도 3e는 스토리지 장치의 메모리 컨트롤러가 불휘발성 메모리 장치의 저장 공간을 관리하는 예를 보여준다.
도 4는 도 1의 컨트롤러에 의해 실행되는 모듈들의 예를 보여준다.
도 5는 외부의 호스트 장치에 의해 스토리지 장치에서 존이 오픈되는 제1 예를 보여준다.
도 6은 외부의 호스트 장치에 의해 스토리지 장치에서 존이 오픈되는 제2 예를 보여준다.
도 7은 존에서 논리 주소들 및 물리 주소들이 매핑되는 제1 예를 보여준다.
도 8은 존에서 논리 주소들 및 물리 주소들이 매핑되는 제2 예를 보여준다.
도 9는 스토리지 장치가 갭 존을 이용하여 존들을 관리하는 예를 보여준다.
도 10은 스토리지 장치가 예비 존을 오픈하는 제1 예를 보여준다.
도 11은 스토리지 장치가 예비 존을 오픈하는 제2 예를 보여준다.
도 12는 스토리지 장치가 예비 존을 오픈하는 제3 예를 보여준다.
도 13은 스토리지 장치가 예비 존을 오픈하는 제4 예를 보여준다.
도 14는 스토리지 장치가 예비 존을 오픈하는 제5 예를 보여준다.
도 15는 스토리지 장치가 예비 존을 오픈하는 제6 예를 보여준다.
도 16은 스토리지 장치가 데이터를 불휘발성 메모리 장치에 기입하는 예를 보여준다.
도 17은 도 16의 방법에 따라 불휘발성 메모리 장치에 데이터가 기입되는 예를 보여준다.
도 18은 스토리지 장치가 쓰기 동작을 수행하는 동안 존을 오픈하는 제1 예를 보여준다.
도 19는 존을 넘어선 쓰기가 수행되는 예를 보여준다.
도 20은 스토리지 장치가 다음 존을 오픈할 지 판단하는 제1 예를 보여준다.
도 21은 스토리지 장치가 다음 존을 오픈할 지 판단하는 제2 예를 보여준다.
도 22는 스토리지 장치가 쓰기 동작을 수행하는 동안 존을 오픈하는 제2 예를 보여준다.
도 23은 스토리지 장치가 존을 넘어선 쓰기의 설정을 조절하는 예를 보여준다.
도 24는 스토리지 장치가 존 맵 서비스를 제공하는 제1 예를 보여준다.
도 25는 도 24의 방법에 따라 존 맵 서비스가 활성화되는 예를 보여준다.
도 26은 스토리지 장치가 존 맵 서비스를 제공하는 제2 예를 보여준다.
도 27은 컨트롤러가 내부 버퍼에서 메타 데이터를 관리하는 예를 보여준다.
도 28은 스토리지 장치가 존 맵 테이블 및 페이지 맵 테이블에 기반하여 읽기 서비스를 제공하는 예를 보여준다.
도 29는 스토리지 장치(100)가 존 맵 서비스의 활성화 정보를 관리하는 예를 보여준다.
도 30은 스토리지 장치가 액세스 에러를 처리하는 리커버리의 예를 보여준다.
도 31은 스토리지 장치가 포스트 리커버리 동작을 수행하는 제1 예를 보여준다.
도 32a 내지 도 32d는 리커버리 동작이 수행되는 과정의 제1 예들을 보여준다.
도 33a 내지 도 33e는 리커버리 동작이 수행되는 과정의 제2 예들을 보여준다.
도 34는 스토리지 장치가 포스트 리커버리 동작을 수행하는 제2 예를 보여준다.
도 35a 및 도 35b는 페일 테이블을 생성하는 리커버리 동작이 수행되는 과정의 제1 예들을 보여준다.
도 36a 및 도 36b는 액세스 에러가 발생한 때에 존 맵 테이블이 갱신되는 예를 보여준다.
도 37a 내지 도 37f는 액세스 에러가 발생함에 따라 페일 테이블이 생성 및 갱신되는 예들을 보여준다.
도 38은 스토리지 장치가 백업 동작을 수행하는 제1 예를 보여준다.
도 39는 스토리지 장치가 백업 동작을 수행하는 제2 예를 보여준다.
도 40은 스토리지 장치가 백업 동작을 수행하는 제3 예를 보여준다.
도 41은 스토리지 장치가 백업 동작을 수행하는 제4 예를 보여준다.
도 42는 스토리지 장치가 백업을 위한 소거 영역을 선택하는 방법의 예를 보여준다.
도 43은 스토리지 장치가 목표 특색들 및 백업 특색들에 기반하여 셀 타입을 선택하는 예를 보여준다.
도 44는 존 버퍼의 데이터가 백업 동작에 의해 불휘발성 메모리 장치에 기입되는 예를 보여준다.
도 45는 스토리지 장치가 백업 소거 유닛에서 데이터를 수집하는 예를 보여준다.
도 46은 스토리지 장치가 백업 소거 유닛의 데이터를 목표 존으로 마이그레이션하는 예를 보여준다.
도 47a 내지 도 47c는 스토리지 장치가 SLC의 셀 타입을 갖는 백업 소거 유닛을 이용하여 버퍼링을 수행하는 예들을 보여준다.
도 48a 내지 도 48c는 스토리지 장치(100)가 MLC의 셀 타입을 갖는 백업 소거 유닛을 이용하여 버퍼링을 수행하는 예들을 보여준다.
도 49는 스토리지 장치가 둘 이상의 존들과 연관된 데이터의 백업 동작을 수행하는 예를 보여준다.
도 50은 스토리지 장치가 존 버퍼들의 데이터를 백업하는 예를 보여준다.
도 51은 백업 소거 유닛에 존들의 데이터가 백업된 예를 보여준다.
도 52는 스토리지 장치가 불휘발성 메모리 장치를 이용하여 버퍼링을 수행하는 다른 예를 보여준다.
도 53은 스토리지 장치가 마이그레이션을 트리거하는 방법의 예를 보여준다.
도 54는 스토리지 장치가 마이그레이션을 수행하는 제1 예를 보여준다.
도 55a 내지 도 55d는 스토리지 장치가 마이그레이션을 수행하는 과정의 예를 보여준다.
도 56은 스토리지 장치가 공유 쓰기 부스터 버퍼에 데이터를 기입한 예를 보여준다.
도 57은 스토리지 장치가 마이그레이션을 수행할 존의 데이터를 선택하는 제1 예를 보여준다.
도 58은 스토리지 장치가 마이그레이션을 수행할 존의 데이터를 선택하는 제2 예를 보여준다.
도 59는 스토리지 장치가 마이그레이션을 수행하는 방법의 제2 예를 보여준다.
도 60은 스토리지 장치가 마이그레이션을 수행하는 방법의 제3 예를 보여준다.
도 61은 스토리지 장치가 프리페치를 수행하는 방법의 예를 보여준다.
도 62a 및 도 62b는 존을 넘어선 프리페치가 수행되는 예를 보여준다.
도 63은 스토리지 장치가 존을 넘어선 프리페치의 설정을 조절하는 예를 보여준다.
도 64는 스토리지 장치가 가비지 컬렉션을 수행하는 방법의 제1 예를 보여준다.
도 65는 스토리지 장치가 가비지 컬렉션을 수행하는 방법의 제2 예를 보여준다.
도 66a는 도 65의 존 카피 요청의 예시적인 포맷을 보여준다.
도 66b는 도 65의 소스 정보가 수신되는 포맷의 예를 보여준다.
도 67은 도 66a의 존 카피 요청 및 도 66b의 소스 정보에 기반하여 스토리지 장치가 존 카피를 수행하는 예를 보여준다.
도 68a 내지 도 68d는 도 67의 방법에 따라 스토리지 장치가 존 카피를 수행하는 예를 보여준다.
도 69는 스토리지 장치가 가비지 컬렉션을 수행하는 방법의 제3 예를 보여준다.
도 70a는 도 69의 존 카피 요청의 예시적인 포맷을 보여준다.
도 70b는 도 70a의 전송 길이의 예를 보여준다.
도 71은 도 69의 존 카피 요청에 기반하여 스토리지 장치가 존 카피를 수행하는 예를 보여준다.
도 72는 외부의 호스트 장치가 존 단위의 가비지 컬렉션을 수행하는 예를 보여준다.
도 73은 도 72의 방법에 의해 제7 존의 데이터가 새로운 존으로 카피되는 예를 보여준다.
도 74는 외부의 호스트 장치가 존 단위의 가비지 컬렉션을 완료하는 예를 보여준다.
도 75는 도 74의 방법에 의해 가비지 컬렉션이 완료되는 예를 보여준다.
도 76은 도 2의 메모리 블록들 중 하나의 메모리 블록의 예를 보여주는 회로도이다.
도 77은 불휘발성 메모리 장치의 제1 내지 제4 메모리 칩들의 예를 보여준다.
도 78은 스토리지 장치가 장치 존 및 호스트 존을 관리하는 방법의 예를 보여준다.
도 79a 내지 도 79f는 스토리지 장치가 제1 장치 존을 관리하는 과정의 예들을 보여준다.
도 80a 및 도 80b는 외부의 호스트 장치가 호스트 존의 단위로 가비지 컬렉션을 수행하는 과정의 예를 보여준다.
도 81은 스토리지 장치가 배경 동작으로서 가비지 컬렉션을 수행하는 예를 보여준다.
도 82는 본 기재의 일 실시 예에 따른 시스템을 도시한 도면이다.
이하에서, 본 발명의 기술 분야에서 통상의 지식을 가진 자가 본 발명을 용이하게 실시할 수 있을 정도로, 본 발명의 실시 예들이 명확하고 상세하게 기재될 것이다. 아래에서, '그리고/또는'의 용어는 해당 용어와 연관되어 나열된 항목들의 어느 하나, 그리고 연관되어 나열된 항목들 중 일부 또는 전부의 조합을 포함하는 것으로 해석된다.
도 1은 본 발명의 실시 예에 따른 스토리지 장치(100)를 보여준다. 도 1을 참조하면, 스토리지 장치(100)는 불휘발성 메모리 장치(110) 및 메모리 컨트롤러(120)를 포함할 수 있다. 불휘발성 메모리 장치(110)는 복수의 메모리 셀들을 포함할 수 있다. 복수의 메모리 셀들의 각각은 하나의 비트 또는 둘 이상의 비트들을 저장할 수 있다.
예를 들어, 불휘발성 메모리 장치(110)는 플래시 메모리 장치, 상 변화 메모리 장치, 강유전체 메모리 장치, 자기 메모리 장치, 저항성 메모리 장치 등과 같은 다양한 불휘발성 메모리 장치들 중 적어도 하나를 포함할 수 있다.
메모리 컨트롤러(120)는 외부의 호스트 장치로부터 불휘발성 메모리 장치(110)에 데이터를 기입하거나 또는 불휘발성 메모리 장치(110)로부터 데이터를 읽기 위한 다양한 요청들을 수신할 수 있다.
메모리 컨트롤러(120)는 제1 신호선들(SIGL1) 및 제2 신호선들(SIGL2)을 통해 불휘발성 메모리 장치(110)를 액세스할 수 있다. 예를 들어, 메모리 컨트롤러(120)는 제1 신호선들(SIGL1)을 통해 불휘발성 메모리 장치(110)에 명령 및 주소를 전송할 수 있다. 메모리 컨트롤러(120)는 제1 신호선들(SIGL1)을 통해 불휘발성 메모리 장치(110)와 데이터를 교환할 수 있다.
메모리 컨트롤러(120)는 제2 신호선들(SIGL2)을 통해 불휘발성 메모리 장치(110)에 제1 제어 신호를 전송할 수 있다. 메모리 컨트롤러(120)는 제2 신호선들(SIGL2)을 통해 불휘발성 메모리 장치(110)로부터 제2 제어 신호를 수신할 수 있다.
예시적으로, 불휘발성 메모리 장치(110)는 둘 이상의 불휘발성 메모리 칩들을 포함할 수 있다. 메모리 컨트롤러(120)는 둘 이상의 불휘발성 메모리 칩들을 제어하도록 구성될 수 있다. 메모리 컨트롤러(120)는 둘 이상의 불휘발성 메모리 칩들의 각각에 대해 서로 다른 제1 신호선들 및 서로 다른 제2 신호선들을 구비할 수 있다.
다른 예로서, 메모리 컨트롤러(120)는 둘 이상의 불휘발성 메모리 칩들에 대해 하나의 제1 신호선들을 공유할 수 있다. 메모리 컨트롤러(120)는 둘 이상의 불휘발성 메모리 칩들에 대해 제2 신호선들의 일부를 공유하고, 그리고 나머지 일부를 별도로 구비할 수 있다.
메모리 컨트롤러(120)는 버스(121), 호스트 인터페이스(122), 내부 버퍼(123), 프로세서(124), 메모리 관리자(126), 그리고 에러 정정 코드 블록(127)(ECC 블록)(Error Correction Code 블록)을 포함할 수 있다.
버스(121)는 메모리 컨트롤러(120) 내부의 구성 요소들 사이에 통신 채널들을 제공할 수 있다. 호스트 인터페이스(122)는 외부의 호스트 장치로부터 다양한 요청들을 수신하고, 그리고 수신된 요청들을 해석할 수 있다. 호스트 인터페이스(122)는 해석된 요청들을 내부 버퍼(123)에 저장할 수 있다.
호스트 인터페이스(122)는 외부의 호스트 장치에 다양한 응답들을 전송할 수 있다. 호스트 인터페이스(122)는 정해진 통신 프로토콜에 기반하여 외부의 호스트 장치와 신호들을 교환할 수 있다. 예를 들어, 호스트 인터페이스(122)는 UFS(Universal Flash Storage)의 통신 프로토콜에 기반하여 외부의 호스트 장치와 신호들을 교환할 수 있다. 내부 버퍼(123)는 랜덤 액세스 메모리를 포함할 수 있다. 예를 들어, 내부 버퍼(123)는 정적 랜덤 액세스 메모리 또는 동적 랜덤 액세스 메모리를 포함할 수 있다.
프로세서(124)는 메모리 컨트롤러(120)를 구동하기 위한 운영 체제 또는 펌웨어를 구동할 수 있다. 프로세서(124)는 내부 버퍼(123)에 저장된 해석된 요청들을 읽고, 불휘발성 메모리 장치(110)를 제어하기 위한 명령들 및 주소들을 생성할 수 있다. 프로세서(124)는 생성된 명령들 및 주소들을 메모리 관리자(126)로 전달할 수 있다.
프로세서(124)는 스토리지 장치(100)를 관리하기 위한 다양한 메타 데이터를 내부 버퍼(123)에 저장할 수 있다. 프로세서(124)는 내부 버퍼(123)에 저장된 사용자 데이터를 불휘발성 메모리 장치(110)로 전송하도록 메모리 관리자(126)를 제어할 수 있다.
프로세서(124)는 내부 버퍼(123)에 저장된 데이터를 외부의 호스트 장치로 전송하도록 호스트 인터페이스(122)를 제어할 수 있다. 프로세서(124)는 불휘발성 메모리 장치(110)로부터 수신되는 데이터를 내부 버퍼(123)에 저장하도록 메모리 관리자(126)를 제어할 수 있다. 프로세서(124)는 외부의 호스트 장치로부터 수신되는 데이터를 내부 버퍼(123)에 저장하도록 호스트 인터페이스(122)를 제어할 수 있다.
메모리 관리자(126)는 프로세서(124)의 제어에 따라 제1 신호선들(SIGL1) 및 제2 신호선들(SIGL2)을 통해 불휘발성 메모리 장치(110)와 통신할 수 있다.
메모리 관리자(126)는 프로세서(124)의 제어에 따라 불휘발성 메모리 장치(110)를 액세스할 수 있다. 예를 들어, 메모리 관리자(126)는 제1 신호선들(SIGL1) 및 제2 신호선들(SIGL2)을 통해 불휘발성 메모리 장치(110)를 액세스할 수 있다. 메모리 관리자(126)는 표준에 기반하여 정해진 또는 제조자에 의해 정해진 프로토콜에 기반하여 불휘발성 메모리 장치(110)와 통신할 수 있다.
에러 정정 코드 블록(127)은 불휘발성 메모리 장치(110)로 전송되는 데이터에 대해 에러 정정 코드(ECC)를 이용하여 에러 정정 인코딩을 수행할 수 있다. 에러 정정 코드 블록(127)은 불휘발성 메모리 장치(110)로부터 수신되는 데이터에 대해 에러 정정 코드(ECC)를 이용하여 에러 정정 디코딩을 수행할 수 있다.
도 2는 본 기재의 실시 예에 따른 불휘발성 메모리 장치(200)를 보여주는 블록도이다. 예시적으로, 불휘발성 메모리 장치(200)는 도 1의 불휘발성 메모리 장치(110)에 대응할 수 있다. 도 1 및 도 2를 참조하면, 불휘발성 메모리 장치(200)는 메모리 셀 어레이(210), 행 디코더 블록(220), 페이지 버퍼 블록(230), 패스 페일 체크 블록(240)(PFC), 데이터 입력 및 출력 블록(250), 버퍼 블록(260), 그리고 제어 로직 블록(270)을 포함한다.
메모리 셀 어레이(210)는 복수의 메모리 블록들(BLK1~BLKz)을 포함한다. 각 메모리 블록은 복수의 메모리 셀들을 포함한다. 각 메모리 블록은 적어도 하나의 접지 선택 라인(GSL), 워드 라인들(WL), 그리고 적어도 하나의 스트링 선택 라인(SSL)을 통해 행 디코더 블록(220)에 연결될 수 있다. 워드 라인들(WL) 중 일부는 더미 워드 라인들로 사용될 수 있다. 각 메모리 블록은 복수의 비트 라인들(BL)을 통해 페이지 버퍼 블록(230)에 연결될 수 있다. 복수의 메모리 블록들(BLK1~BLKz)은 복수의 비트 라인들(BL)에 공통으로 연결될 수 있다.
예시적으로, 복수의 메모리 블록들(BLK1~BLKz) 각각은 소거 동작의 단위일 수 있다. 각 메모리 블록에 속한 메모리 셀들은 동시에 소거될 수 있다. 다른 예로서, 각 메모리 블록은 복수의 서브 블록들로 분할될 수 있다. 복수의 서브 블록들 각각은 소거 동작의 단위일 수 있다. 각 서브 블록에 속한 메모리 셀들은 동시에 소거될 수 있다. 이하에서 소거 동작의 단위는 '소거 유닛'이라 불린다. 소거 유닛은 메모리 블록 또는 서브 블록일 수 있다.
각 메모리 블록은 복수의 페이지들을 포함할 수 있다. 복수의 페이지들은 워드 라인들(WL)에 각각 연결될 수 있다. 페이지들의 각각은 쓰기 동작의 단위일 수 있다. 쓰기 동작의 단위는 쓰기 유닛일 수 있다.
하나의 페이지의 메모리 셀들의 각각에 기입되는 비트들의 각각은 논리 페이지들을 형성할 수 있다. 하나의 메모리 셀에 3개의 비트들이 기입될 때, 하나의 물리 페이지는 세 개의 논리 페이지들을 포함할 수 있다. 하나의 메모리 셀에 1개의 비트가 기입될 때, 하나의 물리 페이지는 하나의 논리 페이지를 포함할 수 있다. 논리 페이지, 논리 페이지들, 또는 물리 페이지는 읽기 동작의 단위일 수 있다. 읽기 동작의 단위는 읽기 유닛일 수 있다.
행 디코더 블록(220)은 접지 선택 라인들(GSL), 워드 라인들(WL), 그리고 스트링 선택 라인들(SSL)을 통해 메모리 셀 어레이(210)에 연결된다. 행 디코더 블록(220)은 제어 로직 블록(270)의 제어에 따라 동작한다.
행 디코더 블록(220)은 버퍼 블록(260)으로부터 수신되는 행 주소(RA)를 디코딩하고, 디코딩된 행 주소에 따라 스트링 선택 라인들(SSL), 워드 라인들(WL), 그리고 접지 선택 라인들(GSL)에 인가되는 전압들을 제어할 수 있다.
페이지 버퍼 블록(230)은 복수의 비트 라인들(BL)을 통해 메모리 셀 어레이(210)에 연결된다. 페이지 버퍼 블록(230)은 복수의 데이터 라인들(DL)을 통해 데이터 입력 및 출력 블록(250)과 연결된다. 페이지 버퍼 블록(230)은 제어 로직 블록(270)의 제어에 따라 동작한다.
프로그램 동작 시에, 페이지 버퍼 블록(230)은 메모리 셀들에 기입될 데이터를 저장할 수 있다. 저장된 데이터에 기반하여, 페이지 버퍼 블록(230)은 복수의 비트 라인들(BL)에 전압들을 인가할 수 있다. 읽기 동작 시에, 또는 프로그램 동작 또는 소거 동작의 검증 읽기 시에, 페이지 버퍼 블록(230)은 비트 라인들(BL)의 전압들을 감지하고, 감지 결과를 저장할 수 있다.
패스 페일 체크 블록(240)은 프로그램 동작의 검증 읽기 또는 소거 동작의 검증 읽기 시에, 페이지 버퍼 블록(230)의 감지 결과를 검증할 수 있다. 예를 들어, 프로그램 동작의 검증 읽기 시에, 패스 페일 체크 블록(240)은 목표 문턱 전압 이상으로 프로그램되지 않은 온-셀들에 대응하는 값(예를 들어 '0')의 수를 카운트할 수 있다.
소거 동작의 검증 읽기 시에, 패스 페일 체크 블록(240)은 목표 문턱 전압 이하로 소거되지 않은 오프-셀들에 대응하는 값(예를 들어 '1')이 수를 카운트할 수 있다. 패스 페일 체크 블록(240)은 카운트된 결과가 문턱값 이상일 때, 페일을 나타내는 신호를 제어 로직 블록(270)으로 출력할 수 있다. 패스 페일 체크 블록(240)은 카운트된 결과가 문턱값보다 작을 때, 패스를 나타내는 신호를 제어 로직 블록(270)으로 출력할 수 있다. 패스 페일 체크 블록(240)의 검증의 결과에 따라, 프로그램 동작의 프로그램 루프가 더 수행되거나 또는 소거 동작의 소거 루프가 더 수행될 수 있다.
데이터 입력 및 출력 블록(250)은 복수의 데이터 라인들(DL)을 통해 페이지 버퍼 블록(230)과 연결된다. 데이터 입력 및 출력 블록(250)은 버퍼 블록(260)으로부터 열 주소(CA)를 수신할 수 있다. 데이터 입력 및 출력 블록(250)은 페이지 버퍼 블록(230)에 의해 읽힌 데이터를 열 주소(CA)에 따라 버퍼 블록(260)으로 출력할 수 있다. 데이터 입력 및 출력 블록(250)은 열 주소(CA)에 의존하여, 버퍼 블록(260)으로부터 수신되는 데이터를 페이지 버퍼 블록(230)에 전달할 수 있다.
버퍼 블록(260)은 제1 신호선들(SIGL1)을 통해 명령(CMD) 및 주소(ADDR)를 외부의 장치로부터 수신하고, 그리고 데이터(DATA)를 외부의 장치와 교환할 수 있다. 버퍼 블록(260)은 제어 로직 블록(270)의 제어에 따라 동작할 수 있다. 버퍼 블록(260)은 명령(CMD)을 제어 로직 블록(270)에 전달할 수 있다. 버퍼 블록(260)은 주소(ADDR)의 행 주소(RA)를 행 디코더 블록(220)에 전달하고, 열 주소(CA)를 데이터 입력 및 출력 블록(250)에 전달할 수 있다. 버퍼 블록(260)은 데이터(DATA)를 데이터 입력 및 출력 블록(250)과 교환할 수 있다.
제어 로직 블록(270)은 외부 장치와 제2 신호선들(SIGL2)을 통해 제어 신호(CTRL)를 교환할 수 있다. 제어 로직 블록(270)은 버퍼 블록(260)이 명령(CMD), 주소(ADDR) 및 데이터(DATA)를 라우팅하게 제어할 수 있다. 제어 로직 블록(270)은 버퍼 블록(260)으로부터 수신된 명령(CMD)을 디코딩하고, 디코딩된 명령에 따라 불휘발성 메모리 장치(200)를 제어할 수 있다.
예시적으로, 불휘발성 메모리 장치(200)는 본딩 방식으로 제조될 수 있다. 메모리 셀 어레이(210)는 제1 웨이퍼에서 제조되고, 행 디코더 블록(220), 페이지 버퍼 블록(230), 데이터 입력 및 출력 블록(250), 버퍼 블록(260), 그리고 제어 로직 블록(270)은 제2 웨이퍼에서 제조될 수 있다. 제1 웨이퍼의 상부면과 및 제2 웨이퍼의 상부면을 마주보게 하여 결합함으로써, 불휘발성 메모리 장치(200)가 구현될 수 있다.
다른 예로서, 불휘발성 메모리 장치(200)는 COP(Cell Over Peri) 방식으로 제조될 수 있다. 기판 상에 행 디코더 블록(220), 페이지 버퍼 블록(230), 데이터 입력 및 출력 블록(250), 버퍼 블록(260), 그리고 제어 로직 블록(270)을 포함하는 주변 회로가 구현될 수 있다 주변 회로의 상부에 메모리 셀 어레이(210)가 구현될 수 있다. 주변 회로 및 메모리 셀 어레이(210)는 관통 비아들을 통해 연결될 수 있다.
예시적으로, 스토리지 장치(100)는 존(zoned) 스토리지 장치일 수 있다. 존 스토리지 장치(100)는 불휘발성 메모리 장치(110)의 저장 공간의 적어도 일부에서 존의 단위로 저장 공간을 관리할 수 있다. 예를 들어, 외부의 호스트 장치가 데이터 쓰기를 요청할 때, 스토리지 장치(100)는 존을 오픈(open)할 수 있다. 존을 오픈하는 것은 데이터가 기입되어 있지 않은 새로운 존을 데이터 기입을 위해 할당하는 동작을 포함할 수 있다. 예를 들어, 존은 적어도 하나 또는 적어도 두 개의 소거 유닛들을 포함할 수 있다. 오픈된 존에서, 외부의 호스트 장치는 순차적인 논리 어드레스(예를 들어, 논리 블록 어드레스)에 기반하여 데이터를 기입할 수 있다.
존 내에서 외부의 호스트 장치가 순차적인 논리 어드레스에 기반하여 데이터를 기입하므로, 스토리지 장치(100)는 순차적인 논리 어드레스에 대응하는 데이터를 순차적인 물리 어드레스들에 대응하는 페이지들에 기입할 수 있다.
존은 외부의 호스트 장치에 의해 클로즈(close)될 수 있다. 존을 클로즈하는 것은, 데이터가 기입된 존을 추가적인 데이터의 기입 없이 읽기용으로 사용(데이터가 기입되지 않은 페이지가 있더라도)하도록 할당하는 동작을 포함할 수 있다. 존은 외부의 호스트 장치에 의해 리셋될 수 있다. 존을 리셋하는 것은 존에 기입된 데이터를 무효화 함으로써, 메모리 컨트롤러(120)가 무효화된 존의 데이터를 임의의 시점에 또는 필요한 시점에 삭제할 수 있게 하는 것을 포함할 수 있다. 존의 삭제가 외부의 호스트 장치에 의해 관리되므로, 존 단위의 가비지 컬렉션 또한 외부의 호스트 장치에 의해 수행될 수 있다.
도 3a 내지 도 3e는 스토리지 장치(100)의 메모리 컨트롤러(120)가 불휘발성 메모리 장치(110)의 저장 공간(SM)을 관리하는 예를 보여준다. 도 1, 도 2 및 도 3a를 참조하면, 저장 공간(SM)은 사용자 영역(UA), 예비 영역(RA), 그리고 메타 영역(MA)을 포함할 수 있다. 사용자 영역(UA), 예비 영역(RA), 그리고 메타 영역(MA)의 각각은 복수의 소거 유닛들을 포함할 수 있다.
스토리지 장치(100)의 메모리 컨트롤러(120)는 사용자 영역(UA)을 액세스 가능한 저장 공간으로서 외부의 호스트 장치에 제공할 수 있다. 외부의 호스트 장치는 사용자 영역(UA)에 논리 주소들을 할당할 수 있다. 스토리지 장치(100)의 메모리 컨트롤러(120)는 예비 영역(RA)을 외부의 호스트 장치에 제공하지 않을 수 있다. 스토리지 장치(100)의 메모리 컨트롤러(120)는 예비 영역(RA)을 스토리지 장치(100)의 성능을 향상하는데 사용할 수 있다. 예를 들어, 메모리 컨트롤러(120)는 예비 영역(RA)을 배드 블록을 위한 대체 메모리, 백업 메모리, 또는 버퍼링 메모리로 사용할 수 있다. 스토리지 장치(100)의 메모리 컨트롤러(120)는 메타 영역(MA)을 외부의 호스트 장치에 제공하지 않을 수 있다. 스토리지 장치(100)의 메모리 컨트롤러(120)는 스토리지 장치(100)가 동작하는데 필요한 메타 데이터를 메타 영역(MA)에 저장할 수 있다.
스토리지 장치(100)의 메모리 컨트롤러(120)는 사용자 영역(UA)을 복수의 논리 영역들(LU)로 분할할 수 있다. 논리 영역들(LU)의 각각은 하나 또는 그보다 많은 메모리 블록 또는 소거 유닛을 포함할 수 있다. 논리 영역들(LU)의 각각은 존 쓰기(ZW) 또는 랜덤 쓰기(RW)를 지원하도록 할당될 수 있다.
스토리지 장치(100)의 메모리 컨트롤러(120)는 존 쓰기(ZW)의 논리 유닛에 존들, 예를 들어 제1 존(Z1), 제2 존(Z2), 제3 존(Z3) 및 제4 존(Z4)을 할당할 수 있다. 존 쓰기(ZW)의 논리 유닛(LU)에 할당될 수 있는 존들의 수 및 존들 각각의 사이즈는 외부의 호스트 장치 또는 스토리지 장치(100)에 의해 정해질 수 있다. 각 존은 적어도 하나 또는 둘 이상의 소거 유닛들을 포함할 수 있다.
메모리 컨트롤러(120)는 존 맵 테이블을 이용하여 소거 유닛들과 존들을 매핑하고, 그리고 페이지 맵 테이블을 이용하여 논리 주소들과 페이지들을 매핑할 수 있다. 즉, 메모리 컨트롤러(120)는 둘 이상의 맵 테이블들을 포함하는 멀티-레벨 맵 테이블(MM)을 이용하여 존 쓰기(ZW)의 논리 유닛들(LU)을 관리할 수 있다.
메모리 컨트롤러(120)는 각 존에 순차적인 논리 주소들을 고정적으로 할당할 수 있다. 메모리 컨트롤러(120)는 복수의 존들에 기입되는 데이터의 논리 주소들을 고정적으로 그리고 순차적으로 관리할 수 있다. 즉, 존 쓰기(ZW)의 논리 유닛(LU)에서, 특정한 논리 주소의 데이터는 항상 정해진 존의 정해진 논리 주소들 상의 위치에 기입될 수 있다. 메모리 컨트롤러(120)는 내부 정책에 기반하여, 각 존에 할당되는 소거 유닛들을 다르게 할당할 수 있다.
외부의 호스트 장치의 요청에 따라, 스토리지 장치(100)에 특정한 존을 오픈할 수 있다. 예를 들어, 메모리 컨트롤러(120)는 오픈된 존의 셀 타입을 하나의 셀 타입으로 고정하거나 서로 다른 둘 이상의 셀 타입들 중 하나를 선택할 수 있다. 오픈된 존의 셀 타입은 QLC(Quadruple Level Cell), TLC(Triple Level Cell), MLC(Multi Level Cell), SLC(Single Level Cell)일 수 있지만, 한정되지 않는다.
오픈된 존에 대해, 외부의 호스트 장치는 순차적인 논리 주소들에 기반한 순차적인 쓰기들을 스토리지 장치(100)에 요청하도록 규정될 수 있다. 메모리 컨트롤러(120)는 각 존의 순차적은 논리 주소들에 소거 유닛들의 순차적인 물리 주소들을 매핑하도록 규정될 수 있다. 즉, 각 존에서 논리 주소들 및 물리 주소들의 순차성이 보장될 수 있다.
존이 데이터로 가득찬 경우, 또는 외부의 호스트 장치의 요청에 따라, 메모리 컨트롤러(120)는 존을 클로즈할 수 있다. 메모리 컨트롤러(120)는 클로즈된 존에 대한 추가적인 쓰기를 금지할 수 있다. 메모리 컨트롤러(120)는 클로즈된 존을 읽기 전용으로 관리할 수 있다.
예시적으로, 메모리 컨트롤러(120)는 존 맵 테이블에서 오픈되지 않은 존 또한 관리할 수 있다. 메모리 컨트롤러(120)는 존 맵 테이블에서 각 존의 상태를 적어도 오픈드(Opened), 클로즈드(Closed), 그리고 낫 오픈드(Not opened) 중 하나로 관리할 수 있다.
스토리지 장치(100)의 메모리 컨트롤러(120)는 랜덤 쓰기(RW)의 논리 유닛들(LU)을 페이지 맵 테이블(PM)을 이용하여 관리할 수 있다. 메모리 컨트롤러(120)는 랜덤 쓰기(RW)의 논리 유닛들(LU)에 대한 랜덤 쓰기를 지원할 수 있다.
예시적으로, 메모리 컨트롤러(120)는 존 쓰기(ZW)의 논리 유닛들(LU)의 존 맵 테이블 및 페이지 맵 테이블(PM), 그리고 랜덤 쓰기(RW)의 논리 유닛들(LU)의 페이지 맵 테이블(PM)을 메타 영역(MA)에 저장할 수 있다. 메모리 컨트롤러(120)는 존 쓰기(ZW)의 논리 유닛들(LU)의 존 맵 테이블, 그리고 존 쓰기(ZW)의 논리 유닛들(LU) 및 랜덤 쓰기(RW)의 논리 유닛들(LU)의 페이지 맵 테이블(PM)의 일부를 내부 버퍼(124)에 로드하여 사용할 수 있다.
도 1, 도 2 및 도 3b를 참조하면, 메모리 컨트롤러(120)는 공유 쓰기 부스터 버퍼(SWBB)(Shared Write Booster Buffer)를 더 할당할 수 있다. 예시적으로, 메모리 컨트롤러(120)는 사용자 영역(UA)의 일부를 논리 유닛(들) 및 공유 쓰기 부스터 버퍼(SWBB)로 중복 할당할 수 있다. 공유 쓰기 부스터 버퍼(SWBB)는 적어도 하나의 소거 유닛을 포함할 수 있다.
공유 쓰기 부스터 버퍼(SWBB)는 예를 들어 SLC로 할당될 수 있다. 메모리 컨트롤러(120)는 외부의 호스트 장치로부터 수신되는 쓰기 요청에 응답하여, 데이터를 우선적으로 공유 쓰기 부스터 버퍼(SWBB)에 기입할 수 있다. 이후, 유휴 시간 또는 절전 모드에서, 메모리 컨트롤러(120)는 공유 쓰기 부스터 버퍼(SWBB)에 기입된 데이터를 목표 논리 유닛(들)으로 마이그레이션할 수 있다. 공유 쓰기 부스터 버퍼(SWBB)를 사용함으로써, 스토리지 장치(100)의 쓰기 속도가 향상될 수 있다.
메모리 컨트롤러(120)는 복수의 논리 유닛들(LU)에 기입되는 데이터 모두를 공유 쓰기 부스터 버퍼(SWBB)에 우선적으로 기입할 수 있다. 즉, 공유 쓰기 부스터 버퍼(SWBB)는 복수의 논리 유닛들(LU)에 의해 공유될 수 있다.
예시적으로, 사용자 영역(UA)에 데이터가 기입된 비율에 따라, 메모리 컨트롤러(120)는 공유 쓰기 부스터 버퍼(SWBB)의 용량을 적응적으로 조절할 수 있다. 사용자 영역(UA)의 데이터 기입률이 증가하면, 메모리 컨트롤러(120)는 공유 쓰기 부스터 버퍼(SWBB)의 용량을 줄이거나 공유 쓰기 부스터 버퍼(SWBB)를 비활성화 함으로써, 사용자 영역(UA)의 저장 공간이 외부의 호스트 장치에 의해 완전하게 사용 가능하게 할 수 있다.
도 1, 도 2 및 도 3c를 참조하면, 메모리 컨트롤러(120)는 사용자 영역(UA)의 저장 공간의 일부를 공유 쓰기 부스터 버퍼(SWBB)에 전용으로 할당할 수 있다. 즉, 공유 쓰기 부스터 버퍼(SWBB)의 저장 공간만큼, 사용자 영역(UA)의 저장 공간이 감소할 수 있다. 메모리 컨트롤러(120)는 공유 쓰기 부스터 버퍼(SWBB)의 저장 공간을 고정적으로 할당함으로써, 스토리지 장치(100)의 쓰기 속도를 더 향상할 수 있다.
도 1, 도 2 및 도 3d를 참조하면, 메모리 컨트롤러(120)는 공유 쓰기 부스터 버퍼(SWBB) 대신 지정 쓰기 부스터 버퍼(DWBB)(Dedicated Write Booster Buffer)를 할당할 수 있다. 예를 들어, 메모리 컨트롤러(120)는 사용자 영역(UA)의 일부를 논리 유닛(들) 및 지정 쓰기 부스터 버퍼(DWBB)에 중복 할당할 수 있다.
지정 쓰기 부스터 버퍼(DWBB)는 특정한 논리 유닛에 지정되어 사용될 수 있다. 예를 들어, 도 3d에서 첫 번째 논리 유닛(LU)에 지정 쓰기 부스터 버퍼(DWBB)가 할당된 것으로 도시된다.
하나의 논리 유닛에 지정되는 것을 제외하면, 지정 쓰기 부스터 버퍼(DWBB)는 도 3b의 공유 쓰기 부스터 버퍼(SWBB)와 동일하게 사용될 수 있다. 따라서, 중복되는 설명은 생략된다.
도 1, 도 2 및 도 3e를 참조하면, 메모리 컨트롤러(120)는 사용자 영역(UA)의 저장 공간의 일부를 지정 쓰기 부스터 버퍼(DWBB)에 전용으로 할당할 수 있다. 즉, 지정 쓰기 부스터 버퍼(DWBB)의 저장 공간만큼, 사용자 영역(UA)의 저장 공간이 감소할 수 있다. 메모리 컨트롤러(120)는 지정 쓰기 부스터 버퍼(DWBB)의 저장 공간을 고정적으로 할당함으로써, 스토리지 장치(100)의 쓰기 속도를 더 향상할 수 있다.
이하에서, 존 쓰기(ZW)의 논리 유닛(LU)에 기입되는 또는 기입된 데이터와 연관된 설명이 제공된다. 존 쓰기(ZW)의 논리 유닛(LU)과 관계없이, 메모리 컨트롤러(120)는 외부의 호스트 장치의 요청에 따라 랜덤 쓰기(RW)의 논리 유닛들(LU)을 액세스할 수 있다.
도 4는 도 1의 메모리 컨트롤러(120)에 의해 실행되는 모듈들(300)의 예를 보여준다. 예시적으로, 모듈들(300)은 메모리 컨트롤러(120)의 프로세서(124)에 의해 실행되는 펌웨어 또는 소프트웨어일 수 있다.
도 1 및 도 4를 참조하면, 모듈들(300)은 존 할당기(310), 멀티-레벨 맵 테이블 매니저(320), 존 리커버리 매니저(330), 존 백업 매니저(340), 존 마이그레이션 매니저(350), 존 프리페치 매니저(360), 존 카피 매니저(370), 존 가비지 컬렉션 매니저(380), 그리고 읽기 및 쓰기 매니저(390)를 포함할 수 있다.
존 할당기(310)는 외부의 호스트 장치의 요청에 따라 또는 내부적으로 정해진 정책에 따라 존을 할당할 수 있다. 존 할당기(310)는 존에 소거 유닛들을 할당함으로써 존을 오픈할 수 있다. 존 할당기(310)는 존의 셀 타입(예를 들어, 메모리 셀 당 기입되는 비트들의 수) 또는 다양한 특색을 설정할 수 있다.
멀티-레벨 맵 테이블 매니저(320)는 서로 다른 적어도 두 개의 맵 테이블들, 예를 들어 멀티-레벨 맵 테이블(MM)의 존 맵 테이블 및 페이지 맵 테이블을 생성 및 관리할 수 있다. 멀티-레벨 맵 테이블 매니저(320)는 존 맵 테이블 그리고/또는 페이지 맵 테이블을 이용하여, 외부의 호스트 장치로부터 수신되는 논리 주소(들)를 불휘발성 메모리 장치(110)의 물리 주소(들)로 변환할 수 있다.
존 리커버리 매니저(330)는 외부의 호스트 장치로부터 요청된 액세스에서 에러(또는 페일)가 발생한 때에, 에러를 치유하는 리커버리 동작을 제어할 수 있다. 존 리커버리 매니저(330)는 에러가 발생한 데이터의 리커버리, 그리고 에러가 발생한 존의 데이터의 논리 주소들의 순차성을 유지하기 위한 동작들을 수행할 수 있다.
존 백업 매니저(340)는 내부 버퍼(123)에 저장된 데이터의 백업이 필요한 때에, 내부 버퍼(123)에 저장된 데이터를 불휘발성 메모리 장치(110)에 기입하는 백업 동작을 제어할 수 있다. 존 백업 매니저(340)는 내부 버퍼(123)의 데이터를 기입할 소거 유닛을 선택할 수 있다. 예를 들어, 존 백업 매니저(340)는 예비 영역(RA)(도 3a 내지 도 3e 참조)의 소거 유닛들 중 내부 버퍼(124)의 데이터를 기입할 소거 유닛을 선택할 수 있다.
존 마이그레이션 매니저(350)는 예비 영역(RA)에 기입된 데이터를 사용자 영역(UA)의 존 쓰기(ZW)의 논리 유닛들(LU) 중 목표 논리 유닛(들)으로 마이그레이션하는 마이그레이션 동작을 제어할 수 있다. 목표 논리 유닛(들)은 외부의 호스트 장치의 쓰기 요청과 함께 수신된 논리 주소(들)에 대응하는 존일 수 있다. 존 마이그레이션 매니저(350)는 데이터를 목표 논리 유닛(들)으로 마이그레이션한 후에, 해당 데이터를 소스 소거 유닛, 즉 백업 동작을 통해 데이터가 기입된 소거 유닛에서 무효화할 수 있다.
존 프리페치 매니저(360)는 존 쓰기(ZW)의 논리 유닛(LU)에 기입된 데이터의 프리페치를 제어할 수 있다. 예를 들어, 호스트로부터 순차적인 논리 어드레스들에 대한 읽기 요청들이 수신되는 것에 응답하여, 메모리 컨트롤러(120)는 다음 논리 어드레스들에 대응하는 데이터를 상기 외부의 호스트 장치의 요청이 없이도 프리페치 할 수 있다. 따라서, 외부의 호스트 장치가 스토리지 장치(100)에 대해 랜덤 읽기를 수행하는 속도가 향상될 수 있다.
존 카피 매니저(370)는 존 카피 동작을 제어할 수 있다. 외부의 호스트 장치로부터 존 카피 커맨드가 수신되는 것에 응답하여, 메모리 컨트롤러(120)는 존 쓰기(ZW)의 논리 유닛(LU)의 존들 중 제1 존으로부터 데이터를 읽고, 그리고 제1 존으로부터 읽혀진 데이터를 해당 논리 유닛 또는 다른 존 쓰기(ZW)의 논리 유닛(LU)의 제2 존에 기입할 수 있다. 예시적으로, 존 카피 매니저(370)는 외부의 호스트 장치가 존 단위의 가비지 컬렉션(Garbage Collection)을 수행하는 것을 지원할 수 있다.
존 가비지 컬렉션 매니저(380)는 외부의 호스트 장치의 요청 없이 존 쓰기(ZW)의 논리 유닛의 존들 중 둘 또는 그 이상의 존들의 단위로 가비지 컬렉션을 수행할 수 있다. 즉, 스토리지 장치(100)에 외부의 호스트 장치의 요청에 의한 존 단위의 가비지 컬렉션, 그리고 메모리 컨트롤러(120)에 의한 둘 이상의 존들의 단위의 가비지 컬렉션이 각각 수행될 수 있다.
읽기 및 쓰기 매니저(390)는 불휘발성 메모리 장치(110)에 대한 읽기 동작 및 쓰기 동작을 제어할 수 있다.
도 5는 외부의 호스트 장치에 의해 스토리지 장치(100)에서 존이 오픈되는 제1 예를 보여준다. 도 1 및 도 5를 참조하면, S110 단계에서, 스토리지 장치(100)의 메모리 컨트롤러(120)는 외부의 호스트 장치로부터 오픈 존 요청(OZ)을 수신할 수 있다. 오픈 존 요청(OZ)은 커맨드 UPIU(UFS Protocol Information Unit) 또는 쿼리 리퀘스트(Query Request) UPIU를 통해 수신될 수 있다.
S120 단계에서, 메모리 컨트롤러(120)는 요청된 존의 오픈이 가능한지 판단할 수 있다. 요청된 존의 오픈이 불가하면, S130 단계에서, 메모리 컨트롤러(120)는 요청된 존의 오픈이 불가함을 알리는 응답을 외부의 호스트 장치로 전송할 수 있다.
요청된 존의 오픈이 가능하면, S140 단계에서, 메모리 컨트롤러(120)는 새로운 존을 할당할 수 있다. 예를 들어, 메모리 컨트롤러(120)는 요청된 존에 소거 유닛들을 할당함으로써 요청된 존을 오픈할 수 있다. 이후에, S150 단계에서, 메모리 컨트롤러(120)는 요청된 존이 오픈되었음을 알리는 응답을 외부의 호스트 장치로 전송할 수 있다. 예시적으로, 메모리 컨트롤러(120)는 응답 UPIU 또는 쿼리 응답(Query Response) UPIU를 통해 응답을 외부의 호스트 장치로 전송할 수 있다.
도 6은 외부의 호스트 장치에 의해 스토리지 장치(100)에서 존이 오픈되는 제2 예를 보여준다. 도 1 및 도 6을 참조하면, S210 단계에서, 스토리지 장치(100)의 메모리 컨트롤러(120)는 외부의 호스트 장치로부터 쓰기 요청(WR)을 수신할 수 있다. 쓰기 요청(OZ)은 커맨드 UPIU를 통해 수신될 수 있다.
S220 단계에서, 메모리 컨트롤러(120)는 쓰기 요청(WR)이 새로운 존에 대한 것인지 판단할 수 있다. 쓰기 요청(WR)이 새로운 존에 대한 것이면, S230 단계에서, 메모리 컨트롤러(120)는 새로운 존을 할당할 수 있다. 예시적으로, 도 5를 참조하여 설명된 바와 같이, 메모리 컨트롤러(120)는 새로운 존이 오픈이 가능한지 판단하고, 오픈이 불가하면 외부의 호스트 장치로 응답을 전송하고, 그리고 오픈이 가능하면 새로운 존을 할당하여 존을 오픈하는 동작을 수행할 수 있다.
S240 단계에서, 메모리 컨트롤러(120)는 쓰기 요청된 데이터를 쓰기 요청(WR)의 논리 주소(들)에 대응하는 목표 존에 기입할 수 있다. S250 단계에서, 메모리 컨트롤러(120)는 요청된 쓰기가 요청되었음을 알리는 응답을 외부의 호스트 장치로 전송할 수 있다. 새로운 존이 오픈된 경우, 메모리 컨트롤러(120)는 새로운 존이 오픈되었음을 알리는 정보를 응답에 포함시킬 수 있다. 예시적으로, 메모리 컨트롤러(120)는 응답 UPIU를 통해 응답을 외부의 호스트 장치로 전송할 수 있다.
예시적으로, S210 단계와 S240 단계의 사이에(또는 S230 단계와 S240 단계의 사이에), 쓰기 요청(WR)에 응답하여 메모리 컨트롤러(120)가 외부의 호스트 장치로 레디 투 트랜스퍼(Ready to Transfer) UPIU를 전송하고, 메모리 컨트롤러(120)가 외부의 호스트 장치로부터 데이터 아웃(Data Out) UPIU와 함께 쓰기 데이터를 수신하는 단계들이 더 수행될 수 있다.
도 5 및 도 6을 참조하여 설명된 바와 같이, 메모리 컨트롤러(120)는 오픈 존 요청(OZ) 또는 쓰기 요청(WR)에 응답하여 존을 오픈할 수 있다.
도 7은 존에서 논리 주소들 및 물리 주소들이 매핑되는 제1 예를 보여준다. 도 1 및 도 7을 참조하면, 제5 존(Z5)에 '00000', '00001', '00010', '00011'. '00100', '00101', '00110', '00111', 그리고 '01000'의 논리 주소들(LBA)이 할당될 수 있다. 존의 물리 주소들은 쓰기 포인터(WP)로 관리될 수 있다. 제5 존(Z5)에 '0000', '0001', '0010', '0011', '0100', '0101', '0110', '0111', 그리고 '1000'의 쓰기 포인터들(WP)이 할당될 수 있다.
제5 존(Z5)에 후속하는 제6 존(Z6)은 연속한 논리 주소들을 가질 수 있다. 제6 존(Z6)에 '01000', '01001', '01010', '01011'. '01100', '01101', '01110', '01111', 그리고 '10000'의 논리 주소들(LBA)이 할당될 수 있다. 제6 존(Z6)에 '0000', '0001', '0010', '0011', '0100', '0101', '0110', '0111', 그리고 '1000'의 쓰기 포인터들(WP)이 할당될 수 있다.
논리 주소들(LBA) 및 쓰기 포인터들(WP)(예를 들어, 물리 주소들)은 고정된 순차성을 가질 수 있다. 외부의 호스트 장치로부터 '00100'의 논리 주소가 수신된 때에, 메모리 컨트롤러(120)는 존 맵 테이블을 이용하여 제5 존(Z5)을 식별할 수 있다. 또한, 메모리 컨트롤러(120)는 '00100'의 논리 주소에 포함된 '0100'의 오프셋으로부터 '0100'의 쓰기 포인터(WP)를 계산할 수 있다. 즉, 메모리 컨트롤러(120)는 페이지 맵 테이블 없이 존 맵 테이블에 기반한 읽기 동작을 지원할 수 있다.
도 8은 존에서 논리 주소들 및 물리 주소들이 매핑되는 제2 예를 보여준다. 도 1 및 도 8을 참조하면, 제5 존(Z5)에 '00000', '00001', '00010', '00011'. '00100', '00101', '00110', '00111', 그리고 '01000'의 논리 주소들(LBA)이 할당될 수 있다. 존의 물리 주소들은 쓰기 포인터(WP)로 관리될 수 있다. 제5 존(Z5)에 '0000', '0001', '0010', '0011', '0100', '0101', '0110', '0111', 그리고 '1000'의 쓰기 포인터들(WP)이 할당될 수 있다.
제6 존(Z6)에 '10000', '10001', '10010', '10011'. '10100', '10101', '10110', '10111', 그리고 '11000'의 논리 주소들(LBA)이 할당될 수 있다. 제6 존(Z6)에 '0000', '0001', '0010', '0011', '0100', '0101', '0110', '0111', 그리고 '1000'의 쓰기 포인터들(WP)이 할당될 수 있다.
각 존의 시작 주소의 하위 비트들은 쓰기 포인터(WP)의 시작 주소와 동일하게 맞춰질 수 있다. 따라서, 논리 주소(LBA)로부터 쓰기 포인터(WP)의 오프셋을 계산하는 것이 용이해질 수 있다.
제5 존(Z5)의 마지막 논리 주소(01000)와 제6 존(Z6)의 시작 논리 주소(10000)는 연속적이지 않을 수 있다. 메모리 컨트롤러(120)는 제5 존(Z5)의 마지막 논리 주소(01000)와 제6 존(Z6)의 시작 논리 주소(10000)의 사이에 가상의 갭 존(gap zone)이 존재하는 것으로 인식할 수 있다.
도 9는 스토리지 장치(100)가 갭 존(GZ)을 이용하여 존들을 관리하는 예를 보여준다. 도 1 및 도 9를 참조하면, 논리 주소들(LBA)에 기반한 논리 저장 영역(LSA)에서, 제5 존(Z5)은 '00000' 내지 '01000'의 논리 주소들(LBA)을 가질 수 있다. 논리 주소들(LBA)에 기반한 논리 저장 영역(LSA)에서, 갭 존(GZ)은 '01001' 내지 '01111'의 논리 주소들(LBA)을 가질 수 있다. 논리 주소들(LBA)에 기반한 논리 저장 영역(LSA)에서, 제6 존(Z6)은 '10000' 내지 '11000'의 논리 주소들(LBA)을 가질 수 있다.
물리 주소들(PBA)에 기반한 물리 저장 영역(PSA)에서, 제5 존(Z5)은 소거 유닛들의 '0000' 내지 '1000'의 쓰기 포인터들(WP)을 가질 수 있다. 물리 주소들(PBA)에 기반한 물리 저장 영역(PSA)에서, 제6 존(Z6)은 다른 소거 유닛들의 '0000' 내지 '1000'의 쓰기 포인터들(WP)을 가질 수 있다. 메모리 컨트롤러(120)는 존 맵 테이블을 이용하여 제5 존(Z5)의 소거 유닛들과 제6 존(Z6)의 소거 유닛들을 식별할 수 있다.
논리 주소들(LBA)에 기반한 논리 저장 영역(LSA)에서, '01001' 내지 '01111'의 논리 주소들(LBA)을 갖는 갭 존(GZ)은 물리 저장 영역(PSA)에 매핑되지 않을 수 있다. 메모리 컨트롤러(120)는 갭 존(GZ)을 읽기 전용 존으로 식별할 수 있다. 외부의 호스트 장치로부터 갭 존(GZ)에 대한 쓰기 요청이 수신되면, 메모리 컨트롤러(120)는 외부의 호스트 장치로 에러를 나타내는 응답을 전송할 수 있다. 외부의 호스트 장치로부터 갭 존(GZ)에 대한 읽기 요청이 수신되면, 메모리 컨트롤러(120)는 외부의 호스트 장치로 더미 데이터, 미리 정해진 패턴 데이터, 또는 갭 존을 나타내는 데이터를 전송할 수 있다.
제5 존(Z5)과 제6 존(Z6)의 사이에 가상의 갭 존(GZ)을 설정함으로써, 스토리지 장치(100)는 논리 저장 공간(LSA)에서 제5 존(Z5)과 제6 존(Z6)의 논리 주소들(LBA)의 불연속성으로 인한 문제가 발생하는 것을 해소할 수 있다.
예시적으로, 통상의 존은 스토리지 장치(100)의 저장 용량의 증가를 위하여, 스토리지 장치(100)가 지원하는 가장 높은 셀 타입으로 설정될 수 있다. 예를 들어, 스토리지 장치(100)가 지원하는 최대의 셀 타입이 TLC일 때, 통상의 존은 TLC 존일 수 있다. 스토리지 장치(100)가 지원하는 최대의 셀 타입이 QLC일 때, 통상의 존은 QLC 존일 수 있다. 통상의 존과 달리, 중요한 데이터 또는 빠른 속도가 필요한 데이터를 저장하기 위한 존은 스토리지 장치(100)가 지원하는 가장 높은 셀 타입보다 낮은 셀 타입으로 설정될 수 있다.
통상의 존의 셀 타입이 스토리지 장치(100)가 지원하는 최대의 셀 타입일 때, 통상의 존에 대한 쓰기 속도는 스토리지 장치(100)가 지원하는 가장 느린 쓰기 속도일 수 있다. 스토리지 장치(100)의 쓰기 속도를 향상하기 위하여, UFS 프로토콜은 쓰기 부스터(Write Booster)를 활성화활 수 있다. 도 3a 내지 도 3e를 참조하여 설명된 바와 같이, 쓰기 부스터가 활성화되면, 스토리지 장치(100)는 쓰기 데이터를 쓰기 부스터 버퍼(예를 들어, 공유 쓰기 부스터 버퍼(SWBB) 또는 지정 쓰기 부스터 버퍼(DWBB))에 우선적으로 기입할 수 있다. 쓰기 부스터 버퍼의 셀 타입은 SLC일 수 있고, 따라서 쓰기 부스터 버퍼의 쓰기 속도는 통상의 존의 쓰기 속도보다 높을 수 있다.
상술된 쓰기 부스터와 연관되어, 스토리지 장치(100)는 존을 오픈할 때에 존의 타입, 예를 들어 셀 타입을 선택할 수 있다. 예비 존의 오픈이 가능할 때, 메모리 컨트롤러(120)는 스토리지 장치(100)가 지원하는 가장 높은 셀 타입보다 낮은 셀 타입을 갖는 예비 존을 오픈할 수 있다. 외부의 호스트 장치로부터의 쓰기 데이터는 예비 존에 기입될 수 있다. 예비 존에 데이터를 기입하는 속도는 목표 존에 데이터를 기입하는 속도보다 높을 수 있다. 따라서, 스토리지 장치(100)의 동작 속도가 향상될 수 있다. 예시적으로, 메모리 컨트롤러(120)는 예비 존을 쓰기 부스터 버퍼와 유사하게 또는 쓰기 부스터 버퍼로 관리할 수 있다.
도 10은 스토리지 장치(100)가 예비 존을 오픈하는 제1 예를 보여준다. 도 1, 도 3a 내지 도 3e, 그리고 도 10을 참조하면, S310 단계에서, 스토리지 장치(100)의 메모리 컨트롤러(120)는 외부의 호스트 장치로부터 오픈 존 요청(OZ) 또는 쓰기 요청(WR)을 수신할 수 있다. 예를 들어, 쓰기 요청(WR)은 새로운 존의 오픈을 유발하는 쓰기 요청일 수 있다. 오픈 존 요청(OZ) 또는 쓰기 요청(WR)은 커맨드 UPIU 또는 쿼리 리퀘스트 UPIU를 통해 수신될 수 있다.
S320 단계에서, 오픈 존 요청(OZ) 또는 새로운 존의 오픈을 유발하는 쓰기 요청(WR)에 응답하여, 메모리 컨트롤러(120)는 자유 소거 유닛들(EU)의 수가 제1 문턱값(TH1)보다 큰지 판단할 수 있다.
예시적으로, 목표 존 및 예비 존이 논리 유닛(LU) 내에서 생성되도록 설정된 경우, 자유 소거 유닛들(EU)의 수는 논리 유닛(LU) 내의 자유 소거 유닛들의 수일 수 있다. 목표 존 및 예비 존이 사용자 영역(UA) 내에서 생성되도록 설정된 경우, 자유 소거 유닛들(EU)의 수는 사용자 영역(UA)의 자유 소거 유닛들(EU)의 수일 수 있다. 예비 존이 예비 영역(RA)에서 생성되도록 설정된 경우, 자유 소거 유닛들(EU)의 수는 예비 영역(RA)의 자유 소거 유닛들(EU)의 수일 수 있다.
자유 소거 유닛들(EU)의 수가 제1 문턱값(TH1)보다 크면, S330 단계에서, 메모리 컨트롤러(120)는 제1 타입의 존(예를 들어, 예비 존)을 오픈할 수 있다. 메모리 컨트롤러(120)는 예비 존이 생성되도록 지정된 영역의 소거 유닛들을 예비 존에 할당할 수 있다. 제1 타입의 존은 목표 존의 셀 타입보다 낮은 셀 타입을 가질 수 있다. 제1 타입의 존은 SLC의 셀 타입을 가질 수 있다. 메모리 컨트롤러(120)는 제1 타입의 존에 대한 랜덤 쓰기를 허용할 수 있다.
자유 소거 유닛들(EU)의 수가 제1 문턱값(TH1)보다 크지 않으면, 즉 제1 문턱값(TH1)과 같거나 그보다 적으면, S340 단계에서, 메모리 컨트롤러(120)는 제2 타입 존(예를 들어, 목표 존)을 오픈할 수 있다. 제2 타입 존은 목표 존의 셀 타입을 가질 수 있다. 메모리 컨트롤러(120)는 목표 존이 생성되도록 지정된 논리 유닛의 소거 유닛들을 목표 존에 할당할 수 있다. 메모리 컨트롤러(120)는 제2 타입 존에 대해 순차적인 논리 주소들에 기반한 순차 쓰기만을 허용할 수 있다.
예시적으로, S310 단계에서 쓰기 요청(WR)이 수신된 경우, S310 단계와 S350 단계의 사이에(또는 S330 단계 또는 S340 단계와 S350 단계의 사이에), 쓰기 요청(WR)에 응답하여 메모리 컨트롤러(120)가 외부의 호스트 장치로 레디 투 트랜스퍼(Ready to Transfer) UPIU를 전송하고, 메모리 컨트롤러(120)가 외부의 호스트 장치로부터 데이터 아웃(Data Out) UPIU와 함께 쓰기 데이터를 수신하는 단계, 메모리 컨트롤러(120)는 오픈된 존에 쓰기 요청(WR)에 대응하는 데이터를 기입하는 단계들이 더 수행될 수 있다.
S350 단계에서, 메모리 컨트롤러(120)는 외부의 호스트 장치에 존 타입을 포함하는 응답을 전송할 수 있다. 예를 들어, 응답은 제1 타입 존 및 제2 타입 존 중 어떤 존이 생성되었는지를 포함할 수 있다. 응답은 응답 UPIU 또는 쿼리 응답 UPIU를 통해 출력될 수 있다. 예시적으로, S310 단계에서 쓰기 요청(WR)이 수신된 경우, 응답은 쓰기가 완료되었음을 알리는 정보를 포함할 수 있다.
예비 존을 오픈한 후에, 메모리 컨트롤러(120)는 예비 존의 데이터를 목표 존으로 이동시키는 마이그레이션을 트리거할 수 있다. 마이그레이션을 트리거하는 것은 배경 동작으로서 마이그레이션을 시작하는 것을 의미할 수 있다. 메모리 컨트롤러(120)는 외부의 호스트 장치의 요청에 따른 동작들을 수행하되, 요청에 따른 동작들의 사이 사이에서 배경 동작으로서 마이그레이션을 지속적으로 수행할 수 있다.
예시적으로, 메모리 컨트롤러(120)는 목표 존을 클로즈할 때에 목표 존의 예비 존을 리셋할 수 있다. 또는, 메모리 컨트롤러(120)는 예비 존의 마이그레이션이 완료되면 예비 존을 리셋할 수 있다. 예시적으로, 예비 존이 생성되도록 지정된 영역의 자유 소거 유닛들(EU)의 수가 문턱값보다 작아지면, 메모리 컨트롤러(120)는 예비 존의 데이터를 목표 존으로 직접 이동시키고 그리고 예비 존을 리셋할 수 있다. 예시적으로, 예비 존이 생성되도록 지정된 영역의 자유 소거 유닛들(EU)의 수가 문턱값보다 작고 그리고 목표 존의 데이터의 논리 주소들과 예비 존의 데이터의 논리 주소들의 사이에 순차성이 보장되지 않으면, 메모리 컨트롤러(120)는 예비 존의 데이터를 백업하고 그리고 예비 존을 리셋할 수 있다. 백업되는 데이터는 예비 영역(RA)의 소거 유닛에 기입될 수 있다.
도 11은 스토리지 장치(100)가 예비 존을 오픈하는 제2 예를 보여준다. 도 1, 도 3a 내지 도 3e, 그리고 도 11을 참조하면, S410 단계에서, 스토리지 장치(100)의 메모리 컨트롤러(120)는 외부의 호스트 장치로부터 오픈 존 요청(OZ) 또는 쓰기 요청(WR)을 수신할 수 있다. 예를 들어, 쓰기 요청(WR)은 새로운 존의 오픈을 유발하는 쓰기 요청일 수 있다. 오픈 존 요청(OZ) 또는 쓰기 요청(WR)은 커맨드 UPIU 또는 쿼리 리퀘스트 UPIU를 통해 수신될 수 있다.
S420 단계에서, 오픈 존 요청(OZ) 또는 새로운 존의 오픈을 유발하는 쓰기 요청(WR)에 응답하여, 메모리 컨트롤러(120)는 쓰기 부스터가 활성화되어 있는지 판단할 수 있다. 쓰기 부스터가 활성화되어 있으면, S430 단계에서, 메모리 컨트롤러(120)는 자유 소거 유닛들(EU)의 수가 제2 문턱값(TH2)보다 큰지 판단할 수 있다. 제2 문턱값(TH2)은 제1 문턱값(TH1)과 같거나 다를 수 있다.
예시적으로, 도 3b 및 도 3d와 같이 쓰기 부스터 버퍼가 논리 유닛들(LU)과 중복되도록 생성된 경우, 자유 소거 유닛들(EU)의 사용자 영역(UA)의 자유 소거 유닛들(EU)의 수일 수 있다. 도 3c 및 도 3e와 같이 쓰기 부스터 버퍼가 전용으로 생성된 경우, 자유 소거 유닛들(EU)의 수는 쓰기 부스터 버퍼의 자유 소거 유닛들(EU)의 수일 수 있다. 쓰기 부스터 버퍼가 전용으로 생성된 경우, 제2 문턱 값(TH2)은 하나의 존에 포함되는 소거 유닛들의 수보다 '1'만큼 작을 수 있다. 즉, 쓰기 부스터 버퍼에서 새로운 존의 오픈이 가능하면, 메모리 컨트롤러(120)는 예비 존을 오픈할 수 있다.
자유 소거 유닛들(EU)의 수가 제2 문턱값(TH2)보다 크면, S440 단계에서, 메모리 컨트롤러(120)는 제1 타입의 존(예를 들어, 예비 존)을 오픈할 수 있다. 메모리 컨트롤러(120)는 쓰기 부스터 버퍼의 소거 유닛들을 예비 존에 할당할 수 있다. 제1 타입의 존은 목표 존의 셀 타입보다 낮은 셀 타입을 가질 수 있다. 제1 타입의 존은 SLC의 셀 타입을 가질 수 있다. 메모리 컨트롤러(120)는 제1 타입의 존에 대한 랜덤 쓰기를 허용할 수 있다.
쓰기 부스터가 활성화되어 있으나 자유 소거 유닛들(EU)의 수가 제2 문턱값(TH2)보다 크지 않으면, 즉 제2 문턱값(TH2)과 같거나 그보다 적으면, 또는 쓰기 부스터가 비활성화되어 있으면, S450 단계에서, 메모리 컨트롤러(120)는 제2 타입 존(예를 들어, 목포 존)을 오픈할 수 있다. 제2 타입 존은 목표 존의 셀 타입을 가질 수 있다. 메모리 컨트롤러(120)는 목표 존이 생성되도록 지정된 논리 유닛의 소거 유닛들을 목표 존에 할당할 수 있다. 메모리 컨트롤러(120)는 제2 타입 존에 대해 순차적인 논리 주소들에 기반한 순차 쓰기만을 허용할 수 있다.
예시적으로, S410 단계에서 쓰기 요청(WR)이 수신된 경우, S410 단계와 S460 단계의 사이에(또는 S440 단계 또는 S450 단계와 S460 단계의 사이에), 쓰기 요청(WR)에 응답하여 메모리 컨트롤러(120)가 외부의 호스트 장치로 레디 투 트랜스퍼(Ready to Transfer) UPIU를 전송하고, 메모리 컨트롤러(120)가 외부의 호스트 장치로부터 데이터 아웃(Data Out) UPIU와 함께 쓰기 데이터를 수신하는 단계, 메모리 컨트롤러(120)는 오픈된 존에 쓰기 요청(WR)에 대응하는 데이터를 기입하는 단계들이 더 수행될 수 있다.
S460 단계에서, 메모리 컨트롤러(120)는 외부의 호스트 장치에 존 타입을 포함하는 응답을 전송할 수 있다. 예를 들어, 응답은 제1 타입 존 및 제2 타입 존 중 어떤 존이 생성되었는지를 포함할 수 있다. 응답은 응답 UPIU 또는 쿼리 응답 UPIU를 통해 출력될 수 있다. 예시적으로, S410 단계에서 쓰기 요청(WR)이 수신된 경우, 응답은 쓰기가 완료되었음을 알리는 정보를 포함할 수 있다.
메모리 컨트롤러(120)는 쓰기 부스터 버퍼에 기입된 데이터의 마이그레이션을 트리거할 수 있다.
도 12는 스토리지 장치(100)가 예비 존을 오픈하는 제3 예를 보여준다. 도 1, 도 3a 내지 도 3e, 그리고 도 12를 참조하면, S510 단계에서, 스토리지 장치(100)의 메모리 컨트롤러(120)는 외부의 호스트 장치로부터 오픈 존 요청(OZ) 또는 쓰기 요청(WR)을 수신할 수 있다. 예를 들어, 쓰기 요청(WR)은 새로운 존의 오픈을 유발하는 쓰기 요청일 수 있다. 오픈 존 요청(OZ) 또는 쓰기 요청(WR)은 오픈을 원하는 존의 타입의 정보를 포함할 수 있다. 오픈 존 요청(OZ) 또는 쓰기 요청(WR)은 커맨드 UPIU 또는 쿼리 리퀘스트 UPIU를 통해 수신될 수 있다.
S520 단계에서, 오픈 존 요청(OZ) 또는 새로운 존의 오픈을 유발하는 쓰기 요청(WR)에 응답하여, 메모리 컨트롤러(120)는 외부의 호스트 장치가 요청한 존의 타입이 제1 타입인지 판단할 수 있다. 요청된 존의 타입이 제1 타입이면, S530 단계에서, 메모리 컨트롤러(120)는 자유 소거 유닛들(EU)의 수가 제3 문턱값(TH3)보다 큰지 판단할 수 있다.
예시적으로, 목표 존 및 예비 존이 논리 유닛(LU) 내에서 생성되도록 설정된 경우, 자유 소거 유닛들(EU)의 수는 논리 유닛(LU) 내의 자유 소거 유닛들의 수일 수 있다. 목표 존 및 예비 존이 사용자 영역(UA) 내에서 생성되도록 설정된 경우, 자유 소거 유닛들(EU)의 수는 사용자 영역(UA)의 자유 소거 유닛들(EU)의 수일 수 있다. 예비 존이 예비 영역(RA)에서 생성되도록 설정된 경우, 자유 소거 유닛들(EU)의 수는 예비 영역(RA)의 자유 소거 유닛들(EU)의 수일 수 있다.
자유 소거 유닛들(EU)의 수가 제3 문턱값(TH3)보다 크면, S540 단계에서, 메모리 컨트롤러(120)는 제1 타입의 존(예를 들어, 예비 존)을 오픈할 수 있다. 메모리 컨트롤러(120)는 예비 존이 생성되도록 지정된 영역의 소거 유닛들을 예비 존에 할당할 수 있다. 제1 타입의 존은 목표 존의 셀 타입보다 낮은 셀 타입을 가질 수 있다. 제1 타입의 존은 SLC의 셀 타입을 가질 수 있다. 메모리 컨트롤러(120)는 제1 타입의 존에 대한 랜덤 쓰기를 허용할 수 있다.
외부의 호스트 장치가 요청한 존의 타입이 제1 타입이지만 자유 소거 유닛들(EU)의 수가 제3 문턱값(TH3)보다 크지 않으면, 즉 제3 문턱값(TH3)과 같거나 그보다 적으면, 또는 외부의 호스트 장치가 요청한 존의 셀 타입이 제2 타입이면, S550 단계에서, 메모리 컨트롤러(120)는 제2 타입 존(예를 들어, 목표 존)을 오픈할 수 있다. 제2 타입 존은 목표 존의 셀 타입을 가질 수 있다. 메모리 컨트롤러(120)는 목표 존이 생성되도록 지정된 논리 유닛의 소거 유닛들을 목표 존에 할당할 수 있다. 메모리 컨트롤러(120)는 제2 타입 존에 대해 순차적인 논리 주소들에 기반한 순차 쓰기만을 허용할 수 있다.
예시적으로, S510 단계에서 쓰기 요청(WR)이 수신된 경우, S510 단계와 S560 단계의 사이에(또는 S540 단계 또는 S550 단계와 S560 단계의 사이에), 쓰기 요청(WR)에 응답하여 메모리 컨트롤러(120)가 외부의 호스트 장치로 레디 투 트랜스퍼(Ready to Transfer) UPIU를 전송하고, 메모리 컨트롤러(120)가 외부의 호스트 장치로부터 데이터 아웃(Data Out) UPIU와 함께 쓰기 데이터를 수신하는 단계, 메모리 컨트롤러(120)는 오픈된 존에 쓰기 요청(WR)에 대응하는 데이터를 기입하는 단계들이 더 수행될 수 있다.
S560 단계에서, 메모리 컨트롤러(120)는 외부의 호스트 장치에 존 타입을 포함하는 응답을 전송할 수 있다. 예를 들어, 외부의 호스트 장치가 요청한 존의 타입과 다른 타입의 존이 오픈되었으면, 응답은 오픈된 존의 정보를 포함할 수 있다. 외부의 호스트 장치가 요청한 존의 타입과 같은 타입의 존이 오픈되었으면, 응답은 오픈된 존의 정보를 포함하지 않을 수 있다. 응답은 응답 UPIU 또는 쿼리 응답 UPIU를 통해 출력될 수 있다. 예시적으로, S510 단계에서 쓰기 요청(WR)이 수신된 경우, 응답은 쓰기가 완료되었음을 알리는 정보를 포함할 수 있다.
예비 존을 오픈한 후에, 메모리 컨트롤러(120)는 예비 존의 데이터를 목표 존으로 이동시키는 마이그레이션을 트리거할 수 있다. 예시적으로, 메모리 컨트롤러(120)는 목표 존을 클로즈할 때에 목표 존의 예비 존을 리셋할 수 있다. 또는, 메모리 컨트롤러(120)는 예비 존의 마이그레이션이 완료되면 예비 존을 리셋할 수 있다. 예시적으로, 예비 존이 생성되도록 지정된 영역의 자유 소거 유닛들(EU)의 수가 문턱값보다 작아지면, 메모리 컨트롤러(120)는 예비 존의 데이터를 목표 존으로 직접 이동시키고 그리고 예비 존을 리셋할 수 있다. 예시적으로, 예비 존이 생성되도록 지정된 영역의 자유 소거 유닛들(EU)의 수가 문턱값보다 작고 그리고 목표 존의 데이터의 논리 주소들과 예비 존의 데이터의 논리 주소들의 사이에 순차성이 보장되지 않으면, 메모리 컨트롤러(120)는 예비 존의 데이터를 백업하고 그리고 예비 존을 리셋할 수 있다. 백업되는 데이터는 예비 영역(RA)의 소거 유닛에 기입될 수 있다.
도 13은 스토리지 장치(100)가 예비 존을 오픈하는 제4 예를 보여준다. 도 1, 도 3a 내지 도 3e, 그리고 도 13을 참조하면, S610 단계에서, 스토리지 장치(100)의 메모리 컨트롤러(120)는 외부의 호스트 장치로부터 오픈 존 요청(OZ) 또는 쓰기 요청(WR)을 수신할 수 있다. 예를 들어, 쓰기 요청(WR)은 새로운 존의 오픈을 유발하는 쓰기 요청일 수 있다. 오픈 존 요청(OZ) 또는 쓰기 요청(WR)은 커맨드 UPIU 또는 쿼리 리퀘스트 UPIU를 통해 수신될 수 있다.
S620 단계에서, 오픈 존 요청(OZ) 또는 새로운 존의 오픈을 유발하는 쓰기 요청(WR)에 응답하여, 메모리 컨트롤러(120)는 자유 소거 유닛들(EU)의 수가 제4 문턱값(TH4)보다 큰지 판단할 수 있다.
예시적으로, 목표 존 및 예비 존이 논리 유닛(LU) 내에서 생성되도록 설정된 경우, 자유 소거 유닛들(EU)의 수는 논리 유닛(LU) 내의 자유 소거 유닛들의 수일 수 있다. 목표 존 및 예비 존이 사용자 영역(UA) 내에서 생성되도록 설정된 경우, 자유 소거 유닛들(EU)의 수는 사용자 영역(UA)의 자유 소거 유닛들(EU)의 수일 수 있다. 예비 존이 예비 영역(RA)에서 생성되도록 설정된 경우, 자유 소거 유닛들(EU)의 수는 예비 영역(RA)의 자유 소거 유닛들(EU)의 수일 수 있다.
자유 소거 유닛들(EU)의 수가 제4 문턱값(TH4)보다 크면, S630 단계에서, 메모리 컨트롤러(120)는 제1 타입의 존(예를 들어, 예비 존)이 가용함(available)을 판단할 수 있다. 자유 소거 유닛들(EU)의 수가 제3 문턱값(TH3)보다 크지 않으면, 즉 제3 문턱값(TH3)과 같거나 그보다 적으면, S640 단계에서 메모리 컨트롤러(120)는 제1 타입 존이 가용하지 않음(unavailable)을 판단할 수 있다. S560 단계에서, 메모리 컨트롤러(120)는 가용한 존 타입의 정보를 포함하는 응답을 외부의 호스트 장치로 전송할 수 있다. 응답은 응답 UPIU 또는 쿼리 응답 UPIU를 통해 전송될 수 있다.
S660 단계에서, 메모리 컨트롤러(120)는 존 타입을 선택하는 요청을 외부의 호스트 장치로부터 수신할 수 있다. 존 타입을 선택하는 요청은 제1 타입 존 및 제2 타입 존 중 외부의 호스트 장치가 오픈을 원하는 존의 타입의 정보를 포함할 수 있다. 존 타입을 선택하는 요청은 커맨드 UPIU 또는 쿼리 UPIU를 통해 수신될 수 있다.
S670 단계에서, 존 타입을 선택하는 요청에 응답하여, 메모리 컨트롤러(120)는 선택된 존 타입의 존을 오픈할 수 있다.
제1 타입 존, 즉 예비 존이 선택된 경우, 메모리 컨트롤러(120)는 예비 존이 생성되도록 지정된 영역의 소거 유닛들을 예비 존에 할당할 수 있다. 제1 타입의 존은 목표 존의 셀 타입보다 낮은 셀 타입을 가질 수 있다. 제1 타입의 존은 SLC의 셀 타입을 가질 수 있다. 메모리 컨트롤러(120)는 제1 타입의 존에 대한 랜덤 쓰기를 허용할 수 있다.
제2 타입 존이 선택된 경우, 메모리 컨트롤러(120)는 제2 타입 존(예를 들어, 목표 존)을 오픈할 수 있다. 제2 타입 존은 목표 존의 셀 타입을 가질 수 있다. 메모리 컨트롤러(120)는 목표 존이 생성되도록 지정된 논리 유닛의 소거 유닛들을 목표 존에 할당할 수 있다. 메모리 컨트롤러(120)는 제2 타입 존에 대해 순차적인 논리 주소들에 기반한 순차 쓰기만을 허용할 수 있다.
예시적으로, S610 단계에서 쓰기 요청(WR)이 수신된 경우, S410 단계와 S460 단계의 사이에(또는 S67와 S680 단계의 사이에), 쓰기 요청(WR)에 응답하여 메모리 컨트롤러(120)가 외부의 호스트 장치로 레디 투 트랜스퍼(Ready to Transfer) UPIU를 전송하고, 메모리 컨트롤러(120)가 외부의 호스트 장치로부터 데이터 아웃(Data Out) UPIU와 함께 쓰기 데이터를 수신하는 단계, 메모리 컨트롤러(120)는 오픈된 존에 쓰기 요청(WR)에 대응하는 데이터를 기입하는 단계들이 더 수행될 수 있다.
S680 단계에서, 메모리 컨트롤러(120)는 외부의 호스트 장치에 존이 오픈되었음을 알리는 응답을 전송할 수 있다. 예를 들어, 외부의 호스트 장치가 요청한 존의 타입과 다른 타입의 존이 오픈되었으면, 응답은 오픈된 존의 정보를 포함할 수 있다. 외부의 호스트 장치가 요청한 존의 타입과 같은 타입의 존이 오픈되었으면, 응답은 오픈된 존의 정보를 포함하지 않을 수 있다. 응답은 응답 UPIU 또는 쿼리 응답 UPIU를 통해 출력될 수 있다. 예시적으로, S610 단계에서 쓰기 요청(WR)이 수신된 경우, 응답은 쓰기가 완료되었음을 알리는 정보를 포함할 수 있다.
예비 존을 오픈한 후에, 메모리 컨트롤러(120)는 예비 존의 데이터를 목표 존으로 이동시키는 마이그레이션을 트리거할 수 있다. 예시적으로, 메모리 컨트롤러(120)는 목표 존을 클로즈할 때에 목표 존의 예비 존을 리셋할 수 있다. 또는, 메모리 컨트롤러(120)는 예비 존의 마이그레이션이 완료되면 예비 존을 리셋할 수 있다. 예시적으로, 예비 존이 생성되도록 지정된 영역의 자유 소거 유닛들(EU)의 수가 문턱값보다 작아지면, 메모리 컨트롤러(120)는 예비 존의 데이터를 목표 존으로 직접 이동시키고 그리고 예비 존을 리셋할 수 있다. 예시적으로, 예비 존이 생성되도록 지정된 영역의 자유 소거 유닛들(EU)의 수가 문턱값보다 작고 그리고 목표 존의 데이터의 논리 주소들과 예비 존의 데이터의 논리 주소들의 사이에 순차성이 보장되지 않으면, 메모리 컨트롤러(120)는 예비 존의 데이터를 백업하고 그리고 예비 존을 리셋할 수 있다. 백업되는 데이터는 예비 영역(RA)의 소거 유닛에 기입될 수 있다.
도 14는 스토리지 장치(100)가 예비 존을 오픈하는 제5 예를 보여준다. 도 1, 도 3a 내지 도 3e, 그리고 도 14를 참조하면, S710 단계에서, 스토리지 장치(100)의 메모리 컨트롤러(120)는 외부의 호스트 장치로부터 오픈 존 요청(OZ) 또는 쓰기 요청(WR)을 수신할 수 있다. 예를 들어, 쓰기 요청(WR)은 새로운 존의 오픈을 유발하는 쓰기 요청일 수 있다. 오픈 존 요청(OZ) 또는 쓰기 요청(WR)은 커맨드 UPIU 또는 쿼리 리퀘스트 UPIU를 통해 수신될 수 있다.
S720 단계에서, 오픈 존 요청(OZ) 또는 새로운 존의 오픈을 유발하는 쓰기 요청(WR)에 응답하여, 메모리 컨트롤러(120)는 쓰기 부스터가 활성화되어 있는지 판단할 수 있다. 쓰기 부스터가 활성화되어 있지 않으면, S730 단계에서, 메모리 컨트롤러(120)는 제2 타입 존을 선택할 수 있다.
쓰기 부스터가 활성화되어 있으면, S740 단계에서, 오픈 존 요청(OZ) 또는 새로운 존의 오픈을 유발하는 쓰기 요청(WR)에 응답하여, 메모리 컨트롤러(120)는 자유 소거 유닛들(EU)의 수가 제5 문턱값(TH5)보다 큰지 판단할 수 있다.
예시적으로, 도 3b 및 도 3d와 같이 쓰기 부스터 버퍼가 논리 유닛들(LU)과 중복되도록 생성된 경우, 자유 소거 유닛들(EU)의 사용자 영역(UA)의 자유 소거 유닛들(EU)의 수일 수 있다. 도 3c 및 도 3e와 같이 쓰기 부스터 버퍼가 전용으로 생성된 경우, 자유 소거 유닛들(EU)의 수는 쓰기 부스터 버퍼의 자유 소거 유닛들(EU)의 수일 수 있다. 쓰기 부스터 버퍼가 전용으로 생성된 경우, 제2 문턱 값(TH2)은 하나의 존에 포함되는 소거 유닛들의 수보다 '1'만큼 작을 수 있다. 즉, 쓰기 부스터 버퍼에서 새로운 존의 오픈이 가능하면, 메모리 컨트롤러(120)는 예비 존을 오픈할 수 있다.
자유 소거 유닛들(EU)의 수가 제5 문턱값(TH5)보다 크면, S7530 단계에서, 메모리 컨트롤러(120)는 제1 타입의 존(예를 들어, 예비 존)이 가용함(available)을 판단할 수 있다. 자유 소거 유닛들(EU)의 수가 제5 문턱값(TH5)보다 크지 않으면, 즉 제5 문턱값(TH5)과 같거나 그보다 적으면, S760 단계에서 메모리 컨트롤러(120)는 제1 타입 존이 가용하지 않음(unavailable)을 판단할 수 있다. S770 단계에서, 메모리 컨트롤러(120)는 가용한 존 타입의 정보를 포함하는 응답을 외부의 호스트 장치로 전송할 수 있다. 응답은 응답 UPIU 또는 쿼리 응답 UPIU를 통해 전송될 수 있다.
S780 단계에서, 메모리 컨트롤러(120)는 존 타입을 선택하는 요청을 외부의 호스트 장치로부터 수신할 수 있다. 존 타입을 선택하는 요청은 제1 타입 존 및 제2 타입 존 중 외부의 호스트 장치가 오픈을 원하는 존의 타입의 정보를 포함할 수 있다. 존 타입을 선택하는 요청은 커맨드 UPIU 또는 쿼리 UPIU를 통해 수신될 수 있다.
S790 단계에서, 존 타입을 선택하는 요청에 응답하여, 메모리 컨트롤러(120)는 선택된 존 타입의 존을 오픈할 수 있다. 또는, 메모리 컨트롤러(120)는 S730 단계에서 선택된 제2 타입 존을 오픈할 수 있다.
제1 타입 존, 즉 예비 존이 선택된 경우, 메모리 컨트롤러(120)는 예비 존이 생성되도록 지정된 영역의 소거 유닛들을 예비 존에 할당할 수 있다. 제1 타입의 존은 목표 존의 셀 타입보다 낮은 셀 타입을 가질 수 있다. 제1 타입의 존은 SLC의 셀 타입을 가질 수 있다. 메모리 컨트롤러(120)는 제1 타입의 존에 대한 랜덤 쓰기를 허용할 수 있다.
제2 타입 존이 선택된 경우, 메모리 컨트롤러(120)는 제2 타입 존(예를 들어, 목표 존)을 오픈할 수 있다. 제2 타입 존은 목표 존의 셀 타입을 가질 수 있다. 메모리 컨트롤러(120)는 목표 존이 생성되도록 지정된 논리 유닛의 소거 유닛들을 목표 존에 할당할 수 있다. 메모리 컨트롤러(120)는 제2 타입 존에 대해 순차적인 논리 주소들에 기반한 순차 쓰기만을 허용할 수 있다.
예시적으로, S710 단계에서 쓰기 요청(WR)이 수신된 경우, S710 단계와 S790 단계의 사이에(또는 S790 단계와 S795 단계의 사이에), 쓰기 요청(WR)에 응답하여 메모리 컨트롤러(120)가 외부의 호스트 장치로 레디 투 트랜스퍼(Ready to Transfer) UPIU를 전송하고, 메모리 컨트롤러(120)가 외부의 호스트 장치로부터 데이터 아웃(Data Out) UPIU와 함께 쓰기 데이터를 수신하는 단계, 메모리 컨트롤러(120)는 오픈된 존에 쓰기 요청(WR)에 대응하는 데이터를 기입하는 단계들이 더 수행될 수 있다.
S795 단계에서, 메모리 컨트롤러(120)는 외부의 호스트 장치에 존이 오픈되었음을 알리는 응답을 전송할 수 있다. 예를 들어, 외부의 호스트 장치가 요청한 존의 타입과 다른 타입의 존이 오픈되었으면, 응답은 오픈된 존의 정보를 포함할 수 있다. 외부의 호스트 장치가 요청한 존의 타입과 같은 타입의 존이 오픈되었으면, 응답은 오픈된 존의 정보를 포함하지 않을 수 있다. 응답은 응답 UPIU 또는 쿼리 응답 UPIU를 통해 출력될 수 있다. 예시적으로, S710 단계에서 쓰기 요청(WR)이 수신된 경우, 응답은 쓰기가 완료되었음을 알리는 정보를 포함할 수 있다.
메모리 컨트롤러(120)는 쓰기 부스터 버퍼에 기입된 데이터의 마이그레이션을 트리거할 수 있다.
도 15는 스토리지 장치(100)가 예비 존을 오픈하는 제6 예를 보여준다. 도 1, 도 3a 내지 도 3e, 그리고 도 15를 참조하면, S810 단계에서, 스토리지 장치(100)의 메모리 컨트롤러(120)는 외부의 호스트 장치로부터 오픈 존 요청(OZ) 또는 쓰기 요청(WR)을 수신할 수 있다. 예를 들어, 쓰기 요청(WR)은 새로운 존의 오픈을 유발하는 쓰기 요청일 수 있다. 오픈 존 요청(OZ) 또는 쓰기 요청(WR)은 오픈을 원하는 존의 타입의 정보를 포함할 수 있다. 오픈 존 요청(OZ) 또는 쓰기 요청(WR)은 커맨드 UPIU 또는 쿼리 리퀘스트 UPIU를 통해 수신될 수 있다.
S820 단계에서, 오픈 존 요청(OZ) 또는 새로운 존의 오픈을 유발하는 쓰기 요청(WR)에 응답하여, 메모리 컨트롤러(120)는 외부의 호스트 장치가 요청한 존의 타입이 제1 타입인지 판단할 수 있다. 요청된 존의 타입이 제1 타입이 아니면, S830 단계에서, 메모리 컨트롤러(120)는 제2 타입 존을 선택할 수 있다.
요청된 존의 타입이 제1 타입이면, S840 단계에서, 메모리 컨트롤러(120)는 자유 소거 유닛들(EU)의 수가 제6 문턱값(TH6)보다 큰지 판단할 수 있다.
예시적으로, 목표 존 및 예비 존이 논리 유닛(LU) 내에서 생성되도록 설정된 경우, 자유 소거 유닛들(EU)의 수는 논리 유닛(LU) 내의 자유 소거 유닛들의 수일 수 있다. 목표 존 및 예비 존이 사용자 영역(UA) 내에서 생성되도록 설정된 경우, 자유 소거 유닛들(EU)의 수는 사용자 영역(UA)의 자유 소거 유닛들(EU)의 수일 수 있다. 예비 존이 예비 영역(RA)에서 생성되도록 설정된 경우, 자유 소거 유닛들(EU)의 수는 예비 영역(RA)의 자유 소거 유닛들(EU)의 수일 수 있다.
자유 소거 유닛들(EU)의 수가 제6 문턱값(TH6)보다 크면, 즉 제6 문턱값(TH6)과 같거나 그보다 작으면, S850 단계에서 메모리 컨트롤러(120)는 제1 타입 존을 선택할 수 있다.
자유 소거 유닛들(EU)의 수가 제6 문턱값(TH6)보다 크지 않으면, S860 단계에서, 메모리 컨트롤러(120)는 가용하지 않은 존 타입의 정보를 포함하는 응답을 외부의 호스트 장치로 전송할 수 있다. 예를 들어, 메모리 컨트롤러(120)는 제1 타입 존이 가용하지 않음을 알리는 응답을 외부의 호스트 장치로 전송할 수 있다. 응답은 응답 UPIU 또는 쿼리 응답 UPIU를 통해 전송될 수 있다.
S870 단계에서, 메모리 컨트롤러(120)는 제2 존 타입을 선택하는 요청을 외부의 호스트 장치로부터 수신할 수 있다. 제2 존 타입을 선택하는 요청은 커맨드 UPIU 또는 쿼리 UPIU를 통해 수신될 수 있다.
S880 단계에서, 메모리 컨트롤러(120)는 선택된 존 타입의 존을 오픈할 수 있다. 예를 들어, 메모리 컨트롤러(120)는 S830 단계에서 선택된 제2 타입 존, S850 단계에서 선택된 제1 타입 존, 또는 S870 단계에서 선택된 제2 타입 존을 오픈할 수 있다.
예시적으로, S810 단계에서 쓰기 요청(WR)이 수신된 경우, S810 단계와 S890 단계의 사이에(또는 S880 단계와 S890 단계의 사이에), 쓰기 요청(WR)에 응답하여 메모리 컨트롤러(120)가 외부의 호스트 장치로 레디 투 트랜스퍼(Ready to Transfer) UPIU를 전송하고, 메모리 컨트롤러(120)가 외부의 호스트 장치로부터 데이터 아웃(Data Out) UPIU와 함께 쓰기 데이터를 수신하는 단계, 메모리 컨트롤러(120)는 오픈된 존에 쓰기 요청(WR)에 대응하는 데이터를 기입하는 단계들이 더 수행될 수 있다.
S890 단계에서, 메모리 컨트롤러(120)는 외부의 호스트 장치에 존이 오픈되었음을 알리는 응답을 전송할 수 있다. 응답은 응답 UPIU 또는 쿼리 응답 UPIU를 통해 출력될 수 있다. 예시적으로, S810 단계에서 쓰기 요청(WR)이 수신된 경우, 응답은 쓰기가 완료되었음을 알리는 정보를 포함할 수 있다.
예비 존을 오픈한 후에, 메모리 컨트롤러(120)는 예비 존의 데이터를 목표 존으로 이동시키는 마이그레이션을 트리거할 수 있다. 예시적으로, 메모리 컨트롤러(120)는 목표 존을 클로즈할 때에 목표 존의 예비 존을 리셋할 수 있다. 또는, 메모리 컨트롤러(120)는 예비 존의 마이그레이션이 완료되면 예비 존을 리셋할 수 있다. 예시적으로, 예비 존이 생성되도록 지정된 영역의 자유 소거 유닛들(EU)의 수가 문턱값보다 작아지면, 메모리 컨트롤러(120)는 예비 존의 데이터를 목표 존으로 직접 이동시키고 그리고 예비 존을 리셋할 수 있다. 예시적으로, 예비 존이 생성되도록 지정된 영역의 자유 소거 유닛들(EU)의 수가 문턱값보다 작고 그리고 목표 존의 데이터의 논리 주소들과 예비 존의 데이터의 논리 주소들의 사이에 순차성이 보장되지 않으면, 메모리 컨트롤러(120)는 예비 존의 데이터를 백업하고 그리고 예비 존을 리셋할 수 있다. 백업되는 데이터는 예비 영역(RA)의 소거 유닛에 기입될 수 있다.
도 16은 스토리지 장치(100)가 데이터를 불휘발성 메모리 장치(110)에 기입하는 예를 보여준다. 도 1 및 도 16을 참조하면, S910 단계에서, 메모리 컨트롤러(120)는 외부의 호스트 장치로부터 쓰기 요청(WR)을 수신할 수 있다. 쓰기 요청(WR)은 커맨드 UPIU를 통해 수신될 수 있다. 예시적으로, 쓰기 요청(WR)에 응답하여 메모리 컨트롤러(120)는 외부의 호스트 장치로 레디 투 트랜스퍼(Ready to Transfer) UPIU를 전송하고, 외부의 호스트 장치로부터 데이터 아웃(Data Out) UPIU와 함께 쓰기 데이터를 수신할 수 있다.
S920 단계에서, 메모리 컨트롤러(120)는 데이터를 존 버퍼에 저장할 수 있다. 예시적으로, 메모리 컨트롤러(120)는 내부 버퍼(123)에 복수의 존 버퍼들을 할당할 수 있다. 각 존 버퍼는 대응하는 존이 기입될 데이터를 저장할 수 있다. 메모리 컨트롤러(120)는 쓰기 요청(WR)과 함께 수신된 데이터의 논리 주소 및 존 맵 테이블에 기반하여 목표 존을 식별하고, 그리고 데이터를 목표 존의 존 버퍼에 저장할 수 있다.
S930 단계에서, 메모리 컨트롤러(120)는 목표 존의 페이지 데이터가 모두 수집되었는지 판단할 수 있다. 예를 들어, 목표 존의 셀 타입이 TLC일 때, 메모리 컨트롤러(120)는 목표 존에 기입된 마지막 데이터의 논리 주소에 순차적인 논리 주소들을 갖는 세 개의 페이지 데이터가 존 버퍼에 저장되면, 목표 존의 페이지 데이터가 모두 수집되었음을 판단할 수 있다.
목표 존의 데이터가 모두 수집되지 않았으면, 메모리 컨트롤러(120)는 존 버퍼에 데이터를 저장한 채로 프로세스를 종료할 수 있다. 목표 존의 데이터가 모두 수집되었으면, S950 단계에서, 메모리 컨트롤러(120)는 목표 존에 대해 쓰기 동작을 수행할 수 있다. 예를 들어, 메모리 컨트롤러(120)는 목표 존에 할당된 불휘발성 메모리 장치(110)의 소거 유닛(들)에 대해 쓰기 동작을 수행하여 데이터를 기입할 수 있다.
도 17은 도 16의 방법에 따라 불휘발성 메모리 장치(110)에 데이터가 기입되는 예를 보여준다. 도 17에서, 간결한 설명을 위하여, 내부 버퍼(123) 및 하나의 불휘발성 메모리 장치(110)를 제외한 다른 구성 요소들은 생략된다.
도 1, 도 16 및 도 17을 참조하면, 내부 버퍼(123)는 메타 버퍼(MB), 읽기 버퍼(RB), 그리고 존 버퍼(ZB)를 포함할 수 있다. 메타 버퍼(MB)는 메타 데이터를 저장하는데 사용될 수 있다. 예를 들어, 메타 버퍼(MB)는 존 맵 테이블(ZM) 및 페이지 맵 테이블(PM)을 저장할 수 있다. 읽기 버퍼(RB)는 불휘발성 메모리 장치(110)로부터 읽은 데이터를 저장하는데 사용될 수 있다.
버퍼(ZB)는 존 쓰기(ZW)의 논리 유닛들(LU)(도 3a 내지 도 3e 참조)에 기입될 데이터를 저장하는데 사용될 수 있다. 예시적으로, 존 버퍼(ZB)는 제5 존(Z5)에 대응하는 존 버퍼(BA_Z5), 그리고 제6 존(Z6)에 대응하는 존 버퍼(BA_Z6)를 포함하는 것으로 도시된다. 도시되지 않았지만, 내부 버퍼(123)는 랜덤 쓰기(RW)의 논리 유닛들(LU)에 기입될 데이터를 저장하는데 사용되는 버퍼를 더 포함할 수 있다.
데이터 입력 단계(SDIN)에서 외부의 호스트 장치로부터 제5 존에 기입되도록 수신되는 데이터는 제5 존(Z5)의 버퍼(BA_Z5)에 저장될 수 있다. 제5 존(Z5)의 존 버퍼(BA_Z5)에 제5 존(Z5)의 쓰기 유닛(WU)에 대응하는 데이터가 저장되면, 쓰기 단계(SWR)에서, 메모리 컨트롤러(120)는 쓰기 유닛(WU)에 대응하는 데이터를 제5 존(Z5)의 존 버퍼(BA_Z5)로부터 읽어 제5 존(Z5)에 기입할 수 있다. 예를 들어, 제5 존(Z5)의 셀 타입이 TLC일 때, 제5 존(Z5)의 쓰기 유닛은 3개의 페이지 데이터일 수 있다.
메모리 컨트롤러(120)는 제5 존(Z5)에 쓰기 유닛(WU)의 데이터를 기입하기 전에, 기입하는 동안 또는 기입한 후에, 논리 주소(LBA) 및 물리 주소(PBA)를 매핑하는 페이지 맵 테이블(PM)을 생성할 수 있다. 페이지 맵 테이블(PM)은 내부 버퍼(123)의 메타 버퍼(MB)에 저장될 수 있다.
도 18은 스토리지 장치(100)가 쓰기 동작을 수행하는 동안 존을 오픈하는 제1 예를 보여준다. 도 1 및 도 18을 참조하면, S1010 단계에서, 메모리 컨트롤러(120)는 외부의 호스트 장치로부터 쓰기 요청(WR)을 수신할 수 있다. 쓰기 요청(WR)은 커맨드 UPIU를 통해 수신될 수 있다.
S1020 단계에서, 메모리 컨트롤러(120)는 쓰기 요청된 데이터가 존을 넘어서는지 판단할 수 있다. 예를 들어, 쓰기 요청(WR)에 의해 쓰기 요청된 데이터의 양이 목표 존의 자유 용량보다 크면, 메모리 컨트롤러(120)는 쓰기 요청된 데이터가 존을 넘어서는 것으로 판단할 수 있다.
존을 넘어선 데이터의 쓰기가 요청되지 않았으면, 메모리 컨트롤러(120)는 외부의 호스트 장치로 레디 투 트랜스퍼(Ready to Transfer) UPIU를 전송하고, 외부의 호스트 장치로부터 데이터 아웃(Data Out) UPIU와 함께 쓰기 데이터를 수신할 수 있다. S1030 단계에서, 메모리 컨트롤러(120)는 수신된 데이터의 목표 존에 대한 쓰기를 수행할 수 있다.
존을 넘어선 데이터의 쓰기가 요청되었으면, S1040 단계에서, 메모리 컨트롤러(120)는 다음 존을 오픈할 지 판단할 수 있다. 다음 존을 오픈할 것으로 판단되면, 메모리 컨트롤러(120)는 외부의 호스트 장치와의 통신 없이 자체적으로 다음 존을 오픈할 수 있다. 다음 존은 논리 주소들 상에서 후속하는 존일 수 있다.
S1050 단계에서, 메모리 컨트롤러(120)는 수신된 데이터의 목표 존에 대한 쓰기를 수행할 수 있다. S1020 단계 및 S1050 단계의 사이에, 메모리 컨트롤러(120)는 외부의 호스트 장치로 레디 투 트랜스퍼(Ready to Transfer) UPIU를 전송하고, 외부의 호스트 장치로부터 데이터 아웃(Data Out) UPIU와 함께 쓰기 데이터를 수신할 수 있다.
S1060 단계에서, 메모리 컨트롤러(120)는 존을 넘어선 쓰기가 수행되는지 판단할 수 있다. 예를 들어, 다음 존을 오픈한 경우, 메모리 컨트롤러(120)는 존을 넘어선 쓰기가 수행되는 것으로 판단할 수 있다. 다음 존을 오픈하지 않은 경우, 메모리 컨트롤러(120)는 존을 넘어선 쓰기가 수행되지 않는 것으로 판단할 수 있다.
존을 넘어선 쓰기가 수행되지 않으면, S1070 단계에서, 메모리 컨트롤러(120)는 외부의 호스트 장치로 응답을 전송할 수 있다. 응답은 목표 존에 대한 쓰기가 완료되었음을 알리는 정보, 쓰기가 완료되지 않았음을 알리는 정보, 쓰기가 완료된 논리 주소의 정보 등과 같은 연관된 정보들 중 적어도 하나를 포함할 수 있다. 응답은 응답 UPIU를 통해 전송될 수 있다. 이후 프로세스는 종료될 수 있다.
존을 넘어선 쓰기가 수행되면, S1080 단계에서, 메모리 컨트롤러(120)는 다음 존에 대한 쓰기를 수행할 수 있다. 이후에, S1090 단계에서, 메모리 컨트롤러(120)는 외부의 호스트 장치로 응답을 전송할 수 있다. 응답은 쓰기가 완료되었음을 알리는 정보, 새로운 존이 오픈되었음을 알리는 정보, 새로운 존의 셀 타입에 대한 정보와 같은 연관된 정보들 중 적어도 하나를 포함할 수 있다. 응답은 응답 UPIU를 통해 전송될 수 있다.
도 19는 존을 넘어선 쓰기가 수행되는 예를 보여준다. 도 1 및 도 19를 참조하면, 쓰기 데이터는 제7 존(Z7)의 쓰기의 시작 지점부터 기입될 수 있다. 쓰기 데이터의 일부가 제7 존을 가득 채우면, 메모리 컨트롤러(120)는 제8 존(Z8)을 오픈할 수 있다. 이후에, 쓰기의 종료 지점까지, 쓰기 데이터가 한 번의 연속적인 쓰기(OCW)를 통해 기입될 수 있다.
도 20은 스토리지 장치(100)가 다음 존을 오픈할 지 판단하는 제1 예를 보여준다. 예시적으로, 도 20은 도 18의 S1040 단계에 대응할 수 있다. 도 1 및 도 20을 참조하면, S1110 단계에서, 메모리 컨트롤러(120)는 다음 존이 쓰기 가능한지 판단할 수 있다. 예를 들어, 다음 존이 읽기 전용 존이면, 다음 존은 쓰기 가능하지 않을 수 있다. 다음 존이 쓰기 가능하지 않으면, 메모리 컨트롤러(120)는 다음 존을 오픈하지 않는 것으로 판단할 수 있다.
다음 존이 쓰기 가능하면, S1120 단계에서, 메모리 컨트롤러(120)는 다음 존이 비어 있는지 판단할 수 있다. 다음 존에 이미 데이터가 기입되어 있으면, 메모리 컨트롤러(120)는 다음 존이 비어 있지 않은 것으로 판단할 수 있다.
다음 존이 비어 있으면, 메모리 컨트롤러(120)는 다음 존이 목표 존과 동일한 특색을 갖는지 판단할 수 있다. 예를 들어, 메모리 컨트롤러(120)는 목표 존의 특색과 다음 존의 특색에 따라 선택적으로 다음 존을 오픈할 수 있다. 목표 존의 특색과 다음 존의 특색이 동일하면, 메모리 컨트롤러(120)는 다음 존을 오픈하는 것으로 판단할 수 있다. 목표 존의 특색과 다음 존의 특색이 서로 다르면, 메모리 컨트롤러(120)는 다음 존을 오픈하지 않는 것으로 판단할 수 있다.
예를 들어, 각 존의 특색은 각 존의 메모리 셀 당 기입되는 비트들의 수인 셀 타입을 포함할 수 있다. 목표 존의 셀 타입과 다음 존의 셀 타입이 같으면, 메모리 컨트롤러(120)는 다음 존을 오픈할 수 있다.
각 존의 특색은 스트림 식별자를 포함할 수 있다. 메모리 컨트롤러(120)는 외부의 호스트 장치로부터 쓰기 요청(WR)을 수신할 때 스트림 식별자를 함께 수신할 수 있다. 메모리 컨트롤러(120) 또는 외부의 호스트 장치는 각 존에 스트림 식별자를 할당하고, 대응하는 스트림 식별자를 갖는 데이터를 기입할 수 있다. 목표 존에 할당된 스트림 식별자와 다음 존의 스트림 식별자가 같으면, 메모리 컨트롤러(120)는 다음 존을 오픈할 수 있다.
각 존의 특색은 온도를 포함할 수 있다. 메모리 컨트롤러(120)는 각 존에 기입되는 데이터가 갱신되는 빈도에 따라, 각 존에 온도를 부여할 수 있다. 예를 들어, 제1 존(Z1)의 데이터가 갱신되는 빈도가 제1 임계값보다 낮으면, 메모리 컨트롤러(120)는 제1 존(Z1)을 콜드 존으로 분류할 수 있다. 제2 존(Z2)의 데이터가 갱신되는 빈도가 제1 임계값 이상이고 그리고 제2 임계값보다 낮으면, 메모리 컨트롤러(120)는 제2 존(Z2)을 웜 존으로 분류할 수 있다. 제3 존(Z2)의 데이터가 갱신되는 빈도가 제2 임계값 이상이면, 메모리 컨트롤러(120)는 제3 존(Z3)을 핫 존으로 분류할 수 있다. 목표 존의 온도와 다음 존의 온도가 같으면, 메모리 컨트롤러(120)는 다음 존을 오픈할 수 있다.
즉, 메모리 컨트롤러(120)는 다음 존이 쓰기 가능하고, 비어 있고, 그리고 다음 존의 특색이 목표 존의 특색과 같으면, S1140 단계에서, 메모리 컨트롤러(120)는 존을 넘어선 쓰기를 결정할 수 있다.
도 21은 스토리지 장치(100)가 다음 존을 오픈할 지 판단하는 제2 예를 보여준다. 예시적으로, 도 21은 도 18의 S1040 단계에 대응할 수 있다. 도 1 및 도 21을 참조하면, S1210 단계에서, 메모리 컨트롤러(120)는 다음 존이 갭 존인지 판단할 수 있다. 다음 존이 갭 존이면, S1220 단계에서, 메모리 컨트롤러(120)는 다음 존 이후의 존을 선택할 수 있다. 이후에, 메모리 컨트롤러(120)는 다음 존 이후의 존에 대해 S1230 단계, S1240 단계, S1250 단계 및 S1260 단계를 수행함으로써, 다음 존 이후의 존을 오픈할 지 판단할 수 있다.
다음 존이 갭 존이 아니면, 메모리 컨트롤러(120)는 다음 존의 선택을 유지할 수 있다. 이후에, 메모리 컨트롤러(120)는 다음 존에 대해 S1230 단계, S1240 단계, S1250 단계 및 S1260 단계를 수행함으로써, 다음 존을 오픈할 지 판단할 수 있다.
S1230 단계, S1240 단계, S1250 단계 및 S1260 단계는 도 20의 S1110 단계, S1120 단계, S1130 단계 및 S1140 단계와 동일하게 수행된다. 따라서, 중복되는 설명은 생략된다.
도 22는 스토리지 장치(100)가 쓰기 동작을 수행하는 동안 존을 오픈하는 제2 예를 보여준다. 도 1 및 도 22를 참조하면, S1310 단계에서, 메모리 컨트롤러(120)는 외부의 호스트 장치로부터 쓰기 요청(WR)을 수신할 수 있다. 쓰기 요청(WR)은 커맨드 UPIU를 통해 수신될 수 있다.
S1320 단계에서, 메모리 컨트롤러(120)는 쓰기 요청된 데이터가 존을 넘어서는지 판단할 수 있다. 예를 들어, 쓰기 요청(WR)에 의해 쓰기 요청된 데이터의 양이 목표 존의 자유 용량보다 크면, 메모리 컨트롤러(120)는 쓰기 요청된 데이터가 존을 넘어서는 것으로 판단할 수 있다.
존을 넘어선 데이터의 쓰기가 요청되지 않았으면, 메모리 컨트롤러(120)는 외부의 호스트 장치로 레디 투 트랜스퍼(Ready to Transfer) UPIU를 전송하고, 외부의 호스트 장치로부터 데이터 아웃(Data Out) UPIU와 함께 쓰기 데이터를 수신할 수 있다. S1330 단계에서, 메모리 컨트롤러(120)는 수신된 데이터의 목표 존에 대한 쓰기를 수행할 수 있다.
존을 넘어선 데이터의 쓰기가 요청되었으면, S1340 단계에서, 메모리 컨트롤러(120)는 다음 존을 오픈할 지 판단할 수 있다. 다음 존을 오픈할 것으로 판단되면, 메모리 컨트롤러(120)는 외부의 호스트 장치와의 통신 없이 자체적으로 다음 존을 오픈할 수 있다. 다음 존은 논리 주소들 상에서 후속하는 존일 수 있다.
S1350 단계에서, 메모리 컨트롤러(120)는 존을 넘어선 쓰기가 수행되는지 판단할 수 있다. 예를 들어, 다음 존을 오픈한 경우, 메모리 컨트롤러(120)는 존을 넘어선 쓰기가 수행되는 것으로 판단할 수 있다. 다음 존을 오픈하지 않은 경우, 메모리 컨트롤러(120)는 존을 넘어선 쓰기가 수행되지 않는 것으로 판단할 수 있다.
존을 넘어선 쓰기가 수행되지 않으면, S1360 단계에서, 메모리 컨트롤러(120)는 외부의 호스트 장치로 응답을 전송할 수 있다. 응답은 쓰기가 수행되지 않았음을 알리는 정보, 데이터의 양이 목표 존의 자유 용량보다 큼을 알리는 정보 등과 같은 연관된 정보들 중 적어도 하나를 포함할 수 있다. 응답은 응답 UPIU를 통해 전송될 수 있다. 이후 프로세스는 종료될 수 있다.
존을 넘어선 쓰기가 수행되면, S1350 단계에서, 메모리 컨트롤러(120)는 수신된 데이터의 목표 존에 대한 쓰기를 수행할 수 있다. S1320 단계 및 S1350 단계의 사이에(또는 S1350 단계 및 S1370 단계의 사이에), 메모리 컨트롤러(120)는 외부의 호스트 장치로 레디 투 트랜스퍼(Ready to Transfer) UPIU를 전송하고, 외부의 호스트 장치로부터 데이터 아웃(Data Out) UPIU와 함께 쓰기 데이터를 수신할 수 있다.
S1380 단계에서, 메모리 컨트롤러(120)는 다음 존에 대한 쓰기를 수행할 수 있다. 이후에, S1390 단계에서, 메모리 컨트롤러(120)는 외부의 호스트 장치로 응답을 전송할 수 있다. 응답은 쓰기가 완료되었음을 알리는 정보, 새로운 존이 오픈되었음을 알리는 정보, 새로운 존의 셀 타입에 대한 정보와 같은 연관된 정보들 중 적어도 하나를 포함할 수 있다. 응답은 응답 UPIU를 통해 전송될 수 있다.
도 23은 스토리지 장치(100)가 존을 넘어선 쓰기의 설정을 조절하는 예를 보여준다. 도 1 및 도 23을 참조하면, S1410 단계에서, 메모리 컨트롤러(120)는 외부의 호스트 장치로부터 셋 요청을 수신할 수 있다. 셋 요청은 커맨드 UPIU 또는 쿼리 리퀘스트 UPIU를 통해 수신될 수 있다.
셋 요청은 존을 넘어선 쓰기를 수행하기 위한 파라미터들의 정보를 포함할 수 있다. 예시적으로, 셋 요청은 도 20 또는 도 21을 참조하여 설명된, 새로운 존을 오픈할 지를 판단하기 위한 조건들의 각각의 활성화 여부에 대한 정보를 포함할 수 있다. 셋 요청은 도 19를 참조하여 설명된 방법 및 도 22를 참조하여 설명된 방법 중 어느 것을 활성화할 지 또는 모두 비활성화할 지의 정보를 포함할 수 있다.
S1420 단계에서, 메모리 컨트롤러(120)는 셋 요청에 응답하여 존을 넘어선 쓰기의 파라미터를 조절할 수 있다. S1430 단계에서, 메모리 컨트롤러(120)는 외부의 호스트 장치로 응답을 전송할 수 있다. 응답은 존을 넘어선 쓰기의 파라미터들이 성공적으로 조절되었음을 알리는 정보를 포함할 수 있다. 응답은 응답 UPIU 또는 쿼리 응답 UPIU를 통해 전송될 수 있다.
도 24는 스토리지 장치(100)가 존 맵 서비스를 제공하는 제1 예를 보여준다. 도 1 및 도 24를 참조하면, S1510 단계에서, 메모리 컨트롤러(120)는 목표 존이 가득 차는지 판단할 수 있다. 예를 들어, 메모리 컨트롤러(120)는 목표 존에 대한 쓰기 동작을 수행하고, 그리고 쓰기 동작에 의해 목표 존의 자유 용량이 소진되는지 판단할 수 있다.
목표 존이 가득 차지 않으면, 메모리 컨트롤러(120)는 목표 존에 대한 존 맵 서비스를 활성화하지 않을 수 있다. 목표 존이 가득 차면, 메모리 컨트롤러(120)는 목표 존에 대한 존 맵 서비스를 활성화할 수 있다. 목표 존에 대한 존 맵 서비스가 활성화되면, 메모리 컨트롤러(120)는 목표 존에 대한 읽기 요청을 목표 존의 존 맵 테이블에 기반하여 외부의 호스트 장치의 읽기 요청들을 처리할 수 있다.
목표 존에 대한 존 맵 서비스가 활성화된 후에, S1530 단계에서, 메모리 컨트롤러(120)는 목표 존의 페이지 맵 테이블을 플러시할 수 있다. 예를 들어, 메모리 컨트롤러(120)는 목표 존의 페이지 맵 테이블을 불휘발성 메모리 장치(110)의 메타 영역(MA)에 기입(또는 백업)할 수 있다. 목표 존의 존 맵 서비스가 활성화되면, 목표 존의 페이지 맵 테이블은 더 이상 사용되지 않으므로, 메모리 컨트롤러(120)는 목표 존의 페이지 맵 테이블을 내부 버퍼(123)로부터 폐기할 수 있다. 예시적으로, 메모리 컨트롤러(120)는 가득 찬 존을 클로즈할 수 있다.
도 25는 도 24의 방법에 따라 존 맵 서비스가 활성화되는 예를 보여준다. 도 1 및 도 25를 참조하면, 제7 존(Z7)에 데이터가 기입됨에 따라, 제7 존(Z7)의 페이지 맵 테이블(PM)이 순차적으로 생성될 수 있다. 쓰기 동작(WO)에 의해, 쓰기의 시작 지점으로부터 쓰기의 종료 지점까지 데이터가 기입되면, 제7 존(Z7)이 가득 찰 수 있다. 제7 존(Z7)이 가득 차면, 제7 존(Z7)에 대한 추가적인 쓰기는 금지되고, 제7 존(Z7)은 읽기 전용으로 사용될 수 있다. 제7 존(Z7)의 존 맵 서비스가 활성화되면, 메모리 컨트롤러(120)는 제7 존(Z7)의 존 맵 테이블(ZM_Z7)을 이용하여 읽기 동작을 수행할 수 있다.
s1610은 스토리지 장치(100)가 존 맵 서비스를 제공하는 제2 예를 보여준다. 도 1 및 도 26을 참조하면, S1610 단계에서, 메모리 컨트롤러(120)는 목표 존이 클로즈 되는지 판단할 수 있다. 예를 들어, 메모리 컨트롤러(120)는 목표 존에 대한 존 클로즈 요청이 외부의 호스트 장치로부터 수신되는 것에 응답하여, 목표 존이 클로즈 되는 것을 판단할 수 있다.
목표 존이 클로즈 되지 않으면, 메모리 컨트롤러(120)는 목표 존에 대한 존 맵 서비스를 활성화하지 않을 수 있다. 목표 존이 클로즈 되면, S1620 단계에서, 메모리 컨트롤러(120)는 목표 존에 기입될 데이터가 목표 존에 모두 기입되어 있는지 판단할 수 있다. 예를 들어, 목표 존에 기입될 데이터가 모두 목표 존에 기입되어 있으면, S1630 단계에서, 메모리 컨트롤러(120)는 목표 존에 대한 존 맵 서비스를 활성화할 수 있다. 목표 존에 대한 존 맵 서비스가 활성화되면, 메모리 컨트롤러(120)는 목표 존에 대한 읽기 요청을 목표 존의 존 맵 테이블에 기반하여 외부의 호스트 장치의 읽기 요청들을 처리할 수 있다.
목표 존에 대한 존 맵 서비스가 활성화된 후에, S1640 단계에서, 메모리 컨트롤러(120)는 목표 존의 페이지 맵 테이블을 플러시할 수 있다. 예를 들어, 메모리 컨트롤러(120)는 목표 존의 페이지 맵 테이블을 불휘발성 메모리 장치(110)의 메타 영역(MA)에 기입(또는 백업)할 수 있다. 목표 존의 존 맵 서비스가 활성화되면, 목표 존의 페이지 맵 테이블은 더 이상 사용되지 않으므로, 메모리 컨트롤러(120)는 목표 존의 페이지 맵 테이블을 내부 버퍼(123)로부터 폐기할 수 있다.
목표 존에 기입될 데이터가 모두 목표 존에 기입되어 있지 않으면, 예를 들어 목표 존에 기입될 데이터 중 일부가 백업을 위한 소거 유닛에 기입되어 있으면, 메모리 컨트롤러(120)는 해당 데이터의 목표 존으로의 마이그레이션을 트리거할 수 있다. 마이그레이션이 완료되면, S1630 단계에서, 메모리 컨트롤러(120)는 목표 존에 대한 존 맵 서비스를 활성화할 수 있다. 이후에, S1640 단계에서, 메모리 컨트롤러(120)는 목표 존의 페이지 맵 테이블을 플러시할 수 있다. 메모리 컨트롤러(120)는 목표 존의 페이지 맵 테이블을 내부 버퍼(123)로부터 폐기할 수 있다.
도 27은 메모리 컨트롤러(120)가 내부 버퍼(123)에서 메타 데이터를 관리하는 예를 보여준다. 예시적으로, 간결한 설명을 위하여, 내부 버퍼(120) 및 불휘발성 메모리 장치(110) 외의 구성 요소들은 생략된다. 도 1 및 도 27을 참조하면, 제1 존(Z1)의 셀 타입은 TLC일 수 있다. 제1 존(Z1)은 오픈 존일 수 있으며, 따라서 제1 존(Z1)은 페이지 맵 테이블(PM)에 기반하여 관리될 수 있다.
제2 존(Z2)의 셀 타입은 TLC일 수 있다. 제2 존(Z2)은 오픈 존일 수 있으며, 따라서 제2 존(Z2)은 페이지 맵 테이블(PM)에 기반하여 관리될 수 있다. 제3 존(Z3)의 셀 타입은 SLC일 수 있다. 제3 존(Z3)은 오픈 존일 수 있으며, 따라서 제3 존(Z3)은 페이지 맵 테이블(PM)에 기반하여 관리될 수 있다. 제4 존(Z4)의 셀 타입은 TLC일 수 있다. 제4 존(Z4)은 클로즈 존일 수 있으며, 따라서 제4 존(Z4)은 존 맵 테이블(ZM)에 기반하여 관리될 수 있다.
제5 존(Z5)의 셀 타입은 TLC일 수 있다. 제5 존(Z5)은 오픈 존일 수 있으며, 따라서 제5 존(Z5)은 페이지 맵 테이블(PM)에 기반하여 관리될 수 있다. 제6 존(Z6)의 셀 타입은 TLC일 수 있다. 제6 존(Z6)은 오픈 존일 수 있으며, 따라서 제6 존(Z6)은 페이지 맵 테이블(PM)에 기반하여 관리될 수 있다. 제7 존(Z7)의 셀 타입은 SLC일 수 있다. 제7 존(Z2)은 클로즈 존일 수 있으며, 따라서 제7 존(Z7)은 존 맵 테이블(PM)에 기반하여 관리될 수 있다. 제8 존(Z8)의 셀 타입은 TLC일 수 있다. 제8 존(Z8)은 오픈 존일 수 있으며, 따라서 제8 존(Z8)은 페이지 맵 테이블(PM)에 기반하여 관리될 수 있다.
메모리 컨트롤러(120)는 불휘발성 메모리 장치(110)의 메타 영역(MA)에 제1 존(Z1)의 페이지 맵 테이블(PM_Z1), 제2 존(Z2)의 페이지 맵 테이블(PM_Z2), 제3 존(Z3)의 페이지 맵 테이블(PM_Z3), 제4 존(Z4)의 페이지 맵 테이블(PM_Z4), 제5 존(Z5)의 페이지 맵 테이블(PM_Z5), 제6 존(Z6)의 페이지 맵 테이블(PM_Z6), 제7 존(Z7)의 페이지 맵 테이블(PM_Z7), 제8 존(Z8)의 페이지 맵 테이블(PM_Z8), 그리고 존 맵 테이블(ZM)을 저장할 수 있다.
메모리 컨트롤러(120)의 내부 버퍼(123)는 메타 버퍼(MB), 읽기 버퍼(RB), 그리고 존 버퍼(ZB)를 포함할 수 있다. 예를 들어, 존 버퍼(ZB)는 제5 존(Z5)의 존 버퍼(BA_Z5) 및 제6 존(Z6)의 존 버퍼(BA_Z6)를 포함할 수 있다.
메모리 컨트롤러(120)는 내부 버퍼(123)의 메타 버퍼(MB)에 존 맵 테이블(ZM) 및 부분 페이지 맵 테이블(pPM)을 저장할 수 있다. 내부 버퍼(123)의 저장 용량은 한정되므로, 불휘발성 메모리 장치(110)의 메타 영역(MA)의 데이터 모두를 메타 버퍼(MB)에 로드하는 것은 불가능할 수 있다. 메모리 컨트롤러(120)는 존 맵 테이블(ZM)을 메타 버퍼(MB)에 상주시키고, 그리고 페이지 맵 테이블들(PM_Z1, PM_Z2, PM_Z3, PM_Z4, PM_Z5, PM_Z6, PM_Z7, PM_Z8) 중 필요한 일부분을 부분 페이지 맵 데이터(pPM)로서 메타 버퍼(MB)에 로드할 수 있다.
도 28은 스토리지 장치(100)가 존 맵 테이블 및 페이지 맵 테이블에 기반하여 읽기 서비스를 제공하는 예를 보여준다. 도 1, 도 27 및 도 28을 참조하면, S1710 단계에서, 메모리 컨트롤러(120)는 외부의 호스트 장치로부터 읽기 요청(RD)을 수신할 수 있다.
S1720 단계에서, 메모리 컨트롤러(120)는 읽기 요청된 목표 존의 존 맵 서비스가 활성화되어 있는지 판단할 수 있다. 목표 존의 존 맵 서비스가 활성화되어 있으면, S1780 단계에서, 메모리 컨트롤러(120)는 불휘발성 메모리 장치(110)로부터 데이터를 읽을 수 있다. 예를 들어, 메모리 컨트롤러(120)는 읽기 요청(RD)에 포함된 논리 주소 및 존 맵 테이블(ZM)에 기반하여 목표 존을 식별하고, 그리고 논리 주소로부터 쓰기 포인터(WP)의 오프셋을 계산하고, 그리고 오프셋에 기반하여 불휘발성 메모리 장치(110)의 물리 주소를 계산할 수 있다. 메모리 컨트롤러(120)는 계산된 물리 주소를 이용하여 불휘발성 메모리 장치(110)로부터 데이터를 읽을 수 있다. 이후에, S1790 단계에서, 메모리 컨트롤러(120)는 외부의 호스트 장치로 데이터를 출력할 수 있다.
목표 존의 존 맵 서비스가 활성화되어 있지 않으면, S1730 단계에서, 메모리 컨트롤러(120)는 페이지 맵 히트가 발생하는지 판단할 수 있다. 예를 들어, 읽기 요청(RD)에 포함된 논리 주소가 내부 버퍼(123)의 메타 버퍼(MB)에 부분 페이지 맵 테이블(pPM)로 저장되어 있으면, 페이지 맵 히트가 발생할 수 있다. 페이지 맵 히트가 발생하면, 메모리 컨트롤러(120)는 논리 주소 및 부분 페이지 맵 테이블(pPM)에 기반하여 S1780 단계 및 S1790 단계를 수행함으로써 읽기 동작을 수행할 수 있다.
페이지 맵 히트가 발생하지 않으면, S1740 단계에서, 메모리 컨트롤러(120)는 메타 버퍼(MB)가 가득 찼는지 판단할 수 있다. 메타 버퍼(MB)가 가득 찼으면, 메모리 컨트롤러(120)는 부분 페이지 맵 테이블(pPM) 중에서 희생 데이터(victim data)를 선택할 수 있다. 예를 들어, 가장 먼저 메타 버퍼(MB)에 로드된 데이터 또는 가장 오래전에 사용된 데이터가 희생 데이터로 선택될 수 있다. S1750 단계에서, 메모리 컨트롤러(120)는 희생 데이터로 선택된 페이지 맵 테이블을 폐기할 수 있다.
메타 버퍼(MB)에 자유 공간이 있거나, 또는 희생 데이터로 선택된 페이지 맵 테이블을 폐기함으로써 자유 공간이 확보되면, S1760 단계에서, 메모리 컨트롤러(120)는 읽기 요청(RD)에 포함된 논리 주소에 대응하는 페이지 맵 테이블을 불휘발성 메모리 장치(110)의 메타 영역(MA)으로부터 읽을 수 있다. S1770 단계에서, 메모리 컨트롤러(120)는 읽혀진 페이지 맵 테이블을 내부 버퍼(123)의 메타 버퍼(MB)에 부분 페이지 맵 테이블(pPM)의 일부로서 저장할 수 있다. 이후에, 메모리 컨트롤러(120)는 논리 주소 및 부분 페이지 맵 테이블(pPM)에 기반하여 S1780 단계 및 S1790 단계를 수행함으로써 읽기 동작을 수행할 수 있다.
상술된 바와 같이, 존 맵 서비스가 활성화되면, 페이지 맵 히트를 판단하거나, 또는 페이지 맵 테이블을 불휘발성 메모리 장치(110)로부터 읽어오는 동작이 생략될 수 있다. 따라서, 스토리지 장치(100)가 외부의 호스트 장치로부터의 읽기 요청들을 처리하는 속도가 향상될 수 있다.
예시적으로, 메모리 컨트롤러(120)는 스토리지 장치(100)의 파워 온 시에 불휘발성 메모리 장치(110)의 메타 영역(MA)으로부터 존 맵 테이블(ZM)을 읽어 내부 버퍼(123)의 메타 버퍼(MB)에 저장할 수 있다. 메모리 컨트롤러(120)는 스토리지 장치(100)의 파워 오프 시에 내부 버퍼(123)의 메타 버퍼(MB)에 저장된 존 맵 테이블(ZM)을 불휘발성 메모리 장치(110)의 메타 영역(MA)에 기입(예를 들어, 백업)할 수 있다.
도 29는 스토리지 장치(100)가 존 맵 서비스의 활성화 정보를 관리하는 예를 보여준다. 도 1, 도 27 및 도 29를 참조하면, 메모리 컨트롤러(120)는 유효성 맵(VM)을 이용하여 존 맵 서비스의 활성화를 관리할 수 있다. 유효성 맵(VM)은 제1 존(Z1), 제2 존(Z2), 제3 존(Z3), 제4 존(Z4), 제5 존(Z5), 제6 존(Z6), 제7 존(Z7) 및 제8 존(Z8)에 각각 대응하는 비트들을 포함하는 비트맵일 수 있다.
제1 존(Z1), 제2 존(Z2), 제3 존(Z3), 제5 존(Z5), 제6 존(Z6) 및 제8 존(Z8)은 열린 상태이므로, 유효성 맵(VM)의 대응하는 비트들은 존 맵 서비스가 무효 상태임을 알리는 비트(I)로 설정될 수 있다. 제4 존(Z4) 및 제7 존(Z7)은 클로즈 상태이므로, 유효성 맵(VM)의 대응하는 비트들은 존 맵 서비스가 유효 상태임을 알리는 비트(V)로 설정될 수 있다.
외부의 호스트 장치로부터 임의의 존에 대한 읽기 요청이 수신되면, 메모리 컨트롤러(120)는 유효성 맵(VM)의 대응하는 비트를 체크할 수 있다. 유효성 맵(VM)의 대응하는 비트가 유효 상태임을 알리는 비트(V)로 설정되어 있으면, 메모리 컨트롤러(120)는 논리 주소 및 존 맵 테이블에 기반하여 물리 주소를 계산할 수 있다. 유효성 맵(VM)의 대응하는 비트가 무효 상태임을 알리는 비트(I)로 설정되어 있으면, 메모리 컨트롤러(120)는 도 28의 S1730 단계 내지 S1770 단계 중 대응하는 단계들을 수행함으로써 필요한 페이지 맵 테이블을 획득하고, 그리고 논리 주소 및 페이지 맵 테이블에 기반하여 물리 주소를 획득할 수 있다.
도 30은 스토리지 장치(100)가 액세스 에러를 처리하는 리커버리의 예를 보여준다. 도 1 및 도 30을 참조하면, S1810 단계에서, 메모리 컨트롤러(120)는 외부의 호스트 장치로부터 액세스 요청을 수신할 수 있다. 액세스 요청은 커맨드 UPIU를 통해 수신될 수 있다.
S1820 단계에서, 메모리 컨트롤러(120)는 액세스 동작을 수행할 수 있다. 예를 들어, 액세스 요청에 응답하여, 메모리 컨트롤러(120)는 액세스 요청의 논리 주소에 대응하는 존의 소거 유닛의 메모리 셀들에 대해 액세스 동작, 예를 들어 쓰기 동작 또는 읽기 동작을 수행할 수 있다.
S1830 단계에서, 메모리 컨트롤러(120)는 액세스 에러가 발생했는지 판단할 수 있다. 예를 들어, 쓰기 동작이 실패하거나, 또는 읽기 동작 시에 발생한 에러 비트들의 수가 임계값 이상이면, 메모리 컨트롤러(120)는 액세스 에러가 발생한 것으로 판단할 수 있다.
액세스 에러가 발생하지 않았으면, S1860 단계에서, 메모리 컨트롤러(120)는 외부의 호스트 장치로 응답을 전송할 수 있다. 응답은 액세스 동작이 성공하였음을 알리는 정보를 포함할 수 있다. 응답은 응답 UPIU를 통해 전송될 수 있다.
액세스 에러가 발생하였으면, S1840 단계에서, 메모리 컨트롤러(120)는 액세스 에러가 발생한 데이터를 리커버리 영역에 기입할 수 있다. 예를 들어, 메모리 컨트롤러(120)는 쓰기 대상인 데이터 또는 읽기 대상인 데이터를 리커버리 영역에 기입할 수 있다. 리커버리 영역은 예비 영역(RA)(도 3a 내지 도 3e 참조)에 형성될 수 있다. 리커버리 영역은 목표 존과 동일한 특색, 예를 들어 셀 타입을 가질 수 있다. 리커버리 영역의 용량은 목표 존의 용량과 동일할 수 있다. 리커버리 영역에 포함되는 소거 유닛들(EU)의 수는 목표 존에 포함되는 소거 유닛들(EU)의 수와 동일할 수 있다. 액세스 에러가 발생한 데이터를 리커버리 영역에 기입하는 것은 리커버리 동작일 수 있다.
S1850 단계에서, 메모리 컨트롤러(120)는 포스트 리커버리 동작을 트리거할 수 있다. 포스트 리커버리 동작은 목표 존에 기입된 데이터와 리커버리 영역에 기입된 데이터의 읽기 동작을 지원하기 위한 동작들을 포함할 수 있다. 이후에, S1860 단계에서, 메모리 컨트롤러(120)는 외부의 호스트 장치로 응답을 전송할 수 있다. 응답은 액세스 에러가 발생하였음을 알리는 정보, 데이터가 리커버리 영역에 기입되었음을 알리는 정보 등과 같은 연관된 다양한 정보를 포함할 수 있다. 다른 예로서, 리커버리 동작(예를 들어, 포스트 리커버리 동작을 포함하여)은 외부의 호스트 장치에 알려지지 않고, 스토리지 장치(100)에 의해 배경 동작으로 수행될 수 있다. 즉, 응답은 액세스 에러 또는 리커버리 동작과 연관된 정보를 포함하지 않을 수 있다. 응답은 응답 UPIU를 통해 전송될 수 있다.
도 31은 스토리지 장치(100)가 포스트 리커버리 동작을 수행하는 제1 예를 보여준다. 도 1 및 도 31을 참조하면, S1910 단계에서, 메모리 컨트롤러(120)는 액세스 에러가 발생한 목표 존의 존 맵 서비스를 금지할 수 있다. 목표 존에 대한 존 맵 서비스가 활성화된 상태이면, 메모리 컨트롤러(120)는 목표 존의 존 맵 서비스를 비활성화할 수 있다. 이후에, 메모리 컨트롤러(120)는 목표 존에 대한 존 맵 서비스가 활성화되는 것을 금지할 수 있다. 목표 존에 대한 존 맵 서비스가 비활성화된 상태이면, 메모리 컨트롤러(120)는 목표 존에 대한 존 맵 서비스가 활성화되는 것을 금지할 수 있다. 메모리 컨트롤러(120)는 목표 존에 대한 액세스를 페이지 맵 테이블에 기반하여 수행할 수 있다. 메모리 컨트롤러(120)는 목표 존의 존 맵 서비스의 금지를 목표 존이 리셋될 때까지 유지할 수 있다.
S1920 단계에서, 메모리 컨트롤러(120)는 후속 데이터를 리커버리 영역에 기입할 수 있다. 예를 들어, 메모리 컨트롤러(120)는 외부의 호스트 장치에 의해 목표 존에 기입되도록 요청되어 계류된(pending) 쓰기들을 리커버리 영역에 대해 수행할 수 있다.
S1930 단계에서, 메모리 컨트롤러(120)는 이전 데이터의 리커버리 영역에 대한 마이그레이션을 트리거할 수 있다. 예를 들어, 메모리 컨트롤러(120)는 액세스 에러가 발생하기 전에 목표 존에 기입된 데이터를 목표 존으로부터 읽고, 그리고 읽혀진 데이터를 리커버리 영역에 기입하는 마이그레이션을 트리거할 수 있다.
마이그레이션이 완료되면, S1940 단계에서, 메모리 컨트롤러(120)는 목표 존을 리커버리 영역으로 대체할 수 있다. 예를 들어, 메모리 컨트롤러(120)는 존 맵 테이블에서 목표 존을 리커버리 영역의 소거 유닛들에 매핑할 수 있다. 이후에, S1950 단계에서, 메모리 컨트롤러(120)는 이전 목표 존을 리셋할 수 있다.
도 32a 내지 도 32d는 리커버리 동작(예를 들어, 포스트 리커버리 동작을 포함하여)이 수행되는 과정의 제1 예들을 보여준다. 도 1 및 도 32a를 참조하면, 메모리 컨트롤러(120)는 제7 존(Z7)에 쓰기 데이터(WD)를 기입할 수 있다. 쓰기 데이터(WD)는 제1 데이터(D1), 제2 데이터(D2), 그리고 제3 데이터(D3)를 포함할 수 있다. 메모리 컨트롤러(120)는 제1 데이터(D1)를 제7 존(Z7)에 성공적으로 기입할 수 있다. 메모리 컨트롤러(120)가 제2 데이터(D2)를 제7 존(Z7)에 기입하는 동안, 쓰기 페일(PGMF)(또는 프로그램 페일)이 발생할 수 있다. 쓰기 페일이 발생하면, 메모리 컨트롤러(120)는 리커버리 동작을 수행할 수 있다.
도 1 및 도 32b를 참조하면, 메모리 컨트롤러(120)는 제7 존(Z7)의 리커버리 영역(Z7_R)을 오픈할 수 있다. 리커버리 영역(Z7_R)의 셀 타입과 같은 특색은 제7 존(Z7)과 동일할 수 있다. 메모리 컨트롤러(120)는 쓰기 페일이 발생한 제2 데이터(D2)를 리커버리 영역(Z7_R)에 기입할 수 있다.
도 1 및 도 32c를 참조하면, 메모리 컨트롤러(120)는 쓰기 데이터(WD)의 후속 데이터, 즉 제3 데이터(D3)를 리커버리 영역(Z7_R)에 기입할 수 있다.
도 32d를 참조하면, 메모리 컨트롤러(120)는 목표 존의 이전 데이터, 예를 들어, 제1 데이터(D1)를 제7 존(Z7)으로부터 리커버리 영역(Z7_R)으로 마이그레이션 할 수 있다. 이후에, 메모리 컨트롤러(120)는 리커버리 영역(Z7_R)으로 제7 존(Z7)을 대체하고, 이전의 제7 존(Z7)을 리셋할 수 있다.
메모리 컨트롤러(120)는 페이지 맵 테이블에 기반하여, 제7 존(Z7)에 대한 쓰기 및 읽기 서비스를 지원할 수 있다. 제7 존(Z7)에서 논리 주소들 및 물리 주소들 사이의 순차성은 보장되지 않으므로, 메모리 컨트롤러(120)는 제7 존(Z7)에 대한 존 맵 서비스를 제7 존(Z7)이 리셋될 때까지 금지할 수 있다.
도 33a 내지 도 33e는 리커버리 동작(예를 들어, 포스트 리커버리 동작을 포함하여)이 수행되는 과정의 제2 예들을 보여준다. 도 1 및 도 33a를 참조하면, 메모리 컨트롤러(120)는 쓰기 데이터(WD)를 제7 존(Z7)에 기입할 수 있다. 쓰기 데이터(WD)는 제1 데이터(D1) 및 제2 데이터(D2)를 포함할 수 있다. 메모리 컨트롤러(120)는 쓰기 데이터(WD1)의 제1 데이터(D1)를 제7 존(Z7)에 성공적으로 기입할 수 있다.
도 1 내지 도 33b를 참조하면, 외부의 호스트 장치로부터 읽기 요청이 수신될 수 있다. 제1 데이터(D1)는 제1a 데이터(D1a), 제1b 데이터(D1b) 및 제1c 데이터(D1c)를 포함하여, 읽기 요청은 제1b 데이터(D1b)의 읽기를 요청할 수 있다. 메모리 컨트롤러(120)가 제1b 데이터(D1b)의 읽기 동작을 수행하는 동인 읽기 페일(RDF)이 발생할 수 있다. 예를 들어, 제1b 데이터(D1b)의 읽기 동작 시에 발생하는 에러 비트들의 수가 임계값 이상이면, 메모리 컨트롤러(120)는 읽기 페일(RDF)을 판단할 수 있다. 예시적으로, 메모리 컨트롤러(120)는 제7 존(Z7)으로부터 읽혀진 제1b 데이터(D1b)를 외부의 호스트 장치로 출력하고, 그리고 리커버리 동작을 수행할 수 있다.
도 1 및 도 33c를 참조하면, 메모리 컨트롤러(120)는 제7 존(Z7)의 리커버리 영역(Z7_R)을 오픈할 수 있다. 리커버리 영역(Z7_R)의 셀 타입과 같은 특색은 제7 존(Z7)과 동일할 수 있다. 메모리 컨트롤러(120)는 읽기 페일이 발생한 제1b 데이터(D1b)를 리커버리 영역(Z7_R)에 기입할 수 있다.
도 1 및 도 33d를 참조하면, 메모리 컨트롤러(120)는 쓰기 데이터(WD)의 후속 데이터, 즉 제2 데이터(D2)를 리커버리 영역(Z7_R)에 기입할 수 있다.
도 33e를 참조하면, 메모리 컨트롤러(120)는 목표 존의 이전 데이터, 예를 들어, 제1a 데이터(D1a) 및 제1c 데이터(D1c)를 제7 존(Z7)으로부터 리커버리 영역(Z7_R)으로 마이그레이션 할 수 있다. 이후에, 메모리 컨트롤러(120)는 리커버리 영역(Z7_R)으로 제7 존(Z7)을 대체하고, 이전의 제7 존(Z7)을 리셋할 수 있다.
메모리 컨트롤러(120)는 페이지 맵 테이블에 기반하여, 제7 존(Z7)에 대한 쓰기 및 읽기 서비스를 지원할 수 있다. 제7 존(Z7)에서 논리 주소들 및 물리 주소들 사이의 순차성은 보장되지 않으므로, 메모리 컨트롤러(120)는 제7 존(Z7)에 대한 존 맵 서비스를 제7 존(Z7)이 리셋될 때까지 금지할 수 있다.
도 34는 스토리지 장치(100)가 포스트 리커버리 동작을 수행하는 제2 예를 보여준다. 도 1 및 도 34를 참조하면, S2010 단계에서, 메모리 컨트롤러(120)는 액세스 에러가 발생한 목표 존의 페일 테이블을 생성할 수 있다. 페일 테이블은 에러 및 리커버리 영역에 대한 정보를 포함할 수 있다. 페일 테이블은 존 맵 테이블을 보조하며, 메모리 컨트롤러(120)는 존 맵 테이블 및 페일 테이블에 기반하여 존 맵 서비스를 지원할 수 있다.
S2020 단계에서, 메모리 컨트롤러(120)는 후속 데이터를 마이그레이트 할 수 있다. 예를 들어, 읽기 동작 시에 액세스 에러가 발생하면, 액세스 에러가 발생한 데이터보다 후속하는 논리 주소들을 갖는 데이터가 목표 존에 기입되어 있을 수 있다. 메모리 컨트롤러(120)는 후속 논리 주소들을 갖는 데이터를 목표 존으로부터 리커버리 영역으로 마이그레이션할 수 있다.
S2030 단계에서, 메모리 컨트롤러(120)는 후속 데이터를 리커버리 영역에 기입할 수 있다. S2040 단계에서, 메모리 컨트롤러(120)는 존이 클로즈 되는지 판단할 수 있다. 존이 클로즈 되지 않으면, 메모리 컨트롤러(120)는 S2030 단계를 다시 수행할 수 있다. 즉, 메모리 컨트롤러(120)는 목표 존이 클로즈될 때까지 외부의 호스트 장치로부터 수신되는 쓰기 요청들을 리커버리 영역에서 수행할 수 있다.
S2050 단계에서, 메모리 컨트롤러(120)는 이전 데이터의 리커버리 영역에 대한 마이그레이션을 트리거할 수 있다. 예를 들어, 메모리 컨트롤러(120)는 액세스 에러가 발생하기 전에 목표 존에 기입된 데이터를 목표 존으로부터 읽고, 그리고 읽혀진 데이터를 리커버리 영역에 기입하는 마이그레이션을 트리거할 수 있다.
마이그레이션이 완료되면, S2060 단계에서, 메모리 컨트롤러(120)는 목표 존을 리커버리 영역으로 대체할 수 있다. 예를 들어, 메모리 컨트롤러(120)는 존 맵 테이블에서 목표 존을 리커버리 영역의 소거 유닛들에 매핑할 수 있다. 이후에, S2070 단계에서, 메모리 컨트롤러(120)는 이전 목표 존을 리셋할 수 있다.
S2080 단계에서, 메모리 컨트롤러(120)는 목표 존의 존 맵 서비스를 활성화할 수 있다. 예를 들어, 메모리 컨트롤러(120)는 존 맵 테이블 및 페일 테이블에 기반하여 목표 존의 존 맵 서비스를 지원할 수 있다.
도 35a 및 도 35b는 페일 테이블을 생성하는 리커버리 동작이 수행되는 과정의 제1 예들을 보여준다. 예시적으로, 도 35a 및 도 32b는 도 32c에 후속하여 수행되는 예들을 보여준다. 도 1 및 도 35a를 참조하면 외부의 호스트 장치가 제4 데이터(D4)를 포함하는 쓰기 데이터(WD)를 제7 존(Z7)에 기입할 것을 요청함에 따라, 메모리 컨트롤러(120)는 제4 데이터(D4)를 리커버리 영역(Z7_R)에 기입할 수 있다. 제4 데이터(D4)를 기입하고 제7 존(Z7)이 닫힐 수 있다.
도 1 및 도 35b를 참조하면, 제7 존(Z7)이 닫힘에 따라, 메모리 컨트롤러(120)는 제7 존(Z7)에 기입된 제1 데이터(D1)를 리커버리 영역(Z7_R)으로 마이그레이션할 수 있다. 리커버리 영역(Z7_R)에서 제2 데이터(D2), 제3 데이터(D3) 및 제4 데이터(D4)는 순차적인 논리 주소들을 가지며, 따라서 순차성(SEQ)이 보장된다. 제1 데이터(D1)는 순차적인 논리 주소들을 가지며, 따라서 순차성(SEQ)이 보장된다. 리커버리 영역(Z7_R)에서 논리 주소들의 순차성을 갖는 두 개의 데이터 그룹들이 존재한다. 메모리 컨트롤러(120)는 두 개의 데이터 그룹들의 경계에 대한 정보를 페일 테이블에 기록할 수 있다. 메모리 컨트롤러(120)는 존 맵 테이블 및 페일 테이블에 기반하여 존 맵 서비스를 제공할 수 있다.
도 36a 및 도 36b는 액세스 에러가 발생한 때에 존 맵 테이블(ZM)이 갱신되는 예를 보여준다. 도 1 및 도 36을 참조하면, 존 맵 테이블(ZM)은 제1 내지 제8 존들(Z1~Z8)의 식별 정보, 제1 내지 제8 존들(Z1~Z8)의 상태 정보, 제1 내지 제8 존들(Z1~Z8)에 매핑된 소거 유닛들(EU)의 정보, 그리고 제1 내지 제8 존들(Z1~Z8)의 유효성 맵(VM)을 포함할 수 있다.
제1 존(Z1)은 오픈 상태이고, '5'의 소거 유닛들(EU)에 매핑될 수 있다. 제1 존(Z1)의 유효성 맵(VM)의 비트는 '0'의 값을 가질 수 있다. '0'은 존 맵 서비스가 무효 상태임을 나타낼 수 있다. 제2 존(Z2)은 오픈 상태이고, '4'의 소거 유닛들(EU)에 매핑될 수 있다. 제2 존(Z2)의 유효성 맵(VM)의 비트는 '0'의 값을 가질 수 있다.
제3 존(Z3)은 오픈 상태이고, '7'의 소거 유닛들(EU)에 매핑될 수 있다. 제3 존(Z3)의 유효성 맵(VM)의 비트는 '0'의 값을 가질 수 있다. 제4 존(Z4)은 클로즈 상태이고, '6'의 소거 유닛들(EU)에 매핑될 수 있다. 제4 존(Z4)의 유효성 맵(VM)의 비트는 '1'의 값을 가질 수 있다. '0'은 존 맵 서비스가 유효 상태임을 나타낼 수 있다. 제5 존(Z5)은 오픈 상태이고, '1'의 소거 유닛들(EU)에 매핑될 수 있다. 제5 존(Z5)의 유효성 맵(VM)의 비트는 '0'의 값을 가질 수 있다.
제6 존(Z6)은 오픈 상태이고, '2'의 소거 유닛들(EU)에 매핑될 수 있다. 제6 존(Z6)의 유효성 맵(VM)의 비트는 '0'의 값을 가질 수 있다. 제7 존(Z7)은 오픈 상태이고, '3'의 소거 유닛들(EU)에 매핑될 수 있다. 제7 존(Z7)의 유효성 맵(VM)의 비트는 '0'의 값을 가질 수 있다. 제8 존(Z8)은 오픈 상태이고, '8'의 소거 유닛들(EU)에 매핑될 수 있다. 제8 존(Z8)의 유효성 맵(VM)의 비트는 '0'의 값을 가질 수 있다.
도 1 및 도 36b를 참조하면, 제7 존에서 액세스 에러가 발생함에 따라, 메모리 컨트롤러(120)는 존 맵 테이블(ZM)에서 제7 존(Z7)의 소거 유닛들(EU)의 정보를 페일 테이블의 인덱스(Fail_1)로 갱신할 수 있다. 메모리 컨트롤러(120)는 존 맵 테이블(ZM)을 참조하며, 제7 존(Z7)의 액세스 에러의 정보를 페일 테이블의 첫 번째 인덱스에서 식별할 수 있다.
도 37a 내지 도 37f는 액세스 에러가 발생함에 따라 페일 테이블이 생성 및 갱신되는 예들을 보여준다. 도 1 및 도 37a를 참조하면, 페일 테이블(FT)은 인덱스, 페일이 발생한 소거 유닛들(EU), 리커버리 영역에 매핑된 소거 유닛들(EU_R), 액세스 에러가 발생한 쓰기 포인터를 가리키는 페일 포인터, 복수의의 액세스 에러가 발생한 때에 다음 페일 정보가 저장된 페일 테이블(FT)의 인덱스를 가리키는 다음 엔트리, 그리고 액세스 에러 후에 목표 존의 데이터가 리커버리 영역으로 마이그레이션 되었는지를 가리키는 마이그레이션 플래그를 포함할 수 있다.
도 1, 도 37a 및 도 37b를 참조하면, 제3 소거 유닛들(EU3)의 쓰기 포인터 300(WP300)에서 액세스 에러가 발생할 수 있다. 리커버리 동작이 수행되면, 액세스 에러가 발생한 WP300의 데이터는 리커버리 영역에 대응하는 제9 소거 유닛들(EU9)에 첫 번째로 기입될 수 있다. 이후에, 액세스 에러가 발생한 논리 주소에 후속하는 논리 주소들을 갖는 데이터가 순차적으로 기입될 수 있다. 예를 들어, 제3 소거 유닛들(EU3)의 WP300 내지 WP799에 순차적으로 기입될 데이터가 제9 소거 유닛들(EU9)에 순차성(SEQ)을 보장하며 기입될 수 있다. 이후에, 마이그레이션을 통해, 제3 소거 유닛들(EU3)의 WP0 내지 WP299에 기입되었던 데이터가 제9 소거 유닛들(EU9)에 순차성(SEQ)을 보장하며 기입될 수 있다.
도 1, 도 37c 및 도 37d를 참조하면, 메모리 컨트롤러(120)가 제3 소거 유닛들(EU3)의 WP300 내지 WP799에 대응하는 후속 데이터를 제9 소거 유닛들(EU9)에 기입하는 과정에서, 제3 소거 유닛들(EU3)의 WP500에 대응하는 데이터의 쓰기 페일이 발생할 수 있다.
메모리 컨트롤러(120)는 두 번째 액세스 에러에 대응하는 정보를 페일 테이블(FT)의 '2'의 인덱스에 기입할 수 있다. 메모리 컨트롤러(120)는 첫 번째 액세스 에러에 대응하는 '1'의 인덱스의 다음 엔트리에 '2'를 기입함으로써, 페일 테이블(FT)의 '2'의 인덱스를 참조하여야 함을 식별할 수 있다. 메모리 컨트롤러(120)는 페일 테이블(FT)의 '2'의 인덱스에 액세스 에러가 발생한 '9'의 소거 유닛들(EU)의 정보, '10'의 리커버리 소거 유닛들(EU_R)의 정보, 그리고 액세스 에러가 발생한 '500'의 페일 포인터를 기록할 수 있다.
메모리 컨트롤러(120)는 액세스 에러가 발생한 제3 소거 유닛들(EU3)의 WP500에 대응하는 데이터를 제10 소거 유닛들(EU10)에 기입할 수 있다. 메모리 컨트롤러(120)는 제3 소거 유닛들(EU3)의 WP500에 후속하여 기입될 데이터를 제10 소거 유닛들(EU10)에 기입할 수 있다. 즉, 제3 소거 유닛들(EU3)의 WP500 내지 WP799에 기입될 데이터가 제10 소거 유닛들(EU10)에 순차성(SEQ)을 보장하며 기입될 수 있다.
이후에, 메모리 컨트롤러(120)는 마이그레이션을 수행할 수 있다. 예를 들어, 메모리 컨트롤러(120)는 제3 소거 유닛들(EU3)에 기입되어야 할 데이터 중 제10 소거 유닛들(EU10)에 기입되지 않은 데이터를 순차적으로 마이그레이션알 수 있다. 우선, 메모리 컨트롤러(120)는 제3 소거 유닛들(EU3)에 기입된 WP0 내지 WP300의 데이터를 제10 소거 유닛들(EU10)로 마이그레이션할 수 있다. 다음으로, 메모리 컨트롤러(120)는 제3 소거 유닛들(EU3)의 WP300 내지 WP499에 기입하도록 요청된 데이터를 제9 소거 유닛들(EU9)로부터 제10 소거 유닛들(EU10)로 마이그레이션할 수 있다. 따라서, 제10 소거 유닛들(EU10)에서, 제3 소거 유닛들(EU3)의 WP0 내지 WP499에 기입하도록 요청된 데이터가 순차성(SEQ)을 보장하며 기입될 수 있다.
도 1, 도 37e 및 도 37f를 참조하면, 메모리 컨트롤러(120)가 제3 소거 유닛들(EU3)의 WP0 내지 WP299에 기입된 데이터를 제9 소거 유닛들(EU9)에 마이그레이션하는 과정에서, 제3 소거 유닛들(EU3)의 WP100에 대응하는 데이터의 액세스 에러(예를 들어, 마이그레이션의 읽기 에러 또는 쓰기 페일)이 발생할 수 있다.
메모리 컨트롤러(120)는 두 번째 액세스 에러에 대응하는 정보를 페일 테이블(FT)의 '2'의 인덱스에 기입할 수 있다. 메모리 컨트롤러(120)는 첫 번째 액세스 에러에 대응하는 '1'의 인덱스의 다음 엔트리에 '2'를 기입함으로써, 페일 테이블(FT)의 '2'의 인덱스를 참조하여야 함을 식별할 수 있다. 메모리 컨트롤러(120)는 페일 테이블(FT)의 '2'의 인덱스에 액세스 에러가 발생한 '9'의 소거 유닛들(EU)의 정보, '10'의 리커버리 소거 유닛들(EU_R)의 정보, 그리고 액세스 에러가 발생한 '100'의 페일 포인터를 기록할 수 있다.
메모리 컨트롤러(120)는 액세스 에러가 발생한 제3 소거 유닛들(EU3)의 WP100에 대응하는 데이터를 제10 소거 유닛들(EU10)에 기입될 수 있다. 메모리 컨트롤러(120)는 제3 소거 유닛들(EU3)의 WP100에 후속하는 데이터를 제10 소거 유닛들(EU10)로 마이그레이션할 수 있다. 예를 들어, 메모리 컨트롤러(120)는 제3 소거 유닛들(EU3)에 기입된 데이터를 제10 소거 유닛들(EU10)로 마이그레이션 함으로써, 제3 소거 유닛들(EU3)의 WP100 내지 WP299에 대응하는 데이터를 제10 소거 유닛들(EU10)에 기입할 수 있다.
이후에, 메모리 컨트롤러(120)는 제9 소거 유닛들(EU9)에 기입된 데이터를 제10 소거 유닛들(EU10)로 마이그레이션할 수 있다. 메모리 컨트롤러(120)는 제3 소거 유닛들(EU3)의 WP300 내지 WP799에 대응하는 데이터를 제9 소거 유닛들(EU9)로부터 제10 소거 유닛들(EU10로 마이그레이션할 수 있다. 따라서, 제10 소거 유닛들(EU10)에서, 제3 소거 유닛들(EU3)의 WP0 내지 WP799에 기입하도록 요청된 데이터가 순차성(SEQ)을 보장하며 기입될 수 있다.
상술된 바와 같이, 페일 테이블(FT)에 기반한 리커버리를 수행하면, 존에 할당된 소거 유닛에 각각 순차성(SEQ)을 보장하는 두 개의 데이터 그룹들이 기입된다. 페일 테이블(FT)은 각각 순차성(SEQ)을 보장하는 두 개의 데이터 그룹들의 경계 정보를 포함할 수 있다. 메모리 컨트롤러(120)는 존 맵 테이블 및 페일 테이블을 이용함으로써, 외부의 호스트 장치로부터 수신되는 논리 주소들로부터 소거 유닛들(예를 들어, 제10 소거 유닛들(EU10))로부터 데이터를 읽기 위한 물리 주소들, 예를 들어 제10 소거 유닛들(EU10)의 쓰기 포인터들을 계산할 수 있다. 따라서, 메모리 컨트롤러(120)는 존 맵 테이블 및 페일 테이블(FT)에 기반하여 존 맵 서비스를 지원할 수 있다.
도 38은 스토리지 장치(100)가 백업 동작을 수행하는 제1 예를 보여준다. 예시적으로, 내부 버퍼(123)의 용량의 한계로 인해, 내부 버퍼(123)에 할당할 수 있는 존 버퍼들의 수는 스토리지 장치(100)에 할당할 수 있는 존들의 수보다 작을 수 있다. 스토리지 장치(100)는 동적으로 존 버퍼를 생성 및 폐기함으로써, 존 버퍼들을 사용할 수 있다.
도 1 및 도 38을 참조하면, S2110 단계에서, 메모리 컨트롤러(120)는 외부의 호스트 장치로부터 쓰기 요청(WR)을 수신할 수 있다. 쓰기 요청(WR)은 커맨드 UPIU를 통해 수신될 수 있다.
S2120 단계에서, 메모리 컨트롤러(120)는 존 버퍼가 존재하는지 판단할 수 있다. 예를 들어, 메모리 컨트롤러(120)는 쓰기 요청(WR)이 데이터의 쓰기를 요청한 존에 대응하는 존 버퍼가 내부 버퍼(123)에 생성(또는 할당)되어 있는지 판단할 수 있다. 존 버퍼가 존재하면, 메모리 컨트롤러(120)는 존 버퍼에 데이터를 저장할 수 있다.
존 버퍼가 존재하지 않으면, S2130 단계에서, 메모리 컨트롤러(120)는 충분한 자유 버퍼가 존재하는지 판단할 수 있다. 예를 들어, 메모리 컨트롤러(120)는 내부 버퍼(123)의 용량 중에서 존 버퍼에 할당하도록 정해진 용량에 새로운 존 버퍼를 생성할 수 있는 자유 용량이 존재하는지 판단할 수 있다. 새로운 존 버퍼를 생성할 수 있는 자유 용량이 존재하면, S2160 단계에서, 메모리 컨트롤러(120)는 쓰기 요청(WR)에 대응하는 존 버퍼를 생성하고, 그리고 존 버퍼에 데이터를 기입할 수 있다.
새로운 존 버퍼를 생성할 수 있는 자유 용량이 존재하지 않으면, S2140 단계에서, 메모리 컨트롤러(120)는 내부 버퍼에 할당된 존 버퍼들 중에서 희생 존 버퍼를 선택할 수 있다. S2150 단계에서, 메모리 컨트롤러(120)는 희생 존 버퍼의 백업 동작을 수행할 수 있다. 예를 들어, 메모리 컨트롤러(120)는 희생 존 버퍼에 저장된 데이터를 예비 영역(RA)(도 3a 내지 도 3e 참조)의 소거 유닛들 중 백업을 위해 선택된 소거 유닛에 기입할 수 있다. 이후에, 메모리 컨트롤러(120)는 희생 존 버퍼를 폐기할 수 있다. S2160 단계에서, 메모리 컨트롤러(120)는 쓰기 요청(WR)에 대응하는 존 버퍼를 생성하고, 그리고 존 버퍼에 데이터를 기입할 수 있다.
이후에, 도 15 및 도 16을 참조하여 설명된 바와 같이, 목표 존의 셀 타입에 대응하는 데이터가 존 버퍼에 수집되면, 수집된 데이터는 목표 존에 기입될 수 있다.
도 39는 스토리지 장치(100)가 백업 동작을 수행하는 제2 예를 보여준다. 도 1 및 도 39를 참조하면, S2210 단계에서, 메모리 컨트롤러(120)는 외부의 호스트 장치로부터 쓰기 요청(WR)을 수신할 수 있다. 쓰기 요청(WR)은 커맨드 UPIU를 통해 수신될 수 있다.
S2220 단계에서, 메모리 컨트롤러(120)는 수신된 쓰기 요청(WR)이 포스 유닛 액세스(FUA)(Force Unit Access)에 대응하는지 판단할 수 있다. 포스 유닛 액세스(FUA)는 데이터를 불휘발성 메모리 장치(110)에 직접 기입할 것을 요구할 수 있다. 예를 들어, 스토리지 장치(100)는 통상적으로 라이트-백(write-back) 방식으로 동작하되, 포스 유닛 액세스(FUA)에 응답하여 라이트-스루(write-through) 방식으로 동작할 수 있다.
쓰기 요청(WR)이 포스 유닛 액세스(FUA)에 대응하면, S2230 단계에서, 메모리 컨트롤러(120)는 쓰기 요청(WR)에 대응하는 쓰기 데이터의 백업 동작을 수행할 수 있다. 예를 들어, 메모리 컨트롤러(120)는 쓰기 데이터를 예비 영역(RA)(도 3a 내지 도 3e 참조)의 소거 영역들 중 백업을 위해 선택된 소거 유닛에 기입할 수 있다.
쓰기 요청(WR)이 포스 유닛 액세스(FUA)에 대응하지 않으면, S2240 단계에서, 메모리 컨트롤러(120)는 도 38을 참조하여 설명된 방법에 따라 쓰기 요청(WR)을 수행할 수 있다.
도 40은 스토리지 장치(100)가 백업 동작을 수행하는 제3 예를 보여준다. 도 1 및 도 40을 참조하면, S2310 단계에서, 메모리 컨트롤러(120)는 파워 오프 노티피케이션(PON)(Power Off Notification)을 수신할 수 있다. 파워 오프 노티피케이션(PON)은 외부의 호스트 장치가 파워 오프를 수행할 것임을 알릴 수 있다. 파워 오프 노티피케이션(PON)은 커맨드 UPIU, 쿼리 리퀘스트 UPIU, 또는 별도의 제어 신호를 통해 수신될 수 있다.
S2320 단계에서, 파워 오프 노티피케이션(PON)에 응답하여, 메모리 컨트롤러(120)는 모든 존 버퍼들에 저장된 데이터의 백업 동작을 수행할 수 있다. 예를 들어, 메모리 컨트롤러(120)는 모든 존 버퍼들에 저장된 데이터를 예비 영역(RA)(도 3a 내지 도 3e 참조)의 소거 영역들 중 백업을 위해 선택된 소거 유닛에 기입할 수 있다. 이후에, 메모리 컨트롤러(120)는 파워 오프를 위해 정해진 시퀀스에 따라 파워 오프를 수행할 수 있다.
도 41은 스토리지 장치(100)가 백업 동작을 수행하는 제4 예를 보여준다. 도 1 및 도 41을 참조하면, S2410 단계에서, 메모리 컨트롤러(120)는 외부의 호스트 장치로부터 플러시 요청을 수신할 수 있다. 플러시 요청은 커맨드 UPIU 또는 쿼리 리퀘스트 UPIU를 통해 수신될 수 있다.
S2420 단계에서, 플러시 요청에 응답하여, 메모리 컨트롤러(120)는 모든 존 버퍼들 또는 선택된 존 버퍼(들)에 저장된 데이터의 백업 동작을 수행할 수 있다. 예를 들어, 메모리 컨트롤러(120)는 모든 존 버퍼들 또는 선택된 존 버퍼(들)에 저장된 데이터를 예비 영역(RA)(도 3a 내지 도 3e 참조)의 소거 영역들 중 백업을 위해 선택된 소거 유닛에 기입할 수 있다. 이후에, 메모리 컨트롤러(120)는 파워 오프를 위해 정해진 시퀀스에 따라 파워 오프를 수행할 수 있다.
도 38, 도 39, 도 40 및 도 41을 참조하여 설명된 바와 같이, 스토리지 장치(100)는 다양한 요인들로 인해 백업 동작을 수행할 수 있다. 스토리지 장치(100)는 백업 동작의 최적화를 위해, 내부 정책에 따라 예비 영역(RA)의 소거 영역들 중 백업을 위한 소거 영역을 선택할 수 있다.
도 42는 스토리지 장치(100)가 백업을 위한 소거 영역을 선택하는 방법의 예를 보여준다. 도 1 및 도 42를 참조하면, S2510 단계에서, 메모리 컨트롤러(120)는 백업 소거 유닛(EU)이 존재하는지 판단할 수 있다. 예를 들어, 메모리 컨트롤러(120)는 이미 백업 동작에 의해 데이터가 기입된 소거 유닛(EU)이 존재하는지 판단할 수 있다.
백업 소거 유닛(EU)이 존재하면, S2520 단계에서, 메모리 컨트롤러(120)는 존재하는 백업 소거 유닛(EU)을 선택할 수 있다. 이후에, S2540 단계에서, 메모리 컨트롤러(120)는 선택된 소거 유닛(EU)에 백업 데이터를 기입할 수 있다.
백업 소거 유닛이 존재하지 않으면, S2530 단계에서, 메모리 컨트롤러(120)는 목표 특색들 및 장치 특색들에 기반하여 백업을 위한 소거 유닛(EU)의 셀 타입을 선택할 수 있다.
S2540 단계에서, 메모리 컨트롤러(120)는 선택된 소거 유닛(EU)에 백업 데이터를 기입할 수 있다. 즉, 메모리 컨트롤러(120)는 상황에 따라 서로 다른 셀 타입의 소거 유닛들(EU)에 백업 데이터를 기입할 수 있다.
다른 예로서, 메모리 컨트롤러(120)는 셀 타입 별로 백업 소거 유닛을 선택할 수 있다. 예를 들어, 메모리 컨트롤러(120)는 SLC의 셀 타입을 갖는 백업 소거 유닛, MLC의 셀 타입을 갖는 백업 소거 유닛을 선택할 수 있다. 이러한 실시 예에서, 메모리 컨트롤러(120)는 목표 특색들 및 장치 특색들에 기반하여 셀 타입을 선택하고, 선택된 셀 타입의 백업 소거 유닛이 존재하는지 판단할 수 있다. 선택된 셀 타입의 백업 소거 유닛이 존재하면, 메모리 컨트롤러(120)는 백업 동작의 데이터를 이미 존재하는 백업 소거 유닛에 기입할 수 있다. 선택된 셀 타입의 백업 소거 유닛이 존재하지 않으면, 메모리 컨트롤러(120)는 선택된 셀 타입을 갖는 새로운 백업 소거 유닛을 선택하고, 그리고 선택된 백업 소거 유닛에 데이터를 기입할 수 있다.
도 43은 스토리지 장치(100)가 목표 특색들 및 백업 특색들에 기반하여 셀 타입을 선택하는 예를 보여준다. 도 1 및 도 43을 참조하면, S2610 단계에서, 메모리 컨트롤러(120)는 외부의 호스트 장치에 의해 쓰기 요청된 데이터가 성능 또는 신뢰성이 강조되는 데이터인지 판단할 수 있다. 예를 들어, 외부의 호스트 장치로부터 수신되는 쓰기 요청에 포함된 성능 요구(또는 목표) 정보, 신뢰성 요구(또는 목표) 정보, 우선 순위 요구(또는 목표) 정보, 또는 스트림 식별자 정보 등과 같은 다양한 정보들 중 적어도 하나에 기반하여, 메모리 컨트롤러(120)는 쓰기 요청된 데이터가 성능 또는 신뢰성이 강조되는 데이터인지 판단할 수 있다. 쓰기 데이터가 성능 또는 신뢰성이 강조되는 데이터이면, S2620 단계에서, 메모리 컨트롤러(120)는 백업 소거 유닛의 셀 타입으로 SLC를 선택할 수 있다. 예시적으로, 성능 요구, 신뢰성 요구, 그리고 우선 순위 요구는 목표 특색들에 포함될 수 있다.
쓰기 데이터가 성능 또는 신뢰성이 강조되는 데이터가 아니면, S2630 단계에서, 메모리 컨트롤러(120)는 불휘발성 메모리 장치(110)가 낮은 내구도를 갖는지 판단할 수 있다. 예를 들어, 메모리 컨트롤러(120)는 불휘발성 메모리 장치(110)의 평균 소거 횟수가 제1 임계값보다 클 때, 또는 불휘발성 메모리 장치(110)로부터 데이터를 읽을 때의 비트 에러율이 제2 임계값보다 클 때, 불휘발성 메모리 장치(110)가 낮은 내구도를 갖는 것으로 판단할 수 있다. 불휘발성 메모리 장치(110)가 낮은 내구도를 가지면, S2620 단계에서, 메모리 컨트롤러(120)는 백업 소거 유닛의 셀 타입으로 SLC를 선택할 수 있다. 예시적으로, 내구도는 장치 특색들에 포함될 수 있다.
쓰기 데이터가 성능 또는 신뢰성이 강조되는 데이터가 아니고, 그리고 불휘발성 메모리 장치(110)가 낮은 내구도를 갖지 않으면, S2640 단계에서, 메모리 컨트롤러(120)는 (x-1)LC(x는 목표 존의 셀 타입에 대응) 또는 그보다 낮은 셀 타입을 갖는 소거 유닛을 백업 소거 유닛으로 선택할 수 있다. 즉, 메모리 컨트롤러(120)는 메모리 셀 당 기입되는 비트들의 수가 목표 존의 메모리 셀 당 기입되는 비트들의 수보다 적은 소거 유닛을 백업 소거 유닛으로 선택할 수 있다.
예시적으로, 메모리 컨트롤러(120)가 백업 소거 유닛의 셀 타입을 선택하는 기준은 도 43에 도시된 기준들로 한정되지 않는다. 예를 들어, 메모리 컨트롤러(120)는 내부 버퍼(123)의 존 버퍼들 중 백업 동작을 수행할 존 버퍼(들)에 저장된 데이터의 사이즈가 클수록, 더 낮은 셀 타입을 갖는 소거 유닛, 예를 들어 메모리 셀 당 기입되는 비트들의 수가 더 적은 소거 유닛을 선택할 수 있다. 예시적으로, 데이터의 사이즈는 목표 특색들에 포함될 수 있다.
메모리 컨트롤러(120)는 각 존에 기입되는 데이터가 갱신되는 빈도에 따라, 각 존에 온도를 부여할 수 있다. 예를 들어, 제1 존(Z1)의 데이터가 갱신되는 빈도가 제1 임계값보다 낮으면, 메모리 컨트롤러(120)는 제1 존(Z1)을 콜드 존으로 분류할 수 있다. 제2 존(Z2)의 데이터가 갱신되는 빈도가 제1 임계값 이상이고 그리고 제2 임계값보다 낮으면, 메모리 컨트롤러(120)는 제2 존(Z2)을 웜 존으로 분류할 수 있다. 제3 존(Z2)의 데이터가 갱신되는 빈도가 제2 임계값 이상이면, 메모리 컨트롤러(120)는 제3 존(Z3)을 핫 존으로 분류할 수 있다. 메모리 컨트롤러(120)는 목표 존의 데이터의 갱신 빈도가 높을수록, 더 낮은 셀 타입을 갖는 소거 유닛, 예를 들어 메모리 셀 당 기입되는 비트들의 수가 더 적은 소거 유닛을 선택할 수 있다. 예시적으로, 갱신 빈도는 목표 특색에 포함될 수 있다.
예시적으로, 메모리 컨트롤러(120)는 백업 동작을 유발한 원인에 따라 백업 소거 유닛의 셀 타입을 선택할 수 있다. 예를 들어, 파워 오프 노티피케이션(PON)에 응답하여 백업 동작이 수행되는 경우, 메모리 컨트롤러(120)는 SLC의 셀 타입을 갖는 소거 유닛을 선택할 수 있다. 희생 존 버퍼의 백업, 포스 유닛 액세스(FUA), 또는 플러시 요청에 의해 백업 동작이 수행될 때, 메모리 컨트롤러(120)는 상술된 다양한 팩터들 중 적어도 하나에 기반하여 백업 소거 유닛의 셀 타입을 선택할 수 있다. 예시적으로, 백업 동작을 유발한 원인은 목표 특색들에 포함될 수 있다.
일 실시 예에 따르면, 백업 동작을 수행한 후에, 메모리 컨트롤러(120)는 백업 소거 유닛의 마이그레이션을 트리거할 수 있다. 예를 들어, 파워 오프 노티피케이션(PON)에 응답하여 백업 동작이 수행된 때에, 메모리 컨트롤러(120)는 다음 파워 온 후에 백업 소거 유닛의 마이그레이션을 트리거할 수 있다.
도 44는 존 버퍼의 데이터가 백업 동작에 의해 불휘발성 메모리 장치(110)에 기입되는 예를 보여준다. 도 1 및 도 44를 참조하면, 데이터 입력 단계(SDIN)에서, 메모리 컨트롤러(120)는 외부의 호스트 장치로부터 제5 존(Z5)에 기입될 데이터를 수신할 수 있다. 예시적으로, 제5 존의 셀 타입은 TLC이고, 제5 존(Z5)의 쓰기 유닛(WU)은 세 개의 페이지들일 수 있다. 외부의 호스트 장치로부터 두 개의 페이지의 데이터가 수신되면, 메모리 컨트롤러(120)는 두 개의 페이지들을 제5 존(Z5)의 존 버퍼(BA_Z5)에 저장할 수 있다.
도 38, 도 39, 도 40 및 도 41을 참조하여 설명된 바와 같이 백업 동작이 수행될 때, 메모리 컨트롤러(120)는 제1 옵션(OPT1)에 따라 제5 존(Z5)의 존 버퍼(BA_Z5)의 데이터를 SLC의 셀 타입을 갖는 소거 유닛의 두 개의 페이지들에 저장할 수 있다. 또는, 메모리 컨트롤러(120)는 제2 옵션(OPT2)에 따라 제5 존(Z5)의 존 버퍼(BA_Z5)의 데이터를 MLC의 셀 타입을 갖는 소거 유닛의 하나의 페이지에 저장할 수 있다.
일 실시 예에 따르면, 백업 소거 유닛에 저장된 데이터가 존재하면, 메모리 컨트롤러(120)는 백업 소거 유닛에 저장된 데이터를 내부 버퍼의 대응하는 존 버퍼에 로드하고, 그리고 존 버퍼에서 목표 존의 쓰기 유닛에 대응하는 데이터가 수집되면 수집된 데이터를 목표 존에 기입하도록 구현될 수 있다. 그러나 다양한 존들에 대한 쓰기들이 번갈아 수행될 때에, 백업 소거 유닛의 데이터를 대응하는 존 버퍼에 로드하는 것은 도 38을 참조하여 설명된 백업 동작이 복수회 수행되는 것을 유발할 수 있다. 이는 쓰기 증폭(Write Amplification)을 증가시키고, 스토리지 장치(100)의 수명을 감소시킬 수 있다. 이러한 문제를 방지하기 위하여, 본 기재의 실시 예에 따른 스토리지 장치(100)는 데이터를 백업 소거 유닛에서 수집하도록 구현될 수 있다.
도 45는 스토리지 장치(100)가 백업 소거 유닛에서 데이터를 수집하는 예를 보여준다. 도 1 및 도 45를 참조하면, S2710 단계에서, 메모리 컨트롤러(120)는 존 버퍼의 백업 동작을 검출할 수 있다. S2720 단계에서, 메모리 컨트롤러(120)는 버퍼링 유닛을 백업 소거 유닛(EU)의 셀 타입으로 조절할 수 있다. 예를 들어, 버퍼링 유닛은 메모리 컨트롤러(120)가 존에 데이터를 기입하기 위해 내부 버퍼(123)의 존 버퍼에서 수집하는 데이터의 셀 타입일 수 있다. S2730 단계에서, 메모리 컨트롤러(120)는 쓰기 목표를 백업 소거 유닛(EU)으로 조절할 수 있다.
즉, 메모리 컨트롤러(120)는 백업 동작을 수행한 후에, 버퍼링 유닛을 백업 소거 유닛(EU)의 셀 타입으로 조절하고, 그리고 백업 소거 유닛(EU)에 데이터를 기입할 수 있다. 메모리 컨트롤러(120)는 백업 소거 유닛(EU)을 이용하여 버퍼링을 수행할 수 있다. 백업 소거 유닛(EU)은 예비 영역(RA)(도 3a 내지 도 3e 참조)의 소거 유닛들 중에서 선택될 수 있다. 즉, 메모리 컨트롤러(120)는 내부 버퍼(123)의 존 버퍼 및 예비 영역(RA)을 이용하여 2중의 버퍼링을 수행할 수 있다.
도 46은 스토리지 장치(100)가 백업 소거 유닛의 데이터를 목표 존으로 마이그레이션하는 예를 보여준다. 도 1, 도 45 및 도 46을 참조하면, S2810 단계에서, 메모리 컨트롤러(120)는 백업 소거 유닛(EU)에 데이터를 기입할 수 있다. 예를 들어, 메모리 컨트롤러(120)는 외부의 호스트 장치의 쓰기 요청에 응답하여 데이터를 내부 버퍼(123)의 존 버퍼에 저장할 수 있다. 도 45를 참조하여 설명된 바와 같이, 존 버퍼에 저장된 데이터가 백업 소거 유닛(EU)의 셀 타입(또는 쓰기 유닛)에 대응하면, 메모리 컨트롤러(120)는 존 버퍼의 데이터를 백업 소거 유닛(EU)에 기입할 수 있다.
S2820 단계에서, 메모리 컨트롤러(120)는 백업 소거 유닛(EU)에 수집된 데이터가 목표 존의 페이지 데이터에 대응하는지 판단할 수 있다. 예를 들어, 메모리 컨트롤러(120)는 백업 소거 유닛(EU)에 수집된 데이터가 목표 존의 셀 타입에 대응하는 쓰기 유닛에 도달했는지 판단할 수 있다. 백업 소거 유닛(EU)에 수집된 데이터가 목표 존의 셀 타입에 대응하지 않으면, 메모리 컨트롤러(120)는 프로세스를 종료할 수 있다. 백업 소거 유닛(EU)에 수집된 데이터가 목표 존의 셀 타입에 대응하면, 메모리 컨트롤러(120)는 S2830 단계를 수행할 수 있다.
S2830 단계에서, 메모리 컨트롤러(120)는 백업 데이터를 마이그레이트할 수 있다. 예를 들어, 메모리 컨트롤러(120)는 백업 소거 유닛(EU)에 기입된 목표 존의 셀 타입에 대응하는 데이터를 읽고, 그리고 읽혀진 데이터를 목표 존에 기입할 수 있다.
S2840 단계에서, 메모리 컨트롤러(120)는 남아있는 백업 데이터가 존재하는지 판단할 수 있다. 예를 들어, 메모리 컨트롤러(120)는 백업 소거 유닛(EU)에 목표 존의 데이터가 남아있는지 판단할 수 있다. 예시적으로, 백업 소거 유닛(EU)의 쓰기 유닛과 목표 존의 쓰기 유닛이 다를 수 있으므로, 백업 소거 유닛(EU)에 목표 존의 데이터가 남아있을 수 있다.
백업 소거 유닛(EU)에 목표 존의 데이터가 남아있으면, 메모리 컨트롤러(120)는 프로세스를 종료할 수 있다. 백업 소거 유닛(EU)에 목표 존의 데이터가 남아있지 않으면, S2850 단계에서, 메모리 컨트롤러(120)는 버퍼링 유닛을 목표 존의 셀 타입으로 조절할 수 있다. S2860 단계에서, 메모리 컨트롤러(120)는 쓰기 목표를 목표 존으로 조절할 수 있다. 즉, 메모리 컨트롤러(120)는 마이그레이션을 통해 백업 데이터를 모두 목표 존으로 옮긴 후에, 버퍼링 유닛을 목표 존의 셀 타입으로 조절하고, 그리고 목표 존에 데이터를 기입할 수 있다.
도 47a 내지 도 47c는 스토리지 장치(100)가 SLC의 셀 타입을 갖는 백업 소거 유닛을 이용하여 버퍼링을 수행하는 예들을 보여준다. 도 1 및 도 47a를 참조하면, 데이터 입력 단계(SDIN)에서, 메모리 컨트롤러(120)는 외부의 호스트 장치로부터 수신되는 두 개의 페이지 데이터를 제5 존(Z5)의 존 버퍼(BA_Z5)에 저장할 수 있다. 이후에, 백업 단계(SBCK)에서, 메모리 컨트롤러(120)는 제5 존(Z5)의 존 버퍼(BA_Z5)에 저장된 두 개의 페이지 데이터를 SLC의 셀 타입을 갖는 소거 유닛(EU)에 백업할 수 있다. 도 45를 참조하여 설명된 바와 같이, 메모리 컨트롤러(120)는 제5 존(Z5)의 버퍼링 유닛 및 쓰기 목표를 조절하고, 그리고 SLC의 셀 타입을 갖는 소거 유닛(EU)을 이용하여 2중 버퍼링을 수행할 수 있다.
도 1 및 도 47b를 참조하면, 데이터 입력 단계(SDIN)에서 외부의 호스트 장치로부터 제5 존(Z5)에 대한 하나의 페이지 데이터가 수신되면, 메모리 컨트롤러(120)는 수신된 하나의 페이지 데이터를 제5 존(Z5)의 존 버퍼(BA_Z5)에 저장할 수 있다. 제5 존(Z5)의 버퍼링 유닛이 SLC의 셀 타입에 대응하므로, 쓰기 단계(SWR)에서, 메모리 컨트롤러(120)는 제5 존(Z5)의 존 버퍼(BA_Z5)에 저장된 데이터를 SLC의 셀 타입을 갖는 소거 유닛(EU)(예를 들어, 백업 소거 유닛)에 기입할 수 있다.
도 1, 도 47b 및 도 47c를 참조하면, SLC의 셀 타입을 갖는 소거 유닛(EU)에 제5 존(Z5)의 TLC의 셀 타입 또는 쓰기 유닛(WU)에 대응하는 데이터가 수집되었으므로, 메모리 컨트롤러(120)는 SLC의 셀 타입을 갖는 소거 유닛(EU)에 기입된 데이터를 제5 존(Z5)으로 마이그레이션할 수 있다. 이후에, 도 46을 참조하여 설명된 바와 같이, 메모리 컨트롤러(120)는 제5 존(Z5)의 버퍼링 유닛 및 쓰기 목표를 제5 존(Z5)으로 조절할 수 있다.
도 48a 내지 도 48c는 스토리지 장치(100)가 MLC의 셀 타입을 갖는 백업 소거 유닛을 이용하여 버퍼링을 수행하는 예들을 보여준다. 도 1 및 도 48a를 참조하면, 데이터 입력 단계(SDIN)에서, 메모리 컨트롤러(120)는 외부의 호스트 장치로부터 수신되는 두 개의 페이지 데이터를 제5 존(Z5)의 존 버퍼(BA_Z5)에 저장할 수 있다. 이후에, 백업 단계(SBCK)에서, 메모리 컨트롤러(120)는 제5 존(Z5)의 존 버퍼(BA_Z5)에 저장된 두 개의 페이지 데이터를 SLC의 셀 타입을 갖는 소거 유닛(EU)에 백업할 수 있다. 도 45를 참조하여 설명된 바와 같이, 메모리 컨트롤러(120)는 제5 존(Z5)의 버퍼링 유닛 및 쓰기 목표를 조절하고, 그리고 SLC의 셀 타입을 갖는 소거 유닛(EU)을 이용하여 2중 버퍼링을 수행할 수 있다.
도 1 및 도 48b를 참조하면, 데이터 입력 단계(SDIN)에서 외부의 호스트 장치로부터 제5 존(Z5)에 대한 두 개의 페이지 데이터가 수신되면, 메모리 컨트롤러(120)는 수신된 두 개의 페이지 데이터를 제5 존(Z5)의 존 버퍼(BA_Z5)에 저장할 수 있다. 제5 존(Z5)의 버퍼링 유닛이 MLC의 셀 타입에 대응하므로, 쓰기 단계(SWR)에서, 메모리 컨트롤러(120)는 제5 존(Z5)의 존 버퍼(BA_Z5)에 저장된 데이터를 MLC의 셀 타입을 갖는 소거 유닛(EU)(예를 들어, 백업 소거 유닛)에 기입할 수 있다.
도 1, 도 48b 및 도 48c를 참조하면, MLC의 셀 타입을 갖는 소거 유닛(EU)에 제5 존(Z5)의 TLC의 셀 타입 또는 쓰기 유닛(WU)에 대응하는 데이터가 수집되었으므로, 메모리 컨트롤러(120)는 MLC의 셀 타입을 갖는 소거 유닛(EU)에 기입된 데이터 중 세 개의 페이지 데이터를 제5 존(Z5)으로 마이그레이션할 수 있다. 하나의 페이지 데이터가 MLC의 셀 타입을 갖는 소거 유닛(EU)에 남아있으므로, 도 46을 참조하여 설명된 바와 같이, 메모리 컨트롤러(120)는 제5 존(Z5)의 버퍼링 유닛 및 쓰기 목표를 MLC의 셀 타입을 갖는 소거 유닛(EU)으로 유지할 수 있다.
예시적으로, 외부의 호스트 장치로부터 제5 존(Z5)에 기입될 두 개의 페이지 데이터가 더 수신되면, 메모리 컨트롤러(120)는 두 개의 페이지 데이터를 MLC의 셀 타입을 갖는 소거 유닛(EU)에 기입하고, 그리고 MLC의 셀 타입을 갖는 소거 유닛(EU)으로부터 세 개의 페이지 데이터를 제5 존(Z5)으로 마이그레이션할 수 있다. 이후에, 도 46을 참조하여 설명된 바와 같이, 메모리 컨트롤러(120)는 제5 존(Z5)의 버퍼링 유닛 및 쓰기 목표를 제5 존(Z5)으로 조절할 수 있다.
도 49는 스토리지 장치(100)가 둘 이상의 존들과 연관된 데이터의 백업 동작을 수행하는 예를 보여준다. 예시적으로, 외부의 호스트 장치로부터 둘 이상의 존들에 대한 플러시 요청이 수신된 때에, 또는 외부의 호스트 장치로부터 파워 오프 노티피케이션이 수신된 때에, 둘 이상의 존 버퍼들의 데이터가 백업될 수 있다.
도 1 및 도 49를 참조하면, S2910 단계에서, 메모리 컨트롤러(120)는 존 버퍼를 선택할 수 있다. 예를 들어, 메모리 컨트롤러(120)는 내부 버퍼(123)의 백업 동작의 대상인 존 버퍼들 중 하나의 존 버퍼를 선택할 수 있다.
S2920 단계에서, 메모리 컨트롤러(120)는 선택된 존 버퍼의 데이터를 논리 주소(LBA)의 순서로 읽을 수 있다. S2930 단계에서, 메모리 컨트롤러(120)는 논리 주소(LBA)의 순서로 데이터를 기입할 수 있다. 예를 들어, 메모리 컨트롤러(120)는 선택된 존 버퍼로부터 읽혀진 데이터를 백업 소거 유닛에 논리 주소(LBA)의 순서로 기입할 수 있다.
S2940 단계에서, 메모리 컨트롤러(120)는 선택된 존 버퍼가 마지막 존 버퍼인지 판단할 수 있다. 예를 들어, 메모리 컨트롤러(120)는 선택된 존 버퍼가 내부 버퍼(123)의 백업 동작의 대상인 존 버퍼들 중 마지막 존 버퍼인지 판단할 수 있다. 선택된 존 버퍼가 마지막 존 버퍼가 아니면, 메모리 컨트롤러(120)는 S2910 단계에서 다음 존 버퍼를 선택하고, 그리고 S2920 단계, S2930 단계 및 S2940 단계를 다시 수행할 수 있다. 선택된 존 버퍼가 마지막 존 버퍼이면, 메모리 컨트롤러(120)는 백업 동작을 종료할 수 있다.
즉, 내부 버퍼(123)의 둘 이상의 존 버퍼들에 저장된 데이터의 백업이 필요할 때에, 메모리 컨트롤러(120)는 내부 버퍼(123)의 둘 이상의 존 버퍼들에 저장된 데이터를 존 버퍼 별로(또는 존 별로) 모아서 백업 소거 유닛에 기입할 수 있다.
도 50은 스토리지 장치(100)가 존 버퍼들의 데이터를 백업하는 예를 보여준다. 도 1 및 도 50을 참조하면, 제5 존(Z5)의 존 버퍼(BA_Z5)는 '0100' 및 '0101'의 논리 주소들에 대응하는 데이터를 저장할 수 있다. 스토리지 장치(100)는 '0100' 및 '0101'의 논리 주소들에 대응하는 데이터를 SLC의 셀 타입을 갖는 소거 유닛(EU)에 논리 주소들의 순서대로 기입할 수 있다.
제6 존(Z6)의 존 버퍼(BA_Z6)는 '1100' 및 '1101'의 논리 주소들에 대응하는 데이터를 저장할 수 있다. 스토리지 장치(100)는 '1100' 및 '1101'의 논리 주소들에 대응하는 데이터를 SLC의 셀 타입을 갖는 소거 유닛(EU)에 논리 주소들의 순서대로 기입할 수 있다.
도 51은 백업 소거 유닛에 존들의 데이터가 백업된 예를 보여준다. 도 1 및 도 51을 참조하면, SLC의 셀 타입을 갖는 백업 소거 유닛(EU)에 제5 존(Z5)의 데이터가 논리 주소들의 순서대로 기입될 수 있다. 이후에, SLC의 셀 타입을 갖는 백업 소거 유닛(EU)에 제6 존(Z6)의 데이터가 논리 주소들의 순서대로 기입될 수 있다. 이후에, SLC의 셀 타입을 갖는 백업 소거 유닛(EU)에 제7 존(Z7)의 데이터가 논리 주소들의 순서대로 기입될 수 있다.
백업 데이터를 존 버퍼 별로(또는 존 별로) 모아서 논리 순서들의 순서대로 백업함으로써, 백업 소거 유닛(EU)의 데이터를 목표 존들로 마이그레이션하는 과정이 가속될 수 있다.
도 52는 스토리지 장치(100)가 불휘발성 메모리 장치(110)를 이용하여 버퍼링을 수행하는 다른 예를 보여준다. 도 1 및 도 52를 참조하면, S3010 단계에서, 메모리 컨트롤러(120)는 외부의 호스트 장치로부터 쓰기 요청(WR)을 수신할 수 있다. 쓰기 요청(WR)은 커맨드 UPIU를 통해 수신될 수 있다.
S3020 단계에서, 메모리 컨트롤러(120)는 쓰기 요청(WR)과 함께 수신된 데이터를 내부 버퍼(120)(또는 존 버퍼)에 저장할 수 있다. 예시적으로, S3010 단계와 S3020 단계의 사이에, 쓰기 요청(WR)에 응답하여 메모리 컨트롤러(120)가 외부의 호스트 장치로 레디 투 트랜스퍼 UPIU를 전송하고, 메모리 컨트롤러(120)가 외부의 호스트 장치로부터 데이터 아웃 UPIU와 함께 쓰기 데이터를 수신하는 단계들이 더 수행될 수 있다.
S3030 단계에서, 메모리 컨트롤러(120)는 내부 버퍼(123)(또는 존 버퍼)에 저장된 데이터를 쓰기 부스터 버퍼(WBB) 또는 제1 타입 존(도 10 내지 도 15를 참조하여 설명된)에 기입할 수 있다.
예를 들어, 데이터를 공유 쓰기 부스터 버퍼(SWBB)(도 3a 내지 도 3e 참조)에 기입할 때, 목표 존에 관계 없이 내부 버퍼(123)에 저장된 데이터가 쓰기 부스터 버퍼(WBB)의 셀 타입에 대응하면, 메모리 컨트롤러(120)는 내부 버퍼(123)에 저장된 데이터를 공유 쓰기 부스터 버퍼(WBB)에 기입할 수 있다.
예를 들어, 데이터를 지정 쓰기 부스터 버퍼(DWBB) 또는 제1 타입 존에 기입할 때, 내부 버퍼(123)의 존 버퍼에 저장된 목표 존을 공유하는 데이터가 지정 쓰기 부스터 버퍼(DWBB) 또는 제1 타입 존의 셀 타입에 대응하면, 메모리 컨트롤러(120)는 목표 존을 공유하는 데이터를 목표 존에 대응하는 지정 쓰기 부스터 버퍼(DWBB) 또는 제1 타입 존에 기입할 수 있다.
S3040 단계에서, 메모리 컨트롤러(120)는 기입된 데이터의 페이지 맵 테이블을 생성할 수 있다.
도 53은 스토리지 장치(100)가 마이그레이션을 트리거하는 방법의 예를 보여준다. 도 1 및 도 53을 참조하면, S3110 단계에서, 메모리 컨트롤러(120)는 클로즈 존 요청이 수신되면, S3240 단계에서 메모리 컨트롤러(120)는 클로즈 존 요청에 대응하는 존의 마이그레이션을 트리거할 수 있다.
클로즈 존 요청이 수신되지 않았으면, S3120 단계에서, 메모리 컨트롤러(120)는 하이버네이트(Hibernate) 상태(예를 들어, 절전 상태)인지 판단할 수 있다. 하이버네이트 상태이면, S3140 단계에서 메모리 컨트롤러(120)는 마이그레이션을 트리거할 수 있다. 예를 들어, 메모리 컨트롤러(120)는 백업 소거 유닛에 기입된 데이터, 쓰기 부스터 버퍼(WBB)(도 3a 내지 도 3e 참조)에 저장된 데이터, 또는 제1 타입 존에 기입된 데이터의 마이그레이션을 트리거할 수 있다.
하이버네이트 상태가 아니면, S3130 단계에서, 메모리 컨트롤러(120)는 스토리지 장치(100)가 유휴 상태인지 판단할 수 있다. 유휴 상태는 스토리지 장치(100)에 실행을 위하여 대기중인 요청들이 없는 상태일 수 있다. 스토리지 장치(100)가 유휴 상태이면, S3140 단계에서 메모리 컨트롤러(120)는 마이그레이션을 트리거할 수 있다. 예를 들어, 메모리 컨트롤러(120)는 백업 소거 유닛에 기입된 데이터, 쓰기 부스터 버퍼(WBB) 에 저장된 데이터, 또는 제1 타입 존에 기입된 데이터의 마이그레이션을 트리거할 수 있다. 유휴 상태가 아니면, 메모리 컨트롤러(120)는 마이그레이션을 트리거하지 않고 판단을 종료할 수 있다.
하이버네이트 상태 또는 유휴 상태에서 트리거된 마이그레이션은 하이버네이트 상태 또는 유휴 상태의 종료와 함께 중지될 수 있다. 메모리 컨트롤러(120)는 하이버네이트 상태 또는 유휴 상태로 다시 진입하는 것에 응답하여, 중지된 마이그레이션을 재개할 수 있다.
상술된 바와 같이, 스토리지 장치(100)는 외부의 호스트 장치에 의해 인식되지 않는 배경 동작으로서 마이그레이션을 수행하도록 구현될 수 있다.
도 54는 스토리지 장치(100)가 마이그레이션을 수행하는 예를 보여준다. 도 1 및 도 54를 참조하면, S3210 단계에서, 메모리 컨트롤러(120)는 마이그레이션의 소스인 쓰기 부스터 버퍼(WBB), 백업 소거 유닛 또는 제1 타입 존에서 목표 존을 공유하는 데이터의 논리 어드레스들 내의 연속성을 스캔할 수 있다.
예를 들어, 메모리 컨트롤러(120)는 마이그레이션의 목표 존의 셀 타입 또는 쓰기 유닛에 기반하여 연속성을 판단할 수 있다. 마이그레이션의 소스에 기입된 데이터의 논리 어드레스들은 목표 존의 셀 타입 또는 쓰기 유닛에 의해 그룹들로 분할될 수 있다. 분할된 그룹의 논리 어드레스들에 대응하는 데이터가 소스 존에 모두 기입된 때에, 메모리 컨트롤러(120)는 해당 그룹은 연속성을 갖는 것으로 식별될 수 있다.
S3220 단계에서, 메모리 컨트롤러(120)는 연속성을 갖는 데이터를 마이그레이션할 수 있다. 예를 들어, 메모리 컨트롤러(120)는 마이그레이션의 소스에 기입된 연속성을 갖는 그룹을 가장 낮은 논리 어드레스로부터 순차적으로 마이그레이션 할 수 있다. 따라서, 목표 존에서, 물리 어드레스들 및 논리 어드레스들의 순차성이 보장될 수 있다.
도 55a 내지 도 55d는 스토리지 장치(100)가 마이그레이션을 수행하는 과정의 예를 보여준다. 도 55a를 참조하면, 마이그레이션의 소스는 쓰기 부스터 버퍼, 백업 소거 유닛, 또는 제1 타입 존일 수 있다. 마이그레이션의 소스는 제1 내지 제16 물리 주소들(PBA1~PBA16)을 포함할 수 있다. 목표 존은 제1 내지 제16 물리 주소들(PBA1~PBA16)을 포함할 수 있다. 마이그레이션의 소스의 물리적인 구조와 목표 존의 물리적인 구조는 동일하므로, 물리 주소들의 수는 동일할 수 있다.
예시적으로, 마이그레이션 동작의 설명을 위하여, 메모리 컨트롤러(120)는 외부의 호스트 장치로부터 수신되는 쓰기 요청을 마이그레이션의 소스에 기입하는 사례들이 가정된다.
도 55b를 참조하면, S3311 단계에서, 외부의 호스트 장치에 의해 제1 논리 주소(LBA1)에 대응하는 데이터의 기입이 요청될 수 있다. 메모리 컨트롤러(120)는 물리 주소들의 순서에 따라 데이터를 기입할 수 있다. 메모리 컨트롤러(120)는 마이그레이션의 소스의 제1 물리 주소(PBA1)에 대응하는 저장 공간에 데이터를 기입하고, 그리고 제1 물리 주소(PBA1) 및 제1 논리 주소(LBA1)의 매핑 정보를 저장할 수 있다.
S3312 단계에서, 외부의 호스트 장치에 의해 제3 논리 주소(LBA3)에 대응하는 데이터의 기입이 요청될 수 있다. 메모리 컨트롤러(120)는 마이그레이션의 소스의 제2 물리 주소(PBA2)에 대응하는 저장 공간에 데이터를 기입하고, 그리고 제2 물리 주소(PBA2) 및 제3 논리 주소(LBA3)의 매핑 정보를 저장할 수 있다.
S3313 단계에서, 외부의 호스트 장치에 의해 제4 논리 주소(LBA4)에 대응하는 데이터의 기입이 요청될 수 있다. 메모리 컨트롤러(120)는 마이그레이션의 소스의 제3 물리 주소(PBA3)에 대응하는 저장 공간에 데이터를 기입하고, 그리고 제3 물리 주소(PBA3) 및 제4 논리 주소(LBA4)의 매핑 정보를 저장할 수 있다.
S3314 단계에서, 외부의 호스트 장치에 의해 제6 논리 주소(LBA6)에 대응하는 데이터의 기입이 요청될 수 있다. 메모리 컨트롤러(120)는 마이그레이션의 소스의 제4 물리 주소(PBA4)에 대응하는 저장 공간에 데이터를 기입하고, 그리고 제4 물리 주소(PBA4) 및 제6 논리 주소(LBA6)의 매핑 정보를 저장할 수 있다.
S3315 단계에서, 외부의 호스트 장치에 의해 제7 논리 주소(LBA7)에 대응하는 데이터의 기입이 요청될 수 있다. 메모리 컨트롤러(120)는 마이그레이션의 소스의 제5 물리 주소(PBA5)에 대응하는 저장 공간에 데이터를 기입하고, 그리고 제5 물리 주소(PBA5) 및 제7 논리 주소(LBA7)의 매핑 정보를 저장할 수 있다.
S3316 단계에서, 외부의 호스트 장치에 의해 제9 논리 주소(LBA9)에 대응하는 데이터의 기입이 요청될 수 있다. 메모리 컨트롤러(120)는 마이그레이션의 소스의 제6 물리 주소(PBA6)에 대응하는 저장 공간에 데이터를 기입하고, 그리고 제6 물리 주소(PBA6) 및 제9 논리 주소(LBA9)의 매핑 정보를 저장할 수 있다.
S3317 단계에서, 외부의 호스트 장치에 의해 제10 논리 주소(LBA10)에 대응하는 데이터의 기입이 요청될 수 있다. 메모리 컨트롤러(120)는 마이그레이션의 소스의 제7 물리 주소(PBA7)에 대응하는 저장 공간에 데이터를 기입하고, 그리고 제7 물리 주소(PBA7) 및 제10 논리 주소(LBA10)의 매핑 정보를 저장할 수 있다.
S3318 단계에서, 외부의 호스트 장치에 의해 제12 논리 주소(LBA12)에 대응하는 데이터의 기입이 요청될 수 있다. 메모리 컨트롤러(120)는 마이그레이션의 소스의 제8 물리 주소(PBA8)에 대응하는 저장 공간에 데이터를 기입하고, 그리고 제8 물리 주소(PBA8) 및 제12 논리 주소(LBA12)의 매핑 정보를 저장할 수 있다.
도 55b에서, 연속성을 갖는 그룹이 존재하지 않으므로, 마이그레이션(MIG)은 수행되지 않을 수 있다.
도 55c를 참조하면, S3321 단계에서, 외부의 호스트 장치에 의해 제2 논리 주소(LBA2)에 대응하는 데이터의 기입이 요청될 수 있다. 메모리 컨트롤러(120)는 마이그레이션의 소스의 제9 물리 주소(PBA9)에 대응하는 저장 공간에 데이터를 기입하고, 그리고 제9 물리 주소(PBA9) 및 제2 논리 주소(LBA2)의 매핑 정보를 저장할 수 있다.
목표 존의 메모리 셀이 TLC로 사용되면, 목표 존의 하나의 물리 주소에 세 개의 논리 주소들이 매핑될 수 있다. 메모리 컨트롤러(120)는 가장 낮은 논리 주소에 대응하는 그룹인 제1 논리 주소(LBA1), 제2 논리 주소(LBA2) 및 제3 논리 주소(LBA3)를 포함하는 그룹의 연속성이 생성되었음을 식별할 수 있다.
S3322 단계에서, 메모리 컨트롤러(120)는 제1 논리 주소(LBA1), 제2 논리 주소(LBA2) 및 제3 논리 주소(LBA3)를 포함하는 그룹의 데이터를 목표 존의 제1 물리 주소(PBA1)에 기입함으로써 마이그레이션(MIG)을 수행할 수 있다. S3323 단계에서, 메모리 컨트롤러(120)는 목표 존의 제1 물리 주소(PBA1)와 제1 논리 주소(LBA1), 제2 논리 주소(LBA2) 및 제3 논리 주소(LBA3)의 매핑 정보를 저장할 수 있다.
도 55d를 참조하면, S3331 단계에서, 메모리 컨트롤러(120)는 마이그레이션 된 제1 논리 주소(LBA1), 제2 논리 주소(LBA2) 및 제3 논리 주소(LBA3)의 데이터 및 매핑 정보를 무효화할 수 있다.
S3332 단계에서, 외부의 호스트 장치에 의해 제11 논리 주소(LBA11)에 대응하는 데이터의 기입이 요청될 수 있다. 메모리 컨트롤러(120)는 마이그레이션의 소스의 제10 물리 주소(PBA10)에 대응하는 저장 공간에 데이터를 기입하고, 그리고 제10 물리 주소(PBA10) 및 제11 논리 주소(LBA11)의 매핑 정보를 저장할 수 있다.
제11 논리 주소(LBA11)의 데이터가 기입되면, 메모리 컨트롤러(120)는 제10 논리 주소(LBA10), 제11 논리 주소(LBA11), 그리고 제12 논리 주소(LBA12)를 포함하는 그룹의 연속성을 식별할 수 있다. 그러나 연속성이 확보된 그룹은 제1 논리 주소(LBA1), 제2 논리 주소(LBA2) 및 제3 논리 주소(LBA3)를 포함하는 그룹의 다음 그룹(논리 주소의 순서에서)이 아니므로, 메모리 컨트롤러(120)는 마이그레이션(MIG)을 수행하지 않을 수 있다.
S3333 단계에서, 외부의 호스트 장치에 의해 제5 논리 주소(LBA5)에 대응하는 데이터의 기입이 요청될 수 있다. 메모리 컨트롤러(120)는 마이그레이션의 소스의 제11 물리 주소(PBA11)에 대응하는 저장 공간에 데이터를 기입하고, 그리고 제11 물리 주소(PBA11) 및 제5 논리 주소(LBA5)의 매핑 정보를 저장할 수 있다.
제5 논리 주소(LBA5)의 데이터가 기입되면, 메모리 컨트롤러(120)는 제4 논리 주소(LBA4), 제5 논리 주소(LBA5), 그리고 제6 논리 주소(LBA6)를 포함하는 그룹의 연속성을 식별할 수 있다. 연속성이 확보된 그룹은 제1 논리 주소(LBA1), 제2 논리 주소(LBA2) 및 제3 논리 주소(LBA3)를 포함하는 그룹의 다음 그룹이다.
S3334 단계에서, 메모리 컨트롤러(120)는 제4 논리 주소(LBA4), 제5 논리 주소(LBA5), 그리고 제6 논리 주소(LBA6)를 포함하는 그룹의 데이터를 목표 존의 제2 물리 주소(PBA2)에 기입함으로써 마이그레이션(MIG)을 수행할 수 있다. S3335 단계에서, 메모리 컨트롤러(120)는 목표 존의 제2 물리 주소(PBA2)와 제4 논리 주소(LBA4), 제5 논리 주소(LBA5), 그리고 제6 논리 주소(LBA6)의 매핑 정보를 저장할 수 있다.
상술된 바와 같이, 메모리 컨트롤러(120)는 마이그레이션의 소스에 랜덤한 논리 주소의 순서로 기입된 데이터를 마이그레이션(MIG) 함으로써, 목표 존에서 논리 주소 및 물리 주소의 순차성을 보장할 수 있다.
상술된 실시 예들에서, 마이그레이션의 소스에 대해 랜덤한 논리 주소들에 기반하여 데이터가 기입되는 예들이 설명되었다. 그러나 존의 특성에 기반하여, 순차적인 논리 주소들에 기반하여 마이그레이션의 소스에 데이터가 기입될 수 있다. 마이그레이션의 소스에 순차적인 논리 주소들에 기반하여 데이터가 기입되면, 메모리 컨트롤러(120)는 도 47a 내지 도 47c, 그리고 도 48a 내지 도 48c를 참조하여 설명된 바와 같이, 각 그룹의 논리 주소들의 연속성이 확보되는 대로 마이그레이션을 수행할 수 있다.
도 56은 스토리지 장치(100)가 공유 쓰기 부스터 버퍼(SWBB)에 데이터를 기입한 예를 보여준다. 도 1 및 도 56을 참조하면, 메모리 컨트롤러(120)는 공유 쓰기 부스터 버퍼(SWBB)에 제1 내지 제20의 쓰기 순서(WS)에 따라 데이터를 기입할 수 있다. 공유 쓰기 부스터 버퍼(SWBB)는 둘 이상의 논리 유닛들에 의해 공유되므로, 공유 쓰기 부스터 버퍼(SWBB)에 기입되는 데이터는 제5 존(Z5)의 데이터, 제6 존(Z6)의 데이터, 그리고 제7 존(Z7)의 데이터일 수 있다.
공유 쓰기 부스터 버퍼(SWBB)에 기입된 데이터의 유효성이 유효성 플래그(VF)로 표시된다. 'I'의 유효성 플래그(VF)는 대응하는 데이터라 무효 데이터임을 나타낸다. 'V'의 유효성 플래그(VF)는 대응하는 데이터가 유효 데이터임을 나타낸다.
상술된 바와 같이, 메모리 컨트롤러(120)는 공유 쓰기 부스터 버퍼(SWBB)에 둘 이상의 서로 다른 존들의 데이터를 기입할 수 있다. 공유 쓰기 부스터 버퍼(SWBB)에 기입된 데이터의 마이그레이션을 수행할 때, 메모리 컨트롤러(120)는 어느 존의 데이터를 먼저 마이그레이션할 지 다양한 실시 예들에 따라 선택할 수 있다. 예를 들어, 메모리 컨트롤러(120)는 공유 쓰기 부스터 버퍼(SWBB)에 저장된 데이터의 목표 존들(예를 들어, 목표 소거 유닛들)의 특색들에 기반하여 마이그레이션 할 데이터를 선택할 수 있다.
도 57은 스토리지 장치(100)가 마이그레이션을 수행할 존의 데이터를 선택하는 제1 예를 보여준다. 도 1, 도 56 및 도 57을 참조하면, S3410 단계에서, 메모리 컨트롤러(120)는 존을 선택할 수 있다. 예를 들어, 메모리 컨트롤러(120)는 공유 쓰기 부스터 버퍼(SWBB)에 저장된 데이터에 대응하는 존들 중 하나를 선택할 수 있다.
S3420 단계에서, 메모리 컨트롤러(120)는 무효 비율을 계산할 수 있다. 예를 들어, 메모리 컨트롤러(120)는 공유 쓰기 부스터 버퍼(SWBB)에 저장된 선택된 존의 유효 데이터와 무효 데이터의 비율을 계산할 수 있다.
S3430 단계에서, 메모리 컨트롤러(120)는 선택된 존이 마지막 존인지 판단할 수 있다. 예를 들어, 메모리 컨트롤러(120)는 선택된 존이 공유 쓰기 부스터 버퍼(SWBB)에 저장된 데이터에 대응하는 존들 중 마지막 존인지 판단할 수 있다. 선택된 존이 마지막 존이 아니면, 메모리 컨트롤러(120)는 S3410 단계에서 다음 존을 선택하고, 그리고 S3420 단계 및 S3430 단계를 다시 수행할 수 있다.
선택된 존이 마지막 존이면, S3440 단계에서, 메모리 컨트롤러(120)는 가장 높은 무효화 비율을 갖는 존을 선택할 수 있다. 예를 들어, 메모리 컨트롤러(120)는 가장 높은 무효화 비율을 갖는 존(또는 존의 소거 유닛들)의 데이터를 마이그레이션의 대상으로 선택할 수 있다.
예시적으로, 도 56에 도시된 바와 같이, 제5 존(Z5)의 데이터는 4개의 무효 데이터 및 5개의 유효 데이터를 가질 수 있다. 제5 존(Z5)의 무효화 비율은 50%일 수 있다. 제6 존(Z6)의 데이터는 2개의 무효 데이터 및 6개의 유효 데이터를 가질 수 있다. 제6 존(Z6)의 무효화 비율은 25%일 수 있다. 제7 존(Z7)의 데이터는 0개의 무효 데이터 및 4개의 유효 데이터를 가질 수 있다. 제7 존(Z7)의 무효화 비율은 0%일 수 있다.
마이그레이션이 트리거 되면, 메모리 컨트롤러(120)는 제5 존(Z5)의 데이터를 마이그레이션의 대상으로 선택할 수 있다. 제5 존(Z5)의 데이터가 제6 존(Z6)의 데이터 및 제7 존(Z7)의 데이터보다 먼저 마이그레이션 되면, 공유 쓰기 부스터 버퍼(SWBB)의 무효 데이터의 비율이 더 크게 증가한다. 따라서, 공유 쓰기 부스터 버퍼(SWBB)의 소거 유닛이 더 빠르게 무효화되고, 소거 후에 재사용될 수 있다.
도 58은 스토리지 장치(100)가 마이그레이션을 수행할 존의 데이터를 선택하는 제2 예를 보여준다. 도 1, 도 56 및 도 58을 참조하면, S3510 단계에서, 메모리 컨트롤러(120)는 존을 선택할 수 있다. 예를 들어, 메모리 컨트롤러(120)는 공유 쓰기 부스터 버퍼(SWBB)에 저장된 데이터에 대응하는 존들 중 하나를 선택할 수 있다.
S3520 단계에서, 메모리 컨트롤러(120)는 쓰기 속도를 계산할 수 있다. 예를 들어, 메모리 컨트롤러(120)는 공유 쓰기 부스터 버퍼(SWBB)에 저장된 선택된 존의 데이터가 기입되는 속도를 계산할 수 있다.
예시적으로, 메모리 컨트롤러(120)는 선택된 존의 데이터가 마지막으로 기입된 마지막 쓰기 순서와 선택된 존의 데이터가 처음으로 기입된 시작 쓰기 순서의 차이를 계산할 수 있다. 메모리 컨트롤러(120)는 전체 쓰기 횟수를 계산된 차이로 나눔으로써, 선택된 존의 쓰기 속도를 계산할 수 있다.
S3530 단계에서, 메모리 컨트롤러(120)는 선택된 존이 마지막 존인지 판단할 수 있다. 예를 들어, 메모리 컨트롤러(120)는 선택된 존이 공유 쓰기 부스터 버퍼(SWBB)에 저장된 데이터에 대응하는 존들 중 마지막 존인지 판단할 수 있다. 선택된 존이 마지막 존이 아니면, 메모리 컨트롤러(120)는 S3510 단계에서 다음 존을 선택하고, 그리고 S3520 단계 및 S3530 단계를 다시 수행할 수 있다.
선택된 존이 마지막 존이면, S3540 단계에서, 메모리 컨트롤러(120)는 가장 빠른 쓰기 속도를 갖는 존을 선택할 수 있다. 예를 들어, 메모리 컨트롤러(120)는 가장 빠른 쓰기 속도를 갖는 존(또는 존의 소거 유닛들)의 데이터를 마이그레이션의 대상으로 선택할 수 있다.
예시적으로, 도 56에 도시된 바와 같이, 제5 존(Z5)의 데이터의 마지막 쓰기 순서는 20이고, 그리고 시작 쓰기 순서는 1이다. 메모리 컨트롤러(120)는 제5 존(Z5)의 차이를 19로 계산할 수 있다. 메모리 컨트롤러(120)는 제5 존(Z5)의 쓰기 속도를 '20/19'으로 계산할 수 있다. 제6 존(Z6)의 데이터의 마지막 쓰기 순서는 19이고, 그리고 시작 쓰기 순서는 4이다. 메모리 컨트롤러(120)는 제5 존(Z5)의 차이를 15로 계산할 수 있다. 메모리 컨트롤러(120)는 제5 존(Z5)의 쓰기 속도를 '20/15'으로 계산할 수 있다. 제7 존(Z7)의 데이터의 마지막 쓰기 순서는 17이고, 그리고 시작 쓰기 순서는 13이다. 메모리 컨트롤러(120)는 제7 존(Z7)의 차이를 4로 계산할 수 있다. 메모리 컨트롤러(120)는 제7 존(Z7)의 쓰기 속도를 '20/4'으로 계산할 수 있다.
둘 이상의 존들에 대한 플러시 요청 또는 파워 오프 노티피케이션이 수신된 때에, 메모리 컨트롤러(120)는 둘 이상의 존들의 데이터를 예비 영역(RA)(도 3a 내지 도 3e 참조)의 소거 유닛에 함께 기입할 수 있다. 예비 영역의 소거 유닛으로부터 마이그레이션 할 존(또는 존의 소거 유닛들)의 데이터를 선택하는 방법 또한 도 56 내지 도 58을 참조하여 설명된 바와 같이 수행될 수 있다.
도 59는 스토리지 장치(100)가 마이그레이션을 수행하는 방법의 제2 예를 보여준다. 도 1 및 도 59를 참조하면, S3610 단계에서, 메모리 컨트롤러(120)는 외부의 호스트 장치로부터 마이그레이션 요청을 수신할 수 있다. 예를 들어, 마이그레이션 요청은 UFS에서 정의된 커맨드 UPIU 또는 쿼리 리퀘스트 UPIU로 수신될 수 있다.
S3620 단계에서, 메모리 컨트롤러(120)는 하이버네이트(Hibernate) 상태(예를 들어, 절전 상태)인지 판단할 수 있다. 하이버네이트 상태이면, S3640 단계에서 메모리 컨트롤러(120)는 마이그레이션을 트리거할 수 있다.
하이버네이트 상태가 아니면, S3630 단계에서, 메모리 컨트롤러(120)는 스토리지 장치(100)가 유휴 상태인지 판단할 수 있다. 유휴 상태는 스토리지 장치에 실행을 위하여 대기중인 요청들이 없는 상태일 수 있다. 스토리지 장치(100)가 유휴 상태이면, S3640 단계에서 메모리 컨트롤러(120)는 마이그레이션을 트리거할 수 있다. 유휴 상태가 아니면, 메모리 컨트롤러(120)는 마이그레이션을 트리거하지 않을 수 있다.
하이버네이트 상태 또는 유휴 상태에서 트리거된 마이그레이션은 하이버네이트 상태 또는 유휴 상태의 종료와 함께 중지될 수 있다. 메모리 컨트롤러(120)는 하이버네이트 상태 또는 유휴 상태로 다시 진입하는 것에 응답하여, 중지된 마이그레이션을 재개할 수 있다.
S3650 단계에서, 메모리 컨트롤러(120)는 마이그레이션이 완료되었는지 판단할 수 있다. 마이그레이션이 완료되지 않았으면, 메모리 컨트롤러(120)는 S3620 단계부터 다시 수행할 수 있다. 마이그레이션이 완료되었으면, S3660 단계에서, 메모리 컨트롤러(120)는 마이그레이션이 완료되었음을 외부의 호스트 장치에 보고할 수 있다. 예를 들어, 메모리 컨트롤러(120)는 마이그레이션 요청 또는 외부의 호스트 장치로부터 수신되는 임의의 UPIU에 응답하여 외부의 호스트 장치로 전송되는 응답 UPIU에 마이그레이션이 완료되었음을 나타내는 정보를 추가할 수 있다.
상술된 바와 같이, 스토리지 장치(100)는 외부의 호스트 장치의 요청에 응답하여, 외부의 호스트 장치에 의해 인식되지 않는 배경 동작으로서 마이그레이션을 수행하도록 구현될 수 있다.
도 60은 스토리지 장치(100)가 마이그레이션을 수행하는 방법의 제3 예를 보여준다. 도 1 및 도 60을 참조하면, S3710 단계에서, 메모리 컨트롤러(120)는 외부의 호스트 장치로부터 마이그레이션 요청을 수신할 수 있다. 마이그레이션 요청은 UFS에서 정의된 커맨드 UPIU 또는 쿼리 리퀘스트 UPIU로 수신될 수 있다.
S3720 단계에서, 메모리 컨트롤러(120)는 마이그레이션을 수행할 수 있다. S3730 단계에서, 메모리 컨트롤러(120)는 마이그레이션이 완료되었는지 판단할 수 있다. 마이그레이션이 완료되었으면, S3740 단계에서, 메모리 컨트롤러(120)는 마이그레이션이 완료되었음을 외부의 호스트 장치에 보고할 수 있다. 예를 들어, 메모리 컨트롤러(120)는 마이그레이션 요청에 대한 응답 UPIU에 마이그레이션이 완료되었음을 나타내는 정보를 포함시킬 수 있다.
목표 존으로 마이그레이션할 데이터의 논리 주소들의 연속성이 만족되지 않으면, 마이그레이션이 완료되지 않을 수 있다. 마이그레이션이 완료되지 않았으면, S3750 단계에서, 메모리 컨트롤러(120)는 마이그레이션이 완료되지 않았음을 외부의 호스트 장치에 보고할 수 있다.
예를 들어, 메모리 컨트롤러(120)는 마이그레이션 요청에 대한 응답 UPIU에 마이그레이션이 완료되지 않았음을 나타내는 정보를 포함시킬 수 있다. 메모리 컨트롤러(120)는 마이그레이션이 수행되지 않은 유효 데이터의 논리 어드레스들을 응답 UPIU에 포함시킬 수 있다.
예시적으로, 스토리지 장치(100)는 도 53, 도 59 및 도 60의 동작 방법들(예를 들어, 마이그레이션 방법들) 중 하나를 수행하도록 구현될 수 있다. 도 59 및 도 60을 참조하여 설명된 바와 같이 스토리지 장치(100)가 호스트의 마이그레이션 요청에 응답하여 마이레이션을 수행하도록 구현되면, 스토리지 장치(100)는 호스트의 마이그레이션 요청 없이는 자체적인 마이그레이션(예를 들어, 도 53을 참조하여 설명된 바와 같이)을 수행하지 않을 수 있다.
스토리지 장치(100)는 도 53, 도 59 및 도 60의 동작 방법들(예를 들어, 마이그레이션 방법들) 중 적어도 두 개를 수행하도록 구현될 수 있다. 외부의 호스트 장치의 쿼리 리퀘스트 UPIU에 의해, 스토리지 장치(100)는 둘 이상의 방법들 중 하나를 수행하도록 설정될 수 있다.
도 61은 스토리지 장치(100)가 프리페치를 수행하는 방법의 예를 보여준다. 도 1 및 도 61을 참조하면, S3810 단계에서, 메모리 컨트롤러(120)는 외부의 호스트 장치로부터 순차적인 읽기들이 요청되는지 판단할 수 있다. 예를 들어, 외부의 호스트 장치에 의해 순차적인 논리 주소들에 대응하는 읽기들이 요청된 횟수가 문턱값 이상이면, 메모리 컨트롤러(120)는 외부의 호스트 장치에 의해 순차적인 읽기들이 요청된 것으로 판단할 수 있다.
외부의 호스트 장치에 의해 순차적인 읽기들이 요청되지 않으면, 메모리 컨트롤러(120)는 프로세스를 종료할 수 있다. 외부의 호스트 장치에 의해 순차적인 읽기들이 요청되면, S3820 단계에서, 메모리 컨트롤러(120)는 프리페치(prefetch)를 시작할 수 있다. 예를 들어, 프리페치는 외부의 호스트 장치의 요청이 없어도, 메모리 컨트롤러(120)가 순차적인 읽기들의 논리 주소들의 순차적인 다음 논리 주소들의 데이터를 불휘발성 메모리 장치(110)로부터 미리 읽는 것을 포함할 수 있다.
S3830 단계에서, 메모리 컨트롤러(120)는 프리페치가 대상에 존 경계에 도달했는지 판단할 수 있다. 예를 들어, 프리페치의 논리 주소들의 범위에 존 경계가 포함되면, 프리페치를 수행하는 도중에 존 경계에 도달할 수 있다. 프리페치의 논리 주소들의 범위에 존 경계가 포함되지 않으면, 프리페치를 수행하는 도중에 존 경계에 도달하지 않을 수 있다. 프리페치가 존 경계에 도달하지 않으면, 메모리 컨트롤러(120)는 존 경계와 관계없이 프리페치를 완료할 수 있다.
프리페치가 존 경계에 도달하면, S3840 단계에서, 메모리 컨트롤러(120)는 다음 존이 다른 특색을 갖는지 판단할 수 있다. 예를 들어, 메모리 컨트롤러(120)는 순차적인 읽기들이 수행된 존의 특색들과 다음 존의 특색들을 비교할 수 있다. 순차적인 읽기들이 수행된 존의 특색들과 다음 존의 특색들이 같으면, S3850 단계에서, 메모리 컨트롤러(120)는 존 경계를 넘어 다음 존까지 프리페치를 수행할 수 있다.
순차적인 읽기들이 수행된 존의 특색들과 다음 존의 특색들이 다르면, 메모리 컨트롤러(120)는 다음 존에 대한 프리페치를 수행하지 않을 수 있다. 즉, 메모리 컨트롤러(120)는 프리페치의 논리 주소들의 범위 중 순차적인 읽기들이 수행된 존에 속하는 일부 데이터에 대해서만 프리페치를 수행할 수 있다.
예시적으로, 존의 특색은 존의 셀 타입을 포함할 수 있다. 순차적인 읽기들이 수행된 존의 셀 타입과 다음 존의 셀 타입이 같으면, 메모리 컨트롤러(120)는 존 경계에서 존을 넘어선 프리페치를 수행할 수 있다.
예시적으로, 존의 특색은 존의 온도를 포함할 수 있다. 메모리 컨트롤러(120)는 각 존의 갱신 빈도에 따라 각 존에 온도를 부여할 수 있다. 순차적인 읽기들이 수행된 존의 온도와 다음 존의 온도가 같으면, 메모리 컨트롤러(120)는 존 경계에서 존을 넘어선 프리페치를 수행할 수 있다.
예시적으로, 존의 특색은 존에 기입되는 데이터의 스트림 식별자를 포함할 수 있다. 메모리 컨트롤러(120)는 외부의 호스트 장치로부터 쓰기 데이터와 함께 스트림 식별자를 수신할 수 있다. 순차적인 읽기들이 수행된 존에 기입된 데이터의 스트림 식별자와 다음 존에 기입된 데이터의 스트림 식별자가 같으면, 메모리 컨트롤러(120)는 존 경계에서 존을 넘어선 프리페치를 수행할 수 있다.
예시적으로, 메모리 컨트롤러(120)는 존의 특색으로서 셀 타입, 온도, 그리고 스트림 식별자 중 적어도 두 개를 조합할 수 있다. 메모리 컨트롤러(120)는 외부의 호스트 장치로부터 수신되는 요청에 따라, 존의 특색으로서 셀 타입, 온도, 그리고 스트림 식별자 중 어느 것(들)을 사용할 지를 설정할 수 있다.
예시적으로, 외부의 호스트 장치로부터 프리페치된 데이터의 논리 주소들과 무관한 읽기 요청들이 문턱값 이상 수신되는 것에 응답하여, 메모리 컨트롤러(120)는 프리페치에 의해 내부 버퍼(123)에 저장된 데이터를 폐기할 수 있다.
도 62a 및 도 62b는 존을 넘어선 프리페치가 수행되는 예를 보여준다. 도 1 및 도 62a를 참조하면, 메모리 컨트롤러(120)는 제5 존(Z5)에서 순차적인 읽기들을 수행할 수 있다. 읽혀진 데이터는 내부 버퍼(123)의 읽기 버퍼(RB)에 저장될 수 있다. 제5 존(Z5)의 특색과 제6 존(Z6)의 특색이 같으면, 순차적인 읽기들(SR)에 응답하여, 메모리 컨트롤러(120)는 존을 넘어선 프리페치(PR)를 제5 존(Z5) 및 제6 존(Z6)에서 수행할 수 있다.
도 1 및 도 62b를 참조하면, 제5 존(Z5)과 제6 존(Z6)의 사이에 갭 존(GZ)이 존재할 수 있다. 즉, 제5 존(Z5)의 다음 존은 갭 존(GZ)일 수 있다. 다음 존이 갭 존(GZ)일 때, 메모리 컨트롤러(120)는 갭 존(GZ)에 연속한 논리 주소들에 대응하는 제6 존(Z6)의 특색들과 제5 존(Z5)의 특색에 따라 선택적으로 프리페치(PR)를 수행할 수 있다. 제5 존(Z5)의 특색과 제6 존(Z6)의 특색이 같으면, 순차적인 읽기들(SR)에 응답하여, 메모리 컨트롤러(120)는 갭 존(GZ)을 넘어선 프리페치(PR)를 제5 존(Z5) 및 제6 존(Z6)에서 수행할 수 있다.
도 63은 스토리지 장치(100)가 존을 넘어선 프리페치의 설정을 조절하는 예를 보여준다. 도 1 및 도 63을 참조하면, S3910 단계에서, 메모리 컨트롤러(120)는 외부의 호스트 장치로부터 셋 요청을 수신할 수 있다. 셋 요청은 커맨드 UPIU 또는 쿼리 리퀘스트 UPIU를 통해 수신될 수 있다.
셋 요청은 존을 넘어선 프리페치를 수행하기 위한 파라미터들의 정보를 포함할 수 있다. 예시적으로, 셋 요청은 존을 넘어선 프리페치를 수행할 지, 갭 존을 넘어선 프리페치를 수행할 지, 각 존의 특색으로서 어떠한 파라미터를 사용할 지에 대한 정보를 포함할 수 있다.
S3920 단계에서, 메모리 컨트롤러(120)는 셋 요청에 응답하여 존을 넘어선 프리페치의 파라미터를 조절할 수 있다. S3930 단계에서, 메모리 컨트롤러(120)는 외부의 호스트 장치로 응답을 전송할 수 있다. 응답은 존을 넘어선 프리페치의 파라미터들이 성공적으로 조절되었음을 알리는 정보를 포함할 수 있다. 응답은 응답 UPIU 또는 쿼리 응답 UPIU를 통해 전송될 수 있다.
도 64는 스토리지 장치(100)가 가비지 컬렉션을 수행하는 방법의 제1 예를 보여준다. 예시적으로, 존 단위의 가비지 컬렉션은 외부의 호스트 장치의 제어에 따라 수행될 수 있다.
도 1 및 도 64를 참조하면, S4010 단계에서, 메모리 컨트롤러(120)는 외부의 호스트 장치로부터 읽기 요청(RD)을 수신할 수 있다. 읽기 요청은 커맨드 UPIU를 통해 수신될 수 있다. S4020 단계에서, 메모리 컨트롤러(120)는 불휘발성 메모리 장치(110)로부터 데이터를 읽고, 그리고 읽혀진 데이터를 외부의 호스트 장치로 출력할 수 있다. 데이터는 데이터 인(Data In) UPIU를 통해 출력될 수 있다. S4030 단계에서, 메모리 컨트롤러(120)는 외부의 호스트 장치로 응답을 전송할 수 있다. 응답은 응답 UPIU를 통해 전송될 수 있다. S4010 단계, S4020 단계 및 S4030 단계는 가비지 컬렉션을 위한 읽기 단계일 수 있다.
S4040 단계에서, 메모리 컨트롤러(120)는 외부의 호스트 장치로부터 쓰기 요청(WR)을 수신할 수 있다. 쓰기 요청은 커맨드 UPIU를 통해 수신될 수 있다. S4050 단계에서, 메모리 컨트롤러(120)는 외부의 호스트 장치로부터 데이터를 수신할 수 있다. 데이터는 데이터 아웃 UPIU를 통해 수신될 수 있다. S4040 단계와 S4050 단계의 사이에, 메모리 컨트롤러(120)가 외부의 호스트 장치로 레디 투 트랜스퍼 UPIU를 전송하는 단계가 추가될 수 있다. S4060 단계에서, 메모리 컨트롤러(120)는 외부의 호스트 장치로 응답을 전송할 수 있다. 응답은 응답 UPIU를 통해 전송될 수 있다. S4040 단계, S4050 단계 및 S4060 단계는 가비지 컬렉션을 위한 읽기 단계일 수 있다.
가비지 컬렉션을 수행함으로써 특정한 존의 유효 데이터가 모두 옮겨지면, 메모리 컨트롤러(120)는 외부의 호스트 장치로부터 수신되는 리셋 요청에 따라 특정한 존을 리셋할 수 있다. 리셋 요청은 커맨드 UPIU 또는 쿼리 리퀘스트 UPIU를 통해 수신될 수 있다.
도 65는 스토리지 장치(100)가 가비지 컬렉션을 수행하는 방법의 제2 예를 보여준다. 예시적으로, 존 단위의 가비지 컬렉션은 외부의 호스트 장치의 제어에 따라 수행될 수 있다.
도 1 및 도 65를 참조하면, S4110 단계에서, 메모리 컨트롤러(120)는 외부의 호스트 장치로부터 존 카피(ZCC) 요청을 수신할 수 있다. 존 카피(ZCC) 요청은 커맨드 UPIU 또는 쿼리 리퀘스트 UPIU를 통해 수신될 수 있다. 존 카피(ZCC) 요청은 카피를 수행할 목표 존의 정보를 포함할 수 있다. 예를 들어, 존 카피(ZCC) 요청은 쓰기 요청과 유사하게 구성될 수 있다.
S4120 단계에서, 메모리 컨트롤러(120)는 외부의 호스트 장치로부터 소스 정보를 수신할 수 있다. 소스 정보는 카피를 수행할 소스 존의 정보를 포함할 수 있다. 예를 들어, 소스 정보는 데이터 아웃 UPIU와 유사하게 구성될 수 있다.
S4130 단계에서, 메모리 컨트롤러(120)는 존 카피 동작을 수행할 수 있다. 예를 들어, 메모리 컨트롤러(120)는 소스 정보에 포함된 논리 주소들에 대응하는 데이터를 소스 존으로부터 읽고, 그리고 읽혀진 데이터를 목표 존에 순차적으로 기입할 수 있다.
존 카피 동작이 완료되면, S4140 단계에서, 메모리 컨트롤러(120)는 외부의 호스트 장치로 응답을 전송할 수 있다. 응답은 응답 UPIU를 통해 전송될 수 있다.
읽기 요청(RD) 및 쓰기 요청(WR)을 사용하는 도 64의 방법과 비교하면, 도 65의 방법은 존 카피(ZCC) 요청을 이용하여 더 빠르고 간결하게 데이터를 소스 존으로부터 목표 존으로 카피할 수 있다.
예시적으로, 존 카피(ZCC) 요청의 목표 존이 존재하지 않는 경우, 메모리 컨트롤러(120)는 목표 존을 자동적으로 오픈할 수 있다. 메모리 컨트롤러(120)가 목표 존을 자동적으로 오픈할 지의 여부는 외부의 호스트 장치의 요청에 따라 설정될 수 있다.
도 66a는 도 65의 존 카피(ZCC) 요청의 예시적인 포맷을 보여준다. 도 1 및 도 66a를 참조하면, 존 카피(ZCC) 요청의 커맨드 UPIU의 커맨드 디스크립터 블록(CDB)(Command Descriptor Block)이 도시된다.
커맨드 디스크립터 블록의 제0 바이트의 제0 내지 제7 비트들은 존 카피를 나타내는 'A1h'의 동작 코드를 포함할 수 있다. 커맨드 디스크립터 블록의 제1 바이트의 제0 비트 및 제2 비트는 예비일 수 있다. 커맨드 디스크립터 블록의 제1 바이트의 제1 비트는 FUN_NV(Force Unit Access Non-volatile)을 포함하고, 미래의 사용을 위해 예비된 것이며, '0b'의 값을 가질 수 있다.
커맨드 디스크립터 블록의 제1 바이트의 제3 비트는 FUA(Force Unit Access)의 활성화 여부를 포함할 수 있다. 커맨드 디스크립터 블록의 제1 바이트의 제4 비트는 DPO(Disable Page Out)를 포함하며, 리텐션 우선 순위에 대한 제어 정보를 가리킬 수 있다. 커맨드 디스크립터 블록의 제1 바이트의 제5 내지 제7 비트들은 쓰기 보호(WRPROTECT)를 포함하며, '000b'의 값을 가질 수 있다.
커맨드 디스크립터 블록의 제2 내지 제9 바이트들은 논리 블록 주소의 LSB 내지 MSB를 포함할 수 있다. 논리 블록 주소는 존 카피(ZCC)를 통해 데이터가 카피될 목표 존의 주소를 포함할 수 있다. 커맨드 디스크립터 블록의 제10 내지 제13 바이트들은 전송 길이의 LSB 내지 MSB를 포함할 수 있다. 전송 길이는 소스 정보에 포함되는 소스 존의 논리 주소들의 길이를 나타낼 수 있다.
커맨드 디스크립터 블록의 제14 바이트의 제0 내지 제4 비트들은 그룹 번호를 가리키며, 카피되는 데이터가 시스템 데이터 특성을 갖는지 또는 콘텍스트 식별자에 링크되는지를 나타낼 수 있다. 커맨드 디스크립터 블록의 제14 바이트의 제5 내지 제7 비트들은 예비일 수 있다. 커맨드 디스크립터 블록의 제15 바이트는 '00h'의 값을 갖는 제어를 포함하며, 무시될 수 있다.
도 66b는 도 65의 소스 정보가 수신되는 포맷의 예를 보여준다. 도 1 및 도 66b를 참조하면, 소스 정보는 데이터 아웃 UPIU를 통해 수신될 수 있다. 소스 정보의 데이터 아웃 UPIU는 제0 내지 제31 필드들을 포함할 수 있다.
소스 정보의 제0 필드는 트랜잭션 타입을 포함하며, 'xx000010b'의 값을 가질 수 있다. 소스 정보의 제1 필드는 데이터 재전송과 연관된 플래그를 포함할 수 있다. 소스 정보의 제2 필드는 논리 유닛 번호(LUN)를 포함할 수 있다. 소스 정보의 제3 필드는 태스크 태그를 포함하며, 서로 연관된 태스크들을 식별하는데 사용될 수 있다.
소스 정보의 제4 필드의 일부는 태스크를 시작한 개시자(Initiator) ID(IID)를 포함하고, 그리고 나머지 일부는 예비일 수 있다. 소스 정보의 제5 필드 및 제6 필드는 예비일 수 있다. 소스 정보의 제7 필드의 일부는 IID의 MSB를 EXT_IID로 저장하고, 나머지 일부는 예비일 수 있다. 소스 정보의 제8 필드는 전체 EHS(Extra Header Segment) 길이를 포함하며, 예를 들어 '00h'의 값을 가질 수 있다. 소스 정보의 제9 필드는 예비일 수 있다.
소스 정보의 제10 필드는 데이터 부분으로 포함되는 소스 존의 논리 주소들의 길이의 MSB 부분을 포함하고, 그리고 소스 정보의 제11 필드는 데이터 부분으로 포함되는 소스 존의 논리 주소들의 길이의 LSB 부분을 포함할 수 있다.
소스 정보의 제12 내지 제15 필드들은 데이터 버퍼 오프셋의 LSB 내지 MSB를 포함하며, 존 카피(ZCC)의 대상인 전체 논리 주소들 중에서 해당 소스 정보의 오프셋을 가리킬 수 있다. 즉, 메모리 컨트롤러(120)는 외부의 호스트 장치로부터 하나의 존 카피(ZCC) 요청에 후속하여 하나 또는 그보다 많은 소스 정보들을 수신할 수 있다.
소스 정보의 제16 내지 제19 필드들은 데이터 전송 카운트의 LSB 내지 MSB를 포함하며, 해당 소스 정보에 데이터 부분으로 포함된 논리 주소들의 크기를 가리킬 수 있다. 소스 정보의 제20 내지 제31 필드들은 예비일 수 있다. 소스 정보의 제20 내지 제31 필드들의 다음에, 헤더 E2ECRC(End to End CRC)를 포함하며, 이는 트랜잭션 타입의 제7 비트인 HD 비트가 0이면 생략될 수 있다.
헤더 E2ECRC의 다음에, 소스 정보는 데이터 부분으로서 소스 존으로부터 카피할 데이터의 논리 주소들의 정보를 포함할 수 있다. 예를 들어, 소스 정보는 논리 주소들의 정보를 제k 내지 제k+길이(length)-1 필드들에 논리 주소들의 정보를 포함할 수 있다. 길이(length)는 제10 및 제11 필드들의 데이터 세그먼트 길이에 대응할 수 있다.
제k 내지 제k+3 필드들에서, 소스 정보는 논리 주소(LBA) 엔트리들의 수(NLBA)를 포함할 수 있다. 논리 주소(LBA) 엔트리들의 수(NLBA)는 그 다음부터 나열되는 논리 주소(LBA) 엔트리들의 수를 나타낼 수 있다.
이후에, 소스 논리 주소가 하나의 논리 주소를 가리킬 때, 소스 정보는 8개의 필드들에서 소스 논리 주소(LBA)를 포함할 수 있다. 예를 들어, 소스 정보는 제k+4 내지 제k+7 필드들에서, 제1 소스 논리 주소(LBA[1])의 [63:32] 비트들을 포함할 수 있다. 소스 정보는 제k+8 내지 제k+11 필드들에서 제1 소스 논리 주소(LBA[1])의 [31:0] 비트들 포함할 수 있다. 후속하는 4개의 필드들에서 소스 정보는 앞선 8개의 필드들에 포함된 논리 주소로부터 시작하여 카피될 데이터의 길이를 가리키는 제1 전송 길이를 포함할 수 있다.
상술된 바와 같이, 소스 정보는 8개의 필드들에서 논리 주소를 포함하고, 그리고 후속하는 4개의 필드들에서 논리 주소에 후속하여 카피될 대상을 식별하는 전송 길이를 포함할 수 있다. 예를 들어, 제k+길이-12 내지 제k+길이-9 필드들에서, 소스 정보는 제NLBA 소스 논리 주소(LBA[NLBA])의 [63:32]비트들을 포함할 수 있다. 제k+길이-8 내지 제k+길이-5 필드들에서, 소스 정보는 제NLBA 소스 논리 주소(LBA[NLBA])의 [31:0]비트들을 포함할 수 있다. 제k+길이-4 내지 제k+길이-1 필드들에서, 소스 정보는 제NLBA 소스 논리 주소(LBA[NLBA])에 대응하는 전송 길이를 포함할 수 있다.
데이터 부분으로서 소스 존으로부터 카피할 데이터의 논리 주소들의 정보를 포함한 후에, 소스 정보는 데이터 부분의 E2ECRC를 포함하며, 이는 트랜잭션 타입의 제6 비트인 DD 비트가 0이면 생략될 수 있다.
예시적으로, 카피할 할 데이터의 이전 논리 주소 및 이후 논리 주소에 카피할 데이터가 없을 때, 즉 카피할 데이터가 고립 상태일 때, 소스 정보는 데이터 부분에서 전송 길이 없이 논리 주소들을 포함할 수 있다. 즉, 소스 정보가 8개의 필드들에서 논리 주소를 포함하고, 그리고 후속하는 8개의 필드들에서 소스 정보가 전송 길이 없이 논리 주소를 포함할 때, 앞선 8개의 논리 주소는 해당 논리 주소의 데이터만 카피되어야 함을 나타낼 수 있다.
예시적으로, 논리 주소 엔트리는 8개의 필드들 또는 12개의 필드들을 포함할 수 있다. 8개의 필드들을 포함하는 논리 주소 엔트리는 하나의 논리 주소에 대응하는 데이터만 카피됨을 나타낼 수 있다. 12개의 논리 주소 엔트리는 하나의 논리 주소 및 그에 연속한 적어도 하나의 논리 주소에 대응하는 데이터가 카피됨을 나타낼 수 있다.
다른 예로서, 논리 주소 엔트리는 12개의 필드들을 포함할 수 있다. 전송 길이가 1인 논리 주소 엔트리는 하나의 논리 주소에 대응하는 데이터만 카피됨을 나타낼 수 있다. 전송 길이가 1보다 큰 논리 주소 엔트리는 논리 주소 및 그에 연속한 적어도 하나의 논리 주소에 대응하는 데이터가 카피됨을 나타낼 수 있다.
도 67은 도 66a의 존 카피(ZCC) 요청 및 도 66b의 소스 정보에 기반하여 스토리지 장치(100)가 존 카피(ZCC)를 수행하는 예를 보여준다. 도 1 및 도 67을 참조하면, S4210 단계에서, 메모리 컨트롤러(120)는 논리 주소(LBA) 엔트리를 선택할 수 있다. 예를 들어, 메모리 컨트롤러(120)는 소스 정보의 데이터 부분의 첫 번째 논리 주소(LBA) 엔트리를 선택할 수 있다.
S4220 단계에서, 메모리 컨트롤러(120)는 전송 길이를 판단할 수 있다. 예를 들어, 전송 길이가 존재하지 않거나 1이면, 메모리 컨트롤러(120)는 전송 길이가 존재하지 않음을 판단할 수 있다. 전송 길이가 존재하지 않으면, S4230 단계에서, 메모리 컨트롤러(120)는 논리 주소(LBA) 엔트리에 기반하여 불휘발성 메모리 장치(110)의 소스 존으로부터 데이터를 읽을 수 있다. S4240 단계에서, 메모리 컨트롤러(120)는 읽혀진 데이터를 불휘발성 메모리 장치(110)의 목표 존에 기입할 수 있다. 이후에, 메모리 컨트롤러(120)는 S4270 단계를 수행할 수 있다.
전송 길이가 존재하거나 1보다 크면, 메모리 컨트롤러(120)는 전송 길이가 존재함을 판단할 수 있다. 전송 길이가 존재하면, S4250 단계에서, 메모리 컨트롤러(120)는 논리 주소(LBA) 엔트리 및 전송 길이에 기반하여 불휘발성 메모리 장치(110)의 소스 존으로부터 데이터를 읽을 수 있다. 예를 들어, 메모리 컨트롤러(120)는 둘 이상의 논리 주소들에 대응하는 데이터를 읽을 수 있다. S4260 단계에서, 메모리 컨트롤러(120)는 읽혀진 데이터를 불휘발성 메모리 장치(110)의 목표 존에 순차적으로 기입할 수 있다. 이후에, 메모리 컨트롤러(120)는 S4270 단계를 수행할 수 있다.
s4270 단계에서, 메모리 컨트롤러(120)는 소스 및 목표 존들의 페이지 맵 테이블들(PMs)을 갱신할 수 있다. 예를 들어, 메모리 컨트롤러(120)는 목표 존으로 카피된 데이터의 페이지 맵 테이블을 생성하고, 그리고 소스 존으로부터 카피된 데이터의 페이지 맵 테이블을 무효화할 수 있다. 메모리 컨트롤러(120)는 소스 존으로부터 카피된 데이터를 무효 데이터로 식별할 수 있다.
S4280 단계에서, 메모리 컨트롤러(120)는 선택된 논리 주소(LBA) 엔트리가 마지막 논리 주소(LBA) 엔트리인지 판단할 수 있다. 예를 들어, 메모리 컨트롤러(120)는 소스 정보의 데이터 부분에 포함된 논리 주소(LBA) 엔트리들 중에서, 선택된 논리 주소(LBA) 엔트리가 마지막 논리 주소(LBA) 엔트리인지 판단할 수 있다. 선택된 논리 주소(LBA) 엔트리가 마지막 논리 주소(LBA) 엔트리이면, 존 카피(ZCC) 동작이 완료된 것이므로, 메모리 컨트롤러(120)는 프로세스를 종료할 수 있다. 선택된 논리 주소(LBA) 엔트리가 마지막 논리 주소(LBA) 엔트리가 아니면, 메모리 컨트롤러(120)는 S4210 단계에서 소스 정보에 포함된 데이터 부분의 다음 논리 주소(LBA) 엔트리를 선택할 수 있다. 이후에, 메모리 컨트롤러(120)는 S4220 단계 내지 S4280 단계를 다시 수행할 수 있다.
도 68a 내지 도 68d는 도 67의 방법에 따라 스토리지 장치(100)가 존 카피(ZCC)를 수행하는 예를 보여준다. 도 1 및 도 68a를 참조하면, 제5 존(Z5)은 '00000' 내지 '01000'의 논리 주소들(LBA)에 대응하고, 그리고 '0000' 내지 '1000'의 쓰기 포인터들(WP)에 대응할 수 있다. 제9 존(Z9)은 '01000' 내지 '10000'의 논리 주소들(LBA)에 대응하고, 그리고 '0000' 내지 '1000'의 쓰기 포인터들(WP)에 대응할 수 있다. 예시적으로, 제5 존(Z5)은 클로즈 존이며, 존 카피(ZCC)의 소스 존일 수 있다. 제9 존은 새로운 존이며, 존 카피(ZCC)의 목표 존일 수 있다.
존 카피(ZCC) 요청에 의해, 제5 존(Z5)의 '00000' 및 '00001'의 논리 주소들(LBA) 그리고 '0000' 및 '0001'의 쓰기 포인터들(WP)에 대응하는 데이터가 제9 존(Z9)의 '01000' 및 '01001'의 논리 주소들(LBA), 그리고 '0000' 및 '0001'의 쓰기 포인터들(WP)에 대응하는 영역으로 카피될 수 있다.
도 1 및 도 68b를 참조하면, 카피된 데이터는 제5 존(Z5)에서 사선으로 표시된 바와 같이 무효화될 수 있다.
도 1 및 도 68c를 참조하면, 존 카피(ZCC) 요청에 의해, 제5 존(Z5)의 '00100'의 논리 주소(LBA) 그리고 '0100'의 쓰기 포인터(WP)에 대응하는 데이터가 제9 존(Z9)의 '01011'의 논리 주소(LBA), 그리고 '0010'의 쓰기 포인터(WP)에 대응하는 영역으로 카피될 수 있다.
도 1 및 도 68d를 참조하면, 카피된 데이터 및 카피된 데이터 이전의(작은) 논리 주소들, 예를 들어 '00010', '00011' 및 '00100'의 논리 주소들을 갖는 데이터는 제5 존(Z5)에서 사선으로 표시된 바와 같이 무효화될 수 있다.
외부의 호스트 장치는 파일 시스템(예를 들어, F2FS(Flash Friendly File System))에 기반하여 스토리지 장치(100)에 기입된 데이터를 관리할 수 있다. 메모리 컨트롤러(120)는 맵 테이블(예를 들어, 존 맵 테이블 및 페이지 맵 테이블)에 기반하여 불휘발성 메모리 장치(110)에 기입된 데이터를 관리할 수 있다. 파일 시스템(예를 들어, F2FS(Flash Friendly File System))은 삭제된 데이터의 정보를 트림 동작(trim operation)을 통해 메모리 컨트롤러(120)와 공유할 수 있지만, 공유하는데 시간 차이가 발생할 수 있다.
존 카피(ZCC)에 의해 카피되지 않는 데이터는 외부의 호스트 장치에 의해 이미 삭제된 데이터로 여겨질 수 있다. 따라서, 메모리 컨트롤러(120)는 외부의 호스트 장치의 존 카피(ZCC) 요청에 의해 카피되지 않는 데이터를 무효 데이터로 식별할 수 있다.
도 69는 스토리지 장치(100)가 가비지 컬렉션을 수행하는 방법의 제3 예를 보여준다. 예시적으로, 존 단위의 가비지 컬렉션은 외부의 호스트 장치의 제어에 따라 수행될 수 있다.
도 1 및 도 69를 참조하면, S4310 단계에서, 메모리 컨트롤러(120)는 외부의 호스트 장치로부터 존 카피(ZCC) 요청을 수신할 수 있다. 존 카피(ZCC) 요청은 커맨드 UPIU 또는 쿼리 리퀘스트 UPIU를 통해 수신될 수 있다. 존 카피(ZCC) 요청은 카피를 수행할 목표 존의 정보 및 카피를 수행할 소스 존의 정보를 포함할 수 있다. 예를 들어, 존 카피(ZCC) 요청은 쓰기 요청과 유사하게 구성될 수 있다.
S4320 단계에서, 메모리 컨트롤러(120)는 존 카피 동작을 수행할 수 있다. 예를 들어, 메모리 컨트롤러(120)는 존 카피(ZCC) 요청에 포함된 소스 존의 논리 주소들에 대응하는 데이터를 소스 존으로부터 읽고, 그리고 읽혀진 데이터를 존 카피(ZCC) 요청에 포함된 논리 주소가 가리키는 목표 존에 순차적으로 기입할 수 있다.
존 카피 동작이 완료되면, S4330 단계에서, 메모리 컨트롤러(120)는 외부의 호스트 장치로 응답을 전송할 수 있다. 응답은 응답 UPIU를 통해 전송될 수 있다.
읽기 요청(RD) 및 쓰기 요청(WR)을 사용하는 도 64의 방법과 비교하면, 도 65의 방법은 존 카피(ZCC) 요청을 이용하여 더 빠르고 간결하게 데이터를 소스 존으로부터 목표 존으로 카피할 수 있다.
예시적으로, 존 카피(ZCC) 요청의 목표 존이 존재하지 않는 경우, 메모리 컨트롤러(120)는 목표 존을 자동적으로 오픈할 수 있다. 메모리 컨트롤러(120)가 목표 존을 자동적으로 오픈할 지의 여부는 외부의 호스트 장치의 요청에 따라 설정될 수 있다.
도 70a는 도 69의 존 카피(ZCC) 요청의 예시적인 포맷을 보여준다. 도 1 및 도 70a를 참조하면, 존 카피(ZCC) 요청의 커맨드 UPIU의 커맨드 디스크립터 블록(CDB)(Command Descriptor Block)이 도시된다. 커맨드 디스크립터 블록의 제0 바이트의 제0 내지 제7 비트들이 존 카피를 나타내는 '8aH'의 동작 코드를 포함하고, 그리고 전송 길이(Transfer Length)가 다른 용도로 사용되는 것을 제외하면, 도 70a의 커맨드 디스크립터 블록은 도 66a의 커맨드 디스크립터 블록과 동일할 수 있다. 따라서, 중복되는 설명은 생략된다.
도 70b는 도 70a의 전송 길이(transfer length)의 예를 보여준다. 예시적으로, 존 카피(ZCC) 요청의 전송 길이는 각각 제0 내지 제31 비트들을 포함하는 더블 워드들(Dword)을 포함할 수 있다. 예시적으로, 존 카피(ZCC) 요청의 커맨드 디스크립터 블록의 모든 필드들이 더블 워드들이거나, 커맨드 디스크립터 블록의 전송 길이의 필드들이 더블 워드들일 수 있다.
예시적으로, 전송 길이 필드의 제0 더블 워드는 서명을 포함할 수 있다. 서명은 '0x5950435A'의 값을 포함하며, 아스키(ASCII) 코드로 'ZCPY' 가리킬 수 있다.
예시적으로, 전송 길이 필드의 제1 더블 워드는 헤더 사이즈를 가리킬 수 있다. 헤더의 범위는 UFS 프로토콜 또는 불휘발성 스토리지 장치와 연관된 다른 표준 프로토콜에 의해 정해질 수 있다.
전송 길이 필드의 제2 더블 워드는 유효 비트맵 사이즈를 포함할 수 있다. 유효 비트맵 사이즈는 후술하는 비트맵에서 유효한 비트맵의 사이즈를 가리킬 수 있다.
전송 길이 필드의 제3 및 제4 더블 워드들은 소스 존의 식별자를 포함할 수 있다. 전송 길이 필드의 제5 및 제6 더블 워드들은 소스 존의 쓰기 포인터(WP)(또는 논리 주소(LBA))를 포함할 수 있다.
전송 길이 필드의 제7 및 제8 더블 워드들은 목표 존의 식별자를 포함할 수 있다. 전송 길이 필드의 제9 및 제10 더블 워드들은 소스 존의 쓰기 포인터(WP)(또는 논리 주소(LBA))를 포함할 수 있다.
전송 길이 필드의 제11 더블 워드의 제0 내지 제15 비트들은 존 카피(ZCC) 사용자 쓰기 비율을 포함하고, 그리고 제16 내지 제31 비트들은 존 카피(ZCC) 마이그레이션 비율을 포함할 수 있다. 메모리 컨트롤러(120)는 존 카피(ZCC) 사용자 쓰기 비율 및 존 카피(ZCC) 마이그레이션 비율에 의존하여, 외부의 호스트 장치로부터 수신되는 쓰기 요청들 및 존 카피(ZCC)에 의한 쓰기 요청들을 스로틀링throttling)할 수 있다.
전송 길이 필드의 제12 더블 워드는 유효 블록 카운트를 포함할 수 있다. 유효 블록 카운트는 유효 비트 맵이 포함하는 비트들 중 유효를 가리키는 비트들의 수를 나타낼 수 있다.
리퀘스트 블록 카운트는 존 카피(ZCC)의 소스 존의 논리 주소들 중에서 존 카피(ZCC)를 통해 카피하고자 하는 논리 주소들의 수를 나타낼 수 있다.
전송 길이 필드의 제14 및 제15 더블 워드들은 예비일 수 있다. 전송 길이 필드의 제5 더블 워드의 이후에, 존 카피(ZCC) 요청은 제16 내지 제15+유효 비트맵 사이즈에 대응하는 비트맵을 포함할 수 있다.
비트맵은 소스 존 쓰기 포인터(또는 논리 주소)로부터 시작하여, 카피해야할 논리 주소를 식별하는 정보를 포함할 수 있다. 예를 들어, 비트맵에서 제1 논리 값으로 마크된 데이터는 존 카피(ZCC)의 요청에 의해 목표 존으로 카피되고, 그리고 제2 논리 값으로 마크된 데이터는 존 카피(ZCC)의 요청에 의해 목표 존으로 카피되지 않을 수 있다.
도 71은 도 69의 존 카피(ZCC) 요청에 기반하여 스토리지 장치(100)가 존 카피를 수행하는 예를 보여준다. 도 1 및 도 71을 참조하면, S4410 단계에서, 메모리 컨트롤러(120)는 존 카피(ZCC) 요청의 비트맵에서 첫 번째 비트를 선택할 수 있다.
S4420 단계에서, 메모리 컨트롤러(120)는 비트맵의 선택된 비트가 유효인지 판단할 수 있다. 비트맵의 선택된 비트가 유효 비트가 아니면, 메모리 컨트롤러(120)는 S4460 단계를 수행할 수 있다.
비트맵의 선택된 비트가 유효 비트이면, S4430 단계에서, 메모리 컨트롤러(120)는 블록 카운트 및 논리 주소(LBA)에 기반하여 소스 존으로부터 데이터를 읽을 수 있다. 예를 들어, 블록 카운트 및 논리 주소(LBA)에 기반하여, 메모리 컨트롤러(120)는 목표 존의 셀 타입 또는 쓰기 유닛에 대응하는 데이터를 소스 존으로부터 읽을 수 있다.
S4440 단계에서, 메모리 컨트롤러(120)는 읽혀진 데이터를 목표 존에 기입할 수 있다. S4450 단계에서, 메모리 컨트롤러(120)는 소스 및 목표 존들의 페이지 맵 테이블들(PMs)을 갱신할 수 있다. 이후에, 메모리 컨트롤러(120)는 S4460 단계를 수행할 수 있다.
S4460 단계에서, 메모리 컨트롤러(120)는 블록 카운트를 증가시킬 수 있다. S4470 단계에서, 블록 카운트가 리퀘스트 블록 카운트(RBC)보다 크면, 메모리 컨트롤러(120)는 존 카피의 프로세스를 종료할 수 있다. 블록 카운트가 리퀘스트 블록 카운트(RBC)보다 크지 않으면, 메모리 컨트롤러(120)는 S4410 단계에서 다름 유효 비트를 선택하고, 그리고 S4420 단계 내지 S4480 단계를 수행할 수 있다.
도 72는 외부의 호스트 장치가 존 단위의 가비지 컬렉션을 수행하는 예를 보여준다. 존에 기반한(zoned) 스토리지 장치(100)는 각 존에 대한 논리 주소들의 순차적인 쓰기를 가정한다. 따라서, 스토리지 장치(100)는 목표 존에 대한 논리 주소들 및 쓰기 포인터들의 순차성을 가정할 수 있다.
스토리지 장치(100)는 존 단위의 데이터의 관리는 외부의 호스트 장치에 의해 수행되는 것으로 가정할 수 있다. 따라서, 스토리지 장치(100)는 존 단위의 가비지 컬렉션은 외부의 호스트 장치의 요청에 따라 수행할 수 있고, 성능을 높이기 위한 자체적인 가비지 컬렉션은 외부의 호스트 장치와 별개로 수행할 수 있다.
도 1 및 도 72를 참조하면, S4510 단계에서, 외부의 호스트 장치는 하이버네이트를 검출할 수 있다. 예를 들어, 외부의 호스트 장치는 스토리지 장치(100)와의 통신이 하이버네이트 상태(예를 들어, 절전 상태)로 진입하는 것을 검출할 수 있다.
S4520 단계에서, 외부의 호스트 장치는 가비지 컬렉션의 대상으로 등록된 존이 존재하는지 판단할 수 있다. 가비지 컬렉션의 대상으로 등록된 존이 존재하지 않으면, S4540 단계에서, 외부의 호스트 장치는 스토리지 장치(100)와의 통신을 하이버네이트 상태로 진입할 수 있다.
가비지 컬렉션의 대상으로 등록된 존이 존재하면, S4530 단계에서, 외부의 호스트 장치는 스토리지 장치(100)에 존 카피(ZCC) 요청을 전달할 수 있다. 예를 들어, 외부의 호스트 장치는 가비지 컬렉션의 대상으로 등록된 존을 소스 존으로 하며, 소스 존의 데이터 중 부분 데이터에 대한 존 카피(ZCC) 요청을 스토리지 장치(100)로 전송할 수 있다. 존 카피(ZCC) 요청을 스토리지 장치(100)로 전송한 후에, S4540 단계에서, 외부의 호스트 장치는 하이버네이트 상태로 진입할 수 있다.
존 카피(ZCC) 요청에 응답하여, 외부의 호스트 장치가 하이버네이트 상태인 동안, 스토리지 장치(100)는 존 카피(ZCC) 동작을 수행할 수 있다. 예시적으로, 외부의 호스트 장치와 스토리지 장치(100) 사이의 통신이 하이버네이트 상태로부터 탈출한 후에, S4560 단계에서, 스토리지 장치(100)는 존 카피(ZCC) 요청의 응답을 외부의 호스트 장치로 전송할 수 있다.
도 73은 도 72의 방법에 의해 제7 존(Z7)의 데이터가 새로운 존(NZ)으로 카피되는 예를 보여준다. 도 1 및 도 73을 참조하면, 제7 존(Z7)에서 사선으로 채워진 부분은 외부의 호스트 장치에 의해 무효 데이터로 식별될 수 있다. 제7 존(Z7)에서 점으로 채워진 부분은 외부의 호스트 장치에 의해 유효 데이터로 식별될 수 있다. 존 카피(ZCC) 요청에 응답하여, 스토리지 장치(100)는 제7 존(Z7)의 유효 데이터 중 일부를 새로운 존(NZ)으로 카피할 수 있다.
도 74는 외부의 호스트 장치가 존 단위의 가비지 컬렉션을 완료하는 예를 보여준다. 도 1 및 도 74를 참조하면, S4610 단계에서, 외부의 호스트 장치는 가비지 컬렉션을 검출할 수 있다. 예를 들어, 외부의 호스트 장치는 새로운 데이터를 기입하기 위한 새로운 존을 할당하기 위해, 가비지 컬렉션이 필요함을 검출할 수 있다.
S4620 단계에서, 외부의 호스트 장치는 스토리지 장치(100)에 존 카피(ZCC) 요청을 전달할 수 있다. 예를 들어, 외부의 호스트 장치는 가비지 컬렉션의 대상으로 등록된 존들 중 하나를 소스 존으로 선택할 수 있다. 예를 들어, 외부의 호스트 장치는 도 72 및 도 73을 참조하여 설명된 바와 같이 존 카피(ZCC) 요청에 의해 일부 데이터가 카피된 존을 소스 존으로 선택할 수 있다. 외부의 호스트 장치는 소스 존의 유효 데이터를 카피하기 위한 존 카피(ZCC) 요청을 외부의 스토리지 장치(100)로 전송할 수 있다. 이후에, S4630 단계에서, 외부의 호스트 장치는 존 카피(ZCC) 요청에 의해 가비지 컬렉션이 완료될 때까지 대기할 수 있다.
S4640 단계에서, 존 카피(ZCC) 요청에 응답하여, 스토리지 장치(100)는 존 카피(ZCC) 동작을 수행할 수 있다. S4650 단계에서, 스토리지 장치(100)는 존 카피(ZCC) 동작의 응답을 외부의 호스트 장치로 전송할 수 있다. 예시적으로, 외부의 호스트 장치는 가비지 컬렉션이 완료될 때까지 존 카피(ZCC) 요청을 두 번 이상 스토리지 장치(100)로 전송할 수 있다.
도 75는 도 74의 방법에 의해 가비지 컬렉션이 완료되는 예를 보여준다. 도 1 및 도 75를 참조하면, 도 73과 연관된 설명에서 새로운 존으로 카피된 데이터는 소스 존인 제7 존(Z7)에서 외부의 호스트 장치 및 스토리지 장치(100)에 의해 무효 데이터로 식별될 수 있다.
도 74의 존 카피(ZCC) 요청에 응답하여, 스토리지 장치(100)는 제7 존(Z7)의 나머지 유효 데이터를 새로운 존(NZ)으로 카피할 수 있다. 새로운 존으로 카피된 데이터는 소스 존인 제7 존(Z7)에서 외부의 호스트 장치 및 스토리지 장치(100)에 의해 무효 데이터로 식별될 수 있다. 즉, 제7 존(Z7)은 무효 데이터만을 포함하는 것으로 식별될 수 있다.
가비지 컬렉션이 완료되면, 외부의 호스트 장치는 제7 존(Z7)을 리셋함으로써, 새로운 존을 할당할 수 있는 소거 유닛들을 확보할 수 있다.
예시적으로, 도 72를 참조하여 설명된 방법에 따라, 외부의 호스트 장치는 배경 동작으로서 가비지 컬렉션을 수행할 수 있다. 충분한 횟수 또는 시간의 하이버네이트 상태가 확보되면, 외부의 호스트 장치는 배경 동작으로서 가비지 컬렉션을 완료할 수 있다.
도 74를 참조하여 설명된 방법에 따라, 외부의 호스트 장치는 능동적으로 가비지 컬렉션을 수행할 수 있다. 예를 들어, 즉시 새로운 존의 할당이 필요할 때, 외부의 호스트 장치는 하나 또는 그보다 많은 존들의 데이터를 새로운 존 또는 기존의 존으로 카피하고, 그리고 하나 또는 그보다 많은 존들을 리셋함으로써, 새로운 존을 할당하기 위한 소거 유닛들을 확보할 수 있다.
도 76은 도 2의 메모리 블록들(BLK1~BLKz) 중 하나의 메모리 블록(BLKa)의 예를 보여주는 회로도이다. 도 1, 도 2 및 도 76을 참조하면, 복수의 셀 스트링들(CS11, CS12, CS21, CS22)이 기판(SUB) 위에서 행들 및 열들로 배치될 수 있다. 각 행은 제1 방향을 따라 신장될 수 있다. 각 열은 제2 방향을 따라 신장될 수 있다. 복수의 셀 스트링들(CS11, CS12, CS21, CS22)은 기판(SUB) 상에(또는 안에) 형성되는 공통 소스 라인(CSL)에 공통으로 연결될 수 있다. 도 76에서, 메모리 블록(BLKa)의 구조의 이해를 돕기 위하여, 기판(SUB)의 위치가 예시적으로 표시되어 있다.
각 행의 셀 스트링들은 접지 선택 라인(GSL)에 공통으로 연결되고, 그리고 제1 스트링 선택 라인들(SSL1a, SSL1b) 및 제2 스트링 선택 라인들(SSL2a, SSL2b) 중 대응하는 스트링 선택 라인들에 연결될 수 있다. 각 열의 셀 스트링들은 제1 비트 라인(BL1) 및 제2 비트 라인(BL2) 중 대응하는 비트 라인에 연결될 수 있다.
각 셀 스트링은 접지 선택 라인(GSL)에 연결되는 적어도 하나의 접지 선택 트랜지스터(GST), 복수의 워드 라인들(WL1~WL8)에 각각 연결되는 복수의 메모리 셀들(MC1~MC8)을 포함할 수 있다. 제1 행의 셀 스트링들은 제1 스트링 선택 라인들(SSL1a, SSL1b)에 각각 연결되는 스트링 선택 트랜지스터들(SSTa, SSTb)을 더 포함할 수 있다. 제2 행의 셀 스트링들은 제2 스트링 선택 라인들(SSL2a, SSL2b)에 각각 연결되는 스트링 선택 트랜지스터들(SSTa, SSTb)을 더 포함할 수 있다.
각 셀 스트링에서, 접지 선택 트랜지스터(GST), 메모리 셀들(MC1~MC8), 그리고 스트링 선택 트랜지스터들(SSTa, SSTb)은 기판(SUB)과 수직인 방향, 예를 들어 제3 방향을 따라 직렬 연결되고, 기판(SUB)과 수직인 방향을 따라 순차적으로 적층될 수 있다. 각 셀 스트링(CS11, CS12, CS21, CS22)에서, 메모리 셀들(MC1~MC8) 중 적어도 하나가 더미 메모리 셀로 사용될 수 있다. 더미 메모리 셀은 프로그램되지 않거나(예를 들어, 프로그램이 금지되거나) 또는 메모리 셀들(MC1~MC8)과 다르게 프로그램될 수 있다.
예시적으로, 동일한 높이에 위치하고, 하나의 스트링 선택 라인(SSL1a, SSL1b, SSL2a 또는 SSL2b)과 연관된 메모리 셀들은 하나의 물리 페이지를 형성할 수 있다. 하나의 물리 페이지의 메모리 셀들은 하나의 서브 워드 라인에 연결될 수 있다. 동일한 높이에 위치한 물리 페이지들의 서브 워드 라인들은 하나의 워드 라인에 공통으로 연결될 수 있다. 이하에서, '워드 라인'의 용어는 워드 라인 또는 서브 워드 라인을 가리킬 수 있으며, 문맥에 따라 해석될 것이다.
예시적으로, 메모리 블록(BLKa)에서 제1 스트링 선택 라인들(SSL1a, SSL1b)에 대응하는 제1행, 제2 스트링 선택 라인들(SSL2a, SSL2b)에 대응하는 제2행, 제1 비트 라인(BL1)에 대응하는 제1열, 그리고 제2 비트 라인(BL2)에 대응하는 제2열의 셀 스트링들(CS11, CS12, CS21, CS22)이 도시되지만, 메모리 블록(BLKa)에 포함되는 셀 스트링들의 행들 및 열들의 수는 한정되지 않는다.
스토리지 장치(100)의 메모리 컨트롤러(120)는 메모리 블록(BLKa)을 둘 이상의 소거 유닛들로 관리할 수 있다. 예를 들어, 메모리 컨트롤러(120)는 메모리 블록(BLKa)을 기판(SUB)에 수직한 방향에 따라 둘 이상의 소거 유닛들로 분할할 수 있다. 메모리 컨트롤러(120)는 둘 이상의 소거 유닛들의 각각을 독립적으로 소거할 수 있다. 예를 들어, 수직 채널에 소거 전압(예를 들어 고전압)을 인가하고, 소거 대상인 소거 유닛의 워드 라인들에 저전압을 인가하고, 그리고 소거 대상이 아닌 소거 유닛(들)의 워드 라인들을 플로팅함으로써, 하나의 소거 대상이 독립적으로 소거될 수 있다.
메모리 블록(BLKa)에서 메모리 셀들(MC1~MC8)의 구조 및 특색에 따라, 메모리 셀들(MC1~MC8)의 프로그램 순서가 정해질 수 있다. 예를 들어, 메모리 컨트롤러(120)는 제1 메모리 셀(MC1)로부터 제8 메모리 셀(MC8)의 순서로, 또는 제8 메모리 셀(MC8)로부터 제1 메모리 셀(MC1)의 순서로 프로그램하도록 불휘발성 메모리 장치를 제어할 수 있다. 프로그램(또는 프로그램 동작)은 메모리 셀들(MC1~MC8)에 데이터를 기입하기 위해 불휘발성 메모리 장치(110)가 수행하는 동작일 수 있다.
메모리 블록(BLKa)에서 프로그램 순서가 정해져 있으므로, 메모리 블록(BLKa)의 적어도 하나의 소거 유닛에 유효 데이터가 기입된 경우, 메모리 블록(BLKa)의 다른 소거 유닛이 독립적으로 소거되더라도 소거 후에 해당 소거 유닛에 데이터를 기입하는 것은 금지될 수 있다. 즉, 메모리 블록(BLKa)의 적어도 하나의 소거 유닛에 유효 데이터가 기입되면, 메모리 블록(BLKa)의 전체의 소거 유닛들의 데이터가 무효화되고 그리고 메모리 블록(BLKa)의 전체의 소거 유닛들이 소거 상태가 된 후에, 메모리 컨트롤러(120)는 메모리 블록(BLKa)에 새로운 데이터를 기입할 수 있다.
도 77은 불휘발성 메모리 장치(110)의 제1 내지 제4 메모리 칩들(110_1~110_4)의 예를 보여준다. 도 1 및 도 77을 참조하면, 제1 내지 제4 메모리 칩들(110_1~110_4)의 각각은 제1 내지 제z 메모리 블록들(BLK1~BLKz)을 포함할 수 있다. 제1 내지 제z 메모리 블록들(BLK1~BLKz)의 각각은, 예를 들어 두 개의 소거 유닛들(EU)을 포함할 수 있다.
예시적으로, 존의 크기가 클수록, 외부의 호스트 장치가 존의 가비지 컬렉션을 수행하는 오버헤드가 증가할 수 있다. 외부의 호스트 장치의 오버헤드를 줄이기 위하여, 메모리 컨트롤러(120)는 제1 내지 제4 메모리 칩들(110_1~110_4)의 제1 내지 제z 메모리 블록들(BLK1~BLKz)의 소거 유닛들(EU)에 호스트 존(HZ) 및 장치 존(DZ)을 할당할 수 있다.
메모리 컨트롤러(120)는 제1 내지 제4 메모리 칩들(110_1~110_4)의 각각에서 하나(또는 적어도 하나)의 소거 유닛을 선택하여 호스트 존(HZ)을 할당할 수 있다. 메모리 컨트롤러(120)는 호스트 존의 단위로 존의 할당이 가능함을 외부의 호스트 장치에 알릴 수 있다. 외부의 호스트 장치가 오픈하는 존은 호스트 존(HZ)에 할당될 수 있다. 외부의 호스트 장치는 호스트 존(HZ)에 존을 오픈하고, 가비지 컬렉션을 수행하고, 그리고 존을 리셋할 수 있다. 호스트 존(HZ)의 사이즈는 장치 존(DZ)의 사이즈보다 작으므로, 외부의 호스트 장치가 존의 가비지 컬렉션을 수행하는 오버헤드가 감소할 수 있다.
메모리 컨트롤러(120)는 제1 내지 제4 메모리 칩들(110_1~110_4)의 각각에서 하나(또는 적어도 하나)의 메모리 블록을 선택하여 장치 존(DZ)을 할당할 수 있다. 도 76을 참조하여 설명된 바와 같이, 메모리 블록(BLKa)의 소거 유닛들(EU)이 소거 상태인 때에 메모리 블록(BLKa)에 데이터를 기입하는 것이 허용된다. 따라서, 하나의 장치 존에 속한 하나의 호스트 존(HZ)에 데이터가 기입된 상태이면, 다른 하나의 호스트 존(HZ)이 소거 상태여도 다른 하나의 호스트 존(HZ)에 데이터를 기입하는 것이 금지될 수 있다. 이러한 상태는 외부의 호스트 장치가 빈 호스트 존(HZ)에 새로운 존을 오픈하고자 할 때에 스토리지 장치(100)가 존에 데이터를 기입할 수 없는 문제를 유발할 수 있다.
이러한 문제를 방지하기 위하여, 메모리 컨트롤러(120)는 장치 존(DZ)의 단위로 배경 동작으로서 가비지 컬렉션을 수행할 수 있다. 메모리 컨트롤러(120)는 배경 동작으로서 가비지 컬렉션을 수행함으로써, 소거 상태의 장치 존(DZ)을 확보할 수 있다.
즉, 외부의 호스트 장치는 호스트 존(HZ)에 존을 오픈하며, 비어 있는 호스트 존(HZ)을 확보하기 위한 가비지 컬렉션을 수행할 수 있다. 장치 존(DZ)은 둘 또는 그보다 많은 호스트 존들(HZ)을 포함할 수 있다. 스토리지 장치(100)는 소거 상태의 장치 존(DZ)을 확보하기 위한 가비지 컬렉션을 수행할 수 있다.
예시적으로, 호스트 존(HZ)을 서로 다른 제1 내지 제4 메모리 칩들(110_1~110_4)의 소거 유닛들로 구성함으로써, 메모리 컨트롤러(120)는 외부의 호스트 장치의 호스트 존(HZ)에 대한 액세스 요청을 서로 다른 제1 내지 제4 메모리 칩들(110_1~110_4)에 대해 병렬로 또는 인터리빙에 기반하여 처리할 수 있다.
예를 들어, 메모리 컨트롤러(120)가 제1 내지 제4 메모리 칩들(110_1~110_4)과 서로 독립적인 채널들로 연결된 경우, 메모리 컨트롤러(120)는 외부의 호스트 장치의 호스트 존(HZ)에 대한 액세스 요청을 서로 다른 제1 내지 제4 메모리 칩들(110_1~110_4)에 대해 병렬로 처리할 수 있다.
메모리 컨트롤러(120)가 제1 내지 제4 메모리 칩들(110_1~110_4)과 공유 채널로 연결된 경우, 메모리 컨트롤러(120)는 외부의 호스트 장치의 호스트 존(HZ)에 대한 액세스 요청을 서로 다른 제1 내지 제4 메모리 칩들(110_1~110_4)에 대해 인터리빙에 기반하여 처리할 수 있다.
메모리 컨트롤러(120)가 제1 및 제2 메모리 칩들(110_1, 110_2)과 제1 공유 채널로 연결되고, 그리고 제3 및 제4 메모리 칩들(110_3, 110_4)과 제2 공유 채널로 연결된 경우, 메모리 컨트롤러(120)는 외부의 호스트 장치의 호스트 존(HZ)에 대한 액세스 요청을 병렬로 그리고 인터리빙에 기반하여 처리할 수 있다.
도 78은 스토리지 장치(100)가 장치 존(DZ) 및 호스트 존(HZ)을 관리하는 방법의 예를 보여준다. 도 1 및 도 78을 참조하면, S4710 단계에서, 메모리 컨트롤러(120)는 자유 호스트 존(HZ)에 새로운 존을 할당할 수 있다. 예를 들어, 외부의 호스트 장치의 오픈 존 요청 또는 쓰기 요청에 응답하여, 메모리 컨트롤러(120)는 자유 호스트 존에 새로운 존을 할당할 수 있다. 메모리 컨트롤러(120)는 새로운 존이 할당된 호스트 존을 비지 호스트 존으로 설정할 수 있다.
S4720 단계에서, 외부의 호스트 장치가 존을 리셋하는 것에 응답하여, 메모리 컨트롤러(120)는 비지 호스트 존을 무효화할 수 있다. 메모리 컨트롤러(120)는 무효화된 비지 호스트 존을 무효화된 호스트 존으로 설정할 수 있다.
S4730 단계에서, 메모리 컨트롤러(120)는 무효화된 호스트 존을 소거할 수 있다. 예를 들어, 메모리 컨트롤러(120)는 유휴 시간에 또는 필요한 때에 무효화된 호스트 존을 소거할 수 있다. 메모리 컨트롤러(120)는 호스트 존을 소거된 호스트 존으로 설정할 수 있다.
S4740 단계에서 메모리 컨트롤러(120)는 장치 존 내의 모든 호스트 존들이 소거된 호스트 존들이 되는 것에 응답하여, 호스트 존들을 자유 호스트 존들로 할당할 수 있다.
도 79a 내지 도 79f는 스토리지 장치(100)가 제1 장치 존(DZ1)을 관리하는 과정의 예들을 보여준다. 도 1 및 도 79a를 참조하면, 제1 장치 존(DZ1)은 제1 호스트 존(HZ1) 및 제2 호스트 존(HZ2)을 포함할 수 있다. 제1 호스트 존(HZ1)은 자유 호스트 존(FZ)일 수 있다.
메모리 컨트롤러(120)가 외부의 호스트 장치의 요청에 따라 제2 호스트 존(HZ2)에 제10 존(Z10)을 할당하고 그리고 새로운 데이터를 기입함에 따라, 메모리 컨트롤러(120)는 제2 호스트 존(HZ2)을 비지 호스트 존(BZ)으로 설정할 수 있다.
도 1 및 도 79b를 참조하면, 메모리 컨트롤러(120)가 외부의 호스트 장치의 요청에 따라 제1 호스트 존(HZ1)에 제11 존(Z11)을 오픈하고 그리고 새로운 데이터를 기입함에 따라, 메모리 컨트롤러(120)는 제1 호스트 존(HZ1)을 비지 호스트 존(BZ)으로 설정할 수 있다.
도 1 및 도 79c를 참조하면, 메모리 컨트롤러(120)가 외부의 호스트 장치의 요청에 따라 제2 호스트 존(HZ2)의 제10 존(Z10)을 리셋함에 따라, 메모리 컨트롤러(120)는 제2 호스트 존(HZ2)을 무효화된 호스트 존(IZ)으로 설정할 수 있다.
도 1 및 도 79d를 참조하면, 메모리 컨트롤러(120)가 제2 호스트 존(HZ2)을 소거함에 따라, 메모리 컨트롤러(120)는 제2 호스트 존(HZ2)을 소거된 호스트 존(HZ2)으로 설정할 수 있다. 예시적으로, 메모리 컨트롤러(120)는 자유 호스트 존(FZ)에 새로운 존을 할당하는 것을 허용하지만, 소거 호스트 존(HZ)에 새로운 존을 할당하는 것을 금지할 수 있다.
도 1 및 도 79e를 참조하면, 메모리 컨트롤러(120)가 외부의 호스트 장치의 요청에 따라 제1 호스트 존(HZ1)에서 제11 존(Z11)을 리셋함에 따라, 메모리 컨트롤러(120)는 제1 호스트 존(HZ1)을 무효화된 호스트 존(IZ)으로 설정할 수 있다.
도 1 및 도 79f를 참조하면, 메모리 컨트롤러(120)가 제1 호스트 존(HZ1)을 소거함에 따라, 제1 장치 존(DZ1)의 제1 호스트 존(HZ1) 및 제2 호스트 존(HZ2) 모두가 소거된 호스트 존(EZ)이 된다. 따라서, 메모리 컨트롤러(120)는 제1 호스트 존(HZ1) 및 제2 호스트 존(HZ2)의 각각을 자유 호스트 존(FZ)으로 설정할 수 있다.
도 80a 및 도 80b는 외부의 호스트 장치가 호스트 존의 단위로 가비지 컬렉션을 수행하는 과정의 예를 보여준다. 도 1 및 도 80a를 참조하면, 제2 장치 존(DZ2)의 제1 호스트 존(HZ1)은 비지 호스트 존(BZ)일 수 있다. 제2 장치 존(DZ2)의 제1 호스트 존(HZ1)에 제11 존(Z11)이 할당된 상태일 수 있다. 제2 장치 존(DZ2)의 제2 호스트 존(HZ2)은 비지 호스트 존(BZ)일 수 있다. 제2 장치 존(DZ2)의 제2 호스트 존(HZ2)에 제12 존(Z12)이 할당된 상태일 수 있다. 제3 장치 존(DZ3)의 제1 호스트 존(HZ1) 및 제2 호스트 존(HZ2)의 각각은 자유 호스트 존(FZ)일 수 있다.
예시적으로, 외부의 호스트 장치는 제3 장치 존(DZ3)의 제1 호스트 존(HZ1)에 새로운 존을 오픈할 수 있다. 외부의 호스트 장치는 제2 장치 존(DZ)의 제1 호스트 존(HZ1)에 할당된 제11 존(Z11)의 데이터 및 제2 장치 존(DZ2)의 제2 호스트 존(HZ2)의 제12 존(Z12)의 데이터를 제3 장치 존(DZ3)의 제1 호스트 존(HZ1)에 할당된 새로운 존으로 카피하는 가비지 컬렉션을 수행할 수 있다. 가비지 컬렉션을 수행함으로써, 외부의 호스트 장치(100)는 제2 장치 존(DZ2)의 제1 호스트 존(HZ1) 및 제2 호스트 존(HZ2)을 새로운 존을 할당할 수 있는 용량으로 확보할 수 있다.
스토리지 장치(100)는 제2 장치 존(DZ2)을 소거함으로써, 제2 장치 존(DZ2)의 제1 호스트 존(HZ1) 및 제2 호스트 존(HZ2)의 각각을 자유 호스트 존(FZ)으로 할당할 수 있다.
도 80b는 외부의 호스트 장치에 의해 가비지 컬렉션이 수행되는 다른 예를 보여준다. 도 1 및 도 80b를 참조하면, 제2 장치 존(DZ2)의 제1 호스트 존(HZ1)은 비지 호스트 존(BZ)일 수 있다. 제2 장치 존(DZ2)의 제1 호스트 존(HZ1)에 제11 존(Z11)이 할당된 상태일 수 있다. 제2 장치 존(DZ2)의 제2 호스트 존(HZ2)은 자유 호스트 존(FZ)일 수 있다.
제3 장치 존(DZ3)의 제1 호스트 존(HZ1)은 비지 호스트 존(BZ)일 수 있다. 제3 장치 존(DZ3)의 제1 호스트 존(HZ1)에 제12 존(Z12)이 할당된 상태일 수 있다. 제3 장치 존(DZ3)의 제2 호스트 존(HZ2)은 자유 호스트 존(FZ)일 수 있다.
예시적으로, 외부의 호스트 장치는 제2 장치 존(DZ2)의 제2 호스트 존(HZ2)에 새로운 존을 오픈할 수 있다. 외부의 호스트 장치는 제2 장치 존(DZ)의 제1 호스트 존(HZ1)에 할당된 제11 존(Z11)의 데이터 및 제3 장치 존(DZ3)의 제1 호스트 존(HZ1)의 제12 존(Z12)의 데이터를 제2 장치 존(DZ2)의 제2 호스트 존(HZ2)에 할당된 새로운 존으로 카피하는 가비지 컬렉션을 수행할 수 있다. 가비지 컬렉션을 수행함으로써, 외부의 호스트 장치(100)는 제2 장치 존(DZ2)의 제1 호스트 존(HZ1) 및 제3 장치 존(DZ3)의 제1 호스트 존(HZ1)을 새로운 존을 할당할 수 있는 용량으로 확보할 수 있다.
스토리지 장치(100)는 제3 장치 존(DZ3)을 소거함으로써, 제3 장치 존(DZ3)의 제1 호스트 존(HZ1) 및 제2 호스트 존(HZ2)의 각각을 자유 호스트 존(FZ)으로 할당할 수 있다.
예시적으로, 장치 존(DZ) 및 호스트 존(HZ)에 기반하여 존들을 할당 및 관리하는 방법이 설명되었다. 그러나 본 기재의 실시 예에 따른 스토리지 장치(100)가 존들을 할당하고 관리하는 방법은 위에 기술된 장치 존(DZ) 및 호스트 존(HZ)에 한정되지 않는다.
예를 들어, 외부의 호스트 장치의 요구 성능, 예를 들어 외부의 호스트 장치가 오픈하고자 하는 존의 요구 성능에 따라, 스토리지 장치(100)는 다양한 방식으로 장치 존(DZ) 및 대응하는 호스트 존들(HZ)을 할당할 수 있다. 예를 들어, 외부의 호스트 장치가 오픈하고자 하는 존의 요구 성능이 높으면, 스토리지 장치(100)는 호스트 제1 내지 제4 불휘발성 메모리 칩들(110_1~110_4)에 대해 장치 존(DZ) 및 대응하는 호스트 존들(HZ)을 설정함으로써 인터리빙을 통한 성능 향상을 도모할 수 있다.
외부의 호스트 장치가 오픈하고자 하는 존의 요구 성능이 낮으면, 스토리지 장치(100)는 적어도 하나의 불휘발성 메모리 칩의 메모리 블록에 장치 존(DZ) 및 대응하는 호스트 존들(HZ)을 오픈하거나 또는 적어도 두 개의 불휘발성 메모리 칩들의 메모리 블록들에 장치 존(DZ) 및 대응하는 호스트 존들(HZ)을 오픈함으로써, 존의 관리의 편의성 또는 유연성(flexibility)을 높일 수 있다. 하나의 장치 존(DZ) 및 대응하는 호스트 존들(HZ)에 어느 불휘발성 메모리 칩의 어느 메모리 블록(또는 소거 유닛들)이 매핑되는지는 스토리지 장치(100)에서 내부적으로 정해진 정책에 따라 동적으로 또는 적응적으로 가변될 수 있으며, 한정되지 않는다.
도 81은 스토리지 장치(100)가 배경 동작으로서 가비지 컬렉션을 수행하는 예를 보여준다. 도 1 및 도 81을 참조하면, 제2 장치 존(DZ2)의 제1 호스트 존(HZ1)은 무효화된 호스트 존(IZ)일 수 있다. 제2 장치 존(DZ2)의 제2 호스트 존(HZ2)은 비지 호스트 존(BZ)일 수 있다. 제2 장치 존(DZ2)의 제2 호스트 존(HZ2)에 제11 존(Z11)이 할당된 상태일 수 있다.
제3 장치 존(DZ3)의 제1 호스트 존(HZ1) 및 제2 호스트 존(HZ2)의 각각은 자유 호스트 존(FZ)일 수 있다.
제4 장치 존(DZ4)의 제1 호스트 존(HZ1)은 무효화된 호스트 존(IZ)일 수 있다. 제4 장치 존(DZ4)의 제2 호스트 존(HZ2)은 비지 호스트 존(BZ)일 수 있다. 제4 장치 존(DZ4)의 제2 호스트 존(HZ2)에 제12 존(Z12)이 할당된 상태일 수 있다.
메모리 컨트롤러(120)는 배경 동작으로서 가비지 컬렉션을 수행할 수 있다. 예를 들어, 메모리 컨트롤러(120)는 제2 장치 존(DZ2)의 제2 호스트 존(HZ2)의 데이터를 제3 장치 존(DZ3)의 제1 호스트 존(HZ1)으로 카피할 수 있다. 메모리 컨트롤러(120)는 제3 장치 존(DZ3)의 제1 호스트 존(HZ1)을 제11 존(Z11)으로 매핑할 수 있다.
메모리 컨트롤러(120)는 제4 장치 존(DZ4)의 제2 호스트 존(HZ2)의 데이터를 제3 장치 존(DZ3)의 제2 호스트 존(HZ2)으로 카피할 수 있다. 메모리 컨트롤러(120)는 제3 장치 존(DZ3)의 제2 호스트 존(HZ2)을 제12 존(Z12)으로 매핑할 수 있다.
가비지 컬렉션을 수행함으로써, 메모리 컨트롤러(120)는 제2 장치 존(DZ2) 및 제4 장치 존(DZ4)을 소거하고, 제2 장치 존(DZ2)의 제1 호스트 존(HZ1) 및 제2 호스트 존(HZ2), 그리고 제4 장치 존(DZ4)의 제1 호스트 존(HZ1) 및 제2 호스트 존(HZ2)의 각각을 자유 호스트 존으로 설정할 수 있다.
도 82는 본 기재의 일 실시 예에 따른 시스템(1000)을 도시한 도면이다. 도 82의 시스템(1000)은 기본적으로 휴대용 통신 단말기(mobile phone), 스마트폰(smart phone), 태블릿 PC(tablet personal computer), 웨어러블 기기, 헬스케어 기기 또는 IOT(internet of things) 기기와 같은 모바일(mobile) 시스템일 수 있다. 하지만 도 82의 시스템(1000)은 반드시 모바일 시스템에 한정되는 것은 아니고, 개인용 컴퓨터(personal computer), 랩탑(laptop) 컴퓨터, 서버(server), 미디어 재생기(media player) 또는 내비게이션(navigation)과 같은 차량용 장비(automotive device) 등이 될 수도 있다.
도 82를 참조하면, 시스템(1000)은 메인 프로세서(main processor)(1100), 메모리(1200a, 1200b) 및 스토리지 장치(1300a, 1300b)를 포함할 수 있으며, 추가로 촬영 장치(image capturing device)(1410), 사용자 입력 장치(user input device)(1420), 센서(1430), 통신 장치(1440), 디스플레이(1450), 스피커(1460), 전력 공급 장치(power supplying device)(1470) 및 연결 인터페이스(connecting interface)(1480) 중 하나 이상을 포함할 수 있다.
메인 프로세서(1100)는 시스템(1000)의 전반적인 동작, 보다 구체적으로는 시스템(1000)을 이루는 다른 구성 요소들의 동작을 제어할 수 있다. 이와 같은 메인 프로세서(1100)는 범용 프로세서, 전용 프로세서 또는 애플리케이션 프로세서(application processor) 등으로 구현될 수 있다.
메인 프로세서(1100)는 하나 이상의 CPU 코어(1110)를 포함할 수 있으며, 메모리(1200a, 1200b) 및/또는 스토리지 장치(1300a, 1300b)를 제어하기 위한 컨트롤러(1120)를 더 포함할 수 있다. 실시 예에 따라서는, 메인 프로세서(1100)는 AI(artificial intelligence) 데이터 연산 등 고속 데이터 연산을 위한 전용 회로인 가속기(accelerator)(1130)를 더 포함할 수 있다. 이와 같은 가속기(1130)는 GPU(Graphics Processing Unit), NPU(Neural Processing Unit) 및/또는 DPU(Data Processing Unit) 등을 포함할 수 있으며, 메인 프로세서(1100)의 다른 구성 요소와는 물리적으로 독립된 별개의 칩(chip)으로 구현될 수도 있다.
메모리(1200a, 1200b)는 시스템(1000)의 주기억 장치로 사용될 수 있으며, SRAM 및/또는 DRAM 등의 휘발성 메모리를 포함할 수 있으나, 플래시 메모리, PRAM 및/또는 RRAM 등의 비휘발성 메모리를 포함할 수도 있다. 메모리(1200a, 1200b)는 메인 프로세서(1100)와 동일한 패키지 내에 구현되는 것도 가능하다.
스토리지 장치(1300a, 1300b)는 전원 공급 여부와 관계 없이 데이터를 저장하는 비휘발성 저장 장치로서 기능할 수 있으며, 메모리(1200a, 1200b)에 비해 상대적으로 큰 저장 용량을 가질 수 있다. 스토리지 장치(1300a, 1300b)는 스토리지 컨트롤러(1310a, 1310b)(STRG CTRL)와, 스토리지 컨트롤러(1310a, 1310b)의 제어 하에 데이터를 저장하는 비휘발성 메모리(non-volatile memory, NVM)(1320a, 1320b)를 포함할 수 있다. 비휘발성 메모리(1320a, 1320b)는 2D(2-dimensional) 구조 혹은 3D(3-dimensional) V-NAND(Vertical NAND) 구조의 플래시 메모리를 포함할 수 있으나, PRAM 및/또는 RRAM 등의 다른 종류의 비휘발성 메모리를 포함할 수도 있다.
스토리지 장치(1300a, 1300b)는 메인 프로세서(1100)와는 물리적으로 분리된 상태로 시스템(1000)에 포함될 수도 있고, 메인 프로세서(1100)와 동일한 패키지 내에 구현될 수도 있다. 또한, 스토리지 장치(1300a, 1300b)는 SSD(solid state device) 혹은 메모리 카드(memory card)와 같은 형태를 가짐으로써, 후술할 연결 인터페이스(1480)와 같은 인터페이스를 통해 시스템(1000)의 다른 구성 요소들과 탈부착 가능하도록 결합될 수도 있다. 이와 같은 스토리지 장치(1300a, 1300b)는 UFS(Universal Flash Storage), eMMC(embedded multi-media card) 혹은 NVMe(non-volatile memory express)와 같은 표준 규약이 적용되는 장치일 수 있으나, 반드시 이에 한정되는 건 아니다.
촬영 장치(1410)는 정지 영상 또는 동영상을 촬영할 수 있으며, 카메라(camera), 캠코더(camcorder) 및/또는 웹캠(webcam) 등일 수 있다.
사용자 입력 장치(1420)는 시스템(1000)의 사용자로부터 입력된 다양한 유형의 데이터를 수신할 수 있으며, 터치 패드(touch pad), 키패드(keypad), 키보드(keyboard), 마우스(mouse) 및/또는 마이크(microphone) 등일 수 있다.
센서(1430)는 시스템(1000)의 외부로부터 획득될 수 있는 다양한 유형의 물리량을 감지하고, 감지된 물리량을 전기 신호로 변환할 수 있다. 이와 같은 센서(1430)는 온도 센서, 압력 센서, 조도 센서, 위치 센서, 가속도 센서, 바이오 센서(biosensor) 및/또는 자이로스코프(gyroscope) 센서 등일 수 있다.
통신 장치(1440)는 다양한 통신 규약에 따라 시스템(1000) 외부의 다른 장치들과의 사이에서 신호의 송신 및 수신을 수행할 수 있다. 이와 같은 통신 장치(1440)는 안테나, 트랜시버(transceiver) 및/또는 모뎀(MODEM) 등을 포함하여 구현될 수 있다.
디스플레이(1450) 및 스피커(1460)는 시스템(1000)의 사용자에게 각각 시각적 정보와 청각적 정보를 출력하는 출력 장치로 기능할 수 있다.
전력 공급 장치(1470)는 시스템(1000)에 내장된 배터리(도시 안함) 및/또는 외부 전원으로부터 공급되는 전력을 적절히 변환하여 시스템(1000)의 각 구성 요소들에게 공급할 수 있다.
연결 인터페이스(1480)는 시스템(1000)과, 시스템(1000)에 연결되어 시스템(1000과 데이터를 주고받을 수 있는 외부 장치 사이의 연결을 제공할 수 있다. 연결 인터페이스(1480)는 ATA(Advanced Technology Attachment), SATA(Serial ATA), e-SATA(external SATA), SCSI(Small Computer Small Interface), SAS(Serial Attached SCSI), PCI(Peripheral Component Interconnection), PCIe(PCI express), NVMe, IEEE 1394, USB(universal serial bus), SD(secure digital) 카드, MMC(multi-media card), eMMC, UFS, eUFS(embedded Universal Flash Storage), CF(compact flash) 카드 인터페이스 등과 같은 다양한 인터페이스 방식으로 구현될 수 있다.
예시적으로, 도 1 내지 도 81을 참조하여 설명된 스토리지 장치(100)는 스토리지 장치들(1300a, 1300b) 중 적어도 하나로 구현될 수 있다. 스토리지 장치들(1300a, 1300b) 중 적어도 하나는 존(zoned) 스토리지 장치일 수 있다. 스토리지 장치들(1300a, 1300b) 중 적어도 하나는 존 쓰기의 논리 유닛들 및 랜덤 쓰기의 논리 유닛들을 포함할 수 있다. 스토리지 장치들(1300a, 1300b) 중 적어도 하나는 도 4를 참조하여 설명된 존 할당기(310), 멀티-레벨 맵 테이블 매니저(320), 존 리커버리 매니저(330), 존 백업 매니저(340), 존 마이그레이션 매니저(350), 존 프리페치 매니저(360), 존 카피 매니저(370), 존 가비지 컬렉션 매니저(380), 그리고 읽기 및 쓰기 매니저(390)를 포함할 수 있다. 스토리지 장치들(1300a, 1300b) 중 적어도 하나는 존의 할당(또는 오픈)하고, 다중 맵 테이블들을 이용하고, 존 리커버리를 수행하고, 존 백업을 수행하고, 존 마이그레이션을 수행하고, 존 프리페치를 수행하고, 존 카피를 수행하고, 존 가비지 컬렉션을 수행할 수 있다.
메인 프로세서(1100)는 운영 체제 및 응용들을 실행하도록 구성될 수 있다. 메인 프로세서(1100)에서 실행되는 운영 체제 또는 응용들은 스토리지 장치들(1300a, 1300b) 중 적어도 하나의 존 쓰기의 논리 유닛에 존을 오픈할 수 있다. 메인 프로세서(1100)는 오픈된 존에 대해 순차 쓰기 또는 랜덤 쓰기를 수행할 수 있다. 프로세서(1100)는 오픈된 존들에 대해 가비지 컬렉션을 수행할 수 있다. 프로세서(1100) 및 스토리지 장치들(1300a, 1300b) 중 적어도 하나는 도 1 내지 도 81을 참조하여 설명된 다양한 동작들을 선택적으로 수행할 수 있다.
상술된 실시 예들에서, 제1, 제2, 제3 등의 용어들을 사용하여 본 발명의 기술적 사상에 따른 구성 요소들이 설명되었다. 그러나 제1, 제2, 제3 등과 같은 용어들은 구성 요소들을 서로 구별하기 위해 사용되며, 본 발명을 한정하지 않는다. 예를 들어, 제1, 제2, 제3 등과 같은 용어들은 순서 또는 임의의 형태의 수치적 의미를 내포하지 않는다.
상술된 실시 예들에서, 블록들을 사용하여 본 발명의 실시 예들에 따른 구성 요소들이 참조되었다. 블록들은 IC (Integrated Circuit), ASIC (Application Specific IC), FPGA (Field Programmable Gate Array), CPLD (Complex Programmable Logic Device) 등과 같은 다양한 하드웨어 장치들, 하드웨어 장치들에서 구동되는 펌웨어, 응용과 같은 소프트웨어, 또는 하드웨어 장치와 소프트웨어가 조합된 형태로 구현될 수 있다. 또한, 블록들은 IC 내의 반도체 소자들로 구성되는 회로들 또는 IP(Intellectual Property)로 등록된 회로들을 포함할 수 있다.
상술된 내용은 본 발명을 실시하기 위한 구체적인 실시 예들이다. 본 발명은 상술된 실시 예들뿐만 아니라, 단순하게 설계 변경되거나 용이하게 변경할 수 있는 실시 예들 또한 포함할 것이다. 또한, 본 발명은 실시 예들을 이용하여 용이하게 변형하여 실시할 수 있는 기술들도 포함될 것이다. 따라서, 본 발명의 범위는 상술된 실시 예들에 국한되어 정해져서는 안되며 후술하는 특허청구범위뿐만 아니라 이 발명의 특허청구범위와 균등한 것들에 의해 정해져야 할 것이다.
100: 스토리지 장치
110: 불휘발성 메모리 장치
120: 메모리 컨트롤러
121: 버스
122: 호스트 인터페이스
123: 내부 버퍼
124: 프로세서
126: 메모리 관리자
127: 에러 정정 코드 블록

Claims (20)

  1. 복수의 메모리 셀들을 포함하는 불휘발성 메모리 장치; 그리고
    상기 복수의 메모리 셀들에 대해 쓰기 유닛으로 쓰기 동작을 수행하고, 그리고 소거 유닛의 단위로 소거 동작을 수행하도록 구성되는 컨트롤러를 포함하고,
    상기 컨트롤러는 외부의 호스트 장치의 요청에 응답하여 상기 불휘발성 메모리 장치의 저장 공간에 복수의 존들을 할당하도록 구성되고,
    상기 컨트롤러는 상기 복수의 메모리 셀들의 복수의 소거 유닛들 중 둘 이상의 소거 유닛들을 선택하여 상기 복수의 존들의 각각에 할당하도록 구성되고,
    상기 컨트롤러는 상기 복수의 존들에 기입되는 데이터의 논리 주소들을 고정적으로 그리고 순차적으로 관리하도록 구성되고, 그리고
    상기 컨트롤러는 상기 복수의 존들의 각각에 대해 서로 다른 적어도 두 개의 맵 테이블들을 생성하도록 구성되는 스토리지 장치.
  2. 제1항에 있어서,
    상기 서로 다른 적어도 두 개의 맵 테이블들은:
    상기 쓰기 유닛의 논리 어드레스와 물리 어드레스를 매핑하는 제1 맵 테이블; 그리고
    상기 소거 유닛의 논리 어드레스와 물리 어드레스를 매핑하는 제2 맵 테이블을 포함하는 스토리지 장치.
  3. 제1항에 있어서,
    상기 컨트롤러가 상기 복수의 존들 중 하나의 존을 액세스할 때에 액세스 에러가 발생하면, 상기 컨트롤러는 상기 액세스 에러가 발생한 데이터를 리커버리 영역의 첫 번째 쓰기 유닛에 기입하도록 구성되는 스토리지 장치.
  4. 제1항에 있어서,
    상기 컨트롤러는 상기 복수의 존들 중 적어도 일부에 대응하는 존 버퍼들을 포함하고, 그리고 백업 동작 시에 상기 존 버퍼들에 저장된 데이터를 상기 복수의 존들과 구별되는 적어도 하나의 소거 유닛에 기입하도록 구성되는 스토리지 장치.
  5. 제4항에 있어서,
    상기 컨트롤러는 상기 적어도 하나의 소거 유닛에 기입된 데이터를 상기 복수의 존들 중 대응하는 적어도 하나의 존으로 마이그레이션 하도록 구성되는 스토리지 장치.
  6. 제1항에 있어서,
    상기 외부의 호스트로부터 순차적인 논리 어드레스들에 대한 읽기 요청들이 수신되는 것에 응답하여, 상기 컨트롤러는 다음 논리 어드레스들에 대응하는 데이터를 상기 외부의 호스트 장치의 요청이 없이도 프리페치 하도록 구성되는 스토리지 장치.
  7. 제1항에 있어서,
    상기 외부의 호스트 장치로부터 존 카피 요청이 수신되는 것에 응답하여, 상기 컨트롤러는 상기 복수의 존들 중 제1 존으로부터 데이터를 읽고, 그리고 상기 제1 존으로부터 읽혀진 데이터를 상기 복수의 존들 중 제2 존에 기입하도록 구성되는 스토리지 장치.
  8. 제7항에 있어서,
    상기 존 카피 요청은 커맨드 UPIU(UFS Protocol Information Unit)으로 수신되고, 그리고
    상기 컨트롤러는 상기 커맨드 UPIU에 포함된 어드레스에 기반하여 상기 제2 존을 식별하도록 구성되는 스토리지 장치.
  9. 제8항에 있어서,
    상기 컨트롤러는 상기 외부의 호스트 장치로부터 데이터 아웃 UPIU를 수신하고, 그리고 상기 데이터 아웃 UPIU에 포함된 어드레스에 기반하여 상기 제1 존의 데이터 중 상기 제2 존으로 카피할 데이터를 식별하도록 구성되는 스토리지 장치.
  10. 제7항에 있어서,
    상기 존 카피 요청은 커맨드 UPIU(UFS Protocol Information Unit)으로 수신되고, 그리고
    상기 컨트롤러는 상기 커맨드 UPIU에 포함된 어드레스들에 기반하여 상기 제1 존 및 상기 제2 존을 식별하도록 구성되는 스토리지 장치.
  11. 제10항에 있어서,
    상기 컨트롤러는 상기 커맨드 UPIU에 포함된 비트맵에 기반하여 상기 제1 존의 데이터 중 상기 제2 존으로 카피할 데이터를 식별하도록 구성되는 스토리지 장치.
  12. 제1항에 있어서,
    상기 복수의 존들의 각각에 대한 가비지 컬렉션은 상기 외부의 호스트 장치로부터 수신되는 요청에 응답하여 수행되고, 그리고
    상기 컨트롤러는 상기 외부의 호스트 장치의 요청 없이 상기 복수의 존들 중 둘 또는 그 이상의 존들의 단위로 가비지 컬렉션을 수행하도록 구성되는 스토리지 장치.
  13. 복수의 메모리 셀들을 포함하는 불휘발성 메모리 장치; 그리고
    상기 복수의 메모리 셀들에 대해 쓰기 유닛으로 쓰기 동작을 수행하고, 그리고 소거 유닛의 단위로 소거 동작을 수행하도록 구성되는 컨트롤러를 포함하고,
    상기 컨트롤러는 외부의 호스트 장치의 요청에 응답하여 상기 불휘발성 메모리 장치의 저장 공간에 복수의 존들을 할당하도록 구성되고,
    상기 컨트롤러는 상기 복수의 메모리 셀들의 복수의 소거 유닛들 중 둘 이상의 소거 유닛들을 선택하여 상기 복수의 존들의 각각에 할당하도록 구성되고,
    상기 컨트롤러는 상기 복수의 존들에 기입되는 데이터의 논리 주소들을 고정적으로 그리고 순차적으로 관리하도록 구성되고, 그리고
    상기 복수의 존들에 대한 가비지 컬렉션은 서로 다른 두 개의 단위로 수행되는 스토리지 장치.
  14. 제13항에 있어서,
    상기 복수의 존들의 각각에 대한 가비지 컬렉션은 상기 외부의 호스트 장치로부터 수신되는 요청에 응답하여 수행되는 스토리지 장치.
  15. 제13항에 있어서,
    상기 컨트롤러는 상기 외부의 호스트 장치의 요청 없이 상기 복수의 존들 중 둘 또는 그 이상의 존들의 단위로 가비지 컬렉션을 수행하도록 구성되는 스토리지 장치.
  16. 제13항에 있어서,
    상기 컨트롤러가 상기 복수의 존들 중 하나의 존을 액세스할 때에 액세스 에러가 발생하면, 상기 컨트롤러는 상기 액세스 에러가 발생한 데이터를 리커버리 영역의 첫 번째 쓰기 유닛에 기입하도록 구성되는 스토리지 장치.
  17. 제13항에 있어서,
    상기 컨트롤러는 상기 복수의 존들 중 적어도 일부에 대응하는 존 버퍼들을 포함하고, 그리고 백업 동작 시에 상기 존 버퍼들에 저장된 데이터를 상기 복수의 존들과 구별되는 적어도 하나의 소거 유닛에 기입하도록 구성되는 스토리지 장치.
  18. 제17항에 있어서,
    상기 컨트롤러는 상기 적어도 하나의 소거 유닛에 기입된 데이터를 상기 복수의 존들 중 대응하는 적어도 하나의 존으로 마이그레이션 하도록 구성되는 스토리지 장치.
  19. 제13항에 있어서,
    상기 외부의 호스트 장치로부터 존 카피 요청이 수신되는 것에 응답하여, 상기 컨트롤러는 상기 복수의 존들 중 제1 존으로부터 데이터를 읽고, 그리고 상기 제1 존으로부터 읽혀진 데이터를 상기 복수의 존들 중 제2 존에 기입하도록 구성되는 스토리지 장치.
  20. 불휘발성 메모리 장치 및 컨트롤러를 포함하는 스토리지 장치의 동작 방법에 있어서:
    상기 컨트롤러가 각각 상기 불휘발성 메모리 장치의 둘 이상의 소거 유닛들을 포함하는 복수의 존들을 할당하는 단계;
    상기 컨트롤러가 상기 복수의 존들의 각각에 대해 서로 다른 적어도 두 개의 맵 테이블들을 생성하는 단계;
    상기 컨트롤러가 외부의 호스트 장치의 요청에 응답하여 존의 단위로 제1 가비지 컬렉션을 수행하는 단계; 그리고
    상기 컨트롤러가 상기 외부의 호스트 장치의 요청 없이 상기 존과 다른 단위로 제2 가비지 컬렉션을 수행하는 단계를 포함하고,
    상기 컨트롤러는 상기 복수의 존들에 기입되는 데이터의 논리 주소들을 고정적으로 그리고 순차적으로 관리하도록 구성되는 스토리지 장치.
KR1020230005050A 2022-08-31 2023-01-12 불휘발성 메모리 장치를 포함하는 스토리지 장치 및 스토리지 장치의 동작 방법 KR20240030955A (ko)

Priority Applications (12)

Application Number Priority Date Filing Date Title
US18/237,806 US20240069782A1 (en) 2022-08-31 2023-08-24 Storage device including nonvolatile memory device and operating method of storage device
US18/238,301 US20240070033A1 (en) 2022-08-31 2023-08-25 Storage device including nonvolatile memory device and operating method of storage device
US18/238,283 US20240070067A1 (en) 2022-08-31 2023-08-25 Storage device including nonvolatile memory device and operating method of storage device
US18/238,282 US20240069777A1 (en) 2022-08-31 2023-08-25 Storage device including nonvolatile memory device and operating method of storage device
US18/238,262 US20240070066A1 (en) 2022-08-31 2023-08-25 Storage device including nonvolatile memory device and operating method of storage device
EP23193507.3A EP4332968A3 (en) 2022-08-31 2023-08-25 Storage device including nonvolatile memory device and operating method of storage device
EP23193746.7A EP4332969A1 (en) 2022-08-31 2023-08-28 Storage device including nonvolatile memory device and operating method of storage device
EP23193824.2A EP4332970A1 (en) 2022-08-31 2023-08-29 Storage device including nonvolatile memory device and operating method of storage device
EP23193881.2A EP4343767A3 (en) 2022-08-31 2023-08-29 Storage device including nonvolatile memory device and operating method of storage device
EP23193980.2A EP4332971A3 (en) 2022-08-31 2023-08-29 Storage device including nonvolatile memory device and operating method of storage device
US18/240,169 US20240069750A1 (en) 2022-08-31 2023-08-30 Storage device including nonvolatile memory device and operating method of storage device
EP23194454.7A EP4332972A1 (en) 2022-08-31 2023-08-31 Storage device including nonvolatile memory device and operating method of storage device

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
KR1020220109942 2022-08-31
KR20220109942 2022-08-31
KR20220149964 2022-11-10
KR1020220149964 2022-11-10

Publications (1)

Publication Number Publication Date
KR20240030955A true KR20240030955A (ko) 2024-03-07

Family

ID=90271582

Family Applications (13)

Application Number Title Priority Date Filing Date
KR1020230005048A KR20240030954A (ko) 2022-08-31 2023-01-12 불휘발성 메모리 장치를 포함하는 스토리지 장치 및 스토리지 장치의 동작 방법
KR1020230005013A KR20240030947A (ko) 2022-08-31 2023-01-12 불휘발성 메모리 장치를 포함하는 스토리지 장치 및 스토리지 장치의 동작 방법
KR1020230005040A KR20240030949A (ko) 2022-08-31 2023-01-12 불휘발성 메모리 장치를 포함하는 스토리지 장치 및 스토리지 장치의 동작 방법
KR1020230005050A KR20240030955A (ko) 2022-08-31 2023-01-12 불휘발성 메모리 장치를 포함하는 스토리지 장치 및 스토리지 장치의 동작 방법
KR1020230005033A KR20240030948A (ko) 2022-08-31 2023-01-12 불휘발성 메모리 장치를 포함하는 스토리지 장치 및 스토리지 장치의 동작 방법
KR1020230005046A KR20240030953A (ko) 2022-08-31 2023-01-12 불휘발성 메모리 장치를 포함하는 스토리지 장치 및 스토리지 장치의 동작 방법
KR1020230004966A KR20240030945A (ko) 2022-08-31 2023-01-12 불휘발성 메모리 장치를 포함하는 스토리지 장치 및 스토리지 장치의 동작 방법
KR1020230005058A KR20240030957A (ko) 2022-08-31 2023-01-12 불휘발성 메모리 장치를 포함하는 스토리지 장치 및 스토리지 장치의 동작 방법
KR1020230005041A KR20240030950A (ko) 2022-08-31 2023-01-12 불휘발성 메모리 장치를 포함하는 스토리지 장치 및 스토리지 장치의 동작 방법
KR1020230005043A KR20240030951A (ko) 2022-08-31 2023-01-12 불휘발성 메모리 장치를 포함하는 스토리지 장치 및 스토리지 장치의 동작 방법
KR1020230005044A KR20240030952A (ko) 2022-08-31 2023-01-12 불휘발성 메모리 장치를 포함하는 스토리지 장치 및 스토리지 장치의 동작 방법
KR1020230004994A KR20240030946A (ko) 2022-08-31 2023-01-12 불휘발성 메모리 장치를 포함하는 스토리지 장치 및 스토리지 장치의 동작 방법
KR1020230005053A KR20240030956A (ko) 2022-08-31 2023-01-12 불휘발성 메모리 장치를 포함하는 스토리지 장치 및 스토리지 장치의 동작 방법

Family Applications Before (3)

Application Number Title Priority Date Filing Date
KR1020230005048A KR20240030954A (ko) 2022-08-31 2023-01-12 불휘발성 메모리 장치를 포함하는 스토리지 장치 및 스토리지 장치의 동작 방법
KR1020230005013A KR20240030947A (ko) 2022-08-31 2023-01-12 불휘발성 메모리 장치를 포함하는 스토리지 장치 및 스토리지 장치의 동작 방법
KR1020230005040A KR20240030949A (ko) 2022-08-31 2023-01-12 불휘발성 메모리 장치를 포함하는 스토리지 장치 및 스토리지 장치의 동작 방법

Family Applications After (9)

Application Number Title Priority Date Filing Date
KR1020230005033A KR20240030948A (ko) 2022-08-31 2023-01-12 불휘발성 메모리 장치를 포함하는 스토리지 장치 및 스토리지 장치의 동작 방법
KR1020230005046A KR20240030953A (ko) 2022-08-31 2023-01-12 불휘발성 메모리 장치를 포함하는 스토리지 장치 및 스토리지 장치의 동작 방법
KR1020230004966A KR20240030945A (ko) 2022-08-31 2023-01-12 불휘발성 메모리 장치를 포함하는 스토리지 장치 및 스토리지 장치의 동작 방법
KR1020230005058A KR20240030957A (ko) 2022-08-31 2023-01-12 불휘발성 메모리 장치를 포함하는 스토리지 장치 및 스토리지 장치의 동작 방법
KR1020230005041A KR20240030950A (ko) 2022-08-31 2023-01-12 불휘발성 메모리 장치를 포함하는 스토리지 장치 및 스토리지 장치의 동작 방법
KR1020230005043A KR20240030951A (ko) 2022-08-31 2023-01-12 불휘발성 메모리 장치를 포함하는 스토리지 장치 및 스토리지 장치의 동작 방법
KR1020230005044A KR20240030952A (ko) 2022-08-31 2023-01-12 불휘발성 메모리 장치를 포함하는 스토리지 장치 및 스토리지 장치의 동작 방법
KR1020230004994A KR20240030946A (ko) 2022-08-31 2023-01-12 불휘발성 메모리 장치를 포함하는 스토리지 장치 및 스토리지 장치의 동작 방법
KR1020230005053A KR20240030956A (ko) 2022-08-31 2023-01-12 불휘발성 메모리 장치를 포함하는 스토리지 장치 및 스토리지 장치의 동작 방법

Country Status (1)

Country Link
KR (13) KR20240030954A (ko)

Also Published As

Publication number Publication date
KR20240030945A (ko) 2024-03-07
KR20240030950A (ko) 2024-03-07
KR20240030949A (ko) 2024-03-07
KR20240030953A (ko) 2024-03-07
KR20240030954A (ko) 2024-03-07
KR20240030957A (ko) 2024-03-07
KR20240030952A (ko) 2024-03-07
KR20240030947A (ko) 2024-03-07
KR20240030946A (ko) 2024-03-07
KR20240030956A (ko) 2024-03-07
KR20240030951A (ko) 2024-03-07
KR20240030948A (ko) 2024-03-07

Similar Documents

Publication Publication Date Title
JP5221332B2 (ja) メモリシステム
US20130080689A1 (en) Data storage device and related data management method
US11494115B2 (en) System method for facilitating memory media as file storage device based on real-time hashing by performing integrity check with a cyclical redundancy check (CRC)
US20160224253A1 (en) Memory System and Method for Delta Writes
KR20180011665A (ko) 데이터 저장 장치 및 이를 포함하는 컴퓨팅 시스템
EP4332970A1 (en) Storage device including nonvolatile memory device and operating method of storage device
EP4332969A1 (en) Storage device including nonvolatile memory device and operating method of storage device
EP4332972A1 (en) Storage device including nonvolatile memory device and operating method of storage device
EP4332968A2 (en) Storage device including nonvolatile memory device and operating method of storage device
EP4332971A2 (en) Storage device including nonvolatile memory device and operating method of storage device
EP4343767A2 (en) Storage device including nonvolatile memory device and operating method of storage device
KR20240030955A (ko) 불휘발성 메모리 장치를 포함하는 스토리지 장치 및 스토리지 장치의 동작 방법
US11314428B1 (en) Storage system and method for detecting and utilizing wasted space using a file system
CN117631992A (zh) 包括非易失性存储器装置的存储装置及其操作方法
CN117631987A (zh) 包括非易失性存储器装置的存储装置及其操作方法
US20240069782A1 (en) Storage device including nonvolatile memory device and operating method of storage device
US20240078027A1 (en) Storage device including nonvolatile memory device and operating method of storage device
KR102583244B1 (ko) 스토리지 장치 및 스토리지 장치의 동작 방법
US20230146540A1 (en) Storage device and an operating method of a storage controller thereof
US20230195333A1 (en) Storage device and operation method of electronic system
KR20230067457A (ko) 스토리지 컨트롤러, 스토리지 시스템 및 그 동작방법
KR20230168390A (ko) 스토리지 장치 및 전자 시스템