KR20190054730A - 스토리지 장치 및 스토리지 장치의 동작 방법 - Google Patents

스토리지 장치 및 스토리지 장치의 동작 방법 Download PDF

Info

Publication number
KR20190054730A
KR20190054730A KR1020170151646A KR20170151646A KR20190054730A KR 20190054730 A KR20190054730 A KR 20190054730A KR 1020170151646 A KR1020170151646 A KR 1020170151646A KR 20170151646 A KR20170151646 A KR 20170151646A KR 20190054730 A KR20190054730 A KR 20190054730A
Authority
KR
South Korea
Prior art keywords
mapping
block
memory
controller
logical address
Prior art date
Application number
KR1020170151646A
Other languages
English (en)
Inventor
이세환
최현진
Original Assignee
삼성전자주식회사
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 삼성전자주식회사 filed Critical 삼성전자주식회사
Priority to KR1020170151646A priority Critical patent/KR20190054730A/ko
Priority to US16/012,808 priority patent/US20190146926A1/en
Priority to CN201811274577.6A priority patent/CN109783405A/zh
Publication of KR20190054730A publication Critical patent/KR20190054730A/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/10Address translation
    • 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
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/06Addressing a physical block of locations, e.g. base addressing, module addressing, memory dedication
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0638Organizing or formatting or addressing of data
    • G06F3/064Management of blocks

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Human Computer Interaction (AREA)
  • Memory System (AREA)

Abstract

스토리지 장치는 메모리 장치, 및 호스트로부터 수신되는 논리 어드레스를 메모리 장치를 위한 물리 어드레스로 변환하기 위한 컨트롤러를 포함하고, 컨트롤러는, 논리 어드레스들과 물리 어드레스들 사이의 대응 관계를 나타내는 대응 정보 및 대응 정보에서 관리되는 물리 어드레스들에 의해 지시되는 메모리 장치 상의 부분 메모리 영역에서 수신된 논리 어드레스에 대응하는 맵핑 유닛을 결정하기 위한 맵핑 함수를 관리하도록 구성되고, 수신된 논리 어드레스에 대응하는 맵핑 유닛은 수신된 논리 어드레스에 의해 지시되는 메모리 장치 상의 영역이고, 컨트롤러는, 대응 정보를 참조하여 수신된 논리 어드레스에 대응하는 맵핑 유닛을 포함하는 부분 메모리 영역을 결정하고, 맵핑 함수를 사용하여 부분 메모리 영역으로부터 맵핑 유닛을 결정하기 위해 구성될 수 있다.

Description

스토리지 장치 및 스토리지 장치의 동작 방법 {STORAGE DEVICE AND OPERATING METHOD OF STORAGE DEVICE}
본 발명은 전자 장치에 관한 것으로, 더 구체적으로는 데이터를 저장하고 관리하기 위한 스토리지 장치 및 스토리지 장치의 동작에 관한 것이다.
근래 다양한 유형의 전자 장치들이 이용되고 있다. 전자 장치는 그것에 포함되는 전자 회로들의 동작들에 따라 고유의 기능(들)을 수행한다. 스토리지 장치는 전자 장치들의 한 예시이다. 스토리지 장치는 데이터를 저장하기 위한 메모리 장치를 포함한다. 메모리 장치는 데이터를 저장하거나 저장된 데이터를 출력하고, 이로써 스토리지 장치는 사용자에게 스토리지 서비스를 제공한다.
메모리 장치는 데이터를 저장하기 위한 복수의 메모리 위치를 포함한다. 메모리 위치는 어드레스로 불리는 값에 기초하여 식별되고 지시된다. 메모리 장치에서, 데이터는 어드레스에 의해 지시되는 메모리 위치에 저장되거나 어드레스에 의해 지시되는 메모리 위치로부터 출력된다. 스토리지 장치는 메모리 장치를 제어하기 위해 어드레스를 적절히 관리할 수 있다.
스토리지 장치 외부의 호스트 장치에 의해 처리되는 어드레스는 메모리 장치 내에서 메모리 위치를 지시하는 어드레스와 상이할 수 있다. 따라서, 스토리지 장치는 호스트 장치에 의해 처리되는 어드레스와 메모리 장치를 위한 어드레스 사이에서 어드레스 변환(Address Translation, 예를 들어, 어드레스 맵핑(Address Mapping))을 수행할 수 있다.
호스트에 의해 처리되는 논리 어드레스와 메모리 장치를 위한 물리 어드레스 사이에서 어드레스 변환을 수행하도록 구성되는 스토리지 장치가 제공될 수 있다.
본 실시 예가 이루고자 하는 기술적 과제는 상기된 바와 같은 기술적 과제로 한정되지 않으며, 이하의 실시 예들로부터 또 다른 기술적 과제들이 유추될 수 있다.
스토리지 장치는 메모리 장치, 및 호스트로부터 수신되는 논리 어드레스를 상기 메모리 장치를 위한 물리 어드레스로 변환하기 위한 컨트롤러를 포함하고, 상기 컨트롤러는, 논리 어드레스들과 물리 어드레스들 사이의 대응 관계를 나타내는 대응 정보 및 상기 대응 정보에서 관리되는 물리 어드레스에 의해 지시되는 상기 메모리 장치 상의 부분 메모리 영역에서 상기 수신된 논리 어드레스에 대응하는 맵핑 유닛을 결정하기 위한 맵핑 함수를 관리하도록 구성되고, 상기 수신된 논리 어드레스에 대응하는 상기 맵핑 유닛은 상기 수신된 논리 어드레스에 의해 지시되는 상기 메모리 장치 상의 영역이고, 상기 컨트롤러는, 상기 대응 정보를 참조하여 상기 수신된 논리 어드레스에 대응하는 상기 맵핑 유닛을 포함하는 상기 부분 메모리 영역을 결정하고, 상기 맵핑 함수를 사용하여 상기 부분 메모리 영역으로부터 상기 맵핑 유닛을 결정하기 위해 구성될 수 있다.
스토리지 장치를 동작시키기 위한 방법은, 논리 어드레스들과 물리 어드레스들 사이의 대응 관계를 나타내는 대응 정보에 기초하여, 호스트로부터 수신된 논리 어드레스에 대응하는 물리 어드레스를 획득하는 단계, 상기 획득된 물리 어드레스에 의해 지시되는 메모리 장치 상의 부분 메모리 영역에서, 맵핑 함수를 사용하여, 상기 수신된 논리 어드레스에 대응하는 맵핑 유닛을 결정하는 단계, 및 상기 결정된 맵핑 유닛에 대해 데이터를 읽거나 쓰는 단계를 포함하고, 상기 수신된 논리 어드레스에 대응하는 상기 맵핑 유닛은, 상기 부분 메모리 영역에 포함될 수 있다.
스토리지 장치는, 메모리 장치, 및 호스트로부터 수신되는 논리 어드레스를 상기 메모리 장치를 위한 물리 어드레스로 변환하기 위한 컨트롤러를 포함하고, 상기 컨트롤러는, 논리 어드레스들과 물리 어드레스들 사이의 대응 관계를 나타내는 대응 정보 및 상기 대응 정보에서 관리되는 물리 어드레스에 의해 지시되는 상기 메모리 장치 상의 부분 메모리 영역에서 상기 수신된 논리 어드레스에 대응하는 맵핑 유닛을 결정하기 위한 맵핑 함수를 관리하도록 구성되고, 상기 대응 정보에서 관리되는 물리 어드레스의 비트들의 개수는, 상기 맵핑 유닛을 지시하는 물리 어드레스의 비트들의 개수보다 M개(상기 M은 양의 정수)만큼 적고, 상기 대응 정보에서 관리되는 상기 물리 어드레스들에 의해 지시되는 상기 메모리 장치 상의 상기 부분 메모리 영역은 2M 개의 맵핑 유닛들을 포함하고, 상기 컨트롤러는, 상기 2M 개의 맵핑 유닛들 중에서 하나의 맵핑 유닛을 상기 수신된 논리 어드레스에 대응하는 상기 맵핑 유닛으로 결정하기 위해 상기 맵핑 함수를 사용할 수 있다.
도1은 일 실시 예에 따른 전자 장치의 블록도를 나타낸다.
도2는 일 실시 예에 따른 스토리지 장치에서 수행되는 어드레스 변환을 설명하기 위한 개념도이다.
도3은 일 실시 예에 따른 맵핑 정보를 나타낸다.
도4는 일 실시 예에 따른 맵핑 유닛을 설명하기 위한 개념도이다.
도5는 일 실시 예에 따라 논리 어드레스를 물리 어드레스로 변환하는 과정을 나타내는 개념도이다.
도6a는 일 실시 예에 따른 블록에서 데이터가 저장되어 있는 상태를 나타낸다.
도6b는 도6a 에 도시된 블록의 버켓 별 유효 맵핑 유닛의 개수를 나타내기 위한 개념도이다.
도7a는 일 실시 예에 따른 소스 블록과 목적지 블록의 데이터 저장 상태를 나타낸다.
도7b는 도7a의 소스 블록에서 목적지 블록으로 데이터 이동이 발생한 후의 소스 블록과 목적지 블록의 상태를 나타낸다.
도8a는 다른 실시 예에 따른 소스 블록과 목적지 블록의 데이터의 저장 상태를 나타낸다.
도8b는 도8a의 소스 블록에서 목적지 블록으로 데이터 이동이 발생한 후의 소스 블록과 목적지 블록의 상태를 나타낸다.
도9a는 다른 실시 예에 따른 소스 블록과 목적지 블록의 데이터의 저장 상태를 나타낸다.
도9b는 도9a의 소스 블록에서 목적지 블록으로 데이터 이동이 발생한 후의 소스 블록과 목적지 블록의 상태를 나타낸다.
도10은 일 실시 예에 따른 스토리지 장치를 동작시키기 위한 방법의 흐름도를 나타낸다.
도11 은 일 실시 예에 따른 스토리지 장치를 동작시키기 위한 방법의 흐름도를 나타낸다.
도12는 일 실시 예에 따른 스토리지 장치를 포함하는 전자 시스템의 예시적인 구성을 보여주는 블록도이다.
아래에서, 본 발명이 속하는 기술 분야에서 통상의 지식을 가진 자들(이하, 통상의 기술자들)이 본 발명을 용이하게 실시할 수 있도록, 첨부되는 도면들을 참조하여 몇몇 실시 예가 명확하고 상세하게 설명될 것이다.
도1은 일 실시 예에 따른 전자 장치의 블록도를 나타낸다.
전자 장치(1000)는 데이터를 저장하고 저장한 데이터를 관리하여 사용자에게 필요한 정보를 제공할 수 있다. 전자 장치(1000)는 퍼스널 컴퓨터(PC)이거나, 노트북 컴퓨터, 휴대폰, PDA(Personal Digital Assistant), 또는 카메라 등과 같은 모바일 전자 장치일 수 있으나 이에 제한되지 않는다.
전자 장치(1000)는 호스트(Host, 1200) 및 스토리지 장치(Storage device, 1400)를 포함할 수 있다. 호스트(1200)와 스토리지 장치(1400)는 상호 간에 통신을 하면서 데이터를 관리할 수 있다. 예를 들어, 호스트(1200)는, 스토리지 장치(1400)에게 데이터를 요청하거나, 스토리지 장치(1400)에 데이터를 저장하도록 명령할 수 있다.
호스트(1200)는, 하나 이상의 전자 회로, 칩, 장치의 동작들에 따라, 호스트(1200)의 사용자에게 다양한 서비스를 제공할 수 있다. 일 실시 예에 따른 호스트(1200)는, 호스트(1200)의 사용자로부터 수신된 명령을 처리하기 위해 다양한 연산을 수행할 수 있고, 호스트(1200)의 사용자에게 연산 결과를 제공할 수 있다. 일 실시 예에 따른 호스트(1200)는 운영 체제, 어플리케이션 등을 포함할 수 있다. 일 실시 예에 따른 호스트(1200)는 전용 논리 회로(예컨대, FPGA(Field Programmable Gate Array), ASICs(Application Specific Integrated Circuits) 등)를 포함하는 연산 프로세서(예를 들어, CPU(Central Processing Unit), GPU(Graphic Processing Unit), AP(Application Processor) 등)를 포함할 수 있으나 이에 제한되지 않는다.
일 실시 예에 따른 호스트(1200)는, 스토리지 장치(1400)와 별개의 전자 장치일 수 있다. 예를 들어, 호스트(1200)는 이동 통신 단말기, 데스크탑 컴퓨터, 노트북 컴퓨터, 태블릿 컴퓨터, 스마트 폰, 웨어러블(Wearable) 장치 등과 같은 다양한 사용자 장치 중 어느 하나일 수 있다. 또는, 호스트(1200)는 워크스테이션, 또 다른 서버, 또는 자동차 중 어느 하나일 수 있다.
일 실시 예에 따른 호스트(1200)는 스토리지 장치(1400)와 함께 단일의 전자 장치에 포함될 수 있다. 이러한 예에서, 호스트(1200)는 연산 프로세서 그 자체일 수 있다.
스토리지 장치(1400)는 컨트롤러(1420)와 메모리 장치들(1460)을 포함할 수 있다. 일 실시 예에 따른 메모리 장치들(1460)은 메모리 장치들(1461, 1469)을 포함하는 것으로 가정된다.
컨트롤러(1420)는 스토리지 장치(1400)의 전반적인 동작들을 제어할 수 있다. 예를 들어, 컨트롤러(1420)는 메모리 장치들(1461, 1469)의 동작들을 스케줄링하거나, 스토리지 장치(1400)에서 처리되는 신호들/데이터를 인코딩 및 디코딩할 수 있다. 예를 들어, 컨트롤러(1420)는 메모리 장치들(1461, 1469)이 데이터를 저장하거나 출력하도록 메모리 장치들(1461, 1469)을 제어할 수 있다.
컨트롤러(1420)는 복수의 채널을 통해 메모리 장치들(1460)과 연결될 수 있다. 컨트롤러(1420)는 호스트(1200)로부터의 다양한 요청에 응답하여 동작을 수행하기 위한 하드웨어 또는 소프트웨어 장치(미도시)를 포함할 수 있다. 일 실시 예에 따른 컨트롤러(1420)는 DRAM(Dynamic Random Access Memory), SRAM(Static Random Access Memory), SDRAM(Synchronous DRAM)과 같은 휘발성 메모리를 포함할 수 있다.
컨트롤러(1420)는 위에서 설명된 및 아래에서 설명될 기능들을 수행하도록 구성되는 하나 이상의 하드웨어 구성 요소들(예컨대, 아날로그 회로, 논리 회로 등)을 포함할 수 있다. 추가로 또는 대안적으로, 컨트롤러(1420)는 하나 이상의 프로세서 코어들을 포함할 수 있다. 위에서 설명된 및 아래에서 설명될 컨트롤러(1420)의 기능들은 소프트웨어 및/또는 펌웨어의 프로그램 코드로 구현될 수 있고, 컨트롤러(1420)의 프로세서 코어(들)는 프로그램 코드의 명령어 집합을 실행할 수 있다. 컨트롤러(1420)의 프로세서 코어(들)는 명령어 집합을 실행하기 위해 다양한 종류의 산술 연산들 및/또는 논리 연산들을 처리할 수 있다.
메모리 장치들(1460)은 적어도 하나의 비-휘발성 메모리(non-volatile memory)를 포함할 수 있다. 예를 들어, 메모리 장치들(1460)은 복수의 플래시 메모리(Flash Memory)를 포함할 수 있다. 예를 들어, 메모리 장치들(1460)은 PRAM, FRAM, MRAM 과 같은 다른 종류의 비-휘발성 메모리를 포함할 수 있다. 메모리 장치들(1460)은 메모리 셀 당 하나의 비트 데이터 또는 2비트 이상의 데이터를 저장할 수 있다. 또한, 메모리 장치들(1460)을 구성하는 비-휘발성 메모리는 3차원 구조의 메모리 셀 어레이를 포함할 수도 있다. 다만, 스토리지 장치(1400)는 데이터를 저장하기 위한 어떠한 유형의 메모리 장치도 포함할 수 있으며 이에 제한되지 않는다.
일 실시 예에 따라, 메모리 장치들(1461, 1469) 각각은 비-휘발성 메모리일 수 있다. 메모리 장치들(1461, 1469) 각각은 데이터를 저장하기 위한 메모리 위치들을 포함할 수 있다. 메모리 위치는 어드레스로 불리는 값에 기초하여 식별되고 지시될 수 있다. 쓰기 데이터는 어드레스에 의해 지시되는 메모리 위치에 저장될 수 있고, 읽기 데이터는 어드레스에 의해 지시되는 메모리 위치로부터 출력될 수 있다. 일 실시 예에 따라, 하나의 메모리 영역은 복수의 어드레스에 의해 각각 지시되는 복수의 메모리 위치를 포함할 수 있다.
메모리 장치들(1460)은 복수의 채널을 통해 연결되는 복수의 메모리 뱅크(Bank)들을 포함할 수 있으며, 복수의 메모리 뱅크들 각각은 복수의 메모리 칩(Chip)을 포함할 수 있다. 복수의 메모리 칩 각각은 복수의 메모리 블록들을 포함할 수 있으며, 복수의 메모리 블록들 각각은 복수의 메모리 페이지들을 포함할 수 있다.
복수의 메모리 페이지들 각각은 복수의 맵핑 유닛(Mapping Unit)을 포함할 수 있다. 일 실시 예에 따라, 어드레스에 의해 지시되는 메모리 위치는 맵핑 유닛의 위치를 의미할 수 있다. 맵핑 유닛은 어드레스에 의해 최종적으로 지시하고자 하는 메모리 장치들(1460) 상의 메모리 위치 또는 메모리 영역을 의미할 수 있다.
호스트(1200)는 메모리 장치들(1461, 1469)의 특정 메모리 위치 또는 특정 메모리 영역과 관련하여 데이터(DAT)를 교환하기 위해, 스토리지 장치(1400)로 어드레스(ADDR)를 제공할 수 있다. 스토리지 장치(1400)는 호스트(1200)로부터 수신되는 요청(예를 들어, 커맨드(CMD)) 및 어드레스(ADDR)에 기초하여 메모리 장치들(1461, 1469)을 제어할 수 있다.
한편, 호스트(1200)에 의해 처리되는 어드레스(ADDR)는 메모리 장치들(1460, 1469) 내에서 메모리 위치를 지시하는 어드레스와 상이할 수 있다. 예를 들어, 호스트(1200)에 의해 처리되는 어드레스(ADDR)는 논리 어드레스(logical address)로 불릴 수 있고, 메모리 장치들(1461, 1469)을 위한 어드레스는 물리 어드레스(physical address)로 불릴 수 있다. 스토리지 장치(1400)는 메모리 장치들(1461, 1469)을 적절히 제어하기 위해, 호스트(1200)에 의해 처리되는 논리 어드레스와 메모리 장치들(1461, 1469)을 위한 물리 어드레스 사이에서 어드레스 변환을 수행할 수 있다.
도2는 일 실시 예에 따른 스토리지 장치에서 수행되는 어드레스 변환을 설명하기 위한 개념도이다.
컨트롤러(1420)는 논리 어드레스와 물리 어드레스 사이에서 어드레스 변환을 수행할 수 있다. 예를 들어, 컨트롤러(1420)는 호스트(1200)로부터 수신되는 논리 어드레스를 메모리 장치들(1460)을 위한 물리 어드레스로 변환할 수 있다. 따라서, 호스트(1200)로부터 제공된 논리 어드레스가 메모리 장치들(1460) 상의 특정 메모리 위치를 지시하는 물리 어드레스와 상이하더라도, 컨트롤러(1420)는 변환된 물리 어드레스에 기초하여 메모리 장치들(1460)을 제어할 수 있다.
논리 어드레스(1410)는 호스트(1200)로부터 수신될 수 있는 논리 어드레스의 구성의 일 예를 나타낸다. 예를 들어, 논리 어드레스(1410)는 메모리 장치들(1460) 내의 채널을 지시하기 위한 영역(ch), 뱅크를 지시하기 위한 영역(bnk), 블록을 지시하기 위한 영역(blk), 페이지를 지시하기 위한 영역(page), 맵핑 유닛을 지시하기 위한 영역(mu)으로 구성될 수 있다. 일 실시 예에 따라, 논리 어드레스(1410)의 상위 비트는 채널을 특정하기 위한 정보를 나타내고, 하위 비트는 맵핑 유닛을 특정하기 위한 정보를 나타낼 수 있다.
예를 들어, 호스트(1200)는 논리 어드레스(1410)와 함께 쓰기 또는 읽기 명령을 스토리지 장치(1400)에게 전달할 수 있다. 컨트롤러(1420)는 수신된 논리 어드레스(1410)에 대응되는 메모리 장치들(1460) 상의 하나의 맵핑 유닛을 결정할 수 있다. 스토리지 장치(1400)는 논리 어드레스(1410)에 대응되는 메모리 장치들(1460) 상의 맵핑 유닛에 데이터를 쓰거나 맵핑 유닛으로부터 데이터를 읽을 수 있다. 맵핑 유닛은 논리 어드레스에 의해 지시되는 메모리 장치들(1460) 상의 영역으로 도4를 참조하여 상세히 후술한다.
컨트롤러(1420)는 어드레스 변환을 수행하기 위해, 맵핑 정보를 관리할 수 있다. 맵핑 정보는 논리 어드레스와 물리 어드레스 사이에서 어드레스 변환을 수행하기 위해 참조되는 메타데이터를 포함할 수 있다. 일 실시 예에 따른 맵핑 정보는, 논리 어드레스들과 물리 어드레스들 사이의 대응 관계를 나타내는 대응 정보와 맵핑 유닛의 위치에 대한 정보를 출력할 수 있는 맵핑 함수를 포함할 수 있다.
일 실시 예에 따라, 맵핑 정보는 컨트롤러(1420)와 연결된 휘발성 메모리에서 관리될 수 있다. 또는, 맵핑 정보는 컨트롤러(1420) 내부의 캐시 메모리 또는 메모리 장치들(1460)에 저장될 수 있다. 몇몇 경우, 맵핑 정보는 컨트롤러(1420)와 연결된 휘발성 메모리, 컨트롤러(1420) 내부의 캐시 메모리, 및 메모리 장치들(1460) 중 적어도 하나에 분산하여 저장될 수 있다. 컨트롤러(1420)는 어드레스 변환을 수행하기 위해, 맵핑 정보를 저장하는 메모리로 액세스할 수 있다.
도 3은 일 실시 예에 따른 논리 어드레스들과 물리 어드레스들 사이의 대응 관계를 나타내는 대응 정보를 나타낸다.
일 실시 예에 따른 컨트롤러(1420)는 논리 어드레스들과 물리 어드레스들 사이의 대응 관계를 나타내는 대응 정보를 관리할 수 있다.
예를 들어, 도 2의 컨트롤러(1420)는 대응 정보로서 맵핑 테이블(Mapping Table, 3000)을 관리할 수 있다. 맵핑 테이블(3000)은 논리 어드레스들(La 내지 Lz)과 물리 어드레스들(Pa 내지 Pz) 사이의 대응 관계에 관한 정보를 포함할 수 있다. 일 실시 예에 따른 맵핑 테이블(3000)은 룩-업(Look-up) 테이블의 유형으로 구현될 수 있다. 컨트롤러(1420)는 맵핑 테이블(3000)을 참조하여, 논리 어드레스를 대응하는 물리 어드레스로 변환할 수 있다.
예를 들어, 논리 어드레스(La)는 물리 어드레스(Pa)와 대응할 수 있다. 컨트롤러(1420)가 도 2의 호스트(1200)로부터 논리 어드레스(La)를 수신한 경우, 컨트롤러(1420)는 논리 어드레스(La)를 물리 어드레스(Pa)로 맵핑할 수 있다. 따라서, 컨트롤러(1420)는 논리 어드레스(La)와 함께 호스트(1200)로부터 수신된 요청을, 물리 어드레스(Pa)에 의해 지시되는 메모리 위치(예를 들어, 페이지나 맵핑 유닛)와 연관하여 처리할 수 있다.
예를 들어, 열(3200)은 논리 어드레스에 대한 정보를 포함하고, 열(3400)은 물리 어드레스에 대한 정보를 포함할 수 있다. 열(3400)에서 관리되는 물리 어드레스들은 메모리 장치들(1460) 내의 일부 메모리 영역을 지시할 수 있다. 예를 들어, 컨트롤러(1420)는 수신된 논리 어드레스에 대응하는 물리 어드레스를 맵핑 테이블(3000)을 참조하여 획득하고, 획득된 물리 어드레스에 기초하여 메모리 장치들(1460) 상의 페이지나 맵핑 유닛에 접근할 수 있다.
일 실시 예에 따른 맵핑 테이블(3000)은 완전 맵핑 테이블(Full Mapping Table, FMT)일 수 있다. 완전 맵핑 테이블은 도 2의 메모리 장치들(1460) 상의 물리 어드레스들(Pa 내지 Pz)을 완전히(Fully) 관리하기 위해 이용될 수 있다. 예를 들어, 완전 맵핑 테이블(FMT)에서 관리되는 물리 어드레스들(Pa 내지 Pz)은 메모리 장치들(1460) 상의 모든 메모리 영역들을 완전히 커버할 수 있으며 모든 메모리 영역들을 지시할 수 있다. 이러한 실시 예에서, 컨트롤러(1420)는, 호스트(1200)로부터 어떠한 논리 어드레스를 수신하더라도, 맵핑 테이블(3000)을 참조하여, 수신된 논리 어드레스를 그것에 대응하는 물리 어드레스로 맵핑할 수 있다. 컨트롤러(1420)는 맵핑 테이블(3000)을 참조하여, 수신된 논리 어드레스를 메모리 장치들(1460) 내의 하나의 맵핑 유닛으로 직접적으로 맵핑시킬 수 있다.
그러나, 메모리 장치들(1460)의 용량이 증가하는 경우, 메모리 장치들(1460)과 관련하여 관리되는 물리 어드레스들의 양 역시 증가할 수 있다. 물리 어드레스들의 양의 증가는 맵핑 테이블(3000)의 크기의 증가를 야기할 수 있다. 맵핑 테이블(3000)의 크기가 증가되면, 도 2의 스토리지 장치(1400)에서 리소스(예를 들어, 컨트롤러(1420)와 연결된 버퍼 메모리, 컨트롤러(1420) 내부의 캐시 메모리, 메모리 장치들(1460) 등)의 추가적인 할당이 필요할 수 있다. 따라서, 완전 맵핑 테이블로 구현된 맵핑 테이블(3000)은, 스토리지 장치(1400)의 관리 효율을 떨어뜨릴 수 있다.
따라서, 맵핑 테이블(3000)에서 관리되는 물리 어드레스는, 완전 맵핑 테이블에서 관리되는 물리 어드레스의 크기보다 작은 크기를 가지도록 관리될 수 있다. 예를 들어, 메모리 장치들(1460) 상의 맵핑 유닛을 지시하기 위해 필요한 물리 어드레스의 크기가 N비트(N은 양의 정수)인 경우, 맵핑 테이블(3000)에서 관리되는 물리 어드레스는 N-M 비트(M은 N보다 작은 양의 정수)의 크기를 가질 수 있다. 수신된 논리 어드레스에 대응하는 맵핑 유닛의 최종적인 위치는 후술할 맵핑 함수에 의해 결정될 수 있다.
따라서, 논리 어드레스들과 물리 어드레스들 사이의 대응 관계를 나타내는 대응 정보가 차지하는 컨트롤러(1420)의 메모리 영역이 감소될 수 있다. 대응 정보(5200) 의 크기가 감소됨으로써 남는 메모리는 스토리지 장치(1400)의 성능 향상을 위한 버퍼 메모리로 사용되거나, 데이터의 신뢰성 향상을 위한 패리티 정보를 저장하기 위해 사용될 수 있다.
도4는 일 실시 예에 따른 맵핑 유닛을 설명하기 위한 개념도이다.
맵핑 유닛은 논리 어드레스에 의해 지시되는 메모리 상의 영역을 의미할 수 있다. 예를 들어, 맵핑 유닛은 논리 어드레스에 의해 지시될 수 있는 메모리 상의 최소 단위의 영역을 의미할 수 있다.
일 실시 예에 따른 메모리 블록(4000)(이하, 블록이라 한다)은, 도2의 메모리 장치들(1460)에 포함된 메모리 장치들(1461, 1469)들 중 어느 하나의 메모리 장치에 포함된 복수의 블록들 중 하나의 블록을 나타낼 수 있다.
블록(4000)은 복수의 페이지들로 구성되고, 복수의 페이지들 각각은 복수의 맵핑 유닛으로 구성될 수 있다. 설명의 편의를 위해, 블록(4000)은 4개의 페이지(Page 0, Page 1, Page 2, Page 3)로 구성되고, 4개의 페이지들 각각은 4개의 맵핑 유닛으로 구성된다고 가정한다. 이러한 실시 예에서, 블록(4000)에는 16개의 맵핑 유닛들이 존재할 수 있다.
컨트롤러(1420)는 수신된 논리 어드레스에 대응하는 맵핑 유닛(4600)을 결정할 수 있다. 예를 들어, 호스트(1200)는 논리 어드레스와 함께 데이터에 대한 쓰기 명령을 스토리지 장치(1400)에 전달할 수 있으며, 스토리지 장치(1400)는 수신된 논리 어드레스에 대응하는 맵핑 유닛(4600)을 결정하고, 결정된 맵핑 유닛(4600)에 데이터를 쓸 수 있다.
부분 메모리 영역(4400)은 메모리 장치들(1460) 상의 일 영역을 의미할 수 있다. 부분 메모리 영역(4400)은 논리 어드레스들과 물리 어드레스들 사이의 대응 관계를 나타내는 대응 정보를 참조하여 획득된 물리 어드레스에 의해 지시되는 영역을 의미할 수 있다. 예를 들어, 부분 메모리 영역(4400)은 블록(4000) 내의 페이지 1이 위치한 영역을 의미할 수 있다.
후술하는 바와 같이, 호스트(1200)로부터 수신된 논리 어드레스에 의해 최종적으로 지시되는 맵핑 유닛의 위치는 맵핑 함수를 사용하여 결정될 수 있다. 예를 들어, 부분 메모리 영역(4400) 내에서 수신된 논리 어드레스와 대응되는 맵핑 유닛(4600)의 위치를 결정하기 위한 정보가 맵핑 함수로부터 출력될 수 있다.
블록(4000)은 가상의 영역들인 버켓(Bucket)들로 분할될 수 있다. 블록(4000)은 맵핑 함수로부터 출력되는 정보에 기초하여 복수의 버켓들로 분할될 수 있다. 복수의 버켓들 각각은 맵핑 함수로부터 출력되는 복수의 정보들 각각이 지시하는 영역과 대응될 수 있다.
예를 들어, 맵핑 함수가 2M 개의 맵핑 유닛들 중 하나의 맵핑 유닛을 결정하기 위한 정보를 출력하는 경우, 블록(4000)은 2M 개의 버켓들로 분할될 수 있다. 즉, 수신된 논리 어드레스에 대응하는 맵핑 유닛의 위치를 결정하기 위해 맵핑 함수로부터 출력되는 정보가 제0위치 정보, 제1위치 정보, 제2위치 정보, 제3위치 정보 중 어느 하나인 경우, 블록(4000)은 제0위치 정보에 의해 지시될 수 있는 블록(4000) 내의 영역에 대응하는 버켓 #0, 제1위치 정보에 의해 지시될 수 있는 블록(4000) 내의 영역에 대응하는 버켓 #1, 제2위치 정보에 의해 지시될 수 있는 블록(4000) 내의 영역에 대응하는 버켓 #2, 제3위치 정보에 의해 지시될 수 있는 블록(4000) 내의 영역에 대응하는 버켓 #3으로 분할될 수 있다. 각 버켓들은 4개의 맵핑 유닛들을 포함할 수 있다.
예를 들어, 맵핑 함수로부터 출력되는 정보가 비트 값 ‘00’인 경우, 컨트롤러(1420)는 수신된 논리 어드레스에 대응하는 맵핑 유닛이 블록(4000)내의 0 번째 열에 위치하는 것으로 결정할 수 있다. 맵핑 함수로부터 출력되는 정보가 ‘01’인 경우, 컨트롤러(1420)는 수신된 논리 어드레스에 대응하는 맵핑 유닛이 블록(4000)내의 1 번째 열에 위치하는 것으로 결정할 수 있다. 맵핑 함수로부터 출력되는 정보가 ‘10’인 경우, 컨트롤러(1420)는 수신된 논리 어드레스에 대응하는 맵핑 유닛이 블록(4000)내의 2 번째 열에 위치하는 것으로 결정할 수 있다. 맵핑 함수로부터 출력되는 정보가 ‘11’인 경우, 컨트롤러(1420)는 수신된 논리 어드레스에 대응하는 맵핑 유닛이 블록(4000)내의 3 번째 열에 위치하는 것으로 결정할 수 있다. 이러한 실시 예에서, 컨트롤러(1420)는 블록(4000)의 0 번째 열을 버켓 #0으로, 1 번째 열을 버켓 #1로, 2 번째 열을 버켓 #2로, 3번째 열을 버켓 #3으로 결정할 수 있다.
따라서, 일 실시 예에 따른 컨트롤러(1420)는 수신된 논리 어드레스와 대응되는 물리 어드레스를 대응 정보를 사용하여 획득하고, 획득된 물리 어드레스에 의해 지시되는 부분 메모리 영역(4400)을 결정할 수 있다. 그 다음 컨트롤러(1420)는, 맵핑 함수로부터 출력된 정보를 참조하여 수신된 논리 어드레스와 대응되는 맵핑 유닛(4600)이 부분 메모리 영역(4400) 내의 버켓 1 에 위치함을 결정할 수 있다.
도5는 일 실시 예에 따라 논리 어드레스를 물리 어드레스로 변환하는 과정을 나타내는 개념도이다.
일 실시 예에 따른 컨트롤러(1420)는 논리 어드레스에 대응하는 맵핑 유닛을 결정하기 위한 맵핑 정보로서 대응 정보(5200)와 맵핑 함수(5400)를 관리할 수 있다.
대응 정보(5200)는 논리 어드레스들과 물리 어드레스들 사이의 대응 관계를 나타낼 수 있다. 예를 들어, 대응 정보(5200)는 좌측 열에 논리 어드레스를 포함하고, 우측 열에 논리 어드레스와 대응하는 물리 어드레스를 포함하도록 관리될 수 있다. 일 실시 예에 따라 대응 정보(5200)는 컨트롤러(1420)와 연결된 버퍼 메모리, 컨트롤러(1420) 내부의 캐시 메모리, 메모리 장치들(1460)에 저장될 수 있다.
대응 정보(5200)에서 관리되는 물리 어드레스는 완전 맵핑 테이블에서 관리되는 물리 어드레스의 크기보다 작은 크기를 가지도록 관리될 수 있다. 예를 들어, 맵핑 유닛을 지시하기 위해 필요한 물리 어드레스의 크기가 N비트(N은 양의 정수)인 경우, 대응 정보(5200)에서 관리되는 물리 어드레스는 N-M 비트(M은 N보다 작은 양의 정수)의 크기를 가질 수 있다. M 은 대응 정보(5200)가 차지하는 메모리를 감소시키기 위한 정도에 따라 다르게 결정될 수 있다. 일 실시 예로서, M 은 컨트롤러(1420)와 연결된 버퍼 메모리, 컨트롤러(1420) 내부의 캐시 메모리, 메모리 장치들(1460)의 용량을 고려하여 스토리지 장치(1400)의 설계 또는 제조 단계에서 정해진 값일 수 있다. 다른 실시 예로서, M 은 스토리지 장치(1400)의 상태에 따라 유동적으로 변하는 값일 수 있다. 예를 들어, M 은 스토리지 장치(1400) 내의 버퍼 메모리 또는 캐시 메모리에 여유가 있으면 작게 결정되고, 그렇지 않으면 크게 결정될 수 있다.
만일 하나의 블록이 2K 개(K는 양의 정수)의 페이지들로 구성될 경우, M 는 K 보다 작은 값으로 결정될 수 있다. M 이 K 와 같다면, 대응 정보(5200)에서 관리되는 물리 어드레스는 블록 자체를 지시하게 되어 맵핑 함수의 복잡도와 연산 워크로드(workload)가 증가할 수 있기 때문이다.
예를 들어, 하나의 맵핑 유닛의 위치를 지시하기 위해 필요한 물리 어드레스의 비트 수가 6비트인 경우, 대응 정보(5200)는 4비트의 물리 어드레스를 관리할 수 있다. 컨트롤러(1420)는 수신된 논리 어드레스와 대응하는 물리 어드레스를 대응 정보(5200)를 참조하여 획득할 수 있다. 다만, 대응 정보(5200)로부터 획득된 물리 어드레스는 메모리 장치들(1460) 내의 부분 메모리 영역(예를 들어, 도4의 부분 메모리 영역(4400))만을 지시할 수 있으므로, 컨트롤러(1420)는 획득된 물리 어드레스만으로는 최종적인 맵핑 유닛의 위치를 결정할 수는 없다.
컨트롤러(1420)는 대응 정보(5200)를 참조하여 논리 어드레스 LPN 0, LPN 1, LPN 2, LPN3 에 대응하는 물리 어드레스 ‘1000’ 를 획득하고, 획득된 물리 어드레스 ‘1000’에 기초하여 논리 어드레스 LPN 0, LPN 1, LPN 2, LPN3 에 대응되는 각 맵핑 유닛이 페이지 0에 위치함을 결정할 수 있다. 또한, 컨트롤러(1420)는 대응 정보(5200)를 참조하여 논리 어드레스 LPN 4, LPN 5, LPN 6, LPN 7 에 대응하는 물리 어드레스 ‘1001’ 를 획득하고, 획득된 물리 어드레스 ‘1001’에 기초하여 논리 어드레스 LPN 4, LPN 5, LPN 6, LPN 7 에 대응되는 각 맵핑 유닛이 페이지 3에 위치함을 결정할 수 있다.
컨트롤러(1420)는 논리 어드레스에 대응하는 맵핑 유닛의 최종적인 위치를 맵핑 함수(5400)를 사용하여 결정할 수 있다. 맵핑 함수(5400)는 대응 정보(5200)에 의해 지시되는 메모리 영역 내에 존재하는 복수의 맵핑 유닛들 중에서 하나의 맵핑 유닛을 결정하기 위한 정보를 출력할 수 있다. 예를 들어, 컨트롤러(1420)는 맵핑 함수(5400)로부터 출력된 정보에 기초하여 수신된 논리 어드레스에 대응하는 맵핑 유닛이 위치하는 버켓을 결정할 수 있다.
일 실시 예에 따라, 맵핑 함수(5400)는 논리 회로와 같은 하드웨어 회로로 구현될 수 있다. 또는, 맵핑 함수(5400)는 컨트롤러(1420)에 의해 실행 가능한 프로그램 코드로 구현될 수 있다. 일 실시 예에 따라, 프로그램 코드로 구현된 맵핑 함수(5400)는, 컨트롤러(1420)와 연결된 버퍼 메모리, 컨트롤러(1420) 내부의 캐시 메모리, 메모리 장치들(1460)에 저장될 수 있다.
맵핑 함수(5400)는 입력된 키 값에 대해 맵핑 유닛의 위치를 결정하기 위한 정보를 생성할 수 있다. 맵핑 함수(5400)에는 수신된 논리 어드레스에 기초하여 생성된 키 값이 입력될 수 있다. 예를 들어, 맵핑 함수(5400)는 수신된 논리 어드레스를 구성하는 두 개 이상의 비트 값을 키 값으로 입력 받을 수 있다. 예를 들어, 맵핑 함수(5400)는 수신된 논리 어드레스를 구성하는 두 개 이상의 비트 값에 기초하여(예를 들어, 두 개 이상의 비트 값을 조합하여) 생성된 값을 키 값으로 입력 받을 수 있다.
맵핑 함수(5400)는 수신된 논리 어드레스들 각각을 맵핑 유닛들과 충돌 없이 맵핑할 수 있다. 즉, 맵핑 함수(5400)는 서로 다른 키 값에 대해 서로 다른 정보를 출력할 수 있다. 예를 들어, 맵핑 함수(5400)는 모듈로 연산을 수행하는 해싱 함수일 수 있다. 또는, 맵핑 함수(5400)는 복수의 해싱 함수들을 조합한 함수일 수 있다.
예를 들어, 컨트롤러(1420)는 맵핑 함수(5400)의 출력 정보에 기초하여, 논리 어드레스 LPN 0, LPN 1, LPN 2, LPN3 각각에 대응하는 맵핑 유닛이 각각 버켓 #0, 버켓 #1, 버켓 #2, 버켓 #3 에 위치함을 결정할 수 있다. 또한, 컨트롤러(1420)는 맵핑 함수(5400)의 출력 정보에 기초하여, 논리 어드레스 LPN 4, LPN 5, LPN 6, LPN 7 각각에 대응하는 맵핑 유닛이 각각 버켓 #0, 버켓 #1, 버켓 #2, 버켓 #3 에 위치함을 결정할 수 있다.
최종적으로, 컨트롤러(1420)는 논리 어드레스 LPN 0, LPN 1, LPN 2, LPN3 각각에 대응하는 맵핑 유닛의 위치를 각각 페이지 0의 버켓 #0, 페이지 0의 버켓 #1, 페이지 0의 버켓 #2, 페이지 0의 버켓 #3의 위치로 결정할 수 있다. 또한, 컨트롤러(1420)는 논리 어드레스 LPN 4, LPN 5, LPN 6, LPN 7 각각에 대응하는 맵핑 유닛의 위치를 각각 페이지 3의 버켓 #0, 페이지 3의 버켓 #1, 페이지 3의 버켓 #2, 페이지 3의 버켓 #3의 위치로 결정할 수 있다.
도6a는 일 실시 예에 따른 블록에서 데이터가 저장되어 있는 상태를 나타낸다.
상술한 바와 같이, 컨트롤러(1420)는 맵핑 함수를 사용하여 수신된 논리 어드레스가 지시하고자 하는 맵핑 유닛의 메모리 장치들(1460) 상에서의 위치(예를 들어, 블록 내의 특정 버켓)를 결정할 수 있다.
블록 X(6000)의 행은 페이지를, 열은 버켓을 나타낼 수 있다. 일 실시 예에 따른 블록 X(6000)는 32개의 페이지들로 구성되어 있으며, 4개의 버켓들로 분할될 수 있다.
음영 표시된 영역은 데이터가 저장된 맵핑 유닛을 나타낼 수 있다. 예를 들어, '0'의 인덱스 값을 갖는 페이지의 버켓 #0에는 데이터가 저장되어 있지 않으며, '2'의 인덱스 값을 갖는 페이지의 버켓 #0에는 데이터가 저장되어 있다. 이하, 데이터가 저장된 맵핑 유닛을 유효 맵핑 유닛(Valid Mapping Unit)이라고 한다.
컨트롤러(1420)는 메모리 장치들(1460)에 존재하는 복수의 블록들 중 하나를 선택하여 선택된 블록에 저장된 데이터를 다른 블록(즉, 목적지 블록)으로 이동시키고 선택된 블록에 기존에 저장되어 있던 데이터를 삭제하여 선택된 블록을 프리 블록(free block)으로 만드는 동작을 수행할 수 있다. 이러한 동작은 스토리지 장치(1400)가 데이터의 덮어 쓰기(In-Place Update)를 지원하지 않는 경우에 수행될 수 있다. 저장된 데이터를 다른 블록으로 이동시키고 저장된 데이터를 삭제하기 위해 선택된 블록을 희생 블록(victim block)이라고 지칭할 수 있다.
희생 블록은 쓰기 동작이 수행되는 데이터의 양을 고려하여 선택될 수 있다. 쓰기 동작이 수행되는 데이터의 양이란, 데이터를 블록에 덮어 쓰기 위해 실제로 쓰기 동작이 발생되는 데이터의 양을 의미할 수 있다. 예를 들어, 스토리지 장치(1400)가 데이터를 블록에 덮어 쓰기 하고자 하는 경우, 블록에 저장되어 있던 기존의 데이터를 다른 블록으로 옮겨서 쓰는 동작이 선행될 수 있다. 따라서, 쓰기 동작에 따른 오버헤드를 최소화 시키기 위해, 쓰기 동작이 수행되는 데이터의 양을 감소시킬 수 있는 희생 블록이 선택될 필요가 있다.
일 실시 예에 따른 컨트롤러(1420)는 블록에 존재하는 유효 맵핑 유닛의 전체 개수가 가장 적은 블록을 희생 블록으로 선택할 수 있다. 이를 위해, 컨트롤러(1420)는 메모리 장치들(1460)의 복수의 블록 각각에 대해 유효 맵핑 유닛의 전체 개수에 대한 정보를 결정할 수 있다.
예를 들어, 컨트롤러(1420)는 블록 X(6000)의 유효 맵핑 유닛의 개수에 대한 정보(6200)를 참조하여, 블록 X(6000)에는 64개의 유효 맵핑 유닛이 존재함을 알 수 있다.
도6b는 도6a 에 도시된 블록의 버켓 별 유효 맵핑 유닛의 개수를 나타내기 위한 도면이다.
도6b의 블록 X(6000)는 버켓 별로 존재하는 유효 맵핑 유닛들의 개수를 데이터가 실제로 저장된 페이지의 물리적인 위치를 고려하지 않고 누적하여 나타낸 것이다. 블록 X(6000)의 버켓 #0, 버켓 #1, 버켓 #2, 버켓 #3은 각각 24개, 8개, 16개, 16개의 유효 맵핑 유닛들을 포함하고 있다.
컨트롤러(1420)는 버켓 별 유효 맵핑 유닛의 개수에 대한 정보(6400)를 복수의 블록 각각에 대해 결정할 수 있다.
예를 들어, 컨트롤러(1420)는 희생 블록을 결정하기 위해, 소스 블록과 목적지 블록 중 적어도 하나의 블록의 버켓 별 유효 맵핑 유닛의 개수에 대한 정보(6400)를 참조할 수 있다.
즉, 컨트롤러(1420)는 소스 블록과 목적지 블록 중 적어도 하나의 블록에 대한 버켓 별 유효 맵핑 유닛 개수 정보에 기초하여, 소스 블록에 저장된 모든 데이터가 한번에 목적지 블록으로 이동될 수 있는지 여부를 판단할 수 있다. 왜냐하면, 스토리지 장치(1400)는 맵핑 함수를 사용하여 데이터가 저장될 위치(예를 들어, 버켓)를 결정하므로, 소스 블록의 버켓 #0에 저장된 데이터는 목적지 블록의 버켓 #0으로, 소스 블록의 버켓 #1에 저장된 데이터는 목적지 블록의 버켓 #1로, 소스 블록의 버켓 #2에 저장된 데이터는 목적지 블록의 버켓 #2로, 소스 블록의 버켓 #3에 저장된 데이터는 목적지 블록의 버켓 #3으로 각각 이동되어야 하기 때문이다.
도7a는 일 실시 예에 따른 소스 블록과 목적지 블록의 데이터 저장 상태를 나타낸다.
소스 블록(7200)의 유효 맵핑 유닛은 체크 표시되었으며, 목적지 블록(7400)의 유효 맵핑 유닛은 사선으로 표시되었다.
일 실시 예에 따른 컨트롤러(1420)는 목적지 블록(7400)의 버켓 별 유효 맵핑 유닛의 개수에 대한 정보(7420)를 참조하여 희생 블록을 결정할 수 있다.
컨트롤러(1420)는 목적지 블록(7400)의 버켓 #0 에는 18개, 버켓 #1에는 8개, 버켓 #2에는 16개, 버켓 #3에는 14개의 유효 맵핑 유닛들이 각각 존재함을 알 수 있다. 바꾸어 말하면, 데이터를 저장할 수 있는 비어있는 맵핑 유닛이 버켓 #0에는 18개, 버켓 #1에는 24개, 버켓 #3에는 16개, 버켓4에는 18개 남아있다. 즉, 컨트롤러(1420)는 목적지 블록(7400)의 버켓 별 유효 맵핑 유닛의 개수에 대한 정보(7420)를 참조하여 데이터를 저장하기 위한 공간이 가장 적게 남은 버켓에 대한 정보(예를 들면, 버켓의 인덱스 정보)를 획득할 수 있다.
목적지 블록(7400)의 버켓 #0은 데이터를 저장하기 위한 공간이 가장 적게 남은 버켓이다. 컨트롤러(1420)는 소스 블록(7200)의 데이터를 목적지 블록(7400)으로 이동시킬 경우, 소스 블록(7200)이 프리 블록이 될 수 있는지(즉, 소스 블록(7200)의 모든 데이터가 목적지 블록(7400)으로 한번에 이동될 수 있는지) 여부를 미리 판단할 수 있다.
예를 들어, 컨트롤러(1420)는 소스 블록(7200)의 유효 맵핑 유닛의 전체 개수와 목적지 블록(7400)의 복수의 버켓들 중 저장 공간이 가장 적게 남은 버켓의 남은 저장 공간을 비교하고, 비교 결과에 따라 소스 블록(7200)의 데이터들이 목적지 블록(7400)으로 모두 이동될 수 있는지 여부를 판단할 수 있다. 예를 들어, 컨트롤러(1420)는, 소스 블록(7200)의 유효 맵핑 유닛의 전체 개수(예를 들어, 유효 맵핑 유닛의 전체 개수에 대한 정보(7220)로부터 획득된 12개)가 목적지 블록(7400)의 버켓 #0의 비어있는 맵핑 유닛의 개수(예를 들어, 14)보다도 적다면, 소스 블록(7200)의 데이터를 목적지 블록(7400)으로 이동시킬 경우 소스 블록(7200)이 프리 블록이 될 것으로 미리 판단할 수 있다.
이러한 경우, 컨트롤러(1420)는 소스 블록(7200)의 버켓 별 유효 맵핑 유닛의 개수에 대한 정보(7220)를 고려할 필요 없이 소스 블록(7200)을 희생 블록으로 결정할 수 있다.
도7b는 도7a의 소스 블록에서 목적지 블록으로 데이터 이동이 발생한 후의 소스 블록과 목적지 블록의 상태를 나타낸다.
데이터 이동이 발생한 후 소스 블록(7200)은 프리 블록이 되었고 목적지 블록(7400)에는 각 버켓 별로 소스 블록(7200)으로부터 이동된 새로운 데이터가 저장되었다.
도8a는 다른 실시 예에 따른 소스 블록과 목적지 블록의 데이터의 저장 상태를 나타낸다.
소스 블록(8200)의 유효 맵핑 유닛은 체크 표시되었으며, 목적지 블록(8400)의 유효 맵핑 유닛은 사선으로 표시되었다.
소스 블록(8200)의 버켓 #0, 버켓 #1, 버켓 #2, 버켓 #3 각각에는 8개, 2개, 10개, 2개의 유효 맵핑 유닛들이 존재한다. 목적지 블록(8400)의 버켓 #0, 버켓 #1, 버켓 #2, 버켓 #3 각각에는 18개, 8개, 24개, 14개의 유효 맵핑 유닛들이 존재한다.
일 실시 예에 따른 컨트롤러(1420)는 희생 블록을 결정하기 위해, 목적지 블록(8400)의 버켓 별 유효 맵핑 유닛의 개수에 대한 정보(8420)에 기초하여 비어있는 맵핑 유닛이 가장 적게 남은 버켓(즉, 버켓 #2)에 대한 정보를 획득할 수 있다. 목적지 블록(8400)의 버켓 #2에는 데이터를 저장할 수 있는 비어있는 맵핑 유닛이 8개 존재한다. 이러한 경우, 컨트롤러(1420)는 목적지 블록(8400)에서 비어있는 맵핑 유닛이 가장 적은 버켓의 식별자와 동일한 식별자를 갖는 버켓에서의 유효 맵핑 유닛이 가장 적게 존재하는 블록을 희생 블록으로 결정할 수 있다.
예를 들어, 컨트롤러(1420)는 소스 블록(8200)을 희생 블록의 후보로 고려하였다고 가정한다. 소스 블록(8200)의 버켓 별 유효 맵핑 유닛의 개수에 대한 정보(8220)를 참조하면, 소스 블록(8200)의 버켓 #2에 존재하는 유효 맵핑 유닛의 개수는 10개이다.
도8b는 도8a의 소스 블록에서 목적지 블록으로 데이터 이동이 발생한 후의 소스 블록과 목적지 블록의 상태를 나타낸다.
목적지 블록(8400)에는 각 버켓 별로 소스 블록(8200)으로부터 이동된 새로운 데이터가 저장되었다. 데이터 이동이 발생한 후에도 소스 블록(8200)의 버켓 #2에는 두 개의 유효 페이지가 아직 존재하므로 프리 블록이 아니다. 따라서, 이러한 경우 컨트롤러(1420)는 소스 블록(8200)에 남아있는 데이터를 새로운 목적지 블록으로 이동시켜야만 한다.
따라서, 만약 버켓 #2에서 소스 블록(8200)보다 적은 개수의 유효 맵핑 유닛이 존재하는 다른 블록이 있다면 컨트롤러(1420)는 그러한 블록을 희생 블록으로 선택하여 쓰기 동작에 따른 오버헤드를 감소시킬 수 있다. 도9a 및 도9b를 참조하여 버켓 #2에서 소스 블록(8200)보다 적은 개수의 유효 맵핑 유닛이 존재하는 다른 블록을 희생 블록으로 선택하는 경우를 설명한다.
도9a는 다른 실시 예에 따른 소스 블록과 목적지 블록의 데이터의 저장 상태와 버켓 별 유효 맵핑 유닛의 개수에 대한 정보를 나타낸다.
소스 블록(9200)의 유효 맵핑 유닛은 체크 표시되었으며, 목적지 블록(9400)의 유효 맵핑 유닛은 사선으로 표시되었다.
소스 블록(9200)의 버켓 #0, 버켓 #1, 버켓 #2, 버켓 #3 각각에는 8개, 2개, 4개, 2개의 유효 페이지가 존재한다. 목적지 블록(9400)의 버켓 #0, 버켓 #1, 버켓 #2, 버켓 #3 각각에는 18개, 8개, 24개, 14개의 유효 페이지가 존재한다.
상술한 바와 같이 컨트롤러(1420)는 목적지 블록(9400)에서 데이터를 저장할 수 있는 맵핑 유닛이 가장 적게 남은 버켓을 버켓 #2로 결정할 수 있다. 컨트롤러(1420)는 복수의 블록들 중에서, 버켓 #2 에서의 유효 맵핑 유닛의 개수가 가장 적은 블록으로 소스 블록(9200)을 선택할 수 있다. 소스 블록(9200)의 버켓 #2에는 4개의 유효 맵핑 유닛이 존재한다.
도9b는 도9a의 소스 블록에서 목적지 블록으로 데이터 이동이 발생한 후의 소스 블록과 목적지 블록의 상태를 나타낸다.
목적지 블록(9400)에는 소스 블록(9200)으로부터 이동된 새로운 데이터가 각 버켓 별로 저장되었다. 소스 블록(9200)에 저장되어 있던 모든 데이터가 목적지 블록(9400)으로 이동하였으므로 소스 블록(9200)은 프리 블록이 되었다.
도7a 내지 도9b를 참조하여 상술한 희생 블록을 선택하는 방법은 각 블록의 버켓에 따른 유효 맵핑 유닛의 분포를 고려하여 희생 블록을 결정하기 위한 방법의 일 실시 예일 뿐이며 본 발명은 이에 제한되지 않는다. 따라서, 맵핑 함수를 사용하여 데이터가 저장되는 블록 내에서의 영역(예를 들어, 버켓)이 결정되는 스토리지 장치(1400)에서, 버켓에 따른 유효 맵핑 유닛의 분포(예를 들어, 버켓 별 유효 맵핑 유닛 개수의 정보)를 고려하여 희생 블록을 선택하기 위한 어떠한 알고리즘도 채택될 수 있다.
도10은 일 실시 예에 따른 스토리지 장치를 동작시키기 위한 방법의 흐름도를 나타낸다.
단계 S1020에서, 스토리지 장치(1400)는 호스트(1200)로부터 수신된 논리 어드레스에 대응하는 물리 어드레스를 논리 어드레스들과 물리 어드레스들 사이의 대응 관계를 나타내는 대응 정보를 참조하여 획득할 수 있다. 일 실시 예에 따라, 대응 정보는 완전 맵핑 테이블에서 관리되는 물리 어드레스보다 작은 크기의 물리 어드레스들을 관리할 수 있다. 예를 들어, 맵핑 유닛을 지시하기 위해 필요한 물리 어드레스의 크기가 N비트(N은 양의 정수)인 경우, 대응 정보에서 관리되는 물리 어드레스는 N-M 비트(M은 양의 정수)의 크기를 가질 수 있다. 스토리지 장치(1400)는 획득된 물리 어드레스에 의해 지시되는 스토리지 장치(1400) 내의 부분 메모리 영역을 결정할 수 있다. M 은 대응 정보가 차지하는 메모리를 감소시키기 위한 정도에 따라 다르게 결정될 수 있다. 일 실시 예로서, M 은 스토리지 장치(1400) 내부의 버퍼 메모리, 캐시 메모리, 메모리 장치들(1460)의 용량을 고려하여 스토리지 장치(1400)의 설계 또는 제조 단계(예를 들어, 단계 S1010 이전)에서 정해진 값일 수 있다. 다른 실시 예로서, M 은 스토리지 장치(1400)의 상태에 따라 유동적으로 변하는 값일 수 있다. 예를 들어, M 은 스토리지 장치(1400) 내의 버퍼 메모리 또는 캐시 메모리에 여유가 있으면 작게 결정되고, 그렇지 않으면 크게 결정될 수 있다.
단계 S1040에서, 스토리지 장치(1400)는 맵핑 함수를 사용하여, 수신된 논리 어드레스에 대응되는 맵핑 유닛을 결정할 수 있다. 스토리지 장치(1400)는 맵핑 함수로부터 수신된 논리 어드레스에 대응되는 맵핑 유닛의 위치를 결정하기 위한 정보를 획득할 수 있다. 일 실시 예에 따른 맵핑 함수는 수신된 논리 어드레스들 각각을 맵핑 유닛들과 충돌 없이 맵핑하기 위한 해싱 함수일 수 있다. 맵핑 함수는 M 의 값에 따라 맵핑 유닛이 위치할 수 있는 2M 개의 영역(예를 들어, 버켓)들 중 하나의 영역을 결정하기 위한 정보를 출력할 수 있다. 맵핑 함수에 입력될 수 있는 키 값은 수신된 논리 어드레스에 기초하여 생성될 수 있다. 예를 들어, 맵핑 함수는 수신된 논리 어드레스를 구성하는 두 개 이상의 비트 값을 키 값으로 입력 받고, 입력된 키 값을 변환하여 맵핑 유닛의 위치를 결정하기 위한 정보를 출력할 수 있다. 예를 들어, 키 값은 두 개 이상의 비트 값에 기초하여(예를 들어, 두 개 이상의 비트 값을 조합하여) 생성될 수 있다. 스토리지 장치(1400)는 수신된 논리 어드레스에 대응하는 맵핑 유닛의 위치를 최종적으로 결정할 수 있다. 스토리지 장치(1400)는 맵핑 함수로부터 출력된 정보에 기초하여, 단계 S1020 에서 결정된 부분 메모리 영역에 위치한 복수의 맵핑 유닛들 중에서 하나의 맵핑 유닛을 결정할 수 있다.
단계 S1060에서, 스토리지 장치(1400)는 단계 S1040 에서 결정된 맵핑 유닛에 대해 데이터를 읽거나 쓸 수 있다.
도11 은 일 실시 예에 따른 스토리지 장치를 동작시키기 위한 방법의 흐름도를 나타낸다.
단계 S1120에서, 스토리지 장치(1400)는 복수의 메모리 블록들 각각을 스토리지 장치(1400)에서 사용하는 맵핑 함수의 출력에 기초하여 복수의 버켓들로 분할할 수 있다. 일 실시 예로서, 스토리지 장치(1400)는 맵핑 함수의 출력들 각각에 대응하는 버켓들에 대한 정보를 버켓들의 식별자와 함께 스토리지 장치(1400)의 제조시점부터 관리할 수 있다. 다른 실시 예로서, 스토리지 장치(1400)는 희생 블록이 필요하다고 판단될 때에, 복수의 메모리 블록들 각각을 맵핑 함수의 출력들 각각에 대응하는 버켓들로 분할할 수 있다. 예를 들어, 스토리지 장치(1400)는 버켓들 각각과 대응하는 배열(Array)이나 Linked List 를 생성하고 초기화할 수 있다.
단계 S1140에서, 스토리지 장치(1400)는 복수의 메모리 블록들 각각에 대해, 복수의 버켓들 각각에 존재하는 유효 맵핑 유닛의 개수를 나타내는 정보(버켓 별 유효 맵핑 유닛의 개수에 대한 정보)를 결정할 수 있다. 버켓 별 유효 맵핑 유닛의 개수에 대한 정보는 도6a 내지 9b를 참조하여 상술하였다.
단계 S1160 에서, 스토리지 장치(1400)는 단계 S1140에서 결정된 버켓 별 유효 맵핑 유닛의 개수에 대한 정보에 기초하여 희생 블록을 결정할 수 있다. 스토리지 장치(1400)는 희생 블록을 결정하기 위해 소스 블록에 저장된 모든 데이터가 한번에 목적지 블록으로 이동될 수 있는지 여부를 판단할 수 있다. 이를 위해, 스토리지 장치(1400)는 소스 블록과 목적지 블록 중 적어도 하나의 블록에 대한 버켓 별 유효 맵핑 유닛의 개수에 대한 정보를 참조할 수 있다.
첫 번째 실시 예로서, 스토리지 장치(1400)는 블록에 존재하는 유효 맵핑 유닛의 전체 개수가 가장 적은 블록을 희생 블록의 후보인 소스 블록으로 선택할 수 있다. 스토리지 장치(1400)는, 선택된 소스 블록의 데이터가 하나의 목적지 블록에 모두 이동할 수 있는지 여부를 목적지 블록의 버켓 별 유효 맵핑 유닛의 개수에 대한 정보와 소스 블록의 유효 맵핑 유닛의 전체 개수에 대한 정보를 참조하여 판단할 수 있다. 판단 결과, 데이터 이동 후에 소스 블록이 프리 블록으로 될 것으로 판단되면, 스토리지 장치(1400)는 소스 블록의 버켓 별 유효 맵핑 유닛의 개수에 대한 정보를 참조하지 않고 소스 블록을 희생 블록으로 결정할 수 있다. 첫 번째 실시 예에 대해서는 도7a 및 7b를 참조하여 상술하였다.
두 번째 실시 예로서, 스토리지 장치(1400)는 목적지 블록의 버켓 별 유효 맵핑 유닛의 개수에 대한 정보를 참조하여 비어있는 맵핑 유닛이 가장 적게 남아있는 버켓을 선택할 수 있다. 스토리지 장치(1400)는 선택된 버켓과 동일한 식별자를 갖는 버켓에 존재하는 유효 맵핑 유닛의 개수가 가장 적은 블록을 희생 블록으로 선택할 수 있다. 이 경우, 소스 블록의 버켓 별 유효 맵핑 유닛의 개수에 대한 정보가 참조될 수 있다. 두 번째 실시 예에 대해서는 도8a 내지 9b를 참조하여 상술하였다.
도12는 일 실시 예에 따른 스토리지 장치를 포함하는 전자 시스템의 예시적인 구성을 보여주는 블록도이다.
전자 시스템(10000)은 메인 프로세서(11010), 워킹 메모리(12000), 스토리지 장치(13000), 통신 블록(14000), 유저 인터페이스(15000), 및 버스(16000)를 포함할 수 있다. 예로서, 전자 시스템(10000)은 데스크톱(Desktop) 컴퓨터, 랩톱(Laptop) 컴퓨터, 태블릿(Tablet) 컴퓨터, 스마트폰, 웨어러블(Wearable) 장치, 비디오 게임기(Video Game Console), 워크스테이션(Workstation), 서버(Server), 전기 자동차 등과 같은 전자 장치들 중 하나일 수 있다. 일 실시 예에 따른 전자 시스템(10000)은 도1내지 도9b을 참조하여 상술한 전자 장치 중 어느 하나를 포함할 수 있다. 예를 들어, 전자 시스템(10000)은 도1의 전자 장치(1000)를 포함할 수 있으나 이에 제한되지 않는다.
메인 프로세서(11010)는 전자 시스템(10000)의 전반적인 동작들을 제어할 수 있다. 메인 프로세서(11010)는 다양한 종류의 산술 연산들 및/또는 논리 연산들을 처리할 수 있다. 이를 위해, 메인 프로세서(11010)는 전용(Special-purpose) 회로(예컨대, FPGA(Field Programmable Gate Array), ASICs(Application Specific Integrated Circuits) 등)를 포함할 수 있다. 예로서, 메인 프로세서(11010)는 하나 이상의 프로세서 코어를 포함할 수 있고, 범용 프로세서, 전용 프로세서, 또는 어플리케이션 프로세서(Application Processor)로 구현될 수 있다. 메인 프로세서(11010)는 도1의 호스트(1200)를 포함할 수 있다. 예를 들어, 메인 프로세서(11010)는 논리 어드레스와 함께 쓰기 또는 읽기 명령을 스토리지 장치(13000)에게 전달할 수 있다.
워킹 메모리(12000)는 전자 시스템(10000)의 동작에 이용되는 데이터를 저장할 수 있다. 예로서, 워킹 메모리(12000)는 메인 프로세서(11010)에 의해 처리된 또는 처리될 데이터를 일시적으로 저장할 수 있다. 예로서, 워킹 메모리(12000)는 DRAM(Dynamic RAM), SDRAM(Synchronous RAM) 등과 같은 휘발성 메모리, 및/또는 PRAM(Phase-change RAM), MRAM(Magneto-resistive RAM), ReRAM(Resistive RAM), FRAM(Ferro-electric RAM) 등과 같은 불휘발성 메모리를 포함할 수 있다.
스토리지 장치(13000)는 적어도 하나의 메모리 장치 및 컨트롤러를 포함할 수 있다. 스토리지 장치(13000)의 메모리 장치는 전력 공급에 관계없이 데이터를 저장할 수 있다. 예로서, 스토리지 장치(13000)는 플래시 메모리, PRAM, MRAM, ReRAM, FRAM 등과 같은 불휘발성 메모리를 포함할 수 있다. 예로서, 스토리지 장치(13000)는 SSD(Solid State Drive), 카드 스토리지, 임베디드(Embedded) 스토리지 등과 같은 스토리지 매체를 포함할 수 있다.
일 실시 예에 따른 스토리지 장치(13000)는 도1내지 5를 참조하여 상술한 메모리 맵핑을 수행할 수 있다. 예를 들어, 스토리지 장치(13000)는 도5의 스토리지 장치(1400)를 포함할 수 있으나 이에 제한되지 않는다. 예를 들어, 스토리지 장치(13000)는 메인 프로세서(11010)로부터 논리 어드레스를 수신하고, 스토리지 장치(13000) 내의 맵핑 정보를 사용하여 수신된 논리 어드레스에 대응하는 맵핑 유닛을 결정할 수 있다. 맵핑 정보는 논리 어드레스들과 물리 어드레스들 사이의 대응 관계를 나타내는 대응 정보와 맵핑 유닛의 위치를 결정하기 위한 정보를 출력할 수 있는 맵핑 함수를 포함할 수 있다. 예를 들어, 스토리지 장치(13000)에서 관리되는 대응 정보는 도5의 대응 정보(5200)를 포함할 수 있으며, 맵핑 함수는 도5의 맵핑 함수(5400)를 포함할 수 있다.
또한 일 실시 예에 따른 스토리지 장치(13000)는 도6a 내지 9b를 참조하여 상술한 방법으로 희생 블록을 결정할 수 있다. 예를 들어, 스토리지 장치(13000)는 블록 별로 버켓 별 유효 맵핑 유닛의 개수에 대한 정보를 결정할 수 있다. 예를 들어, 스토리지 장치(13000)는 블록 별로 결정된 버켓 별 유효 맵핑 유닛의 개수에 대한 정보를 참조하여 쓰기 동작에 따른 오버헤드를 최소화할 수 있는 희생 블록을 결정할 수 있다.
통신 블록(14000)은 전자 시스템(10000)의 외부 장치/시스템과 통신할 수 있다. 예로서, 통신 블록(14000)은 LTE(Long Term Evolution), WIMAX(Worldwide Interoperability for Microwave Acess), GSM(Global System for Mobile communications), CDMA(Code Division Multiple Access), Bluetooth, NFC(Near Field Communication), Wi-Fi(Wireless Fidelity), RFID(Radio Frequency Identification) 등과 같은 다양한 무선 통신 규약 중 적어도 하나, 및/또는 TCP/IP(Transfer Control Protocol/Internet Protocol), USB(Universal Serial Bus), Firewire 등과 같은 다양한 유선 통신 규약 중 적어도 하나를 지원할 수 있다.
유저 인터페이스(15000)는 사용자와 전자 시스템(10000) 사이의 통신을 중재할 수 있다. 예로서, 유저 인터페이스(15000)는 키보드, 마우스, 키패드, 버튼, 터치 패널, 터치 스크린, 터치 패드, 터치 볼, 카메라, 마이크, 자이로스코프 센서, 진동 센서 등과 같은 입력 인터페이스를 포함할 수 있다. 예로서, 유저 인터페이스(1500)는 LCD(Liquid Crystal Display) 장치, LED(Light Emitting Diode) 표시 장치, OLED(Organic LED) 표시 장치, AMOLED(Active Matrix OLED) 표시 장치, 스피커, 모터 등과 같은 출력 인터페이스를 포함할 수 있다.
버스(16000)는 전자 시스템(10000)의 구성 요소들 사이에서 통신 경로를 제공할 수 있다. 전자 시스템(10000)의 구성 요소들은 버스(16000)의 버스 포맷에 기초하여 서로 데이터를 교환할 수 있다. 예로서, 버스 포맷은 USB, SCSI(Small Computer System Interface), PCIe(Peripheral Component Interconnect Express), M-PCIe(Mobile PCIe), ATA(Advanced Technology Attachment), PATA(Parallel ATA), SATA(Serial ATA), SAS(Serial Attached SCSI), IDE(Integrated Drive Electronics), EIDE(Enhanced IDE), NVMe(Nonvolatile Memory Express), UFS(Universal Flash Storage) 등과 같은 다양한 인터페이스 규약 중 하나 이상을 포함할 수 있다.
한편, 상술한 메모리 맵핑 방법 및 희생 블록 결정 방법은 컴퓨터로 읽을 수 있는 기록매체에 컴퓨터가 읽을 수 있는 코드로서 구현하는 것이 가능하다. 컴퓨터가 읽을 수 있는 기록매체는 컴퓨터 시스템에 의하여 읽혀질 수 있는 데이터가 저장되는 모든 종류의 기록장치를 포함한다. 컴퓨터가 읽을 수 있는 기록매체의 예로는 ROM, RAM. CD-ROM, 자기 테이프, 플로피디스크, 광 데이터 저장장치 등이 있으며, 또한 인터넷을 통한 전송 등의 형태로 구현되는 것도 포함한다. 또한, 컴퓨터가 읽을 수 있는 기록매체는 네트워크로 연결된 컴퓨터 시스템에 분산되어, 분산방식으로 프로세서가 읽을 수 있는 코드가 저장되고 실행될 수 있다.
위 설명들은 본 발명을 구현하기 위한 예시적인 구성들 및 동작들을 제공하도록 의도된다. 본 발명의 기술 사상은 위에서 설명된 실시 예들뿐만 아니라, 위 실시 예들을 단순하게 변경하거나 수정하여 얻어질 수 있는 구현들도 포함할 것이다. 또한, 본 발명의 기술 사상은 위에서 설명된 실시 예들을 앞으로 용이하게 변경하거나 수정하여 달성될 수 있는 구현들도 포함할 것이다.

Claims (10)

  1. 메모리 장치; 및
    호스트로부터 수신되는 논리 어드레스를 상기 메모리 장치를 위한 물리 어드레스로 변환하도록 구성된 컨트롤러를 포함하고,
    상기 컨트롤러는, 논리 어드레스들과 물리 어드레스들 사이의 대응 관계를 나타내는 대응 정보 및 상기 대응 정보에서 관리되는 물리 어드레스에 의해 지시되는 상기 메모리 장치 상의 부분 메모리 영역에서 상기 수신된 논리 어드레스에 대응하는 맵핑 유닛을 결정하기 위한 맵핑 함수를 관리하도록 더 구성되고,
    상기 수신된 논리 어드레스에 대응하는 상기 맵핑 유닛은 상기 수신된 논리 어드레스에 의해 지시되는 상기 메모리 장치 상의 영역이고,
    상기 컨트롤러는, 상기 대응 정보를 참조하여 상기 수신된 논리 어드레스에 대응하는 상기 맵핑 유닛을 포함하는 상기 부분 메모리 영역을 결정하고, 상기 맵핑 함수를 사용하여 상기 부분 메모리 영역으로부터 상기 맵핑 유닛을 결정하기 위해 더 구성되는 스토리지 장치.
  2. 제1항에 있어서,
    상기 대응 정보에서 관리되는 상기 물리 어드레스의 크기는 상기 맵핑 유닛을 지시하는 물리 어드레스의 크기보다 작은 스토리지 장치.
  3. 제2항에 있어서,
    상기 대응 정보에서 관리되는 상기 물리 어드레스의 비트들의 개수는, 상기 맵핑 유닛을 지시하는 상기 물리 어드레스의 비트들의 개수보다 M개(상기 M은 양의 정수)만큼 적고,
    상기 대응 정보에서 관리되는 상기 물리 어드레스에 의해 지시되는 상기 메모리 장치 상의 상기 부분 메모리 영역은 2M 개의 맵핑 유닛들을 포함하고,
    상기 컨트롤러는 상기 2M 개의 맵핑 유닛들 중에서 하나의 맵핑 유닛을 상기 수신된 논리 어드레스에 대응하는 상기 맵핑 유닛으로 결정하기 위해 상기 맵핑 함수를 사용하는 스토리지 장치.
  4. 제1항에 있어서,
    상기 컨트롤러는, 상기 대응 정보를 참조하여 상기 수신된 논리 어드레스에 대응하는 물리 어드레스를 획득하고, 상기 획득된 물리 어드레스에 의해 지시되는 상기 부분 메모리 영역을 결정하고,
    상기 맵핑 함수를 사용하여, 상기 결정된 부분 메모리 영역에서 상기 수신된 논리 어드레스에 대응하는 상기 맵핑 유닛의 위치를 결정하도록 구성되는 스토리지 장치.
  5. 제1항에 있어서,
    상기 맵핑 함수는 상기 수신된 논리 어드레스를 구성하는 두 개 이상의 비트 값들에 기초하여, 상기 부분 메모리 영역에서 상기 수신된 논리 어드레스에 대응하는 상기 맵핑 유닛의 위치를 결정하기 위한 정보를 출력하는 스토리지 장치.
  6. 제1항에 있어서,
    상기 컨트롤러는, 상기 메모리 장치에 포함된 복수의 메모리 블록들 각각을, 상기 맵핑 함수의 출력에 기초하여 복수의 버켓들로 분할하고, 상기 복수의 버켓들 각각의 유효 맵핑 유닛들의 개수에 기초하여 상기 복수의 메모리 블록들 중에서 희생 블록을 결정하도록 구성되고,
    상기 유효 맵핑 유닛들 각각은 데이터가 저장된 맵핑 유닛인 스토리지 장치.
  7. 제6항에 있어서,
    상기 컨트롤러는, 상기 복수의 메모리 블록들 각각에서의 상기 유효 맵핑 유닛들의 전체 개수에 기초하여, 상기 복수의 메모리 블록들 중에서 상기 유효 맵핑 유닛들의 상기 전체 개수가 가장 적은 메모리 블록을 상기 희생 블록의 후보인 소스 블록으로 선택하고,
    목적지 블록의 유효 맵핑 유닛들의 개수에 기초하여 상기 소스 블록을 상기 희생 블록으로 결정할지 여부를 판단하도록 구성되는 스토리지 장치.
  8. 제7항에 있어서,
    상기 컨트롤러는, 상기 목적지 블록의 상기 유효 맵핑 유닛들의 개수에 기초하여 상기 목적지 블록의 복수의 버켓들 중 비어있는 맵핑 유닛들이 가장 적게 남은 버켓을 선택하고, 상기 선택된 버켓의 상기 비어있는 맵핑 유닛들의 개수와 상기 소스 블록의 상기 유효 맵핑 유닛들의 상기 전체 개수를 비교한 결과에 따라서 상기 소스 블록을 상기 희생 블록으로 결정하도록 구성되는 스토리지 장치.
  9. 제6항에 있어서,
    상기 컨트롤러는, 목적지 블록의 유효 맵핑 유닛들의 개수에 기초하여 상기 목적지 블록의 복수의 버켓들 중 비어있는 맵핑 유닛들이 가장 적게 남은 버켓을 선택하고,
    상기 복수의 메모리 블록들 각각의 상기 유효 맵핑 유닛들의 개수에 기초하여, 상기 복수의 메모리 블록들 중에서, 상기 선택된 버켓의 식별자와 동일한 식별자를 갖는 버켓에 존재하는 유효 맵핑 유닛들의 개수가 가장 적은 메모리 블록을 상기 희생 블록으로 결정하기 위해 구성되는 스토리지 장치.
  10. 스토리지 장치를 동작시키기 위한 방법에 있어서,
    논리 어드레스들과 물리 어드레스들 사이의 대응 관계를 나타내는 대응 정보에 기초하여, 호스트로부터 수신된 논리 어드레스에 대응하는 물리 어드레스를 획득하는 단계;
    상기 획득된 물리 어드레스에 의해 지시되는 메모리 장치 상의 부분 메모리 영역에서, 맵핑 함수를 사용하여, 상기 수신된 논리 어드레스에 대응하는 맵핑 유닛을 결정하는 단계; 및
    상기 결정된 맵핑 유닛에 대해 데이터를 읽거나 쓰는 단계를 포함하고,
    상기 수신된 논리 어드레스에 대응하는 상기 맵핑 유닛은, 상기 부분 메모리 영역에 포함되는 방법.
KR1020170151646A 2017-11-14 2017-11-14 스토리지 장치 및 스토리지 장치의 동작 방법 KR20190054730A (ko)

Priority Applications (3)

Application Number Priority Date Filing Date Title
KR1020170151646A KR20190054730A (ko) 2017-11-14 2017-11-14 스토리지 장치 및 스토리지 장치의 동작 방법
US16/012,808 US20190146926A1 (en) 2017-11-14 2018-06-20 Storage device and operating method of storage device
CN201811274577.6A CN109783405A (zh) 2017-11-14 2018-10-30 存储设备和存储设备的操作方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020170151646A KR20190054730A (ko) 2017-11-14 2017-11-14 스토리지 장치 및 스토리지 장치의 동작 방법

Publications (1)

Publication Number Publication Date
KR20190054730A true KR20190054730A (ko) 2019-05-22

Family

ID=66431354

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020170151646A KR20190054730A (ko) 2017-11-14 2017-11-14 스토리지 장치 및 스토리지 장치의 동작 방법

Country Status (3)

Country Link
US (1) US20190146926A1 (ko)
KR (1) KR20190054730A (ko)
CN (1) CN109783405A (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20220100773A (ko) * 2021-01-08 2022-07-18 주식회사 앤다스 블록 데이터 스토리지 시스템, 블록 데이터 스토리지 방법 및 기록 매체에 저장된 프로그램

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2017217686A1 (en) 2016-06-16 2017-12-21 Samsung Electronics Co., Ltd. Wireless power transmitter, wireless power receiver, and control methods thereof
CN113296691B (zh) * 2020-07-27 2024-05-03 阿里巴巴集团控股有限公司 数据处理系统、方法、装置以及电子设备
US11892977B2 (en) 2021-10-14 2024-02-06 Vast Data Ltd. Stored entity metadata re-balancing upon storage expansion
US11789924B2 (en) * 2021-10-14 2023-10-17 Vast Data Ltd. Lock metadata re-balancing upon storage expansion

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6434662B1 (en) * 1999-11-02 2002-08-13 Juniper Networks, Inc. System and method for searching an associative memory utilizing first and second hash functions
JP4047908B2 (ja) * 2004-01-19 2008-02-13 トレック・2000・インターナショナル・リミテッド メモリアドレスマッピングテーブルを使用するポータブルデータ記憶デバイス
WO2011044154A1 (en) * 2009-10-05 2011-04-14 Marvell Semiconductor, Inc. Data caching in non-volatile memory
CN103530062B (zh) * 2012-07-03 2016-12-21 群联电子股份有限公司 数据存储方法、存储器控制器与存储器存储装置
KR20170081118A (ko) * 2015-12-30 2017-07-11 삼성전자주식회사 불휘발성 메모리 장치 및 컨트롤러를 포함하는 스토리지 장치, 스토리지 장치의 동작 방법, 그리고 스토리지 장치를 액세스하는 액세스 방법
KR20190043863A (ko) * 2017-10-19 2019-04-29 에스케이하이닉스 주식회사 메모리 시스템 및 그것의 동작 방법

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20220100773A (ko) * 2021-01-08 2022-07-18 주식회사 앤다스 블록 데이터 스토리지 시스템, 블록 데이터 스토리지 방법 및 기록 매체에 저장된 프로그램

Also Published As

Publication number Publication date
CN109783405A (zh) 2019-05-21
US20190146926A1 (en) 2019-05-16

Similar Documents

Publication Publication Date Title
CN110032332B (zh) 存储设备和包括存储设备的电子设备
KR20190054730A (ko) 스토리지 장치 및 스토리지 장치의 동작 방법
US10761977B2 (en) Memory system and non-transitory computer readable recording medium
KR101516580B1 (ko) 컨트롤러, 이를 포함하는 데이터 저장 장치 및 데이터 저장 시스템, 및 그 방법
JP5384576B2 (ja) 複数の異種のソリッドステート・ストレージ・ロケーションの選択的利用
EP3436953B1 (en) Method and apparatus for processing sequential writes to a block group of physical blocks in a memory device
KR20190087217A (ko) 데이터 저장 장치 및 그것의 동작 방법
US10437738B2 (en) Storage device performing hashing-based translation between logical address and physical address
KR102384759B1 (ko) 호스트 메모리 버퍼를 사용하기 위해 호스트 장치와 속성 정보를 공유하는 스토리지 장치 및 그것을 포함하는 전자 장치
WO2017112357A1 (en) Compressed caching of a logical-to-physical address table for nand-type flash memory
US20150134891A1 (en) Nonvolatile memory system and operating method thereof
US11675709B2 (en) Reading sequential data from memory using a pivot table
KR20140040998A (ko) 로그기반 데이터 저장 시스템의 관리방법
KR20130096881A (ko) 플래시 메모리 장치
US10198203B2 (en) Method of operating memory device using pseudo-random functions, memory device using the same and memory system including the device
US11868246B2 (en) Memory system and non-transitory computer readable recording medium
US10990536B2 (en) Memory controller, operating method of the memory controller, and storage device including the memory controller
US11513950B2 (en) Wear leveling in non-volatile memory
US10635349B2 (en) Storage device previously managing physical address to be allocated for write data
CN113805792A (zh) 存储器系统及其操作方法
US8205031B2 (en) Memory management system and method thereof
KR102623061B1 (ko) 데이터베이스에서 이터레이터 연산을 수행하기 위한 장치
CN109213438B (zh) 预先管理待分配给写入数据的物理地址的存储装置
CN111367825A (zh) 存储设备的虚拟校验数据缓存
JP2013174970A (ja) 管理情報生成方法およびメモリシステム