KR102646724B1 - 배리어 커맨드에 기초하여 데이터를 순서대로 저장하는 스토리지 장치 - Google Patents

배리어 커맨드에 기초하여 데이터를 순서대로 저장하는 스토리지 장치 Download PDF

Info

Publication number
KR102646724B1
KR102646724B1 KR1020180068127A KR20180068127A KR102646724B1 KR 102646724 B1 KR102646724 B1 KR 102646724B1 KR 1020180068127 A KR1020180068127 A KR 1020180068127A KR 20180068127 A KR20180068127 A KR 20180068127A KR 102646724 B1 KR102646724 B1 KR 102646724B1
Authority
KR
South Korea
Prior art keywords
data
barrier
command
volatile memory
program
Prior art date
Application number
KR1020180068127A
Other languages
English (en)
Other versions
KR20190086341A (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 CN201811590628.6A priority Critical patent/CN110033799A/zh
Priority to US16/238,342 priority patent/US11741010B2/en
Priority to SG10201900042WA priority patent/SG10201900042WA/en
Priority to EP19150797.9A priority patent/EP3511814B1/en
Priority to JP2019002547A priority patent/JP7274869B2/ja
Publication of KR20190086341A publication Critical patent/KR20190086341A/ko
Application granted granted Critical
Publication of KR102646724B1 publication Critical patent/KR102646724B1/ko

Links

Images

Classifications

    • 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
    • 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/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/061Improving I/O performance
    • G06F3/0611Improving I/O performance in relation to response time
    • 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
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C16/00Erasable programmable read-only memories
    • G11C16/02Erasable programmable read-only memories electrically programmable
    • G11C16/06Auxiliary circuits, e.g. for writing into memory
    • G11C16/10Programming or data input circuits
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C16/00Erasable programmable read-only memories
    • G11C16/02Erasable programmable read-only memories electrically programmable
    • G11C16/06Auxiliary circuits, e.g. for writing into memory
    • G11C16/34Determination of programming status, e.g. threshold voltage, overprogramming or underprogramming, retention
    • G11C16/3436Arrangements for verifying correct programming or erasure
    • G11C16/3454Arrangements for verifying correct programming or for detecting overprogrammed cells
    • G11C16/3459Circuits or methods to verify correct programming of nonvolatile memory cells

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)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Read Only Memory (AREA)

Abstract

비휘발성 메모리 장치를 포함한 스토리지 장치에 데이터를 프로그램하는 방법은, 호스트로부터 제 1 배리어 커맨드, 제 2 배리어 커맨드 및 제 3 배리어 커맨드를 수신하고, 호스트로부터 제 1 배리어 커맨드에 대응하는 제 1 데이터, 제 2 배리어 커맨드에 대응하는 제 2 데이터, 제 3 배리어 커맨드에 대응하는 제 3 데이터를 수신하고, 제 1 및 제 2 배리어 커맨드들을 병합하고 그리고 상기 제 1 및 제 2 데이터를 상기 제 1 및 제 2 배리어 커맨드들의 순서에 대응하여 연속적으로 비휘발성 메모리 장치에 프로그램하고, 제 1 및 제 2 데이터 모두의 프로그램 완료를 검증하고, 제 1 및 제 2 데이터의 프로그램이 완료되면 제 1 및 제 2 데이터를 맵 인(map in)하고 그리고 제 1 또는 제 2 데이터의 프로그램이 완료되지 않으면 제 1 및 제 2 데이터 모두를 맵 아웃하고, 그리고 맵 인 또는 맵 아웃 이후에, 비휘발성 메모리 장치에 제 3 데이터를 프로그램할 수 있다.

Description

배리어 커맨드에 기초하여 데이터를 순서대로 저장하는 스토리지 장치{STORAGE DEVICE STORING DATA IN ORDER BASED ON BARRIER COMMAND}
본 발명은 스토리지 장치에 관한 것으로, 좀 더 자세하게는 배리어 커맨드에 기초하여 데이터를 순서대로 저장하는 스토리지 장치에 관한 것이다.
스토리지 장치는 비휘발성 저장 매체로서, 스토리지 장치에 저장된 데이터는 전원 공급에 관계없이 영구적으로 혹은 반영구적으로 보존될 수 있다. 일반적으로, 스토리지 장치는 호스트로부터 제공된 데이터를 비휘발성 메모리가 아닌 버퍼 메모리에 먼저 저장하고, 그 다음 버퍼 메모리의 데이터를 비휘발성 메모리에 저장할 수 있다. 그러나, 상술한 프로그램 동작으로 인하여 호스트의 쓰기 요청들의 순서가 보장되지 않을 수 있다.
호스트는 쓰기 순서를 보장하기 위해, 데이터를 전송하고, 그 데이터가 스토리지 장치의 비휘발성 메모리에 저장될 때까지(플러시(flush)) 기다리고, 그리고 다음 데이터를 스토리지 장치로 전송할 수 있다. 이러한 동작으로 인하여 호스트의 성능이 감소할 수 있다. 따라서, 호스트의 성능 감소 없이 쓰기 요청들의 순서를 보장할 수 있는 스토리지 장치가 필요하다.
본 발명은 상술한 기술적 과제를 해결하기 위한 것으로, 본 발명은 배리어 커맨드에 기초하여 데이터를 순서대로 저장하는 스토리지 장치를 제공할 수 있다.
본 발명의 실시 예에 따른, 비휘발성 메모리 장치를 포함한 스토리지 장치에 데이터를 프로그램하는 방법은, 호스트로부터 제 1 배리어 커맨드(barrier command), 제 2 배리어 커맨드 및 제 3 배리어 커맨드를 수신하고, 상기 호스트로부터 상기 제 1 배리어 커맨드에 대응하는 제 1 데이터, 상기 제 2 배리어 커맨드에 대응하는 제 2 데이터, 상기 제 3 배리어 커맨드에 대응하는 제 3 데이터를 수신하고, 상기 제 1 및 제 2 배리어 커맨드들을 병합(merge)하고 그리고 상기 제 1 및 제 2 데이터를 상기 제 1 및 제 2 배리어 커맨드들의 순서에 대응하여 연속적으로 상기 비휘발성 메모리 장치에 프로그램하고, 상기 제 1 및 제 2 데이터 모두의 프로그램 완료를 검증(verify)하고, 상기 제 1 및 제 2 데이터의 프로그램이 완료되면 상기 제 1 및 제 2 데이터를 맵 인(map in)하고 그리고 상기 제 1 데이터 및 상기 제 2 데이터 중 적어도 하나가 프로그램이 완료되지 않으면 상기 제 1 및 제 2 데이터 모두를 맵 아웃(map out)하고, 그리고 상기 맵 인 또는 상기 맵 아웃 이후에, 상기 비휘발성 메모리 장치에 상기 제 3 데이터를 프로그램한다.
본 발명의 다른 실시 예에 따른, 비휘발성 메모리 장치를 제어하는 메모리 컨트롤러의 동작 방법은, 호스트로부터 제 1 배리어 커맨드와 제 1 프로그램 커맨드, 제 2 배리어 커맨드와 제 2 프로그램 커맨드, 및 제 3 배리어 커맨드와 제 3 프로그램 커맨드를 수신하고, 호스트로부터 제 1 배리어 커맨드에 대응하는 제 1 데이터, 제 2 배리어 커맨드에 대응하는 제 2 데이터, 제 3 배리어 커맨드에 대응하는 제 3 데이터를 수신하고, 상기 제 1 내지 제 3 배리어 커맨드들을 병합하여 상기 제 1 내지 제 3 데이터를 연속적으로 상기 비휘발성 장치에 프로그램하고, 상기 제 1 내지 제 3 데이터의 프로그램 여부를 검증(verify)하고, 상기 제 1 내지 제 3 데이터가 모두 프로그램되면 상기 제 1 내지 제 3 데이터를 유효(valid) 데이터로 분류하고, 그리고 상기 제 1 내지 제 3 데이터 중 적어도 하나의 데이터가 프로그램되지 않으면 상기 제 1 내지 제 3 데이터를 모두 무효(invalid) 데이터로 분류한다.
본 발명의 또 다른 실시 예에 따른 컴퓨터 시스템은 호스트 및 상기 호스트로부터 제 1 내지 제 3 배리어 커맨드들을 수신하고, 그리고 상기 제 1 내지 제 3 배리어 커맨드들에 각각 대응하고 프로그램될 제 1 내지 제 3 데이터를 호스트로부터 제공받는 스토리지 장치를 포함하고, 상기 스토리지 장치는, 상기 제 1 내지 제 3 데이터를 저장하는 복수의 비휘발성 메모리 장치들 및 상기 복수의 비휘발성 메모리 장치들을 제어하고, 상기 제 1 내지 제 3 배리어 커맨드들을 병합하고, 상기 제 1 내지 제 3 데이터를 연속적으로 프로그램하고, 상기 제 1 내지 제 3 데이터의 프로그램 완료 여부를 판별하고, 상기 제 1 내지 제 3 데이터가 모두 프로그램 완료되면, 상기 제 1 내지 제 3 데이터를 유효 데이터로 맵 인(map in)하고, 상기 제 1 내지 제 3 데이터 중 적어도 하나의 데이터가 프로그램이 완료되지 않으면, 상기 제 1 내지 3 데이터를 무효 데이터로 맵 아웃(map out)하는 메모리 컨트롤러를 포함한다.
본 발명의 실시 예에 따르면, 스토리지 장치는 쓰기 순서를 지키기 위한 배리어 커맨드를 지원할 수 있다. 이러한 스토리지 장치와 통신하는 호스트는 스토리지 장치에 의해 순서대로 요청한 쓰기 요청들이 각각 완료될 때까지 기다리지 않으면서, 쓰기 요청들을 순서대로 스토리지 장치에 제공할 수 있다.
도 1은 본 발명의 실시 예에 따른 컴퓨터 시스템을 예시적으로 보여주는 블록도이다.
도 2는 도 1의 호스트가 스토리지 장치에 저널링을 수행하는 동작을 예시적으로 보여주는 타이밍도이다.
도 3은 도 1의 컨트롤러를 좀 더 구체적으로 보여주는 블록도이다.
도 4 및 도 5는 본 발명의 실시 예들에 따라, 스토리지 장치가 배리어 커맨드를 처리하는 동작들을 예시적으로 도시한다.
도 6은 본 발명의 다른 실시 예에 따라, 스토리지 장치가 배리어 커맨드를 처리하는 동작을 예시적으로 도시한다.
도 7은 본 발명의 또 다른 실시 예에 따라, 스토리지 장치가 배리어 커맨드를 처리하는 동작을 예시적으로 도시한다.
도 8 및 도 9는 본 발명의 실시 예에 따라, 스토리지 장치가 순서대로 수신된 배리어 커맨드들을 처리하는 동작을 예시적으로 도시한다.
도 10 및 도 11은 본 발명의 다른 실시 예에 따라, 스토리지 장치가 순서대로 수신된 배리어 커맨드들을 처리하는 동작을 예시적으로 도시한다.
도 12는 본 발명의 또 다른 실시 예에 따라, 스토리지 장치가 순서대로 수신된 배리어 커맨드들을 처리하는 동작을 예시적으로 도시한다.
도 13은 본 발명의 또 다른 실시 예에 따라, 스토리지 장치가 순서대로 수신된 배리어 커맨드들을 처리하는 동작을 예시적으로 도시한다.
도 14는 도 1의 비휘발성 메모리 장치의 비휘발성 메모리들 중 하나를 예시적으로 보여주는 블록도이다.
도 15는 도 14의 메모리 셀 어레이에 포함된 메모리 블록들 중 3차원 구조의 제 1 블록을 예시적으로 보여주는 회로도이다.
도 16은 도 1의 스토리지 장치의 동작 방법을 예시적으로 보여주는 순서도이다.
도 17은 본 발명의 실시 예에 따라, 쓰기 순서를 위한 시스템 콜을 지원하는 호스트의 소프트웨어 스택을 도시한다.
도 18은 도 17의 호스트가 스토리지 장치에 저널링을 수행하는 동작을 예시적으로 보여주는 타이밍도이다.
도 19는 본 발명의 실시 예에 따라 스토리지 장치의 IOPS 및 커맨드 큐의 깊이를 예시적으로 도시한다.
이하, 본 발명의 기술 분야에서 통상의 지식을 가진 자가 본 발명을 쉽게 실시할 수 있을 정도로, 실시 예들이 명확하고 상세하게 기재될 것이다.
도 1은 본 발명의 실시 예에 따른 컴퓨터 시스템을 예시적으로 보여주는 블록도이다. 컴퓨터 시스템(10)은 호스트(100) 및 스토리지 장치(200)를 포함할 수 있다. 컴퓨터 시스템(10)은 개인용 컴퓨터, 서버, 워크스테이션, 노트북, 태블릿, 모바일 장치, 스마트 폰 등과 같은 전자 장치에 적용되거나 구현될 수 있다. 호스트(100)는 배리어 커맨드(barrier command) 및 데이터를 스토리지 장치(200, 예를 들어, SSD(solid state drive))에 전송할 수 있다. 스토리지 장치(200)는 배리어 커맨드에 기초하여 데이터를 내부에 저장할 수 있다. 호스트(100)는 배리어 커맨드를 발행하여 데이터의 쓰기 순서를 스토리지 장치(200)에 알려주고, 스토리지 장치(200)는 배리어 커맨드에 기초하여 호스트(200)가 요청한 데이터의 쓰기 순서를 지킬 수 있다. 호스트(100)는 프로세싱 유닛(110), 호스트 메모리(120), 및 인터페이스 회로(130)를 포함할 수 있다.
프로세싱 유닛(110)은 호스트 메모리(120)에 로드(load)된 소프트웨어를 실행할 수 있다. 예를 들어, 프로세싱 유닛(110)은 응용 프로그램(application program), 파일 시스템(file system), 블록 입출력 스케줄러(block I/O scheduler), 및 장치 드라이버(device driver)를 실행할 수 있다. 프로세싱 유닛(110)은 동종 멀티-코어 프로세서(homogeneous multi-core processor)들 또는 이종 멀티-코어 프로세서(heterogeneous multi-core processor)들을 포함할 수 있다. 예를 들어, 프로세싱 유닛(110)은 CPU(central processing unit), ISP(image signal processing unit), DSP(digital signal processing unit), GPU(graphics processing unit), VPU(vision processing unit), 및 NPU(neural processing unit) 중 적어도 하나를 포함할 수 있다.
호스트 메모리(120)에는 컴퓨터 시스템(10) 내 모든 하드웨어와 소프트웨어를 관리하는 운영 체제(OS)가 로드(load)될 수 있다. 좀 더 구체적으로, 호스트 메모리(120)에는 유저 영역(user space)에 포함되는 응용 프로그램(121)과 커널(kernel) 영역에 포함되는 파일 시스템(122), 블록 입출력 스케줄러(123), 및 장치 드라이버(125)가 로드될 수 있다. 호스트 메모리(120)에 로드된 소프트웨어 계층들(121~123, 125)은 스토리지 장치(200)를 접근하기 위한 소프트웨어 스택(stack)에 포함될 수 있다. 호스트 메모리(120)는 DRAM(dynamic random access memory) 장치 또는 SRAM(static random access memory) 장치와 같은 저장 매체를 포함할 수 있다.
응용 프로그램(121)은 기본적인 서비스로서 실행되거나 또는 사용자의 요청에 의해 실행될 수 있다. 응용 프로그램(121)이 위치하는 유저 공간과 파일 시스템(122), 블록 입출력 스케줄러(123), 장치 드라이버(125) 등을 포함하는 커널이 위치하는 커널 공간은 서로 분리될 수 있다. 응용 프로그램(121)은 스토리지 장치(200)와 같은 자원을 직접적으로 접근할 수 없다. 대신에, 응용 프로그램(121)은 시스템 호출(system call) 함수가 포함된 라이브러리(미도시) 상에 정의된 함수를 호출할 수 있고 커널에 필요한 작업을 요청할 수 있다. 시스템 호출 함수가 호출되면, 유저 모드에서 커널 모드로 전환될 수 있다(switch).
파일 시스템(122)은 스토리지 장치(200)에 저장되는 파일 또는 데이터를 관리할 수 있다. 예를 들어, 파일 시스템(122)은 FAT(file allocation table), NTFS(new technology file system), HFS(hierarchical file system), HPFS(high performance file system), UFS(unix file system), ext2(secondary extended file system), ext3, ext4, JFS(journaling file system), ISO 9660, Files-11, VxFS(veritas file system), ZFS, ReiserFS, UDF(universal disk format) 등을 포함할 수 있다. 특히, 파일 시스템(122)은 SPO(sudden power off) 또는 시스템 오류(system crash)로 인해 데이터베이스, 파일, 또는 데이터의 일관성이 유지되지 않는 것을 방지하기 위해 저널링(journaling)을 수행할 수 있다.
블록 입출력 스케줄러(123)는 블록 계층에 위치할 수 있다. 블록 입출력 스케줄러(123)는 파일 시스템(122)으로부터 입출력(IO) 요청들을 수신하고 수신된 IO 요청들을 스케줄러 큐(124)에 저장할 수 있다. 블록 입출력 스케줄러(123)는 스케줄러 큐(124)를 관리할 수 있다. 블록 입출력 스케줄러(123)는 IO 요청들을 병합하거나 IO 요청들의 순서를 조정할 수 있다(재배열(re-ordering)). 예를 들어, 스케줄러 큐(124)는 Noop 스케줄러, Deadline 스케줄러, Anticipatory 스케줄러, CFQ(completely fair queuing) 스케줄러 등을 포함할 수 있다.
장치 드라이버(125)는 스토리지 장치(200)와 같은 하드웨어 장치를 제어하기 위해 커널의 일부분으로서 동작하는 프로그램이다. 장치 드라이버(125)는 스케줄러 큐(124)에서 IO 요청들을 제거하고 스토리지 장치(200)를 제어하는 커맨드를 생성할 수 있다. 장치 드라이버(125)는 스케줄러 큐(124)의 IO 요청들을 처리할 수 있다. 예를 들어, 장치 드라이버(125)는 블록 단위로 스토리지 장치(200)에 데이터 입출력을 수행하는 블록 디바이스일 수 있다. 실시 예에 있어서, 호스트 메모리(120)에 로드되는 프로그램, 소프트웨어 계층은 도 2에서 도시된 것으로 한정되지 않는다.
인터페이스 회로(130)는 호스트(100)와 스토리지 장치(200)간의 물리적인 연결들을 제공할 수 있다. 예를 들어, 인터페이스 회로(130)는 호스트(100)에서 생성되는 다양한 IO 요청들에 대응하는 커맨드들, 어드레스들, 데이터 등을 스토리지 장치(200)와의 통신 방식에 따라 변환할 수 있다.
호스트(100)는 배리어 커맨드 및 데이터를 스토리지 장치(200)로 전송할 수 있다. 호스트(100)는 배리어 커맨드를 발행함으로써 스토리지 장치(200)에 데이터를 순서대로(in order) 쓸 것을 요청할 수 있다. 스토리지 장치(200)는 호스트(100)로부터 배리어 커맨드 및 배리어 커맨드에 대응하는 데이터를 수신할 수 있다. 스토리지 장치(200)는 컨트롤러(210), 버퍼 메모리(220), 및 비휘발성 메모리 장치(230)를 포함할 수 있다.
컨트롤러(210; 혹은 메모리 컨트롤러)는 호스트(100)로부터 수신된 커맨드를 처리할 수 있다. 컨트롤러(210)는 버퍼 메모리(220) 및 비휘발성 메모리 장치(230)의 동작들을 제어할 수 있다. 컨트롤러(210)는 비휘발성 메모리 장치(230)보다 데이터 입출력 속도가 빠른 버퍼 메모리(220)에 호스트(100)로부터 수신된 데이터를 저장할 수 있고(버퍼링(buffering)) 그 다음 버퍼 메모리(220)에 저장된 데이터를 비휘발성 메모리 장치(230)에 쓰거나 프로그램할 수 있다.
실시 예에 있어서, 컨트롤러(210)와 인터페이스 회로(130)는 USB(universal Serial Bus), SCSI(small computer system interface), PCIe(peripheral component interconnect express), M-PCIe(mobile PCIe), NVMe(nonvolatile memory express), ATA(advanced technology attachment), PATA(parallel ATA), SATA(serial ATA), SAS(serial attached SCSI), IDE(integrated drive electronics), UFS(universal flash storage), Firewire 등과 같은 다양한 인터페이스 규약(interface protocol)들 중 하나 이상에 따라 서로 통신할 수 있다.
버퍼 메모리(220)는 호스트(100)로부터 수신된 데이터 또는 비휘발성 메모리 장치(230)로부터 수신된 데이터를 임시로 저장할 수 있다. 버퍼 메모리(220)는 호스트(100)의 논리 어드레스(LA; 혹은 논리 블록 어드레스(LBA))들과 비휘발성 메모리 장치(230)의 물리 어드레스(PA; 혹은 물리 블록 어드레스(PBA))들의 관계를 나타내는 맵핑 테이블을 저장할 수 있다. 버퍼 메모리(220)는 DRAM 장치 또는 SRAM 장치를 이용하여 구현될 수 있다.
비휘발성 메모리 장치(230)는 제 1 채널(CH1)을 통해 컨트롤러(210)와 통신하는 비휘발성 메모리들, 제 2 채널(CH2)을 통해 컨트롤러(210)와 통신하는 비휘발성 메모리들, 및 제 3 채널(CH3)을 통해 컨트롤러(210)와 통신하는 비휘발성 메모리들을 포함할 수 있다. 비휘발성 메모리 장치(230)와 컨트롤러(210)간의 채널들의 개수는 도 1에서 도시된 바에 한정되지 않는다. 비휘발성 메모리들 각각은 낸드 플래시 메모리 셀, 노어 플래시 메모리 셀, RRAM(resistive random access memory) 셀, FRAM(ferroelectric random access memory) 셀, PRAM(phase change random access memory) 셀, TRAM(thyristor random access memory) 셀, MRAM(magnetic random access memory) 셀 등과 같은 비휘발성 메모리 셀을 포함할 수 있다. 이하의 설명에서, 제 1 내지 제 3 비휘발성 메모리들 각각은 낸드 플래시 메모리 셀을 포함하는 것으로 가정한다.
실시 예에 있어서, 컨트롤러(210)는 버퍼 메모리(220)를 캐시(cache) 메모리로서 이용할 수 있다. 컨트롤러(210)는 버퍼 메모리(220)에 비휘발성 메모리 장치(230)의 프로그램 단위(program unit)에 대응하는 데이터를 저장 및 병합하고, 병합된 데이터를 비휘발성 메모리 장치(230)에 한번에 프로그램할 수 있다. 상술한 동작에 의해, 비휘발성 메모리 장치(230)의 수명 및 성능이 개선될 수 있으나, 호스트(100)로부터 쓰기 커맨드들을 수신한 순서대로 데이터의 집합이 비휘발성 메모리 장치(230)에 프로그램되지 않을 수 있다. 여기서, 데이터의 집합은 쓰기 커맨드들에 각각 대응하는 데이터의 복수 형태를 나타내기 위한 용어이고, 멀티 데이터 또는 복수의 데이터로 지칭될 수도 있다. 호스트(100)는 스토리지 장치(200)에 저장되는 데이터의 종류, 응용 프로그램(121)에 기초하여 데이터의 집합이 비휘발성 메모리 장치(230)에 순서대로 프로그램되도록, 배리어 커맨드를 발행할 수 있다.
도 2는 도 1의 호스트가 스토리지 장치에 저널링을 수행하는 동작을 예시적으로 보여주는 타이밍도이다. 도 2는 도 1을 참조하여 설명될 것이다. 예를 들어, 호스트 메모리(120)에 로드된 운영 체제(예를 들어, 안드로이드 운영 체제(android OS))는 캐시 플러시 커맨드(cache flush command)를 자주 생성할 수 있다. 운영 체제는 데이터가 비휘발성 메모리 장치(230)에 실제로 프로그램되는 것을 보장하기 위해 캐시 플러시 커맨드를 생성할 수 있으나 데이터의 집합이 비휘발성 메모리 장치(230)에 쓰여지는 순서를 보장하기 위해 캐시 플러시 커맨드를 생성할 수도 있다. 전술한대로, 파일 시스템(122)은 저널링을 수행할 수 있다. 호스트(100)는 데이터베이스 파일의 일부를 수정하는 경우, 수정되어야 하는 데이터 원본을 저널에 백업하고, 데이터베이스 파일을 수정하고, 그리고 저널을 삭제할 수 있다. 파일 시스템(122)이 저널 트랜잭션(transaction)을 수행 완료(commit)하기 위해 또는 데이터베이스에 대한 일관성을 유지하기 위해, 캐시 플러시 커맨드를 스토리지 장치(200)로 전송할 수 있다. 이러한 캐시 플러시 커맨드는 쓰기 순서를 지키기 위한 것이다.
도 2를 참조하면, 저널을 백업할 때 또는 데이터베이스 파일 수정 이후에 fsync()와 같은 시스템 호출이 호출될 수 있다. fsync()가 시작되면, 파일 시스템(122)은 파일 데이터(D)를 스토리지 장치(200)로 전송하기 위해 블록 계층의 스케줄러 큐(124)에 쓰기 요청들을 삽입할 수 있다. 쓰기 요청들은 스토리지 장치(200)로 디스패치(dispatch)될 수 있다. 파일 시스템(122)은 파일 데이터(D)의 DMA(direct memory access) 전송이 완료될 때까지 기다린다. DMA 전송은 프로세싱 유닛(110)과 독립적인 호스트(100) 내의 DMA 컨트롤러(미도시)가 스토리지 장치(200)와 직접적으로 데이터를 교환하는 것을 의미할 수 있다. 파일 시스템(122)은 파일 데이터(D)의 DMA 전송이 완료되면 저널 트랜잭션을 수행 완료하기 위해, JBD(journal block device)를 트리거(trigger)할 수 있다. JBD는 파일 시스템(122)이 저널링을 위해 확보한 호스트 메모리(120)의 일부에서 실행되는 쓰레드(thread)일 수 있다.
JBD는 저널 데이터(JD)를 스토리지 장치(200)로 전송하기 위해 스케줄러 큐(124)에 쓰기 요청들을 삽입할 수 있다. 장치 드라이버(125)에 의해 쓰기 요청들은 스토리지 장치(200)로 디스패치될 수 있다. JBD는 저널 데이터(JD)의 DMA(direct memory access) 전송이 완료될 때까지 기다린다. 파일 시스템(122)은 저널 데이터(JD)의 DMA 전송이 완료되면, 저널 데이터(JD)가 버퍼 메모리(220)에서 비휘발성 메모리 장치(230)로 플러쉬되도록, 스케줄러 큐(124)에 플러시 요청들을 삽입할 수 있다. 장치 드라이버(125)에 의해 플러시 요청들은 스토리지 장치(200)로 디스패치될 수 있다(즉, 캐시 플러시 커맨드의 전송). 저널 데이터(JD)의 플러시가 완료되면, 스케줄러 큐(124)에 삽입된 쓰기 요청들이 스토리지 장치(200)로 디스패치될 수 있다. 이러한 쓰기 요청들에 따라 저널 커밋(journal commit; JC)의 DMA 전송이 완료되고 저널 커밋(JC)의 플러시가 완료되면, fsync()가 리턴(return)될 수 있다. 저널 커밋(JC)이 비휘발성 메모리 장치(230)에 쓰여져야만, 파일 시스템(122)은 저널링 트랜잭션을 수행 완료할 수 있다. 저널링 트랜잭션을 수행 완료한 이후에 파일 시스템(122)은 다른 동작을 수행할 수 있다.
도 2를 참조하면, 파일 시스템(122)은 저널링을 수행하는 동안 쓰기 순서를 지키기 위해, 파일 데이터(D)의 DMA 전송, 저널 데이터(JD)의 DMA 전송 및 플러시, 및 저널 커밋(JC)의 DMA 전송 및 플러시가 모두 완료될 때까지 기다려야 한다. 도 2에서 설명된 저널링은 스토리지 장치(200) 내부의 병렬 처리를 무력화하거나(neutralize) 또는 컨트롤러(210)의 커맨드 큐의 깊이(depth)를 감소시킬 수 있다. 특히, 호스트(100)의 동작은 스토리지 장치(200) 내부의 셀 프로그래밍에 필요한 시간만큼 지연될 수 있다. 따라서, 호스트(100)는 쓰기 순서를 지키고 캐시 플러시 커맨드로 인한 지연을 줄이기 위해, 캐시 플러시 커맨드 대신에 배리어 커맨드를 생성할 수 있다. 호스트(100)는 캐시 플러시 커맨드 대신에 배리어 커맨드를 발행하고, 배리어 커맨드에 따른 스토리지 장치(200)의 동작이 완료될 때까지 기다리지 않고 다른 동작을 수행할 수 있다.
실시 예에 있어서, 배리어 커맨드는 호스트(100)와 스토리지 장치(200)간의 인터페이스 규약에 정의된 것일 수 있다. 배리어 커맨드는 전술한 스케줄러 큐(124)의 한 엔트리(entry)를 차지할 수 있다. 다른 실시 예에 있어서, 호스트(100)는 쓰기 커맨드의 플래그(예를 들면, REQ_BARRIER)를 설정함으로써 쓰기 커맨드를 배리어 커맨드로 설정할 수 있다. 스토리지 장치(200)는 쓰기 커맨드의 플래그를 디코딩(decoding)하고 쓰기 커맨드가 배리어 커맨드인지 여부를 확인할 수 있다. 스토리지 장치(200)는 배리어 커맨드에 대응하는 데이터를 순서대로 저장할 수 있다. 배리어 커맨드는 프로그램 커맨드, 즉 쓰기 커맨드를 포함할 수 있다.
도 2에서 fsync()가 호출된 것으로 도시되었으나, fdatasync()가 호출될 수도 있다. fdatasync()는 fsync()와 유사하다. fsync()에 의해 파일 메타데이터가 수정될 수 있다. 그러나 fdatasync()가 호출되면, 새로 쓰여진 데이터를 읽기 위한 파일 메타데이터가 추가 수정되지 않았으면, 파일 메타데이터가 수정되지 않을 수 있다.
도 3은 도 1의 컨트롤러를 좀 더 구체적으로 보여주는 블록도이다. 도 3은 도 1을 참조하여 설명될 것이다. 컨트롤러(210)는 프로세싱 유닛(211), 워킹 메모리(212), 호스트 인터페이스 회로(214), 버퍼 메모리 인터페이스 회로(215), 및 플래시 인터페이스 회로(216)를 포함할 수 있다. 컨트롤러(210)는 SoC(system on chip), ASIC(application specific integrated circuit), 또는 FPGA(field programmable gate array)를 이용하여 구현될 수 있다. 버퍼 메모리(220)는 도 1에서 도시된 것과 같이 컨트롤러(210)와 별개로 제공되거나 도 2에서 도시된 것과 같이 컨트롤러(210)에 포함될 수 있다.
프로세싱 유닛(211)은 호스트(100)로부터 제공되는 커맨드를 디코딩할 수 있다. 프로세싱 유닛(211)은 커맨드에 기초하여 컨트롤러(210)의 다른 구성 요소들(212~216)의 동작을 제어할 수 있다. 프로세싱 유닛(211)은 비휘발성 메모리 장치(230)를 관리하기 위한 가비지 컬렉션이나, 논리 어드레스와 물리 어드레스의 관계를 나타내는 맵핑 테이블, 웨어 레벨링(wear leveling) 등을 수행하기 위한 플래시 변환 계층(FTL)을 실행할 수 있다. 프로세싱 유닛(211)은 전술한 프로세싱 유닛들 중 적어도 하나를 포함할 수 있다.
워킹 메모리(212)는 캐시 메모리로서 동작할 수 있다. 워킹 메모리(212)는 프로세싱 유닛(211)의 디코딩 결과를 저장할 수 있다. 예를 들어, 워킹 메모리(212)의 영역에는 호스트(100)로부터 전송되는 순서대로 커맨드들(CMD1~CMD2)을 저장하는 커맨드 큐(213)가 할당될 수 있다. 여기서, 커맨드 큐(213)에 저장되는 커맨드들의 개수는 도시된 것으로 한정되지 않는다. 그리고 도시된 것과 달리, 커맨드 큐(213)는 프로세싱 유닛(211)에 또는 버퍼 메모리(220)의 일부 영역에 위치할 수도 있다.
호스트 인터페이스 회로(214)는 상술한 인터페이스 규약에 따라 호스트(100)와 통신을 수행할 수 있다. 예를 들어, 호스트 인터페이스 회로(214)는 NVMe 프로토콜에 따라 동작할 수 있다. 프로세싱 유닛(211)은 호스트 인터페이스 회로(214)를 통해 커맨드들을 수신하고 수신된 커맨드들을 순서대로 커맨드 큐(213)에 삽입할 수 있다.
버퍼 메모리 인터페이스 회로(215)는 프로세싱 유닛(211)의 제어에 따라 버퍼 메모리(220)의 읽기 동작과 쓰기 동작을 제어할 수 있다. 버퍼 메모리 인터페이스 회로(215)는 논리 어드레스와 물리 어드레스의 관계를 나타내는 맵핑 테이블을 버퍼 메모리(220)로 제공할 수 있다. 버퍼 메모리 인터페이스 회로(215)는 버퍼 메모리(220)에 저장된 데이터를 호스트 인터페이스 회로(214) 또는 플래시 인터페이스 회로(216)로 제공할 수 있다. 버퍼 메모리 인터페이스 회로(215)는 호스트 인터페이스 회로(214) 또는 플래시 인터페이스 회로(216)로부터 제공된 데이터를 버퍼 메모리(220)로 제공할 수 있다.
버퍼 메모리(220)는 후기록 캐시(write back cache; 221)가 할당되는 영역과 쓰기 버퍼(write buffer; 222)가 할당되는 영역을 포함할 수 있다. 예를 들어, 호스트(100)로부터 제공되고 커맨드에 대응하는 데이터의 크기가 비휘발성 메모리 장치(230)의 프로그램 단위보다 작으면, 데이터는 후기록 캐시(221)에 저장될 수 있다. 호스트(100)로부터 제공되고 커맨드에 대응하는 데이터의 크기가 메모리 장치(230)의 프로그램 단위와 같거나 프로그램 단위보다 크면, 데이터는 쓰기 버퍼(222)에 저장될 수 있다.
플래시 인터페이스 회로(216)는 비휘발성 메모리 장치(230)와 데이터를 교환할 수 있다. 플래시 인터페이스 회로(216)는 버퍼 메모리(220)로부터 제공된 데이터를 도 1의 채널들(CH1~CH3)을 통해 비휘발성 메모리 장치(230)에 쓰거나 또는 비휘발성 메모리 장치(230)로부터 채널들(CH1~CH3)을 통해 데이터를 수신하고 수신된 데이터를 버퍼 메모리(220)에 제공할 수 있다. 이하, 컨트롤러(210)가 배리어 커맨드를 처리하는 다양한 예시들이 설명될 것이다.
도 4 및 도 5는 본 발명의 실시 예들에 따라, 스토리지 장치가 배리어 커맨드를 처리하는 동작들을 예시적으로 도시한다. 도 4 및 도 5는 도 1을 참조하여 함께 설명될 것이다. 설명의 용이함을 위해, 스토리지 장치(200)의 커맨드 큐(213), 후기록 캐시(221), 쓰기 버퍼(222), 및 도 1의 비휘발성 메모리 장치(230)만이 예시적으로 도시되었다. 비휘발성 메모리 장치(230)는 복수의 블록들을 포함할 수 있으나 예시적으로 하나의 블록만이 도시되었다. 블록은 적어도 하나 이상의 물리 페이지(physical page)를 포함할 수 있다. 물리 페이지는 읽기 단위 혹은 쓰기(프로그램) 단위에 대응하는 메모리 셀들을 포함할 수 있다. 블록의 메모리 셀들은 소거 단위에 대응할 수 있다.
스토리지 장치(200)의 컨트롤러(210)는 제 1 쓰기 커맨드(WCMD1), 제 2 배리어 커맨드(BCMD2), 및 제 3 쓰기 커맨드(WCMD3)를 순서대로 수신할 수 있고 제 1 쓰기 커맨드(WCMD1), 제 2 배리어 커맨드(BCMD2), 및 제 3 쓰기 커맨드(WCMD3)는 순서대로 커맨드 큐(213)에 삽입할 수 있다. 도 4에서 스토리지 장치(200)는 제 2 배리어 커맨드(BCMD2)를 지원하지 못하고 도 5에서 스토리지 장치(200)는 배리어 커맨드(BCMD2)를 지원하고 쓰기 순서를 지키는 것으로 가정한다. 그리고, 제 1 쓰기 커맨드(WCMD1)에 대응하는 제 1 데이터(DATA1)의 크기와 제 2 배리어 커맨드(BCMD2)에 대응하는 제 2 데이터(DATA2)의 크기 각각은 비휘발성 메모리 장치(230)의 프로그램 단위(예를 들어, 16KB)보다 작은 4KB로 그리고 제 3 쓰기 커맨드(WCMD3)에 대응하는 제 3 데이터(DATA3)의 크기는 비휘발성 메모리 장치(230)의 프로그램 단위와 같은 16KB로 가정한다. 도 4 및 도 5에서, 비휘발성 메모리 장치(230)의 프로그램 단위와 물리 페이지의 크기가 서로 일치하는 것으로 도시되었으나, 프로그램 단위와 물리 페이지의 크기는 서로 다를 수도 있다.
예를 들어, 컨트롤러(210)는 비휘발성 메모리 장치(230)의 프로그램 시간을 감소시키기 위해, 인터리빙(interleaving) 방식으로 멀티 채널, 멀티 웨이, 및 멀티 플레인을 통해 복수의 물리 페이지들을 동시에 프로그램할 수 있다. 즉, 비휘발성 메모리 장치(230)의 프로그램 단위는 비휘발성 메모리 장치(230)와 컨트롤러(210)를 연결하는 채널들의 개수, 채널들 각각에 연결된 웨이들의 개수, 비휘발성 메모리의 플레인들의 개수, 물리 페이지의 크기, 메모리 셀이 저장하는 비트들의 수에 따라 결정될 수 있다.
컨트롤러(210)는 프로그램 단위보다 작은 제 1 데이터(DATA1) 및 제 2 데이터(DATA2)를 후기록 캐시(221)에 저장할 수 있다. 예를 들어, 컨트롤러(210)는 프로그램 단위보다 작은 데이터의 집합을 후기록 캐시(221)에 병합한 후, 프로그램 단위에 대응하는 병합된 데이터를 비휘발성 메모리 장치(230)에 프로그램할 수 있다. 후기록 캐시(221)는 프로그램 단위보다 작은 데이터의 집합을 병합하는데 사용될 수 있다. 컨트롤러(210)는 프로그램 단위에 대응하는 제 3 데이터(DATA3)를 쓰기 버퍼(222)에 저장할 수 있다. 쓰기 버퍼(222)는 프로그램 단위와 같거나 프로그램 단위보다 큰 데이터를 저장하는데 사용될 수 있다.
도 4를 참조하면, 컨트롤러(210)는 프로그램 단위에 대응하지 않는 제 1 데이터(DATA1) 및 제 2 데이터(DATA2)에 다른 데이터가 병합되기 전에, 프로그램 단위에 대응하는 제 3 데이터(DATA3)를 제 2 데이터(DATA2)보다 먼저 비휘발성 메모리 장치(230)의 페이지에 프로그램할 수 있다. 제 3 데이터(DATA3)가 프로그램되고 그 다음 SPO 또는 시스템 오류가 발생하면, 후기록 캐시(221)에 저장되었던 제 1 데이터(DATA1) 및 제 2 데이터(DATA2)는 소멸될 수 있다. 도 4의 컨트롤러(210)는 제 2 배리어 커맨드(BCMD2)에 따라 제 1 데이터(DATA1), 제 2 데이터(DATA2), 및 제 3 데이터(DATA3)를 순서대로 프로그램하지 못할 수 있다.
반면에 도 5를 참조하면, 컨트롤러(210)는 제 2 배리어 커맨드(BCMD2)를 디코딩하고 제 1 데이터(DATA1), 제 2 데이터(DATA2), 및 제 3 데이터(DATA3)를 순서대로 프로그램할 수 있다. 컨트롤러(210)는 제 1 데이터(DATA1), 제 2 데이터(DATA2), 및 제 3 데이터(DATA3)의 일부(8KB)를 병합할 수 있고 병합된 데이터를 비휘발성 메모리 장치(230)에 프로그램할 수 있다. 여기서, 병합된 데이터의 크기는 프로그램 단위에 대응할 수 있다. 컨트롤러(210)는 제 2 배리어 커맨드(BCMD2)에 대응하는 제 2 데이터(DATA2)의 크기가 프로그램 단위보다 작더라도, 후기록 캐시(221) 또는 쓰기 버퍼(222)로부터 다른 데이터를 빌리고, 다른 데이터와 제 2 데이터(DATA2)를 병합하고, 그리고 프로그램 단위에 대응하는 병합된 데이터를 비휘발성 메모리 장치(230)에 프로그램할 수 있다. 즉, 컨트롤러(210)는 제 2 배리어 커맨드(BCMD2)에 기초하여 제 2 데이터(DATA2)의 쓰기 순서를 지킬 수 있다.
도 6은 본 발명의 다른 실시 예에 따라, 스토리지 장치가 배리어 커맨드를 처리하는 동작을 예시적으로 도시한다. 도 6은 도 1 및 도 5를 참조하여 설명될 것이다. 전술한 도 4 및 도 5의 가정은 도 6에도 적용될 수 있고, 도 6에서 스토리지 장치(200)는 배리어 커맨드(BCMD2)를 지원하고 쓰기 순서를 지키는 것으로 가정한다.
다시 도 5를 참조하면, 컨트롤러(210)가 제 3 데이터(DATA3)의 일부를 제 2 데이터(DATA2)에 병합하는 경우, 제 3 데이터(DATA3)의 나머지는 다른 물리 페이지에 프로그램될 수 있다. 제 3 데이터(DATA3)의 크기가 프로그램 단위에 대응함에도 불구하고, 제 3 데이터(DATA3)가 서로 다른 페이지들로 나뉘어지고 서로 다른 페이지들에 프로그램될 수 있다. 이 경우, 제 3 데이터(DATA3) 전체를 읽기 위해 비휘발성 메모리 장치(230)는 제 3 데이터(DATA3)가 저장된 적어도 2개의 물리 페이지들을 활성화해야 한다.
도 6을 참조하면, 컨트롤러(210)는 제 3 데이터(DATA3)의 일부 대신에 제 1 데이터(DATA1) 및 제 2 데이터(DATA2)에 더미 데이터를 병합할 수 있다. 컨트롤러(210)는 더미 데이터를 이용하여 제 2 배리어 커맨드(BCMD2)에 대응하는 제 2 데이터(DATA2)의 크기를 프로그램 단위로 조정할 수 있다. 컨트롤러(210)는 제 1 데이터(DATA1), 제 2 데이터(DATA2), 및 더미 데이터가 병합되고 프로그램 단위에 대응하는 데이터를 비휘발성 메모리 장치(230)의 물리 페이지에 프로그램하고 그 다음 제 3 데이터(DATA3)를 비휘발성 메모리 장치(230)의 다른 물리 페이지에 프로그램할 수 있다. 여기서, 제 2 데이터(DATA2)가 프로그램된 물리 페이지와 제 3 데이터(DATA3)가 프로그램된 물리 페이지의 위치는 서로 인접할 수도 있고 서로 떨어질 수도 있다. 컨트롤러(210)는 제 2 배리어 커맨드(BCMD2)에 기초하여 제 2 데이터(DATA2)의 쓰기 순서를 지킬 수 있다.
도 7은 본 발명의 또 다른 실시 예에 따라, 스토리지 장치가 배리어 커맨드를 처리하는 동작을 예시적으로 도시한다. 도 7은 도 1 및 도 5를 참조하여 설명될 것이다. 전술한 도 4 및 도 5의 가정은 도 7에도 적용될 수 있고, 도 7에서 스토리지 장치(200)는 배리어 커맨드를 지원하고 쓰기 순서를 지키는 것으로 가정한다.
컨트롤러(210)는 후기록 캐시(221)에 저장된 제 1 데이터(DATA1) 및 제 2 데이터(DATA2)를 제 1 블록(BLK1)에 저장할 수 있고 그 다음 쓰기 버퍼(222)에 저장된 제 3 데이터(DATA3)를 제 2 블록(BLK2)에 저장할 수 있다. 도시되진 않았으나, 컨트롤러(210)는 제 1 데이터(DATA1), 제 2 데이터(DATA2), 및 도 6의 더미 데이터를 병합하고 병합된 데이터를 제 1 블록(BLK1)에 저장할 수 있다.
도 7에서, 프로그램 단위보다 작은 제 1 데이터(DATA1) 및 제 2 데이터(DATA2)는 상대적으로 자주 업데이트되는 핫 데이터(hot data)일 수 있고, 프로그램 단위에 대응하는 제 3 데이터(DATA3)는 상대적으로 자주 업데이트 되지 않는 콜드 데이터(cold data)일 수 있다. 컨트롤러(210)는 제 2 배리어 커맨드(BCMD2)에 기초하여 제 2 데이터(DATA2)의 쓰기 순서를 지키면서도 핫 데이터가 저장되는 제 1 블록(BLK1)과 콜드 데이터가 저장되는 제 블록(BLK2)을 분리할 수 있다. 예를 들어, 제 1 블록(BLK1)의 메모리 셀들 각각은 1 비트를 저장하는 단일 레벨 셀(SLC)일 수 있고 제 2 블록(BLK2)의 메모리 셀들 각각은 적어도 2 비트를 저장하는 멀티 레벨 셀(MLC)일 수 있다.
도 5 내지 도 7을 참조하면, 컨트롤러(210)는 제 2 배리어 커맨드(BCMD2)에 대응하는 제 2 데이터(DATA2)보다 먼저 수신된 제 1 데이터(DATA1)를 비휘발성 메모리 장치(230)에 프로그램하고, 그 다음 제 2 데이터(DATA2)를 비휘발성 메모리 장치(230)에 프로그램하고, 그 다음 제 2 데이터(DATA2)보다 나중에 수신된 제 3 데이터(DATA3)를 비휘발성 메모리 장치(230)에 프로그램할 수 있다. 도 5 내지 도 7에서 도시되진 않았으나, 제 1 데이터(DATA1)가 프로그램되고, 다른 데이터가 프로그램되고, 그리고 제 2 데이터(DATA2)가 프로그램될 수도 있다. 또한, 제 2 데이터(DATA2)가 프로그램되고, 다른 데이터가 프로그램되고, 그리고 제 3 데이터(DATA3)가 프로그램될 수도 있다. 어느 경우든, 컨트롤러(210)는 다른 데이터의 프로그램 여부와 관계없이 제 2 데이터(DATA2)의 쓰기 순서를 지킬 수 있다.
도 8 및 도 9는 본 발명의 실시 예에 따라, 스토리지 장치가 순서대로 수신된 배리어 커맨드들을 처리하는 동작을 예시적으로 도시한다. 도 8 및 도 9는 함께 설명될 것이고 도 1을 참조하여 설명될 것이다. 도 8 및 도 9에서, 제 1 내지 제 4 데이터(DATA1~DATA4) 각각의 크기는 프로그램 단위에 대응하는 것으로 가정한다. 컴퓨터 시스템(10)에서 호스트(100)는 제 1 내지 제 3 배리어 커맨드들(BCMD1~BCMD3)을 순서대로 스토리지 장치(200)로 전송하고 제 1 내지 제 3 데이터(DATA1~DATA3)를 DMA 방식으로 스토리지 장치(200)로 전송할 수 있다. 호스트(100)는 제 1 배리어 커맨드(BCMD1), 제 1 데이터(DATA1), 제 2 배리어 커맨드(BCMD2), 제 2 데이터(DATA2), 제 3 배리어 커맨드(BCMD3), 및 제 3 데이터(DATA3)를 순서대로 전송할 수 있다. 제 1 데이터(DATA1)는 제 1 배리어 커맨드(BCMD1) 수신 이후에 연속적으로(sequentially) 제공될 수 있다. 제 2 데이터(DATA2)는 제 2 배리어 커맨드(CMD2) 수신에 이어서 제공될 수 있다. 다만, 호스트(100)는 제 1 데이터(DATA1)를 전송하는 동안 제 2 배리어 커맨드(BCMD2)를 전송할 수도 있다.
스토리지 장치(200)의 컨트롤러(210)는 호스트(100)로부터 제 1 내지 제 3 배리어 커맨드들(BCMD1~BCMD3)을 순서대로 수신하고 커맨드 큐(213)에 순서대로 삽입할 수 있다. 컨트롤러(210)는 제 1 내지 제 3 배리어 커맨드들(BCMD1~BCMD3)에 각각 대응하는 제 1 내지 제 3 데이터(DATA1~DATA3)를 수신하고 버퍼 메모리(220)에 저장할 수 있다(①).
컨트롤러(210)는 제 1 내지 제 3 배리어 커맨드들(BCMD1~BCMD3)을 디코딩하고, 제 1 내지 제 3 배리어 커맨드들(BCMD1~BCMD3)을 수신하는 순서에 대응하여 연속적으로 제 1 내지 제 3 데이터(DATA1~DATA3)를 순서대로 비휘발성 메모리 장치(230)에 프로그램할 수 있다(②). 컨트롤러(210)는 제 1 내지 제 3 데이터(DATA1~DATA3)의 프로그램을 아토믹하게(atomically) 수행할 수 있다. 컨트롤러(210)가 아토믹 프로그램(atomic program)을 수행하면, 제 1 내지 제 3 데이터(DATA1~DATA3)가 모두 정상적으로 비휘발성 메모리 장치(230)에 프로그램되거나(도 8 참조) 또는 제 1 내지 제 3 데이터(DATA1~DATA3)가 모두 비휘발성 메모리 장치(230)에 프로그램되지 않는다(도 9 참조). 아토믹 프로그램에 의해, 제 1 내지 제 3 데이터(DATA1~DATA3)의 일부만이 비휘발성 메모리 장치(230)에 프로그램되는 경우는 발생하지 않는다. 컨트롤러(210)는 제 1 내지 제 3 데이터(DATA1~DATA3)를 비휘발성 메모리 장치(230)에 프로그램하고 제 1 내지 제 3 데이터(DATA1~DATA3)의 프로그램을 수행 완료(commit)할 수 있다. 또는, 컨트롤러(210)는 제 1 내지 제 3 데이터(DATA1~DATA3)를 프로그램하지 않고 롤백(roll back)할 수 있다. 컨트롤러(210)는 제 1 내지 제 3 데이터(DATA1~DATA3)에 대한 아토믹 프로그램을 완료한 후에 제 4 데이터(DATA4)를 비휘발성 메모리 장치(230)에 프로그램할 수 있다. 제 4 데이터(DATA4)에 대한 커맨드의 도시는 생략되었다.
도 8을 참조하면, 제 1 데이터(DATA1)는 제 1 물리 페이지(<P1>)에 프로그램되고, 제 2 데이터(DATA2)는 제 2 물리 페이지(<P2>)에 프로그램되고, 그리고 제 3 데이터(DATA3)는 제 3 물리 페이지(<P3>)에 프로그램될 수 있다(아토믹 프로그램 성공). 이 경우, 컨트롤러(210)는 제 1 내지 제 3 물리 페이지들(<P1:P3>)의 맵핑 정보를 맵핑 테이블(L2P)에 맵 인(map in)하거나 업데이트할 수 있다(③). 여기서, 맵 인은 컨트롤러(210)가 제 1 내지 제 3 물리 페이지들(<P1:P3>)의 맵핑 정보를 맵핑 테이블(L2P)에 업데이트하는 동작을 나타낸다. 컨트롤러(210)는 맵 인을 통해 제 1 내지 제 3 데이터(DATA1~DATA3)를 모두 유효 데이터로 분류할 수 있다. 컨트롤러(210)는 제 1 내지 제 3 데이터(DATA1~DATA3)를 맵 인할 수 있다.
도 9를 참조하면, 제 1 데이터(DATA1)는 제 1 물리 페이지(<P1>)에 프로그램되고 제 3 데이터(DATA3)는 제 3 물리 페이지(<P3>)에 프로그램되었으나 SPO 또는 시스템 오류로 인해 제 2 데이터(DATA2)는 제 2 물리 페이지(<P2>)에 프로그램되지 않을 수 있다(아토믹 프로그램 실패). 이 경우, 컨트롤러(210)는 제 2 물리 페이지(<P2>)의 맵핑 정보뿐만 아니라 제 1 및 제 3 물리 페이지들(<P1, P3>)의 맵핑 정보도 맵핑 테이블(L2P)에 맵 아웃(map out)할 수 있다(③). 여기서, 맵 아웃은 컨트롤러(210)가 제 1 내지 제 3 물리 페이지들(<P1:P3>)의 맵핑 정보를 맵핑 테이블(L2P)에 업데이트하지 않는 동작을 나타낸다. 컨트롤러(210)는 맵 아웃을 통해 제 1 내지 제 3 데이터(DATA1~DATA3)를 모두 무효 데이터로 분류할 수 있다. 컨트롤러(210)는 제 1 내지 제 3 데이터(DATA1~DATA3)에 대한 가비지 컬렉션을 수행할 수 있고 제 1 내지 제 3 데이터(DATA1~DATA3)를 소거할 수 있다(④).
도 10 및 도 11은 본 발명의 다른 실시 예에 따라, 스토리지 장치가 순서대로 수신된 배리어 커맨드들을 처리하는 동작을 예시적으로 도시한다. 도 10 및 도 11는 함께 설명될 것이고 도 1을 참조하여 설명될 것이다. 도 8 및 도 9의 경우와 유사하게, 컨트롤러(210)는 제 1 내지 제 3 배리어 커맨드들(BCMD1~BCMD3)을 순서대로 수신하고 커맨드 큐(213)에 순서대로 삽입할 수 있다. 컨트롤러(210)는 여러 개의 배리어 커맨드들을 병합하고 처리할 수 있다. 예를 들어, 컨트롤러(210)는 제 1 및 제 2 배리어 커맨드들(BCMD1, BCMD2)을 병합할 수 있다. 컨트롤러(210)는 병합된 제 1 및 제 2 배리어 커맨드들(BCMD1, BCMD2)을 먼저 처리하고 그 다음 제 3 배리어 커맨드(BCMD3)를 처리할 수 있다.
컨트롤러(210)는 제 1 내지 제 3 배리어 커맨드들(BCMD1~BCMD3)에 각각 대응하는 제 1 내지 제 3 데이터(DATA1~DATA3)를 수신하고 버퍼 메모리(220)에 저장할 수 있다(①). 컨트롤러(210)는 제 1 및 제 2 배리어 커맨드들(BCMD1~BCMD3)의 순서에 대응하여 연속적으로 제 1 및 제 2 데이터(DATA1, DATA2)를 비휘발성 메모리 장치(230)의 제 2 및 제 3 물리 페이지들(<P2, P3>)에 프로그램할 수 있다. 그 다음, 컨트롤러(210)는 제 1 및 제 2 데이터(DATA1, DATA2)의 프로그램의 수행 완료 여부를 확인하기 위해 커밋 페이지(commit page)를 비휘발성 메모리 장치(230)의 제 4 물리 페이지(<P4>)에 프로그램할 수 있다(②).
컨트롤러(210)는 커밋 페이지를 읽음으로써 제 1 및 제 2 데이터(DATA1, DATA2)의 프로그램의 수행 완료 여부를 확인할 수 있다. 컨트롤러(210)는 제 1 및 제 4 물리 페이지들(<P1, P4>)의 커밋 페이지들을 읽거나 스캔(scan)하고, 커밋 페이지들 사이의 제 1 및 제 2 데이터(DATA1, DATA2)의 프로그램의 수행 완료 여부를 확인할 수 있다. 도 10을 참조하면, 컨트롤러(210)는 제 1 및 제 2 데이터(DATA1, DATA2)를 유효 데이터로 분류하고 제 1 및 제 2 물리 페이지들(<P1, P2>)의 맵핑 정보를 맵핑 테이블(L2P)에 맵 인할 수 있다(③). 반면에, 도 11을 참조하면, SPO 또는 시스템 오류로 인하여 제 3 물리 페이지(<P3>)에 제 2 데이터(DATA2)가 프로그램되지 않고 제 4 물리 페이지(<P4>)에 커밋 페이지가 프로그램되지 않을 수 있다. 컨트롤러(210)는 제 1 및 제 2 데이터(DATA1, DATA2)를 무효 데이터로 분류하고 제 1 및 제 2 물리 페이지들(<P1, P2>)의 맵핑 정보를 맵핑 테이블(L2P)에 맵 아웃할 수 있다(③). 여기서, 제 3 물리 페이지(<P3>)에 제 2 데이터(DATA2)가 프로그램되고 제 4 물리 페이지(<P4>)에 커밋 페이지만 프로그램되지 않아도, 컨트롤러(210)는 제 1 및 제 2 물리 페이지들(<P1, P2>)의 맵핑 정보를 맵핑 테이블(L2P)에 맵 아웃할 수 있다(③). 이후, 컨트롤러(210)는 제 1 및 제 2 데이터(DATA1, DATA2)에 대한 가비지 컬렉션을 수행할 수 있다(④).
컨트롤러(210)는 제 1 및 제 2 물리 페이지들(<P1, P2>)의 맵핑 정보를 맵핑 테이블(L2P)에 맵 인하거나 맵 아웃한 이후에, 제 3 데이터(DATA3)를 제 5 물리 페이지(<P5>)에 프로그램할 수 있다. 그 다음, 컨트롤러(210)는 제 3 데이터(DATA3)의 프로그램의 수행 완료 여부를 확인하기 위해 커밋 페이지를 제 6 물리 페이지(<P6>)에 프로그램할 수 있다(④). 컨트롤러(210)는 커밋 페이지들을 읽거나 스캔하고, 커밋 페이지들 사이의 제 3 데이터(DATA3)의 프로그램 수행 완료 여부를 확인할 수 있다.
도 10을 참조하면, 컨트롤러(210)는 제 4 및 제 6 물리 페이지들(<P4, P6>) 사이의 제 5 물리 페이지(<P5>)에 프로그램된 제 3 데이터(DATA3)를 유효 데이터로 분류하고 제 5 물리 페이지(<P5>)의 맵핑 정보를 맵핑 테이블(L2P)에 맵 인할 수 있다(⑤). 도 11을 참조하면, 컨트롤러(210)는 제 1 및 제 6 물리 페이지들(<P1, P6>) 사이의 제 5 물리 페이지(<P5>)에 프로그램된 제 3 데이터(DATA3)를 유효 데이터로 분류하고 제 5 물리 페이지(<P5>)의 맵핑 정보를 맵핑 테이블(L2P)에 맵 인할 수 있다(⑤). 예를 들어, 제 1 및 제 2 데이터(DATA1, DATA2)에 대한 가비지 컬렉션의 수행 시점(④)은 제 3 데이터(DATA3)의 프로그램 시점(⑤) 이후일 수 있다.
도 12는 본 발명의 또 다른 실시 예에 따라, 스토리지 장치가 순서대로 수신된 배리어 커맨드들을 처리하는 동작을 예시적으로 도시한다. 도 12는 도 1을 참조하여 설명될 것이다. 도 12에서, 데이터의 아토믹 프로그램이 모두 성공한 것으로 가정한다.
도 8 내지 도 11의 경우와 유사하게, 컨트롤러(210)는 제 1 내지 제 3 배리어 커맨드들(BCMD1~BCMD3)을 순서대로 수신하고 커맨드 큐(213)에 순서대로 삽입할 수 있다. 예를 들어, 컨트롤러(210)는 제 2 및 제 3 배리어 커맨드들(BCMD2, BCMD3)을 병합할 수 있다. 컨트롤러(210)는 제 1 배리어 커맨드(BCMD1)를 먼저 처리하고 그 다음 병합된 제 2 및 제 3 배리어 커맨드들(BCMD2, BCMD3)을 처리할 수 있다. 컨트롤러(210)는 제 1 내지 제 3 배리어 커맨드들(BCMD1~BCMD3)에 각각 대응하는 제 1 내지 제 3 데이터(DATA1~DATA3)를 수신하고 버퍼 메모리(220)에 저장할 수 있다(①).
도 8 내지 도 11의 경우와 달리, 컨트롤러(210)는 데이터만 비휘발성 메모리 장치(230)에 프로그램하는 것이 아니라, 플래그 정보도 함께 비휘발성 메모리 장치(230)에 프로그램할 수 있다. 플래그 정보는 데이터의 쓰기 순서를 나타내는 배리어 커맨드를 표기할 수 있다.
데이터의 에폭(epoch)은 호스트(100)의 배리어 커맨드에 따라 결정될 수 있다. 에폭 번호는 데이터의 에폭을 나타내고 배리어 커맨드를 기준으로 먼저 프로그램되는 데이터와 나중에 프로그램되는 데이터를 분류하는데 사용된다. 컨트롤러(210)는 데이터의 플래그 정보에 데이터의 에폭 번호를 포함시킬 수 있다. 컨트롤러(210)는 병합된 배리어 커맨드들에 대응하는 데이터의 집합에는 동일한 에폭 번호를 할당할 수 있다. 도 12를 참조하면, 컨트롤러(210)는 제 1 데이터(DATA1)에 제 1 에폭 번호(epoch number; EP<1>)를 할당하고 제 2 및 제 3 데이터(DATA2, DATA3)에 제 2 에폭 번호(EP<2>)를 할당할 수 있다. 컨트롤러(210)는 데이터의 플래그 정보에 커밋 기록 비트(commit record bit; C)를 포함시킬 수 있다. 커밋 기록 비트는 커밋 페이지와 유사하게 데이터의 프로그램 수행 완료 여부를 확인하는데 사용될 수 있다.
컨트롤러(210)는 제 1 데이터(DATA1), 제 1 에폭 번호(EP<1>), 및 커밋 기록 비트(C)를 비휘발성 메모리 장치(230)의 제 1 물리 페이지(<P1>)에 프로그램할 수 있다(②). 컨트롤러(210)는 제 1 물리 페이지(<P1>)의 데이터 영역에 제 1 데이터(DATA1)를 그리고 제 1 물리 페이지(<P1>)의 스페어 영역에 제 1 에폭 번호(EP<1>) 및 커밋 기록 비트(C)를 프로그램할 수 있다. 도시된 것과 달리, 제 1 에폭 번호(EP<1>) 및 커밋 기록 비트(C)는 비휘발성 메모리 장치(230)의 다른 블록, 다른 페이지에 저장될 수도 있다.
컨트롤러(210)는 제 1 물리 페이지(<P1>)의 커밋 기록 비트(C)를 읽고, 제 1 데이터(DATA1)의 프로그램 수행 완료 여부를 확인할 수 있다. 컨트롤러(210)는 제 1 데이터(DATA1)를 유효 데이터로 분류하고 제 1 물리 페이지(<P1>)의 맵핑 정보를 맵핑 테이블(L2P)에 맵 인할 수 있다(③).
컨트롤러(210)는 제 1 데이터(DATA1)와 유사하게, 제 2 데이터(DATA2) 및 제 2 에폭 번호(EP<2>)를 제 2 물리 페이지(<P2>)에 그리고 제 3 데이터(DATA3), 제 2 에폭 번호(EP<2>), 및 커밋 기록 비트(C)를 제 3 물리 페이지(<P3>)에 프로그램할 수 있다(④). 컨트롤러(210)는 제 3 물리 페이지(<P3>)의 커밋 기록 비트(C)를 읽고, 제 2 및 제 3 데이터(DATA2, DATA3)의 프로그램 수행 완료 여부를 확인할 수 있다. 컨트롤러(210)는 제 2 및 제 3 데이터(DATA2, DATA3)를 유효 데이터로 분류하고 제 2 및 제 3 물리 페이지들(<P2, P3>)의 맵핑 정보를 맵핑 테이블(L2P)에 맵 인할 수 있다(⑤).
실시 예에 있어서, 컨트롤러(210)는 병합된 커맨드들에 대응하고 동일한 에폭 번호를 갖는 데이터의 집합 중 마지막으로 프로그램되는 데이터(도 12를 참조하면, 제 3 데이터(DATA3))와 함께 커밋 기록 비트를 프로그램할 수 있다. 컨트롤러(210)는 동일한 에폭 번호를 갖는 데이터의 집합 중 마지막으로 프로그램되는 데이터 이외의 다른 데이터의 플래그 정보에 커밋 기록 비트(C)를 포함시키지 않을 수 있다. 다른 실시 예에 있어서, 컨트롤러(210)는 병합된 커맨드들에 대응하고 동일한 에폭 번호를 갖는 데이터의 집합에서 쓰기 순서를 재배열할 수 있다. 예를 들어, 컨트롤러는 제 3 데이터(DATA3)를 제 2 물리 페이지(<P2>)에 그리고 제 2 데이터(DATA2)와 커밋 기록 비트(C)를 제 3 물리 페이지(<P3>)에 프로그램할 수 있다.
도 13은 본 발명의 또 다른 실시 예에 따라, 스토리지 장치가 순서대로 수신된 배리어 커맨드들을 처리하는 동작을 예시적으로 도시한다. 도 13은 도 1을 참조하여 설명될 것이다. 도 13에서, 데이터에 대한 아토믹 프로그램이 모두 성공한 것으로 그리고 제 1 내지 제 3 데이터의 크기들 각각이 프로그램 단위보다 작은 것으로 가정한다.
도 8 내지 도 12의 경우와 유사하게, 컨트롤러(210)는 제 1 내지 제 3 배리어 커맨드들(BCMD1~BCMD3)을 순서대로 수신하고 커맨드 큐(213)에 순서대로 삽입할 수 있다. 컨트롤러(210)는 제 1 내지 제 3 배리어 커맨드들(BCMD1~BCMD3)을 병합할 수 있다. 예를 들어, 컨트롤러(210)는 배리어 데이터의 크기에 기초하여 배리어 커맨드들을 병합할 수 있다. 병합된 배리어 커맨드들에 대응하는 데이터의 집합의 크기는 프로그램 단위일 수 있다.
컨트롤러(210)는 제 1 내지 제 3 배리어 커맨드들(BCMD1~BCMD3)에 각각 대응하는 제 1 내지 제 3 데이터(DATA1~DATA3)를 수신하고 버퍼 메모리(220)에 저장할 수 있다(①). 예를 들어, 제 1 데이터(DATA1)는 8KB이고, 제 2 데이터(DATA2)는 4KB이고, 제 3 데이터(4KB)이고, 그리고 병합된 데이터의 집합의 크기는 16KB이고 프로그램 단위일 수 있다.
컨트롤러(210)는 제 1 내지 제 3 데이터(DATA1~DATA3)를 비휘발성 메모리 장치(230)의 제 1 물리 페이지(<P1>)에 프로그램할 수 있다(②). 도시되진 않았으나, 컨트롤러(210)는 제 1 내지 제 3 데이터(DATA1~DATA3)의 플래그 정보(즉, 도 12의 에폭 번호 및 커밋 기록 비트)를 제 1 물리 페이지(<P1>)의 스페어 영역에 프로그램할 수도 있다. 다른 실시 예에 있어서, 제 1 내지 제 3 데이터(DATA1~DATA3)의 위치들은 도시된 것으로 한정되지 않고 컨트롤러(210)에 의해 재배열될 수 있다. 컨트롤러(210)는 제 1 내지 제 3 데이터(DATA1~ DATA3)를 유효 데이터로 분류하고 제 1 물리 페이지(<P1>)의 맵핑 정보를 맵핑 테이블(L2P)에 맵 인할 수 있다(③).
도 14는 도 1의 비휘발성 메모리 장치의 비휘발성 메모리들 중 하나를 예시적으로 보여주는 블록도이다. 비휘발성 메모리(231)는 메모리 셀 어레이(231_1), 어드레스 디코더(231_2), 페이지 버퍼(231_3), 입출력 회로(231_4), 및 제어 로직 및 전압 발생 회로(231_5)를 포함할 수 있다. 비휘발성 메모리(231)는 비휘발성 메모리 칩으로 지칭될 수도 있다.
메모리 셀 어레이(231_1)는 메모리 블록들을 포함할 수 있다. 메모리 블록들 각각은 셀 스트링들을 포함할 수 있다. 셀 스트링들 각각은 메모리 셀들을 포함한다. 메모리 셀들은 워드 라인들(WL)과 연결될 수 있다. 메모리 셀들 각각은 1 비트를 저장하는 단일 레벨 셀(SLC) 또는 적어도 2 비트를 저장하는 멀티 레벨 셀(MLC)을 포함할 수 있다.
실시 예로서, 메모리 셀 어레이(231_1)는 3차원 메모리 어레이를 포함할 수 있다. 3차원 메모리 어레이는, 실리콘 기판 및 메모리 셀들의 동작에 관련된 회로의 위에 배치되는 활성 영역을 갖는 메모리 셀 어레이들의 하나 이상의 물리 레벨들에 모놀리식으로(Monolithically) 형성될 수 있다. 메모리 셀들의 동작에 관련된 회로는 기판 내에 또는 기판 위에 배치될 수 있다. "모놀리식(Monolithical)"이라는 용어는, 3차원 메모리 어레이의 각 레벨의 층들이 3차원 메모리 어레이의 하위 레벨의 층들 위에 직접 증착됨을 의미한다. 3차원 메모리 어레이는 수직의 방향성을 갖고 적어도 하나의 메모리 셀이 다른 하나의 메모리 셀 위에 위치하는 수직 낸드 스트링들을 포함할 수 있다. 적어도 하나의 메모리 셀은 전하 트랩(Charge Trap) 층을 포함할 수 있다. 수직 낸드 스트링들 각각은 메모리 셀들 위에 위치하는 적어도 하나의 선택 트랜지스터를 포함할 수 있다. 적어도 하나의 선택 트랜지스터는 메모리 셀들과 동일한 구조로 구성되고 메모리 셀들과 함께 모놀리식으로 형성될 수 있다. 3차원 메모리 어레이가 복수의 레벨로 구성되고, 레벨들 사이에 공유되는 워드 라인들 또는 비트 라인들이 구비되는 것과 같이, 3차원 메모리 어레이에 적합한 구성은 미국등록특허공보 제7,679,133호, 미국등록특허공보 제8,553,466호, 미국등록특허공보 제8,654,587호, 미국등록특허공보 제8,559,235호, 그리고 미국공개특허공보 제2011/0233648호에 개시되어 있으며, 이 공보들은 본 발명의 참조로서 포함된다.
어드레스 디코더(231_2)는 워드 라인들(WL), 스트링 선택 라인들(SSL), 및 접지 선택 라인들(GSL)을 통해 메모리 셀 어레이(231_1)와 연결된다. 어드레스 디코더(231_2)는 컨트롤러(210)로부터 물리 어드레스(ADD)를 수신하고, 물리 어드레스(ADD)를 디코딩하고 워드 라인들(WL)을 구동할 수 있다. 예를 들어, 어드레스 디코더(231_2)는 워드 라인들(WL) 중 적어도 하나의 워드 라인을 선택할 수 있다.
페이지 버퍼(231_3)는 비트 라인들(BL)을 통해 메모리 셀 어레이(231_1)와 연결된다. 페이지 버퍼(231_3)는 제어 로직 및 전압 발생 회로(231_5)의 제어에 따라 페이지 단위로 입출력 회로(231_4)로부터 수신된 데이터(DATA)가 메모리 셀 어레이(231_1)에 저장되도록 비트 라인들(BL)을 구동하거나 또는 메모리 셀 어레이(231_1)에 저장된 데이터를 페이지 단위로 읽고, 읽혀진 데이터를 입출력 회로(231_4)로 제공할 수 있다.
입출력 회로(231_4)는 컨트롤러(210)로부터 데이터(DATA)를 수신하고, 데이터(DATA)를 페이지 버퍼(231_3)로 제공할 수 있다. 또는 입출력 회로(231_4)는 페이지 버퍼(231_3)로부터 데이터(DATA)를 수신하고, 수신된 데이터(DATA)를 컨트롤러(210)에 제공할 수 있다. 입출력 회로(231_4)는 제어 신호(CTRL)에 기초하여 외부 장치와 데이터(DATA)를 송수신할 수 있다.
제어 로직 및 전압 발생 회로(231_5)는 컨트롤러(210)로부터 스토리지 커맨드(CMD) 및 제어 신호(CTRL)를 수신하고, 수신된 신호들에 응답하여 어드레스 디코더(231_2), 페이지 버퍼(231_3), 및 입출력 회로(231_4)를 제어할 수 있다. 예를 들어, 제어 로직 및 전압 발생 회로(231_5)는 신호들(CMD, CTRL)에 응답하여 데이터(DATA)가 메모리 셀 어레이(231_1)에 저장되도록 다른 구성 요소들을 제어할 수 있다. 제어 로직 및 전압 발생 회로(231_5)는 신호들(CMD, CTRL)에 응답하여 메모리 셀 어레이(231_1)에 저장된 데이터(DATA)가 외부 장치로 전송되도록 다른 구성 요소들을 제어할 수 있다. 제어 로직 및 전압 발생 회로(231_5)는 비휘발성 메모리(231)가 동작하는데 요구되는 다양한 전압들을 생성할 수 있다. 제어 로직 및 전압 발생 회로(231_5)는 프로그램 전압들, 패스 전압들, 선택 읽기 전압들, 비선택 읽기 전압들, 소거 전압들, 검증 전압들을 생성할 수 있다. 제어 로직 및 전압 발생 회로(231_5)는 생성된 다양한 전압들을 어드레스 디코더(231_2)로 제공하거나 또는 메모리 셀 어레이(231_1)의 기판으로 제공할 수 있다.
도 15는 도 14의 메모리 셀 어레이에 포함된 메모리 블록들 중 3차원 구조의 제 1 블록을 예시적으로 보여주는 회로도이다. 제 1 블록(BLK1)의 셀 스트링들의 개수, 셀 스트링들에 의해 구성되는 행들 및 열들의 개수, 셀 트랜지스터들(GST, MC, DMC, SST 등)의 개수, 셀 트랜지스터들과 연결된 라인들(GSL, WL, DML, SSL 등)의 개수, 및 제 1 블록(BLK1)의 높이는 도 15에서 도시된 것으로 한정되지 않는다. 비휘발성 메모리 장치(230)에 포함된 다른 메모리 블록들 또한 제 1 블록(BLK1)과 유사한 구조를 가질 수 있다.
제 1 블록(BLK1)은 셀 스트링들(CS11~CS22)을 포함할 수 있다. 셀 스트링들(CS11~CS22)은 행 방향 및 열 방향을 따라 배치될 수 있다. 셀 스트링들(CS11, CS12)은 스트링 선택 라인들(SSL1a, SSL1b)과 연결될 수 있다(1행). 셀 스트링들(CS21, CS22)은 스트링 선택 라인들(SSL2a, SSL2b)와 연결될 수 있다(2행). 셀 스트링들(CS11, CS21)은 제 1 비트 라인(BL1)과 연결될 수 있다(1열). 셀 스트링들(CS12, CS22)은 제 2 비트 라인(BL2)과 연결될 수 있다(2열).
셀 스트링들(CS11~CS22) 각각은 셀 트랜지스터들을 포함할 수 있다. 셀 스트링들(CS11~CS22) 각각은 스트링 선택 트랜지스터들(SSTa, SSTb), 메모리 셀들(MC1~MC8), 접지 선택 트랜지스터들(GSTa, GSTb), 및 더미 메모리 셀들(DMC1, DMC2)을 포함할 수 있다. 셀 트랜지스터들 각각은 전하 트랩형 플래시(CTF; charge trap flash) 메모리 셀일 수 있다.
메모리 셀들(MC1~MC8)은 직렬로 연결될 수 있고, 행 방향 및 열 방향에 의해 형성된 평명과 수직한 방향인 높이 방향으로 적층될 수 있다. 직렬로 연결된 스트링 선택 트랜지스터들(SSTa, SSTb)은 메모리 셀들(MC1~MC8) 및 비트 라인(BL) 사이에 제공될 수 있다. 직렬로 연결된 접지 선택 트랜지스터들(GSTa, GSTb)은 메모리 셀들(MC1~MC8) 및 공통 소스 라인(CSL) 사이에 제공될 수 있다. 메모리 셀들(MC1~MC8) 및 접지 선택 트랜지스터들(GSTa, GSTb) 사이에 제 1 더미 메모리 셀(DMC1)이 제공될 수 있다. 메모리 셀들(MC1~MC8) 및 스트링 선택 트랜지스터들(SSTa, SSTb) 사이에 제 2 더미 메모리 셀(DMC2)이 제공될 수 있다. 셀 스트링들(CS11~CS22)의 접지 선택 트랜지스터들(GSTa, GSTb)은 접지 선택 라인(GSL)에 공통으로 연결될 수 있다.
제 1 행의 셀 스트링들(CS11, CS12)의 제 1 접지 선택 트랜지스터들(GSTa)은 제1 접지 선택 라인에 연결될 수 있고, 제2 행의 셀 스트링들(CS21, CS22)의 제 1 접지 선택 트랜지스터들(GSTa)은 제 2 접지 선택 라인에 연결될 수 있다. 기판(미도시)으로부터 동일한 높이에 제공되는 접지 선택 트랜지스터들은 동일한 접지 선택 라인에 연결될 수 있고, 다른 높이에 제공되는 접지 선택 트랜지스터들은 다른 접지 선택 라인에 연결될 수 있다. 예를 들어, 셀 스트링들(CS11~CS22)의 제 1 접지 선택 트랜지스터들(GSTa)은 제 1 접지 선택 라인에 연결되고, 제 2 접지 선택 트랜지스터들(GSTb)은 제 2 접지 선택 라인에 연결될 수 있다.
기판(또는 접지 선택 트랜지스터(GSTa, GSTb))으로부터 동일한 높이의 메모리 셀들은 동일한 워드 라인에 공통으로 연결되고, 서로 다른 높이의 메모리 셀들은 서로 다른 워드 라인에 연결된다. 셀 스트링들(CS11~CS22)의 제 1 내지 제 8 메모리 셀들(MC8)은 제 1 내지 제 8 워드 라인들(WL1~WL8)에 각각 공통으로 연결될 수 있다. 동일한 높이의 제 1 스트링 선택 트랜지스터들(SSTa) 중 동일한 행의 스트링 선택 트랜지스터들은 동일한 스트링 선택 라인과 연결되고, 다른 행의 스트링 선택 트랜지스터들은 다른 스트링 선택 라인과 연결된다. 예를 들어, 제 1 행의 셀 스트링들(CS11, CS12)의 제 1 스트링 선택 트랜지스터들(SSTa)은 스트링 선택 라인(SSL1a)과 공통으로 연결되고, 제 2 행의 셀 스트링들(CS21, CS22)의 제 1 스트링 선택 트랜지스터들(SSTa)은 스트링 선택 라인(SSL1a)과 공통으로 연결된다. 또한, 제 1 행의 셀 스트링들(CS11, CS12)의 제 2 스트링 선택 트랜지스터들(SSTb)은 스트링 선택 라인(SSL1b)과 공통으로 연결되고, 제 2 행의 셀 스트링들(CS21, CS22)의 제 2 스트링 선택 트랜지스터들(SSTb)은 스트링 선택 라인(SSL2b)과 공통으로 연결된다.
동일한 행의 셀 스트링들의 스트링 선택 트랜지스터들은 동일한 스트링 선택 라인에 공통으로 연결될 수 있다. 예를 들어, 제 1 행의 셀 스트링들(CS11, CS12)의 제 1 및 제 2 스트링 선택 트랜지스터들(SSTa, SSTb)은 동일한 스트링 선택 라인에 공통으로 연결될 수 있다. 제 2 행의 셀 스트링들(CS21, CS22)의 제 1 및 제 2 스트링 선택 트랜지스터들(SSTa, SSTb)은 동일한 스트링 선택 라인에 공통으로 연결될 수 있다. 동일한 높이의 더미 메모리 셀들은 동일한 더미 워드 라인과 연결되고, 다른 높이의 더미 메모리 셀들은 다른 더미 워드 라인과 연결된다. 예를 들어, 제 1 더미 메모리 셀들(DMC1)은 제 1 더미 워드 라인(DWL1)과 연결되고, 제 2 더미 메모리 셀들(DMC2)은 제 2 더미 워드 라인(DWL2)과 연결된다.
제 1 블록(BLK1)에서, 읽기 및 쓰기는 행 단위로 수행될 수 있다. 예를 들어, 스트링 선택 라인들(SSL1a, SSL1b, SSL2a, SSL2b)에 의해 블록(BLKa)의 하나의 행이 선택될 수 있다. 스트링 선택 라인들(SSL1a, SSL1b)에 턴-온 전압이 공급되고 스트링 선택 라인들(SSL2a, SSL2b)에 턴-오프 전압이 공급될 때, 제 1 행의 셀 스트링들(CS11, CS12)이 비트 라인들(BL1, BL2)에 연결될 수 있다. 반대의 경우, 제 2 행의 셀 스트링들(CS21, CS22)이 비트 라인들(BL1, BL2)에 연결될 수 있다. 워드 라인을 구동함으로써 구동되는 행의 셀 스트링의 메모리 셀들 중 동일한 높이의 메모리 셀들이 선택된다. 선택된 메모리 셀들은 물리 페이지 단위에 대응할 수 있다. 선택된 메모리 셀들에 대한 읽기 및 쓰기 동작이 수행될 수 있다.
도 16은 도 1의 스토리지 장치의 동작 방법을 예시적으로 보여주는 순서도이다. S110 단계에서, 스토리지 장치(200)의 컨트롤러(210)는 호스트(100)로부터 배리어 커맨드들과 배리어 커맨드들에 각각 대응하는 데이터(혹은 데이터의 집합)을 수신할 수 있다. 전술한대로, 데이터는 DMA 방식으로 호스트(100)로부터 전송될 수 있다.
S120 단계에서, 컨트롤러(210)는 배리어 커맨드들을 병합할 수 있고 배리어 커맨드들의 순서에 기초하여 또는 배리어 커맨드들의 순서에 대응하여, 데이터를 연속적으로 비휘발성 메모리 장치(230)에 프로그램할 수 있다. 컨트롤러(210)는 메모리 셀에 저장되는 비트들의 수, 하나의 물리적 페이지의 크기, 그리고, 멀티 채널, 멀티 웨이, 멀티 플레인에 따라 한번에 접근되는 물리 페이지들의 개수에 따라 결정되는 비휘발성 메모리 장치(230)의 프로그램 단위에 기초하여 배리어 커맨드들을 병합할 수 있다. 실시 예에 있어서, 도 8 내지 도 13에서 데이터는 어느 하나의 물리 페이지 내에서 저장된 것으로 도시되었으나, 데이터는 비휘발성 메모리 장치(230) 내 복수의 칩들, 복수의 플레인들, 복수의 블록들, 또는 복수의 페이지들에 분산되어 저장될 수도 있다. S120 단계의 프로그램은 아토믹하게 수행될 수 있다.
S130 단계에서, 컨트롤러(210)는 S120 단계의 프로그램 완료를 검증할 수 있다. 컨트롤러(210)는 도 10 및 도 11의 커밋 페이지들을 읽거나 도 12의 커밋 기록 비트를 읽을 수 있다. 컨트롤러(210)는 커밋 페이지 또는 커밋 기록 비트가 할당된 데이터를 유효 데이터로 판별할 수 있고 커밋 페이지 또는 커밋 기록 비트가 할당되지 않은 데이터를 무효 데이터로 판별할 수 있다.
S140 단계에서, 프로그램 성공인 경우, 컨트롤러(210)는 유효 데이터가 프로그램된 물리 페이지들의 맵핑 정보를 맵핑 테이블(L2P)에 맵 인할 수 있다. S140 단계에서, 프로그램 실패인 경우, 컨트롤러(210)는 무효 데이터가 프로그램된 물리 페이지들의 맵핑 정보를 맵핑 테이블(L2P)에 맵 아웃할 수 있다. 아토믹 프로그램 대상인 데이터의 일부가 데이터는 비휘발성 메모리 장치(230) 내 복수의 칩들, 복수의 플레인들, 복수의 블록들, 또는 복수의 페이지들에 분산되어 저장되고 데이터의 나머지 저장되지 않았으면, 컨트롤러(210)는 데이터의 일부가 저장된 물리 페이지들의 맵핑 정보를 맵 아웃할 수 있다. 실시 예에 있어서, 컨트롤러(210)는 배리어 커맨드에 대응하는 데이터를 맵 인 또는 맵 아웃한 이후에, 또는 데이터의 프로그램 완료 이후에, 다른 배리어 커맨드에 대응하는 다른 데이터를 비휘발성 메모리 장치(230)에 프로그램할 수 있다.
도 17은 본 발명의 실시 예에 따라, 쓰기 순서를 위한 시스템 콜을 지원하는 호스트의 소프트웨어 스택을 도시한다. 도 18은 도 17의 호스트가 스토리지 장치에 저널링을 수행하는 동작을 예시적으로 보여주는 타이밍도이다. 도 17과 도 18은 도 1 및 도 2를 참조하여 함께 설명될 것이다. 스토리지 장치(400)는 배리어 커맨드를 지원하는 도 1의 스토리지 장치(200)일 수 있다.
호스트(300)는 도 1의 호스트(100)의 구성 요소들을 포함할 수 있다. 호스트(300)는 하드웨어 관점에서 호스트(100)와 실질적으로 동일하게 구현될 수 있다. 호스트(300)에서도 도 1의 호스트 메모리(120)에 로드되는 소프트웨어들이 실행될 수 있다. 다만, 호스트(100)와 달리, 호스트(300)는 fbarrier() 또는 fdatabarrier()와 같은 시스템 콜을 지원할 수 있다. 호스트(300)의 호스트 메모리(도 1의 호스트 메모리(120) 참조)에는 배리어 파일 시스템(322), 디스패처(dispatcher, 323), 및 입출력 스케줄러(324)가 각각 로드될 수 있다.
배리어 파일 시스템(322)은 파일 시스템(122)과 유사하게 동작할 수 있다. 실시 예에 있어서, fsync() 또는 fdatasync()가 호출되면, 배리어 파일 시스템(322)은 힌트 정보를 이용하여 fsync() 또는 fdatasync()가 데이터를 순서대로 쓰기 위해 호출된 것인지 여부를 판별할 수 있다. 배리어 파일 시스템(322)은 파일의 확장자가 사전에 결정된 단어이거나, 파일 이름이 사전에 결정된 단어이거나, 또는 fsync() 또는 fdatasync()를 호출한 프로세스의 이름이 사전에 단어인지 여부를 확인할 수 있다. 힌트 정보는 사전에 결정된 파일의 확장자, 사전에 결정된 파일 이름, 또는 fsync() 또는 fdatasync()를 호출한 프로세스의 이름을 포함할 수 있다.
다른 실시 예에 있어서, fbarrier() 또는 fdatabarrier()가 호출되면, 배리어 파일 시스템(322)은 데이터를 순서대로 쓰기 위해 fbarrier() 또는 fdatabarrier()가 호출된 것으로 판별할 수 있다. fbarrier()는 fbarrier()와 유사하다. fbarrier()에 의해 파일 메타데이터가 수정될 수 있다. 그러나 fbarrier()가 호출되면, 새로 쓰여진 데이터를 읽기 위한 파일 메타데이터가 추가 수정되지 않았으면, 파일 메타데이터가 수정되지 않을 수 있다. 배리어 파일 시스템(322)은 쓰기 요청들을 디스패치하는 커밋 쓰레드(commit thread)와 쓰기 요청들에 대응하는 데이터를 스토리지 장치(400)로 플러시하는 플러시 쓰레드(flush thread)를 호스트 메모리에 할당할 수 있다. 배리어 파일 시스템(322)은 커밋 쓰레드와 플러시 쓰레드를 생성하여 듀얼 모드 저널링(dual mode journaling)을 수행할 수 있다.
도 18을 참조하면, 배리어 파일 시스템(322)은 저널링을 수행할 수 있다. 저널을 백업할 때 또는 데이터베이스 파일 수정 이후에 fbarrier() 또는 fdatabarrier()가 호출될 수 있다. 예를 들어, fbarrier()가 시작되면, 배리어 파일 시스템(322)은 파일 데이터(D)를 스토리지 장치(400)로 전송하기 위해 블록 계층의 스케줄러 큐(미도시, 도 1의 스케줄러 큐(124) 참조)에 쓰기 요청들을 삽입할 수 있다. 쓰기 요청들은 스토리지 장치(400)로 디스패치될 수 있다. 배리어 파일 시스템(322)은 파일 시스템(122)과 달리 파일 데이터(D)의 DMA 전송이 완료될 때까지 기다리지 않고 커밋 쓰레드를 트리거할 수 있다.
커밋 쓰레드는 저널 데이터(JD)와 저널 커밋(JC)을 스토리지 장치(400)로 전송하기 위해 스케줄러 큐에 쓰기 요청들을 삽입할 수 있다. 쓰기 요청들은 스토리지 장치(400)로 디스패치될 수 있다. 커밋 쓰레드는 저널 데이터(JD)의 DMA 전송과 저널 커밋(JC)의 DMA 전송이 완료될 때까지 기다릴 수 있다. 저널 데이터(JD)의 DMA 전송과 저널 커밋(JC)의 DMA 전송이 완료되면 커밋 쓰레드는 플러시 쓰레드를 트리거할 수 있다. 플러시 쓰레드는 저널 데이터(JD)와 저널 커밋(JC)이 플러쉬되도록, 스케줄러 큐에 플러시 요청들을 삽입할 수 있다. 플러시 요청들은 스토리지 장치(400)로 디스패치될 수 있다. 저널 데이터(JD)와 저널 커밋(JC)의 플러시가 완료되면 fbarrier()가 리턴될 수 있다.
도 18을 참조하면, fsync()가 호출된 경우 도 1의 파일 시스템(122)은 파일 데이터(D)의 DMA 전송, 저널 데이터(JD)의 DMA 전송 및 플러시, 및 저널 커밋(JC)의 DMA 전송 및 플러시가 모두 완료될 때까지 기다려야 한다. 반면에, fbarrier()가 호출된 경우 배리어 파일 시스템(322)은 파일 데이터(D), 저널 데이터(JD), 및 저널 커밋(JC)의 DMA 전송 및 플러시가 완료될 때까지 기다리지 않고 스케줄러 큐에 IO 요청들을 연속적으로 삽입할 수 있다.
다시 도 17을 참조하면, 블록 계층의 디스패처(323)는 스케줄러 큐에 입력된 IO 요청들을 스토리지 장치(400)의 커맨드 큐(도 3 내지 도 13의 커맨드 큐(213) 참조)로 디스패치할 수 있다. 예를 들어, 디스패처(323)는 배리어 커맨드를 커맨드 큐에 디스패치할 수 있다. 디스패처(323)는 커맨드 큐의 기존 커맨드들이 처리되고, 그 다음 배리어 커맨드가 처리되고, 그 다음 배리어 커맨드 이후의 커맨드들이 처리되는 것을 보장할 수 있다. 디스패처(323)는 호스트(300)에서 스토리지 장치(400)로 커맨드들이 디스패치되는 순서와 스토리지 장치(400)의 커맨드 큐에서 커맨드들이 처리되는 순서를 일치시킬 수 있다. 디스패처(323)는 순서를 지키는(order-preserving) 디스패처로 지칭될 수 있다.
실시 예에 있어서, 디스패처(323)로부터 디스패치되는 배리어 커맨드는 배리어 플래그를 갖는 쓰기 커맨드일 수 있다. 다른 실시 예에 있어서, 디스패처(323)로부터 디스패치되는 배리어 커맨드는 쓰기 요청과 별개로 스케줄러 큐의 한 엔트리를 차지하는 입력 요청으로부터 생성될 수도 있다.
입출력 스케줄러(324)는 에폭에 기초하여, IO 요청들이 스케줄러 큐에 삽입되는 순서와 호스트(300)에서 스토리지 장치(400)로 커맨드들이 디스패치되는 순서를 일치시킬 수 있다. 입출력 스케줄러(324)는 에폭들간의 순서를 지킬 수 있다. 입출력 스케줄러(324)는 스케줄러 큐에 삽입된 IO 요청이 배리어 쓰기 요청인지 여부를 판별할 수 있다. 입출력 스케줄러(324)는 삽입된 IO 요청이 배리어 쓰기 요청이면 더 이상 IO 요청들을 수신하지 않는다. 따라서, 배리어 쓰기 요청 이전에 스케줄러 큐에 입력되고 배리어 쓰기 요청 이후 스케줄러 큐에 존재하는 모든 IO 요청들은 하나의 에폭에 속할 수 있다. 입출력 스케줄러(324)는 에폭 내의 IO 요청들을 재배열하거나 병합할 수 있다. 입출력 스케줄러(324)는 스케줄러 큐에 존재하는 IO 요청들을 장치 드라이버(도 1의 장치 드라이버(125) 참조)로 내보낼 수 있다. 입출력 스케줄러(324)는 마지막으로 출력되는 IO 요청을 새로운 배리어 쓰기 요청으로 지정할 수 있다. 입출력 스케줄러(324)는 스케줄러 큐에 존재하는 IO 요청들을 모두 내보내면, 새로운 IO 요청들을 수신할 수 있다.
도 19는 본 발명의 실시 예에 따라 스토리지 장치의 IOPS 및 커맨드 큐의 깊이를 예시적으로 도시한다. 본 발명의 실시 예에 따른 스토리지 장치는 도 1 내지 도 18에서 전술한 스토리지 장치들(200, 400)일 수 있다. 도 19에서, XnF는 transfer-and-flush 방식을 나타내고(도 2 참조), X는 wait-on-transfer 방식을 나타내고, 그리고 OP는 본 발명의 실시 예에 따른 order-preserving 방식을 나타낼 수 있다(도 18 참조). 도 19에는, UFS 2.0(GS6), SSD(850 PRO), 및 SSD(843TN) 각각이 XnF 방식, X 방식, 및 OP 방식으로 입출력 요청들을 처리하는 경우, IOPS(input/output operations per second) 및 커맨드 큐의 깊이가 도시되어 있다. 본 발명의 실시 예에 따른 OP 방식에 의하면, 전술한 호스트들(100, 300)은 데이터의 DMA 전송 및 데이터의 플러시가 완료될 때까지 기다리지 않고 IO 요청들에 따른 커맨드들을 스토리지 장치들(100, 200)로 전송할 수 있다. 따라서, XnF 방식 또는 X 방식에 비해, OP 방식에 의하면, 스토리지 장치들(100, 200)의 IOPS 및 커맨드 큐의 깊이가 증가할 수 있다.
위에서 설명한 내용은 본 발명을 실시하기 위한 구체적인 예들이다. 본 발명은 상술한 실시 예들뿐만 아니라, 상술한 실시 예들을 이용하여 단순하게 설계 변경하거나 쉽게 변경할 수 있는 실시 예들도 포함할 수 있다.

Claims (20)

  1. 비휘발성 메모리 장치를 포함한 스토리지 장치에 데이터를 프로그램하는 방법에 있어서:
    호스트로부터 제 1 배리어 커맨드(barrier command), 제 2 배리어 커맨드 및 제 3 배리어 커맨드를 수신하고;
    상기 호스트로부터 상기 제 1 배리어 커맨드에 대응하는 제 1 데이터, 상기 제 2 배리어 커맨드에 대응하는 제 2 데이터, 상기 제 3 배리어 커맨드에 대응하는 제 3 데이터를 수신하고;
    상기 제 1 및 제 2 배리어 커맨드들을 병합(merge)하고 그리고 상기 제 1 및 제 2 데이터를 상기 제 1 및 제 2 배리어 커맨드들의 순서에 대응하여 연속적으로 상기 비휘발성 메모리 장치에 프로그램하고;
    상기 제 1 및 제 2 데이터 모두의 프로그램 완료를 검증(verify)하고;
    상기 제 1 및 제 2 데이터의 프로그램이 완료되면 상기 제 1 및 제 2 데이터를 맵 인(map in)하고 그리고 상기 제 1 데이터 및 상기 제 2 데이터 중 적어도 하나가 프로그램이 완료되지 않으면 상기 제 1 및 제 2 데이터 모두를 맵 아웃(map out)하고; 그리고
    상기 맵 인 또는 상기 맵 아웃 이후에, 상기 비휘발성 메모리 장치에 상기 제 3 데이터를 프로그램하되,
    상기 제 1 및 제 2 데이터의 양은 상기 비휘발성 메모리 장치의 프로그램 단위와 동일하거나 작고, 상기 제 3 데이터의 양은 상기 프로그램 단위보다 크고, 상기 제 1 내지 제 3 배리어 커맨드에 의해 상기 제 1 내지 제 3 데이터의 프로그램 순서가 제공되고,
    상기 제 1 내지 제 3 배리어 커맨드들 각각에 대응하는 플래그 정보는 상기 비휘발성 메모리 장치의 스페어(spare) 영역에 프로그램 되고,
    상기 플래그 정보는 에폭(epoch) 번호를 포함하고, 상기 병합된 제 1 및 제 2 배리어 커맨드들은 동일한 에폭 번호를 갖고, 그리고
    상기 제 2 배리어 커맨드의 에폭 번호에 추가적으로 수행 완료 기록 비트(commit record bit)를 기재하는 방법.
  2. 제 1 항에 있어서,
    상기 제 1 내지 제 3 배리어 커맨드들 각각은 프로그램 커맨드를 포함하는 방법.
  3. 삭제
  4. 삭제
  5. 삭제
  6. 제 1 항에 있어서,
    상기 제 1 및 제 2 데이터의 프로그램 완료를 확인하는 것은 수행 완료 기록 비트(commit record bit)를 참조하여 확인하는 방법.
  7. 제 1 항에 있어서,
    상기 호스트로부터 상기 제 1 데이터는 상기 제 1 배리어 커맨드 수신 이후에 연속적으로 제공되는 방법.
  8. 제 1 항에 있어서,
    상기 호스트로부터 상기 제 2 데이터는 상기 제 2 배리어 커맨드 수신에 이어서 제공되는 방법.
  9. 제 1 항에 있어서,
    상기 제 1 및 제 2 데이터의 프로그램 완료를 확인한 이후에, 상기 제 3 데이터가 프로그램되는 방법.
  10. 제 9 항에 있어서,
    상기 제 1 및 제 2 데이터는 상기 비휘발성 메모리 장치의 제 1 블록에 프로그램되고 상기 제 3 데이터는 상기 비휘발성 메모리 장치의 제 2 블록에 프로그램되는 방법.
  11. 제 1 항에 있어서,
    상기 맵 인은 상기 제 1 및 제 2 데이터를 유효(valid) 데이터로 분류하는 방법.
  12. 제 1 항에 있어서,
    상기 맵 아웃은 상기 제 1 및 제 2 데이터를 무효(invalid) 데이터로 분류하는 방법.
  13. 제 12 항에 있어서,
    상기 무효 데이터로 분류된 상기 제 1 및 제 2 데이터에 대한 가비지 컬렉션(garbage collection)을 더 수행하는 방법.
  14. 삭제
  15. 제 1 항에 있어서,
    상기 제 1 및 제 2 데이터의 양이 상기 프로그램 단위보다 작으면, 상기 제 1 및 제 2 데이터는 제 4 데이터와 함께 상기 비휘발성 메모리 장치에 프로그램되는 방법.
  16. 비휘발성 메모리 장치를 제어하는 메모리 컨트롤러의 동작 방법에 있어서,
    호스트로부터 제 1 배리어 커맨드와 제 1 프로그램 커맨드, 제 2 배리어 커맨드와 제 2 프로그램 커맨드, 및 제 3 배리어 커맨드와 제 3 프로그램 커맨드를 수신하고,
    호스트로부터 제 1 배리어 커맨드에 대응하는 제 1 데이터, 제 2 배리어 커맨드에 대응하는 제 2 데이터, 제 3 배리어 커맨드에 대응하는 제 3 데이터를 수신하고,
    상기 제 1 내지 제 3 배리어 커맨드들을 병합하여 상기 제 1 내지 제 3 데이터를 연속적으로 상기 비휘발성 메모리 장치에 프로그램하고,
    상기 제 1 내지 제 3 데이터의 프로그램 여부를 검증(verify)하고, 상기 제 1 내지 제 3 데이터가 모두 프로그램되면 상기 제 1 내지 제 3 데이터를 유효(valid) 데이터로 분류하고, 그리고 상기 제 1 내지 제 3 데이터 중 적어도 하나의 데이터가 프로그램되지 않으면 상기 제 1 내지 제 3 데이터를 모두 무효(invalid) 데이터로 분류하되,
    상기 제 1 및 제 2 데이터의 양은 상기 비휘발성 메모리 장치의 프로그램 단위와 동일하거나 작고, 상기 제 3 데이터의 양은 상기 프로그램 단위보다 크며, 상기 제 1 내지 제 3 배리어 커맨드에 의해 상기 제 1 내지 제 3 데이터의 프로그램 순서가 결정되고,
    상기 제 1 내지 제 3 데이터의 프로그램 완료는 상기 비휘발성 메모리 장치의 스페어 영역에 프로그램된 수행 완료 기록 비트(commit record bit)를 참조하여 확인되는 동작 방법.
  17. 제 16 항에 있어서,
    상기 제 1 내지 제 3 데이터의 각각의 사이즈들의 합은 상기 비휘발성 메모리 장치의 프로그램 단위(program unit)와 같거나 작은 동작 방법.
  18. 삭제
  19. 호스트; 및
    상기 호스트로부터 제 1 내지 제 3 배리어 커맨드들을 수신하고, 그리고 상기 제 1 내지 제 3 배리어 커맨드들에 각각 대응하고 프로그램될 제 1 내지 제 3 데이터를 호스트로부터 제공받는 스토리지 장치를 포함하되,
    상기 스토리지 장치는:
    상기 제 1 내지 제 3 데이터를 저장하는 복수의 비휘발성 메모리 장치들; 및
    상기 복수의 비휘발성 메모리 장치들을 제어하고, 상기 제 1 내지 제 3 배리어 커맨드들을 병합하고, 상기 제 1 내지 제 3 데이터를 연속적으로 프로그램하고, 상기 제 1 내지 제 3 데이터의 프로그램 완료 여부를 판별하고, 상기 제 1 내지 제 3 데이터가 모두 프로그램 완료되면, 상기 제 1 내지 제 3 데이터를 유효 데이터로 맵 인(map in)하고, 상기 제 1 내지 제 3 데이터 중 적어도 하나의 데이터가 프로그램이 완료되지 않으면, 상기 제 1 내지 3 데이터를 무효 데이터로 맵 아웃(map out)하는 메모리 컨트롤러를 포함하되,
    상기 제 1 및 제 2 데이터의 양은 상기 복수의 비휘발성 메모리 장치의 프로그램 단위와 동일하거나 작고, 상기 제 3 데이터의 양은 상기 프로그램 단위보다 크고, 상기 제 1 내지 제 3 배리어 커맨드에 의해 상기 제 1 내지 제 3 데이터의 프로그램 순서가 제공되고,
    상기 제1 내지 제3 데이터는 포함하는 에폭 번호들 및 수행 완료 기록 비트들에 따라 상기 복수의 불휘발성 메모리 장치들에 선택적으로 프로그램 되는 컴퓨터 시스템.
  20. 제 19 항에 있어서,
    상기 호스트는 상기 제 1 내지 제 3 배리어 커맨드들을 상기 스토리지 장치에 제공 시, 상기 제 1 내지 제 3 데이터를 상기 제 1 내지 제 3 커맨드에 각각 대응하여 플러시하지 않는 컴퓨터 시스템.
KR1020180068127A 2018-01-12 2018-06-14 배리어 커맨드에 기초하여 데이터를 순서대로 저장하는 스토리지 장치 KR102646724B1 (ko)

Priority Applications (5)

Application Number Priority Date Filing Date Title
CN201811590628.6A CN110033799A (zh) 2018-01-12 2018-12-20 基于屏障命令按顺序存储数据的存储设备
US16/238,342 US11741010B2 (en) 2018-01-12 2019-01-02 Storage device storing data in order based on barrier command
SG10201900042WA SG10201900042WA (en) 2018-01-12 2019-01-03 Storage device storing data in order based on barrier command
EP19150797.9A EP3511814B1 (en) 2018-01-12 2019-01-08 Storage device storing data in order based on barrier command
JP2019002547A JP7274869B2 (ja) 2018-01-12 2019-01-10 バリアーコマンドに基づいてデータを順に格納するストレージ装置

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US201862616718P 2018-01-12 2018-01-12
US62/616,718 2018-01-12

Publications (2)

Publication Number Publication Date
KR20190086341A KR20190086341A (ko) 2019-07-22
KR102646724B1 true KR102646724B1 (ko) 2024-03-14

Family

ID=67468995

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020180068127A KR102646724B1 (ko) 2018-01-12 2018-06-14 배리어 커맨드에 기초하여 데이터를 순서대로 저장하는 스토리지 장치

Country Status (2)

Country Link
KR (1) KR102646724B1 (ko)
SG (1) SG10201900042WA (ko)

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR102262209B1 (ko) * 2018-02-09 2021-06-09 한양대학교 산학협력단 더미 입출력 요청을 이용한 배리어 명령 전달 방법 및 그 장치
KR102132387B1 (ko) * 2018-10-19 2020-07-09 한양대학교 산학협력단 배리어 기반 로깅 방법 및 장치
KR102254501B1 (ko) * 2018-10-19 2021-05-21 한양대학교 산학협력단 부분 순서 보장 기반의 입출력 스케줄러 및 그 방법
KR20220023649A (ko) 2020-08-21 2022-03-02 에스케이하이닉스 주식회사 메모리 컨트롤러 및 그 동작 방법
KR20230135346A (ko) 2022-03-16 2023-09-25 에스케이하이닉스 주식회사 메모리 컨트롤러 및 그의 동작 방법

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20120173800A1 (en) * 2010-12-29 2012-07-05 Samsung Electronics Co., Ltd. System including data storage device, and data storage device including first and second memory regions
US20150220439A1 (en) * 2014-02-04 2015-08-06 Microsoft Corporation Block storage by decoupling ordering from durability

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101942272B1 (ko) * 2011-12-27 2019-01-28 삼성전자주식회사 비휘발성 메모리의 제어방법, 이를 구현한 비휘발성 메모리 컨트롤러 및 이를 포함하는 메모리 시스템

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20120173800A1 (en) * 2010-12-29 2012-07-05 Samsung Electronics Co., Ltd. System including data storage device, and data storage device including first and second memory regions
US20150220439A1 (en) * 2014-02-04 2015-08-06 Microsoft Corporation Block storage by decoupling ordering from durability

Also Published As

Publication number Publication date
SG10201900042WA (en) 2019-08-27
KR20190086341A (ko) 2019-07-22

Similar Documents

Publication Publication Date Title
JP7274869B2 (ja) バリアーコマンドに基づいてデータを順に格納するストレージ装置
KR102646724B1 (ko) 배리어 커맨드에 기초하여 데이터를 순서대로 저장하는 스토리지 장치
US10671299B2 (en) Nonvolatile memory module having device controller that detects validity of data in RAM based on at least one of size of data and phase bit corresponding to the data, and method of operating the nonvolatile memory module
US10303372B2 (en) Nonvolatile memory device and operation method thereof
US9715465B2 (en) Storage device and operating method of the same
US10255131B2 (en) Storage device including nonvolatile memory device
US9799402B2 (en) Nonvolatile memory device and program method thereof
US20130080689A1 (en) Data storage device and related data management method
US20150220275A1 (en) Method for operating nonvolatile storage device and method for operating computing device accessing nonvolatile storage device
US20220261171A1 (en) Storage devices, data storage systems and methods of operating storage devices
CN112201292A (zh) 控制器及其操作方法
US11875055B2 (en) Storage device that receives inode address information to reduce external communication overhead
CN112783433A (zh) 存储装置及其操作方法
US10713157B2 (en) Storage system and method for improving read performance using multiple copies of a logical-to-physical address table
KR20220087785A (ko) 메모리 컨트롤러 및 이를 포함하는 저장 장치
KR20220087782A (ko) 메모리 컨트롤러 및 이를 포함하는 저장 장치
US20160132251A1 (en) Operating method of storage device and data writing method for writing data into storage device
KR20200032404A (ko) 데이터 저장 장치 및 동작 방법, 이를 포함하는 스토리지 시스템
US10282325B2 (en) Semiconductor device including a plurality of circuits and a bus connecting the circuits to one another, and method of operating the semiconductor device
US20220050771A1 (en) Operating method of storage device
US11055011B2 (en) Storage device
US20240069777A1 (en) Storage device including nonvolatile memory device and operating method of storage device
KR20220159270A (ko) 스토리지 장치 및 그 동작 방법
KR20230138805A (ko) 저장 장치 및 이의 동작 방법
KR20210142477A (ko) 메모리 컨트롤러 및 그 동작 방법

Legal Events

Date Code Title Description
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right