KR102398181B1 - 쓰기 데이터를 위해 할당될 물리 어드레스를 미리 관리하는 스토리지 장치 - Google Patents

쓰기 데이터를 위해 할당될 물리 어드레스를 미리 관리하는 스토리지 장치 Download PDF

Info

Publication number
KR102398181B1
KR102398181B1 KR1020170084233A KR20170084233A KR102398181B1 KR 102398181 B1 KR102398181 B1 KR 102398181B1 KR 1020170084233 A KR1020170084233 A KR 1020170084233A KR 20170084233 A KR20170084233 A KR 20170084233A KR 102398181 B1 KR102398181 B1 KR 102398181B1
Authority
KR
South Korea
Prior art keywords
memory
write data
controller
data
write
Prior art date
Application number
KR1020170084233A
Other languages
English (en)
Other versions
KR20190004402A (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 삼성전자주식회사
Priority to KR1020170084233A priority Critical patent/KR102398181B1/ko
Priority to US15/860,498 priority patent/US10635349B2/en
Priority to DE102018110704.8A priority patent/DE102018110704A1/de
Priority to CN201810620067.3A priority patent/CN109213438B/zh
Publication of KR20190004402A publication Critical patent/KR20190004402A/ko
Application granted granted Critical
Publication of KR102398181B1 publication Critical patent/KR102398181B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/16Handling requests for interconnection or transfer for access to memory bus
    • G06F13/1668Details of memory controller
    • G06F13/1673Details of memory controller using buffers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0655Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
    • G06F3/0658Controller construction arrangements
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • 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/06Addressing a physical block of locations, e.g. base addressing, module addressing, memory dedication
    • 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
    • G06F12/0607Interleaved addressing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/0604Improving or facilitating administration, e.g. storage management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0629Configuration or reconfiguration of storage systems
    • G06F3/0631Configuration or reconfiguration of storage systems by allocating resources to storage systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0638Organizing or formatting or addressing of data
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0655Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
    • G06F3/0659Command handling arrangements, e.g. command buffers, queues, command scheduling
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0673Single storage device
    • G06F3/0679Non-volatile semiconductor memory device, e.g. flash memory, one time programmable memory [OTP]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1016Performance improvement
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/72Details relating to flash memory management
    • G06F2212/7208Multiple device management, e.g. distributing data over multiple flash devices

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Human Computer Interaction (AREA)
  • Techniques For Improving Reliability Of Storages (AREA)

Abstract

본 발명은 불휘발성 메모리들 및 컨트롤러를 포함하는 스토리지 장치를 제공한다. 컨트롤러는, 제 1 쓰기 데이터가 컨트롤러에 의해 수신되기 전에 미리, 불휘발성 메모리들에 포함되는 메모리 구역들을 지시하는 물리 어드레스들과 스트림 아이디들 사이의 대응 관계를 관리한다. 컨트롤러는, 제 1 쓰기 데이터의 제 1 스트림 아이디에 대응하여 대응 관계에서 관리되는 물리 어드레스의 제 1 메모리 구역에 제 1 쓰기 데이터가 저장되도록, 불휘발성 메모리들을 제어한다. 제 1 쓰기 데이터는, 제 2 스트림 아이디를 갖는 제 2 쓰기 데이터가 컨트롤러에 의해 수신되는지 여부와 무관하게, 대응 관계에 기초하여 불휘발성 메모리들로 전달된다.

Description

쓰기 데이터를 위해 할당될 물리 어드레스를 미리 관리하는 스토리지 장치 {STORAGE DEVICE PREVIOUSLY MANAGING PHYSICAL ADDRESS TO BE ALLOCATED FOR WRITE DATA}
본 개시는 전자 장치에 관한 것으로, 좀 더 구체적으로는 데이터를 저장하고 출력하는 스토리지 장치의 구성들 및 동작들에 관한 것이다.
근래 다양한 유형의 전자 장치들이 이용되고 있다. 전자 장치는 그것에 포함되는 전자 회로들의 동작들에 따라 고유의 기능을 수행한다. 스토리지 장치는 전자 장치들의 한 예시이다. 스토리지 장치는 데이터를 저장하기 위한 메모리 장치를 포함한다. 메모리 장치는 데이터를 저장하거나 저장된 데이터를 출력하고, 이로써 스토리지 장치는 사용자에게 스토리지 서비스를 제공한다.
한편, 스토리지 장치가 많은 사람에 의해 널리 이용되고 데이터의 양이 점점 증가함에 따라, 고성능 및 고 신뢰성의 스토리지 장치에 대한 요구 역시 증가하였다. 나아가, 스토리지 장치에서 적은 양의 자원을 이용하면서도 충분한 서비스가 제공되게 하는, 고효율의 스토리지 장치에 대한 요구 역시 증가하였다.
예로서, 스토리지 장치는 데이터 흐름을 관리하기 위한 다양한 전자 회로를 포함할 수 있다. 스토리지 장치의 전자 회로들은 스토리지 장치의 자원들을 이용하여 데이터를 처리하거나 데이터 처리를 위해 요구되는 정보를 저장할 수 있다. 처리되는 데이터의 양이 증가하는 경우, 스토리지 장치 역시 더 많은 양의 자원들(예컨대, 계산 능력(Computation Power), 버퍼 용량(Buffer Capacity) 등)을 요구할 수 있다. 그러나, 많은 양의 자원들은 스토리지 장치의 효율을 떨어뜨릴 수 있고, 스토리지 장치를 생산하는 것의 비용을 증가시킬 수 있다.
본 개시의 실시 예들은 적은 양의 자원으로 데이터 흐름을 관리할 수 있는 스토리지 장치의 구성들 및 동작들을 제공할 수 있다. 본 개시의 실시 예들에서, 스토리지 장치는, 쓰기 데이터가 호스트로부터 수신되기 전에 미리, 쓰기 데이터를 위해 할당될 물리 어드레스를 관리할 수 있다. 몇몇 실시 예에서, 스토리지 장치는 중앙 집중식 아키텍처(Centralized Architecture)로 구현될 수 있고, 또는 하드웨어 자동화 아키텍처(Hardware-automated Architecture)로 구현될 수 있다.
몇몇 실시 예에서, 스토리지 장치는 불휘발성 메모리들 및 컨트롤러를 포함할 수 있다. 불휘발성 메모리들은 메모리 구역(Memory Region)들을 포함할 수 있고, 컨트롤러는 복수의 채널을 통해 불휘발성 메모리들과 통신할 수 있다. 컨트롤러는, 제 1 쓰기 데이터가 컨트롤러에 의해 수신되기 전에 미리, 메모리 구역들을 지시하는 물리 어드레스들과 스트림 아이디들 사이의 대응 관계를 관리할 수 있다. 컨트롤러는, 제 1 쓰기 데이터의 제 1 스트림 아이디에 대응하여 대응 관계에서 관리되는 물리 어드레스의 제 1 메모리 구역에 제 1 쓰기 데이터가 저장되도록, 불휘발성 메모리들을 제어할 수 있다. 제 1 쓰기 데이터는, 제 2 스트림 아이디를 갖는 제 2 쓰기 데이터가 컨트롤러에 의해 수신되는지 여부와 무관하게, 대응 관계에 기초하여 불휘발성 메모리들로 전달될 수 있다.
몇몇 실시 예에서, 스토리지 장치는 불휘발성 메모리들, 버퍼 메모리, 및 컨트롤러를 포함할 수 있다. 불휘발성 메모리들은 메모리 구역들을 포함할 수 있다. 버퍼 메모리는 불휘발성 메모리들에 저장될 제 1 쓰기 데이터 및 제 2 쓰기 데이터를 버퍼링할 수 있다. 컨트롤러는, 제 1 쓰기 데이터 및 제 2 쓰기 데이터가 불휘발성 메모리들에 저장되도록, 불휘발성 메모리들 및 버퍼 메모리와 통신할 수 있다. 제 1 특성을 갖는 제 1 쓰기 데이터는 불휘발성 메모리들의 제 1 메모리 구역에 저장될 수 있고, 제 2 특성을 갖는 제 2 쓰기 데이터는 불휘발성 메모리들의 제 2 메모리 구역에 저장될 수 있다. 버퍼 메모리에 버퍼링된 제 1 쓰기 데이터는, 제 2 쓰기 데이터가 버퍼 메모리에 버퍼링되는지 여부와 무관하게, 불휘발성 메모리들로 전달될 수 있다.
몇몇 실시 예에서, 스토리지 장치는 불휘발성 메모리 및 컨트롤러를 포함할 수 있다. 불휘발성 메모리는 메모리 구역들을 포함할 수 있다. 컨트롤러는, 제 1 쓰기 데이터가 수신되기 전에 제 1 쓰기 데이터를 저장하도록 미리 결정된 메모리 구역에 제 1 쓰기 데이터가 저장되도록, 불휘발성 메모리를 제어할 수 있다. 제 1 쓰기 데이터는, 제 2 쓰기 데이터가 수신되는지 여부와 무관하게, 불휘발성 메모리로 전달될 수 있다.
몇몇 실시 예에서, 스토리지 장치는 불휘발성 메모리들 및 컨트롤러를 포함할 수 있다. 불휘발성 메모리들은 메모리 구역들을 포함할 수 있다. 컨트롤러는 작업 관리 회로 및 프로세서를 포함할 수 있다. 작업 관리 회로는, 제 1 스트림 아이디를 갖는 제 1 쓰기 데이터가 불휘발성 메모리들의 제 1 메모리 구역에 저장되고 제 2 스트림 아이디를 갖는 제 2 쓰기 데이터가 불휘발성 메모리들의 제 2 메모리 구역에 저장되도록, 쓰기 동작들을 관리할 수 있다. 프로세서는, 불휘발성 메모리들과 관련되는 오류 또는 예외 상태가 해소되도록, 관리 동작을 처리할 수 있다. 작업 관리 회로는 프로세서의 개입 없이 쓰기 동작들을 관리할 수 있다. 컨트롤러에 의해 수신된 제 1 쓰기 데이터는, 제 2 쓰기 데이터가 컨트롤러에 의해 수신되는지 여부와 무관하게, 불휘발성 메모리들로 전달될 수 있다.
본 개시의 실시 예들에 따르면, 쓰기 데이터는 쓰기 데이터가 호스트로부터 수신되기 전에 미리 할당된 물리 어드레스의 메모리 구역(Region)에 저장될 수 있다. 따라서, 스토리지 장치는 적은 용량의 버퍼에서 쓰기 데이터를 관리할 수 있다. 스토리지 장치가 적은 용량의 버퍼를 포함하여 구현될 수 있기 때문에, 스토리지 장치의 관리 효율이 향상될 수 있고, 스토리지 장치를 생산하는 것의 비용이 감소할 수 있다.
도 1은 몇몇 실시 예에 따른 스토리지 장치를 포함하는 전자 시스템의 예시적인 구성을 보여주는 블록도이다.
도 2는 도 1의 스토리지 장치와 관련되는 예시적인 구성을 보여주는 블록도이다.
도 3은 몇몇 실시 예에 따른 도 2의 메모리 장치의 예시적인 구성을 설명하기 위한 블록도이다.
도 4 및 도 5는 몇몇 실시 예에 따른 도 2의 메모리 장치의 예시적인 구성들을 설명하기 위한 개념도들이다.
도 6은 도 2의 스토리지 장치와 관련되는 예시적인 쓰기 동작을 설명하기 위한 블록도이다.
도 7은 몇몇 실시 예에 따라 도 2의 스토리지 장치에서 수행되는 예시적인 쓰기 동작을 설명하기 위한 블록도이다.
도 8은 몇몇 실시 예에 따라 도 2의 스토리지 장치에서 수행되는 예시적인 쓰기 동작을 설명하는 흐름도이다.
도 9는 도 7 및 도 8의 예시적인 쓰기 동작과 관련하여 복수의 채널을 통한 인터리빙(Interleaving)을 설명하는 흐름도이다.
도 10은 도 7 및 도 8의 예시적인 쓰기 동작과 관련하여 시분할 다중 전송(Time Divisional Multiple Transferring)을 설명하기 위한 개념도이다.
도 11은 도 1의 스토리지 장치와 관련되는 예시적인 구성을 보여주는 블록도이다.
도 12 및 도 13은 몇몇 실시 예에 따른 도 11의 스토리지 장치의 예시적인 동작들을 설명하기 위한 블록도들이다.
도 14는 몇몇 실시 예에 따른 도 11의 컨트롤러의 예시적인 구성 및 동작을 보여주는 블록도이다.
도 15는 몇몇 실시 예에 따른 도 14의 패킷의 예시적인 구성을 보여주는 개념도이다.
도 16 내지 도 18은 몇몇 실시 예에 따라 도 11의 스토리지 장치에서 수행되는 예시적인 쓰기 동작을 설명하기 위한 블록도들이다.
도 19는 몇몇 실시 예에 따라 도 11의 스토리지 장치에서 수행되는 예시적인 쓰기 동작을 설명하는 흐름도이다.
도 20은 도 1의 스토리지 장치와 관련되는 예시적인 구성을 보여주는 블록도이다.
아래에서, 본 발명이 속하는 기술 분야에서 통상의 지식을 가진 자(이하, 통상의 기술자)가 본 발명을 용이하게 실시할 수 있도록, 첨부되는 도면들을 참조하여 몇몇 실시 예가 명확하고 상세하게 설명될 것이다.
I. 본 발명과 관련되는 예시적인 전자 시스템
도 1은 몇몇 실시 예에 따른 스토리지 장치(1300)를 포함하는 전자 시스템(1000)의 예시적인 구성을 보여주는 블록도이다.
전자 시스템(1000)은 메인 프로세서(1101), 워킹 메모리(1200), 스토리지 장치(1300), 통신 블록(1400), 유저 인터페이스(1500), 및 버스(1600)를 포함할 수 있다. 예로서, 전자 시스템(1000)은 데스크톱(Desktop) 컴퓨터, 랩톱(Laptop) 컴퓨터, 태블릿(Tablet) 컴퓨터, 스마트폰, 웨어러블(Wearable) 장치, 비디오 게임기(Video Game Console), 워크스테이션(Workstation), 서버(Server), 전기 자동차 등과 같은 전자 장치들 중 하나일 수 있다.
메인 프로세서(1101)는 전자 시스템(1000)의 전반적인 동작들을 제어할 수 있다. 메인 프로세서(1101)는 다양한 종류의 산술 연산들 및/또는 논리 연산들을 처리할 수 있다. 이를 위해, 메인 프로세서(1101)는 전용(Special-purpose) 회로(예컨대, FPGA(Field Programmable Gate Array), ASICs(Application Specific Integrated Circuits) 등)를 포함할 수 있다. 예로서, 메인 프로세서(1101)는 하나 이상의 프로세서 코어를 포함할 수 있고, 범용 프로세서, 전용 프로세서, 또는 어플리케이션 프로세서(Application Processor)로 구현될 수 있다.
워킹 메모리(1200)는 전자 시스템(1000)의 동작에 이용되는 데이터를 저장할 수 있다. 예로서, 워킹 메모리(1200)는 메인 프로세서(1101)에 의해 처리된 또는 처리될 데이터를 일시적으로 저장할 수 있다. 예로서, 워킹 메모리(1200)는 DRAM(Dynamic RAM), SDRAM(Synchronous RAM) 등과 같은 휘발성 메모리, 및/또는 PRAM(Phase-change RAM), MRAM(Magneto-resistive RAM), ReRAM(Resistive RAM), FRAM(Ferro-electric RAM) 등과 같은 불휘발성 메모리를 포함할 수 있다.
스토리지 장치(1300)는 하나 이상의 메모리 장치 및 컨트롤러를 포함할 수 있다. 스토리지 장치(1300)의 메모리 장치는 전원 공급에 관계없이 데이터를 저장할 수 있다. 예로서, 스토리지 장치(1300)는 플래시 메모리, PRAM, MRAM, ReRAM, FRAM 등과 같은 불휘발성 메모리를 포함할 수 있다. 예로서, 스토리지 장치(1300)는 SSD(Solid State Drive), 카드 스토리지, 임베디드(Embedded) 스토리지 등과 같은 스토리지 매체를 포함할 수 있다.
통신 블록(1400)은 전자 시스템(1000)의 외부 장치/시스템과 통신할 수 있다. 예로서, 통신 블록(1400)은 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 등과 같은 다양한 유선 통신 규약 중 적어도 하나를 지원할 수 있다.
유저 인터페이스(1500)는 사용자와 전자 시스템(1000) 사이의 통신을 중재할 수 있다. 예로서, 유저 인터페이스(1500)는 키보드, 마우스, 키패드, 버튼, 터치 패널, 터치 스크린, 터치 패드, 터치 볼, 카메라, 마이크, 자이로스코프 센서, 진동 센서 등과 같은 입력 인터페이스를 포함할 수 있다. 예로서, 유저 인터페이스(1500)는 LCD(Liquid Crystal Display) 장치, LED(Light Emitting Diode) 표시 장치, OLED(Organic LED) 표시 장치, AMOLED(Active Matrix OLED) 표시 장치, 스피커, 모터 등과 같은 출력 인터페이스를 포함할 수 있다.
버스(1600)는 전자 시스템(1000)의 구성 요소들 사이에서 통신 경로를 제공할 수 있다. 전자 시스템(1000)의 구성 요소들은 버스(1600)의 버스 포맷에 기초하여 서로 데이터를 교환할 수 있다. 예로서, 버스 포맷은 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) 등과 같은 다양한 인터페이스 규약 중 하나 이상을 포함할 수 있다.
스토리지 장치(1300)는 본 개시의 실시 예들에 따라 구현될 수 있다. 스토리지 장치(1300)는, 쓰기 데이터를 수신하기 전에 미리, 쓰기 데이터를 위해 할당될 물리 어드레스를 관리할 수 있다. 본 개시의 실시 예들에 따르면, 스토리지 장치(1300)는 적은 용량의 버퍼에서 쓰기 데이터를 관리할 수 있다. 따라서, 스토리지 장치(1300)의 관리 효율이 향상될 수 있고, 스토리지 장치(1300)를 생산하는 것의 비용이 감소할 수 있다. 스토리지 장치(1300)의 예시적인 구성들 및 동작들이 도 2 내지 도 20을 참조하여 설명될 것이다.
다만, 이하의 설명들에서 스토리지 장치(1300)가 제공되지만, 본 발명은 여기에 한정되지 않는다. 본 개시의 실시 예들은 메모리 소자를 포함하는 어떠한 유형의 장치에든 채용될 수 있다. 예로서, 본 발명의 실시 예들은 워킹 메모리(1200)에 포함되는 휘발성 메모리 및/또는 불휘발성 메모리를 위해서도 채용될 수 있다. 이하의 설명들은 더 나은 이해를 가능하게 하기 위해 제공되고, 본 발명을 한정하도록 의도되지 않는다.
II-A. 중앙 집중식 아키텍처(Centralized Architecture)
도 2는 도 1의 스토리지 장치(1300)와 관련되는 예시적인 구성을 보여주는 블록도이다. 도 1의 전자 시스템(1000)은 도 2의 전자 시스템(1000a)을 포함할 수 있다. 도 1의 스토리지 장치(1300)는 도 2의 스토리지 장치(1300a)를 포함할 수 있다.
도 1을 참조하여 설명된 것처럼, 메인 프로세서(1101)는 버스(1600)를 통해 스토리지 장치(1300a)와 통신할 수 있다. 본 개시에서, 스토리지 장치(1300a)로 접근할 수 있는 객체는 "호스트(1100a)"로 불릴 수 있다. 메인 프로세서(1101)는 호스트(1100a)로서 동작할 수 있는 객체들의 한 예시일 수 있으나, 본 발명은 여기에 한정되지 않는다.
호스트(1100a)는 스토리지 장치(1300a)와 데이터(DAT)를 교환할 수 있다. 스토리지 장치(1300a)는 호스트(1100a)로부터 수신되는 커맨드(CMD)에 응답하여, 호스트(1100a)로 스토리지 서비스를 제공할 수 있다.
예로서, 호스트(1100a)는 쓰기 커맨드 및 쓰기 데이터를 스토리지 장치(1300a)로 제공할 수 있다. 스토리지 장치(1300a)는 쓰기 커맨드에 응답하여, 요청된 쓰기 데이터를 저장할 수 있다. 예로서, 호스트(1100a)는 읽기 커맨드를 스토리지 장치(1300a)로 제공할 수 있다. 스토리지 장치(1300a)는 읽기 커맨드에 응답하여, 요청된 읽기 데이터를 호스트(1100a)로 출력할 수 있다.
스토리지 장치(1300a)는 하나 이상의 메모리 장치(1310) 및 컨트롤러(1330a)를 포함할 수 있다. 도 2는 두 개의 메모리 장치(1311, 1319)를 보여주지만, 스토리지 장치(1300a)에 포함되는 메모리 장치들의 개수는 다양하게 변경 또는 수정될 수 있다.
메모리 장치들(1311, 1319) 각각은 호스트(1100a)에 의해 요청되는 데이터를 저장하거나 출력할 수 있다. 이를 위해, 메모리 장치들(1311, 1319) 각각은 데이터를 저장하기 위한 메모리 영역(Memory Area)(들)을 포함할 수 있다. 예로서, 메모리 장치들(1311, 1319) 각각이 낸드 플래시 메모리(NAND-type Flash Memory)를 포함하는 경우, 메모리 장치들(1311, 1319) 각각은 복수의 워드 라인 및 복수의 비트 라인을 따라 형성되는 메모리 셀 어레이를 포함할 수 있고, 메모리 장치들(1311, 1319)로 지시되는(Directed) 동작들은 페이지(Page) 단위 또는 블록(Block) 단위의 메모리 영역에 대해 수행될 수 있다. 그러나, 도 1을 참조하여 설명된 것처럼, 메모리 장치들(1311, 1319) 각각의 유형 및 구성은 다양하게 변경 또는 수정될 수 있다.
메모리 영역은 "어드레스"로 불리는 값에 기초하여 식별되고 지시될(Indicated) 수 있다. 쓰기 데이터는 어드레스에 의해 지시되는 메모리 영역에 저장될 수 있고, 읽기 데이터는 어드레스에 의해 지시되는 메모리 영역으로부터 출력될 수 있다.
호스트(1100a)는 메모리 장치들(1311, 1319)의 특정 메모리 영역과 관련하여 데이터(DAT)를 교환하기 위해, 스토리지 장치(1300a)로 어드레스(ADDR)를 제공할 수 있다. 스토리지 장치(1300a)는 호스트(1100a)로부터 수신되는 요청(예컨대, 커맨드(CMD)) 및 어드레스(ADDR)에 기초하여 메모리 장치들(1311, 1319)을 제어할 수 있다.
한편, 호스트(1100a)에 의해 처리되는 어드레스(ADDR)는 메모리 장치들(1311, 1319) 내에서 메모리 영역을 지시하는 어드레스와 상이할 수 있다. 예로서, 호스트(1100a)에 의해 처리되는 어드레스(ADDR)는 "논리 어드레스"로 불릴 수 있고, 메모리 장치들(1311, 1319)을 위한 어드레스는 "물리 어드레스"로 불릴 수 있다. 스토리지 장치(1300a)는 메모리 장치들(1311, 1319)을 적절히 제어하기 위해, 호스트(1100a)에 의해 처리되는 논리 어드레스와 메모리 장치들(1311, 1319)을 위한 물리 어드레스 사이에서 어드레스 변환(Address Translation)을 수행할 수 있다.
컨트롤러(1330a)는 스토리지 장치(1300a)의 전반적인 동작들을 제어할 수 있다. 예로서, 컨트롤러(1330a)는 메모리 장치들(1311, 1319)의 동작들을 스케줄링하거나, 스토리지 장치(1300a)에서 처리되는 신호들/데이터를 인코딩하고 디코딩할 수 있다. 예로서, 컨트롤러(1330a)는 메모리 장치들(1311, 1319)이 데이터를 저장하거나 출력하도록 메모리 장치들(1311, 1319)을 제어할 수 있다.
컨트롤러(1330a)는 위에서 설명된 및 아래에서 설명될 몇몇 동작을 수행하도록 구성되는 하나 이상의 하드웨어 구성 요소(예컨대, 아날로그 회로, 논리 회로 등)을 포함할 수 있다. 나아가, 컨트롤러(1330a)는 하나 이상의 프로세서 코어를 포함할 수 있다. 위에서 설명된 및 아래에서 설명될 컨트롤러(1330a)의 몇몇 동작은 소프트웨어 및/또는 펌웨어의 프로그램 코드로 구현될 수 있고, 컨트롤러(1330a)의 프로세서 코어(들)는 프로그램 코드의 명령어 집합을 실행할 수 있다. 컨트롤러(1330a)의 프로세서 코어(들)는 명령어 집합을 실행하기 위해 다양한 종류의 산술 연산들 및/또는 논리 연산들을 처리할 수 있다.
버퍼 메모리(1350a)는 스토리지 장치(1300a)의 동작에 이용되는 데이터를 버퍼링할 수 있다. 예로서, 버퍼 메모리(1350a)는 컨트롤러(1330a)에 의해 참조되는 데이터를 일시적으로 저장할 수 있다. 예로서, 버퍼 메모리(1350a)는 SRAM(Static RAM), DRAM, SDRAM 등과 같은 휘발성 메모리, 및/또는 플래시 메모리, PRAM, MRAM, ReRAM, FRAM 등과 같은 불휘발성 메모리를 포함할 수 있다.
도 2의 예시적인 구성에서, 컨트롤러(1330a)의 프로세서 코어는 쓰기 데이터 및 읽기 데이터의 전달은 물론, 스토리지 장치(1300a)에서 수행되는 다양한 동작에 개입(Intervene)할 수 있다. 나아가, 버퍼 메모리(1350a)는 메모리 장치들(1311, 1319)에 저장될 쓰기 데이터 및 메모리 장치들(1311, 1319)로부터 출력된 읽기 데이터는 물론, 컨트롤러(1330a)의 동작에 참조되는 다양한 메타데이터를 저장할 수 있다. 따라서, 도 2의 예시적인 스토리지 장치(1300a)는 "중앙 집중식 아키텍처"로 구현되는 것으로 이해될 수 있다.
II-B. 멀티 스트림 (Multi-stream) 및 메모리 구역(Memory Region)의 관리
도 3은 몇몇 실시 예에 따른 도 2의 메모리 장치(1310)의 예시적인 구성을 설명하기 위한 블록도이다. 도 4 및 도 5는 몇몇 실시 예에 따른 도 2의 메모리 장치(1310)의 예시적인 구성들을 설명하기 위한 개념도들이다. 예로서, 스토리지 장치(1300a)가 네 개의 메모리 장치(1311, 1312, 1313, 1319)를 포함하는 것으로 설명될 것이다. 그러나, 이 예는 더 나은 이해를 가능하게 하기 위해 제공되고, 메모리 장치들의 개수는 다양하게 변경 또는 수정될 수 있다.
몇몇 실시 예에서, 스토리지 장치(1300a)는 멀티 스트림의 스킴(Scheme)에 따라 데이터 흐름을 관리할 수 있다. 예로서, 스트림은 데이터의 특성과 관련될 수 있다. 호스트(1100a)는 하나의 스트림을 통해 동일하거나 유사한 특성을 갖는 여러 데이터를 스토리지 장치(1300a)로 전달할 수 있다. 반면, 호스트(1100a)는 상이한 스트림들을 통해 상이한 특성들을 갖는 여러 데이터를 스토리지 장치(1300a)로 전달할 수 있다.
예로서, 시스템 데이터는 사용자 데이터와 별개로 하나의 스트림을 통해 전달될 수 있다. 예로서, 동일한 시간 구간에서 생성된 여러 데이터는 다른 시간 구간에서 생성된 데이터와 별개로 하나의 스트림을 통해 전달될 수 있다. 예로서, 동일한 사용자에 의해 생성된 여러 데이터는 다른 사용자에 의해 생성된 데이터와 별개로 하나의 스트림을 통해 전달될 수 있다. 이것들은 데이터의 특성들에 관한 몇몇 예시일 뿐이고, 데이터의 특성은 호스트(1100a) 및 스토리지 장치(1300a)의 동작 정책, 사용자의 의도 등 다양한 요인에 기초하여 변경 또는 수정될 수 있다.
스트림은 데이터에 할당되는 스트림 아이디(Stream Identifier)에 기초하여 다루어질 수 있다. 스트림 아이디는 데이터의 특성에 기초하여 상이하게 할당될 수 있다. 예로서, 도 3을 참조하면, 숫자와 함께 음영으로 채워진 사각형은 그 숫자의 스트림 아이디를 갖는 쓰기 데이터를 의미할 수 있다. 예로서, "1"의 스트림 아이디를 갖는 여러 데이터는 동일하거나 유사한 특성을 가질 수 있고, "1"의 스트림 아이디를 갖는 데이터의 특성은 "2"의 스트림 아이디를 갖는 데이터의 특성과 상이할 수 있다.
예로서, 네 개의 스트림 아이디가 다루어지는 것으로 설명될 것이다. 이 예에서, 컨트롤러(1330a)는 네 개의 상이한 데이터 특성을 고려하여 데이터 흐름을 관리할 수 있다. 그러나, 이 예는 더 나은 이해를 가능하게 하기 위해 제공되고, 특성들 및 스트림 아이디들의 개수는 다양하게 변경 또는 수정될 수 있다.
메모리 장치들(1311, 1312, 1313, 1319) 각각은 메모리 영역들을 포함할 수 있다. 예로서, 메모리 장치(1311)는 메모리 영역들(MA11 내지 MA14)을 포함할 수 있다. 유사하게, 메모리 장치들(1312, 1313, 1319)은 각각 메모리 영역들(MA21 내지 MA24), 메모리 영역들(MA31 내지 MA34), 및 메모리 영역들(MA41 내지 MA44)을 포함할 수 있다.
예로서, 메모리 영역들(MA11 내지 MA14, MA21 내지 MA24, MA31 내지 MA34, MA41 내지 MA44) 각각은 블록 크기 영역에 대응할 수 있으나, 본 발명은 이 예로 한정되지 않는다. 메모리 영역들(MA11 내지 MA14, MA21 내지 MA24, MA31 내지 MA34, MA41 내지 MA44)은 서로 중첩하지 않도록 다양하게 변경 또는 수정될 수 있다. 메모리 영역들(MA11 내지 MA14, MA21 내지 MA24, MA31 내지 MA34, MA41 내지 MA44)은 동일한 크기를 갖거나 상이한 크기들을 가질 수 있다.
도 3은 각 메모리 장치가 동일하게 네 개의 메모리 영역을 포함함을 보여주지만, 본 발명은 도 3의 도시에 한정되지 않는다. 각 메모리 장치에 포함되는 메모리 영역들의 크기들 및 개수는 다양하게 변경 또는 수정될 수 있다. 각 메모리 장치에 포함되는 메모리 영역들의 크기들 및 개수는 동일하거나 상이할 수 있다.
메모리 장치들(1311, 1312, 1313, 1319) 각각은 복수의 채널(CH1 내지 CH4) 중 하나와 연결될 수 있다. 따라서, 메모리 영역들(MA11 내지 MA14, MA21 내지 MA24, MA31 내지 MA34, MA41 내지 MA44) 각각은 채널들(CH1 내지 CH4) 중 하나로 연결될 수 있다. 컨트롤러(1330a)는 채널들(CH1 내지 CH4)을 통해 메모리 장치들(1311, 1312, 1313, 1319)과 통신할 수 있다. 채널들(CH1 내지 CH4)은 컨트롤러(1330a)와 메모리 장치들(1311, 1312, 1313, 1319) 사이에서 데이터를 전달하기 위해 도선, 버퍼 회로 등과 같은 물리적인 회로들을 포함할 수 있다.
메모리 장치들(1311, 1312, 1313, 1319)은 메모리 구역들(MR1 내지 MR4)을 포함할 수 있다. 메모리 구역들(MR1 내지 MR4) 각각은 적어도 하나의 메모리 영역을 포함할 수 있다. 메모리 구역들(MR1 내지 MR4)은 서로 중첩하지 않을 수 있다. 따라서, 메모리 구역들(MR1 내지 MR4)에 각각 포함되는 메모리 영역들은 상이할 수 있다. 예로서, 메모리 구역(MR1)에 포함되는 메모리 영역들은 메모리 구역(MR2)에 포함되는 메모리 영역들과 상이할 수 있다.
스토리지 장치(1300a)는 상이한 스트림들을 통해 전달되는 여러 쓰기 데이터를 상이한 메모리 구역들에 별개로 저장할 수 있다. 반면, 스토리지 장치(1300a)는 하나의 스트림을 통해 전달되는 여러 쓰기 데이터를 동일한 메모리 구역에 함께 저장할 수 있다. 예로서, "1"의 스트림 아이디를 갖는 여러 쓰기 데이터는 메모리 구역(MR1)에 함께 저장될 수 있다. 반면, "2"의 스트림 아이디를 갖는 쓰기 데이터는 메모리 구역(MR1)과 별개인 메모리 구역(MR2)에 저장될 수 있고, 메모리 구역(MR1)에는 저장되지 않을 수 있다.
따라서, 하나의 메모리 구역은 동일하거나 유사한 특성을 갖는 여러 쓰기 데이터를 저장할 수 있다. 예로서, 제 1 특성을 갖는 쓰기 데이터(예로서, "1"의 스트림 아이디를 갖는 쓰기 데이터)는 메모리 구역(MR1)에만 저장될 수 있고, 제 2 특성을 갖는 쓰기 데이터(예로서, "2"의 스트림 아이디를 갖는 쓰기 데이터)는 메모리 구역(MR2)에만 저장될 수 있다.
이러한 멀티 스트림 스킴에 따르면, 동일하거나 유사한 특성을 갖는 여러 쓰기 데이터가 동일한 메모리 구역에서 함께 관리될 수 있다. 따라서, 쓰기 데이터를 위해 새로운 메모리 영역을 할당하는 것의 효율이 향상될 수 있고, 이로써 쓰기 동작의 성능이 향상될 수 있다. 나아가, 무효 데이터(Invalid Data)의 페이지를 반환(Restore)하고 프리 페이지(Free Page)를 확보하기 위한 가비지 콜렉션(Garbage Collection)의 횟수가 감소할 수 있고, 이로써 스토리지 장치(1300a)의 수명이 빠르게 단축되는 것이 방지될 수 있다.
메모리 구역들(MR1 내지 MR4)의 구성은 다양하게 변경 또는 수정될 수 있다. 메모리 구역들(MR1 내지 MR4) 각각은 동일한 채널로 연결되는 메모리 영역들로부터 선택되는 적어도 하나의 메모리 영역을 포함할 수 있다. 한편, 메모리 구역들(MR1 내지 MR4)은 동일한 채널로 연결되는 메모리 영역들로부터 선택되는 상이한 메모리 영역들을 각각 포함할 수 있다.
예로서, 메모리 구역(MR1)은 채널(CH1)로 연결되는 메모리 영역(MA11)을 포함할 수 있다. 메모리 영역(MA11)이 메모리 구역(MR1)에 포함되는 경우, 메모리 영역(MA11)은 메모리 구역(MR2)에 포함되지 않을 수 있다. 대신, 메모리 구역(MR2)은 채널(CH1)로 연결되는 메모리 영역(MA12)을 포함할 수 있다. 이러한 방식으로, 메모리 구역들(MR1 내지 MR4)은 서로 중첩하지 않을 수 있다.
메모리 구역들(MR1 내지 MR4) 각각에 포함되는 메모리 영역들은 채널들(CH1 내지 CH4)의 전부 또는 일부와 관련하여 선택될 수 있다. 따라서, 메모리 구역들(MR1 내지 MR4) 각각은 채널들(CH1 내지 CH4)의 전부 또는 일부로 각각 연결되는 메모리 영역들을 포함할 수 있다.
예로서, 도 4를 참조하면, 메모리 구역들(MR1 내지 MR4) 각각은 채널들(CH1 내지 CH4)의 전부와 관련하여 선택되는 메모리 영역들을 포함할 수 있다. 예로서, 메모리 구역(MR1)은 채널들(CH1 내지 CH4)로 각각 연결되는 메모리 영역들(MA11, MA21, MA31, MA41)을 포함할 수 있다.
예로서, 도 5를 참조하면, 메모리 구역들(MR1a, MR3a, MR4a) 각각은 채널들(CH1 내지 CH4)의 일부와 관련하여 선택되는 메모리 영역들을 포함할 수 있다. 예로서, 메모리 구역(MR1)은 채널들(CH1, CH2)로 각각 연결되는 메모리 영역들(MA11, MA21)을 포함할 수 있고, 채널들(CH3, CH4)과 관련하여 선택되는 메모리 영역은 포함하지 않을 수 있다. 한편, 메모리 구역(MR2a)은 채널들(CH1 내지 CH4)의 전부와 관련하여 선택되는 메모리 영역들을 포함할 수 있다.
메모리 구역들(MR1a 내지 MR4a) 각각은 동일한 채널로 연결되는 적어도 하나의 메모리 영역을 포함할 수 있다. 예로서, 메모리 구역(MR1a)은 동일한 채널로 연결되는 하나의 메모리 영역을 포함할 수 있다. 반면, 메모리 구역들(MR2a, MR3a, MR4a) 각각은 동일한 채널로 연결되는 복수의 메모리 영역을 포함할 수 있다. 예로서, 메모리 구역(MR1a)은 채널(CH1)로 연결되는 메모리 영역(MA11)을 포함할 수 있고, 메모리 구역(MR3a)은 채널(CH1)로 연결되는 메모리 영역들(MA13, MA14)을 포함할 수 있다.
도 4 및 도 5는 메모리 구역들(MR1 내지 MR4)의 가능한 구성들 중 일부를 보여주고, 메모리 구역들(MR1 내지 MR4)의 구성은 도 4 및 도 5의 도시와 상이하게 변경 또는 수정될 수 있다. 메모리 구역들(MR1 내지 MR4) 각각에 포함되는 메모리 영역들은 인접할 수 있고, 또는 불연속적일 수 있다.
메모리 구역들(MR1 내지 MR4)의 구성은 정적으로 고정되거나 동적으로 가변(Vary)할 수 있다. 다시 도 3을 참조하면, 컨트롤러(1330a)는 메모리 구역들(MR1 내지 MR4)의 구성을 선택 또는 변경할 수 있고, 메모리 구역들(MR1 내지 MR4)의 선택 또는 변경된 구성을 설정 또는 참조할 수 있다.
예로서, 컨트롤러(1330a)는 특정 스트림 아이디를 갖는 쓰기 데이터의 양을 모니터링할 수 있다. 예로서, 컨트롤러(1330a)는 무효 데이터가 저장된 무효 영역, 가용(Available)한 남는(Free) 또는 스페어(Spare) 영역, 쓰기 데이터가 저장된 사용된(Used) 영역 등과 같은 메모리 영역들의 분포를 모니터링할 수 있다. 컨트롤러(1330a)는 모니터링되는 양 및/또는 분포에 기초하여 메모리 구역들(MR1 내지 MR4)의 크기, 위치 등과 같은 속성을 변경할 수 있다. 예로서, 가비지 콜렉션에 의해 메모리 영역들의 분포가 변경되는 경우, 메모리 구역들(MR1 내지 MR4)의 속성 역시 변경될 수 있다. 다만, 이 예들은 더 나은 이해를 가능하게 하기 위해 제공되고, 본 발명을 한정하도록 의도되지 않는다.
컨트롤러(1330a)는 쓰기 데이터 스트림(WD_S)을 (예컨대, 호스트(1100a)로부터) 수신할 수 있다. 쓰기 데이터 스트림(WD_S)은 하나 이상의 스트림 아이디를 갖는 일련의 쓰기 데이터를 포함하는 데이터 흐름으로서 이해될 수 있다. 쓰기 데이터 스트림(WD_S)에 포함되는 쓰기 데이터는 스트림 아이디에 기초하여 메모리 구역들(MR1 내지 MR4) 중 하나에 저장될 수 있다.
버퍼 메모리(1350a)는 메모리 장치들(1311, 1312, 1313, 1319)에 저장될 쓰기 데이터를 버퍼링할 수 있다. 컨트롤러(1330a)는, 쓰기 데이터가 메모리 장치들(1311, 1312, 1313, 1319)에 저장되도록, 버퍼 메모리(1350a) 및 메모리 장치들(1311, 1312, 1313, 1319)과 통신할 수 있다. 컨트롤러(1330a)는, 쓰기 데이터가 메모리 장치들(1311, 1312, 1313, 1319)에 저장되도록, 메모리 장치들(1311, 1312, 1313, 1319)을 제어할 수 있다. 메모리 장치들(1311, 1312, 1313, 1319)에 쓰기 데이터를 저장하기 위한 예시적인 쓰기 동작이 도 7 및 도 8을 참조하여 설명될 것이다.
몇몇 실시 예에서, 버퍼 메모리(1350a)가 쓰기 데이터를 버퍼링하는 것으로 도시되고 설명된다. 그러나, 이 실시 예들은 더 나은 이해를 가능하게 하기 위해 제공되고, 본 발명을 한정하도록 의도되지는 않는다. 몇몇 실시 예에서, 쓰기 데이터는 컨트롤러(1330a) 내부의 메모리 또는 다른 보조 메모리에서 버퍼링될 수 있다.
II-C. 예시적인 쓰기 동작
도 6은 도 2의 스토리지 장치(1300a)와 관련되는 예시적인 쓰기 동작을 설명하기 위한 블록도이다.
컨트롤러(1330a)에 의해 수신되는 쓰기 데이터 스트림(WD_S)은 일련의 쓰기 데이터를 포함할 수 있다. 쓰기 데이터 스트림(WD_S)에 포함되는 쓰기 데이터는 버퍼 메모리(1350a)에서 버퍼링될 수 있다. 예로서, 쓰기 데이터는 논리 어드레스를 수반할 수 있다.
한편, 컨트롤러(1330a)는 논리 어드레스를 물리 어드레스로 변환할 수 있다. 물리 어드레스는 메모리 장치들(1311, 1312, 1313, 1319) 상에서 특정 메모리 영역 또는 특정 메모리 구역의 위치를 지시할 수 있다. 컨트롤러(1330a)는 쓰기 데이터를 위해, 변환된 물리 어드레스를 할당할 수 있다.
몇몇 경우, 버퍼 메모리(1350a)는 모든 스트림 아이디들의 쓰기 데이터가 버퍼링될 때까지 쓰기 데이터를 버퍼링할 수 있다. 예로서, 네 개의 스트림 아이디가 다루어지는 경우, 도 6에 도시된 것처럼, 버퍼 메모리(1350a)는 네 개의 스트림 아이디 모두의 쓰기 데이터가 버퍼링될 때까지 쓰기 데이터를 버퍼링할 수 있다.
모든 스트림 아이디들의 쓰기 데이터가 충분히 버퍼링된 후에, 컨트롤러(1330a)가 쓰기 데이터를 위해 물리 어드레스들을 할당할 수 있다. 이후, 컨트롤러(1330a)의 제어에 따라, 쓰기 데이터는 할당된 물리 어드레스들에 의해 지시되는 각 메모리 영역들에 저장될 수 있다. 모든 스트림 아이디들의 쓰기 데이터는 할당된 물리 어드레스들에 의해 지시되는 각 메모리 영역들에 병렬로(예컨대, 동시에) 또는 순차적으로 저장될 수 있다.
각 메모리 영역들에 저장된 쓰기 데이터의 스트림 아이디들에 기초하여, 메모리 구역들(MR1 내지 MR4)이 관리될 수 있다. 예로서, "1"의 스트림 아이디를 갖는 쓰기 데이터가 메모리 장치(1311)의 특정 메모리 영역에 저장된 경우, 컨트롤러(1330a)는 그 특정 메모리 영역을 메모리 구역(MR1)으로서 관리할 수 있다. 예로서, 메모리 구역(MR1)은 "1"의 스트림 아이디를 갖는 쓰기 데이터가 수신되어 저장된 후에 결정될 수 있다. 이러한 방식으로, 쓰기 데이터는 스트림 아이디에 대응하는 메모리 구역에 포함되는 메모리 영역에서 관리될 수 있다.
멀티 스트림 스킴은 동일하거나 유사한 특성을 갖는 여러 쓰기 데이터를 효율적으로 관리하기 위해 채용될 수 있다. 그러나, 모든 스트림 아이디들의 쓰기 데이터가 버퍼링되기 전에 몇몇 스트림 아이디의 쓰기 데이터를 위해 물리 어드레스들이 할당되는 경우, 사용된 영역들의 분포가 어수선해질 수 있고, 고려되지 않은 다른 스트림 아이디들의 쓰기 데이터를 효율적으로 관리하는 것이 어려워질 수 있다. 따라서, 모든 스트림 아이디들의 쓰기 데이터가 버퍼링된 후에 쓰기 데이터를 저장할 각 메모리 영역들의 물리 어드레스들을 할당하는 것이 유익할 수 있다.
그러나, 모든 스트림 아이디들의 쓰기 데이터가 버퍼링되는 경우, 버퍼 메모리(1350a)에서 많은 양의 자원이 요구될 수 있다. 예로서, 스트림 아이디들의 개수에 대응하여 버퍼 메모리(1350a)의 용량을 증가시키는 것이 요구되거나, 버퍼 메모리들이 스트림 아이디들의 개수만큼 많이 요구될 수 있다. 이는 스토리지 장치(1300a)의 관리 효율을 떨어뜨릴 수 있고, 스토리지 장치(1300a)를 생산하는 것의 비용을 증가시킬 수 있다.
도 7은 몇몇 실시 예에 따라 도 2의 스토리지 장치(1300a)에서 수행되는 예시적인 쓰기 동작을 설명하기 위한 블록도이다. 도 8은 몇몇 실시 예에 따라 도 2의 스토리지 장치(1300a)에서 수행되는 예시적인 쓰기 동작을 설명하는 흐름도이다. 더 나은 이해를 가능하게 하기 위해, 도 7 및 도 8이 함께 참조될 것이다.
몇몇 실시 예에서, 컨트롤러(1330a)는 물리 어드레스들과 스트림 아이디들 사이의 대응 관계(CR)를 관리할 수 있다(도 8의 S110 동작). 대응 관계(CR)는 컨트롤러(1330a)에 의해 쓰기 데이터(또는, 일련의 쓰기 데이터를 포함하는 쓰기 데이터 스트림(WD_S))가 수신되기 전에 미리 관리될 수 있다. 따라서, 대응 관계(CR)는 쓰기 데이터가 버퍼 메모리(1350a)에 버퍼링되기 전에 미리 관리될 수 있다.
예로서, 대응 관계(CR)의 정보는 도 7에 도시된 것처럼 버퍼 메모리(1350a)에 저장될 수 있다. 그러나, 본 발명은 여기에 한정되지 않고, 대응 관계(CR)의 정보는 도 7에 도시된 것과 달리 컨트롤러(1330a) 내부의 메모리 또는 메모리 장치들(1311, 1312, 1313, 1319)에 저장될 수 있다. 컨트롤러(1330a)는 이어지는 동작들을 처리하기 위해, 대응 관계(CR)의 저장된 정보로 액세스할 수 있다.
대응 관계(CR)에서, 하나의 스트림 아이디는 하나의 메모리 구역을 지시하는 하나 이상의 물리 어드레스에 대응할 수 있다. 예로서, 하나의 스트림 아이디는 하나의 메모리 구역에 포함되는 메모리 영역들을 지시하는 물리 어드레스들에 대응하도록 관리될 수 있다. 예로서, 제 1 특성과 관련되는 "1"의 스트림 아이디는 메모리 구역(MR1)과 관련되는 물리 어드레스에 대응하도록 대응 관계(CR)에서 관리될 수 있고, 제 2 특성과 관련되는 "2"의 스트림 아이디는 메모리 구역(MR2)과 관련되는 물리 어드레스에 대응하도록 대응 관계(CR)에서 관리될 수 있다.
다만, 몇몇 실시 예에서, 하나의 스트림 아이디가 복수의 메모리 구역을 지시하는 물리 어드레스들에 대응하거나, 복수의 스트림 아이디가 하나의 메모리 구역을 지시하는 물리 어드레스들에 대응할 수 있다. 대응 관계(CR)는 동일하거나 유사한 특성을 갖는 여러 데이터를 동일한 하나 이상의 메모리 구역에서 효율적으로 관리하기 위해 다양하게 변경 또는 수정될 수 있다.
컨트롤러(1330a)는 가용 영역, 무효 영역, 및 사용된 영역의 분포 및 위치들을 고려하여, 대응 관계(CR)를 적절하게 선택 또는 설정할 수 있다. 다만, 컨트롤러(1330a)는 쓰기 데이터를 수신하기 전에 미리 대응 관계(CR)를 관리할 수 있다. 몇몇 실시 예에서, 위에서 설명된 것처럼, 컨트롤러(1330a)는 메모리 장치들(1311, 1312, 1313, 1319)의 상태들을 모니터링하여 메모리 구역들(MR1 내지 MR4)의 속성(예컨대, 크기, 위치 등)을 동적으로 변경할 수 있다. 따라서, 대응 관계(CR)는 메모리 장치들(1311, 1312, 1313, 1319)의 동작에 따라 가변할 수 있다.
대응 관계(CR)가 준비된 후, 컨트롤러(1330a)는 특정 스트림 아이디를 갖는 쓰기 데이터를 수신할 수 있다(도 8의 S120 동작). 몇몇 실시 예에서, 컨트롤러(1330a)는 대응 관계(CR)에 기초하여, 수신된 쓰기 데이터를 위해, 그 특정 스트림 아이디에 대응하는 물리 어드레스를 할당할 수 있다. 컨트롤러(1330a)는, 수신된 쓰기 데이터가 할당된 물리 어드레스의 메모리 구역에 저장되도록, 메모리 장치들(1311, 1312, 1313, 1319)을 제어할 수 있다. 따라서, 쓰기 데이터는 스트림 아이디에 대응하는 메모리 구역에서 관리될 수 있다.
예로서, 컨트롤러(1330a)가 "1"의 스트림 아이디를 갖는 쓰기 데이터를 수신하는 경우, 컨트롤러(1330a)는 대응 관계(CR)를 참조하여, "1"의 스트림 아이디에 대응하는 물리 어드레스를 획득할 수 있다. 획득된 물리 어드레스는 메모리 구역(MR1)을 지시할 수 있다. 컨트롤러(1330a)는 수신된 쓰기 데이터를 위해, 획득된 물리 어드레스를 할당할 수 있다. 컨트롤러(1330a)의 제어에 따라, 수신된 쓰기 데이터는 할당된 물리 어드레스의 메모리 영역, 즉 메모리 구역(MR1)에 저장될 수 있다.
몇몇 경우, 컨트롤러(1330a)에 의해 수신되는 쓰기 데이터의 크기는 한 번의 쓰기 동작에 의해 저장되는 프로그램 단위 데이터의 프로그램 단위 크기와 상이할 수 있다. 예로서, 쓰기 동작은 한 번에 32킬로바이트(KB)의 프로그램 단위 데이터를 메모리 장치들(1311, 1312, 1313, 1319)에 저장하기 위해 수행될 수 있는 반면, 호스트(1100a)는 프로그램 단위 크기보다 작은 4KB의 쓰기 데이터를 스토리지 장치(1300a)로 제공할 수 있다.
이 경우, 컨트롤러(1330a)의 제어에 따라, 버퍼 메모리(1350a)는, 특정 스트림 아이디와 관련하여 프로그램 단위 데이터가 누적될 때까지, 그 특정 스트림 아이디와 관련되는 복수의 쓰기 데이터를 버퍼링할 수 있다. 예로서, "1"의 스트림 아이디를 갖는 쓰기 데이터가 수신된 경우, 버퍼 메모리(1350a)는 "1"의 스트림 아이디를 갖는 하나 이상의 다른 쓰기 데이터와 함께, 수신된 쓰기 데이터를 버퍼링할 수 있다. "1"의 스트림 아이디를 갖는 복수의 쓰기 데이터는 "1"의 스트림 아이디와 관련하여 프로그램 단위 데이터가 누적될 때까지 버퍼링될 수 있다.
컨트롤러(1330a)는 특정 스트림 아이디와 관련하여 프로그램 단위 데이터가 누적되었는지 여부를 판별할 수 있다(도 8의 S130 동작). 프로그램 단위 데이터가 누적되지 않은 경우(도 8의 S130 동작의 No), 다음 쓰기 데이터가 수신될 수 있다(도 8의 S120 동작).
프로그램 단위 데이터가 누적된 경우(도 8의 S130 동작의 Yes), 컨트롤러(1330a)는 프로그램 단위 데이터를 위해 물리 어드레스를 할당할 수 있다(도 8의 S140 동작). 컨트롤러(1330a)는 대응 관계(CR)에 기초하여, 프로그램 단위 데이터의 스트림 아이디에 대응하는 물리 어드레스를 할당할 수 있다. 예로서, "1"의 스트림 아이디와 관련하여 프로그램 단위 데이터가 누적된 경우, 컨트롤러(1330a)는 대응 관계(CR)에 기초하여, 프로그램 단위 데이터를 위해, 메모리 구역(MR1)을 지시하는 물리 어드레스를 할당할 수 있다.
이후, 컨트롤러(1330a)는 대응 관계(CR)에 기초하여 할당된 물리 어드레스에 의해 지시되는 메모리 구역으로 프로그램 단위 데이터를 전달할 수 있다(도 8의 S150 동작). 프로그램 단위 데이터는 할당된 물리 어드레스에 의해 지시되는 메모리 영역을 포함하는 메모리 구역으로 전달될 수 있다. 예로서, "1"의 스트림 아이디와 관련하여 누적된 프로그램 단위 데이터는 메모리 구역(MR1)의 할당된 물리 어드레스에 의해 지시되는 메모리 영역으로 전달될 수 있다.
따라서, 프로그램 단위 데이터는 스트림 아이디에 대응하는 메모리 구역에 저장될 수 있다. 여기서, 하나의 프로그램 단위 데이터는 특정 스트림 아이디를 갖는 쓰기 데이터 및 동일한 스트림 아이디를 갖는 하나 이상의 다른 쓰기 데이터를 포함할 수 있다.
컨트롤러(1330a)의 제어에 따라, 동일한 스트림 아이디를 갖는 복수의 쓰기 데이터는 동일한 메모리 구역에 함께 저장될 수 있다. 컨트롤러(1330a)는, 복수의 쓰기 데이터를 포함하는 프로그램 단위 데이터가 의도된 메모리 구역에 저장되도록, 메모리 장치들(1311, 1312, 1313, 1319) 및 버퍼 메모리(1350a)와 통신할 수 있다.
대응 관계(CR)가 이용되는 경우, 특정 스트림 아이디를 갖는 쓰기 데이터가 저장될 메모리 구역은 그 쓰기 데이터가 수신되기 전에 미리 결정될 수 있다. 예로서, "1"의 스트림 아이디를 갖는 쓰기 데이터 및 "2"의 스트림 아이디를 갖는 쓰기 데이터가 컨트롤러(1330a)에 의해 수신되어 버퍼 메모리(1350a)에 버퍼링되기 전에 미리, 메모리 구역(MR1)은 "1"의 스트림 아이디를 갖는 쓰기 데이터를 저장하고 메모리 구역(MR2)은 "2"의 스트림 아이디를 갖는 쓰기 데이터를 저장하도록 결정될 수 있다.
메모리 구역들(MR1 내지 MR4) 및 대응 관계(CR)는 동일하거나 유사한 특성을 갖는 여러 쓰기 데이터를 함께 관리하기에 적합하도록 다양하게 변경 또는 수정될 수 있다. 위에서 설명된 것처럼, 메모리 구역들(MR1 내지 MR4) 및 대응 관계(CR)는 정적으로 고정되거나 동적으로 가변할 수 있다.
도 6의 예와 달리, 도 7의 예시적인 쓰기 동작은 모든 스트림 아이디들의 쓰기 데이터가 버퍼링될 것을 요구하지 않을 수 있다. 따라서, 특정 스트림 아이디를 갖는 쓰기 데이터(또는, 그 쓰기 데이터를 포함하는 프로그램 단위 데이터)가 일단 수신(또는, 버퍼링)되면, 그 쓰기 데이터(또는, 프로그램 단위 데이터)는 대응 관계(CR)에 기초하여, 스트림 아이디에 대응하는 메모리 구역으로 전달될 수 있다. 나아가, 쓰기 데이터(또는, 프로그램 단위 데이터)는 스트림 아이디의 순서 또는 구성과 관계없이, 수신(또는, 버퍼링)되는 대로 메모리 구역들(MR1 내지 MR4)로 전달될 수 있다.
특정 스트림 아이디를 갖는 쓰기 데이터는 다른 스트림 아이디를 갖는 쓰기 데이터를 고려하지 않고 메모리 장치들(1311, 1312, 1313, 1319)로 전달될 수 있다. 예로서, "1"의 스트림 아이디를 갖는 쓰기 데이터는, "2"의 스트림 아이디를 갖는 쓰기 데이터가 컨트롤러(1330a)에 의해 수신되는지 또는 버퍼 메모리(1350a)에 버퍼링되는지 여부와 무관하게, 대응 관계(CR)에 기초하여 메모리 구역(MR1)으로 전달될 수 있다.
예로서, 컨트롤러(1330a)는, "2"의 스트림 아이디를 갖는 쓰기 데이터가 대응 관계(CR)에 기초하여 메모리 구역(MR2)에 저장되도록, 버퍼 메모리(1350a) 및 메모리 장치들(1311, 1312, 1313, 1319)을 제어할 수 있다. 유사하게, "2"의 스트림 아이디를 갖는 쓰기 데이터는 "1", "3" 또는 "4"의 스트림 아이디를 갖는 쓰기 데이터를 고려하지 않고 메모리 장치들(1311, 1312, 1313, 1319)의 메모리 구역(MR2)으로 전달될 수 있다.
도 7의 예시적인 쓰기 동작에 따르면, 모든 스트림 아이디들의 쓰기 데이터가 동시에 버퍼링되지 않을 수 있고, 이로써 스토리지 장치(1300)는 적은 용량의 버퍼에서 쓰기 데이터를 관리할 수 있다. 예로서, 버퍼 메모리(1350a)가 적은 용량을 갖도록 구현되거나, 적은 개수의 버퍼 메모리들이 제공될 수 있다. 또는, 컨트롤러(1330a) 내부의 적은 용량의 메모리만으로도 쓰기 데이터가 관리될 수 있다. 따라서, 스토리지 장치(1300)의 관리 효율이 향상될 수 있고, 스토리지 장치(1300)를 생산하는 것의 비용이 감소할 수 있다.
II-D. 부연 설명
도 9는 도 7 및 도 8의 예시적인 쓰기 동작과 관련하여 복수의 채널(CH1 내지 CH4)을 통한 인터리빙(Interleaving)을 설명하는 흐름도이다. 예로서, 도 9의 인터리빙은 쓰기 데이터가 준비된 후(도 8의 S120 동작) 또는 프로그램 단위 데이터가 준비된 후(도 8의 S130 동작)에 수행될 수 있다.
쓰기 데이터 또는 프로그램 단위 데이터를 위해 물리 어드레스가 할당될 수 있다(S140 동작). 이를 위해, 몇몇 실시 예에서, 컨트롤러(1330a)는 채널들(CH1 내지 CH4) 중에서 유휴(Idle) 채널을 선택할 수 있다(S141 동작). 특정 채널이 유휴하지 않은 경우, 컨트롤러(1330a)는 다른 유휴 채널을 선택할 수 있다. 컨트롤러(1330a)는 쓰기 데이터 또는 프로그램 단위 데이터를 위해, 선택된 채널로 연결되는 메모리 영역의 물리 어드레스를 할당할 수 있다(S143 동작).
이후, 컨트롤러(1330a)는 할당된 물리 어드레스의 메모리 영역으로 쓰기 데이터 또는 프로그램 단위 데이터를 전달할 수 있다(S150 동작). 여기서, 쓰기 데이터 또는 프로그램 단위 데이터는 선택된 유휴 채널을 통해 전달될 수 있다(S151 동작). 따라서, 쓰기 데이터 또는 프로그램 단위 데이터는 메모리 장치들(1311, 1312, 1313, 1319)에 저장될 수 있다.
예로서, 도 7을 함께 참조하면, "1"의 스트림 아이디를 갖는 쓰기 데이터는 메모리 구역(MR1)에 포함되는 메모리 영역들 중 채널(CH1)로 연결되는 메모리 영역에 저장될 수 있다. 채널(CH1)이 점유되는 경우, 채널(CH1)은 유휴하지 않을 수 있다. 예로서, 채널(CH1)이 유휴하지 않은 동안, 채널(CH2)은 유휴할 수 있다. 이 경우, 컨트롤러(1330a)는 "2"의 스트림 아이디를 갖는 쓰기 데이터를 전달하기 위해 채널(CH2)을 선택할 수 있다.
컨트롤러(1330a)는 "2"의 스트림 아이디를 갖는 쓰기 데이터를 위해, 메모리 구역(MR2)에 포함되는 메모리 영역들 중 채널(CH2)로 연결되는 메모리 영역의 물리 어드레스를 할당할 수 있다. 따라서, "2"의 스트림 아이디를 갖는 쓰기 데이터는 유휴 채널(CH2)을 통해 전달될 수 있고, 할당된 물리 어드레스의 메모리 영역에 저장될 수 있다.
이러한 방식으로, 컨트롤러(1330a)로부터 메모리 장치들(1311, 1312, 1313, 1319)로 복수의 쓰기 데이터를 전달하는 것은 채널들(CH1 내지 CH4)을 통해 인터리빙할 수 있다. 유휴 채널을 통해 쓰기 데이터가 전달됨에 따라, 쓰기 동작의 성능이 향상될 수 있다.
도 10은 도 7 및 도 8의 예시적인 쓰기 동작과 관련하여 시분할 다중 전송(Time Divisional Multiple Transferring)을 설명하기 위한 개념도이다.
예로서, 컨트롤러(1330a)에 의해 쓰기 데이터(예컨대, 쓰기 데이터 스트림(WD_S))를 수신하는 것은 주파수(f1)를 갖는 클록에 동기화될 수 있다. 컨트롤러(1330a)와 메모리 장치들(1311, 1312, 1313, 1319) 사이의 통신은 주파수(f2)를 갖는 클록에 동기화될 수 있다.
한편, 컨트롤러(1330a)와 메모리 장치들(1311, 1312, 1313, 1319) 사이의 통신은 채널들(CH1 내지 CH4)을 통한 인터리빙으로 수행될 수 있다. 따라서, 인터리빙의 성능을 향상시키기 위해, 주파수(f1)는 주파수(f2)보다 높게 선택될 수 있다.
예로서, 주파수(f1)는 주파수(f2)와 채널들(CH1 내지 CH4)의 개수의 곱에 대응할 수 있다. 예로서, 주파수(f2)가 0.8기가헤르츠(GHz)인 경우, 주파수(f1)는 약 3.2GHz(=0.8×4)로 선택될 수 있다. 이 경우, 쓰기 데이터 스트림(WD_S)에 포함되는 일련의 쓰기 데이터가 채널들(CH1 내지 CH4)로 병렬로 분배될 수 있고(일련의 쓰기 데이터가 각 분할된 시간 영역에서 전달될 수 있음), 이로써 인터리빙의 성능이 향상될 수 있다.
주파수들(f1, f2)을 갖는 클록들은 별개의 클록 생성 회로로부터 제공될 수 있다. 몇몇 실시 예에서, 클록 생성 회로는 컨트롤러(1330a) 및 메모리 장치들(1311, 1312, 1313, 1319)의 동작들에 기초하여, 주파수들(f1, f2)을 변경시킬 수 있다. 예로서, 채널들(CH1 내지 CH4) 중 몇몇이 유휴인 경우, 클록 생성 회로는 주파수(f1)를 적절히 감소시킬 수 있다. 또는, 채널들(CH1 내지 CH4)을 통해 전달되는 데이터의 양이 증가하는 경우, 클록 생성 회로는 주파수(f1)를 증가시킬 수 있다.
한편, 몇몇 실시 예에서, 주파수(f1)는 주파수(f2)와 동일하게 선택될 수 있다. 이러한 실시 예들에서, 쓰기 데이터 스트림(WD_S)의 데이터 폭(Data Width)(예컨대, 비트들의 개수)은 채널들(CH1 내지 CH4) 각각을 통해 전달되는 데이터의 데이터 폭보다 클 수 있다. 예로서, 쓰기 데이터 스트림(WD_S)의 데이터 폭은 채널들(CH1 내지 CH4) 각각을 통해 전달되는 데이터의 데이터 폭과 채널들(CH1 내지 CH4)의 개수의 곱에 대응할 수 있다.
예로서, 채널들(CH1 내지 CH4) 각각을 통해 전달되는 데이터가 8개의 비트들을 포함하는 경우, 쓰기 데이터 스트림(WD_S)의 데이터 폭은 32비트(=8×4)일 수 있다. 이러한 실시 예들에서, 채널들(CH1 내지 CH4) 각각을 위한 클록은 대응하는 채널을 통해 데이터가 전달될 때에 채널들의 개수에 반비례하는 시간 구간 동안 활성화(Enable)될 수 있다.
도 3 내지 도 10을 참조하여, 상이한 데이터 특성들과 관련되는 스트림 아이디들에 기반하는 멀티 스트림 스킴이 설명되었다. 그러나, 본 발명은 위 설명들로 한정되지 않고, 유사한 기술 사상이 단일 스트림을 위해 채용될 수 있다.
예로서, 컨트롤러(1330a)는 제 1 쓰기 데이터와 제 1 쓰기 데이터를 저장하도록 미리 결정된 메모리 구역을 지시하는 물리 어드레스 사이의 대응 관계를 관리할 수 있다. 대응 관계는 제 1 쓰기 데이터가 수신되기 전에 미리 관리될 수 있다.
제 1 쓰기 데이터는, 제 2 쓰기 데이터가 수신되는지 여부와 무관하게, 대응 관계에 기초하여, 미리 결정된 메모리 구역으로 전달될 수 있다. 컨트롤러(1330a)는, 제 1 쓰기 데이터가 미리 결정된 메모리 구역에 저장되도록, 메모리 장치를 제어할 수 있다. 제 1 쓰기 데이터가 저장될 메모리 구역은 호스트(1100a) 및 스토리지 장치(1300a)의 동작 정책, 사용자의 의도 등 다양한 요인에 기초하여 미리 결정될 수 있다.
III-A. 하드웨어 자동화 아키텍처(Hardware-automated Architecture)
도 11은 도 1의 스토리지 장치(1300)와 관련되는 예시적인 구성을 보여주는 블록도이다. 도 1의 전자 시스템(1000)은 도 11의 전자 시스템(1000b)을 포함할 수 있다. 도 1의 스토리지 장치(1300)는 도 11의 스토리지 장치(1300b)를 포함할 수 있다.
도 2를 도 11과 비교하면, 몇몇 실시 예에서, 스토리지 장치(1300b)는 컨트롤러(1330b) 및 버퍼 메모리(1350b)를 포함할 수 있다. 컨트롤러(1330b)는 복수의 채널(CHs)을 통해 하나 이상의 메모리 장치(1310)와 통신할 수 있다. 컨트롤러(1330b)는 호스트 인터페이스 계층(1331a), 메모리 인터페이스 계층(1332), 쓰기 관리 회로(1333), 읽기 관리 회로(1335), 데이터 영역(Domain) 관리 회로(1337), 및 프로세서(1339)를 포함할 수 있고, 이 구성 요소들은 도 12 내지 도 19를 참조하여 설명될 것이다.
스토리지 장치(1300b)는 "하드웨어 자동화 아키텍처"로 구현될 수 있다. 스토리지 장치(1300b)는 프로세서(1339)의 제어에 전적으로 의존하는 대신, 전용(Dedicated) 하드웨어 회로에 의해 단순 작업(Simple Job)들을 관리할 수 있다. 상대적으로 빈번하게 수행되는 단순 작업들이 프로세서(1339)의 개입 없이 전용 하드웨어 회로에 의해 관리될 수 있기 때문에, 스토리지 장치(1300b)의 성능 및 효율이 향상될 수 있다.
버퍼 메모리(1350b)는 스토리지 장치(1300b)의 동작에 이용되는 데이터를 버퍼링할 수 있다. 예로서, 버퍼 메모리(1350b)는 컨트롤러(1330b)에 의해 참조되는 데이터를 일시적으로 저장할 수 있다. 그러나, 뒤에서 설명될 것처럼, 버퍼 메모리(1350b)는 메모리 장치들(1311, 1319)에 저장될 쓰기 데이터 또는 메모리 장치들(1311, 1319)로부터 출력된 읽기 데이터를 저장하지 않을 수 있다. 대신, 버퍼 메모리(1350b)는 컨트롤러(1330b)에 의해 참조될 메타데이터를 저장하기 위한 보조(Auxiliary) 메모리로서 제공될 수 있다. 예로서, 버퍼 메모리(1350b)는 SRAM, DRAM, SDRAM 등과 같은 휘발성 메모리, 및/또는 플래시 메모리, PRAM, MRAM, ReRAM, FRAM 등과 같은 불휘발성 메모리를 포함할 수 있다.
도 11과 관련하여 설명되지 않은 구성들은 도 2 내지 도 10을 참조하여 설명된 것들과 실질적으로 동일하게 구성되고 동작할 수 있다. 간결성을 위해, 중복되는 설명들은 생략될 것이다.
도 12 및 도 13은 몇몇 실시 예에 따른 도 11의 스토리지 장치(1300b)의 예시적인 동작들을 설명하기 위한 블록도들이다. 도 12 및 도 13을 참조하면, 컨트롤러(1330b)는 제 1 유형 작업 관리 회로(HW) 및 프로세서(1339)를 포함할 수 있다.
예로서, 제 1 유형 작업 관리 회로(HW)는 도 11의 쓰기 관리 회로(1333), 읽기 관리 회로(1335), 및 데이터 영역 관리 회로(1337)를 포함할 수 있다. 제 1 유형 작업 관리 회로(HW)는 메모리 장치들(1311, 1319)과 관련되는 제 1 유형의 작업을 관리할 수 있다. 프로세서(1339)는 메모리 장치들(1311, 1319)과 관련되는 제 2 유형의 작업을 처리할 수 있다. 예로서, 제 1 유형의 작업은 제 2 유형의 작업보다 빈번하게 수행되는 단순 작업을 포함할 수 있다.
예로서, 제 1 유형의 작업은 메모리 장치들(1311, 1319)의 제 1 단위 크기의 메모리 영역에 대해 수행되는 동작을 포함할 수 있다. 예로서, 제 1 단위 크기는 페이지 단위 크기를 포함할 수 있다. 예로서, 제 1 유형의 작업은 메모리 장치들(1311, 1319)에 쓰기 데이터를 저장하기 위한 쓰기 동작, 메모리 장치들(1311, 1319)로부터 읽기 데이터를 출력하기 위한 읽기 동작 등과 같은 일반 동작을 포함할 수 있다.
예로서, 제 2 유형의 작업은 메모리 장치들(1311, 1319)의 제 2 단위 크기의 메모리 영역에 대해 수행되는 동작을 포함할 수 있다. 제 2 단위 크기는 제 1 단위 크기와 상이할 수 있고, 예로서, 블록/서브블록(Sub-block)/슈퍼블록(Super-block) 단위 크기를 포함할 수 있다. 예로서, 제 2 유형의 작업은 가비지 콜렉션, 웨어 레벨링(Wear Leveling), 전력 장애 보호(Power Failure Protection) 등과 같은 관리 동작을 포함할 수 있다.
아래의 설명들에서, 위 예들에 기반하는 실시 예들이 설명될 것이다. 다만, 이러한 실시 예들은 더 나은 이해를 가능하게 하기 위해 제공되고, 본 발명을 한정하도록 의도되지는 않는다. 제 1 유형의 작업은 빈번하게 수행되는 단순 작업을 프로세서(1339)의 개입 없이 관리하기 위해 다양하게 변경 또는 수정될 수 있다. 나아가, 제 2 유형의 작업은 복합 작업(Complex Job)을 프로세서(1339)의 제어 하에서 처리하기 위해 다양하게 변경 또는 수정될 수 있다. 제 1 단위 크기 및 제 2 단위 크기 역시 다양하게 변경 또는 수정될 수 있고, 서로 동일할 수 있다.
도 12는 제 1 유형의 작업과 관련되는 동작을 보여준다. 예로서, 제 1 유형의 작업은 호스트(1100a)에 의해 요청되는 동작을 포함할 수 있다. 제 1 유형의 작업은 프로세서(1339)의 개입 없이 제 1 유형 작업 관리 회로(HW)에 포함되는 하드웨어 회로의 동작에 따라 관리될 수 있다.
예로서, 제 1 유형의 작업이 관리되는 동안, 프로세서(1339)의 개입은 데이터를 위해 버퍼 영역을 할당하는 것, 데이터를 버퍼링하는 것, 데이터 입력/출력을 트리거(Trigger)하는 것, 데이터 입력/출력의 경로를 제어하는 것 등을 포함하여 모든 동작들로부터 배제될 수 있다. 제 1 유형의 작업이 제 1 유형 작업 관리 회로(HW)에 의해 정상적으로 관리되는 동안, 프로세서(1339)는 제 1 유형의 작업에 개입하지 않을 수 있고 버퍼 메모리(1350b)와 통신하지 않을 수 있다.
제 1 유형의 작업이 쓰기 동작을 포함하는 경우, 제 1 유형 작업 관리 회로(HW)는 호스트(1100a)로부터 수신되는 쓰기 데이터를 하나 이상의 메모리 장치(1310)로 전달할 수 있다. 제 1 유형의 작업이 읽기 동작을 포함하는 경우, 제 1 유형 작업 관리 회로(HW)는 하나 이상의 메모리 장치(1310)로부터 출력되는 읽기 데이터를 호스트(1100a)로 전달할 수 있다. 쓰기 데이터 및 읽기 데이터는 패킷 단위의 스트림(PC_S)으로 전달될 수 있다.
그동안, 버퍼 메모리(1350b)는 하나 이상의 메모리 장치(1310)에 저장될 쓰기 데이터 또는 하나 이상의 메모리 장치(1310)로부터 출력된 읽기 데이터를 저장하지 않을 수 있다. 대신, 쓰기 데이터 및 읽기 데이터는 제 1 유형 작업 관리 회로(HW) 내부의 버퍼에서 관리될 수 있다.
도 13은 제 2 유형의 작업과 관련되는 동작을 보여준다. 예로서, 제 2 유형의 작업은 호스트(1100a)의 요청과 관계없이 수행되는 동작을 포함할 수 있다. 제 2 유형의 작업은 프로세서(1339)의 제어에 따라(예컨대, 프로세서(1339) 상에서 실행되는 소프트웨어 및/또는 펌웨어의 프로그램 코드에 기초하여) 처리될 수 있다.
예로서, 제 1 유형 작업 관리 회로(HW)는 하나 이상의 메모리 장치(1310) 및 컨트롤러(1330a)의 동작들에 관한 상태(Status)를 모니터링할 수 있다. 제 1 유형 작업 관리 회로(HW)는 모니터링되는 상태에 기초하여, 프로세서(1339)의 개입을 트리거하기 위한 개입 조건을 관리할 수 있다. 예로서, 모니터링되는 상태는 제 1 유형의 작업(예컨대, 쓰기 동작, 읽기 동작 등)과 관련하여 오류 또는 예외(Exception)가 발생하는지 여부와 관련될 수 있다. 예로서, 개입 조건은 제 1 유형의 작업과 관련되는 오류 또는 예외가 발생하는 경우에 충족될 수 있다.
프로세서(1339)가 제 1 유형의 작업에 개입하지 않는 동안 개입 조건이 충족되는 경우, 제 1 유형 작업 관리 회로(HW)는 모니터링된 상태의 정보를 포함하는 알림(Notification)을 프로세서(1339)로 제공할 수 있다. 따라서, 제 1 유형 작업 관리 회로(HW)는 개입 조건이 충족되었음을 프로세서(1339)로 알릴 수 있다.
프로세서(1339)는, 제 1 유형 작업 관리 회로(HW)로부터 수신되는 알림에 응답하여, 제 2 유형의 작업을 처리하기 위한 관리 커맨드를 출력할 수 있다. 제 1 유형 작업 관리 회로(HW)는 프로세서(1339)로부터 관리 커맨드를 수신할 수 있다. 제 1 유형 작업 관리 회로(HW)는 관리 커맨드에 의해 지시되는(Directed) 제 2 유형의 작업을 수행할 수 있다. 제 2 유형의 작업은 모니터링된 상태(예컨대, 제 1 유형의 작업과 관련되는 오류 또는 예외)를 해소(Resolve)하기 위한 관리 동작을 포함할 수 있다.
예로서, 제 2 유형의 작업은 하나 이상의 메모리 장치(1310)로 지시되는 관리 동작을 포함할 수 있다. 제 1 유형 작업 관리 회로(HW)는 프로세서(1339)의 제어에 따라 제 2 유형의 작업을 수행하기 위해 하나 이상의 메모리 장치(1310)와 통신할 수 있다.
III-B. 컨트롤러 및 패킷의 예시적인 구성
도 14는 몇몇 실시 예에 따른 도 11의 컨트롤러(1330b)의 예시적인 구성 및 동작을 보여주는 블록도이다.
컨트롤러(1330b)는 호스트 인터페이스 계층(1331a), 메모리 인터페이스 계층(1332), 쓰기 관리 회로(1333), 읽기 관리 회로(1335), 데이터 영역 관리 회로(1337), 및 프로세서(1339)를 포함할 수 있다. 예로서, 쓰기 관리 회로(1333), 읽기 관리 회로(1335), 및 데이터 영역 관리 회로(1337)는 도 12 및 도 13의 제 1 유형 작업 관리 회로(HW)에 포함될 수 있다.
호스트 인터페이스 계층(1331a)은 호스트(1100a)와 인터페이싱할 수 있다. 예로서, 호스트 인터페이스 계층(1331a)은 호스트(1100a)로부터 수신되는 커맨드 및 데이터를 컨트롤러(1330b)에서 처리되는 포맷으로 변환할 수 있다. 예로서, 호스트 인터페이스 계층(1331a)은 컨트롤러(1330b)에서 처리된 데이터를 호스트(1100a)에서 다루어지는 포맷으로 변환할 수 있고, 변환된 포맷의 데이터를 호스트(1100a)로 출력할 수 있다.
메모리 인터페이스 계층(1332)은 하나 이상의 메모리 장치(1310)와 인터페이싱할 수 있다. 예로서, 메모리 인터페이스 계층(1332)은 쓰기 데이터 및 관련 커맨드를 하나 이상의 메모리 장치(1310)에서 다루어지는 포맷으로 변환할 수 있다. 예로서, 메모리 인터페이스 계층(1332)은 하나 이상의 메모리 장치(1310)로부터 수신되는 읽기 데이터를 컨트롤러(1330b)에서 처리되는 포맷으로 변환할 수 있다.
쓰기 관리 회로(1333)는 제 1 유형의 작업을 관리할 수 있다. 예로서, 쓰기 관리 회로(1333)는 쓰기 데이터를 하나 이상의 메모리 장치(1310)에 저장하기 위한 쓰기 동작을 관리할 수 있다. 이 예에서, 쓰기 관리 회로(1333)는 호스트(1100a)로부터 수신되는 쓰기 데이터를 하나 이상의 메모리 장치(1310)로 전달하기 위한 쓰기 경로 상에 놓일 수 있다.
읽기 관리 회로(1335)는 제 1 유형의 작업을 관리할 수 있다. 예로서, 읽기 관리 회로(1335)는 읽기 데이터를 컨트롤러(1330b)의 외부로(예컨대, 호스트(1100a)로) 출력하기 위한 읽기 동작을 관리할 수 있다. 이 예에서, 읽기 관리 회로(1335)는 하나 이상의 메모리 장치(1310)로부터 출력되는 읽기 데이터를 컨트롤러(1330b)의 외부로 전달하기 위한 읽기 경로 상에 놓일 수 있다.
데이터 영역 관리 회로(1337)는 제 1 유형의 작업을 수행하는 것과 관련하여, 하나 이상의 메모리 장치(1310), 쓰기 데이터, 및 읽기 데이터 중 적어도 하나의 상태의 정보를 획득할 수 있다. 쓰기 관리 회로(1333) 및 읽기 관리 회로(1335)는 제 1 유형의 작업을 수행함에 따라 다양한 상태의 정보를 데이터 영역 관리 회로(1337)로 제공할 수 있다. 데이터 영역 관리 회로(1337)는, 획득되는 정보에 기초하여, 하나 이상의 메모리 장치(1310) 및 컨트롤러(1330b)의 동작들에 관한 상태를 모니터링할 수 있다.
프로세서(1339)는 하나 이상의 프로세서 코어를 포함할 수 있다. 프로세서(1339)는 프로세서 코어의 동작에 따라 소프트웨어(SW) 및/또는 펌웨어(FW)의 프로그램 코드를 실행할 수 있다. 프로세서(1339)는 소프트웨어 및/또는 펌웨어의 프로그램 코드를 실행하여, 제 2 유형의 작업을 처리할 수 있다.
커맨드 및 데이터는 패킷 단위의 스트림으로 전달될 수 있다. 이를 위해, 몇몇 실시 예에서, 호스트 인터페이스 계층(1331a)은 패킷화기(Packetizer, PCZ)를 포함할 수 있다. 패킷화기(PCZ)는 호스트(1100a)로부터 수신되는 커맨드 및 데이터를 부가 정보(예컨대, 패킷의 목적지(Destination), 어드레스, 스트림 아이디, 오류 검사(Check) 비트 등)와 결합하여, 패킷(PCW1) 또는 패킷(PCR1)을 생성할 수 있다.
쓰기 커맨드 및 쓰기 데이터가 호스트(1100a)로부터 수신되는 경우, 패킷화기(PCZ)는 헤더(Header) 부분, 데이터 부분, 및 테일(Tail) 부분을 포함하는 패킷(PCW1)을 생성할 수 있다. 예로서, 헤더 부분은 쓰기 커맨드의 정보를 포함할 수 있고, 데이터 부분은 쓰기 데이터를 포함할 수 있다. 테일 부분은 데이터 부분의 완료를 지시하기에(Indicate) 적절한 정보를 포함할 수 있다.
한편, 읽기 커맨드가 호스트(1100a)로부터 수신되는 경우, 패킷화기(PCZ)는 헤더 부분을 포함하는 패킷(PCR1)을 생성할 수 있다. 헤더 부분은 읽기 커맨드의 정보를 포함할 수 있다. 읽기 동작과 관련하여 데이터가 수신되지 않을 수 있기 때문에, 몇몇 경우 패킷(PCR1)은 데이터 부분 및 테일 부분을 포함하지 않을 수 있다.
패킷화기(PCZ)는 호스트(1100a)로부터 수신되는 커맨드 및 데이터로부터 패킷(PCW1) 또는 패킷(PCR1)을 생성하도록 구성되는 하드웨어 회로를 포함할 수 있다. 컨트롤러(1330b)에서 처리되는 패킷의 예시적인 구성은 도 15를 참조하여 더 설명될 것이다.
쓰기 관리 회로(1333)는 제 1 내부 버퍼(1333a) 및 버퍼 관리기(1333b)를 포함할 수 있다. 쓰기 관리 회로(1333)는 패킷(PCW1) 또는 패킷(PCR1)을 수신할 수 있다. 패킷(PCW1) 또는 패킷(PCR1)의 헤더 부분이 커맨드의 정보를 포함하는 경우, 쓰기 관리 회로(1333)는, 헤더 부분을 참조하여, 수신되는 패킷이 쓰기 동작과 관련되는지 또는 읽기 동작과 관련되는지 판별할 수 있다.
쓰기 관리 회로(1333)가 쓰기 동작과 관련되는 패킷(PCW1)을 수신한 경우, 제 1 내부 버퍼(1333a)는 패킷(PCW1)에 포함되는 다양한 정보 및 쓰기 데이터를 버퍼링할 수 있다. 예로서, 제 1 내부 버퍼(1333a)는 SRAM과 같은 메모리 소자를 포함할 수 있다. 버퍼 관리기(1333b)는, 제 1 내부 버퍼(1333a)가 정보를 저장하는 경우에 위험(Hazard) 또는 충돌(Collision)이 발생하지 않도록, 제 1 내부 버퍼(1333a)의 버퍼 영역의 할당을 관리할 수 있다.
쓰기 관리 회로(1333)는, 제 1 내부 버퍼(1333a)에 버퍼링된 쓰기 데이터에 기초하여, 패킷(PCW2)을 메모리 인터페이스 계층(1332)으로 전달할 수 있다. 메모리 인터페이스 계층(1332)은, 패킷(PCW2)의 헤더 부분을 참조하여, 쓰기 데이터를 저장할 메모리 영역의 물리 어드레스를 판별할 수 있다. 메모리 인터페이스 계층(1332)은 판별된 물리 어드레스의 메모리 영역을 포함하는 타겟(Target) 메모리 장치로 쓰기 데이터를 전달할 수 있다. 따라서, 쓰기 데이터가 하나 이상의 메모리 장치(1310)에 저장될 수 있다.
쓰기 동작이 수행되는 경우, 쓰기 관리 회로(1333)는 호스트(1100a)로부터 수신되는 논리 어드레스를 물리 어드레스로 맵핑할 수 있다. 맵핑될 물리 어드레스는 쓰기 관리 회로(1333), 데이터 영역 관리 회로(1337), 및/또는 프로세서(1339)에 의해 관리되는 가용 물리 어드레스들의 목록으로부터 선택될 수 있다. 몇몇 실시 예에서, 쓰기 관리 회로(1333)는 쓰기 데이터의 특성 또는 스트림 아이디를 고려하여, 맵핑될 물리 어드레스를 획득할 수 있다. 쓰기 데이터는 하나 이상의 메모리 장치(1310)의 맵핑된 물리 어드레스의 메모리 영역에 저장될 수 있다.
쓰기 관리 회로(1333)는 수신된 논리 어드레스 및 맵핑된 물리 어드레스의 정보를 데이터 영역 관리 회로(1337)로 제공할 수 있다. 데이터 영역 관리 회로(1337)는 논리 어드레스와 물리 어드레스 사이의 대응 관계의 정보를 버퍼 메모리(1350)에서 관리할 수 있다. 버퍼 메모리(1350)는 대응 관계의 정보를 제 1 메타데이터로서 저장할 수 있다. 예시적인 쓰기 동작이 도 16 내지 도 19를 참조하여 더 설명될 것이다.
반면, 쓰기 관리 회로(1333)가 읽기 동작과 관련되는 패킷(PCR1)을 수신한 경우, 쓰기 관리 회로(1333)는 패킷(PCR1)을 데이터 영역 관리 회로(1337)로 전달할 수 있다. 예로서, 쓰기 관리 회로(1333)는, 수신된 패킷의 부가 정보에 기초하여, 그 수신된 패킷을 라우팅(Route)하도록 구성될 수 있다. 쓰기 관리 회로(1333)는 커맨드 및 데이터를 전달하는 것과 관련하여 스위치의 역할을 할 수 있다.
데이터 영역 관리 회로(1337)는, 버퍼 메모리(1350)에 저장된 제 1 메타데이터의 대응 관계를 참조하여, 패킷(PCR1)에 대응하는 물리 어드레스를 획득할 수 있다. 즉, 제 1 메타데이터는 제 1 유형의 작업이 관리되는 때에 생성되거나 참조될 수 있다. 데이터 영역 관리 회로(1337)는 획득된 물리 어드레스의 정보를 포함하는 패킷(PCR2)을 생성할 수 있다. 데이터 영역 관리 회로(1337)는 패킷(PCR2)을 메모리 인터페이스 계층(1332)으로 전달할 수 있다.
메모리 인터페이스 계층(1332)은, 패킷(PCR2)의 헤더 부분을 참조하여, 획득된 물리 어드레스의 메모리 영역을 포함하는 타겟 메모리 장치로 읽기 커맨드를 전달할 수 있다. 따라서, 읽기 데이터가 타겟 메모리 장치로부터 출력될 수 있다. 메모리 인터페이스 계층(1332)은 출력된 읽기 데이터를 포함하는 패킷(PCR3)을 읽기 관리 회로(1335)로 제공할 수 있다.
읽기 관리 회로(1335)는 제 2 내부 버퍼(1335a)를 포함할 수 있다. 제 2 내부 버퍼(1335a)는 패킷(PCR3)에 포함되는 다양한 정보를 버퍼링할 수 있다. 예로서, 제 2 내부 버퍼(1335a)는 SRAM과 같은 메모리 소자를 포함할 수 있다. 읽기 관리 회로(1335)는, 제 2 내부 버퍼(1335a)에 버퍼링된 읽기 데이터에 기초하여, 호스트 인터페이스 계층(1331a)으로 패킷(PCR4)을 전달할 수 있다.
호스트 인터페이스 계층(1331a)은 패킷(PCR4)에 포함되는 읽기 데이터를 호스트(1100a)로 전달할 수 있다. 따라서, 읽기 데이터가 하나 이상의 메모리 장치(1310)로부터 컨트롤러(1330a)의 외부로 출력될 수 있다.
쓰기 관리 회로(1333), 읽기 관리 회로(1335), 및 데이터 영역 관리 회로(1337) 각각은 위에서 설명된 및 아래에서 설명될 동작들을 수행하도록 구성되는 하드웨어 회로를 포함할 수 있다. 쓰기 관리 회로(1333), 읽기 관리 회로(1335), 및 데이터 영역 관리 회로(1337)는 프로세서(1339)의 개입 없이 제 1 유형의 작업을 자동으로 처리할 수 있다. 커맨드 및 데이터가 일정한(Regular) 포맷으로 패킷화될 수 있기 때문에, 쓰기 관리 회로(1333), 읽기 관리 회로(1335), 및 데이터 영역 관리 회로(1337) 각각의 하드웨어 회로는 프로세서(1339)의 개입 없이도 패킷의 부가 정보에 기초하여 패킷 단위의 스트림을 관리할 수 있다.
제 1 유형의 작업이 정상적으로 관리되는 동안, 프로세서(1339)는 제 1 유형의 작업에 개입하지 않을 수 있다. 나아가, 프로세서(1339)는 패킷화기(PCZ)에 의해 패킷을 생성하는 것 및 쓰기 경로 및 읽기 경로를 따라 패킷 단위의 스트림을 전달하는 것에 개입하지 않을 수 있다. 게다가, 프로세서(1339)는 데이터 영역 관리 회로(1337)에 의해 제 1 메타데이터를 버퍼 메모리(1350)에 저장하는 것 및 데이터 영역 관리 회로(1337)에 의해 제 1 메타데이터를 버퍼 메모리(1350)로부터 읽는 것에 개입하지 않을 수 있다.
제 1 유형의 작업이 관리되는 동안, 데이터 영역 관리 회로(1337)는 쓰기 관리 회로(1333) 및 읽기 관리 회로(1335)로부터 다양한 정보를 획득할 수 있다. 획득되는 정보는, 오류 또는 예외를 포함하여, 하나 이상의 메모리 장치(1310) 및 컨트롤러(1330b)의 동작들에 관한 다양한 상태를 지시할 수 있다. 데이터 영역 관리 회로(1337)는, 획득되는 정보에 기초하여, 프로세서(1339)의 개입을 트리거하기 위한 개입 조건을 관리할 수 있다.
제 1 유형의 작업과 관련하여 오류 또는 예외가 발생하는 경우, 컨트롤러(1330a) 또는 스토리지 장치(1300a)의 동작에 장애(Failure)가 발생할 수 있다. 그러나, 제 1 유형의 작업은 단순 작업을 포함할 수 있고, 오류 또는 예외를 해소하는 데에 적절하지 않을 수 있다. 오류 또는 예외를 해소하기 위해 제 2 유형의 작업이 요구될 수 있고, 프로세서(1339)는 제 2 유형의 작업을 처리하기 위해 개입할 수 있다.
예로서, 제 1 유형의 작업과 관련하여 오류 또는 예외가 발생하는 경우, 개입 조건이 충족될 수 있다. 데이터 영역 관리 회로(1337)는 프로세서(1339)로 알림을 제공하여, 개입 조건이 충족되었음을 프로세서(1339)로 알릴 수 있다. 알림이 수신되지 않는 경우, 프로세서(1339)는 제 1 유형의 작업을 관리하는 것, 패킷을 생성하고 전달하는 것, 및 제 1 메타데이터를 관리하는 것에 개입하지 않을 수 있다.
반면, 알림이 수신되는 경우, 프로세서(1339)는 제 2 유형의 작업을 처리하기 위해 관리 커맨드를 데이터 영역 관리 회로(1337)로 제공할 수 있다. 관리 커맨드는 쓰기 경로 및 읽기 경로 중 적어도 하나 상에서 수행되는 관리 동작을 지시할(Direct) 수 있다. 알림 및 관리 커맨드는 패킷(PCC)의 헤더 부분에 포함될 수 있다.
프로세서(1339)는 제 2 유형의 작업을 처리하기 위해 버퍼 메모리(1350)와 통신할 수 있다. 버퍼 메모리(1350)는 제 2 메타데이터를 저장할 수 있다. 제 2 메타데이터는 제 2 유형의 작업이 처리되는 때에 생성되거나 참조될 수 있다. 즉, 프로세서(1339)는 제 2 유형의 작업을 처리하기 위해 제 2 메타데이터를 버퍼 메모리(1350)에 저장하거나 버퍼 메모리(1350)에 저장된 제 2 메타데이터를 읽을 수 있다.
데이터 영역 관리 회로(1337)는 관리 커맨드에 응답하여, 제 2 유형의 작업을 수행할 수 있다. 즉, 오류 또는 예외가 발생하는 경우, 프로세서(1339)가 개입할 수 있고 제 2 유형의 작업이 프로세서(1339)의 제어에 따라 수행될 수 있다. 제 2 유형의 작업이 쓰기 동작 및/또는 읽기 동작을 수반하는 경우, 데이터 영역 관리 회로(1337)는 쓰기 관리 회로(1333) 및/또는 읽기 관리 회로(1335)로 적절한 커맨드를 제공할 수 있다.
하드웨어 자동화 아키텍처에 따르면, 컨트롤러(1330b)는 제 1 유형의 작업과 관련되는 데이터 영역을 포함할 수 있다. 나아가, 컨트롤러(1330b)는 제 2 유형의 작업과 관련되는 제어 영역을 포함할 수 있다. 쓰기 관리 회로(1333) 및 읽기 관리 회로(1335)는 데이터 영역에서 제 1 유형의 작업을 관리할 수 있고, 프로세서(1339)는 제어 영역에서 제 2 유형의 작업을 처리할 수 있다. 데이터 영역 관리 회로(1337)는 데이터 영역에서 제 1 유형의 작업을 관리할 수 있고, 제어 영역에서 프로세서(1339)의 개입을 트리거할 수 있다.
중앙 집중식 아키텍처의 경우, 쓰기 데이터 및 읽기 데이터를 포함하여 모든 데이터 흐름이 버퍼 메모리(1350a)로 집중(Concentrated)될 수 있고, 프로세서가 제 1 유형의 작업 및 제 2 유형의 작업 모두에 개입할 수 있다. 이 경우, 스토리지 장치(1300a)의 성능은 프로세서의 성능 및 버퍼 메모리(1350a)의 처리량(Throughput)에 의존할 수 있다. 반면, 하드웨어 자동화 아키텍처의 경우, 단순 작업을 프로세서(1339)의 개입 없이 별개의 하드웨어 회로에 의해 관리하는 것은 프로세서(1339)의 성능 및 버퍼 메모리(1350b)의 부하(Load)를 감소시킬 수 있다.
도 14에 도시된 것처럼, 쓰기 경로는 읽기 경로와 물리적으로 별개일 수 있다. 따라서, 쓰기 동작 및 읽기 동작은 병렬로 또는 동시에 수행될 수 있다. 이는 단순 작업을 처리하기 위한 성능을 더욱 향상시킬 수 있다.
몇몇 경우, 프로세서(1339)가 제 2 유형의 작업을 처리하는 동안, 제 1 유형의 작업이 전용 하드웨어 회로에 의해 관리될 수 있다. 즉, 제 1 유형의 작업은 제 2 유형의 작업에 기인하여 중단됨이 없이, 제 2 유형의 작업을 처리하는 것과 동시에 관리될 수 있다. 제 1 유형의 작업은 프로세서(1339)의 개입 없이 전용 하드웨어 회로에 의해 관리될 수 있고, 따라서 제 2 유형의 작업과 병렬로 다루어질 수 있다.
위에서 설명된 것처럼, 버퍼 메모리(1350)는 제 1 메타데이터 및 제 2 메타데이터를 저장할 수 있다. 몇몇 실시 예에서, 제 1 메타데이터는 제 2 메타데이터와 별개로 저장될 수 있다(예컨대, 제 1 메타데이터를 저장하기 위한 메모리 영역은 제 2 메타데이터를 저장하기 위한 메모리 영역과 상이할 수 있다). 몇몇 실시 예에서, 데이터 영역 관리 회로(1337)만 제 1 메타데이터 및 제 2 메타데이터 모두로 액세스할 수 있고, 프로세서(1339)는 데이터 영역 관리 회로(1337)를 통해 제 2 메타데이터를 읽을 수 있다. 이러한 실시 예들에 따르면, 제 1 메타데이터 및 제 2 메타데이터가 각각 데이터 영역 관리 회로(1337) 및 프로세서(1339)에 의해 독립적으로 관리되더라도, 제 1 메타데이터 및 제 2 메타데이터의 일관성(Coherency) 및 무결성(Integrity)이 확보될 수 있다.
도 15는 몇몇 실시 예에 따른 도 14의 패킷의 예시적인 구성을 보여주는 개념도이다.
도 14를 참조하여 설명된 것처럼, 하나의 패킷은 헤더 부분, 데이터 부분, 및 테일 부분을 포함할 수 있다. 데이터 부분은 쓰기 데이터 또는 읽기 데이터를 포함할 수 있다.
예로서, 헤더 부분은 라우팅 정보, 논리 어드레스(LPN)의 정보, 물리 어드레스(PPN)의 정보, 커맨드(CMD)의 정보, 스트림 아이디 정보, 상태 정보 등을 포함할 수 있다. 라우팅 정보는 패킷의 목적지를 지시할(Indicate) 수 있고, 예로서 구성 요소 아이디(Component Identifier) 또는 마커(Marker)를 포함할 수 있다.
논리 어드레스(LPN)는 호스트(1100a)로부터 수신되는 어드레스를 포함할 수 있고, 물리 어드레스(PPN)는 논리 어드레스(LPN)와 맵핑되는 물리 어드레스를 포함할 수 있다. 커맨드(CMD)는 패킷에 의해 요청되는 동작의 유형을 지시할 수 있다. 스트림 아이디 정보는 데이터 부분에 포함되는 쓰기 데이터의 스트림 아이디를 지시할 수 있다. 상태 정보는 하나 이상의 메모리 장치(1310) 및 컨트롤러(1330a)의 동작들에 관한 상태(예컨대, 오류 또는 예외와 관련되는 상태)를 지시할 수 있다.
다만, 하나의 패킷의 헤더 부분은 도 15에 나타낸 정보 중 적어도 하나의 정보를 포함하지 않을 수 있다. 예로서, 물리 어드레스(PPN)의 정보는 호스트 인터페이스 계층(1331a)으로부터 쓰기 관리 회로(1333)로 제공되는 패킷(예컨대, PCW1)에 포함되지 않을 수 있다. 예로서, 상태 정보는 호스트(1100a)로부터 하나 이상의 메모리 장치(1310)로 쓰기 데이터를 전달하기 위해 생성되는 패킷 또는 하나 이상의 메모리 장치(1310)로부터 호스트(1100a)로 읽기 데이터를 전달하기 위해 생성되는 패킷에 포함되지 않을 수 있다. 헤더 부분의 구성은 패킷의 목적에 의존하여 다양하게 변경 또는 수정될 수 있다.
테일 부분은 데이터 부분의 완료를 지시하기에 적절한 정보를 포함할 수 있다. 예로서, 테일 부분은 DIF(Data Integrity Feature), DIX(Data Integrity Extention), CRC(Cyclic Redundancy Check) 등과 같은 무결성/오류 검사 정보를 포함할 수 있다. 다만, 본 발명은 여기에 한정되지 않고, 테일 부분은 다른 정보를 포함하도록 구성될 수 있다.
하나의 패킷은 헤더 부분, 데이터 부분, 및 테일 부분 모두를 포함할 수 있다. 또는, 하나의 패킷은 헤더 부분, 데이터 부분, 및 테일 부분 중 적어도 하나를 포함하지 않을 수 있다.
예로서, 호스트(1100a)로부터 하나 이상의 메모리 장치(1310)로 쓰기 데이터를 전달하기 위해 생성되는 패킷 또는 하나 이상의 메모리 장치(1310)로부터 호스트(1100a)로 읽기 데이터를 전달하기 위해 생성되는 패킷은 헤더 부분, 데이터 부분, 및 테일 부분 모두를 포함할 수 있다. 예로서, 호스트(1100a)로부터 하나 이상의 메모리 장치(1310)로 읽기 커맨드를 전달하기 위해 생성되는 패킷, 데이터 영역 관리 회로(1337)로부터 프로세서(1339)로 제공되는 알림 패킷, 및 프로세서(1339)로부터 데이터 영역 관리 회로(1337)로 제공되는 관리 커맨드 패킷은 헤더 부분만을 포함할 수 있다.
다만, 위 예들은 더 나은 이해를 가능하게 하기 위해 제공되고, 본 발명을 한정하도록 의도되지는 않는다. 패킷의 구성은 프로세서(1339)의 개입 없이 별개의 하드웨어 회로에 의해 제 1 유형의 작업을 자동으로 관리하기 위해 다양하게 변경 또는 수정될 수 있다.
III-C. 예시적인 쓰기 동작
도 16 내지 도 18은 몇몇 실시 예에 따라 도 11의 스토리지 장치(1300b)에서 수행되는 예시적인 쓰기 동작을 설명하기 위한 블록도들이다. 도 19는 몇몇 실시 예에 따라 도 11의 스토리지 장치(1300b)에서 수행되는 예시적인 쓰기 동작을 설명하는 흐름도이다. 더 나은 이해를 가능하게 하기 위해, 도 16 내지 도 19가 함께 참조될 것이다.
도 18을 참조하면, 쓰기 관리 회로(1333)는 물리 어드레스들과 스트림 아이디들 사이의 대응 관계를 관리할 수 있다(도 19의 S305 동작). 대응 관계는 도 7 및 도 8을 참조하여 설명된 대응 관계(CR)와 실질적으로 동일하게 관리될 수 있다. 메모리 구역들(MR1 내지 MR4)은 도 3 내지 도 5를 참조하여 설명된 것들과 실질적으로 동일하게 구성될 수 있다.
예로서, 대응 관계에서, "1"의 스트림 아이디는 메모리 구역(MR1)을 지시하는 물리 어드레스에 대응할 수 있고, "2"의 스트림 아이디는 메모리 구역(MR2)을 지시하는 물리 어드레스에 대응할 수 있다. 대응 관계는 쓰기 데이터가 컨트롤러(1330b)에 의해 수신되기 전에 미리 관리될 수 있다.
도 16을 참조하면, 호스트 인터페이스 계층(1331a)은 호스트(1100a)로부터 쓰기 커맨드 및 쓰기 데이터를 수신할 수 있다(도 19의 S310 동작). 쓰기 데이터는 특정 스트림 아이디를 가질 수 있다.
패킷화기(PCZ)는 쓰기 커맨드 및 쓰기 데이터를 패킷화할 수 있다(도 19의 S320 동작). 예로서, 패킷화기(PCZ)는 쓰기 커맨드 및 쓰기 데이터를 부가 정보와 결합하여, 패킷(PCW1)을 생성할 수 있다. 예로서, 패킷(PCW1)의 헤더 부분은 쓰기 커맨드, 논리 어드레스, 및 스트림 아이디의 정보를 포함할 수 있고, 패킷(PCW1)의 데이터 부분은 쓰기 데이터를 포함할 수 있다. 패킷(PCW1)은 쓰기 관리 회로(1333)로 제공될 수 있다.
몇몇 경우, 패킷(PCW1)의 헤더 부분은 데이터의 종류, 데이터의 구성, 예외 등의 정보를 포함할 수 있다. 쓰기 관리 회로(1333)는 패킷(PCW1)에 포함되는 정보에 기초하여, 각 정보를 관리할 것인지 여부 및 각 정보를 어떻게 관리할 것인지를 결정할 수 있다.
도 17을 참조하면, 예로서, 버퍼 관리기(1333b)는 버퍼 인덱스 및 논리 어드레스를 관리할 수 있다. 버퍼 인덱스는 제 1 내부 버퍼(1333a)의 각 버퍼 영역의 위치를 지시할 수 있다. 예로서, "0xA8"의 논리 어드레스와 관련되는 쓰기 데이터(D1)가 "1"의 버퍼 인덱스의 버퍼 영역에서 버퍼링되는 경우, 버퍼 관리기(1333b)는 "1"의 버퍼 인덱스가 "0xA8"의 논리 어드레스에 대응하도록 버퍼 인덱스 및 논리 어드레스를 관리할 수 있다.
예로서, 버퍼 관리기(1333b)는 버퍼 인덱스 및 논리 어드레스를 저장하기 위한 메모리 소자를 포함할 수 있다. 또는, 버퍼 관리기(1333b)는 버퍼 인덱스 및 논리 어드레스를 관리하기 위해 제 1 내부 버퍼(1333a)의 일부 메모리 영역을 이용할 수 있다.
제 1 내부 버퍼(1333a)는 각 버퍼 인덱스의 버퍼 영역에서 쓰기 데이터를 버퍼링할 수 있다. 도 17은 쓰기 데이터만 각 버퍼 인덱스의 버퍼 영역에서 관리됨을 보여준다. 그러나, 몇몇 실시 예에서 제 1 내부 버퍼(1333a)는 각 쓰기 데이터와 관련되는 다른 정보(예컨대, 논리 어드레스, 커맨드, 스트림 아이디 등)를 더 관리할 수 있다.
쓰기 관리 회로(1333)가 패킷(PCW1)을 수신하는 경우, 버퍼 관리기(1333b)는 패킷(PCW1)에 응답하여 제 1 내부 버퍼(1333a)의 상태를 검사할 수 있다. 예로서, 버퍼 관리기(1333b)는 수신된 패킷(PCW1)에 포함되는 논리 어드레스가 이미 관리되고 있는지 여부를 검사할 수 있다. 따라서, 버퍼 관리기(1333b)는 동일한 어드레스를 수신하는 것과 관련하여 위험 또는 충돌을 관리할 수 있다(도 19의 S330 동작).
한편, 몇몇 경우, 호스트(1100a)로부터 수신되는 쓰기 데이터의 크기는 한 번의 쓰기 동작에 의해 저장되는 프로그램 단위 데이터의 프로그램 단위 크기와 상이할 수 있다. 이 경우, 제 1 내부 버퍼(1333a)는 특정 스트림 아이디와 관련하여 프로그램 단위 데이터가 누적될 때까지 복수의 쓰기 데이터를 버퍼링할 수 있다(도 19의 S340 동작).
프로그램 단위 데이터가 누적된 경우, 쓰기 관리 회로(1333)는 프로그램 단위 데이터에 대해 가용 물리 어드레스를 할당할 수 있다(도 19의 S350 동작). 따라서, 프로그램 단위 데이터의 각 쓰기 데이터와 관련되는 논리 어드레스가 물리 어드레스와 맵핑될 수 있다. 할당될 물리 어드레스는 쓰기 관리 회로(1333), 데이터 영역 관리 회로(1337), 및/또는 프로세서(1339)에 의해 관리되는 가용 물리 어드레스들의 목록으로부터 선택될 수 있다.
다만, 할당될 물리 어드레스는 쓰기 데이터의 스트림 아이디 및 대응 관계에 기초하여 선택될 수 있다. 다시 도 18을 참조하면, 버퍼 관리기(1333b)는 스트림 아이디들과 물리 어드레스들 사이의 대응 관계를 관리할 수 있다. 대응 관계는 버퍼 관리기(1333b)의 메모리 소자 또는 제 1 내부 버퍼(1333a)에 저장될 수 있다.
예로서, 패킷(PCW1)과 관련되는 프로그램 단위 데이터가 "1"의 스트림 아이디를 갖는 경우, 대응 관계에 기초하여 메모리 구역(MR1)의 가용 물리 어드레스가 프로그램 단위 데이터를 위해 할당될 수 있다. 따라서, 패킷(PCW2)의 헤더 부분은 메모리 구역(MR1)에 포함되는 메모리 영역을 지시하는 물리 어드레스의 정보를 포함할 수 있다.
다시 도 16을 참조하면, 쓰기 관리 회로(1333)는 패킷(PCW3)을 데이터 영역 관리 회로(1337)로 제공할 수 있다. 패킷(PCW3)의 헤더 부분은 쓰기 어드레스와 관련되는 논리 어드레스 및 할당된 물리 어드레스의 정보를 포함할 수 있다. 따라서, 데이터 영역 관리 회로(1337)는, 수신된 패킷(PCW3)에 기초하여, 논리 어드레스와 물리 어드레스 사이의 대응 관계를 관리할 수 있다. 데이터 영역 관리 회로(1337)는 대응 관계를 제 1 메타데이터(MD1)에서 관리할 수 있다(도 19의 S360 동작). 버퍼 메모리(1350)는 제 1 메타데이터(MD1)를 저장할 수 있다.
쓰기 관리 회로(1333)는 프로그램 단위 데이터를 위한 패킷(PCW2)을 준비할 수 있다(도 19의 S360 동작). 패킷(PCW2)은 프로그램 단위 데이터, 및 할당된 물리 어드레스를 지시하는 부가 정보를 포함할 수 있다. 쓰기 관리 회로(1333)는 패킷(PCW2)을 메모리 인터페이스 계층(1332)으로 전달할 수 있다. 따라서, 쓰기 데이터 및 쓰기 커맨드는 패킷 단위의 스트림으로 쓰기 경로를 따라 쓰기 관리 회로(1333)를 통해 전달될 수 있다.
프로그램 단위 데이터 및 할당된 물리 어드레스는 하나 이상의 메모리 장치(1310)로 전달될 수 있다(도 19의 S370 동작). 프로그램 단위 데이터에 포함되는 쓰기 데이터는 할당된 물리 어드레스에 의해 지시되는 메모리 구역으로 전달될 수 있다. 따라서, 쓰기 관리 회로(1333)는, 대응 관계에 기초하여 쓰기 데이터가 스트림 아이디에 대응하는 메모리 구역에 저장되도록, 쓰기 동작들을 관리할 수 있다.
예로서, 다시 도 18을 참조하면, "1"의 스트림 아이디를 갖는 쓰기 데이터(또는, 프로그램 단위 데이터)는 대응 관계에 기초하여 쓰기 관리 회로(1333)를 통해 메모리 구역(MR1)으로 전달될 수 있다. 여기서, "1"의 스트림 아이디를 갖는 쓰기 데이터(또는, 프로그램 단위 데이터)는, "2", "3" 또는 "4"의 스트림 아이디를 갖는 쓰기 데이터가 컨트롤러(1330b)에 의해 수신되는지 여부와 무관하게, 메모리 구역(MR1)으로 전달될 수 있다. 따라서, 모든 스트림 아이디들의 쓰기 데이터가 동시에 버퍼링되지 않을 수 있고, 제 1 내부 버퍼(1333a)가 적은 용량을 갖도록 구현될 수 있다.
몇몇 실시 예에서, 복수의 채널(CHs)을 통한 컨트롤러(1330b)와 하나 이상의 메모리 장치(1310) 사이의 통신은 도 9의 인터리빙 및/또는 도 10의 시분할 다중 전송을 채용할 수 있다. 몇몇 실시 예에서, 도 16 내지 도 19의 예시적인 쓰기 동작과 유사한 기술 사상이 단일 스트림을 위해 채용될 수 있다. 이 실시 예들에서, 쓰기 동작의 성능이 더 향상될 수 있다.
III-D. 부연 설명
도 20은 도 1의 스토리지 장치(1300)와 관련되는 예시적인 구성을 보여주는 블록도이다. 도 1의 전자 시스템(1000)은 도 20의 전자 시스템(1000c)을 포함할 수 있다. 도 1의 스토리지 장치(1300)는 도 20의 스토리지 장치(1300c)를 포함할 수 있다.
도 11 및 도 14를 도 20과 비교하면, 몇몇 실시 예에서, 패킷화기(PCZ)가 컨트롤러(1330c)의 호스트 인터페이스 계층(1331b)에 포함되는 대신, 호스트(1100b)에 포함될 수 있다. 패킷화기(PCZ)는 호스트(1100b)에서 생성되는 커맨드(CMD), 데이터(DAT), 및 어드레스(ADDR)에 기초하여 패킷을 생성할 수 있다. 따라서, 컨트롤러(1330c)는 호스트(1100b)와 패킷(PCW 또는 PCR)을 교환할 수 있고, 패킷(PCW 또는 PCR)에 기초하여 제 1 유형의 작업을 관리할 수 있다.
도 20과 관련하여 설명되지 않은 다른 구성 요소들은 도 11 내지 도 19를 참조하여 설명된 것들과 실질적으로 동일하게 구성되고 동작할 수 있다. 간결성을 위해, 중복되는 설명들은 생략될 것이다.
위 설명들은 본 발명을 구현하기 위한 예시적인 구성들 및 동작들을 제공하도록 의도된다. 본 발명의 기술 사상은 위에서 설명된 실시 예들뿐만 아니라, 위 실시 예들을 단순하게 변경하거나 수정하여 얻어질 수 있는 구현들도 포함할 것이다. 또한, 본 발명의 기술 사상은 위에서 설명된 실시 예들을 앞으로 용이하게 변경하거나 수정하여 달성될 수 있는 구현들도 포함할 것이다.
1000, 1000a, 1000b, 1000c : 전자 시스템

Claims (20)

  1. 메모리 구역들을 포함하는 불휘발성 메모리들; 및
    복수의 채널을 통해 상기 불휘발성 메모리들과 통신하도록 구성되는 컨트롤러를 포함하되,
    상기 컨트롤러는:
    제 1 쓰기 데이터가 상기 컨트롤러에 의해 수신되기 전에 미리, 상기 메모리 구역들을 지시하는 물리 어드레스들과 스트림 아이디들 사이의 대응 관계를 관리하고;
    상기 제 1 쓰기 데이터의 제 1 스트림 아이디에 대응하여 상기 대응 관계에서 관리되는 물리 어드레스의 제 1 메모리 구역에 상기 제 1 쓰기 데이터가 저장되도록, 상기 불휘발성 메모리들을 제어하도록 더 구성되고,
    상기 제 1 쓰기 데이터는, 제 2 스트림 아이디를 갖는 제 2 쓰기 데이터가 상기 컨트롤러에 의해 수신되는지 여부와 무관하게, 상기 대응 관계에 기초하여 상기 불휘발성 메모리들로 전달되고,
    상기 컨트롤러에 의해 상기 제1 쓰기 데이터를 수신하기 위한 클록의 제 1 주파수는 상기 컨트롤러와 상기 불휘발성 메모리들 사이의 통신을 위한 클록의 제 2 주파수보다 높고,
    상기 제 1 주파수는 상기 제 2 주파수와 상기 복수의 채널의 개수의 곱에 대응하는 스토리지 장치.
  2. 제 1 항에 있어서,
    상기 불휘발성 메모리들 각각은 메모리 영역들을 포함하고, 상기 복수의 채널 중 하나와 연결되고,
    상기 메모리 구역들 각각은 동일한 채널로 연결되는 메모리 영역들로부터 선택되는 적어도 하나의 메모리 영역을 포함하되, 상기 메모리 구역들 각각에 포함되는 메모리 영역들은 상기 복수의 채널의 전부 또는 일부와 관련하여 선택되는 스토리지 장치.
  3. 제 2 항에 있어서,
    상기 메모리 구역들은 동일한 채널로 연결되는 메모리 영역들로부터 선택되는 상이한 메모리 영역들을 각각 포함하는 스토리지 장치.
  4. 제 2 항에 있어서,
    상기 불휘발성 메모리들에 포함되는 상기 메모리 영역들 각각은 상기 불휘발성 메모리들 상의 블록 크기 영역에 대응하는 스토리지 장치.
  5. 제 1 항에 있어서,
    상기 대응 관계는 상기 불휘발성 메모리들의 동작들에 따라 가변하는 스토리지 장치.
  6. 제 1 항에 있어서,
    상기 제 1 쓰기 데이터의 크기가 프로그램 단위 크기보다 작은 경우, 상기 제 1 쓰기 데이터는 상기 제 1 스트림 아이디를 갖는 하나 이상의 다른 쓰기 데이터와 함께 상기 제 1 메모리 구역에 저장되는 스토리지 장치.
  7. 제 1 항에 있어서,
    상기 컨트롤러는, 상기 제 2 스트림 아이디에 대응하여 상기 대응 관계에서 관리되는 물리 어드레스의 제 2 메모리 구역에 상기 제 2 쓰기 데이터가 저장되도록, 상기 불휘발성 메모리들을 제어하도록 더 구성되고,
    상기 제 2 메모리 구역에 포함되는 메모리 영역들은 상기 제 1 메모리 구역에 포함되는 메모리 영역들과 상이한 스토리지 장치.
  8. 메모리 구역들을 포함하는 불휘발성 메모리들;
    데이터를 버퍼링하도록 구성되는 버퍼 메모리; 및
    제 1 쓰기 데이터 및 제 2 쓰기 데이터가 상기 불휘발성 메모리들에 저장되도록, 상기 불휘발성 메모리들 및 상기 버퍼 메모리와 통신하도록 구성되는 컨트롤러를 포함하되,
    제 1 특성을 갖는 상기 제 1 쓰기 데이터는 상기 불휘발성 메모리들의 제 1 메모리 구역에 저장되고, 제 2 특성을 갖는 상기 제 2 쓰기 데이터는 상기 불휘발성 메모리들의 제 2 메모리 구역에 저장되고,
    상기 제 1 쓰기 데이터는, 상기 제 2 쓰기 데이터가 상기 버퍼 메모리에 버퍼링되는지 여부와 무관하게, 상기 불휘발성 메모리들로 전달되고,
    상기 컨트롤러는 복수의 채널을 통해 상기 불휘발성 메모리들과 통신하도록 더 구성되고,
    상기 컨트롤러에 의해 쓰기 데이터를 수신하기 위한 클록의 제 1 주파수는 상기 컨트롤러와 상기 불휘발성 메모리들 사이의 통신을 위한 클록의 제 2 주파수보다 높고,
    상기 제 1 주파수는 상기 제 2 주파수와 상기 복수의 채널의 개수의 곱에 대응하는 스토리지 장치.
  9. 제 8 항에 있어서,
    상기 제 1 쓰기 데이터 및 상기 제 2 쓰기 데이터가 상기 버퍼 메모리에 버퍼링되기 전에 미리, 상기 제 1 메모리 구역은 상기 제 1 특성을 갖는 쓰기 데이터를 저장하고 상기 제 2 메모리 구역은 상기 제 2 특성을 갖는 쓰기 데이터를 저장하도록 결정되는 스토리지 장치.
  10. 제 8 항에 있어서,
    상기 컨트롤러는, 상기 제 1 쓰기 데이터 및 상기 제 2 쓰기 데이터가 상기 버퍼 메모리에 버퍼링되기 전에 미리, 상기 제 1 특성과 관련되는 제 1 스트림 아이디가 상기 제 1 메모리 구역을 지시하는 물리 어드레스에 대응하고 상기 제 2 특성과 관련되는 제 2 스트림 아이디가 상기 제 2 메모리 구역을 지시하는 물리 어드레스에 대응하도록 대응 관계를 관리하도록 더 구성되는 스토리지 장치.
  11. 제 8 항에 있어서,
    상기 제 1 쓰기 데이터의 크기가 프로그램 단위 크기보다 작은 경우, 상기 버퍼 메모리는, 상기 제 1 특성과 관련하여 상기 프로그램 단위 크기의 프로그램 단위 데이터가 누적될 때까지, 상기 제 1 특성을 갖는 하나 이상의 다른 쓰기 데이터와 함께 상기 제 1 쓰기 데이터를 버퍼링하도록 더 구성되는 스토리지 장치.
  12. 제 11 항에 있어서,
    상기 컨트롤러는, 상기 제 1 쓰기 데이터 및 상기 하나 이상의 다른 쓰기 데이터를 포함하는 상기 프로그램 단위 데이터가 상기 제 1 메모리 구역에 저장되도록, 상기 불휘발성 메모리들 및 상기 버퍼 메모리와 통신하도록 더 구성되는 스토리지 장치.
  13. 제 8 항에 있어서,
    상기 컨트롤러는 복수의 채널을 통해 상기 불휘발성 메모리들과 통신하도록 더 구성되고,
    상기 불휘발성 메모리들 각각은 메모리 영역들을 포함하고,
    상기 제 1 메모리 구역 및 상기 제 2 메모리 구역 각각은 상기 복수의 채널의 전부 또는 일부로 각각 연결되는 메모리 영역들을 포함하는 스토리지 장치.
  14. 제 13 항에 있어서,
    상기 제 1 메모리 구역에 포함되는 메모리 영역들은 상기 제 2 메모리 구역에 포함되는 메모리 영역들과 상이한 스토리지 장치.
  15. 제 13 항에 있어서,
    상기 제 1 쓰기 데이터는 상기 제 1 메모리 구역에 포함되는 메모리 영역들 중 제 1 채널로 연결되는 메모리 영역에 저장되고,
    상기 제 1 채널이 유휴(Idle)하지 않은 경우, 상기 제 2 쓰기 데이터는 상기 제 2 메모리 구역에 포함되는 메모리 영역들 중 제 2 채널로 연결되는 메모리 영역에 저장되는 스토리지 장치.
  16. 제 13 항에 있어서,
    상기 컨트롤러로부터 상기 불휘발성 메모리들로 복수의 쓰기 데이터를 전달하는 것은 상기 복수의 채널을 통해 인터리빙(Interleaving)하는 스토리지 장치.
  17. 삭제
  18. 제 8 항에 있어서,
    상기 컨트롤러에 의해 수신되는 쓰기 데이터의 제 1 데이터 폭은 상기 복수의 채널 각각을 통해 전달되는 데이터의 제 2 데이터 폭보다 크고,
    상기 제 1 데이터 폭은 상기 제 2 데이터 폭과 상기 복수의 채널의 개수의 곱에 대응하는 스토리지 장치.
  19. 메모리 구역들을 포함하는 불휘발성 메모리들; 및
    제 1 쓰기 데이터가 수신되기 전에 상기 제 1 쓰기 데이터를 저장하도록 미리 결정된 메모리 구역에 상기 제 1 쓰기 데이터가 저장되도록, 상기 불휘발성 메모리들을 제어하도록 구성되는 컨트롤러를 포함하되,
    상기 제 1 쓰기 데이터는, 제 2 쓰기 데이터가 수신되는지 여부와 무관하게, 상기 불휘발성 메모리로 전달되고,
    상기 컨트롤러는 복수의 채널을 통해 상기 불휘발성 메모리들과 통신하도록 더 구성되고,
    상기 컨트롤러에 의해 쓰기 데이터를 수신하기 위한 클록의 제 1 주파수는 상기 컨트롤러와 상기 불휘발성 메모리들 사이의 통신을 위한 클록의 제 2 주파수보다 높고,
    상기 제 1 주파수는 상기 제 2 주파수와 상기 복수의 채널의 개수의 곱에 대응하는 스토리지 장치.
  20. 메모리 구역들을 포함하는 불휘발성 메모리들; 및
    제 1 스트림 아이디를 갖는 제 1 쓰기 데이터가 상기 불휘발성 메모리들의 제 1 메모리 구역에 저장되고 제 2 스트림 아이디를 갖는 제 2 쓰기 데이터가 상기 불휘발성 메모리들의 제 2 메모리 구역에 저장되도록 쓰기 동작들을 관리하도록 구성되는 작업 관리 회로, 및 상기 쓰기 동작들과 관련되는 오류 또는 예외가 해소되도록 관리 동작을 처리하도록 구성되는 프로세서를 포함하는 컨트롤러를 포함하되,
    상기 작업 관리 회로는 상기 프로세서의 개입 없이 상기 쓰기 동작들을 관리하도록 더 구성되고,
    상기 컨트롤러에 의해 수신된 상기 제 1 쓰기 데이터는, 상기 제 2 쓰기 데이터가 상기 컨트롤러에 의해 수신되는지 여부와 무관하게, 상기 불휘발성 메모리들로 전달되고,
    상기 컨트롤러는 복수의 채널을 통해 상기 불휘발성 메모리들과 통신하도록 더 구성되고,
    상기 컨트롤러에 의해 쓰기 데이터를 수신하기 위한 클록의 제 1 주파수는 상기 컨트롤러와 상기 불휘발성 메모리들 사이의 통신을 위한 클록의 제 2 주파수보다 높고,
    상기 제 1 주파수는 상기 제 2 주파수와 상기 복수의 채널의 개수의 곱에 대응하는 스토리지 장치.
KR1020170084233A 2017-07-03 2017-07-03 쓰기 데이터를 위해 할당될 물리 어드레스를 미리 관리하는 스토리지 장치 KR102398181B1 (ko)

Priority Applications (4)

Application Number Priority Date Filing Date Title
KR1020170084233A KR102398181B1 (ko) 2017-07-03 2017-07-03 쓰기 데이터를 위해 할당될 물리 어드레스를 미리 관리하는 스토리지 장치
US15/860,498 US10635349B2 (en) 2017-07-03 2018-01-02 Storage device previously managing physical address to be allocated for write data
DE102018110704.8A DE102018110704A1 (de) 2017-07-03 2018-05-04 Speicherungsvorrichtung für ein vorausgehendes Verwalten einer Schreibdaten zuzuweisenden physischen Adresse
CN201810620067.3A CN109213438B (zh) 2017-07-03 2018-06-15 预先管理待分配给写入数据的物理地址的存储装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020170084233A KR102398181B1 (ko) 2017-07-03 2017-07-03 쓰기 데이터를 위해 할당될 물리 어드레스를 미리 관리하는 스토리지 장치

Publications (2)

Publication Number Publication Date
KR20190004402A KR20190004402A (ko) 2019-01-14
KR102398181B1 true KR102398181B1 (ko) 2022-05-17

Family

ID=64662250

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020170084233A KR102398181B1 (ko) 2017-07-03 2017-07-03 쓰기 데이터를 위해 할당될 물리 어드레스를 미리 관리하는 스토리지 장치

Country Status (3)

Country Link
US (1) US10635349B2 (ko)
KR (1) KR102398181B1 (ko)
DE (1) DE102018110704A1 (ko)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10838805B2 (en) * 2018-02-23 2020-11-17 Micron Technology, Inc. Generating parity data based on a characteristic of a stream of data
US20210019069A1 (en) * 2019-10-21 2021-01-21 Intel Corporation Memory and storage pool interfaces
CN112965669B (zh) * 2021-04-02 2022-11-22 杭州华澜微电子股份有限公司 一种数据存储系统及方法

Family Cites Families (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2011154547A (ja) * 2010-01-27 2011-08-11 Toshiba Corp メモリ管理装置及びメモリ管理方法
JP5226722B2 (ja) * 2010-03-26 2013-07-03 株式会社バッファロー 記憶装置
EP2418584A1 (en) 2010-08-13 2012-02-15 Thomson Licensing Method and apparatus for storing at least two data streams into an array of memories, or for reading at least two data streams from an array of memories
DE202014105464U1 (de) 2014-11-13 2016-02-16 Kuka Systems Gmbh Halteeinrichtung
US20160283125A1 (en) 2015-03-25 2016-09-29 Kabushiki Kaisha Toshiba Multi-streamed solid state drive
US9760281B2 (en) 2015-03-27 2017-09-12 Intel Corporation Sequential write stream management
US9996302B2 (en) * 2015-04-03 2018-06-12 Toshiba Memory Corporation Storage device writing data on the basis of stream
US10013177B2 (en) 2015-04-20 2018-07-03 Hewlett Packard Enterprise Development Lp Low write amplification in solid state drive
KR20160144574A (ko) 2015-06-08 2016-12-19 삼성전자주식회사 불휘발성 메모리 모듈 및 그것의 데이터 쓰기 방법
KR102527961B1 (ko) 2015-07-02 2023-05-04 삼성전자주식회사 불휘발성 메모리 시스템 및 그것의 프로그램 방법
US20160357462A1 (en) 2015-06-08 2016-12-08 Samsung Electronics Co., Ltd. Nonvolatile Memory Modules and Data Management Methods Thereof
US9799402B2 (en) 2015-06-08 2017-10-24 Samsung Electronics Co., Ltd. Nonvolatile memory device and program method thereof
KR102397582B1 (ko) 2015-06-22 2022-05-13 삼성전자주식회사 데이터 저장 장치, 이를 포함하는 데이터 처리 시스템, 및 이의 작동 방법
US11461010B2 (en) 2015-07-13 2022-10-04 Samsung Electronics Co., Ltd. Data property-based data placement in a nonvolatile memory device
KR20170094815A (ko) 2016-02-11 2017-08-22 삼성전자주식회사 비휘발성 메모리, 그것을 포함하는 컴퓨팅 시스템, 및 그것의 읽기 방법

Also Published As

Publication number Publication date
US20190004736A1 (en) 2019-01-03
KR20190004402A (ko) 2019-01-14
US10635349B2 (en) 2020-04-28
DE102018110704A1 (de) 2019-01-03
CN109213438A (zh) 2019-01-15

Similar Documents

Publication Publication Date Title
US10789019B2 (en) Storage device capable of managing jobs without intervention of a processor
US9448745B2 (en) Configurable read-modify-write engine and method for operating the same in a solid state drive
US9454551B2 (en) System and method for management of garbage collection operation in a solid state drive
US9354822B2 (en) Programmable data read management system and method for operating the same in a solid state drive
US20170371585A1 (en) System and method for multi-stream data write
US9977734B2 (en) Information processing device, non-transitory computer readable recording medium, and information processing system
US11435943B2 (en) Storage device sharing attribute information with host device to use host memory buffer and electronic device including the same
KR102533072B1 (ko) 블록의 상태에 따라 사용 여부를 결정하는 메모리 시스템 및 메모리 시스템의 동작 방법
US11372564B2 (en) Apparatus and method for dynamically allocating data paths in response to resource usage in data processing system
US10102118B2 (en) Memory system and non-transitory computer readable recording medium
US9092362B1 (en) Programmable data write management system and method for operating the same in a solid state drive
US11645213B2 (en) Data processing system allocating memory area in host as extension of memory and operating method thereof
KR102398181B1 (ko) 쓰기 데이터를 위해 할당될 물리 어드레스를 미리 관리하는 스토리지 장치
US11157207B2 (en) Apparatus and method for engaging plural memory system with each other to store data
US20190146926A1 (en) Storage device and operating method of storage device
US20200089609A1 (en) Data storage system with write back cache
US11442628B2 (en) Apparatus and method for engaging a plurality of memory systems with each other
US11768628B2 (en) Information processing apparatus
CN109213438B (zh) 预先管理待分配给写入数据的物理地址的存储装置
WO2019021415A1 (ja) ストレージシステム及びデータ格納制御方法

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