KR101676932B1 - 멀티-레벨 셀을 사용하여 버전화되는 메모리들 - Google Patents

멀티-레벨 셀을 사용하여 버전화되는 메모리들 Download PDF

Info

Publication number
KR101676932B1
KR101676932B1 KR1020147020610A KR20147020610A KR101676932B1 KR 101676932 B1 KR101676932 B1 KR 101676932B1 KR 1020147020610 A KR1020147020610 A KR 1020147020610A KR 20147020610 A KR20147020610 A KR 20147020610A KR 101676932 B1 KR101676932 B1 KR 101676932B1
Authority
KR
South Korea
Prior art keywords
level
memory
data
level cell
cell
Prior art date
Application number
KR1020147020610A
Other languages
English (en)
Other versions
KR20140106739A (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 KR20140106739A publication Critical patent/KR20140106739A/ko
Application granted granted Critical
Publication of KR101676932B1 publication Critical patent/KR101676932B1/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/1405Saving, restoring, recovering or retrying at machine instruction level
    • G06F11/1407Checkpointing the instruction stream
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/023Free address space management
    • G06F12/0238Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory
    • 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/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/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
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1016Performance improvement
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1032Reliability improvement, data loss prevention, degraded operation etc
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/72Details relating to flash memory management
    • G06F2212/7202Allocation control and policies
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/72Details relating to flash memory management
    • G06F2212/7209Validity control, e.g. using flags, time stamps or sequence numbers
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C11/00Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor
    • G11C11/56Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor using storage elements with more than two stable states represented by steps, e.g. of voltage, current, phase, frequency
    • G11C11/5621Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor using storage elements with more than two stable states represented by steps, e.g. of voltage, current, phase, frequency using charge storage in a floating gate
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C2211/00Indexing scheme relating to digital stores characterized by the use of particular electric or magnetic storage elements; Storage elements therefor
    • G11C2211/56Indexing scheme relating to G11C11/56 and sub-groups for features not covered by these groups
    • G11C2211/564Miscellaneous aspects
    • G11C2211/5641Multilevel memory having cells with different number of storage levels

Landscapes

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

Abstract

멀티-레벨 셀(MLC)을 사용하여 버전화되는 메모리들이 개시된다. 예시 방법은 전역 메모리 버전을 블록 메모리 버전과 비교하는 것을 포함하고, 전역 메모리 버전은 복수의 메모리 블록들에 대응하고, 블록 메모리 버전은 복수의 메모리 블록들 중 하나에 대응한다. 이 예시 방법은 상기 비교에 기초하여, 복수의 메모리 블록들 중 상기 하나의 멀티-레벨 셀 내의 어떤 레벨이 체크포인트 데이터를 저장하는지를 결정하는 것을 포함한다.

Description

멀티-레벨 셀을 사용하여 버전화되는 메모리들{VERSIONED MEMORIES USING A MULTI-LEVEL CELL}
고성능 컴퓨팅(high performance computing; HPC) 시스템들은 전형적으로 복잡한 수학 및/또는 과학 정보의 계산에 사용된다. 그와 같은 계산들은 화학적 상호 반응들의 시뮬레이션들, 신호 분석들, 구조 분석의 시뮬레이션들 등을 포함할 수 있다. 이 계산들의 복잡성으로 인해, HPC 시스템들이 이 계산들을 완료하는 데 오랜 시간이 걸릴 수 있다(예를 들어, 수 시간, 수일, 수 주일 등). 계산들 중에 하드웨어 고장, 애플리케이션 버그들, 메모리 훼손(memory corruption), 시스템 결함(system fault)들 등과 같은 에러들이 발생하여 계산된 데이터가 훼손 및/또는 비일관된 상태가 되도록 할 수 있다. 그와 같은 에러들이 발생하면, HPC 시스템들은 계산들을 다시 시작하고, 이것은 계산들을 완료하기 위한 프로세싱 시간을 현저하게 증가시킬 수 있다.
계산들을 위한 프로세싱 시간들을 줄이기 위하여, 계산들 동안 다양한 지점들에서 계산된 데이터의 버전(version)들을 저장하기 위한 체크포인트(checkpoint)들이 사용된다. 에러가 발생하면, 컴퓨팅 시스템은 가장 최근의 체크포인트를 복원시키고 복원된 체크포인트로부터 계산을 재개한다. 이 방식에서, 체크포인트들은 재계산하는 프로세싱 시간들을 줄이는 데 사용될 수 있다.
도 1은 예시 멀티-레벨 셀(multi-level cell; MLC) 비휘발성 랜덤 액세스 메모리(non-volatile random access memory; NVRAM) 구성들을 도시하는 도면이다.
도 2는 도 1의 MLC NVRAM을 사용하는 예시 메모리 블록의 블록도이다.
도 3은 도 2의 예시 메모리 블록을 사용하여 버전화되는 메모리를 구현하는 데 사용될 수 있는 예시 메모리 제어기의 블록도이다.
도 4는 도 2의 예시 메모리 블록을 사용하는 예시 계산 중에 예시 메모리 상태들을 나타내는 블록도이다.
도 5는 예시 동작 시퀀스를 수행하기 위하여 도 3의 예시 메모리 제어기를 구현하는 데 실행될 수 있는 예시 머신 판독 가능(readable) 명령어들을 나타내는 흐름도이다.
도 6은 도 3의 예시 메모리 제어기를 구현하는 데 수행될 수 있는 예시 머신 판독 가능 명령어들을 나타내는 흐름도이다.
도 7은 판독 동작을 수행하기 위하여 도 3의 예시 메모리 제어기를 구현하는 데 실행될 수 있는 예시 머신 판독 가능 명령어들을 나타내는 흐름도이다.
도 8은 기록(write) 동작을 수행하기 위하여 도 3의 예시 메모리 제어기를 구현하는 데 실행될 수 있는 예시 머신 판독 가능 명령어들을 나타내는 흐름도이다.
도 9는 도 3의 예시 메모리 제어기를 구현하기 위해 도 5, 도 6, 도 7 및/또는 도 8의 예시 머신 판독 가능 명령어들을 실행할 수 있는 예시 프로세서 플랫폼의 블록도이다.
본원에서 개시되는 예시 제조 방법들, 장치들 및 물품들은 멀티-레벨 셀(MLC) 비휘발성 랜덤 액세스 메모리(NVRAM)을 사용하여 버전화되는 메모리를 구현할 수 있다. 버전화되는 메모리를 구현하기 위하여, 본원에 개시되는 예들은 어떤 레벨의 멀티-레벨 메모리 셀 데이터가 판독되어야 하고/하거나 기록되어야 하는지를 결정하기 위해 포괄적인 메모리 버전 번호 및 블록당 버전 번호를 사용한다. 본원에서 개시되는 예시 버전화 메모리 기술들은 NVRAM에서의 고속 체크포인팅 및/또는 고속, 원자적 및 일관적 데이터 관리를 구현하는 데 사용될 수 있다.
보다 최근의 NVRAM 메모리 기술들(예를 들어, 상 변화 메모리(phase change momory; PCRAM), 멤리스터(memristor)들 등)은 레거시(legacy) 메모리 기술들보다 더 높은 메모리 밀도들을 가진다. 그와 같은 더 고밀도의 NVRAM 메모리 기술들은 더 새로운 컴퓨팅 시스템들에서 사용될 것으로 예상된다. 그러나, 설계자들, 엔지니어들 및 사용자들은 예를 들어, 메모리 누출들, 시스템 고장들, 애플리케이션 버그들과 같은 에러들로 인해 발생되는 NVRAM 훼손의 위험성들에 직면한다. 그에 따라, 본원에서 개시되는 예들은 훼손의 위험성을 제거 또는 실질적으로 감소(예를 들어, 최소화)시키기 위해 NVRAM 내의 데이터를 안정된 상태로 복원한다.
이전의 시스템들은 다수 버전의 데이터 구조들, 체크포인트 로깅(logging) 절차들 등을 사용하여 에러들로부터 복구되는 것이 가능하다. 그러나, 그와 같은 다수 버전의 데이터 구조들은 상기 다수 버전의 데이터 구조들을 사용하도록 설계된 소프트웨어 애플리케이션들에 특정된다. 그러므로, 이 데이터 구조들을 사용하는 것은 그와 같이 특별하게 설계되는 소프트웨어 애플리케이션들을 가지는 컴퓨팅 시스템들로 제한된다. 일부 공지되어 있는 시스템들에서, 체크포인트 로깅 절차들은 체크포인트를 생성하기 위해 메모리를 2차 위치에 카피하는 능력에 의존한다. 그러나, 메모리를 카피하는 것은 오랜 시간이 걸릴 수 있고, 체크포인트를 생성하기 위해 많은 메모리 연산들이 사용되므로 쉽게 에러들을 일으킬 수 있다. 일부 예들에서, 데이터를 안전하게 갱신하기 위하여 미리-쓰기 로깅(write-ahead logging)(주 데이터를 갱신하기 전에 새로 추가되는 데이터의 로그들을 생성) 또는 복귀 로깅(undo logging)(원 데이터를 새로운 데이터로 덮어쓰기 전에 윈 데이터의 로그들을 생성)이 사용된다. 그러나, 이 메커니즘들은 성능 및 전력의 상당한 오버헤드(overhead)를 초래한다.
본원에서 개시되는 예시 제조 방법들, 장치 및 물품들은 고성능 컴퓨팅(HPC) 시스템들에서 체크포인팅할 수 있고 NVRAM에 일관되고 지속적인 데이터 객체들을 제공한다. 본원에서 개시되는 예들은 전역 메모리 버전 번호들을 증가시킴으로써 예시 체크포인트 동작들을 구현한다. 전역 메모리 버전 번호는 메모리 블록이 변경되었는지(예를 들어, 이전의 체크포인팅 동작 이래로 변경되었는지)를 결정하기 위해 블록당 버전 번호와 대비하여 비교된다. 일부 예들에서, 메모리 블록이 변경되지 않았으면, 체크포인트 데이터는 MLC NVRAM의 제 1 층에 저장된다. 일부 예들에서, 메모리 블록이 변경되었으면, 체크포인트 데이터는 MLC NVRAM의 제 2 층에 저장된다.
도 1은 예시 멀티-레벨 셀(MLC) 비휘발성 랜덤 액세스 메모리(NVRAM) 구성들을 도시한다. 제 1 예시 NVRAM 셀(110)은 불(boolean) '0'(예를 들어, 상태 S0)을 나타내는 제 1 범위의 저항(예를 들어, 저 저항 값들) 및 불 '1'(예를 들어, 상태 S1)을 나타내는 제 2 범위의 저항(예를 들어, 고 저항 값들)을 사용하여, 셀(예를 들어, 비트(b0)를 가지는 싱글-레벨 NVRAM 셀)당 하나의 비트를 저장한다. 예시 MLC NVRAM 셀들(120 및 130)에 의해 도시되는 바와 같이 NVRAM 셀들을 더 작은 저항 범위들로 분리함으로써, 더 많은 정보가 저장될 수 있고, 이로 인해 더 고밀도의 메모리가 만들어진다. 예시 NVRAM 셀(120)은 셀당 2 비트들(예를 들어, 비트들(b1 및 b0)을 나타내는 4 범위들의 저항)을 저장하고 예시 NVRAM 셀(130)은 셀당 3 비트들(예를 들어, 비트들(b2, b1 및 b0)을 나타내는 8 범위들의 저항)을 사용한다. 도 1의 도시된 예에서, 각각의 MLC NVRAM 셀(120 및 130)은 더 미세한 입도화된 양의 셀 저항을 사용함으로써 다수의 비트들을 저장한다. 그러므로, MLC NVRAM은 동일한 수의 NVRAM 셀들에 더 많은 비트들이 저장되므로, 메모리 밀도를 증가시키는 데 사용된다.
다른 유형들의 메모리(예를 들어, 동작 랜덤 액세스 메모리(dynamic random access memory; DRAM)와는 달리, NVRAM은 비대칭 동작 특성들을 가진다. 특히, NVRAM에 기록하는 것은 NVRAM으로부터 판독하는 것보다 더 시간 및 에너지 소모적이다. 더욱이, 판독 및 기록 동작들은 MLC NVRAM을 사용할 때 싱글-레벨 셀(예를 들어, 제 1 예시 NVRAM 셀(110))에 비해 더 많은 메모리 사이클들을 사용한다. MLC NVRAM에서, 판독은 다수의 단계들을 사용하여 NVRAM 셀 내에 저장되는 저항 레벨을 정확하게 분해하는 데 사용된다. 게다가, MLC(예를 들어, 셀들(120 및 130)) 중 최상위 비트(most-significant bit)를 판독하는 것은 시간이 덜 걸리는데 왜냐하면 판독 회로소자는 MLC의 최하위 비트(leat-significant bit)를 판독하는 데 필요한 정확성으로 셀 저항을 결정할 필요가 없기 때문이다. 유사하게, MLC NVRAM 셀로의 기록은 싱글-레벨 셀보다 시간이 더 걸리는 데 왜냐하면 기록하는 것은 적절한 값이 NVRAM 셀에 기록되었음을 검증하기 위해 일련의 판독 동작을 사용하기 때문이다.
도 2는 그 중 하나가 참조 번호(215)에서 도시되는 4개의 메모리 셀들을 가지는 예시 메모리 블록(208)으로 도시되는 예시 체크포인팅 구성(200)이다. 도시된 예들에서, 메모리 블록(208)의 셀들은 도 1의 MLC NVRAM의 셀(NVRAM 셀(120))당 2-비트를 사용하여 구현된다. 도 2의 예시 체크포인팅 구성(200)은 메모리 블록(208)의 셀들에 대응하는 전역 식별자(global identifier; GID)(205)를 포함하고 다른 메모리 블록들을 도시되지 않는다. 도시된 예의 GID(205)는 메모리 블록(208) 및 다른 메모리 블록들에 저장된 데이터의 마지막 체크포인팅된 버전을 나타내는 전역 메모리 버전 번호(예를 들어, 일련 버전 번호)을 저장한다. 도시된 예에서, GID(205)는 시스템 상태의 일부이다. 즉, GID(205)는 메모리에서 시스템 제어 동작들의 일부로서 관리, 갱신 및/또는 사용된다. 본원에서 개시되는 도시된 예들에서, GID(205)는 체크포인트들이 발생할 때를 표시하는 데 사용된다. 체크포인트는 메모리의 동작 동안 에러들, 고장들 및/또는 훼손으로부터의 복구에 사용되는 체크포인트 데이터가 메모리 내에서 지속되는 포인트이다. 도시된 예의 GID(205)는 메모리 블록(208)을 사용하여 새 체크포인트가 언제 저장될 수 있는지를 표시하여 계산들을 수행하는 애플리케이션으로부터의 체크포인팅 명령어에 기초하여 때때로(예를 들어, 주기적으로/이거나 비주기적으로) 갱신된다. 추가로 또는 대안으로, 체크포인트의 생성을 발생시키는 임의의 다른 주기 및/또는 비주기 방법이 사용될 수 있다. 예를 들어, 체크포인트는 매 판독 및/또는 기록 동작 후에 생성될 수 있고, 체크포인트는 임계량의 시간(예를 들어, 1분, 15분, 한 시간 등) 이후에 생성될 수 있다.
도시된 예에서, 메모리 블록(208)과 관련하여 단일 GID(206)가 도시된다. 그러나, 일부 예들에서,예를 들어 상이한 메모리 영역들에 대한 버전 번호들을 표현하기 위해 다수의 GID들(205)이 사용될 수 있다(예를 들어, 상이한 프로세스들, 하나 이상의 가상 머신들에 대해서와 같이 하나 이상의 가상의 어드레스 공간들에 대해 예를 들어, 상이한 GID가 사용될 수 있다). 또한, 도시된 예에서, 단일 메모리 블록(208)이 도시된다. 그러나 동일하거나, 더 적거나 더 많은 레벨들을 가지는 메모리 셀들을 더 적게 또는 더 많이 가지는 임의의 수의 메모리 블록들은 GID(205) 또는 상이한 각각의 GID들과 연관될 수 있다.
도시된 예에서, 블록 식별자(block identifier; BID)(210)는 메모리 블록(208)과 연관된다. BID(210)는 각각의 메모리 블록(208)의 버전 번호(예를 들어, 일련 버전 번호)를 나타낸다. 도시된 예에서, BID(210)는 별개의 메모리 객체에 메타데이터로서 저장된다. 도시된 예에서, 메모리 객체는 데이터(예를 들어, 버전 번호)를 저장하는 하나 이상의 메모리 블록들 및/또는 위치들이다. 일부 예들에서, 상이한 메모리 블록들과 연관되는 BID들은 동일한 메모리 객체에 저장될 수 있다.
상술한 바와 같이, 예시 메모리 블록(208)은 4개의 멀티-레벨 셀들(215)을 나타내고, 이들 중 하나가 참조 번호(215)에 도시된다. 그러나, 다른 예들에서, 메모리 블록(208)은 임의의 수효의 멀티-레벨 셀들을 포함할 수 있다. 예시된 예의 멀티-레벨 셀(215)은 제 1 레벨(220)(예를 들어, 최상위 비트(MSB)) 및 제 2 레벨(230)(예를 들어, 최하위 비트(LSB))를 가지는 셀 MLC(예를 들어, 도 1의 NVRAM 셀(120)과 같은) 당 2-비트이다. 멀티-레벨 셀(215)이 셀 MLC 당 2비트로서 도시될지라도, 본원에서 개시되는 예들은 셀당 2보다 많은 비트들을 가지는 MLS들과 관련하여 구현될 수 있다. 더욱이, 도시된 예에서 제 1 레벨(220)은 MSB에 의해 표현되고 제 2 레벨(230)은 LSB에 의해 표현될지라도, MSB 및/또는 LSB를 표현하기 위해 임의의 다른 레벨들이 사용될 수 있다. 예를 들어, 이 레벨들은 뒤바뀔 수 있다.
도시된 예에서, GID(205)에 대한 BID(210)의 값은 메모리 블록(208)에 저장되는 데이터가 변경되었는지를 표시한다. 예를 들어, BID(210)는 제 1 레벨(220)(예를 들어, MSB) 및 제 2 레벨(예를 들어, LSB)에 저장되는 데이터가 체크포인팅된 데이터를 나타내는지를 결정하기 위해 GID(205)와 비교될 수 있다.
도시된 예에서, GID(205) 및 BID(210)는 일련 버전 번호들을 표현하기 위해 64 비트 카운터(counter)들을 사용하여 구현된다. GID(205) 및/또는 BID(210)가 이들의 최대 값을 넘어 증가되면, 이것들은 0으로 낮아진다. 64 비트 카운터들이 계산 동안 자신들의 최대 값(예를 들어, 롤오버(rollover) 사건)을 넘어 증가될 가능성이 없을지라도(예를 들어, 2 내지 64(264)개까지의 체크포인트들보다 더 많을 가능성은 없을 것이다), 더 작은 카운터들이 사용될 때(예를 들어, 8 비트 카운터, 16 비트 카운터, 32 비트 카운터 등), 더 작은 카운터들이 자신들의 최대의 값에 도달하는 결과로서 롤오버 사건들이 발생할 가능성이 더 크다. 도시된 예에서, 롤오버들이 GID(205) 및 BID(210) 사이의 비교들로부터 부정확한 결과들을 야기하지 않도록 하기 위해, 메모리 제어기에 의해 롤오버들이 검출된다. 이 방식에서, 롤오버의 경우에, 메모리 제어기는 GID(205) 및 BID(210) 이 둘 모두를 0으로 리셋할 수 있다. 일부 예들에서, 롤오버 이후에, GID(205) 및 BID(210)는 체크포인트 상태들의 정확한 상태를 유지하기 위해 상이한 각각의 값들(예를 들어, GID(205)는 1로 세팅되고 BID(210)는 0으로 세팅된다)로 세팅된다.
도 3은 도 2의 예시 메모리 블록(208)을 사용하여 버전화되는 메모리를 구현하는 데 사용될 수 있는 예시 메모리 제어기(305)의 블록도이다. 도 1의 도시된 예의 메모리 제어기(305)는 버전화 프로세서(310), 메모리 판독기(320), 메모리 기록기(330), 전역 식별자 저장소(340) 및 블록 식별자 저장소(340)를 포함한다.
도 3의 예시 버전화 프로세서(310)는 프로세서 실행 명령어들에 의해 구현되지만, 이는 추가로 또는 대안으로 주문형 반도체(application specific integrated circuit; ASIC)들, 프로그래머블 로직 디바이스(programmable logic device; PLD)들 및/또는 필드 프로그래머블 로직 디바이스(field programmable logic device; FPLD)(들) 및/또는 다른 회로소자에 의해 구현될 수 있다. 도시된 예의 버전화 프로세서(310)는 각각의 MLC NVRAM 셀의 어떤 레벨에 기록 그리고/또는 어떤 레벨로부터 판독할지를 결정하기 위하여 판독 및 기록 동작들 동안 각각의 MLC NVRAM 셀들에 대하여 GID(205)를 BID(210)와 비교한다. 본원에서 개시되는 예들에서, GID(205)가 BID(210)보다 더 클 때, 기록 동작들은 각각의 MLC NVRAM 셀의 제 1 레벨에 저장되는 데이터가 각각의 MLC NVRAM 셀의 제 2 레벨에 기록된 후에 각각의 MLC NVRAM 셀의 제 1 레벨에 기록된다. GID(205)가 BID(210)보다 더 크지 않을 때, 기록 동작들은 각각의 MLC NVRAM 셀의 제 1 레벨에 기록된다. GID(205)가 BID(210)보다 더 크거나 동일할 때, 판독 동작들은 각각의 MLC NVRAM 셀의 제 1 레벨에 저당되는 데이터를 판독한다. GID는 BID(210)보다 더 크거나 동일하지 않을 때, 판독 동작들은 각각의 MLC NVRAM 셀의 제 2 레벨에 저장되는 데이터를 데이터를 판독한다.
도 3의 예시 메모리 판독기(320)는 명령어들을 실행하는 프로세서에 의해 구현되지만, 추가로 또는 대안으로 ASIC, DSP, FPGA 및/또는 다른 회로소자에 의해 구현될 수 있다. 일부 예들에서, 예시 메모리 판독기(320)는 버전화 프로세서(310)와 동일한 물리적 프로세서에 의해 구현된다. 도시된 예에서, 예시 메모리 판독기(320)는 각각의 메모리 블록(208)의 GID(205) 및 BID(210)의 비교에 기초하여 각각의 메모리 블록(208)의 MSB(220) 또는 LSB(230)로부터 판독한다.
도 3의 예시 메모리 기록기(330)는 명령어들을 실행하는 프로세서에 의해 구현되나, 추가로 또는 대안으로 ASIC, DSP, FPGA 및/또는 다른 회로소자에 의해 구현될 수 있다. 일부 예들에서, 예시 메모리 기록기(330)는 메모리 판독기(320) 및 버전화 프로세서(310)와 동일한 물리적 프로세서에 의해 구현된다. 도시된 예에서, 예시 메모리 기록기(330)는 각각의 메모리 블록(208)의 GID(205) 및 BID(210)의 비교에 기초하여 각각의 메모리 블록(208)의 LSB(230) 또는 MSB(220)에 기록한다.
도 3의 예시 전역 식별자 저장소(340)는 예를 들어, NVRAM 플래시 메모리, 자기 매체, 광 매체 등과 같이, 데이터를 저장하는 임의의 유형적 머신 액세스 가능 저장 매체에 의해 구현될 수 있다. GID(205)는 예를 들어, 이진 데이터, 콤마 한정 데이터(comma delimited data), 탭 한정 데이터, 구조식 질의 언어(structured query language; SQL) 구조들 등과 같은 임의의 데이터 포맷을 사용하여 전역 식별자 저장소(340) 내에 저장될 수 있다. 도시된 예에서, 전역 식별자 저장소(340)는 GID(205)를 저장하는 64 비트 카운터이다. 그러나, 임의의 다른 크기 카운터 및/또는 데이터 구조가 추가로 또는 대안으로 사용될 수 있다. 도시된 예에서 전역 식별자 저장소(340)가 단일 데이터 구조로서 도시될지라도, 전역 식별자 저장소(340)는 대안으로 임의의 수효 및/또는 유형(들)의 데이터 구조들에 의해 구현될 수 있다. 예를 들어, 상술한 바와 같이, 상이한 메모리 영역들과 연관되는 다수의 GID들(205)이 있을 수 있고, 각각의 GID(205)는 동일한 전역 식별자 저장소(340) 및/또는 하나 이상의 상이한 전역 식별자 저장소들에 저장된다.
도 3의 예시 블록 식별자 저장소(350)는 예를 들어, NVRAM 플래시 메모리, 자기 매체, 광 매체 등과 같이, 데이터를 저장하기 위한 임의의 유형적 머신 액세스 가능 저장 매체에 의해 구현될 수 있다. 데이터는 예를 들어, 이진 데이터, 콤마 한정 데이터, 탭 한정 데이터, 구조식 질의 언어(SQL) 등과 같은 임의의 데이터 포맷을 사용하여 블록 식별자 저장소(350)에 저장될 수 있다. 도시된 예에서, 블록 식별자 저장소(350)는 BID(210)를 저장하는 64 비트 카운터이다. 그러나, 임의의 다른 크기 카운터 및/또는 데이터 구조가 추가로 또는 대안으로 사용될 수 있다. 도시된 예에서 블록 식별자 저장소(350)가 단일 데이터 구조로서 도시될지라도, 블록 식별자 저장소(350)는 대안으로 임의의 수 및/또는 유형(들)의 데이터 구조들에 의해 구현될 수 있다.
도 4는 메모리 블록(208)에 저장되는 데이터를 저장 및/또는 갱신하는 계산의 예시 실행 기간 동안 도 2의 메모리 블록(208)의 예시 메모리 상태들(450, 460, 470, 480 및 490)을 나타내는 블록도이다. 도 4의 도시된 예에서, 예시 메모리 상태들(450, 460, 470, 480 및 490)은 예시 시간 라인(494)에 의해 표현되는 바와 같은 시간에 따른 진행(시간에 따라 도 상부에서 하향으로 진행한다)을 도시할지라도, 상이한 상태들 사이의 지속기간들은 동일할 수 있거나 동일하지 않을 수 있다.
도시된 예의 예시 메모리 상태(450)는 메모리 블록(208)의 초기 메모리 상태를 도시한다. 도시된 예에서, GID(205) 및 BID(210)는 0으로 세팅되고 도시된 메모리 셀들(예를 들어, 도 2의 메모리 셀(215))의 MSB들(220)은 0-0-0-0의 예시 데이터를 저장한다. 도시된 예에서, 도시된 메모리 셀들의 LSB들(230)은 LSB(230)에 임의의 데이터가 저장될 수 있음을 나타내는 블랭크(blank)이다(예를 들어, LSB(230)에서의 데이터 저장은 논리적 무관심(don't care)이다).
예시 메모리 상태(460)는 실행 기간의 시작을 도시하고, 이 기간 동안 GID(205)는 실행 기간의 시작에 응답하여 1로 증가된다. 도시된 예에서, LSB(230)는 블랭크 상태로 유지되고(예를 들어, 유효 데이터를 저장하지 않음), 이것은 임이의 데이터가 LSB(230) 내에 저장될 수 있음을 나타낸다(예를 들어, LSB(230)에서의 데이터 저장은 논리적 무관심이다).
도시된 예의 예시 메모리 상태(470)는 1-0-1-0의 예시 데이터 값을 메모리 블록(208)의 MSB들(220)에 기록하는 제 1 기록 동작의 결과를 도시한다. 도시된 예에서, GID(205)는 기록 동작이 계시될 때 이전의 메모리 상태(460)에서의 BID(210)보다 더 크므로, 메모리 상태(460) 동안 MSB들(220)에 저장되는 데이터(예를 들어, 0-0-0-0)는 메모리 상태(470)에서 도시된 바와 같이 LSB들(230)에 기록된다. 메모리 상태(460)에서 갱신되는 기록 동작으로부터의 새로운 데이터(예를 들어, 1-0-1-0)가 그 후에 메모리 상태(470)에서 도시되는 바와 같이 MSB들에 기록된다. LSB들(230)은 따라서 체크포인팅된 데이터(412)(예를 들어, 0-0-0-0)를 저장하고 MSB들(220)은 새로 기록되는 데이터(예를 들어, 1-0-1-0)를 저장한다. 기록 동작 동안, BID(210)가 GID(205)의 값으로 세팅됨으로써, 다음 체크포인트 이전에 발생하는 후속 기록들(GID(205 및 BID(210) 비교에 의해 표시되는 바와 같은)이 체크포인팅된 데이터(412)를 중첩 기록하는 것이 방지된다.
도시된 예의 예시 메모리 상태(480)는 예시 데이터(1-1-0-0)를 MSB들(220)에 기록하는 제 2 기록 동작의 출력을 도시한다. 도시된 예에서, GID(205)가 기록 동작의 시작 시의 BID(210)와 동일하므로, 예시 데이터(1-1-0-0)는 메모리 상태(480)에서 도시되는 바와 같이 MSB들(220)에 기록되어 이전 데이터(1-0-1-0)에 중첩 기록된다. 이에 따라, LSB들(230)은 변경되지 않는다. 기록 동작이 메모리 상태(480)에서 완료되면, BID(210)는 GID(205)의 값으로 세팅된다. 체크포인팅된 데이터(412)는 LSB들(230)에서 이전의 메모리 상태(470)으로부터 동일하게 유지된다.
도시된 예의 예시 메모리 상태(490)는 체크포인팅 동작의 결과를 도시한다. 도시된 예에서, 체크포인팅 동작은 도 4의 실행 기간의 말미에서 발생한다. 그러나, 체크포인팅 동작은 실행 기간 동안 한 포인트에서 발생할 수 있다(예를 들어, 중간 계산이 완료된 후). 체크포인팅 동작은 GID(205)를 증가시킨다. 체크포인팅 동작의 직전에 MSB들(220) 내에 저장되는 데이터는 가장 최근의 데이터(예를 들어, 계산 중에 기록되는 데이터)를 나타낸다. 그러한 바에 따라, GID(205)가 BID(210)보다 더 클 때, 체크포인팅된 데이터(412)는 MSB들(220)에 의해 표현된다. LSB들(230)은 이전의 체크포인트로부터 구 데이터를 저장한다. 체크포인팅 동작에서 사용되는 메모리 변경들은 GID(205)에서 1 값을 갱신한다. 유용하게는, GID(205)를 갱신하는 것은 체크포인팅된 데이터(412)를 다른 장소에 저장할 필요가 없으므로 빠르고 원자적이다(예를 들어 1의 메모리 값이 변경된다).
메모리 제어기(305)를 구현하는 예시 방법이 도 3에 도시되었을지라도, 도 3에 도시되는 요소들, 프로세스들 및/또는 디바이스들 중 하나 이상은 임의의 다른 방식으로 결합, 분리, 재배열, 생략, 제거 및/또는 구현될 수 있다. 더욱이, 예시 버전화 프로세서(310), 예시 메모리 판독기(320), 예시 메모리 기록기(330), 예시 전역 식별자 저장소(340), 예시 블록 식별자 저장소(350) 및/또는 더 일반적으로 도 3의 예시 메모리 제어기(305)는 하드웨어, 소프트웨어, 펌웨어 및/또는 하드웨어, 소프트웨어 및/또는 펌웨어의 임의의 결합에 의해 구현될 수 있다. 그러므로, 예를 들어, 예시 버전화 프로세서(310), 예시 메모리 판독기(320), 예시 메모리 기록기(330), 예시 전역 식별자 저장소(340), 예시 블록 식별자 저장소(350) 및/또는 더 일반적으로 도 3의 예시 메모리 제어기(305) 중 임의의 하나는 하나 이상의 회로(들), 프로그래머블 프로세서(들), 주문형 반도체들(ASIC들), 프로그래머블 로직 디바이스들(PLD들) 및/또는 필드 프로그래머블 로직 디바이스들(FPLD들) 등에 의해 구현될 수 있다. 본 특허의 장치 또는 시스템 청구항들 중 임의의 청구항이 순전히 소프트웨어 및/또는 펌웨어 구현을 포괄하는 것으로 판독될 때, 예시 버전화 프로세서(310), 예시 메모리 판독기(320), 예시 메모리 기록기(330), 예시 전역 식별자 저장소(340) 및/또는 예시 블록 식별자 저장소(350) 중 적어도 하나는 이에 의해 소프트웨어 및/또는 펌웨어를 저장하는 메모리, DVD, CD 및 블루-레이(blu-ray)와 같은 유형적 컴퓨터 판독 가능 저장 매체를 포함하도록 명백하게 규정된다. 더 부가적으로, 도 3의 예시 메모리 제어기(305)는 도 3에 도시되는 것들 외에, 또는 그러한 것들 대신에 하나 이상의 요소들, 프로세스들 및/또는 디바이스들을 포함할 수 있고/있거나 도시된 요소들, 프로세스들 및 디바이스들 중 임의의 하나 또는 전부를 하나 이상 포함할 수 있다.
도 3의 메모리 제어기를 구현하는 예시 머신 판독 명령어들을 나타내는 흐름도들이 도 5, 도 6, 도 7 및/또는 도 8에 도시된다. 이 예들에서, 머신 판독 가능 명령어들은 도 9와 관련하여 후술되는 예시 컴퓨터(900)에 도시되는 프로세서(912)와 같은 프로세서에 의해 실행되는 하나 이상의 프로그램(들)을 포함한다. 프로그램은 CD-ROM, 플로피 디스크, 하드 드라이브, 디지털 다기능 디스크(digital versatile disk; DVD), 블루-레이 디스크 또는 프로세서(912)와 연관되는 메모리와 같이 유형적 컴퓨터 판독 가능 저장 매체 상에 저장되는 소프트웨어로 구현될 수 있으나, 전체 프로그램 및/또는 이의 일부들은 대안으로 프로세서(912) 외의 디바이스에 의해 실행되고/되거나 펌웨어 또는 전용 하드웨어에서 구현될 수 있다. 더욱이, 예시 프로그램이 도 5, 도 6, 도 7 및/또는 도 8에 도시되는 흐름도들을 참조하여 기술될지라도, 예시 메모리 제어기(305)를 구현하는 많은 다른 방법들이 대안으로 사용될 수 있다. 예를 들어, 블록들의 실행 순서는 변경될 수 있고/있거나 기술되는 블록들의 일부는 변경, 제거 또는 결합될 수 있다.
상술한 바와 같이, 도 5, 도 6, 도 7 및/또는 도 8의 예시 프로세스들은 하드 디스크 드라이브, 플래시 메모리, 판독 전용 메모리(read-only memory; ROM), 컴팩트 디스크(CD), 디지털 다기능 디스크(DVD), 캐시(cache), 랜덤 액세스 메모리(RAM) 및/또는 임의의 지속기간 동안(예를 들어, 연장된 시간 기간들 동안, 영구적으로, 짧은 인스턴스들, 일시적인 버퍼링 동안, 그리고/또는 정보의 캐싱 동안) 정보가 저장되는 임의의 다른 저장 매체와 같은 유형적 컴퓨터 판독 가능 매체 상에 저장되는 코딩된 명령어들(예를 들어, 컴퓨터 판독 가능 명령어들)을 사용하여 구현될 수 있다. 본원에서 사용되는 바와 같이, 용어 유형적 컴퓨터 판독 가능 저장 매체는 임의의 유형의 머신 판독 가능 저장소를 포함하고, 전파 신호들을 배제하는 것으로 명백하게 규정된다. 추가로 또는 대안으로, 도 5, 도 6, 도 7 및/또는 도 8의 예시 프로세스들은 하드 디스크 드라이브, 플래시 메모리, 판독 전용 메모리, 컴팩트 디스크, 디지털 다기능 디스크, 캐시, 랜덤 액세스 메모리 및/또는 임의의 지속기간 동안(예를 들어, 연장된 시간 기간들 동안, 영구적으로, 짧은 인스턴스들, 일시적인 버퍼링 동안, 그리고/또는 정보의 캐싱 동안) 정보가 저장되는 임의의 다른 저장 매체와 같은 비일시적 컴퓨터 판독 가능 매체 상에 저장되는 코딩된 명령어들(예를 들어, 컴퓨터 판독 가능 명령어들)을 사용하여 구현될 수 있다. 본원에서 사용되는 바와 같이, 용어 비 일시적 컴퓨터 판독 가능 매체는 임의의 유형의 컴퓨터 판독 가능 매체를 포함하고 전파 신호들을 배제하는 것으로 명백하게 규정된다. 본원에서 사용되는 바와 같이, 어구 "적어도"가 청구항의 전제부에서 연결 용어로서 사용될 때, 이는 용어 "포함하는"이 제한이 없는 것과 동일한 방식으로 제한들 두지 않는다. 그러므로, "적어도"를 자체의 전제부에서 연결 용어로 사용하는 청구항은 청구항에서 명백하게 언급되는 것들 이외의 요소들을 포함할 수 있다.
도 5는 도 3의 예시 메모리 제어기(305)를 구현하여 메모리 액세스들 및 체크포인트 동작들을 수행하기 위하여 실행될 수 있는 예시 머신 판독 가능 명령어들을 나타내는 흐름도이다. 도 5의 도시된 예에서, 원의 참조 번호들은 실행 기간 동안에 다양한 포인트들에서의 예시 메모리 상태들(예를 들어, 도 4의 예시 메모리 상태들)를 나타낸다. 예시 동작 시퀀스(500)는 블록 520에서 시작한다. 도시된 예에서, 블록 520 전에, 메모리 블록(208)은 도 4의 메모리 상태(450)에 있고, 이 상태에서는 체크포인팅이 발생하지 않았다. 체크포인팅이 아직 발생하지 않았으므로, 도 2 및 도 4의 GID(205) 및 BID(210)는 0이다.
초기에, 도 3의 버전화 프로세서(310)는 GID(205) 및 BID(210)를 초기화한다(블록 510). 도시된 예에서, GID(205) 및 BID(210)는 0으로 세팅되지만, 임의의 다른 값이 사용될 수 있다. 초기화된 GID(205) 및 BID(210)를 나타내는 예시 메모리 상태는 도 4의 예시 메모리 상태(450)에 도시된다.
버전화 프로세서(310)는 GID(205)를 증가시킨다(블록 520). GID(205)를 증가시킴으로써, 메모리 블록(208)으로의 후속 기록 동작은 MSB(220)에 저장되는 데이터가 LSB(230)에 도 4의 체크포인트 데이터로서 저장되도록 한다. 판독 및/또는 기록 동작들 이전에 증가되는 GID(205)를 나타내는 예시 메모리 상태는 도 4의 예시 메모리 상태(460)에 도시된다.
메모리 제어기(305)는 메모리 블록(208) 상에 요청된 판독 및/또는 기록 동작을 수행한다(블록 540). 판독 동작들은 도 7과 관련하여 더 상세하게 논의된다. 기록 동작들은 도 8과 관련하여 더 상세하게 논의된다.
도시된 예에서, 제 1 기록 요청이 수신되고 프로세싱된다. 제 1 기록 요청의 결과는 도 4의 예시 메모리 상태(470)에 도시된다. 도시된 예에서, 제 1 기록 요청은 새로운 데이터(예를 들어, 1-0-1-0)가 기록될 것임을 나타낸다. GID(205) 및 BID(210)의 비교에 기초하여, 버전화 프로세서(310)는 메모리 판독기(320)로 하여금 MSB들(220)을 판독하도록 하고 메모리 기록기(330)로 하여금 MSB들(220)로부터 판독된 데이터를 LSB들(230)로 기록하도록 한다. 메모리 기록기(330)는 그 후에 새로운 데이터를 MSB들(220)에 기록한다. 버전화 프로세서(310)는 BID(210)를 GID(205)와 동일하게 세팅한다.
버전화 프로세서(310)는 체크포인트가 생성되어야 하는지를 결정한다(블록 550). 도시된 예에서, 체크포인트는 수신된 체크포인트 요청에 응답하여 생성된다. 일부 예들에서, 버전화 프로세서(310)는 블록 540의 판독 및/또는 기록 동작들을 요청하는 애플리케이션으로부터 체크포인트를 생성하라는 요청을 수신한다. 추가로 또는 대안으로, 체크포인트의 생성을 일으키는 임의의 다른 주기 및/또는 비주기 방법이 사용될 수 있다. 예를 들어, 버전화 프로세서(310)는 매 판독 및/또는 기록 동작 후에 생성될 수 있고, 버전화 프로세서(310)는 어떤 시간 기간 후에(예를 들어, 1분, 15분, 한 시간 등) 체크포인트를 생성할 수 있다.
버전화 프로세서(310)가 체크포인트를 생성하지 않아야 하는 경우, 제어는 블록 540으로 돌아가고, 여기서 메모리 제어기(305)는 메모리 블록(208)에 대해 다른 요청된 판독 및/또는 기록 동작을 수행한다(블록 540). 도시된 예에서, 제 2 기록 요청이 수신 및 프로세싱된다(블록 540). 제 2 기록 요청의 결과가 도 4의 예시 메모리 상태(480)에 도시된다. 도시된 예에서, 제 2 기록 요청은 새로운 데이터가 기록될 것임을(예를 들어, 1-1-0-0) 나타낸다. 제 1 기록 동작이 BID(210)를 GID(205)와 동일하게 세팅하였으므로, 버전화 프로세서(310)는 메모리 기록기(330)로 하여금 데이터를 MSB(220)에 기록하도록 한다. LSB(230)는 변경되지 않는다. 버전화 프로세서(310)는 BID(210)를 GID(205)와 동일하게 세팅한다.
블록 550으로 돌아와서, 체크포인트가 생성되어야 하면, 버전화 프로세서(310)는 GID(205)를 증가시킨다(블록 560). GID(205)의 증가의 예시 결과가 도 4의 예시 메모리 상태(490)에 도시된다. 제어는 그 후에 블록 540으로 진행되고 여기서 제 1 후속(예를 들어, 다음) 기록 동작에 의해 메모리 제어기(305)는 도 4의 체크포인트 데이터(412)로서 지속되도록 데이터를 MSB(220)로부터 LSB(230)로(예를 들어, 470의 예시 메모리 상태에서와 같은) 카피하게 된다.
도 6은 에러(예를 들어, 고장, 결함 등)로부터 복구하기 위하여 도 3의 예시 메모리 제어기를 구현하는 데 실행될 수 있는 예시 머신 판독 가능 명령어들(600)을 나타내는 흐름도이다. 도 6의 예시 프로세스(600)는 버전화 프로세서(310)가 에러 표시를 검출할 때 시작된다(블록 610). 도시된 예에서, 에러 표시는 메모리 블록(208) 내의 데이터에 대해 계산들을 수행하는 애플리케이션으로부터 수신된다. 그러나, 예를 들어 시스템 에러가 발생한 때를 검출하고, 애플리케이션 고장을 검출하는 것 등과 같이, 에러 표시를 검출하는 임의의 다른 방식이 추가로 또는 대안으로 사용될 수 있다.
에러 표시가 검출되면, 버전화 프로세서(310)는 GID(205)(예를 들어, 이전의 GID 값)를 감소시킨다(블록 620). 도시된 예에서, GID(205)가 0으로 세팅될지라도, 임의의 다른 값이 추가로 또는 대안으로 에러에 응답하여 사용될 수 있다. 버전화 프로세서(310)는 그 후에 각각의 메모리 블록(208)과 연관되는 BID들(210)을 조사하고 그 값이 GID(205)(감소 후의)보다 더 큰 각각의 BID(210)를 최대 값(예를 들어, 2 내지 64 마이너스 1)으로 세팅한다(블록 630). 그러나, BID(210)는 임의의 다른 값으로 세팅될 수 있다.
버전화 프로세서(330)가 GID(205) 및 BID(210)를 리셋한 후에, 후속 판독 동작들은 LSB들(230)로부터 데이터를 판독한다. 후속 기록 동작들은 데이터를 MSB들(220)에 기록하고 BID(210)를 GID(205)의 값으로 세팅한다.
도 7은 도 3의 예시 메모리 제어기(305)를 구현하여 도 2의 메모리 블록(208)에 판독 동작을 수행하도록 실행될 수 있는 예시 머신 판독 가능 명령어들(700)을 나타내는 흐름도이다. 예시 프로세스(700)는 버전화 프로세서(310)가 특정한 메모리 블록(208)에 대한 판독 요청을 수신할 때 시작한다(블록 705). 버전화 프로세서(310)는 GID(205)를 결정한다(블록 710). 도시된 예에서, 버전화 프로세서(310)는 전역 식별자 저장소(340)로부터 GID(205)를 판독함으로써 GID(205)를 결정한다. 버전화 프로세서(310)는 메모리 블록(208)과 연관되는 BID(210)를 결정한다(블록 715). 도시된 예에서, 버전화 프로세서(310)는 블록 식별자 저장소(350)로부터 BID(210)를 판독함으로써 BID(210)를 결정한다.
버전화 프로세서(310)는 메모리 블록(208)의 어떤 레벨이 판독되어야 하는지를 식별하기 위해 GID(205)를 BID(210)와 비교한다(블록 720). 도시된 예에서, 버전화 프로세서(310)는 BID(210)가 GID(205)보다 더 작거나 같을 때 메모리 블록(208)의 제 1 층(예를 들어, MSB들(220))이 판독되어야 한다고 결정한다. 메모리 판독기(320)는 그 후에 제 1 층에 저장되어 있는 데이터를 판독한다(블록 730). BID(210)가 GID(205)보다 더 크다고 버전화 프로세서(310)가 결정하면, 메모리 판독기(320)는 제 2 층(예를 들어, LSB들(230))에 저장되어 있는 데이터를 판독한다(블록 725).
일단 메모리 판독기(320)가 적절한 층으로부터 데이터를 판독했으면, 메모리 판독기(320)는 판독 요청에 상기 데이터로 응답한다(블록 735).
도 8은 도 3의 예시 메모리 제어기를 구현하여 도 2의 메모리 블록에 판독 동작을 수행하도록 실행될 수 있는 예시 머신 판독 가능 명령어들(800)을 나타내는 흐름도이다. 예시 프로세스(800)는 버전화 프로세서(310)가 특정한 메모리 블록(208)에 대한 기록 요청을 수신할 때 시작한다(블록 810). 기록 요청은 메모리 블록(208)의 어드레스 및 메모리 블록(208)에 기록될 데이터를 포함한다. 버전화 프로세서(310)는 GID(205)를 결정한다(블록 815). 도시된 예에서, 버전화 프로세서(310)는 전역 식별자 저장소(340)로부터 GID(205)를 판독함으로서 GID(205)를 결정한다. 버전화 프로세서(310)는 메모리 블록(208)과 연관되는 BID(210)를 결정한다(블록 820). 도시된 예에서, 버전화 프로세서(310)는 블록 식별자 저장소(350)로부터 BID(210)를 판독함으로써 BID(210)를 결정한다. 버전화 프로세서(310)는 메모리 블록(208)의 어떤 레벨이 어떤 수신된 데이터로 기록되어야 하는지를 식별하기 위해 GID를 BID(210)와 비교한다(블록 825).
도시된 예에서, BID(210)가 GID(205)보다 더 작으면, 메모리 판독기(320)는 메모리 블록(208)의 제 1 층(예를 들어 MSB들(220))으로부터 현재의 데이터를 판독한다(블록 835). 메모리 기록기(330)는 그 후에 제 1 층으로부터 판독된 현재의 데이터를 메모리 블록(208)의 제 2 층(예를 들어, LSB들(230))에 기록한다(블록 840). 메모리 기록기는 그 후에 수신된 데이터를 메모리 블록(208)의 제 1 층(예를 들어, MSB들(220))에 기록한다(블록 850).
블록 825로 돌아와서, BID(210)가 GID(205)보다 더 크거나 같으면, 메모리 기록기(330)는 수신된 데이터를 메모리 블록(208)의 제 1 층(예를 들어, MSB들(220))에 기록한다(블록 830).
수신된 데이터를 적절한 층에 기록한 후에, 버전화 프로세서(310)는 메모리 블록(208)과 연관되는 BID(210)를 GID(205)의 값으로 세팅한다(블록 860). 그러므로, 도시된 예에서, 블록들(835, 840 및 850)은 체크포인팅 동작 이후에 제 1 기록 동작과 연관되어 수행된다. 도시된 예에서, 블록 830은 후속 기록 동작들과 연관되어 수행된다. 버전화 프로세서(310)는 그 후에 기록 요청을 확인응답한다(블록 870).
도 9는 도 3의 예시 메모리 제어기를 구현하기 위해 도 5, 도 6, 도 7 및/또는 도 8의 예시 머신 판독 가능 명령어들을 실행할 수 있는 예시 컴퓨터(900)의 블록도이다. 컴퓨터(900)는 예를 들어, 서버, 개인용 컴퓨터, 모바일 전화기(예를 들어, 셀룰러 폰), 개인용 디지털 보조장치(personal digital assistant; PDA), 인터넷 기기 또는 임의의 다른 유형의 컴퓨팅 디바이스일 수 있다.
이 즉각적인 예의 시스템(900)은 프로세서(912)를 포함한다. 예를 들어, 프로세서(912)는 임의의 원하는 군 또는 제조사로부터의 하나 이상의 마이크로프로세서들 또는 제어기들에 의해 구현될 수 있다.
프로세서(912)는 로컬 메모리(913)(예를 들어, 캐시)를 포함하고 버스(918)를 통해 휘발성 메모리(914) 및 비휘발성 메모리(916)를 포함하는 주 메모리와 통신한다. 휘발성 메모리(914)는 동기식 동적 랜덤 액세스 메모리(Synchronous Dynamic Random Access Memory; SDRAM), 동적 랜덤 액세스 메모리(Dynamic Random Access Memory; DRAM), RAMBUS 동작 랜덤 액세스 메모리(RDRAM) 및/또는 다른 유형의 랜덤 액세스 메모리 디바이스에 의해 구현될 수 있다. 도시된 예의 비휘발성 메모리(916)는 멀티-레벨 셀(MLC) 비휘발성 랜덤 액세스 메모리(NVRAM)에 의해 구현된다. 비휘발성 메모리(916)는 원하는 임의의 다른 유형의 메모리 디바이스(예를 들어, 플래시 메모리, 상-변화 메모리(phase-change memory; PCRAM), 멤리스터들 등)에 의해 구현될 수 있다. 주 메모리(914, 916)로의 액세스는 메모리 제어기(305)에 의해 제어된다. 도시된 예에서, 메모리 제어기(305)는 버스(918)를 통해 프로세서(912)와 통신한다. 일부 예들에서, 메모리 제어기(305)는 프로세서(912)를 통해 구현된다. 일부 예들에서, 메모리 제어기(305)는 비휘발성 메모리(916)를 통해 구현된다. 휘발성 메모리(914) 및/또는 비휘발성 메모리(916)는 전역 식별자 저장소(340) 및/또는 블록 식별자 저장소(350)를 구현할 수 있다.
컴퓨터(900)는 또한 인터페이스 회로(920)를 포함한다. 인터페이스 회로(920)는 이더넷 인터페이스, 범용 직렬 버스(USB) 및/또는 PCI 익스프레스 인터페이스와 같은 임의의 유형의 인터페이스 표준에 의해 구현될 수 있다.
하나 이상의 입력 디바이스들(922)은 인터페이스 회로(920)에 접속된다. 입력 디바이스(들)(922)은 사용자가 데이터 및 명령어들을 프로세서(912)에 입력하는 것을 가능하게 한다. 입력 디바이스(들)는 예를 들어, 키보드, 마우스, 터치스크린, 트랙-패드, 트랙볼, 아이소포인트(isopoint) 및/또는 음성 인식 시스템에 의해 구현될 수 있다.
하나 이상의 출력 디바이스들(924)은 또한 인터페이스 회로(920)에 접속된다. 출력 디바이스들(924)은 예를 들어, 디스플레이 디바이스들(예를 들어, 액정 디스플레이, 음극선관 디스플레이(CRT), 프린터 및/또는 스피커들)에 의해 구현될 수 있다. 인터페이스 회로(920)는 따라서 그래픽 구동 카드를 전형적으로 포함한다.
인터페이스 회로(920)는 또한 네트워크(926)(예를 들어, 이더넷 접속, 디지털 가입자 라인(digital subscriber line; DSL), 전화선, 동축 케이블, 셀룰러폰 시스템 등)를 통해 외부 컴퓨터들과 데이터를 교환하는 것을 용이하게 하기 위해서 모뎀 또는 네트워크 인터페이스 카드와 같은 통신 디바이스를 포함한다.
컴퓨터(900)는 또한 소프트웨어 및 데이터를 저장하기 위하여 하나 이상의 대용량 저장 디바이스들(928)을 포함한다. 그와 같은 대용량 저장 디바이스들(928)의 예들은 플로피 디스크 드라이브들, 하드 드라이브 디스크들, 컴팩트 디스크 드라이브들 및 디지털 다기능 디스크(DVD) 드라이브들을 포함한다. 대용량 저장 디바이스(928)는 전역 식별자 저장소(340) 및/또는 블록 식별자 저장소(350)를 구현할 수 있다.
도 5, 도 6, 도 7 및/또는 도 8의 코딩된 명령어들(932)은 대용량 저장 디바이스(928)에, 휘발성 메모리(914)에, 비휘발성 메모리(916)에, 로컬 메모리(913)에, 그리고/또는 CD 또는 DVD 같은 제거 가능 저장 매체 상에 저장될 수 있다.
상기 내용으로부터, 상기 개시된 제조 방법들, 장치 및 물품들은 멀티-레벨(MLC) 비휘발성 랜덤 액세스 메모리(NVRAM)를 사용하여 버전화되는 메모리가 가능한 것이 인정될 것이다. 유용하게는, 버전화는 최소 메모리 관리 동작들을 사용하여 구현된다. 그와 따라, 체크포인팅은 NVRAM에서 데이터를 고속 및 원자적/일관적으로 관리할 수 있다. 더욱이, 에러(예를 들어, 메모리 훼손, 시스템 충돌 등)로부터의 복구는, 복구 동안 최소량의 메모리 장소들이 변경되므로, 신속하다.
본원에서 특정한 예시 제조 방법들, 장치들 및 물품들이 기술되었을지라도, 본 특허가 포괄하는 범위는 이로 제한되지 않는다. 이와는 반대로, 본 특허는 본 특허의 청구항들의 범위 내에 완전히 해당하는 모든 제조 방법들, 장치들 및 물품들을 포괄한다.

Claims (14)

  1. 멀티-레벨(multi-level) 셀을 사용하여 버전화되는(versioned) 메모리를 구현하는 방법으로서,
    프로세서에 의해, 복수의 메모리 블록에 대응하는 전역 메모리 버전(global memory version)을 상기 복수의 메모리 블록 중 하나에 대응하는 블록 메모리 버전과 비교하는 단계와,
    상기 비교에 기초하여, 상기 복수의 메모리 블록 중 하나의 멀티-레벨 셀 내의 제 1 레벨에 저장된 데이터가 체크포인트 데이터를 나타내는지 혹은 상기 멀티-레벨 셀 내의 제 2 레벨에 저장된 데이터가 상기 체크포인트 데이터를 나타내는지를 결정하는 단계를 포함하는
    방법.
  2. 제 1 항에 있어서,
    상기 멀티-레벨 셀의 제 2 레벨이 상기 체크포인트 데이터를 저장할 때 수신된 데이터를 상기 멀티-레벨 셀의 제 1 레벨에 기록하는 단계를 더 포함하는
    방법.
  3. 제 1 항에 있어서,
    상기 멀티-레벨 셀의 제 1 레벨에 저장된 제 1 데이터를 상기 멀티-레벨 셀의 제 2 레벨에 기록하는 단계와,
    상기 제 1 데이터를 상기 멀티-레벨 셀의 제 2 레벨에 기록한 후에, 수신된 데이터를 상기 멀티-레벨 셀의 제 1 레벨에 기록하는 단계와,
    상기 멀티-레벨 셀의 제 2 레벨이 상기 체크포인트 데이터를 저장하고 있음을 후속 비교들이 나타내도록 상기 블록 메모리 버전을 세팅하는 단계를 더 포함하는
    방법.
  4. 제 1 항에 있어서,
    상기 멀티-레벨 셀 내에 저장된 데이터의 에러 상태를 검출하는 단계와,
    상기 에러 상태로부터의 복구를 위해 상기 멀티-레벨 셀의 체크포인트 레벨에 저장된 데이터를 판독하는 단계를 더 포함하는
    방법.
  5. 멀티-레벨 셀을 사용하여 버전화되는 메모리를 구현하는 장치로서,
    복수의 메모리 블록에 대응하는 전역 메모리 버전을 저장하는 전역 식별자 저장소와,
    상기 복수의 메모리 블록 중 하나에 대응하는 블록 메모리 버전을 저장하는 블록 식별자 저장소와,
    상기 복수의 메모리 블록 중 하나의 멀티-레벨 셀 내의 제 1 레벨에 저장된 데이터가 체크포인트 데이터를 나타내는지 혹은 상기 멀티-레벨 셀 내의 제 2 레벨에 저장된 데이터가 상기 체크포인트 데이터를 나타내는지를 결정하기 위해 상기 전역 메모리 버전을 상기 블록 메모리 버전과 비교하는 버전화 프로세서(a versioning processor)를 포함하는
    장치.
  6. 제 5 항에 있어서,
    상기 멀티-레벨 셀의 제 1 레벨 내에 저장된 데이터가 상기 체크포인트 데이터를 나타낼 때,
    상기 멀티-레벨 셀의 제 1 레벨에 저장된 제 1 데이터를 상기 멀티-레벨 셀의 제 2 레벨에 기록하고,
    상기 제 1 데이터가 상기 멀티-레벨 셀의 제 2 레벨에 기록된 후에, 수신된 데이터를 상기 멀티-레벨 셀의 제 1 레벨에 기록하고,
    상기 멀티-레벨 셀의 제 2 레벨에 저장된 데이터가 상기 체크포인트 데이터를 저장하고 있음을 상기 버전화 프로세서에 의한 후속 비교들이 표시하도록 상기 블록 메모리 버전을 세팅하는 메모리 기록기를 더 포함하는
    장치.
  7. 제 5 항에 있어서,
    상기 멀티-레벨 셀의 제 1 레벨에 저장된 데이터가 상기 체크포인트 데이터를 나타내지 않을 때, 수신된 데이터를 상기 멀티-레벨 셀의 제 1 레벨에 기록하는 메모리 기록기를 더 포함하는
    장치.
  8. 제 5 항에 있어서,
    상기 버전화 프로세서는 컴퓨팅 에러가 상기 멀티-레벨 셀의 제 1 레벨에 저장된 제 1 데이터와 연관되어 발생했는지를 결정하기 위하여 상기 블록 메모리 버전을 상기 전역 메모리 버전과 비교하는
    장치.
  9. 제 8 항에 있어서,
    상기 컴퓨팅 에러가 발생했을 때 상기 멀티-레벨 셀의 제 2 레벨로부터 제 2 데이터를 판독하기 위한 메모리 판독기를 더 포함하는
    장치.
  10. 제 8 항에 있어서,
    상기 컴퓨팅 에러가 발생하지 않았을 때 상기 멀티-레벨 셀의 제 1 레벨로부터 제 1 데이터를 판독하기 위한 메모리 판독기를 더 포함하는
    장치.
  11. 명령어들을 포함하는 유형적(tangible) 컴퓨터 판독 가능 저장 매체로서,
    상기 명령어들은 실행될 때, 상기 컴퓨터로 하여금,
    프로세서를 사용하여, 복수의 메모리 블록에 대응하는 전역 메모리 버전을 상기 복수의 메모리 블록 중 하나에 대응하는 블록 메모리 버전을 비교하게 하고,
    상기 비교에 기초하여, 상기 복수의 메모리 블록 중 하나의 멀티-레벨 셀 내의 제 1 레벨에 저장된 데이터가 체크포인트 데이터를 나타내는지 혹은 상기 멀티-레벨 셀 내의 제 2 레벨에 저장된 데이터가 상기 체크포인트 데이터를 나타내는지를 결정하도록 하는
    컴퓨터 판독 가능 저장 매체.
  12. 제 11 항에 있어서,
    상기 멀티-레벨 셀의 제 2 레벨이 상기 체크포인트 데이터를 저장할 때 상기 컴퓨터로 하여금 수신된 데이터를 상기 멀티-레벨 셀의 제 1 레벨에 저장하도록 하는 명령어들을 더 저장하는
    컴퓨터 판독 가능 저장 매체.
  13. 제 11 항에 있어서,
    상기 컴퓨터로 하여금 적어도,
    상기 멀티-레벨 셀의 제 1 레벨에 저장된 제 1 데이터를 상기 멀티-레벨 셀의 제 2 레벨에 기록하고,
    상기 제 1 데이터를 상기 멀티-레벨 셀의 제 2 레벨에 기록한 후에, 수신된 데이터를 상기 멀티-레벨 셀의 제 1 레벨에 기록하고,
    상기 멀티-레벨 셀의 제 2 레벨이 상기 체크포인트 데이터를 저장하고 있음을 후속 비교들이 표시하도록 상기 블록 메모리 버전을 세팅하도록 하는 명령어들을 더 저장하는
    컴퓨터 판독 가능 저장 매체.
  14. 제 11 항에 있어서,
    상기 컴퓨터로 하여금 적어도,
    상기 멀티-레벨 셀에 저장된 데이터의 에러 상태를 검출하고,
    상기 에러 상태로부터의 복구를 위해 상기 멀티-레벨 셀의 체크포인트 레벨에 저장되는 데이터를 판독하도록 하는 명령어들을 더 저장하는
    컴퓨터 판독 가능 저장 매체.
KR1020147020610A 2012-03-02 2012-03-02 멀티-레벨 셀을 사용하여 버전화되는 메모리들 KR101676932B1 (ko)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/US2012/027565 WO2013130106A1 (en) 2012-03-02 2012-03-02 Versioned memories using a multi-level cell

Publications (2)

Publication Number Publication Date
KR20140106739A KR20140106739A (ko) 2014-09-03
KR101676932B1 true KR101676932B1 (ko) 2016-11-16

Family

ID=49083129

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020147020610A KR101676932B1 (ko) 2012-03-02 2012-03-02 멀티-레벨 셀을 사용하여 버전화되는 메모리들

Country Status (5)

Country Link
US (1) US20150074456A1 (ko)
EP (1) EP2820548B1 (ko)
KR (1) KR101676932B1 (ko)
CN (1) CN104081362B (ko)
WO (1) WO2013130106A1 (ko)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2013162598A1 (en) 2012-04-27 2013-10-31 Hewlett-Packard Development Company, L.P. Local checkpointing using a multi-level cell
WO2015116078A1 (en) 2014-01-30 2015-08-06 Hewlett-Packard Development Company, L.P. Memory data versioning

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20090150599A1 (en) * 2005-04-21 2009-06-11 Bennett Jon C R Method and system for storage of data in non-volatile media

Family Cites Families (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4459658A (en) * 1982-02-26 1984-07-10 Bell Telephone Laboratories Incorporated Technique for enabling operation of a computer system with a consistent state of a linked list data structure after a main memory failure
US5210685A (en) 1985-03-08 1993-05-11 Westinghouse Electric Corp. Uninterruptible power supply system and load transfer static switch for such a system
US4814971A (en) * 1985-09-11 1989-03-21 Texas Instruments Incorporated Virtual memory recovery system using persistent roots for selective garbage collection and sibling page timestamping for defining checkpoint state
US5410685A (en) * 1990-06-12 1995-04-25 Regents Of The University Of Michigan Non-intrinsive method and system for recovering the state of a computer system and non-intrusive debugging method and system utilizing same
US5923830A (en) * 1997-05-07 1999-07-13 General Dynamics Information Systems, Inc. Non-interrupting power control for fault tolerant computer systems
US9213609B2 (en) * 2003-12-16 2015-12-15 Hewlett-Packard Development Company, L.P. Persistent memory device for backup process checkpoint states
US7366826B2 (en) 2004-12-16 2008-04-29 Sandisk Corporation Non-volatile memory and method with multi-stream update tracking
US7516267B2 (en) 2005-11-03 2009-04-07 Intel Corporation Recovering from a non-volatile memory failure
EP2126693A2 (en) * 2006-12-29 2009-12-02 Sandisk Corporation Methods and apparatuses for launching a program application
US7818610B2 (en) 2007-09-27 2010-10-19 Microsoft Corporation Rapid crash recovery for flash storage
EP2271987A4 (en) * 2008-05-01 2011-04-20 Hewlett Packard Development Co STORING CONTROL POINT DATA IN NON-VOLATILE MEMORY
US7979626B2 (en) 2008-05-13 2011-07-12 Microsoft Corporation Flash recovery employing transaction log
US8332578B2 (en) * 2009-07-31 2012-12-11 Intel Corporation Method and system to improve the performance of a multi-level cell (MLC) NAND flash memory
US9753877B2 (en) * 2009-11-30 2017-09-05 Avago Technologies General Ip (Singapore) Pte. Ltd. Memory read-channel with signal processing on general purpose processor
US8661213B2 (en) * 2010-01-06 2014-02-25 Vmware, Inc. Method and system for frequent checkpointing
US9558080B2 (en) * 2013-10-31 2017-01-31 Microsoft Technology Licensing, Llc Crash recovery using non-volatile memory

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20090150599A1 (en) * 2005-04-21 2009-06-11 Bennett Jon C R Method and system for storage of data in non-volatile media

Also Published As

Publication number Publication date
EP2820548A4 (en) 2015-10-07
WO2013130106A1 (en) 2013-09-06
US20150074456A1 (en) 2015-03-12
KR20140106739A (ko) 2014-09-03
CN104081362B (zh) 2017-06-23
EP2820548A1 (en) 2015-01-07
EP2820548B1 (en) 2016-12-14
CN104081362A (zh) 2014-10-01

Similar Documents

Publication Publication Date Title
JP6026538B2 (ja) 検証されたデータセットの不揮発性媒体ジャーナリング
US8799555B2 (en) Boot data storage schemes for electronic devices
US20140082264A1 (en) Nand flash storage chip checking method and device
KR102031606B1 (ko) 버저닝된 메모리 구현
US20200004437A1 (en) Determining when to perform a data integrity check of copies of a data set using a machine learning module
US10503601B2 (en) Method and apparatus for tracking objects in a first memory
RU2665884C2 (ru) Способ и устройство для восстановления базы данных резервного узла
KR101620772B1 (ko) 멀티-레벨 셀을 사용하는 로컬 체크포인팅
KR20190063448A (ko) 신규 메모리 디바이스
KR101676932B1 (ko) 멀티-레벨 셀을 사용하여 버전화되는 메모리들
US8423865B2 (en) Apparatus and method for storing data using non-volatile buffer
US20160246670A1 (en) Error correction for non-volatile memory
KR102389534B1 (ko) 레지스터 데이터 백업 및 복구
CN109254867B (zh) 数据冗余方法及装置
CN103365742B (zh) 加快快照服务重新上线速度的方法、设备和计算机程序
US10866867B2 (en) Method of error correction in a flash memory
TW202013211A (zh) 訓練人工智慧更正儲存裝置的對數概度比的方法
US20130107389A1 (en) Linking errors to particular tapes or particular tape drives
WO2019232727A1 (zh) 多位错误数据的纠正方法、装置、设备及存储介质
CN116225787A (zh) 一种ssd的元数据恢复方法、装置、设备及介质
CN117390027A (zh) 一种内存读写方法及其装置
CN114020499A (zh) 一种数据修复方法、装置及计算机可读存储介质
CN117406910A (zh) 数据存储方法、存储装置及计算机可读存储装置
WO2024076629A1 (en) Extended protection storage system put operation
CN115061728A (zh) 信息传输方法、装置、设备、存储介质和程序产品

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
AMND Amendment
N231 Notification of change of applicant
E601 Decision to refuse application
AMND Amendment
X701 Decision to grant (after re-examination)
GRNT Written decision to grant