KR20190022290A - 메모리 시스템, 메모리 시스템에 데이터를 기록하는 방법 및 메모리 시스템으로부터 데이터를 판독하는 방법 - Google Patents

메모리 시스템, 메모리 시스템에 데이터를 기록하는 방법 및 메모리 시스템으로부터 데이터를 판독하는 방법 Download PDF

Info

Publication number
KR20190022290A
KR20190022290A KR1020180036599A KR20180036599A KR20190022290A KR 20190022290 A KR20190022290 A KR 20190022290A KR 1020180036599 A KR1020180036599 A KR 1020180036599A KR 20180036599 A KR20180036599 A KR 20180036599A KR 20190022290 A KR20190022290 A KR 20190022290A
Authority
KR
South Korea
Prior art keywords
lba
data
memory controller
sector
memory
Prior art date
Application number
KR1020180036599A
Other languages
English (en)
Other versions
KR102603070B1 (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 KR20190022290A publication Critical patent/KR20190022290A/ko
Application granted granted Critical
Publication of KR102603070B1 publication Critical patent/KR102603070B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/023Free address space management
    • G06F12/0238Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory
    • G06F12/0246Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory in block erasable memory, e.g. flash memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/10Address translation
    • G06F12/1009Address translation using page tables, e.g. page table structures
    • 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/0292User address space allocation, e.g. contiguous or non contiguous base addressing using tables or multilevel address translation means
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/20Employing a main memory using a specific memory technology
    • G06F2212/202Non-volatile memory
    • G06F2212/2022Flash memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/40Specific encoding of data in memory or cache
    • G06F2212/401Compressed data
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/72Details relating to flash memory management
    • G06F2212/7201Logical to physical mapping or translation of blocks or pages

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Memory System (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

메모리 시스템은, 복수의 물리 섹터들을 포함하는 비휘발성 메모리 장치와, 매핑 테이블과, 복수의 해시 함수들을 포함하고 메모리 컨트롤러를 포함한다. 메모리 컨트롤러는 매핑 테이블 및 해시 함수를 이용하여 물리 섹터를 액세스하도록 구성된다. 메모리 컨트롤러는, 호스트로부터 논리 블록 어드레스(logical block addresse(LBA))의 시퀀스와 LBA의 각각을 위한 논리 섹터 데이터를 수신하고, 시퀀스 중에서 제1 논리 블록 어드레스(LBA)에 해시 함수들 중 선택된 해시 함수를 동작시켜 제1 가상 어드레스를 생성하고, 논리 섹터 데이터를 압축하여 압축 데이터를 생성하고, 압축 데이터를 제1 가상 어드레스와 연관된 물리 섹터 중의 제1 물리 섹터에 저장하도록 구성된다.

Description

메모리 시스템, 메모리 시스템에 데이터를 기록하는 방법 및 메모리 시스템으로부터 데이터를 판독하는 방법{Memory system, a method of writing data to the memory system, and a method of reading data from the memory system}
본 발명의 일 실시예는 데이터 압축을 이용하여 데이터를 저장하는 메모리 시스템 및 방법에 관한 것이다.
비휘발성 메모리 장치는 전원이 차단되었을 때에도 저장된 데이터를 유지한다. 비휘발성 메모리 장치의 예들은 ROM(read only memory), PROM(programmable ROM), EPROM(electrically programmable ROM), EEPROM(electrically erasable programmable ROM), 플래시 메모리 장치, PRAM(phase-change RAM), MRAM(magnetic RAM), RRAM(resistive RAM), FRAM(ferroelectric RAM) 등을 포함한다.
솔리드 스테이트 드라이브(solid state drive(SSD))는 데이터를 영구적으로 저장하기 위하여 집적 회로 어셈블리를 메모리로서 이용한 고체 상태 저장 장치이다. SSD는 데이터를 저장하는 비휘발성 메모리를 포함한다. 그러나, SSD가 단지 하나의 논리 섹터를 비휘발성 메모리의 각각의 물리 섹터에 저장할 수 있기 때문에, SSD의 용량은 제한된다.
본 발명의 실시예에 따르면, 메모리 시스템, 메모리 시스템에 데이터를 기록하는 방법, 및 메모리 시스템으로부터 데이터를 판독하는 방법이 제공된다.
본 발명의 일 실시예에 따르면, 메모리 시스템은, 복수의 물리 섹터를 포함하는 비휘발성 메모리 장치와, 매핑 테이블과, 복수의 해시 함수를 포함하는 메모리 컨트롤러를 포함한다. 메모리 컨트롤러는 매핑 테이블 및 해시 함수를 이용하여 물리 섹터를 액세스하도록 구성된다. 메모리 컨트롤러는, 호스트로부터 논리 블록 어드레스(logical block addresse(LBA))의 시퀀스와 LBA의 각각을 위한 논리 섹터 데이터를 수신하고, 시퀀스 중에서 제1 논리 블록 어드레스(LBA)에 해시 함수 중 선택된 해시 함수를 동작시켜 제1 가상 어드레스를 생성하고, 논리 섹터 데이터를 압축하여 압축 데이터를 생성하고, 압축 데이터를 제1 가상 어드레스와 연관된 물리 섹터 중의 제1 물리 섹터에 저장하도록 구성된다.
본 발명의 일 실시예에 따르면, 메모리 시스템에 데이터를 기록하는 방법은, 메모리 컨트롤러에 의해, 논리 블록 어드레스(logical block addresse(LBA))의 시퀀스와, LBA의 각각을 위한 논리 섹터 데이터를 호스트로부터 수신하는 단계; 메모리 컨트롤러에 의해, 논리 섹터 데이터를 압축하는 단계; 메모리 컨트롤러에 의해, LBA들 중 제1 LBA에 복수의 해시 함수 중 선택된 해시 함수를 실행하여 가상 어드레스를 생성하는 단계; 및 가상 어드레스와 연관된 비휘발성 메모리의 제1 물리 섹터에 압축 데이터를 저장하는 단계를 포함한다.
본 발명의 일 실시예에 따르면, 메모리 시스템으로부터 데이터를 판독하는 방법은, 메모리 컨트롤러에 의해, 논리 블록 어드레스(logical block addresse(LBA))를 호스트로부터 수신하는 단계; 메모리 컨트롤러에 의해, LBA와 연관된 매핑 테이블의 엔트리를 액세스하여 인덱스와 포인터를 검색하는 단계; 메모리 컨트롤러에 의해, LBA에서 포인터를 빼서 값을 생성하는 단계; 메모리 컨트롤러에 의해, 인덱스에 의해 식별된 해시 함수를 실행하여 가상 어드레스를 생성하는 단계; 및 가상 어드레스와 연관된 비휘발성 메모리의 물리 섹터로부터 데이터를 검색하는 단계를 포함한다.
본 발명의 실시예에 따르면, 데이터를 효율적으로 기록 및/또는 판독할 수 있다.
본 발명의 개념은 다음의 첨부된 도면을 참조하여 이의 예시적인 실시예들을 상세하게 설명함으로써 더욱 명확하게 될 것이다.
도 1은 본 발명의 일 실시예에 따른 메모리 시스템을 도시한다.
도 2는 시스템의 버퍼를 도시한다.
도 3은 본 발명의 일 실시예에 따른 메모리 시스템에 데이터를 기록하는 방법을 도시한다.
도 4는 본 발명의 일 실시예에 따른 시스템에서 사용될 수 있는 매핑 테이블의 일례를 도시한다.
도 5는 본 발명의 일 실시예에 따른 시스템으로부터 데이터를 판독하는 방법을 도시한다.
도 6은 시스템에서 업데이트되는 데이터의 일례를 도시한다.
도 7은 본 발명의 일 실시예에 따른 물리 섹터로부터 논리 섹터를 구별하는데 사용되는 정보의 저장의 일례를 도시한다.
도 8은 본 발명의 일 실시예에 따른 시스템에서 사용될 수 있는 매핑 테이블의 일례를 도시한다.
도 9는 본 발명의 일 실시예에 따른 다수의 물리 섹터에 걸쳐 분할되는 데이터의 일례를 도시한다.
도 10은 본 발명의 일 실시예에 따른 다수의 물리 섹터에 걸쳐 분할되는 데이터의 다른 예를 도시한다.
이하, 본 발명 개념의 예시적인 실시예가 첨부된 도면과 함께 설명된다. 아래에서, 상세한 구성 및 구조와 같은 상세는 독자가 본 발명 개념의 실시예를 이해하는데 도움을 주기 위하여 제공된다. 따라서, 여기에서 설명된 실시예는 본 발명 개념의 실시예로부터 벗어나지 않으면서 다양하게 변경되거나 수정될 수 있다.
도면 또는 이어지는 상세한 설명에서의 모듈들은 상세한 설명에 설명되거나 도면에 예시된 컴포넌트들에 추가하여 다른 모듈들과 연결될 수 있다. 모듈들 또는 컴포넌트들 사이의 각각의 연결은 통신에 의한 연결일 수 있거나 물리적 연결일 수 있다.
여기에 개시된 실시예들은 물리 어드레스에서 동작될 때 가상 어드레스를 리턴하는 해시 함수(hash function)(예를 들어, 의사 랜덤 함수)의 인덱스를 이용하여 비휘발성 메모리 스토리지 장치의 어드레스 매핑 테이블을 조직화하는 방법을 제공한다.
도 1은 본 발명의 일 실시예에 따른 메모리 시스템을 도시한다. 메모리 시스템은 메모리 스토리지 장치(100), RAM(116) 및 호스트(112)를 포함한다. 메모리 스토리지 장치(100)와 RAM(116)은 SDD 내에 구현될 수 있다.
메모리 스토리지 장치(100)는 메모리 컨트롤러(102)(예를 들어, SSD(solid state device) 컨트롤러), 입출력(I/O) 인터페이스(104), 데이터 경로(106), 비휘발성 메모리(108)를 포함한다. 비휘발성 메모리가 NAND 형 또는 NOR 형 플래시 메모리일 때, 메모리 스토리지 장치(100)는 FTL(Flash Transition Layer)(110)(예를 들어, 소프트웨어 기반)을 더 포함할 수 있다. 호스트(112)는 입출력 인터페이스(104)를 이용하여 메모리 스토리지 장치(100)와 통신한다. 비휘발성 메모리가 플래시 메모리일 때, 플래시 메모리는 데이터를 저장하기 위한 복수의 플래시 어레이를 포함한다.
비휘발성 메모리(108)가 플래시 메모리일 때, 메모리 컨트롤러(102)는 플래시 메모리(108)와의 통신을 위하여 FTL(110)과 통신한다. FTL(110)은 LBA 어레이의 형태로 플래시 페이지를 호스트(112)에 제공한다. 예를 들어, FTL(110)은 선형 플래시 메모리가 디스크 드라이브와 유사한 시스템인 것처럼 보이게 하도록 기존의 운영 체제와 함께(또는 일부 임베디드 애플리케이션에서는 운영 체제로서) 작동하는 드라이버일 수 있다.
플래시 어레이들은 블록들을 형성하도록 결합될 수 있다. 이때, 각각의 블록들은 복수개의 페이지들을 포함할 수 있다. 통상적으로 사용되는 플래시 페이지 크기의 예들은 2 킬로바이트(KB), 4 KB, 8 KB, 16 KB 등을 포함할 수 있지만, 이에 한정되지 않는다. 비휘발성 메모리(108)는 고정된 개수의 블록을 가지며, 각각의 블록은 최대 개수 N의 페이지를 포함한다(예를 들어, N은 32, 64, 128, 256 등과 같을 수 있다). 메모리 컨트롤러(102)는 FTL(110)을 이용하여 어드레스 매핑 테이블(122)을 유지한다. 어드레스 매핑 테이블(122)은 메모리 컨트롤러(102)가 호스트(112)로부터의 논리 블록 어드레스(Logical Block Address(LBA))를 물리적인 플래시 메모리(108) 내의 물리 페이지 어드레스(PPA(physical page address))로 변환할 수 있게 한다. 도 1에서, 매핑 테이블(122)이 RAM(116) 내에 위치되는 것으로 도시되지만, 다른 실시예에서, 매핑 테이블(122)은 메모리 컨트롤러(102) 내에 또는 FTL(110) 내에 위치된다.
각각의 물리 페이지(또는 섹터) 상의 데이터는 어드레스 매핑 테이블(122)에 대응하는 엔트리를 포함한다. 엔트리의 개수는 엔트리 크기와 페이지 크기에 기초한다. 예를 들어, 어드레스 매핑 테이블(122) 내의 각각의 엔트리가 4 바이트를 차지하고 페이지 크기가 8 KB이면, 2048 엔트리가 그 페이지 크기에 저장될 수 있다. 어드레스 매핑 테이블(122)에서 엔트리에 관한 데이터를 저장하는 페이지는 "메타 페이지(meta page)"라 할 수 있다. 어드레스 매핑 테이블(122)은 액세스 속도를 위하여 RAM(random-access memory)(116)에 저장될 수 있다. 일 실시예에서, 메모리 스토리지 장치(100)의 전원이 켜지면, 어드레스 매핑 테이블(122)은 마지막으로 저장된 형태로부터 판독되어, RAM(116) 내로 재구성된다. 일 실시예에서, 어드레스 매핑 테이블(122)의 엔트리의 일부는 메모리 스토리지 장치(100) 내의 온-플래시 SRAM(static random-access memory) 기반의 캐시에 유지되고, 나머지 엔트리는 메타 페이지 내에 유지된다. 데이터 경로(106)는 플래시 메모리(108)와 호스트(112) 사이의 입출력 동작을 통신하기 위하여 사용된다. 데이터 경로(106)는 입출력 동작에 기초하여 입력 경로와 출력 경로 사이의 스위칭을 가능하게 하는 회로를 포함한다.
메모리 컨트롤러(102)는 판독 및 기록 동작을 제어하며, 중앙 처리 유닛(CPU) 또는 마이크로프로세서에 의해 구현될 수 있다. 메모리 컨트롤러(102)는 호스트(112)에 의해 요청된 기록 동작을 수행할 때 비휘발성 메모리(108)에 데이터를 저장하고, 호스트(112)에 의해 요청된 판독 동작을 수행할 때 비휘발성 메모리(108)에 저장된 데이터를 출력한다.
일 실시예에서, 비휘발성 메모리(108)는 3차원(3D) 메모리 어레이를 포함한다. 3D 메모리 어레이는 메모리 셀의 동작 및 실리콘 기판 상의 관련된 회로에 배열된 능동 영역을 갖는 하나 이상의 물리 레벨의 메모리 셀 어레이로 모놀리식으로(monolithically) 형성될 수 있다. 메모리 셀에 관련된 회로는 기판 내에 또는 기판 상에 위치될 수 있다. "모놀리식(monolithic)"이라는 용어는 어레이의 각각의 레벨의 층이 어레이의 각각의 아래에 놓이는 레벨의 층 상에 직접 부착되는 것을 의미한다.
본 발명의 일 실시예에서, 3차원 메모리 어레이는 수직 방향 특성을 가질 수 있고, 적어도 하나의 메모리 셀이 다른 메모리 셀 상이 위치되는 수직 NAND 스트링을 포함할 수 있다. 상기 적어도 하나의 메모리 셀은 전하저장막(charge trap layer)을 포함할 수 있다. 각각의 수직 NAND 스트링은 메모리 셀 위로 위치된 적어도 하나의 선택 트랜지스터를 포함할 수 있다. 상기 적어도 하나의 선택 트랜지스터는 메모리 셀과 동일한 구조를 가지며, 메모리 셀과 함께 모놀리식으로 형성된다.
본 명세서에 의해 참조로서 편입되는 다음의 특허 문헌들은 3차원 메모리 어레이가 워드 라인 및/또는 비트 라인이 레벨들 사이에 공유되는 복수의 레벨로서 구성될 수 있는 3차원 메모리 어레이를 위한 적합한 구성을 설명한다: 미국 등록 특허 제7,679,133호, 제8,553,466호, 제8,654,587호, 제8,559,235호 및 미국 특허출원공보 제2011/0233648호.
호스트(112)가 주어진 논리 블록 어드레스(LBA(logical block address))에 대응하는 주어진 페이지 또는 섹터(예를 들어, 8 KB 페이지/섹터, 16 KB 페이지/섹터, 등)를 기록하기 원할 때, 메모리 컨트롤러(102)는 메모리(108)의 복수의 메모리 블록 중의 블록(예를 들어, 빈 블록)과, 주어진 페이지를 기록하는 블록 내의 복수의 페이지 중의 페이지(또는 섹터)를 결정한다.
본 발명의 일 실시예에서, 메모리 컨트롤러(102)는 기록 커맨드, 여러 논리 블록 어드레스, 각각의 논리 블록 어드레스를 위한 논리 섹터 데이터를 수신하고, 논리 블록 어드레스와 이의 대응하는 논리 섹터 데이터를 메모리 컨트롤러(102) 내에 위치될 수 있는 버퍼(120)에 임시로 저장하도록 구성될 수 있다. 다른 일 실시예에서, 버퍼(120)는 RAM(116) 내에 위치된다. 도 2는 논리 블록 어드레스와 이의 대응하는 논리 섹터 데이터를 임시로 저장하는 버퍼(120)의 일례를 도시한다. 주어진 LBA를 위한 논리 섹터 데이터는 메모리(108)의 단일 물리 섹터 또는 페이지로의 압축 없이 피팅되도록 하는 크기를 가진다.
메모리 컨트롤러(102)는 LBA 상에서 동작될 때 의사 랜덤 수를 생성하도록 구성된 N개의 해시 함수들(H1, H2, ..., HN)(118)을 포함하며, N은 1보다 더 크다. 다른 일 실시예에서, 해시 함수(118)는 RAM(116) 또는 FTL(110)에 위치된다. 아래에서 논의되는 예들에서, N은 32로 설정되지만, 본 발명 개념은 그에 한정되지 않는다. 의사 랜덤 수는 메모리 내의 섹터의 물리 어드레스를 포함하는 가상 어드레스에 대응한다. 예를 들어, N이 32일 때, 32개의 해시 함수는 단일 LBA로부터 32개의 고유한 가상 어드레스를 생성할 수 있다. 개별 해시 함수는 주어진 LBA로부터 항상 동일한 값을 생성한다. 예를 들어, 제1 해시 함수(H1)가 100인 현재 LBA 상에서 처음으로 동작하여 0x00f7의 가상 어드레스를 리턴한다면, 다음에 제1 해시 함수(H1)가 100인 LBA상에서 동작되면, 이는 또다시 0x00f의 가상 어드레스를 리턴한다. 동일한 LBA 상에 동작될 때의 나머지 해시 함수는 서로 상이하고 제1 해시 함수(H1)와도 상이한 가상 어드레스를 생성할 것이다. 동일한 해시 함수(118)를 이용하여 현재 LBA와 상이한 이전 LBA로부터 생성된 가상 어드레스가 현재 LBA로부터 생성된 가상 어드레스와 모두 상이할 수 있지만, 이전 LBA로부터 생성된 가상 어드레스 중 하나 이상이 현재 LBA로부터 생성된 가상 어드레스 중 하나 이상과 동일한 것이 가능하다.
각각의 개별 해시 함수의 범위는 가상 어드레스의 범위와 동일할 수 있다. 예를 들어, 240개의 가상 어드레스가 있다면, 제1 해시 함수(H1)의 범위는 240이고, 제2 해시 함수(HF2)의 범위는 240이다. 그러나, 각각의 해시 함수가 상이한 순서로 가상 어드레스에 매핑된다. 예를 들어, 제1 해시 험수(HF1)는 제1 순서로 가상 어드레스에 매칭될 수 있고, 제2 해시 함수는 제1 순서와 상이한 제2 순서로 배열될 수 있다. 가상 어드레스의 범위는 오버프로비져닝(overprovisioning)을 위하여 사용되는 이러한 물리 어드레스를 포함하지 않는 물리 어드레스의 범위와 동일할 수 있다. 예를 들어, 물리 어드레스의 7%가 오버프로비져닝 전용일 수 있다.
도 3은 본 발명의 일 실시예에 따른 방법으로서, 섹터 데이터를 메모리(108)에 기록하고 매핑 테이블(12)을 생성/업데이트하기 위하여 LBA와 버퍼(120)의 섹터 데이터 상에서 수행될 수 있는 방법을 도시한다. 방법은 순차 LBA의 그룹이 존재하는지 판단하기 위하여 수신된 LBA 중 현재 LBA와 버퍼를 분석하는 단계(S301)를 포함한다. 분석하는 단계에서, 순차 LBA의 그룹이 존재한다고 판단하면, 방법은 그룹의 섹터 데이터(예를 들어, 여러 섹터를 위한 데이터)를 압축하여 단일 섹터 내에 피팅될 수 있는 압축 결과를 생성한다(S302). 일 실시예에서, 압축은 무손실 압축 알고리즘을 이용하여 수행된다. 도 2의 경우를 예를 들면, 현재 LBA가 100이면, 분석하는 단계는 LBA 100 - 104(즉, 5개의 LBA)를 포함하는 순차 LBA의 그룹이 존재한다고 판단하고, 전체 5개 섹터의 대응하는 데이터(DADA100 - DATA104)를 단일 섹터의 데이터로 압축할 것이다.
데이터를 압축한 후에, 방법은 해시 함수들 중 현재 해시 함수를 현재 LBA에 동작시켜 가상 어드레스를 리턴한다(S303). 예를 들어, 32개의 해시 함수(118)가 있다면, 현재 해시 함수는 제1 해시 함수(HF1)일 수 있다.
가상 어드레스를 결정한 후, 방법은 가상 어드레스가 점유되었는지 판단하는 단계(S304)를 포함한다. 예를 들어, 이전의 기록이 결정된 가상 어드레스와 연관된 물리 어드레스로 데이터를 이미 쓴 것이 가능하다. 메모리 스토리지 장치(100)는 대응하는 가상 어드레스가 점유되어 있는지 여부를 나타내는, 가상 어드레스마다 하나의 비트를 갖는 유효성(validity) 비트맵을 포함할 수 있다. 예를 들어, 가상 어드레스와 연관된 물리 어드레스로의 기록이 발생할 때, 메모리 컨트롤러(102)는 가상 어드레스와 연관된 유효성 비트맵의 비트를 설정할 수 있다. 예를 들어, 물리 어드레스의 삭제가 발생할 때, 메모리 컨트롤러(102)는 비트를 클리어할 수 있다.
가상 어드레스가 점유되는 것으로 판단되면, 방법은 다음 해시 함수로 진행하고(S305), 현재 LBA에 다음 해시 함수를 동작시킨다. 예를 들어, 제1 해시 함수(HF1)에 의해 리턴된 가상 어드레스가 점유되는 것으로 판단되면, 방법은 다음으로 현재 LBA에 제2 해시 함수(HF2)를 동작시킬 것이다. 가상 어드레스가 점유되지 않는다면, 방법은 가상 어드레스와 연관된 메모리의 물리 섹터에 압축 데이터를 저장하고, 매핑 테이블을 업데이트한다(S306). 예를 들어, LBA(100 내지 104)와 연관된 제1 물리 데이터(D100), 제2 물리 데이터(D101), 제3 물리 데이터(D102), 제4 물리 데이터(D103) 및 제5 물리 데이터(D104)가 있다면, 제1 내지 제5 데이터(D100 내지 D104)는 단일 물리 섹터 이하의 크기를 갖는 압축 데이터를 생성하도록 함께 압축된다.
순차 LBA의 그룹이 현재 LBA를 기초로 존재하지 않으면, 현재 LBA의 압축되지 않는 데이터가 물리 섹터에 저장되고, 매칭 테이블이 업데이트된다(S307). 물리 섹터는 해시 함수(118) 중 하나로부터 형성된 가상 어드레스와 연관된 물리 섹터에 저장될 수 있다. 도 2의 경우를 예를 들면, 현재 LBA가 110이면, 110에 순차적인 다른 LBA가 버퍼(120)에 존재하지 않기 때문에, 110인 LBA와 연관된 데이터(DATA110)는 압축되지 않고 가상 어드레스와 연관된 메모리(108)의 물리 섹터에 저장된다.
압축되지 않은 데이터 또는 압축 데이터의 저장 후에, 방법은 다음의 기록되지 않은 LBA로 진행한다(S308). 도 2의 경우를 예를 들면, 현재 LBA가 100이면, 100인 LBA가 LBA(100 내지 104)와 연관된 데이터의 저장을 제공하기 때문에, 방법은 110인 LBA로 진행할 것이다. 또한, 현재 LBA가 110이면, 110인 LBA가 110인 LBA와 연관된 데이터의 저장을 제공하기 때문에, 방법은 120인 LBA로 진행할 것이다. 다음의 기록되지 않은 LBA로 진행한 후, 방법은 단계(S301)로 다시 시작하고, 다음의 기록되지 않은 LBA를 현재 LBA로 취급한다.
위에서 논의된 바와 같이, 압축 데이터를 저장하는 단계(S306)는 매핑 테이블(122)의 업데이트를 제공한다. 도 4는 메모리에 저장된 데이터가 판독될 수 있게 하는 매핑 테이블(122)의 일례를 도시한다. 매핑 테이블(122)은 단지 100인 LBA에서의 동작 결과로서 업데이트된 엔트리만을 나타내며, 이는 100 내지 104인 LBA와 연관된 논리 섹터의 단일 물리 섹터로의 저장을 발생시킨다. 도 4에 도시된 바와 같이, 매핑 테이블(122)의 각각의 엔트리는 주어진 LBA, 해시 리더(leader)의 인덱스 및 리더에 대한 포인터를 나타낸다. 매핑 테이블(122)이 LBA를 포함하는 별개 컬럼을 포함하는 것으로 도시되지만, 이 컬럼은 생략될 수 있다. 예를 들어, 엔트리의 LBA는 매핑 테이블(122) 내의 엔트리의 위치로부터 추론될 수 있다.
해시 리더(leader)의 인덱스는 유효한 해시 함수(HF1 내지 HFN)들 중에서, 리더(leader) LBA에서 사용되는 하나를 고유하게 식별하여, 여러 LBA와 연관된 데이터를 저장하는 가상 어드레스를 리턴한다. 따라서, 100인 LBA가 전술한 방법에 따라 동작되었을 때에, 처음 16개 해시 함수에 의해 리턴된 가상 어드레스는 모두 점유되었고, 제17 해시 함수(HF17)에 의해 리턴된 가상 어드레스가 제일 처음의 점유되지 않은 가상 어드레스였다. 본 예에서, 100 내지 104인 다섯 개의 LBA와 연관된 논리 섹터 데이터가 제17 해시 함수(HF17)를 100인 LBA에 동작시킴으로써 리턴된 가상 어드레스와 연관된 단일의 물리 섹터로 저장되기 때문에, 100 내지 104인 LBA를 갖는 엔트리를 위한 해시 리더의 인덱스는 매핑 테이블(122)에서 모두 17로 설정된다. 제17 해시 함수(HF17)를 100인 LBA에 동작시키는 것이 100 내지 104인 LBA와 연관된 데이터를 저장하는 가상 어드레스를 리턴할 것이기 때문에, 100인 LBA는 100 내지 104인 LBA에 관하여 리더로서 고려된다. 100인 LBA가 리더이기 때문에, 리더 필드에 대한 이의 포인터는 0의 오프셋을 제공한다. 101인 LBA가 100인 리더 LBA로부터 1만큼 오프셋되기 때문에, 매핑 테이블(122)에서 리더 필드에 대한 이의 포인터는 1이고, 102인 LBA가 100인 리더 LBA로부터 2만큼 오프셋되기 때문에, 매핑 테이블(122)에서 리더 필드에 대한 이의 포인터는 2이고, 기타 유사하다.
전술한 것이 단일의 물리 섹터 내에서 피팅하기 위한 5개의 순차 LBA의 수신과 이들의 데이터의 압축을 설명하지만, 본 발명 개념은 5개의 LBA에 한정되지 않는다. 예를 들어, 단일의 물리 섹터 내에 피팅되도록 5개보다 더 적거나 더 많은 순차 LBA가 수신되어 압축될 수 있다.
도 5는 본 발명의 일 실시예에 따른 방법으로서, 메모리 장치로부터 데이터를 판독하는 방법(예를 들어, 컨트롤러(102)에 의해 수행됨)을 도시한다. 방법은 논리 블록 어드레스(logical block address(LBA))를 수신하는 단계(S401)를 포함한다. LBA는 판독 요청 또는 판독 커맨드와 함께 호스트(112)로부터 수신될 수 있다.
방법은 인덱스와 포인터의 오프셋을 검색하기 위하여 논리 블록 어드레스(logical block address(LBA))와 연관된 매핑 테이블의 엔터리를 액세스하는 단계(S402)를 더 포함한다. 예를 들어, 도 4에 도시된 바와 같이, LBA가 100이면, 인덱스는 17이고, 오프셋은 0이며, LBA가 101이면, 인덱스는 역시 17이고, 오프셋은 101이다.
방법은 가상 어드레스를 생성하기 위하여 LBA 상의 인덱스에서 오프셋을 뺀 것에 의해 식별되는 해시 함수를 동작시키는 단계(S403)를 더 포함한다. 예를 들어, LBA가 100이면, 0이 100에서 빼지고, 해시 함수는 100에 동작되며, LBA가 101이면, 1이 101에서 빼지고, 해시 함수가 다시 100에 동작된다.
방법은 가상 어드레스와 연관된 물리 어드레스를 결정하는 단계(S404)와, 물리 어드레스로부터 데이터를 판독하는 단계(S405)를 더 포함한다. 또한, 데이터가 압축되기 때문에, 컨트롤러(102)는 데이터를 호스트(112)로 전송하기 전에 이를 압축 해제할 필요가 있을 수 있다.
매핑 테이블(122)의 매핑은 업데이트에 탄력성이 있다. 도 6은 수신된 LBA(98, 99, 100, 101)에 기초하여 수행되는 새로운 기록의 일례를 도시한다. LBA(100, 101)와 연관된 데이터가 물리 메모리(108) 내의 섹터에 이미 기록되었기 때문에, 이러한 새로운 기록은 이 데이터에 대한 업데이트를 포함한다. 그러나, 플래시 메모리의 현재 섹터/페이지 내의 데이터가 전체 블록이 삭제된 후가 될 때까지 덮어 기록될 수 없기 때문에, 업데이트된 데이터는 새로운 섹터/페이지에 저장된다. 업데이트된 LBA(100, 101)가 LBA(98 내지 101)를 포함하는 새로운 시퀀스의 일부이고 98인 LBA가 새로운 시퀀스의 제1 LBA이기 때문에, 98인 LBA는 새로운 리더(leader)다. 본 예에서, 해시 함수(HF23)는 98인 LBA에 기초하여 점유되지 않은 가상 어드레스를 리턴하기 위한 해시 함수들(118) 중 첫 번째 해시 함수이었다고 판단되었다. 따라서, LBA(98 내지 101)와 연관된 업데이트된 매핑 테이블(122)의 엔트리의 인덱스 필드는 23으로 업데이트된다. 98인 LBA가 리더이기 때문에, 리더 필드에 대한 이의 포인터는 자신을 지시하기 위하여 0의 오프셋을 가진다. 99인 LBA가 98의 리더 LBA로부터 1만큼 오프셋되기 때문에, 리더 필더에 대한 이의 포인터는 이전 엔트리를 지시하기 위하여 1로 설정된다. 도 4의 매핑 테이블(122)에서 100인 LBA의 엔트리의 리더 필드에 대한 포인터가 이전에 0으로 설정되었지만, 98의 새로운 리더 LBA로부터 2만큼 오프셋되기 때문에 이는 이제 2로 설정되게 된다. 도 4의 매핑 테이블(122)에서 101인 LBA의 엔트리의 오프셋이 이전에 1로 설정되었지만, 98의 새로운 리더 LBA로부터 3만큼 오프셋되기 때문에 이는 이제 3으로 설정되게 된다. LBA(102 내지 104)와 연관된 엔트리는 변경되지 않은 채 유지된다. 이들의 리더 LBA(즉, 100)가 이제 없지만, 이의 데이터는 동일한 방법을 이용하여 여전히 액세스될 수 있다. 예를 들어, 102인 LBA에 대한 판독은 17의 인덱스와, 2의 오프셋을 나타내는 리더에 대한 포인터를 검색할 것이다. 따라서, 102인 LBA로부터 2의 오프셋을 빼고, 그 결과인 100에 HF17을 동작시킴으로써, 가상 어드레스는 이전과 같이 생성될 수 있다.
주어진 리더 LBA에 동작될 때 해시 함수(118)에 의해 리턴된 모든 가상 어드레스가 점유되는 것으로 판단되면, 충돌이 발생하였다. 컨트롤러(102)는 쿠쿠 해시(cuckoo hash)와 유사한 방법을 이용하여 충돌을 해결할 수 있다. 일 실시예에서, 점유된 가상 어드레스와 연관된 LBA가 결정되고, LBA 중 하나 이상이 충돌을 해결하기 위하여 상이한 점유되지 않은 가상 어드레스에 할당된다. 상이한 점유되지 않은 가상 어드레스가 발견될 수 있다면, 새로 할당된 가상 어드레스를 이용하여, 이의 대응하는 섹터를 판독하고 이를 새로운 위치에 기록하기 위하여, 명령 또는 요청이 전송될 수 있다. 선형 해시가 어느 LBA가 어느 가상 어드레스를 점유하는지 추적하는데 사용될 수 있다.
위에서 논의된 바와 같이, 단계(S306) 동안, 여러 LBA와 연관된 데이터가 압축되어, 단일의 물리 섹터 내에 저장될 수 있다. 예를 들어, 100 내지 104인 LBA의 시퀀스가 수신되고 대응하는 데이터가 압축되어 단일의 물리 섹터 내에 피팅될 수 있고, 호스트(112)가 102인 LBA와 연관된 데이터를 단지 판독하기 원한다면, 컨트롤러(102)는 다른 논리 블록 어드레스의 압축 데이터로부터 102인 LBA와 연관된 압축 데이터를 구별할 수 있기 위한 정보를 필요로 한다. 이 정보는 상이한 LBA와 연관된 데이터(예를 들어, 논리 섹터 데이터)의 각각의 부분의 오프셋과, 데이터의 각각의 부분의 길이 또는 크기를 포함할 수 있다. 이 정보가 RAM(116)에 저장될 수 있지만, 본 발명의 일 실시예에서, 이 정보는 압축 데이터의 이후에 남아 있는 물리 섹터의 스페어(빈) 영역에 저장된다.
도 7은 LBA(100 내지 104)와 연관된 압축 데이터(예를 들어, CDATA1 내지 CDATA5)가 저장된 단일의 물리 섹터(710)와, 압축 데이터에 의해 채워지지 않은, 오프셋과 길이 또는 크기를 포함하는 정보 테이블(720)을 저장하는 스페어 영역(710)을 도시한다. 일 실시예에서, 오프셋은 LBA의 마지막 3 비트에 대응하고, 길이는 다수의 512 바이트 세그먼트이다. 예를 들어, 길이가 주어진 LBA에 대하여 1이면, 주어진 LBA와 연관된 데이터는 512 바이트의 길이이고 , 길이가 주어진 LBA에 대하여 2이면, 주어진 LBA와 연관된 데이터는 2*512 바이트 또는 1024 바이트이다. 예를 들어, 호스트(112)가 101인 LBA와 연관된 데이터를 판독하기 원하면, 정보 테이블(720) 내의 제2 엔트리가 101인 LBA에 대응한다고 판단하기 위하여 컨트롤러(102)는 스페어 영역(710)의 엔트리 내의 오프셋을 101의 마지막 3 비트에 대하여 비교할 수 있고(예를 들어, 오프셋에 XOR을 수행할 수 있다), 1인 이의 길이는 101인 LBA와 연관된 제2의 압축 데이터가 512 바이트만큼 길다는 것을 의미한다. 2의 길이를 갖는 제2 엔트리 전에 정보 테이블(720) 내에 1 엔트리가 있기 때문에, 101인 LBA에 대응하는 압축 데이터(CDATA2)를 검색하기 위하여 컨트롤러(102)는 1024 바이트를 진행하여 512 바이트를 추출한다. 압축 데이터가 검색되면, 이는 컨트롤러에 의해 압축이 풀려서, 호스트(112)로 전송될 수 있는 압축되지 않은 데이터가 생성된다.
일 실시예에서, 순차 LBA의 섹터 데이터가 압축 가능한지를 검사하는 단계가 단계(S301)와 단계(S302) 사이에 수행된다. 데이터가 압축 가능하지 않다고 판단되면, 섹터 데이터는 각각의 물리 섹터에 압축 없이 저장된다. 일 실시예에서, 메모리(108)는 데이터를 저장하기 위한 제1 영역과, 메타 데이터를 저장하기 위한 제2 영역을 포함한다. 일 실시예에서, 데이터의 1 비트가 각각의 물리 섹터에 대하여 메타 데이터 내에 저장되어, 압축 데이터를 유지하는지 아닌지를 나타낸다. 다른 실시예에서, 이 1 비트 정보는 해싱 함수의 인덱스와 리더에 대한 포인터(오프셋)과 함께 RAM(116) 내의 매핑 테이블(122)에 저장된다. 예를 들어, 1 비트 정보는 메타 데이터 내에 충분한 여유가 없을 때 매핑 테이블(122)에 저장될 수 있다.
도 8은 주어진 LBA와 연관된 데이터가 압축되었는지 아닌지를 나타내는 1 비트 정보(예를 들어, 압축 플래그)를 포함하는 매핑 테이블(122')의 일례를 도시한다. 예를 들어, 압축 플래그가 설정되면(예를 들어, 1), 이는 데이터가 압축되었다는 것을 나타내고, 압축 플래그가 클리어되면(예를 들어, 0), 이는 데이터가 압축되지 않았다는 것을 나타낸다.
도 3에서, 순차 LBA의 데이터는 압축되었을 때 단일 물리 섹터 내에서 피팅될 수 있다고 가정된다. 그러나, 너무 많은 순차 LBA가 수신될 때, 데이터가 압축되더라도, 결과는 단일 물리 섹터 내에 피팅되기에는 너무 커서 제2의 물리 섹터를 필요로 할 수 있다. 또한, 압축 데이터가 2개의 물리 섹터 내에 저장될 때, 하나의 논리 섹터의 데이터는 2개의 물리 섹터에 걸쳐 분할될 수 있다.
도 9는 104인 LBA에 대한 압축 데이터(CDATA5)가 2개의 섹터에 걸쳐 분할되는 일례를 도시한다. 본 발명 개념의 예시적인 일 실시예에서, 데이터가 단일의 물리 섹터 내에 피팅되기에는 너무 큰 경우는 수신된 LBA들 중 순차적으로 다음 LBA의 논리 섹터 데이터와 함께 분할된 논리 섹터 데이터의 제2 부분을 제2의 물리 섹터에 항상 기록함으로써 핸들링된다. 순차적으로 다음의 LBA의 LBA는 해시 생성을 위한 제2 물리 섹터의 리더로서 고려될 것이다.
도 8의 매핑 테이블(122')은 도 9에 도시된 바와 같이 더 수정되어 분할된 정보를 포함하는 컬럼을 더 포함하는 새로운 매핑 테이블(122'')을 생성한다. 컬럼은 단일 LBA를 위한 논리 섹터가 2개의 물리 섹터에 걸쳐 분할되었는지 나타내는 1 비트 정보(예를 들어, 분할 플래그)를 포함한다. 예를 들어, 논리 섹터 데이터가 104인 LBA와 유사하게 2개의 섹터에 걸쳐 분할되었다면, 이의 분할 플래그는 1로 설정되고, 논리 섹터 데이터가 105인 LBA와 유사하게 2개의 섹터에 걸쳐 분할되지 않았다면, 이의 분할 플래그는 0으로 설정된다.
컨트롤러(102)가 호스트(112)로부터 104인 LBA에 대한 판독 요청을 수신한다면, 이는 제17 해시 함수(HF17)에 기초하여 제1 가상 어드레스를 수신함으로써 전술한 것과 동일한 방식으로 제5 압축 데이터(CDATA5)의 제1 부분을 판독할 것이다. 그러나, 컨트롤러(102)는 데이터의 제2 부분이 다른 물리 섹터에 위치되는 것을 나타내는 분할 플래그를 검색할 것이다. 그 다음, 컨트롤러(102)는 매핑 테이블(122'') 내의 다음 엔트리로 진행하여 이의 인덱스와 오프셋(예를 들어, 리더에 대한 포인터)를 결정하고, 검색된 인덱스를 사용하여 새로운 해시 함수(예를 들어, HF23)를 식별하고, 다음 엔트리의 LBA(예를 들어, 105)에 새로운 해시 함수를 동작시켜 제2 가상 어드레스를 검색한다. 수신된 LBA(예를 들어, 104)와 연관된 제5 압축 데이터(CDATA5)의 제2 부분은 제2 가상 어드레스와 연관된 물리 섹터 내에 위치된다. 컨트롤러(102)는 일례로서 제2 섹터의 스페어 영역에 저장된 정보 테이블(720)을 이용하여 104인 LBA를 위한 데이터(CDATA5)의 제2 부분을 105인 LBA와 연관된 CDATA6로부터 구별할 수 있다.
예시적인 일 실시예에서, 도 10의 매핑 테이블(122''')에 도시된 바와 같이, 제1 LBA와 연관된 논리 섹터 데이터는 제1 LBA에 순차적이지 않은 제2 LBA를 이용하여 2개의 물리 섹터에 걸쳐 분할된다. 예를 들어, 도 10에 도시된 바와 같이, 104인 LBA의 논리 섹터 데이터의 제1 부분은 208인 제1 가상 어드레스와 연관된 제1 물리 섹터에 저장되고, 논리 섹터 데이터의 제2 부분은 411인 제2 가상 어드레스와 연관된 제2 물리 섹터에 저장된다. 104인 LBA에 대한 판독 요청이 수신되면, 데이터(CDATA5)의 제1 부분을 검색하기 위하여 매핑 테이블(122''')이 액세스된다. 도 9의 매핑 테이블(122'') 내의 분할 플래그는 데이터가 분할되지 않았는지(예를 들어, 분할 시퀀스 플래그 = 0), 순차적으로 분할되었는지(예를 들어, 분할 시퀀스 플래그 = 1) 또는 순차적으로 분할되지 않았는지(예를 들어, 분할 시퀀스 플래그 = 2)를 나타내는 분할 시퀀스 플래그로 대체되었다. 컨트롤러(102)는 104인 LBA와 연관된 엔트리를 액세스한 것에 따라 분할 시퀀스 플래그로부터 제2 부분이 104인 LBA에 순차적이지 않은 LBA의 가상 어드레스로 분할된다고 판단한다. 그 다음, 컨트롤러(102)는 판독 요청의 LBA(예를 들어, 104)를 통해 분할 테이블(730)을 액세스하여 제2 물리 섹터의 제2 가상 어드레스(예를 들어, 411)를 리턴한다. 그 다음, 104인 LBA의 제2 데이터가 제2 가상 어드레스와 연관된 물리 섹터로부터 검색될 수 있다. 분할 테이블(730)은 RAM(116)에 저장될 수 있다.
본 발명 개념의 일 실시예에서, 가상 어드레스는 해시 함수(118)에 의해 결정되기 때문에 연속하는 순서에 따라 할당되지 않는다. 본 실시예에서, 메모리 스토리지 장치(100)가 RAID(redundant array of inexpensive disks)의 일부일 때, 각각의 가상 어드레스의 할당에 따라, RAID의 대응하는 스트라이프(stripe)가 업데이트된다. 예를 들어, 데이터를 위한 가상 어드레스(200, 201, 202, 203, 204, 205)가 패리티(parity)를 위한 가상 어드레스(206, 207)와 연관된다면, 가상 어드레스(202)가 할당되게 될 때, 가상 어드레스(206, 207)가 업데이트될 필요가 있다.
전술한 방법은 하나 이상의 컴퓨터 판독 가능한 매체(즉, 하드 디스크, 자기 플로피 디스크, RAM, ROM, CD ROM, 플래시 메모리 등과 같은 프로그램 스토리지 장치)에 유형적으로 구체화되고 프로세서, 메모리 및 입출력 인터페이스를 갖는 범용 디지털 컴퓨터와 같은 적합한 아키텍처를 포함하는 임의의 장치 또는 기계에 의해 실행될 수 있다.
본 발명 개념이 이의 예시적인 실시예와 관련하여 설명되었지만, 통상의 기술자는 다양한 수정이 본 발명 개념의 원리를 실질적으로 벗어나지 않으면서 이러한 실시예에 이루어질 수 있다는 것이 이해될 것이다.
100 : 메모리 스토리지 장치 102 : 메모리 컨트롤러
104 : 입출력 인터페이스 106 : 데이터 경로
108 : 비휘발성 메모리 110 : FLT
112 : 호스트 116 : RAM
118 : 해시 함수 120 : 버퍼
122 : 매핑 테이블

Claims (20)

  1. 복수의 물리 섹터들을 포함하는 비휘발성 메모리 장치;
    매핑 테이블; 및
    복수의 해시 함수들을 포함하고, 상기 매핑 테이블 및 상기 해시 함수를 이용하여 상기 물리 섹터를 액세스하도록 구성된 메모리 컨트롤러
    를 포함하고,
    상기 메모리 컨트롤러는 호스트로부터 논리 블록 어드레스(logical block addresse(LBA))의 시퀀스와 상기 LBA의 각각에 대한 논리 섹터 데이터를 수신하고, 상기 시퀀스 중에서 제1 논리 블록 어드레스(LBA)에 상기 해시 함수들 중 선택된 해시 함수를 동작시켜 제1 가상 어드레스를 생성하고, 상기 논리 섹터 데이터를 압축하여 압축 데이터를 생성하고, 상기 압축 데이터를 상기 제1 가상 어드레스와 연관된 상기 물리 섹터 중의 제1 물리 섹터에 저장하도록 구성되는 메모리 시스템.
  2. 제1항에 있어서,
    상기 메모리 컨트롤러는, 상기 선택된 해시 함수의 인덱스를 포함하는 상기 LBA의 각각을 위한 엔트리와, 제1 엔트리에 대한 포인터를 포함하도록 상기 매핑 테이블을 업데이트하는 메모리 시스템.
  3. 제1항에 있어서,
    각각의 상기 해시 함수는 LBA에 동작될 때 의사 랜덤 수를 생성하도록 구성되는 메모리 시스템.
  4. 제2항에 있어서,
    상기 메모리 컨트롤러는, 입력 LBA와 판독 커맨드를 상기 호스트로부터 수신하고, 상기 입력 LBA와 연관된 상기 매핑 테이블의 엔트리를 액세스하여 인덱스와 오프셋 포인터를 검색하고, 검색된 상기 입력 LBA로부터 상기 오프셋을 빼서 결과를 생성하고, 검색된 상기 인덱스에 의해 식별된 상기 해시 함수 중 하나를 상기 결과에 동작시켜 제2 가상 어드레스를 생성하고, 상기 제2 가상 어드레스와 연관된 상기 물리 섹터 중 하나의 출력 데이터를 상기 호스트로 출력하도록 구성되는 메모리 시스템.
  5. 제1항에 있어서,
    상기 비휘발성 메모리는 플래시 메모리인 메모리 시스템.
  6. 제1항에 있어서,
    상기 메모리 컨트롤러는, 상기 LBA의 각각을 위한 압축된 논리 섹터의 길이와 오프셋을 나타내는 상기 제1 물리 섹터의 스페어 영역에 정보를 저장하는 메모리 시스템.
  7. 제2항에 있어서,
    상기 메모리 컨트롤러는, 상기 LBA의 각각과 연관된 논리 섹터 데이터가 압축되었다는 것을 나타내기 위하여 상기 엔트리를 업데이트하도록 구성되는 메모리 시스템.
  8. 제2항에 있어서,
    상기 메모리 컨트롤러는, 입력 LBA를 수신하고, 상기 입력 LBA와 연관된 논리 섹터 데이터를 상기 물리적 섹터 중 하나에서 압축 없이 저장하고, 저장된 상기 논리 섹터 데이터가 압축되지 않은 것을 나타내기 위하여 상기 입력 LBA에 대응하는 상기 매핑 테이블의 엔트리를 업데이트하는 메모리 시스템.
  9. 제1항에 있어서,
    상기 메모리 컨트롤러는, 상기 물리 섹터 중 상기 제1 물리 섹터와 상기 제2 물리 섹터에 상기 압축 데이터를 저장하는 메모리 시스템.
  10. 제9항에 있어서,
    상기 압축 데이터는, 상기 제1 및 제2 물리 섹터에 걸쳐 분할되는, 하나의 논리 섹터를 위한 압축 데이터를 포함하는 메모리 시스템.
  11. 제10항에 있어서,
    상기 메모리 컨트롤러는, 상기 하나의 논리 섹터가 분할된 것을 나타내기 위하여 상기 매핑 테이블을 업데이트하는 메모리 시스템.
  12. 제1항에 있어서,
    상기 논리 블록 어드레스(LBA)의 시퀀스와, 대응하는 상기 논리 섹터 데이터를 임시로 저장하는 버퍼를 더 포함하는 메모리 시스템.
  13. 메모리 컨트롤러에 의해, 논리 블록 어드레스(logical block addresse(LBA))의 시퀀스와, 상기 LBA의 각각에 대한 논리 섹터 데이터를 호스트로부터 수신하는 단계;
    상기 메모리 컨트롤러에 의해, 상기 논리 섹터 데이터를 압축하는 단계;
    상기 메모리 컨트롤러에 의해, 상기 LBA 중 제1 LBA에 복수의 해시 함수 중 선택된 해시 함수를 실행하여 가상 어드레스를 생성하는 단계; 및
    상기 가상 어드레스와 연관된 비휘발성 메모리의 제1 물리 섹터에 압축 데이터를 저장하는 단계를 포함하는 메모리 시스템에 데이터를 기록하는 방법.
  14. 제13항에 있어서,
    상기 메모리 컨트롤러가, 상기 선택된 해시 함수의 인덱스를 포함하는 상기 LBA의 각각을 위한 엔트리와, 제1 엔트리에 대한 포인터를 포함하도록 상기 매핑 테이블을 업데이트하는 단계를 더 포함하는 메모리 시스템에 데이터를 기록하는 방법.
  15. 제13항에 있어서,
    각각의 상기 해시 함수는 LBA에 동작될 때 의사 랜덤 수를 생성하도록 구성되는 메모리 시스템에 데이터를 기록하는 방법.
  16. 제13항에 있어서,
    상기 메모리 컨트롤러가, 상기 LBA의 각각을 위한 압축된 논리 섹터의 길이와 오프셋을 나타내는 상기 제1 물리 섹터의 스페어 영역에 정보를 저장하는 단계를 더 포함하는 메모리 시스템에 데이터를 기록하는 방법.
  17. 제14항에 있어서,
    상기 메모리 컨트롤러가, 상기 LBA의 각각과 연관된 논리 섹터 데이터가 압축되었다는 것을 나타내기 위하여 상기 엔트리를 업데이트하는 단계를 더 포함하는 메모리 시스템에 데이터를 기록하는 방법.
  18. 메모리 컨트롤러에 의해, 논리 블록 어드레스(logical block addresse(LBA))를 호스트로부터 수신하는 단계;
    상기 메모리 컨트롤러에 의해, 상기 LBA와 연관된 매핑 테이블의 엔트리를 액세스하여 인덱스와 포인터를 검색하는 단계;
    상기 메모리 컨트롤러에 의해, 상기 LBA에서 상기 포인터를 빼서 값을 생성하는 단계;
    상기 메모리 컨트롤러에 의해, 상기 인덱스에 의해 식별된 해시 함수를 실행하여 가상 어드레스를 생성하는 단계; 및
    상기 가상 어드레스와 연관된 비휘발성 메모리의 물리 섹터로부터 데이터를 검색하는 단계를 포함하는 메모리 시스템으로부터 데이터를 판독하는 방법.
  19. 제17항에 있어서,
    상기 메모리 컨트롤러에 의해, 검색된 상기 데이터를 압축 해제하여 압축 해제된 데이터를 생성하는 단계; 및
    상기 메모리 컨트롤러에 의해, 상기 압축 해제된 데이터를 상기 호스트에 전송하는 단계를 더 포함하는 메모리 시스템에 데이터를 판독하는 방법.
  20. 제17항에 있어서,
    상기 메모리 컨트롤러에 의해, 상기 물리 섹터의 스페어 영역으로부터 상기 물리 섹터내의 데이터의 오프셋과 크기를 결정하는 단계; 및
    상기 메모리 컨트롤러에 의해, 상기 오프셋에서의 상기 물리 섹터로부터 상기 크기를 갖는 데이터를 추출하는 단계를 더 포함하는 메모리 시스템에 데이터를 판독하는 방법.
KR1020180036599A 2017-08-23 2018-03-29 메모리 시스템, 메모리 시스템에 데이터를 기록하는 방법 및 메모리 시스템으로부터 데이터를 판독하는 방법 KR102603070B1 (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US15/684,252 2017-08-23
US15/684,252 US10606760B2 (en) 2017-08-23 2017-08-23 Nonvolatile memory devices and methods of controlling the same

Publications (2)

Publication Number Publication Date
KR20190022290A true KR20190022290A (ko) 2019-03-06
KR102603070B1 KR102603070B1 (ko) 2023-11-17

Family

ID=65437271

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020180036599A KR102603070B1 (ko) 2017-08-23 2018-03-29 메모리 시스템, 메모리 시스템에 데이터를 기록하는 방법 및 메모리 시스템으로부터 데이터를 판독하는 방법

Country Status (2)

Country Link
US (1) US10606760B2 (ko)
KR (1) KR102603070B1 (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112463647A (zh) * 2019-09-06 2021-03-09 希捷科技有限公司 使用散列来减小前向映射表的大小

Families Citing this family (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR102435890B1 (ko) * 2017-08-17 2022-08-25 삼성전자주식회사 스토리지 장치의 어드레스 맵핑 방법 및 동작 방법
KR102552689B1 (ko) * 2018-04-26 2023-07-05 삼성전자주식회사 데이터 저장 장치
US11347860B2 (en) * 2019-06-28 2022-05-31 Seagate Technology Llc Randomizing firmware loaded to a processor memory
CN110569000A (zh) * 2019-09-17 2019-12-13 深圳忆联信息系统有限公司 基于固态硬盘阵列的主机端raid管理方法和装置
US11797531B2 (en) 2020-08-04 2023-10-24 Micron Technology, Inc. Acceleration of data queries in memory
US11416388B2 (en) 2020-09-22 2022-08-16 Micron Technology, Inc. Memory sub-system logical block address remapping
JP7168731B1 (ja) 2021-07-19 2022-11-09 Necプラットフォームズ株式会社 メモリアクセス制御装置、メモリアクセス制御方法、及び、メモリアクセス制御プログラム
US20240168630A1 (en) * 2022-11-18 2024-05-23 Lemon Inc. Hybrid design for large scale block device compression using flat hash table

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6674441B1 (en) * 2000-07-26 2004-01-06 Ati International, Srl Method and apparatus for improving performance of an accelerated graphics port (AGP) device
US20120015971A1 (en) * 2002-03-04 2012-01-19 Maggy Babiole Saunier Ophthalmic composition comprising ascomycin
US20160335195A1 (en) * 2014-01-29 2016-11-17 Hitachi, Ltd. Storage device

Family Cites Families (23)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100706242B1 (ko) 2005-02-07 2007-04-11 삼성전자주식회사 메모리 시스템 및 그것의 런 단위 어드레스 매핑 테이블 구성 방법
US7769962B2 (en) * 2005-12-12 2010-08-03 Jeda Technologies, Inc. System and method for thread creation and memory management in an object-oriented programming environment
TW200828014A (en) 2006-12-28 2008-07-01 Genesys Logic Inc Flash memory management method with low RAM utilization
US9548108B2 (en) * 2008-06-18 2017-01-17 Super Talent Technology, Corp. Virtual memory device (VMD) application/driver for enhanced flash endurance
US8086585B1 (en) * 2008-09-30 2011-12-27 Emc Corporation Access control to block storage devices for a shared disk based file system
KR101533744B1 (ko) 2008-10-16 2015-07-10 삼성전자주식회사 플래시 메모리 시스템 및 그것의 플래시 변환 계층 설계 방법
US8656131B2 (en) * 2008-10-31 2014-02-18 Dot Hill Systems Corporation Method and apparatus for expanding a virtual storage device
US9110594B2 (en) * 2009-11-04 2015-08-18 Seagate Technology Llc File management system for devices containing solid-state media
US10558705B2 (en) 2010-10-20 2020-02-11 Microsoft Technology Licensing, Llc Low RAM space, high-throughput persistent key-value store using secondary memory
US8892809B2 (en) * 2010-10-25 2014-11-18 Marvell World Trade Ltd. Data compression and encoding in a memory system
US8539156B2 (en) * 2010-12-17 2013-09-17 Hitachi, Ltd. Storage subsystem and its logical unit processing method
KR101226600B1 (ko) 2011-03-09 2013-01-28 주식회사 이에프텍 메모리 시스템 및 그의 메모리 맵핑 방법
US8843711B1 (en) * 2011-12-28 2014-09-23 Netapp, Inc. Partial write without read-modify
JP5687639B2 (ja) * 2012-02-08 2015-03-18 株式会社東芝 コントローラ、データ記憶装置及びプログラム
KR101374065B1 (ko) * 2012-05-23 2014-03-13 아주대학교산학협력단 칩 레벨 평행 플래시 메모리를 위한 정보 분별 방법 및 장치
US20140068182A1 (en) * 2012-09-04 2014-03-06 Drobo, Inc. Storage Virtualization In A Block-Level Storage System
US9495288B2 (en) 2013-01-22 2016-11-15 Seagate Technology Llc Variable-size flash translation layer
TWI506430B (zh) 2013-03-20 2015-11-01 Phison Electronics Corp 映射資訊記錄方法、記憶體控制器與記憶體儲存裝置
US9514057B2 (en) 2013-12-04 2016-12-06 Sandisk Technologies Llc Storage module and method for managing logical-to-physical address mapping
WO2015142341A1 (en) * 2014-03-20 2015-09-24 Hewleet-Packard Development Company, L. P. Dynamic memory expansion by data compression
JP6226200B2 (ja) 2014-10-23 2017-11-08 京セラドキュメントソリューションズ株式会社 メモリーコントローラー
US10620861B2 (en) * 2015-04-30 2020-04-14 Hewlett Packard Enterprise Development Lp Retrieve data block from determined devices
US10706101B2 (en) * 2016-04-14 2020-07-07 Advanced Micro Devices, Inc. Bucketized hash tables with remap entries

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6674441B1 (en) * 2000-07-26 2004-01-06 Ati International, Srl Method and apparatus for improving performance of an accelerated graphics port (AGP) device
US20120015971A1 (en) * 2002-03-04 2012-01-19 Maggy Babiole Saunier Ophthalmic composition comprising ascomycin
US20160335195A1 (en) * 2014-01-29 2016-11-17 Hitachi, Ltd. Storage device

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112463647A (zh) * 2019-09-06 2021-03-09 希捷科技有限公司 使用散列来减小前向映射表的大小

Also Published As

Publication number Publication date
US20190065392A1 (en) 2019-02-28
US10606760B2 (en) 2020-03-31
KR102603070B1 (ko) 2023-11-17

Similar Documents

Publication Publication Date Title
KR102603070B1 (ko) 메모리 시스템, 메모리 시스템에 데이터를 기록하는 방법 및 메모리 시스템으로부터 데이터를 판독하는 방법
CN107957961B (zh) 存储设备、存储系统和计算设备
US9229876B2 (en) Method and system for dynamic compression of address tables in a memory
JP4931810B2 (ja) 最適化されたシーケンシャルなクラスタの管理のためのfat分析
US9792067B2 (en) Trim command processing in a solid state drive
US7702844B2 (en) Address mapping method and mapping information managing method for flash memory, and flash memory using the same
US7191306B2 (en) Flash memory, and flash memory access method and apparatus
KR101759811B1 (ko) 솔리드 스테이트 메모리를 포멧팅하기 위한 메모리 제어기, 방법, 및 솔리드 스테이트 메모리 시스템
KR102252419B1 (ko) 플래시 메모리 장치를 위한 주소변환 시스템 및 그 방법
US6711663B2 (en) Algorithm of flash memory capable of quickly building table and preventing improper operation and control system thereof
EP3436953B1 (en) Method and apparatus for processing sequential writes to a block group of physical blocks in a memory device
US8375191B2 (en) Non-volatile memory, page dynamic allocation apparatus and page mapping apparatus therefor, and page dynamic allocation method and page mapping method therefor
KR101678868B1 (ko) 플래시 주소 변환 장치 및 그 방법
US20120072644A1 (en) Semiconductor memory controlling device
WO2012168960A1 (en) Semiconductor storage apparatus and method of controlling semiconductor storage apparatus
KR20170125178A (ko) Raid 스토리지 장치 및 그것의 관리 방법
KR20180131475A (ko) 비휘발성 메모리(nvm)에서 다중 네임스페이스 관리
US20100125694A1 (en) Memory device and management method of memory device
JP2019020788A (ja) メモリシステムおよび制御方法
US9292435B2 (en) Memory device and method of operation
KR20160083762A (ko) 스토리지 시스템에서의 매핑 테이블 관리 방법 및 이를 적용한 스토리지 시스템
US10268400B2 (en) System and method for file detection and usage during compaction
KR20200074464A (ko) 데이터 저장 장치 및 동작 방법, 이를 포함하는 스토리지 시스템
KR101369408B1 (ko) 스토리지 시스템 및 이의 데이터 전송 방법
EP2381354A2 (en) Data recording device

Legal Events

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