KR20160055723A - 버저닝된 메모리 구현 - Google Patents

버저닝된 메모리 구현 Download PDF

Info

Publication number
KR20160055723A
KR20160055723A KR1020157031258A KR20157031258A KR20160055723A KR 20160055723 A KR20160055723 A KR 20160055723A KR 1020157031258 A KR1020157031258 A KR 1020157031258A KR 20157031258 A KR20157031258 A KR 20157031258A KR 20160055723 A KR20160055723 A KR 20160055723A
Authority
KR
South Korea
Prior art keywords
memory
block
version
sub
blocks
Prior art date
Application number
KR1020157031258A
Other languages
English (en)
Other versions
KR102031606B1 (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 휴렛 팩커드 엔터프라이즈 디벨롭먼트 엘피
Publication of KR20160055723A publication Critical patent/KR20160055723A/ko
Application granted granted Critical
Publication of KR102031606B1 publication Critical patent/KR102031606B1/ko

Links

Images

Classifications

    • 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
    • G06F11/1448Management of the data involved in backup or backup restore
    • G06F11/1451Management of the data involved in backup or backup restore by selection of backup contents
    • 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/1072Adding 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 multilevel 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/14Error detection or correction of the data by redundancy in operation
    • G06F11/1402Saving, restoring, recovering or retrying
    • G06F11/1415Saving, restoring, recovering or retrying at system level
    • G06F11/1435Saving, restoring, recovering or retrying at system level using file system or storage system metadata
    • 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/1471Saving, restoring, recovering or retrying involving logging of persistent data for recovery
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C29/00Checking stores for correct operation ; Subsequent repair; Testing stores during standby or offline operation
    • G11C29/52Protection of memory contents; Detection of errors in memory contents
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2201/00Indexing scheme relating to error detection, to error correction, and to monitoring
    • G06F2201/84Using snapshots, i.e. a logical point-in-time copy of the data
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/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/0628Interfaces specially adapted for storage systems making use of a particular technique

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Quality & Reliability (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Library & Information Science (AREA)
  • Retry When Errors Occur (AREA)
  • Techniques For Improving Reliability Of Storages (AREA)

Abstract

하나의 예에 따르면, 버저닝된 메모리 구현은 전역 메모리 버전을 블록 메모리 버전과 비교하는 것을 포함할 수 있다. 전역 메모리 버전은 복수의 메모리 블록들에 대응할 수 있고, 블록 메모리 버전은 복수의 메모리 블록들 중 하나에 대응한다. 복수의 메모리 블록들 중 하나 중의 복수의 서브블록들에 대응하는 서브블록 비트 벡터(SBV)가 평가될 수 있다. 이 비교 및 평가에 기초하여, 복수의 메모리 블록들 중 하나 중의 복수의 서브블록들 중 하나의 서브블록의 셀 내의 어떤 레벨에 체크포인트 데이터가 저장되는지에 대한 결정이 행해질 수 있다.

Description

버저닝된 메모리 구현{VERSIONED MEMORY IMPLEMENTATION}
체크포인팅(checkpointing)은 컴퓨팅 시스템들에서의 결함 허용(fault-tolerance) 기술이다. 체크포인팅은 전형적으로 메모리 버전을 생성하기 위해 메모리를 제 2 장소에 복사(copy)함으로써 현재 애플리케이션 또는 시스템 상태의 스냅샷(snapshot)을 저장하고 결함이 있는 경우 이 애플리케이션을 재실행하기 위해 이 메모리 버전을 이후의 시간에 사용하는 것을 포함한다. 예를 들어, 계산 프로세스 동안 다양한 포인트들에 계산된 데이터의 메모리 버전들을 저장하기 위해 체크포인트들을 사용할 수 있다. 애플리케이션 또는 시스템에 고장이 난 경우, 계산 프로세스는 손상되고/되거나 일관되지 않은 결과들을 발생시킬 수 있다. 계산 프로세스들을 재시작해야만 하는 것을 방지하기 위해, 애플리케이션 또는 시스템 고장 이전의 최신 체크포인트에 대응하는 메모리 버전이 복원(restore)되고, 계산 프로세스는 복원된 체크포인트로부터 계속된다.
본 발명의 특징들은 예로서 설명되고 다음의 도면(들)으로 제한되지 않고, 도면에서 동일한 번호들은 동일한 요소들을 나타낸다.
도 1은 본 발명의 하나의 예에 따라, 1 비트 셀(이하 "2LC"), 2 비트 셀(이하 "4LC") 및 3 비트 셀(이하 "8LC") 비휘발성 메모리(non-volatile memory; NVM) 구성들의 예들을 도시하는 도면이다.
도 2는 본 발명의 하나의 예에 따라, 2LC NVM을 사용하여 버저닝된(versioned) 메모리를 도시하는 도면이다.
도 3은 본 발명의 하나의 예에 따라, 미세 입도(fine-grained) 데이터 업데이트들로 버저닝된 메모리에 대한 체크포인팅 구조의 블록도를 도시하는 도면이다.
도 4는 본 발명의 하나의 예에 따라, 버저닝된 메모리 구현 장치를 도시하는 도면이다.
도 5a 내지 도 5e는 본 발명의 하나의 예에 따라, 도 3의 체크포인팅 구성을 사용하여 계산들 동안의 메모리 상태들의 블록도를 도시하는 도면들이다.
도 6은 본 발명의 하나의 예에 따라, 도 5a 내지 도 5e의 계산들을 수행하기 위해 도 4의 버저닝된 메모리 구현 장치에 대한 동작 시퀀스(sequence)들의 흐름도를 도시하는 도면이다.
도 7은 본 발명의 하나의 예에 따라, 에러로부터 복구하기 위한 도 4의 버저닝된 메모리 구현 장치에 대한 동작 시퀀스들의 흐름도를 도시하는 도면이다.
도 8은 본 발명의 하나의 예에 따라, 판독 동작을 수행하기 위한 도 4의 버저닝된 메모리 구현 장치에 대한 동작 시퀀스들의 흐름도를 도시하는 도면이다.
도 9는 본 발명의 하나의 예에 따라, 기록 동작을 수행하기 위한 도 4의 버저닝된 메모리 구현 장치에 대한 동작 시퀀스들의 흐름도를 도시하는 도면이다.
도 10은 본 발명의 하나의 예에 따라, 버저닝된 메모리 구현을 위한 방법의 흐름도를 도시하는 도면이다.
도 11은 본 발명의 하나의 예에 따라, 버저닝된 메모리 구현을 위한 방법의 흐름도를 더 세부적으로 도시하는 도면이다.
도 12는 본 발명의 하나의 예에 따라, 컴퓨터 시스템을 도시하는 도면이다.
간소화 및 실례의 목적들을 위해, 본 발명은 주로 예들을 언급함으로써 설명된다. 다음의 설명에서, 많은 특정한 세부사항들은 본 발명의 철저한 이해를 제공하기 위해서 진술된다. 그러나 본 발명이 이 특정한 세부사항들로 제한되지 않고 실시될 수 있음은 즉시 자명할 것이다. 다른 경우들에서, 일부 방법들 및 구조들은 본 발명을 불필요하게 모호하게 하지 않도록 상세하게 설명되지 않았다.
본 명세서 전체에 걸쳐, 용어들 "a" 및 "an"은 특정한 요소들 중 적어도 하나를 표기하도록 의도된다. 본원에서 사용되는 바와 같이, 용어 "포함한다"는 포함하지만 이로 제한되지 않는 것을 의미하고, 용어 "포함하는"은 포함하고 있지만 이로 제한되지 않고 있는 것을 의미한다. 용어 "에 기초하여"는 적어도 부분적으로 기초하는 것을 의미한다.
아래에서 더 상세하게 설명되는 바와 같이, 본원에 개시되는 버저닝된 메모리 구현 장치, 버저닝된 메모리 구현을 위한 방법 및 비일시적 컴퓨터 판독 가능 매체는 일반적으로 소프트웨어(즉, 머신 판독 가능 명령어들)가 메모리 버전을 생성하기 위해 데이터를 2차 장소에 신속하게 복사하고 데이터를 메모리 버전으로부터 현재의 버전으로 신속하게 복원하는 것이 가능한 버저닝된 메모리 시스템의 구현에 관한 것이다.
버저닝된 메모리에 관하여, 도 1은 본 발명의 하나의 예에 따라, 1 비트 셀(이하 "2LC"), 2 비트 셀(이하 "4LC") 및 3 비트 셀(이하 "8LC") 비휘발성 메모리(non-volatile memory; NVM) 구성들의 예들을 각각 100, 102 및 104에 도시한다. 2LC(100)는 셀당 하나의 비트를 저장하고 불(Boolean) '0'(예를 들어, 상태 S0)을 표현하는 제 1 범위의 레지스턴스(resistance)(예를 들어, 낮은 레지스턴스 값들) 및 불 '1'(예를 들어, 상태 S1)를 표현하는 제 2 범위의 레지스턴스(예를 들어, 높은 레지스턴스 값들)를 사용한다. 4LC(102) 및 8LC(104)는 더 많은 정보를 저장하고 이에 의해 더 높은 밀도의 메모리를 만들기 위해 셀들을 더 작은 레지스턴스 범위들로 분할하는 것에 기초할 수 있다. 예를 들어, 4LC(102)는 셀당 2 비트들(예를 들어, 비트들 b1 및 b0를 표현하는 4개의 레지스턴스의 범위들)을 저장할 수 있고 8LC(104)는 셀당 3 비트들(예를 들어, 비트들 b2, b1 및 b0를 표현하는 8개의 레지스턴스의 범위들)을 저장할 수 있다. 4LC(102) 및 8LC(104)는 셀 레지스턴스의 더 미세한 입도의 양자화를 사용함으로써 다수의 비트들을 저장할 수 있다. 그러므로, 4LC(102) 및 8LC(104)는 동일한 수의 NVM 셀들에 더 많은 비트들이 저장되므로, 메모리 밀도를 증가시키는 데 사용될 수 있다.
도 2에 관하여 더 상세하게 설명되는 바와 같이, 본원에 개시되는 버저닝된 메모리 구현은 2LC NVM에서 버저닝 능력의 구현을 제공한다. 예를 들어, 2LC NVM 메모리 뱅크(memory bank)는 2개의 세트들(예를 들어, 짝수 및 홀수 행들)로 분해될 수 있다. 2개의 행들의 세트들은 2LC NVM에서 버저닝 능력을 구현하는 데 사용될 수 있다. 본원에서 더 상세하게 설명되는 바와 같이, 데이터는 행 버퍼(row buffer)를 통해 복사되고 따라서 외부 메모리 제어기에 데이터를 전송하는 것과 연관되는 지연들이 감소될 수 있다. 버저닝 능력은 또한 상이한 메모리 뱅크들 내의 2개의 행들(예를 들어, 메모리 뱅크 내에 하나의 행, 그리고 상이한 메모리 뱅크 내에 공동 위치되는 행)이 쌍을 이룸으로써 2LC NVM에서 구현될 수 있다.
본원에서 개시되는 버저닝된 메모리 구현은 또한 2LC NVM 및 4LC NVM 모두에 대한 미세 입도 데이터 업데이트들을 제공할 수 있다. 미세 입도 데이터 업데이트들은 예를 들어, NVM의 성능 및 에너지 효율의 개선과 같은 이점들을 제공할 수 있다. 하나의 예에 따르면, 미세 입도 데이터 업데이트들은 이후에 서브블록(subblock)으로 표기되는 메모리 블록의 일부를 선택적으로 변경함으로써 제공될 수 있다. 미세 입도 데이터 업데이트들은 어떤 서브블록들이 변경되는지를 추적하기 위해 서브블록-비트-벡터(subblock-bit-vector; SBV)들을 사용함으로써, 그리고 연관되는 판독, 기록 및 다른 동작들을 위해 서브블록들 및 SBV들을 사용함으로써 구현될 수 있다. 예를 들어, SBV들은 각각의 서브블록들에 대응하는 비트들을 포함하고 이 비트들로의 변화들에 기초하여 어떤 서브블록들이 변경되는지를 더 표시할 수 있다. 본원에 개시되는 버저닝된 메모리 구현 기술들은 또한 예를 들어, NVM에서 고속 체크포인팅 및 고속 데이터 업데이트들을 구현하는 데 사용될 수 있다.
도 3 내지 도 6, 도 8, 도 10 및 도 11을 참조하여 더 상세하게 설명되는 바와 같이, 본원에서 개시되는 버저닝된 메모리 구현은 체크포인팅 구성을 위해 블록(예를 들어, 블록 n) 및 이 블록의 서브블록(예를 들어, 서브블록 k)으로부터 판독하는 데 사용될 수 있다. 체크포인팅 구성은 복수의 메모리 블록들을 포함할 수 있고, 여기서 각각의 메모리 블록은 개별 서브블록이 변경되는지의 여부를 추적하기 위해 복수의 서브블록들 및 대응하는 SBV를 포함한다. 블록으로부터의 판독은 블록 버전(block version; BV)을 전역 버전(global version; GV)과 비교하는 것을 포함할 수 있다. BV는 메모리 블록과 연관될 수 있고 각각의 메모리 블록의 버전 번호(예를 들어, 일련 버전번호)를 표현할 수 있다. GV는 메모리 블록 및 다른 메모리 블록들에 저장되는 데이터의 마지막 체크포인팅된 버전을 표현하는 전역 메모리 버전 번호(예를 들어, 일련 버전 번호)를 저장할 수 있다. 체크포인팅 구성은 제 1 레벨(예를 들어, 작업 버전(working version; WV)) 및 제 2 레벨(예를 들어, 체크포인트 버전(checkpoint version; CV))을 포함할 수 있다. 블록으로부터 판독하는 것과 관련하여, BV(n)≤GV이면, 이 판독은 WV로부터 수행될 수 있다. 그와는 달리, BV(n) > GV의 경우, 판독은 본원에서 설명되는 바와 같이 판독 동작과 연관되는 고장 절차에 기초하여 WV 또는 CV로부터 수행될 수 있다.
도 3 내지 도 6 및 도 9 내지 도 11을 참조하여 더 상세하게 설명되는 바와 같이, 본원에 개시되는 버저닝된 메모리 구현은 블록(예를 들어, 블록 n) 및 이 블록의 서브블록(예를 들어, 서브블록 k)에 기록하는 데 사용될 수 있다. 예를 들어, BV(n) < GV이면, 이 기록은 k번째 WV 서브블록을 k번째 CV 서브블록에 복사하고 새로운 데이터를 k번째 WV 서브블록 내에 기록함으로써 서브블록에 제 1 기록으로서 수행될 수 있다. BV(n) = GV이면, 기록은 SBV를 평가하고 이 평가에 기초하여 새로운 데이터를 k번째 WV 서브블록에 기록함으로써 서브블록에 수행될 수 있다. BV(n) > GV이면, 기록은 본원에서 설명되는 바와 같이 기록 동작과 연관되는 고장 절차에 기초하여 서브블록에 수행될 수 있다.
도 3 내지 도 7에 관하여 더 상세하게 설명되는 바와 같이, 본원에서 개시되는 버저닝된 메모리 구현은 고장 복구에 대해 사용될 수 있다. 예를 들어, 고장으로부터의 복구는 GV를 감분(decrement)시키고, 감분된 GV를 가지는 체크포인팅 구성과 연관되는 이전의 반복, 트랜잭션(transaction) 또는 프로그램을 재실행하고, 그리고 GV를 전진(advance)시키기 전에 어떤 BV가 GV보다 더 큰지를 결정하도록 모든 BV들을 스캐닝(scanning)하고, CV를 WV에 복사하고, 그리고 BV를 GV와 동일하게 세팅하는 것을 포함할 수 있다.
본원에서 개시되는 버저닝된 메모리 구현은 메모리 시스템들에서 버저닝 능력들을 필요로 하는 애플리케이션들과 함께 사용될 수 있다. 예를 들어, 본원에서 개시되는 버저닝된 메모리 구현은 NVM(예를 들어, NV-힙스(Heaps), MNEMOSYNE, 일관적이고 내구성 있는 데이터 구조(consistent and durable data structure; CDDS), 고장 원자적 msync) 내의 지속적 데이터 구조들, NVM 파일 시스템들(예를 들어, 바이트 어드레스 가능 지속 파일 시스템(byte-addressable persistent file system; BPFS)) 그리고 메모리 내 체크포인팅에 대한 원자적이고 내구성 있는 데이터 업데이트들에 적용 가능할 수 있다.
본원에서 개시되는 버저닝된 메모리 구현은 컴퓨팅 시스템들에서의 체크포인팅을 제공할 수 있고, NVM에 일관되고 내구성 있는 데이터 객체들을 더 제공할 수 있다. 하나의 예에 따르면, 체크포인트 동작들은 버저닝된 메모리 구현 장치, 버저닝된 메모리 구현을 위한 방법 및/또는 내부에 버저닝된 메모리 구현을 위해 머신 판독 가능 명령어들을 저장하는 비일시적 컴퓨터 판독 가능 매체에 의해 구현될 수 있다. 하나의 예에 따르면, 버저닝된 메모리 구현은 전역 메모리 버전을 블록 메모리 버전과 비교하는 것을 포함할 수 있다. 전역 메모리 버전은 복수의 메모리 블록들에 대응할 수 있고, 블록 메모리 버전은 복수의 메모리 블록들 중 하나에 대응할 수 있다. 복수의 메모리 블록들 중 하나 중의 복수의 서브블록들에 대응하는 SBV가 평가될 수 있다. 이 비교 및 평가에 기초하여, 복수의 메모리 블록들 중 하나 중의 복수의 서브블록들 중 하나의 서브블록의 셀 내의 어떤 레벨이 체크포인트 데이터를 저장하는지에 대한 결정이 행해질 수 있다.
도 2는 본 발명의 하나의 예에 따라, 2LC NVM을 사용하여 버저닝된 메모리를 도시한다. 도 2의 메모리 뱅크(200)는 예를 들어, 2k 행들을 포함할 수 있고, 여기서 k는 0보다 더 큰 정수이다. 2k 행들은 k 행들의 2 세트들로 분할될 수 있고, 버저닝된 메모리에서 기수의 행들은 체크포인트 버전들(CV들)로 지정되고 우수의 행들은 작업 버전들(WS들)로 지정된다. 대안으로, 버저닝된 메모리에서 기수의 행들은 WV들로서 지정되고 우수의 행들은 CV들로서 지정될 수 있다. WV로부터 CV로의 데이터 복사에 대하여, WV(예를 들어, 행 2)로부터 CV(예를 들어, 행 3)로의 데이터플로우의 예는 행 버퍼(202)를 통한 데이터 복사를 도시한다. 데이터 복사는 또한 단일 메모리 뱅크(즉, 도 2에 도시되는 바와 같은)의 또는 상이한 메모리 뱅크들 내의 2개의 데이터 행들 사이의 매핑(mapping)에 기초하여 수행될 수 있다. 상이한 메모리 뱅크들의 경우, WV는 제 1 메모리 뱅크에서 행 x로서 지정될 수 있고 연관되는 CV는 제 2 메모리 뱅크에서 행 x로서 지정될 수 있다. 상이한 메모리 뱅크들의 예의 경우, WV에서 CV로의 데이터 복사는 메모리 뱅크들에 걸친 버스를 통한 실제 데이터 전송에 의해 수행될 수 있다. NVM의 4LC 능력(즉, 동일한 물리적 블록(N개의 2 비트 셀들이 있는)에서의 WV 및 CV(각각 N 비트들))에 의존하는 버저닝된 메모리와 비교해서, 2LC NVM을 사용하는 버저닝된 메모리는 아래에서 더 상세하게 설명되는 바와 같이 동일한 어드레싱 및 버전 관리 기술을 사용할 수 있다.
도 3은 본 발명의 하나의 예에 따라, 미세 입도 데이터 업데이트들로 버저닝된 메모리에 대한 체크포인팅 구성(300)의 블록도를 도시한다. 도 3에 도시되는 바와 같이, 메모리 블록(302)의 셀들은 셀당 2 비트인 도 1의 4LC NVM(즉, NVM 셀(102))을 사용하여 구현된다. 대안으로, 체크포인팅 구성(300)은 도 2를 참조하여 상술한 바와 같이 4LC NVM 대신 2LC NVM을 사용할 수 있다. 체크포인팅 구성(300)은 복수의 메모리 블록들(302)(주의: 도 3에 도시되는 2개의 메모리 블록들(302)(블록 0 및 블록 1))을 포함할 수 있고, 여기서 각각의 메모리 블록(302)은 개별 서브블록의 WV가 변경되는지의 여부를 추적하기 위해 복수의 서브블록들(304) 및 대응하는 서브블록-비트-벡터(SBV)(306)를 포함한다. 체크포인팅 구성(300)은 본원에서 기술되는 바와 같이 서브블록(304) 및 연관되는 SBV(306)를 사용하여 연관되는 판독, 기록 및 다른 동작들을 수행하고 전역 버전(308) 및 블록 버전(BV)(310)의 평가를 수행할 수 있다.
GV(308)는 메모리 블록(302) 및 다른 메모리 블록들(예를 들어 블록 1, 그리고 다른 메모리 블록들은 도시되지 않는다)에 대응할 수 있다. GV(308)는 메모리 블록(302) 및 다른 메모리 블록들에 저장되는 데이터의 마지막 체크포인팅된 버전을 표현하는 전역 메모리 버전 번호(예를 들어, 일련 버전 번호)를 저장할 수 있다. GV(308)는 GV(308)가 메모리 내에서 시스템 제어 동작들의 일부로서 관리, 업데이트 및/또는 사용되도록 시스템 상태의 일부일 수 있다. 예를 들어, GV(308)는 마지막 체크포인트가 언제 발생했는지를 표기하는 데 사용될 수 있다. 체크포인트는 메모리의 동작 중의 포인트(point)로서 지정될 수 있고, 이 포인트에서 에러들, 고장들 및/또는 손상으로부터의 복구에 사용되는 체크포인트 데이터가 메모리 내에 존속한다. GV(308)는 새로운 체크포인트가 언제 저장될 수 있는지를 표시하기 위해 메모리 블록(302)을 사용하는 계산들을 수행하는 애플리케이션으로부터의 체크포인팅 명령어에 기초하여 때때로(예를 들어, 주기적으로 그리고/또는 비주기적으로) 업데이트될 수 있다. 추가로 또는 대안으로, 체크포인트의 생성을 트리거(trigger)하는 임의의 다른 주기 및/또는 비주기 방법이 사용될 수 있다. 예를 들어, 체크포인트는 모든 판독 및/또는 기록 동작 이후에 생성될 수 있거나 체크포인트는 시간의 임계량(예를 들어, 1분, 15분, 한 시간 등) 이후에 생성될 수 있다. 추가로 또는 대안으로, 체크포인트는 메모리에 저장되어 있는 수집된 애플리케이션 데이터가 자가 일관적(self-consistent)일 때 생성될 수 있다. 예를 들어, 자가 일관적인 방법의 경우, 체크포인트는 CV가 일관된 상태에서 시작하여, 일시적으로 교란(disrupting)하고 나서 변하지 않은 것들을 애플리케이션 데이터로 복원하고, 데이터를 체크포인팅하고, 이 데이터에 대한 업데이트들을 반영하는 새로운 일관된 CV를 생성하고, 그리고 필요한 경우 일시적으로 교란하고 나서 변하지 않은 것들을 애플리케이션 데이터로 복원하는 단계로 회귀함으로써 생성될 수 있다. 메모리 블록(302)과 관련하여 단일 GV(308)가 도시될지라도, 예를 들어, 상이한 메모리 영역들에 대한 버전 번호들을 표현하기 위해 다수의 GV들(308)이 사용될 수 있다(예를 들어, 상이한 GV는 예를 들어, 상이한 프로세스들을 위한, 하나 이상의 가상 머신들을 위한, 기타 등등을 위한 것과 같은 하나 이상의 가상 어드레스 공간들에 사용될 수 있다). 더욱이, 동일하거나, 더 적거나 또는 더 많은 레벨들을 가지는 메모리 셀들을 더 적거나 더 많이 가지는 임의의 수의 메모리 블록들은 GV(308) 또는 상이한 각각의 GV들과 연관될 수 있다.
BV(310)는 메모리 블록(302)과 연관될 수 있고 각각의 메모리 블록(302)의 버전 번호(예를 들어, 일련 버전 번호)를 표현할 수 있다. 예를 들어, 도 3의 BV0은 블록 0을 표현한다. BV(310)는 별개의 메모리 객체 내에 메타데이터(metadata)로서 저장될 수 있고, 여기서 메모리 객체는 데이터(예를 들어, 버전 번호)를 저장하는 하나 이상의 메모리 블록들 및/또는 장소들일 수 있다. 상이한 메모리 블록들과 연관되는 BV들은 동일한 메모리 객체 내에 저장될 수 있다.
체크포인팅 구성(300)의 경우, 각각의 서브블록(304)은 2개의 2 비트 셀들(312)을 포함할 수 있고, 이 중 하나가 참조 번호(312)로 도시된다. 그러나, 다른 예들에서, 각각의 서브블록(304)은 임의의 수의 2 비트 셀들을 포함할 수 있다. 2 비트 셀(312)은 제 1 레벨(314)(예를 들어, 작업 버전(WV)) 및 제 2 레벨(316)(예를 들어, 체크포인트 버전(CV))을 가지는 셀당 2 비트의 4LC(예를 들어, 도 1의 NVM 셀(102))일 수 있다. 4LC(312)가 셀당 2 비트의 4LC로서 도시될지라도, 본원에서 개시되는 예들은 셀당 2 이상의 비트들을 가지는 4LC들(예를 들어, 8LC(104))과 관련하여 구현될 수 있다. 더욱이, 도시된 예에서, 제 1 레벨(314)이 WV에 의해 표현되고 제 2 레벨(316)이 CV에 의해 표현되지만, WV 및/또는 CV를 표현하기 위해 다른 레벨들이 사용될 수 있다. 예를 들어, 레벨들은 이 반대로 될 수 있다.
체크포인팅 구성(300)의 경우, GV(308)와 비교되는 BV(310)의 값 및 서브블록(304)에 대응하는 SBV(306)의 비트의 값은 특정한 서브블록(304) 내에 저장되는 데이터가 수정되었는지를 표시하기 위해 사용될 수 있다. 예를 들어, BV(310)는 GV(308)와 비교될 수 있고, SBV(306)의 비트들은 대응하는 서브블록(304)의 WV 또는 CV에 저장되는 데이터가 체크포인팅된 데이터를 표현하는지를 결정하기 위해 평가될 수 있다.
GV(308) 및 BV(310)는 예를 들어 일련 버전 번호들을 표현하기 위해 64 비트 카운터(counter)들을 사용하여 구현될 수 있다. GV(308) 및/또는 BV(310)가 자체의 최대 값 이상으로 증분되면, 이것들은 0으로 낮아진다.
블록(예를 들어, 4kB)을 데이터 기록들의 단위로 사용하는 버저닝된 메모리 설계에 비해, 체크포인팅 구성(300)에 의해 표현되는 버저닝된 메모리는 메모리 어레이가 내부에 여전히 더 큰(예를 들어, 4kB) 행 버퍼를 사용할지라도 더 세밀한 기록 입도(write granularity)(예를 들어, 64B)를 제공할 수 있다. 도 3의 예에서, 미세 입도의 데이터 업데이트들은 블록들(302)(예를 들어, 4kB 블록들)을 서브블록들(304)(예를 들어, 각각 64B인 64 서브블록들)로 분할함으로써 제공될 수 있다. 개별 서브블록(304)이 변경되는지를 추적하기 위해, SBV(306)는 예를 들어, 서브블록(304)당 1 비트(예를 들어, 4kB 블록(302)당 64B 서브블록들(304)이 있는 64 비트 SBV)를 포함할 수 있다. 도 3의 예에서, 블록들(302)은 8 비트 블록들로서 도시되고, 서브블록들(304)은 2 비트 서브블록들로서 도시되고 SBV들(306)은 4 비트 SBV들로서 도시된다.
도 4는 하나의 예에 따라, 버저닝된 메모리 구현 장치를 도시한다. 도 4를 참조하면, 장치(400)는 체크포인팅 구성(300)에 의해 도시되는 바와 같이 2LC 또는 4LC 버저닝된 NVM을 위해 GV(308)를 BV(310)와 비교하는 버저닝 모듈(402)을 포함하는 것으로 도시된다. 각각의 체크포인팅 구성(300)에 대한 GV(308)는 상이한 메모리 영역들과 연관되는 다수의 GV들을 포함할 수 있는 전역 버전 데이터베이스(404)에 저장될 수 있다. 각 메모리 블록(302)에 대한 BV들(310)은 블록 버전 데이터베이스(406)에 저장될 수 있다. 더욱이, SBV들(306)은 서브블록 비트 벡터 데이터베이스(408)에 저장될 수 있다. 대안으로 또는 추가로, 각 체크포인팅 구성(300)에 대한 GV(308), 각 메모리 블록(302)에 대한 BV들(310) 및/또는 SBV들(306)은 체크포인팅 구성(300)(또는 2LC NVM)에 의해 도시되는 바와 같이 NVM에 데이터와 함께 저장될 수 있다. 메모리 판독 모듈(410)은 각각의 메모리 블록(302)의 GV(308) 및 BV(310)의 비교 그리고 적절한 서브블록(304)에 대응하는 SBV(306)의 비트의 값의 평가에 기초하여 메모리 블록(302) 및/또는 각각의 서브블록(304)의 CV(316) 또는 WB(314)로부터 판독할 수 있다. 메모리 기록 모듈(412)은 각각의 메모리 블록(302)의 GV(308) 및 BV(310)의 비교 그리고 적절한 서브블록(304)에 대응하는 SBV(306)의 비트의 값의 평가에 기초하여 메모리 블록(302) 및/또는 각각의 서브블록(304)의 WV(314) 또는 CV(316)에 기록할 수 있다.
장치(400) 내에 다양한 다른 기능들을 수행하는 이 장치(400)의 모듈들 및 다른 구성요소들은 비일시적 컴퓨터 판독가능 매체 상에 저장되는 머신 판독 가능 명령어들을 포함할 수 있다. 추가로 또는 대안으로, 장치(400)의 모듈들 및 다른 구성요소들은 하드웨어 또는 머신 판독 가능 명령어들 또는 하드웨어의 결합을 포함할 수 있다. 예를 들어, 장치(400)는 장치(400)의 다양한 동작들을 구현하기 위해 메모리 제어기 회로를 포함할 수 있다.
버저닝 모듈(402)은 SBV(306), GV(308) 및 BV(310)의 평가 및/또는 이것들로의 변경들과 같은 동작들을 수행할 수 있다. 버저닝 모듈(402)은 체크포인트가 생성되어야 하는지를 결정할 수 있다. 예를 들어, 버저닝 모듈(402)은 애플리케이션으로부터 체크포인트를 생성하라는 요청을 수신하고 수신되는 요청에 기초하여 체크포인트를 생성할 수 있다. 예를 들어, 버저닝 모듈(402)은 모든 판독 및/또는 기록 동작 후에 체크포인트를 생성할 수 있다.
도 5a 내지 도 5e는 본 발명의 하나에 예에 따라, 체크포인팅 구성(300)을 사용하는 계산들 동안 메모리 상태들(500, 502, 504, 506 및 508)의 블록도들을 각각 도시한다. 500에서 502까지, 502에서 504까지, 504에서 506까지, 그리고 506에서 508까지의 메모리 상태들의 예는 시간을 통한 진행을 도시하고 상이한 메모리 상태들 사이의 지속기간들은 동일하거나 동일하지 않을 수 있다.
도 5a를 참조하면, 메모리 블록(302)의 초기 메모리 상태(500)는 0으로 세팅되어 있고 메모리 셀들(예를 들어, 메모리 셀(312))의 WV들(314)이 [00 00 00 00]의 예의 데이터를 저장하는 GV(308) 및 BV(310)에 의해 표현될 수 있다. 도 5a의 예에서, 메모리 셀들의 CV들(316)은 [11 11 11 11]의 예의 데이터를 저장한다.
도 5b를 참조하면, 메모리 상태(502)는 실행 기간의 초기를 표현할 수 있고 이 기간 동안 GV(308)는 실행 기간의 초기에 응답하여 1로 증분(increment)된다. 메모리 상태(502)의 경우, CV들(316)은 [11 11 11 11]로 남아 있을 수 있다. 체크포인팅 구성(300)의 이전의 반복이 서브블록들(304)의 일부를 변경한 경우 SBV(306) 내의 일부 비트들이 1(예를 들어, 도 5b에 도시되는 바와 같이, [0 0 1 1])일 수 있음이 주목되어야 한다. 그러나, SBV들은 연관되는 BV(310)가 GV(308)보다 더 작으면 모두 0들인 것으로 취급될 수 있다.
도 5c를 참조하면, 메모리 상태(504)는 [11]의 예의 데이터 값을 메모리 블록(302)(예를 들어, 블록 0)의 제 2 서브블록(510)의 WV들(314)에 기록하는 제 1 기록 동작의 결과를 표현할 수 있다. 메모리 상태(504)에 대응하는 기록 동작의 경우, SBV(306)(예를 들어, SBV0)에 대응하는 기록 동작의 경우, SBV(306)(예를 들어, SBV0) 내의 모든 비트들은 메모리 블록(302)의 제 2 서브블록(510)에 대응하는 기록 동작에 기초하여 업데이트될 수 있다(예를 들어, [0 0 1 1]에서 [0 1 0 0]으로). 기록 동작이 개시될 때 GV(308)가 이전의 메모리 상태(502)에서 BV(310)보다 더 크므로, 메모리 상태(502) 동안 제 2 서브블록(510)의 WV들(314)에 저장되는 데이터는 메모리 상태(504)에서 나타나는 바와 같이 제 2 서브블록(510)의 CV들(316)에 기록될 수 있다. 메모리 상태(502)에서 개시되는 기록 동작으로부터의 새로운 데이터는 메모리 상태(504)에서 나타나는 바와 같이 제 2 서브블록(510)의 WV들(314)에 기록될 수 있다. 제 2 서브블록(510)의 CV들(316) 및 제 1, 제 3 및 제 4 서브블록들의 WV들(314)은 함께 체크포인팅된 데이터를 저장할 수 있고(예를 들어, [00 00 00 00]), WV들(314)은 새로 기록된 데이터를 저장할 수 있다(예를 들어, [00 11 00 00]). 기록 동작 동안, BV(310)는 GV(308)의 값으로 세팅되고, 이에 의해 다음 체크포인트(GV(308) 및 BV(310) 비교에 의해 표시되는 바와 같은) 전에 발생하는 후속 기록들이 체크포인팅된 데이터(512)(예를 들어, 음영이 있는 데이터)를 중첩 기록(overwrite)하는 것이 방지된다. 더욱이, 블록 0 내의 4개의 서브블록들 모두의 CV들(316)을 [00]으로 업데이트하는 대신, 서브블록(304)(예를 들어, 제 2 서브블록(510))을 선택적으로 업데이트함으로써 제공되는 미세 입도 데이터 업데이트들은 에너지 및 기록 대역폭 사용량의 감소를 제공하고 체크포인팅 구성(300)에 의해 표현되는 버저닝된 메모리에 대한 내구성의 증가를 제공한다.
도 5d를 참조하면, 메모리 상태(506)는 메모리 블록(302)(즉, 블록 0)의 제 3 서브블록(514)의 WV들(314)에 [11]의 예의 데이터 값을 기록하는 제 2 기록 동작의 결과를 표현할 수 있다. 메모리 상태(506)의 경우, BV(310)(예를 들어, BV0)가 이미 GV(308)와 동일하므로 SBV(306)(예를 들어, SBV0) 내의 하나의 비트는 업데이트될 수 있다(즉, [0 1 0 0]에서 [0 1 1 0]으로). 메모리 상태(504) 동안 제 3 서브블록(514)의 WV들(314)에 저장되는 데이터는 메모리 상태(506)에서 나타나는 바와 같이 제 3 서브블록(514)의 CV들(316)에 기록될 수 있다. 기록 동작으로부터의 새로운 데이터는 메모리 상태(506)에서 나타나는 바와 같이 제 3 서브블록(514)의 WV들(314)에 기록될 수 있다. 제 2 및 제 3 서브블록들의 CV들(316) 및 제 1 및 제 4 서브블록들의 WV들(314)은 함께 체크포인팅된 데이터(512)를 저장할 수 있고(예를 들어, [00 00 00 00]) WV들(314)은 새로 기록된 데이터를 저장할 수 있다(예를 들어, [00 11 11 00]). 기록 동작 중에, BV(310)는 GV(308)의 값으로 세팅되므로, 이것은 다음 체크포인트(GV(308) 및 BV(310) 비교에 의해 표시되는 바와 같은) 전에 발생하는 후속 기록들이 체크포인팅된 데이터(512)를 중복 기록하는 것을 방지한다.
도 5e를 참조하면, 메모리 상태(508)는 체크포인팅 동작의 결과를 표현할 수 있다. 도 5e의 체크포인팅 동작은 도 5d의 실행 기간의 말에 발생할 수 있다. 그러나, 체크포인팅 동작은 실행 기간 동안의 어느 한 지점에서 발생할 수 있다(예를 들어, 중간 계산이 완료된 후에). 체크포인팅 동작은 GV(308)를 2의 값으로 증분시킬 수 있다. 더욱이, SBV(306) 내에 저장되는 비트들은 BV들(예를 들어, BV(310))이 GV(308)보다 더 낮을 때 무시될 수 있다(즉, 모두 0인 것으로 취급될 수 있다). 체크포인팅 동작 바로 전에 WV들(314)에 저장된 데이터는 가장 최근의 데이터(예를 들어, 계산 중에 기록되는 데이터)를 표현할 수 있다. 이에 따라, GV(308)가 BV(310)보다 더 크면, 체크포인팅된 데이터(512)는 WV들(314)에 의해 표현될 수 있다. CV들(316)은 이전의 체크포인트로부터 지난 데이터를 저장할 수 있다. 체크포인팅된 동작에서 사용되는 메모리 수정들은 GV(308)를 업데이트할 수 있다.
도 6은 본 발명의 하나의 예에 따라, 도 5a 내지 도 5e의 계산들을 수행하기 위해 도 4의 버저닝된 메모리 구현 장치(400)에 대한 동작 시퀀스들의 흐름도(600)를 도시한다. 도 6을 참조하면, 원 안의 참조 번호들은 실행 기간 동안 다양한 포인트들에서의 도 5a 내지 도 5e의 메모리 상태들을 표기할 수 있다. 동작 시퀀스(600)는 블록 604에서 시작할 수 있고, 블록(604) 전에, 메모리 블록(302)(도 3을 참조할 것)은 체크포인팅이 발생하지 않은 도 5a의 메모리 상태(500)에 있을 수 있다. 체크포인팅이 아직 발생하지 않았기 때문에, 도 5a의 GV(308) 및 BV(310)는 0이다.
블록 602에서, 버저닝 모듈(402)은 GV(308) 및 BV(310)를 초기화(initialize)할 수 있다. 도 5a의 메모리 상태(500)에서, GV(308) 및 BV(310)는 0으로 세팅될 수 있으나, 임의의 다른 값이 사용될 수 있다.
블록 604에서, 버저닝 모듈(402)은 GV(308)를 증분시킬 수 있다. GV(308)를 증분시킴으로써, 메모리 블록(302)으로의 후속 기록 동작(예를 들어, 메모리 상태(504))은 특정한 서브블록(304)(예를 들어, 제 2 서브블록(510))의 WV(314)에 저장되는 데이터가 대응하는 CV(316) 내에 체크포인트 데이터(512)로서 저장되도록 한다. 판독 및/또는 기록 동작들 이전에 증분된 GV(308)를 표현하는 메모리 상태는 도 5b의 예의 메모리 상태(502)에 나타난다. 메모리 상태(502)에서, 버저닝 모듈(402)은 연관되는 BV(310)가 GV(308)보다 더 작으면 SBV들을 모두 0들인 것으로 취급할 수 있다.
블록 606에서, 버저닝된 메모리 구현 장치(400)는 메모리 블록(302)의 서브블록(304)에 요청되는 판독 및/또는 기록 동작을 수행할 수 있다. 판독 동작들은 도 8과 관련하여 더 상세하게 논의된다. 기록 동작들은 도 9와 관련하여 더 상세하게 논의된다.
도 5c 및 블록 606을 참조하면, 제 1 기록 요청이 수신되고 프로세싱될 수 있다. 제 1 기록 요청의 결과는 도 5c의 메모리 상태(504)에서 나타난다. 제 1 기록 요청은 메모리 블록(302)(예를 들어, 블록 0)의 제 2 서브블록(510)의 WV들(314)에 기록될 새로운 데이터(예를 들어, [11])를 나타낼 수 있다. GV(308) 및 BV(310)의 비교에 기초하여, 버저닝 모듈(402)은 메모리 판독 모듈(410)로 하여금 제 2 서브블록(510)의 WV들(314)을 그리고 메모리 기록 모듈(412)로 하여금 제 2 서브블록(510)의 WV들(314)로부터 판독되는 데이터를 대응하는 CV들(316)에 기록하도록 할 수 있다. 메모리 기록 모듈(410)은 새로운 데이터를 제 2 서브블록(510)의 WV들(314)에 기록할 수 있다. 버저닝 모듈(402)은 BV(310)를 GV(308)와 동일하게 세팅할 수 있다. 버저닝 모듈(402)은 SBV(306)(예를 들어, SBV0) 내의 모든 비트들을, 예를 들어 [0 0 1 1]에서 [0 1 0 0]로 더 업데이트할 수 있고, 이것은 먼저 모든 SBV 비트들을 지우고 그 후에 메모리 블록(302)의 제 2 서브블록(510)에 대응하는 기록 동작에 기초하여 비트를 업데이트되는 서브블록에 대응하여 세팅한 결과이다.
블록 608에서, 버저닝 모듈(402)은 체크포인트가 생성되어야 하는지를 결정할 수 있다. 도 5a 내지 도 5e의 예를 참조하면, 체크포인트는 수신되는 체크포인트 요청에 응답하여 생성될 수 있다. 예를 들어, 버저닝 모듈(402)은 블록 606의 판독 및/또는 기록 동작들을 요청하는 애플리케이션으로부터 체크포인트를 생성하라는 요청을 수신할 수 있다. 추가로 또는 대안으로, 체크포인트의 생성을 트리거하는 임의의 다른 주기 및/또는 비주기 방법이 사용될 수 있다. 예를 들어, 버저닝 모듈(402)은 모든 판독 및/또는 기록 동작 이후에 체크포인트를 생성할 수 있거나, 버저닝 모듈(402)은 어떤 시간량(예를 들어, 1분, 15분, 한시간 등) 이후에 체크포인트를 생성할 수 있다.
버저닝 모듈(402)이 체크포인트를 생성하지 않아야 한다면, 제어는 버저닝된 메모리 구현 장치(400)가 메모리 블록(302)의 서브블록(304)에 다른 요청된 판독 및/또는 기록 동작을 수행할 수 있는 블록(606)으로 회귀된다. 도 5d의 예에서 그리고 블록 606에서, 제 2 기록 요청이 수신 및 프로세싱될 수 있다. 제 2 기록 요청의 결과는 도 5d의 메모리 상태(506)에 나타난다. 제 2 기록 요청은 제 3 서브블록(514)에 기록될 새로운 데이터를 표시할 수 있다. 제 1 기록 동작은 BV(310)를 GV(308)와 동일하게 세팅하기 때문에, 버저닝 모듈(402)은 메모리 기록 모듈(412)로 하여금 제 3 서브블록(514)의 WV(314)에 데이터를 기록하도록 할 수 있다. 버저닝 모듈(402)은 BV(310)를 GV(308)와 동일하게 세팅할 수 있다. 더욱이, 버저닝 모듈(402)은 BV(310)(예를 들어, BV0)가 이미 GV(308)와 동일하므로 SBV(306) 내의 하나의 비트를 업데이트하고(예를 들어, SBV0를 [0 1 0 0]에서 [0 1 1 0]로), 이 비트를 새로 업데이트된 세브블록에 대응하게 세팅한다.
블록 610에서, 체크포인트가 생성되어야 할 때, 버저닝 모듈(402)은 GV(308)를 증분시킬 수 있다. GV(308)의 증분의 예의 결과는 도 5e의 메모리 상태(508)에 나타난다. 제어는 그 후에 블록 606으로 진행될 수 있고, 여기서 제 1 후속(예를 들어, 다음) 기록 동작은 체크포인트 데이터(512)로서 존속되도록 버저닝된 메모리 구현 장치(400)로 하여금 데이터를 WV(314)로부터 CV(316)로(예를 들어, 504의 예의 메모리 상태에서와 같이) 복사하도록 한다.
도 7은 본 발명의 하나의 예에 따르면, 에러(예를 들어, 고장, 결함 등)로부터 복구하기 위한 버저닝된 메모리 구현 장치(400)에 대한 동작 시퀀스들의 흐름도(700)를 도시한다.
블록 702에서, 버저닝 모듈(402)은 에러 표시를 검출할 수 있다. 예를 들어, 에러 표시는 메모리 블록(302) 및/또는 서브블록(304) 내의 데이터에 계산들을 수행하는 애플리케이션으로부터 수신될 수 있다. 그러나, 시스템 에러가 언제 발생했는지를 검출하고, 애플리케이션 충돌(application crash)을 검출하는 것 등과 같이, 에러 표시를 검출하는 임의의 다른 방식이 추가 또는 대안으로 사용될 수 있다.
블록 704에서, 에러 표시가 검출되면, 버저닝 모듈(402)은 GV(308)를 감분시킬 수 있다(예를 들어, 이전의 GV 값). 예를 들어, GV(308)는 0으로 세팅될 수 있거나, 대안으로 에러에 응답하여 임의의 다른 값이 사용될 수 있다. GV(308)를 감분시킴으로써, 모든 손상된 메모리 블록들(302)은 GV보다 큰 BV들을 기지고, 그러한 손상된 블록들(302) 및 서브블록들(304)에 대하여, CV(316)는 정확한 데이터로서 간주될 수 있고 WV(314)는 손상된 데이터로서 간주될 수 있다.
블록 706에서, 버저닝 모듈(402)은 감분된 GV(308)로 체크포인팅 구성(300)과 연관되는 이전의 반복, 트랜잭션 또는 프로그램을 재실행할 수 있다.
블록 708에서, 버저닝 모듈(402)은 그 후에 각각의 메모리 블록(302) 및/또는 서브블록(304)과 연관되는 BV들을 검사하고, GV(308)(감분 이후의)보다 더 큰 값을 가진 각각의 BV(310)를 GV(308)로 세팅할 수 있다.
버저닝 모듈(402)이 GV(308) 및 BV(310)를 리세팅(resetting)한 후에, 후속 판독 동작들이 적절한 서브블록(304)의 CV들(316)로부터 데이터를 판독할 수 있다. 더욱이, 후속 기록 동작들이 적절한 서브블록(304)의 WV들(314)에 데이터를 기록하고 BV(310)를 GV(308)의 값으로 세팅할 수 있다. 이전의 반복, 트랜잭션 또는 프로그램은 감분된 GV(308)로 재실행될 수 있다. 임의의 손상된 블록들(302)은 버저닝된 메모리 구현 장치(400)가 손상된 블록들(302)로부터 판독하고 이 블록(302)에 기록할 때(예를 들어, 도 8 및 도 9를 참조하여 판독 및 기록 동작들에서 BV(n) > GV인 경우를 참조할 것) 정상 상태들로 복구될 수 있다. 더욱이, GV(308)를 전진시키기 전에, 모든 BV들(310)은 스캐닝될 수 있고, BV(310)가 GV(308)보다 더 크면, CV(316)는 WV(314)에 복사될 수 있고, BV(310)는 GV(308)와 동일하게 세팅될 수 있다.
도 8은 본 발명의 하나의 예에 따라, 판독 동작을 수행하는 버저닝된 메모리 구현 장치(400)에 대한 동작 시퀀스들의 흐름도(800)를 도시한다.
블록 802에서, 버저닝된 메모리 구현 장치(400)는 메모리 블록(302)(예를 들어, 메모리 블록 n)의 특정한 서브블록(304)(예를 들어, 서브블록 k)에 대한 판독 요청을 수신할 수 있다.
블록 804에서, 버저닝 모듈(402)은 GV(308)를 결정할 수 있다. 예를 들어, 버저닝 모듈(402)은 전역 버전 데이터베이스(404)로부터 GV(308)를 판독함으로써 GV(308)를 결정할 수 있다.
블록 806에서, 버저닝 모듈(402)은 메모리 블록(302)(예를 들어, 메모리 블록 n)과 연관되는 BV(310)(예를 들어, BV(n))를 결정할 수 있다. 예를 들어, 버저닝 모듈(402)은 블록 버전 데이터베이스(406)로부터 BV를 판독함으로써 BV(310)를 결정할 수 있다.
블록 808에서, 버저닝 모듈(402)은 적절한 서브블록(304)(예를 들어, 서브블록 k)의 어떤 레벨이 판독되어야 하는지를 식별하기 위해 GV(308)를 특정한 메모리 블록(302)(예를 들어, 메모리 블록 n)에 대한 블록 버전(310)과 비교할 수 있다. 예를 들어, 버저닝 모듈(402)은 BV(310)가 GV(308)보다 더 작거나 또는 동일한 것으로 결정될 때(즉, (BV(n)<=GV)이면) 적절한 서브블록(304)(예를 들어, WV들(314))의 제 1 계층이 판독되어야 한다고 결정할 수 있다.
블록 810에서, BV(310)가 GV(308)보다 더 작거나 동일한 것으로 결정되면, 메모리 판독 모듈(410)은 적절한 서브블록(304)(예를 들어, 서브블록 k)의 제 1 레벨(예를 들어, WV들(314))에 저장되는 데이터를 판독할 수 있다.
블록 812에서, BV(310)가 GV(308)보다 더 작거나 동일하다고 결정되면, SBV(306)는 무시될 수 있다.
블록 814에서, BV(310)가 GV(308)보다 더 크다고 버저닝 모듈(402)이 결정하면, 버저닝 모듈(402)은 고장의 표시를 생성할 수 있다. 적절한 서브블록(예를 들어, 서브블록 k)에 대한 SBV(306)(예를 들어, SBV(k))가 세팅되면, 메모리 판독 모듈(410)은 적절한 서브블록(304)(예를 들어, 서브블록 k)의 제 2 계층(예를 들어, CV들(316))에 저장되는 데이터를 판독할 수 있다.
블록 816에서, 적절한 서브블록(304)(예를 들어, 서브블록 k)에 대한 SBV(306)(예를 들어, SBV(k))가 세팅되지 않으면, 메모리 판독 모듈(410)은 적절한 서브블록(304)(예를 들어, 서브블록 k)의 제 1 계층(예를 들어, WV들(314)) 내에 저장되는 데이터를 판독할 수 있다.
SBV(306)가 세팅되는 서브블록들에 대한 블록(818)에서, 버저닝 모듈(402)은 SBV(k)가 1이면 적절한 서브블록(304)(예를 들어, 서브블록 k)에 대한 CV들(316)을 적절한 서브블록(304)(예를 들어, 서브블록 k)에 대한 WV들(314)에 복사하고 나서, BV(n)를 GV-1로 세팅할 수 있다.
블록 820에서, 일단 메모리 판독 모듈(410)이 블록(302)(예를 들어, 메모리 블록 n)의 적절한 서브블록(304)(예를 들어, 서브블록 k)으로부터 데이터를 판독했으면, 버저닝된 메모리 구현 장치는 이 데이터로 판독 요청에 응답할 수 있다.
도 9는 본 발명의 하나의 예에 따라, 기록 동작을 수행하는 버저닝된 메모리 구현 장치(400)에 대한 동작 시퀀스들의 흐름도(900)를 도시한다.
블록 902에서, 버저닝된 메모리 구현 장치(400)는 메모리 블록(302)(예를 들어, 메모리 블록 n)의 특정한 서브블록(304)(예를 들어, 서브블록 k)에 대한 기록 요청을 수신할 수 있다. 기록 요청은 메모리 블록(302)의 어드레스, 특정 서브블록(304) 및 특정 서브블록(304)에 기록될 데이터를 포함할 수 있다.
블록 904에서, 버저닝 모듈(402)은 GV(308)를 결정할 수 있다. 예를 들어, 버저닝 모듈(402)은 전역 버전 데이터베이스(404)로부터 GV(308)를 판독함으로써 GV(308)를 결정할 수 있다.
블록 906에서, 버저닝 모듈(402)은 메모리 블록(302)(예를 들어, 메모리 블록 n)과 연관되는 BV(310)(예를 들어, BV(n))를 결정할 수 있다. 예를 들어, 버저닝 모듈(402)은 블록 버전 데이터베이스(406)로부터 BV(310)를 판독함으로써 BV(310)를 결정할 수 있다.
블록 908에서, 버저닝 모듈(402)은 수신되는 데이터가 기록되어야 하는 메모리 블록(302)의 레벨이 어떤 레벨인지를 식별하기 위해 GV(308)를 BV(310)와 비교할 수 있다.
블록 910에서, 버저닝 모듈(402)은 메모리 블록(302)(예를 들어, 메모리 블록 n)(310)에 대한 BV(310)(예를 들어, BV(n))가 GV(308)보다 더 작다고(즉, BV(n) < GV) 결정한다.
블록 912에서, 블록 910에서의 결정에 기초하여, 버저닝 모듈(402)은 메모리 블록(302)(예를 들어, 메모리 블록 n)에 대한 모든 SBV(306) 비트들을 0으로 리세팅할 수 있다.
블록 914에서, 메모리 기록 모듈(412)은 적절한 서브블록(304)(예를 들어, 서브블록 k)에 대한 WV들(314)을 적절한 서브블록(304)(예를 들어, 서브블록 k)에 대한 CV들(316)에 복사하고, 새로운 데이터를 적절한 서브블록(304)(예를 들어, 서브블록 k)에 대한 WV들(314)에 기록할 수 있다.
블록 916에서, 버저닝 모듈(402)은 메모리 블록(302)(예를 들어, 메모리 블록 n)에 대한 BV(310)(예를 들어, BV(n))를 GV(308)로 세팅할 수 있다. 더욱이, 버저닝 모듈(402)은 적절한 서브블록(304)(예를 들어, 서브블록 k)에 대한 SBV(306)(예를 들어, SBV(k))를 1로 세팅할 수 있다.
블록 918에서, 버저닝 모듈(402)은 메모리 블록(302)(예를 들어, 메모리 블록 n)에 대한 BV(310)(예를 들어, BV(n))가 GV(308)와 동일하다고(즉, BV(n) = GV) 결정한다.
블록 920에서, 적절한 서브블록(304)(예를 들어, 서브블록 k)에 대한 SBV(306)(예를 들어, SBV(k))가 세팅된 것으로(즉, 이미 더티(dirty)인 것으로) 버저닝 모듈(402)이 결정하면, 메모리 기록 모듈(412)은 새로운 데이터를 적절한 서브블록(304)(예를 들어, 서브블록 k)에 대한 WV들(314)에 기록할 수 있고 적절한 서브블록(304)(예를 들어, 서브블록 k)에 대한 CV들(316)은 변하지 않고 남을 수 있다.
블록 922에서, 적절한 서브블록(304)(예를 들어, 서브블록 k)에 대한 SBV(306)(예를 들어, SBV(k))가 세팅되지 않은 것으로(즉, 더티가 아닌 것으로) 버저닝 모듈(402)이 결정하면, 메모리 기록 모듈(412)은 적절한 서브블록(304)(예를 들어, 서브블록 k)에 대한 WV들(314)을 적절한 서브블록(304)(예를 들어, 서브블록 k)에 대한 CV들(316)에 복사하고 적절한 서브블록(304)(예를 들어, 서브블록 k)에 대한 WV들(314)에 새로운 데이터를 기록할 수 있다.
블록 924에서, 버저닝 모듈(402)은 적절한 서브블록(304)(예를 들어, 서브블록 k)에 대한 SBV(306)(예를 들어, SBV(k))를 1로 세팅할 수 있다.
블록 926에서, 버저닝 모듈(402)은 메모리 블록(302)(예를 들어, 메모리 블록 n)에 대한 BV(310)(예를 들어, BV(n))가 GV(308)보다 더 크다고(즉, BV(n) > GV) 결정한다. 더욱이, BV(310)가 GV(308)보다 더 크다는 결정에 기초하여, 버저닝 모듈(402)은 고장의 표시를 생성할 수 있다.
블록 928에서, SBV(306) 세트가 있는 모든 서브블록들에 대하여, 메모리 기록 모듈(412)은 적절한 서브블록(304)에 대한 CV들을 적절한 서브블록(304)에 대한 WV들(314)에 복사할 수 있다.
블록 930에서, 버저닝 모듈(402)은 모든 SBV(306) 비트들을 0으로 리세팅할 수 있다.
블록 932에서, 메모리 기록 모듈(412)은 적절한 서브블록(304)(예를 들어, 서브블록 k)에 대한 WV들(314)을 적절한 서브블록(304)(예를 들어, 서브블록 k)에 대한 CV들(316)에 복사하고 적절한 서브블록(304)(예를 들어, 서브블록 k)에 대한 WV들(314)에 새로운 데이터를 기록할 수 있다.
블록 934에서, 버저닝 모듈(402)은 메모리 블록(302)(예를 들어, 메모리 블록 n)에 대한 BV(310)(예를 들어, BV(n))를 GV(308)로 세팅할 수 있다. 더욱이, 버저닝 모듈(402)은 적절한 서브블록(304)(예를 들어, 서브블록 k)에 대한 SBV(306)(예를 들어, SBV(k))를 1로 세팅할 수 있다.
블록 936에서, 버저닝된 메모리 구현 장치(400)는 기록 요청을 확인 응답할 수 있다.
도 10 및 도 11은 구성이 위에 상세하게 설명되어 있는 버저닝된 메모리 구현 장치(400)의 예에 대응하는 버저닝된 메모리 구현을 위한 방법들(1000 및 1100)의 흐름도들을 각각 도시한다. 방법들(1000 및 1100)은 예로 그리고 제한하지 않고 도 1 내지 도 9를 참조하여 버저닝된 메모리 구현 장치(400) 상에서 구현될 수 있다. 방법들(1000 및 1100)은 다른 장치에서 실시될 수 있다.
도 10을 참조하면, 방법(1000)에 대해, 블록 1002에서, 전역 메모리 버전(예를 들어, GV에 대한 값)은 블록 메모리 버전(예를 들어, BV(n)에 대한 값)과 비교될 수 있다. 전역 메모리 버전은 복수의 메모리 블록들에 대응할 수 있고, 블록 메모리 버전은 복수의 메모리 블록들 중 하나에 대응할 수 있다.
블록 1004에서, 복수의 메모리 블록들 중 하나 중의 복수의 서브블록들에 대응하는 SBV가 평가될 수 있다.
블록 1006에서, 비교 및 평가에 기초하여, 복수의 메모리 블록들 중 하나 중의 복수의 서브블록들 중 하나의 서브블록의 셀 내의 어떤 레벨에 체크포인트 데이터가 저장되는지에 대한 결정이 행해질 수 있다.
도 11을 참조하면, 방법(1100)에 대해, 블록 1102에서, 전역 메모리 버전(예를 들어, GV에 대한 값)은 블록 메모리 버전(예를 들어, BV(n)에 대한 값)과 비교될 수 있다. 전역 메모리 버전은 복수의 메모리 블록들에 대응할 수 있고 블록 메모리 버전은 복수의 메모리 블록들 중 하나에 대응할 수 있다.
블록 1104에서, 복수의 메모리 블록들 중 하나 중의 복수의 서브블록들에 대응하는 SBV가 평가될 수 있다.
블록 1106에서, 비교 및 평가에 기초하여, 복수의 메모리 블록들 중 하나 중의 복수의 서브블록들 중 하나의 서브블록의 셀 내의 어떤 레벨에 체크포인트 데이터가 저장되는지에 대한 결정이 행해질 수 있다.
블록 1108에서, 버저닝된 메모리 구현은 복수의 메모리 블록들 중 하나(예를 들어, 메모리 블록 n)의 서브블록(예를 들어, 서브블록 k)으로부터 데이터를 판독하라는 명령어들을 수신하고(예를 들어, 버저닝된 메모리 구현 장치(400)에서), 블록 메모리 버전이 전력 메모리 버전보다 작거나 동일한지를 결정하고, 그리고 블록 메모리 버전이 전역 메모리 버전과 더 작거나 동일하다는 결정에 기초하여, 서브블록의 WV로부터 판독하는 것을 포함할 수 있다.
블록 1110에서, 버저닝된 메모리 구현은 복수의 메모리 블록들 중 하나(예를 들어, 메모리 블록 n)의 서브블록(예를 들어, 서브블록 k)으로부터 데이터를 판독하라는 명령어들을 수신하고(예를 들어, 버저닝된 메모리 구현 장치(400)에서), 블록 메모리 버전이 전역 메모리 버전보다 더 큰지를 결정하고, 그리고 블록 메모리 버전이 전역 메모리 버전보다 더 크다는 결정에 기초하여, 서브블록에 대응하는 SBV에 대한 값이 세팅되는지를 더 결정하는 것을 포함할 수 있다. 서브블록에 대응하는 SBV에 대한 값이 세팅된다는 결정에 기초하여, 버저닝된 메모리 구현은 서브블록의 CV로부터 판독하는 것을 포함할 수 있다. 서브블록에 대응하는 SBV에 대한 값이 세팅되지 않으면, 그리고 서브블록에 대응하는 SBV에 대한 값이 세팅되어 있지 않다는 결정에 기초하여, 버저닝된 메모리 구현은 서브블록의 WV로부터 판독하는 것을 포함할 수 있다. 더욱이, 블록 메모리 버전이 전역 메모리 버전보다 더 크다는 결정에 기초하여, 버저닝된 메모리 구현은 SBV의 대응하는 값이 세팅되는 복수의 메모리 블록들 중 하나의 서브블록들을 식별하고, 그리고 식별된 서브블록들의 경우 식별된 서브블록들의 CV를 식별된 서브블록의 WV에 복사하고, 블록 메모리 버전을 이전의 전역 메모리 버전으로 세팅하는 것을 포함할 수 있다.
블록 1112에서, 버저닝된 메모리 구현은 데이터를 복수의 메모리 블록들 중 하나(예를 들어, 메모리 블록 n)의 서브블록(예를 들어, 서브블록 k)에 데이터를 기록하라는 명령어들을 수신하고(예를 들어, 버저닝된 메모리 구현 장치(400)에서), 블록 메모리 버전이 전역 메모리 버전보다 더 작은지를 결정하고, 그리고 블록 메모리 버전이 전역 메모리 버전보다 더 작다는 결정에 기초하여, SBV의 값들을 리세팅하고, 서브블록의 WV를 서브블록의 CV에 복사하고, 수신되는 데이터를 서브블록의 WV에 기록하는 것을 포함할 수 있다. 더욱이, 블록 메모리 버전이 전역 메모리 버전보다 더 작다는 결정에 기초하여, 버저닝된 메모리 구현은 블록 메모리 버전을 전역 메모리 버전으로 세팅하고 서브블록에 대응하는 SBV의 값을 미리 결정된 값으로 세팅하는 것을 포함할 수 있다.
블록 1114에서, 버저닝된 메모리 구현은 복수의 메모리 블록들 중 하나(예를 들어, 메모리 블록 n)의 서브블록(예를 들어, 서브블록 k)에 데이터를 기록하라는 명령어들을 수신하고(예를 들어, 버저닝된 메모리 구현 장치(400)에서), 블록 메모리 버전이 전역 메모리 버전과 동일한지를 결정하고, 그리고 블록 메모리 버전이 전역 메모리 버전과 동일하다는 결정에 기초하여, 서브블록에 대응하는 SBV의 값이 세팅되는지를 결정하고, 그리고 서브블록에 대응하는 SBV의 값이 세팅된다는 결정에 기초하여 수신되는 데이터를 서브블록의 WV에 기록하는 것을 포함할 수 있다. 더욱이, 버저닝된 메모리 구현은 복수의 메모리 블록들 중 하나의 서브블록에 데이터를 기록하라는 명령어들을 수신하고, 블록 메모리 버전이 전역 메모리 버전과 동일한지를 결정하고, 그리고 블록 메모리 버전이 전역 메모리 버전과 동일하다는 결정에 기초하여, 서브블록에 대응하는 SBV의 값이 세팅되지 않은지를 결정하고, 서브블록에 대응하는 SBV의 값이 세팅되어 있지 않다는 결정에 기초하여 서브블록의 WV를 서브블록의 CV에 복사하고, 그리고 수신되는 데이터를 서브블록의 WV에 기록하는 것을 포함할 수 있다. 더욱이, 서브블록에 대응하는 SBV의 값이 세팅되지 않다는 결정에 기초하여, 버저닝된 메모리 구현은 서브블록에 대응하는 SBV의 값을 미리 결정된 값으로 세팅하는 것을 포함할 수 있다.
블록 1116에서, 버저닝된 메모리 구현은 복수의 메모리 블록들 중 하나(예를 들어, 메모리 블록 n)의 서브블록(예를 들어, 서브블록 k)에 데이터를 기록하라는 명령어들을 수신하고(예를 들어, 버저닝된 메모리 구현 장치(400)에서), 블록 메모리 버전이 전역 메모리 버전보다 더 큰지를 결정하고, 블록 메모리 버전이 전역 메모리 버전보다 더 크다는 결정에 기초하여, SBV의 대응하는 값이 세팅되는 복수의 메모리 블록들 중 하나의 서브블록들을 식별하고, 식별되는 서브블록들에 대해, 식별된 서브블록들의 CV를 식별된 서브블록들의 WV에 복사하고, SBV의 값들은 미리 결정된 값으로 세팅하고, 서브블록의 WV를 서브블록의 CV에 복사하고, 그리고 수신되는 데이터를 서브블록의 WV에 기록하는 것을 포함할 수 있다.
도 12는 본원에서 설명되는 예들과 함께 사용될 수 있는 컴퓨터 시스템(1200)을 도시한다. 컴퓨터 시스템은 서버 또는 다른 컴퓨터 시스템에 있을 수 있는 구성요소들을 포함하는 일반 플랫폼을 표현한다. 컴퓨터 시스템(1200)은 장치(400)에 대한 플랫폼으로 사용될 수 있다. 컴퓨터 시스템(1200)은 프로세서 또는 다른 하드웨어 프로세싱 회로에 의해, 본원에서 설명되는 방법들, 기능들 및 다른 프로세스들을 실행할 수 있다. 이 방법들, 기능들 및 다른 프로세스들은 하드웨어 저장 디바이스들(예를 들어, 랜덤 액세스 메모리(random access memory; RAM), 판독 전용 메모리(read only memory; ROM), 소거 가능 프로그램 가능 ROM(erasable programmable ROM; EPROM), 전기적 소거 가능 프로그램 가능 ROM(electrically erasable programmable ROM; EEPROM), 하드 드라이브들 및 플래시 메모리)와 같이, 비일시적일 수 있는 컴퓨터 판독 가능 매체 상에 저장되는 머신 판독 가능 명령어들로서 구현될 수 있다.
컴퓨터 시스템(1200)은 본원에서 설명되는 방법들, 기능들 및 다른 프로세스들 일부 또는 모두를 수행하는 머신 판독 가능 명령어들을 구현 또는 실행할 수 있는 프로세서(1202)를 포함한다. 프로세서(1202)로부터의 명령어들 및 데이터는 통신 버스(1204)를 통해 통신된다. 컴퓨터 시스템은 또한 랜덤 액세스 메모리(RAM)와 같이, 런타임(runtime) 동안 프로세서(1202)를 위한 머신 판독 가능 명령어들 및 데이터가 상주할 수 있는 주 메모리(1206) 및 비휘발성일 수 있고 머신 판독가능 명령어들 및 데이터를 저장하는 2차 데이터 저장소(1208)를 포함한다. 메모리 및 데이터 저장소는 컴퓨터 판독가능 매체들의 예들이다. 메모리(1206)는 런타임 동안 메모리(1206) 내에 상주하고 프로세서(1202)에 의해 실행되는 머신 판독가능 명령어들을 포함하는 버저닝된 메모리 구현 모듈(1220)을 포함할 수 있다. 버저닝된 메모리 구현 모듈(1220)은 도 4에 도시되는 장치(400)의 모듈들을 포함할 수 있다.
컴퓨터 시스템(1200)은 키보드, 마우스, 디스플레이 등과 같은 I/O 디바이스(1210)를 포함할 수 있다. 컴퓨터 시스템은 네트워크에 접속하기 위해 네트워크 인터페이스(1212)를 포함할 수 있다. 다른 공지되어 있는 전자 구성요소들이 컴퓨터 시스템 내에 추가되거나 대체될 수 있다.
본원에서 설명되고 예시된 것들은 이의 변형들 중 일부와 함께 하나의 예이다. 본원에서 사용되는 용어들, 설명들 및 도면들은 단지 예로 진술되고 제한하는 것들로서 의도되지 않는다. 모든 용어들이 달리 표시되지 않는 한 자체의 넓은 합당한 의미로 의도되는 다음의 청구항들-및 이의 등가들-에 의해 정의되도록 의도되는 특허 대상의 사상 및 범위 내에서 많은 변형들이 가능하다.

Claims (15)

  1. 버저닝된 메모리(versioned memory) 구현을 위한 방법으로서,
    프로세서에 의해, 전역 메모리 버전(global memory version)을 블록 메모리 버전(block memory version)과 비교하는 단계 - 상기 전역 메모리 버전은 복수의 메모리 블록들에 대응하고, 상기 블록 메모리 버전은 상기 복수의 메모리 블록들 중 하나에 대응함 - 와,
    상기 복수의 메모리 블록들 중 상기 하나 중의 복수의 서브블록들에 대응하는 서브블록 비트 벡터(subblock-bit-vector; SBV)를 평가하는 단계와,
    상기 비교 및 상기 평가에 기초하여, 상기 복수의 메모리 블록들 중 상기 하나 중의 상기 복수의 서브블록들 중 하나의 서브블록의 셀 내의 어떤 레벨에 체크포인트 데이터가 저장되는지를 결정하는 단계를 포함하는
    버저닝된 메모리 구현 방법.
  2. 제 1 항에 있어서,
    상기 셀은 1 비트 셀(2LC) 및 2 비트 셀(4LC) 중 하나인
    버저닝된 메모리 구현 방법.
  3. 제 1 항에 있어서,
    상기 셀 내에 저장되는 데이터의 에러 상태를 검출하는 단계와,
    상기 에러 상태로부터 복구하기 위해 상기 셀 내의 상기 결정된 레벨에 저장되는 상기 체크포인트 데이터를 판독하는 단계를 더 포함하는
    버저닝된 메모리 구현 방법.
  4. 제 1 항에 있어서,
    상기 복수의 메모리 블록들 중 상기 하나 중의 서브블록으로부터 데이터를 판독하라는 명령어들을 수신하는 단계와,
    상기 블록 메모리 버전이 상기 전역 메모리 버전보다 작거나 동일한지를 결정하는 단계와,
    상기 블록 메모리 버전이 상기 전역 메모리 버전보다 작거나 동일하다는 결정에 기초하여, 상기 서브블록의 작업 버전(working version; WV)으로부터 판독하는 단계를 더 포함하는
    버저닝된 메모리 구현 방법.
  5. 제 1 항에 있어서,
    상기 복수의 메모리 블록들 중 상기 하나 중의 서브블록으로부터 데이터를 판독하라는 명령어들을 수신하는 단계와,
    상기 블록 메모리 버전이 상기 전역 메모리 버전보다 더 큰지를 결정하는 단계와,
    상기 블록 메모리 버전이 상기 전역 메모리 버전보다 더 크다는 결정에 기초하여,
    상기 서브블록에 대응하는 상기 SBV에 대한 값이 세팅되는지를 더 결정하고 상기 서브블록에 대응하는 상기 SBV에 대한 상기 값이 세팅된다는 결정에 기초하여, 상기 서브블록의 체크포인트 버전(checkpoint version; CV)으로부터 판독하고,
    상기 서브블록에 대응하는 상기 SBV에 대한 상기 값이 세팅되지 않은지를 더 결정하고, 상기 서브블록에 대응하는 상기 SBV에 대한 상기 값이 세팅되지 않는다는 결정에 기초하여, 상기 서브블록의 작업 버전(WV)으로부터 판독하고,
    상기 SBV의 대응하는 값이 세팅되는 상기 복수의 메모리 블록들 중 상기 하나 중의 서브블록들을 식별하고,
    상기 식별된 서브블록들에 대하여, 상기 식별된 서브블록들의 상기 CV를 상기 식별된 서브블록들의 상기 WV에 복사하고,
    상기 블록 메모리 버전을 이전의 전역 메모리 버전으로 세팅하는 단계를 더 포함하는
    버저닝된 메모리 구현 방법.
  6. 제 1 항에 있어서,
    상기 복수의 메모리 블록들 중 상기 하나 중의 서브블록에 데이터를 기록하라는 명령어들을 수신하는 단계와,
    상기 블록 메모리 버전이 상기 전역 메모리 버전보다 더 작은지를 결정하는 단계와,
    상기 블록 메모리 버전이 상기 전역 메모리 버전보다 더 작다는 결정에 기초하여,
    상기 SBV의 값들을 리셋팅하고,
    상기 서브블록의 작업 버전(WV)을 상기 서브블록의 체크포인트 버전(CV)에 복사하고,
    상기 수신되는 데이터를 상기 서브블록의 상기 WV에 기록하고,
    상기 블록 메모리 버전을 상기 전역 메모리 버전으로 세팅하고,
    상기 서브블록에 대응하는 상기 SBV의 값을 미리 결정된 값으로 세팅하는 단계를 더 포함하는
    버저닝된 메모리 구현 방법.
  7. 제 1 항에 있어서,
    상기 복수의 메모리 블록들 중 상기 하나 중의 서브블록에 데이터를 기록하라는 명령어들을 수신하는 단계와,
    상기 블록 메모리 버전이 상기 전역 메모리 버전과 동일한지를 결정하는 단계와,
    상기 블록 메모리 버전이 상기 전역 메모리 버전과 동일하다는 결정에 기초하여,
    상기 서브블록에 대응하는 상기 SBV의 값이 세팅되는지를 결정하고,
    상기 서브블록에 대응하는 상기 SBV의 상기 값이 세팅된다는 결정에 기초하여, 상기 수신되는 데이터를 상기 서브블록의 작업 버전(WV)에 기록하는 단계를 더 포함하는
    버저닝된 메모리 구현 방법.
  8. 제 1 항에 있어서,
    상기 복수의 메모리 블록들 중 상기 하나 중의 서브블록에 데이터를 기록하라는 명령어들을 수신하는 단계와,
    상기 블록 메모리 버전이 상기 전역 메모리 버전과 동일한지를 결정하는 단계와,
    상기 블록 메모리 버전이 상기 전역 메모리 버전과 동일하다는 결정에 기초하여,
    상기 서브블록에 대응하는 상기 SBV의 값이 세팅되지 않은지를 결정하고 상기 서브블록에 대응하는 상기 SBV의 상기 값이 세팅되지 않는다는 결정에 기초하여,
    상기 서브블록의 작업 버전(WV)을 상기 서브블록의 체크포인트 버전(CV)에 복사하고,
    상기 수신되는 데이터를 상기 서브블록의 상기 WV에 기록하고,
    상기 서브블록에 대응하는 상기 SBV의 값을 미리 결정된 값으로 세팅하는 단계를 더 포함하는
    버저닝된 메모리 구현 방법.
  9. 제 1 항에 있어서,
    상기 복수의 메모리 블록들 중 상기 하나 중의 서브블록에 데이터를 기록하라는 명령어들을 수신하는 단계와,
    상기 블록 메모리 버전이 상기 전역 메모리 버전보다 더 큰지를 결정하는 단계와,
    상기 블록 메모리 버전이 상기 전역 메모리 버전보다 더 크다는 결정에 기초하여,
    상기 SBV의 대응하는 값들이 세팅되는 상기 복수의 메모리 블록들 중 상기 하나의 서브블록들을 식별하고, 상기 식별된 서브블록들의 체크포인트 버전(CV)을 상기 식별된 서브블록들의 작업 버전(WV)에 복사하고,
    상기 SBV의 값들을 미리 결정된 값으로 세팅하고,
    상기 서브블록의 상기 WV를 상기 서브블록의 상기 CV에 복사하고,
    상기 수신되는 데이터를 상기 서브블록의 상기 WV에 기록하는 단계를 더 포함하는
    버저닝된 메모리 구현 방법.
  10. 버저닝된 메모리 구현을 제공하기 위해 내부에 머신 판독 가능 명령어들을 저장한 비일시적 컴퓨터 판독 가능 매체로서,
    상기 머신 판독 가능 명령어들은 실행될 때, 컴퓨터 시스템으로 하여금,
    프로세서에 의해, 복수의 메모리 블록들에 대응하는 전역 메모리 버전을 상기 복수의 메모리 블록들 중 하나에 대응하는 블록 메모리 버전과 비교하게 하고,
    상기 복수의 메모리 블록들 중 상기 하나 중의 복수의 서브블록들에 대응하는 서브블록 비트 벡터(SBV)를 평가하게 하고,
    상기 비교 및 평가에 기초하여, 상기 복수의 메모리 블록들 중 상기 하나 중의 상기 복수의 서브블록들 중 하나의 서브블록의 셀 내의 어떤 레벨에 체크포인트 데이터가 저장되는지를 결정하게 하고,
    상기 셀 내에 저장되는 데이터의 에러 상태를 검출하게 하고,
    상기 에러 상태로부터 복구하기 위해 상기 셀 내의 상기 결정된 레벨에 저장되는 상기 체크포인트를 판독하게 하는
    컴퓨터 판독 가능 매체.
  11. 제 10 항에 있어서,
    상기 셀은 1 비트 셀(2LC) 및 2 비트 셀(4LC) 중 하나인
    컴퓨터 판독 가능 매체.
  12. 메모리 제어기 회로를 포함하는 버저닝된 메모리 구현 장치로서,
    상기 메모리 제어기 회로는,
    복수의 메모리 블록들에 대응하는 전역 메모리 버전을 상기 복수의 메모리 블록들 중 하나에 대응하는 블록 메모리 버전과 비교하고,
    상기 복수의 메모리 블록들 중 상기 하나 중의 복수의 서브블록들에 대응하는 서브블록 비트 벡터(SBV)를 평가하고,
    상기 비교 및 상기 평가에 기초하여, 상기 복수의 메모리 블록들 중 상기 하나 중의 상기 복수의 서브블록들 중 하나의 서브블록의 셀 내의 어떤 레벨에 체크포인트 데이터가 저장되는지를 결정하는
    버저닝된 메모리 구현 장치.
  13. 제 12 항에 있어서,
    상기 셀은 1 비트 셀(2LC) 및 2 비트 셀(4LC) 중 하나인
    버저닝된 메모리 구현 장치.
  14. 제 12 항에 있어서,
    상기 셀은 1 비트 셀(2LC)이고, 상기 메모리 제어기 회로는 추가로,
    상기 2LC의 행들을 복수의 세트들로 분할하고,
    상기 복수의 세트들 중 하나의 세트를 작업 버전(WV)들로 지정하고,
    상기 복수의 세트들 중 다른 세트를 체크포인트 버전(checkpoint version)들로 지정하고,
    버저닝된 메모리를 구현하기 위해 상기 분할된 행들 중 지정된 세트들을 사용하는
    버저닝된 메모리 구현 장치.
  15. 제 14 항에 있어서,
    상기 메모리 제어기 회로는 추가로,
    상기 2LC와 함께 사용되는 행 버퍼(row buffer)를 통해 데이터를 복사하는
    버저닝된 메모리 구현 장치.
KR1020157031258A 2013-07-31 2013-07-31 버저닝된 메모리 구현 KR102031606B1 (ko)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/US2013/053098 WO2015016926A1 (en) 2013-07-31 2013-07-31 Versioned memory implementation

Publications (2)

Publication Number Publication Date
KR20160055723A true KR20160055723A (ko) 2016-05-18
KR102031606B1 KR102031606B1 (ko) 2019-10-14

Family

ID=52432282

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020157031258A KR102031606B1 (ko) 2013-07-31 2013-07-31 버저닝된 메모리 구현

Country Status (5)

Country Link
US (1) US9710335B2 (ko)
EP (1) EP3028151A1 (ko)
KR (1) KR102031606B1 (ko)
CN (1) CN105339902B (ko)
WO (1) WO2015016926A1 (ko)

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20180027993A (ko) * 2016-09-07 2018-03-15 울산과학기술원 전자 장치 및 제어 방법
CN110910941A (zh) * 2018-09-14 2020-03-24 爱思开海力士有限公司 存储器系统及其操作方法
US10984851B2 (en) 2019-03-25 2021-04-20 SK Hynix Inc. Memory system and method for operating the same
US11126376B2 (en) 2018-11-20 2021-09-21 SK Hynix Inc. Apparatus and method for performing recovery operation of memory system
KR102664426B1 (ko) * 2023-03-06 2024-05-08 주식회사 모레 애플리케이션의 결함 허용을 위한 체크 포인팅을 수행하는 방법 및 시스템

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11422903B2 (en) 2020-07-30 2022-08-23 Netapp Inc. Maintaining and recomputing reference counts in a persistent memory file system
US11693593B2 (en) * 2020-10-28 2023-07-04 Micron Technology, Inc. Versioning data stored on memory device
US11886728B2 (en) 2021-08-13 2024-01-30 Micron Technology, Inc. Undo capability for memory devices

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20040038706A (ko) * 2002-10-28 2004-05-08 샌디스크 코포레이션 비휘발성 메모리 시스템에서 아우트-오브-시퀀스 기록프로세스를 효과적으로 수행하기 위한 방법 및 장치
KR100755718B1 (ko) * 2006-09-04 2007-09-05 삼성전자주식회사 멀티 레벨 셀 플래시 메모리에서 런-타임 배드 블록 관리를위한 장치 및 방법
KR20080048545A (ko) * 2005-09-20 2008-06-02 콸콤 인코포레이티드 하드웨어―지원 장치 구성 검출
KR20090115118A (ko) * 2006-11-22 2009-11-04 인터내셔널 비지네스 머신즈 코포레이션 멀티프로세서 컴퓨팅 시스템에서 메모리 일관성 보호
KR20110061598A (ko) * 2008-09-30 2011-06-09 인텔 코오퍼레이션 저전압 동작 동안 캐시 부분의 디스에이블

Family Cites Families (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7058849B2 (en) * 2002-07-02 2006-06-06 Micron Technology, Inc. Use of non-volatile memory to perform rollback function
US7012835B2 (en) * 2003-10-03 2006-03-14 Sandisk Corporation Flash memory data correction and scrub techniques
US20080134196A1 (en) 2005-05-19 2008-06-05 Intel Corporation Apparatus, System, and Method of a Memory Arrangement for Speculative Multithreading
US7861122B2 (en) 2006-01-27 2010-12-28 Apple Inc. Monitoring health of non-volatile memory
KR100837730B1 (ko) * 2006-09-29 2008-06-13 한국전자통신연구원 사전에 지정한 패리티를 검사한 결과를 이용해 ldpc코드를 부호화하는 방법
US7577036B2 (en) 2007-05-02 2009-08-18 Micron Technology, Inc. Non-volatile multilevel memory cells with data read of reference cells
US8706982B2 (en) * 2007-12-30 2014-04-22 Intel Corporation Mechanisms for strong atomicity in a transactional memory system
JP2011519460A (ja) * 2008-05-01 2011-07-07 ヒューレット−パッカード デベロップメント カンパニー エル.ピー. チェックポイントデータの不揮発性メモリへの保存
US8364844B2 (en) * 2009-11-13 2013-01-29 International Business Machines Corporation Deadlock-free class routes for collective communications embedded in a multi-dimensional torus network
US8856593B2 (en) 2010-04-12 2014-10-07 Sandisk Enterprise Ip Llc Failure recovery using consensus replication in a distributed flash memory system
US8593866B2 (en) 2011-11-11 2013-11-26 Sandisk Technologies Inc. Systems and methods for operating multi-bank nonvolatile memory

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20040038706A (ko) * 2002-10-28 2004-05-08 샌디스크 코포레이션 비휘발성 메모리 시스템에서 아우트-오브-시퀀스 기록프로세스를 효과적으로 수행하기 위한 방법 및 장치
KR20080048545A (ko) * 2005-09-20 2008-06-02 콸콤 인코포레이티드 하드웨어―지원 장치 구성 검출
KR100755718B1 (ko) * 2006-09-04 2007-09-05 삼성전자주식회사 멀티 레벨 셀 플래시 메모리에서 런-타임 배드 블록 관리를위한 장치 및 방법
KR20090115118A (ko) * 2006-11-22 2009-11-04 인터내셔널 비지네스 머신즈 코포레이션 멀티프로세서 컴퓨팅 시스템에서 메모리 일관성 보호
KR20110061598A (ko) * 2008-09-30 2011-06-09 인텔 코오퍼레이션 저전압 동작 동안 캐시 부분의 디스에이블

Cited By (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20180027993A (ko) * 2016-09-07 2018-03-15 울산과학기술원 전자 장치 및 제어 방법
CN110910941A (zh) * 2018-09-14 2020-03-24 爱思开海力士有限公司 存储器系统及其操作方法
US10956283B2 (en) 2018-09-14 2021-03-23 SK Hynix Inc. Memory system capable of efficiently performing an error correction operation and operating method thereof
CN110910941B (zh) * 2018-09-14 2023-04-07 爱思开海力士有限公司 存储器系统及其操作方法
US11126376B2 (en) 2018-11-20 2021-09-21 SK Hynix Inc. Apparatus and method for performing recovery operation of memory system
US10984851B2 (en) 2019-03-25 2021-04-20 SK Hynix Inc. Memory system and method for operating the same
KR102664426B1 (ko) * 2023-03-06 2024-05-08 주식회사 모레 애플리케이션의 결함 허용을 위한 체크 포인팅을 수행하는 방법 및 시스템

Also Published As

Publication number Publication date
KR102031606B1 (ko) 2019-10-14
CN105339902A (zh) 2016-02-17
US20160077922A1 (en) 2016-03-17
US9710335B2 (en) 2017-07-18
CN105339902B (zh) 2018-11-20
EP3028151A1 (en) 2016-06-08
WO2015016926A1 (en) 2015-02-05

Similar Documents

Publication Publication Date Title
KR102031606B1 (ko) 버저닝된 메모리 구현
US9612957B2 (en) Read disturb and data retention handling for NAND devices
US20180321874A1 (en) Flash management optimization for data update with small block sizes for write amplification mitigation and fault tolerance enhancement
US9477590B2 (en) Weave sequence counter for non-volatile memory systems
US9430329B2 (en) Data integrity management in a data storage device
CN106708754B (zh) 数据储存装置及其数据维护方法
CN108228385B (zh) 数据储存装置及其数据维护方法
CN110047546B (zh) 存储器系统中的擦除管理
JP5669823B2 (ja) チェンジトラッキングを用いたシステムリカバリ方法
CN111045870B (zh) 一种保存与恢复元数据的方法、装置和介质
CN117743201A (zh) 可从网络攻击和故障恢复的存储器设备
TW201915725A (zh) 資料儲存裝置與記憶體裝置之資料處理方法
US10073642B2 (en) Data storage device and operating method thereof
US9239756B2 (en) Systems and methods for performing data recovery in a memory system
US20170228299A1 (en) Data Recovery in Three Dimensional Non-Volatile Memory Array After Word Line Short
CN107992268B (zh) 一种坏块标记的方法及相关装置
KR20150094292A (ko) 비휘발성 메모리 기반의 전자 장치의 메타 데이터 복원 방법 및 장치
CN114020527A (zh) 快照恢复方法、装置、计算机设备及存储介质
US20220374310A1 (en) Write request completion notification in response to partial hardening of write data
EP2820548B1 (en) Versioned memories using a multi-level cell
CN113031851B (zh) 数据快照方法、装置及设备
US20240111623A1 (en) Extended protection storage system put operation
CN107656747B (zh) 一种数据升级方法及移动终端
CN118673499A (zh) 数据一致性校验方法及存储设备
CN111240603A (zh) 保护目标lba范围数据的方法、装置、计算机设备及存储介质

Legal Events

Date Code Title Description
N231 Notification of change of applicant
E701 Decision to grant or registration of patent right
GRNT Written decision to grant