KR20210049619A - 분산 저장 시스템의 스토리지 노드 및 그 동작 방법 - Google Patents

분산 저장 시스템의 스토리지 노드 및 그 동작 방법 Download PDF

Info

Publication number
KR20210049619A
KR20210049619A KR1020190134130A KR20190134130A KR20210049619A KR 20210049619 A KR20210049619 A KR 20210049619A KR 1020190134130 A KR1020190134130 A KR 1020190134130A KR 20190134130 A KR20190134130 A KR 20190134130A KR 20210049619 A KR20210049619 A KR 20210049619A
Authority
KR
South Korea
Prior art keywords
data
memory
chunk
write
coding
Prior art date
Application number
KR1020190134130A
Other languages
English (en)
Inventor
고성준
정명수
Original Assignee
에스케이하이닉스 주식회사
연세대학교 산학협력단
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 에스케이하이닉스 주식회사, 연세대학교 산학협력단 filed Critical 에스케이하이닉스 주식회사
Priority to KR1020190134130A priority Critical patent/KR20210049619A/ko
Priority to US16/932,996 priority patent/US11281381B2/en
Priority to CN202010881403.7A priority patent/CN112711377B/zh
Publication of KR20210049619A publication Critical patent/KR20210049619A/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/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/067Distributed or networked storage systems, e.g. storage area networks [SAN], network attached storage [NAS]
    • 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
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/08Error detection or correction by redundancy in data representation, e.g. by using checking codes
    • G06F11/10Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
    • G06F11/1004Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's to protect a block of data words, e.g. CRC or checksum
    • 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/08Error detection or correction by redundancy in data representation, e.g. by using checking codes
    • G06F11/10Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
    • G06F11/1008Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices
    • G06F11/1044Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices with specific ECC/EDC distribution
    • 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/08Error detection or correction by redundancy in data representation, e.g. by using checking codes
    • G06F11/10Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
    • G06F11/1008Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices
    • G06F11/1064Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices in cache or content addressable memories
    • 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/08Error detection or correction by redundancy in data representation, e.g. by using checking codes
    • G06F11/10Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
    • G06F11/1076Parity data used in redundant arrays of independent storages, e.g. in RAID systems
    • G06F11/108Parity data distribution in semiconductor storages, e.g. in SSD
    • 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/16Error detection or correction of the data by redundancy in hardware
    • G06F11/1666Error detection or correction of the data by redundancy in hardware where the redundant component is memory or memory area
    • G06F11/167Error detection by comparing the memory output
    • 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
    • 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/0614Improving the reliability of 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/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/0614Improving the reliability of storage systems
    • G06F3/0619Improving the reliability of storage systems in relation to data integrity, e.g. data losses, bit errors
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0638Organizing or formatting or addressing of data
    • G06F3/064Management of blocks
    • 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/0646Horizontal data movement in storage systems, i.e. moving data in between storage devices or systems
    • G06F3/0652Erasing, e.g. deleting, data cleaning, moving of data to a wastebasket
    • 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/0653Monitoring storage devices or 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/0655Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0655Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
    • G06F3/0658Controller construction arrangements
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • 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
    • 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]

Landscapes

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

Abstract

본 기술은 전자 장치에 관한 것으로, 본 기술에 따른 메모리 장치의 동작을 제어하는 메모리 컨트롤러는, 호스트로부터 상기 메모리 장치에 데이터를 저장할 것을 요청하는 쓰기 요청 및 쓰기 요청에 대응하는 쓰기 데이터를 수신하고, 쓰기 요청에 포함된 청크 타입 정보를 기초로 상기 쓰기 데이터가 저장될 메모리 블록의 물리 어드레스를 결정하는 데이터 제어부, 메모리 블록에 쓰기 데이터를 저장할 것을 지시하는 프로그램 커맨드, 물리 어드레스 및 쓰기 데이터를 메모리 장치에 제공하는 메모리 제어부를 포함하되, 청크 타입 정보는, 쓰기 데이터가 호스트가 원본 데이터에 대해서 수행한 소거 코딩 동작에 의해 생성된 데이터 청크들 및 코딩 청크들 중 어떤 청크인지를 나타내는 정보일 수 있다.

Description

분산 저장 시스템의 스토리지 노드 및 그 동작 방법 {STORAGE NODE OF DISTRIBUTED STORAGE SYSTEM AND OPERATING METHOD THEREOF}
본 발명은 전자 장치에 관한 것으로, 보다 구체적으로 본 발명은 분산 저장 시스템의 스토리지 노드 및 그 동작 방법에 관한 것이다.
기술의 발전에 따라 저장할 데이터의 양이 급격하게 증가하는 소위 “급격한 데이터 폭발” Data Explosion) 현상이 발생하고 있다. 이로 인해 대용량의 데이터를 저장할 수 있는 병렬 파일 시스템 및 분산 스토리지 시스템이 데이터 센터와 고성능 컴퓨팅에 널리 적용되고 있고, 대용량 스케일의 스토리지 시스템의 중요성이 전체 시스템에 차지하는 비율이 점점 커지고 있다.
분산 스토리지 시스템은 예상치 못한 스토리지 결함 및 고장에 대응하여 올바른 방법으로 데이터를 복구하기 위해서 같은 데이터를 복제하여 보관하는 방식으로 데이터의 신뢰성을 보장한다. 분산 스토리지 시스템의 예로, 파나사스 (Panasas) PVFS, IBM의 GPFS, 러스터 (Lusutre) 및 세프(Ceph) 등이 사용되고 있다.
스토리지 장치는 분산 스토리지 시스템의 스토리지 노드의 저장 장치일 수 있다. 스토리지 장치는 데이터가 저장되는 메모리 장치와 메모리 장치를 제어하는 메모리 컨트롤러를 포함할 수 있다. 메모리 장치는 휘발성 메모리 장치 (Volatile Memory)와 비휘발성 메모리 장치 (Non Volatile Memory)로 구분된다.
본 발명의 실시 예는, 보다 효율적으로 데이터를 관리하는 분산 저장 시스템의 스토리지 노드 및 그 동작 방법을 제공한다.
본 발명의 실시 예에 따른 메모리 장치의 동작을 제어하는 메모리 컨트롤러는, 호스트로부터 상기 메모리 장치에 데이터를 저장할 것을 요청하는 쓰기 요청 및 상기 쓰기 요청에 대응하는 쓰기 데이터를 수신하고, 상기 쓰기 요청에 포함된 청크 타입 정보를 기초로 상기 쓰기 데이터가 저장될 메모리 블록의 물리 어드레스를 결정하는 데이터 제어부, 상기 메모리 블록에 상기 쓰기 데이터를 저장할 것을 지시하는 프로그램 커맨드, 상기 물리 어드레스 및 상기 쓰기 데이터를 상기 메모리 장치에 제공하는 메모리 제어부를 포함하되, 상기 청크 타입 정보는, 상기 쓰기 데이터가 상기 호스트가 원본 데이터에 대해서 수행한 소거 코딩 동작에 의해 생성된 데이터 청크들 및 코딩 청크들 중 어떤 청크인지를 나타내는 정보인 것을 특징으로 한다.
본 발명의 실시 예에 따른 메모리 장치의 동작을 제어하는 메모리 컨트롤러는, 호스트로부터 상기 메모리 장치에 데이터를 저장할 것을 요청하는 쓰기 요청 및 상기 쓰기 요청에 대응하는 쓰기 데이터를 수신하는 데이터 제어부, 상기 쓰기 요청에 포함된 청크 타입 정보를 기초로 상기 쓰기 데이터에 대한 에러 정정 디코딩 동작을 수행하는 에러 정정부 및 상기 쓰기 데이터를 저장할 것을 지시하는 프로그램 커맨드 및 상기 에러 정정 디코딩 동작이 수행된 프로그램 데이터를 상기 메모리 장치에 제공하는 메모리 제어부;를 포함하되, 상기 청크 타입 정보는, 상기 쓰기 데이터가 상기 호스트가 원본 데이터에 대해서 수행한 소거 코딩 동작에 의해 생성된 데이터 청크들 및 코딩 청크들 중 어떤 청크인지를 나타내는 정보인 것을 특징으로 한다.
본 발명의 실시 예에 따른 호스트로부터 쓰기 데이터 및 쓰기 요청을 입력 받고, 메모리 장치의 동작을 제어하는 메모리 컨트롤러의 동작 방법은, 쓰기 요청에 포함된 청크 타입 정보를 기초로, 쓰기 데이터가 데이터 청크인지 또는 코딩 청크인지 여부를 판단하는 단계, 쓰기 데이터가 데이터 청크 또는 코딩 청크인지 여부에 따라, 쓰기 데이터에 대하여 제1 에러 정정 또는 제2 에러 정정 중 어느 하나를 수행하는 단계 및 쓰기 데이터가 데이터 청크 또는 코딩 청크인지 여부에 따라, 메모리 장치에 포함되는 제1 메모리 블록 또는 제2 메모리 블록 중 어느 하나에 쓰기 데이터를 저장하도록 메모리 장치를 제어하는 단계를 포함한다.
본 기술에 따르면, 보다 효율적으로 데이터를 관리하는 분산 저장 시스템의 스토리지 노드 및 그 동작 방법이 제공된다.
도 1은 분산 스토리지 시스템의 구성을 설명하기 위한 도면이다.
도 2는 도 1의 스토리지 노드를 설명하기 위한 도면이다.
도 3은 본 발명의 실시 예에 따른 스토리지 노드에 포함된 호스트의 동작을 설명하기 위한 장치도이다.
도 4는 도 3의 데이터 처리부의 동작을 설명하기 위한 장치도이다.
도 5는 도 4의 데이터 처리부의 소거 코딩 동작을 설명하기 위한 도면이다.
도 6은 본 발명의 실시 예에 따른 메모리 컨트롤러의 구성을 설명하기 위한 장치도이다.
도 7은 본 발명의 실시 예에 따른 메모리 컨트롤러 및 메모리 장치의 동작을 설명하기 위한 장치도이다.
도 8은 본 발명의 실시 예에 따른 스토리지 노드의 호스트의 동작을 설명하기 위한 순서도이다.
도 9는 본 발명의 실시 예에 따른 메모리 컨트롤러의 동작을 설명하기 위한 순서도이다.
도 10은 도 2의 메모리 장치의 구조를 설명하기 위한 도면이다.
도 11은 도 2의 메모리 컨트롤러의 다른 실시 예를 설명하기 위한 도면이다.
도 12는 본 발명의 실시 예에 따른 스토리지 장치가 적용된 메모리 카드 시스템을 보여주는 블록도이다.
도 13은 본 발명의 실시 예에 따른 스토리지 장치가 적용된 SSD(Solid State Drive) 시스템을 보여주는 블록도이다.
도 14는 본 발명의 실시 예에 따른 스토리지 장치가 적용된 사용자 시스템을 보여주는 블록도이다.
본 명세서 또는 출원에 개시되어 있는 본 발명의 개념에 따른 실시 예들에 대해서 특정한 구조적 내지 기능적 설명들은 단지 본 발명의 개념에 따른 실시 예를 설명하기 위한 목적으로 예시된 것으로, 본 별명의 개념에 따른 실시 예들은 다양한 형태로 실시될 수 있으며 본 명세서 또는 출원에 설명된 실시 예들에 한정되는 것으로 해석되어서는 아니 된다.
이하, 첨부한 도면을 참조하여 본 발명의 바람직한 실시 예를 설명함으로써, 본 발명을 상세히 설명한다. 이하, 본 발명의 실시 예를 첨부된 도면을 참조하여 상세하게 설명한다.
도 1은 분산 스토리지 시스템의 구성을 설명하기 위한 도면이다.
도 1을 참조하면, 본 발명의 실시 예에 따른 분산 스토리지 시스템은 클라이언트 그룹(20), 네트워크(30) 및 스토리지 그룹(40)을 포함할 수 있다. 클라이언트 그룹(20)은 복수의 클라이언트들을 포함할 수 있다. 실시 예에서, 클라이언트는 통신 기능이 포함된 전자 장치일 수 있다. 예를 들면, 클라이언트는 스마트 폰(smartphone), 태블릿 PC(tablet personal computer), 이동 전화기(mobile phone), 화상전화기, 전자북 리더기(e-book reader), 데스크탑 PC(desktop personal computer), 랩탑 PC(laptop personal computer), 넷북 컴퓨터(netbook computer), PDA(personal digital assistant), PMP(portable multimedia player), MP3 플레이어, 모바일 의료기기, 카메라(camera), 또는 웨어러블 장치(wearable device)(예: 전자 안경과 같은 head-mounted-device(HMD), 전자 의복, 전자 팔찌, 전자 목걸이, 전자 앱세서리(appcessory), 전자 문신, 또는 스마트 와치(smart watch))중 적어도 하나를 포함할 수 있다.
클라이언트는 네트워크(30)를 통해서 스토리지 그룹(40)에 저장될 데이터인 원본 데이터를 제공할 수 있다. 클라이언트 그룹(20)은 파일 시스템 인터페이스를 통해 파일 연산 처리를 제공할 수 있고, 스토리지 그룹(40)은 클라이언트 그룹(20)으로부터 입력된 원본 데이터를 저장 및 관리할 수 있다. 네트워크(30)는 이더넷, 인피니밴드 등 메시지 송수신이 가능한 통신 프로토콜을 지원할 수 있다.
스토리지 그룹(40)은 복수의 스토리지 노드들을 포함할 수 있다. 스토리지 노드는 네트워크(30)를 통해 수신한 데이터를 처리하기 위한 호스트 및 호스트가 처리한 데이터를 저장하는 스토리지 장치를 포함할 수 있다. 스토리지 노드는 클라이언트가 제공한 원본 데이터를 네트워크(30)를 통해 입력 받을 수 있다. 실시 예에서, 네트워크(30)는 무선 또는 유선 통신망을 통해 클라이언트 그룹(20)과 스토리지 그룹(40) 간에 교환되는 데이터를 상호 전달할 수 있다.
스토리지 노드에 포함된 호스트는 입력 받은 원본 데이터의 신뢰성을 확보하기 위하여 소거코딩을 수행할 수 있다. 또한 호스트는 소거코딩이 수행된 데이터에 순환 중복 검사 (CRC)코드를 덧붙일 수 있다. 호스트는 소거코딩이 수행된 데이터에 순환 중복 검사 코드가 부가된 데이터를 스토리지 장치에 저장하도록 스토리지 장치를 제어할 수 있다.
소거 코딩이 수행되면, 원본 데이터로부터 데이터 청크 및 코딩 청크가 생성될 수 있다. 데이터 청크는 입력된 원본 데이터를 분산하여 저장 및 관리하기 위해, 원본 데이터를 여러 개의 청크들로 분할한 데이터일 수 있다.
코딩 청크는 데이터 청크를 식별할 수 있는 논리 어드레스 또는 데이터 청크를 원본 데이터로 디코딩하는데 사용되는 정보를 포함하는 데이터일 수 있다.
분산 스토리지 시스템의 스토리지 노드에서 소거코딩이 수행될 경우, 높은 CPU 사용과 함께 잦은 문맥 교환, 빈번한 I/O 동작 및 네트워크 트래픽이 야기될 수 있다. 이러한 문제를 해결하기 위해, 본 발명의 실시 예에 따른 스토리지 노드는 소거코딩에 따라 생성된 데이터 청크와 코딩 청크에 대해 서로 다른 에러 정정 코드를 이용한 인코딩 및 디코딩을 수행하고, 데이터 청크와 코딩 청크가 서로 다른 메모리 블록에 저장되도록 제어할 수 있다. 이하, 도 2를 참조하여, 본 발명의 실시 예에 따른 스토리지 그룹(40)에 대해서 보다 상세하게 설명한다.
도 2는 도 1의 스토리지 노드를 설명하기 위한 도면이다.
도 2를 참조하면, 스토리지 노드(400)는 호스트(300), 및 스토리지 장치(50)를 포함할 수 있다.
호스트(300)는 네트워크를 통해 데이터를 수신할 수 있다. 호스트(300)는 수신된 데이터가 스토리지 장치(50)에 저장되도록 스토리지 장치(50)를 제어할 수 있다. 호스트(300)는 USB (Universal Serial Bus), SATA (Serial AT Attachment), SAS (Serial Attached SCSI), HSIC (High Speed Interchip), SCSI (Small Computer System Interface), PCI (Peripheral Component Interconnection), PCIe (PCI express), NVMe (NonVolatile Memory express), UFS (Universal Flash Storage), SD (Secure Digital), MMC (MultiMedia Card), eMMC (embedded MMC), DIMM (Dual In-line Memory Module), RDIMM (Registered DIMM), LRDIMM (Load Reduced DIMM) 등과 같은 다양한 통신 방식들 중 적어도 하나를 이용하여 스토리지 장치(50)와 통신할 수 있다.
실시 예에서, 호스트(300)는 데이터 송수신부(310), 데이터 처리부(320) 및 쓰기 요청 생성부(330)를 포함할 수 있다.
데이터 송수신부(310)는 도 1을 참조하여 설명된 클라이언트로부터 네트워크를 통해 원본 데이터를 수신할 수 있다. 데이터 송수신부(310)는 입력 받은 원본 데이터를 데이터 처리부(320)에 제공할 수 있다. 데이터 송수신부(310)는 스토리지 장치(50)에 저장된 데이터를 획득하여 네트워크를 통해 클라이언트에 제공할 수 있다.
데이터 처리부(320)는 데이터 송수신부(310)로부터 원본 데이터를 입력 받고, 소거코딩을 수행할 수 있다. 실시 예에서, 소거 코딩은 리드-솔로몬 부호를 이용하여 수행되는 코딩일 수 있다. 소거코딩은 인코딩이 수행된 뒤의 데이터의 크기가 원본 데이터의 크기보다 감소하는 코딩 방식일 수 있다. 데이터 처리부(320)는 원본 데이터에 대해서 소거코딩을 수행하여, 복수의 데이터 청크들 및 복수의 코딩 청크들을 생성할 수 있다.
복수의 코딩 청크들은 데이터 청크들 중 어느 하나의 데이터 청크가 갱신될 때마다 갱신될 수 있다. 복수의 코딩 청크들은 데이터 청크들 중 어느 하나의 데이터 청크에 대한 리드 동작이 페일될 때 리드될 수 있다. 이는 코딩 청크는 리드 동작이 페일된 데이터 청크를 복구하는데 사용되는 데이터이기 때문이다.
실시 예에서, 데이터 처리부(320)는 소거코딩이 수행된 결과인 데이터 청크들 및 코딩 청크들에 순환 중복 검사 코드를 부가하는 동작을 더 수행할 수 있다. 순환 중복 검사 코드는 직렬 전송 방식에서 데이터의 신뢰성을 검증하기 위한 에러 검출 방법일 수 있다. 순환 중복 검사 코드가 부가된 데이터가 스토리지 장치(50)에 제공되면, 스토리지 장치(50)는 순환 중복 코드가 부가된 데이터를 수신한 뒤, 순환 중복 검사 코드 디코딩을 수행할 수 있다.
쓰기 요청 생성부(330)는 데이터 처리부(320)로부터 쓰기 데이터를 입력 받고, 쓰기 요청을 생성할 수 있다. 쓰기 요청 생성부(330)는 쓰기 요청과 쓰기 데이터를 스토리지 장치(50)에 제공할 수 있다.
쓰기 데이터는 데이터 처리부(320)가 소거코딩을 수행한 결과인 데이터 청크들 및 코딩 청크들일 수 있다. 또는 실시 예에서, 쓰기 데이터는 데이터 청크들 및 코딩 청크들에 순환 중복 검사 코드가 부가된 데이터일 수 있다. 쓰기 요청 생성부(330)는 스토리지 장치(50)에 저장할 데이터가 데이터 청크와 코딩 청크 중 어떤 것인지를 나타내는 정보인 청크 타입 정보를 스토리지 장치(50)에 제공할 수 있다. 예를 들어, 쓰기 요청 생성부(330)는 쓰기 요청에 대응하는 쓰기 데이터가 데이터 청크인지 또는 코딩 청크인지를 나타내는 청크 타입 정보를 포함하는 쓰기 요청을 생성할 수 있다. 쓰기 요청 생성부(330)는 생성된 쓰기 요청과 쓰기 데이터를 스토리지 장치(50)에 제공할 수 있다.
스토리지 장치(50)는 메모리 장치(100) 및 메모리 컨트롤러(200)를 포함할 수 있다. 스토리지 장치(50)는 호스트(300)의 제어에 따라 데이터를 저장하는 장치일 수 있다. 스토리지 장치(50)는 호스트(300)와의 통신 방식인 호스트 인터페이스에 따라서 다양한 종류의 데이터 스토리지 장치들 중 어느 하나로 제조될 수 있다. 예를 들면, 스토리지 장치(50)는 SSD, MMC, eMMC, RS-MMC, micro-MMC 형태의 멀티 미디어 카드(multimedia card), SD, mini-SD, micro-SD 형태의 시큐어 디지털(secure digital) 카드, USB(universal storage bus) 스토리지 장치, UFS(universal flash storage) 장치, PCMCIA(personal computer memory card international association) 카드 형태의 스토리지 장치, PCI(peripheral component interconnection) 카드 형태의 스토리지 장치, PCI-E(PCI express) 카드 형태의 스토리지 장치, CF(compact flash) 카드, 스마트 미디어(smart media) 카드, 메모리 스틱(memory stick) 등과 같은 다양한 종류의 스토리지 장치들 중 어느 하나로 구성될 수 있다.
스토리지 장치(50)는 다양한 종류의 패키지(package) 형태들 중 어느 하나로 제조될 수 있다. 예를 들면, 스토리지 장치(50)는 POP(package on package), SIP(system in package), SOC(system on chip), MCP(multi-chip package), COB(chip on board), WFP(wafer-level fabricated package), WSP(wafer-level stack package) 등과 같은 다양한 종류의 패키지 형태들 중 어느 하나로 제조될 수 있다.
메모리 장치(100)는 데이터를 저장할 수 있다. 메모리 장치(100)는 메모리 컨트롤러(200)의 제어에 응답하여 동작할 수 있다. 메모리 장치(100)는 데이터를 저장하는 복수의 메모리 셀들을 포함하는 메모리 셀 어레이를 포함할 수 있다.
메모리 셀은 하나의 데이터 비트를 저장하는 싱글 레벨 셀(Single Level Cell; SLC), 두 개의 데이터 비트들을 저장하는 멀티 레벨 셀(Multi Level Cell; MLC), 세 개의 데이터 비트들을 저장하는 트리플 레벨 셀(Triple Level Cell; TLC) 또는 네 개의 데이터 비트를 저장할 수 있는 쿼드 레벨 셀(Quad Level Cell; QLC) 중 어느 하나로 동작할 수 있다.
메모리 셀 어레이는 복수의 메모리 블록들을 포함할 수 있다. 메모리 블록은 복수의 메모리 셀들을 포함할 수 있다. 메모리 블록은 메모리 장치(100)에 저장된 데이터를 지우는 단위일 수 있다. 실시 예에서, 메모리 블록은 복수의 페이지들을 포함할 수 있다. 페이지는 메모리 장치(100)에 데이터를 저장하거나, 메모리 장치(100)에 저장된 데이터를 리드하는 단위일 수 있다.
실시 예에서, 메모리 장치(100)는 DDR SDRAM(Double Data Rate Synchronous Dynamic Random Access Memory), LPDDR4(Low Power Double Data Rate4) SDRAM, GDDR(Graphics Double Data Rate) SDRAM, LPDDR(Low Power DDR), RDRAM(Rambus Dynamic Random Access Memory), 낸드 플래시 메모리(NAND flash memory), 수직형 낸드 플래시 메모리(Vertical NAND), 노아 플래시 메모리(NOR flash memory), 저항성 램(resistive random access memory: RRAM), 상변화 메모리(phase-change memory: PRAM), 자기저항 메모리(magnetoresistive random access memory: MRAM), 강유전체 메모리(ferroelectric random access memory: FRAM), 스핀주입 자화반전 메모리(spin transfer torque random access memory: STT-RAM) 등이 될 수 있다. 본 명세서에서는 설명의 편의를 위해, 메모리 장치(100)가 낸드 플래시 메모리인 경우를 가정하여 설명한다.
메모리 장치(100)는 메모리 컨트롤러(200)로부터 커맨드 및 어드레스를 수신하고, 메모리 셀 어레이 중 어드레스에 의해 선택된 영역을 액세스하도록 구성된다. 즉, 메모리 장치(100)는 어드레스에 의해 선택된 영역에 대해 수신된 커맨드에 해당하는 동작을 수행할 수 있다. 예를 들면, 메모리 장치(100)는 프로그램 동작, 리드 동작 및 소거 동작을 수행할 수 있다. 프로그램 동작은 메모리 장치(100)에 포함된 메모리 셀들에 데이터를 저장하는 동작일 수 있다. 메모리 장치(100)는 메모리 컨트롤러(200)로부터 입력되는 프로그램 커맨드에 따라 어드레스에 의해 선택된 영역에 데이터를 저장하는 프로그램 동작을 수행할 수 있다. 리드 동작은 메모리 셀들에 저장된 데이터를 리드 전압을 이용하여 센싱하는 동작일 수 있다. 메모리 장치(100)는 메모리 컨트롤러(200)로부터 입력되는 리드 커맨드에 따라 어드레스에 의해 선택된 영역에 저장된 데이터를 센싱할 수 있다. 소거 동작은 메모리 셀들에 저장된 데이터를 삭제하는 동작일 수 있다. 메모리 장치(100)는 메모리 컨트롤러(200)로부터 입력되는 소거 커맨드에 따라 어드레스에 의해 선택된 영역에 저장된 데이터를 삭제할 것이다. 실시 예에서, 메모리 셀들에 저장된 데이터를 삭제한다는 것은 메모리 셀들의 문턱전압이 소거 상태에 대응하는 문턱전압분포에 속하도록 메모리 셀들의 문턱전압을 낮추는 것일 수 있다.
메모리 컨트롤러(200)는 메모리 장치(100)의 전반적인 동작을 제어할 수 있다.
스토리지 장치(50)에 전원이 인가되면, 메모리 컨트롤러(200)는 사전에 저장된 펌웨어(firmware, FW)를 실행할 수 있다. 메모리 장치(100)가 플래시 메모리 장치인 경우, 메모리 컨트롤러(200)는 호스트(300)와 메모리 장치(100)간의 통신을 제어하기 위한 플래시 변환 레이어(Flash Translation Layer, FTL)와 같은 펌웨어를 실행할 수 있다.
실시 예에서, 메모리 컨트롤러(200)는 데이터 제어부(210), 에러 정정부(220) 및 메모리 제어부(230)를 포함할 수 있다.
데이터 제어부(210)는 호스트(300)로부터 쓰기 데이터 및 쓰기 요청을 입력 받을 수 있다. 호스트(300)로부터 입력된 쓰기 요청에는, 쓰기 요청에 대응되는 쓰기 데이터가 데이터 청크인지 또는 코딩 청크인지를 나타내는 정보인 데이터 식별 정보가 포함되어 있을 수 있다.
예를 들어, 쓰기 요청에는 쓰기 데이터를 식별하기 위한 논리 어드레스(Logical Address, LA) 및 쓰기 데이터의 청크 타입 정보가 포함될 수 있다. 쓰기 요청이 입력되면, 데이터 제어부(210)는 호스트(300)로부터 저장될 쓰기 데이터를 입력 받을 수 있다. 데이터 제어부(210)는 입력된 논리 어드레스와 메모리 장치(100)에 포함된 메모리 셀들 중 쓰기 데이터가 저장될 메모리 셀들의 물리적인 주소를 나타내는 물리 어드레스(Physical Address, PA)를 맵핑한 맵 데이터를 생성할 수 있다. 이때, 데이터 제어부(210)는 청크 타입 정보를 기초로 쓰기 데이터가 저장될 물리 어드레스를 결정할 수 있다.
즉, 데이터 제어부(210)는 호스트로부터 입력된 쓰기 데이터가 코딩 청크 또는 데이터 청크에 해당되는지 여부에 따라 서로 다른 메모리 블록에 저장되도록 쓰기 데이터의 논리 어드레스를 물리 어드레스에 맵핑할 수 있다.
데이터 제어부(210)는 데이터 청크는 MLC, TLC 또는 QLC 방식 중 어느 하나로 프로그램 되는 메모리 블록에 저장되도록 물리 어드레스를 맵핑하고, 코딩 청크는 SLC방식으로 프로그램 되는 메모리 블록에 저장되도록 물리 어드레스를 맵핑할 수 있다. 실시 예에서, 코딩 청크가 저장되는 메모리 블록에 포함된 메모리 셀에 저장되는 데이터 비트의 수는 데이터 청크가 저장되는 메모리 블록에 포함된 메모리 셀에 저장되는 데이터 비트의 수보다 작을 수 있다.
데이터 청크는 코딩 청크보다 리드 요청되는 횟수가 더 많을 것이다. 반대로 코딩 청크는 데이터 청크보다 갱신되는 횟수가 더 많을 것이다. 따라서 상술한 바와 같이 데이터 청크와 코딩 청크를 서로 다른 메모리 블록에 저장하는 경우, 코딩 청크가 저장된 메모리 블록에 대한 리드 리클레임 동작을 최소화 할 수 있다는 효과가 있다.
또한 데이터 청크를 저장하고 있는 메모리 블록에 대한 리드 리클레임이나 가비지 컬렉션 동작이 수행되는 동안 데이터 청크에 대한 리드가 요청된 경우, 스토리지 장치는 해당 데이터 청크에 대한 리드 동작 대신, 코딩 청크들을 리드하여 호스트에 제공함으로써 도 1을 참조하여 설명된 클라이언트의 읽기 요청을 수행할 수 있다. 이는 종류에 상관없이 미리 설정된 개수의 청크만 있다면 원본 데이터를 복구할 수 있는 소거 코딩 방식(리드-솔로몬 코드)의 특징으로부터 기인한다.
에러 정정부(220)는 메모리 장치(100)에 저장될 데이터에 대해서 에러 정정 코드를 이용한 인코딩 동작을 수행할 수 있다. 에러 정정부(220)는 메모리 장치(100)로부터 리드된(획득된) 데이터에 포함된 에러 비트를 정정하기 위해서 에러 정정 코드를 이용한 디코딩 동작을 수행할 수 있다. 예를 들어, 에러 정정부(220)는 LDPC(low density parity check) code, BCH (Bose, Chaudhri, Hocquenghem) Code, turbo code, 리드-솔로몬 코드(Reed-Solomon code), convolution code, RSC(recursive systematic code), TCM(trellis-coded modulation), BCM(Block coded modulation), 해밍 코드(hamming code) 등의 코디드 모듈레이션(coded modulation)을 사용하여 에러 정정 디코딩 동작을 수행할 수 있다.
본 발명의 실시 예에 따르면, 에러 정정부(220)는 데이터 청크와 코딩 청크에 대해서 서로 다른 종류의 에러 정정 코드를 이용하여 에러 정정 인코딩 동작을 수행할 수 있다. 예를 들어, 에러 정정부(220)는 정정 가능한 에러 비트의 수가 상대적으로 더 많은 에러 정정 코드를 이용하여 코딩 청크를 인코딩할 수 있다. 에러 정정부(220)는 정정 가능한 에러 비트의 수가 상대적으로 더 적은 에러 정정 코드를 이용하여 데이터 청크를 인코딩 할 수 있다. 구체적으로, 에러 정정부(220)는 BCH코드를 이용하여 데이터 청크를 인코딩 하고, LDPC 코드를 이용하여 코딩 청크를 인코딩 할 수 있다.
코딩 청크는 데이터 청크에 비해 리드 요청되는 경우가 상대적으로 적을 수 있다. 따라서, 코딩 청크가 저장된 메모리 셀은 리텐션에 의한 전하 누출의 정도가 데이터 청크가 저장된 메모리 셀보다 더 클 수 있다. 따라서, 코딩 청크는 더 높은 신뢰성을 보장해야 한다. 본 발명의 실시 예에 따르면, 에러 정정 능력이 상대적으로 더 높은 에러 정정 코드를 코딩 청크에 적용함으로써 코딩 청크의 신뢰성을 보장할 수 있다.
다양한 실시 예에서, 에러 정정부(220)는 데이터 청크와 코딩 청크에 대해서 선택적으로 에러 정정 디코딩을 수행할 수 있다. 예를 들어, 에러 정정부(220)는 데이터 청크에 대해서는 에러 정정 디코딩을 수행하지 않고, 코딩 청크에 대해서만 에러 정정 디코딩을 수행할 수 있다.
메모리 제어부(230)는 메모리 장치(100)에 프로그램 데이터, 물리 어드레스 및 프로그램 커맨드를 제공할 수 있다. 메모리 제어부(230)가 제공하는 프로그램 커맨드는 호스트로부터 입력 받은 쓰기 요청에 응답하여 메모리 장치가 프로그램 동작을 수행할 수 있도록 지시하는 커맨드일 수 있다. 프로그램 데이터는 에러 정정부(220)에 의해 에러 정정 디코딩이 완료된 데이터일 수 있다.
도 3은 본 발명의 실시 예에 따른 스토리지 노드에 포함된 호스트의 동작을 설명하기 위한 장치도이다.
도 3을 참조하면, 호스트(300)는 데이터 송수신부(310), 데이터 처리부(320) 및 쓰기 요청 생성부(330)를 포함할 수 있다.
데이터 송수신부(310)는 도 1을 참조하여 설명된 클라이언트로부터 네트워크를 통해 원본 데이터를 입력 받을 수 있다. 이후, 데이터 송수신부(310)는 입력 받은 원본 데이터를 데이터 처리부(320)에 제공할 수 있다.
데이터 처리부(320)는 데이터 송수신부(310)로부터 원본 데이터를 입력 받고, 소거 코딩을 수행할 수 있다. 원본 데이터에 대해서 소거 코딩이 수행된 데이터는 쓰기 데이터일 수 있다. 데이터 처리부(320)는 쓰기 요청 생성부(330)로 쓰기 데이터를 제공할 수 있다. 쓰기 데이터는 원본 데이터에 대해 소거코딩이 수행되어 생성된 데이터 청크 및 코딩 청크에, 순환 중복 검사 코드가 부가된 데이터일 수 있다. 실시 예에서 순환 중복 검사 코드의 부가는 생략될 수 있다. 소거코딩은 원본 데이터를 원본 데이터보다 적은 용량을 가지는 복수의 청크들로 분할하는 동작일 수 있다.
쓰기 요청 생성부(330)는 데이터 처리부(320)로부터 쓰기 데이터를 입력 받고, 쓰기 요청을 생성하여, 메모리 컨트롤러(200)로 쓰기 데이터 및 쓰기 요청을 출력할 수 있다. 쓰기 요청 생성부(330)는 쓰기 요청을 생성할 때, 쓰기 요청에 포함된 하나 이상의 비트에 쓰기 데이터의 청크 타입 정보를 함께 생성할 수 있다. 즉, 쓰기 요청에는 해당 쓰기 데이터를 식별하기 위한 논리 어드레스(Logical Address, LA) 및 쓰기 데이터의 청크 타입 정보가 포함될 수 있다. 청크 타입 정보는 소거코딩에 의해 생성된 쓰기 데이터가 데이터 청크인지 또는 코딩 청크인지를 나타내는 정보에 해당될 수 있다.
도 4는 도 3의 데이터 처리부의 동작을 설명하기 위한 장치도이다.
도 4를 참조하면, 데이터 처리부(320)는 청크 생성부(321) 및 순환 중복 코드 처리부 (322)를 포함할 수 있다.
청크 생성부(321)는 데이터 송수신부(310)로부터 원본 데이터를 입력 받고, 소거코딩을 수행할 수 있다. 예를 들어 청크 생성부(321)는 리드-솔로몬 코드을 이용하여 원본 데이터를 인코딩할 수 있다. 소거 코딩이 수행되면, 복수의 데이터 청크들 및 복수의 코딩 청크들이 생성될 수 있다. 다양한 실시 예에 따라, 청크 생성부(321)는 원본 데이터를 6개의 데이터 청크들과 3개의 코딩 청크들로 분할하거나, 10개의 데이터 청크들과 4개의 코딩 청크들로 분할 할 수 있다. 본 명세서에서는 원본 데이터가 6개의 데이터 청크들과 3개의 코딩 청크들로 소거코딩이 수행되는 것을 예시로 설명한다. 생성된 데이터 청크 및 코딩 청크는 순환 중복 코드 처리부 (322)로 출력될 수 있다.
순환 중복 코드 처리부 (322)는 청크 생성부(321)로부터 데이터 청크 및 코딩 청크를 입력 받고, 순환 중복 검사 코드를 이용한 인코딩 동작을 수행할 수 있다. 순환 중복 검사 코드는 직렬 전송 방식에서 데이터의 신뢰성을 검증하기 위한 에러 검출 방법에 해당될 수 있다. 실시 예에서, 순환 중복 검사 코드를 이용한 인코딩 동작은 생략될 수 있다.
도 5는 도 4의 데이터 처리부의 소거 코딩 동작을 설명하기 위한 도면이다.
도 5를 참조하면, 데이터 처리부(320)는 소거코딩을 수행하여 원본 데이터를 복수의 데이터 청크들(D1~D6) 및 복수의 코딩 청크들(C1~C3)로 분할할 수 있다. 소거코딩에는 다양한 종류가 포함될 수 있고, 소거코딩의 한 종류인 리드 솔로몬 코드 또한 분할되는 데이터 청크 및 코딩 청크의 개수에 따라 다양한 종류가 포함될 수 있다. 도 5의 실시 예에서는, 원본 데이터를 6개의 데이터 청크와 3개의 코딩 청크로 분할하는 리드 솔로몬 코드(RS(6,3))를 이용한 소거 코딩의 결과를 도시한다. 데이터 청크들 중 어느 하나가 갱신되어야 하는 경우, 리드 솔로몬 코드를 이용한 디코딩이 재수행되어 코딩 청크들은 모두 갱신될 수 있다.
도 6은 본 발명의 실시 예에 따른 메모리 컨트롤러의 구성을 설명하기 위한 장치도이다.
도 6을 참조하면, 메모리 컨트롤러(200)는 데이터 제어부(210), 에러 정정부(220) 및 메모리 제어부(230)를 포함할 수 있다.
데이터 제어부(210)는 호스트(300)로부터 쓰기 데이터 및 쓰기 요청을 입력 받고, 쓰기 요청의 하나 이상에 할당된 청크 타입 정보에 따라, 해당 쓰기 데이터의 에러 정정을 제어할 수 있다. 상술한 바와 같이, 코딩 청크는 데이터 청크에 비해 리드 요청이 상대적으로 적기 때문에, 시간이 경과할수록 터널링에 의해 전자들이 점차 빠져나가 데이터가 유실되는 리텐션이 발생될 가능성이 데이터 청크보다 클 수 있다. 따라서, 코딩 청크는 데이터 청크보다 더 높은 신뢰성이 요구되는 에러 정정이 수행될 필요성이 있다. 따라서, 데이터 제어부(210)는 에러 정정부(220)에 쓰기 데이터를 제공할 때, 데이터 청크와 코딩 청크를 에러 정정부(220)의 서로 다른 에러 정정 동작을 수행하는 영역들로 각각 출력할 수 있다. 코딩 청크에 대한 에러 정정은 데이터 청크에 대한 에러 정정보다 더 높은 신뢰성이 요구될 수 있기 때문에, 더 많은 에러 비트의 정정이 가능한 에러 정정 코드가 이용될 수 있다.
데이터 제어부(210)는 호스트(300)로부터 쓰기 데이터 및 쓰기 요청을 입력 받고, 쓰기 요청의 하나 이상에 할당된 청크 타입 정보에 따라, 해당 쓰기 데이터가 서로 다른 메모리 블록에 저장되도록 제어할 수 있다. 구체적으로, 데이터 제어부(210)는 청크 타입 정보에 따라 서로 다른 메모리 블록에 해당되는 물리 어드레스를 출력할 수 있다.
데이터의 갱신 관점에서, 코딩 청크는 동일한 원본 데이터를 가르키는 데이터 청크들 중 어느 하나의 데이터 청크라도 새로운 데이터로 갱신되면, 갱신 될 수 있다. 즉, 코딩 청크는 데이터 청크보다 빈번하게 갱신될 수 있다. 이에 따라, 기존에 코딩 청크는 무효 코딩 청크가 되고 새로운 코딩 청크가 유효 코딩 청크가 될 수 있다. 따라서, 코딩 청크를 저장하는 메모리 블록을 데이터 청크를 저장하는 메모리 블록과 서로 다른 블록으로 할당하는 경우, 가비지 컬렉션 동작이 수행될 때, 코딩 청크를 저장하는 메모리 블록을 우선적으로 희생블록으로 선택하여 희생 블록을 탐색하는데 소요되는 지연시간을 감소시킬 수 있다.
리드 관점에서, 데이터 청크는 코딩 청크보다 빈번하게 리드될 수 있다. 이에 따라, 데이터 청크를 저장하는 메모리 블록의 평균적인 리드 횟수는 코딩 청크를 저장하는 메모리 블록보다 상대적으로 많을 수 있다. 하나의 메모리 블록에 저장된 데이터를 리드한 후, 메모리 컨트롤러에서 오류를 정정하여 다른 메모리 블록에 옮겨 쓰는 리드 리클레임 동작은 평균적인 리드 횟수가 상대적으로 많은 메모리 블록에서 수행될 수 있다. 따라서, 데이터 청크를 저장하는 메모리 블록은 코딩 청크를 저장하는 메모리 블록에 우선하여 리드 리클레임 동작이 수행될 수 있다. 리드 리클레임 동작시 데이터 청크를 저장하는 메모리 블록이 우선 실시되기 때문에, 코딩 청크가 저장된 메모리 블록에 대한 리드 리클레임 동작이 감소할 수 있다.
도 7은 본 발명의 실시 예에 따른 메모리 컨트롤러 및 메모리 장치의 동작을 설명하기 위한 장치도이다.
도 7을 참조하면, 데이터 제어부(210)는 데이터 청크와 코딩 청크를 에러 정정부(220)의 서로 다른 에러 정정 수행부에 할당할 수 있다. 상술한 바와 같이, 코딩 청크는 데이터 청크보다 시간의 경과에 따라 전하가 유출되어 데이터의 유실이 발생하는 리텐션이 발생할 가능성이 데이터 청크보다 크기 때문에, 더 신뢰성이 높은 에러 정정이 수행될 필요성이 있다. 따라서, 데이터 제어부(210)는 데이터 청크는 제1 에러 정정 수행부(221)로 출력되고, 코딩 청크는 제2 에러 정정 수행부(222)로 출력될 수 있다. 제2 에러 정정 수행부(222)가 수행하는 에러 정정은 제1 에러 정정 수행부(221)가 수행하는 에러 정정보다 더 신뢰성이 높은 에러 정정에 해당될 수 있다. 예를 들어, 제1 에러 정정 수행부(221)는 BCH 코드를 이용하여 에러 정정을 수행할 수 있고, 제2 에러 정정 수행부(222)는 LDPC 코드를 이용하여 에러 정정을 수행할 수 있다. 제1 에러 정정 수행부(221) 및 제2 에러 정정 수행부(222)에서 에러 정정 디코딩이 수행된 데이터는 프로그램 데이터로 메모리 제어부(230)에 제공될 수 있다.
실시 예에서, 데이터 제어부(210)는 쓰기 요청에 포함된 청크 타입 정보에 따라, 해당 쓰기 데이터가 데이터 청크인지 또는 코딩 청크인지에 따라 서로 다른 메모리 블록에 저장되도록 제어할 수 있다. 구체적으로, 데이터 제어부(210)는 청크 타입 정보에 따라 서로 다른 메모리 블록에 해당되는 물리 어드레스를 출력할 수 있다. 예를 들어, 메모리 컨트롤러(200)는 데이터 청크들은 제1 블록, 제2블록 및 제4 블록에 저장되고, 코딩 청크들은 제3 블록에 저장되도록 메모리 장치(100)를 제어할 수 있다.
도 8은 본 발명의 실시 예에 따른 스토리지 노드의 호스트의 동작을 설명하기 위한 순서도이다.
도 8을 참조하면, S801단계에서, 호스트는 클라이언트들로부터 원본 데이터를 수신할 수 있다.
S803단계에서, 호스트는 원본 데이터에 대해 소거코딩을 수행하여 복수의 데이터 청크들 및 코딩 청크들을 생성할 수 있다. 소거코딩은 원본 데이터의 신뢰성을 확보하기 위해 원본 데이터를 복수의 청크들로 분할하는 동작일 수 있다.
S805단계에서, 호스트는 생성된 데이터 청크들 및 코딩 청크들에 대해서 순환 중복 검사 코드를 부가할 수 있다. 순환 중복 검사는 직렬 전송 방식에서 데이터의 신뢰성을 검증하기 위한 에러 검출 방법에 해당될 수 있다.
S807단계에서, 호스트는 청크 타입 정보를 포함하는 쓰기 요청을 생성할 수 있다. 구체적으로, 쓰기 요청에는 쓰기 데이터를 식별할 수 있는 논리 어드레스 및 청크 타입 정보가 포함될 수 있다. 호스트는 쓰기 요청의 하나 이상의 잉여 비트에 해당 쓰기 데이터의 청크 타입 정보를 할당할 수 있다. 청크 타입 정보는 해당 쓰기 데이터가 데이터 청크인지 또는 코딩 청크인지 여부를 나타내는 정보에 해당될 수 있다.
S809단계에서, 호스트는 스토리지 장치로 쓰기 요청 및 쓰기 데이터를 출력할 수 있다. 호스트는 쓰기 데이터와 함께, 해당 쓰기 데이터의 청크 타입 정보를 쓰기 요청에 할당하여 함께 출력함으로써, 스토리지 장치가 청크 타입에 따라 서로 다른 동작을 수행하도록 요청할 수 있다.
도 9는 본 발명의 실시 예에 따른 메모리 컨트롤러의 동작을 설명하기 위한 순서도이다.
도 9를 참조하면, S901단계에서, 메모리 컨트롤러는 호스트로부터 쓰기 요청을 수신할 수 있다. 쓰기 요청에는 쓰기 데이터를 식별할 수 있는 논리 어드레스 및 청크 타입 정보가 포함될 수 있다.
S903단계에서, 메모리 컨트롤러는 호스트로부터 저장될 쓰기 데이터를 입력 받을 수 있다. 쓰기 데이터는 호스트가 클라이언트들로부터 수신한 원본 데이터에 대해 소거코딩 및 순환 중복 검사를 수행한 데이터에 해당될 수 있다. 실시 예에 따라, 순환 중복 검사는 생략될 수 있다. 따라서, 쓰기 데이터는 데이터 청크 또는 코딩 청크 중 어느 하나에 해당될 수 있다.
S905단계에서, 메모리 컨트롤러는 수신한 쓰기 데이터가 데이터 청크인지 또는 코딩 청크인지 판단할 수 있다. 구체적으로, 메모리 컨트롤러는 쓰기 요청의 하나 이상의 잉여 비트에 포함된 청크 타입 정보를 기초로 쓰기 데이터가 데이터 청크인지 또는 코딩 청크인지 여부를 판단할 수 있다. 입력된 쓰기 데이터가 데이터 청크에 해당되면 다음으로 S907단계가 수행될 수 있다. 입력된 쓰기 데이터가 코딩 청크에 해당되면 다음으로 S911단계가 수행될 수 있다.
S907단계 및 S911단계에서, 메모리 컨트롤러는 데이터 청크에 해당되는 쓰기 데이터에 대해 제1 에러 정정을 수행할 수 있다. 또한, 메모리 컨트롤러는 코딩 청크에 해당되는 쓰기 데이터에 대해 제2 에러 정정을 수행할 수 있다. 예를 들어, 메모리 컨트롤러는 데이터 청크에 대해서는 BCH코드를 이용한 에러 정정 디코딩을 수행하고, 코딩 청크에 대해서는 LDPC 코드를 이용한 에러 정정 디코딩 동작을 수행할 수 있다.
S909단계 및 S913단계에서, 메모리 컨트롤러는 데이터 청크에 해당되는 쓰기 데이터를 식별하는 논리 어드레스를 메모리 장치의 제1 영역에 대응되는 물리 어드레스로 맵핑할 수 있다. 또한, 메모리 컨트롤러는 코딩 청크에 해당되는 쓰기 데이터를 메모리 장치의 제2 영역에 대응되는 물리 어드레스로 맵핑할 수 있다. 제1 영역은 데이터 청크들을 저장하는 메모리 블록들일 수 있다. 제2 영역은 코딩 청크들을 저장하는 메모리 블록들일 수 있다.
S915단계에서, 메모리 컨트롤러는 호스트로부터 수신한 쓰기 요청에 대응되는 프로그램 커맨드를 생성할 수 있다. 프로그램 커맨드는 메모리 장치가 입력된 물리 어드레스에 의해 선택된 영역에 입력된 데이터를 저장하는 프로그램 동작을 수행하도록 메모리 장치를 제어하는 커맨드에 해당될 수 있다.
S917단계에서, 메모리 컨트롤러는 프로그램 데이터와, 물리 어드레스 및 프로그램 커맨드를 메모리 장치로 출력할 수 있다.
도 10은 도 2의 메모리 장치의 구조를 설명하기 위한 도면이다.
도 10을 참조하면, 메모리 장치(100)는 메모리 셀 어레이(110), 주변 회로(120) 및 제어 로직(130)을 포함할 수 있다.
메모리 셀 어레이(110)는 복수의 메모리 블록들(BLK1~BLKz)을 포함한다. 복수의 메모리 블록들(BLK1~BLKz)은 행 라인들(RL)을 통해 로우 디코더(121)에 연결된다. 복수의 메모리 블록들(BLK1~BLKz)은 비트 라인들(BL1 내지 BLm)을 통해 페이지 버퍼 그룹(123)에 연결될 수 있다. 복수의 메모리 블록들(BLK1~BLKz) 각각은 복수의 메모리 셀들을 포함한다. 실시 예로서, 복수의 메모리 셀들은 불휘발성 메모리 셀들이다. 같은 워드라인에 연결된 메모리 셀들은 하나의 페이지로 정의될 수 있다. 따라서, 하나의 메모리 블록은 복수의 페이지들을 포함할 수 있다.
행 라인들(RL)은 적어도 하나 이상의 소스 선택 라인, 복수의 워드라인들 및 적어도 하나 이상의 드레인 선택 라인을 포함할 수 있다.
메모리 셀 어레이(110)에 포함된 메모리 셀들은 각각 하나의 데이터 비트를 저장하는 싱글 레벨 셀(Single Level Cell; SLC), 두 개의 데이터 비트들을 저장하는 멀티 레벨 셀(Multi Level Cell; MLC), 세 개의 데이터 비트들을 저장하는 트리플 레벨 셀(Triple Level Cell; TLC) 또는 네 개의 데이터 비트를 저장할 수 있는 쿼드 레벨 셀(Quad Level Cell; QLC)로 구성될 수 있다.
주변 회로(120)는 제어 로직(130)의 제어에 따라 메모리 셀 어레이(110)의 선택된 영역에 프로그램 동작, 리드 동작 또는 소거 동작을 수행하도록 구성될 수 있다. 주변 회로(120)는 메모리 셀 어레이(110)를 구동할 수 있다. 예를 들어, 주변 회로(120)는 제어 로직(130)의 제어에 따라 행 라인들(RL) 및 비트 라인들(BL1~BLn)에 다양한 동작 전압들을 인가하거나, 인가된 전압들을 디스차지 할 수 있다.
주변 회로(120)는 로우 디코더(121), 전압 생성부(122), 페이지 버퍼 그룹(123), 컬럼 디코더(124) 및 입출력 회로(125)를 포함할 수 있다.
로우 디코더(121)는 행 라인들(RL)을 통해 메모리 셀 어레이(110)에 연결된다. 행 라인들(RL)은 적어도 하나 이상의 소스 선택 라인, 복수의 워드라인들 및 적어도 하나 이상의 드레인 선택 라인을 포함할 수 있다. 실시 예에서, 워드 라인들은 노멀 워드 라인들과 더미 워드 라인들을 포함할 수 있다. 실시 예에서, 행 라인들(RL)은 파이프 선택 라인을 더 포함할 수 있다.
로우 디코더(121)는 제어 로직(130)의 제어에 응답하여 동작하도록 구성된다. 로우 디코더(121)는 제어 로직(130)으로부터 로우 어드레스(RADD)를 수신한다.
로우 디코더(121)는 로우 어드레스(RADD)를 디코딩하도록 구성된다. 로우 디코더(121)는 디코딩된 어드레스에 따라 메모리 블록들(BLK1~BLKz) 중 적어도 하나의 메모리 블록을 선택한다. 또한, 로우 디코더(121)는 디코딩된 어드레스에 따라 전압 발생부(122)가 생성한 전압들을 적어도 하나의 워드 라인(WL)에 인가하도록 선택된 메모리 블록의 적어도 하나의 워드 라인을 선택할 수 있다.
예를 들어, 프로그램 동작 시에, 로우 디코더(121)는 선택된 워드 라인에 프로그램 전압을 인가하고 비선택된 워드 라인들에 프로그램 전압보다 낮은 레벨의 프로그램 패스 전압을 인가할 것이다. 프로그램 검증 동작 시에, 로우 디코더(121)는 선택된 워드 라인에 검증 전압을 인가하고 비선택된 워드 라인들에 검증 전압보다 높은 검증 패스 전압을 인가할 것이다. 리드 동작 시에, 로우 디코더(121)는 선택된 워드 라인에 리드 전압을 인가하고, 비선택된 워드 라인들에 리드 전압보다 높은 리드 패스 전압을 인가할 것이다.
실시 예에서, 메모리 장치(100)의 소거 동작은 메모리 블록 단위로 수행된다. 소거 동작 시에 로우 디코더(121)는 디코딩된 어드레스에 따라 하나의 메모리 블록을 선택할 수 있다. 소거 동작 시, 로우 디코더(121)는 선택된 메모리 블록에 연결되는 워드 라인들에 접지 전압을 인가할 수 있다.
전압 생성부(122)는 제어 로직(130)의 제어에 응답하여 동작한다. 전압 생성부(122)는 메모리 장치(100)에 공급되는 외부 전원 전압을 이용하여 복수의 전압들을 발생하도록 구성된다. 구체적으로, 전압 생성부(122)는 동작 신호(OPSIG)에 응답하여 프로그램, 리드 및 소거 동작들에 사용되는 다양한 동작 전압들(Vop)을 생성할 수 있다. 예를 들어, 전압 생성부(122)는 제어 로직(130)의 제어에 응답하여 프로그램 전압, 검증 전압, 패스 전압, 리드 전압 및 소거 전압 등을 생성할 수 있다.
실시 예로서, 전압 생성부(122)는 외부 전원 전압을 레귤레이팅하여 내부 전원 전압을 생성할 수 있다. 전압 생성부(122)에서 생성된 내부 전원 전압은 메모리 장치(100)의 동작 전압으로서 사용된다.
실시 예로서, 전압 생성부(122)는 외부 전원 전압 또는 내부 전원 전압을 이용하여 복수의 전압들을 생성할 수 있다.
예를 들면, 전압 생성부(122)는 내부 전원 전압을 수신하는 복수의 펌핑 커패시터들을 포함하고, 제어 로직(130)의 제어에 응답하여 복수의 펌핑 커패시터들을 선택적으로 활성화하여 복수의 전압들을 생성할 것이다.
생성된 복수의 전압들은 로우 디코더(121)에 의해 메모리 셀 어레이(110)에 공급될 수 있다.
페이지 버퍼 그룹(123)은 제 1 내지 제 n 페이지 버퍼들(PB1~PBn)을 포함한다. 제 1 내지 제 n 페이지 버퍼들(PB1~PBn)은 각각 제 1 내지 제 n 비트 라인들(BL1~BLn)을 통해 메모리 셀 어레이(110)에 연결된다. 제 1 내지 제 n 페이지 버퍼들(PB1~PBn)은 제어 로직 (130)의 제어에 응답하여 동작한다. 구체적으로 제 1 내지 제 n 페이지 버퍼들(PB1~PBn)은 페이지 버퍼 제어 신호들(PBSIGNALS)에 응답하여 동작할 수 있다. 예를 들면, 제 1 내지 제 n 페이지 버퍼들(PB1~PBn)은 제 1 내지 제 n 비트 라인들(BL1~BLn)을 통해 수신된 데이터를 임시로 저장하거나, 리드 또는 검증 동작 시, 비트 라인들(BL1~BLn)의 전압 또는 전류를 센싱(sensing)할 수 있다.
구체적으로, 프로그램 동작 시, 제 1 내지 제 n 페이지 버퍼들(PB1~PBn)은 선택된 워드 라인에 프로그램 펄스가 인가될 때, 데이터 입출력 회로(125)를 통해 수신한 데이터(DATA)를 제 1 내지 제 n 비트 라인들(BL1~BLn)을 통해 선택된 메모리 셀들에 전달할 것이다. 전달된 데이터(DATA)에 따라 선택된 페이지의 메모리 셀들은 프로그램 된다. 프로그램 허용 전압(예를 들면, 접지 전압)이 인가되는 비트 라인과 연결된 메모리 셀은 상승된 문턱 전압을 가질 것이다. 프로그램 금지 전압(예를 들면, 전원 전압)이 인가되는 비트 라인과 연결된 메모리 셀의 문턱 전압은 유지될 것이다. 프로그램 검증 동작 시에, 제 1 내지 제 n 페이지 버퍼들(PB1~PBn)은 선택된 메모리 셀들로부터 제 1 내지 제 n 비트 라인들(BL1~BLn)을 통해 페이지 데이터를 읽는다.
리드 동작 시, 제 1 내지 제 n 페이지 버퍼들(PB1~PBn)은 선택된 페이지의 메모리 셀들로부터 제 1 내지 제 n 비트 라인들(BL1~BLn)을 통해 데이터(DATA)를 읽고, 읽어진 데이터(DATA)를 컬럼 디코더(124)의 제어에 따라 데이터 입출력 회로(125)로 출력한다.
소거 동작 시에, 제 1 내지 제 n 페이지 버퍼들(PB1~PBn)은 제 1 내지 제 n 비트 라인들(BL1~BLn)을 플로팅(floating) 시킬 수 있다.
컬럼 디코더(124)는 컬럼 어드레스(CADD)에 응답하여 입출력 회로(125)와 페이지 버퍼 그룹(123) 사이에서 데이터를 전달할 수 있다. 예를 들면, 컬럼 디코더(124)는 데이터 라인들(DL)을 통해 제 1 내지 제 n 페이지 버퍼들(PB1~PBn)과 데이터를 주고받거나, 컬럼 라인들(CL)을 통해 입출력 회로(125)와 데이터를 주고받을 수 있다.
입출력 회로(125)는 도 2를 참조하여 설명된 메모리 컨트롤러(200)로부터 전달받은 커맨드(CMD) 및 어드레스(ADDR)를 제어 로직(130)에 전달하거나, 데이터(DATA)를 컬럼 디코더(124)와 주고받을 수 있다.
센싱 회로(126)는 리드 동작(read operation) 또는 검증 동작(verify operation)시, 허용 비트 신호(VRYBIT)에 응답하여 기준 전류를 생성하고, 페이지 버퍼 그룹(123)으로부터 수신된 센싱 전압(VPB)과 기준 전류에 의해 생성된 기준 전압을 비교하여 패스 신호(PASS) 또는 페일 신호(FAIL)를 출력할 수 있다.
제어 로직(130) 커맨드(CMD) 및 어드레스(ADDR)에 응답하여 동작 신호(OPSIG), 로우 어드레스(RADD), 페이지 버퍼 제어 신호들(PBSIGNALS) 및 허용 비트(VRYBIT)를 출력하여 주변 회로들(120)을 제어할 수 있다. 또한, 제어 로직(130)은 패스 또는 페일 신호(PASS 또는 FAIL)에 응답하여 검증 동작이 패스 또는 페일 되었는지를 판단할 수 있다.
도 11은 도 2의 메모리 컨트롤러의 다른 실시 예를 설명하기 위한 도면이다.
도 11을 참조하면, 메모리 컨트롤러(1000)는 호스트(Host) 및 메모리 장치에 연결된다. 호스트(Host)로부터의 요청에 응답하여, 메모리 컨트롤러(1000)는 메모리 장치를 액세스하도록 구성된다. 메모리 컨트롤러(1000)는 메모리 장치 및 호스트(Host) 사이에 인터페이스를 제공할 수 있다. 메모리 컨트롤러(1000)는 메모리 장치를 제어하기 위한 펌웨어(firmware)를 구동할 수 있다.
메모리 컨트롤러(1000)는 프로세서부(Processor; 1010), 메모리 버퍼부(Memory Buffer; 1020), 에러 정정부(ECC; 1030), 호스트 인터페이스(Host Interface; 1040), 버퍼 제어부(Buffer Control Circuit; 1050), 메모리 인터페이스(Memory Interface; 1060) 그리고 버스(Bus; 1070)를 포함할 수 있다.
버스(1070)는 메모리 컨트롤러(1000)의 구성 요소들 사이에 채널(channel)을 제공하도록 구성될 수 있다.
프로세서부(1010)는 메모리 컨트롤러(1000)의 제반 동작을 제어하고, 논리 연산을 수행할 수 있다. 프로세서부(1010)는 호스트 인터페이스(1040)를 통해 외부의 호스트와 통신하고, 메모리 인터페이스(1060)를 통해 메모리 장치와 통신할 수 있다. 또한 프로세서부(1010)는 버퍼 제어부(1050)를 통해 메모리 버퍼부(1020)와 통신할 수 있다. 프로세서부(1010)는 메모리 버퍼부(1020)를 동작 메모리, 캐시 메모리(cache memory) 또는 버퍼 메모리(buffer memory)로 사용하여 스토리지 장치의 동작을 제어할 수 있다.
프로세서부(1010)는 플래시 변환 계층(FTL)의 기능을 수행할 수 있다. 프로세서부(1010)는 플래시 변환 계층(FTL)을 통해 호스트가 제공한 논리 어드레스(logical address, LA)를 물리 어드레스(physical address, PA)로 변환할 수 있다. 플래시 변환 계층(FTL)은 맵핑 테이블을 이용하여 논리 어드레스(LA)를 입력 받아, 물리 어드레스(PA)로 변환시킬 수 있다. 플래시 변환 계층의 주소 맵핑 방법에는 맵핑 단위에 따라 여러 가지가 있다. 대표적인 어드레스 맵핑 방법에는 페이지 맵핑 방법(Page mapping method), 블록 맵핑 방법(Block mapping method), 그리고 혼합 맵핑 방법(Hybrid mapping method)이 있다.
프로세서부(1010)는 호스트(Host)로부터 수신된 데이터를 랜더마이즈하도록 구성된다. 예를 들면, 프로세서부(1010)는 랜더마이징 시드(seed)를 이용하여 호스트(Host)로부터 수신된 데이터를 랜더마이즈할 것이다. 랜더마이즈된 데이터는 저장될 데이터로서 메모리 장치에 제공되어 메모리 셀 어레이에 프로그램된다.
프로세서부(1010)는 리드 동작 시 메모리 장치로부터 수신된 데이터를 디랜더마이즈하도록 구성된다. 예를 들면, 프로세서부(1010)는 디랜더마이징 시드를 이용하여 메모리 장치로부터 수신된 데이터를 디랜더마이즈할 것이다. 디랜더마이즈된 데이터는 호스트(Host)로 출력될 것이다.
실시 예로서, 프로세서부(1010)는 소프트웨어(software) 또는 펌웨어(firmware)를 구동함으로써 랜더마이즈 및 디랜더마이즈를 수행할 수 있다.
메모리 버퍼부(1020)는 프로세서부(1010)의 동작 메모리, 캐시 메모리 또는 버퍼 메모리로 사용될 수 있다. 메모리 버퍼부(1020)는 프로세서부(1010)가 실행하는 코드들 및 커맨드들을 저장할 수 있다. 메모리 버퍼부(1020)는 프로세서부(1010)에 의해 처리되는 데이터를 저장할 수 있다. 메모리 버퍼부(1020)는 SRAM(Static RAM), 또는 DRAM(Dynamic RAM)을 포함할 수 있다.
에러 정정부(1030)는 에러 정정을 수행할 수 있다. 에러 정정부(1030)는 메모리 인터페이스(1060)를 통해 메모리 장치에 기입될 데이터에 기반하여 에러 정정 인코딩(ECC encoding)을 수행할 수 있다. 에러 정정 인코딩 된 데이터는 메모리 인터페이스(1060)를 통해 메모리 장치로 전달될 수 있다. 에러 정정부(1030)는 메모리 장치로부터 메모리 인터페이스(1060)를 통해 수신되는 데이터에 대해 에러 정정 디코딩(ECC decoding)을 수행할 수 있다. 예시적으로, 에러 정정부(1030)는 메모리 인터페이스(1060)의 구성 요소로서 메모리 인터페이스(1060)에 포함될 수 있다.
호스트 인터페이스(1040)는 프로세서부(1010)의 제어에 따라, 외부의 호스트와 통신하도록 구성된다. 호스트 인터페이스(1040)는 USB (Universal Serial Bus), SATA (Serial AT Attachment), SAS (Serial Attached SCSI), HSIC (High Speed Interchip), SCSI (Small Computer System Interface), PCI (Peripheral Component Interconnection), PCIe (PCI express), NVMe (NonVolatile Memory express), UFS (Universal Flash Storage), SD (Secure Digital), MMC (MultiMedia Card), eMMC (embedded MMC), DIMM (Dual In-line Memory Module), RDIMM (Registered DIMM), LRDIMM (Load Reduced DIMM) 등과 같은 다양한 통신 방식들 중 적어도 하나를 이용하여 통신하도록 구성될 수 있다.
버퍼 제어부(1050)는 프로세서부(1010)의 제어에 따라, 메모리 버퍼부(1020)를 제어하도록 구성된다.
메모리 인터페이스(1060)는 프로세서부(1010)의 제어에 따라, 메모리 장치와 통신하도록 구성된다. 메모리 인터페이스(1060)는 채널을 통해 커맨드, 어드레스 및 데이터를 메모리 장치와 통신할 수 있다.
예시적으로, 메모리 컨트롤러(1000)는 메모리 버퍼부(1020) 및 버퍼 제어부(1050)를 포함하지 않을 수 있다.
예시적으로, 프로세서부(1010)는 코드들을 이용하여 메모리 컨트롤러(1000)의 동작을 제어할 수 있다. 프로세서부(1010)는 메모리 컨트롤러(1000)의 내부에 제공되는 비휘발성 메모리 장치(예를 들어, Read Only Memory)로부터 코드들을 로드할 수 있다. 다른 예로서, 프로세서부(1010)는 메모리 장치로부터 메모리 인터페이스(1060)를 통해 코드들을 로드(load)할 수 있다.
예시적으로, 메모리 컨트롤러(1000)의 버스(1070)는 제어 버스(control bus) 및 데이터 버스(data bus)로 구분될 수 있다. 데이터 버스는 메모리 컨트롤러(1000) 내에서 데이터를 전송하고, 제어 버스는 메모리 컨트롤러(1000) 내에서 커맨드, 어드레스와 같은 제어 정보를 전송하도록 구성될 수 있다. 데이터 버스와 제어 버스는 서로 분리되며, 상호간에 간섭하거나 영향을 주지 않을 수 있다. 데이터 버스는 호스트 인터페이스(1040), 버퍼 제어부(1050), 에러 정정부(1030) 및 메모리 인터페이스(1060)에 연결될 수 있다. 제어 버스는 호스트 인터페이스(1040), 프로세서부(1010), 버퍼 제어부(1050), 메모리 버퍼부(1020) 및 메모리 인터페이스(1060)에 연결될 수 있다.
도 12는 본 발명의 실시 예에 따른 스토리지 장치가 적용된 메모리 카드 시스템을 보여주는 블록도이다.
도 12를 참조하면, 메모리 카드 시스템(2000)은 메모리 컨트롤러(2100), 메모리 장치 (2200), 및 커넥터(2300)를 포함한다.
메모리 컨트롤러(2100)는 메모리 장치(2200)와 연결된다. 메모리 컨트롤러(2100)는 메모리 장치(2200)를 액세스하도록 구성된다. 메모리 컨트롤러(2100)는 도 2를 참조하여 설명된 메모리 컨트롤러(200)와 동일하게 구현될 수 있다.
예시적으로, 메모리 컨트롤러(2100)는 램(RAM, Random Access Memory), 프로세싱 유닛(processing unit), 호스트 인터페이스(host interface), 메모리 인터페이스(memory interface), 에러 정정부와 같은 구성 요소들을 포함할 수 있다.
메모리 컨트롤러(2100)는 커넥터(2300)를 통해 외부 장치와 통신할 수 있다. 메모리 컨트롤러(2100)는 특정한 통신 규격에 따라 외부 장치(예를 들어, 호스트)와 통신할 수 있다. 예시적으로, 메모리 컨트롤러(2100)는 USB (Universal Serial Bus), MMC (multimedia card), eMMC(embeded MMC), PCI (peripheral component interconnection), PCI-E (PCI-express), ATA (Advanced Technology Attachment), Serial-ATA, Parallel-ATA, SCSI (small computer small interface), ESDI (enhanced small disk interface), IDE (Integrated Drive Electronics), 파이어와이어(Firewire), UFS(Universal Flash Storage), WIFI, Bluetooth, NVMe 등과 같은 다양한 통신 규격들 중 적어도 하나를 통해 외부 장치와 통신하도록 구성된다. 예시적으로, 커넥터(2300)는 상술된 다양한 통신 규격들 중 적어도 하나에 의해 정의될 수 있다.
예시적으로, 메모리 장치(2200)는 EEPROM (Electrically Erasable and Programmable ROM), 낸드 플래시 메모리, 노어 플래시 메모리, PRAM (Phase-change RAM), ReRAM (Resistive RAM), FRAM (Ferroelectric RAM), STT-MRAM(Spin-Torque Magnetic RAM) 등과 같은 다양한 비휘발성 메모리 소자들로 구성될 수 있다.
메모리 컨트롤러(2100) 및 메모리 장치(2200)는 하나의 반도체 장치로 집적되어, 메모리 카드를 구성할 수 있다. 예를 들면, 메모리 컨트롤러(2100) 및 메모리 장치(2200)는 하나의 반도체 장치로 집적되어 PC 카드(PCMCIA, personal computer memory card international association), 컴팩트 플래시 카드(CF), 스마트 미디어 카드(SM, SMC), 메모리 스틱, 멀티미디어 카드(MMC, RS-MMC, MMCmicro, eMMC), SD 카드(SD, miniSD, microSD, SDHC), 범용 플래시 기억장치(UFS) 등과 같은 메모리 카드를 구성할 수 있다.
도 13은 본 발명의 실시 예에 따른 스토리지 장치가 적용된 SSD(Solid State Drive) 시스템을 보여주는 블록도이다.
도 13을 참조하면, SSD 시스템(3000)은 호스트(3100) 및 SSD(3200)를 포함한다. SSD(3200)는 신호 커넥터(3001)를 통해 호스트(3100)와 신호(SIG)를 주고 받고, 전원 커넥터(3002)를 통해 전원(PWR)을 입력 받는다. SSD(3200)는 SSD 컨트롤러(3210), 복수의 플래시 메모리들(3221~322n), 보조 전원 장치(3230), 및 버퍼 메모리(3240)를 포함한다.
본 발명의 실시 예에 따르면, SSD 컨트롤러(3210)는 도 2을 참조하여 설명된 메모리 컨트롤러(200)의 기능을 수행할 수 있다.
SSD 컨트롤러(3210)는 호스트(3100)로부터 수신된 신호(SIG)에 응답하여 복수의 플래시 메모리들(3221~322n)을 제어할 수 있다. 예시적으로, 신호(SIG)는 호스트(3100) 및 SSD(3200)의 인터페이스에 기반된 신호들일 수 있다. 예를 들어, 신호(SIG)는 USB (Universal Serial Bus), MMC (multimedia card), eMMC(embeded MMC), PCI (peripheral component interconnection), PCI-E (PCI-express), ATA (Advanced Technology Attachment), Serial-ATA, Parallel-ATA, SCSI (small computer small interface), ESDI (enhanced small disk interface), IDE (Integrated Drive Electronics), 파이어와이어(Firewire), UFS(Universal Flash Storage), WIFI, Bluetooth, NVMe 등과 같은 인터페이스들 중 적어도 하나에 의해 정의된 신호일 수 있다.
보조 전원 장치(3230)는 전원 커넥터(3002)를 통해 호스트(3100)와 연결된다. 보조 전원 장치(3230)는 호스트(3100)로부터 전원(PWR)을 입력 받고, 충전할 수 있다. 보조 전원 장치(3230)는 호스트(3100)로부터의 전원 공급이 원활하지 않을 경우, SSD(3200)의 전원을 제공할 수 있다. 예시적으로, 보조 전원 장치(3230)는 SSD(3200) 내에 위치할 수도 있고, SSD(3200) 밖에 위치할 수도 있다. 예를 들면, 보조 전원 장치(3230)는 메인 보드에 위치하며, SSD(3200)에 보조 전원을 제공할 수도 있다.
버퍼 메모리(3240)는 SSD(3200)의 버퍼 메모리로 동작한다. 예를 들어, 버퍼 메모리(3240)는 호스트(3100)로부터 수신된 데이터 또는 복수의 플래시 메모리들(3221~322n)로부터 수신된 데이터를 임시 저장하거나, 플래시 메모리들(3221~322n)의 메타 데이터(예를 들어, 매핑 테이블)를 임시 저장할 수 있다. 버퍼 메모리(3240)는 DRAM, SDRAM, DDR SDRAM, LPDDR SDRAM, GRAM 등과 같은 휘발성 메모리 또는 FRAM, ReRAM, STT-MRAM, PRAM 등과 같은 비휘발성 메모리들을 포함할 수 있다.
도 14는 본 발명의 실시 예에 따른 스토리지 장치가 적용된 사용자 시스템을 보여주는 블록도이다.
도 14를 참조하면, 사용자 시스템(4000)은 애플리케이션 프로세서(4100), 메모리 모듈(4200), 네트워크 모듈(4300), 스토리지 모듈(4400), 및 사용자 인터페이스(4500)를 포함한다.
애플리케이션 프로세서(4100)는 사용자 시스템(4000)에 포함된 구성 요소들, 운영체제(OS; Operating System), 또는 사용자 프로그램 등을 구동시킬 수 있다. 예시적으로, 애플리케이션 프로세서(4100)는 사용자 시스템(4000)에 포함된 구성 요소들을 제어하는 컨트롤러들, 인터페이스들, 그래픽 엔진 등을 포함할 수 있다. 애플리케이션 프로세서(4100)는 시스템-온-칩(SoC; System-on-Chip)으로 제공될 수 있다.
메모리 모듈(4200)은 사용자 시스템(4000)의 주 메모리, 동작 메모리, 버퍼 메모리, 또는 캐쉬 메모리로 동작할 수 있다. 메모리 모듈(4200)은 DRAM, SDRAM, DDR SDRAM, DDR2 SDRAM, DDR3 SDRAM, LPDDR SDARM, LPDDR3 SDRAM, LPDDR3 SDRAM 등과 같은 휘발성 랜덤 액세스 메모리 또는 PRAM, ReRAM, MRAM, FRAM 등과 같은 비휘발성 랜덤 액세스 메모리를 포함할 수 있다. 예시적으로 애플리케이션 프로세서(4100) 및 메모리 모듈(4200)은 POP(Package on Package)를 기반으로 패키지화되어 하나의 반도체 패키지로 제공될 수 있다.
네트워크 모듈(4300)은 외부 장치들과 통신을 수행할 수 있다. 예시적으로, 네트워크 모듈(4300)은 CDMA(Code Division Multiple Access), GSM(Global System for Mobile communication), WCDMA(wideband CDMA), CDMA-2000, TDMA(Time Dvision Multiple Access), LTE(Long Term Evolution), Wimax, WLAN, UWB, 블루투스, Wi-Fi 등과 같은 무선 통신을 지원할 수 있다. 예시적으로, 네트워크 모듈(4300)은 애플리케이션 프로세서(4100)에 포함될 수 있다.
스토리지 모듈(4400)은 데이터를 저장할 수 있다. 예를 들어, 스토리지 모듈(4400)은 애플리케이션 프로세서(4100)로부터 수신한 데이터를 저장할 수 있다. 또는 스토리지 모듈(4400)은 스토리지 모듈(4400)에 저장된 데이터를 애플리케이션 프로세서(4100)로 전송할 수 있다. 예시적으로, 스토리지 모듈(4400)은 PRAM(Phase-change RAM), MRAM(Magnetic RAM), RRAM(Resistive RAM), NAND flash, NOR flash, 3차원 구조의 NAND 플래시 등과 같은 비휘발성 반도체 메모리 소자로 구현될 수 있다. 예시적으로, 스토리지 모듈(4400)은 사용자 시스템(4000)의 메모리 카드, 외장형 드라이브 등과 같은 탈착식 저장 매체(removable drive)로 제공될 수 있다.
예시적으로, 스토리지 모듈(4400)은 복수의 비휘발성 메모리 장치들을 포함할 수 있고, 복수의 비휘발성 메모리 장치들은 도 2를 참조하여 설명된 메모리 장치(100)와 동일하게 동작할 수 있다. 스토리지 모듈(4400)은 도 2를 참조하여 설명된 스토리지 장치(50)와 동일하게 동작할 수 있다.
사용자 인터페이스(4500)는 애플리케이션 프로세서(4100)에 데이터 또는 명령어를 입력하거나 또는 외부 장치로 데이터를 출력하는 인터페이스들을 포함할 수 있다. 예시적으로, 사용자 인터페이스(4500)는 키보드, 키패드, 버튼, 터치 패널, 터치 스크린, 터치 패드, 터치 볼, 카메라, 마이크, 자이로스코프 센서, 진동 센서, 압전 소자 등과 같은 사용자 입력 인터페이스들을 포함할 수 있다. 사용자 인터페이스(4500)는 LCD (Liquid Crystal Display), OLED (Organic Light Emitting Diode) 표시 장치, AMOLED (Active Matrix OLED) 표시 장치, LED, 스피커, 모니터 등과 같은 사용자 출력 인터페이스들을 포함할 수 있다.
20: 클라이언트 그룹
30: 네트워크
40: 스토리지 그룹

Claims (21)

  1. 메모리 장치의 동작을 제어하는 메모리 컨트롤러에 있어서,
    호스트로부터 상기 메모리 장치에 데이터를 저장할 것을 요청하는 쓰기 요청 및 상기 쓰기 요청에 대응하는 쓰기 데이터를 수신하고, 상기 쓰기 요청에 포함된 청크 타입 정보를 기초로 상기 쓰기 데이터가 저장될 메모리 블록의 물리 어드레스를 결정하는 데이터 제어부;
    상기 메모리 블록에 상기 쓰기 데이터를 저장할 것을 지시하는 프로그램 커맨드, 상기 물리 어드레스 및 상기 쓰기 데이터를 상기 메모리 장치에 제공하는 메모리 제어부;를 포함하되,
    상기 청크 타입 정보는,
    상기 쓰기 데이터가 상기 호스트가 원본 데이터에 대해서 수행한 소거 코딩 동작에 의해 생성된 데이터 청크들 및 코딩 청크들 중 어떤 청크인지를 나타내는 정보인 메모리 컨트롤러.
  2. 제 1항에 있어서, 상기 데이터 제어부는,
    상기 쓰기 데이터가 데이터 청크이면, 제1 메모리 블록을 상기 쓰기 데이터가 저장될 메모리 블록으로 결정하는 메모리 컨트롤러.
  3. 제 2항에 있어서, 상기 제1 메모리 블록에 포함된 메모리 셀은 2비트 이상의 데이터 비트를 저장하도록 프로그램 되는 메모리 컨트롤러.
  4. 제 1항에 있어서, 상기 데이터 제어부는,
    상기 쓰기 데이터가 코딩 청크이면, 제2 메모리 블록을 상기 쓰기 데이터가 저장될 메모리 블록으로 결정하는 메모리 컨트롤러.
  5. 제 4항에 있어서, 상기 제2 메모리 블록에 포함된 메모리 셀은 1비트의 데이터 비트를 저장하도록 프로그램 되는 메모리 컨트롤러.
  6. 제 1항에 있어서, 상기 데이터 제어부는,
    데이터 청크인 쓰기 데이터는 제1 메모리 블록에 저장하고, 코딩 청크인 쓰기 데이터는 제2 메모리 블록에 저장하도록 상기 쓰기 데이터가 저장될 메모리 블록의 물리 어드레스를 결정하고,
    상기 제1 메모리 블록에 포함된 하나의 메모리 셀에 저장되는 데이터 비트 수는 상기 제2 메모리 블록에 포함된 하나의 메모리 셀에 저장되는 데이터 비트 수 보다 작은 메모리 컨트롤러.
  7. 제 1항에 있어서, 상기 데이터 청크들 및 상기 코딩 청크들의 크기는 상기 원본 데이터보다 작은 메모리 컨트롤러.
  8. 제 1항에 있어서, 상기 원본 데이터는,
    상기 데이터 청크들 및 상기 코딩 청크들 중 미리 설정된 개수의 청크들에 의해 획득되는 메모리 컨트롤러.
  9. 메모리 장치의 동작을 제어하는 메모리 컨트롤러에 있어서,
    호스트로부터 상기 메모리 장치에 데이터를 저장할 것을 요청하는 쓰기 요청 및 상기 쓰기 요청에 대응하는 쓰기 데이터를 수신하는 데이터 제어부;
    상기 쓰기 요청에 포함된 청크 타입 정보를 기초로 상기 쓰기 데이터에 대한 에러 정정 디코딩 동작을 수행하는 에러 정정부; 및
    상기 쓰기 데이터를 저장할 것을 지시하는 프로그램 커맨드 및 상기 에러 정정 디코딩 동작이 수행된 프로그램 데이터를 상기 메모리 장치에 제공하는 메모리 제어부;를 포함하되,
    상기 청크 타입 정보는,
    상기 쓰기 데이터가 상기 호스트가 원본 데이터에 대해서 수행한 소거 코딩 동작에 의해 생성된 데이터 청크들 및 코딩 청크들 중 어떤 청크인지를 나타내는 정보인 메모리 컨트롤러.
  10. 제 9항에 있어서, 상기 에러 정정부는,
    상기 쓰기 데이터가 데이터 청크이면, 상기 쓰기 데이터를 제1 에러 정정 코드를 이용하여 디코딩 하고, 상기 쓰기 데이터가 코딩 청크이면, 상기 쓰기 데이터를 제2 에러 정정 코드를 이용하여 디코딩하는 메모리 컨트롤러.
  11. 제 10항에 있어서, 상기 제1 에러 정정 코드는,
    상기 제2 에러 정정 코드 보다 상대적으로 정정 가능한 에러 비트의 수가 적은 메모리 컨트롤러.
  12. 제 9항에 있어서, 상기 에러 정정부는,
    상기 쓰기 데이터가 코딩 청크이면, 상기 에러 정정 디코딩 동작을 수행하고, 상기 쓰기 데이터가 데이터 청크이면, 상기 에러 정정 디코딩 동작을 생략하는 메모리 컨트롤러.
  13. 제 8항에 있어서, 상기 데이터 제어부는,
    상기 쓰기 요청에 포함된 청크 타입 정보를 기초로 상기 쓰기 데이터가 저장될 메모리 블록의 물리 어드레스를 결정하는 메모리 컨트롤러.
  14. 제 13항에 있어서, 상기 데이터 제어부는,
    상기 쓰기 데이터가 데이터 청크이면, 제1 메모리 블록을 상기 쓰기 데이터가 저장될 메모리 블록으로 결정하는 메모리 컨트롤러.
  15. 제 14항에 있어서, 상기 제1 메모리 블록에 포함된 메모리 셀은 2비트 이상의 데이터 비트를 저장하도록 프로그램 되는 메모리 컨트롤러.
  16. 제 13항에 있어서, 상기 데이터 제어부는,
    상기 쓰기 데이터가 코딩 청크이면, 제2 메모리 블록을 상기 쓰기 데이터가 저장될 메모리 블록으로 결정하는 메모리 컨트롤러.
  17. 제 16항에 있어서, 상기 제2 메모리 블록에 포함된 메모리 셀은 1비트의 데이터 비트를 저장하도록 프로그램 되는 메모리 컨트롤러.
  18. 제 13항에 있어서, 상기 데이터 제어부는,
    데이터 청크인 쓰기 데이터는 제1 메모리 블록에 저장하고, 코딩 청크인 쓰기 데이터는 제2 메모리 블록에 저장하도록 상기 쓰기 데이터가 저장될 메모리 블록의 물리 어드레스를 결정하고,
    상기 제1 메모리 블록에 포함된 하나의 메모리 셀에 저장되는 데이터 비트 수는 상기 제2 메모리 블록에 포함된 하나의 메모리 셀에 저장되는 데이터 비트 수 보다 작은 메모리 컨트롤러.
  19. 제 9항에 있어서, 상기 데이터 청크들 및 상기 코딩 청크들의 크기는 상기 원본 데이터보다 작은 메모리 컨트롤러.
  20. 제 9항에 있어서, 상기 원본 데이터는,
    상기 데이터 청크들 및 상기 코딩 청크들 중 미리 설정된 개수의 청크들에 의해 획득되는 메모리 컨트롤러.
  21. 호스트로부터 쓰기 데이터 및 쓰기 요청을 입력 받고, 메모리 장치의 동작을 제어하는 메모리 컨트롤러의 동작 방법에 있어서,
    상기 쓰기 요청에 포함된 청크 타입 정보를 기초로, 상기 쓰기 데이터가 데이터 청크인지 또는 코딩 청크인지 여부를 판단하는 단계;
    상기 쓰기 데이터가 데이터 청크 또는 코딩 청크인지 여부에 따라, 상기 쓰기 데이터에 대하여 제1 에러 정정 또는 제2 에러 정정 중 어느 하나를 수행하는 단계; 및
    상기 쓰기 데이터가 데이터 청크 또는 코딩 청크인지 여부에 따라, 상기 메모리 장치에 포함되는 제1 메모리 블록 또는 제2 메모리 블록 중 어느 하나에 상기 쓰기 데이터를 저장하도록 상기 메모리 장치를 제어하는 단계;를 포함하는 메모리 컨트롤러의 동작 방법.
KR1020190134130A 2019-10-25 2019-10-25 분산 저장 시스템의 스토리지 노드 및 그 동작 방법 KR20210049619A (ko)

Priority Applications (3)

Application Number Priority Date Filing Date Title
KR1020190134130A KR20210049619A (ko) 2019-10-25 2019-10-25 분산 저장 시스템의 스토리지 노드 및 그 동작 방법
US16/932,996 US11281381B2 (en) 2019-10-25 2020-07-20 Storage node of distributed storage system and method of operating the same
CN202010881403.7A CN112711377B (zh) 2019-10-25 2020-08-27 分布式存储系统的存储节点及其操作方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020190134130A KR20210049619A (ko) 2019-10-25 2019-10-25 분산 저장 시스템의 스토리지 노드 및 그 동작 방법

Publications (1)

Publication Number Publication Date
KR20210049619A true KR20210049619A (ko) 2021-05-06

Family

ID=75542368

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020190134130A KR20210049619A (ko) 2019-10-25 2019-10-25 분산 저장 시스템의 스토리지 노드 및 그 동작 방법

Country Status (3)

Country Link
US (1) US11281381B2 (ko)
KR (1) KR20210049619A (ko)
CN (1) CN112711377B (ko)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN115639947A (zh) * 2021-07-19 2023-01-24 华为技术有限公司 数据写入方法、数据读取方法、装置、设备、系统及介质

Family Cites Families (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8027194B2 (en) * 1988-06-13 2011-09-27 Samsung Electronics Co., Ltd. Memory system and method of accessing a semiconductor memory device
JP3577119B2 (ja) * 1994-11-01 2004-10-13 株式会社ルネサステクノロジ 半導体記憶装置
KR100885181B1 (ko) * 2007-02-06 2009-02-23 삼성전자주식회사 그룹 맵핑 동작을 수행하는 메모리 시스템 및 그것의어드레스 맵핑 방법
KR100852193B1 (ko) 2007-05-02 2008-08-13 삼성전자주식회사 오류 제어 코드 장치 및 그 방법
KR102514388B1 (ko) 2016-03-25 2023-03-28 에스케이하이닉스 주식회사 메모리 시스템 및 메모리 시스템의 동작 방법
US11604690B2 (en) * 2016-07-24 2023-03-14 Pure Storage, Inc. Online failure span determination
US10545823B2 (en) * 2017-10-13 2020-01-28 Cisco Technology, Inc. Accelerating erasure code replication in distributed systems
CN109669800B (zh) * 2017-10-13 2023-10-20 爱思开海力士有限公司 用于写入路径错误的高效数据恢复
KR102370278B1 (ko) * 2017-11-30 2022-03-07 에스케이하이닉스 주식회사 메모리 컨트롤러, 이를 포함하는 메모리 시스템, 및 그의 동작방법
KR20210055514A (ko) * 2019-11-07 2021-05-17 에스케이하이닉스 주식회사 스토리지 장치 및 그 동작 방법

Also Published As

Publication number Publication date
US11281381B2 (en) 2022-03-22
CN112711377B (zh) 2023-11-03
US20210124503A1 (en) 2021-04-29
CN112711377A (zh) 2021-04-27

Similar Documents

Publication Publication Date Title
US10466902B2 (en) Memory system and operation method for the same
CN108121669B (zh) 存储器系统及其操作方法
US10366761B2 (en) Memory system and operating method thereof
US10657049B2 (en) Memory system and operating method thereof
CN108121665B (zh) 存储器系统及其操作方法
US10564879B2 (en) Memory system and operation method for storing and merging data with different unit sizes
US10838858B2 (en) Controller and operating method of the same
US10452431B2 (en) Data processing system and operating method thereof
US10553295B2 (en) Memory system which stores meta-data and meta-log, and operating method thereof
US20190087128A1 (en) Memory system and operating method of the same
CN109390003B (zh) 存储器系统及其操作方法
US10747469B2 (en) Memory system and operating method of the same
US11861223B2 (en) Memory controller and storage device for scheduling addresses
US11016881B2 (en) Memory system and operating method thereof
US20190347197A1 (en) Memory system and operating method thereof
US20180059937A1 (en) Memory system and operating method thereof
US20190347193A1 (en) Memory system and operating method thereof
KR20180114649A (ko) 복수의 프로세서를 포함하는 컨트롤러 및 컨트롤러의 동작방법 그리고 멀티 프로세서 시스템
US11288202B2 (en) Memory controller and method of operating the same
CN110716881B (zh) 存储器系统及其操作方法
US20190212936A1 (en) Memory system and operating method thereof
US11281381B2 (en) Storage node of distributed storage system and method of operating the same
CN108108122B (zh) 控制器和存储器系统及其操作方法
US10908836B2 (en) Memory system and operation method thereof
US20180277176A1 (en) Memory system and operating method thereof

Legal Events

Date Code Title Description
E902 Notification of reason for refusal