KR20150028610A - 데이터 저장 장치 및 그것의 데이터 처리 방법 - Google Patents

데이터 저장 장치 및 그것의 데이터 처리 방법 Download PDF

Info

Publication number
KR20150028610A
KR20150028610A KR20130107454A KR20130107454A KR20150028610A KR 20150028610 A KR20150028610 A KR 20150028610A KR 20130107454 A KR20130107454 A KR 20130107454A KR 20130107454 A KR20130107454 A KR 20130107454A KR 20150028610 A KR20150028610 A KR 20150028610A
Authority
KR
South Korea
Prior art keywords
data
stream
write
read
host
Prior art date
Application number
KR20130107454A
Other languages
English (en)
Other versions
KR102074329B1 (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 KR1020130107454A priority Critical patent/KR102074329B1/ko
Priority to US14/310,292 priority patent/US10095613B2/en
Publication of KR20150028610A publication Critical patent/KR20150028610A/ko
Application granted granted Critical
Publication of KR102074329B1 publication Critical patent/KR102074329B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/023Free address space management
    • G06F12/0238Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory
    • G06F12/0246Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory in block erasable memory, e.g. flash memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0862Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with prefetch
    • 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
    • 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/72Details relating to flash memory management
    • G06F2212/7201Logical to physical mapping or translation of blocks or pages

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Human Computer Interaction (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Memory System Of A Hierarchy Structure (AREA)

Abstract

본 발명에 따른 호스트와 멀티-스트림 데이터를 교환하는 저장 장치는, 불휘발성 메모리 장치, 상기 불휘발성 메모리 장치에 저장될 데이터 또는 상기 불휘발성 메모리 장치로부터 독출된 데이터를 일시 저장하기 위한 버퍼 메모리, 그리고 상기 호스트로부터 상기 멀티-스트림 데이터 각각에 대해 세그먼트 단위로 접근 명령어를 수신하고, 상기 접근 명령어에 포함되는 멀티-스트림 인덱스를 참조하여 접근 요청된 세그먼트들을 연속된 스트림 데이터로 식별하여 상기 버퍼 메모리에 저장하는 스토리지 컨트롤러를 포함한다.

Description

데이터 저장 장치 및 그것의 데이터 처리 방법{STORAGE DEVICE AND DATA PORCESSING METHOD THEREOF}
본 발명은 반도체 메모리 장치에 관한 것으로, 좀 더 구체적으로는 데이터 저장 장치 및 그것의 데이터의 처리 방법에 관한 것이다.
플래시 메모리 장치는 컴퓨터, 스마트폰, PDA, 디지털 카메라, 캠코더, 보이스 리코더, MP3 플레이어, 휴대용 컴퓨터(Handheld PC)와 같은 정보 기기들의 음성 및 영상 데이터 저장 매체로서 널리 사용되고 있다. 그러나 플래시 메모리에 데이터를 기입하기 위해서는 소거 동작이 반드시 선행되어야 하며, 기입되는 데이터의 단위보다 삭제되는 데이터의 단위가 크다는 특징이 있다. 이러한 특징은 플래시 메모리가 보조기억장치로 사용되는 경우에도 일반 하드디스크용 파일 시스템(File System)을 그대로 활용하는 것을 저해하는 요인이 된다. 더불어, 이러한 특징은 플래시 메모리로의 연속적인(Sequential) 입출력 처리가 비연속적 입출력 처리보다 효율적임을 암시한다.
플래시 메모리 기반의 대용량 저장 장치의 대표적인 예로 솔리드 스테이트 드라이브(이하, SSD)가 있다. SSD의 폭발적인 수요 증가와 함께 그 용도는 다양하게 분화되고 있다. 예를 들면, 서버용 SSD, 클라이인트용 SSD, 데이터 센터용 SSD 등으로 용도가 세분화될 수 있다. SSD의 인터페이스는 이러한 각각의 용도에 따라 최적의 속도와 신뢰성을 제공할 수 있어야 한다. 이러한 요구를 충족하기 위해서 최적의 SSD 인터페이스로 SATA, PCIe, SAS 등이 적용되고 있다. 특히, 최근에는 PCIe 기반의 인터페이스의 후속으로 부각되는 NVMe가 최근에는 활발히 연구 및 적용되고 있는 실정이다.
SSD는 일반적으로 연속적인 접근 요청과 랜덤 접근 요청을 구분하여 처리한다. 하지만, SSD는 하나의 채널을 통해서 호스트와 통신한다. 따라서, 호스트(Host) 측에서 멀티 쓰레드 기반의 응용 프로그램에 의한 연속적인 입출력 요청이 전달되더라도, SSD는 스트림 데이터를 인식할 방법이 없다. 따라서, 연속 데이터라 하더라도, SSD 내부에서는 랜덤 데이터로 인식되어 랜덤 데이터로 처리될 가능성이 높다. 미디어 데이터가 SSD의 입출력 데이터들 중에서 차지하는 비중을 고려할 때, 이러한 멀티-스트림 데이터에 대한 효율적인 처리 방법이 절실한 실정이다.
본 발명의 목적은 저장 매체의 특성을 고려하여 스트림 데이터를 효과적으로 처리할 수 있는 솔리드 스테이트 드라이버 및 그것의 데이터 처리 방법을 제공하는 데 있다.
상기 목적을 달성하기 위한 본 발명에 따른 호스트와 멀티-스트림 데이터를 교환하는 저장 장치는, 불휘발성 메모리 장치, 상기 불휘발성 메모리 장치에 저장될 데이터 또는 상기 불휘발성 메모리 장치로부터 독출된 데이터를 일시 저장하기 위한 버퍼 메모리, 그리고 상기 호스트로부터 상기 멀티-스트림 데이터 각각에 대해 세그먼트 단위로 접근 명령어를 수신하고, 상기 접근 명령어에 포함되는 멀티-스트림 인덱스를 참조하여 접근 요청된 세그먼트들을 연속된 스트림 데이터로 식별하여 상기 버퍼 메모리에 저장하는 스토리지 컨트롤러를 포함한다.
상기 목적을 달성하기 위한 본 발명에 따른 솔리드 스테이트 드라이브(SSD)의 데이터 처리 방법은, 호스트로부터 세그먼트 데이터들에 대한 적어도 하나의 쓰기 명령어를 수신하는 단계, 상기 쓰기 명령어를 디코딩하여 상기 세그먼트 데이터들 각각에 할당된 멀티-스트림 인덱스를 검출하는 단계, 버퍼 메모리의 쓰기 버퍼 영역에 상기 멀티-스트림 인덱스에 따라 할당된 복수의 쓰기 스트림 유닛들에 상기 세그먼트 데이터를 버퍼링하는 단계, 그리고 상기 복수의 쓰기 스트림 유닛들 중에서 할당된 용량이 완충된 쓰기 스트림 유닛의 데이터를 대응하는 불휘발성 메모리 장치의 메모리 블록으로 연속 프로그램하는 단계를 포함한다.
상기 목적을 달성하기 위한 본 발명에 따른 불휘발성 메모리 장치, 버퍼 메모리를 포함하는 솔리드 스테이트 드라이브(SSD)의 데이터 처리 방법은, 호스트로부터 제 1 읽기 명령어를 수신하는 단계, 상기 제 1 읽기 명령어를 디코딩하여 읽기 요청된 제 1 세그먼트 데이터에 할당된 멀티-스트림 인덱스를 검출하는 단계, 상기 검출된 멀티-스트림 인덱스 및 어드레스를 참조하여 추후에 읽기 요청될 제 2 세그먼트 데이터를 예측하는 단계, 그리고 상기 예측된 제 2 세그먼트 데이터를 상기 불휘발성 메모리 장치로부터 독출하여 상기 버퍼 메모리의 프리패치 리소스 유닛에 프리패치하는 단계를 포함한다.
상기 목적을 달성하기 위한 사용자 장치는, 복수의 쓰레드에 의한 복수의 스트림 데이터에 대한 접근 요청들을 발행하고, 상기 접근 요청들의 발행시에 복수의 스트림 데이터 각각에 대해 서로 다른 멀티-스트림 인덱스를 제공하는 호스트, 그리고 상기 복수의 스트림 데이터 각각에 대해 복수의 세그먼트 단위로 접근 요청을 수신하고, 상기 접근 요청에 포함되는 멀티-스트림 인덱스를 참조하여 접근 요청된 세그먼트 데이터를 연속된 스트림 데이터로 식별하여 처리하는 솔리드 스테이트 드라이버를 포함한다.
이상과 같은 본 발명의 실시 예에 따르면, 스트림 데이터에 대한 입출력 요청에 효율적으로 대응할 수 있는 솔리드 스테이트 드라이버(SSD)를 제공할 수 있다.
도 1은 본 발명의 실시 예에 따른 사용자 장치를 보여주는 블록도이다.
도 2는 본 발명의 실시 예에 따른 호스트의 소프트웨어 계층 구조를 보여주는 블록도이다.
도 3은 본 발명의 멀티-스트림 데이터가 저장 장치에 전달되는 방식을 보여주는 도면이다.
도 4a 및 도 4b는 본 발명의 실시 예에 따른 명령어 포맷을 보여주는 표이다.
도 5는 도 1에 도시된 스토리지 컨트롤러를 보여주는 블록도이다.
도 6은 본 발명의 실시 예에 따른 버퍼 메모리의 관리 방법을 보여주는 도면이다.
도 7은 본 발명의 실시 예에 따른 저장 장치의 멀티-스트림 설정 방법을 보여주는 도면이다.
도 8은 본 발명의 실시 예에 따른 멀티-스트림 데이터의 쓰기 동작을 보여주는 도면이다.
도 9는 본 발명의 실시 예에 따른 프리패치 방법을 보여주는 도면이다.
도 10은 본 발명의 실시 예에 따른 프리패치 방법을 보여주는 순서도이다.
도 11은 본 발명의 실시 예에 따른 프리패치 방법의 다른 예를 보여주는 도면이다.
도 12는 본 발명의 실시 예에 따른 프리패치 방법의 다른 예를 보여주는 순서도이다.
도 13은 본 발명의 실시 예에 따른 멀티-스트림 데이터의 쓰기 방법을 보여주는 도면이다.
도 14는 본 발명의 실시 예에 따른 스트림 데이터의 쓰기 방법을 보여주는 도면이다.
도 15는 본 발명의 실시 예를 적용하는 솔리드 스테이트 드라이브(SSD) 시스템을 보여주는 블록도이다.
도 16은 본 발명의 실시 예에 따른 컴퓨팅 시스템을 보여주는 블록도이다.
앞의 일반적인 설명 및 다음의 상세한 설명 모두 예시적이라는 것이 이해되어야 하며, 청구된 발명의 부가적인 설명이 제공되는 것으로 여겨져야 한다. 참조 부호들이 본 발명의 바람직한 실시 예들에 상세히 표시되어 있으며, 그것의 예들이 참조 도면들에 표시되어 있다. 가능한 어떤 경우에도, 동일한 참조 번호들이 동일한 또는 유사한 부분을 참조하기 위해서 설명 및 도면들에 사용된다.
이하에서는, 플래시 메모리 장치를 사용하는 솔리드 스테이트 드라이버가 본 발명의 특징 및 기능을 설명하기 위한 예로서 사용될 것이다. 하지만, 이 기술 분야에 정통한 사람은 여기에 기재된 내용에 따라 본 발명의 다른 이점들 및 성능을 쉽게 이해할 수 있을 것이다. 본 발명은 다른 실시 예들을 통해 또한, 구현되거나 적용될 수 있을 것이다. 게다가, 상세한 설명은 본 발명의 범위, 기술적 사상 그리고 다른 목적으로부터 상당히 벗어나지 않고 관점 및 응용에 따라 수정되거나 변경될 수 있다.
도 1은 본 발명의 실시 예에 따른 사용자 장치를 간략히 보여주는 블록도이다. 도 1을 참조하면, 사용자 장치(User device)는 호스트(100)와 저장 장치(200)를 포함한다. 호스트(100)는 저장 장치(200)에 접근하기 위해 제공하는 명령어 셋에 멀티-스트림 인덱스(Multi-Stream Index: 이하, MSI)를 포함시킨다. 저장 장치(200)는 멀티-스트림 인덱스(MSI)를 참조하여 접근 요청된 데이터를 처리한다. 좀더 자세히 설명하면 다음과 같다.
호스트(100)는 저장 장치(200)에 데이터를 쓰거나, 저장 장치(200)에 저장된 데이터를 읽어낸다. 호스트(100)는 저장 장치(200)에 데이터를 기입하거나, 저장 장치(200)에 저장된 데이터를 독출하는 접근 명령어를 생성한다. 이때 호스트(100)는 연속적인 데이터(Sequential Data)에 대해서는 멀티-스트림 인덱스(MSI)를 포함하는 접근 명령어(CMD/MSI)를 저장 장치(200)로 전달한다. 여기서, 연속적인 데이터는 하나의 파일에 해당하는 미디어 데이터일 수 있다. 즉, 하나의 미디어 파일은 동일한 멀티-스트림 인덱스(MSI)를 갖는 복수의 세그먼트 단위로 저장 장치(200)에 쓰기 요청될 수 있다. 그러면, 저장 장치(200)는 멀티-스트림 인덱스(MSI)를 참조하여 서로 다른 시간에 제공되는 세그먼트들이라 할지라도 동일한 스트림 데이터로 처리할 수 있을 것이다.
이러한 명령어 셋의 구성을 위해 호스트(100)는 워킹 메모리(110), 인터페이스 회로(120), 그리고 프로세싱 유닛(130)을 포함할 수 있다. 워킹 메모리(110)에는 응용 프로그램, 파일 시스템, 장치 드라이버 등이 로드될 수 있다. 이 밖에도 워킹 메모리에는 호스트(100)가 구동되기 위한 다양한 소프트웨어 프로그램들이 로드될 것이다.
인터페이스 회로(120)는 호스트(100)와 저장 장치(200) 사이에서 물리적인 연결을 제공한다. 즉, 인터페이스 회로(120)는 호스트(100)에서 발행하는 다양한 접근 요청에 대응하는 명령어, 어드레스, 데이터 등을 저장 장치(200)와의 인터페이싱 방식으로 변환한다. 인터페이스 회로(120)의 인터페이싱 방식으로는 USB(Universal Serial Bus), SCSI(Small Computer System Interface), PCI express, ATA, PATA(Parallel ATA), SATA(Serial ATA), SAS(Serial Attached SCSI), NVMe 중 적어도 어느 하나일 수 있다.
프로세싱 유닛(130)은 호스트(100)에서 수행될 소프트웨어(응용 프로그램, 운영 체제, 장치 드라이버)를 실행한다. 프로세싱 유닛(130)은 워킹 메모리(110)에 로드되는 운영 체제(OS)를 실행할 것이다. 프로세싱 유닛(130)은 운영 체제(OS) 기반에서 구동될 다양한 응용 프로그램들(Application Program)을 실행할 것이다. 프로세싱 유닛(130)은 동종 멀티-코어 프로세서(Homogeneous Multi-Core Processor) 또는 이종 멀티-코어 프로세서(Heterogeneous Multi-Core Processor)로 제공될 수 있다.
프로세싱 유닛(130)에서 실행되는 복수의 응용 프로그램들 각각은 적어도 하나의 쓰레드(Thread)를 실행할 것이다. 그리고 쓰레드는 미디어 파일과 같은 스트림 데이터를 생성할 수 있다. 복수의 쓰레드의 실행에 따라 멀티-스트림 데이터가 저장 장치(200)로 쓰기 요청될 수 있다. 저장 장치(200) 내에서 스트림 데이터들 각각은 하나의 연속적인 데이터로 관리되는 것이 바람직하다. 따라서, 쓰기 요청되는 스트림 데이터들은 쓰레드 단위로 멀티-스트림 인덱스(MSI)를 할당받을 수 있다. 할당받은 멀티-스트림 인덱스(MSI)는 인터페이스 회로(120)에서 생성되는 명령어 셋에 부가될 것이다.
저장 장치(200)는 호스트(100)로부터 제공되는 멀티-스트림 인덱스(MSI)를 참조하여 쓰기 요청된 데이터 또는 읽기 요청된 데이터의 세그먼트들을 블록 단위 또는 특정 데이터 단위로 관리한다. 예를 들면, 동일한 멀티-스트림 인덱스(MSI)에 의해서 지정된 쓰기 데이터의 세그먼트들은 메모리 블록 사이즈로 버퍼링될 수 있다. 그리고 저장 장치(200)는 동일한 멀티-스트림 인덱스(MSI)를 갖는 읽기 요청에 대해서 예상되는 메모리 영역을 미리 프리패치하여 버퍼 메모리(220)에 저장할 수 있다. 이후에 제공되는 읽기 요청된 데이터가 동일한 멀티-스트림 인덱스(MSI)를 가지며, 프리패치된 데이터와 일치(Hit)하는 경우, 프리패치된 데이터가 호스트(100)에 전달될 것이다.
이러한 멀티-스트림 인덱스(MSI)에 근거한 접근 제어를 위해서 저장 장치(200)는 스토리지 컨트롤러(210), 버퍼 메모리(220), 그리고 복수의 플래시 메모리 장치(230, 240, 250)를 포함한다.
스토리지 컨트롤러(210)는 호스트와 저장 장치(200) 사이에서 인터페이싱을 제공한다. 스토리지 컨트롤러(210)는 호스트(100)로부터 제공되는 명령어 셋에 포함되는 멀티-스트림 인덱스(MSI)를 참조하여 플래시 메모리 장치(230, 240, 250)를 액세스한다. 스토리지 컨트롤러(210)는 멀티-스트림 인덱스(MSI)를 참조하여, 버퍼 메모리(220)에 구성되는 스트림 단위를 구성한다. 그리고 스토리지 컨트롤러(210)는 스트림 단위로 쓰기 요청되는 데이터를 버퍼링할 것이다. 또한, 읽기 요청에 포함되는 멀티-스트림 인덱스(MSI)를 참조하여 스토리지 컨트롤러(210)는 스트림 단위로 할당된 버퍼 영역으로 플래시 메모리 장치(230, 240, 250)로부터 미리 예측된 데이터를 프리패치(Prefetch)하여 저장할 수 있다.
이상의 본 발명의 실시 예에 따르면, 호스트(100)는 명령어에 멀티-스트림 인덱스(MSI)를 포함시켜 저장 장치(200)에 전달한다. 그러면 저장 장치(200)는 멀티-스트림 인덱스(MSI)를 참조하여 버퍼 메모리(220)에 스트림 단위의 데이터 영역을 할당하고 관리할 수 있다. 만일, 쓰기 요청된 스트림 데이터가 스트림 단위로 관리되는 쓰기 버퍼 영역에 가득찬 경우, 스토리지 컨트롤러(210)는 대응하는 스트림 데이터를 플래시 메모리 장치(230, 240, 250)의 지정된 메모리 블록에 연속적으로 프로그램할 것이다. 이러한 스트림 데이터의 처리를 통해서 멀티-스트림 방식으로 제공되는 데이터에 대한 효율적인 읽기 및 쓰기가 가능하다.
도 2는 본 발명의 실시 예에 따른 호스트의 소프트웨어 계층을 간략히 보여주는 블록도이다. 도 2를 참조하면, 워킹 메모리(110)에 로드되고 프로세싱 유닛(130)에 의해서 구동되는 호스트(100)의 소프트웨어는 간략히 응용 프로그램(111), 파일 시스템(113), 그리고 장치 드라이버(115)로 구분될 수 있다. 여기서, 파일 시스템(113) 및 장치 드라이버(115)는 운영 체제(OS)의 커널(Kernel)에 포함될 수 있을 것이다.
응용 프로그램(111)은 기본적인 서비스로서 구동되거나, 사용자의 요청에 의해서 구동되는 상위 계층의 소프트웨어이다. 다양한 서비스를 제공하기 위하여 동시에 복수의 응용 프로그램들(APP1, APP2, APP3, APP4)이 실행될 수 있다. 실행되는 응용 프로그램들(APP1, APP2, APP3, APP4)은 워킹 메모리(110)에 로드된 후에 프로세싱 유닛(130)에 의해서 실행될 것이다. 예를 들면, 사용자에 의해서 동영상 파일의 재생이 요청되면, 동영상을 재생하기 위한 응용 프로그램(비디오 플레이어)이 실행된다. 그러면, 실행된 응용 프로그램은 사용자가 요청한 동영상 파일을 재생하기 위한 저장 장치(200)로의 읽기 요청(Read request) 또는 쓰기 요청(Write request)을 생성할 것이다. 이 경우, 해당 응용 프로그램에 의해서 수행되는 쓰기 동작에 대응하는 쓰레드(Thread)가 발생하게 될 것이다. 하나의 쓰레드는 하나의 파일에 대응하는 스트림 데이터를 저장 장치(200)로 기입하기 위한 요청을 발생할 수 있다. 그리고 하나의 파일에 대응하는 스트림 데이터는 복수의 세그먼트로 분할되어 저장 장치(200)에 쓰기 요청될 것이다.
복수의 미디어 파일에 대한 쓰기 요청이 발생하면, 복수의 쓰레드들(THR1, THR2, THR3, THR4) 각각에 의한 스트림 데이터를 저장 장치(200)에 기입하기 위한 쓰기 요청을 발행하게 된다. 이 경우, 본 발명의 응용 프로그램들(111) 각각은 대응하는 쓰기 요청에 대해서 멀티-스트림 인덱스(Multi-Stream Index: MSI)를 지정할 것이다. 즉, 쓰레드(THR1)에 의해서 발생하는 파일에 대해서는 제 1 멀티-스트림 인덱스(MSI=1)를 할당할 수 있다. 그리고 쓰레드(THR1)에 의해서 발생하는 파일은 복수의 세그먼트 단위로 저장 장치(200)에 전달될 것이다. 이러한 쓰레드들(THR1, THR2, THR3, THR4) 각각에 의해서 생성되는 복수의 스트림 데이터를 멀티-스트림 데이터라 칭하기로 한다.
파일 시스템(113)은 운영 체제에 대응하는 파일 포맷으로 데이터를 관리한다. 예를 들면, 파일 시스템(113)은 응용 프로그램들(111)의 요청에 따라 쓰기 요청된 미디어 파일들에 대한 파일명이나 확장자, 파일 속성, 파일 크기, 클러스터 정보 등을 할당하게 될 것이다. 그리고 파일 시스템(113)은 저장 장치(200)로의 읽기나 쓰기 요청에 대해 파일 단위로 데이터를 처리하도록 호스트(100)의 제반 접근 동작을 지원한다. 파일 시스템(113)은 자료를 계층적으로 저장, 탐색, 접근, 조작하기 위한 추상적 자료구조의 집합을 말한다. 예를 들면, 개인용 컴퓨터(PC)를 구동하는 마이크로소프트 윈도즈(Microsoft Windows)는 FAT(File allocation table) 또는 NTFS(NT file system)를 파일 시스템(113)으로 사용한다. 파일 시스템(113)에 의해서 파일 단위의 데이터가 생성되거나 삭제 및 관리될 수 있다.
장치 드라이버(115)는 저장 장치(200)를 운영 체제(OS) 레벨에서 제어하기 위한 제어 모듈이다. 사용자에 의해서 또는 응용 프로그램(111)으로부터 메모리 접근 요청이 발생하면, 장치 드라이버(115)가 호출된다. 장치 드라이버(115)는 저장 장치(200)를 제어하기 위한 커널(Kernel)의 소프트웨어 모듈로 제공될 수 있다.
이상에서는 응용 프로그램들(111)에 의한 멀티-스트림 데이터의 생성과 저장 장치(200)로의 접근 요청의 예가 간략히 설명되었다. 하지만, 멀티-스트림 데이터의 쓰기나 읽기 요청의 발행은 상술한 예들에만 국한되지 않음은 잘 이해될 것이다.
도 3은 본 발명의 쓰기 요청된 멀티-스트림 데이터가 저장 장치에 전달되는 방식을 보여주는 도면이다. 도 3을 참조하면, 호스트(100)와 저장 장치(200) 사이에는 하나의 채널(150)만이 존재한다. 따라서, 멀티-스트림 데이터가 동시에 저장 장치(200)에 전달되기는 어렵다. 하나의 채널을 통해서 하나의 스트림 데이터는 복수의 세그먼트 단위로 저장 장치(200)에 쓰기 요청된다. 그리고 복수의 스트림 데이터가 쓰기 요청되는 경우, 세그먼트들 각각의 쓰기 명령어에는 멀티-스트림 인덱스(MSI)가 포함된다.
호스트(100)에서 구동되는 응용 프로그램들(111)에 의해서 실행되는 복수의 쓰레드(Thread)에 의해서 4개의 스트림 데이터에 대한 쓰기 요청이 발생하는 것으로 가정하기로 한다. 여기서, 하나의 응용 프로그램은 2개 또는 그 이상의 쓰레드(Thread)를 실행할 수도 있음은 잘 이해될 것이다. 제 1 쓰레드(THR1)의 실행에 따라 제 1 스트림 데이터(Stream_1)에 대한 쓰기 요청이 발생할 수 있다. 그러면, 응용 프로그램은 제 1 스트림 데이터(Stream_1)에 해당하는 세그먼트들에 대해 멀티-스트림 인덱스(MSI=1)를 할당할 것이다. 만일, 생성된 데이터가 스트림 데이터가 아닌 경우, 멀티-스트림 인덱스(MSI)는 부여되지 않는다. 이와 같은 방식으로 제 2 쓰레드(THR2)에 의해서 생성되는 제 2 스트림 데이터(Stream_2)에는 멀티-스트림 인덱스(MSI=2)가 할당될 것이다. 그리고 제 3 쓰레드(THR3)에 의해서 생성되는 제 3 스트림 데이터(Stream_3)에는 멀티-스트림 인덱스(MSI=3)가 할당될 것이다. 제 4 쓰레드(THR4)에 의해서 생성되는 제 4 스트림 데이터(Stream_4)에는 멀티-스트림 인덱스(MSI=4)가 할당될 것이다.
제 1 내지 제 4 스트림 데이터(Stream_1, Stream_2, Stream_3, Stream_4)에 대한 쓰기 요청들이 발생하면, 커널 또는 파일 시스템(113) 레벨에서 구동되는 입출력 스케줄러(I/O Scheduler, 미도시됨)에 의해서 쓰기 요청들의 순서가 재배열된다. 여기서, 재배열 순서는 실시간 처리를 요구하는 데이터를 우선적으로 전송하는 방식으로 처리될 수 있다. 그리고 재배열된 순서에 따라 제 1 내지 제 4 스트림 데이터(Stream_1, Stream_2, Stream_3, Stream_4)들 각각은 저장 장치(200)에 전달되기 위해서 복수의 세그먼트들로 분할된다. 세그먼트들은 각각 저장 장치(200)와의 트랜잭션 단위에 대응할 수 있다. 제 1 내지 제 4 스트림 데이터들(Stream_1, Stream_2, Stream_3, Stream_4) 각각은 세그먼트들로 분리되어 인터페이스 회로(120)에 전달된다. 인터페이스 회로(120)는 쓰기 요청되는 데이터를 세그먼트들 단위로 저장 장치(200)로 전달한다. 이때, 하나의 세그먼트를 저장 장치(200)에 쓰기 요청하기 위해서 쓰기 명령어, 어드레스(LBA), 섹터 카운트(nSC) 등이 전달될 것이다. 특히, 본 발명의 실시 예에 따르면, 호스트(100)는 각각의 세그먼트 단위들에 대응하는 명령어에 멀티-스트림 인덱스(MSI)를 포함한다.
도시된 바와 같이, 제 1 스트림 데이터(빗금친 데이터)에 대한 쓰기 명령어에는 멀티-스트림 인덱스(MSI=1)가 할당되어 저장 장치(200)에 전달된다. 제 2 스트림 데이터(백색 데이터)에 대한 쓰기 명령어에는 멀티-스트림 인덱스(MSI=2)가 할당되어 저장 장치(200)에 전달된다. 제 3 스트림 데이터(이중 해칭된 데이터)에 대한 쓰기 명령어에는 멀티-스트림 인덱스(MSI=3)가 할당되어 저장 장치(200)에 전달된다. 제 4 스트림 데이터(회색 데이터)에 대한 쓰기 명령어에는 멀티-스트림 인덱스(MSI=4)가 할당되어 저장 장치(200)에 전달된다. 하나의 채널(150)을 통해서 직렬적으로 멀티-스트림 데이터들 각각의 세그먼트들이 저장 장치(200)에 전달된다. 여기서, 설명을 위해서 멀티-스트림 데이터들이 멀티-스트림 인덱스(MSI)의 증가순으로 순차적으로 전달되는 것으로 설명하였다. 하지만, 실제로는 다양한 우선 순위에 따라 특정 순서로 전달될 수 있음은 잘 이해될 것이다.
이상의 저장 장치(200)로 전달되는 스트림 데이터는 세그먼트들 각각에 대응하는 멀티-스트림 인덱스(MSI)를 부여받는다. 저장 장치(200)는 멀티-스트림 인덱스(MSI)를 참조하여 전달된 세그먼트 데이터가 스트림 데이터인지 랜덤 데이터인지를 식별할 수 있다. 더불어, 저장 장치(200)는 접근 요청된 데이터를 멀티-스트림 인덱스(MSI) 단위로 관리할 수 있다. 따라서, 연속 읽기 또는 연속 쓰기 성능의 향상을 기대할 수 있다.
도 4a 및 도 4b는 본 발명의 실시 예에 따른 명령어 포맷을 간략히 보여주는 표이다. 도 4a는 멀티-스트림 인덱스(MSI)를 포함하는 읽기 명령어를, 도 4b는 멀티-스트림 인덱스(MSI)를 포함하는 쓰기 명령어를 보여주는 표이다. 여기서, 명령어 포맷은 레지스터 레벨 인터페이스인 NVM Express(NVMe) 인터페이스를 예시로 설명될 것이다. 명령어 비트가 32-비트이고 바이트 단위로 구분하여 도시하였다. 하지만, 이러한 도시는 설명의 편의를 위한 예시에 불과함은 잘 이해될 것이다.
도 4a를 참조하면, 읽기 명령어(Read CMD)는 예시적으로 32-비트 크기로 제공될 수 있다. 제 1 바이트(Byte_0)에 주요 정보들이 집중적으로 배치된다. 먼저, 제 1 바이트(Byte_0)의 비트들(Bit0 ~ Bit3)에는 접근 요청된 어드레스(LBA) 범위의 메모리 영역에 대한 접근 빈도(Access frequency)를 나타낸다. 즉, 비트들(Bit0 ~ Bit3)에는 접근 요청된 어드레스(LBA) 영역에 대한 쓰기 요청의 빈도 또는 읽기 요청의 빈도에 대한 정보가 포함될 수 있다.
읽기 명령어(Read CMD)의 제 1 바이트(Byte_0)의 비트들(Bit4 ~ Bit5)에는 접근 레이턴시(Access Latency) 정보가 포함된다. 비트들(Bit4 ~ Bit5)의 논리값에 따라 접근 요청된 데이터에 대한 접근 레이턴시의 크기가 정의된다. 즉, 접근 레이턴시(Access Latency) 정보는 레이턴시를 최소화하여 접근해야 하는지, 또는 상대적으로 큰 레이턴시가 허용되는지를 정의한다.
읽기 명령어(Read CMD)의 제 1 바이트(Byte_0)의 비트(Bit6)에는 읽기 요청되는 명령어가 연속되는 읽기 명령어 셋트들 중 하나임을 나타낸다. 즉, 비트(Bit6)의 논리가 '1'인 경우, 해당 읽기 명령어는 연속적으로 제공되는 명령어들 중 하나임을 나타낸다. 반면, 비트(Bit6)의 논리가 '0'인 경우, 해당 읽기 명령어에 대한 연속성 정보가 존재하지 않음을 의미할 수 있다.
읽기 명령어(Read CMD)의 제 1 바이트(Byte_0)의 비트(Bit7)에는 읽기 요청되는 데이터가 압축된 데이터인지를 나타낸다. 즉, 비트(Bit7)의 논리가 '1'인 경우, 읽기 요청되는 어드레스(LBA)의 데이터가 압축되지 않은 데이터임을 나타낼 수 있다. 반면, 비트(Bit7)의 논리가 '0'인 경우, 읽기 요청되는 어드레스(LBA)의 데이터에 대한 압축 정보는 존재하지 않음을 나타낸다.
본 발명의 멀티-스트림 인덱스(Multi-Stream Index: MSI)는 제 2 바이트(Byte_1)에 포함될 수 있다. 하지만, 멀티-스트림 인덱스(Multi-Stream Index: MSI)는 예비용으로 제공되는 제 3 바이트(Byte_2) 또는 제 4 바이트(Byte_3) 중 어느 하나에 제공되더라도 상관없다. 읽기 명령어의 제 2 바이트(Byte_1)에 읽기 요청되는 데이터의 멀티-스트림 인덱스(MSI)가 저장된다. 예를 들면, 읽기 요청되는 데이터가 멀티-스트림 데이터 중에서 제 2 스트림에 대응하는 경우, 멀티-스트림 인덱스(MSI)는 '2'로 설정될 것이다. 저장 장치(200)는 읽기 명령어의 멀티-스트림 인덱스(MSI)를 참조하여 플래시 메모리 장치(230, 240, 250)로부터 추후 읽기 요청되는 데이터를 프리패치하게 될 것이다.
도 4b는 쓰기 명령어 포맷을 간략히 보여주는 표이다. 도 4b를 참조하면, 쓰기 명령어(Write CMD)는 읽기 명령어(Read CMD)와 거의 동일한 비트 배열을 가질 수 있다. 즉, 쓰기 명령어(Write CMD)의 제 1 바이트(Byte_0)의 비트들(Bit0 ~ Bit3)에는 쓰기 요청된 어드레스(LBA)에 대응하는 접근 빈도(Access frequency) 정보가, 그리고 비트들(Bit4 ~ Bit5)에는 접근 레이턴시(Access Latency) 정보가 포함될 수 있다. 그리고 쓰기 명령어(Write CMD)의 제 1 바이트(Byte_0)의 비트들(Bit4 ~ Bit5)에는 쓰기 요청된 데이터에 대한 접근 레이턴시 정보가 포함될 수 있다. 쓰기 명령어(Write CMD)의 제 1 바이트(Byte_0)의 비트(Bit6)에는 쓰기 요청되는 명령어가 연속되는 쓰기 명령어의 일부인지에 대한 정보가 포함된다. 쓰기 명령어(Write CMD)의 제 1 바이트(Byte_0)의 비트(Bit7)에는 쓰기 요청되는 데이터의 압축 정보가 포함될 수 있다.
본 발명의 쓰기 명령어(Write CMD)에 포함되는 멀티-스트림 인덱스(Multi-Stream Index: MSI)는 제 2 바이트(Byte_1)에 포함될 수 있다. 하지만, 멀티-스트림 인덱스(Multi-Stream Index: MSI)는 예비용으로 제공되는 제 3 바이트(Byte_2) 또는 제 4 바이트(Byte_3) 중 어느 하나에 제공되더라도 상관없다. 쓰기 명령어(Write CMD)의 제 2 바이트(Byte_1)에 쓰기 요청되는 데이터의 멀티-스트림 인덱스(MSI)가 저장된다. 예를 들면, 쓰기 요청되는 데이터가 멀티-스트림 데이터 중에서 제 2 스트림에 대응하는 경우, 멀티-스트림 인덱스(MSI)는 '2'로 설정될 것이다. 저장 장치(200)는 쓰기 명령어의 멀티-스트림 인덱스(MSI)를 참조하여 버퍼 메모리(220, 도 1 참조)에 구비되는 제 2 쓰기 스트림 유닛(W_Srteam_Unit_2)에 쓰기 요청된 세그먼트 데이터를 일시 저장할 것이다. 그리고 저장 장치(200)는 제 2 쓰기 스트림 유닛(W_Srteam_Unit_2)에 하나의 메모리 블록 단위의 데이터로 채워지면, 플래시 메모리 장치의 메모리 블록으로 프로그램할 것이다.
도 5는 도 1에 도시된 스토리지 컨트롤러(210)의 구성을 예시적으로 보여주는 블록도이다. 도 5를 참조하면, 본 발명의 스토리지 컨트롤러(210)는 중앙처리장치(211), 호스트 인터페이스(213), 버퍼 매니저(215) 및 플래시 인터페이스(217)를 포함한다.
중앙처리장치(211)는 읽기/쓰기 동작에 필요한 다양한 제어 정보를 호스트 및 플래시 인터페이스(217)의 레지스터들에 전달한다. 예를 들면, 호스트(100)로부터 명령어가 입력되면 호스트 인터페이스(213)의 명령어 레지스터(214)에 저장된다. 호스트 인터페이스(213)는 저장된 명령에 따라 중앙처리장치(211)에 읽기/쓰기 명령이 입력되었음을 알려준다. 이러한 동작은 중앙처리장치(211)와 플래시 인터페이스(217) 사이에서도 발생한다. 중앙처리장치(211)는 저장 장치(200)를 구동하기 위한 펌웨어(Firm ware)에 따라서 각각의 구성들을 제어한다.
호스트 인터페이스(213)는 호스트(100)와 저장 장치(200)와의 물리적 연결을 제공한다. 즉, 호스트 인터페이스(213)는 호스트의 버스 포맷(Bus format)에 대응하여 저장 장치(200)와의 인터페이싱을 제공한다. 호스트(100)의 버스 포맷은 USB(Universal Serial Bus), SCSI(Small Computer System Interface), PCI express, ATA, PATA(Parallel ATA), SATA(Serial ATA), SAS(Serial Attached SCSI), NVMe 중 적어도 하나로 구성될 수 있다.
명령어 레지스터(214)에는 호스트(100)로부터 전달되는 명령어가 저장된다. 앞서 설명된 읽기 명령어(Read CMD), 쓰기 명령어(Write CMD)를 위시한 다양한 명령어들이 호스트(100)에 의한 명령어 레지스터(214)로의 쓰기 동작을 통해서 제공된다. 본 발명의 실시 예에 따라, 명령어 레지스터(214)에 기입되는 읽기 명령어(Read CMD) 또는 쓰기 명령어(Write CMD)에는 멀티-스트림 인덱스(MSI)가 포함된다. 그리고 명령어 레지스터(214)에 저장되는 멀티-스트림 인덱스(MSI)의 값을 참조하여 중앙처리장치(211)는 버퍼 매니저(215) 또는 플래시 인터페이스(217)를 제어할 것이다.
버퍼 매니저(215)는 버퍼 메모리(220, 도 1 참조)의 읽기 및 쓰기 동작들을 제어한다. 예를 들면, 버퍼 매니저(215)는 쓰기 데이터(Write data)나 읽기 데이터(Read data)를 버퍼 메모리(220)에 일시 저장한다. 버퍼 매니저(215)는 중앙처리장치(211)의 제어에 따라 버퍼 메모리(220)의 메모리 영역을 스트림 단위로 구분하여 관리할 수 있다. 예를 들면, 최대 4개의 멀티-스트림을 지원하도록 저장 장치(200)가 설정되면, 버퍼 매니저(215)는 4개의 쓰기 스트림 유닛들로 쓰기 버퍼 영역을 관리하게 될 것이다. 최대 4개의 멀티-스트림을 지원하도록 저장 장치(200)가 설정되면, 버퍼 매니저(215)는 4개의 프리패치 리소스 유닛(Prefetch Resource Unit)들로 읽기 버퍼 영역을 관리하게 될 것이다. 프리패치 리소스 유닛(Prefetch Resource Unit)과 쓰기 스트림 유닛(Write Stream Unit)은 후술하는 도 6에서 상세하게 설명될 것이다.
플래시 인터페이스(217)는 플래시 메모리 장치(230, 240, 250)와 데이터를 교환한다. 플래시 인터페이스(217)는 버퍼 메모리(220)로부터 전달되는 데이터를 각각의 메모리 채널들(CH1, CH2,…, CHn)을 경유하여 플래시 메모리 장치(230, 240, 250)에 기입한다. 그리고 메모리 채널을 통하여 제공되는 플래시 메모리 장치(230, 240, 250)로부터의 읽기 데이터(Read data)는 플래시 인터페이스(217)에 의해서 취합된다. 취합된 데이터는 이후 버퍼 메모리(220)에 저장될 것이다.
이상에서 설명된 스토리지 컨트롤러(210)에 따르면, 명령어 레지스터(214)에 저장되는 멀티-스트림 인덱스(MSI)에 따라 접근 요청된 데이터가 관리된다. 즉, 버퍼 메모리(220)에 할당되는 쓰기 버퍼 영역과 읽기 버퍼 영역은 호스트(100)의 설정에 따라 멀티-스트림 단위로 관리될 것이다.
도 6은 본 발명의 실시 예에 따른 버퍼 메모리의 관리 방법을 보여주는 도면이다. 도 6을 참조하면, 버퍼 메모리(220)의 쓰기 버퍼 영역과 읽기 버퍼 영역은 스트림 단위로 관리될 수 있다. 예를 들면, 4개의 멀티-스트림을 지원하도록 저장 장치(200)가 설정되면, 버퍼 메모리(220)의 쓰기 버퍼 영역 및 읽기 버퍼 영역은 각각 4개의 단위들로 구분되어 관리될 수 있다.
쓰기 버퍼 영역(Write Buffer)은 4개의 쓰기 스트림 유닛들(221, 222, 223, 224)로 관리될 수 있다. 여기서, 쓰기 스트림 유닛들(221, 222, 223, 224) 각각의 메모리 사이즈는 대응하는 플래시 메모리 장치의 물리 블록들과 동일하게 할당될 수 있다. 하지만, 쓰기 스트림 유닛들(221, 222, 223, 224) 각각의 용량은 플래시 메모리 장치의 물리 블록 사이즈보다 크거나 작게 할당될 수도 있음은 잘 이해될 것이다.
제 1 쓰기 스트림 유닛(221)에는 호스트(100)로부터 멀티-스트림 인덱스(MSI=1)에 대응하는 데이터가 버퍼링된다. 호스트(100)로부터 쓰기 요청되는 제 1 스트림(Stream_1)의 세그먼트 데이터들 각각의 쓰기 명령어에는 멀티-스트림 인덱스(MSI=1)를 포함할 것이다. 스토리지 컨트롤러(210)는 멀티-스트림 인덱스(MSI=1)에 대응하는 세그먼트 데이터를 제 1 쓰기 스트림 유닛(221)에 순차적으로 저장할 것이다. 만일, 버퍼링되는 제 1 쓰기 스트림 유닛(221)이 완충(Full)되면, 스토리지 컨트롤러(210)는 제 1 쓰기 스트림 유닛(221)에 저장된 데이터를 예비된 메모리 블록(231)에 연속적으로 프로그램할 것이다. 즉, 제 1 쓰기 스트림 유닛(221)이 완충(Full)되면, 버퍼링된 데이터는 플래시 메모리 장치의 메모리 블록으로 플러쉬(Flush)된다. 플러쉬 이후에, 제 1 쓰기 스트림 유닛(221)은 리셋된다. 그리고 제 1 쓰기 스트림 유닛(221)은 멀티-스트림 인덱스(MSI=1)에 대응하는 데이터를 추가적으로 버퍼링할 수 있다.
제 2 쓰기 스트림 유닛(222), 제 3 쓰기 스트림 유닛(223), 그리고 제 4 쓰기 스트림 유닛(224)도 제 1 쓰기 스트림 유닛(221)과 동일한 방식으로 관리될 것이다. 각각 플래시 메모리 장치의 지정된 메모리 블록들(232, 233, 234)에 완충된 스트림 데이터를 연속적으로 프로그램하고 새로운 메모리 블록을 할당받을 수 있다.
읽기 버퍼 영역(Read Buffer)은 4개의 프리패치 소스 유닛들(225, 226, 227, 228)로 관리될 수 있다. 여기서, 프리패치 소스 유닛들(225, 226, 227, 228) 각각의 메모리 사이즈는 특정 크기에 제한될 필요는 없다. 예를 들면, 복수의 섹터 단위로, 또는 하나의 메모리 블록 사이즈로도 관리될 수 있을 것이다. 프리패치 소스 유닛들(225, 226, 227, 228) 각각에는 읽기 명령어에 포함되는 멀티-스트림 인덱스(MSI)에 따라 대응하는 논리 어드레스 영역의 데이터가 예측되고 미리 프리패치된다. 후속하는 읽기 명령어의 논리 어드레스와 예측된 논리 어드레스가 매칭되는 경우에는 프리패치된 데이터가 호스트(100)로 전송될 것이다. 반면, 프리패치된 데이터의 논리 어드레스와 후속하는 읽기 명령어에 논리 어드레스가 일치하지 않는 경우, 프리패치된 데이터는 버려지게 될 것이다.
이상에서, 설명을 위해서 예시적으로 4개의 멀티-스트림을 지원하도록 저장 장치(200)가 설정되는 경우를 설명하였다. 그러나 버퍼 메모리(220)의 쓰기 버퍼 영역 및 읽기 버퍼 영역은 각각 호스트(100)의 지정에 따라 다양한 수의 멀티-스트림 단위로 구분되어 관리될 수 있다.
도 7은 본 발명의 실시 예에 따른 저장 장치의 멀티-스트림 설정 방법을 보여주는 도면이다. 도 7을 참조하면, 접근 동작을 수행하기 이전에 호스트(100)는 저장 장치(200)의 멀티-스트림 처리 환경을 설정할 것이다.
S1 단계에서 호스트(100)는 저장 장치(200)로 ID 읽기 요청을 전송한다. 저장 장치(100)의 ID 정보에는 호스트(100)의 접근 요청에 대해서 처리할 수 있는 최대 스트림의 갯수 정보가 포함될 것이다. 이밖에도 저장 장치(200)의 ID 정보에는 공급자 특정 기능(Vendor Specific Feature)을 지원하기 위한 데이터, 채널의 대역폭이나 DC 레벨 정보 등이 더 포함될 수 있을 것이다.
S2 단계에서, 호스트(100)의 ID 읽기 요청에 응답하여 저장 장치(200)는 ID 정보를 호스트(100) 측으로 전송할 것이다. 이때, 본 발명의 실시 예에 따른 저장 장치(200)는 처리 가능한 최대 스트림(Maximum capable stream)의 갯수 정보를 호스트(100)로 전달할 것이다.
S3 단계에서, 저장 장치(200)의 ID 정보 전송에 응답하여 호스트(100)는 저장 장치(200)의 읽기 버퍼 또는 쓰기 버퍼에서 관리될 멀티-스트림의 갯수를 지정한다. 이때, 저장 장치(200)의 특성에 따라 멀티-스트림을 처리하기 위한 스트림 갯수가 결정될 것이다. 이러한 스트림의 갯수 지정은 저장 장치(200)의 성능, 특성이나 자원들을 참조하여 호스트(100)에서 결정될 것이다.
S4 단계에서, 저장 장치(200)는 버퍼 메모리(220)의 쓰기 버퍼 영역 또는 읽기 버퍼 영역을 결정된 스트림 수에 대응하는 단위로 구분한다. 즉, 저장 장치(200)는 버퍼 메모리(220)의 쓰기 버퍼 영역을 복수의 쓰기 스트림 유닛(Write Stream Unit)로 구분할 것이다. 그리고 각각의 쓰기 스트림 유닛들에 대응하는 플래시 메모리 장치(230~250)의 메모리 블록을 할당할 것이다. 더불어, 저장 장치(200)는 버퍼 메모리(220)의 읽기 버퍼 영역을 복수의 프리패치 리스스 유닛(Prefetch Resource Unit)으로 구분할 것이다. 이러한 버퍼 메모리(220) 설정은 앞서 설명된 도 6의 설명에 따라 수행될 것이다.
이상에서 설명된 저장 장치(200)의 멀티-스트림 설정은 호스트(100) 또는 저장 장치(200)의 부팅 동작시 또는 리셋 설정시에 수행될 수 있을 것이다.
도 8은 본 발명의 실시 예에 따른 멀티-스트림 쓰기 동작을 간략히 보여주는 도면이다. 도 8을 참조하면, 호스트(100)는 스트림 데이터에 대한 쓰기 명령어를 전달하는 경우, 멀티-스트림 인덱스(MSI)를 포함시킨다. 여기서, 저장 장치(200)의 멀티-스트림 설정은 이전의 설정 절차를 통해서 완료된 것으로 가정한다.
S11 단계에서, 호스트(100)는 저장 장치(200)로 읽기 명령어(rCMD)를 전달한다. 여기서, 읽기 명령어는 복수의 트랜잭션 단위로 전달될 수 있다. 각각의 트랜잭션 단위의 읽기 명령어(rCMD)에는 논리 어드레스(LBA), 섹터 카운트(nSC), 그리고 멀티-스트림 인덱스(MSI)가 포함될 수 있다. 읽기 명령어들(rCMD_1, rCMD_2, rCMD_3, rCMD_4) 각각에 포함되는 섹터 카운트(nSC)의 수는 예시에 불과하다. 여기서, 읽기 명령어들(rCMD_1, rCMD_2, rCMD_3, rCMD_4)의 수도 예시적인 숫자이며, 적어도 하나의 읽기 명령어(rCMD)에 응답하여 저장 장치(200)가 프리패치 동작을 수행할 수 있음은 잘 이해될 것이다.
S12 단계에서, 저장 장치(200)는 논리 어드레스(LBA_1~LBA_4)에 대응하는 플래시 메모리 장치(230~250)의 메모리 영역을 읽어낸다. 그리고 읽혀진 데이터는 버퍼 메모리(220)의 읽기 버퍼 영역에 일시 저장된다.
S13 단계에서, 저장 장치(200)는 논리 어드레스(LBA_1~LBA_4)에 대응하는 독출 데이터를 호스트(100)로 전송한다. 그리고 전송 완료된 이후에는 읽기 버퍼 영역에 일시 저장된 데이터는 무효화될 것이다.
S14 단계에서, 저장 장치(200)는 멀티-스트림 인덱스(MSI)를 참조하여 프리패치 동작을 수행한다. 저장 장치(200)는 이전에 전달된 읽기 명령어들(rCMD_1, rCMD_2, rCMD_3, rCMD_4)이 멀티-스트림 데이터에 대한 읽기 요청임을 인식할 것이다. 그리고 저장 장치(200)는 추후에 호스트(100)가 읽기 요청할 데이터가 논리 어드레스(LBA_5~LBA_8)일 것으로 예측한다. 저장 장치(200)는 예측된 멀티-스트림 인덱스(MSI=2)에 대응하는 스트림 데이터를 플래시 메모리 장치(230~250)로부터 독출한다. 독출된 스트림 데이터는 버퍼 메모리(220)의 읽기 버퍼 영역의 제 2 스트림 데이터를 위해 구비되는 프리패치 리소스 유닛(226, 도 6 참조)에 저장될 것이다.
S15 단계에서, 호스트(100)는 후속되는 읽기 명령어를 저장 장치(200)로 전달한다. 각각의 트랜잭션 단위의 읽기 명령어(rCMD)에는 논리 어드레스(LBA), 섹터 카운트(nSC), 그리고 멀티-스트림 인덱스(MSI)가 포함될 수 있다. 저장 장치(200)는 후속되는 읽기 명령어들(rCMD_5, rCMD_6, rCMD_7, rCMD_8) 각각에 포함되는 논리 어드레스 및 멀티-스트림 인덱스(MSI)를 검출하여 프리패치된 데이터와 일치하는지 판단한다.
S16 단계에서, 저장 장치(200)는 프리패치 리소스 유닛(226)에 프리패치된 스트림 데이터를 호스트(100)로 전송한다. 왜냐하면, 읽기 명령어들(rCMD_5, rCMD_6, rCMD_7, rCMD_8) 각각에 포함되는 멀티-스트림 인덱스(MSI)와 논리 어드레스(LBA_5~LBA_8)가 예측에 의해서 프리패치된 데이터와 일치하기 때문이다. 불일치하는 경우, 저장 장치(200)는 플래시 메모리 장치(230~250)를 액세스해야 한다.
S17 단계에서, 저장 장치(200)는 프리패치 동작을 수행한다. 저장 장치(200)는 이전에 전달된 읽기 명령어들(rCMD_5, rCMD_6, rCMD_7, rCMD_8)을 참조하여 추후에 호스트(100)가 읽기 요청할 데이터가 논리 어드레스(LBA_9~LBA_12)일 것으로 예측한다. 저장 장치(200)는 예측된 멀티-스트림 인덱스(MSI=2)에 대응하는 멀티-스트림 데이터를 플래시 메모리 장치(230~250)로부터 독출한다. 독출된 멀티-스트림 데이터는 버퍼 메모리(220)의 읽기 버퍼 영역의 제 2 스트림 데이터를 위해 구비되는 프리패치 리소스 유닛(226)에 저장될 것이다.
이상에서는 멀티-스트림 인덱스(MSI)를 참조하여 수행되는 프리패치 동작을 간략히 살펴보았다. 프리패치를 통해서, 저장 장치(200)의 응답 시간을 최소화할 수 있다. 따라서, 본 발명의 프리패치 방식을 적용하면 스트림 데이터에 대한 접근이 빈번한 저장 장치(200)에서 스트림 데이터에 대한 읽기 속도를 획기적으로 높일 수 있을 것으로 기대된다.
도 9는 본 발명의 실시 예에 따른 프리패치 방법을 보여주는 도면이다. 도 9를 참조하면, 버퍼 메모리(220)의 읽기 버퍼 영역에는 예측된 스트림 데이터가 프리패치될 수 있다.
멀티-스트림 인덱스(MSI=2)로 지정된 읽기 명령어들(rCMDs)이 입력되면, 스토리지 컨트롤러(210)는 프리패치 동작을 위한 예측을 수행한다. 즉, 스토리지 컨트롤러(210)는 현재 읽기 요청된 논리 어드레스(LAB_1~LBA_4)에 후속하여 논리 어드레스(LBA_5~LBA_8)에 대응하는 제 2 스트림 데이터에 대한 읽기 명령어들이 입력될 것을 예측한다. 즉, 쓰기 동작시 멀티-스트림 인덱스(MSI=2)로 지정된 연속 데이터를 검색하게 될 것이다. 그리고 스토리지 컨트롤러(210)는 검색된 데이터를 멀티-스트림 인덱스(MSI=2)에 할당되는 프리패치 리소스 유닛(226)으로 프리패치할 것이다. 물론, 이러한 예측된 데이터에 대한 프리패치 동작은 논리 어드레스(LBA_1~LBA_4)의 읽기 요청된 데이터에 대한 독출 및 호스트(100)로의 전송 이후에 수행될 것이다.
도 10은 본 발명의 실시 예에 따른 프리패치 방법을 보여주는 순서도이다. 도 10을 참조하면, 저장 장치(200)는 호스트(100)로부터 제공되는 읽기 명령어의 논리 어드레스(LBA)와 멀티-스트림 인덱스(MSI)를 참조하여 프리패치할 데이터를 예측한다. 그리고 저장 장치(200)는 예측된 데이터를 백그라운드 동작 또는 유휴 시간(Idle time)에 프리패치할 것이다.
S110 단계에서, 저장 장치(200)는 호스트(100)로부터 제공된 읽기 명령어(rCMDs)를 수신한다. 이때, 복수의 읽기 명령어(rCMDs)는 복수의 트랜잭션 단위로 제공될 수 있다. 각각의 읽기 명령어들(rCMDs)에는 논리 어드레스(LBA), 섹터 카운트(nSC), 그리고 멀티-스트림 인덱스(MSI)가 포함될 수 있다. 여기서, 읽기 명령어(rCMDs)가 4개 단위(LBA_1~LBA_4)로 제공되는 것으로 도시하였으나, 본 발명은 여기에 국한되지 않는다. 멀티-스트림 인덱스(MSI)를 포함하는 적어도 하나 이상의 읽기 명령어에 대해서 저장 장치(200)는 예측 및 프리패치 동작을 수행할 수 있음은 잘 이해될 것이다.
S120 단계에서, 저장 장치(200)는 논리 어드레스(LBA_1~LBA_4)에 대응하는 플래시 메모리 장치(230~250)의 메모리 영역을 읽어낸다. 여기서, 읽기 명령어들(rCMDs)은 멀티-스트림 인덱스(MSI)에 대응하는 스트림 데이터에 대한 최초 읽기 요청들이라 가정하기로 한다. 그러면, 읽혀진 스트림 데이터는 버퍼 메모리(220)의 읽기 버퍼(Read Buffer)에 일시 저장된다. 즉, 호스트(100)로부터 읽기 요청된 데이터에 대한 독출 동작이 최우선적으로 수행된다. 저장 장치(200)는 논리 어드레스(LBA_1~LBA_4)에 대응하는 스트림 데이터를 호스트(100)로 전송한다.
S130 단계에서, 저장 장치(200)는 S110 단계에서 수신된 읽기 명령어(rCMD)에 포함된 멀티-스트림 인덱스(MSI)의 존재 여부를 검출할 것이다.
S140 단계에서, 저장 장치(200)는 S110 단계에서 수신된 읽기 명령어(rCMD)에 포함된 멀티-스트림 인덱스(MSI)의 존재 여부에 따라 동작 분기를 수행한다. S110 단계에서 수신된 읽기 명령어(rCMDs)에 멀티-스트림 인덱스(MSI)가 존재하는 경우, 절차는 프리패치 동작을 수행하기 위한 S150 단계로 이동한다. 반면, S110 단계에서 수신된 읽기 명령어(rCMDs)에 멀티-스트림 인덱스(MSI)가 존재하지 않는 경우, 제반 절차는 종료되고 다음 명령어의 수신을 위해 대기할 것이다. 수신된 읽기 명령어(rCMDs)에 멀티-스트림 인덱스(MSI)가 존재하지 않는 경우, 저장 장치(200)는 읽기 요청된 데이터를 랜덤 데이터로 판단한다.
S150 단계에서, 저장 장치(200)는 프리패치 동작을 수행한다. 저장 장치(200)는 이전에 전달된 읽기 명령어들(rCMDs)을 참조하여 추후에 호스트(100)가 읽기 요청할 논리 어드레스(LBA_5~LBA_8)에 저장된 멀티-스트림 인덱스(MSI=2)에 대응하는 데이터를 미리 읽어낸다. 그리고 저장 장치(200)는 읽어낸 데이터를 버퍼 메모리(220)에 예비된 프리패치 리소스 유닛(226)에 저장할 것이다. 읽기 예측된 데이터에 대한 프리패치 동작은 저장 장치(200)의 유휴 시간(Idle time)에 수행될 수 있을 것이다.
이상에서는 멀티-스트림 인덱스(MSI)를 참조하여 수행되는 저장 장치(200)의 프리패치 동작이 설명되었다. 프리패치 동작을 통해서, 저장 장치(200)는 스트림 데이터에 대한 읽기 요청에 신속하게 응답할 수 있다.
도 11은 본 발명의 실시 예에 따른 프리패치 방법의 다른 예를 보여주는 도면이다. 도 11을 참조하면, 예측에 의해서 프리패치된 스트림 데이터와 실제 호스트(100)로부터 요청된 데이터가 불일치하는 경우의 대응 방법이 설명되어 있다.
먼저, 버퍼 메모리(220)의 읽기 버퍼 영역에 구비된 프리패치 리소스 유닛(226)에 멀티-스트림 인덱스(MSI=2)에 대응하는 논리 어드레스(LBA_5~LBA_8)의 데이터가 프리패치되어 있다고 가정한다. 하지만, 호스트(100)로부터 멀티-스트림 인덱스(MSI=2)의 논리 어드레스(LBA_9~LBA_11)에 해당하는 읽기 명령어(rCMDs)가 제공된다. 이 경우, 프리패치된 데이터와 읽기 요청된 데이터가 불일치(Mismatch)하므로, 프리패치된 데이터는 폐기(Discard) 또는 무효화(Invalidate)되어야 한다.
저장 장치(200)의 스토리지 컨트롤러(210)는 우선적으로 멀티-스트림 인덱스(MSI=2)의 논리 어드레스(LBA_9~LBA_11)에 해당하는 스트림 데이터를 플래시 메모리 장치(230~250)로부터 독출할 것이다. 독출된 데이터는 즉시 호스트(100)로 전송될 것이다. 이어서, 스토리지 컨트롤러(210)는 프리패치 리소스 유닛(226)에 프리패치된 논리 어드레스(LBA_5~LBA_8)의 스트림 데이터를 폐기(Discard)할 것이다. 여기서, 스토리지 컨트롤러(210)는 논리 어드레스(LBA_5~LBA_8)의 스트림 데이터를 폐기하기 위한 별도의 명령을 호스트(100)로부터 제공받을 수도 있다.
스토리지 컨트롤러(210)는 더불어 프리패치 동작을 위한 예측을 수행한다. 즉, 스토리지 컨트롤러(210)는 현재 읽기 요청된 논리 어드레스(LAB_9~LBA_11)에 후속될 논리 어드레스(LBA_11~LBA_14)에 대응하는 스트림 데이터를 독출하여 프리패치 리소스 유닛(226)에 저장할 것이다.
도 12는 본 발명의 실시 예에 따른 프리패치 방법의 다른 예를 보여주는 순서도이다. 도 12를 참조하면, 저장 장치(200)는 호스트(100)로부터 읽기 요청된 데이터와 프리패치된 데이터의 일치 여부에 따라 프리패치 리소스 유닛들(225~228)에 프리패치된 데이터를 관리한다.
S210 단계에서, 저장 장치(200)는 호스트(100)로부터 제공된 읽기 명령어(rCMDs)를 수신한다. 읽기 명령어들(rCMDs) 각각은 하나의 트랜잭션 단위에 대응할 수 있다. 각각의 읽기 명령어들(rCMDs)에는 논리 어드레스(LBA), 섹터 카운트(nSC), 그리고 멀티-스트림 인덱스(MSI)가 포함될 수 있다.
S220 단계에서, 저장 장치(200)는 S210 단계에서 읽기 요청된 데이터의 논리 어드레스와 프리패치된 스트림 데이터의 논리 어드레스를 비교한다. 프리패치된 스트림 데이터의 논리 어드레스는 스토리지 컨트롤러(210)에 의해서 예측된 것이다. 만일, 읽기 요청된 데이터와 프리패치된 데이터가 일치하면(Yes 방향), 절차는 S260 단계로 이동한다. 반면, 읽기 요청된 데이터와 프리패치된 데이터가 불일치하면(No 방향), 절차는 S230 단계로 이동한다.
S230 단계에서, 프리패치된 데이터와 읽기 요청된 데이터의 어드레스가 불일치(Mismatch)하므로, 스토리지 컨트롤러(210)는 프리패치 리소스 유닛(226)에 저장된 데이터를 폐기(Discard) 또는 무효화(Invalidate)한다.
S240 단계에서, 저장 장치(200)는 S210 단계에서 읽기 요청된 데이터를 플래시 메모리 장치(230~250)로부터 읽어낸다. 그리고 저장 장치(200)는 읽혀진 데이터를 버퍼 메모리(220)의 읽기 버퍼(Read Buffer) 영역에 일시 저장한 후 호스트(100)로 전송할 것이다. 여기서, S230 단계와 S240 단계의 순서는 바뀌어도 무방하다.
S250 단계에서, 저장 장치(200)는 S210 단계에서 수신된 읽기 명령어들(rCMDs)에 포함된 멀티-스트림 인덱스(MSI)와 어드레스를 참조하여 스트림 데이터를 프리패치할 것이다. 즉, 저장 장치(200)는 추후에 호스트(100)가 읽기 요청할 논리 어드레스를 예측하고, 예측된 영역의 스트림 데이터를 미리 할당된 프리패치 리소스 유닛(226)에 프리패치한다.
S260 단계에서, 저장 장치(200)는 패치 리소스 유닛(226)에 저장된 프리패치된 데이터를 호스트(100)로 전송한다. 그리고, 저장 장치(200)는 S210 단계에서 수신된 읽기 명령어를 참조하여 프리패치 동작을 수행할 것이다.
이상에서는 멀티-스트림 인덱스(MSI)를 참조하여 수행되는 저장 장치(200)의 프리패치 동작이 설명되었다. 프리패치 동작을 통해서, 저장 장치(200)는 멀티-스트림 데이터에 대한 읽기 요청에 신속하게 응답할 수 있다.
도 13은 본 발명의 실시 예에 따른 멀티-스트림 데이터의 쓰기 방법을 보여주는 도면이다. 도 13을 참조하면, 호스트(100)는 스트림 데이터에 대한 쓰기 명령어를 전달하는 경우에는 멀티-스트림 인덱스(MSI)를 포함시킨다. 여기서, 저장 장치(200)의 멀티-스트림 설정은 이미 설정 절차를 통해서 완료된 것으로 가정한다. 그리고 쓰기 명령어는 스트림 데이터가 분할된 복수의 세그먼트들 각각에 대해서 전달될 것이다.
S310 단계에서, 호스트(100)는 저장 장치(200)로 쓰기 명령어(wCMD_1)를 전달한다. 쓰기 명령어(wCMD_1)에는 논리 어드레스(LBA), 섹터 카운트(nSC), 그리고 멀티-스트림 인덱스(MSI)가 포함될 수 있다. 저장 장치(200)는 쓰기 명령어(wCMD_1)에 포함되는 멀티-스트림 인덱스(MSI=3)의 존재를 검출할 것이다.
S320 단계에서, 저장 장치(200)는 쓰기 요청된 스트림 데이터를 버퍼 메모리(220)의 쓰기 버퍼 영역에 구비되는 쓰기 스트림 유닛(W_Stream_Unit_3)에 저장한다.
S330 단계에서, 저장 장치(200)는 호스트(100)로부터 연속적으로 제공되는 쓰기 명령어(wCMD_i, i는 2 이상의 정수)를 수신한다. 이때, 저장 장치(200)는 쓰기 요청된 데이터의 멀티-스트림 인덱스(MSI=3)를 검출할 것이다.
S340 단계에서, 저장 장치(200)는 쓰기 요청된 스트림 데이터를 버퍼 메모리(220)의 쓰기 버퍼 영역에 구비되는 쓰기 스트림 유닛(W_Stream_Unit_3)에 저장한다.
S350 단계에서, 저장 장치(200)는 쓰기 스트림 유닛(W_Stream_Unit_3)에 저장된 데이터가 가득한지 검출한다. 쓰기 스트림 유닛(W_Stream_Unit_3)이 가득찬 경우, 쓰기 스트림 유닛(W_Stream_Unit_3)에 버퍼링된 스트림 데이터는 할당된 메모리 블록에 프로그램될 것이다(S360 단계). 반면, 쓰기 스트림 유닛(W_Stream_Unit_3)이 가득차지 않은 경우, 쓰기 스트림 유닛(W_Stream_Unit_3)에 버퍼링하기 위하여 쓰기 요청을 호스트(100)로부터 제공받을 것이다.
이상에서는 멀티-스트림 인덱스(MSI)를 참조하여 수행되는 스트림 데이터의 쓰기 동작을 간략히 살펴보았다. 호스트(100)에 의해서 세그먼트 단위로 쓰기 요청되는 스트림 데이터를 저장 장치(200)에서 누적하여 메모리 블록 단위로 연속 프로그램할 수 있다. 따라서, 쓰기 요청된 멀티-스트림 데이터에 대한 플래시 메모리 장치(230~250)의 프로그램 속도를 높일 수 있다.
도 14는 본 발명의 실시 예에 따른 스트림 데이터의 쓰기 방법을 보여주는 도면이다. 도 14를 참조하면, 버퍼 메모리(220)의 쓰기 버퍼 영역에는 쓰기 요청된 스트림 데이터가 메모리 블록 단위로 버퍼링된다.
멀티-스트림 인덱스(MSI=3)를 포함하는 쓰기 명령어들(wCMDs)이 입력되면, 스토리지 컨트롤러(210)는 할당된 쓰기 스트림 유닛(223)에 쓰기 요청된 데이터를 버퍼링한다. 물론, 스토리지 컨트롤러(210)는 멀티-스트림 인덱스(MSI=1)를 포함하는 쓰기 명령어(wCMD)가 입력되면, 멀티-스트림 인덱스(MSI=1)를 위해 할당된 쓰기 스트림 유닛(221)에 쓰기 요청된 데이터를 버퍼링할 것이다.
스토리지 컨트롤러(210)는 할당된 쓰기 스트림 유닛(223)에 쓰기 요청된 데이터가 가득찰 경우, 쓰기 스트림 유닛(223)에 버퍼링된 데이터를 메모리 블록(241)으로 플러쉬(Flush)한다. 쓰기 스트림 유닛(223)의 사이즈는 할당되는 메모리 블록의 데이터 용량과 동일하게 설정될 수 있다. 따라서, 메모리 블록(241)으로의 데이터 프로그램 동작은 연속적으로 수행될 수 있다. 플래시 메모리 장치(230~250)의 메모리 블록에 대한 연속적인 프로그램을 통해서 높은 쓰기 속도를 제공할 수 있다.
도 15는 본 발명의 실시 예를 적용하는 솔리드 스테이트 드라이브(SSD) 시스템을 보여주는 블록도이다. 도 15를 참조하면, SSD 시스템(1000)은 호스트(1100)와 SSD(1200)를 포함한다. SSD(1200)는 SSD 컨트롤러(1210), 버퍼 메모리(1220), 그리고 불휘발성 메모리 장치(1230)를 포함한다.
호스트(1100)에는 복수의 응용 프로그램들, 운영 체제 등이 구동된다. 호스트(1100)에서 구동되는 프로그램들에 의해서 멀티-스트림 데이터에 대한 쓰기 요청 또는 읽기 요청이 발생한다. 이때, 호스트(1100)는 SSD(1200)로 멀티-스트림 데이터에 대한 접근 요청시에 멀티-스트림 인덱스(MSI)를 포함시킨다.
SSD 컨트롤러(1210)는 호스트(1100)와 SSD(1200)와의 물리적 연결을 제공한다. 즉, SSD 컨트롤러(1210)는 호스트(1100)의 버스 포맷(Bus format)에 대응하여 SSD(1200)와의 인터페이싱을 제공한다. 특히, SSD 컨트롤러(1210)는 호스트(1100)로부터 제공되는 명령어를 디코딩한다. 디코딩된 결과에 따라, SSD 컨트롤러(1210)는 불휘발성 메모리 장치(1230)를 액세스한다. 호스트(1100)의 버스 포맷(Bus format)으로 USB(Universal Serial Bus), SCSI(Small Computer System Interface), PCI express, ATA, PATA(Parallel ATA), SATA(Serial ATA), SAS(Serial Attached SCSI), NVMe 등이 포함될 수 있다.
SSD 컨트롤러(1210)는 호스트(1100)로부터의 명령어에 포함된 멀티-스트림 인덱스(MSI)를 참조하여 버퍼 메모리(1220) 및 불휘발성 메모리 장치(1230)를 제어한다.
버퍼 메모리(1220)에는 호스트(1100)로부터 제공되는 쓰기 데이터 또는 불휘발성 메모리 장치(1230)로부터 읽혀진 데이터가 일시 저장된다. 호스트(1100)의 읽기 요청시에 불휘발성 메모리 장치(1230)에 존재하는 데이터가 캐시되어 있는 경우에는, 버퍼 메모리(1220)는 캐시된 데이터를 직접 호스트(1100)로 제공하는 캐시 기능을 지원한다. 버퍼 메모리(1220)는 대용량의 보조 기억 장치로 사용되는 SSD(1200)에서 충분한 버퍼링을 제공하기 위해 동기식 DRAM(Synchronous DRAM)으로 제공될 수 있다. 하지만, 버퍼 메모리(1220)가 여기의 개시에 국한되지 않음은 이 분야의 통상적인 지식을 습득한 자들에게 자명하다.
불휘발성 메모리 장치(1230)는 SSD(1200)의 저장 매체로서 제공된다. 예를 들면, 불휘발성 메모리 장치(1230)는 대용량의 저장 능력을 가지는 낸드 플래시 메모리(NAND-type Flash memory)로 제공될 수 있다. 불휘발성 메모리 장치(1230)는 복수의 메모리 장치로 구성될 수 있다. 이 경우, 각각의 메모리 장치들은 채널 단위로 SSD 컨트롤러(1210)와 연결된다. 저장 매체로서 불휘발성 메모리 장치(1230)가 낸드 플래시 메모리를 예로 들어 설명되었으나, 또 다른 불휘발성 메모리 장치들로 구성될 수 있다. 예를 들면, 저장 매체로서 PRAM, MRAM, ReRAM, FRAM, NOR 플래시 메모리 등이 사용될 수 있으며, 이종의 메모리 장치들이 혼용되는 메모리 시스템도 적용될 수 있다. 그리고 저장 매체로서 휘발성 메모리 장치(예를 들면, DRAM)이 포함될 수도 있다.
도 16에는 본 발명에 따른 대용량 저장 장치(Mess Storage)를 장착하는 컴퓨팅 시스템이 예시적으로 도시되어 있다. 본 발명에 따른 컴퓨팅 시스템(2000)은 시스템 버스(2700)에 전기적으로 연결되는 네트워크 어댑터(2100), 중앙처리장치(2200), 대용량 저장 장치(2300), 램(2400), 롬(2500) 그리고 사용자 인터페이스(2600)를 포함한다.
네트워크 어댑터(2100)는 컴퓨팅 시스템(2000)과 외부의 네트워크들(3000) 간의 인터페이싱을 제공한다. 중앙처리장치(2200)는 램(2400)에 상주하는 운영 체제(Operating System)나 응용 프로그램(Application Program)을 구동하기 위한 제반 연산처리를 수행한다. 대용량 저장 장치(2300)는 컴퓨팅 시스템(2000)에서 필요한 제반 데이터를 저장한다. 예를 들면, 대용량 저장 장치(2300)에는 컴퓨팅 시스템(2000)을 구동하기 위한 운영 체제(Operating System), 응용 프로그램(Application Program), 다양한 프로그램 모듈(Program Module), 프로그램 데이터(Program data) 그리고 유저 데이터(User data) 등이 저장된다.
램(2400)은 컴퓨팅 시스템(2000)의 워킹 메모리로 사용될 수 있다. 부팅시에 램(2400)에는 대용량 저장 장치(2300)로부터 읽혀진 운영 체제(Operating System), 응용 프로그램(Application Program), 다양한 프로그램 모듈(Program Module)과 프로그램들의 구동에 소요되는 프로그램 데이터(Program data)가 로드된다. 롬(2500)에는 부팅시 운영 체제(Operating System)가 구동되기 이전부터 활성화되는 기본적인 입출력 시스템인 바이오스(BIOS: Basic Input/Output System)가 저장된다. 유저 인터페이스(2600)를 통해서 컴퓨팅 시스템(2000)과 사용자 사이의 정보 교환이 이루어진다. 이외에도, 컴퓨팅 시스템(2000)은 배터리(Battery)나 모뎀(Modem) 등을 더 포함할 수 있다. 또한, 비록 도면에는 도시되지 않았지만, 본 발명에 따른 컴퓨팅 시스템에는 응용 칩셋(Application chipset), 카메라 이미지 프로세서(Camera Image Processor: CIS), 모바일 디램 등이 더 제공될 수 있음은 이 분야의 통상적인 지식을 습득한 자들에게 자명하다.
대용량 저장 장치(2300)는 앞서 기술한 바와 같이, SSD(Solid State Drive), MMC 카드(Multimedia Card), SD 카드(Secure Digital Card), 마이크로 SD 카드, 메모리 스틱(Memory Stick), ID 카드, PCMCIA 카드, 칩 카드(Chip Card), USB 카드, 스마트 카드(Smart Card), CF 카드(Compact Flash Card) 등으로 구성될 수 있다.
본 발명에 따른 메모리 카드, 불휘발성 메모리 장치, 카드 컨트롤러는 다양한 형태들의 패키지를 이용하여 실장될 수 있다. 예를 들면, 본 발명에 따른 플래시 메모리 장치 그리고/또는 메모리 컨트롤러는 PoP(Package on Package), Ball grid arrays(BGAs), Chip scale packages(CSPs), Plastic Leaded Chip Carrier(PLCC), Plastic Dual In-Line Package(PDIP), Die in Waffle Pack, Die in Wafer Form, Chip On Board(COB), Ceramic Dual In-Line Package(CERDIP), Plastic Metric Quad Flat Pack(MQFP), Thin Quad Flatpack(TQFP), Small Outline(SOIC), Shrink Small Outline Package(SSOP), Thin Small Outline(TSOP), System In Package(SIP), Multi Chip Package(MCP), Wafer-level Fabricated Package(WFP), Wafer-Level Processed Stack Package(WSP), 등과 같은 패키지들을 이용하여 실장 될 수 있다.
이상에서와 같이 도면과 명세서에서 실시 예가 개시되었다. 여기서 특정한 용어들이 사용되었으나, 이는 단지 본 발명을 설명하기 위한 목적에서 사용된 것이지 의미 한정이나 특허 청구범위에 기재된 본 발명의 범위를 제한하기 위하여 사용된 것은 아니다. 그러므로 본 기술분야의 통상의 지식을 가진 자라면 이로부터 다양한 변형 및 균등한 타 실시 예가 가능하다는 점을 이해할 것이다. 따라서 본 발명의 진정한 기술적 보호 범위는 첨부된 특허 청구범위의 기술적 사상에 의해 정해져야 할 것이다.
100 : 호스트 110 : 워킹 메모리
111 : 응용 프로그램 113 : 파일 시스템
115 : 장치 드라이버 120 : 인터페이스 회로
130 : 프로세싱 유닛 200 : 저장 장치
210 : 스토리지 컨트롤러 211 : 중앙처리장치
213 : 호스트 인터페이스 214 : 명령어 레지스터
215 : 버퍼 매니저 217 :플래시 인터페이스
220 : 버퍼 메모리
221, 22, 223, 224 : 쓰기 스트림 유닛
225, 226, 227, 228 : 프리패치 리소스 유닛
231, 232, 241, 251 : 메모리 블록
230, 240, 250 : 플래시 메모리 장치
1100 : 호스트 1200 : SSD
1210 : SSD 컨트롤러 1220 : 버퍼 메모리
1230 : 불휘발성 메모리 장치 2000 : 컴퓨터 시스템
2100 : 네트워크 어뎁터 2200 : 중앙처리장치
2300 : 대용량 저장 장치 2400 : RAM
2500 : ROM 2600 : 유저 인터페이스
3000 : 네트워크

Claims (10)

  1. 호스트와 멀티-스트림 데이터를 교환하는 데이터 저장 장치에 있어서:
    불휘발성 메모리 장치;
    상기 불휘발성 메모리 장치에 저장될 데이터 또는 상기 불휘발성 메모리 장치로부터 독출된 데이터를 일시 저장하기 위한 버퍼 메모리; 그리고
    상기 호스트로부터 상기 멀티-스트림 데이터 각각에 대해 세그먼트 단위로 접근 명령어를 수신하고, 상기 접근 명령어에 포함되는 멀티-스트림 인덱스를 참조하여 접근 요청된 세그먼트들을 연속된 스트림 데이터로 식별하여 상기 버퍼 메모리에 저장하는 스토리지 컨트롤러를 포함하는 데이터 저장 장치.
  2. 제 1 항에 있어서,
    상기 스토리지 컨트롤러는 상기 호스트의 요청에 따라 상기 버퍼 메모리를 상기 멀티-스트림 데이터 각각을 버퍼링하기 위한 읽기 버퍼 영역과 쓰기 버퍼 영역을 구성하는 데이터 저장 장치.
  3. 제 2 항에 있어서,
    상기 스토리지 컨트롤러는 상기 쓰기 버퍼 영역을 복수의 쓰기 스트림 유닛들로 구분하고, 각각의 쓰기 스트림 유닛에는 쓰기 요청된 세그먼트들 중에서 동일한 멀티-스트림 인덱스를 갖는 세그먼트들을 버퍼링하는 데이터 저장 장치.
  4. 제 3 항에 있어서,
    상기 복수의 쓰기 스트림 유닛들 각각의 사이즈는 상기 불휘발성 메모리 장치의 메모리 블록 사이즈로 할당되는 데이터 저장 장치.
  5. 제 3 항에 있어서,
    상기 쓰기 요청된 세그먼트들로 완충된 쓰기 스트림 유닛의 데이터는 상기 불휘발성 메모리 장치에 할당된 메모리 블록으로 연속 프로그램되는 데이터 저장 장치.
  6. 제 2 항에 있어서,
    상기 스토리지 컨트롤러는 상기 호스트로부터의 읽기 명령어에 포함되는 상기 멀티-스트림 인덱스 및 어드레스로부터 추후에 읽기 요청될 데이터를 예측하는 데이터 저장 장치.
  7. 제 6 항에 있어서,
    상기 스토리지 컨트롤러는 상기 예측된 데이터를 상기 불휘발성 메모리 장치로부터 독출하여 상기 읽기 버퍼 영역에 일시 저장하는 데이터 저장 장치.
  8. 제 7 항에 있어서,
    상기 스토리지 컨트롤러는 상기 읽기 버퍼 영역을 상기 멀티-스트림 인덱스 각각에 대응하는 복수의 읽기 리소스 유닛들로 구분하고, 읽기 리소스 유닛들 각각에는 상기 예측된 데이터를 저장하는 데이터 저장 장치.
  9. 솔리드 스테이트 드라이브(SSD)의 데이터 처리 방법에 있어서;
    호스트로부터 세그먼트 데이터들에 대한 적어도 하나의 쓰기 명령어를 수신하는 단계;
    상기 쓰기 명령어를 디코딩하여 상기 세그먼트 데이터들 각각에 할당된 멀티-스트림 인덱스를 검출하는 단계;
    버퍼 메모리의 쓰기 버퍼 영역에 상기 멀티-스트림 인덱스에 따라 할당된 복수의 쓰기 스트림 유닛들에 상기 세그먼트 데이터를 버퍼링하는 단계; 그리고
    상기 복수의 쓰기 스트림 유닛들 중에서 할당된 용량이 완충된 쓰기 스트림 유닛의 데이터를 대응하는 불휘발성 메모리 장치의 메모리 블록으로 연속 프로그램하는 단계를 포함하는 데이터 처리 방법.
  10. 불휘발성 메모리 장치, 버퍼 메모리를 포함하는 솔리드 스테이트 드라이브(SSD)의 데이터 처리 방법에 있어서;
    호스트로부터 제 1 읽기 명령어를 수신하는 단계;
    상기 제 1 읽기 명령어를 디코딩하여 읽기 요청된 제 1 세그먼트 데이터에 할당된 멀티-스트림 인덱스를 검출하는 단계;
    상기 검출된 멀티-스트림 인덱스 및 어드레스를 참조하여 추후에 읽기 요청될 제 2 세그먼트 데이터를 예측하는 단계; 그리고
    상기 예측된 제 2 세그먼트 데이터를 상기 불휘발성 메모리 장치로부터 독출하여 상기 버퍼 메모리의 프리패치 리소스 유닛에 프리패치하는 단계를 포함하는 데이터 처리 방법.
KR1020130107454A 2013-09-06 2013-09-06 데이터 저장 장치 및 그것의 데이터 처리 방법 KR102074329B1 (ko)

Priority Applications (2)

Application Number Priority Date Filing Date Title
KR1020130107454A KR102074329B1 (ko) 2013-09-06 2013-09-06 데이터 저장 장치 및 그것의 데이터 처리 방법
US14/310,292 US10095613B2 (en) 2013-09-06 2014-06-20 Storage device and data processing method thereof

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020130107454A KR102074329B1 (ko) 2013-09-06 2013-09-06 데이터 저장 장치 및 그것의 데이터 처리 방법

Publications (2)

Publication Number Publication Date
KR20150028610A true KR20150028610A (ko) 2015-03-16
KR102074329B1 KR102074329B1 (ko) 2020-02-06

Family

ID=52626698

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020130107454A KR102074329B1 (ko) 2013-09-06 2013-09-06 데이터 저장 장치 및 그것의 데이터 처리 방법

Country Status (2)

Country Link
US (1) US10095613B2 (ko)
KR (1) KR102074329B1 (ko)

Cited By (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20160291872A1 (en) * 2015-04-03 2016-10-06 Kabushiki Kaisha Toshiba Storage device writing data on the basis of stream
KR20170013104A (ko) * 2015-07-27 2017-02-06 삼성전자주식회사 스토리지 장치 및 상기 스토리지 장치의 동작 방법
KR20170026926A (ko) * 2015-08-31 2017-03-09 삼성전자주식회사 데이터 양에 기초하여 복수의 데이터 스트림을 관리하도록 구성되는 스토리지 장치
KR20170054633A (ko) * 2015-11-09 2017-05-18 삼성전자주식회사 스토리지 장치 및 그것의 동작 방법
KR20170130376A (ko) * 2015-03-27 2017-11-28 인텔 코포레이션 순차 기입 스트림 관리
KR20170133247A (ko) * 2016-05-25 2017-12-05 삼성전자주식회사 어드레스 기반의 멀티-스트림 스토리지 장치 액세스
KR20180011665A (ko) * 2016-07-25 2018-02-02 삼성전자주식회사 데이터 저장 장치 및 이를 포함하는 컴퓨팅 시스템
KR20180045786A (ko) * 2016-10-26 2018-05-04 삼성전자주식회사 멀티-스트림이 가능한 솔리드 스테이트 드라이브들을 위하여 데이터 스트림들을 통합하는 방법
KR20180048251A (ko) * 2016-11-02 2018-05-10 삼성전자주식회사 다중-스트림 스킴에서 희생 스트림 선택 알고리즘들
US10037247B2 (en) 2015-09-07 2018-07-31 SK Hynix Inc. Memory system having idle-memory devices and method of operating thereof
CN111414131A (zh) * 2019-01-07 2020-07-14 爱思开海力士有限公司 数据存储装置、其操作方法和包括其的存储系统
US11048624B2 (en) 2017-04-25 2021-06-29 Samsung Electronics Co., Ltd. Methods for multi-stream garbage collection
US11061591B2 (en) 2018-11-02 2021-07-13 Samsung Electronics Co., Ltd. Storage device processing stream data, system including the same, and operation method thereof
US11194710B2 (en) 2017-04-25 2021-12-07 Samsung Electronics Co., Ltd. Garbage collection—automatic data placement
US11262939B2 (en) 2019-08-30 2022-03-01 SK Hynix Inc. Memory system, memory controller, and operation method
WO2022191454A1 (ko) * 2021-03-11 2022-09-15 삼성전자 주식회사 블록 장치 이미지에 대한 런타임 체크섬 검증을 수행하는 전자 장치 및 이의 동작 방법
US11809718B2 (en) 2013-12-12 2023-11-07 Memory Technologies Llc Channel optimized storage modules

Families Citing this family (50)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8307180B2 (en) 2008-02-28 2012-11-06 Nokia Corporation Extended utilization area for a memory device
US8874824B2 (en) 2009-06-04 2014-10-28 Memory Technologies, LLC Apparatus and method to share host system RAM with mass storage memory RAM
US9417998B2 (en) 2012-01-26 2016-08-16 Memory Technologies Llc Apparatus and method to provide cache move with non-volatile mass memory system
US9311226B2 (en) 2012-04-20 2016-04-12 Memory Technologies Llc Managing operational state data of a memory module using host memory in association with state change
US9524236B1 (en) * 2014-01-09 2016-12-20 Marvell International Ltd. Systems and methods for performing memory management based on data access properties
CN107077438B (zh) * 2014-10-29 2022-09-16 惠普发展公司有限责任合伙企业 通过通信介质的部分进行通信
US10013177B2 (en) * 2015-04-20 2018-07-03 Hewlett Packard Enterprise Development Lp Low write amplification in solid state drive
US9696935B2 (en) 2015-04-24 2017-07-04 Kabushiki Kaisha Toshiba Storage device that secures a block for a stream or namespace and system having the storage device
US10656838B2 (en) 2015-07-13 2020-05-19 Samsung Electronics Co., Ltd. Automatic stream detection and assignment algorithm
US11461010B2 (en) 2015-07-13 2022-10-04 Samsung Electronics Co., Ltd. Data property-based data placement in a nonvolatile memory device
US10509770B2 (en) * 2015-07-13 2019-12-17 Samsung Electronics Co., Ltd. Heuristic interface for enabling a computer device to utilize data property-based data placement inside a nonvolatile memory device
US10282324B2 (en) 2015-07-13 2019-05-07 Samsung Electronics Co., Ltd. Smart I/O stream detection based on multiple attributes
JP2017027479A (ja) * 2015-07-24 2017-02-02 富士通株式会社 データ読出し方法及び情報処理システム
US9977623B2 (en) * 2015-10-15 2018-05-22 Sandisk Technologies Llc Detection of a sequential command stream
CN107347058B (zh) 2016-05-06 2021-07-23 阿里巴巴集团控股有限公司 数据加密方法、数据解密方法、装置及系统
US10866905B2 (en) 2016-05-25 2020-12-15 Samsung Electronics Co., Ltd. Access parameter based multi-stream storage device access
CN106250064B (zh) 2016-08-19 2020-05-12 深圳大普微电子科技有限公司 固态硬盘控制装置和基于学习的固态硬盘数据存取方法
US10031689B2 (en) * 2016-09-15 2018-07-24 Western Digital Technologies, Inc. Stream management for storage devices
US10146444B2 (en) 2016-10-03 2018-12-04 Samsung Electronics Co., Ltd. Method for read latency bound in SSD storage systems
KR102610537B1 (ko) 2016-11-10 2023-12-06 삼성전자주식회사 솔리드 스테이트 드라이브 장치 및 이를 포함하는 저장 시스템
JP2018088137A (ja) 2016-11-29 2018-06-07 東芝メモリ株式会社 半導体記憶装置
EP3358456A4 (en) * 2016-12-05 2018-08-08 Huawei Technologies Co., Ltd. Control method, storage device and system for data read/write command in nvme over fabric architecture
CN106951181A (zh) * 2017-02-21 2017-07-14 深圳大普微电子科技有限公司 一种数据存储系统的控制装置
TWI626540B (zh) * 2017-03-22 2018-06-11 慧榮科技股份有限公司 一般及垃圾回收的資料存取方法以及使用該方法的裝置
CN107132888A (zh) * 2017-05-02 2017-09-05 郑州云海信息技术有限公司 一种sata&nvme复合硬盘背板及其应用方法
KR102336666B1 (ko) 2017-09-15 2021-12-07 삼성전자 주식회사 메모리 장치 및 이를 포함하는 메모리 시스템
KR102387935B1 (ko) 2017-10-23 2022-04-15 삼성전자주식회사 공용 메모리 영역 및 전용 메모리 영역을 포함하는 데이터 저장 장치
CN107729270A (zh) * 2017-10-24 2018-02-23 郑州云海信息技术有限公司 一种基于NVMe协议的NVMe硬盘背板及其设计方法
KR102482035B1 (ko) * 2017-11-30 2022-12-28 에스케이하이닉스 주식회사 메모리 컨트롤러, 메모리 시스템 및 그 동작 방법
CN110018897B (zh) 2018-01-09 2023-05-26 阿里巴巴集团控股有限公司 数据处理方法、装置及计算设备
KR20190099693A (ko) * 2018-02-19 2019-08-28 에스케이하이닉스 주식회사 메모리 시스템 및 그것의 동작 방법
US10579538B2 (en) * 2018-02-21 2020-03-03 Western Digital Technologies, Inc. Predicting addresses in non-volatile storage
US10838805B2 (en) * 2018-02-23 2020-11-17 Micron Technology, Inc. Generating parity data based on a characteristic of a stream of data
US10976957B2 (en) * 2018-07-10 2021-04-13 ScaleFlux, Inc. Reducing multi-stream data write collision in solid-state data storage devices
US11281589B2 (en) * 2018-08-30 2022-03-22 Micron Technology, Inc. Asynchronous forward caching memory systems and methods
CN109450620B (zh) 2018-10-12 2020-11-10 创新先进技术有限公司 一种移动终端中共享安全应用的方法及移动终端
KR20200065761A (ko) * 2018-11-30 2020-06-09 에스케이하이닉스 주식회사 메모리 시스템
KR20200076946A (ko) * 2018-12-20 2020-06-30 삼성전자주식회사 스토리지 장치의 데이터 기입 방법 및 이를 수행하는 스토리지 장치
CN111813326B (zh) * 2019-04-12 2024-04-19 建兴储存科技(广州)有限公司 具多数据流写入的固态存储装置及其相关写入方法
JP7252821B2 (ja) * 2019-04-17 2023-04-05 キヤノン株式会社 記録装置、記録方法、プログラム、及びメモリカード
KR20200143912A (ko) 2019-06-17 2020-12-28 삼성전자주식회사 멀티-스트리밍을 지원하는 스토리지 장치 및 비휘발성 메모리 장치의 동작 제어 방법
US11429519B2 (en) * 2019-12-23 2022-08-30 Alibaba Group Holding Limited System and method for facilitating reduction of latency and mitigation of write amplification in a multi-tenancy storage drive
KR20210094915A (ko) 2020-01-22 2021-07-30 삼성전자주식회사 스토리지 컨트롤러, 이를 포함하는 스토리지 장치 및 스토리지 컨트롤러의동작 방법
KR20220014212A (ko) 2020-07-28 2022-02-04 에스케이하이닉스 주식회사 저장 장치 및 그 동작 방법
KR20220028332A (ko) 2020-08-28 2022-03-08 에스케이하이닉스 주식회사 저장 장치 및 그 동작 방법
KR20220104511A (ko) 2021-01-18 2022-07-26 에스케이하이닉스 주식회사 컨트롤러 및 이를 포함하는 메모리 시스템
US11347571B1 (en) * 2021-03-18 2022-05-31 EMC IP Holding Company LLC Sub-routing key splits in scaling distributed streaming data storage
US11593030B2 (en) * 2021-05-11 2023-02-28 EMC IP Holding Company LLC Cross-stream transactions in a streaming data storage system
US20230367498A1 (en) * 2022-05-10 2023-11-16 Western Digital Technologies, Inc. Stream oriented writing for improving sequential write and read performance
US20230418515A1 (en) * 2022-06-22 2023-12-28 Western Digital Technologies, Inc. Data Storage Device and Method for Multi-Level Conditional Prediction of Future Random Read Commands

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20110153910A1 (en) * 2009-12-18 2011-06-23 Mackenna Craig Flash Memory-Interface

Family Cites Families (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7328307B2 (en) 2004-01-22 2008-02-05 Tquist, Llc Method and apparatus for improving update performance of non-uniform access time persistent storage media
US7412560B2 (en) 2004-12-16 2008-08-12 Sandisk Corporation Non-volatile memory and method with multi-stream updating
JP2006268219A (ja) 2005-03-23 2006-10-05 Matsushita Electric Ind Co Ltd ディジタル記録方法およびディジタル記録装置
JP2007011523A (ja) 2005-06-29 2007-01-18 Hitachi Ltd データの先読み方法及び計算機システム
JP4915774B2 (ja) 2006-03-15 2012-04-11 株式会社日立製作所 ストレージシステム及びストレージシステムの制御方法
US8949555B1 (en) * 2007-08-30 2015-02-03 Virident Systems, Inc. Methods for sustained read and write performance with non-volatile memory
US7877537B2 (en) * 2006-12-15 2011-01-25 Microchip Technology Incorporated Configurable cache for a microprocessor
KR100900489B1 (ko) 2007-07-13 2009-06-03 한국과학기술원 디스크 어레이 매스 프리페칭 방법
US8341300B1 (en) * 2007-08-30 2012-12-25 Virident Systems, Inc. Systems for sustained read and write performance with non-volatile memory
US8429351B1 (en) 2008-03-28 2013-04-23 Emc Corporation Techniques for determining an amount of data to prefetch
US8694750B2 (en) * 2008-12-19 2014-04-08 Nvidia Corporation Method and system for data structure management
US8312217B2 (en) 2008-12-30 2012-11-13 Rasilient Systems, Inc. Methods and systems for storing data blocks of multi-streams and multi-user applications
JP5534388B2 (ja) * 2009-03-23 2014-06-25 ヤマハ株式会社 楽音生成装置
JP2011175615A (ja) 2010-01-27 2011-09-08 Toshiba Corp ホスト装置およびメモリデバイス
US8183452B2 (en) * 2010-03-23 2012-05-22 Yamaha Corporation Tone generation apparatus
JP5800347B2 (ja) 2010-03-31 2015-10-28 日本電気株式会社 情報処理装置及びデータアクセス方法
JP5665974B2 (ja) * 2010-05-07 2015-02-04 コンバーサント・インテレクチュアル・プロパティ・マネジメント・インコーポレイテッドConversant Intellectual Property Management Inc. 単一のバッファを用いて複数のメモリ素子を同時にリードする方法及び装置

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20110153910A1 (en) * 2009-12-18 2011-06-23 Mackenna Craig Flash Memory-Interface

Cited By (23)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11809718B2 (en) 2013-12-12 2023-11-07 Memory Technologies Llc Channel optimized storage modules
KR20170130376A (ko) * 2015-03-27 2017-11-28 인텔 코포레이션 순차 기입 스트림 관리
US9996302B2 (en) * 2015-04-03 2018-06-12 Toshiba Memory Corporation Storage device writing data on the basis of stream
US20160291872A1 (en) * 2015-04-03 2016-10-06 Kabushiki Kaisha Toshiba Storage device writing data on the basis of stream
US10712977B2 (en) 2015-04-03 2020-07-14 Toshiba Memory Corporation Storage device writing data on the basis of stream
KR20170013104A (ko) * 2015-07-27 2017-02-06 삼성전자주식회사 스토리지 장치 및 상기 스토리지 장치의 동작 방법
KR20170026926A (ko) * 2015-08-31 2017-03-09 삼성전자주식회사 데이터 양에 기초하여 복수의 데이터 스트림을 관리하도록 구성되는 스토리지 장치
US10037247B2 (en) 2015-09-07 2018-07-31 SK Hynix Inc. Memory system having idle-memory devices and method of operating thereof
KR20170054633A (ko) * 2015-11-09 2017-05-18 삼성전자주식회사 스토리지 장치 및 그것의 동작 방법
KR20170133247A (ko) * 2016-05-25 2017-12-05 삼성전자주식회사 어드레스 기반의 멀티-스트림 스토리지 장치 액세스
KR20180011665A (ko) * 2016-07-25 2018-02-02 삼성전자주식회사 데이터 저장 장치 및 이를 포함하는 컴퓨팅 시스템
US11048411B2 (en) 2016-10-26 2021-06-29 Samsung Electronics Co., Ltd. Method of consolidating data streams for multi-stream enabled SSDs
KR20180045786A (ko) * 2016-10-26 2018-05-04 삼성전자주식회사 멀티-스트림이 가능한 솔리드 스테이트 드라이브들을 위하여 데이터 스트림들을 통합하는 방법
KR20180048251A (ko) * 2016-11-02 2018-05-10 삼성전자주식회사 다중-스트림 스킴에서 희생 스트림 선택 알고리즘들
US11194710B2 (en) 2017-04-25 2021-12-07 Samsung Electronics Co., Ltd. Garbage collection—automatic data placement
US11048624B2 (en) 2017-04-25 2021-06-29 Samsung Electronics Co., Ltd. Methods for multi-stream garbage collection
US11630767B2 (en) 2017-04-25 2023-04-18 Samsung Electronics Co., Ltd. Garbage collection—automatic data placement
US11061591B2 (en) 2018-11-02 2021-07-13 Samsung Electronics Co., Ltd. Storage device processing stream data, system including the same, and operation method thereof
US11635902B2 (en) 2018-11-02 2023-04-25 Samsung Electronics Co., Ltd. Storage device processing stream data, system including the same, and operation method
CN111414131B (zh) * 2019-01-07 2023-08-22 爱思开海力士有限公司 数据存储装置、其操作方法和包括其的存储系统
CN111414131A (zh) * 2019-01-07 2020-07-14 爱思开海力士有限公司 数据存储装置、其操作方法和包括其的存储系统
US11262939B2 (en) 2019-08-30 2022-03-01 SK Hynix Inc. Memory system, memory controller, and operation method
WO2022191454A1 (ko) * 2021-03-11 2022-09-15 삼성전자 주식회사 블록 장치 이미지에 대한 런타임 체크섬 검증을 수행하는 전자 장치 및 이의 동작 방법

Also Published As

Publication number Publication date
US20150074337A1 (en) 2015-03-12
US10095613B2 (en) 2018-10-09
KR102074329B1 (ko) 2020-02-06

Similar Documents

Publication Publication Date Title
KR102074329B1 (ko) 데이터 저장 장치 및 그것의 데이터 처리 방법
CN113377283B (zh) 具有分区命名空间的存储器系统及其操作方法
US9690700B2 (en) Host-driven garbage collection
KR101717081B1 (ko) 비휘발성 램과 휘발성 램을 버퍼 메모리로 사용하는 저장 장치
KR102381343B1 (ko) 스토리지 장치 및 상기 스토리지 장치의 동작 방법
KR20170054633A (ko) 스토리지 장치 및 그것의 동작 방법
KR20170032502A (ko) 스토리지 장치 및 그것의 인터럽트 발생 방법
US20110271037A1 (en) Storage device performing data invalidation operation and data invalidation method thereof
US11675698B2 (en) Apparatus and method and computer program product for handling flash physical-resource sets
US20210240667A1 (en) User device including storage device and trim management method thereof
CN106951374B (zh) 用于检查块页地址的方法及其装置
US20220350655A1 (en) Controller and memory system having the same
KR20170033480A (ko) 스토리지 장치 및 그것을 포함하는 서버 시스템의 매칭 키 검색 방법
CN113468083B (zh) 一种双端口NVMe控制器及控制方法
CN106874223B (zh) 数据传输方法、存储器存储装置及存储器控制电路单元
US11960419B2 (en) Systems and methods for data prefetching for low latency data read from a remote server
KR101549569B1 (ko) 가비지 컬렉션 수행 방법 및 그 방법을 이용한 플래시 메모리 장치
JP7170093B2 (ja) 記憶デバイスのための改良された先読み能力
US11449428B2 (en) Enhanced read-ahead capability for storage devices
KR102088945B1 (ko) 메모리 컨트롤러 및 이를 포함하는 스토리지 디바이스
KR102266166B1 (ko) 메모리 컨트롤러 및 이를 포함하는 스토리지 디바이스
CN117032594B (zh) 一种读命令调度方法、处理方法、装置及存储设备
EP4287028A1 (en) Storage device providing high purge performance and memory block management method thereof
KR102343600B1 (ko) 메모리 컨트롤러 및 이를 포함하는 스토리지 디바이스
TW201348963A (zh) 外接儲存裝置加速器及其方法

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