KR20200133716A - 저장 캐시 관리 - Google Patents

저장 캐시 관리 Download PDF

Info

Publication number
KR20200133716A
KR20200133716A KR1020207014439A KR20207014439A KR20200133716A KR 20200133716 A KR20200133716 A KR 20200133716A KR 1020207014439 A KR1020207014439 A KR 1020207014439A KR 20207014439 A KR20207014439 A KR 20207014439A KR 20200133716 A KR20200133716 A KR 20200133716A
Authority
KR
South Korea
Prior art keywords
memory
priority
host data
addresses
host
Prior art date
Application number
KR1020207014439A
Other languages
English (en)
Other versions
KR102378295B1 (ko
Inventor
인수 윤
찬드라세카르 선다레산
Original Assignee
웨스턴 디지털 테크놀로지스, 인코포레이티드
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 웨스턴 디지털 테크놀로지스, 인코포레이티드 filed Critical 웨스턴 디지털 테크놀로지스, 인코포레이티드
Publication of KR20200133716A publication Critical patent/KR20200133716A/ko
Application granted granted Critical
Publication of KR102378295B1 publication Critical patent/KR102378295B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0804Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with main memory updating
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0866Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches for peripheral storage systems, e.g. disk cache
    • G06F12/0868Data transfer between cache memory and other subsystems, e.g. storage devices or host systems
    • 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
    • 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
    • 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
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0893Caches characterised by their organisation or structure
    • 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/1041Resource optimization
    • G06F2212/1044Space efficiency 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/60Details of cache memory
    • G06F2212/608Details relating to cache mapping
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/72Details relating to flash memory management
    • G06F2212/7203Temporary buffering, e.g. using volatile buffer or dedicated buffer blocks
    • 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/7207Details relating to flash memory management management of metadata or control data

Abstract

비휘발성 저장 디바이스 내의 IS 메모리의 관리를 위한 기법들 및 그 사용 방법들이 본 명세서에 설명된다. 비휘발성 저장 디바이스는 비휘발성 메모리를 포함할 수 있으며, 비휘발성 메모리의 일부분은 중간 저장(IS) 메모리로서 지정되고 비휘발성 메모리의 다른 부분은 메인 저장(MS) 메모리로서 지정된다. 이 IS 메모리는 MS 메모리보다 더 낮은 판독 레이턴시 및 기록 레이턴시를 가질 수 있다. 호스트 디바이스는 메모리 제어기에 우선순위 어드레스들을, 우선순위 어드레스들 중 하나를 갖는 호스트 데이터가 다른 호스트 데이터에 앞서 IS 메모리에 유지될 우선순위를 받을 것이라는 표시와 함께 제공한다.

Description

저장 캐시 관리
비휘발성 메모리를 포함하는 저장 디바이스는 중간 저장(intermediate storage, IS) 메모리로서 지정되는 비휘발성 메모리의 일부분 및 메인 저장(main storage, MS) 메모리로서 지정되는 비휘발성 메모리의 다른 부분을 포함할 수 있다. IS 메모리는 더 빠른 기록 처리량을 제공하기 위해 저장 디바이스들에 사용될 수 있고, 또한 호스트 데이터를 MS에 저장하기 전에 호스트 데이터를 신속하게 저장하기 위한 안전 구역으로서 사용될 수 있다. IS 메모리는 또한, IS 메모리에 저장된 고온 데이터가 매우 신속하게 액세스될 수 있게 하는 비휘발성 메모리 캐시로서 기능할 수 있다. IS 메모리는 또한 캐시로 지칭될 수 있다.
IS 메모리는 MS 메모리보다 낮은 저장 밀도를 가질 수 있다. IS 메모리는 MS 메모리보다 비트당 더 고가일 수 있다. IS 메모리는 MS 메모리보다 더 큰 내구성을 가질 수 있다. 일부 아키텍처들에서, IS 메모리의 총 저장 용량은 MS 메모리보다 상당히 작을 수 있다. 예를 들어, 보다 고가의 IS 메모리는 저장 디바이스의 총 저장 예산의 10% 미만을 차지할 수 있다.
일례로서, IS 메모리는 단일 비트 데이터가 메모리 셀당 저장되는 단일-레벨 셀(single-level cell, SLC) 메모리를 포함할 수 있다. SLC 메모리는 플래시 메모리 셀들일 수 있다. IS 메모리는 대안적으로 또는 추가적으로 저장 클래스 메모리(SCM)를 포함할 수 있다. 이러한 맥락에서 SCM의 예들은 ReRAM, 상변화 메모리(Phase-Change Memory, PCM), 또는 자기(Magnetic) RAM이다. 대조적으로, 총 저장 예산의 90% 초과를 차지할 덜 고가의 MS 메모리는 2개 이상의 비트들이 메모리 셀당 저장되는 다중-레벨 셀(multi-level cell, MLC) 메모리를 포함할 수 있다. MLC 메모리는 플래시 메모리 셀들일 수 있다. 이 용어가 본 명세서에 사용되는 바와 같이, MLC 메모리는 2개, 3개 또는 4개 비트의 데이터, 또는 잠재적으로 심지어 4개 초과 비트의 데이터가 메모리 셀당 저장되는 메모리 셀들을 포함할 수 있다. 따라서, 이 용어가 본 명세서에 사용되는 바와 같이, 용어 MLC 메모리는 또한 삼중-레벨 셀(triple-level cell, TLC) 메모리 및 사중-레벨 셀(quad-level cell, QLC) 메모리를 포괄한다.
IS 메모리가 MS 메모리보다 낮은 기록 레이턴시들을 가질 수 있기 때문에, 호스트 데이터는 초기에 IS 메모리에 기록될 수 있다는 것에 유의한다. 그러나, IS 메모리의 제한된 저장 용량으로 인해, 호스트 데이터는 전형적으로 IS 메모리 내의 공간을 사용가능하게 하기 위해 IS 메모리로부터 MS 메모리로 재배치된다(relocated). IS 메모리로부터 MS 메모리로 데이터를 전송하는 프로세스는 "재배치"라고 지칭된다. 재배치를 수행하기 위한 종래의 기법들은 전형적으로 선입선출(FIFO)과 같은 간단한 휴리스틱에 기초하거나, 또는 노화 알고리즘에 기초한다.
도 1a는 3D 적층형 비휘발성 메모리 디바이스 내의 블록들의 세트의 사시도이다.
도 1b는 도 1a의 3D 적층형 비휘발성 메모리 디바이스와 같은 비휘발성 메모리 디바이스의 블록도이다.
도 2는 호스트 디바이스에 접속된 비휘발성 저장 디바이스의 일 실시예를 도시한 블록도이다.
도 3은 도 1a, 도 1b 또는 도 2의 저장 디바이스와 같은 저장 디바이스의 일 실시예의 블록도이다.
도 4는 비휘발성 저장소를 동작시키는 프로세스의 일 실시예의 흐름도이다.
도 5a는 우선순위 어드레스 테이블의 일 실시예를 도시한다.
도 5b는 비휘발성 저장소를 동작시키는 프로세스의 일 실시예의 흐름도이다.
도 6a는 우선순위 어드레스들의 세트를 메모리 제어기에 제공하는 우선순위 호스트 데이터 애플리케이션의 프로세스의 일 실시예의 흐름도이다.
도 6b는 우선순위 어드레스 테이블을 업데이트하는 메모리 제어기의 프로세스의 일 실시예의 흐름도이다.
도 7은 사용자 선택에 기초하여 어떤 호스트 데이터가 IS 메모리에 유지될 우선순위를 받을 것인지를 학습하는 우선순위 호스트 데이터 애플리케이션의 프로세스의 흐름도이다.
도 8a는 사용자가 우선순위 호스트 데이터를 특정하도록 허용하는 사용자 인터페이스(UI)의 일 실시예를 도시한다.
도 8b는 사용자가 우선순위 가중치와 함께 우선순위 호스트 데이터를 특정하도록 허용하는 UI의 일 실시예를 도시한다.
도 9는 어떤 호스트 데이터가 IS 메모리에 유지될 우선순위를 받을 것인지를 결정하는 우선순위 호스트 데이터 애플리케이션의 프로세스의 흐름도이다.
도 10a는 우선순위 어드레스 테이블에 기초하여 IS 메모리를 관리하는 메모리 제어기의 프로세스의 일 실시예의 흐름도이다.
도 10b는 우선순위 어드레스 테이블에 기초하여 IS 메모리를 관리하는 메모리 제어기의 프로세스의 일 실시예의 흐름도로서, 비-우선순위 호스트 데이터가 MS 메모리에 직접 기록되는 것이 가능하다(IS 메모리를 바이패스함).
도 11은 우선순위 어드레스들에 기초한 재배치(또는 플러시(flush)) 동작의 프로세스의 일 실시예의 흐름도이다.
도 12는 우선순위 어드레스 테이블에 기초하여 가비지 수집(garbage collection)을 수행하는 메모리 제어기의 프로세스의 일 실시예의 흐름도이다.
비휘발성 저장 디바이스 내의 IS 메모리의 관리를 위한 기법들 및 그 사용 방법들이 본 명세서에 설명된다. IS 메모리는 캐시라고도 또한 지칭될 수 있기 때문에, 이러한 관리 기법들은 저장 캐시 관리라고도 또한 지칭될 수 있다. 비휘발성 저장 디바이스는 비휘발성 메모리를 포함할 수 있으며, 비휘발성 메모리의 일부분은 중간 저장(IS) 메모리로서 지정되고 비휘발성 메모리의 다른 부분은 메인 저장(MS) 메모리로서 지정된다. 일 실시예에서, IS 메모리는 MS 메모리보다 더 낮은 기록 레이턴시를 갖는다. 일 실시예에서, IS 메모리는 MS 메모리보다 더 낮은 판독 레이턴시를 갖는다. 예를 들어, IS 메모리는 단일 비트 데이터가 메모리 셀당 저장되는 단일-레벨 셀(SLC) 유형 플래시 메모리를 포함할 수 있고, MS 메모리는 2 비트 이상 데이터가 메모리 셀당 저장되는 다중-레벨 셀(MLC) 유형 플래시 메모리를 포함할 수 있다. IS 메모리는 플래시 메모리로 제한되지 않는다. 예를 들어, IS 메모리는 ReRAM, 상변화 메모리, 또는 자기 RAM을 포함할 수 있지만, 이에 제한되지 않는다. 이 문맥에서 ReRAM, 상변화 메모리, 또는 자기 RAM은 "저장 클래스 메모리"로 지칭될 수 있다.
일 실시예에서, 장치는 호스트 디바이스 및 비휘발성 저장 디바이스를 포함한다. 비휘발성 저장 디바이스는 메모리 제어기 및 비휘발성 메모리 셀들을 갖는다. 일 실시예에서, 메모리 제어기는 일부의 비휘발성 메모리 셀들을 IS 메모리로서 사용하고, 다른 비휘발성 메모리 셀들을 MS 메모리로서 사용하도록 구성된다. 일반적으로, 호스트 디바이스는 호스트 데이터를 비휘발성 저장 디바이스에 저장하기 위해 메모리 제어기에 제공할 수 있다.
호스트 디바이스의 실시예들은 메모리 제어기에 어드레스들(예를 들어, 논리 블록 어드레스들)을, 어드레스들 중 하나를 갖는 호스트 데이터가 다른 호스트 데이터에 앞서 IS 메모리에 유지될 우선순위를 받을 것이라는 표시와 함께 제공한다. 어드레스들은 호스트 시스템의 논리 어드레스 공간으로부터 유래될 수 있다. 일 실시예에서, 호스트 시스템은 어느 호스트 데이터가 비휘발성 저장 디바이스의 IS 메모리에 유지될 우선순위를 받을 것인지를 인식하는 우선순위 호스트 데이터 애플리케이션을 갖는다. 우선순위 호스트 데이터 애플리케이션은 호스트 데이터에 대한 어드레스들(예를 들어, 논리 어드레스들)에 액세스하고, 메모리 제어기에 어드레스들을, 메모리 제어기가 그 어드레스들을 갖는 호스트 데이터에 IS 메모리에 유지될 우선순위를 부여할 것이라는 표시와 함께 제공한다. 우선순위 호스트 데이터 애플리케이션은 메모리 시스템 상의 비휘발성 메모리에 액세스하는 데 사용되는 메모리 액세스 프로토콜을 사용하는 대역내 통신을 사용하여 어드레스들을 제공할 수 있다. 메모리 제어기는 어드레스들을 우선순위 어드레스 테이블에 저장할 수 있다. 메모리 제어기는 우선순위 어드레스 테이블에 기초하여 IS 메모리를 관리할 수 있다.
본 명세서에서, IS 메모리에 유지될 우선순위를 받을 호스트 데이터는 본 명세서에서 "우선순위 호스트 데이터"로 지칭된다. IS 메모리에 유지될 우선순위를 받을 것으로 특정되지 않은 다른 호스트 데이터는 본 명세서에서 "비-우선순위 호스트 데이터"로 지칭된다. 본 명세서에서, "우선순위 호스트 데이터"의 어드레스는 "우선순위 어드레스"로 지칭된다. 본 명세서에서, "비-우선순위 호스트 데이터"의 어드레스는 "비-우선순위 어드레스"로 지칭된다. 호스트 데이터 어드레스는 논리 어드레스일 수 있으며, 이 경우에 용어 "우선순위 논리 어드레스" 및 "비-우선순위 논리 어드레스"가 사용될 수 있다. 호스트 데이터의 어드레스는 논리 어드레스일 필요는 없다.
우선순위 호스트 데이터에 유지될 우선순위를 부여하는 것은 비-우선순위 호스트 데이터가 IS 메모리에 기록될 수 없음을 의미하지 않는다는 것에 유의한다. 메모리 제어기는 우선순위와 비-우선순위 둘 모두를 IS 메모리에 기록하고, 이어서 비-우선순위 호스트 데이터를 MS 메모리에 재배치할 수 있다. 메모리 제어기의 실시예들은 비-우선순위 호스트 데이터를 IS 메모리로부터 MS 메모리로 재배치한다. 메모리 제어기의 실시예들은 우선순위 호스트 데이터를 MS 메모리에 재배치하기보다는 (IS 메모리에서 공간이 이용가능한 정도까지) 우선순위 호스트 데이터를 IS 메모리에 유지한다. "더 오래된" 호스트 데이터가 우선순위 호스트 데이터이고 "더 새로운" 호스트 데이터가 비-우선순위 호스트 데이터인 경우, 다른 호스트 데이터보다 훨씬 더 긴 동안 IS 메모리에 있었던 호스트 데이터도 IS 메모리에 유지될 수 있다는 것에 유의한다. 이는 더 오래된 호스트 데이터를 재배치하여 더 새로운 호스트 데이터를 위한 공간을 만들 수 있는 종래의 FIFO 기법과 대조적이다.
본 기술의 특정 실시예들에 따르면, 우선순위 호스트 데이터를 인식하기 위해, 우선순위 호스트 데이터 애플리케이션은 사용자가 어느 호스트 데이터가 비휘발성 저장 디바이스의 IS 메모리에 유지될 우선순위를 받을 것인지를 특정하도록 허용하는 사용자 인터페이스를 제공한다. 사용자는 IS 메모리에 유지될 우선순위를 받을 파일 또는 프로그램을 선택할 수 있으며, 이는 언급된 바와 같이 MS 메모리보다 더 빠른 판독 성능을 갖는다. 이는 어떤 호스트 데이터가 IS 메모리에 유지될 우선순위를 받을 것인지를 선택할 때 판독 성능이 고려될 수 있게 할 수 있다. 일 실시예의 사용자 인터페이스는 사용자가 우선순위 호스트 데이터에 우선순위 가중치를 제공하도록 허용한다. 따라서, 사용자는 IS 메모리에 유지될 우선순위를 받되, IS 메모리에 모든 애플리케이션들에 대한 충분한 공간이 없는 경우, 상이한 우선순위 가중치들과 함께 받을 여러 소프트웨어 애플리케이션들을 가질 수 있다. 일 실시예에서, 우선순위 호스트 데이터 애플리케이션은 호스트 데이터의 사용을 모니터링하여, 어느 호스트 데이터가 IS 메모리에 유지될 우선순위를 받을 것인지를 인식한다.
일 실시예에서, 호스트 디바이스 드라이버에 대한 임의의 수정들의 필요는 없다. 예를 들어, 우선순위 호스트 데이터 애플리케이션은 우선순위 어드레스들을 메모리 제어기에 전송하라는 요청을 운영 체제(O/S) 애플리케이션 프로그래밍 인터페이스(API)에 전달할 수 있다. O/S API는 파일 시스템과 인터페이싱할 수 있고, 이는 디바이스 드라이버에게 메모리 제어기와 통신하도록 지시할 수 있다. 디바이스 드라이버는 메모리 제어기와 통신하기 위한 종래의 메모리 액세스 프로토콜에 따라 동작할 수 있다. 일부 컴퓨터 시스템들의 경우, 디바이스 드라이버들은 수정될 수 없거나, 적어도 디바이스 드라이버를 수정하는 것이 매우 어렵다는 것에 유의한다. 따라서, 우선순위 호스트 데이터 애플리케이션은, 디바이스 드라이버를 수정할 필요 없이, 메모리 제어기가 우선순위 어드레스들을 인식하게 하는 방식을 제공한다.
또한, 실시예들의 기술적 해결책은 기존의 비휘발성 메모리 액세스 프로토콜들과 호환가능하다. 예를 들어, 일 실시예에서, NVMe 프로토콜은 호스트 시스템이 비휘발성 저장 시스템에서 IS 메모리 및 MS 메모리에 액세스하도록 메모리 액세스 프로토콜로서 사용된다. 따라서, 일 실시예에서, 호스트 시스템은 NVMe 호스트 제어기(NVMe 디바이스 드라이버로도 또한 지칭됨)를 가지고, 메모리 시스템은 NVMe 메모리 제어기를 가지며, 이들은 NVMe 프로토콜과 각각 호환가능하다. 이 NVMe 예에서, 기술적 해결책의 실시예는 NVMe 프로토콜과 호환가능하다. NVMe는 메모리 액세스 프로토콜의 단지 일례인 것에 유의한다.
하기의 상세한 설명에서, 본 명세서의 일부를 형성하고 특정 예시적인 실시예들을 예시로서 도시된 첨부 도면들을 참조한다. 다른 실시예들이 이용될 수 있고, 기계적 및 전기적 변화들이 이루어질 수 있다는 것이 이해될 것이다. 따라서, 하기의 상세한 설명은 제한적인 의미로 이해되지 않아야 한다. 하기의 설명에서, 유사한 번호들 또는 참조 부호들은 전체에 걸쳐 유사한 부품들 또는 요소들을 지칭하기 위해 사용될 것이다.
본 명세서에 설명된 기술은 다양한 유형들의 비휘발성 메모리와 함께 사용될 수 있다. 일례는 3차원(3D) 비휘발성 메모리 디바이스이다. 그러나, 실시예들은 또한 2차원(2D) 비휘발성 메모리 디바이스에서 실시될 수 있다. 도 1a는 3D 적층형 비휘발성 메모리 디바이스(100) 내의 블록들의 세트의 사시도이다. 비휘발성 메모리 디바이스(100)는 또한 본 명세서에서 비휘발성 메모리 시스템(100)으로, 또는 더 간결하게 메모리 시스템(100)으로 지칭될 수 있다. 비휘발성 메모리 디바이스(100)는 기판(101)을 포함한다. 기판 상에는, 메모리 셀들(저장 요소들)의 예시적인 블록들(BLK0, BLK1, BLK2, BLK3), 및 블록들에 의한 사용을 위한 회로부를 갖는 주변 영역(104)이 있다. 예를 들어, 회로부는 블록들의 제어 게이트 층들에 접속될 수 있는 전압 드라이버들(105)을 포함할 수 있다. 하나의 접근법에서, 블록들 내의 공통 높이에 있는 제어 게이트 층들이 공통적으로 구동된다. 기판(101)은 또한, 회로부들의 신호들을 반송하기 위한 전도성 경로들로 패턴화되는 하나 이상의 하부 금속 층들과 함께 블록들 아래의 회로부들을 지지할 수 있다. 블록들은 메모리 디바이스의 중간 영역(102)에 형성된다. 메모리 시스템의 상부 영역(103)에는, 하나 이상의 상부 금속 층들이 회로부의 신호들을 반송하기 위한 전도성 경로들로 패턴화된다. 각각의 블록은 메모리 셀들의 적층형 영역을 포함하며, 여기서 스택의 교번하는 레벨들은 제어 게이트 층들을 표현한다. 하나의 가능한 접근법에서, 공통 높이에서의 각각의 블록의 제어 게이트 층들은 서로 그리고 전압 드라이버에 접속된다. 일례로서 4개의 블록들이 도시되어 있지만, 2개 이상의 블록들이 사용되어, x-방향 및/또는 y-방향으로 연장될 수 있다.
x-방향에서의 평면의 길이는 워드 라인들로의 신호 경로들이 하나 이상의 상부 금속 층들로 연장되는 방향(예를 들어, 워드 라인 또는 드레인 측 선택 게이트(SGD) 라인 방향)을 표현할 수 있고, y-방향에서의 평면의 폭은 비트 라인들로의 신호 경로들이 하나 이상의 상부 금속 층들로 연장되는 방향(예를 들어, 비트 라인 방향)을 표현한다. z-방향은 메모리 디바이스의 높이를 표현한다.
도 1b는 도 1a의 3D 적층형 비휘발성 메모리 디바이스와 같은 비휘발성 메모리 디바이스(100)의 블록도이다. 블록도는 또한 2D 비휘발성 메모리 디바이스에 대해 사용될 수 있다. 호스트 시스템(140)은 하나 이상의 호스트 프로세서들(150) 및 호스트 메모리(160)를 포함한다. 호스트 메모리(160)는 정적 랜덤 액세스 메모리(SRAM) 및 동적 랜덤 액세스 메모리(DRAM)을 포함할 수 있지만, 이에 제한되지 않는다. 커맨드들 및 데이터가 인터페이스(예를 들어, 데이터 버스)(106)를 통해 호스트 시스템(140)과 비휘발성 메모리 제어기(122) 사이에서, 그리고 라인들(118)을 통해 메모리 제어기(122)와 하나 이상의 메모리 다이(108) 사이에서 전달된다. 인터페이스(106)는 또한 통신 인터페이스로 지칭될 수 있다. "비휘발성 메모리 제어기"(122)는 본 명세서에서 더 간결하게 "메모리 제어기" 또는 "제어기"로 지칭될 수 있다는 것에 유의한다.
호스트 시스템(140)과 메모리 제어기(122) 사이의 인터페이스(106)는 임의의 적합한 인터페이스일 수 있다. 인터페이스(106)는 호스트(140)와 메모리 시스템(100) 사이의 기계적 및/또는 전기적 접속을 포함할 수 있다. 인터페이스(106)에 대한 예들은 시큐어 디지털(SD), 멀티미디어카드(MMC), 임베디드 멀티미디어카드(eMMC), 범용 직렬 버스(USB), 직렬 고급 기술 결합(SATA), 파이버 채널(Fibre Channel), 소형 컴퓨터 체계 인터페이스(SCSI), 주변 컴포넌트 인터페이스(PCI), 및 PCI 익스프레스(PCIe)를 포함하지만, 이에 제한되지 않는다. 일 실시예에서, 인터페이스(106)는 주변 컴포넌트 상호접속 익스프레스(PCIe) 버스를 포함한다. 일 실시예에서, 메모리 시스템(100) 및 호스트 시스템(140)은 비휘발성 메모리 익스프레스(NVMe) 프로토콜을 이용하여 PCIe 버스를 통해 통신한다. NVMe는 호스트 시스템(140)과 비휘발성 메모리 디바이스(100) 사이에 PCIe 버스를 사용할 때 부착된 비휘발성 저장소에 액세스하는 데 사용될 수 있는 논리 디바이스 인터페이스이다. 그러나, 논리 디바이스 인터페이스가 NVMe로 제한되지 않는다는 것에 유의한다. 다른 가능한 논리 디바이스 인터페이스들은 고급 호스트 컨트롤러 인터페이스(AHCI), SATA, SATA 익스프레스, MMC, eMMC, USB, 시리얼 부착 SCSI(SAS), 파이버 채널 프로토콜(FCP), 및 유니버설 플래시 스토리지(UFS)를 포함하지만, 이에 제한되지 않는다.
일 실시예에서, 비휘발성 메모리 시스템(100)은 카드 기반 시스템, 예컨대, SD(시큐어 디지털) 또는 마이크로 시큐어 디지털(micro-SD) 카드일 수 있다. 대안적인 실시예에서, 비휘발성 메모리 시스템(100)는 내장형 비휘발성 메모리 디바이스의 일부일 수 있다. 예를 들어, 비휘발성 메모리 시스템(100)은, 예컨대, 개인용 컴퓨터에 설치된 솔리드-스테이트 디스크(SSD) 드라이브의 형태로, 호스트 시스템(140) 내에 내장될 수 있다.
비휘발성 메모리 디바이스(100)는 하나 이상의 메모리 다이(108)를 포함할 수 있다. 도 1a의 블록들의 세트는 하나의 메모리 다이(108) 상에 있을 수 있다. 메모리 다이(108)는 메모리 셀들의 메모리 구조물(126), 예컨대, 메모리 셀들의 어레이, 제어 회로부(110), 및 판독/기록 회로들(128)을 포함한다. 3D 구성에서, 메모리 구조물은 도 1a의 블록들을 포함할 수 있다. 메모리 구조물(126)은 로우(row) 디코더(124)를 통해 워드 라인들에 의해 그리고 컬럼(column) 디코더(138)를 통해 비트 라인들에 의해 어드레싱가능(addressable)하다. 판독/기록 회로들(128)은 다수의 감지 블록들(SB1, SB2, ..., SBp)(감지 회로부)을 포함하고 메모리 셀들의 페이지가 병렬로 판독되거나 프로그래밍될 수 있게 한다. 전형적으로, 메모리 제어기(122)는 하나 이상의 메모리 다이(108)과 동일한 비휘발성 메모리 디바이스(100)(예를 들어, 착탈식 저장 카드) 내에 포함된다.
메모리 구조물(126) 내의 다수의 메모리 요소들은 그들이 직렬로 접속되도록 또는 각각의 요소가 개별적으로 액세스가능하도록 구성될 수 있다. 비제한적인 예로서, NAND 구성의 플래시 메모리 시스템들(NAND 메모리)은 전형적으로 직렬로 접속된 메모리 요소들을 포함한다. NAND 스트링은 메모리 셀들 및 선택 게이트 트랜지스터들을 포함하는 직렬-접속된 트랜지스터들의 세트의 일례이다.
NAND 메모리 어레이는 어레이가 다수의 메모리 스트링들로 이루어지도록 구성될 수 있으며, 여기서 스트링은 단일 비트 라인을 공유하고 한 그룹으로서 액세스되는 다수의 메모리 요소들로 이루어진다. 대안적으로, 메모리 요소들은 각각의 요소가 개별적으로 액세스가능하도록 구성될 수 있다 - 예를 들어, NOR 메모리 어레이. NAND 및 NOR 메모리 구성들은 예시적인 것이고, 메모리 요소들은 달리 구성될 수 있다.
NAND 플래시 메모리에 더하여 다른 유형의 비휘발성 메모리가 또한 사용될 수 있다. 반도체 메모리 디바이스들은 동적 액세스 메모리("DRAM") 또는 정적 랜덤 액세스 메모리("SRAM") 디바이스들과 같은 휘발성 메모리 디바이스들, 저항성 랜덤 액세스 메모리("ReRAM"), 전기적으로 소거 가능한 프로그램 가능 판독 전용 메모리("EEPROM"), 플래시 메모리(이는 또한 EEPROM의 서브세트로 간주될 수 있음), 강유전성 랜덤 액세스 메모리("FRAM"), 및 자기저항성 랜덤 액세스 메모리("MRAM"), 상변화 메모리(예를 들어, PCRAM)와 같은 비휘발성 메모리 디바이스들, 및 정보를 저장할 수 있는 다른 반도체 요소들을 포함한다. 메모리 디바이스의 각각의 유형은 상이한 구성을 가질 수 있다. 예를 들어, 플래시 메모리 디바이스들은 NAND 또는 NOR 구성으로 구성될 수 있다.
메모리 요소들은 수동 요소 및/또는 능동 요소로부터 임의의 조합으로 형성될 수 있다. 비제한적인 예로서, 수동 반도체 메모리 요소들은 ReRAM 디바이스 요소들을 포함하며, 이는 일부 실시예들에서, 안티-퓨즈(anti-fuse) 또는 상변화 재료와 같은 저항성 스위칭 저장 요소, 및 선택적으로, 다이오드 또는 트랜지스터와 같은 스티어링 요소(steering element)를 포함한다. 상변화 재료는 칼코게나이드 재료를 포함할 수 있다. 일 실시예는 GeTe - Sb2Te3 초격자를 사용하여, 레이저 펄스(또는 다른 광원으로부터의 광 펄스)로 게르마늄 원자의 배위(co-ordination) 상태를 변화시킴으로써 비-열적 상변화를 달성한다. 따라서, 프로그래밍의 도즈(dose)들은 레이저 펄스들이다. 메모리 셀들은 메모리 셀들이 광을 수신하는 것을 차단함으로써 억제될 수 있다. 본 명세서에서 "펄스"의 사용은 사각 펄스를 필요로 하는 것이 아니라 사운드, 전류, 전압, 광, 또는 기타 파의 (연속적 또는 불연속적) 진동 또는 버스트(burst)를 포함한다는 것에 유의한다. 또한, 비제한적인 예로서, 능동 반도체 메모리 요소들은 EEPROM 및 플래시 메모리 디바이스 요소들을 포함하며, 이는 일부 실시예들에서, 플로팅 게이트, 전도성 나노입자들, 또는 전하 저장 유전체 재료와 같은, 전하 저장 영역을 포함하는 요소들을 포함한다.
메모리 구조물(126)은 2차원(2D) 또는 3차원(3D)일 수 있다. 메모리 구조물(126)은 메모리 요소들(메모리 셀들로도 또한 지칭됨)의 하나 이상의 어레이들을 포함할 수 있다. 2차원 메모리 구조물에서, 반도체 메모리 요소들은 단일 평면 또는 단일 메모리 디바이스 레벨로 배열된다. 전형적으로, 2차원 메모리 구조물에서, 메모리 요소들은, 메모리 요소들을 지지하는 기판의 주 표면에 실질적으로 평행하게 연장되는 평면(예컨대, x-y 방향 평면) 내에 배열된다. 기판은 메모리 요소들의 층이 상부에 또는 내부에 형성되는 웨이퍼일 수 있거나, 또는 그것은 메모리 요소들이 형성된 후에 메모리 요소들에 부착되는 캐리어 기판일 수 있다. 비제한적인 예로서, 기판은 실리콘과 같은 반도체를 포함할 수 있다.
3차원 메모리 어레이는 메모리 요소들이 다수의 평면들 또는 다수의 메모리 디바이스 레벨들을 점유하도록 배열되며, 그에 의해 3차원으로(즉, x, y 및 z 방향들로 - 여기서, z 방향은 기판의 주 표면에 실질적으로 수직이고, x 및 y 방향들은 기판의 주 표면에 실질적으로 평행함 -) 구조를 형성한다.
메모리 구조물은 다수의 메모리 레벨들이, 개재된 기판들 없이, 웨이퍼와 같은 단일 기판 위에 형성되는 (그리고 그 내에는 형성되지 않는) 모놀리식 3차원 메모리 구조물을 포함할 수 있다. 메모리 구조물은 실리콘 기판 위에 활성 영역이 배치된 메모리 셀들의 어레이들의 하나 이상의 물리적 레벨에 모놀리식 방식으로 형성되는 임의의 유형의 비휘발성 메모리를 포함할 수 있다. 메모리 구조물은, 연관된 회로부가 기판 위에 있든 기판 내에 있든, 메모리 셀들의 동작과 연관된 회로부를 갖는 비휘발성 메모리 디바이스 내에 있을 수 있다.
전형적으로, 모놀리식 3차원 메모리 어레이에서, 하나 이상의 메모리 디바이스 레벨들이 단일 기판 위에 형성된다. 선택적으로, 모놀리식 3차원 메모리 어레이는 또한, 적어도 부분적으로 단일 기판 내에 하나 이상의 메모리 층들을 가질 수 있다. 비제한적인 예로서, 기판은 실리콘과 같은 반도체를 포함할 수 있다. 모놀리식 3차원 어레이에서, 어레이의 각각의 메모리 디바이스 레벨을 구성하는 층들은 전형적으로 어레이의 하부 메모리 디바이스 레벨들의 층들 상에 형성된다. 그러나, 모놀리식 3차원 메모리 어레이의 인접한 메모리 디바이스 레벨들의 층들은 공유될 수 있거나 또는 메모리 디바이스 레벨들 사이에 개재하는 층들을 가질 수 있다.
비제한적인 예로서, 3차원 메모리 구조물은 다수의 2차원 메모리 디바이스 레벨들의 스택으로서 수직으로 배열될 수 있다. 다른 비제한적인 예로서, 3차원 메모리 어레이는 각각의 컬럼이 다수의 메모리 요소들을 갖는 다수의 수직 컬럼들(예를 들어, 기판의 주 표면에 실질적으로 수직으로, 즉, y 방향으로 연장된 컬럼들)로서 배열될 수 있다. 컬럼들은 2차원 구성으로, 예컨대, x-y 평면 내에 배열될 수 있어서, 요소들이 다수의 수직으로 적층된 메모리 평면들 상에 있는, 메모리 요소들의 3차원 배열을 생성할 수 있다. 3차원의 메모리 요소들의 다른 구성들이 또한 3차원 메모리 어레이를 구성할 수 있다.
비제한적인 예로서, 3차원 NAND 메모리 어레이에서, 메모리 요소들은 함께 커플링되어, 단일 수평(예컨대, x-y) 메모리 디바이스 레벨 내의 NAND 스트링을 형성할 수 있다. 대안적으로, 메모리 요소들은 함께 커플링되어, 다수의 수평 메모리 디바이스 레벨들을 가로질러 가는 수직 NAND 스트링을 형성할 수 있다. 일부 NAND 스트링들이 메모리 요소들을 단일 메모리 레벨로 포함하는 한편 다른 스트링들은 다수의 메모리 레벨들을 통하여 걸쳐 있는 메모리 요소들을 포함하는 다른 3차원 구성들이 구상될 수 있다.
또 한편으로는, 2차원 어레이들은 별도로 형성되고 이어서 함께 패키징되어 다수의 메모리 층들을 갖는 비-모놀리식 메모리 디바이스를 형성할 수 있다. 예를 들어, 비-모놀리식 적층된 메모리들은, 별개의 기판들 상에 메모리 레벨들을 형성하고 이어서 메모리 레벨들을 서로 적층함으로써 구성될 수 있다. 기판들은 적층 이전에 메모리 디바이스 레벨들로부터 박화되거나 제거될 수 있지만, 메모리 디바이스 레벨들은 초기에 별개의 기판들 위에 형성되기 때문에, 생성된 메모리 어레이들은 모놀리식 3차원 메모리 어레이들이 아니다. 또한, 다수의 2차원 메모리 어레이들 또는 3차원 메모리 어레이들(모놀리식 또는 비-모놀리식)이 별개의 칩들 상에 형성되고 이어서 함께 패키징되어 적층형 칩 메모리 디바이스를 형성할 수 있다.
당업자는 이러한 기법이 설명된 2차원 및 3차원의 예시적인 구조물들로 제한되는 것이 아니라 본 명세서에 설명된 바와 같은 그리고 당업자에 의해 이해되는 바와 같은 본 기법의 사상 및 범주 내의 모든 관련된 메모리 구조물들을 포함한다는 것을 인식할 것이다.
연관된 회로부가 전형적으로 메모리 요소들의 동작을 위해 그리고 메모리 요소들과의 통신을 위해 요구된다. 비제한적인 예로서, 메모리 디바이스들은 프로그래밍 및 판독과 같은 기능들을 달성하기 위해 메모리 요소들을 제어하고 구동하는 데 사용되는 회로부를 가질 수 있다. 이러한 연관된 회로부는 메모리 요소들과 동일한 기판 상에 그리고/또는 별개의 기판 상에 있을 수 있다. 예를 들어, 메모리 판독-기록 동작들을 위한 메모리 제어기는 별개의 제어기 칩 상에 그리고/또는 메모리 요소들과 동일한 기판 상에 위치될 수 있다.
제어 회로부(110)는 판독/기록 회로들(128)과 협력하여 메모리 구조물(126)에 대한 메모리 동작들을 수행하며, 상태 머신(112), 온-칩 어드레스 디코더(114), 및 전력 제어 모듈(116)을 포함한다. 상태 머신(112)은 메모리 동작들의 칩-레벨 제어를 제공한다. 메모리 셀들의 상이한 로우들 또는 다른 그룹들에 대한 프로그래밍 파라미터들과 같은, 메모리 디바이스를 동작시키기 위한 파라미터들을 위한 저장 영역(113)이 제공될 수 있다. 이들 프로그래밍 파라미터들은 비트 라인 전압들을 포함하고 전압들을 검증할 수 있다.
온-칩 어드레스 디코더(114)는 호스트 또는 메모리 제어기에 의해 사용되는 어드레스와 디코더들(124, 138)에 의해 사용되는 하드웨어 어드레스 사이에 어드레스 인터페이스를 제공한다. 전력 제어 모듈(116)은 메모리 동작들 동안 워드 라인들 및 비트 라인들에 공급되는 전력 및 전압들을 제어한다. 이는 3D 구성의 워드 라인 층들(WLL들), SGS 및 SGD 선택 게이트들 및 소스 라인들을 위한 드라이버들을 포함할 수 있다. 감지 블록들은 하나의 접근법에서 비트 라인 드라이버들을 포함할 수 있다. 소스 측 선택 게이트(SGS)는 NAND 스트링의 소스-단에 있는 게이트 트랜지스터이고, 드레인 측 선택 게이트(SGD)는 NAND 스트링의 드레인-단에 있는 트랜지스터이다.
일부 구현예들에서, 컴포넌트들 중 일부가 조합될 수 있다. 다양한 설계들에서, 메모리 구조물(126) 이외의 컴포넌트들 중 하나 이상은 (단독으로 또는 조합하여) 본 명세서에 설명된 동작들을 수행하도록 구성된 하나 이상의 제어 회로들로서 고려될 수 있다. 예를 들어, 하나 이상의 제어 회로들은 제어 회로부(110), 상태 머신(112), 디코더들(114/124/138), 전력 제어 모듈(116), 감지 블록들(SB1, SB2,...,SBp), 판독/기록 회로들(128), 메모리 제어기(122), 프로세서(122c) 등 중 임의의 하나 또는 이들의 조합을 포함할 수 있다.
메모리 제어기(122)는 프로세서(122c) 및 판독 전용 메모리(ROM)(122a) 및 RAM(122b)과 같은 저장 디바이스들(메모리)을 포함할 수 있다. RAM(122b)은 SRAM 및 DRAM일 수 있지만, 이에 제한되지 않는다. 저장 디바이스들은 명령어들의 세트와 같은 코드를 포함하고, 프로세서는 명령어들의 세트를 실행하여 본 명세서에서 설명되는 기능을 제공하도록 동작가능하다. 대안적으로 또는 추가적으로, 프로세서는 하나 이상의 워드 라인들 내의 메모리 셀들의 예약된 영역과 같은, 메모리 구조물의 저장 디바이스 영역(126a)으로부터의 코드에 액세스할 수 있다.
코드는 예컨대 프로그래밍, 판독 및 소거 동작들을 위해 메모리 구조물(126)에 액세스하기 위해 메모리 제어기(122)에 의해 사용된다. 코드는 부트 코드 및 제어 코드(예를 들어, 명령어들의 세트)를 포함할 수 있다. 부트 코드는 부팅 또는 시동 프로세스 동안 메모리 제어기를 초기화하고 메모리 제어기가 메모리 구조물에 액세스할 수 있게 하는 소프트웨어이다. 코드는 하나 이상의 메모리 구조물들을 제어하기 위해 메모리 제어기에 의해 사용될 수 있다. 전력공급 시, 프로세서(122c)는 실행을 위해 ROM(122a) 또는 저장 디바이스 영역(126a)으로부터 부트 코드를 페치(fetch)하고, 부트 코드는 시스템 컴포넌트들을 초기화하고 제어 코드를 RAM(122b)에 로딩한다. 일단 제어 코드가 RAM(122b)에 로딩되면, 그것은 프로세서(122c)에 의해 실행된다. 제어 코드는 메모리를 제어 및 할당하고, 명령어들의 프로세싱을 우선순위화하고, 입력 및 출력 포트들을 제어하는 것과 같은 기본 작업들을 수행하기 위한 드라이버들을 포함한다.
호스트 메모리(160)는 애플리케이션(162), 우선순위 호스트 데이터 애플리케이션(164), O/S API들(166), 파일 시스템(168), 및 하나 이상의 디바이스 드라이버들(170)을 저장하는 데 사용될 수 있다. 참조 번호 166은 본 명세서에서 일반적인 O/S API들과 특정의 O/S API 둘 모두를 지칭하기 위해 사용될 것임에 유의한다. 애플리케이션들(162), 우선순위 호스트 데이터 애플리케이션(164), O/S API들(166), 파일 시스템(168), 및 하나 이상의 디바이스 드라이버들(170)의 전부 또는 일부분이 비휘발성 저장소(126)에 저장될 수 있다는 것에 유의한다. 또한, 호스트 메모리(160)는 휘발성 메모리를 포함할 수 있으며, 전원이 꺼질 때, 애플리케이션들(162), 우선순위 호스트 데이터 애플리케이션(164), O/S API들(166), 및 파일 시스템(168)이 호스트 메모리(160) 내에 반드시 유지될 필요는 없다는 것에 유의한다. 호스트(140)는 애플리케이션들(162), 우선순위 호스트 데이터 애플리케이션(164), O/S API들(166), 파일 시스템(168), 및/또는 디바이스 드라이버들(170) 중 하나 이상을 비휘발성 저장소(126)로부터 호스트 메모리(160)에 로딩하기 위한 부트 코드를 포함할 수 있다.
도 2는 호스트 디바이스(140)에 접속된(또는 호스트 디바이스(140) 내에 내장된) 비휘발성 저장 디바이스(100)의 일 실시예를 도시하는 블록도이며, 호스트 디바이스(140) 및/또는 저장 디바이스(100)는 후술되는 본 기술의 실시예들을 구현할 수 있다. 비휘발성 저장 디바이스(100)는 더 간결하게 "저장 디바이스"로 지칭될 수 있다. 호스트 디바이스(140)는 또한 "호스트 시스템"으로 지칭될 수 있다. 도 2를 참조하면, 호스트 디바이스(140)는 기록 및 판독 커맨드들을 발행함으로써 저장 디바이스(100)에 데이터를 저장하고 그로부터 데이터를 검색한다. 저장 디바이스(100)는 호스트 디바이스(140) 내에 내장될 수 있거나, 카드, 범용 직렬 버스(USB) 드라이브, 또는 기계적 및 전기적 커넥터를 통해 호스트 디바이스(140)에 제거가능하게 접속되는 솔리드 스테이트 디스크(SSD)와 같은 다른 제거가능한 드라이브 형태로 존재할 수 있다. 호스트 디바이스(140)는 개인용 컴퓨터, 스마트폰, 개인 디지털 어시스턴트(PDA), 서버, 셋톱 박스 등과 같은 다수의 고정 또는 휴대용 데이터 생성 디바이스들 중 임의의 것일 수 있다. 보다 일반적으로, 호스트 디바이스(140)는 스마트폰, PDA, 랩톱, 서버, 셋톱 박스 등의 기능들을 수행하는 호스트 로직을 포함할 수 있다. 구체적으로 도시되지 않지만, 호스트는 판독 전용 메모리(ROM)를 포함하고/하거나 그와 통신할 수 있다.
더 간결하게 호스트(140)로 지칭될 수 있는 호스트 디바이스(140)는 하나 이상의 애플리케이션 프로그램들(162)을 실행하는 하나 이상의 프로세서들(예컨대, 도 1b의 프로세서(들)(150))을 포함할 수 있다. 애플리케이션 프로그램들(162)은, 데이터가 저장 디바이스(100) 내에 저장되거나 그로부터 검색될 때, 파일 시스템(168)과 하나 이상의 운영 체제 애플리케이션 프로그래밍 인터페이스들(API들)(166)을 통해 통신한다. 파일 시스템(168)은 프로세서(들)(150) 상에서 실행되는 소프트웨어 모듈일 수 있고 저장 디바이스(100) 내의 파일들을 관리한다. 파일 시스템(168)은 논리 어드레스 공간 내의 호스트 데이터의 클러스터들을 관리한다. 파일 시스템(168)에 의해 실행되는 공통 동작들은 데이터를 생성하고, 열고, 기록(저장)하고, 데이터를 판독(검색)하고, 파일 내의 특정 위치를 찾고, 파일들을 이동, 복사, 및 삭제하는 동작들을 포함한다. 파일 시스템(168)은 회로부, 소프트웨어, 또는 회로부와 소프트웨어의 조합일 수 있다. 호스트 디바이스(140)는 저장 디바이스(100) 내에 저장된 파일들을 어드레싱하기 위해 파일 시스템(168)을 사용하며, 이는 저장 디바이스(100)의 비휘발성 메모리(126)에 데이터를 기록하고 그로부터 데이터를 판독하는 것을 포함할 수 있다. 호스트(140)에 의해 사용될 수 있는 파일 시스템들의 예시적인 유형들에는 FAT32, exFAT, ext2/3/4, HFS+, 및 NTFS가 포함되지만, 이에 제한되지 않는다. 파일 시스템(168)은 호스트(140)의 프로세서(들)(150)에 의해 실행가능한 독립형 칩 또는 소프트웨어일 수 있다. 파일 할당 테이블(FAT)과 같은 파일 시스템 데이터 구조물은 저장 디바이스(100)의 메모리(예를 들어, 126)에 저장될 수 있다. 호스트(140)는 파일 시스템 데이터 구조물을 이용하여 호스트(140)에 의해 데이터에 할당된 모든 논리 블록 어드레스들(LBA들)에 대한 논리 어드레스 범위를 유지할 수 있다.
호스트(140) 상의 하나 이상의 저장 디바이스 드라이버(들)(170)는 호스트(140)와 저장 디바이스(100) 사이의 통신 인터페이스(106)를 통한 송신을 위해 파일 시스템(168)으로부터의 명령어들을 변환할 수 있다. 통신 인터페이스는 호스트(140)와 메모리 디바이스(100) 사이의 전기적 및 기계적 인터페이스를 포함한다. 전기적 및 기계적 인터페이스는 보안 디지털(SD), 멀티미디어카드(MMC), 임베디드 멀티미디어카드(eMMC), 범용 직렬 버스(USB), 직렬 고급 기술 부착(SATA), 소형 컴퓨터 시스템 인터페이스(SCSI), 주변 컴포넌트 인터페이스(PCI), 및 PCI 익스프레스(PCIe)와 같은 다수의 알려진 인터페이스들 중 임의의 것을 포함할 수 있다.
호스트 드라이버들(170)은 또한 메모리 디바이스(100) 내의 비휘발성 저장소(126)에 액세스하기 위한 로직 디바이스 인터페이스의 호스트 측을 구현할 수 있다. 논리 디바이스 인터페이스는 때때로 호스트 제어기로 지칭된다. 호스트 드라이버들(170)은 비휘발성 메모리 익스프레스(NMVe), 고급 호스트 제어기 인터페이스(AHCI), SD, USB, MMC, 및 eMMC를 포함할 수 있지만, 이에 제한되지 않는다. 아래에서 논의될 메모리 제어기(122)는 논리 디바이스 인터페이스의 비휘발성 저장 디바이스 측을 구현할 수 있다는 것에 유의한다.
비휘발성 메모리(126)는 중간 저장소(IS) 메모리(132)로 지정되는 일부분 및 메인 저장소(MS) 메모리(134)로 지정되는 다른 부분을 포함한다. IS 메모리(132)는 비휘발성 메모리 셀들의 제1 그룹을 포함한다. MS 메모리(134)는 비휘발성 메모리 셀들의 제2 그룹을 포함한다. 도 2에 도시된 바와 같이, 호스트 데이터(130)는 IS 메모리 및 MS 메모리에 저장될 수 있다. 하나의 옵션은, 메모리 제어기(122)가 호스트 데이터를 저장하라는 호스트(140)로부터의 요청에 응답하여 우선순위 호스트 데이터 및 비-우선순위 호스트 데이터 둘 모두를 IS 메모리(132)에 저장하는 것이다. 어느 시점에서, 일 실시예에서, 메모리 제어기(122)는 IS 메모리(132)로부터 MS 메모리(134)로 비-우선순위 호스트 데이터를 재배치한다. 일부 경우들에서, 메모리 제어기(122)는 비-우선순위 호스트 데이터를 저장하라는 호스트(140)로부터의 요청에 응답하여, 비-우선순위 호스트 메모리를 MS 메모리(134)에 직접 기록할 수 있다.
비휘발성 메모리(126)는 관리 테이블들(142) 및 우선순위 어드레스 테이블(144)을 저장할 수 있다. 이하에서 더 상세히 설명되는 바와 같이, 본 기술의 특정 실시예들에 따르면, 메모리 제어기(122)는 호스트 데이터가 IS 메모리(132)에 유지될 것인지 또는 MS 메모리(134)에 재배치될 것인지 여부를 관리하기 위해 우선순위 어드레스 테이블(144)을 사용할 수 있다. 일 실시예에서, 메모리 제어기(122)는, 우선순위 어드레스 테이블(144)에서의 우선순위 어드레스들에 기초하여, IS 메모리(132)로부터 MS 메모리(134)로 데이터를 재배치(즉, 전송)한다. 일 실시예에서, 메모리 제어기(122)는 우선순위 어드레스 테이블(144)에 기초하여 가비지 수집을 수행한다. 가비지 수집은 IS 메모리(132) 내의 하나의 위치로부터 IS 메모리(132) 내의 다른 위치로 우선순위 호스트 데이터를 이동시키는 것 뿐만 아니라, IS 메모리(132)로부터 MS 메모리(134)로 비-우선순위 호스트 데이터를 이동시키는 것을 포함할 수 있다.
일 실시예에서, 관리 테이블들(142)은 하나 이상의 L2P(논리-물리 맵핑(logical to physical mapping)) 테이블들 및 하나 이상의 P2L(물리-논리 맵핑(physical to logical mapping)) 테이블들을 포함한다. 제어기(122)는 논리 블록 어드레스들(LBA들)을 물리 블록 어드레스들(PBA들)에 맵핑하기 위해 관리 테이블들(142)을 사용할 수 있다. 그러한 테이블들(142)은 LBA들을 PBA들에 직접 맵핑하는 데 사용될 수 있거나, 또는 LBA들은 PBA들에 매핑되는 중간 또는 가상 블록 어드레스들에 맵핑될 수 있다. 다른 변경예들이 또한 가능하다. 일부 실시예들에서, 호스트 데이터(130)는 블록들(예를 들어, 블록 0, 블록 1, 블록 2, ...)에 저장된다. 일부 예시적인 실시예들에서, 비휘발성 메모리 셀들의 블록은 소거 유닛이다. 일부 실시예들에서, 블록은 공통 비트 라인들 및 워드 라인들에 의해 그룹화된 복수의 메모리 셀들을 나타낸다. 통신 링크(106)를 통해 호스트(140)로부터 저장 디바이스(100)로 전송되는 명령어들 또는 기록 커맨드들과 같은 커맨드들은 논리 블록 어드레스들(LBA들)을 포함할 수 있다. 대조적으로, 통신 채널(118)을 통해 전송되는 명령어들 또는 커맨드들은 물리적 블록 어드레스들(PBA)을 포함할 수 있다.
도 2에 도시된 바와 같이, 호스트 데이터(130)는 IS 메모리(132) 및 MS 메모리(134) 둘 모두에 저장된다. 호스트 데이터(130)의 개별 블록들(예를 들어, 블록 0, 블록 1, 블록 2, ...)은 동작 목적들을 위해 메모리 셀들의 페이지들로 분할될 수 있다. 블록들 각각의 메모리 셀들은 예를 들어 각각 8개의 페이지들(P0 내지 P7)로 분할될 수 있다. 대안적으로, 각각의 블록 내에 메모리 셀들의 16 페이지들, 32 페이지들 또는 더 많은 페이지들이 있을 수 있다. 페이지는 한 번에 프로그래밍되거나 판독되는 최소량의 데이터를 포함하는, 블록 내의 데이터 프로그래밍 및 판독의 단위이다. 그러나, 메모리 시스템 동작 평행성을 증가시키기 위해, 2개 이상의 블록들 내의 그러한 페이지들은 메타페이지들에 논리적으로 연결될 수 있다. 메타페이지는 예를 들어 4개의 블록들 각각으로부터의 하나의 물리적 페이지로 형성될 수 있다(예를 들어, 메타페이지는 예를 들어 4개의 블록들 각각의 페이지(P2)를 포함할 수 있지만, 메타페이지의 페이지들이 반드시 블록들 각각 내에 동일한 상대적 위치를 가질 필요는 없다). 메타페이지는 프로그래밍의 최대 단위일 수 있다.
소정 실시예들에 따르면, IS 메모리(132)는 단일 비트 데이터가 메모리 셀당 저장되는 단일-레벨 셀(SLC) 메모리를 포함할 수 있으며, 이는 또한 저장 요소 또는 영역으로 지칭될 수 있다. 보다 구체적으로, SLC 메모리는 2개의 가능한 상태들(0 또는 1) 중 하나를 가질 수 있는 하나의 비트를 저장하기 위해 2개의 검출가능한 레벨들의 전하를 저장하도록 동작될 수 있다. IS 메모리(132)는 대안적으로 또는 추가적으로 ReRAM, 상변화 메모리, 또는 자기 RAM을 포함하는 영구적 바이트 단위로 어드레싱가능한 메모리의 형태를 포함할 수 있다. 대조적으로, 덜 고가의 MS 메모리(134)는 2개 이상의 비트가 메모리 셀당 저장되는 다중-레벨 셀(MLC) 메모리를 포함할 수 있다. 이 용어가 본 명세서에 사용되는 바와 같이, MLC 메모리는 2개, 3개 또는 4개 비트의 데이터, 또는 잠재적으로 심지어 4개 초과 비트의 데이터가 메모리 셀당 저장되는 메모리 셀들을 포함할 수 있다. 따라서, 이 용어가 본 명세서에 사용되는 바와 같이, 용어 MLC 메모리는 또한 삼중-레벨 셀(TLC) 메모리 및 사중-레벨 셀(QLC) 메모리를 포괄한다. 예를 들어, MLC 메모리는 4개의 상태들을 저장하는 데 사용될 수 있는 4개의 검출가능한 레벨들의 전하를 저장하도록 작동될 수 있고, 2개 비트의 데이터를 보유할 수 있다: 00, 01, 10 또는 11. 다른 예로서, MLC 메모리가 TLC 메모리인 경우, 이는 8개의 상태들을 저장하는 데 사용될 수 있는 8개의 검출가능한 레벨들의 전하를 저장하도록 동작될 수 있고, 3개 비트의 데이터를 보유할 수 있다: 000, 001, 010, 011, 100, 101, 110 또는 111. 또 다른 예로서, MLC 메모리가 QLC 메모리인 경우, 이는 16개의 상태들을 저장하는 데 사용될 수 있는 16개의 검출가능한 레벨들의 전하를 저장하도록 동작될 수 있고 4 비트의 데이터를 보유할 수 있다: 0000, 0001, 0010, 0011, 0100, 0101, 0110, 0111, 1000, 1001, 1010, 1011, 1100, 1101, 1110, 또는 1111. IS 메모리(132)는 본 명세서에서 더 간결하게 IS(132)로 지칭될 수 있다. 유사하게, MS 메모리(134)는 본 명세서에서 더 간결하게 MS 메모리(134)로 지칭될 수 있다.
여전히 도 2를 참조하면, 일 실시예에서, IS 메모리(132)는 MS 메모리(134)의 판독 레이턴시보다 더 낮은 판독 레이턴시를 갖는다. 그러한 실시예에서, IS 메모리(132)에서는 MS 메모리(134)에서 판독될 수 있는 것보다 더 빠른 속도로 판독될 수 있다. 일 실시예에서, IS 메모리(132)는 MS 메모리(134)의 기록 레이턴시보다 더 낮은 기록 레이턴시를 갖는다. 그러한 실시예에서, IS 메모리(132)에는 MS 메모리(134)에 기록될 수 있는 것보다 더 빠른 속도로 기록될 수 있다. 예를 들어, IS 메모리(132)는 셀당 1 비트로 프로그래밍되는 플래시 메모리 셀들(SLC)을 포함할 수 있는 한편, MS 메모리(132)는 셀당 다수의 비트들로 프로그래밍되는 플래시 메모리 셀들을 포함할 수 있다. 일 실시예에서, 각각의 MLC 셀은 4개의 별개의 상태들(예를 들어, 하나 또는 4개의 별개의 임계 전압 분포들) 중 하나로 프로그래밍되는 한편, 각각의 SLC 셀은 2개의 별개의 상태들(예를 들어, 하나 또는 2개의 별개의 임계 전압 분포들) 중 하나로 프로그래밍된다. 일 실시예에서, 각각의 MLC 셀은 8개의 별개의 상태들(예를 들어, 1개 또는 8개의 별개의 임계 전압 분포들) 중 하나로 프로그래밍된다. 전형적으로, 메모리 셀들의 그룹은 하나의 유닛으로서 프로그래밍되며, 이는 상이한 셀들이 다양한 상태들로 프로그래밍됨을 의미한다. 또한, 전형적으로 SLC보다 MLC에 대한 상태들 사이에 더 작은 갭(예를 들어, 임계 전압 분포들 사이의 더 작은 갭)이 있다. 이들 인자들은 SLC보다 MLC에 대해 상당히 더 높은 기록 레이턴시를 야기한다. MLC보다 SLC에 대한 상당히 더 낮은 판독 레이턴시의 인자는, SLC 감지가 2개의 상태들 사이를 구별하기 위해 단지 하나의 기준 레벨에서 발생할 수 있는 반면, MLC는 상이한 상태들(예를 들어, 임계 전압 분포들)을 구별하기 위해 3개 또는 7개의 기준 레벨들에서의 감지를 요구할 수 있다는 것이다. IS 메모리(132) 및 MS 메모리(134)는 상이한 유형들의 기술일 수 있다는 것에 유의한다. 예를 들어, IS 메모리(132)는 ReRAM 메모리 셀들, 상변화 메모리(PCM) 메모리 셀들, 및/또는 자기 RAM 메모리 셀들을 포함할 수 있는 반면, MS 메모리(134)는 플래시(예컨대, NAND이지만 이로 제한되지 않음)일 수 있다. 그러한 실시예에서, IS 메모리(132) 내의 ReRAM 메모리 셀들, 상변화 메모리(PCM) 메모리 셀들, 및/또는 자기 RAM 메모리 셀들은 MS 메모리(134) 내의 플래시 메모리 셀들보다 더 낮은 판독 레이턴시를 갖는다.
또한, IS 메모리(132)는 MS 메모리(134)보다 더 큰 내구성을 가질 수 있다. 예를 들어, IS 메모리(132)의 셀들 각각의 예상 수명은 20,000 프로그램/소거(P/E) 사이클일 수 있는 한편, MS 메모리(134)의 셀들 각각의 예상 수명은 2,000 P/E 사이클일 수 있으며, 이 경우에, IS 메모리(132)의 셀들은 MS 메모리(134)의 셀들의 내구성의 10배의 내구성을 가질 것이다. 이는 단지 하나의 예로서, 모두를 포괄하도록 의도되지 않는다. 일 실시예에서, IS 메모리(132)는 MS 메모리(134)보다 더 낮은 저장 밀도를 갖는다. 보다 구체적으로, IS 메모리(132)의 개별 셀들은 MS 메모리(134)의 개별 셀들보다 더 적은 비트들의 호스트 데이터를 저장할 수 있다. 일부 실시예들에서, MS 메모리(134)에 할당된 것보다 상당히 더 작은 비휘발성 메모리(126)의 부분이 IS 메모리(132)에 할당된다. 일례로서, IS 메모리(132)는 저장 디바이스(100)의 총 저장 예산의 10% 미만을 사용할 수 있다. 다른 예로서, IS 메모리(132)는 저장 디바이스(100)에 따라, 총 저장 예산보다 2% 이하만큼 적게 사용할 수 있다. IS 메모리(132) 대 MS 메모리(134)의 정확한 비는 특정 제품에 의존하며, 일반적으로 저장 디바이스(100)의 비용 대비 성능 및 내구성에 영향을 미친다.
IS 메모리(132)는 더 빠른 기록 처리량을 제공하기 위해 사용될 수 있고, 또한 MS 메모리(134)에 호스트 데이터를 저장하기 전에 호스트 데이터를 신속하게 저장하기 위한 안전 구역으로서 사용될 수 있다. IS 메모리(132)는 또한, IS 메모리(132)에 저장된 호스트 데이터가 매우 신속하게 액세스될 수 있게 하는 비휘발성 메모리 캐시로서 기능할 수 있다. 일 실시예의 일반적인 개념은, 더 낮은 기록 레이턴시 및 판독 레이턴시를 갖는 더 고가의 비휘발성 메모리를 IS 메모리(132)로서 사용하고, 더 높은 기록 레이턴시 및 판독 레이턴시를 갖는 덜 고가의 비휘발성 메모리를 MS 메모리(134)로서 사용하는 것이다.
IS 메모리(132)가 성능이 일반적으로 우수하지만, 모든 호스트 데이터를 효과적으로 캐싱하기에는 너무 작다. 어떤 호스트 데이터가 IS 메모리(132)에 저장되어야 하는지(뿐만 아니라, IS 저장소(132)로부터 MS 저장소(134)로 재배치되는지)를 결정하기 위한 종래의 기법들은 선입선출(FIFO)일 수 있거나, 또는 노화 알고리즘에 기초할 수 있다. 그러나, 재배치를 수행하기 위한 종래의 기법들은 - 이들은 또한 종래의 재배치 방식들로 지칭될 수 있다 - 많은 사용 경우들에서 최적이 아닌데, 이는 비디오를 스트리밍하기 위해 사용되는 저장 디바이스에 사용하기 위한 최적의 재배치 방식이 무엇일 것인지와, 동일한 상대적으로 작은 데이터 청크를 반복적으로 업데이트하는 데 사용되는 저장 디바이스에 사용하기 위한 최적의 재배치 방식이 무엇일 것인지 사이에는 확실한 차이가 있기 때문이다. 비디오들을 스트리밍하는 예는 전체 플래시 드라이브가 기록된 후에 즉시 재기록되는 것이 되풀이되는 극단적인 사용 경우이다. 동일한 상대적으로 작은 데이터 청크를 반복적으로 업데이트하는 것은 스펙트럼의 다른 한쪽 끝에 있는 또 다른 극단적인 사용 경우로서, 여기서는 동일한 LBA가 반복해서 기록될 수 있다. 전술된 극단적인 경우의 시나리오들 사이에는 넓은 중간 영역(gray area)이 있다. 이하에서 더 상세히 설명될 본 기술의 실시예들은 종래의 재배치가 수행될 때와 비교하여 개선된 기록 및 판독 성능을 제공하는 방식으로 재배치를 관리하는 데 사용될 수 있다.
호스트(140)의 논의로 다시 돌아가면, 우선순위 호스트 데이터 애플리케이션(164)은 어떤 호스트 데이터(130)(예를 들어, 파일들)가 IS 메모리(132)에 유지될 우선순위를 받을 것인지 여부를 인식한다. 일 실시예에서, 우선순위 호스트 데이터 애플리케이션(164)은 어떤 호스트 데이터가 IS 메모리(132)에 유지될 우선순위를 받을 것인지를 학습하기 위해 호스트 데이터의 사용을 모니터링한다. 일 실시예에서, 우선순위 호스트 데이터 애플리케이션(164)은 사용자가 어떤 파일들 등이 IS 메모리(132)에 유지될 우선순위를 받을 것인지를 선택하도록 허용하는 사용자 인터페이스를 사용자에게 제공한다. 문맥에 따라, "우선순위 파일"과 같은 유사한 용어가 사용될 수 있는데, 이는 IS 메모리(132)에 유지될 우선순위를 갖는 파일을 의미한다. 일 실시예에서, 우선순위는 이진 값이다. 우선순위는 이진 값 이외의 가중치를 가질 수 있다는 것에 유의한다. 예를 들어, 3개 이상의 상이한 가중치들이 있을 수 있으며, 이때 가중치는 어떤 데이터가 IS 메모리(132)에 저장될 것인지를 결정하는 데 사용된다.
우선순위 호스트 데이터 애플리케이션(164)은 IS 메모리(132)에 유지될 우선순위를 부여 받을 호스트 데이터(예를 들어, 파일)와 연관된 어드레스들(예를 들어, 논리 어드레스들)에 액세스할 수 있다. 예를 들어, 호스트 데이터가 파일인 경우, 우선순위 파일에 대한 논리 어드레스는 파일에 대한 메타데이터에 포함될 수 있다. 우선순위 호스트 데이터 애플리케이션(164)은 우선순위 호스트 데이터에 대한 우선순위 어드레스들의 세트를, 메모리 제어기(122)가 IS 메모리(132)에 유지될 우선순위를 우선순위 어드레스들의 세트에 부여할 것이라는 표시와 함께 메모리 제어기(122)에 제공한다. 본 명세서에 설명된 일부 실시예들에서, 우선순위 어드레스들은 "논리 어드레스들"인 것으로 설명될 것임에 유의한다. 그러나, 우선순위 어드레스들은 논리 어드레스들일 필요가 없다. 예를 들어, 일부 경우들에서, 우선순위 어드레스들은 예를 들어 저장 디바이스(100) 내의 호스트 데이터의 물리적 어드레스일 수 있다.
일 실시예에서, 우선순위 호스트 데이터 애플리케이션(164)은 드라이버(170) 및 메모리 제어기(122)에 의해 사용되는 메모리 액세스 프로토콜의 대역내 통신을 사용한다. 본 명세서에 사용되는 바와 같이, 용어 "대역내 통신" 은, 우선순위 논리 어드레스들이 저장 디바이스(100)에 기록될 호스트 데이터를 제공할 뿐만 아니라 저장 디바이스로부터 호스트 데이터를 판독하기 위해 사용될 수 있는 동일한 통신 채널을 사용하여 메모리 제어기(122)에 제공된다는 것을 의미한다. 예를 들어, 우선순위 논리 어드레스들의 대역내 통신은 호스트(140)와 저장 디바이스(100) 사이에서 호스트 데이터를 전송하는 데 사용되는 동일한 메모리 액세스 프로토콜(예를 들어, NVMe, AHCI)을 사용하는 것을 포함할 수 있다.
경로(180)는 대역내 통신의 일 실시예의 흐름을 나타낸다. 흐름은 애플리케이션(들)(162)이 구조물(126)로부터/구조물(126)로 데이터를 판독하거나 기록하는 방식에 대해 위에서 논의된 흐름과 유사할 수 있다. 그러나, 대역내 통신은 호스트 데이터(130)가 구조물(126)에 기록되거나 그로부터 판독되는 결과를 초래하지 않는다. 대역내 통신은 우선순위 호스트 데이터 애플리케이션(164)이 O/S API(166)에 액세스하여 통신이 메모리 제어기(122)에 전송되어야 한다고 요청하는 것을 포함할 수 있다. 이 요청은 예약된 논리 어드레스에 대한 기록만큼 간단할 수 있으며, 메모리 제어기는 이를 우선순위 어드레스 테이블(144)을 업데이트하라는 요청인 것으로 결정할 수 있다. O/S API(166)는 요청을 전달하기 위해 파일 시스템(168)과 인터페이싱할 수 있다. 파일 시스템(168)은 요청을 드라이버(170)에 전달할 수 있다. 드라이버(170)는 NVMe 드라이버, AHCI 드라이버, UFS 드라이버 등과 같은 메모리 액세스 프로토콜을 위한 드라이버를 포함할 수 있다. 이어서, 드라이버(170)는 사용 중인 메모리 액세스 프로토콜을 고려하여 적합한 통신을 형성하고, 메모리 제어기(122)에 통신을 제공한다.
일 실시예에서, 대역내 통신은 임의의 드라이버(170)에 대한 임의의 수정을 요구하지 않는다는 것에 유의한다. 일례로서, 만약 우선순위 호스트 데이터 애플리케이션(164)이 예약된 논리 어드레스에 대한 기록을 요청하는 것이라면, 이 기록 요청은 또 다른 다른 애플리케이션(162)에 의해 사용된 기록 요청과 유사한 방식으로 진행할 수 있다. 차이는, 메모리 제어기(122)가 예약된 논리 어드레스에 대한 기록 요청을 수신하는 경우, 메모리 제어기(122)는 이것을 호스트 데이터(130)를 구조물(126)에 기록하라는 요청이 아니라, 우선순위 어드레스 테이블(144)을 업데이트하라는 요청으로 해석할 수 있다는 것이다.
도 3은 저장 디바이스(100)의 일 실시예의 블록도이다. 그러나, 도 3에 도시된 아키텍처는 또한 다른 유형들의 비휘발성 저장 디바이스들을 구현하는 데 사용될 수 있다. 도 3은 저장 디바이스(100)가 (도 1b 및 도 2에 도시된 비휘발성 메모리(126)를 포함하는) 하나 이상의 비휘발성 메모리 다이(108)에 접속된 제어기(122)를 포함하는 것을 도시한다. 도 3은 제어기(122)의 구성요소들 중 일부의 상세 사항을 제공하며, 이는 아래에서 더 상세히 논의될 것이다. IS 메모리(132)를 구현하는 데 사용되는 기술에 따라, IS 메모리가 MS 메모리(134)와 상이한 비휘발성 메모리 다이(108)에 있을 수 있거나, 동일한 비휘발성 메모리 다이(108)가 IS 메모리(132) 중 일부 및 MS 메모리(134) 중 일부를 포함할 수 있다.
본 명세서에 사용되는 바와 같이, 비휘발성 메모리를 사용하는 시스템에 대해, 제어기(122)는 비휘발성 메모리에 저장된 데이터를 관리하고 호스트와 통신하는 디바이스이다. 제어기(122)는 본 명세서에서 설명되는 특정 기능에 더하여 다양한 기능을 가질 수 있다. 예를 들어, 제어기(122)는 메모리가 적절하게 동작하고 있음을 보장하도록, 불량한 메모리 셀들(저장의 물리적 단위)을 맵 아웃(map out)하도록, 그리고 향후의 결함(failed) 셀들을 대신하기 위한 여분의 메모리 셀들을 할당하도록 비휘발성 메모리를 포맷화할 수 있다. 여분의 메모리 셀들의 일부 부분은 제어기를 동작시키고 다른 특징들을 구현하기 위하여 펌웨어를 보유하는 데 사용될 수 있다. 펌웨어는 또한 동작 동안 로컬 휘발성 메모리로 판독될 수 있다. 호스트가 비휘발성 메모리로부터 데이터를 판독하거나 그에 데이터를 기록할 필요가 있는 경우, 이는 제어기(122)와 통신할 것이다. 호스트가 데이터가 판독/기록될 논리 어드레스를 제공하는 경우, 제어기(122)는 호스트로부터 수신된 논리 어드레스를 물리적 메모리 내의 물리적 어드레스로 변환한다. 제어기(122)는 또한 마모 레벨링(wear leveling)(그렇지 않으면 반복적으로 그에 기록될 메모리의 특정 블록들의 마모를 회피하도록 메모리 다이 또는 메모리의 블록들 사이에 기록 동작들을 분산시킴) 및 가비지 수집(블록이 풀(full)이 된 후에, 데이터의 유효 페이지들만을 새로운 블록으로 이동시켜, 풀 블록이 소거 및 재사용될 수 있게 함)과 같은, 그러나 이로 제한되지 않는, 다양한 메모리 관리 기능들을 수행할 수 있다.
제어기(122)와 비휘발성 메모리 다이(108) 사이의 인터페이스는 PCI 익스프레스와 같은 임의의 적합한 인터페이스일 수 있다. 메모리 셀들이 플래시 메모리 셀들인 경우, 그 인터페이스는 토글 모드(Toggle Mode) 200, 400, 또는 800, 또는 다른 통신 인터페이스일 수 있다. 일부 실시예들에서, 저장 디바이스(100)는 제어기(122)와 비휘발성 메모리 다이(108) 사이에 단일 채널을 포함한다; 그러나, 본 명세서에 설명된 주제는 단일 메모리 채널을 갖는 것에 제한되지 않는다. 예를 들어, 일부 메모리 시스템 아키텍처들에서, 제어기 용량에 따라, 2개, 4개, 8개 또는 그 이상의 채널들이 제어기(122)와 메모리 다이(108) 사이에 존재할 수 있다. 도면들에 단일 채널이 도시되어 있더라도, 본 명세서에서 설명된 임의의 실시예들에는, 제어기(122)와 메모리 다이(108) 사이에 하나 초과의 단일 채널이 존재할 수 있다.
도 3에 도시된 바와 같이, 제어기(122)는 호스트와 인터페이싱하는 프론트엔드 모듈(front end module)(312), 하나 이상의 비휘발성 메모리 다이(108)와 인터페이싱하는 백엔드 모듈(back end module)(310), 및 이제 설명될 기능들을 수행하는 다양한 다른 모듈들을 포함한다.
도 3에 도시된 제어기(122)의 컴포넌트들은, 다른 컴포넌트들과 함께 사용하기 위하여 설계된 패키징된 기능적 하드웨어 유닛(예를 들어, 전기 회로), 관련된 기능들 중 특정 기능을 통상 수행하는 하나 이상의 프로세서들 또는 프로세싱 회로부에 의해 실행가능한 프로그램 코드(예를 들어, 소프트웨어 또는 펌웨어), 또는 더 큰 시스템과 인터페이싱하는 자립형 하드웨어 또는 소프트웨어 컴포넌트의 형태를 취할 수 있다. 예를 들어, 각각의 모듈은 주문형 집적 회로(ASIC), 필드 프로그램가능 게이트 어레이(FPGA), 전기 회로, 디지털 논리 회로, 아날로그 회로, 개별 회로들의 조합, 게이트들, 또는 임의의 다른 유형의 하드웨어, 또는 이들의 조합을 포함할 수 있다. 대안적으로 또는 추가로, 각각의 모듈은 본 명세서에서 설명되는 기능들을 수행하기 위해 프로세서를 프로그래밍하도록 프로세서 판독가능 디바이스(예를 들어, 로컬 휘발성 메모리) 내에 저장된 소프트웨어를 포함할 수 있다.
저장 디바이스(100)는 랜덤 액세스 메모리(RAM)(122b)(도 1b에 대해 위에서 논의된 것과 동일한 로컬 휘발성 메모리) 및 판독 전용 메모리(ROM)(122a)를 포함한다. 제어기(122)의 모듈들을 다시 참조하면, 버퍼 관리자/버스 제어기(314)는 RAM(122b)을 관리하고 제어기(122)의 내부 버스 중재를 제어한다. ROM(122a)은 제어기에 대한 부트 코드를 저장한다. 도 3에서 제어기(122)와 별도로 위치된(그러나, 제어기(122)에 접속된) 것으로 도시되어 있지만, 다른 실시예들에서, RAM(122b) 및 ROM(122a) 중 하나 또는 양측 모두는 제어기 내에 위치될 수 있다. 또 다른 실시예들에서, RAM 및 ROM의 부분들은 제어기 내부와 제어기 외부 둘 모두에 위치될 수 있다. 또한, 일부 구현예들에서, 제어기(122), RAM(122b), 및 ROM(122a)은 별개의 반도체 다이 상에 위치될 수 있다. 소정 실시예들에서, 잠재적인 호스트 활동 패턴들 및 연관 재배치 방식들을 비휘발성 메모리(126)에 저장하는 대신에, 잠재적인 호스트 활동 패턴들 및 연관 재배치 방식들이 ROM(122a)에 저장될 수 있다.
프론트엔드 모듈(312)은 호스트 또는 다음 레벨의 저장 제어기와의 전기적 인터페이스를 제공하는 호스트 인터페이스(202) 및 물리 계층 인터페이스(physical layer interface, PHY)(322)를 포함한다. 호스트 인터페이스(202)의 유형의 선택은 사용되는 메모리의 유형에 종속될 수 있다. 호스트 인터페이스들(202)의 예시적인 유형들은 SATA, SATA 익스프레스, SAS, FCP, USB, MMC, eMMC, UFS, AHCI 및 NVMe를 포함할 수 있지만, 이로 제한되지 않는다. 호스트 인터페이스(202)는, 전형적으로, 데이터, 제어 신호들, 및 타이밍 신호들에 대한 전달을 가능하게 한다. 일 실시예에서, 프론트 엔드 모듈(312)은 제어기(122) 및 저장 디바이스(100)의 메모리 다이(108)에 대한 외부 컴퓨팅 디바이스(예를 들어, 호스트)와 통신하도록 구성된 단일 통신 인터페이스를 제공한다.
백엔드 모듈(310)은 오류 정정 코드(ECC) 엔진(324)을 포함하고, 이 ECC 엔진은 호스트로부터 수신된 데이터 바이트들을 인코딩하고 비휘발성 메모리 다이(108)로부터 판독된 데이터 바이트들을 디코딩 및 에러 정정한다. ECC 엔진(324)은 데이터를 수신하고 데이터의 인코딩을 나타내는 하나 이상의 코드워드들을 생성하기 위한 회로부를 포함할 수 있다. 예를 들어, ECC 엔진(324)은 리드-솔로몬 인코딩, BCH 코드, 저밀도 패리티 체크(LDPC) 코드, 하나 이상의 다른 에러 검출 및 정정 코드들, 또는 이들의 임의의 조합을 이용하도록 구성될 수 있다. 커맨드 시퀀서(command sequencer)(326)는 비휘발성 메모리 다이(108)로 송신될 커맨드 시퀀스들, 예컨대, 프로그램 및 소거 커맨드 시퀀스들을 생성한다. RAID(Redundant Array of Independent Dies) 모듈(328)은 RAID 패리티(parity)의 생성 및 결함 데이터의 복구를 관리한다. RAID 패리티는 비휘발성 메모리(126)에 기록되는 데이터에 대한 무결성 보호(integrity protection)의 추가 레벨로서 사용될 수 있다. 일부 경우들에서, RAID 모듈(328)은 ECC 엔진(324)의 일부일 수 있다. RAID 패리티는 여분의 다이 또는 다이들로서 추가될 수 있지만, 이는 또한, 예컨대 여분의 평면, 또는 여분의 블록, 또는 블록 내의 여분의 WL들로서, 기존의 다이 내에 추가될 수 있다는 것에 유의한다. 메모리 인터페이스(204)는 커맨드 시퀀스들을 비휘발성 메모리 다이(108)에 제공하고 비휘발성 메모리 다이(108)로부터 상태 정보를 수신한다. 일 실시예에서, 메모리 인터페이스(204)는 토글 모드 200, 400, 또는 800 인터페이스와 같은 DDR(Double Data Rate) 인터페이스일 수 있다. NVM 제어 층(332)은 백엔드 모듈(310)의 전체 동작을 제어한다. 일 실시예에서, NVM 제어 층(322)은 플래시 제어 층이다.
IS 메모리(132)와 같은 메모리에 데이터를 기록하는 프로세스 동안, 데이터는 여분의 비트들("패리티 비트들")로 인코딩되어 코드워드를 형성할 수 있다. 노이즈의 존재 시에, 코드워드를 표현하는 비트들 중 일부가 변경되어, 오리지널 코드워드를 에러들로 손상시킬 수 있다. 코드워드가 메모리로부터 판독될 때, 디코더는 에러 정정 코딩(ECC)을 사용하여 에러들을 식별하고 정정하는 데 사용될 수 있다. 예를 들어, 비트 에러들이 상관되지 않는 경향이 있는 애플리케이션들에서 BCH(Bose-Chaudhuri-Hocquenghem) ECC 방식들이 사용된다. IS 메모리(132)로부터 MS 메모리(134)로의 데이터의 재배치는 ECC 제어와 함께 또는 ECC 제어 없이 수행될 수 있다. 데이터가 IS 메모리(132)에 기록될 때, 에러가 코드워드에 도입될 수 있다. 에러를 포함하는 코드워드가, 온-칩 복사(on-chip copy, OCC) 동작 동안 수행될 수 있는 바와 같이, 먼저 그것을 디코딩하고 에러를 정정하지 않고 IS 메모리(132)로부터 MS 메모리(134)에 재배치되면, 에러는 하드 에러(hard error)로 전환될 수 있고(여기서 MLC 유형 플래시 메모리는 잘못된 전압을 사용하여 프로그래밍됨), 이는 처리량 및 내구성을 손상시킬 수 있다. MS 메모리(134)에서 하드 에러들의 확률 및 정도를 감소시키기 위해, IS 메모리(132)로부터 재배치되는 데이터는 패리티 비트로 재인코딩되고 MS 메모리(134)에 재배치(즉, 전송)되기 전에 디코딩되고 에러 정정될 수 있다. 예를 들어, 메모리 제어기(122)는 데이터의 그러한 디코딩, 에러 정정, 및 재인코딩을 수행할 수 있으며, 이 프로세스는 제어기를 통한 복사(copy through controller, CTC)로 지칭될 수 있다. CTC의 사용은 하드 에러들을 감소시키지만, 이는 재배치 레이턴시를 증가시킬 것이다.
도 3에 예시된 저장 디바이스(100)의 추가 컴포넌트들은 비휘발성 메모리 다이(108)의 메모리 셀들의 마모 레벨링을 수행하는 매체 관리 층(Media Management Layer, MML)(338)을 포함한다. 일 실시예에서, MML(338)은 플래시 변환 층(Flash Translation Layer, FTL)이다. 저장 디바이스(100)는 또한 외부 전기 인터페이스들(예를 들어, 호스트 인터페이스 및 메모리 인터페이스의 일부로서), 외부 RAM, 저항기들, 커패시터들과 같은 다른 개별 컴포넌트들(340), 또는 제어기(122)와 인터페이싱할 수 있는 다른 컴포넌트들을 포함한다. 대안의 실시예들에서, 물리 계층 인터페이스(322), RAID 모듈(328), 매체 관리 층(338) 및 버퍼 관리/버스 제어기(314) 중 하나 이상은 제어기(122)에서 필수가 아닌 선택적인 컴포넌트들이다.
플래시 변환 층(FTL) 또는 매체 관리 층(MML)(338)은 에러들 및 호스트와의 인터페이싱을 다룰 수 있는 비휘발성 메모리 관리의 일부로서 통합될 수 있다. 특히, MML(338)은 비휘발성 메모리 관리의 내부들을 담당한다. 특히, MML(338)은 호스트로부터의 기록들을 메모리 다이(108)의 메모리로의 기록들로 변환하는 메모리 디바이스 펌웨어에서의 알고리즘을 포함할 수 있다. MML(338)이 필요할 수 있는데, 그 이유는, 1) 메모리가 제한된 내구성을 가질 수 있고/있거나; 2) 메모리가 단지 다수의 페이지들로만 기록될 수 있고/있거나; 3) 메모리가 그것이 블록으로서 소거되지 않는 한 기록되지 않을 수 있기 때문이다. MML(338)은 호스트에 대해 가시적(visible)이지 않을 수 있는 메모리의 이러한 잠재적인 제한들을 이해한다. 따라서, MML(338)은 호스트로부터의 기록들을 플래시 메모리일 수 있는 비휘발성 메모리(126)로의 기록들로 변환하는 것을 시도한다. MML(338)은 또한 호스트로부터의 논리 어드레스들과 메모리 다이(108) 상의 물리적 어드레스들 사이의 매핑을 위한 프로세스를 관리한다. 이것은 프로그래밍, 소거, 및 이동 커맨드들을 수행하는 동안 L2P 테이블들 및 P2L 테이블들을 업데이트하는 것을 포함할 수 있다.
MML(338)은 중간 저장소(IS) 관리 제어기(334)를 포함하는 것으로 도시되어 있는데, 이는 또한, IS 관리자(334)로 지칭될 수 있다. IS 관리자(334)는 IS 메모리(132)를 관리하기 위해 우선순위 어드레스 테이블(144)(도 2에 도시됨)을 사용할 수 있다. 이는 어느 호스트 데이터가 IS 메모리(132)에 저장되고 어느 호스트 데이터가 MS 메모리(134)에 저장되는지를 결정하는 것을 포함할 수 있다. 일 실시예에서, IS 관리자(334)는 데이터를 우선순위 어드레스 테이블(144)에서의 우선순위 어드레스들에 기초하여 IS 메모리(132)로부터 MS 메모리(134)로 재배치한다. 일 실시예에서, IS 관리자(334)는 우선순위 어드레스 테이블(144)의 콘텐츠에 기초하여, IS 메모리(132) 내의 가비지 수집을 수행한다.
도 4는 비휘발성 저장소를 동작시키는 프로세스(400)의 일 실시예의 흐름도이다. 프로세스(400)는 IS 메모리(132)를 관리하는 데 사용될 수 있다. 프로세스(400)는 부분적으로 호스트 시스템(140)에 의해 그리고 부분적으로 메모리 제어기(122)에 의해 수행될 수 있다.
단계(402)는 우선순위 어드레스들(예를 들어, LBA들)을, 우선순위 어드레스들에 대한 호스트 데이터가 IS 메모리(132)에 유지될 우선순위를 받을 것이라는 표시와 함께 메모리 제어기(122)에 제공하는 호스트 시스템(140)을 포함한다. 전술한 바와 같이, 우선순위 어드레스를 갖는 호스트 데이터는 우선순위 호스트 데이터로 지칭된다. 우선순위 호스트 데이터는 비-우선순위 호스트 데이터에 앞서 IS 메모리(132)에 유지될 우선순위를 받을 것이다. 다시 말하면, 우선순위 어드레스들과 연관된 호스트 데이터는 호스트 시스템이 우선순위 어드레스라고 표시하지 않은 임의의 어드레스(예를 들어, 논리 어드레스)와 연관된 호스트 데이터에 앞서 IS 메모리(132)에 유지될 우선순위를 받을 것이다.
단계(404)는 메모리 제어기(122)가 (우선순위 어드레스들을 갖는) 우선순위 호스트 데이터에 IS 메모리(132)에 유지될 우선순위를 부여하는 것을 포함한다. 단계(404)는 메모리 제어기(122)가 호스트 시스템(140)으로부터 우선순위 어드레스들을 수신하는 것에 응답하여 수행될 수 있다. 메모리 제어기(122)는 우선순위 호스트 데이터에게 비-우선순위 호스트 데이터에 앞서 IS 메모리(132)에 유지될 우선순위를 부여한다. 일 실시예에서, 단계(404)는 (우선순위 어드레스를 갖지 않는) 비-우선순위 호스트 데이터를 IS 메모리(132)로부터 MS 메모리(134)로 플러시하는 것을 포함한다. 비-우선순위 호스트 데이터를 플러시하는 일 실시예의 추가 상세사항들이 도 11과 관련하여 도시되고 설명된다.
일 실시예에서, 단계(404)는 호스트(140)에 의해 제공되는 우선순위 어드레스들에 기초하여 가비지 수집을 수행하는 것을 포함한다. 가비지 수집은 비-우선순위 호스트 데이터를 IS 메모리(132)로부터 MS 메모리(134)로 전송하는 것을 포함할 수 있다. 가비지 수집은 우선순위 호스트 데이터를 IS 메모리(132) 내의 하나의 위치로부터 IS 메모리(132) 내의 다른 위치로 이동시키는 것을 더 포함할 수 있다. 가비지 수집의 일 실시예의 추가 상세사항들이 도 12와 관련하여 도시되고 설명된다.
도 5a는 우선순위 어드레스 테이블(144)의 일 실시예를 도시한다. 테이블(144)은 이 실시예에서 우선순위 어드레스들의 세트들(502(1) 내지 502(6))을 포함한다. 이 예에서 6개의 세트들(502(1) 내지 502(6))이 있지만, 더 많거나 더 적은 세트들이 있을 수 있다. 본 명세서에서, 참조 번호 "502"는 특정 세트를 참조하지 않고 일반적인 세트를 지칭하는 데 사용될 것이다. 본 명세서에서, 우선순위 어드레스들의 "세트"는 하나 이상의 어드레스들(예를 들어, 논리 어드레스들)을 포함한다. 세트(502) 내의 우선순위 어드레스들은 인접될 필요는 없다. 예를 들어, 세트(502(2))는 우선순위 어드레스(2000, 2200) 사이에 갭을 가지며, 세트(502(2)) 내의 우선순위 어드레스들은 연접(contiguous)하지 않는다. 각각의 세트(502)는 일 실시예에서 우선순위 호스트 데이터 애플리케이션(164)에 의해 제공된다.
도 5a에서 우선순위 어드레스 테이블(144)의 실시예는 우선순위(504)에 대한 우선순위 필드(504)를 갖는다. 이는 테이블(144) 내의 상이한 세트들(502)이 상이한 우선순위 가중치를 갖도록 허용한다. 필드(504) 내의 더 높은 값은 세트(502)가 IS 메모리(132)에 유지될 더 큰 우선순위를 받을 것임을 나타낸다. 테이블(144)에 있지 않은 임의의 어드레스(예를 들어, 논리 어드레스)는 일 실시예에서 "0"의 우선순위를 갖는 것으로 가정된다는 것에 유의한다. 따라서, 도 5의 예에서, 세트(502(6))는 임의의 다른 세트(502(1) 내지 502(5))보다 더 큰 우선순위를 갖는다. 세트들(502(2), 502(5))은 세트(502(6))보다 더 낮은 우선순위를 갖지만, 세트들(502(1), 502(3), 502(5))보다 더 높은 우선순위를 갖는다. 세트들(502(1), 502(3), 502(5))은 테이블(144)에 있지 않은 임의의 어드레스들 어드레스(예를 들어, 논리 어드레스들)보다 더 높은 우선순위를 갖는다.
우선순위 필드(504)가 요건은 아니라는 것에 유의한다. 따라서, 테이블(144)은 주어진 세트에 할당된 임의의 우선순위 가중치(504) 없이 세트들(502)을 포함할 수 있다. 이 경우에, 테이블(144) 내의 각각의 세트(502)는 IS 메모리(132)에 유지될 동일한 우선순위를 가질 수 있다. 이 실시예에서, 테이블(144) 내의 각각의 세트(502)는 테이블(144)에 있지 않은 임의의 어드레스(예를 들어, 논리 어드레스)보다 IS 메모리(132)에 유지될 더 높은 우선순위를 갖는다.
도 5b는 비휘발성 저장소를 동작시키는 프로세스(500)의 일 실시예의 흐름도이다. 프로세스(500)의 일부 단계들은 우선순위 호스트 데이터 애플리케이션(164)에 의해 수행된다. 우선순위 호스트 데이터 애플리케이션(164)은 호스트 프로세서(150) 상에서 실행된다. 프로세스(500)의 일부 단계들은 메모리 제어기(122)에 의해 수행된다. 예를 들어, 운영 체제 API들(166), 파일 시스템(168), 및 하나 이상의 디바이스 드라이버들(170)과 같은 다른 컴포넌트들은 우선순위 호스트 데이터 애플리케이션(164)으로부터 메모리 제어기(122)로의 통신을 용이하게 하는 데 사용될 수 있다. 그러나, 운영 체제 API들(166), 파일 시스템(168), 및 하나 이상의 디바이스 드라이버들(170)에 대한 임의의 변화들이 이루어질 필요는 없다는 것에 유의한다.
단계(512)는 우선순위 호스트 데이터 애플리케이션(164)이, 비휘발성 저장 시스템(100)의 구조물(126)의 IS 메모리(132)에 유지될 우선순위를 부여 받을 호스트 데이터를 인식하는 것을 포함한다. 우선순위 호스트 데이터 애플리케이션(164)은 그 자신의 모니터링에 기초하여 우선순위를 받을 호스트 데이터를 인식할 수 있다. 예시적인 실시예들이 이것이 도 7과 관련하여 도시되고 설명된다. 애플리케이션은 사용자 입력에 기초하여 우선순위를 받을 호스트 데이터를 인식할 수 있다. 예시적인 실시예들이 이것이 도 8과 관련하여 도시되고 설명된다.
단계(514)는 우선순위 호스트 데이터 애플리케이션(164)이 호스트 데이터에 대한 우선순위 어드레스들의 세트에 액세스하는 것을 포함한다. 우선순위 호스트 데이터 애플리케이션(164)은 메타데이터에 기초하여 호스트 데이터에 대한 우선순위 어드레스들의 세트를 획득할 수 있다. 예를 들어, 우선순위 어드레스들의 세트가 파일인 경우, 그 파일은 그 파일에 대한 논리 어드레스들을 포함하는 메타데이터를 가질 수 있다.
단계(516)는 우선순위 호스트 데이터 애플리케이션(164)이 우선순위 어드레스들의 세트를 메모리 제어기(122)에 제공하는 것을 포함한다. 우선순위 호스트 데이터 애플리케이션(164)은 또한 우선순위 어드레스들의 세트가 IS 메모리(122)에 유지될 우선순위를 받을 것이라는 표시를 메모리 제어기(122)에 제공한다. 우선순위 호스트 데이터 애플리케이션(164)이 우선순위 어드레스들의 세트를 메모리 제어기(122)에 직접 제공할 필요는 없다는 것에 유의한다. 일 실시예에서, 우선순위 호스트 데이터 애플리케이션(164)은 운영 체제 API(166)를 통해 요청을 전송한다. 파일 시스템(168) 및 하나 이상의 디바이스 드라이버들(170)과 같은 다른 컴포넌트들은 우선순위 어드레스들의 세트를 메모리 제어기(122)에 전달하는 것에 관련될 수 있다. 그러나, 우선순위 어드레스들의 세트를 메모리 제어기(122)에 전달하기 위해 O/S API(166), 파일 시스템(168) 및/또는 디바이스 드라이버들(170)에 대한 임의의 변경들을 행할 필요는 없다. 일 실시예에서, 단계(516)는 메모리 액세스 프로토콜을 사용하는 디바이스 드라이버(170)와 메모리 제어기(122) 사이의 통신을 포함하는 대역내 통신을 사용하여 메모리 제어기에 우선순위 어드레스들의 세트를 제공하는 것을 포함한다. 단계(516)의 일 실시예의 추가 상세사항들이 도 6a와 관련하여 도시되고 설명된다.
단계(518)는 메모리 제어기(122)가 우선순위 어드레스 테이블(144)에 우선순위 어드레스들의 세트를 저장하는 것을 포함한다. 선택적으로, 메모리 제어기(122)는 우선순위 어드레스 테이블(144)에 우선순위 어드레스들의 세트에 대한 우선순위 가중치(504)를 저장한다.
단계(518, 520) 사이에는 이들 2개 단계들 사이에 일부 시간이 지날 수 있음을 나타내는 파선이 있다. 단계들(512 내지 518)은 다른 세트들의 논리 어드레스들에 대해 수행될 수 있다는 것에 유의한다. 따라서, 시간이 지남에 따라, 우선순위 어드레스들의 더 많은 세트들(502)이 우선순위 어드레스 테이블(144)에 추가될 수 있다. 단계(520)는, 메모리 제어기(122)가 우선순위 어드레스 테이블(144)에서의 우선순위 어드레스들에 기초하여 호스트 데이터가 IS 메모리(132)에 유지되는지 또는 MS 메모리(134)에 재배치되는지 여부를 관리하는 것을 포함한다.
단계(520)는 우선순위 어드레스 테이블(144)에 기초하여 어떤 호스트 데이터를 IS 메모리(132)로부터 MS 메모리(134)로 플러시(또는 재배치)할 것인지를 결정하는 것을 포함할 수 있다. 우선순위 어드레스 테이블(144)에 기초하여 IS 메모리(132)로부터 MS 메모리(134)로 데이터를 플러시하는 일 실시예의 추가 상세사항들이 도 11과 관련하여 도시되고 설명된다. 단계(520)는 우선순위 어드레스 테이블(144)에 기초하여 가비지 수집을 수행하는 것을 포함할 수 있다. 우선순위 어드레스 테이블(144)에 기초하여 가비지 수집을 수행하는 일 실시예의 추가 상세사항들이 도 12와 관련하여 도시되고 설명된다.
도 6a 는 우선순위 호스트 데이터 애플리케이션(164)이 우선순위 어드레스들의 세트를, 세트(502)가 IS 메모리(132)에 유지될 우선순위를 받을 것이라는 표시와 함께 메모리 제어기(122)에 제공하는 프로세스(600)의 일 실시예의 흐름도이다. 프로세스(600)는 프로세스(500)의 단계(516)의 일 실시예이다. 프로세스(600)는 호스트 시스템(140)에 의해 수행될 수 있다.
단계(602)는 우선순위 호스트 데이터 애플리케이션(164)이 메모리 제어기로 하여금 논리 어드레스 테이블(144)을 변경하게 하는 요청을 형성하는 것을 포함한다. 요청은 우선순위 어드레스들의 세트를 포함한다. 요청은 또한 우선순위 어드레스들의 세트에 대한 우선순위 가중치를 포함할 수 있다.
단계(604)는 우선순위 호스트 데이터 애플리케이션(164)이 운영 체제(O/S) 애플리케이션 프로그래밍 인터페이스(API)를 호출하여 요청이 메모리 제어기(122)에 전송되야 한다고 지시하는 것을 포함한다.
단계(606)는 O/S API(166)이 요청을 전달하기 위해 파일 시스템(168)과 인터페이싱하는 것을 포함한다.
단계(608)는 파일 시스템(168)이 디바이스 드라이버(170)에게 요청을 메모리 제어기(122)에 전송하라고 지시하는 것을 포함한다. 디바이스 드라이버(170)는 그 자체가 하나 초과의 디바이스 드라이버로 구성될 수 있다. 예를 들어, 상위 레벨 디바이스 드라이버는 파일 시스템과 인터페이싱할 수 있는 반면, 하위 레벨 디바이스 드라이버는 메모리 제어기(122)와 인터페이싱할 수 있다. 하나의 실시예에서, 하위 레벨 디바이스 드라이버는 메모리 액세스 프로토콜의 호스트 측을 구현하도록 구성된다. 예를 들어, 하위 레벨 디바이스 드라이버는 NMVe 드라이버, AHCI 드라이버, SD 드라이버, USB 드라이버, MMC 드라이버, 또는 eMMC 드라이버의 호스트 측을 구현할 수 있다. 이러한 하위 레벨 드라이버들은 일부 경우들에서 호스트 제어기들로 지칭될 수 있다. 예를 들어, 하위 레벨 디바이스 드라이버는 NVMe 호스트 제어기, AHCI 호스트 제어기 등으로 지칭될 수 있다. 메모리 제어기(122)는 메모리 액세스 프로토콜의 메모리 시스템(100) 측을 구현하기 위한 대응하는 제어기를 갖는다는 것에 유의한다.
단계(610)는 디바이스 드라이버(170)가 요청을 메모리 제어기(122)에 전송하는 것을 포함한다. 디바이스 드라이버(170)는 메모리 액세스 프로토콜(예를 들어, NMVe, AHCI, SD, USB, MMC, eMMC)에 따라 요청을 전송할 수 있다. 단계(610)에서 디바이스 드라이버는 호스트 제어기로 지칭될 수 있다.
다양한 기법들이 우선순위 어드레스들의 세트를 메모리 제어기(122)에 제공하는 데 사용될 수 있다. 하나의 가능성은 디바이스 드라이버가 미리 결정된 예약된 논리 어드레스(예를 들어, LBA)에 기록하라는 기록 요청을 전송하는 것이다. 예약된 논리 어드레스는 이것이 호스트 데이터(130)를 구조물(126)에 기록하라는 요청이 아니라, 우선순위 어드레스 테이블(144)을 업데이트하라는 특수 기록 요청이라는 것을 메모리 제어기(122)에 나타내는 것일 수 있다. 기록 요청에 대한 데이터는 우선순위 어드레스들의 세트를 포함할 수 있다. 기록 요청에 대한 데이터는 또한 우선순위 어드레스들의 세트에 대한 우선순위 가중치를 포함할 수 있다. 이 기법은 디바이스 드라이버에 대한 임의의 수정들을 필요로 하지 않는다는 것에 유의한다. 다시 말하면, 디바이스 드라이버의 관점에서 보면, 이는 메모리 제어기(122)에게 디바이스 드라이버에 제공되었던 논리 어드레스에 기록하라고 단순히 요청하는 것이다. 다른 기법들이 메모리 제어기(122)에 우선순위 어드레스들의 세트를 제공하는 데 사용될 수 있다.
도 6b는 우선순위 어드레스 테이블(144)을 업데이트하는 메모리 제어기(122)의 프로세스(650)의 일 실시예의 흐름도이다. 프로세스(650)는 프로세스(600)와 함께 사용될 수 있다. 다시 말하면, 메모리 제어기(122)는 프로세스(600)의 실시예에서 요청을 수신하는 것에 응답하여 프로세스(650)를 수행할 수 있다.
단계(652)는 메모리 제어기(122)가 디바이스 드라이버(예를 들어, 호스트 제어기)로부터 요청을 수신하는 것을 포함한다. 언급된 바와 같이, 이 요청은 프로세스(600)의 단계(610)로부터의 것일 수 있다. 프로세스(650)는 프로세스(600)와 함께 사용되는 것으로 제한되지 않는다는 것에 유의한다. 따라서, 단계(652)에서 메모리 제어기(122)가 수신하는 요청은 프로세스(600)에 설명된 것 이외의 기법을 사용하여 전송되었을 수 있다.
단계(654)는 메모리 제어기(122)가 이 요청이 우선순위 어드레스 테이블(144)을 업데이트하라는 요청이라고 결정하는 것을 포함한다. 일 실시예에서, 메모리 제어기(122)는 요청이 예약된 논리 어드레스에 대한 기록인 것에 응답하여 이러한 결정을 한다. 다시 말하면, 메모리 제어기(122)는 소정의 예약된 논리 어드레스에 기록하라는 요청들을 우선순위 어드레스 테이블(144)을 업데이트하라는 요청으로 해석하도록 구성될 수 있다. 그러나, 다른 값들이 사용될 수 있다.
단계(656)는 메모리 제어기(122)가 요청으로부터 우선순위 어드레스들의 세트를 추출하는 것을 포함한다. 일 실시예에서, 기록 요청은 기록될 데이터뿐만 아니라 데이터의 길이를 표시한다. 기록 요청은 그 자체가 데이터를 포함할 수 있거나, 데이터에 대한 포인터를 포함할 수 있다. 따라서, 메모리 제어기(122)는 기록 요청에 대한 데이터를 포함하는 메모리 위치로부터 우선순위 어드레스들의 세트를 추출할 수 있다.
단계(658)는 메모리 제어기(122)가 우선순위 어드레스들의 세트(502)를 우선순위 어드레스 테이블(144)에 기록하는 것을 포함한다. 선택적으로, 메모리 제어기(122)는 세트(502)에 대한 우선순위 가중치(504)를 우선순위 어드레스 테이블(144)에 기록한다.
도 7은 사용자 선택에 기초하여 어떤 호스트 데이터가 IS 메모리(132)에 유지될 우선순위를 받을 것인지를 학습하는 우선순위 호스트 데이터 애플리케이션(164)의 프로세스(700)의 흐름도이다. 프로세스(700)는 프로세스(500)의 단계(512)의 일 실시예이다.
단계(702)는 우선순위 호스트 데이터 애플리케이션(164)이, 사용자가 어떤 호스트 데이터(130)가 IS 메모리(132)에 유지될 우선순위를 받을 것인지 특정하도록 허용하는 사용자 인터페이스(UI)를 제공하는 것을 포함한다. 도 8a는 사용자가 우선순위 호스트 데이터를 특정하도록 허용하는 UI(800)의 일 실시예를 도시한다. UI(800)는 다수의 컴퓨터 프로그램들(또는 애플리케이션들)을 나열한다. UI(800)는 각각의 애플리케이션 옆에 사용자가 애플리케이션들을 선택/선택해제하도록 허용하는 우선순위 선택 박스(802)를 갖는다. 도 8b는 사용자가 우선순위 가중치와 함께 우선순위 호스트 데이터를 특정하도록 허용하는 UI(850)의 일 실시예를 도시한다. UI(850)는 또한 다수의 애플리케이션들을 각각의 옆에 사용자가 우선순위 저장을 위한 애플리케이션을 선택하도록 허용하는 우선순위 선택 박스(802)와 함께 나열한다. UI(850)는 또한 사용자가 우선순위 선택 박스(802)에서 선택된 애플리케이션들에 대한 우선순위 가중치를 특정하도록 허용하기 위해 각각의 애플리케이션 옆에 우선순위 가중치 박스(804)를 갖는다.
단계(704)는 우선순위 호스트 데이터 애플리케이션(164)이 UI에서의 선택을 수신하는 것을 포함한다. 도 8a의 UI(800)와 관련하여, 우선순위 호스트 데이터 애플리케이션(164)은 어느 우선순위 선택 박스들(802)이 체크되고 체크되지 않는지를 주목한다. 마찬가지로, 도 8b의 UI(850)와 관련하여, 우선순위 호스트 데이터 애플리케이션(164)은 어느 우선순위 선택 박스들(802)이 체크되고 체크되지 않는지를 주목한다.
단계(706)는 우선순위 호스트 데이터 애플리케이션(164)이 우선순위 가중치의 선택을 수신하는 것을 포함한다. 단계(706)는 선택적이다. 도 8b의 UI(850)와 관련하여, 우선순위 어드레스는 우선순위 가중치 박스들(804)에서의 값을 주목한다.
단계(708)는 단계(704 및/또는 706)에서의 선택들에 관한 정보를 저장하는 우선순위 호스트 데이터 애플리케이션(164)을 포함한다. 따라서, 우선순위 선택 박스(802)의 선택 또는 우선순위 가중치 박스(804)에서의 값의 선택을 "주목"하는 것은 호스트 메모리(160)와 같은 비일시적 저장소에 정보를 저장하는 것을 지칭한다.
도 9는 어떤 호스트 데이터(130)가 IS 메모리(132)에 유지될 우선순위를 받을 것인지를 결정하는 우선순위 호스트 데이터 애플리케이션(164)의 프로세스(900)의 흐름도이다. 프로세스(900)는 프로세스(500)의 단계(512)의 일 실시예이다.
단계(902)는 호스트 시스템(140)의 전력이 켜질 때 우선순위 호스트 데이터 애플리케이션(164)이 비일시적 저장소로부터 호스트 메모리(160) 내에 로딩되는 것을 포함한다. 예를 들어, 비일시적 저장소는 메모리 시스템(100) 내의 메모리 다이(108) 상의 구조물(126) 내의 비휘발성 메모리일 수 있다. 그러나, 비일시적 저장소는 다른 곳에 위치될 수 있다.
단계(904)는 우선순위 호스트 데이터 애플리케이션(164)이 호스트 데이터 사용을 모니터링하는 것을 포함한다. 매우 다양한 기법들이 호스트 데이터 사용을 모니터링하는 데 사용될 수 있다. 모니터링 기법들은 중요하지 않다. 일 실시예에서, 우선순위 호스트 데이터 애플리케이션(164)은 어느 파일들 및/또는 프로그램들이 비휘발성 저장 디바이스(100)로부터 액세스되는지를 모니터링한다. 일 실시예에서, 우선순위 호스트 데이터 애플리케이션(164)은 어느 파일들 및/또는 프로그램들이 호스트 메모리(160) 내에 로딩되는지를 모니터링한다.
단계(906)는 우선순위 호스트 데이터 애플리케이션(164)이 호스트 데이터 사용에 기초하여 IS 메모리(132)에서의 우선순위 저장을 위한 호스트 데이터를 선택하는 것을 포함한다. 단계(906)는 우선순위 어드레스들의 세트를 우선순위 호스트 데이터의 저장된 기록에 추가하는 것을 포함할 수 있다. 따라서, 우선순위 호스트 데이터 애플리케이션(164)은 메모리 제어기(122)의 일 실시예에 의해 유지되는 테이블(144)과 유사한 우선순위 어드레스 테이블을 유지할 수 있다는 것에 유의한다. 단계(906)는 우선순위 호스트 데이터의 기록으로부터 우선순위 어드레스들의 세트를 제거하는 것을 포함할 수 있다.
도 10a는 우선순위 어드레스 테이블(144)에 기초하여 IS 메모리(132)를 관리하는 메모리 제어기(122)의 프로세스(1000)의 일 실시예의 흐름도이다. 단계(1002)는 호스트 제어기가 기록 요청을 메모리 제어기(122)에 제공하는 것을 포함한다. 일 실시예에서, 기록 요청은 하나 이상의 논리 어드레스를 특정한다. 예를 들어, 기록 요청은 시작 논리 블록 어드레스(LBA) 및 기록될 데이터의 길이를 가질 수 있다. 길이는 다수의 논리 블록들에 특정될 수 있다. 일 실시예에서, 논리 블록의 크기는 호스트 제어기에 의해 특정된다. 호스트 제어기는 메모리 제어기(122)의 초기화 동안 논리 블록의 크기를 특정할 수 있다. 단계(1002)는 또한 호스트 제어기가 기록 요청을 위해 비휘발성 메모리 시스템(100)에 저장될 호스트 데이터를 제공하는 것을 포함할 수 있다. 호스트 데이터는 호스트 데이터를 저장하는 호스트 메모리(160) 내의 하나 이상의 호스트 데이터 버퍼들을 특정하는 호스트 제어기에 의해 메모리 제어기(122)에 제공될 수 있다. 일례로서, 호스트 제어기는 (메모리 시스템(100) 상의 호스트 메모리(160) 또는 RAM(122b)에 있을 수 있는) 커맨드 큐 상에 기록 커맨드를 놓을 수 있다. 기록 커맨드는 호스트 메모리(160) 내의 데이터 버퍼에 대한 포인터뿐만 아니라 데이터 버퍼 포인터들에 대한 포인터를 포함할 수 있다. 예를 들어, NVMe 프로토콜에서, 호스트 제어기는 기록 커맨드에 포인터를 포함할 수 있으며, 포인터는 데이터 버퍼 포인터들의 목록을 가리킨다. 각각의 데이터 버퍼 포인터는 호스트 메모리(160) 내의 데이터 버퍼를 가리킬 수 있다. 호스트 시스템이 호스트 데이터를 메모리 제어기(122)에 제공하기 위한 많은 다른 대안들이 있다.
단계(1004)는 메모리 제어기(122)가 호스트 데이터를 IS 메모리(132)에 기록하는 것을 포함한다. 이 실시예에서, 우선순위 호스트 데이터 및 비-우선순위 호스트 데이터 둘 모두가 IS 메모리(132)로 기록될 수 있다는 것에 유의한다. 그러나, 아래에서 논의되는 바와 같이, 비-우선순위 데이터를 비휘발성 저장 디바이스(100)에 저장하라는 호스트(140)로부터의 요청에 응답하여 비-우선순위 호스트 데이터를 IS 메모리(132)에 저장할 필요는 없다.
단계(1004)와 단계(1006) 사이의 파선은 메모리 제어기(122)가 이들 단계들 사이에서 다른 작업들을 수행할 수 있음을 나타낸다. 단계(1006)는 메모리 제어기가 비-우선순위 호스트 데이터를 IS 메모리(132)로부터 MS 메모리(134)로 플러시하는 것을 포함한다. 플러시는 사용가능한 IS 메모리(132)의 양이 임계치 미만으로 떨어지는 것에 의해 트리거될 수 있다. 단계(1006)는 또한 우선순위 호스트 데이터를 IS 메모리(132)에 유지하는 것을 포함할 수 있다는 것에 유의한다. 일 실시예에서, 어느 호스트 데이터가 IS 메모리(132)에 유지되어야 하고, 어느 것이 MS 메모리(134)에 재배치되어야 하는지의 결정은 우선순위 어드레스들에 기초한다는 것에 유의한다. 따라서, "더 오래된" 호스트 데이터를 재배치할 수 있는 기법들과 달리, 이러한 "더 오래된" 데이터는 그의 우선순위에 따라 IS 메모리(132)에 유지될 것이다.
비-우선순위 호스트 데이터를 저장하라는 호스트(140)로부터의 요청에 응답하여 비-우선순위 호스트 데이터가 IS 메모리(132)에 저장될 필요는 없다. 도 10b는 우선순위 어드레스 테이블(144)에 기초하여 IS 메모리(132)를 관리하는 메모리 제어기(122)의 프로세스(1050)의 일 실시예의 흐름도로서, 비-우선순위 호스트 데이터가 MS 메모리(132)에 직접 기록되는 것이 가능하다(IS 메모리(132)를 바이패스함).
단계(1002)는 호스트 제어기가 기록 요청을 메모리 제어기(122)에 제공하는 것을 포함한다. 단계(1052)는 IS 메모리(132) 내의 사용가능한 공간의 양에 대한 결정이다. 공간이 낮지 않은 경우, 단계(1054)에서, 호스트 데이터가 IS 메모리에 기록될 수 있다.
단계(1056)는 메모리 제어기(122)가 기록 요청에 대해 우선순위 어드레스 테이블(144)을 확인하는 것을 포함한다. 언급된 바와 같이, 일 실시예에서, 기록 요청은 시작 논리 어드레스 및 길이를 갖는다. 따라서, 일 실시예에서, 기록 요청은 사실상 논리 어드레스들(예를 들어, LBA들)의 범위를 특정한다. 단계(1058)의 일 실시예에서, 메모리 제어기(122)는 이 범위 내의 논리 어드레스들 중 임의의 것이 우선순위 어드레스 테이블(144)에 있는지 여부를 결정한다. 메모리 제어기(122)는 테이블(144)에서 발견되는 논리 어드레스들에 대해 단계(1060)를 수행할 수 있다. 메모리 제어기(122)는 테이블(144)에서 발견되지 않는 논리 어드레스들에 대해 단계(1062)를 수행할 수 있다.
단계(1060)는 메모리 제어기(122)가 우선순위 어드레스에 대한 우선순위 호스트 데이터를 IS 메모리(132)에 기록하는 것을 포함한다.
단계(1062)는 메모리 제어기(122)가 비-우선순위 어드레스에 대한 비-우선순위 호스트 데이터를 MS 메모리(134)에 기록하는 것을 포함한다.
일 실시예에서, 호스트(140)로부터의 주어진 기록 요청에 대해 호스트 데이터 중 어느 것도, 또는 일부, 또는 전부가 IS 메모리(132)로 기록되지 않고 MS 메모리(134)에 기록될 수 있다는 것에 유의한다. 모든 호스트 데이터 중 일부가 IS 메모리(132)로 기록되지 않고 MS 메모리(134)에 기록되는 경우, 이것은 IS 메모리(132)의 공간을 절약할 수 있으며, 이는 우선순위 호스트 데이터를 IS 메모리(132)로부터 재배치할 필요성을 피할 수 있다. 일부 종래의 FIFO 기법들은 메모리 시스템(100)에 새로 기록되고 있는 호스트 데이터를 위한 공간을 만들기 위해 호스트 데이터를 재배치할 수 있다는 것에 유의한다.
프로세스(1050)에 대한 하나의 대안은, IS 메모리(132)에 있는 공간이 낮지 않을 때에도 비-우선순위 호스트 데이터를 MS 메모리(134)에 단순히 기록하는 것이다. MS 메모리(134)에 대한 기록이 IS 메모리(132)에 대한 기록보다 더 오래 걸릴 수 있기 때문에, 이 옵션은 단지 비-우선순위 호스트 데이터를 MS 메모리(134)에 직접 기록하는 것이 기록 처리량(예를 들어, 단위 시간당 기록된 데이터의 양)에 상당한 부정적인 영향을 미치지 않는 경우에만 수행될 수 있다.
도 11은 우선순위 어드레스들에 기초한 재배치(또는 플러시) 동작의 프로세스(1100)의 일 실시예의 흐름도이다. 프로세스(1100)는 프로세스(400)의 단계(404)의 일 실시예이다. 프로세스(1100)는 프로세스(500)의 단계(520)의 일 실시예이다. 프로세스(1100)는 프로세스(1000)의 단계(1006)의 일 실시예 동안 수행될 수 있다. 프로세스(1100)는 메모리 제어기(122)가 IS 메모리(132)가 플러시되어야 한다고 결정하는 것에 응답하여 수행될 수 있다. 이것은, 일 예로서, IS 메모리(132)가 그의 용량의 소정 백분율에 도달할 때 수행될 수 있다. 프로세스(1100)는 IS 메모리(132) 내의 하나의 데이터 블록의 프로세싱을 설명한다. 데이터 블록은 논리 블록 어드레스와 같은 논리 어드레스를 갖는다. 일 실시예에서, 데이터 블록은 하나의 논리 어드레스(예를 들어, LBA)와 연관되는 데이터의 단위이다. 데이터 블록은 임의의 크기를 가질 수 있다. 데이터 블록은 "소거 블록"과 별개의 개념이며, 이는 가비지 수집과 관련하여 아래에서 논의된다는 것에 유의한다. 소거 블록은 본 명세서에서 함께 소거되는 데이터의 단위로서 정의된다. 소거 블록은 임의의 크기를 가질 수 있다. 일부 경우들에서, 소거 블록당 다수의 데이터 블록들이 있다.
단계(1102)는 메모리 제어기(122)가 IS 메모리(132) 내의 데이터 블록의 논리 어드레스(예를 들어, LBA)에 액세스하는 것을 포함한다.
단계(1104)는 논리 어드레스가 우선순위 어드레스 테이블(144)에 있는지 여부의 결정을 포함한다. 단계(1106)는 논리 어드레스가 우선순위 어드레스 테이블(144)에 없는 경우에 수행된다. 단계(1106)는 이러한 데이터 블록에 대한 호스트 데이터가 MS 메모리(134)로 전송될 것임을 주목하는 것을 포함한다. 따라서, 이 호스트 데이터는 비-우선순위 호스트 데이터로서 식별되었다.
단계(1108)는 논리 어드레스가 우선순위 어드레스 테이블(144)에 있는 경우에 수행된다. 단계(1108)는 이 데이터 블록에 대한 호스트 데이터가 IS 메모리(132) 내에 유지될 것임을 주목하는 것을 포함한다. 따라서, 이 호스트 데이터는 우선순위 호스트 데이터로서 식별되었다.
단계(1110)는 IS 메모리(132) 내에 고려해야할 더 많은 데이터 블록들이 있는지 여부의 결정을 포함한다. 그러한 경우, 단계(1102)(그리고 추가 단계들)에서 다른 데이터 블록이 고려된다. 따라서, 메모리 제어기(122)는 IS 메모리(132) 내의 다양한 데이터 블록들에 대해 단계들(1102 내지 1108)을 수행함으로써 MS 메모리(134)에 재배치될 호스트 데이터의 리스트를 구축할 수 있다. 다시 말하면, 메모리 제어기(122)는 비-우선순위 데이터의 리스트(또한 IS 메모리(132) 내의 위치)를 구축할 수 있다. 위치는 논리 어드레스 또는 물리적 어드레스에 기초하여 식별될 수 있다.
IS 메모리(132) 내의 모든 데이터 블록들이 프로세싱되는 경우, 메모리 제어기(122)는 MS 메모리(132)에 재배치될 비-우선순위 호스트 데이터를 전송한다. 단계(1112)는 IS 메모리(132) 내의 데이터 블록들 모두의 프로세싱 이전에 수행될 수 있다는 것에 유의한다. 프로세스(1100)는 비-우선순위 호스트 데이터가 우선순위 호스트 데이터보다 "더 새로운" 경우에도, 비-우선순위 호스트 데이터에 앞서 우선순위 호스트 데이터를 IS 메모리(132)에 유지한다는 것에 유의한다. 이것은, 예를 들어, 우선순위 호스트 데이터가 더 빨리 판독되도록 허용함으로써 (우선순위 호스트 데이터가 MS 메모리(134)에 재배치된 경우에 비해) 성능을 향상시킬 수 있다.
도 12는 우선순위 어드레스 테이블(144)에 기초하여 가비지 수집을 수행하는 메모리 제어기(122)의 프로세스(1200)의 일 실시예의 흐름도이다. 프로세스(1200)는 프로세스(400)의 단계(404)의 일 실시예이다. 프로세스(1200)는 프로세스(500)의 단계(520)의 일 실시예이다.
단계(1202)는 메모리 제어기(122)가 잠재적 희생 블록을 선택하는 것을 포함한다. "희생 블록"은 가비지 수집 프로세스에서 소거될 메모리 셀들의 블록이다. "잠재적 희생 블록"은 가비지 수집 프로세스에서 소거되거나 소거되지 않을 수 있는 블록이다. 잠재적 희생 블록은 우선순위 호스트 데이터 및 비-우선순위 호스트 데이터 둘 모두를 포함할 수 있다는 것에 유의한다. 일부 경우들에서, 잠재적 희생 블록은 우선순위 호스트 데이터를 포함할 수 있지만, 비-우선순위 호스트 데이터는 포함하지 않을 수 있다. 일부 경우들에서, 잠재적 희생 블록은 비-우선순위 호스트 데이터를 포함할 수 있지만, 우선순위 호스트 데이터는 포함하지 않을 수 있다. 일 실시예에서, 비-우선순위 데이터를 포함하는 블록들만이 가비지 수집 프로세스에서 소거된다. 다시 말하면, 우선순위 호스트 데이터를 포함하지만, 어떠한 비-우선순위 호스트 데이터도 포함하지 않는 잠재적 희생 블록은 가비지 수집 프로세스의 일 실시예에서 소거되지 않는다. 일 실시예에서, 잠재적 희생 블록은 "소거 블록"이다. 소거 블록은 하나의 유닛으로서 소거되는 블록이다.
단계(1204)는 잠재적 희생 블록에 비-우선순위 호스트 데이터가 있는지 여부의 결정이다. 메모리 제어기(122)는 잠재적 희생 블록 내의 호스트 데이터의 논리 어드레스들을 논리 어드레스 테이블(144)과 비교하여 이러한 결정을 한다. 잠재적 희생 블록에 비-우선순위 호스트 데이터가 없는 경우, 일 실시예에서 이러한 잠재적 희생 블록의 프로세싱은 종료된다. 따라서, 메모리 제어기(122)는 단계(1202)에서 다른 잠재적 희생 블록을 선택할 수 있다.
잠재적 희생 블록이 비-우선순위 호스트 데이터를 포함하는 경우, 단계(1206)가 수행된다. 이어서, 단계(1206)가 수행되는 경우, 블록은 더 이상 "잠재적 희생 블록"으로 지칭되지 않고, "희생 블록"으로 지칭된다. 단계(1206)는 메모리 제어기(122)가 비-우선순위 호스트 데이터를 희생 블록으로부터 MS 메모리(132)로 전송하는 것을 포함한다. 메모리 제어기(122)는 비-우선순위 데이터를 MS 메모리(132)로 전송하기 전에 하나 초과의 희생 블록으로부터 비-우선순위 데이터를 수집할 수 있다는 것에 유의한다.
단계(1208)는 희생 블록이 우선순위 호스트 데이터를 포함하는지 여부의 결정을 포함한다. 메모리 제어기(122)는 희생 블록 내의 호스트 데이터의 논리 어드레스들을 논리 어드레스 테이블(144)과 비교하여 이러한 결정을 한다.
희생 블록에 우선순위 호스트 데이터가 있는 경우, 제어는 단계(1210)로 진행한다. 단계(1210)는 메모리 제어기(122)가 우선순위 호스트 데이터를 희생 블록으로부터 활성 블록으로 전송하는 것을 포함한다. 활성 블록이 가비지 수집 프로세스의 시작 전에 임의의 유효 데이터를 포함하지 않는 것이 가능하지만, 이것은 요건은 아니다. "활성 블록"은 가비지 수집 프로세스 후에 유효 데이터를 포함할 블록이다. 일 실시예에서, 활성 블록은 소거 블록이다. 단계(1210) 후에, 제어는 단계(1212)로 진행하여 희생 블록을 소거한다.
또한, 단계(1208)의 논의로 돌아가면, 희생 블록에 어떠한 우선순위 호스트 데이터도 없는 경우, 제어는 또한 단계(1212)로 진행하여 희생 블록을 소거한다. 위에 언급된 바와 같이, 희생 블록은 임의의 우선순위 호스트 데이터를 포함하지 않을 수 있는데, 이 경우에 단계(1210)는 이러한 희생 블록에 대해 수행되지 않을 것이다.
다시 단계(1212)의 논의로 돌아가면, 희생 블록이 소거된 후에, 희생 블록은 "사용가능한 블록들"의 풀(pool)로 복귀될 수 있다. 메모리 제어기(122)가 새로운 호스트 데이터를 IS 메모리(132)에 기록하기를 원할 때, 메모리 제어기(122)는 사용가능한 블록들 중 하나를 선택할 수 있다.
단계(1214)는 IS 메모리(132) 내에 충분한 사용가능한 블록들이 존재하는지 여부의 결정이다. 그러한 경우, 프로세스는 종료될 수 있다. 사용가능한 블록들이 충분히 없는 경우, 메모리 제어기(122)는 단계(1202)에서 다른 잠재적 희생 블록을 선택할 수 있다.
본 명세서에 개시된 제1 실시예는 비휘발성 메모리 셀들; 및 비휘발성 메모리 셀들에 커플링된 메모리 제어기를 포함하는 장치를 포함한다. 메모리 제어기는 비휘발성 메모리 셀들의 제1 그룹을 호스트 시스템으로부터의 호스트 데이터에 대한 중간 저장소로서, 그리고 비휘발성 메모리 셀들의 제2 그룹을 호스트 시스템으로부터의 호스트 데이터에 대한 메인 저장소로서 지정하도록 구성된다. 중간 저장소는 메인 저장소의 판독 레이턴시보다 더 낮은 판독 레이턴시를 갖는다. 메모리 제어기는 중간 저장소에 유지될 우선순위를 가질 호스트 데이터를 식별하는 우선순위 어드레스들을 호스트 시스템으로부터 수신하도록 구성된다. 메모리 제어기는 우선순위 어드레스들을 갖는 호스트 데이터에 중간 저장소에 유지될 우선순위를 부여하도록 구성된다.
제2 실시예에서 그리고 제1 실시예에 더하여, 메모리 제어기는 우선순위 어드레스들에 기초하여, 호스트 데이터가 비휘발성 메모리 셀들의 제1 그룹에 유지되는지 또는 비휘발성 메모리 셀들의 제2 그룹에 재배치되는지 여부를 관리하도록 추가로 구성된다.
제3 실시예에서, 그리고 제1 또는 제2 실시예들에 더하여, 메모리 제어기는, 우선순위 어드레스들에 기초하여 중간 저장소로부터 메인 저장소로의 재배치를 위한 호스트 데이터를 선택하도록 추가로 구성되며, 이는 우선순위 어드레스들 중 하나 이외의 어드레스를 갖는 호스트 데이터를 비휘발성 메모리 셀들의 제1 그룹으로부터 비휘발성 메모리 셀들의 제2 그룹으로 재배치하는 것을 포함한다.
제4 실시예에서, 그리고 제1 내지 제3 실시예들 중 임의의 실시예에 더하여, 메모리 제어기는 우선순위 어드레스들에 기초하여 비휘발성 메모리 셀들의 제1 그룹 내의 가비지 수집을 수행하도록 추가로 구성되며, 이는 메모리 제어기가 우선순위 어드레스들을 갖는 호스트 데이터를 중간 저장소에 유지하고 우선순위 어드레스들 중 하나를 갖지 않는 호스트 데이터를 메인 저장소에 재배치하도록 구성되는 것을 포함한다.
제5 실시예에서, 그리고 제1 내지 제4 실시예들 중 임의의 실시예에 더하여, 메모리 제어기는: 비휘발성 메모리 셀들의 제1 그룹을 메모리 셀당 단일 비트로 프로그래밍하고; 비휘발성 메모리 셀들의 제2 그룹을 메모리 셀당 다수의 비트들로 프로그래밍하도록 추가로 구성된다.
제6 실시예에서, 그리고 제1 내지 제5 실시예들 중 임의의 실시예에 더하여, 장치는 애플리케이션이 저장된 비일시적 저장소를 갖는 호스트 시스템을 더 포함한다. 호스트 시스템은 비일시적 저장소와 통신하는 프로세서를 더 포함한다. 애플리케이션은, 프로세서 상에서 실행될 때, 우선순위 어드레스들을, 우선순위 어드레스들에 대한 호스트 데이터가 중간 저장소에 유지될 우선순위를 받을 것이라는 표시와 함께 메모리 제어기에 제공하기 위해, 운영 체제 애플리케이션 프로그래밍 인터페이스(API)에 요청을 한다.
제7 실시예에서, 그리고 제6 실시예에 더하여, 애플리케이션은, 프로세서 상에서 실행될 때: 호스트 데이터의 사용을 모니터링하고; 호스트 데이터의 사용에 기초하여 비휘발성 메모리 셀들의 제1 그룹에서의 우선순위 저장을 위한 호스트 데이터를 선택한다.
제8 실시예에서, 그리고 제6 또는 제7 실시예들에 더하여, 애플리케이션은, 프로세서 상에서 실행될 때: 중간 저장소에서의 우선순위 저장을 위한 호스트 데이터의 선택을 허용하는 사용자 인터페이스를 제공하고; 사용자 인터페이스에서 호스트 데이터의 선택을 수신하고; 사용자 인터페이스에서 선택된 호스트 데이터에 대한 어드레스들의 세트에 액세스하고;선택된 호스트 데이터에 대한 어드레스들의 세트를 호스트 데이터의 우선순위 어드레스들의 세트로서 메모리 제어기에 제공한다.
제9 실시예에서, 그리고 제6 실시예 내지 제8 실시예 중 어느 하나의 실시예에 더하여, 애플리케이션은, 프로세서 상에서 실행될 때: 파일에 대한 우선순위 가중치의 선택을 허용하는 사용자 인터페이스를 제공하고 - 우선순위 가중치는 적어도 3개의 가능한 가중치들로부터 선택된 값임 -; 선택된 파일에 대한 우선순위 가중치의 사용자 인터페이스에서의 선택을 수신하고; 선택된 파일에 대한 어드레스들의 세트에 액세스하고 - 어드레스들의 세트는 우선순위 어드레스들의 세트임 -;어드레스들의 세트를, 우선순위 가중치를 갖는 호스트 데이터의 우선순위 어드레스들의 세트로서, 우선순위 가중치에 따라 선택된 파일에 대한 어드레스들의 세트가 비휘발성 메모리 셀들의 제1 그룹에 유지될 우선순위를 가질 것이라는 표시와 함께 메모리 제어기에 제공한다.
제10 실시예에서, 그리고 제6 내지 제9 실시예 중 임의의 실시예에 더하여, 장치는: 메모리 제어기에 커플링된 통신 인터페이스; 및 통신 인터페이스에 커플링된 디바이스 드라이버를 포함한다. 디바이스 드라이버는 비휘발성 메모리 액세스 프로토콜을 사용하여 메모리 제어기와 통신하도록 구성된다. 애플리케이션은, 프로세서 상에서 실행될 때, 장치는 비휘발성 메모리 액세스 프로토콜을 이용하여 통신하는 디바이스 드라이버 및 메모리 제어기를 포함하는 대역내 통신을 이용하여 우선순위 어드레스들을 메모리 제어기에 제공한다.
제11 실시예에서, 그리고 제1 내지 제10 실시예들 중 임의의 실시예에 더하여, 비휘발성 메모리 셀들의 제1 그룹은 ReRAM 메모리 셀들, 상변화 메모리(PCM) 메모리 셀들, 또는 자기 RAM 메모리 셀들 중 하나 이상을 포함한다.
일 실시예는 통신 링크에 의해 접속되는 호스트 시스템 및 비휘발성 저장 디바이스를 포함하는 비휘발성 메모리 시스템을 동작시키는 방법을 포함한다. 비휘발성 저장 디바이스는 메모리 제어기 및 비휘발성 메모리 셀들을 포함한다. 방법은: 비휘발성 메모리 셀당 하나의 비트에서 비휘발성 메모리 셀들의 제1 그룹을 포함하는 중간 저장소에 호스트 데이터를 저장하는 단계; 비휘발성 메모리 셀당 다수의 비트들에서 비휘발성 메모리 셀들의 제2 그룹을 포함하는 메인 저장소에 호스트 데이터를 저장하는 단계; 우선순위 논리 어드레스들을 포함하는 하나 이상의 요청들을 호스트 시스템으로부터 통신 링크를 통해 메모리 제어기에 제공하는 단계 - 우선순위 논리 어드레스들에 대한 호스트 데이터는 우선순위 논리 어드레스를 갖지 않는 호스트 데이터에 앞서 중간 저장소에 유지될 우선순위를 받을 것임 -; 및 메모리 제어기에 의해, 요청들 내의 우선순위 논리 어드레스들에 대한 호스트 데이터에, 우선순위 논리 어드레스들 중 하나를 갖지 않는 호스트 데이터에 앞서 중간 저장소에 유지될 우선순위를 부여하는 단계를 포함.
일 실시예는 호스트 시스템 및 비휘발성 메모리 셀들을 갖는 비휘발성 저장 디바이스를 포함하는 비휘발성 메모리 시스템을 포함하며, 비휘발성 메모리 시스템은: 비휘발성 메모리 셀당 하나의 비트에서 비휘발성 메모리 셀들의 제1 그룹을 포함하는 중간 저장소에 호스트 데이터를 저장하고, 비휘발성 메모리 셀당 다수의 비트들에서 비휘발성 메모리 셀들의 제2 그룹을 포함하는 메인 저장소에 호스트 데이터를 저장하기 위한 프로그래밍 수단; 중간 저장소에 유지될 우선순위를 받을 우선순위 호스트 데이터를 선택하기 위한 우선순위 호스트 데이터 선택 수단; 우선순위 호스트 데이터에 대한 우선순위 논리 어드레스들을, 우선순위 논리 어드레스들에 대한 우선순위 호스트 데이터가 중간 저장소에 유지될 우선순위를 받을 것이라는 표시와 함께 비휘발성 저장 디바이스에 추가로 제공하기 위한 우선순위 호스트 데이터 제공 수단; 비휘발성 저장 디바이스 내의 우선순위 어드레스 테이블에 우선순위 논리 어드레스들을 저장하기 위한 우선순위 어드레스 저장 수단; 및 우선순위 어드레스 테이블에서 우선순위 논리 어드레스들 중 임의의 것을 갖는 우선순위 호스트 데이터에게, 우선순위 어드레스 테이블에 있지 않은 논리 어드레스를 갖는 호스트 데이터에 앞서 중간 저장소에 유지될 우선순위를 부여하는 메모리 제어기 수단을 포함한다.
일 실시예에서, 프로그래밍 수단은 메모리 제어기(122), 프로세서(122c), 상태 기계(112), 온-칩 어드레스 디코더(114), 전력 제어(116), 디코더들(124/132), 판독/기록 회로들(128), 백엔드 모듈 중 하나 이상을 포함한다. 프로그래밍 수단은 다른 하드웨어 및/또는 소프트웨어(예를 들어, 프로세서 상에서 실행될 때 프로그래밍 수단의 전부 또는 일부를 구현하는 코드)를 포함할 수 있다.
일 실시예에서, 우선순위 호스트 데이터 선택 수단은 호스트 프로세서(150) 및/또는 우선순위 호스트 데이터 애플리케이션(164)(프로세서(150) 상에서 실행되는 코드일 수 있음) 중 하나 이상을 포함한다. 우선순위 호스트 데이터 선택 수단은 다른 하드웨어 및/또는 소프트웨어(예를 들어, 프로세서 상에서 실행될 때 우선순위 호스트 데이터 선택 수단의 전부 또는 일부를 구현하는 코드)를 포함할 수 있다.
일 실시예에서, 우선순위 호스트 데이터 제공 수단은 호스트 프로세서(150), 우선순위 호스트 데이터 애플리케이션(164), O/S API들(166), 파일 시스템(168), 디바이스 드라이버들(170) 중 하나 이상을 포함한다. 우선순위 호스트 데이터 제공 수단은 다른 하드웨어 및/또는 소프트웨어(예를 들어, 프로세서 상에서 실행될 때 우선순위 호스트 데이터 제공 수단의 전부 또는 일부를 구현하는 코드)를 포함할 수 있다.
일 실시예에서, 우선순위 어드레스 저장 수단은 메모리 제어기(122), 프로세서(122c), RAM(122b), 버퍼 관리/버스 제어(314), 중간 저장 관리 제어(334) 중 하나 이상을 포함한다. 우선순위 어드레스 저장 수단은 다른 하드웨어 및/또는 소프트웨어(예를 들어, 프로세서 상에서 실행될 때 우선순위 어드레스 저장 수단의 전부 또는 일부를 구현하는 코드)를 포함할 수 있다.
일 실시예에서, 메모리 제어기 수단은 메모리 제어기(122), 프로세서(122c), 중간 저장 관리 제어(334) 중 하나 이상을 포함한다. 메모리 제어기 수단은 다른 하드웨어 및/또는 소프트웨어(예를 들어, 프로세서 상에서 실행될 때 메모리 제어기 수단의 전부 또는 일부를 구현하는 코드)를 포함할 수 있다.
일 실시예는 API에 제공된 우선순위 논리 어드레스들을 수신하기 위한 디바이스 드라이버 수단을 더 포함하며, 디바이스 드라이버 수단은 추가로 우선순위 논리 어드레스들을 메모리 제어기 수단에 제공하기 위한 것이다. 디바이스 드라이버 수단은 호스트 프로세서(150), 디바이스 드라이버들(170) 중 하나 이상을 포함할 수 있다. 디바이스 드라이버 수단은 다른 하드웨어 및/또는 소프트웨어(예를 들어, 프로세서 상에서 실행될 때 디바이스 드라이버 수단의 전부 또는 일부를 구현하는 코드)를 포함할 수 있다.
위의 수단들 중 임의의 것(예를 들어, 프로그래밍 수단, 우선순위 호스트 데이터 선택 수단, 우선순위 호스트 데이터 제공 수단, 우선순위 어드레스 저장 수단, 메모리 제어기 수단, 디바이스 드라이버 수단)은 패키징된 기능 하드웨어 유닛(예를 들어, 전기 회로), 관련된 기능들의 특정 기능을 통상 수행하는 하나 이상의 프로세서들 또는 프로세싱 회로부에 의해 실행가능한 프로그램 코드(예를 들어, 소프트웨어 또는 펌웨어), 또는 더 큰 시스템과 인터페이싱하는 자립형 하드웨어 또는 소프트웨어 컴포넌트를 포함할 수 있다. 예를 들어, 위의 수단들 중 주문형 집적 회로(ASIC), 필드 프로그램가능 게이트 어레이(FPGA), 전기 회로, 디지털 논리 회로, 아날로그 회로, 개별 회로들의 조합, 게이트들, 또는 임의의 다른 유형의 하드웨어, 또는 이들의 조합을 포함할 수 있다.
본 문헌의 목적상, 용어들 "기록하다(write)" 및 "저장하다(store)"는 종종 용어들 "기록(writing)" 및 "저장(storing)"과 상호교환적으로 사용된다.
본 문헌의 목적상, 명세서 내에서 "실시예", "일 실시예", "일부 실시예들", 또는 "다른 실시예"에 대한 언급은 상이한 실시예들 또는 동일한 실시예를 설명하는 데 사용될 수 있다.
본 문헌의 목적상, 접속은 직접 접속 또는 (예를 들어, 하나 이상의 다른 부품들을 통한) 간접 접속일 수 있다. 일부 경우들에서, 소정 요소가 다른 요소에 접속되거나 커플링되는 것으로 언급되는 경우, 그 요소는 다른 요소에 직접적으로 접속되거나 개재 요소들을 통해 다른 요소에 간접적으로 접속될 수 있다. 소정 요소가 다른 요소에 직접적으로 접속되는 것으로 언급되는 경우, 그 요소와 다른 요소 사이에 개재 요소들이 없다. 2개의 디바이스들은, 그들이 직접적으로 또는 간접적으로 접속되어 그들이 그들 사이에서 전자 신호들을 통신할 수 있게 되는 경우에 "통신 중"이다.
본 문서의 목적들을 위해, 용어들 "~에 기초하여" 및 "~에 의존하여"는 "~에 적어도 부분적으로 기초하여"로 이해될 수 있다.
본 기술의 다양한 실시예들이 전술되었지만, 이들은 예로서 제시되었을 뿐, 제한하는 것은 아니라는 점을 이해해야 한다. 본 기술의 사상 및 범주로부터 벗어남이 없이 형태 및 세부사항에 있어서 다양한 변경들이 그 안에서 이루어질 수 있음이 당업자에게 명백할 것이다. 예를 들어, 몇 가지 변형들이 위에서 상세히 설명되었지만, 다른 수정들 또는 추가들이 가능하다. 특히, 본 명세서에 설명된 것에 더하여 추가의 특징부들 및/또는 변형들이 제공될 수 있다. 예를 들어, 전술된 구현예들은 개시된 특징부들의 다양한 조합들 및 하위-조합들 및/또는 위에 개시된 여러 추가 특징부들의 조합들 및 하위-조합들에 관한 것일 수 있다. 또한, 첨부 도면들에 도시되고/도시되거나 본 명세서에 설명된 논리 흐름은 바람직한 결과를 달성하기 위해 도시된 특정 순서 또는 순차적 순서를 필요로 하는 것은 아니다. 다른 실시예들이 하기의 청구범위의 범주 내에 있다.
본 기술의 실시예들은 특정 기능들 및 그의 관계들의 성능을 나타내는 기능 구성 블록들의 도움으로 전술되었다. 이들 기능성 빌딩 블록들의 경계들은 종종 설명의 편의를 위해 본 명세서에서 정의되었다. 특정된 기능들 및 그의 관계들이 적절하게 수행되는 한 대안적인 경계들이 정의될 수 있다. 따라서, 임의의 그러한 대안적인 경계들이 청구된 기술의 범주 및 사상 내에 있다. 당업자는 이들 기능적 구성 블록들이 개별 구성요소들, 주문형 집적 회로들, 적절한 소프트웨어 등을 실행하는 프로세서들, 또는 이들의 임의의 조합에 의해 구현될 수 있음을 인식할 것이다.
본 기술의 범위 및 범주는 전술된 예시적인 실시예들 중 임의의 실시예에 의해 제한되지 않아야 하며, 단지 하기의 청구범위 및 그의 등가물에 따라서만 한정되어야 한다.
본 주제가 구조적 특징들 및/또는 방법론적 액트(act)들에 고유한 언어로 설명되었지만, 첨부된 청구범위에 한정된 주제는 반드시 위에 설명된 특정한 특징들 또는 액트들로 제한되지는 않음이 이해되어야 한다. 오히려, 위에 설명된 특정한 특징들 및 액트들은 청구범위를 구현하는 예시적인 형태들로서 개시된다.
전술한 상세한 설명은 예시 및 설명의 목적으로 제시되었다. 그것은 망라하거나 개시된 정확한 형태로 제한하도록 의도되지 않는다. 상기의 교시 내용의 관점에서 많은 수정들 및 변형들이 가능하다. 설명된 실시예들은 제안된 기술의 원리들 및 그의 실제 응용을 가장 잘 설명하기 위해 선택되었고, 이에 의해, 당업자가 다양한 실시예들에서 그리고 심사숙고된 특정 용도에 적절하게 된 바와 같은 다양한 수정예들로 그것을 가장 잘 활용할 수 있게 하였다. 그 범주는 명세서에 첨부된 청구범위에 의해 정의되는 것으로 의도된다.

Claims (15)

  1. 장치로서,
    비휘발성 메모리 셀들(126); 및
    상기 비휘발성 메모리 셀들에 커플링되는 메모리 제어기(122)를 포함하며, 상기 메모리 제어기는:
    상기 비휘발성 메모리 셀들의 제1 그룹을 호스트 시스템(140)으로부터의 호스트 데이터에 대한 중간 저장소(intermediate storage)(132)로서, 그리고 상기 비휘발성 메모리 셀들의 제2 그룹을 상기 호스트 시스템으로부터의 호스트 데이터에 대한 메인 저장소(main storage)(134)로서 지정하고 - 상기 중간 저장소는 상기 메인 저장소의 판독 레이턴시보다 더 낮은 판독 레이턴시를 가짐 -;
    상기 중간 저장소에 유지될 우선순위를 가질 호스트 데이터를 식별하는 우선순위 어드레스들을 상기 호스트 시스템으로부터 수신하고;
    상기 우선순위 어드레스들을 갖는 호스트 데이터에 상기 중간 저장소에 유지될 우선순위를 부여하도록 구성되는, 장치.
  2. 제1항에 있어서, 상기 메모리 제어기는:
    상기 우선순위 어드레스들에 기초하여, 상기 호스트 데이터가 상기 비휘발성 메모리 셀들의 상기 제1 그룹에 유지되는지 또는 상기 비휘발성 메모리 셀들의 상기 제2 그룹에 재배치되는지(relocated) 여부를 관리하도록 추가로 구성되는, 장치.
  3. 제1항 또는 제2항에 있어서, 상기 메모리 제어기는:
    상기 우선순위 어드레스들에 기초하여 상기 중간 저장소로부터 상기 메인 저장소로의 재배치를 위한 호스트 데이터를 선택하도록 추가로 구성되며, 이는 상기 우선순위 어드레스들 중 하나 이외의 어드레스를 갖는 호스트 데이터를 상기 비휘발성 메모리 셀들의 상기 제1 그룹으로부터 상기 비휘발성 메모리 셀들의 상기 제2 그룹으로 재배치하는 것을 포함하는, 장치.
  4. 제1항 내지 제3항 중 어느 한 항에 있어서, 상기 메모리 제어기는, 상기 우선순위 어드레스들에 기초하여 상기 비휘발성 메모리 셀들의 상기 제1 그룹 내의 가비지 수집(garbage collection)을 수행하도록 추가로 구성되며, 이는 상기 메모리 제어기가 상기 우선순위 어드레스들을 갖는 호스트 데이터를 상기 중간 저장소에 유지하고 상기 우선순위 어드레스들 중 하나를 갖지 않는 호스트 데이터를 상기 메인 저장소에 재배치하도록 구성되는 것을 포함하는, 장치.
  5. 제1항 내지 제4항 중 어느 한 항에 있어서, 상기 메모리 제어기는:
    상기 비휘발성 메모리 셀들의 상기 제1 그룹을 메모리 셀당 단일 비트로 프로그래밍하고;
    상기 비휘발성 메모리 셀들의 상기 제2 그룹을 메모리 셀당 다수의 비트들로 프로그래밍하도록 추가로 구성되는, 장치.
  6. 제1항 내지 제5항 중 어느 한 항에 있어서, 애플리케이션이 저장된 비일시적 저장소를 갖는 상기 호스트 시스템을 더 포함하며, 상기 호스트 시스템은 상기 비일시적 저장소와 통신하는 프로세서를 더 포함하고, 상기 애플리케이션은 상기 프로세서 상에서 실행될 때, 상기 우선순위 어드레스들을, 상기 우선순위 어드레스들에 대한 상기 호스트 데이터가 상기 중간 저장소에 유지될 우선순위를 받을 것이라는 표시와 함께 상기 메모리 제어기에 제공하기 위해, 운영 체제 애플리케이션 프로그래밍 인터페이스(API)에 요청을 하는, 장치.
  7. 제6항에 있어서, 상기 애플리케이션은, 상기 프로세서 상에서 실행될 때:
    호스트 데이터의 사용을 모니터링하고;
    상기 호스트 데이터의 사용에 기초하여 상기 비휘발성 메모리 셀들의 상기 제1 그룹에서의 우선순위 저장을 위한 호스트 데이터를 선택하는, 장치.
  8. 제6항 또는 제7항에 있어서, 상기 애플리케이션은, 상기 프로세서 상에서 실행될 때:
    상기 중간 저장소에서의 우선순위 저장을 위한 호스트 데이터의 선택을 허용하는 사용자 인터페이스를 제공하고;
    상기 사용자 인터페이스에서 호스트 데이터의 선택을 수신하고;
    상기 사용자 인터페이스에서 선택된 상기 호스트 데이터에 대한 어드레스들의 세트에 액세스하고;
    상기 선택된 호스트 데이터에 대한 어드레스들의 상기 세트를 상기 호스트 데이터의 상기 우선순위 어드레스들의 세트로서 상기 메모리 제어기에 제공하는, 장치.
  9. 제6항 내지 제8항 중 어느 한 항에 있어서, 상기 애플리케이션은, 상기 프로세서 상에서 실행될 때:
    파일에 대한 우선순위 가중치의 선택을 허용하는 사용자 인터페이스를 제공하고 - 상기 우선순위 가중치는 적어도 3개의 가능한 가중치들로부터 선택된 값임 -;
    선택된 파일에 대한 우선순위 가중치의 상기 사용자 인터페이스에서의 선택을 수신하고;
    상기 선택된 파일에 대한 어드레스들의 세트에 액세스하고 - 상기 어드레스들의 세트는 상기 우선순위 어드레스들의 세트임 -;
    상기 어드레스들의 세트를, 상기 우선순위 가중치를 갖는 상기 호스트 데이터의 상기 우선순위 어드레스들의 세트로서, 상기 우선순위 가중치에 따라 상기 선택된 파일에 대한 상기 어드레스들의 세트가 상기 비휘발성 메모리 셀들의 제1 그룹에 유지될 우선순위를 가질 것이라는 표시와 함께 상기 메모리 제어기에 제공하는, 장치.
  10. 제1항 내지 제9항 중 어느 한 항에 있어서,
    상기 메모리 제어기에 커플링된 통신 인터페이스; 및
    상기 통신 인터페이스에 커플링된 디바이스 드라이버를 더 포함하며, 상기 디바이스 드라이버는 비휘발성 메모리 액세스 프로토콜을 사용하여 상기 메모리 제어기와 통신하도록 구성되고, 상기 애플리케이션은, 상기 프로세서 상에서 실행될 때, 상기 비휘발성 메모리 액세스 프로토콜을 이용하여 통신하는 상기 디바이스 드라이버 및 상기 메모리 제어기를 포함하는 대역내 통신을 이용하여 상기 우선순위 어드레스들을 상기 메모리 제어기에 제공하는, 장치.
  11. 제1항 내지 제10항 중 어느 한 항에 있어서, 상기 비휘발성 메모리 셀들의 상기 제1 그룹은 ReRAM 메모리 셀들, 상변화 메모리(Phase-Change Memory, PCM) 메모리 셀들, 또는 자기(Magnetic) RAM 메모리 셀들 중 하나 이상을 포함하는, 장치.
  12. 통신 링크에 의해 접속된 호스트 시스템 및 비휘발성 저장 디바이스를 포함하는 비휘발성 메모리 시스템을 동작시키는 방법으로서, 상기 비휘발성 저장 디바이스는 메모리 제어기 및 비휘발성 메모리 셀들을 포함하며, 상기 방법은:
    비휘발성 메모리 셀당 하나의 비트에서 상기 비휘발성 메모리 셀들의 제1 그룹을 포함하는 중간 저장소에 호스트 데이터를 저장하는 단계;
    비휘발성 메모리 셀당 다수의 비트들에서 상기 비휘발성 메모리 셀들의 제2 그룹을 포함하는 메인 저장소에 호스트 데이터를 저장하는 단계;
    우선순위 논리 어드레스들을 포함하는 하나 이상의 요청들을 상기 호스트 시스템으로부터 상기 통신 링크를 통해 상기 메모리 제어기에 제공하는 단계 - 상기 우선순위 논리 어드레스들에 대한 호스트 데이터는 우선순위 논리 어드레스를 갖지 않는 호스트 데이터에 앞서 상기 중간 저장소에 유지될 우선순위를 받을 것임 -; 및
    상기 메모리 제어기에 의해, 상기 요청들 내의 상기 우선순위 논리 어드레스들에 대한 호스트 데이터에, 상기 우선순위 논리 어드레스들 중 하나를 갖지 않는 호스트 데이터에 앞서 상기 중간 저장소에 유지될 우선순위를 부여하는 단계
    를 포함하는, 방법.
  13. 제12항에 있어서, 상기 요청들 내의 상기 우선순위 논리 어드레스들에 대한 호스트 데이터에 상기 중간 저장소에 유지될 우선순위를 부여하는 단계는:
    상기 우선순위 논리 어드레스들 중 하나가 아닌 비-우선순위 논리 어드레스를 갖는 호스트 데이터를 상기 비휘발성 메모리 셀들의 상기 제1 그룹으로부터 상기 비휘발성 메모리 셀들의 상기 제2 그룹으로 플러시(flush)하는 단계를 포함하는, 방법.
  14. 제12항 또는 제13항에 있어서, 상기 요청들 내의 상기 우선순위 논리 어드레스들에 대한 호스트 데이터에 상기 중간 저장소에 유지될 우선순위를 부여하는 단계는:
    상기 우선순위 논리 어드레스들에 기초하여 상기 비휘발성 메모리 셀들의 상기 제1 그룹 내에서 가비지 수집을 수행하는 단계를 포함하며, 상기 가비지 수집을 수행하는 단계는 상기 우선순위 논리 어드레스들 중 하나가 아닌 비-우선순위 논리 어드레스를 갖는 호스트 데이터를 상기 비휘발성 메모리 셀들의 상기 제1 그룹으로부터 상기 비휘발성 메모리 셀들의 상기 제2 그룹으로 전송하는 단계를 포함하는, 방법.
  15. 제12항 내지 제14항 중 어느 한 항에 있어서,
    상기 하나 이상의 요청들을 상기 메모리 제어기에 포워딩하기 위해 상기 호스트 시스템의 운영 체제 애플리케이션 프로그래밍 인터페이스(API)에 상기 하나 이상의 요청들을 제공하는 단계를 더 포함하는, 방법.
KR1020207014439A 2018-04-19 2019-02-05 저장 캐시 관리 KR102378295B1 (ko)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US201862660123P 2018-04-19 2018-04-19
US62/660,123 2018-04-19
US15/982,805 US10776268B2 (en) 2018-04-19 2018-05-17 Priority addresses for storage cache management
US15/982,805 2018-05-17
PCT/US2019/016713 WO2019203915A1 (en) 2018-04-19 2019-02-05 Storage cache management

Publications (2)

Publication Number Publication Date
KR20200133716A true KR20200133716A (ko) 2020-11-30
KR102378295B1 KR102378295B1 (ko) 2022-03-25

Family

ID=68237920

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020207014439A KR102378295B1 (ko) 2018-04-19 2019-02-05 저장 캐시 관리

Country Status (5)

Country Link
US (1) US10776268B2 (ko)
KR (1) KR102378295B1 (ko)
CN (1) CN111373383B (ko)
DE (1) DE112019000161T5 (ko)
WO (1) WO2019203915A1 (ko)

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10496548B2 (en) * 2018-02-07 2019-12-03 Alibaba Group Holding Limited Method and system for user-space storage I/O stack with user-space flash translation layer
JP2020021385A (ja) * 2018-08-03 2020-02-06 キオクシア株式会社 メモリシステム
US11194473B1 (en) * 2019-01-23 2021-12-07 Pure Storage, Inc. Programming frequently read data to low latency portions of a solid-state storage array
CN112069147B (zh) * 2020-11-16 2021-01-29 湖南源科创新科技有限公司 面向多主机fat文件系统的fat共享系统及共享方法
TW202225987A (zh) 2020-12-21 2022-07-01 韓商愛思開海力士有限公司 用以分配儲存裝置的多個記憶通道以進行串流資料寫入的方法、儲存裝置及其記錄媒體
US20220374216A1 (en) * 2021-05-20 2022-11-24 Lenovo (United States) Inc. Method of manufacturing information processing apparatus and mobile computer
US11934672B2 (en) 2021-08-26 2024-03-19 International Business Machines Corporation Cached workload management for a multi-tenant host

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20130042058A1 (en) * 2007-08-14 2013-02-14 Samsung Electronics Co., Ltd. Solid state memory (ssm), computer system including an ssm, and method of operating an ssm
US20130262761A1 (en) * 2012-03-29 2013-10-03 Samsung Electronics Co., Ltd. Memory device and method of operating the same
US20190065085A1 (en) * 2017-08-31 2019-02-28 Micron Technology, Inc. Prioritized security

Family Cites Families (18)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6463509B1 (en) 1999-01-26 2002-10-08 Motive Power, Inc. Preloading data in a cache memory according to user-specified preload criteria
KR100408758B1 (en) * 2003-01-22 2003-12-11 Nexon Co Ltd Method for controlling user application program
US7502901B2 (en) 2003-03-26 2009-03-10 Panasonic Corporation Memory replacement mechanism in semiconductor device
US7774563B2 (en) 2007-01-09 2010-08-10 International Business Machines Corporation Reducing memory access latency for hypervisor- or supervisor-initiated memory access requests
US7680982B2 (en) * 2007-02-20 2010-03-16 International Business Machines Corporation Preservation of cache data following failover
US8499120B2 (en) 2008-10-17 2013-07-30 Seagate Technology Llc User selectable caching management
JP5192352B2 (ja) 2008-10-30 2013-05-08 株式会社日立製作所 記憶装置及びデータ格納領域管理方法
US8356137B2 (en) * 2010-02-26 2013-01-15 Apple Inc. Data storage scheme for non-volatile memories based on data priority
US9268692B1 (en) 2012-04-05 2016-02-23 Seagate Technology Llc User selectable caching
US9128847B2 (en) 2012-10-18 2015-09-08 Hitachi, Ltd. Cache control apparatus and cache control method
US9430376B2 (en) * 2012-12-26 2016-08-30 Western Digital Technologies, Inc. Priority-based garbage collection for data storage systems
US9110813B2 (en) 2013-02-14 2015-08-18 Avago Technologies General Ip (Singapore) Pte Ltd Cache load balancing in storage controllers
US9367258B2 (en) 2013-03-11 2016-06-14 New Concepts Development Corp. Systems and methods for managing storage space in hybrid data storage systems
JP6098301B2 (ja) 2013-03-29 2017-03-22 富士通株式会社 ストレージ制御装置、ストレージ制御方法、およびストレージ制御プログラム
US9645920B2 (en) 2013-06-25 2017-05-09 Marvell World Trade Ltd. Adaptive cache memory controller
US9563382B2 (en) 2014-06-05 2017-02-07 Sandisk Technologies Llc Methods, systems, and computer readable media for providing flexible host memory buffer
JP5974133B1 (ja) 2015-03-20 2016-08-23 株式会社東芝 メモリシステム
US20160283390A1 (en) 2015-03-27 2016-09-29 Intel Corporation Storage cache performance by using compressibility of the data as a criteria for cache insertion

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20130042058A1 (en) * 2007-08-14 2013-02-14 Samsung Electronics Co., Ltd. Solid state memory (ssm), computer system including an ssm, and method of operating an ssm
US20130262761A1 (en) * 2012-03-29 2013-10-03 Samsung Electronics Co., Ltd. Memory device and method of operating the same
US20190065085A1 (en) * 2017-08-31 2019-02-28 Micron Technology, Inc. Prioritized security

Also Published As

Publication number Publication date
US10776268B2 (en) 2020-09-15
DE112019000161T5 (de) 2020-08-27
CN111373383A (zh) 2020-07-03
KR102378295B1 (ko) 2022-03-25
CN111373383B (zh) 2023-05-23
US20190324903A1 (en) 2019-10-24
WO2019203915A1 (en) 2019-10-24

Similar Documents

Publication Publication Date Title
KR102378295B1 (ko) 저장 캐시 관리
CN109840215B (zh) 未对齐写入的处理
US9740425B2 (en) Tag-based wear leveling for a data storage device
US8996959B2 (en) Adaptive copy-back method and storage device using same
US10956083B2 (en) Method and system for input-output throttling to improve quality of service in a solid state drive
US9886341B2 (en) Optimizing reclaimed flash memory
US10795827B2 (en) Adaptive management of intermediate storage
US9633738B1 (en) Accelerated physical secure erase
US9904621B2 (en) Methods and systems for flash buffer sizing
US9766976B2 (en) Data storage device and method for storing multiple codewords and redundancy information at a word line
CN110275673B (zh) 存储装置及其操作方法
US20170177469A1 (en) Storage system that performs host-initiated garbage collection
US20170116070A1 (en) Systems and methods of detecting errors during read operations and skipping word line portions
US10303384B1 (en) Task readiness for queued storage tasks
US9904477B2 (en) System and method for storing large files in a storage device
US20210157501A1 (en) Common pool management
CN112306902A (zh) 存储器控制器及操作其的方法
US10642525B2 (en) Multiple-stage data lifetime management for storage devices
CN111798910A (zh) 存储装置及其操作方法
KR20210086990A (ko) 패리티를 사용한 메모리 액세스 병렬성 증가
CN111105832A (zh) 存储装置和操作存储装置的方法
CN112306385A (zh) 存储器控制器及其操作方法
CN114863962A (zh) 存储器系统及其操作方法
CN113760794A (zh) 存储装置和操作存储装置的方法
KR20210128780A (ko) 메모리 컨트롤러 및 이를 포함하는 저장 장치

Legal Events

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