KR102509987B1 - 호스트 및 스토리지 시스템을 포함하는 컴퓨팅 시스템 - Google Patents

호스트 및 스토리지 시스템을 포함하는 컴퓨팅 시스템 Download PDF

Info

Publication number
KR102509987B1
KR102509987B1 KR1020210191117A KR20210191117A KR102509987B1 KR 102509987 B1 KR102509987 B1 KR 102509987B1 KR 1020210191117 A KR1020210191117 A KR 1020210191117A KR 20210191117 A KR20210191117 A KR 20210191117A KR 102509987 B1 KR102509987 B1 KR 102509987B1
Authority
KR
South Korea
Prior art keywords
block
data
node
data block
host
Prior art date
Application number
KR1020210191117A
Other languages
English (en)
Other versions
KR20220102560A (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 US17/566,309 priority Critical patent/US11875036B2/en
Priority to TW111100889A priority patent/TW202234234A/zh
Priority to EP22150729.6A priority patent/EP4030275A1/en
Priority to CN202210020275.6A priority patent/CN114764402A/zh
Publication of KR20220102560A publication Critical patent/KR20220102560A/ko
Application granted granted Critical
Publication of KR102509987B1 publication Critical patent/KR102509987B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/023Free address space management
    • G06F12/0238Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory
    • G06F12/0246Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory in block erasable memory, e.g. flash memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/14Error detection or correction of the data by redundancy in operation
    • G06F11/1402Saving, restoring, recovering or retrying
    • G06F11/1446Point-in-time backing up or restoration of persistent data
    • 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/0253Garbage collection, i.e. reclamation of unreferenced memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/10Address translation
    • G06F12/1009Address translation using page tables, e.g. page table structures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • 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
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/10File systems; File servers
    • G06F16/18File system types
    • G06F16/182Distributed file systems
    • G06F16/1824Distributed file systems implemented using Network-attached Storage [NAS] architecture
    • G06F16/183Provision of network file services by network file servers, e.g. by using NFS, CIFS
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/0604Improving or facilitating administration, e.g. storage management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/0608Saving storage space on storage systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0638Organizing or formatting or addressing of data
    • G06F3/0644Management of space entities, e.g. partitions, extents, pools

Abstract

본 개시의 기술적 사상에 따른 컴퓨팅 시스템은, 데이터를 저장하는 스토리지 시스템 및 메모리에 로드된 미리 정해진 크기의 데이터 블록을 압축하고, 압축된 데이터 블록, 데이터 블록을 참조하는 노드 블록의 식별자 및 노드 블록이 참조하는 적어도 하나의 데이터 블록 중 데이터 블록의 인덱스를 나타내는 오프셋을 병합함으로써 미리 정해진 크기의 병합 블록을 생성하고, 병합 블록을 스토리지 시스템에 제공하는 호스트를 포함한다.

Description

호스트 및 스토리지 시스템을 포함하는 컴퓨팅 시스템{COMPUTING SYSTEM INCLUDING HOST AND STORAGE SYSTEM}
본 개시의 기술적 사상은 컴퓨팅 시스템에 관한 것으로서, 자세하게는 호스트 및 스토리지 시스템을 포함하는 컴퓨팅 시스템에 관한 것이다.
EXT4 등의 파일 시스템은 임의의 데이터를 업데이트 할 때, 원래의 위치에 새로운 데이터를 오버라이트한다. 이를 인-플레이스 업데이트(In-Place-Update) 방식이라고 한다. 로그 구조 파일 시스템(Log-Structured File System, LFS)은 과거 데이터를 무효화하고(Invalidate), 새로운 데이터는 다른 곳에 쓰는 아웃 오브-플레이스 업데이트(Out-of-Place Update) 방식을 사용한다.
본 개시의 기술적 사상은 컴퓨팅 시스템에 관한 것으로서, 압축된 데이터 블록, 노드 식별자와 데이터 블록의 오프셋이 병합된 병합 블록을 노드 블록과 비동기적으로 라이트함으로써 쓰기 성능이 향상된 컴퓨팅 시스템을 제공한다.
상기와 같은 목적을 달성하기 위하여, 본 개시의 일 측면에 따른 컴퓨팅 시스템은, 데이터를 저장하는 스토리지 시스템 및 메모리에 로드된 미리 정해진 크기의 데이터 블록을 압축하고, 압축된 데이터 블록, 데이터 블록을 참조하는 노드 블록의 식별자 및 노드 블록이 참조하는 적어도 하나의 데이터 블록 중 데이터 블록의 인덱스를 나타내는 오프셋을 병합함으로써 미리 정해진 크기의 병합 블록을 생성하고, 병합 블록을 스토리지 시스템에 제공하는 호스트를 포함한다.
본 개시의 다른 측면에 따른 호스트 장치는, 스토리지 시스템에 라이트될 데이터 또는 스토리지 시스템으로부터 리드된 데이터를 저장하는 메모리, 메모리에 로드된 미리 정해진 크기의 데이터 블록을 압축하는 압축 매니저 및 압축 매니저로부터 데이터 블록에 대응하는 압축 블록을 수신하고, 압축 블록, 데이터 블록을 참조하는 노드 블록의 식별자 및 노드 블록이 참조하는 적어도 하나의 데이터 블록 중 데이터 블록의 인덱스를 나타내는 오프셋을 병합함으로써 병합 블록을 생성하고, 병합 블록을 상기 스토리지 시스템에 라이트하는 파일 시스템을 포함한다.
본 개시의 다른 측면에 따른 컴퓨팅 시스템은, 복수의 저장 영역들을 포함하는 UFS 시스템 및 복수의 저장 영역들 중 제1 저장 영역에 데이터 블록이 압축된 압축 블록, 데이터 블록을 참조하는 노드 블록의 식별자 및 노드 블록이 참조하는 적어도 하나의 데이터 블록 중 데이터 블록의 인덱스를 나타내는 오프셋이 병합된 병합 블록을 저장하고, 복수의 저장 영역들 중 제2 저장 영역에 데이터 블록의 어드레스를 가리키는 노드 블록을 저장하는 UFS 호스트를 포함한다.
본 개시의 예시적 실시 예에 따라, 압축된 데이터 블록, 노드 식별자와 데이터 블록의 오프셋이 병합된 병합 블록을 노드 블록과 비동기적으로 라이트함으로써 쓰기 성능이 향상된 컴퓨팅 시스템이 제공될 수 있다.
또한, 서든 파워 오프 리커버리 시, 병합 블록으로부터 데이터 블록에 대한 노드 블록을 생성할 수 있으므로 안전한 데이터 저장 성능을 제공하는 컴퓨팅 시스템이 제공될 수 있다.
도 1은 본 개시의 예시적 실시 예에 따른 컴퓨팅 시스템을 설명하기 위한 도면이다.
도 2는 도 1의 호스트를 설명하기 위한 블록도이다.
도 3은 도 1의 스토리지 장치를 설명하기 위한 블록도이다.
도 4는 도 1의 스토리지 장치에 저장되는 파일의 구조를 설명하기 위한 도면이다.
도 5는 도 1의 스토리지 장치를 설명하기 위한 블록도이다.
도 6은 노드 어드레스 테이블을 설명하기 위한 도면이다.
도 7은 본 개시의 예시적 실시 예에 따른 데이터 블록에 접근하는 방법을 설명하는 도면이다.
도 8은 본 개시의 예시적 실시 예에 따른 라이트 동작을 설명하는 도면이다.
도 9는 본 개시의 예시적 실시 예에 따른 컴퓨팅 시스템의 동작 방법을 설명하는 도면이다.
도 10은 본 개시의 예시적 실시 예에 따른 호스트의 동작 방법을 설명하는 흐름도이다.
도 11은 본 개시의 예시적 실시 예에 따른 서든 파워 오프 리커버리 동작을 설명하는 도면이다.
도 12는 본 개시의 예시적 실시 예에 따른 리커버리 동작을 수행하는 컴퓨팅 시스템의 동작 방법을 설명하는 도면이다.
도 13은 본 발명의 일 실시예에 따른 컴퓨팅 시스템을 도시한 도면이다.
도 14는 본 발명의 예시적인 실시예에 따른 컴퓨팅 시스템을 나타내는 블록도이다.
도 15는 본 발명의 일 실시예에 따른 UFS 시스템에 대해 설명하기 위한 도면이다.
이하, 본 발명의 다양한 실시 예가 첨부된 도면을 참조하여 기재된다.
도 1은 본 개시의 예시적 실시 예에 따른 컴퓨팅 시스템을 설명하기 위한 도면이다.
도 1을 참조하면, 컴퓨팅 시스템(10)은 호스트(100) 및 스토리지 시스템(200)을 포함할 수 있다.
호스트(100)는 스토리지 시스템(200)으로 데이터의 기록 요청, 독출 요청 또는 소거 요청을 제공할 수 있다. 스토리지 시스템(200)은 기록 요청에 응답하여 저장 영역에 데이터를 저장할 수 있고, 독출 요청에 응답하여 저장 영역에 저장된 데이터를 독출하여 호스트(100)에 제공할 수 있고, 소거 요청에 응답하여 데이터에 대한 소거 동작을 수행할 수 있다. 데이터는 미리 정해진 블록 단위(예를 들어, 4KB 단위)로 저장되거나 독출될 수 있다.
호스트(100)는 파일 시스템(110)을 포함할 수 있다. 파일 시스템(110)은 데이터가 스토리지 시스템(200)에 포함되는 저장 영역들 중 특정 논리적 또는 물리적 위치에 저장될 수 있도록 데이터를 가공할 수 있다. 구체적으로, 파일 시스템(110)은 유저 어플리케이션(미도시)에게 제공받은 데이터를 가공하고 스토리지 시스템(200)에 저장할 수 있다.
이 때, 파일 시스템(110)은 로그 구조 파일 시스템(Log-Structured File System, LFS)일 수 있다. 예를 들어, 플래시 메모리 특성에 따라 설계된 리눅스 커널용 파일 시스템인 F2FS(Flash-Friendly File System) 또는 NOR 플래시 메모리 장치에 사용되는 리눅스 로그 구조 파일 시스템인 저널링 플래시 파일 시스템(Journalling Flash File System, JFFS)일 수 있다.
그러나, 파일 시스템(110)의 종류는 로그 구조 파일 시스템에 한정되는 것은 아니며, 파일이 업데이트되는 경우, 기존 데이터가 기입된 논리적 주소와 상이한 논리적 주소에 새로운 데이터가 기입되는 방식의 파일 시스템이라면 본 발명이 적용될 수 있다.
스토리지 시스템(200)은 스토리지 컨트롤러(210)와 스토리지 장치(220)를 포함할 수 있다. 스토리지 장치(220)는, 적어도 하나의 비휘발성 메모리를 포함할 수 있다. 스토리지 컨트롤러(210)는 호스트(100)로부터 수신된 논리적 어드레스를 물리적 어드레스로 변환하고, 물리적 어드레스를 갖는 저장 영역에 데이터가 저장되도록 스토리지 장치(220)를 제어할 수 있다.
스토리지 시스템(200)은 호스트(100)으로부터의 요청에 따라 데이터를 저장하기 위한 저장 매체들을 포함할 수 있다. 한 예로서, 스토리지 시스템(200)은 하나 이상의 솔리드 스테이트 드라이브(Solid State Drive, SSD)를 포함할 수 있다. 스토리지 시스템(200)이 SSD를 포함하는 경우, 스토리지 장치(220)는 데이터를 불휘발성하게 저장하는 다수 개의 플래시 메모리 칩들(예를 들어, NAND 메모리 칩들)을 포함할 수 있다. 한편, 스토리지 장치(220)는 하나의 플래시 메모리 장치에 해당할 수도 있으며, 또는 스토리지 장치(220)는 하나 이상의 플래시 메모리 칩들을 포함하는 메모리 카드를 포함할 수도 있다.
스토리지 시스템(200)이 플래시 메모리를 포함할 때, 상기 플래시 메모리는 2D NAND 메모리 어레이나 3D(또는 수직형, Vertical) NAND(VNAND) 메모리 어레이를 포함할 수 있다. 상기 3D 메모리 어레이는 실리콘 기판 위에 배치되는 활성 영역을 가지는 메모리 셀들의 어레이들, 또는 상기 메모리 셀들의 동작과 관련된 회로로서 상기 기판상에 또는 상기 기판 내에 형성된 회로의 적어도 하나의 물리적 레벨에 모놀리식으로 형성된다. 상기 용어 "모놀리식"은 상기 어레이를 구성하는 각 레벨의 층들이 상기 어레이 중 각 하부 레벨의 층들의 바로 위에 적층되어 있음을 의미한다.
본 발명의 기술적 사상에 의한 일 실시예에서, 상기 3D 메모리 어레이는 적어도 하나의 메모리 셀이 다른 메모리 셀의 위에 위치하도록 수직 방향으로 배치된 Vertical NAND 스트링들을 포함한다. 상기 적어도 하나의 메모리 셀은 전하 트랩층을 포함할 수 있다.
다른 예로서, 스토리지 시스템(200)은 다른 다양한 종류의 메모리들을 포함할 수도 있다. 예를 들어, 스토리지 시스템(200)은 불휘발성 메모리를 포함할 수 있으며, 불휘발성 메모리는 MRAM(Magnetic RAM), 스핀전달토크 MRAM(Spin-Transfer Torgue MRAM), Conductive bridging RAM(CBRAM), FeRAM(Ferroelectric RAM), PRAM(Phase RAM), 저항 메모리(Resistive RAM), 나노튜브 RAM(Nanottube RAM), 폴리머 RAM(Polymer RAM: PoRAM), 나노 부유 게이트 메모리(Nano Floating Gate Memory: NFGM), 홀로그래픽 메모리(holographic memory), 분자 전자 메모리 소자(Molecular Electronics Memory) 또는 절연 저항 변화 메모리(Insulator Resistance Change Memory) 등 다양한 종류의 메모리가 적용될 수 있다.
한 예로서, 스토리지 장치(220)는 eMMC(embedded Multi-Media Card) 또는 임베디드 UFS(Universal Flash Storage) 메모리 장치일 수 있다. 한 예로서, 스토리지 장치(220)는 스토리지 시스템(200)에 탈착 가능한 외장(external) 메모리일 수 있다. 구체적으로, 스토리지 장치(220)는 UFS 메모리 카드, CF(Compact Flash), SD(Secure Digital), Micro-SD(Micro Secure Digital), Mini-SD(Mini Secure Digital), xD(extreme Digital) 또는 메모리 스틱(Memory Stick)일 수 있으나, 이에 제한되지 않는다.
호스트(100)는 다양한 인터페이스를 통하여 스토리지 시스템(200)과 통신할 수 있다. 한 예로서, 호스트(100)는 USB(Universal Serial Bus), MMC(MultiMediaCard), PCI-E(PCIExpress), ATA(AT Attachment), SATA(Serial AT Attachment), PATA(Parallel AT Attachment), SCSI(Small Computer System Interface), SAS(Serial Attached SCSI), ESDI(Enhanced Small Disk Interface), IDE(Integrated Drive Electronics), NVMe(Non-Volatile Memory Express) 등과 같은 다양한 인터페이스를 통해 스토리지 시스템(200)과 통신할 수 있다.
호스트(100)는 임의의 파일의 데이터를 새로운 데이터로 업데이트하는 경우, 새로운 데이터의 기록 요청(또는, 기록 커맨드)를 스토리지 시스템(200)으로 전송할 수 있다.
본 명세서에서, 파일 시스템(110)이 유저 어플리케이션에게 제공받은 데이터는 파일 데이터로 지칭될 수 있다. 파일 데이터는 스토리지 시스템(200)에 미리 결정된 블록 단위(예를 들어, 4KB 단위)로 저장될 수 있고, 블록 단위의 파일 데이터는 데이터 블록으로 지칭될 수 있다. 즉, 파일 데이터는 복수의 데이터 블록들로 구성될 수 있다.
파일 시스템(110)은 데이터 블록에 대응하는 노드 블록을 생성할 수 있다. 노드 블록은 데이터 블록에 관한 정보를 포함할 수 있다. 예를 들어, 노드 블록은, 파일의 이름, 노드 식별자, 파일의 크기 또는 데이터 블록의 논리 어드레스를 포함할 수 있다. 파일의 이름은 데이터 블록이 구성하는 파일의 이름을 의미할 수 있고, 노드 식별자는 노드 블록에 대한 고유의 식별자일 수 있고, 파일의 크기는 데이터 블록이 구성하는 파일의 크기를 의미할 수 있다. 하나의 노드 블록은 복수의 데이터 블록들을 참조할 수 있고, 복수의 데이터 블록들 각각은 오프셋을 기초로 구분될 수 있다.
노드 블록은 미리 결정된 블록 단위(예를 들어, 4KB 단위)로 스토리지 시스템(200)에 저장될 수 있다. 일 예로서, 노드 블록은 데이터 블록의 위치를 찾는 데 사용될 수 있다. 구체적으로, 파일 시스템(110)은 노드 블록마다 노드 식별자를 할당할 수 있다. 파일 시스템(110)은 노드 어드레스 테이블(Node Address Table, NAT)을 통해 노드 식별자와 노드 식별자에 대응되는 논리 어드레스를 관리할 수 있다. 파일 시스템(110)은 노드 어드레스 테이블(NAT)을 통해 노드 블록에 접근할 수 있고, 노드 블록에 저장된 데이터 블록의 논리 어드레스를 확인함으로써 데이터 블록에 접근할 수 있다.
본 발명의 예시적 실시 예에 따른 호스트(100)는 압축 매니저(120)를 포함할 수 있다. 압축 매니저(120)는 데이터 블록을 압축함으로써 압축 블록(compressed block)을 생성할 수 있다. 파일 시스템(110)은 압축 블록, 데이터 블록에 대응되는 노드 블록의 노드 식별자 및, 압축된 데이터 블록의 오프셋을 병합함으로써 미리 결정된 단위(예를 들어, 4KB 단위)의 블록을 생성할 수 있다. 본 명세서에서, 압축 블록, 노드 식별자 및 오프셋이 병합된 블록은 병합 블록(merged block)으로 지칭될 수 있다. 하나의 노드 블록은 하나의 파일에 대응하는 복수의 데이터 블록들을 참조할 수 있다. 하나의 노드 블록은, 복수의 데이터 블록들을 오프셋을 기초로 구분할 수 있다. 즉, 병합 블록(merged block)에 포함되는 오프셋은, 하나의 노드 블록이 참조하는 복수의 데이터 블록들 중 압축된 데이터 블록을 식별하기 위한 정보일 수 있다. 일부 실시예들에서, 병합 블록(merged block)은 병합 블록임을 나타내는 비트를 포함할 수도 있다.
파일 시스템(110)은 병합 블록과, 병합 블록에 대응되는 노드 블록을 비동기적으로 스토리지 시스템(200)에 기록할 수 있다. 즉, 병합 블록이 스토리지 시스템(200)에 전달되는 시구간과, 노드 블록이 스토리지 시스템(200)에 전달되는 시구간은 불연속적일 수 있다. 예를 들어, 파일 시스템(110)은 유저 어플리케이션의 요청에 따라 병합 블록을 스토리지 시스템(200)에 기록할 수 있고, 호스트(100)와 스토리지 시스템(200) 간의 인터페이스가 유휴 상태인 시구간 동안 노드 블록을 스토리지 시스템(200)에 기록할 수 있다. 따라서, 호스트(100)와 스토리지 시스템(200)의 인터페이스가 노드 블록에 의해 점유되는 시구간과 병합 블록에 의해 점유되는 시구간이 분산될 수 있으므로, 쓰기 성능이 향상될 수 있다.
호스트(100)는 메모리(130)를 포함할 수 있다. 파일 시스템(110)은 유저 어플리케이션으로부터 제공된 파일 데이터를 데이터 블록으로 구분하고, 데이터 블록을 메모리에 로드할 수 있다. 파일 시스템(110)은 데이터 블록 각각에 대응하는 노드 블록을 생성하고 메모리에 로드할 수 있다. 메모리(130)는 휘발성 메모리 장치일 수 있다. 예를 들어, 메모리(130)는 DRAM, SDRAM, DDR SDRAM, LPDDR SDRAM, GRAM 등의 휘발성 메모리일 수 있다.
호스트(100)에 대한 전원 공급이 갑작스럽게 차단되는 서든 파워 오프(Sudden Power Off, SPO)가 발생하는 경우, 메모리(130)에 로드된 데이터는 소멸될 수 있다. SPO에 대비하여, 파일 시스템(110)은 메모리(130)에 로드된 데이터 전부(예를 들어, 노드 어드레스 테이블, 데이터 블록, 노드 블록)를 스토리지 시스템(200)에 저장하는 체크포인팅 동작을 수행할 수 있다. 스토리지 장치(220)는 전원 공급이 차단되어도 데이터를 지속적으로 저장할 수 있다. 체크포인팅 동작은 주기적으로 수행되거나 비주기적으로 수행될 수 있다. 예를 들어, 체크포인팅 동작은 30초마다 수행될 수 있다.
SPO 이후 호스트(100)에 전원이 다시 인가되면 파일 시스템(110)은 서든 파워 오프 리커버리(Sudden Power Off Recovery, SPOR) 동작을 수행할 수 있다. SPOR 시, 파일 시스템(110)은, 병합 블록을 메모리에 로드하고, 병합 블록으로부터 데이터 블록을 획득할 수 있다. 또한, 파일 시스템(110)은, 병합 블록으로부터 노드 식별자 및 데이터 블록의 오프셋을 획득하고, 데이터 블록에 대응하는 노드 블록을 생성할 수 있다.
본 개시의 예시적 실시 예에 따른 파일 시스템(110)은 병합 블록과 노드 블록을 비동기적으로 스토리지 장치(220)에 기록할 수 있다. 따라서, 병합 블록이 스토리지 장치(220)에 기록된 후 SPO가 발생하면, 병합 블록에 대응하는 노드 블록은, 스토리지 장치(220)에 기록되지 않고 메모리 상에서 소멸될 수 있다. 따라서, 파일 시스템(110)은 스토리지 장치(220)에 기록된 병합 블록을 독출하고, 병합 블록에 포함된 노드 식별자와 데이터 블록의 오프셋을 사용하여 병합 블록에 대응되는 노드 블록을 생성할 수 있다.
도 2는 도 1의 호스트를 설명하기 위한 블록도이다.
도 2를 참조하면, 호스트(100)는 사용자 스페이스(user space)(11)와 커널 스페이스(kernel space)(12)를 포함한다.
도 2에 도시된 각 구성요소는 소프트웨어(software) 또는, FPGA(field-programmable gate array)나 ASIC(application-specific integrated circuit)과 같은 하드웨어(hardware)를 의미할 수 있다. 그렇지만 상기 구성요소들은 소프트웨어 또는 하드웨어에 한정되는 의미는 아니며, 어드레싱(addressing)할 수 있는 저장 매체에 있도록 구성될 수도 있고 하나 또는 그 이상의 프로세서들을 실행시키도록 구성될 수도 있다. 상기 구성요소들 안에서 제공되는 기능은 더 세분화된 구성요소에 의하여 구현될 수 있으며, 복수의 구성요소들을 합하여 특 정한 기능을 수행하는 하나의 구성요소로 구현할 수도 있다.
사용자 스페이스(11)는 사용자 어플리케이션(user application)(13)이 실행되는 영역이고, 커널 스페이스(12)는 커널 실행을 위해서 제한적으로 보장된(restrictively reserved) 영역이다. 사용자 스페이스(11)에서 커널 스페이스(12)를 접근하기 위해서, 시스템 콜(system call)이 이용될 수 있다.
커널 스페이스(12)는 가상 파일 시스템(14), 파일 시스템(110), 장치 드라이버(15) 등을 포함할 수 있다. 여기서, 파일 시스템(110)은 하나 이상일 수 있다. 한편, 본 발명의 몇몇 실시예에서 파일 시스템(110)은 F2FS(Flash-Friendly File System) 파일 시스템일 수 있다.
한편, 본 발명의 몇몇 실시예에서, 파일 시스템(110)은 스토리지 장치(220)의 저장 영역을 복수의 블록, 섹션 및 존으로 구분하고, 각 블록에 사용자 어플리케이션(13)으로부터 제공받은 로그를 라이트(write)할 수 있다. 스토리지 장치(220)의 저장 영역을 복수의 블록, 섹션 및 존으로 구분하는 내용은 도 5를 통해서 상세히 후술될 수 있다.
가상 파일 시스템(14)은 하나 이상의 파일 시스템(110)이 서로 상호 동작할 수 있도록 한다. 가상 파일 시스템(14)은 서로 다른 미디어의 서로 다른 파일 시스템(110)에 대해 리드/라이트 작업을 하기 위해서, 표준화된 시스템 콜을 사용할 수 있도록 한다. 따라서, 예를 들어, open(), read(), write()와 같은 시스템 콜은, 파일 시스템(110)의 종류에 관계없이 사용될 수 있다. 즉, 가상 파일 시스템(14)은 사용자 스페이스(11)와 파일 시스템(110) 사이에 존재하는 추상화 계층일 수 있다.
장치 드라이버(15)는 하드웨어와 사용자 어플리케이션(또는 운영체제) 사이의 인터페이스를 담당한다. 장치 드라이버(15)는 하드웨어가 특정 운영체제 하에서 정상적으로 동작하기 위해 필요한 프로그램이다.
도 3은 도 1의 스토리지 장치를 설명하기 위한 블록도이다.
도 3을 참조하면, 스토리지 장치(220)의 저장 영역은 블록(31), 세그먼트(32), 섹션(33) 및 존(34)을 포함하도록 구성될(configured) 수 있다. 스토리지 장치(220)의 저장 영역은 복수의 존들(34)을 포함할 수 있다. 존(34)은 복수의 섹션들(33)을 포함할 수 있고, 섹션(33)은 복수의 세그먼트들(32)을 포함할 수 있고, 세그먼트(32)는 복수의 블록들(31)을 포함할 수 있다. 예를 들어, 블록(31)는 4KB 데이터를 저장하는 저장 영역일 수 있고, 세그먼트(32)는 512개의 블록들(31)을 포함함으로써 2MB 데이터를 저장하는 저장 영역일 수 있다. 스토리지 장치(220)의 도 3과 같은 구성은, 스토리지 장치(220)의 포맷 시점에 결정될 수 있으나, 이에 한정되는 것은 아니다. 파일 시스템(110)은 데이터를 4KB의 페이지 단위로 리드 및 라이트할 수 있다. 즉, 블록(31)에 하나의 페이지가 저장될 수 있다.
도 4는 도 1의 스토리지 장치에 저장되는 파일의 구조를 설명하기 위한 도면이다.
스토리지 장치(220)에 저장되는 파일은 인덱싱 구조를 가질 수 있다. 하나의 파일은 유저 어플리케이션(도 2의 13)이 저장하고자 하는 파일의 내용을 포함하는 파일 데이터와, 파일의 속성과 파일 데이터가 저장되는 데이터 블록의 위치 등을 포함하는 노드 데이터를 포함할 수 있다.
도 4를 참조하면, 데이터 블록(41 내지 44)는 파일 데이터를 저장하는 저장 영역이고, 노드 블록(51 내지 57)은 노드 데이터를 저장하는 저장 영역일 수 있다.
노드 블록(51 내지 57)은, 아이노드 블록(inode block)(51), 직접 노드 블록(direct node block)(52, 54, 57), 간접 노드 블록(indirect node block)(53, 55, 56)을 포함할 수 있다.
아이노드 블록(51)은 데이터 블록(41)을 직접 기리키는 직접 포인터, 직접 노드 블록(52)을 가리키는 단일-간접 노드 포인터, 간접 노드 블록(53)을 기리키는 이중-간접 노드 포인터, 간접 노드 블록(55)을 가리키는 삼중-간접 노드 포인터 중 적어도 하나를 포함할 수 있다. 파일 별로 아이노드 블록이 구비될 수 있다. 노드 블록(51 내지 57) 각각이 하나의 데이터 블록을 가리키는 것으로 도시되었으나, 실시예는 이에 제한되지 않으며, 노드 블록(51 내지 57) 각각은 복수의 데이터 블록들을 가리킬 수 있다. 일부 실시예들에서, 복수의 데이터 블록들을 오프셋을 통해 식별될 수 있다. 즉, 오프셋은 복수의 데이터 블록들의 인덱스일 수 있다.
직접 노드 블록(52, 54, 57)은, 데이터 블록(41, 43, 44)을 직접 가리키는 데이터 포인터를 포함할 수 있다.
간접 노드 블록(53, 55, 56)은 제1 간접 노드 블록(53, 56) 및 제2 간접 노드 블록(55)을 포함할 수 있다. 제1 간접 노드 블록(53, 56)은 직접 노드 블록(54, 57)을 가리키는 제1 노드 포인터를 포함할 수 있다. 제2 간접 노드 블록(55)은 제1 간접 노드 블록(56)을 가리키는 제2 노드 포인터를 포함할 수 있다.
도 5는 도 1의 스토리지 장치를 설명하기 위한 블록도이다. 도 6은 노드 어드레스 테이블을 설명하기 위한 도면이다.
도 5를 참조하면, 스토리지 장치(220)의 저장 영역은 제1 영역(REGION 1)과 제2 영역(REGION 2)을 포함할 수 있다. 파일 시스템(110)은 포맷 시 스토리지 장치(220)의 저장 영역은 제1 영역(REGION 1) 및 제2 영역(REGION 2)으로 구분할 수 있으나, 실시 예는 이에 제한되지 않는다.
제1 영역(REGION 1)은 시스템 전체로 관리되는 각종 정보가 저장되는 영역으로, 예를 들어, 현재 할당된 파일 수, 유효한 페이지 수, 위치 등의 정보를 포함할 수 있다. 제2 영역(REGION 2)은 실제 사용자가 사용하고 있는 각종 디렉토리 정보, 데이터, 파일 정보 등을 저장하는 저장 영역일 수 있다.
제1 영역(REGION 1)은 제1 슈퍼 블록(SB1)(61) 및 제2 슈퍼 블록(SB2)(62), 체크포인트 영역(CheckPoint area, CP)(63), 세그먼트 정보 테이블(Segment Information Table, SIT)(64), 노드 어드레스 테이블(Node Address Table, NAT)(65), 세그먼트 요약 영역(Segment Summary Area, SSA)(66) 등을 포함할 수 있다.
제1 및 2 슈퍼 블록(61, 62)에는, 파일 시스템(110)의 디폴트 정보가 저장된다. 예를 들어, 블록(61)의 크기, 블록(61)의 개수, 파일 시스템(110)의 상태 플러그(clean, stable, active, logging, unknown) 등이 저장될 수 있다. 도시된 것과 같이, 슈퍼 블록(61, 62)은 2개일 수 있고, 각각에는 동일한 내용이 저장될 수 있다. 따라서, 둘 중 어느 하나에 문제가 발생하더라도, 다른 하나를 이용할 수 있다.
체크포인트 영역(63)은 체크포인트를 저장한다. 체크포인트는 논리적인 중단점으로서, 이러한 중단점까지의 상태가 완전하게 보존된다. 컴퓨팅 시스템(10)의 동작 중에 SPO가 발생하면, 파일 시스템(110)은 보존된 체크포인트를 이용하여 데이터를 복구할 수 있다. 이러한 체크포인트는 주기적으로 생성될 수 있으나, 이에 한정되는 것은 아니다.
노드 어드레스 테이블(65)은 도 6에 도시된 것과 같이, 노드 블록 각각에 대응되는 다수의 노드 식별자(NODE ID, NID)와, 다수의 노드 식별자 각각에 대응되는 다수의 어드레스를 포함할 수 있다. 예를 들어, 노드 식별자 N1에 대응되는 노드 블록은 어드레스 A1에 대응되고, 노드 식별자 N2에 대응되는 노드 블록은 어드레스 A2에 대응되고, 노드 식별자 N3에 대응되는 노드 블록은 어드레스 A3에 대응될 수 있다.
모든 노드(아이노드, 직접 노드, 간접 노드 등)는 각각 고유의 노드 식별자를 갖는다. 노드 어드레스 테이블(65)은 아이노드의 노드 식별자, 직접 노드의 노드 식별자 및 간접 노드의 노드 식별자 등을 저장할 수 있다. 파일 시스템(110)은 각 노드 식별자에 대응되는 어드레스를 업데이트(update)될 수 있다.
세그먼트 정보 테이블(64)는 각 세그먼트의 유효한 페이지의 개수와, 다수의 페이지의 비트맵을 포함한다. 비트맵은 각 페이지가 유효한지 여부를 0 또는 1로 표시한 것을 의미한다. 세그먼트 정보 테이블(64)은 클리닝(cleaning) 작업(또는 가비지 컬렉션(garbage collection)에서 사용될 수 있다. 특히 비트맵은 클리닝 작업을 수행할 때, 불필요한 리드 요청을 줄일 수 있고, 어댑티브 데이터 로깅(adaptive data logging)시 블록 할당할 때 이용될 수 있다.
세그먼트 요약 영역(66)는 제2 영역(REGION 2)의 각 세그먼트의 요약 정보를 모아둔 영역일 수 있다. 구체적으로, 세그먼트 요약 영역(66)은 제2 영역(REGION 2)의 각 세그먼트의 다수의 블록이 속하는 노드의 정보를 기술한다. 세그먼트 요약 영역(66)은 클리닝(cleaning) 작업(또는 가비지 컬렉션(garbage collection))에서 사용될 수 있다. 구체적으로 설명하면, 상위 노드 블록은, 데이터 블록(41 내지 44) 또는 하위의 노드 블록의 위치를 확인하기 위해, 노드 식별자 목록 또는 어드레스를 가지고 있다. 상위 노드 블록은 노드 포인터를 통해 하위 노드 블록을 참조하는 노드 블록을 의미할 수 있고, 하위 노드 블록은 노드 포인터를 통해 상위 노드 블록에 의해 참조되는 노드 블록을 의미할 수 있다. 세그먼트 요약 영역(66)은 데이터 블록(41 내지 44) 또는 하위의 노드 블록이 상위의 노드 블록의 위치를 확인할 수 있는 인덱스(index)를 제공할 수 있다. 세그먼트 요약 영역(66)은 다수의 세그먼트 요약 블록을 포함한다. 하나의 세그먼트 요약 블록은, 제2 영역(REGION 2)에 위치한 하나의 세그먼트에 대한 정보를 가지고 있다. 또한, 세그먼트 요약 블록은 다수의 요약 정보로 구성되어 있으며, 하나의 요약 정보는 하나의 데이터 블록 또는 하나의 노드 블록에 대응된다.
도 7은 본 개시의 예시적 실시 예에 따른 데이터 블록에 접근하는 방법을 설명하는 도면이다. 도 7은 도 1을 함께 참조하여 후술될 수 있다.
도 7을 참조하면, 데이터 블록(710)은 파일 데이터의 적어도 일부를 포함할 수 있다. 데이터 블록(710)은 어드레스 A2에 저장될 수 있다. 노드 블록(720)은 데이터 블록(710)의 저장 위치를 가리키는 어드레스 A2를 저장할 수 있고, 어드레스 A1에 저장될 수 있다. 파일 시스템(110)은 노드 블록(720)에 노드 식별자 N1을 할당할 수 있다.
파일 시스템(110)은 노드 식별자 N1에 대응되는 데이터 블록에 접근하기 위하여, 노드 어드레스 테이블(NAT)을 참조할 수 있다. 파일 시스템(110)은 노드 어드레스 테이블(NAT)로부터 어드레스 A1을 획득할 수 있다. 파일 시스템(110)은 어드레스 A1을 이용하여 노드 블록(720)에 접근할 수 있다. 파일 시스템(110)은 노드 블록(720)으로부터 어드레스 A2를 획득할 수 있다. 파일 시스템(110)은 어드레스 A2를 이용하여 데이터 블록(710)에 접근할 수 있다.
도 7에서, 노드 블록(720)의 도 4의 직접 노드 블록(52, 54, 57)일 수 있다. 다만, 실시 예는 이에 제한되지 않으며, 파일 시스템(110)은 간접 노드 블록(53, 55, 56) 또는 아이노드 블록(51)을 사용하여 데이터 블록(710)에 접근할 수도 있다.
도 8은 본 개시의 예시적 실시 예에 따른 라이트 동작을 설명하는 도면이다. 도 8은 도 1 및 2를 함께 참조하여 후술될 수 있다.
파일 시스템(110)은 메모리(130) 상에 로드된 데이터를 사용하여 유저 어플리케이션이 요구하는 데이터를 제공할 수 있고, 유저 어플리케이션이 제공한 파일 데이터를 기초로 메모리(130) 상에 로드된 데이터를 업데이트할 수 있다. 메모리(130)는 휘발성 메모리이므로, 파일 시스템(110)은 데이터를 보호하기 위하여, 메모리(130) 상의 데이터를 비휘발성 메모리를 포함하는 스토리지 시스템(200)에 라이트할 수 있다. 호스트(100)는 복수의 단계들(S810 내지 S850)을 통해 메모리(130)에 로드된 데이터를 스토리지 시스템(200)에 라이트할 수 있다.
S810 단계에서, 호스트(100)에 포함된 압축 매니저(120)는 제1 데이터 블록(DATA BLOCK 1)을 압축함으로써 압축 블록(c_BLOCK)을 생성할 수 있다. 제1 데이터 블록(DATA BLOCK 1)의 크기는 L1일 수 있다. 일부 실시예들에서, L1은 4KB일 수 있다. 압축 블록(c_BLOCK)의 크기는 L2일 수 있다. L2는 L1보다 작을 수 있다. 압축 매니저(120)는, 런 렝스 인코딩(run-length encodeing) 방식, 허프만 코딩(Huffman coding) 방식, 산술 코딩(Arithmetic coding) 방식, 엔트로피 코딩(Entropy coding) 방식, 마르코프 체인(Markov chain) 방식, 레인지 코딩(range coding) 방식 또는 차동 펄스 부호 변조(differential pulse-code-modulation) 방식과 같은 압축 알고리즘을 사용하여 제1 데이터 블록(DATA BLOCK 1)을 압축할 수 있다.
S820 단계에서, 파일 시스템(110)은 압축 블록(c_BLOCK), 노드 식별자 N1 및 제1 데이터 블록(DATA BLOCK 1)의 오프셋 ofs을 병합함으로써 병합 블록(m_BLOCK)을 생성할 수 있다. 병합 블록(m_BLOCK)의 크기는 L1일 수 있다. 일부 실시예들에서, L1은 4KB일 수 있다. 즉, 압축 블록(c_BLOCK)의 크기 L2, 노드 식별자 N1의 크기 L3 및 오프셋 ofs의 크기 L4의 합은 L1일 수 있다. 파일 시스템(110)은 제1 데이터 블록(DATA BLOCK 1)에 대응되는 노드 블록(810)을 생성할 수 있다. 노드 블록(810)은 노드 식별자 N1 및 어드레스 A2를 포함하는 블록일 수 있다. 어드레스 A2는 병합 블록(e_BLCOK)이 저장되는 위치를 가리킬 수 있다. 노드 블록(810)은 제1 데이터 블록(DATA BLOCK 1) 외에도 복수의 데이터 블록들을 참조할 수 있으며, 오프셋 ofs을 기초로 제1 데이터 블록(DATA BLOCK 1)을 식별할 수 있다.
S830 단계에서, 파일 시스템(110)은 병합 블록(m_BLOCK)을 스토리지 시스템(200)에 라이트할 수 있다. 병합 블록(m_BLOCK)은 스토리지 장치(220)에 포함되는 데이터 로그에 라이트될 수 있다. 데이터 로그에서 데이터 블록은 순차적으로(sequentially) 기록될 수 있다. 따라서, 병합 블록(e_BLCOK)은 기존 데이터 블록인 제2 데이터 블록(DATA BLOCK 2)이 저장된 위치의 다음 위치부터 순차적으로 기록될 수 있다. 제1 데이터 블록(DATA BLOCK 1)과 제2 데이터 블록(DATA BLOCK 2)은 동일한 파일에 대한 데이터일 수 있고, 제1 데이터 블록(DATA BLOCK 1)은 최신 데이터 블록일 수 있고, 제2 데이터 블록(DATA BLOCK 2)은 기존 데이터 블록일 수 있다. 데이터 로그는, 도 5의 데이터 세그먼트에 대응되는 저장 영역을 의미할 수 있다. 제1 데이터 블록(DATA BLOCK 1)은 병합 블록일 수도 있다.
S840 단계에서, 파일 시스템(110)은 병합 블록(m_BLOCK)에 대응되는 노드 블록(810)을 스토리지 시스템(200)에 라이트할 수 있다. 노드 블록(810)은 스토리지 장치(220)에 포함되는 노드 로그에 라이트될 수 있다. 노드 로그에서 노드 블록은 순차적으로(sequentially) 기록될 수 있다. 따라서, 노드 블록(810)은 기존 노드 블록인 제2 노드 블록(820)이 저장된 위치의 다음 위치부터 순차적으로 기록될 수 있다. 제2 노드 블록(820)은, 기존 데이터 블록인 제2 데이터 블록(DATA BLOCK 2)의 어드레스 A4를 저장할 수 있다. S840 단계는, 호스트(100)와 스토리지 시스템(200) 간의 인터페이스가 데이터에 의해 점유되지 않는 유휴 시간동안 수행될 수 있다. 즉, 병합 블록(m_BLOCK)이 라이트되는 시구간과, 노드 블록(810)이 라이트되는 시구간은 불연속적일 수 있다. 호스트(100)와 스토리지 시스템(200) 간의 인터페이스가 병합 블록(m_BLOCK)과 노드 블록에 의해 점유되는 시간이 분산될 수 있으므로 쓰기 성능이 향상될 수 있다.
S850 단계에서, 파일 시스템(110)은 노드 식별자 N1에 대한 어드레스를 A1으로 변경하는 쓰기 동작을 수행함으로써 노드 어드레스 테이블에 대한 업데이트 동작을 수행할 수 있다. 업데이트 동작이 수행되기 전에, 스토리지 시스템(200)의 노드 어드레스 테이블(NAT) 상에서, 노드 식별자 N1에 대해 어드레스 A3가 대응될 수 있다. 업데이트 동작이 수행된 후 노드 식별자 N1에 대해 어드레스 A1이 대응될 수 있다.
따라서, 파일 시스템(110)은, S850 단계 이후, SPO가 발생하더라도, 스토리지 시스템(200)에 저장된 노드 어드레스 테이블을 참조하여 노드 식별자 N1에 대한 어드레스 A1을 리드하고, 어드레스 A1을 사용하여 노드 블록(810)에 접근하고, 노드 블록(810)에 저장된 어드레스 A2를 사용하여 병합 블록(m_BLOCK)에 접근할 수 있다.
본 개시의 예시적 실시 예에 따른 파일 시스템(110)은, S830 단계 이후 SPO가 발생하더라도, 병합 블록(m_BLOCK)에 접근할 수 있고, 병합 블록(m_BLOCK)을 가리키는 노드 블록(810)을 업데이트할 수 있고, 노드 블록(810)을 가리키도록 노드 어드레스 테이블(NAT)을 업데이트할 수 있다.
도 9는 본 개시의 예시적 실시 예에 따른 컴퓨팅 시스템의 동작 방법을 설명하는 도면이다.
도 9를 참조하면, 컴퓨팅 시스템의 동작 방법은 복수의 단계들(S910 내지 S960)을 포함할 수 있다.
S910 단계에서, 유저 어플리케이션은 쓰기 요청(w_REQ)을 파일 시스템(110)에 전달할 수 있다. 쓰기 요청(w_REQ)은 시스템 콜의 한 종류일 수 있다. 예를 들어, 쓰기 요청(w_REQ)은 write()일 수 있다.
S920 단계에서, 파일 시스템(110)은 쓰기 요청에 대응되는 데이터 블록을 생성하고, 데이터 블록을 압축 매니저(120)에 전달할 수 있다. 파일 시스템(110)은 데이터 블록에 대응되는 적어도 하나의 노드 블록을 생성할 수 있다. 적어도 하나의 노드 블록은, 아이노드 블록, 직접 블록 및 간접 블록 중 적어도 하나를 포함할 수 있다. 데이터 블록 및 노드 블록은 미리 결정된 크기 L1(예를 들어, 4KB)을 가질 수 있다.
S930 단계에서, 압축 매니저(120)는 압축 블록(c_BLOCK)을 생성할 수 있다. 구체적으로, 압축 매니저(120)는 데이터 블록의 크기가 기준 크기만큼 줄어들었는지 여부에 따라 압축 동작을 중단할 수 있다. 기준 크기는 노드 식별자의 크기와 데이터 블록의 오프셋의의 크기의 합을 기초로 결정될 수 있다. 일부 실시예들에서, 기준 크기는 노드 식별자의 크기, 데이터 블록의 오프셋의 크기 및 압축 마크의 크기를 기초로 결정될 수 있다. 압축 마크는, 데이터 블록이 압축되었음을 지시하는 적어도 하나의 비트를 의미할 수 있다. S930 단계에서, 데이터 블록의 크기가 기준 크기만큼 줄어들지 않은 경우, 압축 매니저(120)는 압축 실패 신호를 파일 시스템(110)에 제공할 수 있다.
S940 단계에서, 압축 매니저(120)는 압축 블록(c_BLOCK)을 파일 시스템(110)에 제공할 수 있다. 압축 블록(c_BLOCK)의 크기는 L2일 수 있다. L2는 L1보다 작을 수 있다.
S950 단계에서, 파일 시스템(110)은 병합 블록(m_BLOCK)을 생성할 수 있다. 구체적으로, 파일 시스템(110)은 압축 블록(c_BLOCK), 데이터 블록의 오프셋 및 노드 식별자를 병합함으로써 병합 블록(m_BLOCK)을 생성할 수 있다. 병합 블록(m_BLOCK)의 크기는 데이터 블록의 크기와 동일할 수 있다. 예를 들어, 병합 블록(m_BLOCK)의 크기는 4KB일 수 있다.
S960 단계에서, 파일 시스템(110)은 스토리지 시스템(200)에 쓰기 커맨드(w_CMD) 및 병합 블록(m_BLOCK)을 전달할 수 있다. 스토리지 시스템(200)은 병합 블록(m_BLOCK)을 스토리지 시스템(200)에 전달한 후, 스토리지 시스템(200)의 유휴 시간이 발생하는 경우, 노드 블록을 스토리지 시스템(200)에 전달할 수 있다. 즉, 스토리지 시스템(200)은 병합 블록(m_BLOCK)과 노드 블록을 비동기적으로(asynchronously) 라이트할 수 있다. S930 단계에서, 압축 블록(c_BLOCK)이 생성되지 않는 경우, 파일 시스템(110)은 쓰기 커맨드(w_CMD), 데이터 블록 및 노드 블록을 스토리지 시스템(200)에 전달할 수 있다. 즉, 스토리지 시스템(200)은 데이터 블록 및 노드 블록을 동기적으로(synchronously) 라이트할 수 있다.
도 10은 본 개시의 예시적 실시 예에 따른 호스트의 동작 방법을 설명하는 흐름도이다.
도 10을 참조하면, 호스트의 동작 방법은 복수의 단계들(S1010 내지 S1030)을 포함할 수 있다.
S1010 단계에서, 압축 매니저(120)는 데이터 블록의 제1 부분에 대한 압축 동작을 수행할 수 있다. 데이터 블록 중 미리 결정된 크기를 갖는 부분일 수 있다. 미리 결정된 크기를 갖는 부분의 데이터 상태 및 압축 알고리즘에 따라 압축되는 크기가 상이해질 수 있다.
S1020 단계에서, 압축 매니저(120)는 압축된 크기와 기준 크기를 비교할 수 있다. 기준 크기는 노드 식별자의 크기 및 데이터 블록의 오프셋의 크기의 합에 대응될 수 있다. 일부 실시 예들에서, 기준 크기는 노드 식별자의 크기, 데이터 블록의 오프셋의 크기 및 병합 마크의 크기에 대응될 수 있다. 압축된 크기가 기준 크기보다 작은 경우, S1040 단계가 수행될 수 있고, 압축된 크기가 기준 크기와 같거나 큰 경우, S1030 단계가 수행될 수 있다.
S1030 단계에서, 파일 시스템(110)은 병합 블록을 생성하고 스토리지 시스템(200)에 병합 블록을 전달할 수 있다. 파일 시스템(110)은 병합 블록과 쓰기 커맨드를 함께 스토리지 시스템(200)에 전달하여 병합 블록에 대한 라이트 동작을 수행할 수 있다. 파일 시스템(110)은 병합 블록에 대응되는 노드 블록을, 병합 블록이 전달되는 시구간과 상이한 시구간에 스토리지 시스템(200)에 제공함으로써 쓰기 성능을 향상시킬 수 있다.
S1040 단계에서, 압축 매니저(120)는 데이터 블록에 대해 최대 압축이 수행되었는지 여부를 판단할 수 있다. 최대 압축이 수행된 경우, S1060 단계가 수행될 수 있고, 최대 압축이 수행되지 않은 경우, S1050 단계가 수행될 수 있다.
S1050 단계에서, 압축 매니저(120)는 데이터 블록의 다음 부분을 압축할 수 있다. 데이터 블록의 다음 부분은 제1 부분과 동일한 크기를 가질 수도 있고, 상이한 크기를 가질 수도 있다. 다음 부분이 압축된 후, 재차 S1020 단계가 수행될 수 있다. 압축 매니저(120)가 데이터 블록을 단계적으로 압축함으로써 병합 블록을 생성하기 위해 소요되는 압축 시간을 줄일 수 있다.
S1060 단계에서, 파일 시스템(110)은 데이터 블록과 노드 블록이 연속적인 시구간에 스토리지 시스템(200)에 라이트되도록, 스토리지 시스템(200)에 데이터 블록과 노드 블록을 전달할 수 있다.
도 11은 본 개시의 예시적 실시 예에 따른 서든 파워 오프 리커버리 동작을 설명하는 도면이다.
도 8을 참조하면, S830 단계 이후 SPO가 발생할 수 있다. 따라서, 노드 블록(810)이 노드 로그에 라이트되지 않은 상태에서, 메모리(130) 상의 데이터는 소멸될 수 있다. 즉, 도 11과 같이, 데이터 로그에 병합 블록(m_BLOCK)이 라이트되고, 병합 블록(m_BLOCK)에 대응되는 제1 노드 블록(810)이 라이트되지 않은 상태에서 SPO가 발생할 수 있다. 따라서, 노드 로그에 기록된 기존의 제2 노드 블록(820)은 병합 블록(m_BLOCK)의 어드레스인 A2를 가리키지 않고, 기존 데이터 블록인 제2 데이터 블록(DATA BLOCK 2)의 어드레스인 A4를 가리킬 수 있다. 서든 파워 오프 리커버리 동작은 복수의 단계들(S1110 내지 S1150)을 포함할 수 있다.
S1110 단계에서, 파일 시스템(110)은 노드 어드레스 테이블(NAT)을 메모리(130)에 로드할 수 있다. 도 11에는 노드 어드레스 테이블(NAT)에 기존 데이터가 기록된 것으로 도시되어 있으나, 실시 예는 이에 제한되지 않는다. 즉, 메모리(130)에 로드되는 노드 어드레스 테이블(NAT)은, 노드 식별자 N1에 대응되는 어드레스 A3를 저장할 수도 있고, 노드 식별자 N1에 대응하는 어드레스 A2를 저장할 수도 있다.
S1120 단계에서, 파일 시스템(110)은 데이터 로그에 기록된 병합 블록(m_BLOCK)을 메모리(130)에 로드할 수 있다. 데이터 로그에는 블록들이 순차적으로 기록되므로, 파일 시스템(110)은 최근에 기록된 블록들부터 순차적으로 메모리(130)에 로드할 수 있다. 도 11에서, 병합 블록(m_BLOCK)만 로드되는 것으로 도시되어 있으나, 병합 블록이 아닌 데이터 블록도 메모리(130)에 로드될 수 있다. 파일 시스템(110)은 노드 로그에 기록된 제2 노드 블록(820)을 메모리(130)에 로드할 수 있다.
S1130 단계에서, 파일 시스템(110)은 로드된 블록들 중 병합 블록(m_BLOCK)을 탐색할 수 있다. 파일 시스템(110)은 로드된 블록들에서 병합 마크(e_m)를 식별함으로써 병합 블록(m_BLOCK)을 탐색할 수 있다.
S1140 단계에서, 파일 시스템(110)은 제2 노드 블록(820)이 병합 블록(m_BLOCK)에 대응되도록 제2 노드 블록(820)을 업데이트함으로써 제1 노드 블록(810)을 생성할 수 있다. 구체적으로, 파일 시스템(110)은 병합 블록(m_BLOCK)에 포함된 노드 식별자 N1, 데이터 블록의 오프셋 ofs을 기초로 제2 노드 블록(820)을 업데이트할 수 있다. 데이터 로그에는 데이터가 순차적으로 기록되고, 모든 데이터 블록의 크기는 일정하므로, 파일 시스템(110)은 병합 블록(m_BLOCK)의 어드레스 A2를 획득할 수 있다. 또한, 제1 노드 블록(810)이 참조하는 복수의 데이터 블록들 중 오프셋 ofs에 해당하는 데이터 블록을 제1 데이터 블록(DATA BLOCK1)으로 갱신할 수 있다. 결과적으로, 병합 블록(m_BLOCK)이 노드 식별자 N1과 오프셋 ofs를 포함함으로써 제2 노드 블록(820)을 제1 노드 블록(810)으로 업데이트할 수 있으므로, 도 8의 단계 S840가 수행되지 않더라도 제1 노드 블록(810)을 복구할 수 있다.
단계 S1150에서, 파일 시스템(110)은 노드 어드레스 테이블(NAT)을 업데이트할 수 있다. 구체적으로, 파일 시스템(110)은 노드 식별자 N1에 대응하는 어드레스를 A3에서 A1으로 업데이트할 수 있다.
도 12는 본 개시의 예시적 실시 예에 따른 리커버리 동작을 수행하는 컴퓨팅 시스템의 동작 방법을 설명하는 도면이다.
도 12를 참조하면, 컴퓨팅 시스템의 동작 방법은 복수의 단계들(S1210 내지 S1240)을 포함할 수 있다.
S1210 단계에서, 파일 시스템(110)은 스토리지 시스템(200)에 리드 커맨드(r_CMD)를 전달할 수 있다. 파일 시스템(110)은 데이터 로그에 최근에 기록된 블록의 어드레스를 리드 커맨드(r_CMD)와 함께 스토리지 시스템(200)에 전달할 수 있다. 최근에 기록된 블록의 어드레스는 체크 포인트 영역(CP)을 통해 획득할 수 있다.
S1220 단계에서, 스토리지 시스템(200)은 파일 시스템(110)에 병합 블록(m_BLOCK)을 전달할 수 있다. 스토리지 시스템(200)은 병합 블록(m_BLOCK) 뿐만 아니라 데이터 블록 및 노드 블록을 함께 전달할 수 있다.
S1230 단계에서, 파일 시스템(110)은 스토리지 시스템(200)으로부터 전달받은 블록들 중 병합 블록(m_BLOCK)을 탐색하고, 탐색된 병합 블록(m_BLOCK)에 포함된 압축 블록(c_BLOCK)을 압축 매니저(120)에 전달할 수 있다.
S1240 단계에서, 압축 매니저(120)는 압축 블록(c_BLOCK)에 대한 압축 해제를 수행함으로써 데이터 블록을 생성하고, 데이터 블록을 파일 시스템(110)에 전달할 수 있다. 데이터 블록은 메모리(130) 상에 저장될 수 있다.
S1250 단계에서, 파일 시스템(110)은 병합 블록(m_BLOCK)에 포함된 노드 식별자와 어드레스를 기초로 데이터 블록에 대응하는 노드 블록을 생성할 수 있다. 노드 블록은 메모리(130) 상에 저장될 수 있다.
도 13은 본 발명의 일 실시예에 따른 컴퓨팅 시스템을 도시한 도면이다.
도 13의 컴퓨팅 시스템(1000)은 기본적으로 휴대용 통신 단말기(mobile phone), 스마트폰(smart phone), 태블릿 PC(tablet personal computer), 웨어러블 기기, 헬스케어 기기 또는 IOT(internet of things) 기기와 같은 모바일(mobile) 시스템일 수 있다. 하지만 도 13의 컴퓨팅 시스템(1000)은 반드시 모바일 시스템에 한정되는 것은 아니고, 개인용 컴퓨터(personal computer), 랩탑(laptop) 컴퓨터, 서버(server), 미디어 재생기(media player) 또는 내비게이션(navigation)과 같은 차량용 장비(automotive device) 등이 될 수도 있다. 도 13의 컴퓨팅 시스템(1000)은 도 1의 컴퓨팅 시스템(10)을 포함할 수 있다.
도 13을 참조하면, 컴퓨팅 시스템(1000)은 메인 프로세서(main processor)(1100), 메모리(1200a, 1200b) 및 스토리지 장치(1300a, 1300b)를 포함할 수 있으며, 추가로 촬영 장치(image capturing device)(1410), 사용자 입력 장치(user input device)(1420), 센서(1430), 통신 장치(1440), 디스플레이(1450), 스피커(1460), 전력 공급 장치(power supplying device)(1470) 및 연결 인터페이스(connecting interface)(1480) 중 하나 이상을 포함할 수 있다.
메인 프로세서(1100)는 시스템(1000)의 전반적인 동작, 보다 구체적으로는 시스템(1000)을 이루는 다른 구성 요소들의 동작을 제어할 수 있다. 이와 같은 메인 프로세서(1100)는 범용 프로세서, 전용 프로세서 또는 애플리케이션 프로세서(application processor) 등으로 구현될 수 있다.
메인 프로세서(1100)는 하나 이상의 CPU 코어(1110)를 포함할 수 있으며, 메모리(1200a, 1200b) 및/또는 스토리지 시스템(1300a, 1300b)을 제어하기 위한 컨트롤러(1120)를 더 포함할 수 있다. 실시예에 따라서는, 메인 프로세서(1100)는 AI(artificial intelligence) 데이터 연산 등 고속 데이터 연산을 위한 전용 회로인 가속기(accelerator) 블록(1130)을 더 포함할 수 있다. 이와 같은 가속기 블록(1130)은 GPU(Graphics Processing Unit), NPU(Neural Processing Unit) 및/또는 DPU(Data Processing Unit) 등을 포함할 수 있으며, 메인 프로세서(1100)의 다른 구성 요소와는 물리적으로 독립된 별개의 칩(chip)으로 구현될 수도 있다.
메모리(1200a, 1200b)는 컴퓨팅 시스템(1000)의 주기억 장치로 사용될 수 있으며, SRAM 및/또는 DRAM 등의 휘발성 메모리를 포함할 수 있으나, 플래시 메모리, PRAM 및/또는 RRAM 등의 비휘발성 메모리를 포함할 수도 있다. 메모리(1200a, 1200b)는 메인 프로세서(1100)와 동일한 패키지 내에 구현되는 것도 가능하다. 도 1의 호스트(100)는 도 13의 메인 프로세서(1100) 및 메모리(1200a, 1200b)를 통해 구현될 수 있다.
스토리지 시스템(1300a, 1300b)은 전원 공급 여부와 관계 없이 데이터를 저장하는 비휘발성 저장 장치로서 기능할 수 있으며, 메모리(1200a, 1200b)에 비해 상대적으로 큰 저장 용량을 가질 수 있다. 스토리지 시스템(1300a, 1300b)은 스토리지 컨트롤러(1310a, 1310b)와, 스토리지 컨트롤러(1310a, 1310b)의 제어 하에 데이터를 저장하는 비휘발성(non-volatile memory, NVM) 메모리(1320a, 1320b)를 포함할 수 있다. 비휘발성 메모리(1320a, 1320b)는 2D(2-dimensional) 구조 혹은 3D(3-dimensional) 구조의 V-NAND 플래시 메모리를 포함할 수 있으나, PRAM 및/또는 RRAM 등의 다른 종류의 비휘발성 메모리를 포함할 수도 있다.
스토리지 시스템(1300a, 1300b)은 메인 프로세서(1100)와는 물리적으로 분리된 상태로 컴퓨팅 시스템(1000)에 포함될 수도 있고, 메인 프로세서(1100)와 동일한 패키지 내에 구현될 수도 있다. 또한, 스토리지 시스템(1300a, 1300b)은 SSD(solid state device) 혹은 메모리 카드(memory card)와 같은 형태를 가짐으로써, 후술할 연결 인터페이스(1480)와 같은 인터페이스를 통해 시스템(1000)의 다른 구성 요소들과 탈부착 가능하도록 결합될 수도 있다. 이와 같은 스토리지 시스템(1300a, 1300b)은 UFS(universal flash storage), eMMC(embedded multi-media card) 혹은 NVMe(non-volatile memory express)와 같은 표준 규약이 적용되는 장치일 수 있으나, 반드시 이에 한정되는 건 아니다. 도 1의 스토리지 시스템(200)은 도 13의 스토리지 시스템(1300a, 1300b) 중 적어도 하나에 포함될 수 있다.
촬영 장치(1410)는 정지 영상 또는 동영상을 촬영할 수 있으며, 카메라(camera), 캠코더(camcorder) 및/또는 웹캠(webcam) 등일 수 있다.
사용자 입력 장치(1420)는 시스템(1000)의 사용자로부터 입력된 다양한 유형의 데이터를 수신할 수 있으며, 터치 패드(touch pad), 키패드(keyboard), 키보드(keyboard), 마우스(mouse) 및/또는 마이크(microphone) 등일 수 있다.
센서(1430)는 컴퓨팅 시스템(1000)의 외부로부터 획득될 수 있는 다양한 유형의 물리량을 감지하고, 감지된 물리량을 전기 신호로 변환할 수 있다. 이와 같은 센서(1430)는 온도 센서, 압력 센서, 조도 센서, 위치 센서, 가속도 센서, 바이오 센서(biosensor) 및/또는 자이로스코프(gyroscope) 등일 수 있다.
통신 장치(1440)는 다양한 통신 규약에 따라 컴퓨팅 시스템(1000) 외부의 다른 장치들과의 사이에서 신호의 송신 및 수신을 수행할 수 있다. 이와 같은 통신 장치(1440)는 안테나, 트랜시버(transceiver) 및/또는 모뎀(MODEM) 등을 포함하여 구현될 수 있다.
디스플레이(1450) 및 스피커(1460)는 시스템(1000)의 사용자에게 각각 시각적 정보와 청각적 정보를 출력하는 출력 장치로 기능할 수 있다.
전력 공급 장치(1470)는 컴퓨팅 시스템(1000)에 내장된 배터리(도시 안함) 및/또는외부 전원으로부터 공급되는 전력을 적절히 변환하여 컴퓨팅 시스템(1000)의 각 구성 요소들에게 공급할 수 있다.
연결 인터페이스(1480)는 컴퓨팅 시스템(1000)과, 컴퓨팅 시스템(1000)에 연결되어 시스템(1000과 데이터를 주고받을 수 있는 외부 장치 사이의 연결을 제공할 수 있다. 연결 인터페이스(1480)는 ATA(Advanced Technology Attachment), SATA(Serial ATA), e-SATA(external SATA), SCSI(Small Computer Small Interface), SAS(Serial Attached SCSI), PCI(Peripheral Component Interconnection), PCIe(PCI express), NVMe(NVM express), IEEE 1394, USB(universal serial bus), SD(secure digital) 카드, MMC(multi-media card), eMMC(embedded multi-media card), UFS(Universal Flash Storage), eUFS(embedded Universal Flash Storage), CF(compact flash) 카드 인터페이스 등과 같은 다양한 인터페이스 방식으로 구현될 수 있다.
도 14는 본 발명의 예시적인 실시예에 따른 컴퓨팅 시스템을 나타내는 블록도이다.
컴퓨팅 시스템(2000)은 호스트(2100) 및 스토리지 시스템(2200)를 포함할 수 있다. 또한, 스토리지 시스템(2200)는 스토리지 컨트롤러(2210) 및 비휘발성 메모리 (NVM, 2220)를 포함할 수 있다. 또한, 본 발명의 예시적인 실시예에 따라, 호스트(2100)는 호스트 컨트롤러(2110) 및 호스트 메모리(2120)를 포함할 수 있다. 호스트 메모리(2120)는 스토리지 시스템(2200)로 전송될 데이터, 혹은 스토리지 시스템(2200)으로부터 전송된 데이터를 임시로 저장하기 위한 버퍼 메모리로서 기능할 수 있다. 호스트(2100)는, 도 1의 호스트(100)의 일 예시일 수 있다.
스토리지 시스템(2200)는 호스트(2100)로부터의 요청에 따라 데이터를 저장하기 위한 저장 매체들을 포함할 수 있다. 일 예로서, 스토리지 시스템(2200)는 SSD(Solid State Drive), 임베디드(embedded) 메모리 및 착탈 가능한 외장(external) 메모리 중 적어도 하나를 포함할 수 있다. 스토리지 시스템(2200)이 SSD인 경우, 스토리지 시스템(2200)은 NVMe(non-volatile memory express) 표준을 따르는 장치일 수 있다. 스토리지 시스템(2200)이 임베디드 메모리 혹은 외장(external) 메모리인 경우, 스토리지 시스템(2200)은 UFS(universal flash storage) 혹은 eMMC(embedded multi-media card) 표준을 따르는 장치일 수 있다. 호스트(2100)와 스토리지 시스템(2200)은 각각 채용된 표준 프로토콜에 따른 패킷을 생성하고 이를 전송할 수 있다.
스토리지 시스템(2200)의 비휘발성 메모리(2220)가 플래시 메모리를 포함할 때, 상기 플래시 메모리는 2D NAND 메모리 어레이나 3D(또는 수직형, Vertical) NAND(VNAND) 메모리 어레이를 포함할 수 있다. 다른 예로서, 스토리지 시스템(2200)은 다른 다양한 종류의 비휘발성 메모리들을 포함할 수도 있다. 예를 들어, 스토리지 시스템(2200)은 MRAM(Magnetic RAM), 스핀전달토크 MRAM(Spin-Transfer Torgue MRAM), Conductive bridging RAM(CBRAM), FeRAM(Ferroelectric RAM), PRAM(Phase RAM), 저항 메모리(Resistive RAM) 및 다른 다양한 종류의 메모리가 적용될 수 있다.
일 실시예에 따라, 호스트 컨트롤러(2110)와 호스트 메모리(2120)는 별도의 반도체 칩으로 구현될 수 있다. 또는, 일부 실시예들에서, 호스트 컨트롤러(2110)와 호스트 메모리(2120)는 동일한 반도체 칩에 집적될 수 있다. 일 예로서, 호스트 컨트롤러(2110)는 어플리케이션 프로세서(Application Processor)에 구비되는 다수의 모듈들 중 어느 하나일 수 있으며, 상기 어플리케이션 프로세서는 시스템 온 칩(System on Chip, SoC)으로 구현될 수 있다. 또한, 호스트 메모리(2120)는 상기 어플리케이션 프로세서 내에 구비되는 임베디드 메모리이거나, 또는 상기 어플리케이션 프로세서의 외부에 배치되는 비휘발성 메모리 또는 메모리 모듈일 수 있다.
호스트 컨트롤러(2110)는 호스트 메모리(2120)의 데이터(예컨대, 기록 데이터)를 비휘발성 메모리(2220)에 저장하거나, 비휘발성 메모리(220)의 데이터(예컨대, 독출 데이터)를 호스트 메모리(2120)에 저장하는 동작을 관리할 수 있다.
스토리지 컨트롤러(2210)는 호스트 인터페이스(2211), 메모리 인터페이스(2212) 및 CPU(central processing unit, 2213)를 포함할 수 있다. 또한, 스토리지 컨트롤러(2210)는 플래시 변환 레이어(Flash Translation Layer(FTL), 2214), 패킷 매니저(2215), 버퍼 메모리(2216), ECC(error correction code, 2217) 엔진 및 AES(advanced encryption standard, 2218) 엔진을 더 포함할 수 있다. 스토리지 컨트롤러(2210)는 플래시 변환 레이어(FTL, 2214)가 로딩되는 워킹 메모리(미도시)를 더 포함할 수 있으며, CPU(2211)가 플래시 변환 레이어를 실행하는 것에 의해 비휘발성 메모리에 대한 데이터 기록 및 독출 동작이 제어될 수 있다.
호스트 인터페이스(2211)는 호스트(2100)와 패킷(packet)을 송수신할 수 있다. 호스트(2100)로부터 호스트 인터페이스(2211)로 전송되는 패킷은 커맨드(command) 혹은 비휘발성 메모리(2220)에 기록될 데이터 등을 포함할 수 있으며, 호스트 인터페이스(2211)로부터 호스트(2100)로 전송되는 패킷은 커맨드에 대한 응답(response) 혹은 비휘발성 메모리(2220)로부터 독출된 데이터 등을 포함할 수 있다. 메모리 인터페이스(2212)는 비휘발성 메모리(2220)에 기록될 데이터를 비휘발성 메모리(2220)로 송신하거나, 비휘발성 메모리(2220)로부터 독출된 데이터를 수신할 수 있다. 이러한 메모리 인터페이스(2212)는 토글(Toggle) 혹은 온파이(ONFI)와 같은 표준 규약을 준수하도록 구현될 수 있다.
플래시 변환 계층(2214)은 어드레스 매핑(address mapping), 웨어-레벨링(wear-leveling), 가비지 콜렉션(garbage collection)과 같은 여러 기능을 수행할 수 있다. 어드레스 매핑 동작은 호스트로부터 수신한 논리 어드레스(logical address)를, 비휘발성 메모리(2220) 내에 데이터를 실제로 저장하는 데 사용되는 물리 어드레스(physical address)로 바꾸는 동작이다. 웨어-레벨링은 비휘발성 메모리(2220) 내의 블록(block)들이 균일하게 사용되도록 하여 특정 블록의 과도한 열화를 방지하기 위한 기술로, 예시적으로 물리 블록(physical block)들의 소거 카운트들을 밸런싱하는 펌웨어 기술을 통해 구현될 수 있다. 가비지 콜렉션은, 블록의 유효 데이터를 새 블록에 복사한 후 기존 블록을 소거(erase)하는 방식을 통해 비휘발성 메모리(2220) 내에서 사용 가능한 용량을 확보하기 위한 기술이다.
패킷 매니저(2215)는 호스트(2100)와 협의된 인터페이스의 프로토콜에 따른 패킷(Packet)을 생성하거나, 호스트(2100)로부터 수신된 패킷(Packet)으로부터 각종 정보를 파싱할 수 있다. 또한, 버퍼 메모리(2216)는 비휘발성 메모리(2220)에 기록될 데이터 혹은 비휘발성 메모리(2220)로부터 독출될 데이터를 임시로 저장할 수 있다. 버퍼 메모리(2216)는 스토리지 컨트롤러(2210) 내에 구비되는 구성일 수 있으나, 스토리지 컨트롤러(2210)의 외부에 배치되어도 무방하다.
ECC 엔진(2217)은 비휘발성 메모리(2220)로부터 독출되는 독출 데이터에 대한 오류 검출 및 정정 기능을 수행할 수 있다. 보다 구체적으로, ECC 엔진(2217)은 비휘발성 메모리(2220)에 기입될 기입 데이터에 대하여 패리티 비트(parity bit)들을 생성할 수 있으며, 이와 같이 생성된 패리티 비트들은 기입 데이터와 함께 비휘발성 메모리(2220) 내에 저장될 수 있다. 비휘발성 메모리(2220)로부터의 데이터 독출 시, ECC 엔진(2217)은 독출 데이터와 함께 비휘발성 메모리(2220)로부터 독출되는 패리티 비트들을 이용하여 독출 데이터의 에러를 정정하고, 에러가 정정된 독출 데이터를 출력할 수 있다.
AES 엔진(2218)은, 스토리지 컨트롤러(2210)로 입력되는 데이터에 대한 암호화(encryption) 동작과 복호화(decryption) 동작 중 적어도 하나를, 대칭 키 알고리즘(symmetric-key algorithm)를 이용하여 수행할 수 있다.
도 15는 본 발명의 일 실시예에 따른 UFS 시스템에 대해 설명하기 위한 도면이다. UFS 시스템(3000)은 JEDEC(Joint Electron Device Engineering Council)에서 발표하는 UFS 표준(standard)을 따르는 시스템으로서, UFS 호스트(3100), UFS 장치(3200) 및 UFS 인터페이스(3300)를 포함할 수 있다. 전술한 도 1의 컴퓨팅 시스템(10)에 대한 설명은, 도 15에 대한 이하의 설명과 상충되지 않는 범위 내에서 도 15의 UFS 시스템(3000)에도 적용될 수 있다. 즉, 도 15의 UFS 호스트(3100)는 도 1의 호스트(100)의 적어도 일부 구성을 포함할 수 있고, 도 15의 UFS 장치(3200)는 도 1의 스토리지 시스템(200)의 적어도 일부 구성을 포함할 수 있다.
도 15를 참조하면, UFS 호스트(3100)와 UFS 장치(3200)는 UFS 인터페이스(3300)를 통해 상호 연결될 수 있다. 도 1의 메인 프로세서(1100)가 애플리케이션 프로세서일 경우, UFS 호스트(2100)는 해당 애플리케이션 프로세서의 일부로서 구현될 수 있다. UFS 호스트 컨트롤러(2110) 및 호스트 메모리(2140)는 도 1의 메인 프로세서(1100)의 컨트롤러(1120) 및 메모리(1200a, 1200b)에 각각 대응될 수 있다. UFS 장치(2200)는 도 13의 스토리지 시스템(1300a, 1300b)에 대응될 수 있으며, UFS 장치 컨트롤러(2210) 및 비휘발성 메모리(2220)는 도 1의 스토리지 컨트롤러(1310a, 1310b) 및 비휘발성 메모리(1320a, 1320b)에 각각 대응될 수 있다.
UFS 호스트(3100)는 UFS 호스트 컨트롤러(3110), 애플리케이션(3120), UFS 드라이버(3130), 호스트 메모리(3140) 및 UIC(UFS interconnect) 레이어(3150)를 포함할 수 있다. UFS 장치(3200)는 UFS 장치 컨트롤러(3210), 비휘발성 메모리(3220), 스토리지 인터페이스(3230), 장치 메모리(3240), UIC 레이어(3250) 및 레귤레이터(3260)를 포함할 수 있다. 비휘발성 메모리(3220)는 복수의 메모리 유닛(3221)으로 구성될 수 있으며, 이와 같은 메모리 유닛(3221)은 2D 구조 혹은 3D 구조의 V-NAND 플래시 메모리를 포함할 수 있으나, PRAM 및/또는 RRAM 등의 다른 종류의 비휘발성 메모리를 포함할 수도 있다. UFS 장치 컨트롤러(3210)와 비휘발성 메모리(3220)는 스토리지 인터페이스(3230)를 통해 서로 연결될 수 있다. 스토리지 인터페이스(3230)는 토글(Toggle) 혹은 온파이(ONFI)와 같은 표준 규약을 준수하도록 구현될 수 있다.
애플리케이션(3120)은 UFS 장치(3200)의 기능을 이용하기 위해 UFS 장치(3200)와의 통신을 원하는 프로그램을 의미할 수 있다. 애플리케이션(3120)은 UFS 장치(3200)에 대한 입출력을 위해 입출력 요청(input-output request, IOR)을 UFS 드라이버(3130)로 전송할 수 있다. 입출력 요청(IOR)은 데이터의 독출(read) 요청, 저장(write) 요청 및/또는 소거(discard) 요청 등을 의미할 수 있으나, 반드시 이에 한정되는 것은 아니다.
UFS 드라이버(3130)는 UFS-HCI(host controller interface)를 통해 UFS 호스트 컨트롤러(3110)를 관리할 수 있다. UFS 드라이버(3130)는 애플리케이션(3120)에 의해 생성된 입출력 요청을 UFS 표준에 의해 정의된 UFS 명령으로 변환하고, 변환된 UFS 명령을 UFS 호스트 컨트롤러(3110)로 전달할 수 있다. 하나의 입출력 요청은 복수의 UFS 명령으로 변환될 수 있다. UFS 명령은 기본적으로 SCSI 표준에 의해 정의된 명령일 수 있지만, UFS 표준 전용 명령일 수도 있다.
UFS 호스트 컨트롤러(3110)는 UFS 드라이버(3130)에 의해 변환된 UFS 명령을 UIC 레이어(3150)와 UFS 인터페이스(3300)를 통해 UFS 장치(3200)의 UIC 레이어(3250)로 전송할 수 있다. 이 과정에서, UFS 호스트 컨트롤러(3110)의 UFS 호스트 레지스터(3111)는 명령 큐(command queue, CQ)로서의 역할을 수행할 수 있다.
UFS 호스트(3100) 측의 UIC 레이어(3150)는 MIPI M-PHY(3151)와 MIPI UniPro(3152)를 포함할 수 있으며, UFS 장치(3200) 측의 UIC 레이어(3250) 또한 MIPI M-PHY(3251)와 MIPI UniPro(3252)을 포함할 수 있다.
UFS 인터페이스(3300)는 기준 클락(REF_CLK)을 전송하는 라인, UFS 장치(3200)에 대한 하드웨어 리셋 신호(RESET_n)를 전송하는 라인, 차동 입력 신호 쌍(DIN_t와 DIN_c)을 전송하는 한 쌍의 라인 및 차동 출력 신호 쌍(DOUT_t와 DOUT_c)을 전송하는 한 쌍의 라인을 포함할 수 있다.
UFS 호스트(3100)로부터 UFS 장치(3200)로 제공되는 기준 클락의 주파수 값은 19.2MHz, 26MHz, 38.4MHz 및 52MHz의 네 개의 값 중 하나일 수 있으나, 반드시 이에 한정되지는 않는다. UFS 호스트(3100)는 동작 중에도, 즉 UFS 호스트(3100)와 UFS 장치(3200) 사이에서 데이터 송수신이 수행되는 중에도 기준 클락의 주파수 값을 변경할 수 있다. UFS 장치(3200)는 위상 동기 루프(phase-locked loop, PLL) 등을 이용하여, UFS 호스트(3100)로부터 제공받은 기준 클락으로부터 다양한 주파수의 클락을 생성할 수 있다. 또한, UFS 호스트(3100)는 기준 클락의 주파수 값을 통해 UFS 호스트(3100)와 UFS 장치(3200) 간의 데이터 레이트(data rate)의 값을 설정할 수도 있다. 즉, 상기 데이터 레이트의 값은 기준 클락의 주파수 값에 의존하여 결정될 수 있다.
UFS 인터페이스(3300)는 복수의 레인들(multiple lanes)을 지원할 수 있으며, 각 레인은 차동(differential) 쌍으로 구현될 수 있다. 예컨대, UFS 인터페이스(3300)는 하나 이상의 수신 레인(receive lane)과 하나 이상의 송신 레인(transmit lane)을 포함할 수 있다. 도 15에서, 차동 입력 신호 쌍(DIN_T와 DIN_C)을 전송하는 한 쌍의 라인은 수신 레인을, 차동 출력 신호 쌍(DOUT_T와 DOUT_C)을 전송하는 한 쌍의 라인은 송신 레인을 각각 구성할 수 있다. 도 15에서는 하나의 송신 레인과 하나의 수신 레인을 도시하였지만, 송신 레인과 수신 레인의 수는 변경될 수 있다.
수신 레인 및 송신 레인은 직렬 통신(serial communication) 방식으로 데이터를 전송할 수 있으며, 수신 레인과 송신 레인이 분리된 구조에 의해 UFS 호스트(3100)와 UFS 장치(3200) 간의 풀 듀플렉스(full-duplex) 방식의 통신이 가능하다. 즉, UFS 장치(3200)는 수신 레인을 통해 UFS 호스트(3100)로부터 데이터를 수신받는 동안에도, 송신 레인을 통해 UFS 호스트(3100)로 데이터를 송신할 수 있다. 또한, UFS 호스트(3100)로부터 UFS 장치(3200)로의 명령과 같은 제어 데이터와, UFS 호스트(3100)가 UFS 장치(3200)의 비휘발성 메모리(3220)에 저장하고자 하거나 비휘발성 메모리(3220)로부터 독출하고자 하는 사용자 데이터는 동일한 레인을 통해 전송될 수 있다. 이에 따라, UFS 호스트(3100)와 UFS 장치(3200) 간에는 한 쌍의 수신 레인과 한 쌍의 송신 레인 외에 데이터 전송을 위한 별도의 레인이 더 구비될 필요가 없다.
UFS 장치(3200)의 UFS 장치 컨트롤러(3210)는 UFS 장치(3200)의 동작을 전반적으로 제어할 수 있다. UFS 장치 컨트롤러(3210)는 논리적인 데이터 저장 단위인 LU(logical unit)(3211)를 통해 비휘발성 메모리(3220)를 관리할 수 있다. LU(3211)의 개수는 8개일 수 있으나, 이에 한정되는 것은 아니다. 일부 실시 예들에서, 도 8 및 도 11을 통해 전술된 데이터 로그 및 노드 로그는 적어도 하나의 LU(3211)를 포함할 수 있다. 예를 들어, 제1 LU는 데이터 로그에 포함될 수 있고, 제2 LU는 노드 로그에 포함될 수 있다. LU(3211)는 저장 영역으로 지칭될 수 있다. UFS 장치 컨트롤러(3210)는 플래시 변환 계층(flash translation layer, FTL)을 포함할 수 있으며, FTL의 어드레스 매핑(address mapping) 정보를 이용하여 UFS 호스트(3100)로부터 전달된 논리적인 데이터 주소, 예컨대 LBA(logical block address)를 물리적인 데이터 주소로, 예컨대 PBA(physical block address)로 변환할 수 있다. UFS 시스템(3000)에서 사용자 데이터(user data)의 저장을 위한 논리 블록(logical block)은 소정 범위의 크기를 가질 수 있다. 예컨대, 논리 블록의 최소 크기는 4Kbyte로 설정될 수 있다.
UFS 호스트(3100)로부터의 명령이 UIC 레이어(3250)를 통해 UFS 장치(3200)로 입력되면, UFS 장치 컨트롤러(3210)는 입력된 명령에 따른 동작을 수행하고, 상기 동작이 완료되면 완료 응답을 UFS 호스트(3100)로 전송할 수 있다.
일례로서, UFS 호스트(3100)가 UFS 장치(3200)에 사용자 데이터를 저장하고자 할 경우, UFS 호스트(3100)는 데이터 저장 명령을 UFS 장치(3200)로 전송할 수 있다. 사용자 데이터를 전송받을 준비가 되었다(ready-to-transfer)는 응답을 UFS 장치(3200)로부터 수신하면, UFS 호스트(3100)는 사용자 데이터를 UFS 장치(3200)로 전송할 수 있다. UFS 장치 컨트롤러(3210)는 전송받은 사용자 데이터를 장치 메모리(3240) 내에 임시로 저장하고, FTL의 어드레스 매핑 정보에 기초하여 장치 메모리(3240)에 임시로 저장된 사용자 데이터를 비휘발성 메모리(3220)의 선택된 위치에 저장할 수 있다.
또 다른 예로서, UFS 호스트(3100)가 UFS 장치(3200)에 저장된 사용자 데이터를 독출하고자 할 경우, UFS 호스트(3100)는 데이터 독출 명령을 UFS 장치(3200)로 전송할 수 있다. 명령을 수신한 UFS 장치 컨트롤러(3210)는 상기 데이터 독출 명령에 기초하여 비휘발성 메모리(3220)로부터 사용자 데이터를 독출하고, 독출된 사용자 데이터를 장치 메모리(3240) 내에 임시로 저장할 수 있다. 이러한 독출 과정에서, UFS 장치 컨트롤러(3210)는 내장된 ECC(error correction code) 엔진(미도시)을 이용하여, 독출된 사용자 데이터의 에러를 검출하고 정정할 수 있다. 보다 구체적으로, ECC 엔진은 비휘발성 메모리(3220)에 기입될 기입 데이터에 대하여 패리티 비트(parity bit)들을 생성할 수 있으며, 이와 같이 생성된 패리티 비트들은 기입 데이터와 함께 비휘발성 메모리(3220) 내에 저장될 수 있다. 비휘발성 메모리(3220)로부터의 데이터 독출 시, ECC 엔진은 독출 데이터와 함께 비휘발성 메모리(3220)로부터 독출되는 패리티 비트들을 이용하여 독출 데이터의 에러를 정정하고, 에러가 정정된 독출 데이터를 출력할 수 있다.
그리고, UFS 장치 컨트롤러(3210)는 장치 메모리(3240) 내에 임시로 저장된 사용자 데이터를 UFS 호스트(3100)로 전송할 수 있다. 아울러, UFS 장치 컨트롤러(3210)는 AES(advanced encryption standard) 엔진(미도시)을 더 포함할 수 있다. AES 엔진은, UFS 장치 컨트롤러(3210)로 입력되는 데이터에 대한 암호화(encryption) 동작과 복호화(decryption) 동작 중 적어도 하나를, 대칭 키 알고리즘(symmetric-key algorithm)을 이용하여 수행할 수 있다.
UFS 호스트(3100)는 명령 큐로 기능할 수 있는 UFS 호스트 레지스터(3111)에 UFS 장치(3200)로 송신될 명령들을 순서에 따라 저장하고, 상기 순서대로 UFS 장치(3200)에 명령을 송신할 수 있다. 이 때, UFS 호스트(3100)는 이전에 송신된 명령이 아직 UFS 장치(2200)에 의해 처리 중인 경우에도, 즉 이전에 송신된 명령이 UFS 장치(3200)에 의해 처리가 완료되었다는 통지를 받기 전에도 명령 큐에 대기 중인 다음 명령을 UFS 장치(3200)로 송신할 수 있으며, 이에 따라 UFS 장치(2200) 역시 이전에 송신된 명령을 처리하는 중에도 다음 명령을 UFS 호스트(3100)로부터 수신할 수 있다. 이와 같은 명령 큐에 저장될 수 있는 명령의 최대 개수(queue depth)는 예컨대 32개일 수 있다. 또한, 명령 큐는 헤드 포인터(head point)와 테일 포인터(tail pointer)를 통해 큐에 저장된 명령 열의 시작과 끝을 각각 나타내는 원형 큐(circular queue) 타입으로 구현될 수 있다.
복수의 메모리 유닛(3221) 각각은 메모리 셀 어레이(미도시)와 상기 메모리 셀 어레이의 작동을 제어하는 제어 회로(미도시)를 포함할 수 있다. 상기 메모리 셀 어레이는 2차원 메모리 셀 어레이 또는 3차원 메모리 셀 어레이를 포함할 수 있다. 메모리 셀 어레이는 복수의 메모리 셀을 포함하며, 각각의 메모리 셀은 1비트의 정보를 저장하는 셀(single level cell, SLC)일 수도 있지만, MLC(multi level cell), TLC(triple level cell), QLC(quadruple level cell)와 같이 2비트 이상의 정보를 저장하는 셀일 수도 있다. 3차원 메모리 셀 어레이는 적어도 하나의 메모리 셀이 다른 메모리 셀의 위에 위치하도록 수직으로 배향되는(vertically oriented) 수직 NAND 스트링을 포함할 수 있다.
UFS 장치(3200)에는 전원 전압으로서 VCC, VCCQ, VCCQ2 등이 입력될 수 있다. VCC는 UFS 장치(3200)를 위한 주 전원 전압으로서, 2.4~3.6V의 값을 가질 수 있다. VCCQ는 낮은 범위의 전압을 공급하기 위한 전원 전압으로서, 주로 UFS 장치 컨트롤러(3210)를 위한 것이며. 1.14~1.26V의 값을 가질 수 있다. VCCQ2는 VCC보다는 낮지만 VCCQ보다는 높은 범위의 전압을 공급하기 위한 전원 전압으로서, 주로 MIPI M-PHY(3251)와 같은 입출력 인터페이스를 위한 것이며, 1.7~1.95V의 값을 가질 수 있다. 상기 전원 전압들은 레귤레이터(3260)를 거쳐 UFS 장치(3200)의 각 구성 요소들을 위해 공급될 수 있다. 레귤레이터(3260)는 전술한 전원 전압들 중 서로 다른 것에 각각 연결되는 단위 레귤레이터의 집합으로 구현될 수 있다.
이상에서와 같이 도면과 명세서에서 예시적인 실시 예들이 개시되었다. 본 명세서에서 특정한 용어를 사용하여 실시 예들을 설명되었으나, 이는 단지 본 개시의 기술적 사상을 설명하기 위한 목적에서 사용된 것이지 의미 한정이나 특허청구범위에 기재된 본 개시의 범위를 제한하기 위하여 사용된 것은 아니다. 그러므로 본 기술분야의 통상의 지식을 가진 자라면 이로부터 다양한 변형 및 균등한 타 실시 예가 가능하다는 점을 이해할 것이다. 따라서, 본 개시의 진정한 기술적 보호범위는 첨부된 특허청구범위의 기술적 사상에 의해 정해져야 할 것이다.

Claims (20)

  1. 데이터를 저장하는 스토리지 시스템; 및
    메모리에 로드된 미리 정해진 크기의 데이터 블록을 압축하고, 압축된 데이터 블록, 상기 데이터 블록을 참조하는 노드 블록의 식별자 및 상기 노드 블록이 참조하는 적어도 하나의 데이터 블록 중 상기 데이터 블록의 인덱스를 나타내는 오프셋을 병합함으로써 상기 미리 정해진 크기의 병합 블록을 생성하고, 상기 병합 블록을 상기 스토리지 시스템에 제공하는 호스트를 포함하고,
    상기 병합 블록이 상기 스토리지 시스템에 전달되는 시구간과, 상기 노드 블록이 상기 스토리지 시스템이 전달되는 시구간은 불연속적인 것을 특징으로 하는 컴퓨팅 시스템.
  2. 제1항에 있어서,
    상기 호스트는,
    상기 병합 블록이 상기 스토리지 시스템에 전송된 이후, 상기 데이터 블록의 어드레스를 가리키는 노드 블록을 상기 스토리지 시스템에 전송하는 것을 특징으로 하는 컴퓨팅 시스템.
  3. 제2항에 있어서,
    상기 호스트는,
    상기 노드 블록을 상기 스토리지 시스템과 상기 호스트 간의 인터페이스가 유휴 상태인 경우 상기 스토리지 시스템에 전송하는 것을 특징으로 하는 컴퓨팅 시스템.
  4. 삭제
  5. 제1항에 있어서,
    상기 호스트는,
    상기 데이터 블록의 제1 부분을 압축하고, 압축으로 인해 감소된 크기와 기준 크기의 비교 결과를 기초로 상기 데이터 블록의 상기 제1 부분과 상이한 부분을 압축하는 것을 특징으로 하는 컴퓨팅 시스템.
  6. 제5항에 있어서,
    상기 기준 크기는,
    상기 데이터 블록에 대응하는 상기 식별자의 크기, 상기 데이터 블록의 상기 오프셋의 크기 및 병합된 블록임을 지시하는 비트의 크기의 합인 것을 특징으로 하는 컴퓨팅 시스템.
  7. 제1항에 있어서,
    상기 호스트는,
    서든 파워 오프 리커버리 동작 시, 상기 스토리지 시스템에 저장된 병합 블록을 리드하고, 리드된 병합 블록으로부터 상기 데이터 블록, 상기 데이터 블록의 상기 식별자 및 상기 데이터 블록의 상기 오프셋을 획득하는 것을 특징으로 하는 컴퓨팅 시스템.
  8. 제7항에 있어서,
    상기 호스트는,
    상기 상기 병합 블록으로부터 획득된 상기 식별자 및 상기 오프셋을 기초로 상기 데이터 블록에 대응하는 노드 블록을 업데이트하는 것을 특징으로 하는 컴퓨팅 시스템.
  9. 제7항에 있어서,
    상기 병합 블록은,
    병합된 블록임을 지시하는 비트를 포함하고,
    상기 호스트는,
    상기 스토리지 시스템의 데이터 로그에서 복수의 블록들을 리드하고, 상기 복수의 블록들 중 상기 비트를 기초로 상기 병합 블록을 탐색하는 것을 특징으로 하는 컴퓨팅 시스템.
  10. 스토리지 시스템에 데이터를 라이트하는 호스트 장치로서,
    상기 스토리지 시스템에 라이트될 데이터 또는 상기 스토리지 시스템으로부터 리드된 데이터를 저장하는 메모리;
    상기 메모리에 로드된 미리 정해진 크기의 데이터 블록을 압축하는 압축 매니저; 및
    상기 압축 매니저로부터 상기 데이터 블록에 대응하는 압축 블록을 수신하고, 상기 압축 블록, 상기 데이터 블록을 참조하는 노드 블록의 식별자 및 상기 노드 블록이 참조하는 적어도 하나의 데이터 블록 중 상기 데이터 블록의 인덱스를 나타내는 오프셋을 병합함으로써 병합 블록을 생성하고, 상기 병합 블록을 상기 스토리지 시스템에 라이트하는 파일 시스템을 포함하고,
    상기 파일 시스템은,
    상기 병합 블록의 어드레스를 가리키는 상기 노드 블록을 생성하고, 상기 데이터 블록이 상기 스토리지 시스템에 전달되는 시구간과 불연속적인 시구간에 상기 노드 블록을 상기 스토리지 시스템에 전달하는 것을 특징으로 하는 호스트 장치.
  11. 제10항에 있어서,
    상기 데이터 블록의 크기와 상기 병합 블록의 크기는 동일한 것을 특징으로 하는 호스트 장치.
  12. 삭제
  13. 제10항에 있어서,
    상기 압축 매니저는,
    상기 데이터 블록의 제1 부분을 압축하고, 압축으로 인해 감소된 크기와 기준 크기의 비교 결과를 기초로 상기 데이터 블록의 상기 제1 부분과 상이한 부분을 압축하고,
    상기 데이터 블록이 최대로 압축되었을 때 압축으로 인해 감소된 크기와 상기 기준 크기의 비교 결과를 기초로, 상기 파일 시스템에 상기 압축 블록 또는 압축 실패 신호를 선택적으로 제공하고,
    상기 파일 시스템은,
    상기 압축 블록을 수신하면 상기 압축 블록 및 상기 압축 블록에 대한 라이트 커맨드를 상기 스토리지 시스템에 전달하고,
    상기 압축 실패 신호를 수신하면 상기 데이터 블록, 상기 데이터 블록의 어드레스를 가리키는 노드 블록 및 상기 데이터 블록과 상기 노드 블록에 대한 라이트 커맨드를 상기 스토리지 시스템에 전달하는 것을 특징으로 하는 호스트 장치.
  14. 제10항에 있어서,
    상기 파일 시스템은,
    병합된 블록임을 나타내는 비트를 추가적으로 병합함으로써 상기 병합 블록을 생성하는 것을 특징으로 하는 호스트 장치.
  15. 제14항에 있어서,
    상기 파일 시스템은,
    서든 파워 오프 리커버리 동작 시, 상기 스토리지 시스템에 저장된 병합 블록을 리드하고, 리드된 병합 블록으로부터 상기 데이터 블록 및 상기 데이터 블록의 오프셋을 가리키는 노드 블록을 생성하는 것을 특징으로 하는 호스트 장치.
  16. 제15항에 있어서,
    상기 파일 시스템은,
    상기 스토리지 시스템의 데이터 로그에서 복수의 블록들을 리드하고, 상기 복수의 블록들 중 상기 비트를 기초로 상기 병합 블록을 탐색하는 것을 특징으로 하는 호스트 장치.
  17. 복수의 저장 영역들을 포함하는 UFS 시스템; 및
    상기 복수의 저장 영역들 중 제1 저장 영역에 데이터 블록이 압축된 압축 블록, 상기 데이터 블록을 참조하는 노드 블록의 식별자 및 상기 노드 블록이 참조하는 적어도 하나의 데이터 블록 중 상기 데이터 블록의 인덱스를 나타내는 오프셋이 병합된 병합 블록을 저장하고, 상기 복수의 저장 영역들 중 제2 저장 영역에 상기 데이터 블록의 어드레스를 가리키는 노드 블록을 저장하는 UFS 호스트를 포함하고,
    상기 병합 블록이 상기 UFS 시스템에 전달되는 시구간과, 상기 노드 블록이 상기 UFS 시스템에 전달되는 시구간은 불연속적인 것을 특징으로 하는 컴퓨팅 시스템.
  18. 삭제
  19. 제17항에 있어서,
    상기 데이터 블록의 크기와 상기 병합 블록의 크기는 동일한 것을 특징으로 하는 컴퓨팅 시스템.
  20. 제17항에 있어서,
    상기 UFS 호스트는,
    병합된 블록임을 나타내는 비트를 추가적으로 병합함으로써 상기 병합 블록을 생성하고,
    서든 파워 오프 리커버리 동작 시, 상기 제1 저장 영역에 저장된 병합 블록을 리드하고, 리드된 병합 블록으로부터 상기 데이터 블록 및 상기 데이터 블록의 어드레스를 가리키는 노드 블록을 생성하는 것을 특징으로 하는 컴퓨팅 시스템.
KR1020210191117A 2021-01-13 2021-12-29 호스트 및 스토리지 시스템을 포함하는 컴퓨팅 시스템 KR102509987B1 (ko)

Priority Applications (4)

Application Number Priority Date Filing Date Title
US17/566,309 US11875036B2 (en) 2021-01-13 2021-12-30 Computing system including host and storage system and having increased write performance
TW111100889A TW202234234A (zh) 2021-01-13 2022-01-10 計算系統以及主機裝置
EP22150729.6A EP4030275A1 (en) 2021-01-13 2022-01-10 Computing system including host and storage system
CN202210020275.6A CN114764402A (zh) 2021-01-13 2022-01-10 包括主机和储存系统的计算系统

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
KR20210004937 2021-01-13
KR1020210004937 2021-01-13
KR20210078288 2021-06-16
KR1020210078288 2021-06-16

Publications (2)

Publication Number Publication Date
KR20220102560A KR20220102560A (ko) 2022-07-20
KR102509987B1 true KR102509987B1 (ko) 2023-03-15

Family

ID=82609060

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020210191117A KR102509987B1 (ko) 2021-01-13 2021-12-29 호스트 및 스토리지 시스템을 포함하는 컴퓨팅 시스템

Country Status (1)

Country Link
KR (1) KR102509987B1 (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11928054B1 (en) 2023-04-19 2024-03-12 Metisx Co., Ltd. Electronic device and computing system including same

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2008530710A (ja) 2005-02-16 2008-08-07 サンディスク コーポレイション フラッシュメモリにおける直接データファイル記憶
JP2018169773A (ja) 2017-03-29 2018-11-01 日本電気株式会社 ストレージ装置、ストレージ装置の制御方法及びプログラム

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9396103B2 (en) * 2007-06-08 2016-07-19 Sandisk Technologies Llc Method and system for storage address re-mapping for a memory device
JP5976939B2 (ja) * 2012-08-23 2016-08-24 アップル インコーポレイテッド ホスト支援型メモリブロックコンパクション
KR101979715B1 (ko) * 2012-09-28 2019-05-17 삼성전자 주식회사 컴퓨팅 시스템 및 그 데이터 관리 방법
US10613756B2 (en) * 2015-09-03 2020-04-07 Qualcomm Incorporated Hardware-accelerated storage compression
KR102611638B1 (ko) * 2016-09-27 2023-12-08 삼성전자주식회사 스토리지 장치의 동작 방법 및 스토리지 장치를 포함하는 데이터 저장 시스템
JP6443571B1 (ja) * 2018-02-02 2018-12-26 富士通株式会社 ストレージ制御装置、ストレージ制御方法及びストレージ制御プログラム

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2008530710A (ja) 2005-02-16 2008-08-07 サンディスク コーポレイション フラッシュメモリにおける直接データファイル記憶
JP2018169773A (ja) 2017-03-29 2018-11-01 日本電気株式会社 ストレージ装置、ストレージ装置の制御方法及びプログラム

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11928054B1 (en) 2023-04-19 2024-03-12 Metisx Co., Ltd. Electronic device and computing system including same

Also Published As

Publication number Publication date
KR20220102560A (ko) 2022-07-20

Similar Documents

Publication Publication Date Title
KR102580820B1 (ko) 데이터 저장 장치 및 그것의 동작 방법
WO2015023897A1 (en) Address translation for a non-volatile memory storage device
US9904472B2 (en) Memory system and method for delta writes
EP4030275A1 (en) Computing system including host and storage system
CN115480707A (zh) 数据存储的方法和装置
KR102509987B1 (ko) 호스트 및 스토리지 시스템을 포함하는 컴퓨팅 시스템
US20240037027A1 (en) Method and device for storing data
KR20220103378A (ko) 메모리 시스템에 저장된 데이터를 처리하는 장치 및 방법
US20230132327A1 (en) Storage system performing overwrite, host system controlling storage system, and operating method for storage system
US20230153006A1 (en) Data processing method and data processing device
KR20230015266A (ko) 스토리지 장치 및 스토리지 장치의 동작 방법
KR20220111444A (ko) 리프레쉬 동작을 수행하는 메모리 장치, 그 동작방법 및 메모리 시스템
CN112231240A (zh) 控制器、存储器系统及其操作方法
US20230153237A1 (en) Method and device for storing data
US20230146540A1 (en) Storage device and an operating method of a storage controller thereof
KR102435910B1 (ko) 스토리지 장치 및 그것의 동작 방법
KR102583244B1 (ko) 스토리지 장치 및 스토리지 장치의 동작 방법
TWI821965B (zh) 編碼歷程資訊的存取方法及電腦程式產品及裝置
US20230393749A1 (en) Method and device of storage data
US11294587B2 (en) Data storage device capable of maintaining continuity of logical addresses mapped to consecutive physical addresses, electronic device including the same, and method of operating the data storage device
CN117008826A (zh) 数据压缩方法和装置
EP4123456A1 (en) Storage device and operating method thereof
US20230141936A1 (en) Secure processor, operating method thereof, and storage device including same
CN115794687A (zh) 基于日志结构合并树的键值数据存储的方法和装置
KR20230067457A (ko) 스토리지 컨트롤러, 스토리지 시스템 및 그 동작방법

Legal Events

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