KR101634412B1 - 내구성 강화 메모리 디바이스 - Google Patents

내구성 강화 메모리 디바이스 Download PDF

Info

Publication number
KR101634412B1
KR101634412B1 KR1020117015825A KR20117015825A KR101634412B1 KR 101634412 B1 KR101634412 B1 KR 101634412B1 KR 1020117015825 A KR1020117015825 A KR 1020117015825A KR 20117015825 A KR20117015825 A KR 20117015825A KR 101634412 B1 KR101634412 B1 KR 101634412B1
Authority
KR
South Korea
Prior art keywords
data
storage device
volatile storage
logical block
instruction
Prior art date
Application number
KR1020117015825A
Other languages
English (en)
Other versions
KR20110097937A (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 KR20110097937A publication Critical patent/KR20110097937A/ko
Application granted granted Critical
Publication of KR101634412B1 publication Critical patent/KR101634412B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/023Free address space management
    • G06F12/0238Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory
    • G06F12/0246Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory in block erasable memory, e.g. flash memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • 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

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Techniques For Improving Reliability Of Storages (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

내장된 내구성 강화 특성을 갖는 비휘발성 저장 디바이스가 개시된다. 상기 디바이스는 데이터를 명령으로부터 비휘발성 저장 디바이스 내의 비휘발성 메모리에 기록하고 명령으로부터 수신되는 데이터를 자체의 대응하는 논리 블록 어드레스와 조건부로 연관시킴으로써 기록 명령을 논리 블록 어드레스로 프로세싱한다. 두 개 이상의 수신된 기록 명령은 원자성 트랜잭션과 연관된 명령 세트를 한정한다. 세트 명령의 종단이 수신되면, 상기 디바이스는 각각의 기록 명령을 갖는 수신된 데이터를 자체의 대응하는 논리 블록 어드레스와 무조건적으로 연관시킨다. 전력 손실이 명령 세트의 수신을 중단시키면, 비휘발성 저장 디바이스는 원자성 트랜잭션이 시작된 후에 최종 일정한 데이터 상태를 복구시킬 수 있다. 기록 명령 트랜잭션 식별자는 디바이스가, 멀티-스레딩된 시스템 내의 원자성 트랜잭션을 한정하는 명령의 스레드와 상기 명령을 연관하도록 한다.

Description

내구성 강화 메모리 디바이스{RUGGEDIZED MEMORY DEVICE}
본 출원은 일반적으로 비휘발성 플래시 메모리 시스템에 관한 것이고, 보다 구체적으로는 내구성 강화 메모리 디바이스(ruggedized memory device)에 관한 것이다.
상업적으로 성공하여 현재 많이 사용되고, 특히 하나 이상의 집적 회로 디바이스 안에 플래시 EEPROM(Electrically Erasable and Programmable Read Only Memory) 셀을 이용한 스몰 폼 팩터 카드(small form factor card)의 형태의 비휘발성 메모리 제품이 존재한다. 상업적으로 구입 가능한 카드 포맷 중 일부는 컴팩트플래시(CompactFlash: CF) 카드, 멀티미디어 카드(MultiMedia card: MMC), 보안 디지털(Secure Digital: SD) 카드, 및 퍼스넬 태그(personnel tag: P-Tag)를 포함한다. 비휘발성 스몰 폼 팩터 카드를 통합하거나 액세스할 수 있는 호스트(host)는 개인용 컴퓨터, 노트북 컴퓨터, 개인용 휴대 정보 단말기(personal digital assistant: PDA), 다양한 데이터 통신 디바이스, 디지털 카메라, 셀룰러 전화기, 휴대용 오디오 재생기, 자동차 사운드 시스템, 및 유사한 유형의 장비를 포함한다. 메모리의 제어는 상기 카드 내의 제어기 상의 소프트웨어에 의해 달성될 수 있다. 메모리 카드 구현예 외에도, 이 유형의 메모리는 대안으로 다양한 유형의 호스트 시스템에 임베딩(embedding)될 수 있다. 제거 가능 및 임베딩된 애플리케이션 이 둘 모두에서, 호스트 데이터는 메모리 제어기 소프트웨어 및/또는 하드웨어에 의해 구현되는 저장 방식에 따른 메모리에 저장될 수 있다. 카드 내에 저장되는 데이터는 프로그램에 의해 제공되는 인터페이스를 통해, 일부 경우에 보안 하드웨어 또는 소프트웨어를 통해 액세스된다.
비휘발성 메모리 카드의 저장 밀도가 증가하면서 계속 증가하는 수의 호스트 애플리케이션으로 하여금 추가 저장 공간을 이용하도록 한다. 예를 들어, 추가 공간은 MP3 오디오 파일, 고해상도 이미지 파일, 비디오 파일, 및 문서의 저장에 이용될 수 있다. 셀룰러 전화 애플리케이션에서, 비휘발성 저장 공간은 멀티미디어 메시징 서비스(Multimedia Messaging Service: MMS) 객체 접속을 저장하는 것과 같이, 진보된 셀룰러 전화 서비스에 대한 다양한 데이터를 저장할 수 있다. 저장 공간은 또한 이메일 접속 목록 및 캘린더의 저장을 가능하게 함으로써 완전한 개인 정보 관리(personal information management: PIM) 기능을 용이하게 할 수 있다. 파일은 카드에 저장된 파일 시스템에 따라 카드 내에 조직될 수 있고 적어도 부분적으로 카드에 액세스하는 호스트에 의해 유지될 수 있다.
파일을 비휘발성 저장 디바이스 또는 메모리 카드에 기록하는 것과 같은 특정한 파일 시스템 동작은 하나의 일정한 데이터 상태(consistent data state)로부터 다른 일정한 데이터 상태로의 전이(transition)로서 여겨질 수 있다. 일정한 데이터 상태 사이에서의 전이를 발생시키기 위해 저장 디바이스 및 호스트 디바이스 사이의 개별 트랜잭션(transaction)의 시퀀스가 요구될 수 있다. 이 트랜잭션의 시퀀스 도중의 카드에 대한 전력의 손실(아마도 가능한 카드를 제거함으로써 발생되거나, 또는 호스트 디바이스에 대한 전력의 손실로 인한)로 인해 파일 시스템의 일관성이 쉽게 파손될 수 있다.
예를 들어, 호스트는 호스트 디바이스 드라이버에게 비휘발성 저장 디바이스에 데이터의 블록을 중첩 기록(overwrite)하라고 명령할 수 있다. 비휘발성 저장 디바이스 내의 블록을 새로운 데이터로 중첩 기록하는 프로세스는 원자성(atomic)이지 않을 수 있다. 원자성(atomicity)이라는 용어는, 계속하여 완수하거나 전혀 영향을 주지 않는 것이 보장되는 동작을 나타낸다.
원자성 트랜잭션(atomic transaction)은 호스트 호출자의 관점에서, 수행에 성공하거나 또는 실패하는 단일 동작으로 나타나는 동작의 세트를 나타낸다. 블록을 중첩 기록하는 것은 이 동작을 완료하기 위해 호스트 디바이스 드라이버가 비휘발성 저장 디바이스에 여러 별개의 명령을 발행하는 것이 필요할 수 있기 때문에 원자성이 아닐 수 있다. 전력 손실이 명령의 시퀀스 중간 동안에 발생하는 경우, 블록은 절반이 기록된 채로 남을 것이므로, 블록의 일부는 구 데이터를 포함하고, 블록의 일부는 새로운 데이터를 포함할 것이다. 일정한 데이터 상태는 전적으로 구 데이터를 갖는 블록(임의의 중첩 기록이 발생하기 전에), 또는 일단 새로운 데이터에 의해 전적으로 중첩 기록된 블록을 포함한다. 그러나, 블록이 구 및 새로운 데이터의 혼합을 포함하면, 이는 일관되지 않은 데이터 상태에 있으므로, 이는 저장 디바이스 또는 카드 파일 시스템은 오래된 상태(기록 동작 이전)도 아니고 또는 새로운 상태(성공적인 기록 동작 이후)도 아닌 상태로 남겨둔다.
다른 예에서, 호스트 애플리케이션은 새로운 파일을 비휘발성 저장 디바이스에 기록하도록 파일 시스템에 명령을 발할 수 있다. 이 태스크(task)를 완료하기 위해, 파일 시스템은 서너 개의 디바이스 드라이버 명령의 시퀀스를 발행할 수 있다. 명령의 시퀀스 내의 전력 손실은 이들 명령 중 한지 서너 개만이 완료되도록 할 것이며, 다른 명령은 발생하지 않을 것이다. 예를 들어, 파일은 실제로 디바이스에 기록될 수 있으나, 파일의 디렉토리 엔트리(directory entry)는 기록되지 않을 수 있으므로, 파일을 찾는 것이 이제 불가능할 수도 있다. 기존 파일을 새로운 콘텐츠로 중첩 기록할 때 이전 콘텐츠가 이미 상실된 반면에 새로운 콘텐츠가 아직 기록되지 않은 더 심한 위험이 발생하는데, - 이 상황은 매우 바람직하지 않다. 파일 시스템 구조 자체의 무결성(integrity)이 비 원자성 동작의 시퀀스를 중단함으로써 손상될 때 훨씬 더 심한 위험이 발생하는데, 왜냐하면 파일 시스템이 파일 할당표의 갱신 동안 전력 손실 시나리오를 수용하도록 설계되지 않는 경우, 전체 디바이스 콘텐츠가 손실될 수 있기 때문이다.
비휘발성 저장 디바이스에 "내구성 강화(ruggedized)" 파일 시스템을 제공함으로써 전력 손실 시나리오를 처리하기 위한 여러 기술이 존재한다. 내구성 강화 파일 시스템은 동작의 시퀀스가 완료되고 새로운 공지된 일정한 데이터 상태가 도달될 때까지 특정한 공지된 일정한 데이터 상태에서 유지하거나 상기 일정한 데이터 상태로 복구되는 능력을 갖는다. 새로운 일정한 데이터 상태가 도달되기 전에 어떤 중단(급작스런 전력-손실과 같은)은 이전의 일정한 데이터 상태 이후에 발생하는 동작의 "롤-백(roll-back)"을 발생시켜, 컴포넌트(component)를 이 제 1 상태로 남도록 한다. 즉, 파일 시스템 동작의 시퀀스는 새로운 일정한 데이터 상태로 또는 이전의 일정한 데이터 상태로 종료하지만, 이들 사이에서는 결코 종료하지 않는다. 그러므로, 내구성 강화 파일 시스템은 자체의 일관성을 상실하지 않고 임의의 급작스런 전력 손실에 견딜 수 있고, 일정한 데이터 상태로 복구될 수 있다.
파일 시스템을 내구성 강화하기 위한 일부 기술은 주기적으로 파일 시스템의 전부 또는 일부를 백업 테이프(backup tape)와 같은 다른 매체에 카피하는 것을 포함하였다. 고장이 발생하면, 파일 시스템은 백업 카피로부터 검색되어 일정한 데이터 상태를 복구할 수 있다. 이 방법은 통상적으로 백업을 행하거나 백업으로부터 복구될 때 수동 개입 및/또는 전체 저장 시스템을 오프라인할 것을 요구한다. 일부 파일 시스템에 의해 구현되는 다른 기술은 전체 디바이스 콘텐츠를 백업하지 않고, 오히려 파일 시스템의 메타데이터만을 백업한다. 백업 데이터 카피는 보호되는 디바이스에 저장된다. 또 다른 기술은 내구성 강화 목적을 위한 백업을 생성하도록 파일 시스템 메타데이터의 일부만을 복사함으로써, 백업을 생성하는 것과 연관되는 성능 및 저장 페널티(penalty)를 감소시키는 것을 포함한다.
파일 시스템 내구성(ruggedness)을 달성하기 위한 이들 방법은 파일 시스템 레벨에서 특수 데이터 구조 및 알고리즘을 구현하는 것에 기초한다. 예를 들어, 이 이전의 방법은 파일 시스템 할당표에서의 각각의 블록 엔트리에 대한 특수한 스냅샷 비트(snapshot bit)를 구현할 것을 요구하고, 또한, 파일 시스템의 이전의 스냅샷에 여전히 필요할 수 있는 블록을 소거하는 것을 방지하기 위하여 파일 삭제가 작동하는 방식의 변경을 요구한다. 파일 시스템 레벨에서 특수 데이터 구조 및 알고리즘을 이용하는데 서너 개의 단점이 있다. 첫 번째, 내구성 강화 파일 시스템이 유일한 알고리즘 및 데이터 구조를 갖는 특수하게 설계된 것인 경우, 특정 애플리케이션에 더욱 적합한 다른 파일 시스템을 이용할 때 내구성 강화 특성을 포기하거나 내구성 강화 특성을 다른 파일 시스템에 이식(port)할 필요가 있다. 두 번째, 특수 데이터 구조를 이용하는 내구성 강화 파일 시스템은 다른 파일 시스템과 호환 가능하지 않을 수 있다. 저장 디바이스가 내구성 강화 파일 시스템을 구비한 시스템으로부터 비 내구성 강화 파일 시스템으로 이동될 때, 또는 그 역일 때, 디바이스 콘텐츠는 상이하게 해석될 수 있거나 심지어 전혀 판독 불가능할 수도 있다. 세 번째, 내구성 강화 파일 시스템이 전형적으로 항상 특수 알고리즘을 이용하는 경우, 심지어 비휘발성 저장 디바이스에 대한 일부 동작이 내구성 보호를 요구하지 않을지라도 저장 공간 및 성능 페널티가 초래된다.
파일 시스템 내구성을 처리하기 위한 다른 공지되어 있는 기술은 시스템 자체 내가 아닌, 파일 시스템 명령을 서비스하는 블록 디바이스 드라이버에 비휘발성 저장 디바이스에 내구성 특성을 제공하는 것을 포함한다. 내구성 특성을 제공하기 위해 블록 디바이스 드라이버는, 파일 시스템으로 하여금 비휘발성 저장 디바이스의 현재 상태를 일정한 데이터 상태로 규정하도록 하고 일정한 데이터 상태 사이의 전이를 발생시키기 위해 요구될 수 있는 명령의 시퀀스의 시작 및 종단을 표시하도록 하는 명령을 내보낸다. 이렇게 함으로써, 블록 디바이스 드라이버는 전력이 손실되는 경우 일정한 데이터 상태를 복구하기 위한 시퀀스를 실행할 수 있다. 이 기술은 비휘발성 저장 디바이스와 통신하는 호스트의 블록 디아비스 드라이버에 대한 수정을 포함하는데, 왜냐하면 블록 디바이스 드라이버는 필수 데이터 구조를 유지하여 내구성을 제공하고 전력이 손실되는 경우 비휘발성 저장 디바이스를 일정한 데이터 상태로 복구하기 때문이다. 더욱이, 비휘발성 저장 디바이스가 일정한 데이터 상태 사이에서 전이하는 동안 하나의 호스트로부터 제거되고, 비휘발성 저장 디바이스가 내구성 강화 블록 디바이스 드라이버 없이 후속해서 다른 호스트에 재접속됨으로써 전력 손실 사건이 발생하는 경우, 비휘발성 저장 디바이스 내의 일정한 데이터 상태의 복구는 가능하지 않을 수 있다.
상기 문제를 처리하기 위해서, 파일 시스템 내구성을 위한 개선된 기술이 필요하다. 파일 시스템 내구성을 위한 방법 및 시스템이 본원에 기술되고, 여기서 호스트의 파일 시스템 코드 또는 블록 디바이스 드라이브 안쪽 대신에, 비휘발성 저장 디바이스 자체의 제어기 내에 서포트(support)가 제공된다. 일 실시예에서, 비휘발성 저장 디바이스는 내부 메모리 제어기를 포함하고, 상기 제어기는 플래시 관리 코드를 실행한다. 메모리 제어기는 호스트에 서너 개의 특수 명령을 내보내서 정규 디바이스 명령의 호출 사이의 이 특수 명령의 호출을 삽입함으로써 호스트로 하여금 비휘발성 메모리에 대한 안전한 동작을 실행하도록 한다. 제어기 상에서 운영되는 플래시 관리 코드는 상기 특수 명령에 대한 서포트를 구현한다. 호스트 파일 시스템 및 블록 디바이스 드라이버는 단순히 상기 특수 명령을 이용하고, 다른 방식으로 내구성 강화 동작을 제공하는데 요구되는 데이터 구조 관리가 완화된다. 예를 들어, 예시적인 시퀀스는 하나의 특수 명령을 이용하여, 현재 상태가 저장 디바이스가 시퀀스의 완료 이전에 중단되는 경우 복구되어야만 하는 "폴백(fallback)" 상태 또는 일정한 데이터 상태임을 비휘발성 메모리 디바이스에 고지할 수 있다. 이 명령을 송신한 후에, 호스트는 블록을 삭제, 기록, 또는 중첩 기록하는 것과 같이, 파일 시스템에 의해 요구되는 임의의 동작을 실행할 수 있다. 최종적으로, 원자성 시퀀스가 완료되고, 그러므로 새로운 일정한 데이터 상태가 도달되었음을 비휘발성 저장 디바이스에 고지하기 위해 제 2 특수 명령이 이용될 수 있다.
특별한 명령에 응답하여, 비휘발성 저장 디바이스에 있는 제어기는 필수 데이터 구조 또는 플래그(flag)를 생성 및 관리하여 최후의 일정한 메모리 상태 이후로 발생했던 메모리 트랜잭션을 표시한다. 호스트가 일정한 데이터 상태 사이에서 전이하고 있는 동안 비휘발성 저장 디바이스가 전력 중단을 체험하는 경우, 디바이스는 전력이 디바이스에 복구될 때 호스트의 도움 없이 일정한 데이터 상태를 복구시킬 수 있다. 본원에서 제공되는 개념(들)은 다양한 실시예로 구현될 수 있고, 이 요약은 다수의 예시적인 실시예를 포함한다.
일 실시예에서, 비휘발성 저장 디바이스에서 원자성 트랜잭션을 프로세싱하는 방법이 존재한다. 명령 세트는 비휘발성 저장 디바이스에서 수신되고, 여기서 명령 세트는 둘 이상의 기록 명령을 포함하고, 각각의 기록 명령은 대응하는 논리 블록 어드레스와 연관되고 데이터를 포함한다. 비휘발성 저장 디바이스는 각각의 명령으로부터의 데이터를 비휘발성 저장 디바이스 내의 비휘발성 메모리에 기록하고, 각각의 기록 명령으로부터 수신되는 데이터를 자체의 대응하는 논리 블록 어드레스에 조건부로 연관시킴으로써 기록 명령 각각을 프로세싱한다. 명령 세트의 종단을 나타내는 명령은 비휘발성 저장 디바이스에서 수신된다. 이에 응답하여, 그리고 비휘발성 저장 디바이스 내의 데이터를 이동시키지 않고, 명령 세트 내의 기록 명령과 연관되는 각각의 논리 블록 어드레스의 경우, 비휘발성 저장 디바이스는 논리 블록 어드레스와 조건부로 연관되는 명령 세트의 최종 명령의 데이터를 논리 블록 어드레스와 무조건부로 연관시킨다. 하나의 구현예에서, 명령 세트 내의 최초 명령을 수신하기 전에, 명령 세트의 시작을 나타내는 명령이 또한 수신될 수 있다.
다른 실시예에서, 비휘발성 저장 디바이스에서의 원자성 트랜잭션을 프로세싱하는 방법이 제공된다. 비휘발성 저장 디바이스는 명령 세트를 수신하고, 여기서 명령 세트는 둘 이상의 기록 명령을 포함하고 각각의 기록 명령은 대응하는 논리 블록 어드레스와 연관되고 데이터 및 트랜잭션 식별자를 포함한다. 트랜잭션 식별자는 비휘발성 저장 디바이스가 수신된 기록 명령을 명령 세트와 연관하는 것을 허용할 수 있고, 여기서 비휘발성 저장 디바이스와 통신하는 멀티-스레딩된(multi-threaded) 호스트는 비휘발성 저장 디바이스로 송신되는 명령 세트의 일부인 기록 명령 사이에 다른 명령을 인터리브(interleave)할 수 있다. 비휘발성 저장 디바이스는 비휘발성 저장 디바이스 내의 비휘발성 메모리에 각각의 기록 명령으로부터의 데이터를 기록하고, 각각의 기록 명령으로부터 수신된 데이터를 자체의 대응하는 논리 블록 어드레스와 조건부로 연관시킴으로써 기록 명령 각각을 프로세싱한다. 트랜잭션 식별자와 연관되는 명령 세트의 종단을 나타내는 명령의 종단이 수신되면, 상기 트랜잭션 식별자와 연관된 조건부로 수신된 데이터는 대응하는 논리 블록 어드레스와 무조건부로 연관된다. 구체적으로, 명령 세트 내의 기록 명령으로부터의 데이터와 연관되는 각각의 논리 블록 어드레스의 경우, 논리 블록 어드레스는 상기 논리 블록 어드레스와 조건부로 연관되는 명령 세트의 최종 명령의 데이터와 무조건부로 연관된다.
또 다른 실시예에서, 멀티-스레딩된 시스템에서 데이터를 비휘발성 저장 디바이스로 기록하는 방법이 존재한다. 트랜잭션 식별자가 요청되고 비휘발성 저장 디바이스로부터 수신된다. 명령 세트는 비휘발성 저장 디바이스로 송신되고, 여기서 명령 세트는 트랜잭션 식별자와 연관되는 둘 이상의 명령을 포함하고, 상기 세트 내의 적어도 하나의 명령은 데이터를 포함한다. 트랜잭션 식별자와 연관되는 명령 세트의 종단을 나타내는 세트 명령의 종단은 비휘발성 저장 디바이스에 송신된다.
다른 실시예에서, 비휘발성 저장 디바이스 내의 판독 명령을 프로세싱하는 방법이 존재한다. 요청된 데이터를 지정하는 판독 명령은 비휘발성 저장 디바이스에서 수신된다. 판독 명령에 응답하여, 데이터는 두 판독 절차 중 하나에 따라 검색된다. 제 1 절차에서, 개방 트랜잭션과 연관되지 않은, 요청된 데이터 중 가장 최근에 기록된 버전이 선택된다. 제 2 절차에서, 요청된 데이터 중 가장 최근에 기록된 버전이 선택된다. 일 실시예에서, 이용될 절차는 구성 가능 파라미터에 의해 규정된다. 그리고나서 선택된 데이터가 복귀된다.
다른 실시예, 및 이들의 특징, 및 장점이 가능하고 다음의 도면 및 상세한 설명의 연구를 통해 당업자에게는 명백할 것이고 명백해질 것이다. 그러므로, 아래 청구항에 열거되는 바와 같은 청구된 발명의 범위는 본원에서 도시되고 기술된 실시예에 제한되지 않도록 의도된다.
상술한 바와 같이 본 발명에 의해 파일 시스템 내구성을 개선하는 방법과 시스템을 제공하는 효과를 갖는다.
도면에서의 구성요소는 반드시 축적대로인 것은 아니며, 대신 이의 다양한 양상을 설명하기 위하여 강조된다. 더욱이, 도면에서, 동일한 참조 번호가 상이한 도면에 걸쳐 대응하는 부분에 병기된다:
도 1은 비휘발성 저장장치에 대한 예시적인 시스템을 도시한 다이어그램.
도 2는 비휘발성 메모리의 N개의 논리 블록으로의 예시적인 논리 조직화를 도시한 다이어그램.
도 3은 예시적인 비휘발성 메모리 저장 조직 및 비휘발성 저장 디바이스 내의 제어기에 의해 유지되는 어드레스 매핑(address mapping)을 도시한 도면.
도 4a 내지 4e는 두 일정한 데이터 상태 사이에서 전이할 때 비휘발성 저장 디바이스 내의 메모리의 논리 대 물리 매핑의 예시적인 시퀀스를 도시한 다이어그램.
도 5는 예시적인 비휘발성 메모리 저장 조직 및 비휘발성 저장 디바이스 내의 제어기에 의해 유지되는 어드레스 매핑을 도시한 도면.
도 6a 내지 6e는 두 일정한 데이터 상태 사이에서 전이할 때 비휘발성 저장 디바이스 내의 메모리의 논리 대 물리 매핑의 예시적인 시퀀스를 도시한 다이어그램.
도 7은 예시적인 비휘발성 메모리 저장 조직 및 비휘발성 저장 디바이스 내의 제어기에 의해 유지되는 어드레스 매핑을 도시한 도면.
도 8a 내지 8e는 두 일정한 데이터 상태 사이에서 전이할 때 비휘발성 저장 디바이스 내의 메모리의 논리 대 물리 매핑의 예시적인 시퀀스를 도시한 다이어그램.
도 9는 예시적인 비휘발성 메모리 저장 조직 및 유닛 기반 비휘발성 저장 디바이스(150) 내의 제어기에 의해 유지되는 어드레스 매핑을 도시한 도면.
도 10a 내지 10e는 두 일정한 데이터 상태 사이에서 전이할 때 유닛-기반 비휘발성 저장 디바이스 내의 메모리의 논리 대 물리 매핑의 예시적인 시퀀스를 도시한 다이어그램.
도 11a 내지 11e는 각각 서로의 동작을 인지하지 않는 두 태스크가, 저장 디바이스 콘텐츠를 동시에 수정할 때 발생할 수 있는 비휘발성 저장 디바이스 내의 메모리의 논리 대 물리 매핑의 예시적인 시퀀스를 도시한 다이어그램.
도 12는 예시적인 비휘발성 메모리 저장 조직 및 비휘발성 저장 디바이스 내의 제어기에 의해 유지되는 어드레스 매핑을 도시한 도면.
도 13a 내지 13f는 제어기가 멀티-스레딩된 시스템 내의 단일 트랜잭션과 연관되는 기록 명령을 프로세싱하는 동안 비휘발성 저장 디바이스 내의 메모리의 논리 대 물리 매핑의 예시적인 시퀀스를 도시한 다이어그램.
도 14a 내지 14e는 각각 서로의 동작을 인지하지 않는 두 태스크가, 트랜잭션 식별자를 포함하는 명령을 이용하여 저장 디바이스 콘텐츠를 동시에 수장할 때 발생할 수 있는 비휘발성 저장 디바이스 내의 메모리의 논리 대 물리 매핑의 예시적인 시퀀스를 도시한 다이어그램.
도 15는 단일 스레딩된 시스템 내의 호스트로부터의 기록요청을 프로세싱하는 비휘발성 저장 디바이스 내의 제어기에 대한 예시적인 단계를 도시하는 도면.
도 16은 멀티-스레딩된 시스템 내의 호스트로부터의 기록 요청을 프로세싱하는 비휘발성 저장 디바이스 내의 제어기에 대한 예시적인 단계를 도시한 도면.
탈착 가능 매체 카드와 같은 비휘발성 저장 디바이스는 개인용 컴퓨터, 노트북 컴퓨터, 개인용 휴대 정보 단말기(PDA), 다양한 데이터 통신 디바이스, 디지털 카메라, 셀룰러 전화기, 휴대용 오디오 재생기, 자동차 사운드 시스템, 및 유사한 유형의 장비를 포함하는, 다양한 호스트 시스템에서 이용될 수 있다. 새로운 호스트 애플리케이션이 계속해서 개발되면서 비휘발성 저장 디바이스의 증가하는 저장 용량을 이용한다. 예를 들어, 개별 호스트 애플리케이션은 MP3 오디오 파일, 고해상도 이미지 파일, 비디오 파일, 문서, 멀티미디어 메시징 서비스(MMS) 객체 접속, 이메일 메시지, 어드레스 북, 및 캘린더를 판독 또는 기록할 수 있다.
탈착 가능 매체 카드를 구비한 휴대용 시스템에서, 카드상에 저장된 파일을 분실할 위험이 존재한다. 구체적으로, 파일 동작 중에 카드로의 전력이 중단되면 저장 디바이스의 파일 시스템은 안정되지 않거나 일관되지 않은 데이터 상태로 남아 있을 수 있다. 예를 들어, 메모리 카드로의 기록 동작 중에 배터리로 전원이 공급되는 디바이스의 전력 중단은 파일 데이터, 파일 시스템 디렉토리 구조, 도는 일 둘 모두를 일관되지 않은 데이터 상태로 남도록 한다. 유사하게, 사용자가 파일 기록 또는 소거 동작 중에 호스트 디바이스로부터 비휘발성 메모리 카드를 제고하는 경우, 메모리 카드의 파일 시스템이 파손될 수 있다.
본 실시예는 내구성 강화 파일 시스템을 지원하는 개선된 비휘발성 저장 디바이스에 관한 것이다. 구체적으로, 비휘발성 저장 디바이스는 카드 내의 파일 시스템에 내구성을 제공한다. 비휘발성 저장 디바이스 내의 제어기는 호스트가 일정한 데이터 상태를 규정하는데 이용될 수 있는 전문화된 명령을 지원한다. 제어기는 카드 내에서 유지되는 전문화된 데이터 구조를 지원하여 호스트가 마지막으로 일정한 데이터 상태를 설정한 이후에 발생했던, 저장 시스템 내의 데이터로의 변화를 추적한다. 전력 중단이 발생하면, 비휘발성 메모리 카드 내의 제어기는 변화를 "롤-백"하여 호스트에 의해 규정된 최종 일정한 데이터 상태를 복구한다. 제어기는 심지어 일정한 데이터 상태를 규정하는데 전문화된 내구성 강화 명령을 다른 방법으로 이용할 수 없는 호스트 디바이스에 재연결될 때조차도 일정한 데이터 상태를 복구할 수 있는데, 왜냐하면, 제어기는 단지 호스트 디바이스에만 의존하여 일정한 데이터 상태를 규정하고, 상기 제어기는 후술되는 바와 같이 자기 자신의 데이터 구조를 구성하여 그것이 호스트로부터의 도움없이 저장 디바이스를 일정한 데이터 상태로 복구하도록 하기 때문이다. 달리 말하면, 호스트는 메모리 카드에 의해 지원되는 전문화된 명령을 사용하여 상기 카드의 내구성 특성을 이용하는 선택사양을 갖는다. 그러나, 상기 카드는 호스트로부터 어떠한 명령 또는 지시도 수신하지 않고 일정한 데이터 상태를 복구할 수 있다. 그러므로, 최종 일정한 데이터 상태로의 복구는 카드의 내구성 강화 특성을 유용하게 이용하는 호스트 소프트웨어와는 달리, 호스트의 임의의 능력 또는 속성에 의존하지 않는다.
앞으로의 설명에서 우선 블록은 모든 물리적 매체 동작(판독, 기록, 소거/삭제, 할당)에 대해 이용될 수 있는 저장의 유닛이고, 호스트 컴퓨터 및 저장 디바이스 사이의 데이터 교환 유닛임이 가정된다. 게다가, 이 가정이 소거 또는 할당에 반드시 참이 아닌 더 일반적인 경우가 또한 아래에 제공된다. 더욱 자세하게 후술되는 바와 같이, 플래이 메모리 용어에서 하나의 동작 시에 소거될 수 있는 저장 공간의 가장 작은 청크(chunk)를 나타내는데 사용된 "블록"이라는 용어에 관하여 혼돈을 피하도록 주의해야 한다. 이 개념은 본원에서 "유닛"으로 칭해지고, "블록"이라는 용어는 본원에서 사용될 때는 호스트 및 저장장치 사이에서 교환되는 데이터의 기본 청크 또는 이의 대응하는 물리적 할당 공간을 나타낸다.
도 1은 호스트에 의해 비휘발성 저장장치에 액세스하기 위한 예시적인 시스템(100)을 도시하는 다이어그램이다. 시스템(100)은 호스트(110) 및 비휘발성 저장 디바이스(150)를 포함한다. 호스트(110) 및 비휘발성 저장 디바이스(150)를 구성하는 구성요소는 하드웨어, 소프트웨어, 또는 하드웨어 및 소프트웨어의 결합으로 구현될 수 있다. 일 실시예에서, 비휘발성 저장 디바이스(150)는 California, Milpitas의 SanDisk Corporation의 저장 디바이스인 TrustedFlashTM 카드이다. 호스트(110) 및 비휘발성 저장 디바이스(150)는 통신 인터페이스(190)를 통해 통신할 수 있다. 통신 인터테이스는 범용 직렬 버스(Universal Serial Bus: UBS) 인터페이스, 보안 디지털(SD) 인터페이스, 또는 호스트(110) 및 비휘발성 저장 디바이스(150) 사이에서 명령 및 데이터를 교환할 수 있는 임의의 통신 인터페이스 또는 프로토콜 또는 프로토콜의 결합일 수 있다. 예를 들어, 호스트(110)는 데이터 및 명령은 통신 인터페이스(190)를 통해 전송하여 데이터를 비휘발성 저장 디바이스(150)에 저장할 수 있다. 다른 예로, 호스트(110)는 명령을 통신 인터페이스(190)을 통해 송신하여 비휘발성 저장 디바이스(150)로부터 데이터를 판독할 수 있고, 비휘발성 저장 디바이스(150)는 통신 인터페이스(190)를 통해 데이터를 호스트(110)로 복귀시킬 수 있다. 통신 인터페이스(190)를 통해 송신될 수 있는 다른 파일 동작은 파일의 개방, 폐쇄, 확장, 및 삭제를 포함한다. 더 후술되는 바와 같이, 파일 시스템(130) 및 디바이스 드라이버(140)는 호스트 애플리케이션(120)에 의해 요청되는 파일 레벨 동작을 등가의 블록 레벨 명령 세트로 변환하여 비휘발성 저장 디바이스(150)에 송신한다. 이 변환은 비휘발성 저장 디바이스(150)가 내부에 저장되어 있는 데이터의 파일 시스템 구조를 인지할 수 없기 때문에 요구될 수 있는데, 왜냐하면 비휘발성 저장 디바이스(150)가 자체로부터 판독되고 자체에 기록되는 데이터의 블록에 대해 주로 동작하기 때문이다.
비휘발성 저장 디바이스(150)는 통신 인터페이스(190)를 통한 호스트(110)로부터의 명령을 프로세싱하는 제어기(160), 자기 자신의 데이터를 저장하고 다른 계산 태스크를 실행할 수 있는 CPU, 및 제어기(160), 궁극적으로는 호스트(110)의 명령으로 데이터를 저장하는 비휘발성 메모리(180)를 포함할 수 있다. 제어기(160)는 하드웨어 또는 소프트웨어의 임의의 결합으로 구현될 수 있다. 일 실시예에서, 제어기(160)는 주로 CPU(170) 상에서 수행되는 소프트웨어 코드이다.
호스트(110)는 비휘발성 저장 디바이스(150) 내의 데이터를 저장하거나 상기 데이터에 액세스할 수 있는 하나 이상의 애플리케이션(120)을 포함할 수 있다. 일 실시예에서, 하나 이상의 사용자는 하나 이상의 애플리케이션(120)을 이용하여 비휘발성 저장 디바이스(120) 내의 데이터를 저장하거나 상기 데이터에 액세스할 수 있다. 더욱이, 비휘발성 저장 디바이스(150) 내의 프로세서(170) 상에서 운영되는 애플리케이션은 내부의 데이터를 저장하거나 상기 데이터에 액세스할 수 있다. 비휘발성 저장 디바이스(150)의 관점에서, 이 액세스 시도의 일부 또는 전부는 둘 이상의 개별 엔티티(entity)로부터 기원하는 것으로 보일 수 있다.
애플리케이션(120)은 호스트 파일 시스템(130)에 의해 제공되는 애플리케이션 프로그래밍 인터페이스(application programming interface)(API)에 의존하여 비휘발성 저장 디바이스(150)로의 파일 레벨 액세스를 실행할 수 있다. 각각의 저장 디바이스가 자기 자신의 고유한 인터페이스 및 특성을 가짐으로써 함께 동작하는 것이 매우 불편해질 수 있기 때문에, 호스트(110) 상에서 운영되는(또는 운용 시스템이 이용되지 않을 때 베어 하드웨어(bare hardware) 상에서 운영되는) 운영 시스템 내에 포함되는 소프트웨어 디바이스 드라이버(140)를 갖는 것이 일반적인 경우이며, 여기서 디바이스 드라이버(130)는 파일 시스템(130)과 같이 비휘발성 저장 디바이스(150)에 액세스하고자 하는 다른 소프트웨어 구성요소에 간소화되고 표준화된 인터페이스를 제공한다. 파일을 저장하는데 이용되는 저장 디바이스(150)(즉, 디스크, 디스켓 등)의 경우(그러나, 단지 그것들의 경우만은 아니다), 저장 디바이스의 디바이스 드라이버에 의해 제공되는 인터페이스는 통상적으로 "블록 디바이스 드라이버"로 공지되는 유형에 속한다. 그와 같은 디바이스 드라이버(140)는 단일 바이트 대신 데이터의 블록을 이용하여 자신들의 고객과 상호 작용한다. 이는 입력 및 출력 동작 모두에, 즉 데이터를 판독하고 데이터를 비휘발성 저장 디바이스(150)에 기록하는 것 이 둘 모두에 적용된다. 블록 디바이스의 가장 흔한 예는 자기 디스크이며, 자기 디스크의 하드웨어 인터페이스는 통상적으로 512 바이트 이상과 같이, 완전한 블록만을{통상적으로 본 상황에서 "섹터(sector)"로 칭해진다} 전송하도록 구성된다. 물리적 저장 디바이스(150)가 블록 디바이스 인터페이스를 제공하는 디바이스 드라이버(140)를 가지기 위해 물리적으로 블록 동작으로 제한될 필요가 없음이 강조되어야 한다. 예를 들어, 배터리로 지원되는 RAM 디스크는 블록으로 물리적으로 제한되지 않고 그 메모리 바이트 각각을 물리적으로 판독 및 기록할 수 있다. 그러나, 전형적으로 상기 디스크의 디바이스 드라이버(140)는 시스템의 나머지 구성요소에 블록 디바이스 인터페이스를 제공하여, 자기 디스크와 호환 가능하고 상호 교환 가능하다. 그러므로, 본 실시예의 목적을 위해, 블록 디바이스는 자체의 드라이버가 자체의 실제 물리적 구조와는 관계없이, 블록 디바이스 인터페이스를 제공하는 임의의 디바이스이다.
비휘발성 저장 디바이스(150)와 같은 블록 디바이스는 호스트에 일정한 고정된 크기의 블록의 선형 어레이로 나타난다. 일 실시예에서, 블록은 512 바이트의 데이터를 포함한다. 블록 각각의 블록은 도 2에 도시되는 바와 같이, 다른 블록과 관계없이 어레이 내의 자신의 인덱스 또는 어드레스를 이용하여 판독 또는 기록될 수 있다. 상기 도면에서 도시되는 바와 같이, 하나의 실현예는 블록을 블록 번호 0부터 블록 번호 (N-1)까지 번호를 부여하는 것으로, 여기서 N은 디바이스 드라이버에 의해 제공되는 블록의 수이다. 도 2에 도시된 선형 어레이 구조는 반드시 물리적 디바이스 레벨로 존재할 필요가 없다. 예를 들어, 플래시 디스크 블록 디바이스 드라이버(140)는 또한 이 선ㅎ여 어레이 이미지를 제공하지만, 내적으로 비휘발성 메모리(180) 내의 물리 블록은 통상적으로 플래시 메모리 내의 기록 제한 및 가능성 있는 불량한 블록의 존재로 인해 무작위한 순서로(블록 번호 0이 물리적으로 중간 또는 종단에 위치할 수 있도록) 산개되고, 여기서 제어기(160)는 이 선형 또는 논리 어레이 이미지를 매체(180) 상의 실제 물리 블록으로 재 매핑한다. 블록 디바이스 드라이버(140)는 콘텐츠의 정보가 상위 소프트웨어 계층에 의해 자신의 블록 내에 놓이도록 하지 않음이 또한 이해되어야 한다.
다시 도 1을 참조하면, 파일 시스템(FS) 소프트웨어 계층(130)은 디바이스 드라이버(140)의 상부에 있을 수 있다. 파일 시스템은 단지 훨씬 더 자연스럽고 전형적인 프로그래머 또는 사용자에게 편리한 파일의 개념만을 이용하여 애플리케이션 프로그램이 저장 디바이스와 상호 작용하는 것을 인에이블(enable)함으로써, 물리적 디바이스로부터 추가 추상화(abstraction)를 제공하는 소프트웨어 구성요소이다. 파일 시스템(130)은 블록 디바이스 상의 사용자 데이터를 일부 논리 구조로 조직화하고, 파일의 데이터를 포함하는 블록을 파일의 속성(즉, 파일 명칭, 생성 일자, 액세스 허용)을 연관시킴으로써 이 추상화를 달성한다. 이 목적을 위해 파일 시스템(130)은 사용자에게 직접적으로 보이지 않는 메타데이터를 비휘발성 메모리(180)에 저장한다. 메타데이터는 파일 시스템 내부 부기 정보를 포함하여, 메타데이터는 상기 부기 정보에 의해 비휘발성 메모리(180)에 저장되는 사용자 파일을 추적하고 상기 파일에 액세스할 수 있다. 예를 들어, 상업적으로 구입 가능한 가장 간단한 파일 시스템 중 하나인 Microsoft DOS FAT12 파일 시스템은, 제 1 디바이스 블록 내의 다른 메타데이터 구조의 위치, 디바이스의 할당 맵인 파일 할당표(FAT) 중 하나 이상의 카피, 및 명칭에 의해 파일을 찾기 위한 루트 디렉토리 구조를 가능하게 하는 얼마간의 기본 파라미터를 포함하는 부트 섹터(boot sector)를 저장 디바이스(150)에 저장한다. 애플리케이션 프로그램(120)은 기저의 블록 구조에 완전히 무지한, "파일 개방", "파일 삭제" 등과 같은 명령을 발행함으로써, 파일-레벨에 있는 파일 시스템과 상호 작용한다. 오늘날 사용중인 많은 파일 시스템이 존재하고, 이들 파일 시스템은 자신의 내부 구조 및 특징들이 현저하게 다르다. 많은 경우(Linux 운영 시스템에 있어서와 같이)에서, 운영 시스템은 여러 파일 시스템을 자신의 사용자에게 더 제공하고 사용자는 자신의 요구에 가장 적합한 것을 선택할 수 있다.
실시예는 "논리 블록", "물리 블록" 및 "블록의 체인"의 통상적인 개념에 의존한다. 도 3은 예시적인 비휘발성 메모리(18) 저장 조직 및 비휘발성 저장 디바이스(150) 내의 제어기에 의해 유지되는 어드레스 매핑을 도시한다. 디바이스 드라이버(140)는 논리 블록과 상호 작용하고, 호스트(110)는 저장 디바이스(150)가 블록 중 특정한 수(도 3의 경우 N)를 가지는 것으로 인지한다. 논리 블록은 실제 저장장치는 아니지만, 오히려 실제 물리 블록 저장장치와 연관된다. 내부적으로 메모리(180)는 아주 많은 물리 블록(도 3의 경우 P)을 포함한다. 호스트가 논리 블록에 기록 또는 판독 동작을 명령하면, 제어기(160)는 지정된(논리 블록 어드레스를 통한) 논리 블록을 비휘발성 메모리(150) 내의 물리 블록으로 재 매핑한다. 논리 및 물리 블록 사이의 이 구별은 당업계에 아주 널리 공지되어 있다. 많은 플래시 메모리 디스크 관리 시스템은 그와 같은 장치에 기초한다. 그러나, 플래시 디스크에서, 그와 같은 장치가 필요한 것은, 이미 기록된 블록을 먼저 소거하지 않고 상기 블록에 중첩 기록하는 무능, 또는 물리적 매체 내의 불량한 블록의 존재와 같이, 플래시 메모리가 지닌 고유한 특성의 결과이다. 후술되는 실시예는 그와 같은 장치를 요구할 수 있고, 따라서, 실시예 중 하나에 따라 구현되는 제어기(160)는 심지어 다른 이유로 이 구조를 필요로 하지 않는 경우에도 상기 구조를 이용한다.
실시예에서, 물리 블록의 수 P는 논리 블록의 수 N보다 큰 것이 항상 참이어야만 한다. 비 내구성 강화 비휘발성 저장 디바이스에서, 논리 블록당 하나의 물리 블록이 할당될 수 있다. 대조적으로, 내구성 강화 비휘발성 저장 디바이스에서 이것은 이론적으로 불가능한데, 이는 하나 이상의 물리 블록은 비휘발성 저장 디바이스(150)에 대한 전력 손실의 경우 일정한 데이터 상태의 복구를 가능하게 하기 위해 논리 블록에 조건부로 연관될 수 있기 때문이다. 일단 제어기(160)에 특정 상태가 현재 폴-백 상태 또는 일정한 데이터 상태임이 고지되면(호스트(110)로부터 수신되는 명령을 통해), 논리 블록 어드레스 새로운 데이터로 중첩 기록하기 위해 후속 명령이 수신될 때, 제어기(160)는 구 데이터(이전 상태로의 복구가 필요한 경우) 및 새로운 데이터(명령 세트 시퀀스가 성공적으로 완료되고 새로운 일정한 데이터 상태로의 전이가 발생하는 경우) 이 둘 모두를 비휘발성 저장 디바이스(150) 상에 유지해야만 한다. 이것은 일부 물리 블록이 명령 세트 시퀀스 동안 기록된 논리 블록 어드레스와 연관되는 조건부 저장 데이터의 상기 대안의 카피를 포함하는데 고려되지 않아야만 함을 의미한다. 그러므로, 논리 블록보다 물리 블록이 더 많아야만 한다. 이출된(exported) 논리 블록의 수를 초과하는 이용 가능한 여분의 물리 블록의 수는 시스템이 생성될 때(즉, 디바이스(150)를 포맷할 때) 고정될 수 있거나 동작 중에 동적으로 변경될 수 있다. 상기 수를 큰 값으로 설정하면 다량의 새로운 데이터가 하나의 일정한 데이터 상태로부터 다른 일정한 데이터 상태로의 전이 전에 비휘발성 저장 디바이스에 기록될 수 있는 이점이 있으나, 호스트(110)에 의해 사용하기 위해 이출될 수 있는 논리 블록의 수가 감소함으로써, 저장 디바이스(150)의 논리 크기가 감소하는 단점이 있다. 상기 수를 작은 값으로 설정하면 논리 저장 크기가 증가하지만, 새로운 일정한 데이터 상태가 호스트(100)에 의해 설정되기 전에 발생할 수 있는 기록 동작의 양이 제한된다.
물리 블록의 수가 내구성 강화를 위해 논리 블록의 수보다 더 커야한다는 요건이 존재할지라도, 논리 및 물리 블록 사이의 많은 유형의 매핑이 가능하다. 예를 들어, 제어기(160)는 직접 일대 일 매핑으로 N개의 논리 블록과 매칭(maching)하도록 처음의 N개의 물리 블록을 할당할 수 있고, 이때 마지막에 있는 (P-N) 물리 블록은 일정한 데이터 상태 사이에서 전이하는 동안 저장되는 데이터의 대안의 카피(copy)를 위한 여분의 블록 역할을 한다. 다른 구현예는 부분 또는 전체의 무작위 매핑(mapping)을 생성할 수 있고, 여기서 임의의 물리 블록은 임의의 논리 블록으로 할당될 수 있다. 논리 블록의 물리 블록으로의 매핑에 대한 정보는 제어기(160) 내에 또는 제어기(160)에 액세스 가능한 비휘발성 메모리(180) 내에 저장될 수 있다.
간략하게 상술한 바와 같이, 내구성 강화(ruggedization)는 제어기(160)가 하나의 논리 블록 어드레스를 하나 이상의 물리 블록으로 매핑할 것을 요구할 수 있다. 동일한 논리 블록에 대응하는 물리 블록의 그룹은 "블록의 체인" 또는 현 명세서에서 간단하게 "체인"으로 칭해진다. 체인은 블록의 순서화된 세트이며, 이는 개별 블록이 체인으로 되었던 순서를 결정하는 것이 가능하다는 것을 의미한다. 상기 요건을 만족시키는 다양한 구현예가 가능하다. 예를 들어, 체인은 순방향 포인터(pointer), 역방향 포인터, 또는 임의의 다른 데이터 구조를 이용하려 구성될 수 있다. 많은 플래시 메모리 디스크 관리 시스템은 그와 같이 블록을 체인화한 장치에 기초한다. 체인의 종단에 새로운 블록을 삽입하거나, 체인의 초기로부터 가장 오래된 블록을 제거하는 것과 같이, 체인을 갱신하는데 요구되는 동작은 공지되어 있는 방법을 이용하여 안전하고 원자성으로 행해질 수 있다. 추가로, 실시예에 따라, 체인은 미리 결정된 최대 길이를 가질 수 있거나, 또는 길이가 제한되지 않을 수 있다. 더 자세하게 후술되는 일 실시예에서, 제어기는 논리 블록 어드레스를 단지 두 개의 물리 블록(내구성 강화를 지원하는데 요구되는 절대 최소인)으로 매핑할 수 있다. 또한 후술되는 다른 실시예에서, 제어기(160)는 논리 블록을 더 큰 물리 블록의 그룹으로 매핑하는 것이 가능할 수 있다. 즉, 체인은 단지 두 물리 블록의 길이로 제한될 수 있거나, 더 긴 물리 블록의 시퀀스가 허용될 수 없다.
제 1 실시예에 따르면, 비휘발성 저장 디바이스(150)의 내장된 내구성 강화 특징은 실제로, 체인을 유지하는데 필요한 것을 넘는 오버헤드 데이터(overhead data)에 대한 여분의 저장 요건을 비휘발성 메모리(180) 상에서 가질 수 없다. 도 4a 내지 4e는 두 일정한 데이터 상태 사이에서 전이하고 있을 때 비휘발성 저장 디바이스 내의 메모리의 논리 대 물리 매핑의 예시적인 시퀀스를 도시한 다이어그램이다.
도 4a는 제어기(160)가 각각의 논리 블록을 단일 물리 블록으로 매핑하는 초기 일정한 데이터 상태를 도시한다. 달리 말하면, 도 4a에 도시된 각각의 물리 블록은 대응하는 논리 블록 어드레스와 무조건적으로 연관된다. 물리 블록의 수가 논리 블록 어드레스의 수를 초과하기 때문에, 도 면에 도시되지 않은 매핑되지 않은 물리 블록이 존재한다. 예에서, 논리 블록 어드레스와 연관된 모든 물리 블록은 데이터를 포함, 즉 논리 블록 어드레스와 연관된 모든 물리 블록은 비어있지 않다고 가정된다. 당업자에게 분명한 바와 같이, 비어있는 블록으로 시작하는 예는 또한 모든 실시예에서 가능하다.
비휘발성 저장 디바이스(150)는 하나의 논리 블록 어드레스에 데이터를 기록하라는 요청을 수신할 수 있다. 도 4b에서, 제어기(160) 논리 대 물리 블록 어드레스 매핑 상태는 일정한 데이터 상태 이후의 제 1 기록 요청(논리 블록 "i"와 연관되는 논리 블록 어드레스)이 프로세싱된 이후에 도시된다. 도면에서 확인될 수 있는 바와 같이, 원래의 데이터는 중첩 기록되지 않는데, 왜냐하면 원래의 데이터는 전력 손실이 제어기(160)로 하여금 도 4a에 도시된 일정한 데이터 상태를 복귀하도록 요구하는 경우 필요할 수 있기 때문이다. 대신에, 제어기(160)는 데이터를 이용되지 않은 물리 블록에 기록하고나서, 새로 기록된 물리 블록을 논리 블록에 대응하는 논리 블록 어드레스와 연관되는 물리 블록의 세트에(즉, 논리 블록의 물리 블록 체인에) 추가한다.
비휘발성 저장 디바이스(150)는 호스트(110)로부터의 추가 기록 명령을 수신할 수 있다. 도 4c에 도시되는 바와 같이, 제어기(1600는 추가 명령을 프로세싱하여 데이터를 블록 "j" 및 "k"와 연관되는 논리 블록 어드레스로 기록한다. 제어기(160)는 논리 블록 "j" 및 "k"을 수신된 기록 명령 내에서 지정된 새로운 데이터를 포함하는 제 2 물리 블록으로 할당한다. 도 4c에 반영된 세 개의 새로 기록된 블록은 유용한 명령의 시퀀스를 규정할 수 있다. 예를 들어, 명령의 시퀀스, 도는 명령 세트는 새로운 파일, 결과적인 디렉토리 구조의 갱신, 및 결과적인 파일 할당표의 갱신의 생성을 위한 것일 수 있다. 이 세 동작은 전형적으로 호스트(110)에서 운영되고 있는 애플리케이션(110)으로부터의 파일 시스템(130)에서 수신되는 명령에 응답하여 파일 시스템(130)에 의해서 서로 결합된다. 상술한 바와 같이, 이 세트 내의 상기 명령 모두는 호스트(110)의 관점에서 원자성 트랜잭션으로 간주될 수 있다 - 명령 세트 내의 명령 모두는 실행될 필요가 있거나, 이들 중 어느 것도 실행되어서는 안 된다. 전력 손실 이후에 이 명령 중 단지 일부만이 비휘발성 메모리(180)에서 실행되고 반영되는 상황은 매우 바람직하지 않은데, 왜냐하면 그것은 파일 시스템 상태의 손상을 야기할 수 있기 때문이다. 원자성 트랜잭션에 대한 지원을 제공하는 것은, 전력 손실 또는 다른 사건이 세트 내의 명령 모두를 실행하지 못하도록 할 때 세트의 명령의 일부를 롤-백하거나 "취소(undo)"하는 능력을 요구할 수 있다.
비휘발성 저장 디바이스(150)는 데이터를 하나의 논리 블록 어드레스로 기록하라는 후속 요청을 수신할 수 있다. 도 4d에서, 제어기(160) 논리 대 물리적 브록 어드레스 매핑 상태는 추가 기록 요청이 수신된 이후에 도시되고, 이때 제 2 명령은 논리 블록 "i"와 연관되는 논리 블록 어드레스를 새로운 데이터로 기록하라는 명령이다. 이 제 2 기록 동작은 제어기(160)에 호스트(110)가 새로운 일정한 데이터 상태에 도달했음을 고지하기 전에 발생한다. 이 경우에, 제어기(160)는 새로운 데이터를 수용하기 위해 제 3 물리 블록을 논리 블록 "i"와 연관되는 체인으로 할당하지 않는다. 오히려, 대안의 물리 블록이 이미 존재하기 때문에(즉, 논리 블록 "i"에 대한 체인 길이가 이미 2이기 때문에), 대안의 물리 블록의 콘텐츠는 도 면에서 "새로운 데이터 #2"로 도시된 새로 수신된 데이터로 중첩 기록된다. 중첩 기록된 데이터를 저장할 필요는 없고, - 비휘발성 저장 디바이스(150)가 다음의 일정한 데이터 상태로 전이되거나(여기서 "새로운 데이터 #2"는 논리 블록 어드레스 "i"에 저장된 데이터의 값이다), 또는 제어기가 이전의 일정한 데이터 상태를 복구한다(여기서 도면에 도시된 "원래의 데이터"는 논리 블록 어드레스 "i"에 저장된 데이터의 값이다).
호스트(110)는, 명령 세트와 연관되는 기록 명령 모두가 전이되었고 프로세싱되었으며 따라서 새로운 일정한 데이터 상태가 설정될 수 있음을, 비휘발성 저장 디바이스(150)에 고지할 수 있다. 호스트(110)는 새로운 일정한 데이터 상태를 규정하는 제어기(160)로 명령 세트의 종단을 송신함으로써 이를 표시할 수 있다. 도 4e에서, 호스트(110)가 제어기(160)에 새로운 일정한 데이터 상태에 도달되었음을 고지한 후에 제어기(160) 논리 대 물리 블록 어드레스 매핑 상태가 도시된다. 이 명령에 응답하여, 제어기는 각각의 논리 블록 어드레스를 2의 길이를 갖는 물리 블록 체인의 존재에 대해 조사한다. 각각의 그와 같은 체인의 경우, 제어기(160)는 제 1 물리 블록을 드롭(drop)하고(제 1 물리 블록 및 논리 블록 어드레스 사이의 연관성을 제거) 단지 제 2 물리 블록만을 유지한다. 그러므로, 체인 내의 제 2 물리 블록 및 논리 블록 어드레스 사이의 조건적인 연관는 무조건적 연관가 된다. 논리 블록 어드레스 전부가 조사된 후에, 새로운 일정한 데이터 상태가 설정되어, 구 일정한 데이터 상태 및 새로운 일정한 데이터 상태 사이의 전이 시에 실행되는 기록 명령 동작 모두가 반영된다. 도 4e 및 도 4a를 비교함으로써, 블록의 논리 대 물리적 매핑이 전체 주기(하나의 일정한 데이터 상태에서 다음의 일정한 데이터 상태로 전이되는, 여기서 일정한 데이터 상태는 논리 블록 어드레스와 연관되는 하나의 물리 블록을 갖는다)에서 완성되었음이 명백하다. 일정한 데이터 상태를 규정하기 위해 호스트가 세트 명령의 종단을 송신할 때까지 명령 세트 내의 기록 명령을 통한 변화를 축적한 전체 시퀀스가 다시 반복될 수 있다.
비휘발성 저장 디바이스가 도 4a 내지 4e에 도시된 시퀀스 동안 전력 손실을 겪었다면, 제어기(160)는, 전력이 다시 공급될 때, 도 4a에 도시된 일정한 데이터 상태를 복구할 수 있다. 제어기(160)가 초기에 전력이 공급되지 않거나 동작 전압원으로부터 접속 해제된 상태로부터 시작하면, 상기 제어기는 논리 블록 어드레스로부터 물리 블록로의 매핑의 상태를 스캔(scan)한다. 하나의 실시에에서, 이 스캐닝은 호스트(110)로부터 어떠한 특수 명령 또는 지시를 수신하지 않고도 실행된다. 달리 말해서, 제어기(160)는 카드로의 전력의 복구 시에 스캐닝 동작을 자동으로 실행한다. 이 매핑 구조는 제어기(160) 내의, 또는 비휘발성 메모리(180) 내의 비휘발성 저장장치에 저장될 수 있다. 각각의 논리 블록 어드레스는 2의 길이를 갖는 물리 블록 채널의 존재에 대해 조사된다. 그와 같은 상황이 검출되는 경우, 제어기(160)는 체인 내의 최종 블록을 드롭시키고 제 1 블록만을 유지시킨다. 이 동작은 다음 일정한 데이터 상태를 생성하기 위하여 상술된 것과 정확히 반대이다. 복구 절차의 결과로서, 논리 어드레스의 물리 블록으로의 매핑은 도 4a에 도시된 매핑, 즉 최종 일정한 데이터 상태로 복구된다. 전력 손실이 도 4a 및 4e의 상태 사이(포함되지 않음)의 시간 내의 임의의 지점에서 발생하는 경우, 이 웨이크업(wake-up) 절차는 시스템을 다시 도 4a의 상태로 돌려놓을 것이다. 그러나, 도 4e의 상태에 도달한 이후에 전력 손실이 발생하는 경우, 도 4a에 도시된 데이터 상태로 되돌아갈 필요가 없다. 다른 일정한 상태가 생성될 때까지, 이 지점 이후의 임의의 복구는 도 4e 상태에 도시된 일정한 데이터 상태에 대한 것이다.
판독 동작이 도 4a 내지 4e에 도시된 시퀀스 동안 발생하는 경우, 두 판독 절차 중 하나가 선행할 수 있다. 도 4d를 참조하면, 논리 블록 "j"와 연관되는 어드레스에서 데이터를 판독하기 위해 호스트(110)가 판독 명령을 비휘발성 저장 디바이스(150)로 송신하면, 제어기는 최종 일정한 데이터 상태와 연관되는 "원래의 데이터"로 도시된 데이터를 복귀시킬 수 있거나, 또는 도면에서 "새로운 데이터"로 도시된 가장 최근에 기록된 데이터를 상기 어드레스로 복귀시킬 수 있다. 일 실시예에서, 제어기(160)가 어떤 데이터를 복귀시키는지는 호스트(110)에 의해 구성 가능한 제어기(160) 내의 파라미터에 의해 설정될 수 있다. 일단 도 4a에 도시된 최종 일정한 데이터 상태로의, 또는 도 4e에 도시된 새로운 일정한 데이터 상태로의 역 복구를 통해 일정한 데이터 상태에 도달하면, 복귀할 데이터를 선택하지 않아도 되는데, 왜냐하면 단 하나의 물리 블록만이 논리 블록 어드레스와 연관되기 때문이다.
제 2 실시예에 따르면, 비휘발성 저장 디바이스(150)의 내장된 내구성 강화 특징은 체인을 유지하는데 필요한 것을 넘는 오버헤드 데이터에 대한 최소의 여분의 저장 요건을 비휘발성 메모리(180) 상에서 가질 수 있다. 본 실시예에서, 제어기(160)는 일 비트의 저장을{이후에 블록의 "내구성(ruggedness)" 비트 또는 "R 비트"로 칭해지고, 또한 플래그 값으로 칭해진다} 비휘발성 저장 디바이스(150) 내의 각각의 물리 블록에 할당한다. 많은 메모리 아키텍처에서, 이는 용이하게 구현된다. 예를 들어, NAND-형 플래시 디바이스에 기초한 플래시 메모리 디스크에서, 각각의 블록은 상기 드스크에 부착된 "예비" 또는 "여분의" 저장 공간을 갖고, 이 공간은 이 비트를 저장하는데 이용될 수 있다. 그와 같은 메모리에서 각각의 블록은 기록 또는 판독을 위한 기본 유닛인 "페이지(page)"에 포함되고, 여기서 페이지는 하나 이상의 물리 블록 중 하나를 포함한다. 여분의 에어리어(area)는 물리적으로 각각의 페이지에 연관되고, 이 여분의 에어리어의 일부는 페이지 내의 물리 블록 각각에 할당되므로, R 비트를 위한 공간을 제공할 수 있다. 그와 같은 내장된 여분의 저장을 제공하지 않는 다른 유형의 저장 매체에서, 드라이버는 N개의 논리 블록 어드레스에 매핑될 수 있는 물리 블록의 모든 P의 R-비트를 저장하기 위해 물리적 저장 공간(180)의 일부분을 제외할 수 있다.
도 5는 예시적인 비휘발성 메모리(180) 저장 조직 및 본 실시예에 따른 비휘발성 저장 디바이스(150) 내의 제어기(160)에 의해 유지되는 어드레스 매핑을 도시한다. 상기 조직 및 어드레스 매핑은 도 3과 동일하지만, 각각의 물리 블록에 "R 비트"가 추가된다.
도 6a 내지 6e는 두 일정한 데이터 상태 사이에서 전이할 때 비휘발성 저장 디바이스 내의 메모리의 논리 대 물리 매핑의 예시적인 시퀀스를 도시한 다이어그램이다. 도 6a는 제어기(160)가 각각의 논리 블록을 단일 물리 블록으로 매핑하는 초기의 일정한 데이터 상태를 도시한다. 도 4a에서와 같이, 도 6a에서 도시되는 각각의 물리 블록은 대응하는 논리 블록 어드레스와 무조건부로 연관된다. 물리 블록의 수가 논리 블록 어드레스의 수를 초과하기 때문에, 도면에 도시되지 않은 매핑되지 않은 물리 블록이 존재한다. 도 4a에서와 같이, 논리 블록 어드레스와 연관된 모든 물리 블록이 데이터를 포함하는, 즉, 논리 블록 어드레스와 연관된 모든 물리 블록 중에서 비어있는 것이 없다고 가정된다. 추가로, 도 6a는 후술되는 바와 같이, 일정한 데이터 상태의 가장 일반적인 경우를 기술하지 않는다. 각각의 물리 블록은 자신의 연관된 R 비트를 갖는다. 아래에서 더 설명되는 바와 같이, 각각의 R 비트의 값은 논리 "0" 또는 "1"일 수 있고, 도 6a에 도시된 블록 모두에 대한 R 비트는 동일한 값일 필요가 없으므로, 일부 블록은 R = 1을 가질 수 있고 반면에 R = 0을 가질 수 있다.
비휘발성 저장 디바이스(150)는 데이터를 하나의 논리 블록 어드레스에 기록하라는 요청을 수신할 수 있다. 도 6b에서, 일정한 데이터 상태가 프로세싱된 후에, 제어기(160) 논리 대 물리 블록 어드레스 매핑 상태는 제 1 기록 요청(논리 브록 "i"와 연관되는 논리 블록 어드레스에 대한) 이후에 도시된다. 기록 요청에 응답하여, 제어기(160)는 원래의 데이터를 논리 블록 "i"와 연관되는 물리 블록 내에 중첩 기록하지 않는데, 왜냐하면 기록 명령 세트 동안의 전력 손실 또는 다른 고장으로 인해 제어기(160)가 도 6a에 도시된 일정한 데이터 상태를 복구하도록 요구받는 경우, 원래의 데이터가 필요할 수 있기 때문이다. 대신에, 제어기는 물리 블록을 논리 블록 "i"에 매핑되는 물리 블록의 목록으로(즉, 논리 블록의 물리 블록 체인으로) 매핑한다. 달리 말해서, 이 새로 추가되는 블록은 논리 블록 "i"에 대한 논리 블록 어드레스와 조건부로 연관되는데, 왜냐하면 그 연관는 이전의 일정한 데이터 상태로의 복구가 필요한 경우 제거될 수 있기 때문이다. 그리고나서 제어기(160)는 수신될 명령으로부터의 새로운 데이터를 새로 추가되는 물리 블록으로 기록한다. 원래의 데이터를 포함하는 블록의 R-비트가 판독되고, 새로 추가되는 물리 블록의 R-비트 또는 플래그 값은 원래의 데이터를 포함하는 물리 블록의 R-비트 또는 플래그 값의 토글된(toggled) 버전으로 설정된다. 도 6b의 예에서, 원래의 블록은 R = 1을 가지므로 새로운 물리 블록은 플래그 값 R = 0으로 표시된다. 도면에 도시되지 않은 다른 예에서, 원래의 블록은 R = 0을 가지므로 새로운 물리 블록은 플래그 값 R = 1로 표시될 수 있다.
비휘발성 저장 디바이스(150)는 추가 기록 데이터 명령을 호스트(110)로부터 수신할 수 있다. 도 6c에 도시되는 바와 같이, 제어기는 추가 명령을 프로세싱하여 데이터를 블록 "j" 및 "k"와 연관되는 논리 블록 어드레스에 기록한다. 제어기(160)는 논리 블록 "j" 및 "k"를 수신된 기록 명령에서 지정된 새로운 데이터를 포함하는 제 2 물리 블록으로 할당하고, 다시 새로운 블록의 R 비트는 물리 블록의 R 비트의 보완이며 새로운 블록의 R 비트는 새로운 일정한 데이터 상태가 도달되는 경우 물리 블록의 R 비트를 대체한다. 도 6c에서, 논리 블록 "j" 및 "k"에 대한 새로운 블록의 R 비트 또는 플래그 값은 상이하다. 상술한 바와 같이, R 비트 값은 자체가 임의적이므로; 이의 중요성은 자신이 잠재적으로 대체하는 물리 블록의 R 비트 값과 관련되어 있다.
비휘발성 저장 디바이스(150)는 데이터를 하나의 논리 블록 어드레스에 기록하라는 요청을 수신할 수 있다. 도 6d에서, 제어기(160) 논리 대 물리 블록 어드레스 매핑 상태는 추가 기록 요청이 수신된 후에 도시되고, 이번에 제 2 명령은 논리 블록 "i"와 연관되는 논리 블록 어드레스를 새로운 데이터를 기록하라는 명령이다. 이 지점에서, 호스트는 비휘발성 저장 디바이스(150)에, 새로운 일정한 데이터 상태가 도달되었음을 고지하지 않았다. 도 4d에 도시된 제 1 실시예와는 대조적으로, 새로운 물리 블록은 논리 블록 "i"과 연관되는 논리 블록 어드레스와 조건부로 연관된다. 그러므로, 세 물리 블록은 논리 블록 "i"과 연관되는 체인 내에 있다. 그리고나서 제어기(160)는 명령 내에서 수신된 데이터(도면에서 "새로운 데이터 #2"로 도시됨)를 새로 연관되는 물리 블록에 기록한다. 제어기(160)는 이 새로 할당된 블록(160)의 R 비트를 초기 데이터를 포함하는 블록의 R 비트 값을 보완하도록 설정한다. 즉, 새로운 R 비트는 이전에 기록된 물리 블록의 체인 내에 있는 상기 블록의 R 비트와 동일해지게 된다. 실시중인 이 단계는, 체인 내에 있는, 아직까지 일정한 데이터 상태로 넘어가지 않은 데이터를 포함하는 모든 블록이 동일한 R 값(자신들의 체인 내의 제 1 블록의 R 값과는 상이하다)을 가지는 것을 확보하는 동안 대응하는 논리 블록으로 매핑되는 블록의 체인을 확장한다.
호스트(110)는 비휘발성 저장 디바이스(150)에, 명령 세트와 연관되는 기록 명령 모두가 송신되고 프로세싱되었고, 따라서 새로운 일정한 데이터 상태가 설정될 수 있음을 고지할 수 있다. 호스트(110)는 새로운 일정한 데이터 상태를 규정하는 제어기(160)에 세트 명령의 종단을 송신함으로써 이를 표시할 수 있다. 도 6e에서 제어기(160) 논리 대 물리 블록 어드레스 매핑 상태는 호스트가 제어기에 새로운 일정한 데이터가 도달되었음을 고지한 후에 도시된다. 제어기(160)는 각각의 논리 블록을 물리 블록 체인의 존재에 대해 조사, 즉 R 비트 값이 체인을 따른 어느 지점에서 토글되거나 변경된 물리 블록 체인이 존재하는지에 대하여 조사한다. 그와 같은 상황이 검출되는 경우, R 값 변화(도 6d에서의 변화 지점의 좌측으로의) 이전의 모든 물리 블록은 자신들의 체인에 제공된다. 남은 물리 블록은 논리 블록 어드레스에 무조건적으로 연관된다. 일 실시예에서, 제어기는 물리 블록 내에 저장되는 명령 세트 내의 수신된 데이터를 이동시키지 않고 물리 블록을 논리 블록 어드레스에 무조건적으로 연관시킬 수 있다. 결과적으로, 새로운 일정한 데이터 상태가 설정되고, 이 새로운 상태 이전에 실행되는 모든 동작이 반영된다. 도 6e에 도시된 상태는 도 6a에 도시된 상태와 유사하고, 명령 세트 내의 기록 명령을 통한 변화를 축적한 시퀀스는 호스트가 다른 일정한 데이터 상태를 규정할 때까지 계속되고, 반복될 수 있다.
도 6a 및 6e 사이의 하나의 주목할만한 차이는 도 6e에서, 하나의 논리 블록 어드레스는 심지어 일정한 데이터 상태가 설정된 후에도 자신에게 할당된 하나 이상의 물리 블록을 갖는다는 것으로서, 이 상태는 도 6a에는 존재하지 않는다. 그러나, 용이하게 확인될 수 있는 바와 같이, 이는 명령 세트 시퀀스(도 6a 내지 도 6b, 6c, 6d, 및 6e로부터 인도되는 단계) 내의 기록 명령을 프로세싱할 때 제어기(160)가 따르는 프로세스에 영향을 미치지 않고 심지어 도 6e에 도시된 데이터 상태가 시작 지점인 경우에도 여전히 적용 가능하다. 도 6e는 본 실시예에서의 일정한 데이터 상태의 일반적인 경우를 더욱 정확하게 반영하고, 여기서 논리 블록은 심지어 일정한 데이터 상태가 설정된 후에도 자신에게 할당된 하나 이상의 물리 블록을 가질 수 있다. 달리 말해서, 도 6a는 간소화된 예이다. 본 실시예에서, 블록의 체인의 가장 일반적인 경우는, 체인이 하나 이상의 블록의 제 1 그룹을 갖고, 이 블록 모두는 동일한 R 비트를 가지며 모둔 최종 일정한 데이터 상태를 설정하기 전에 기록되며, 그 이후에 영 이상의 블록의 제 2 그룹을 갖고 제 2 그룹의 모든 블록은 제 1 그룹 R 비트의 보완인 R 비트 또는 플래그 값을 가지며 모두 최종 일정한 데이터 상태를 설정한 이후에 기록된다. 제 1 그룹의 물리 블록을 드롭시키고 제 2 그룹의 물리 블록을 유지함으로써 다음 일정한 데이터 상태를 설정하는 동작이 달성된다(그와 같은 두 그룹의 블록이 존재할 때).
새로운 일정한 데이터 상태가 설정되기 전의 전력 손실(전력 셧다운(shutdown)으로부터, 또는 비휘발성 저장 디바이스(150)로의 전력의 중단으로부터)의 경우, 제어기(160)는 전력이 복구될 때 이전의 일정한 데이터 상태를 회복할 수 있다. 적절한 전압공급원에 의해 비휘발성 저장 디바이스(150)에 다시 전력이 공급되면, 제어기는 논리 블록의 물리 블록으로의 매핑을 스캔한다. 일 실시예에서, 이 스캐닝은 호스트(110)로부터 어떠한 특수 명령 또는 지시도 수신하지 않고 실행된다. 이 경우, 제어기(160)는 카드로의 전력을 복구할 때 스캐닝 동작을 자동으로 실행한다. 각각의 논리 블록 어드레스는 물리 블록 체인의 존재에 대해 조사, 즉 R 비트 값이 체인을 따른 어느 지점에서 토글되거나 변경된 물리 블록 체인이 존재하는지에 대해 조사된다. 제어기(160)는 물리 블록이 시간에 있어서 가장 초기부터 시간에 있어서 가장 최근까지, 체인에 추가되었된 순서로 물리 블록 체인을 가로질러 간다. 제어기(160)가 이 토글 상황을 검출하면, R 값 변화(도 6b 내지 6d에서의 변화 지점의 우측으로의) 이후의 물리 블록은 체인으로부터 제거된다. 이 동작은 다음 일정한 데이터 상태를 생성하기 위하여 상술한 것과는 정확히 반대이다. 일단 제어기(160)가 모든 논리 블록 어드레스를 조사했다면, 최종 일정한 데이터 상태 이후에 발생하는 모든 변화가 제거될 것이다. 전력 손실이 도 6a 및 6e의 상태 사이의 시간 내의 임의의 장소에서 발생하면, 이 파워 온 절차는 비휘발성 저장 디바이스를 다시 도 6a의 상태로 복구할 것이다. 제 1 실시예에서처럼, 전력 손실인 도 6e의 상태에 도달한 이후에 발생하는 경우, 도 6a에 도시된 일정한 데이터 상태로 복귀될 필요가 없다. 오히려, 제어기(160)가 일정한 데이터 상태를 복구할 필요가 있는 경우, 이는 다른 일정한 데이터 상태가 설정되기 전에, 도 6e에 도시된 상태로 복구될 것이다.
호스트(110)가 도 6a 내지 6e에 도시된 시퀀스 동안 판독 명령을 비휘발성 저장 디바이스로 송신하는 경우, 두 개의 판독 절차 중 하나가 선행될 수 있다.도 6d를 참조하면, 호스트(110)가 판독 명령을 비휘발성 저장 디바이스(150)에 송신하여 논리 블록 "i"와 연관된 어드레스에서 데이터가 판독되면, 제어기는 최종 일간된 데이터 상태와 연관되는 "원래의 데이터"로 도시된 데이터를 복귀시킬 수 있거나, 도면에서 "새로운 데이터 #2"로 도시된 가장 최근에 기록된 데이터를 상기 어드레스로 복귀시킬 수 있다. 일 실시예에서, 제어기(160)가 어떤 데이터를 복귀시킬 것인지는 호스트(110)에 의해 구성 가능한 제어기(160) 내의 파라미터에 의해 설정될 수 있다. 일단 도 6a에 도시된 최종 일정한 데이터 상태로의, 또는 도 6e에 도시된 새로운 일정한 데이터 상태로의 역 복구를 통해 일정한 데이터 상태에 도달하면, 복귀할 데이터를 선택하지 않아도 되는데, 왜냐하면 일정한 데이터 상태와 연관되는 단 하나의 물리 블록만이 상기 논리 블록 어드레스로부터의 판독에 응답하여 복귀될 것이기 때문이다.
제 3 실시예에 따르면, 비휘발성 저장 디바이스(150)의 내장된 내구성 강화 특징은 체인을 유지하는데 필요한 것을 넘는 오버헤드 데이터에 대한 어느 정도 더 많은 저장 요건을 비휘발성 메모리(180) 내에 가질 수 있으나, 다른 실시예보다 더 유연하다. 본 실시예에서, 제어기(160)는 물리 블록과 연관되는 일정한 데이터 상태를 저장하기 위해, 각각의 물리 블록을 위한 하나의 수치 필드(numeric field)에 대한 저장을(이후에 블록의 "버전" 값 또는 필드, 또는 "생성" 필드 또는 "gen" 필드로 칭해진다) 할당한다. 이 필드는 8-비트 바이트이거나, 16-비트 단어, 또는 임의의 다른 편리한 크기일 수 있다. 이 필드를 어디에 저장할지에 대한 고려사항은 이전의 실시예의 R 비트 또는 플래그 값에 대하여 언급한 것과 유사하다. 예를 들어, 필드는 NAND 플래시 블록의 여분의 저장 에어리어에 또는 물리 저장 공간의 특별 예비된 부분 부분에 저장될 수 있다. 추가로, 제어기(160)는 비휘발성 저장 디바이스(150)의 현재 일정한 데이터 상태와 연관되는 값을 포함하는 버전 또는 생성 필드를 유지한다. 이 값은 제어기(160) 내의, 또는 비휘발성 메모리(180) 내의 비휘발성 저장소에 저장될 수 있다.
도 7은 예시적인 비휘발성 메모리(180) 저장 조직 및 제 3 실시예에 따른 비휘발성 저장 디바이스(150) 내의 제어기에 의해 유지되는 어드레스 매핑을 도시한다. 조직 및 어드레스 매핑은 도 3과 동일하지만, 각각의 물리 블록에 생성 또는 버전 필드가 추가된다. 제어기(160)에 의해 유지되는 전역 생성 또는 버전 상태는 또한 도 7에 도시된다.
도 8a 내지 8e는 두 일정한 데이터 상태 사이에서 전이할 때 비휘발성 저장 디바이스 내의 메모리의 논리 대 물리 매핑의 예시적인 시퀀스를 도시한 다이어그램이다. 도 8a는 제어기(160)가 각각의 논리 블록을 단일 물리 블록으로 매핑하는 초기의 일정한 데이터 상태를 도시한다. 도 4a에서 기재된 바와 동일한 산소화 가정이 또한 이 예에서 행해진다. 즉, 도 8a는 이후에 기술되는 일정한 상태의 가장 일반적인 경우를 도시하지 않는다. 각각의 물리 블록은 연관된 생성 필드를 갖는다. 물리 블록 모두가 동일한 생성 값을 가지도록 요구되지 않는다. 상기 예에서, 모든 블록 생성 필드 중 현재 가장 높은 값은 값 G0이다. 이는 도시된 모든 물리 블록의 경우, 관계 "생성 <= G0"가 참임을 의미한다. 도 8a에 도시되는 바와 같이, 드라이버의 전역 생성 상태는 G0 + 1인데, 이는 모 블록에 대해, 관계 "생성 < 전역 생성"이 또한 참임을 의미한다. 일 실시예에서, 생성 필드는 직관적인 대수 관계를 따르는 정규 수치 필드이다. 다른 생성 필드 넘버링 시스템이 또한 가능하다. 예를 들어, 각각의 물리 블록에 대한 생성 필드는 8-비트 값일 수 있고, 전역 생성 카운터(counter)는 255부터 0까지 증분할 수 있는 8-비트 값, 즉, 모듈로(modulo) 256 값일 수 있다. 이 경우에, 영(0)의 값은 255의 값보다 더 크다고 간주된다.
도 8b에서 제어기(160) 논리 대 물리 블록 어드레스 매핑 상태는 일정한 데이터 상태 이후의 제 1 기록 요청(논리 블록 "i"와 연P되는 논리 블록 어드레스에 대한)이 프로세싱된 후에 도시된다. 다른 실시예에서처럼, 논리 블록 어드레스 "i"와 연관되는 원래의 데이터는 중첩 기록되지 않는데, 왜냐하면 일정한 데이터 상태 사이의 전이 동안의 전력 손실의 경우 제어기(160)가 일정한 데이터를 복구하는 경우 상기 값이 필요할 수 있기 때문이다. 대신에, 제어기(160)는 논리 블록을 새로 연관되는 물리 블록으로(즉, 논리 블록의 물리 블록 체인으로) 매핑함으로써 이용되지 않은 물리 블록을 논리 블록 어드레스에 조건부로 연관시킨다. 기록 요청에서 수신되는 데이터는 새로 연관되는 물리 블록에 기록되고, 그의 생성 필드는 전역 생성의 현재 값으로 설정되고, 이 경우는 G0 + 1이다. 전역 생성은 이 단계에서 변화되지 않고, 블록 "i"가 전역 생성 카운터 값과 동일한 생성 값을 가지도록 한다.
비휘발성 저장 디바이스(150)는 호스트(110)로부터 추가 기록 명령을 수신할 수 있다. 도 8c에 도시되는 바와 같이, 제어기는 추가 명령을 프로세스하여 데이터를 블록 "j" 및 "k"와 연관되는 논리 블록 어드레스로 기록한다. 제어기(160)는 수신된 기록 명령 내에서 지정된 새로운 데이터를 포함하는 제 2 물리 블록을 각각의 논리 블록 "j" 및 "k"에 할당한다. 새로운 조건부로 연관되는 물리 블록의 생성 필드는 전역 생성 카운터의 현재 값으로 설정된다.
비휘발성 저장 디바이스(150)는 데이터를 하나의 논리 블록 어드레스에 기록하기 위해 다른 요청을 수신할 수 있다. 도 8d에서, 제너기(160) 논리 대 물리 블록 어드레스 매핑 상태는 추가 기록 요청이 수신된 후에 도시되고, 이번에 제 2 명령은 논리 블록 "i"과 연관되는 논리 블록 어드레스를 새로운 데이터로 기록하라는 명령이다. 제 2 예시적인 실시예에서처럼, 새로운 이용되지 않은 물리 블록은 논리 블록의 매핑(자체의 체인을 둘 이상의 블록으로 확장하는)에 추가되고, 도면에서 "새로운 데이터 #2"로 도시된 가장 새로운 데이터가 이용되지 않은 물리 블록에 기록된다. 이 새로 할당된 블록의 생성 필드는 다시 전역 생성 카운터의 현재 값으로 설정된다. 즉, 새로운 생성 필드는 자체의 체인 내의 이전의 기록된 블록의 생성 필드와 동일해진다. 실시중인 이 단계는, 아직까지 일정한 데이터 상태로 넘어가지 않은 데이터를 포함하는 모든 블록이 동일한 생성 값(현재 생성 카운터 값과는 동일하지만 체인 내의 제 1 블록의 생성 값과는 상이하다)을 가지는 것을 확보하는 동안 대응하는 논리 블록으로 매핑되는 블록의 체인을 확장한다.
호스트(110)는 비휘발성 저장 디바이스(150)에, 명령 세트와 연관되는 기록 명령 모두가 송신되고 프로세싱되었고, 따라서 새로운 일정한 데이터 상태가 설정될 수 있음을 고지할 수 있다. 호스트(110)는 새로운 일정한 데이터 상태를 규정하는 제어기(160)에 세트 명령의 종단을 송신함으로써 이를 표시할 수 있다. 도 8e에서 제어기(160) 논리 대 물리 블록 어드레스 매핑 상태는 호스트가 제어기에 새로운 일정한 데이터가 도달되었음을 고지한 후에 도시된다. 호스트(110)로부터의 세트 명령의 종단에 응답하여, 제어기(160)는 단지 제어기의 전역 생성 값을 하나씩 증분시켜서, 전역 생성 값이 도 8e에서 확인될 수 있는 바와 같이, 현재 G0 + 2와 동일하게 된다. 각각의 논리 블록 어드레스에 대한 블록의 체인은 변하지 않고 유지된다. 결과적으로, 새로운 일정한 데이터 상태가 도달했기 전에 모든 동작이 실행되었던 이 새로운 상태가 설정된다. 도 8e에 도시된 데이터 상태는 도 8a의 데이터 상태와 유사한데, 왜냐하면 다시 관계 "생성 < 드라이버의 전역 생성"이 일정한 데이터 상태에 따라, 모든 물리 블록에 의해 만족되기 때문이다. 다른 일정한 데이터 상태가 규정될 때까지 변화를 축적하는 시퀀스는 이제 자체를 반복할 수 있다.
도 8a 및 8e는, 도 8e에서의 서너 개의 논리 블록 어드레스가 하나 이상의 물리 블록과 무조건적으로 연관되기 때문에 상이하다. 그러나, 용이하게 확인될 수 있는 바와 같이, 이는 도 8a 내지 8e 및 첨부 텍스트에 도시되는 바와 같이, 명령 세트 시퀀스 내의 기록 명령을 프로세싱함으로써 하나의 일정한 데이터 상태를 다른 일정한 데이터 세트로 전이하는데 제어기(160)가 따르는 단계에 영향을 미치지 않는다. 도 8e는 본 실시예에서의 논리 블록이 자신과 연관되는 하나 이상의 물리 블록을 가질 수 있는 지점을 시작하는 일정한 데이터 상태의 일반적인 경우를 더욱 정확하게 반영한다. 이 점에서, 도 8a는 도 8e에 도시된 일반 경우의 간소화된 버전을 나타낸다. 즉, 블록의 체인의 가장 일반적인 경우는 체인이 하나 이상의 블록을 가질 때이고, 이들의 생성 필드는 시퀀스 내에 전역 생성 값보다 더 작은 최종 값(결과적으로 시퀀스 내의 모든 값)을 갖는 비-감소 시퀀스를 구성하고, 그 후에 영 이상의 블록 모두는 제어기(160)에 의해 유지되는 전역 생성 갓과 동일한 자신들의 생성 필드를 갖는다. 체인의 제 1 부분 내의 모든 블록은 최종 일정한 데이터 상태를 설정하기 전에 기록되었고, 반면에 체인(비어있지 않은 경우)의 제 2 부분 내의 모든 블록은 최종 일정한 데이터 상태를 설정한 후에 기록되었다. 다음 일정한 데이터 상태를 설정하는 동작은 전역 생성 값을 증분시킴으로써, 체인 내의 모든 블록이 제 1 그룹의 일부가 되도록 하면서, 제 2 그룹이 비도록 함으로써 달성된다.
비휘발성 저장 디바이스(150)를 일정한 데이터 상태 사이에서 전이하기 위한 명령 세트 내의 기록 명령의 시퀀스 도중에 예상되지 않은 전력 손실이 발생하는 경우(셧다운, 또는 비휘발성 저장 디바이스(150)로의 전력의 중단과 같은), 제어기(160)는 일단 비휘발성 저장 디바이스(150)에 전력이 복구되면 후속해서 최종 일정한 데이터 상태를 복구할 수 있다. 제어기(160)는 우선 전역 생성 값을 판독하고나서, 각각의 논리 블록 어드레스를, 적어도 하나의 블록이 전역 생성 값과 동일한 생성 값을 갖는 물리 블록 체인의 존재에 대해 스캔함으로써 이를 행할 것이다. 이 상황이 검출되면, 상기 생성 값을 갖는 모든 조건적으로 연관되는 물리 블록은 각각의 체인으로부터 제거된다. 이 프로세스가 모든 논리 블록 어드레스에 대해 완료되면, 일정한 데이터 상태가 복구되는데, 왜냐하면 제어기(160)는 상기 물리 블록 및 대응하는 논리 블록 어드레스 사이의 조건적 연관를 제거함으로써 최종 일정한 데이터 상태 이후의 물리 블록에 기록된 변화 데이터 모두를 제거했기 때문이다. 전력 손실이 도 8a 및 도 8e(포함되지 않음)의 상태 사이의 시간 내의 임의의 지점에서 발생하면, 이 절차는 도 8a의 일정한 데이터 상태를 복구할 것이다. 그러나, 도 8e의 상태가 도달되었던 이후에 전력 손실이 발생한 경우, 더 이상 도 8a에 도시된 일정한 상태로 복귀할 필요가 없다. 이 지점 이후의 임으의 복구는 다른 일정한 데이터 상태가 생성될 때까지, 도 8e에 도시된 일정한 데이터 상태로 있을 것이다. 일 실시예에서, 이 복구 프로세스는 호스트(110)로부터의 임의의 특수 명령 또는 방향을 수신하지 않고 제어기(160)에 의해 초기화된다. 즉, 제어기(160)는 카드로의 전력의 복구 시에 스캐닝 동작을 자동으로 실행한다.
다른 실시예에서처럼, 호스트(110)가 도 8a 내지 8e에 도시된 시퀀스 동안 판독 명령을 비휘발성 저장 디바이스에 송신하는 경우, 두 판독 절차 중 하나가 선행될 수 있다. 도 8d를 참조하면, 호스트(110)가 논리 블록 "i"과 연관되는 어드레스에서 데이터를 판독하기 위해 판독 명령을 비휘발성 저장 디바이스(150)에 송신하는 경우, 제어기는 "원래의 데이터"로 도시되고 최종 일정한 데이터 상태와 연관되는 데이터를 복귀시킬 수 있거나, 또는 도면에서 "새로운 데이터 #2"로 도시된 가장 최근에 기록된 데이터를 상기 어드레스로 복귀시킬 수 있다. 일단 도 8a에 도시된 최종 일정한 데이터 상태로의, 또는 도 8e에 도시된 새로운 일정한 데이터 상태로의 역 복구를 통해 일정한 데이터 상태에 도달하면, 복귀할 데이터를 선택하지 않아도 되는데, 왜냐하면 일정한 데이터 상태와 연관되는 단 하나의 물리 블록만이 상기 논리 블록 어드레스로부터의 판독에 응답하여 복귀될 것이기 때문이다.
본 실시예는 이전의 실시예와 구별하는 서너 개의 특징을 갖는다. 우선, 상술한 바와 같이, 본 실시예는 생성 상태(전역 생성 값)가 비휘발성 저장 디바이스(150) 내의 비휘발성 메모리에 저장될 것을 요구하고, 이 상태 값으로의 갱신은 원자성으로 안전한 방식으로 발생한다. 이 갱신 태스크를 안전하고, 원자성인 방식으로 달성하기 위한 방법은 종래 기술에 널리 공지되어 있다. 예를 들어, 정보는 보호될 데이터에 체크섬 필드를 더하고, 갱신마다 증분되는 필드를 더한 두 카피를 이용함으로써 매체 상에서 안전하게 갱신될 수 있다. 이 방법은 임의의 전력 손실의 가능성에 대비하는데 충분히 안전하다. 이 방법이 파일 시스템에서(본원에서 그러하듯이, 제어기에 의해 유지되는 변수에서는 아니다) 내구성을 달성할지라도, 제어기(160)에 의해, 생성 카운트 값을 갱신하는 것이 이용될 수 있다. 둘째로, 상기 실시예가 오랜 기간의 시간 동안 그리고 일정한 데이터 상태의 오랜 시퀀스 동안 정확하게 작동하는 것을 유지하기 위해, 본 실시예는 결과적으로 "클린-업(clean-up)" 동작을 요구할 것이다. 이는 전역 생성 값이 모델의 대수적 가정을 위반하지 않고 더 이상 증분될 수 없을 때 발생한다. 예를 들어, 8 비트 필드가 생성 카운트 값을 저장하는데 이용되는 경우, 전역 생성 값은 255로부터 영까지 이리 저리 랩핑(wrapping)하므로, 물리 블록에 저장된 생성 값과의 비교는, 불가능하지 않을지라도, 정확하게 실행되기 어렵다. 결과적으로, 제어기(160)가 일정한 데이터 상태를 복구하려고 시도할 때, 물리 블록은 물리 블록 생성 값 및 "이리 저리 랩핑된" 전역 생성 값 사이의 부정확한 비교 결과로 인해 체인으로부터 제거될 수 있다. "클린 업" 동작은, 모든 체인이 임의의 기존 체인의 현재 가장 높은 생성 값을 생성하도록 하여, 관계 "생성 = 전역 생성 - 1"이 모든 블록에 대해 참이도록 하는 것과 같이, 많은 방식으로 실행될 수 있다. 이는 단지 차체의 최종 블록의 카피를 구비한 각각의 체인을 확장함으로써 달성될 수 있다. 8-비트 카운트의 예에서, 그와 같은 절차는 다른 클린업을 실행해야 하기 전에 제어기(160)에 생성의 255(최대 수)를 통하여 진행하는 자유를 제공할 것이다. 명백하게, 생성 값을 저장하는데 더 많은 비트가 이용될수록(전체적으로, 각각의 물리 블록 내에), 클린-업일 필요한 빈도가 더 적어진다.
일정한 데이터 상태 사이에서 전이할 때 비휘발성 저장 디바이스에 기록되는 데이터에 대한 저장 공간(P-N개의 총 물리 블록)을 제공하기 위해, 논리 블록의 수 N은 저장 디바이스에서 이용 가능한 물리 블록의 수 P보다 더 적다고 상술되었다. 지금까지 기술된 예시적인 실시예의 경우, 일정한 데이터 상태 사이에서의 전이에 이용 가능한 (P-N) 개의 물리 블록 모두가 이미 사용중이기 때문에 프로세싱될 수 없는 기록 명령을 수신하는 것이 가능할 수 있다. 일정한 데이터 상태의 설정 이후의 물리 블록의 갱신이 이전의 그리고 새로운 데이터 이 둘 모두을 저장하기 위한 공간을 요구하므로, 호스트(110)가 다음 일정한 데이터 상태를 설정하는 명령을 송신하기 전에 아주 많은 기록 명령을 송신하는 경우, 이용 가능한 물리 블록의 수가 소비되는 것이 가능하다. 비휘발성 메모리(180) 내의 물리 블록의 양에 비해 얼마나 많은 논리 블록 어드레스가 이출되는지를 결정하는데 있어서 제어기(160) 설계를 위한 트레이드-오프(trade-off)가 존재한다. 더 적은 논리 블록 N에 있어서, 체인을 위해 더 많은 공간이 유보되고 일정한 데이터 상태 사이에서 전이할 때 더 많은 동작이 수용될 수 있다. 반면에, 이 목적을 위해 후미에 많은 수의 물리 블록(P-N)을 지니면 데이터의 실제 저장을 위해 호스트(110)가 이용 가능한 논리 공간이 제한된다. 반면에, P-N이 호스트(110)에 감춰진 상대적으로 작은 수의 물리 블록인 경우, 저장 디바이스(150)는 호스트에 의해 여겨지는 바대로 더 많은 이용 가능한 저장 용량을 가질 것이지만, 일정한 데이터 상태 사이에서 전이할 때 더 적은 기록 명령/데이터를 수용할 수 있을 것이다. 제어기(160)가 강력한 기록 동작에 이용 가능한 모든 (P-N)의 물리 블록이 사용중이고, 새로운 일정한 데이터 상태가 설정되기 전에 다른 기록이 수신되면, 제어기(160)는 기록 동작을 거부하고, 에러 상태를 호스트(110)에 표시하고, 이전의 일정한 일정한 데이터 상태를 복구할 것이다. 이 에러를 수신하는 것에 응답하여, 호스트(110)는 기록 명령의 스퀀스를 재시도할 수 있으나, 명령 세트의 크기를 감소시켜, 가능하면 불필요한 데이터를 삭제하고 시스템이 제공하는 압축 툴이 무엇이든지 간에 그것을 개시함으로써 매체 상에 더 많은 공간을 많든 후에 일정한 데이터 상태 사이의 더 작은 단계를 진행시킬 수 있다.
상술한 바와 같이, 지금까지의 모든 설명은 물리 블록이 임의의 다른 물리 블록과는 관계없이 판독되거나, 소거되거나 할당될 수 있다고 가정한다. 이 가정이 자기 디스크에 대해서 참일지라도, 모든 유형의 저장 매체에 대해 반드시 참인 것은 아니다. 예를 들어, NAND-형 플래시 메모리에서, 소거 명령에 대한 최소 크기는 단일 블록은 아니지만 전형적으로 단일 유닛 내에 128 또는 256 블록을 갖는, 많은 인접한 블록의 그룹(이후에 "유닛"으로 칭해진다)이다.(상술한 바와 같이, 플래시 메모리 데이터 시트에서는 "페이지"라는 용어를 여기서의 소위 "블록"에 대해 이용하거나, 서로 기록되고 판독되는 "블록" 중 서너 개의 그룹에 대해 이용되고, 반면에 상기 데이터 시트에서 "블록"이라는 용어는 소위 "유닛"을 칭하는 것이 통상적이기 때문에 용어에서의 혼돈을 피하도록 주의해야 한다). 결과적으로, 그와 같은 디바이스에서 단일 블록에 대해, 그러나 단지 완전한 유닛에 대해 저장 할당을 행하는 것이 효과적이다. 그러나, 상기에 도시된 예시적인 실시예 중 임의의 실시예는 블록의 할당이 그룹으로 행해져야 하는 경우에도 당업자에게 명백할 단순한 적응으로 마찬가지로 적용 가능하다. 다음의 실시예에서, 상술한 제 2 실시예의 적용 가능성(일정한 데이터 상태 사이의 전이 동안 데이터 변화를 나타내기 위해 물리 블록과 연관되는 R-비트 값을 토그링하는)은 이 유형의 저장 디바이스에 대해 설명된다. 이후에, 소거가 단일 블록 대신에 유닛에서 행해져야만 하는 그와 같은 비휘발성 저장 디바이스는 "유닛-기반(unit-based)" 디바이스로 칭해진다.
도 9는 예시적인 비휘발성 메모리 저장 조직 및 유닛-기반 비휘발성 저장 디바이스 내의 제어기에 의해 유지되는 어드레스 매핑을 도시한다. 도 9의 도면은 독자적으로 할당되고 액세스 가능한 P의 물리 블록을 가지는 대신, 도면이 각각 K의 물리 블록을 포함하는 U의 물리 유닛을 도시하고, 유닛은 최소의 할당된 크기인 것을 제외하고 도 5와 등가의 도면이다.
도 10a 내지 10e는 두 일정한 데이터 상태 사이에서 전이할 때 비휘발성 저장 디바이스(150) 내의 메모리의 논리 대 물리 매핑의 예시적인 시퀀스를 도시한 다이어그램이다. 간소화를 위해, 상기 도면 각각은 단지 K의 논리 블록(유닛에서의 블록의 수)을 도시하지만 동일한 방법은 매체 내의 모든 유닛에 적용된다. 도 10a는 제어기(160)가 각각의 논리 블록을 단일 물리 블록으로 매핑하는 초기 일정한 데이터 상태를 도시하고, 이는 도 6e에 도시된 초기의 일정한 데이터 상태와 동등하다. 도 6a의 초기의 일정한 데이터 상태가 논리 블록 어드레스와 연관되는 단 하나의 물리 블록을 가짐으로써 초기의 일정한 데이터 상태의 특수한 경우인, 도 6a 내지 도 6e의 시퀀스에서와는 달리, 도 10a는 일부 논리 블록 어드레스가 자신에게 할당된 하나의 물리 블록보다 더 긴 체인을 갖는 더 일반적인 경우를 도시한다. 이전과 같이, 각각의 물리 블록은 자체의 연관된 R 비트 또는 플래그 값을 갖는다. 게다가, 각각의 물리 블록은 적어도 "자유", "사용중" 및 "무시"의 상태를 포함하는, 논리 상태를 저장하는 필드를 갖는다. 그와 같은 상태 필드는 도 1의 비휘발성 저장 디바이스와 같은 유닛-기반 매체의 제어기(160)에 이미 전형적으로 이용 가능할 수 있음이 이해되어야만 한다. 도 10a에서 확인될 수 있는 바와 같이, 논리 블록 "j" 및 논리 블록 "k"와 연관되는 논리 블록 어드레스와 같이, 일부 논리 블록 어드레스는 심지어 제 1 블록이 미사용될지라도{도면에서 "이용되지 않음(free)"으로 도시}, 각각의 어드레스에 할당된 두 물리 블록을 갖는다. 이 할당되지만 이용되지 않는 저장소는 유닛-기반 매체 아기텍처로부터 발생한다. 달리 말해서, 논리 블록 "i"가 추가 물리 블록을 필요로 하는 경우, 완전한 물리 유닛(#2)이 할당되고 체인에 추가되어, 유닛 내의 논리 블록 "i"의 모든 이웃에게 데이터의 저장에 필요하지 않은 추가 물리 블록이 제공된다.
비휘발성 저장 디바이스(150)는 데이터를 하나의 놀리 블록 어드레스에 기록하라는 요청을 수신할 수 있다. 도 10b에서 제어기(160) 논리 대 물리 블록 어드레스 매핑 상태는 일정한 데이터 상태에 이어 제 1 기록 요청(논리 블록 "k"와 연관되는 논리 블록 어드레스로의)이 프로세싱된 이후에 도시된다. 기록 요청에 대한 전형적인 응답으로, 제어기(160)는 물리 블록을 논리 블록 "k"과 연관되는 물리 블록의 체인에 추가하고 그에 따라 새로운 물리 블록의 R-비트를 설정할 수 있다. 그러나, 이 경우에, 추가 물리 블록 할당을 행할 필요가 없는데, 왜냐하면 이용되지 않는 물리 블록이 이미 체인 내에서 이용 가능하고 목적을 위해 용이하게 이용될 수 있기 때문이다. 도면에 도시되는 바와 같이, 물리 블록의 상태는 "이용되지 않음"에서 "사용중"으로 변경되어 이제 물리 데이터가 유효한 데이터를 포함하고 있음이 표시된다.
비휘발성 저장 디바이스(150)는 데이터를, 조건부로 연관되는 물리 블록 모두가 이용되고 있는 논리 블록 어드레스에 기록하라는 다른 요청을 수신할 수 있다. 도 10c에서 제어기(160) 논리 대 물리 블록 어드레스 매핑 상태는 일정한 데이터 상태에 이어 제 2 기록 요청(논리 블록 "i"와 연관되는 논리 블록 어드레스로의)이 프로세싱된 후에 도시된다. 이는, 이용되지 않는 물리 블록이 논리 블록 "i"에 대해 이용 가능하지 않고 새로운 물리 블록을 할당하고 이를 체인에 추가함으로써 상기 물리 유닛(도면에서 물리 유닛 #3으로 도시된)이 조건부로 연관되는 점을 제외하고, 도 10b에 도시된 매핑과 매우 유사하다. 논리 블록 "i"의 물리 블록 체인은 자신의 연관된 R-비트 및 "사용중" 상태 필드를 가지는 자신의 새로운 물리 블록을 획득하지만, 동일한 유닛을 공유하는 모든 다른 블록은 또한 여분의 물리 블록을 획득하고, 여분의 물리 블록의 체인에는 "이용되지 않음"라는 표시가 추가된다.
호스트(110)는 비휘발성 저장 디바이스(150)에, 명령 세트와 연관되는 기록 명령 모두가 전송되고 프로세싱되었으므로 새로운 일정한 데이터 상태가 설정될 수 있음을 고지한다. 호스트(110)는 그것을 새로운 일정한 데이터 상태를 규정하는 제어기(160)에 세트 명령의 종단을 송신함으로써 표시할 수 있다. 도 10d에서 호스트가 제어기에, 새로운 일정한 데이터 상태가 도달되었음을 고지한 후에 제어기(160) 논리 대 물리 블록 어드레스가 도시된다. 상술한 바와 같이, 제어기(160)는 물리 블록 체인을 따라 R-비트 값 결과를 찾고, 상기 변화 지점의 남아있는 블록을 드롭시킴으로써 새로운 일정한 데이터 상태를 설정한다. 도 10d는 유닛 기반 매체에서 이것이 어떻게 구현되는지를 도시한다. 이 경우에, 물리 유닛(체인 "i"에서 두 블록 및 체인 "k"에서의 하나의 블록) 내의 물리 블록을 "드롭시키는" 동작은 상기 물리 블록의 상태를 "무시"로 설정하는 것을 포함한다. 그와 같은 상태는 제어기(160)가 후속 동작을 위해 체인을 가로질러 갈 때 블록의 존재를 무시해야 함을 의미한다. 각각의 논리 블록 어드레스는 이 프로세스를 실행하기 위해 제어기(160)에 의해 조사된 후에, 새로운 일정한 데이터 상태가 설정되어, 새로운 일정한 데이터 상태로 전이하는데 실행되는 모든 동작을 반영한다.
이전의 실시예에서처럼, 유닛-기반 비휘발성 저장 디바이스(150) 내의 제어기(160)는, 디바이스를 일정한 데이터 상태 사이에서 전이시키는 기록 명령의 시퀀스 동안에 급작스런 전력 손실 또는 다른 전력 중단이 발생하면 일정한 데이터 상태를 복구하라고 요청될 수 있다. 도 10e는 제어기(160) 논리 대 물리 블록 어드레스 매핑 상태를 도시하고, 제어기는 일정한 데이터 상태를 복구한다. 제 2 실시예에서 상술한 바와 같이, 제어기(160)는 각각의 논리 블록 어드레스와 연관되는 체인에 따라 R-값 변화를 찾음으로써 일정한 데이터 상태를 복구하고, 이 번에 블록은 R-값 비트 내의 변화 지점의 우측으로 드롭된다. 도면에 도시되는 바와 같이, 드롭될 물리 블록(체인 "i" 내의 하나의 블록 및 체인 "k" 내의 하나의 블록)은 "무시"의 상태로 할당된다. 종료 결과는 도 10a의 상태와 논리적으로 등가이므로, 이는 이전의 일정한 데이터 상태이다. 심지어 도 10e에 이미 할당된 하나 이상의 물리 유닛이 존재할지라도, 제어기(160) 및 호스트(110)의 관점으로부터, 두 도면은 동일한 데이터 상태를 표시한다.
다른 실시예에서처럼, 호스트(110)는 도 10a 내지 10d에 도시된 시퀀스 동안 판독 명령을 비휘발성 저장 디바이스에 송신하고, 두 판독 절차 중 하나가 선행될 수 있다. 도 10c를 참조하면, 호스트(110)는 판독 명령을 비휘발성 저장 디바이스(150)에 송신하여 논리 블록 "i"와 연관되는 어드레스에서 데이터를 판독하고, 제어기는 "사용중"으로 도시되는 두 물리 블록- 하나는 최종 데이터 상태와 연관되거나, 또는 하나는 상기 어드레스에 가장 최근에 기록된 데이터를 포함한다- 중 하나에 포함되는 데이터를 복귀시킬 것이다. 일 실시예에서, 제어기(160)가 어느 데이터를 복귀시킬지는 호스트(110)에 의해 구성 가능한 제어기(160) 내의 파라미터에 의해 설정될 수 있다. 일단 도 10a에 도시된 최동 일정한 데이터 상태로의 역 복구를 통해, 또는 도 10d에 도시된 새로운 일정한 데이터 상태로의 복구를 통해 일정한 데이터 상태가 도달되면, 복귀시킬 데이터를 선택하지 않는데, 왜냐하면 일정한 데이터 상태와 연관되는 데이터만이 상기 논리 블록 어드레스로부터의 판독에 응답하여 복귀될 것이기 때문이다. 달리 말해서, 일정한 데이터 상태가 도달하면 논리 블록 어드레스와 연관되는 상태 "사용중"을 가지는 단 하나의 물리 블록만이 존재하고, 다른 물리 블록 모두는 제어기(160)에 의해 무시될 수 있는데 왜냐하면 이들 모두는 "이용되지 않음" 또는 "무시"로 표기되기 때문이다.
도 10a 내지 10d와 첨부 텍스트에 도시되는 바와 같이, 제 2 실시예(물리 블록과 연관되는 R-비트 값을 토글링하여 일정한 데이터 상태 사이의 전이 동안 데이터 변화를 나타내는)는 유닛-기반 비휘발성 저장 디바이스에서 이용될 수 있다. 제 1 예시적인 실시예(일정한 데이터 상태 사이의 전이 동안 기록된 논리 블록 어드레스당 단 하나의 여분의 물리 블록을 할당하는) 및 제 3 예시적인 실시예(각각의 물리 블록에 대한 생성)는 유닛-기반 비휘발성 저장 디바이스에 유사하게 적응될 수 있다. 그러므로, 유닛-기반 매체를 수용하는 모든 적응은 실시예의 범위 내에 있는 것으로 간주된다.
실시예의 상대적인 장점과 단점
a. 저장 매체 상의 논리 제어 상태 정보의 저장: 처음의 두 실시예는 일정한 데이터 상태를 설정할 때 저장 매체에 기록되는 전역(블록 지정이 아닌) 논리 제어 상태 정보가 존재하지 않는 점에서 사실상 "무상태(stateless)"이고, 제어기(160)는 시동 중에 매체 콘텐츠를 복구시키기 위한 그러한 정보에 의존하지 않는다. 제 3 실시예(각각의 물리 블록에 대한 생성 필드)는 이 특징을 공유하지 않는데, 왜냐하면, 제 3 실시예는 전역 "생성" 필드를 각각의 후속하는 일정한 데이터 상태에 대하여 갱신하기 때문이다. 무상태 내구성 강화를 지원하는 제어기(160)의 구현예는 더 단순하고 안전한 해법을 제공할 수 있는데, 왜냐하면 제어 상태 정보의 갱신은 임의의 저장 관리 시스템에서 취약 지점이라는 것이 통상적으로 사실이기 때문이고, 특수 조치가 취해져서 그와 같은 정보의 기록 시에 전력 손실일 발생하는 경우 데이터 손상을 방지해야만 한다.
b. 축적된 변화의 양: 제 1 실시예(일정한 데이터 상태 사이에서 전이하는 동안 수정된 논리 블록 어드레스당 하나의 여분의 물리 블록을 이용하여 변화를 저장하는)는, 이전의 일정한 데이터 상태로 롤백하는 능력을 지니는 동안, 일정한 데이터 상태 사이에서 전이할 때 제한되지 않은 수의 비휘발성 저장 디바이스로의 변화를 축적하는 것이 가능하다. 이는 논리 블록 N의 수를 이용 가능한 물리 블록 P의 수의 절반과 동일하게 함으로써 달성될 수 있다. 그와 같은 경우, 각각의 논리 블록 어드레스에 현재의 일정한 상태를 저장하는 하나의 물리 블록, 및 현재의 일정한 데이터 상태가 설정된 이후에 수신되는 데이터를 저장하는 조건부로 연관되는 물리 블록을 제공하는데 충분한 물리 블록이 존재한다. 극단적인 경우, 비휘발성 저장 디바이스(150) 내의 모든 논리 블록 어드레스는 일정한 데이터 상태가 설정된 이후에 기록될 수 있고, 그 후에 비휘발성 저장 디바이스(150)의 전체 콘텐츠는 자체의 이전의 상태로 롤백될 수 있다. 이 구성에서, 제어기(160)는 이론적으로 명령의 제한되지 않는 시퀀스를 수용할 수 있고 "공간이 충분하지 않음" 에러 응답을 복귀시키지 않아야만 하는데, 왜냐하면 일정한 데이터 상태 사이의 전이 동안 데이터의 저장에 이용가능한 수(P-N)의 물리 블록이 소비되었기 때문이다. 그와 같은 특징을 달성하는 것은 두 블록보다 더 긴 체인이 가능한 다른 실시예에서는 훨씬 더 어려울 수 있다.
c. 적소에 중첩 기록하는 능력: 제 1 실시예(일정한 데이터 상태 사이에서 전이하는 동안 변화를 저장하기 위해 수정된 논리 블록 어드레스당 하나의 여분의 물리 블록을 이용하는)는 단지 블록을 적소에 중첩 기록하는 것을 지원하는 저장 디바이스에만 적용 가능하다. 이것이 자기 디스크에서 허용 가능할지라도, 이것은 플래시 메모리 디스크와 같은, 대부분의 고체 메모리 디바이스에서 허용 가능하지 않다. 다른 실시예는 그와 같은 한계를 가지지 않는다.
d. 일정한 데이터 상태를 설정하는데 노력량: 처음 두 실시예는 새로운 일정한 데이터 상태가 규정될 때마다 제어기(160)가 블록 체인을 "클린-업"할 것을 요구한다. 이것은, 제어기(160)가 다음 시동시에 일정한 데이터 상태를 복귀시킬 것이라는 점에서, 상기 실시예가 이전의 일정한 데이터 상태의 임의의 자취를 제거를 요구하고나서, 새로운 일정한 데이터 상태가 "안전"해지기 때문에 그런 것이다. 많은 체인이 축적된 변화를 가지는 경우, 클린-업 동작은 긴 동작일 수 있는데, 왜냐하면 체인 모두는 이전의 일정한 데이터 상태 이래로 변화를 축적했기 때문이다. 한편, 제 3 실시예(각각의 물리 블록에 대한 생성 필드)는 클린-업 없이 비휘발성 저장 디바이스(150) 상에 더 오래된 생성 데이터를 남겨두는 것이 가능하고, 따라서 새로운 일정한 데이터 상태의 설정을 매우 신속하게 행한다. 이 장점은 특히 새로운 상태가 설정될 때 세션 동안 많은 일정한 데이터 상태가 시스템을 맞춰 놓거나 "클린업"하는 시간없이 생성될 때 유용하고, 이는 대부분의 파일 시스템에서 매우 흔한 시나리오이다.
e. 하나 이상의 최종 일정한 데이터 상태에 대한 지원: 상술한 바와 같이, 제 3 실시예(각각의 물리 블록에 대한 생성 필드)는 자신이 더 오래된 생성을 일정한 데이터 상태로 유지하는 것이 가능하다는 점에서 유일하다. 이는 최종 일정한 데이터 상태뿐만 아니라 일부 더 오래된 일정한 데이터 상태로 롤백을 행하는 것을 가능하게 한다. 그러므로, 제어기(160)는 호스트(110)에 현재 일정한 데이터 상태로부터의 N의 생성을 롤백하라는 명령을 제공하는 것이 가능하고, 이 이후에 드라이버는 자체의 전역 생성 값을 N 만큼 감소시키고 최종 N 생성의 모든 자취를 삭제할 시동 시퀀스를 시뮬레이팅할 것이다. 다른 실시예는 이 기능을 지원하지 않는다.
예시적인 실시예에 따른 제어기(160)를 포함하는 비휘발성 저장 디바이스(150)는 여러 상이한 방법으로 호스트(110) 상의 애플리케이션에 의해 액세스될 수 있다:
1. 내구성 강화 동작을 위해 제어기에 의해 제공되는 특수 명령을 이용하여 새로운 파일 시스템이 구현될 수 있거나, 기존 파일 시스템이 수정될 수 있다. 이는 일정한 데이터 상태를 설정하기 위해 비휘발성 저장 디바이스(150)에 의해 지원되는 특수 명령에 대한 요청으로 원자성 트랜잭션이어야 하는 비휘발성 저장 디바이스 액세스 동작(즉, 파일을 생성하고, 이의 디렉토리 엔트리를 추가하고, 파일 할당표를 갱신하는)의 각각의 시퀀스를 서라운딩(surrounding)함으로써 파일 시스템 소스프웨어 내에서 용이하게 행해질 수 있다. 이는 모든 호스트 명령 시퀀스가 완료된 모든 동작(그러므로, 새로운 일정한 데이터 상태) 또는 완료되지 않은 동작(그러므로, 기존 일정한 데이터 상태로의 복구) 중 하나로 종료할 것이다. 이는 파일 시스템 명령이 원자성 트랜잭션이 되도록 함으로써{애플리케이션 프로그램(120)에 의해 확인되는 바와 같이}, 파일 시스템이 내구성 강화 파일 시스템이 되도록 한다.
2. 호스트 소프트웨어 애프리케이션(120)은 심지어 상기 시스템이 이용하고 있는 파일 시스템(130)이 파일 시스템 내구성을 지원하지 않고 수정될 수 없는 경우조차도 파일 시스템 내구성을 효과적으로 달성될 수 있다. 이는 디바이스 드라이버(140)에, 명령을 비휘발성 저장 디바이스(150)로 송신하여 일정한 데이터 상태를 설정하거나(파일 시스템에 대한 요청 전 또는 이후) 또는 비휘발성 저장 디바이스(150)를 새로운 일정한 데이터 상태로 전이할 새로운 명령 세트의 시작 및 종료를 나타내도록 지시하는 요청에 의해, 파일 시스템(130)에 대한 요청을 서라운딩하는 애플리케이션(120)(즉, "생성 파일")에 의해 행해질 수 있다. 이 방식으로, 파일 시스템(130)이 심지어 비휘발성 저장 디바이스(150)의 내구성 속성을 인지하지 않을지라도, 그 동작은 원자성이 된다. 이 방법은 애플리케이션 프로그램(120)에 부담을 지우지만, 이는 수정 없이 임의의 기존 파일 시스템에 적용될 수 있다. 이 방법에서, 호스트(110) 운영 시스템은 애플리케이션(120)이 자신의 명령을 디바이스 드라이버(140)에 전달하는 능력을 가지도록 하지만, 그와 같은 메커니즘은 많은 기존 파일 시스템에서 매우 흔히 이용 가능하다. 예를 들어, 입력/출력 제어(Input/Output Control: IOCTL) 명령은 많은 호스트 시스템에서 이용 가능하고, 이는 드라이버-지정 명령을 파일 시스템(130)을 통해 디바이스 드라이버(140)로 커밋(commit)하는 것을 인에이블한다. 일부 파일 시스템은 버퍼링 기술을 이용하고, 그 경우, 상기 파일 시스템은 파일 시스템 명령을 프로세싱할 때 모든 디바이스 드라이버 명령을 즉시 생성하지 않으므로, 상술한 방법에 의해 달성되는 원자성 속성을 잠재적으로 위태롭게 할 수 있음이 주목되어야 한다. 그러나, 이 위험성은 일정한 데이터 상태를 설정하기 위해 명령을 디바이스 드라이버(140)에 송신하기 전에 호스트 애플리케이션(120)이 항상 파일 시스템(130)에 "플러시(flush)" 명령을 발행하는 경우(호스트 버퍼의 콘텐츠를 비휘발성 저장 디바이스(150)에 카피하는) 제거될 수 있다. 버퍼링을 이용하는 모든 파일 시스템은 또한 플러싱 명령에 일부 서포트를 제공한다. 그러므로, 일정한 데이터 상태를 설정하기 위한 명령이 송신될 때마다, 파일 시스템 버퍼링이 이용되는 경우 상기 명령이 플러시 명령 이후일 수 있음이 이해되어야만 한다.
3. 소프트웨어 애플리케이션(120)은 파일 시스템(130)을 이용하는 것을 방지할 수 있고 대신 인터페이스(190)를 통해 비휘발성 저장 디바이스(150)로 이출되는 제어기(160)의 내구성 특성을 이용하기 위해 디바이스 드라이버(140)와 직접적으로 상호 작용할 수 있다. 이 방법은 비록 가능하지라도, 매우 불편할 수 있으므로, 대부분 아마도 매우 드물게, 아니면 전혀 이용되지 않을 것이다.
멀티- 스레딩된 호스트 시스템에 대한 내구성 강화 기술
지금까지 제시된 내구성 강화 실시예는 주로 멀티 스레딩된 수행예를 이용하여 이용하는시스템에 적용 가능하고, 여기서 시스템 동작 중에 파일 시스템(130)은 일련의 용이하게 식별되는 상태를 조사한다. 애플리케이션레벨 동작이 부분적으로 완료되지 않는 점에서, 상기 상태 중 일부는 일관되지 않고, 반면에 다른 상태는 충분히 일관된다. 소프트웨어 운용의 그와 같은 모델은 단일 시스템 애플리케이션에서 매우 흔하므로, 이전의 실시예를 매우 유용하게 한다. 한편, 상술한 내구성 강화 실시예는 더욱 진보된 소프트웨어 운용의 모델에, 예를 들어, 멀티 스레딩 또는 멀티 태스킹을 이용하는 시스템에 이용 가능하지 않을 수 있다. 아래의 설명으로부터 분명해지는 바와 같이, 그와 같은 시스템에서 일정한 데이터 상태의개념은 이전과 마찬가지로 유용하지 않고, 지금까지 이용했던 내구성 시스템에 대한 규정은 그와 같은 시스템의 특정 요건에 맞추기 위해 수정되어야만 한다.
동시에 가동되는 두 독립 태스크를 갖는 멀티-태스킹 시스템의 예가 이를 도시하는데 이용되고, 이들 중 각각은 디바이스 드라이버와 상호 동작한다(파일 시스템을 통해서 또는 직접적으로). 이 예의 목적을 위해 제어기(160)는 도 6a 내지 6e 및 첨부 텍스트에 도시된 바와 같은 제 2 실시예의 방법(물리 블록과 연관되는 R-비트 값을 토글링하여 일정한 데이터 상태 사이의 전이 동안 데이터 변화를 나타내는)을 이용하지만, 상기 예로부터의 결론은 상기에 제공된 모든 다른 실시예에 적용 가능하다.
도 11a 내지 11e는 각각 서로의 동작을 인지하지 않는 두 태스크가 저장 디바이스 콘텐츠를 수정하고 있을 때 발생할 수 있는 비휘발성 저장 디바이스 내의 메모리의 논리 대 물리 매핑의 예시적인 시퀀스를 도시하는 다이어그램이다.
도 11a는 제어기(160) 초기 논리 대 물리 블록 어드레스 매핑 상태를 도시한다. 논리 블록 "i", "j", 및 "k"는 각각 어떤 물리 블록으로 매핑된다. 간소화를 위해, 도 11a는 블록의 체인으로라기 보다는 단일 블록으로 매핑되는 상태를 도시하지만, 이는 상술한 논의에 어떠한 의미도 지니지 않는다. 또한, 도 11a는 이 초기 상태에서 영이 되는 모든 물리 블록의 R-비트 값을 도시하지만, 이는 임의적이며 멀티-스레딩되는 동작의 상술한 논의에 어떠한 특수한 의미도 지니지 않는다. 간소화를 위해, 양 태스크는 도 11a에 도시된 상태를 일정한 데이터 상태로 간주하고, 이 상태를 일정한 초기 데이터 상태로 규정하기 위해 이전에 발행된 비휘발성 저장 디바이스(150)의 제어기(160)로의 명령을 갖는다고 가정된다.
도 11b는 태스크 #1가 블록 "i"을 기록함으로써 자체의 일정한 상태 데이터를 벗어나도록 이동한 후에 논리 블록의 물리 블록으로의 제어기(160) 매핑의 상태를 도시한다. 이는 논리 블록 "i"에 할당되는 물리 블록 체인을 하나의 논리 블록으로부터 두 블록으로 확장하고, 두 블록 중 두 번째는 전력 손실이 발생하여 일정한 데이터 상태를 복구할 때 제어기가 이 물리 상태를 롤백하고 제거하는 의미에서, 논리 블록 어드레스와 조건부로 연관되는 데이터를 포함한다. 도 11c는 제어기(160) 논리 대 물리 블록 어드레스 매핑 상태는 태스크 #2가 논리 블록 어드레스에 "j"를 기록함으로써 자체의 일정한 데이터 상태로부터 벗어안 후에 도시된다. 멀티-스레딩된 운영 시스템은, 제 1 태스크에 의해 생성되는 하나의 세트 내의 시퀀스 기록 명령이 비휘발성 메모리 디바이스(150)에 대한 다른 태스크에 의한 기록 명령에 의해 분리될 수 있도록, 다른 다중 태스크{예를 들어, 두 소프트웨어 애플리케이션(120)에 의한 두 파일 기록 동작}의 인터믹싱(intermixing)이 가능하다. 임수 #2에 의해 초기화되는 이 기록 명령은 논리 블록 "j"에 할당되는 물리 블록 체인을 확장하여 두 블록을 가지며, 상기 두 블록 중 제 2 블록은 조건적으로 연관되는 태스크 #2를 포함한다.
도 11d에서 제어기(160) 논리 대 물리 블록 어드레스 매핑 상태는 태스크 #1이 논리 블록 어드레스 "k"에 기록된 후에 도시된다. 다시, 이 기록 명령은 논리 블록 "k"와 연관되는 물리 블록 체인을 논리 블록 어드레스와 조건부로 연관되는 데이터에 의해 확장하도록 한다.
호스트(110)는 비휘발성 저장 디바이스(150)에, 태스크 #1로부터의 명령 세트와 연관되는 기록 명령이 송신되고 프로세싱되었고, 그러므로 새로운 일정한 데이터 상태가 설정될 수 있음을 고지할 수 있다. 호스트(110)는 새로운 일정한 데이터 상태를 규정하는 제어기(160)에 세트 명령의 종단을 송신함으로써 이를 나타낼 수 있다. 도 11e에서 제어기(160) 논리 대 물리 블록 어드레스 매핑 상태는 호스트가 제어기에 새로운 일정한 데이터 상태가 도달되었음을 고지한 후에 도시되는데 왜냐하면 태스크 #1가 완료되었기 때문이다. 그와 같은 명령을 수신하자마자 드라이버는 자신의 체인 내의 R 값 변화 지점의 좌측에 있는 모든 블록을 제거한다. 이 예에서, 이는 논리 블록 어드레스 "i", "j", 및 "k"와 연관되는 물리 블록 체인으로부터 원래의 데이터가 제거되는 결과를 발생시켜, 물리 블록 체인 각각은 단지 새로운 데이터만을 갖게 된다. 이 동작이 태스크 #1 및 이의 데이터(블록 "i" 및 "k")에 대해 참일지라도, 상기 명령은, 제어기(160)로 하여금 논리 블록 "j"의 새로운 데이터를 무조건적으로 연관시키고 그것을 새로 규정된 일정한 데이터 상태의 일부가 되도록 함으로써 태스크 #2로부터의 명령의 완성되지 않은 세트 내의 명령에 의해 기록되는 데이터를 연관하도록 하는 것을 부정확하게 하였다. 이는 태스크 #2와 연관되는 기록 명령 모두가 수신되기 전에, 그리고 태스크 #2가 새로운 일정한 데이터 상태에 도달하기 전에 정전이 발생하는 경우 일어날 수 있는 것을 고려함으로써 용이하게 확인될 수 있는 바람직하지 않은 영향이다. 제어기(160)는 도 11e에서의 상태로부터의 논리 블록 어드레스 "j"를 도 11a에서의 일정한 데이터 상태로 복구할 수 없다. 이 종료 결과는 태스크 #2에 대한 부정확한 일정한 데이터 상태로의 복구 및 일관되지 않은 데이터이다.
멀티-스레딩된 예의 난관을 방지하기 위한 하나의 가능한 방법은 단 하나의 태스크가 시간 내의 임의의 지점에서 활성화되도록 하는 것일 수 있다. 이는 디바이스로의 단 하나의 태스크 액세스를 가능하게 하는 것과 같으며, 모든 다른 태스크는 현재 태스크가 자체의 동작의 시퀀스를 완료하고 디바이스를 해제할 때까지 락아웃(lock-out)된다. 그러한 방법은 멀티태스킹을 지원할 수 없는 다른 컴퓨터 주면 장치(모뎀 및 많은 유형의 I/O 디바이스)와 공통적이라도, 다수의 호스트 애플리케이션(120)에 의해 동시에 액세스될 수 있는 저장 디바이스에 대해서는 전적으로 용인될 수 없는데, 왜냐하면 이는 연장된 시간 기간 동안(현재의 태스크가 오랜 트랜잭션을 완료해야 할 때 발상할 수 있는) 소프트웨어 애플리케이션을 자체의 데이터 및 파일로부터 실제로 록아웃할 것이기 때문이다.
그러므로, 이전 실시에의 한계는 명백하고, 비휘발성 저장 디바이스(150)가 멀티-스레딩된 호스트 시스템과 통신하고 있을 때 처리되어야만 한다. 단일 스레딩된 시스템에서, 내구성은 일정한 데이터 상태 측면에서 고려될지라도, 여기서 기록 명령 세트는 비휘발성 저장 디바이스 콘텐츠를 하나의 일정한 데이터 상태로부터 다른 상태로 이동한다고 가정된다. 도 11a 내지 11e의 예는 멀티태스킹 시스템이 비휘발성 저장 디바이스(150)에 액세스하고 있을 때 이 모델의 한계를 도시한다. 심지어 각각의 태스크가 자신을 일정한 데이터상태 사이에서 이동하는 것으로 간주할지라도, 비휘발성 저장 디바이스(150)는 전체적으로 일정한 데이터 상태를 전혀 가지지 않을 수 있는데, 왜냐하면 시간에서의 임의의 지점에서 일정한 데이터 상태로 있지 않은 하나 이상의 태스크가 존재할 수 있고 모든 태스크가 일정한 데이터 상태를 동시에 규정할 것을 보장하지 않기 때문이다.
그러므로, 더욱 복잡한 멀티태스킹의 경우에서 동작하는 다른 실시예는 내구성에 대한 상이한 규정을 반드시 포함해야만 한다. 멀티-스레딩된 환경에서, 트랜잭션은 바람직하게도 논리적으로 서로 하나의 원자성 동작으로 그룹화된 명령의시퀀스이다. 트랜잭션의 동작이 연속될 필요는 없다. 즉, 그 동일한 트랜잭션의 일부가 아닌 다른 동작은 트랜잭션을 구성하는 동작 사이에서, 시퀀스 도중에 발생할 수 있다. 이 다른 동작은 다른 트랜잭션의 일부일 수 있다. 비휘발성 저장 디바이스(150)가 다중 트랜잭션과 연관된 인터믹싱되거나 인터리빙된 명령을 수신할 이 가능성 때문에, 제어가(160)가 동작을(수신된 기록 명령과 같은) 특정 트랜잭션과 연관시킬 방법에 대한 필요성이 존재한다. 이는 바람직하게도 각각의 트랜잭션을 "트랜잭션 핸들" 또는 "트랜잭션 식별자"와 연관시킴으로써 달성되고, 된다.트랜잭션 핸들 또는 트랜잭션 식별자는 단지 트랜잭션을 식별하기 위해 제어기(160)에 의해 이용되는 수치 값일 수 있다. 그러므로, 멀티-스레딩된 환경에서 내구성 강화 동작을 할 수 있는 제어기(160)는 트랜잭션으로 그룹화된 명령 세트를 실행하는 명령을 갖고 각각의 트랜잭션의 원자성을 보장하는 것으로 규정될 수 있다. 그와 같은 제어기는 임의의 중단(급작스런 전력-손실)은 중단의 시점에서 임의의 트랜잭션의 "롤-백"을 개방하도록 하여(개방 트랜잭션은 시작되었으나 아직 호스트에 의해 완료된 것으로 선언되지 않은 트랜잭션으로 규정된다), 각각의 그와 같은 개방 트랜잭션의 효과를 중지시킬 것이다. 즉, 트랜잭션은 전적으로 완려ㅚ거나 전적으로 중간된 채로 종료할 수 있으나, 그 사이에서 종료되지 않을 것이다. 또 다른 말로, 제어기(160)는 급작스런 전력 손실로부터 복구될 수 있고 비휘발성 저장 디바이스의 저장 콘텐츠가 부분적으로 완료된 트랜잭션의 발생을 반영하도록 하지 않는다.
트랜잭션의 일반적인 개념은 당업계에 널리 공지되어 있다. 예를 들어, 트랜잭션은 크고 분배되는 데이터베이스에서 데이터 무결성을 유지하는데 이용되어왔다. 그러나, 모든 공지되어 있는 종래의 기술은 데이터베이스 애플리케이션, 파일 시스템, 또는 디바이스 드라이버의 상위의 소프트웨어 계층에 있는 트랜잭션을 이용한다. 대조적으로, 후술되는 실시예는 비휘발성 저장 디바이스(150)의 제어기(160) 내에 있는 트랜잭션 식별자를 이용함으로써, 훨씬 더 양호한 효율을 달성한다. 정전으로부터 복귀하고 이전의 "안전한" 지점으로의 적시의 백트랙킹을 위한 다른 방법은, 적시에 저장 디바이스의 상태를 롤백할 수 있는 호스트 소프트웨어 시스템의 이면에서 작동되며 파일 시스템 및 엔진 사이에 블러링(blurring)된 경계선을 갖는 자동 소프트웨어 엔진이 존재하는 애플리케이션을 개시한다.
아래의 실시예에서, 비휘발성 저장 디바이스(150) 내의 제어기(160)는 호스트(110)로부터 트랜잭션 식별자에 대한 요청을 수신한다. 응답으로, 제어기(160)는 이용되지 않는 트랜잭션 식별자를 발행한다. 그리고나서 호스트(110)는 트랜잭션을 규정하는 명령 세트와 연관되는 기록 명령을 송신할 때 이 트랜잭션 식별자를 이용한다. 제어기는 트랜잭션 식별자를 이용하여 수신된 데이터를 상이한 태스크 또는 스레드와 구별할 수 있다. 태스크 또는 명령 세트의 종료 시에, 호스트(110)는 트랜잭션 식별자와 연관되는 명령 세트가 완료되는 것을 나타내는 명령을 제어기(160)에 송신할 것이다. 응답으로, 제어기(160)는 상기 트랜잭션 식별자를 갖는 기록 명령 내에서 수신되는 데이터를 대응하는 논리 블록 어드레스와 무조건적으로 연관시킬 수 있다. 전력이 손실되는 경우, 제어기(160)는 완료되지 않은 목록을 참조할 수 있고, 완료되지 않은 트랜잭션 내의 논리 블록 어드레스에 할당되는 물리 블록에 저장되는 조건부로 연관되는 데이터를 제거할 수 있다.
다른 실시예에서, 제어기(160)는 멀티-스레딩된 동작을 가능하게하는 호스트(110)와 통신할 때 내구성 강화 동작을 제공할 수 있다. 이 실시예에서의 제어기는 비-휘발성 메모리(180) 내에서 물리 블록당 하나의 수치 필드를 유지한다. 이 필드는 이후에 블록의 "트랜잭션" 필드 또는 "T" 필드로 칭해지고, 물리 블록이 연관되는 트랜잭션 핸들 또는 식별자를 저장한다. 이 필드는, 동시에 개방될 수 있는 것이 바람직한 만큼 많은 상이한 트랜잭션 핸들을 나타내는데 충분한 큰 한에서 임의의 편리한 크기를 가질 수 있다. 이 필드를 어디에 저장할지에 대한 고려사항은 R-비트 또는 생성 필드 값과 같이, 이전의 실시예의 제어 필드를 저장하기 위한 고려사항과 유사하다. 하나의 구현예에서, NAND 플래시 블록의 여분의 에어리어는 트랜잭션 식별자를 저장하는데 이용될 수 있다. 추가로, 제어기는 모든 동시 개방 트랜잭션을 목록화한 전역 데이터 구조를 유지해야 한다.
비휘발성 저장 디바이스(150)의 멀티태스킹-내구성 능력을 이용하기 위해, 호스트(110)는 여러 단계를 실행해야 한다. 우선, 호스트(110)는 트랜잭션 식별자를 새로운 개방 트랜잭션의 목록에 추가하고, 트랜잭션 식별자를 호스트(110)에 복귀시킨다. 둘째로, 호스트(110)는 일련의 명령을, 비휘발성 메모리(180)의 콘텐츠를 각각 변경시킬 수 있는 비휘발성 저장 디바이스(150)로 송신한다. 각각의 명령은 할당된 트랜잭션 식별자와 연관된다. 최종적으로, 호스트(110)는 명령을 제어기(160)에 송신하여 개방 트랜잭션 식별자를 폐쇄한다. 응답으로, 제어기(160)는 상기 식별자를 지니는 명령 내에서 수신된 데이터를 자체의 대응하는 논리 어드레스와 무조건적으로 연관시키고 개방 트랜잭션의 목록으로부터 트랜잭션 식별자를 제거한다. 일 실시예에서, 제어기(160)는 데이터를 저장하는 물리 블록을 논리 블록 어드레스와 무조건적으로 연관시킴으로써 데이터를 무조건적으로 연관시킨다. 이 프로세스 동안, 명령 세트 내에서 수신되는 데이터는 물리 블록 사이에서 이동되거나 카피되지 않는다. 다음에 상기 절차는 아래에서 제공되는 실시예의 방법에 따라 구현되는 저장 디바이스가 멀티태스킹-내구성 강화 동작을 호스트(110)에 제공하는 것을 보장한다.
도 12는 예시적인 비휘발성 메모리 저장 조직 및 비휘발성 저장 디바이스 내의 제어기에 의해 유지되는 어드레스 매핑을 도시한다. 각각의 물리 블록은 트랜잭션 식별자 필드를 갖고, 제어기(160)는 진행 중인 트랜잭션의 전역 트랜잭션 목록을 통해 현재 상태를 유지한다. 이 목록은 제어기(160) 내의 비휘발성 메모리에, 또는 저장 디바이스(150)의 비휘발성 메모리(18)에 저장될 수 있다.
도 13a 내지 13f는 제어기가 멀티-스레딩된 시스템 내의 단일 트랜잭션과 연관되는 기록 명령을 프로세싱하는 동안 비휘발성 저장 디바이스 내의 메모리의 논리 대 물리 매핑의 예시적인 시퀀스를 도시한 다이어그램이다. 도면에서, 트랜잭션이 개방되지 않는다. 각각의 물리 블록은 널 값(null value)(영과 같은)으로 설정되는 자체의 연관된 트랜잭션 필드를 가지며, 트랜잭션 필드는 트랜잭션이 블록과 연관되지 않음을 나타낸다. 개방 트랜잭션 목록은 트랜잭션이 현재 가방되지 않음을 나타낸다.
도 13b에서 제어기(160) 논리 대 물리 블록 어드레스 매핑은 호스트(110)가 트랜잭션 식별자에 대한 요청을 제어기(160)에 송신한 후에 도시된다. 상기 요청에 응답하여, 제어기는 트랜잭션 식별자 #5를 호스트(110)에 할당하고, 트랜잭션 식별자는 개방 트랜잭션의 목록에 추가한다. 선택된 트랜잭션 식별자 수는 그 값이 도 13a에 도시된 "널"을 표현하는 값과 상이해야 하고, 선택된 값이 임의의 개방 트랜잭션의 트랜잭션 식별자와 상이해야만 하는 점을 제외하고 임의적이다. 트랜잭션 식별자 #5는 이 원자성 트랜잭션과 연관되는 후속 기록 명령을 송신할 때 호스트(110)에 의해 이용되어야만 한다. 도면에서 도시되는 바와 같이, 시작 트랜잭션 명령에 의해 발생하는 유일한 변화는 트랜잭션 #5가 현재 개방되는 있는 것을 개방 트랜잭션 목록에 표시하는 것이다.
도 13c에서, 제어기(160) 논리 대 물리 블록 어드레스 매핑 상태는 트랜잭션 #5과 연관되는 제 1 기록 요청(논리 블록 "i"과 연관되는 논리 블록 어드레스에 대한)이 프로세싱된 이후에 도시된다. 도면에 도시되는 바와 같이, 논리 블록 어드레스 "i"와 연관되는 원래의 데이터는 중첩 기록되지 않는데, 왜냐하면 트랜잭션 #5에 의해 도입되는 변화 이전에 제어기(160)가 비휘발성 메모리 디바이스(150)의 상태를 복구하는데 이 데이터를 필요로 할 수 있기 때문이다. 대신, 이용되지 않는 물리 블록은 물리 블록을 체인에 추가함으로써 논리 블록 어드레스와 조건부로 연관된다. 새로 수신되는 데이터는 조건부로 연관되는 물리 블록 내에 기록되고 데이터의 트랜잭션 식별자는 트랜잭션 식별자로 설정되고, 이 식별자는 본 예에서 #5이다. 트랜잭션이 여전히 개방되어 있으므로, 개방 트랜잭션 목록은 변하지 않은 채로 유지된다.
도 13d에 도시되는 바와 같이, 제어기(160)는 추가 명령(트랜잭션 식별자 #5와 연관되는)을 프로세싱하여 데이터를 블록 "j" 및 "k"과 연관되는 논리 블록 어드레스에 기록한다. 이제 논리 블록 어드레스 "j" 및 "k"에는 또한 기록 명령 내에 수신된 데이터를 포함하는 제 2 물리 블록이 각각 할당되고, 다시 새로운 물리 블록의 트랜잭션 필드는 #5의 트랜잭션 핸들로 설정된다. 개방 트랜잭션 목록은 변하지 않은 채로 유지된다. 도 13e에서, 제어기(160) 논리 대 물리 블록 어드레스 매핑 상태는 트랜잭션 #5와 연관되는 추가 기록 요청이 수신된 후에 도시되고, 이번에 제 2 명령은 새로운 데이터를 갖는 논리 블록 "i"과 연관되는 논리 블록 어드레스를 기록하라는 명령이다. 새로운 물리 블록은 논리 블록 "i"와 연관되는 논리 브록 어드레스에 조건부로 매핑되고(블록의 체인을 세 블록으로 확장한다), 도면에서 "새로운 데이터 #2"로 도시되는 최신의 데이터가 새로운 물리 블록에 기록된다. 이 새롭게 할당된 블록의 트랜잭션 식별자는 다시 트랜잭션 식별자 #5로 설정되고, 개방 트랜잭션 목록은 변하지 않은 채로 유지된다.
도 13f에서, 제어기(160)는 호스트(110)로부터의 요청을 프로세싱하여 트랜잭션 #5를 폐쇄하였다. 상기 요청에 응답하여, 제어기(160)는 우선 5의 트랜잭션 필드를 갖는 임의의 물리 블록의 트랜잭션 식별자 필드를 무효화한다. 하나의 구현예에서, 논리 블록 "i"에 대한 체인 내에서, "새로운 데이터 #1"로 표시되는 데이터를 포함하는 물리 블록 내의 트랜잭션 블록 식별자 필드를 무효화할 피가 없도록 하기 위해서는 각각의 체인 내에서 가장 최근인 그러한 물리 블록 트랜잭션 식별자 필드만을 무효화하는 것이 충분하다. 둘째로, 제어기(160)는 개방 트랜잭션 몰록으로부터 트랜잭션 식별자 #5를 제거한다.
결과적으로, 비휘발성 저장 디바이스(150)는 트랜잭션 #5 내에 포함되는 동작 모두가 행해지고 트랜잭션 #5에서 디바이스에 기록되는 데이터가 자체의 논리 블록 어드레스와 무조건부로 연관되는 상태에 있다.이 상태는 개방 트랜잭션이 존재하지 않는 도 13a에 도시된 상태와 유사하다. 새로운 트랜잭션을 개방하고, 트랜잭션과 연관되는 데이터를 기록하고, 트랜잭션을 폐쇄하는 이벤트의 시퀀스는 이제 반복될 수 있다.
얼핏 보기에, 도 13a 및 13f가 유사하게 보이지 않는데, 왜냐하면 도 13f에서, 일부 논리 블록 어드레스는 이들과 연관되는 하나 이상의 물리 블록을 가지지만, 이 상태는 도 13a에 존재하지 않기 때문이다. 그러나, 용이하게 확인될 수 있는 바와 같이, 이는 도 13a 내지 13f 사이의 하나의 트랜잭션을 위한 명령 세트를 프로세싱하는데 제어기(160)가 취하는 단계의 시퀀스에 영향을 미치지 않는다. 도 13f는 논리 블록이 자신에게 할당되는 하나 이상의 물리 블록을 가질 수 있는 초기 상태(개방 트랜잭션이 없음)의 일반적인 경우를 반영한다. 도 13a는 일반적인 경우를 간소화한 것이다. 달리 말해서, 물리 블록 체인의 가장 일반적인 경우는, 상기 물리 블록 체인이 자신의 종단에 영 이상의 블록을 가질 때 트랜잭션 필드가 널 트랜잭션 필드를 갖는 블록 이후에 그리고 가능하면 트랜잭션 필드가 중요하지 않은 추가 블록 이후에 널이 아닌 값들로 설정되는 것이다. 널 트랜잭션 필드를 구비한 최우측 블록은 최신의 무조건적으로 연관된 데이터를 포함하고, 반면에 모든 더 새로운 블록은 계속해서 개방중인 트랜잭션 동안 기록되었던 계속 조건부로 연관되는 데이터를 포함한다. 트랜잭션을 폐쇄하는 동작은 상기 트랜잭션과 연관되는 체인의 가장 새로운 물리 블록의 트랜잭션 필드를 무효화함으로서, 상기 데이터를 상기 물리 블록의 대응하는 논리 블록 어드레스와 무조건적으로 연관시킴으로써 달성된다.
비휘발성 저장 디바이스(150)로의 급작스런 전력 손실 또는 다른 전력의 중단의 경우(저장 카드가 사용자에 의해 호스트로부터 갑자기 접속해제되는 경우와 같은), 제어기(160)는 전력이 중단되었을 때 개방되었는 트랜잭션과 연관되는 물리 블록 데이터를 "롤백"또는 제거함으로써 일정한 데이터 상태를 복구해야만 할 것이다. 비휘발성 저장 디바이스(150)로의 전력 공급이 복구되면, 제어기(160)는 개방 트랜잭션의 목록을 조사하고나서 비휘발성 메모리(180) 내의 논리 블록 어드레스를, 개방 트랜잭션 목록에 등장하는 트랜잭션 필드를 갖는 물리 블록을 자신의 종단(널 트랜잭션 필드를 갖는 임의의 블록의 우측에 있는)에 갖는 물리 블록 체인의 존재에 대하여 스캔할 것이다. 그와 같은 물리 블록이 검출되면 이는 체인으로부터 제거된다. 이 제거는 직접 구현될 수 있거나, 또는 이를 오버라이딩(overriding)하는 다른 물리 블록으로 체인을 확장함으로써 달성될 수 있다. 제어기(160)가 모든 논리 블록 어드레스에 대한 이 스캔을 완료하면, 비휘발성 저장 디바이스(150)는 완료된 트랜잭션의 기록 동작만을 반영하는 상태로 복귀되고, 부분적으로 완료된 트랜잭션을 통해 발생하는 모든 데이터 변화가 제거된다. 예를 들어, 전력 손실이 도 13a 및 도 13f(포함되지 않음)에 도시된 상태 사이에서 시간에 있어서 임의의 지점에서 발생하는 경우, 제어기(160)는 비휘발성 저장 디바이스의 데이터 상태를 도 13a에 도시된 상태로 복구할 것이다. 그러나, 전력 손실이 트랜잭션 #5가 폐쇄된 이후에 도 13f의 상태에 도달한 후 발생하는 경우, 다른 원자성 트랜잭션(#5)이 성공적으로 완료되었기 때문에, 도 13a네 도시된 상태로 더 이상 복귀할 필요가 없다. 그러므로, 이 지점 이후의 임의의 복구는 다른 트랜잭션이 성공적으로 완료될 때까지, 도 13f에 도시된 상태로 있을 것이다. 일 실시예에서, 이 복구 프로세스는 호스트(110)로부터 어떠한 특수 명령 또는 지시를 수신하지 않고 제어기(160)에 의해 개시된다. 달리 말해서, 제어기(160)는 카드로의 전력의 복구 시에 스캐닝, 검출, 및 제거 동작을 자동으로 실행한다.
상기 설명은 단일 트랜잭션의 상황에서 본 실시예의 방법을 제공하였다. 다음 예에서, 트랜잭션 식별자의 이용이 도 11a 내지 도 11e에 강조된 문제를 어떻게 처리하는지를 설명하기 위해 멀티-태스킨의 경우에서의 트랜잭션 식별자의 이용이 도시된다. 도 14a 내지 14h는 이벤트의 이 시퀀스를 기술한다.
도 14a는 도 11a에 해당하고 제어기 초기 논리 대 물리 블록 어드레스 매핑 상태를 도시한다. 개방 트랜잭션은 존재하지 않고, 모든 블록 체인은 널 트랜잭션 필드를 갖는 블록으로 종료한다.
도 14b는 태스크 #1이 제어기(160)에 트랜잭션을 시작하라고 지시한 후의 제어기(160) 상태를 도시한다. 제어기(160)는 트랜잭션 식별자(본 예에서 #7)를 할당하고, 트랜잭션 식별자를 전역 개방 트랜잭션 목록에 추가하고, 트랜잭션 식별자를 태스크 #1을 요청하는 호스트 애플리케이션(120)으로 복귀시킨다.
도 14c는 도 11b에 해당하고 제어기를 요청을 태스크 #1로부터 기록 블록 "i"로 프로세싱한 후에 논리 블록의 물리 블록으로의 제어기(160) 매핑의 상태를 도시한다. 도 14c에 도시되는 바와 같이, 새로운 물리 블록이 할당되어 논리 블록 어드레스 "i"와 연관되는 새로 수신된 데이터, 및 연관된 트랜잭션 #7을 저장한다. 도 11b와 비교하면, 논리 블록 "i"의 물리 블록 체인은 새로운 데이터를 수용하도록 확장되지만, 현재 새로운 데이터를 포함하는 블록에는 #7의 트랜잭션 필드가 제공되어, 자신이 "소유하고 있는" 트랜잭션을 식별하는 것이 가능해진다.
도 14d는 태스크 #2가 제어기에게 트랜잭션을 시작하라고 명령한 후의 제어기(160)를 도시한다. 제어기(160)는 트랜잭션 식별자(본 예에서 #4)를 할당하고, 트랜잭션 식별자를 전역 개방 트랜잭션 몰록에 추가하고, 트랜잭션 식별자를 태스크 #2를 요청하는 호스트 애플리케이션(120)에 복귀시킨다.
도 14e는 도 11c에 해당하고, 태스크 #2가 논리 블록 어드레스 "j" 에 기록됨으로써 물리 블록의 일정한 데이터 상태로부터 벗어나도록 이동된 후에 제어기(160) 논리 대 물리 블록 어드레스 매핑 상태를 도시한다. 이전과 같이, 논리 블록 "j"의 물리 블록 체인은 새로운 데이터를 허용하도록 확장되지만, 현재 새로운 데이터를 포함하는 블록에는 4의 트랜잭션 필드가 제공되어, 자신이 "소유하고 있는" 트랜잭션을 식별하는 것이 가능해진다.
도 14f는 도 11d에 해당하고, 태스크 #1이 논리 블록 어드레스 "k"에 기록된 후에 제어기(160) 논리 대 물리 블록 어드레스 매핑 상태를 도시한다. 다시, 체인은 확장되고 새로운 데이터는 트랜잭션 #7로 "식별된다".
호스트(110)는 비휘발성 저장 디바이스(150)에, 태스크 #1로부터의 명령 세트와연관되는 기록 명령 모두가 송신되고 프로세싱되었으므로, 새로운 일정한 데이터 상태가 설정될 수 있음을 고지할 수 있다. 호스트(110)는 새로운 일정한 데이터 상태를 규정하는 제어기에 세트 명령의 종단을 송신함으로써 이를 표시할 수 있다. 도 14g에서(도 11e에 해당하는), 제어기(160) 논리 대 물리 블록 어드레스 매핑 상태는 태스크 #1가 완료되었기 때문에 호스트가 제어기에게 새로운 일정한 데이터상태가 도달되었음을 공지한 후에 도시된다. 결과적으로, 제어기(160)는 전역 개방 트랜잭션 목록으로부터 트랜잭션 #7을 제거하고(목록에는 단지 트랜잭션 #4만을 남겨둔다), 논리 블록 "i" 및 "k"의 체인에 추가되는 최종 물리 블록이 자신들의 트랜잭션 필드를 널로 설정하도록 한다. 도 11e과는 대조적으로, 논리 블록 "j"에서는 어떠한 변화도 없는데, 왜냐하면 이의 트랜잭션 필드가 #7(트랜잭션이 폐쇄된)이 아니고 #4이기 때문이다. 그러므로 블록 "j" 내의 새로운 데이터는 조건부로 연관된 채로 유지되어, 도 11e에 도시되었던 문제를 방지한다.
호스트(110)가 제어기에 태스크 #2와 연관되는 트랜잭션 #4을 폐쇄하라고 지시하기 전에 정전이 발생하면, 제어기(160)는 트랜잭션 #7이 계속해서 개방되어 있는 동안 변화가 행해졌는지의 여부와는 관계없이, 또는 트래잭션 #4이 폐쇄된 이후에 변화가 발생한 경우 행해진 저장 데이터에 대한 변화를 트랜잭션 #4의 일부로 롤백함으로써 디바이스의 데이터 상태를 복구할 것이다. 그러므로, 트랜잭션 #4와 연관되는 논리 블록 "j"에 대한 변화는 다음의 전력 공급 이후에 제어기가 실행하는 복구 동안 정확하게 롤백될 것이다. 이는 도 14h에 도시되고, 도 14h는 도 14g에 도시된 상태에서 발생하는 전력 손실에 이은 복구 후의 제어기의 논리 대 물리 블록 어드레스 매핑을 도시한다. 논리 블록 "j"는 트랜잭션 #4를 시작하기 전에 자신이 가지고 있었던 데이터에 롤백되고, 전역 트랜잭션 목록이 지워진다.
도 14a 내지 14e에 도시된 예시적인 실시예는 도 11a 내지 11e에서 식별된 멀티-스레딩된 동작의 문제를 트랜잭션 식별자의 이용을 통해 처리되었음을 설명한다. 그러므로, 비휘발성 메모리 디바이스(150)는 멀티태스킹 또는 멀티-스레딩된 데이터 액세스 동작을 지원하는 호스트(110)와 통신 상태에 있을 때 내구성 강화 동작을 제공할 수 있다.
멀티- 스레딩된 실시예와 연관되는 고려사항:
도 13a 내지 13f 및 도 14a 내지 14e 및 첨부 텍스트에 기술되는 멀티 스레딩된 실시예의 최적화 및 유용성에 중요한 여러 이슈가 있다.
a. 상호교차하는 트랜잭션: 상기 예가 상호 교차하는 트랜잭션을 설명하지 않을지라도, 이 실시예의 방법은 동일한 섹터에서 서로 교차하는 다수의 트랜잭션인 경우 마찬가지로 적용 가능하다. 즉, 하나의 트랜잭션은 다른 트랜잭션의 조건부 연관 데이터를 포함하는 섹터 내에 기록된다. 그러나, 제어기(160)가 그와 같은 경우를 지원할 수 있을지라도, 요청이 발생하는 순서가 실제로 원하는 최종 결과를 반영하는 것을 보장하는 것은 호스트의 책임이다. 즉, 제어기(160)는 덜 최신의 데이터보다 더욱 최근에 기록된 데이터에 대한 선호도를 제공하므로, 호스트(110)는 상호교차하는 트랜잭션 이후에 유지되는 데이터가 마지막에 기록된 데이터임을 보장해야만 한다.
b. 동일한 태스크에 의한 다수의 트랜잭션: 상기 예가 저장 디바이스에 동시에 액세스하는 두 태스크의 경우에 집중되었을지라도, 본 실시예의 방법은 하나의 태스크가 동시에 개방된 다수의 트랜잭션을 초기화하는 경우에 마찬가지로 적용 가능하다. 이는 실제로 더 일반적인 멀티태스킹 경우의 특수 및 더욱 단순한 경우이겨, 다수의 파일 상에서 동작하는 태스크에 유용할 수 있다. 본 실시예의 목적을 위해, 멀티태스킹은 또한 다수의 트랜잭션을 생성하는 단일 태스크의 경우를 포함하는 것으로 해석되어야만 한다.
c. 다수의 트랜잭션이 요구되지 않는 경우: 비휘발성 저장 디바이스(150)가 어느 시점에서 하나 이상의 개방 트랜지션을 절대로 지원할 필요가 없다는 것이 공지되면, 비휘발성 저장 디바이스(150) 드라이버에 대한 인터페이스는 간소화될 수 있다. 단 하나의 개방 트랜잭션만이 존재하므로, 호스트(110) 및 비휘발성 저장 디바이스(150) 사이에 트랜잭션 식별자를 교환할 필요가 없다. 호스트(110) 및 비휘발성 저장 디바이스(15) 사이의 상호 동작은 이 경우에 다음과 같다: 1) 호스트(110)는 비휘발성 저장 디바이스(150)에 새로운 트랜잭션을 개방하라고 요청한다. 2) 호스트(110)는 명령을 비휘발성 저장 디바이스(150)에 송신하여 저장매체의 콘텐츠를 각각 변경할 수 있는 동작의 시퀀스를 실행하며, 여기서 트랜잭션 식별자는 상기 명령 내에 지정되지 않는다. 상기 명령은 자신이 단지 개방 트랜지션에만 연관되는 것을 나타낼 수 있다. 3) 호스트(110)는 비휘발성 저장 디바이스(150)에게 트랜잭션을 폐쇄하라고 요청하고, 여기서 트랜잭션 식별자는 명령 내에 지정되지 않는다. 이 동작 모드는 더 일반적인 다수의 트랜잭션 경우를 간소화한 것으로, 여기서 트랜잭션 핸들은 자동으로 포함되고 물리 블록 내의 수치 트랜잭션 필드는 블록이 단지 개방 트랜잭션에 참여하고 잇는지를 나타내는 불린 트랜잭션(Boolean transaction)에 의해 대체될 수 있다. 본 실시예의 목적을 위해, 트랜잭션 및 트랜잭션 식별자는 트랜잭션 핸들 및 트랜잭션 불린 플래그가 포함되는 그 경우를 또한 포함하는 것으로 해석될 수 있다.
d. 트랜잭션과 연관되지 않는 드라이버 명령: 본 실시예가 트랜잭션과 연관되지 않는 호스트 명령을 원래부터 지원하지 않는 것이 본 실시예의 장점이다. 이는 예를 들어, 일부 명령이 전력 손실 보호의 여분의 신뢰성을 요구하지 않을 때 유용할 수 있고, 내구성 강화되거나 멀티태스킹-내구성 강화 동작과 연관되는 추가 실행 비용을 지불하는 것이 바람직하지 않다. 명령 또는 이의 데이터를 트랜잭션 식별자와 연관시키지 않도록, 호스트(110)는 단지 명령을, 널 트랜잭션 식별자로 설정된 트랜잭션 식별자 필드를 구비하는 비휘발성 저장 디바이스에 송신한다. 이는 데이터를 일정한 데이터 상태로 자동으로 그리고 즉시 무조건부로 연관시키는 효과를 갖고, 여기서 제어기는 복구 동작에서 데이터를 롤백할 수 없다. 대안으로, 호스트(110)는 또한 기록 명령을 트랜잭션 식별자를 위한 서포트를 갖지 않는 제어기(160)로 송신할 수 있다. 제어기(160)가 이 명령을 프로세싱하면, 상기 제어기는 물리 블록의 트랜잭션 식별자 필드를 널 트랜잭션 식별자 값으로 설정할 것이다.
e. 판독 동작: 트랜잭션 내의 인터믹싱 또는 인터리빙 판독 명령이 허용된다. 그와 같은 명령은 매체 콘텐츠를 변경시키지 않으므로 어떠한 트랜잭션과도 연관되지 않는다. 그러나, 개방 트랜잭션(여전히 진행 중인 트랜잭션)에 의해 수정되고 있는 논리 블록 어드레스에 대한 판독이 시도될 때 주의해야만 한다. 제어기(160)가 판독 요청에 응답하는데 취할 수 있는 두 대안의 방법이 있다.
제어기(160)는 조건부로 연관되든지 또는 무조건부로 연관되든지간에 논리 블록 어드레스와 연관되는 가장 최신의 데이터를 복귀시킬 수 있다. 이는 많은 경우에서 허용 가능할 수 있지만, 두 태스크가 동일한 어드레스에서 데이터를 수정하고 있을 때 문제가 발생한다. 예를 들어, 다음의 시나리오를 고려하자: i. 태스크 #1은 블록 A를 트랜잭션 T1의 일부로 기록한다. ii. 태스크 #2는 블록 A를 판독하고 태스크 #2 데이터를 획득한다. iii. 태스크 #2는 데이터에 대한 작은 수정을 행하고 그것을 트랜잭션 T2의 일부로 블록 A에 역으로 기록한다. iv. 태스크 #2는 트랜잭션 T2를 폐쇄한다. v. 전력 손실이 발생한다. vi. 다음 전력 공급시에 제어기(160)는 트랜잭션 T1(폐쇄되지 않았던)의 효과를 제거한다. 얼핏 보기에 이것은 중단된 T1 트랜잭션의 효과가 정확하게 제거된 것으로 보이지만, 이는 그러하지 않다. 커밋되지 않은 블록 A의 T1 데이터는 태스크 #2의 판독/수정/기록 동작에 의해 논리 블록 어드레스와 무조건적으로 연관되었다.
대안적으로, 제어기는 논리 블록 어드레스와 무조건적으로 연관되는 가장 최근의 데이터를 복귀시키고, 개방 트랜잭션의 일부로 체인에 부가될 커밋되지 않은 데이터를 무시할 수 있다. 이는 많은 경우에서 허용 가능할지라도, 두 태스크가 동일한 어드레스에서 데이터를 수정하고 있을 때 문제가 발생한다. 예를 들어, 다음의 시나리오를 고려하자. i. 태스크 #1은 블록 A를 판독하고 원래의 데이터를 획득하다. ii. 태스크 #1은 데이터에 대한 작은 수정을 행하고 그것을 트랜잭션 T2의 일부로서 블록 A에 역으로 기록한다. iii. 태스크 #2는 태스크 #1 수정 없이, 블록 A를 판독하고 원래의 데이터를 획득한다. iv. 태스크 #1은 트랜잭션 T1을 폐쇄한다. v. 태스크 #2는 데이터에 대한 작은 수정을 행하고 그것을 트랜잭션 T2의 일부로서 블록 A에 역으로 기록한다. vi. 태스크 #2는 트랜잭션 T2를 폐쇄한다. 이 경우에, 상술한 제어기(160) 복구 문제가 방지되었으나, 전력 손실이 없으면 다른 문제가 발생한다. 태스크 #1에 의해 생성되는 데이터가 분실되고, 이는 호스트가 비-내구성 강화 비휘발성 저장 디바이스에 동일한 일련의 액세스를 실행했다면 발생하지 않을 것이다. 그러므로, 최적의 작동이 호스트의 이용 패턴에 좌우되기 때문에, 모든 경우에 적합한 하나의 방법은 존재하지 않는다. 그러므로, 결과적으로 제어기가 구성 가능 파라미터를 제공하도록 하는 것이 유용하며, 여기서 호스트는 상기 호스트가 상기 두 대안의 멀티-스레딩된 판독 작동 사이에서 선택하도록 하는 명령에 의해 상기 구성 가능 파라미터를 설정할 수 있다.
f. 트랜잭션을 폐쇄하라는 명령의 프로세싱 동안의 전력-손실: 제어기가 트랜잭션을 폐쇄하는 중에 있는 동안 전력 손실이 발생하는 것이 가능하기 때문에 이 실시예의 구현예에서는 주의해야만 한다. 전력-손실이 트랜잭션을 폐쇄하는 부분인 무조건적 연관 프로세스의 도중에 발생하면, 제어기(160)는 트랜잭션과 연관되는 블록 중 일부(이들 중 전부는 아니다)를 이미 커밋하였을 수 있다. 다음 트랜잭션에 전력을 공급하는 동안, 제어기(160)는 트랜잭션을 개방으로 확인할 것이고 그 변화를 롤백하도록 시도할 것이다. 그러나 이 롤-백은 아직 커밋되지 않은 상기 물리 블록을 단지 제거할 수 있을 뿐이므로, 결과적으로 반-커밋된 트랜잭션 및 일관되진 않은 데이터 상태가 발생한다. 하나의 가능한 해법은 "트랜잭션을 폐쇄" 명령을 수신하자마자 제어기(160)는 개방 트랜잭션 목록에 "폐쇄 진행 중" 플래그로 트랜잭션을 표시할 수 있다는 것이다. 이렇게 함으로써, 제어기(160)는 이 플래그가 설정되어 있으므로 개방 트랜잭션을 롤백하지 않을 것이지만, 이 트랜잭션에 대하여 중단된 트랜잭션을 폐쇄하는 동작을 계속하여, 트랜잭션 내에 수신된 물리 블록 데이터의 나머지가 대응하는 논리 블록 어드레스와 무조건부로 연관된다. 이 예시적인 수정은 트랜잭션 폐쇄 중이 전력-손실에 대한 완전한 보호를 제공할 수 있다.
g. 더 많은 최적화법: 당업자에게 즉시 분명해지는 바와 같이, 본 방법의 본질을 벗어나지 않고 본 실시예의 방법에 적용될 수 있는 많은 최적화법이 존재한다. 예를 들어, 제어기(160)는 각각의 개방 트랜잭션을 상기 트랜잭션과 연관되는 블록의 목록으로 매핑하는 표를 RAM 내에 유지할 수 있다. 이는 "트랜잭션 폐쇄" 명령의 프로세싱의 속도를 증가시킬 수 있다. 다른 예로, 제어기(160)는 각각의 개방 트랜잭션을 상기 트랜잭션과 연관되는 블록의 목록으로 매핑하는 표를 비휘발성 메모리(180)에 저장할 수 있다. 이는 비휘발성 저장 디바이스(150) 내의 각각의 논리 블록 어드레스를 스캔해야 하는 것을 방지함으로써, 전력-손실 후에 복구 및 클린-업의 프로세스의 속도를 증가시킬 수 있다. 모든 그와 같은 최적화법은 본 실시예의 범위 내에 있는 것으로 간주된다.
그러므로, 제어기(160)는 단일 스레딩된 또는 멀티-스레딩된 기록 동작을제공하는 호스트(110)로부터 내구성 강화 기록 동작을 지원하도록 적응될 수 있다. 도 15는 단일 스레딩된 시스템 내의 호스트(110)로부터 기록 요청을 프로세싱하는 비휘발성 디바이스(150) 내의 제어기(160)에 대한 예시적인 단계(1500)를 도시한다. 제어는 단계 1502에서 시작하고, 여기서 제어기는 호스트(110)로부터 명령을 수신하여 일정한 데이터 상태를 설정한다. 제어기(160)가 후속해서 일정한 데이터 상태로의 롤-백 또는 복구를 실행하는데 필요한 경우, 디바이스 내의 데이터는 상술한 방법을 이용하여 이 상태로 복구될 수 있다. 다시 말하면, 제어기(160)는 저장 디바이스를 하나의 일정한 데이터 상태로부터 다른 일정한 데이터 상태로 전이시키기 위해 이 지점 이후에 수신된 모든 명령이 호스트(110)에 의해 송신되는 명령 세트의 일부라고 가정할 수 있다. 일 실시예에서, 이 명령은 불필요한데, 왜냐하면 비휘발성 메모리 디바이스(150)가 단계 1512에 도시된 이전에 수신된 세트 명령의 종단을 이용하기 때문이고, 이때 명령은 디바이스를 다음 일정한 데이터 상태를 전이시키는 다음 명령 세트의 시작을 나타낸다.
제어는 단계 1504로 넘어가고, 여기서 명령 세트 내의 기록 명령은 호스트(110)로부터 수신된다. 명령은 논리 블록 어드레스 및 기록할 데이터를 포함할 수 있다. 제어기(160)는 단계 1506에서 물리 블록을 할당하여 데이터를 저장함으로써 이 명령에 응답한다. 물리 블록은 비휘발성 저장 디바이스(150)의 비휘발성 메모리(180) 내의 저장 요소이다. 제어기(160)는 단계 1508에서 명령 내에서 수신되는 데이터를 물리 블록에 기록한다. 그리고나서 제어는 단계 1510으로 넘어가고, 여기서 물리 블록은, 가능하면 논리 블록 어드레스와 연관되는 물리 블록의 체인의 종단에 블록을 추가함으로써, 기록 명령이 데이터와 관련시켰던 논리 블록 어드레스와 조건부로 연관된다. 물리 블록(및 그에 따른 데이터)이 논리 블록 어드레스와 단지 조건부로 연관되기 때문에, 전력 손실이 발생하면, 이 논리 블록 어드레스 및 물리 블록(및 그에 따른 데이터) 사이의 연관는 제어기(160)가 전력 손실 이후에 일정한 데이터 상태로 복구할 필요가 있는 경우 제거될 것이다.
단계 1512에서, 제어기(160)는 세트 명령의 종단이 호스트(110)로부터 수신되는지를 결정한다. 만일 아니라면, 제어는 다시 단계 1504로 돌아가서, 여기서 제어기는 명령 세트의 일부인 다른 기록 명령을 수신하기 위해 대기한다. 충분한 물리 블록 저장 공간을 취하면, 단계 1500에 도시된 루프는 명령 세트 내에 있는 수만큼 많은 명령에 대하여 반복될 수 있다. 단계 1500을 통한 후속 루프 동안 단계 1504로 복귀할 때, 수신되는 명령은 단계 1504에서 명령이 수신되었던 제 1 시간 동안 수신된 명령의 연속일 수 있으므로, 호스트에 의해 이미 지정된 정보 모두를 포함하지 않을 수 있다. 예를 들어, 기록 명령은 시작 어드레스 및 기록할 데이터의 일부를 지정할 수 있다. 기록할 데이터의 나머지를 포함하는 후속 기록 명령은 어드레스 또는 다른 명령 정보를 포함하지 않을 수 있는데, 왜냐하면 제어기(160)는 명령 정보를 절약하였고 후속하는 연속 기록 동작에 대한 어드레스 정보를 계산할 수 있음이 가정되기 때문이다.
단계 1512로 돌아가서, 호스트(110)가 세트 명령의 종단을 송신했다면, 제어는 1514로 넘어가고, 여기서 제어기(160)는 단계 1504 내지 1510에서 프로세싱되는 명령 내에서 수신되는 데이터를 명령에 대응하는 논리 블록 어드레스를 무조건적으로 연관시킴으로써 일정한 데이터 상태를 설정한다. 이 방식에서, 단계 1504 내지 1510에서 수신된 데이터는 새로운 일정한 데이터 상태의 일부가 된다. 일단 이것이 완료되면, 단계 1500가 종료된다. 상술한 바와 같이, 제어기는 이후에 수신되는 임의의 명령이 호스트(110)에 의한 시도로 처리되어 비휘발성 저장 디바이스가 또 다른 새로운 일정한 데이터 상태로 전이되도록 하기 위해, 하나의 명령 세트를 새로운 명령 세트의 시작으로 종료시키는 명령을 처리할 수 있다.
도 16은 멀티-스레딩된 시스템에서 호스트(110)로부터 수신되는 단일 트랜잭션의 기록 요청을 프로세싱하는 비휘발성 저장 디바이스(150) 내의 제어기(160)에 대한 예시적인 단계를 도시한다. 제어는 단계 1602에서 시작하고, 여기서 제어기(160)는 호스트(110)로부터 명령을 수신하여 트랜잭션을 설정한다. 제어는 단계 1604로 넘어가고, 여기서 제어기(160)는 이용되지 않은 트랜잭션 식별자 값을 선택하고 이 값을 호스트(11)로 복귀시킨다. 단계 1606에서, 제어기는 이 트랜잭션 식별자를 개방 트랜잭션 식별자의 목록에 추가한다. 트랜잭션의 도중에(그것이 단계 1616에서 호스트(110)로부터의 명령에 응답하여 폐쇄되기 전에) 전력 손실 또는 중단이 발생하면, 제어기(160)는 트랙잭션 식별자와 연관되는 비휘발성 메모리(180)로의 임의의 데이터 변화를 롤백할 것이다. 즉, 트랜잭션 식별자와 연관되는 기록 명령 내의 수신된 데이터는 트랜잭션이 폐쇄될 때까지 대응하는 논리 블록 어드레스와 조건부로 연관된다. 전력 중단이 정지되면, 상기 완료되지 않은 트랜잭션과 연관되는 데이터 변화는 상기 트랜잭션 식별자와 연관되는 저장된 데이터를 제거함으로써 롤백된다.
제어는 단계 1608로 넘어가고, 여기서 트랜잭션 식별자와 연관되는 명령 세트 내의 제 1 기록 명령은 제어기(160)에서 호스트(110)로부터 수신된다. 하나의 구현예에서, 명령은 논리 블록 어드레스를 포함하고, 제어기(160)로 하여금 명령을 개방 트랜잭션과 연관하도록 하기 위한 트랜잭션 식별자를 포함한다. 단계 1610에서, 제어기(160)는 데이터를 저장하기 위해 물리 블록을 할당한다. 제어기(160)는 단계 1612에서 물리 블록 내에 데이터를 저장하고, 물리 블록(및 그에 따른 데이터)은 트랜잭션 식별자로 태그(tag)된다. 단계 1614에서, 새로운 물리 블록(및 그에 따른 데이터)은 단계 1608에서 수신되는 기록 명령에 대응하는 논리 블록 어드레스와 조건부로 연관된다. 일 실시예에서, 이 조건부 연관는 물리 블록을 제어부(160)에 의해 논리 블록 어드레스로 매핑되는 물리 블록의 체인에 추가하는 것을 포함한다.
단계 1616에서, 제어기(160)는 폐쇄 트랜잭션 명령이 호스트(110)로부터 수신되는지를 결정하여, 현재 개방 트랜잭션에 적용한다. 만일 수신되지 않는다면, 제어는 다시 단계 1608로 넘어가고, 여기서 제어기는 개방 트랜잭션에서의 명령 세트의 일부인 다른 기록 명령을 수신하기 위해 대기한다. 충분한 물리 블록 저장 공간을 취하면, 단계 1600에 도시된 루프는 트랜잭션에서의 명령 세트 내에 존재하는 수만큼 많은 명령에 대해 반복될 수 있다. 후속 동작을 위해 도 16에서의 단계의 루프를 통해 단계 1608로 복귀하면, 수신된 명령은 트랜잭션과 연관되는 이전에 수신된 기록 명령의 연속일 수 있다. 그러므로, 다음 기록 명령은 이전의 명령에서 호스트(110)에 의해 이미 지정된 모두를 포함할 수 있는 것은 아니다. 예를 들어, 제 1 기록 명령이 시작 어드레스 및 기록할 데이터의 일부를 지정하는 경우, 기록할 기록 제이터의 나머지는 어드레스 또는 다른 명령 정보를 포함할 수 없는데, 왜냐하면, 제어기(160)는 명령 정보를 절약하였고 후속하는 연속 기록 동작에 대한 어드레스 정보를 계산할 수 있음이 가정되기 때문이다. 그러나, 단계 1608에서 수신되는 임의의 명령은 트랜잭션이 개방되는 동안 제어기(160)가 수신할 수 있는 다른 명령과 구별되기 위해서 트랜잭션 식별자에 의해 식별되어야만 한다.
단계 1616으로 돌아와서, 호스트(110)가 매칭하는 트랜잭셕 식별자를 가지는 폐쇄 트랜잭션 명령을 송신했다면, 제어는 1618로 넘어간다. 폐쇄 트랜잭션 명령은 페쇄될 트랜잭션의 식별자를 포함한다. 호스트가 제어기(160)에 트랜잭션과 연관되는 데이터 모두가 수신되었음을 고지했기 때문에, 제어기(160)는 전력 손실이 발생해야 하는 경우 이 데이터가 제거되는 것을 방지하는 조치를 취해야만 한다. 이를 행하기 위해, 제어기(160)는 단계 1608 내지 1614에서 프로세싱되었던 트랜잭션 식별자를 갖는 기록 명령 내에서 수신된 데이터를 자신의 대응하는 논리 블록 어드레스에 무조건적으로 연관시킨다. 이 방식으로, 단계 1608 내지 1614에서 수신된 데이터는 새로운 일정한 데이터 상태의 일부가 된다. 단계 1620에서, 폐쇄된 트랜잭션의 트랜잭션 식별자는 개방 트랜잭션의 목록으로부터 제거된다. 일단 이것이 완료되면, 단계 1600이 종료한다.
본 실시예의 방법에 따라 구현된 제어기를 구비한 비휘발성 저장 디바이스는 여러 장점을 갖는다. 일정한 데이터 상태 사이에서 디바이스를 전이하는 명령 세트의 중간에, 또는 원자성 트랜잭션을 규정하는 명령 세트 동안 비휘발성 저장 디바이스에 전력이 중단되면, 비휘발성 저장 디바이스는 호스트로부터 어떠한 도움 없이 자체를 복구시킬 수 있다. 복구 프로세스는 호스트로부터 어떠한 특수 명령 또는 지시를 요구할 수 없으며, 전력에 복구될 때 비휘발성 저장 디바이스 내의 제어기에 의해 자동으로 개시될 수 있다. 비휘발성 메모리 디바이스는 서너 개의 추가 명령을 호스트로 이출하여 호스트가 일정한 데이터 상태를 규정하거나(원자성 트랜잭션을 규정하는 명령 세트의 시작 및 종료) 특정 명령(기록 또는 소거)을 트랜잭션과 연관하도록 한다. 호스트는 이 확장된 명령 세트를 이용하는 것을 선택하여 내구성 강화 동작을 지원하는데 요구되는 디바이스의 내부 데이터 구조를 유지해야 할 필요없이 비휘발성 저장 디바이스의 내구성 강화 특성을 이용할 수 있다. 호스트의 관점으로 간소화는 비휘발성 메모리 디바이스가 비휘발성 메모리 디바이스의 내구성 강화 특성을 유용하게 이용하는 호스트, 그리고 그러하지 않은 호스트에 의해 이용되도록 한다. 더욱이, 호스트가 내구성 강화 동작에 요구되는 데이터 구조를 유지할 필요가 없고, 일정한 데이터 상태를 복구하기 위해 비휘발성 저장 디바이스에 액세스하지 않기 때문에, 호스트 및 비휘발성 저장 디바이스 사이의 통신 인터페이스 상의 이용 가능한 대역폭은 증가한다.
본 발명이 다양한 시스템 및 방법 실시예에 대하여 기술되었을지라도, 본 발명이 첨부된 청구항이 전체 범위 내에서 보호될 권리가 있음이 이해되어야 한다.

Claims (33)

  1. 비휘발성 저장 디바이스에서 원자성 트랜잭션(atomic transaction)을 프로세싱하는 방법에 있어서,
    상기 비휘발성 저장 디바이스에서 명령 세트를 수신하는 단계로서, 상기 명령 세트는 복수의 기록 명령을 포함하고, 각각의 기록 명령은 대응하는 논리 블록 어드레스와 연관되고 데이터 및 트랜잭션 식별자를 포함하고, 상기 트랜잭션 식별자는 임의의 값을 포함하고, 명령 세트에서 각각의 기록 명령의 트랜잭션 식별자의 값은 동일한, 상기 비휘발성 저장 디바이스에서 명령 세트를 수신하는 단계와,
    상기 복수의 기록 명령 각각을 프로세싱하는 단계로서,
    상기 데이터를 각각의 기록 명령으로부터 상기 비휘발성 저장 디바이스 내의 비휘발성 메모리의 물리 블록에 기록하는 단계와,
    각각의 기록 명령으로부터 수신된 상기 데이터를 그 대응하는 논리 블록 어드레스와 조건부로 연관시키는 단계와,
    상기 물리 블록과 값을 연관시키는 단계로서, 상기 물리 블록과 연관된 값은 상기 비휘발성 저장 디바이스의 현재 일정한 데이터 상태를 나타내는, 상기 물리 블록과 값을 연관시키는 단계를 포함하는, 상기 복수의 기록 명령 각각을 프로세싱하는 단계와,
    상기 명령 세트가 시작된 이후 및 세트 명령의 종단이 수신되기 이전에 추가 기록 명령이 수신되는 단계와,
    상기 트랜잭션 식별자와 연관된 상기 명령 세트의 종단을 나타내는 세트 명령의 종단을 수신하는 단계로서, 상기 세트 명령의 종단은 상기 명령 세트와 연관되고, 추가 기록 명령은 상기 명령 세트와 연관되지 않는, 상기 세트 명령의 종단을 수신하는 단계와,
    상기 세트 명령의 종단을 수신하는 것에 응답하고, 상기 비휘발성 저장 디바이스 내에서 데이터를 이동시키지 않으면서, 상기 명령 세트 내의 기록 명령과 연관된 각각의 논리 블록 어드레스에 대해, 상기 논리 블록 어드레스와 조건부로 연관된 명령 세트 중 최종 명령의 데이터를 상기 논리 블록 어드레스와 무조건적으로 연관시키는 단계를
    포함하는, 원자성 트랜잭션을 프로세싱하는 방법.
  2. 제 1항에 있어서, 상기 명령 세트를 수신하기 전에 상기 명령 세트의 시작을 나타내는 명령을 수신하는 단계를 더 포함하는, 원자성 트랜잭션을 프로세싱하는 방법.
  3. 삭제
  4. 제 1항에 있어서, 각각의 명령으로부터 수신된 데이터를 그 대응하는 논리 블록 어드레스와 조건부로 연관시키는 단계는 상기 물리 블록을 상기 논리 블록 어드레스와 연관시키는 단계를 포함하고, 복수의 물리 블록은 상기 논리 블록 어드레스와 연관되는, 원자성 트랜잭션을 프로세싱하는 방법.
  5. 제 1항에 있어서, 상기 복수의 기록 명령 각각을 프로세싱하는 단계는 상기 데이터를 상기 물리 블록에 기록하기 전에 상기 물리 블록을 소거하는 단계를 더 포함하는, 원자성 트랜잭션을 프로세싱하는 방법.
  6. 제 5항에 있어서, 상기 세트 명령의 종단을 수신하는 것에 응답하고, 상기 비휘발성 저장 디바이스 내에서 데이터를 이동시키지 않으면서, 상기 명령 세트 내의 기록 명령과 연관된 각각의 논리 블록 어드레스에 대해, 상기 논리 블록 어드레스와 연관된 가장 최근에 기록된 물리 블록을 제외하고 상기 논리 블록 어드레스로부터 모든 물리 블록을 연관 해제하는 단계를 더 포함하는, 원자성 트랜잭션을 프로세싱하는 방법.
  7. 제 1항에 있어서, 상기 물리 블록과 임의의 값을 연관시키는 단계는,
    이전에 할당된 물리 블록이 상기 명령 세트 내의 기록 명령과 연관되는 논리 블록 어드레스와 연관된 가장 최근에 기록된 블록인 경우,
    상기 이전에 할당된 물리 블록에 대한 플래그 값(flag value)을 판독하는 단계와,
    상기 플래그 값을 토글링(toggling)하여 토글된 플래그 값을 형성하는 단계와,
    상기 토글된 플래그 값을 새로 할당된 물리 블록과 연관시키는 단계를
    더 포함하고, 상기 데이터를 상기 물리 블록에 기록하는 단계는 상기 데이터를 새로 할당된 물리 블록에 기록하는 단계를 포함하는, 원자성 트랜잭션을 프로세싱하는 방법.
  8. 제 7항에 있어서, 상기 세트 명령의 종단을 수신하는 것에 응답하고, 상기 비휘발성 저장 디바이스 내에서 데이터를 이동시키지 않으면서, 상기 명령 세트 내의 기록 명령과 연관된 각각의 논리 블록 어드레스에 대해, 상기 토글된 플래그 값을 갖는 가장 최근에 기록된 물리 블록을 제외하고 상기 논리 블록 어드레스로부터 모든 물리 블록을 연관 해제하는 단계를 더 포함하는, 원자성 트랜잭션을 프로세싱하는 방법.
  9. 제 1항에 있어서, 상기 물리 블록과 값을 연관시키는 단계는,
    상기 비휘발성 저장 디바이스의 현재 일정한 데이터 상태의 버전을 나타내는 값을 획득하는 단계와,
    상기 값을 증분시켜 증분된 값을 형성하는 단계와,
    상기 증분된 값을 상기 물리 블록과 연관시키는 단계를
    더 포함하는, 원자성 트랜잭션을 프로세싱하는 방법.
  10. 제 9항에 있어서, 상기 논리 블록 어드레스와 조건부로 연관된 명령 세트 중의 최종 명령의 데이터를 상기 논리 블록 어드레스와 무조건적으로 연관시키는 단계는 상기 비휘발성 저장 디바이스의 현재 일정한 데이터 상태를 나타내는 값을 상기 증분된 값으로 갱신하는 단계를 포함하는, 원자성 트랜잭션을 프로세싱하는 방법.
  11. 비휘발성 저장 디바이스에서 원자성 트랜잭션을 프로세싱하는 방법에 있어서,
    상기 비휘발성 저장 디바이스에서 명령 세트를 수신하는 단계로서, 상기 명령 세트는 복수의 기록 명령을 포함하고, 각각의 기록 명령은 대응하는 논리 블록 어드레스와 연관되고 데이터 및 트랜잭션 식별자를 포함하고, 상기 트랜잭션 식별자는 임의의 값을 포함하고, 상기 명령 세트에서 각각의 기록 명령의 상기 트랜잭션 식별자의 값은 동일한, 상기 상기 비휘발성 저장 디바이스에서 명령 세트를 수신하는 단계와,
    상기 복수의 기록 명령 각각을 프로세싱하는 단계로서,
    상기 데이터를 각각의 기록 명령으로부터 상기 비휘발성 저장 디바이스 내의 비휘발성 메모리의 물리 블록에 기록하는 단계와,
    각각의 기록 명령으로부터 수신된 데이터를 그 대응하는 논리 블록 어드레스와 조건부로 연관시키는 단계와,
    임의의 값을 상기 물리 블록과 연관시키는 단계로서, 상기 물리 블록과 연관된 값은 상기 비휘발성 저장 디바이스의 현재 일정한 데이터 상태를 나타내는, 상기 임의의 값을 상기 물리 블록과 연관시키는 단계와,
    각각의 기록 명령으로부터 상기 비휘발성 저장 디바이스 내의 비휘발성 메모리로 상기 트랜잭션 식별자를 기록하는 단계를 포함하는, 상기 복수의 기록 명령 각각을 프로세싱하는 단계와,
    상기 명령 세트가 시작된 이후 및 세트 명령의 종단이 수신되기 전에 추가 기록 명령을 수신하는 단계와,
    상기 트랜잭션 식별자와 연관된 명령 세트의 종단을 나타내는 세트 명령의 종단을 수신하는 단계로서, 상기 세트 명령의 종단은 명령 세트와 연관되고, 상기 추가 기록 명령은 상기 명령 세트와 연관되지 않는, 상기 세트 명령의 종단을 수신하는 단계와,
    상기 세트 명령의 종단을 수신하는 것에 응답하고, 상기 명령 세트 내의 기록 명령과 연관된 각각의 논리 블록 어드레스에 대해, 상기 논리 블록 어드레스와 조건부로 연관되는 명령 세트 중 최종 명령의 데이터를 상기 논리 블록 어드레스와 무조건적으로 연관시키는 단계를
    포함하는, 원자성 트랜잭션을 프로세싱하는 방법.
  12. 제 11항에 있어서, 상기 명령 세트를 수신하기 전에 상기 명령 세트의 시작을 나타내는 명령을 수신하는 단계를 더 포함하는, 원자성 트랜잭션을 프로세싱하는 방법.
  13. 삭제
  14. 제 11항에 있어서, 상기 트랜잭션 식별자는 상기 기록 명령을 상기 명령 세트와 연관하도록 동작하는 플래그를 포함하는, 원자성 트랜잭션을 프로세싱하는 방법.
  15. 삭제
  16. 제 11항에 있어서, 각각의 명령으로부터 수신된 데이터를 그 대응하는 논리 블록 어드레스와 조건부로 연관시키는 단계는 상기 물리 블록을 상기 논리 블록 어드레스와 연관시키는 단계를 포함하고, 복수의 물리 블록은 상기 논리 블록 어드레스와 연관되는, 원자성 트랜잭션을 프로세싱하는 방법.
  17. 삭제
  18. 제 11항에 있어서, 상기 트랜잭션 식별자를 비휘발성 저장 디바이스 내의 비휘발성 메모리에 기록하는 단계는 상기 트랜잭션 식별자를 상기 물리 블록과 연관시키는 단계를 포함하는, 원자성 트랜잭션을 프로세싱하는 방법.
  19. 제 11항에 있어서, 상기 트랜잭션 식별자가 개방 트랜잭션의 목록에 없으면 상기 트랜잭션 식별자를 개방 트랜잭션의 목록에 추가하는 단계를 더 포함하는, 원자성 트랜잭션을 프로세싱하는 방법.
  20. 제 19항에 있어서, 상기 세트 명령의 종단이 수신되면 상기 개방 트랜잭션의 목록으로부터 상기 트랜잭션 식별자를 제거하는 단계를 더 포함하는, 원자성 트랜잭션을 프로세싱하는 방법.
  21. 제 11항에 있어서, 상기 세트 명령의 종단을 수신한 후에 상기 물리 블록과 연관된 트랜잭션 식별자 값을 미리 결정된 값으로 설정하는 단계를 더 포함하는, 원자성 트랜잭션을 프로세싱하는 방법.
  22. 비휘발성 저장 디바이스에서 원자성 트랜잭션을 프로세싱하는 방법에 있어서,
    상기 비휘발성 저장 디바이스에서 명령 세트를 수신하는 단계로서, 상기 명령 세트는 복수의 기록 명령을 포함하고, 각각의 기록 명령은 대응하는 논리 블록 어드레스와 연관되고 데이터와 트랜잭션 식별자를 포함하고, 상기 트랜잭션 식별자는 임의의 값을 포함하고, 상기 명령 세트에서 각각의 기록 명령의 상기 트랜잭션 식별자의 값은 동일한, 상기 명령 세트를 수신하는 단계와,
    각각의 상기 복수의 기록 명령을 프로세싱하는 단계로서,
    각각의 기록 명령으로부터 상기 비휘발성 저장 디바이스의 비휘발성 메모리로 상기 데이터를 기록하는 단계와,
    각각의 기록 명령으로부터 수신된 상기 데이터를 이와 대응하는 논리 블록 어드레스와 조건부로 연관시키는 단계를 포함하는, 각각의 상기 복수의 기록 명령을 프로세싱하는 단계와,
    상기 명령 세트가 시작된 이후 및 세트 명령의 종단이 수신되기 전에 추가 기록 명령을 수신하는 단계와,
    상기 트랜잭션 식별자와 연관된 명령 세트의 종단을 나타내는 세트 명령의 종단을 수신하는 단계로서, 상기 세트 명령의 종단은 상기 명령 세트와 연관되고, 상기 추가 기록 명령은 상기 명령 세트와 연관되지 않은, 상기 세트 명령의 종단을 수신하는 단계와,
    상기 세트 명령의 종단을 수신하는 것에 응답하여, 상기 명령 세트의 기록 명령과 연관되는 각각의 논리 블록 어드레스에 대하여, 상기 논리 블록 어드레스와 조건부로 연관된 명령 세트의 최종 명령의 데이터를 상기 논리 블록 어드레스와 무조건적으로 연관시키는 단계를 포함하는, 원자성 트랜잭션을 프로세싱하는 방법.
  23. 제 22항에 있어서, 상기 추가 기록 명령은 명령의 추가 세트와 연관되고, 상기 명령의 추가 세트는 복수의 추가 기록 명령을 포함하며, 각각의 추가 기록 명령은 추가 논리 블록 어드레스와 연관되고 데이터와 추가 트랜잭션 식별자를 포함하며, 상기 트랜잭션 식별자 및 상기 추가 트랜잭션 식별자는 상기 명령 세트를 상기 추가 명령 세트로부터 구분하는, 원자성 트랜잭션을 프로세싱하는 방법.
  24. 제 11항에 있어서, 상기 프로세싱하는 단계는 상기 데이터를 상기 물리 블록에 기록하기 전에 상기 물리 블록을 소거하는 단계를 더 포함하는, 원자성 트랜잭션을 프로세싱하는 방법.
  25. 제 24항에 있어서, 상기 세트 명령의 종단을 수신하는 것에 응답하고, 상기 비휘발성 저장 디바이스 내에서 데이터를 이동시키지 않으면서, 상기 명령 세트 내의 기록 명령과 연관된 각각의 논리 블록 어드레스에 대해, 상기 논리 블록 어드레스와 연관된 가장 최근에 기록된 물리 블록을 제외하고 상기 논리 블록 어드레스로부터 모든 물리 블록을 연관 해제하는 단계를 더 포함하는, 원자성 트랜잭션을 프로세싱하는 방법.
  26. 제 11항에 있어서, 상기 임의의 값을 상기 물리 블록과 연관시키는 단계는,
    이전에 할당된 물리 블록이 상기 명령 세트 내의 기록 명령과 연관된 논리 블록 어드레스와 연관된 가장 최근에 기록된 블록이면,
    상기 이전에 할당된 물리 블록에 대한 플래그 값을 판독하는 단계와,
    상기 플래그 값을 토글링하여 토글된 플래그 값을 형성하는 단계와,
    상기 토글된 플래그 값을 새로 할당된 물리 블록과 연관시키는 단계를
    더 포함하고, 상기 데이터를 상기 물리 블록에 기록하는 단계는 상기 데이터를 새로 할당된 물리 블록에 기록하는 단계를 포함하는, 원자성 트랜잭션을 프로세싱하는 방법.
  27. 제 26항에 있어서, 상기 세트 명령의 종단을 수신하는 것에 응답하고, 상기 비휘발성 저장 디바이스 내에서 데이터를 이동시키지 않으면서, 상기 명령 세트 내의 기록 명령과 연관된 각각의 논리 블록 어드레스에 대해, 상기 토글된 플래그 값을 갖는 가장 최근에 기록된 물리 블록을 제외하고 상기 논리 블록 어드레스로부터 모든 물리 블록을 연관 해제하는 단계를 더 포함하는, 원자성 트랜잭션을 프로세싱하는 방법.
  28. 제 11항에 있어서, 임의의 값을 상기 물리 블록과 연관시키는 단계는,
    상기 비휘발성 저장 디바이스의 현재 일정한 데이터 상태의 버전을 나타내는 값을 획득하는 단계와,
    상기 값을 증분시켜 증분된 값을 형성하는 단계와,
    상기 증분된 값을 상기 물리 블록과 연관시키는 단계를
    더 포함하는, 원자성 트랜잭션을 프로세싱하는 방법.
  29. 제 28항에 있어서, 상기 논리 블록 어드레스와 조건부로 연관된 명령 세트 중 최종 명령의 데이터를 상기 논리 블록 어드레스와 무조건적으로 연관시키는 단계는 상기 비휘발성 저장 디바이스의 현재 일정한 데이터 상태를 나타내는 값을 상기 증분된 값으로 갱신하는 단계를 포함하는, 원자성 트랜잭션을 프로세싱하는 방법.
  30. 삭제
  31. 삭제
  32. 삭제
  33. 삭제
KR1020117015825A 2008-12-17 2009-12-15 내구성 강화 메모리 디바이스 KR101634412B1 (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US12/316,924 US8266365B2 (en) 2008-12-17 2008-12-17 Ruggedized memory device
US12/316,924 2008-12-17

Publications (2)

Publication Number Publication Date
KR20110097937A KR20110097937A (ko) 2011-08-31
KR101634412B1 true KR101634412B1 (ko) 2016-06-28

Family

ID=42040492

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020117015825A KR101634412B1 (ko) 2008-12-17 2009-12-15 내구성 강화 메모리 디바이스

Country Status (5)

Country Link
US (1) US8266365B2 (ko)
EP (1) EP2366152B1 (ko)
KR (1) KR101634412B1 (ko)
TW (1) TW201027334A (ko)
WO (1) WO2010070427A2 (ko)

Families Citing this family (41)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2008070803A1 (en) 2006-12-06 2008-06-12 Fusion Multisystems, Inc. (Dba Fusion-Io) Apparatus, system, and method for managing data from a requesting device with an empty data token directive
BRPI0900528A2 (pt) * 2009-01-22 2010-12-14 Whirlpool Sa sistema para programaÇço de dispositivos de uso geral comandados remotamente e mÉtodo de programaÇço de dispositivos de uso geral comandados remotamente
US20100235605A1 (en) * 2009-02-13 2010-09-16 Nir Perry Enhancement of storage life expectancy by bad block management
US8639871B2 (en) 2009-04-08 2014-01-28 Google Inc. Partitioning a flash memory data storage device
US8595572B2 (en) 2009-04-08 2013-11-26 Google Inc. Data storage device with metadata command
US9569254B2 (en) * 2009-07-28 2017-02-14 International Business Machines Corporation Automatic checkpointing and partial rollback in software transaction memory
KR101303535B1 (ko) * 2009-12-04 2013-09-03 한국전자통신연구원 메인 메모리를 이용한 메모리 디스크 구성 방법 및 장치
WO2011143628A2 (en) * 2010-05-13 2011-11-17 Fusion-Io, Inc. Apparatus, system, and method for conditional and atomic storage operations
US8255738B2 (en) * 2010-05-18 2012-08-28 International Business Machines Corporation Recovery from medium error on tape on which data and metadata are to be stored by using medium to medium data copy
EP2598996B1 (en) 2010-07-28 2019-07-10 SanDisk Technologies LLC Apparatus, system, and method for conditional and atomic storage operations
US8782386B2 (en) * 2010-09-24 2014-07-15 Microsoft Corporation Detecting state loss on a device
US8966191B2 (en) 2011-03-18 2015-02-24 Fusion-Io, Inc. Logical interface for contextual storage
US20130268726A1 (en) * 2011-07-01 2013-10-10 Xin Guo Dual Mode Write Non-Volatile Memory System
US9274937B2 (en) 2011-12-22 2016-03-01 Longitude Enterprise Flash S.A.R.L. Systems, methods, and interfaces for vector input/output operations
US10133662B2 (en) 2012-06-29 2018-11-20 Sandisk Technologies Llc Systems, methods, and interfaces for managing persistent data of atomic storage operations
TWI563383B (en) * 2012-04-25 2016-12-21 Phison Electronics Corp Memory formatting method, memory controller and memory storage apparatus
TWI486765B (zh) * 2012-06-11 2015-06-01 Phison Electronics Corp 記憶體管理方法、記憶體控制器與記憶體儲存裝置
US9116793B2 (en) * 2012-06-12 2015-08-25 International Business Machines Corporation Maintaining versions of data in solid state memory
CN102929563B (zh) * 2012-10-12 2015-07-15 大唐微电子技术有限公司 一种事务数据处理方法及装置
US9218279B2 (en) * 2013-03-15 2015-12-22 Western Digital Technologies, Inc. Atomic write command support in a solid state drive
US10073987B2 (en) * 2013-04-02 2018-09-11 Western Digital Technologies, Inc. Methods and systems for privileged execution support for file system commands on a storage device
KR102094475B1 (ko) 2013-04-29 2020-03-27 삼성전자주식회사 멀티-트랜잭션의 아토믹 라이트 방법
GB201310084D0 (en) 2013-06-06 2013-07-17 Mastercard International Inc Improvements to electronic authentication systems
US9524219B2 (en) * 2013-09-27 2016-12-20 Intel Corporation Atomic transactions to non-volatile memory
US9430411B2 (en) * 2013-11-13 2016-08-30 Sandisk Technologies Llc Method and system for communicating with non-volatile memory
US10359937B2 (en) * 2013-12-20 2019-07-23 Sandisk Technologies Llc System and method of implementing a table storage support scheme
GB2527529B (en) * 2014-06-24 2021-07-14 Advanced Risc Mach Ltd A device controller and method for performing a plurality of write transactions atomically within a non-volatile data storage device
KR102275706B1 (ko) 2014-06-30 2021-07-09 삼성전자주식회사 데이터 저장 장치의 작동 방법과 이를 포함하는 데이터 처리 시스템의 작동 방법
US20160034191A1 (en) * 2014-08-01 2016-02-04 Kabushiki Kaisha Toshiba Grid oriented distributed parallel computing platform
TWI546666B (zh) * 2014-11-03 2016-08-21 慧榮科技股份有限公司 資料儲存裝置以及快閃記憶體控制方法
CN106330500B (zh) * 2015-06-26 2020-01-10 阿里巴巴集团控股有限公司 一种差错恢复方法及装置
CN105446664B (zh) * 2015-12-03 2018-11-20 深圳国微技术有限公司 一种对存储器进行文件存储方法和存储装置
US9990150B2 (en) 2016-03-22 2018-06-05 Toshiba Memory Corporation Method to provide transactional semantics for updates to data structures stored in a non-volatile memory
US9971685B2 (en) * 2016-04-01 2018-05-15 Intel Corporation Wear leveling based on a swapping operation between sets of physical block addresses of a non-volatile memory
CN106897352B (zh) * 2016-12-29 2020-09-15 北京瑞卓喜投科技发展有限公司 在拓展中进行修改的区块链的生成方法及系统
KR20190052368A (ko) 2017-11-08 2019-05-16 에스케이하이닉스 주식회사 메모리 시스템 및 메모리 시스템의 동작방법
TWI669610B (zh) * 2018-06-13 2019-08-21 慧榮科技股份有限公司 資料儲存裝置以及非揮發式記憶體控制方法
CN108985934B (zh) * 2018-07-06 2021-12-17 深圳源码智能科技有限公司 区块链修改方法和装置
US11323246B2 (en) * 2019-12-11 2022-05-03 The Bank Of New York Mellon Ring chain architecture
US11487654B2 (en) * 2020-03-02 2022-11-01 Silicon Motion, Inc. Method for controlling write buffer based on states of sectors of write buffer and associated all flash array server
CN111782656B (zh) * 2020-06-30 2024-04-12 京东科技信息技术有限公司 数据读写方法及装置

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20030088804A1 (en) 2001-11-08 2003-05-08 M-Systems Flash Disk Pioneers Ltd. Ruggedized block device driver
US20080270680A1 (en) 2005-11-17 2008-10-30 Chee Keng Chang Controller for Non-Volatile Memories and Methods of Operating the Memory Controller

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100260028B1 (ko) 1996-08-13 2000-06-15 윤종용 화일시스템의 정보 복구방법
US7457897B1 (en) * 2004-03-17 2008-11-25 Suoer Talent Electronics, Inc. PCI express-compatible controller and interface for flash memory
US6832373B2 (en) 2000-11-17 2004-12-14 Bitfone Corporation System and method for updating and distributing information
US6883114B2 (en) 2001-11-08 2005-04-19 M-Systems Flash Disk Pioneers Ltd. Block device driver enabling a ruggedized file system
US7181611B2 (en) * 2002-10-28 2007-02-20 Sandisk Corporation Power management block for use in a non-volatile memory system
US7383375B2 (en) 2003-12-30 2008-06-03 Sandisk Corporation Data run programming
US7801930B2 (en) 2004-05-10 2010-09-21 Panasonic Corporation Recording medium, host device, and data processing method
US7366826B2 (en) * 2004-12-16 2008-04-29 Sandisk Corporation Non-volatile memory and method with multi-stream update tracking
US7571275B2 (en) * 2005-08-31 2009-08-04 Hamilton Sundstrand Corporation Flash real-time operating system for small embedded applications

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20030088804A1 (en) 2001-11-08 2003-05-08 M-Systems Flash Disk Pioneers Ltd. Ruggedized block device driver
US20080270680A1 (en) 2005-11-17 2008-10-30 Chee Keng Chang Controller for Non-Volatile Memories and Methods of Operating the Memory Controller

Also Published As

Publication number Publication date
WO2010070427A3 (en) 2010-08-26
KR20110097937A (ko) 2011-08-31
EP2366152A2 (en) 2011-09-21
EP2366152B1 (en) 2016-05-25
TW201027334A (en) 2010-07-16
WO2010070427A2 (en) 2010-06-24
US20100153660A1 (en) 2010-06-17
US8266365B2 (en) 2012-09-11

Similar Documents

Publication Publication Date Title
KR101634412B1 (ko) 내구성 강화 메모리 디바이스
US6883114B2 (en) Block device driver enabling a ruggedized file system
US6668336B2 (en) Ruggedized block device driver
EP1782176B1 (en) Systems, methods, computer readable medium and apparatus for memory management using nvram
US6779045B2 (en) System and apparatus for increasing the number of operations per transmission for a media management system
JP5636034B2 (ja) データ利用についてのマウント時間の調停
CN107735774B (zh) 一种smr感知只追加文件系统
WO2007066720A1 (ja) 不揮発性記憶装置並びにデータ書込み方法及びデータ読み出し方法
US20040078704A1 (en) Transaction-safe FAT file system
GB2297637A (en) Semiconductor disk device
US20110167049A1 (en) File system management techniques for computing environments and systems
EP3446221B1 (en) Adapted block translation table (btt)
CN101796495A (zh) 存储器设备和文件系统
CN109902034A (zh) 快照创建方法、装置、电子设备及机器可读存储介质
JPH03224045A (ja) データ保全方式
CN109690465B (zh) 一种存储设备管理方法及用户终端
JP4026588B2 (ja) ディスクアレイ装置およびディスクキャッシュ管理方法ならびにプログラム
KR100981064B1 (ko) 저널링 파일 시스템을 이용한 소프트웨어 레이드에서의 일관성 유지방법
US8055853B2 (en) Data storage system and data storage program for atomic transactions
JP2000305818A (ja) チップカードのメモリ断片化解消(デフラグ)
Lee et al. Efficient logging of metadata using NVRAM for NAND flash based file system
CN101794254B (zh) Nand flash的数据处理方法
TWI354892B (en) Method of immediate data update with flash memory
KR20060135248A (ko) 하드 디스크 드라이브를 구비하는 휴대용 단말에서 파일시스템 복원 방법 및 시스템

Legal Events

Date Code Title Description
A201 Request for examination
E701 Decision to grant or registration of patent right
GRNT Written decision to grant
FPAY Annual fee payment

Payment date: 20190530

Year of fee payment: 4