KR20140121013A - 비휘발성 메모리를 위한 듀얼 버퍼링 파일 관리 방법, 파일 관리 시스템 및 대용량 저장 장치 - Google Patents

비휘발성 메모리를 위한 듀얼 버퍼링 파일 관리 방법, 파일 관리 시스템 및 대용량 저장 장치 Download PDF

Info

Publication number
KR20140121013A
KR20140121013A KR20130036737A KR20130036737A KR20140121013A KR 20140121013 A KR20140121013 A KR 20140121013A KR 20130036737 A KR20130036737 A KR 20130036737A KR 20130036737 A KR20130036737 A KR 20130036737A KR 20140121013 A KR20140121013 A KR 20140121013A
Authority
KR
South Korea
Prior art keywords
tree structure
block
blocks
data
previous
Prior art date
Application number
KR20130036737A
Other languages
English (en)
Other versions
KR101456104B1 (ko
Inventor
반효경
이은지
장지은
Original Assignee
이화여자대학교 산학협력단
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 이화여자대학교 산학협력단 filed Critical 이화여자대학교 산학협력단
Priority to KR1020130036737A priority Critical patent/KR101456104B1/ko
Publication of KR20140121013A publication Critical patent/KR20140121013A/ko
Application granted granted Critical
Publication of KR101456104B1 publication Critical patent/KR101456104B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0638Organizing or formatting or addressing of data
    • G06F3/064Management of blocks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0655Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
    • G06F3/0656Data buffering arrangements
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0673Single storage device
    • G06F3/0679Non-volatile semiconductor memory device, e.g. flash memory, one time programmable memory [OTP]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/466Transaction processing
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C7/00Arrangements for writing information into, or reading information out from, a digital store
    • G11C7/10Input/output [I/O] data interface arrangements, e.g. I/O data control circuits, I/O data buffers
    • G11C7/1078Data input circuits, e.g. write amplifiers, data input buffers, data input registers, data input level conversion circuits
    • G11C7/1084Data input buffers, e.g. comprising level conversion circuits, circuits for adapting load

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Human Computer Interaction (AREA)
  • Software Systems (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Retry When Errors Occur (AREA)

Abstract

본 발명의 듀얼 버퍼링 파일 관리 시스템은 체크포인트 트랜잭션에 포함된 데이터에 상응하는 원본 블록의 직전 버전 블록들이 비휘발성 스토리지에서 탐색하고, 탐색 결과에 따라 쓰기 대상 블록을 선정하는 쓰기 블록 선정부, 선정된 쓰기 대상 블록에 체크포인트 트랜잭션에 포함된 데이터를 비휘발성 스토리지에 쓰기 연산하는 쓰기 연산 처리부 및 새로 쓰기 연산된 데이터 블록들 및 갱신되지 않은 원본 블록들을 포인팅하도록 구성된 원본 트리 구조의 루트 노드를 호스트 시스템이 포인팅하도록 설정하는 트리 구조 관리부를 포함할 수 있다. 비휘발성 스토리지는 새로 쓰기 연산된 데이터 블록들 및 갱신되지 않은 원본 블록들을 포인팅하는 원본 트리 구조와, 직전 버전 블록들 및 갱신되지 않은 원본 블록들을 포인팅하는 직전 트리 구조를 저장할 수 있다.

Description

비휘발성 메모리를 위한 듀얼 버퍼링 파일 관리 방법, 파일 관리 시스템 및 대용량 저장 장치{METHOD, SYSTEM FOR DUAL BUFFERING FILE MANAGEMENT WITH NON-VOLATILE MEMORY AND MASS STORAGE DEVICE USING THE SAME}
본 발명은 파일 시스템에 관한 것으로, 더욱 상세하게는, 비휘발성 메모리를 위한 파일 시스템에 관한 것이다.
최근 상변화 메모리(PCM) 기술, 자기 저항 메모리(MRAM) 등의 차세대 비휘발성 메모리 기술이 급격하게 발전하면서 곧 상용화될 것으로 예상된다.
차세대 메모리 기술들은 랜덤 액세스, 즉 임의의 주소에 곧바로 접근하여 읽기와 쓰기가 가능한 점에서 현재의 디램 기술을 대체할 수 있고, 비교적 저렴하게 대용량으로 생산될 수 있다는 점에서 현재의 플래시 메모리 기반의 대용량 스토리지 기술도 대체할 수 있어서, 차세대 비휘발성 메모리 기술을 이용한 비휘발성 메모리 소자들을 메인 메모리, 캐시 또는 스토리지로서 최대한 활용하기 위한 파일 관리 기법들도 폭넓게 개발되고 있다.
특히 PCM은 다른 기술에 비해 읽기 속도가 디램에 비견될 정도로 빠르고 저전력이며 집적도가 높아 유력한 기술로 전망되지만, 쓰기 시의 속도가 다소 느리고 전력 소비가 많으며 셀당 1 억번 정도로 쓰기 횟수 제한이 있다.
따라서 PCM을 이용한 메모리 장치의 성능 향상을 위해서는 쓰기 연산을 효율적으로 수행하는 파일 관리 기술이 필요하다.
DCW(Data-Comparison Write) 기법은 이러한 요청에 응답하여 제안된 것으로 갱신될 데이터를 쓰기 전에 기존에 저장된 데이터와 비교하여 변경된 부분만 PCM 기반 메모리 장치에 쓰기 연산하는 기법이다. 실제로 쓰기 연산되어야 하는 셀이 크게 줄어드므로 성능 향상을 기대할 수 있다. 그러나, 기존 데이터와 갱신 데이터 사이의 유사도가 높아야 효과가 있기 때문에 유사도가 높은 위치를 찾기 위해 해밍 거리(Hamming distance)를 연산하여야 하는 등 부가되는 오버헤드가 커서 실제로는 효과적으로 적용하기 어렵다.
또한, 시스템 고장(system failure)이 일어난다면, 그 시점에 기록하고 있던 데이터는 갱신 전의 원본 데이터도 아니고 갱신된 후의 데이터도 아니어서 원자성(atomicity)을 보장할 수 없다.
한편 어느 정도 원자성을 보장하기 위해, COW(Copy-on-wirte) 기법이 제안되었는데, 이는 작은 데이터의 경우에는 원본 위에 덮어 쓰고, 큰 데이터가 수정되면 원본 위에 덮어 쓰는 대신에 빈 공간을 선택하고 원본 중 수정되지 않은 부분을 복사한 다음 복사된 원본에 수정된 부분을 붙여(append) 하나의 수정된 블록을 완성하는 기법이다. 이를 통해 원자성을 어느 정도 보장할 수 있지만, 추가적인 수정 시에 빈 공간을 계속 찾아야 하므로 저장 공간에 여유가 줄어들면 성능이 급격히 저하할 것으로 예측된다.
본 발명이 해결하고자 하는 과제는 별도의 유사도 연산과 같은 오버헤드 없이 데이터 비교 쓰기 기법을 수행하여 쓰기 부하를 줄이면서 동시에 데이터의 일관성을 보장할 수 있는 비휘발성 메모리를 위한 듀얼 버퍼링 파일 관리 방법, 파일 관리 시스템 및 대용량 저장 장치를 제공하는 데에 있다.
본 발명의 일 측면에 따른 듀얼 버퍼링 파일 관리 시스템은,
체크포인트 트랜잭션에 포함된 데이터에 상응하는 원본 블록의 직전 버전 블록들이 비휘발성 스토리지에서 탐색하고, 탐색 결과에 따라 쓰기 대상 블록을 선정하는 쓰기 블록 선정부;
상기 선정된 쓰기 대상 블록에 상기 체크포인트 트랜잭션에 포함된 데이터를 상기 비휘발성 스토리지에 쓰기 연산하는 쓰기 연산 처리부; 및
새로 쓰기 연산된 데이터 블록들 및 갱신되지 않은 원본 블록들을 포인팅하도록 원본 트리 구조를 구성하고, 호스트 시스템이 상기 구성된 원본 트리 구조의 루트 노드를 포인팅하도록 설정하는 트리 구조 관리부를 포함하고,
상기 비휘발성 스토리지는 상기 새로 쓰기 연산된 데이터 블록들 및 갱신되지 않은 원본 블록들을 포인팅하는 원본 트리 구조와, 상기 직전 버전 블록들 및 상기 갱신되지 않은 원본 블록들을 포인팅하는 직전 트리 구조를 포함할 수 있다.
일 실시예에 따라, 상기 쓰기 블록 선정부는,
상기 체크포인트 트랜잭션에 포함된 데이터의 원본 블록에 대해 직전 버전 블록이 보전되어 있으면, 상기 비휘발성 스토리지에서 직전 버전이 저장된 블록들을 쓰기 대상 블록으로 선정하도록 동작할 수 있다.
일 실시예에 따라, 상기 쓰기 블록 선정부는,
상기 직전 트리 구조 및 활성화된 원본 트리 구조를 참조하여, 상기 체크포인트 트랜잭션에 포함된 데이터에 상응하는 데이터 블록에 대한 직전 트리 구조 내의 포인터와 현재 원본 트리 구조의 상응하는 포인터가 서로 다르면, 상기 비휘발성 스토리지에서 상기 직전 트리 구조 내의 포인터에 의해 포인팅되는 직전 버전이 저장된 데이터 블록을 쓰기 대상 블록으로 선정하도록 동작할 수 있다.
일 실시예에 따라, 상기 쓰기 블록 선정부는,
만약 상기 체크포인트 트랜잭션에 포함된 데이터에 상응하는 원본 블록 또는 상기 원본 블록의 직전 버전 블록을 탐색할 수 없는 경우에는, 상기 비휘발성 스토리지에서 빈 블록을 쓰기 대상 블록으로 선정하도록 동작할 수 있다.
일 실시예에 따라, 상기 쓰기 블록 선정부는,
상기 체크포인트 트랜잭션에 포함된 데이터가 신규 파일의 데이터 또는 기존 파일의 부가 데이터인 경우에는 상기 비휘발성 스토리지에서 빈 블록을 쓰기 대상 블록으로 선정하도록 동작할 수 있다.
일 실시예에 따라, 상기 쓰기 블록 선정부는,
상기 체크포인트 트랜잭션에 포함된 데이터가 기존 파일의 갱신 데이터로서 온전한 직전 트리 구조가 존재하지 않는 경우에는, 상기 비휘발성 스토리지에서 빈 블록을 쓰기 대상 블록으로 선정하도록 동작할 수 있다.
일 실시예에 따라, 상기 쓰기 블록 선정부는,
상기 직전 트리 구조 및 원본 트리 구조를 참조하여, 상기 체크포인트 트랜잭션에 포함된 데이터가 기존 파일의 갱신 데이터이고, 상기 직전 트리 구조가 온전히 존재하며, 해당 갱신 데이터에 상응하는 기존 파일의 데이터 블록에 대한 직전 트리 구조 내의 포인터와 현재 원본 트리 구조의 상응하는 포인터가 서로 동일한 경우에는, 상기 비휘발성 스토리지에서 빈 블록을 쓰기 대상 블록으로 선정하도록 동작할 수 있다.
일 실시예에 따라, 상기 쓰기 연산 처리부는,
갱신될 데이터 블록 중에서 변경된 부분만 쓰기 연산하도록 동작할 수 있다.
일 실시예에 따라, 상기 트리 구조 관리부는,
직전 버전 블록들 및 직전 트리 구조가 온전히 보전되어 있는 경우에는, 직전 버전 블록들에 덮어 쓴 갱신 버전 블록들 및 원본 블록들을 포인팅하도록 상기 직전 트리 구조를 갱신하여 새로운 원본 트리 구조를 구성하고, 호스트 시스템이 상기 새로운 원본 트리 구조의 루트 노드를 포인팅하도록 설정하도록 동작할 수 있다.
일 실시예에 따라, 상기 쓰기 블록 선정부는
상기 직전 트리 구조가 저장된 블록들을 해당 데이터 블록의 갱신이 있기 전까지 쓰기 보호하도록 동작할 수 있다.
일 실시예에 따라, 상기 쓰기 블록 선정부는
상기 직전 트리 구조가 저장된 블록들을 빈 블록과 동등하게 또는 빈 블록에 비해 비우선적으로 쓰기 대상 블록으로 선정하도록 동작할 수 있다.
일 실시예에 따라, 상기 트리 구조 관리부는,
상기 직전 버전 블록들의 위치를 상기 비휘발성 스토리지의 내부에, 또는 외부의 저장 공간에 저장하도록 동작할 수 있다.
일 실시예에 따라, 상기 원본 트리 구조는 각각의 파일에 관하여 원본 블록을 포인팅하는 포인터와 상기 원본 블록의 직전 버전 블록을 포인팅하는 포인터를 하나의 쌍으로 포함 수 있다.
일 실시예에 따라, 상기 트리 구조 관리부는,
상기 직전 트리 구조가 온전히 존재하고 상기 체크포인트 트랜잭션에 포함된 데이터가 신규 파일의 데이터인 경우에는, 새로 쓰기 연산된 데이터 블록들을 추가로 포인팅하도록 직전 트리 구조를 갱신하여 새로운 원본 트리 구조를 구성하고, 호스트 시스템이 새로운 원본 트리 구조의 루트 노드를 포인팅하도록 설정하도록 동작할 수 있다.
일 실시예에 따라, 상기 트리 구조 관리부는,
상기 직전 트리 구조가 온전히 존재하고 상기 체크포인트 트랜잭션에 포함된 데이터가 기존 파일의 데이터이지만 직전 버전 블록이 존재하지 않은 경우에는, 새로 쓰기 연산된 갱신 버전 블록들 또는 부가 블록들 및 원본 블록들을 포인팅하도록 직전 트리 구조를 갱신하여 새로운 원본 트리 구조를 구성하고, 호스트 시스템이 새로운 원본 트리 구조의 루트 노드를 포인팅하도록 설정하도록 동작할 수 있다.
일 실시예에 따라, 상기 트리 구조 관리부는,
직전 트리 구조가 온전하게 존재하지 않은 경우에는, 파일을 구성하는 새로 쓰기 연산된 데이터 블록들 및 갱신되지 않은 원본 블록들을 포인팅하도록, 상기 원본 트리 구조의 갱신되지 않는 부분과 상기 새로 쓰기 연산된 데이터 블록들을 위한 새로운 포인터들을 조합하여 새로운 원본 트리 구조를 구성하고, 호스트 시스템이 새로운 원본 트리 구조의 루트 노드를 포인팅하도록 설정하도록 동작할 수 있다.
일 실시예에 따라, 상기 듀얼 버퍼링 파일 관리 시스템은
호스트 시스템의 버퍼 캐시 내에서 쓰기 연산의 대상이 되는 더티 캐시들의 컨텐츠들을 비휘발성 스토리지에 기록하기 위한 상기 체크포인트 트랜잭션을 생성하는 체크포인트 트랜잭션 생성부를 더 포함할 수 있다.
일 실시예에 따라, 상기 듀얼 버퍼링 파일 관리 시스템은
호스트 시스템의 쓰기 연산의 대상이 되는 메모리 블록들의 컨텐츠들을 버퍼 캐시를 거치지 않고 비휘발성 스토리지에 기록하기 위한 상기 체크포인트 트랜잭션을 생성하는 체크포인트 트랜잭션 생성부를 더 포함할 수 있다.
본 발명의 다른 측면에 따른 비휘발성 스토리지 장치는
체크포인트 트랜잭션에 포함된 데이터에 상응하는 원본 블록의 직전 버전 블록들을 비휘발성 스토리지에서 탐색하고, 탐색 결과에 따라 쓰기 대상 블록을 선정하는 쓰기 블록 선정부;
상기 선정된 쓰기 대상 블록에 상기 체크포인트 트랜잭션에 포함된 데이터를 상기 비휘발성 스토리지에 쓰기 연산하는 쓰기 연산 처리부;
새로 쓰기 연산된 데이터 블록들 및 갱신되지 않은 원본 블록들을 포인팅하도록 원본 트리 구조를 구성하고, 호스트 시스템이 상기 원본 트리 구조의 루트 노드를 포인팅하도록 설정하는 트리 구조 관리부; 및
상기 새로 쓰기 연산된 데이터 블록들 및 갱신되지 않은 원본 블록들을 포인팅하는 원본 트리 구조와, 상기 직전 버전 블록들 및 상기 갱신되지 않은 원본 블록들을 포인팅하는 직전 트리 구조를 포함하는 비휘발성 스토리지를 포함할 수 있다.
본 발명의 또 다른 측면에 따른 비휘발성 스토리지의 듀얼 버퍼링 파일 관리 방법은,
(a) 체크포인트 트랜잭션에 포함된 데이터에 상응하는 원본 블록의 직전 버전 블록들이 비휘발성 스토리지에서 탐색하고, 탐색 결과에 따라 쓰기 대상 블록을 선정하는 단계;
(b) 상기 선정된 쓰기 대상 블록에 상기 체크포인트 트랜잭션에 포함된 데이터를 상기 비휘발성 스토리지에 쓰기 연산하는 단계; 및
(c) 새로 쓰기 연산된 데이터 블록들 및 갱신되지 않은 원본 블록들을 포인팅하도록 구성한 원본 트리 구조의 루트 노드를 호스트 시스템이 포인팅하도록 설정하는 단계를 포함하고,
상기 비휘발성 스토리지는 상기 새로 쓰기 연산된 데이터 블록들 및 갱신되지 않은 원본 블록들을 포인팅하는 원본 트리 구조와, 상기 직전 버전 블록들 및 상기 갱신되지 않은 원본 블록들을 포인팅하는 직전 트리 구조를 포함할 수 있다.
일 실시예에 따라, 상기 (a) 단계는,
상기 체크포인트 트랜잭션에 포함된 데이터의 원본 블록에 대해 직전 버전 블록이 보전되어 있으면, 상기 비휘발성 스토리지에서 직전 버전이 저장된 블록들을 쓰기 대상 블록으로 선정하는 단계를 포함할 수 있다.
일 실시예에 따라, 상기 (a) 단계는,
상기 직전 트리 구조 및 활성화된 원본 트리 구조를 참조하여, 상기 체크포인트 트랜잭션에 포함된 데이터에 상응하는 데이터 블록에 대한 직전 트리 구조 내의 포인터와 현재 원본 트리 구조의 상응하는 포인터가 서로 다르면, 상기 비휘발성 스토리지에서 상기 직전 트리 구조 내의 포인터에 의해 포인팅되는 직전 버전이 저장된 데이터 블록을 쓰기 대상 블록으로 선정하는 단계를 포함할 수 있다.
일 실시예에 따라, 상기 (a) 단계는,
만약 상기 체크포인트 트랜잭션에 포함된 데이터에 상응하는 원본 블록 또는 상기 원본 블록의 직전 버전 블록을 탐색할 수 없는 경우에는, 상기 비휘발성 스토리지에서 빈 블록을 쓰기 대상 블록으로 선정하는 단계를 포함할 수 있다.
일 실시예에 따라, 상기 (a) 단계는,
상기 체크포인트 트랜잭션에 포함된 데이터가 신규 파일의 데이터 또는 기존 파일의 부가 데이터인 경우에는 상기 비휘발성 스토리지에서 빈 블록을 쓰기 대상 블록으로 선정하는 단계를 포함할 수 있다.
일 실시예에 따라, 상기 (a) 단계는,
상기 체크포인트 트랜잭션에 포함된 데이터가 기존 파일의 갱신 데이터로서 온전한 직전 트리 구조가 존재하지 않는 경우에는, 상기 비휘발성 스토리지에서 빈 블록을 쓰기 대상 블록으로 선정하는 단계를 포함할 수 있다.
일 실시예에 따라, 상기 (a) 단계는,
상기 직전 트리 구조 및 원본 트리 구조를 참조하여, 상기 체크포인트 트랜잭션에 포함된 데이터가 기존 파일의 갱신 데이터이고, 상기 직전 트리 구조가 온전히 존재하며, 해당 갱신 데이터에 상응하는 기존 파일의 데이터 블록에 대한 직전 트리 구조 내의 포인터와 현재 원본 트리 구조의 상응하는 포인터가 서로 동일한 경우에는, 상기 비휘발성 스토리지에서 빈 블록을 쓰기 대상 블록으로 선정하는 단계를 포함할 수 있다.
일 실시예에 따라, 상기 (b) 단계는,
만약 빈 블록이 쓰기 대상 블록으로 선정된 경우에는 데이터 블록 전체를 쓰기 연산하고, 만약 직전 버전 블록이 쓰기 대상 블록으로 선정된 경우에는, 데이터 비교 쓰기(Data-Comparison Write, DCW) 기법에 따라, 갱신될 데이터 블록 중에서 변경된 부분만 쓰기 연산하는 단계를 포함할 수 있다.
일 실시예에 따라, 상기 (c) 단계는,
직전 버전 블록들 및 직전 트리 구조가 온전히 보전되어 있는 경우에는,
직전 버전 블록들에 덮어 쓴 갱신 버전 블록들 및 원본 블록들을 포인팅하도록 상기 직전 트리 구조를 갱신하여 새로운 원본 트리 구조를 구성하고,
호스트 시스템이 상기 새로운 원본 트리 구조의 루트 노드를 포인팅하도록 설정하는 단계를 포함할 수 있다.
일 실시예에 따라, 상기 직전 트리 구조가 저장된 블록들은 해당 데이터 블록의 갱신이 있기 전까지 쓰기 보호될 수 있다.
일 실시예에 따라, 상기 직전 트리 구조가 저장된 블록들은 빈 블록과 동등하게 또는 빈 블록에 비해 비우선적으로 쓰기 대상 블록으로 선정될 수 있다.
일 실시예에 따라, 상기 직전 버전 블록들의 위치는 상기 비휘발성 스토리지의 내부에, 또는 외부의 저장 공간에 저장되어 보전될 수 있다.
일 실시예에 따라, 상기 원본 트리 구조는 각각의 파일에 관하여 원본 블록을 포인팅하는 포인터와 상기 원본 블록의 직전 버전 블록을 포인팅하는 포인터를 하나의 쌍으로 포함할 수 있다.
일 실시예에 따라, 상기 (c) 단계는,
상기 직전 트리 구조가 온전히 존재하고 상기 체크포인트 트랜잭션에 포함된 데이터가 신규 파일의 데이터인 경우에는, 새로 쓰기 연산된 데이터 블록들을 추가로 포인팅하도록 직전 트리 구조를 갱신하여 새로운 원본 트리 구조를 구성하고, 호스트 시스템이 새로운 원본 트리 구조의 루트 노드를 포인팅하도록 설정하는 단계를 포함할 수 있다.
일 실시예에 따라, 상기 (c) 단계는,
상기 직전 트리 구조가 온전히 존재하고 상기 체크포인트 트랜잭션에 포함된 데이터가 기존 파일의 데이터이지만 직전 버전 블록이 존재하지 않은 경우에는, 새로 쓰기 연산된 갱신 버전 블록들 또는 부가 블록들 및 원본 블록들을 포인팅하도록 직전 트리 구조를 갱신하여 새로운 원본 트리 구조를 구성하고, 호스트 시스템이 새로운 원본 트리 구조의 루트 노드를 포인팅하도록 설정하는 단계를 포함할 수 있다.
일 실시예에 따라, 상기 (c) 단계는,
직전 트리 구조가 온전하게 존재하지 않은 경우에는, 새로 쓰기 연산된 데이터 블록들 및 갱신되지 않은 원본 블록들을 포인팅하도록, 상기 원본 트리 구조의 갱신되지 않는 부분과 상기 새로 쓰기 연산된 데이터 블록들을 위한 새로운 포인터들을 조합하여 새로운 원본 트리 구조를 구성하고, 호스트 시스템이 새로운 원본 트리 구조의 루트 노드를 포인팅하도록 설정하는 단계를 포함할 수 있다.
일 실시예에 따라, 상기 비휘발성 스토리지의 듀얼 버퍼링 파일 관리 방법은, 호스트 시스템의 버퍼 캐시에서 쓰기 연산의 대상이 되는 더티 캐시들의 컨텐츠들을 비휘발성 스토리지에 기록하기 위한 상기 체크포인트 트랜잭션을 생성하는 단계를 더 포함할 수 있다.
일 실시예에 따라, 상기 비휘발성 스토리지의 듀얼 버퍼링 파일 관리 방법은, 호스트 시스템의 쓰기 연산의 대상이 되는 메모리 블록들의 컨텐츠들을 버퍼 캐시를 거치지 않고 비휘발성 스토리지에 기록하기 위한 상기 체크포인트 트랜잭션을 생성하는 단계를 더 포함할 수 있다.
본 발명의 비휘발성 메모리를 위한 듀얼 버퍼링 파일 관리 방법, 파일 관리 시스템 및 대용량 저장 장치에 따르면, 매번 수정 기록시 전전 버전이 기록된 블록에 저장하므로, 종래 기술과 같이 유사한 블록을 찾기 위해 필요한 해밍 거리 연산과 같은 오버헤드가 없고, 평균적으로 높은 유사도를 가지는 블록에 데이터를 저장할 수 있다.
본 발명의 비휘발성 메모리를 위한 듀얼 버퍼링 파일 관리 방법, 파일 관리 시스템 및 대용량 저장 장치에 따르면, 매번 기록 때마다 직전 버전은 유지되므로 기록 시점에 시스템 고장이 일어나도 데이터의 일관성을 보장할 수 있다.
본 발명의 비휘발성 메모리를 위한 듀얼 버퍼링 파일 관리 방법, 파일 관리 시스템 및 대용량 저장 장치에 따르면, 수정이 잦더라도 수정이 되는 블록들의 복사본을 유지할 공간만을 요구하므로 빈 공간이 줄어들 때 성능이 급격히 저하되는 현상을 방지할 수 있다.
도 1은 본 발명의 일 실시예에 따른 듀얼 버퍼링 파일 관리 시스템을 예시한 개념도이다.
도 2 내지 도 4는 본 발명의 일 실시예에 따른 듀얼 버퍼링 파일 관리 시스템에서 블록들이 갱신될 때 파일 트리 구조의 변화를 예시한 개념도들이다.
도 5는 본 발명의 일 실시예에 따른 듀얼 버퍼링 대용량 스토리지 장치를 예시한 블록도이다.
도 6은 본 발명의 일 실시예에 따른 듀얼 버퍼링 파일 관리 방법을 예시한 순서도이다.
본문에 개시되어 있는 본 발명의 실시예들에 대해서, 특정한 구조적 내지 기능적 설명들은 단지 본 발명의 실시예를 설명하기 위한 목적으로 예시된 것으로, 본 발명의 실시예들은 다양한 형태로 실시될 수 있으며 본문에 설명된 실시예들에 한정되는 것으로 해석되어서는 아니 된다.
이하, 첨부한 도면들을 참조하여, 본 발명의 바람직한 실시예를 보다 상세하게 설명하고자 한다. 도면상의 동일한 구성요소에 대해서는 동일한 참조부호를 사용하고 동일한 구성요소에 대해서 중복된 설명은 생략한다.
본 발명은 중소기업청에서 주관하고 한국산학연협회에서 관리하는 산학연 공동기술개발 사업의 "NVRAM 기반 고신뢰성 클라우드 스토리지 솔루션 개발" 연구과제(정부과제고유번호 1425074642호)와, 지식경제부에서 주관하고 한국산업기술평가관리원에서 관리하는 SW컴퓨팅 산업 원천기술개발 사업의 "차세대 메모리 기반의 스마트 디바이스용 임베디드 시스템 소프트웨어 원천기술 개발" 연구과제(정부과제고유번호 1415122825호)의 지원으로 수행된 연구 결과를 토대로 한다.
본 발명의 명세서 전체에 걸쳐, 달리 명시되지 않은 이상, 데이터 블록, 아이노드 블록, 아이노드, 포인터 및 파일 트리 구조에 관하여, 최신의 갱신 데이터의 체크포인트 연산이 실행되기 직전의 각각의 버전들을 원본, 또는 현재 원본이라고 하고, 현재 원본의 과거의 버전들을 직전 버전이라고 하며, 현재 버전의 갱신될 버전들을 갱신 버전 또는 새로운 원본이라고 부른다.
에를 들어, 현재 시점의 파일 트리 구조는 원본 트리 구조이며, 현재의 원본 트리 구조에 의해 대체된 직전의 파일 트리 구조는 직전 트리 구조이며, 현재 원본에서 체크포인트 연산에 의해 갱신되는 버전은 갱신 트리 구조, 갱신 파일 트리 구조 또는 새로운 원본 트리 구조라고 불릴 수 있다.
도 1은 본 발명의 일 실시예에 따른 듀얼 버퍼링 파일 관리 시스템을 예시한 개념도이다.
본 발명의 듀얼 파일링 파일 관리 시스템(10)을 설명하기에 앞서, 파일 시스템에 관하여 간단히 이해할 필요가 있다.
최신의 수많은 파일 시스템들은 원자성(atomicity)의 지원을 통해, 무결성, 일관성을 달성하는 것이 특징이다. 원자성은 어떤 일련의 세부 작업들로 구성된 트랜잭션이 완전히 성공한 경우에만 호스트 시스템에 반영되고, 그렇지 않으면 실패한 트랜잭션으로 규정되어 버려지며 직전의 호스트 시스템 상태에는 영향을 미치지 않음을 의미한다. 예를 들어, 쓰기 연산 중에 호스트 시스템이 오류를 일으킬 경우에, 만약 원본 위에 일부만 덮어쓰기된 블록은 원본도 아니고 그렇다고 갱신본도 아닌 아티팩트(artifact)가 되며, 롤백(rollback)도 불가능하므로, 이러한 상황은 허용되어서는 안된다. 따라서 원본을 두고 새로 빈 공간에 쓰기 연산이 이루어지는 것이 보통이다.
이러한 파일 시스템에서는 원자성을 염두에 두고 저수준의 쓰기 연산들이 하나의 트랜잭션으로서 처리된다. 컴퓨터 공학 분야에서 트랜잭션은 데이터의 전송을 시작하는 시점부터 무결성을 보장하면서 완료하기까지 수행되는 일련의 동작들로 된 작업 단위를 가리키는 용어이다.
통상적으로, 호스트 시스템에서 쓰기 명령이 발생할 때마다 스토리지에 쓰기 연산을 하는 대신에, 실제로는 버퍼 캐시, 메인 메모리 등에 임시적으로 기록하다가, 누적된 변경을 한꺼번에 스토리지에 반영하는 경우가 많은데, 이러한 작업을 체크포인트(checkpoint)라고 한다. 예를 들어 버퍼 캐시를 이용하는 경우 소정 시간의 경과라든가 갱신 횟수와 같은 소정 조건이 만족되면, 버퍼 캐시 내에서 더티 캐시로 표시되는 블록들의 컨텐츠 즉 데이터들은 한꺼번에 스토리지에 반영되되, 원자성을 보장할 수 있도록 하나의 트랜잭션을 구성한다. 체크포인트를 위한 트랜잭션을 체크포인트 트랜잭션이라고 부른다.
만약 체크포인트 트랜잭션의 수행 중에 시스템 고장(운영체제의 치명적 오류나 전원 차단 등)이 일어나면, 해당 체크포인트 트랜잭션은 실패한 것으로써 무시되어야 하고, 체크포인트 전의 상태로 롤백되어야 하며, 따라서 스토리지는 체크포인트 트랜잭션이 성공적으로 완료되기 전까지는 시스템 고장 전, 즉 체크포인트 전의 데이터를 완전 무결하게 유지하고 있어야 한다.
만약 체크포인트 트랜잭션을 구성하는 쓰기 연산들을 포함하는 일련의 동작들이 성공적으로 완료되면, 이는 체크포인트 트랜잭션에 포함된 컨텐츠들이 스토리지에 성공적으로 반영되었다는 것이다.
통상적으로 체크포인트 연산에 의해 갱신당한 이전 버전의 데이터는 이제 쓸모가 없는(obsolete) 데이터가 되므로, 종래 기술들에서는, 그 데이터를 저장하던 블록은 비워지거나 또는 자유롭게 덮어쓰기 될 수 있다고 간주되었다.
한편, 유닉스에 기반하는 수많은 파일 시스템은 아이노드(inode 또는 index node)라고 불리는 일종의 트리 구조의 데이터를 이용하여 파일, 디렉토리, 장치 노드, 소켓, 파이프 등을 관리한다. 각각의 파티션마다 소정의 위치 및 소정 크기의 지정된 블록 내에 각각의 파일, 디렉토리, 장치 노드, 소켓, 파이프 등을 위한 아이노드들의 리스트가 저장되고 또한 아이노드를 위한 저장 공간이 예비되어 파일의 생성과 함께 해당 파일의 아이노드도 생성되고 관리된다.
이러한 아이노드들이 저장된 아이노드 블록은 루트 노드 포인터에 의해 호스트 시스템으로부터 포인팅된다. 즉, 호스트 시스템은 등록된 루트 노드 포인터에 의해 아이노드 블록의 위치를 인식한다.
특히 파일을 관리하기 위한 각각의 아이노드는 파일에 관한 메타 데이터들, 예를 들어, 소유권, 접근 방식, 파일 타입, 크기, 아이노드 번호, 어드레스 포인터들을 저장한다. 파일의 이름은 아이노드가 아닌 디렉토리 파일에서 관리된다.
호스트 시스템은 사용자가 원하는 파일의 이름을 디렉토리 파일에서 찾고, 디렉토리 파일 내에서 파일의 이름과 연결된 아이노드 번호를 가지는 아이노드를 아이노드 블록 내에서 찾는다.
아이노드 블록에 저장된 각각의 아이노드는 파일 데이터가 실제로 저장된 데이터 블록들을 가리키는 포인터들을 포함한다.
파일 시스템마다, 디스크 크기마다 다를 수 있지만, 하나의 아이노드가, 메타 데이터들에 더불어, 파일의 위치를 지정하기 위한 용도로 13 개의 포인터들을 포함할 수 있다고 가정하면, 그 중 10 개의 포인터들은 그 파일의 각각의 일부들이 저장된 데이터 블록들의 위치를 직접 가리킬 수 있는 직접 포인터이고, 한 포인터는 해당 파일의 초과되는 부분들이 저장된 데이터 블록들의 위치를 가리키는 추가적인 포인터들만을 저장하는 포인터 블록의 위치를 가리키는 단순 간접 포인터(singly indirect pointer)이며, 다음의 한 포인터는 직접 포인터들을 저장하는 포인터 블록들의 위치를 가리키는 간접 포인터들을 저장하는 포인터 블록의 위치를 가리키는 이중 간접 포인터(doulby indirect pointer)이고, 마지막 한 포인터는 삼중 간접 포인터(triply indirect pointer)이다.
만약 하나의 포인터로 1 KB의 데이터 블록을 포인팅할 수 있다고 하면, 아이노드가 10 개의 직접 포인터로써 직접 가리킬 수 있는 파일의 최대 크기는 10 KB이다. 파일 크기가 10 KB를 초과하면 초과된 데이터가 저장된 데이터 블록에 대한 포인터들은 단순 간접 포인터가 가리키는 포인터 블록에 저장된다. 각각의 포인터 블록이 256 개의 포인터들을 저장할 수 있다고 하면, 단순 간접 포인터로 가리킬 수 있는 파일의 최대 크기는 256 KB이다. 256 KB + 10 KB를 초과하는 데이터가 저장된 데이터 블록들의 포인터들은 이제 이중 간접 포인터가 가리키는 포인터 블록에 저장되는 최대 256 개의 포인터들이 가리키는 포인터 블록들의 각각에 저장된다. 이중 간접 포인터로 가리킬 수 있는 파일의 최대 크기는 16 MB + 256 KB + 10 KB이다. 이를 초과하는 데이터가 저장된 블록들의 포인터들은 삼중 간접 포인터가 가리키는 포인터 블록에 저장된 최대 256 개의 포인터들이 가리키는 256 개의 포인터 블록들의 각각에 저장된 최대 256 개의 포인터들이 다시 가리키는 포인터 블록들에 저장된다. 이와 같은 예시에서 삼중 간접 포인터까지 모두 동원하여 가리킬 수 있는 파일의 최대 크기는 16 GB + 16 MB + 256 KB + 10 KB가 된다.
만약 아이노드 내에 포인터들의 수를 늘리거나, 포인터 블록의 크기를 늘리면 파일의 최대 크기를 적절히 증가시킬 수 있다.
본 발명에서는 호스트 시스템에서 인식하는 최상위의 루트 노드부터 각 파일마다의 아이노드들의 간접 포인터들까지 포함하는 전체 구조를 트리 구조 또는 파일 트리 구조라고 칭한다.
이러한 파일 트리 구조에서, 어떤 파일에 데이터가 추가되거나 제거될 때에는 포인터들도 그에 따라 추가 또는 삭제되고, 만약 특정 데이터가 저장되는 위치가 변경될 때에는 포인터들도 변한다.
이렇듯 데이터의 변경 후에는 파일 트리 구조 내의 아이노드 및 포인터들이 적절히 수정되어야 하는데, 이러한 아이노드 수정 작업 중에도, 호스트 시스템의 고장에 대비하여 원자성이 보장되어야 한다.
다시 말해, 파일 트리 구조에서 원자성을 보장하기 위해서는 데이터가 저장되는 블록 뿐 아니라 아이노드 블록, 간접 포인터 블록들 내지 루트 노드 포인터도 체크포인트 트랜잭션 시에 적절하게 관리되어야 한다.
이를 위해, 본 발명의 듀얼 버퍼링 파일 관리 시스템(10)은 체크포인트 트랜잭션 생성부(11), 쓰기 블록 선정부(12), 쓰기 연산 처리부(13) 및 트리 구조 관리부(14)를 포함할 수 있고, 비휘발성 스토리지(20)의 블록들에 대하여 쓰기 연산 및 읽기 연산을 관리할 수 있다.
비휘발성 스토리지(20)는, 아이노드 기반의 활성화된 원본 트리 구조(21)에 의해 포인팅되는 예시적인 파일(26)이 존재한다고 할 경우에, 호스트 시스템에 의해 활성화된 파일 시스템으로 인식되어 있는 원본 트리 구조(21), 파일(26)을 구성하는 데이터 블록들(261, 262, 263, 264) 및 추가로 데이터를 쓸 수 있도록 예비된 빈 블록(271)을 가진다.
원본 트리 구조(21)는 원본 루트 노드(210), 권한, 타입, 크기, 아이노드 번호 등의 메타 데이터와 직접 포인터(213), 단순 간접 포인터(214), 이중 간접 포인터(215) 및 삼중 간접 포인터(216)로 각각 구성되는 아이노드들(212)을 포함하는 원본 아이노드 블록(211)과, 아이노드(212)의 단순 간접 포인터(214), 이중 간접 포인터(215) 및 삼중 간접 포인터(216)를 이용하여 각각 포인팅되는 단순 간접 포인터 블록(23), 이중 간접 포인터 블록들(24, 241) 및 삼중 간접 포인터 블록들(25, 251, 252)을 포함한다.
파일(26)을 구성하는 데이터 블록(261)은 직접 포인터(213)에 의해 직접 포인팅되며, 데이터 블록(262)은 단순 간접 포인터(214)와 단순 간접 포인터 블록(23)의 간접 포인터(231)에 의해 포인팅되며, 데이터 블록(263)은 이중 간접 포인터(215)와 이중 간접 포인터 블록들(24, 241) 및 간접 포인터(242)에 의해 포인팅되고, 데이터 블록(264)은 삼중 간접 포인터(216)와 삼중 간접 포인터 블록들(25, 251, 252) 및 간접 포인터(253)에 의해 포인팅된다.
한편, 비휘발성 스토리지(20)는 아이노드 기반의 비활성화된 파일 시스템인 직전 트리 구조(22)도 포함할 수 있다. 직전 트리 구조(22)는 직전 루트 노드(220), 예시적인 파일(26)의 직전 버전을 구성하는 데이터 블록들(261, 262, 263)을 포인팅하는 아이노드 블록(221)과 아이노드(222), 그리고 아이노드(222)가 이용하던 포인터들이 저장되었던 포인터 블록들(223)을 포함한다.
다시 말해, 원본 트리 구조(21)는 새로 쓰기 연산된 데이터 블록들 및 갱신되지 않은 원본 블록들로 구성되는 최신 버전의 파일(26)을 포인팅하며, 직전 트리 구조(22)는 직전 버전 블록들 및 갱신되기 전의 원본 블록들로 구성되는 직전 버전의 파일을 포인팅한다.
직전 트리 구조(22)와 원본 트리 구조(21)는 서로 다른 위치에서 각각의 최상부 엔트리인 루트 노드(220, 210)를 각각 가지며, 아이노드 블록들(221, 211)도 각각 가진다. 하지만, 갱신되는 데이터 블록들을 제외하면 각각의 하위 포인터 블록들의 상당 부분은 갱신되지 않은 원본 블록들을 함께 포인팅할 수 있기 때문에, 직전 트리 구조(22)와 원본 트리 구조(21)의 하위 엔트리들은 부분적으로 중첩될 수 있다. 다시 말해, 갱신되지 않은 원본 블록들을 포인팅하는 포인터들은 원본 트리 구조(21)와 직전 트리 구조(22)가 공유할 수 있다.
체크포인트 트랜잭션 생성부(11)는 시간의 경과 또는 버퍼 캐시(100) 내에 신규 생성되거나 부가(append)되거나 또는 갱신(update)된 더티 캐시(dirty cache) 블록들의 갯수와 같은 소정의 조건이 만족하면, 버퍼 캐시(100) 내에서 쓰기 연산의 대상이 되는 더티 캐시들의 컨텐츠들을 스토리지(20)에 기록하기 위한 체크포인트 트랜잭션을 생성한다.
체크포인트 트랜잭션 생성부(11)는, 일 실시예에서는, 비휘발성 스토리지(20)의 파일 시스템을 관리하기 위한 듀얼 버퍼링 파일 관리 시스템(10)의 일부일 수 있지만, 다른 실시예에서는, 버퍼 캐시(100)를 관리하는 버퍼 캐시 관리부(101)의 일부일 수도 있다.
또 다른 실시예에서, 체크포인트 트랜잭션 생성부(11)는 스토리지(20)로 쓰기 연산되기 위한 체크포인트 트랜잭션을 메인 메모리로부터 직접 생성하거나, 또는 스토리지(20)가 별도로 가지는 쓰기 버퍼로부터 생성할 수도 있다.
이 경우에는, 체크포인트 트랜잭션 생성부(11)는 시간의 경과와 같은 소정의 조건이 만족하면, 쓰기 연산의 대상이 되는 메모리 블록들의 컨텐츠들을 버퍼 캐시를 거치지 않고 직접 스토리지(20)에 기록하기 위한 체크포인트 트랜잭션을 생성한다.
이제, 스토리지(20) 내에 체크포인트 트랜잭션에 포함된 데이터가 저장될 블록이 선정되어야 한다.
이를 위해 쓰기 블록 선정부(12)는, 체크포인트 트랜잭션에 포함된 데이터의 원본 블록의 직전 버전이 저장된 직전 버전 블록들을 비휘발성 스토리지(20)에서 탐색하고, 탐색 결과에 따라 쓰기 대상 블록을 선정한다.
다만, 쓰기 블록 선정부(12)는, 만약 체크포인트 트랜잭션에 포함된 데이터에 상응하는 원본 블록 또는 원본 블록의 직전 버전 블록을 탐색할 수 없는 경우, 다시 말해 만약 신규 파일이거나, 기존 파일에 부가(append)되거나 기존 파일의 갱신되는 부분이 처음으로 갱신되는 경우로서 원본 블록의 직전 버전 블록이 존재하지 않거나, 참조할 비활성화된 직전 트리 구조(22)가 없거나 손상된 경우에는, 비휘발성 스토리지(20)에서 빈 블록을 쓰기 대상 블록으로 선정할 수 있다.
구체적으로, 쓰기 블록 선정부(12)는 체크포인트 트랜잭션에 포함된 데이터가 신규 파일의 데이터 또는 기존 파일의 부가 데이터인 경우에는 비휘발성 스토리지(20)에서 빈 블록을 쓰기 대상 블록으로 선정한다.
또한 쓰기 블록 선정부(12)는 체크포인트 트랜잭션에 포함된 데이터가 기존 파일의 갱신 데이터이지만 직전 트리 구조가 존재하지 않은 경우에는, 비휘발성 스토리지(20)에서 빈 블록을 쓰기 대상 블록으로 선정한다.
또한, 쓰기 블록 선정부(12)는 직전 트리 구조(22) 및 원본 트리 구조(21)를 참조하여, 체크포인트 트랜잭션에 포함된 데이터가 기존 파일의 갱신 데이터이고, 직전 트리 구조(22)가 온전히 존재하며 해당 갱신 데이터에 상응하는 기존 파일의 데이터 블록에 대한 직전 트리 구조(22) 내의 포인터와 현재 원본 트리 구조(21)의 상응하는 포인터가 서로 동일한 경우에는, 직전 버전 블록이 보전된 적이 없는 최초 갱신 데이터로 판정하고, 비휘발성 스토리지(20)에서 빈 블록을 쓰기 대상 블록으로 선정한다.
반면에, 체크포인트 트랜잭션에 포함된 데이터의 원본 블록에 대해 직전 버전 블록이 보전되어 있는 경우에는, 쓰기 블록 선정부(12)는 비휘발성 스토리지(20)에서 직전 버전 블록들을 쓰기 대상 블록으로 선정한다.
좀더 구체적으로, 쓰기 블록 선정부(12)는 직전 트리 구조(22) 및 활성화된 원본 트리 구조(21)를 참조하여, 직전 트리 구조(22)가 온전히 존재하고 해당 갱신 데이터에 상응하는 기존 파일의 데이터 블록에 대한 직전 트리 구조(22) 내의 포인터와 현재 원본 트리 구조(21)의 상응하는 포인터가 서로 다르면, 직전 버전 블록이 보전되어 있는 경우로 판정하고, 비휘발성 스토리지(20)에서 직전 트리 구조(22) 내의 포인터에 의해 포인팅되는 직전 버전 블록을 쓰기 대상 블록으로 선정한다.
한편, 만약 체크포인트 트랜잭션에 포함된 데이터가 갱신 데이터가 아닌 이미 존재하는 파일에 부가(append)되는 데이터라면, 기존 파일에 관한 데이터이기는 하지만 갱신할 원본이라고 볼 대상이 없기 때문에, 쓰기 블록 선정부(12)는, 신규 파일의 경우와 유사하게, 비휘발성 스토리지(20)에서 빈 블록을 쓰기 대상 블록으로 선정한다.
쓰기 연산 처리부(13)는 비휘발성 스토리지(20)에서 선정된 쓰기 대상 블록에 체크포인트 트랜잭션에 포함된 데이터를 쓰기 연산한다.
구체적으로, 쓰기 연산 처리부(13)는 데이터 비교 쓰기(Data-Comparison Write, DCW) 기법에 따라, 쓰기 연산되는 데이터 블록 내에서도 실제로 변경이 있는 부분만 쓰기 연산할 수 있다.
실시예에 따라, 만약 빈 블록이 쓰기 대상 블록으로 선정된 경우에는 DCW 기법 대신에 데이터 블록 전체를 쓰기 연산하고, 만약 직전 버전 블록이 쓰기 대상 블록으로 선정된 경우에는, DCW 기법에 따라 변경이 있는 부분만 쓰기 연산할 수 있다.
다시 말해, 어떤 기존 파일에 관하여 활성화된 원본 블록과 비활성화된 직전 버전 블록이 유지되고 있는 중에, 원본 블록에 대해 갱신되는 데이터는 직전 버전 블록 위에 덮어쓰기된다.
이러한 쓰기 연산에 의해, 직전 버전 블록 위에 쓰기 연산된 블록이 이제 새로운 활성화된 원본 블록으로, 쓰기 연산 전까지의 원본 블록은 이제 비활성화된 직전 버전 블록으로 각각 설정될 준비가 된다.
실시예에 따라, 직전 버전 블록은 해당 데이터 블록의 갱신이 있기 전까지는 다른 파일들의 데이터가 덮어쓰기 되지 않도록 쓰기 보호 및 유지될 수 있는데, 이 경우 추후의 갱신 시에 효율적으로 선정될 수 있도록 관리될 수 있는 반면에, 보호된 직전 버전 블록들이 저장 공간을 과도하게 차지할 수도 있다.
다른 실시예에서는, 직전 버전 블록은, 다른 파일들의 데이터를 위한 쓰기 연산 대상 블록의 선정 시에, 쓰기 보호되지 않고 빈 블록과 마찬가지로 취급되거나, 또는 쓰기 보호되지는 않지만 빈 블록보다는 상대적으로 비우선적으로 데이터 쓰기 연산의 대상 블록에 선정될 수 있는데, 이 경우에는 저장 공간은 효율적으로 사용될 수 있지만 직전 버전의 갱신 효율이 다소 저하될 수 있다.
한편, 데이터 블록들의 쓰기 연산이 진행 중에 호스트 시스템이 멈추거나 고장을 일으키는 경우에 원자성의 보장에 관하여 설명하면, 예를 들어 완전히 신규한 파일 데이터의 쓰기 연산이 완료되기 전에 호스트 시스템이 실패하더라도, 체크포인트 트랜잭션이 일어나기 전에 해당 파일이 애초에 존재하지 않았던 상태의 호스트 시스템으로 복구될 수 있다.
또한 예를 들어 기존 파일에 대한 부가 데이터 또는 갱신 데이터를 빈 블록에 쓰기 연산하기가 완료되기 전에 호스트 시스템이 실패하더라도, 체크포인트 트랜잭션이 일어나기 직전의 원본 블록과 원본 트리 구조는 전혀 영향을 받지 않고 그대로 유지되므로 체크포인트 트랜잭션 이전의 호스트 시스템으로 복구될 수 있다.
체크포인트 트랜잭션에 포함된 데이터의 쓰기 연산이 성공적으로 완료된 후에는, 최신의 파일 시스템을 구성하는 원본 블록들 및 갱신 버전 블록들을 각각 가리키는 포인터들을 적절히 생성, 삭제 내지 변경하여 파일 트리 구조를 적절하게 수정하고, 변경된 파일 트리 구조를 호스트 시스템에 연결하여야 한다.
이를 위해, 트리 구조 관리부(14)는 직전 트리 구조가 온전히 존재하는 경우에는, 새로 쓰기 연산된 데이터 블록들 및 갱신되지 않은 원본 블록들을 포인팅하도록 직전 트리 구조를 갱신하여 새로운 원본 트리 구조를 구성하고, 호스트 시스템이 새로운 원본 트리 구조의 루트 노드를 포인팅하도록 설정한다.
이러한 새로운 원본 트리 구조의 루트 노드를 호스트 시스템에 연결함으로써, 갱신 전의 원본 블록들을 가리키던 갱신 전의 원본 트리 구조의 루트 노드는 호스트 시스템으로부터 분리되고, 비활성화 상태의 직전 트리 구조로 자연스럽게 전환된다.
경우를 나누어 구체적으로 설명하면, 먼저, 신규한 파일을 생성하는 경우에는, 트리 구조 관리부(14)는 새로 쓰기 연산된 데이터 블록들을 포인팅하도록 직전 트리 구조를 갱신하여 새로운 원본 트리 구조를 구성하고, 호스트 시스템이 새로운 원본 트리 구조의 루트 노드를 포인팅하도록 설정한다.
기존 파일의 원본 블록을 최초로 갱신하는 경우, 직전 버전 블록이 손상 내지 유실된 경우 또는 기존 파일의 원본 블록에 부가 데이터를 부가하는 경우와 같이 직전 버전 블록이 온전히 존재하지 않는 경우에는, 트리 구조 관리부(14)는 새로 쓰기 연산된 갱신 버전 블록들 또는 부가 블록들 및 원본 블록들을 포인팅하도록 직전 트리 구조를 갱신하여 새로운 원본 트리 구조를 구성하고, 호스트 시스템이 새로운 원본 트리 구조의 루트 노드를 포인팅하도록 설정한다.
또한, 직전 버전 블록과 직전 트리 구조가 온전히 존재하고 기존 파일의 원본 블록을 갱신하는 경우에는, 트리 구조 관리부(14)는 직전 버전 블록들에 덮어 쓴 갱신 버전 블록들 및 원본 블록들을 포인팅하도록 직전 트리 구조를 갱신하여 새로운 원본 트리 구조를 구성하고, 호스트 시스템이 새로운 원본 트리 구조의 루트 노드를 포인팅하도록 설정한다.
실시예에 따라서, 트리 구조 관리부(14)는 직전 트리 구조를 구성하는 아이노드 블록 및 포인터 블록들을 해당 데이터 블록의 갱신이 있기 전까지 다른 파일들을 덮어쓰지 않도록 쓰기 보호할 수 있는데, 이 경우 추후의 갱신에 대비할 수 있는 반면에, 보호된 직전 버전 블록들이 저장 공간을 과도하게 차지할 수도 있다.
다른 실시예에서는, 다른 파일들을 위한 트리 구조를 저장하기 위한 쓰기 연산 대상 블록 선정 시에, 직전 트리 구조를 구성하는 아이노드 블록 및 포인터 블록들은 쓰기 보호되지 않고 빈 블록과 마찬가지로 취급되거나, 또는 쓰기 보호되지는 않더라도 빈 블록보다는 비우선적으로 대상 블록에 선정될 수 있는데, 이 경우에는 저장 공간은 효율적으로 사용될 수 있지만 직전 버전의 갱신 효율이 다소 저하될 수 있다.
또 다른 실시예에서는, 직전 버전 블록들의 위치는 스토리지(20) 내부에 특별히 마련된 영역에, 또는 외부의 저장 공간, 예를 들어, 버퍼 캐시 또는 메인 메모리에 저장되어 유지될 수 있다.
또 다른 실시예에서는, 하나의 트리 구조가 어떤 파일에 관하여 현재 버전의 데이터 블록을 포인팅하는 포인터와 그 데이터 블록의 직전 버전의 데이터 블록을 포인팅하는 포인터를 하나의 쌍으로 포함할 수도 있다. 이 경우, 직전 버전 블록의 위치를 O(1)의 낮은 시간 복잡도로 탐색할 수 있는 장점이 있지만 공간 효율성을 저하시키는 트레이드오프 관계가 발생한다. 따라서, 설계 목적에 따라 실시예들을 탄력적으로 선택할 수 있다.
만약, 직전 트리 구조가 보호되지 않아 덮어쓰기되거나, 그 밖의 이유로 직전 트리 구조가 온전하게 존재하지 않은 경우에는, 새로 쓰기 연산된 데이터 블록들 및 갱신되지 않은 원본 블록들을 포인팅하도록, 직전 트리 구조 대신에, 원본 트리 구조의 갱신되지 않는 부분과 새로 쓰기 연산된 데이터 블록들을 위한 새로운 포인터들을 조합하여 새로운 원본 트리 구조를 구성하고, 호스트 시스템이 새로운 원본 트리 구조의 루트 노드를 포인팅하도록 설정한다.
데이터 블록들의 쓰기 연산이 완료되고 직전 트리 구조가 갱신되는 중에 또는 신규한 트리 구조가 생성되는 중에, 호스트 시스템이 멈추거나 고장을 일으키더라도, 체크포인트 트랜잭션이 일어나기 직전의 원본 트리 구조 및 루트 노드는 여전히 온전하게(intact) 존재하므로 호스트 시스템은 문제없이 복구될 수 있다.
이렇듯, 본 발명의 듀얼 버퍼링 파일 관리 시스템(10)은 지속적으로 갱신되는 어떤 파일에 관하여, 최신 버전의 데이터 블록들을 포인팅하는 활성화된 원본 트리 구조와 직전 버전의 데이터 블록들을 포인팅하는 비활성화된 직전 트리 구조를 유지하며, 만약 갱신이 있으면 비활성화된 직전 트리 구조를 참조하여 선정한 직전 버전의 데이터 블록 위에 갱신된 데이터를 DCW 기법으로 저장함으로써 쓰기 연산을 최소화하고, 직전 트리 구조를 갱신한 최신 버전의 트리 구조를 호스트 시스템에 연결함으로써, 원자성을 제공할 수 있다.
또한 본 발명의 듀얼 버퍼링 파일 관리 시스템(10)은, 종전까지의 최신 버전이 직전 버전으로 전환되기 때문에, 별도로 데이터 비교 쓰기를 할 최적의 블록을 선정하기 위해 해밍 거리 연산 등을 통해 가장 유사한 블록을 찾을 필요없이, 단지 직전 버전이 차지하고 있던 블록을 쓰기 대상 블록으로 선정할 수 있다. 실제로 최신의 갱신된 버전은 직전 버전에 비해 단지 갱신이 두 차례만 있는 버전(즉, 직전 버전 - 현재 원본 - 갱신 버전)이므로, 해당 블록에 저장할 버전은 저장된 버전에 대해 상당 부분에서 유사할 것이고, 데이터 비교 쓰기 연산 효율도 높을 것으로 예상된다.
다만, 높은 수준의 원자성 및 쓰기 연산 부하 절감을 제공하기 위해 비활성화된 상태의 직전 버전을 관리하여야 하므로, 저장 공간 측면에서 다소 불리한 점이 있으나, 이러한 저장 공간 오버헤드는 파일 단위가 아닌 블록 단위로 직전 버전과 현재 원본을 유지함으로써 최소화할 수 있다.
예를 들어, 100 개의 블록으로 이루어진 파일에서 지금까지 10 개의 블록들은 갱신되어 왔고 90 개의 블록들은 한 번도 갱신되지 않은 경우에, 갱신이 일어난 10 개의 블록에 대해서만 원본 버전과 직전 버전이 유지 관리되고, 90 개의 블록들은 원본만 유지하는 식으로 파일 트리 구조가 관리될 수 있다. 이 경우, 공간 오버헤드는 100%가 아닌 10%에 불과하다.
또한 실제의 컴퓨터 시스템에서, 설치된 파일들의 대부분은 갱신되지 않고 유지되며, 갱신되는 파일에서도 대부분의 컨텐츠는 유지되기 때문에, 실제로도 공간 오버헤드로 인한 손실은 원자성 보장과 쓰기 성능 향상이라는 이득에 비해 매우 작아 무시할 만하다.
잠시 도 2 내지 도 4를 참조하면, 도 2 내지 도 4는 본 발명의 일 실시예에 따른 듀얼 버퍼링 파일 관리 시스템에서 블록이 갱신될 때 파일 트리 구조의 순차적인 변화를 예시한 개념도들이다.
도 2 내지 도 4에서, 도 1의 비휘발성 스토리지(20)의 원본 트리 구조(21)는, 최상위에 루트 노드(210)에 의해 포인팅되는 아이노드 블록(211)이 있고, 아이노드 블록(211) 내에 특정 파일(26)을 가리키는 아이노드(212)가 있다.
도 2를 참조하면, 파일(26)의 데이터 블록들 중 네 개의 데이터 블록(D1, D2, D3, D4)가 예시되어 있고, 각 데이터 블록들(D1 내지 D4)은 원본 트리 구조(21)의 포인터 블록들에 저장된 포인터들에 의해 포인팅된다.
특정 파일(26)은 D1 내지 D4의 최초의 버전이 저장되고 아직 갱신이 일어나지 않은 상태이다.
한편 스토리지(20) 내에는 사용되지 않은 빈 블록(271)이 예비되어 있다.
도 3은 도 2의 파일 트리 구조에서, 파일의 최초 갱신이 있을 경우에, 데이터 블록의 신규 생성과, 새로운 원본 트리 구조의 생성 및 시스템 연결을 예시하고, 도 4는 도 3의 1차 갱신된 파일 트리 구조에서 재갱신이 있을 경우의 데이터 블록의 갱신과, 직전 트리 구조의 갱신 및 시스템 연결을 예시한다.
도 3을 참조하면, 기존의 도 2의 파일(26)의 데이터 블록들(D1 내지 D4) 중 일부 데이터 블록(D4)에 대하여 갱신이 있을 경우에, 갱신된 데이터 블록(D4')이 도 2에서 사용되지 않던 빈 블록(271)에 쓰기 연산되어 갱신된 파일(26')이 된다.
이어서, 갱신된 데이터 블록(D4')을 위한 실선의 포인터들이 지정되고, 갱신이 없는 기존의 원본 블록들(D1 내지 D3)을 가리키는 포인터들과 함께 새로운 원본 트리 구조인 갱신 파일 트리 구조(22)를 형성한다.
이어서, 갱신 파일 트리 구조(22)의 최상위 엔트리인 루트 노드(220)를 포인팅하도록 호스트 시스템에 연결함으로써 갱신 파일 트리 구조(22)를 활성화한다. 갱신 파일 트리 구조(22)는 새로운 원본 트리 구조가 되고, 도 2의 기존의 원본 트리 구조(21)는 호스트 시스템과 연결이 끊어지고 비활성 상태의 직전 트리 구조(21')로 전환된다.
호스트 시스템은 갱신 파일 트리 구조(22)를 통해 갱신된 파일(26')이 데이터 블록들(D1 내지 D3과 D4')로 구성되는 것으로 인식한다.
도 4를 참조하면, 도 3에서 갱신된 파일(26')에 대해 일부 데이터 블록(D')에 대하여 재갱신이 있을 경우에, 재갱신된 데이터 블록(D'')이 도 3에 직전 버전으로 설정된 데이터 블록(D4) 위에 각각 덮어쓰기 연산되어 갱신된 파일(26'')이 된다.
이어서, 도 3의 직전 트리 구조(21')를 참조하여, 재갱신된 데이터 블록(D4'')을 위한 실선의 포인터들이 지정되고, 갱신이 없는 기존의 원본 블록들(D1 내지 D3)을 가리키는 포인터들과 함께 재갱신 파일 트리 구조(21'')를 형성한다.
이어서, 재갱신 파일 트리 구조(21'')의 최상위 엔트리인 루트 노드(210'')를 포인팅하도록 호스트 시스템에 연결함으로써 재갱신 파일 트리 구조(21'')를 활성화한다. 재갱신 파일 트리 구조(21'')는 새로운 원본 트리 구조가 되고, 도 3의 갱신 파일 트리 구조(22)는 호스트 시스템과 연결이 끊어지고 비활성 상태의 직전 트리 구조(22')로 전환된다.
호스트 시스템은 재갱신 파일 트리 구조(21'')를 통해 재갱신된 파일(26'')이 데이터 블록들(D1 내지 D3과 D4'')로 구성되는 것으로 인식한다.
도 5는 본 발명의 일 실시예에 따른 듀얼 버퍼링 대용량 스토리지 장치를 예시한 블록도이다.
도 5를 참조하면, 듀얼 버퍼링 대용량 스토리지 장치(50)는 체크포인트 트랜잭션 생성부(51), 쓰기 블록 선정부(52), 쓰기 연산 처리부(53), 트리 구조 관리부(54) 및 비휘발성 스토리지(55)를 포함할 수 있다.
비휘발성 스토리지(55)의 구조는 도 1의 비휘발성 스토리지(20)와 실질적으로 동일하므로 설명을 생략한다.
체크포인트 트랜잭션 생성부(51)는 소정 시간의 경과, 또는 외부의 버퍼 캐시(100) 내에 신규 생성되거나 부가된 클린 캐시 블록 또는 갱신된 더티 캐시 블록들의 갯수와 같은 소정의 조건이 만족하면, 버퍼 캐시 내에서 쓰기 연산의 대상이 되는 더티 캐시들의 컨텐츠들을 비휘발성 스토리지(55)에 기록하기 위한 체크포인트 트랜잭션을 생성한다.
체크포인트 트랜잭션 생성부(51)는, 일 실시예에서는, 비휘발성 스토리지(55)의 파일 시스템을 관리하기 위한 듀얼 버퍼링 대용량 스토리지 장치(50)의 일부일 수 있지만, 다른 실시예에서는, 버퍼 캐시(100)를 관리하는 버퍼 캐시 관리부(101)의 일부일 수도 있다.
또 다른 실시예에서, 체크포인트 트랜잭션 생성부(51)는 비휘발성 스토리지(55)로 쓰기 연산되기 위한 체크포인트 트랜잭션을 메인 메모리로부터 직접 생성할 수도 있다.
이 경우에는, 체크포인트 트랜잭션 생성부(51)는 시간의 경과와 같은 소정의 조건이 만족하면, 쓰기 연산의 대상이 되는 메모리 블록들의 컨텐츠들을 버퍼 캐시를 거치지 않고 직접 비휘발성 스토리지(55)에 기록하기 위한 체크포인트 트랜잭션을 생성한다.
쓰기 블록 선정부(52)는, 체크포인트 트랜잭션에 포함된 데이터에 상응하는 원본 블록의 직전 버전 블록들을 비휘발성 스토리지(55) 내에서 탐색하고, 탐색 결과에 따라 쓰기 대상 블록을 선정한다.
다만, 쓰기 블록 선정부(52)는, 만약 체크포인트 트랜잭션에 포함된 데이터에 상응하는 원본 블록 또는 원본 블록의 직전 버전 블록을 탐색할 수 없는 경우, 다시 말해 쓰기될 데이터가 만약 신규 파일이거나, 기존 파일에 부가되거나 기존 파일의 갱신되는 부분이 처음으로 갱신되는 경우로서 원본 블록의 직전 버전 블록이 비휘발성 스토리지(55) 내에 존재하지 않거나, 비휘발성 스토리지(55) 내에 참조할 비활성화된 직전 트리 구조가 없는 경우에는, 비휘발성 스토리지(55) 내의 빈 블록을 쓰기 대상 블록으로 선정할 수 있다.
구체적으로, 쓰기 블록 선정부(52)는 체크포인트 트랜잭션에 포함된 데이터가 신규 파일의 데이터인 경우에는 비휘발성 스토리지(55) 내의 빈 블록을 쓰기 대상 블록으로 선정한다.
또한 쓰기 블록 선정부(52)는 체크포인트 트랜잭션에 포함된 데이터가 비휘발성 스토리지(55) 내에 이미 존재하는 파일의 갱신 데이터로서 직전 트리 구조가 존재하지 않는 경우에는 비휘발성 스토리지(55) 내의 빈 블록을 쓰기 대상 블록으로 선정한다.
또한 쓰기 블록 선정부(52)는 비휘발성 스토리지(55) 내의 직전 트리 구조 및 원본 트리 구조를 참조하여, 직전 트리 구조가 존재하고 해당 갱신 데이터에 상응하는 기존 파일의 데이터 블록에 대한 직전 트리 구조 내의 포인터와 현재 원본 트리 구조의 상응하는 포인터가 서로 동일한 경우에는, 직전 버전 블록이 보전된 적이 없는 경우로 판정하고, 비휘발성 스토리지(55) 내의 빈 블록을 쓰기 대상 블록으로 선정한다.
반면에, 체크포인트 트랜잭션에 포함된 데이터의 원본 블록에 대해 직전 버전 블록이 보전되어 있는 경우에는, 쓰기 블록 선정부(52)는 직전 버전 블록들을 쓰기 대상 블록으로 선정한다.
좀더 구체적으로, 쓰기 블록 선정부(52)는 직전 트리 구조 및 원본 트리 구조를 참조하여, 직전 트리 구조가 존재하고 해당 갱신 데이터에 상응하는 기존 파일의 데이터 블록에 대한 직전 트리 구조 내의 포인터와 현재 원본 트리 구조의 상응하는 포인터가 서로 다르면, 직전 버전 블록이 보전되어 있는 경우로 판정하고, 비휘발성 스토리지(55) 내에서 직전 트리 구조 내의 포인터에 의해 포인팅되는 직전 버전 블록을 쓰기 대상 블록으로 선정한다.
한편, 만약 체크포인트 트랜잭션에 포함된 데이터가 갱신 데이터가 아닌 이미 존재하는 파일에 부가되는 데이터라면, 기존 파일에 관한 데이터이기는 하지만 갱신할 원본이라고 할 대상이 없기 때문에, 쓰기 블록 선정부(52)는, 신규 파일의 경우와 유사하게, 빈 블록을 쓰기 대상 블록으로 선정한다.
쓰기 연산 처리부(53)는 선정된 쓰기 대상 블록에 체크포인트 트랜잭션에 포함된 데이터를 쓰기 연산한다.
구체적으로, 쓰기 연산 처리부(53)는 데이터 비교 쓰기(DCW) 기법에 따라, 쓰기 연산되는 데이터 블록 내에서도 실제로 변경이 있는 부분만 쓰기 연산할 수 있다.
실시예에 따라, 만약 빈 블록이 쓰기 대상 블록으로 선정된 경우에는 DCW 기법 대신에 데이터 블록 전체를 쓰기 연산하고, 만약 직전 버전 블록이 쓰기 대상 블록으로 선정된 경우에는, DCW 기법에 따라 변경이 있는 부분만 쓰기 연산할 수 있다.
다시 말해, 어떤 기존 파일에 관하여 활성화된 원본 블록과 비활성화된 직전 버전 블록이 유지되고 있는 중에, 원본 블록에 대해 갱신되는 갱신 데이터는 직전 버전 블록 위에 덮어쓰기된다.
이러한 쓰기 연산에 의해, 쓰기 연산된 블록이 이제 새로운 원본 블록이고, 쓰기 연산 전까지의 원본 블록은 이제 직전 버전 블록으로 설정된다.
실시예에 따라, 직전 버전 블록은 해당 블록의 갱신이 있기 전까지 쓰기 보호 및 유지될 수 있다.
다른 실시예에서는, 직전 버전 블록은 쓰기 보호되지 않고 빈 블록과 마찬가지로 취급되거나 또는 전적으로 쓰기 보호되지는 않더라도 빈 블록보다는 비우선적으로 데이터 쓰기 연산의 대상 블록에 선정될 수 있다.
이어서, 트리 구조 관리부(54)는 비휘발성 스토리지(55) 내에서 새로 쓰기 연산된 데이터 블록들 및 갱신되지 않은 원본 블록들을 포인팅하도록 구성된 새로운 원본 트리 구조의 루트 노드를 호스트 시스템이 포인팅하도록 설정한다.
이러한 새로운 원본 트리 구조의 루트 노드를 호스트 시스템에 연결함으로써, 갱신 전의 원본 블록들을 가리키던 갱신 전의 원본 트리 구조의 루트 노드는 호스트 시스템으로부터 분리되고, 비활성화 상태의 직전 트리 구조로 자연스럽게 전환된다.
경우를 나누어 구체적으로 설명하면, 먼저, 신규한 파일을 생성하는 경우에는, 트리 구조 관리부(54)는 비휘발성 스토리지(55) 내에서 새로 쓰기 연산된 데이터 블록들을 추가로 포인팅되도록 직전 트리 구조를 갱신하여 새로운 원본 트리 구조를 구성하고, 호스트 시스템이 새로운 원본 트리 구조의 루트 노드를 포인팅하도록 설정한다.
기존 파일의 원본 블록을 최초로 갱신하는 경우, 직전 버전 블록이 손상 내지 유실된 경우 또는 기존 파일의 원본 블록에 부가 데이터를 부가하는 경우와 같이 직전 트리 구조는 존재하지만 직전 버전 블록이 온전히 존재하지 않는 경우에는, 트리 구조 관리부(54)는 비휘발성 스토리지(55) 내에서 새로 쓰기 연산된 갱신 버전 블록들 또는 부가 블록들을 포인팅하도록 직전 트리 구조를 갱신하여 새로운 원본 트리 구조를 구성하고, 호스트 시스템이 새로운 원본 트리 구조의 루트 노드를 포인팅하도록 설정한다.
또한, 직전 버전 블록이 있으면서 기존 파일의 원본 블록을 갱신하는 경우에는, 트리 구조 관리부(54)는 비휘발성 스토리지(55) 내에서 직전 버전 블록들에 덮어 쓴 갱신 버전 블록들에 관한 포인터들 및 원본 블록들을 포인팅하도록 직전 트리 구조를 갱신하여 새로운 원본 트리 구조를 구성하고, 호스트 시스템이 새로운 원본 트리 구조의 루트 노드를 포인팅하도록 설정한다.
실시예에 따라서, 트리 구조 관리부(54)는 직전 트리 구조를 구성하는 아이노드 블록 및 포인터 블록들을 해당 데이터 블록의 갱신이 있기 전까지 쓰기 보호할 수 있다.
다른 실시예에서는, 직전 트리 구조를 구성하는 아이노드 블록 및 포인터 블록들은 쓰기 보호되지 않고 빈 블록과 마찬가지로 취급되거나, 또는 쓰기 보호되지는 않더라도 빈 블록보다는 비우선적으로 데이터 쓰기 연산의 대상 블록에 선정될 수 있다.
또 다른 실시예에서는, 직전 버전 블록들의 위치는 비휘발성 스토리지(55) 내부에 특별히 마련된 영역에, 또는 외부의 저장 공간, 예를 들어, 버퍼 캐시 또는 메인 메모리에 저장되어 유지될 수 있다.
또 다른 실시예에서는, 하나의 트리 구조가 어떤 파일에 관하여 현재 버전의 데이터 블록을 포인팅하는 포인터와 그 데이터 블록의 직전 버전의 데이터 블록을 포인팅하는 포인터를 하나의 쌍으로 포함할 수도 있다.
또 다른 실시예에서, 직전 트리 구조가 온전하게 존재하지 않은 경우에는, 트리 구조 관리부(54)는, 새로 쓰기 연산된 데이터 블록들 및 갱신되지 않은 원본 블록들을 포인팅하도록, 원본 트리 구조의 갱신되지 않는 부분과 새로 쓰기 연산된 데이터 블록들을 위한 새로운 포인터들을 조합하여 새로운 원본 트리 구조를 구성하고, 호스트 시스템이 새로운 원본 트리 구조의 루트 노드를 포인팅하도록 설정할 수 있다.
도 6은 본 발명의 일 실시예에 따른 듀얼 버퍼링 파일 관리 방법을 예시한 순서도이다.
도 6을 참조하면, 비휘발성 스토리지의 듀얼 버퍼링 파일 관리 방법은 단계(S61)에서, 쓰기 연산의 대상이 되는 컨텐츠들을 스토리지에 기록하기 위한 체크포인트 트랜잭션을 생성한다.
구체적으로, 단계(S61)에서, 버퍼 캐시 내에서 쓰기 연산의 대상이 되는 더티 캐시들의 컨텐츠들을 스토리지에 기록하기 위한 체크포인트 트랜잭션을 생성할 수 있다.
이때, 체크포인트 트랜잭션의 생성은 소정 시간의 경과, 또는 버퍼 캐시 내에 신규 생성되거나 부가된 또는 갱신된 더티 캐시 블록들의 갯수와 같은 소정의 조건에 기초하여 수행될 수 있다.
다른 실시예에서, 단계(S61)는 쓰기 연산의 대상이 되는 메모리 블록들의 컨텐츠들을 버퍼 캐시를 거치지 않고 직접 스토리지에 기록하기 위한 체크포인트 트랜잭션을 생성할 수 있다.
이 경우에는, 체크포인트 트랜잭션의 생성은 시간의 경과와 같은 소정의 조건에 기초하여 수행될 수 있다.
단계(S62)에서, 체크포인트 트랜잭션에 포함된 데이터에 상응하는 원본 블록의 직전 버전 블록들을 비휘발성 스토리지 내에서 탐색하고, 탐색 결과에 따라 쓰기 대상 블록을 선정한다.
구체적으로, 단계(S62)는, 만약 체크포인트 트랜잭션에 포함된 데이터에 상응하는 원본 블록 또는 원본 블록의 직전 버전 블록을 탐색할 수 없는 경우, 다시 말해, 쓰기될 데이터가 만약 신규 파일이거나, 기존 파일에 부가되거나 기존 파일의 갱신되는 부분이 처음으로 갱신되는 경우로서 원본 블록의 직전 버전 블록이 비휘발성 스토리지 내에 존재하지 않거나, 비휘발성 스토리지 내에 참조할 비활성화된 직전 트리 구조가 없는 경우에는, 비휘발성 스토리지 내의 빈 블록을 쓰기 대상 블록으로 선정하는 단계를 포함할 수 있다.
좀더 구체적으로, 단계(S62)는, 체크포인트 트랜잭션에 포함된 데이터가 신규 파일의 데이터인 경우에는 비휘발성 스토리지 내의 빈 블록을 쓰기 대상 블록으로 선정하는 단계를 포함할 수 있다.
또한 단계(S62)는, 체크포인트 트랜잭션에 포함된 데이터가 비휘발성 스토리지 내에 이미 존재하는 파일의 갱신 데이터로서 직전 버전 블록이 보전된 적이 없는 경우에도 비휘발성 스토리지 내의 빈 블록을 쓰기 대상 블록으로 선정하는 단계를 포함할 수 있다.
좀더 구체적으로, 단계(S62)는, 비휘발성 스토리지 내의 직전 트리 구조 및 원본 트리 구조를 참조하여, 직전 트리 구조가 존재하고 해당 갱신 데이터에 상응하는 데이터 블록에 대한 직전 트리 구조 내의 포인터와 현재 원본 트리 구조의 상응하는 포인터가 서로 동일하면, 체크포인트 트랜잭션에 포함된 데이터를 직전 버전 블록이 보전된 적이 없는 경우로 판정하고, 비휘발성 스토리지 내의 빈 블록을 쓰기 대상 블록으로 선정하는 단계를 포함할 수 있다.
단계(S62)는, 반면에, 체크포인트 트랜잭션에 포함된 데이터의 원본 블록에 대해 직전 버전 블록이 보전되어 있는 경우에는, 직전 버전 블록들을 쓰기 대상 블록으로 선정하는 단계를 포함할 수 있다.
좀더 구체적으로, 단계(S62)는 직전 트리 구조 및 원본 트리 구조를 참조하여, 직전 트리 구조가 존재하고 해당 갱신 데이터에 상응하는 기존 파일의 데이터 블록에 대한 직전 트리 구조 내의 포인터와 현재 원본 트리 구조의 상응하는 포인터가 서로 다르면, 체크포인트 트랜잭션에 포함된 데이터를 직전 버전 블록이 보전되어 있는 경우로 판정하고, 비휘발성 스토리지 내에서 직전 트리 구조 내의 포인터에 의해 포인팅되는 직전 버전 블록을 쓰기 대상 블록으로 선정하는 단계를 포함할 수 있다.
한편, 단계(S62)는, 만약 체크포인트 트랜잭션에 포함된 데이터가 갱신 데이터가 아닌 이미 존재하는 파일에 부가되는 데이터라면, 기존 파일에 관한 데이터이기는 하지만 갱신할 원본이라고 할 대상이 없기 때문에, 신규 파일의 경우와 유사하게, 빈 블록을 쓰기 대상 블록으로 선정하는 단계를 포함할 수 있다.
이어서, 단계(S63)에서, 선정된 쓰기 대상 블록에 체크포인트 트랜잭션에 포함된 데이터를 쓰기 연산한다.
구체적으로, 단계(S63)는, 데이터 비교 쓰기 기법에 따라 쓰기 연산되는 데이터 블록 중에서 변경된 부분만 쓰기 연산하는 단계를 포함할 수 있다.
좀더 구체적으로 단계(S63)은, 만약 빈 블록이 쓰기 대상 블록으로 선정된 경우에는 데이터 블록 전체를 쓰기 연산하고, 만약 직전 버전 블록이 쓰기 대상 블록으로 선정된 경우에는, 데이터 비교 쓰기 기법에 따라 갱신될 데이터 블록 중에서 변경된 부분만 쓰기 연산하는 단계를 포함할 수 있다.
실시예에 따라, 직전 버전 블록은 해당 데이터 블록의 갱신이 있기 전까지 쓰기 보호 및 유지될 수 있다.
다른 실시예에서는, 직전 버전 블록은 쓰기 보호되지 않고 빈 블록과 마찬가지로 취급되거나 또는 쓰기 보호되지는 않더라도 빈 블록보다는 비우선적으로 데이터 쓰기 연산의 대상 블록에 선정될 수 있다.
이어서, 단계(S64)에서 비휘발성 스토리지 내에서 새로 쓰기 연산된 데이터 블록들 및 갱신되지 않은 원본 블록을 포인팅하도록 직전 트리 구조를 갱신하여 새로운 원본 트리 구조를 구성하고, 호스트 시스템이 새로운 원본 트리 구조의 루트 노드를 포인팅하도록 설정한다.
이러한 새로운 원본 트리 구조의 루트 노드를 호스트 시스템에 연결함으로써, 기존의 원본 블록들을 가리키던 기존의 원본 트리 구조의 루트 노드는 호스트 시스템으로부터 분리되고, 비활성화 상태의 직전 트리 구조로 자연스럽게 전환된다.
경우를 나누어 구체적으로 설명하면, 단계(S64)는 먼저, 신규 파일을 생성하는 경우에는, 비휘발성 스토리지 내에서 새로 쓰기 연산된 데이터 블록들을 추가로 포인팅하도록 직전 트리 구조를 갱신하여 새로운 원본 트리 구조를 구성하고, 호스트 시스템이 새로운 원본 트리 구조의 루트 노드를 포인팅하도록 설정한다.
또한, 단계(S64)는, 직전 트리 구조가 온전히 존재하고 체크포인트 트랜잭션에 포함된 데이터가 기존 파일의 데이터이지만 직전 버전 블록이 존재하지 않은 경우에는, 비휘발성 스토리지 내에서 새로 쓰기 연산된 갱신 버전 블록들 또는 부가 블록들 및 원본 블록들을 포인팅하도록 직전 트리 구조를 갱신하여 새로운 원본 트리 구조를 구성하고, 호스트 시스템이 새로운 원본 트리 구조의 루트 노드를 포인팅하도록 설정하는 단계를 포함할 수 있다.
또한, 단계(S64)는, 직전 버전 블록이 있으면서 기존 파일의 원본 블록을 갱신하는 경우에는, 비휘발성 스토리지 내에서 직전 버전 블록들에 덮어 쓴 갱신 버전 블록들 및 원본 블록들을 포인팅하도록 직전 트리 구조를 갱신하여 새로운 원본 트리 구조를 구성하고, 호스트 시스템이 새로운 원본 트리 구조의 루트 노드를 포인팅하도록 설정하는 단계를 포함할 수 있다.
실시예에 따라서, 직전 트리 구조를 구성하는 아이노드 블록 및 포인터 블록들은 해당 데이터 블록의 갱신이 있기 전까지 쓰기 보호될 수 있다.
다른 실시예에서는, 직전 트리 구조를 구성하는 아이노드 블록 및 포인터 블록들은 쓰기 보호되지 않고 빈 블록과 마찬가지로 취급되거나, 또는 쓰기 보호되지는 않지만 빈 블록보다는 비우선적으로 데이터 쓰기 연산의 대상 블록에 선정될 수 있다.
또 다른 실시예에서는, 직전 버전 블록들의 위치는 비휘발성 스토리지 내부에 특별히 마련된 영역에, 또는 외부의 저장 공간, 예를 들어, 버퍼 캐시 또는 메인 메모리에 저장되어 유지될 수 있다.
또 다른 실시예에서는, 하나의 트리 구조가 어떤 파일에 관하여 현재 버전의 데이터 블록을 포인팅하는 포인터와 그 데이터 블록의 직전 버전의 데이터 블록을 포인팅하는 포인터를 하나의 쌍으로 포함할 수도 있다.
또 다른 실시예에서, 직전 트리 구조가 온전하게 존재하지 않은 경우에는, 파일을 구성하는 새로 쓰기 연산된 데이터 블록들 및 갱신되지 않은 원본 블록들을 포인팅하도록, 원본 트리 구조의 갱신되지 않는 부분과 새로 쓰기 연산된 데이터 블록들을 위한 새로운 포인터들을 조합하여 새로운 원본 트리 구조를 구성하고, 호스트 시스템이 새로운 원본 트리 구조의 루트 노드를 포인팅하도록 설정할 수 있다.
이상과 같이 본 발명은 비록 한정된 실시예와 도면에 의해 설명되었으나, 본 발명이 상기의 실시예에 한정되는 것은 아니며, 이는 본 발명이 속하는 분야에서 통상의 지식을 가진 자라면 이러한 기재로부터 다양한 수정 및 변형이 가능하다. 따라서, 본 발명의 사상은 아래에 기재된 특허청구범위에 의해서만 파악되어야 하고, 이와 균등하거나 또는 등가적인 변형 모두는 본 발명 사상의 범주에 속한다 할 것이다.
또한, 본 발명에 따른 장치는 컴퓨터로 읽을 수 있는 기록매체에 컴퓨터가 읽을 수 있는 코드로서 구현하는 것이 가능하다. 컴퓨터가 읽을 수 있는 기록매체는 컴퓨터 시스템에 의하여 읽혀질 수 있는 데이터가 저장되는 모든 종류의 기록장치를 포함한다. 기록매체의 예로는 ROM, RAM, 광학 디스크, 자기 테이프, 플로피 디스크, 하드 디스크, 비휘발성 메모리 등이 있으며, 또한 캐리어 웨이브(예를 들어 인터넷을 통한 전송)의 형태로 구현되는 것도 포함한다. 또한 컴퓨터가 읽을 수 있는 기록매체는 네트워크로 연결된 컴퓨터 시스템에 분산되어 분산방식으로 컴퓨터가 읽을 수 있는 코드가 저장되고 실행될 수 있다.
10 듀얼 버퍼링 파일 관리 시스템
11 체크포인트 트랜잭션 생성부 12 쓰기 블록 선정부
13 쓰기 연산 처리부 14 트리 구조 관리부
20 비휘발성 스토리지
21 원본 트리 구조 210 원본 루트 노드
211 원본 아이노드 블록 212 아이노드
213 직접 포인터 214 단순 간접 포인터
215 이중 간접 포인터 216 삼중 간접 포인터
22 직전 트리 구조 220 직전 루트 노드
221 직전 아이노드 블록 222 아이노드
223 포인터 블록
23 단순 간접 포인터 블록
24, 241 이중 간접 포인터 블록
25, 251, 252 삼중 간접 포인터 블록
231, 242, 253 간접 포인터
261, 262, 263, 264 데이터 블록
271 빈 블록
50 듀얼 버퍼링 대용량 스토리지 장치
51 체크포인트 트랜잭션 생성부 52 쓰기 블록 선정부
53 쓰기 연산 처리부 54 트리 구조 관리부
55 비휘발성 스토리지

Claims (39)

  1. 체크포인트 트랜잭션에 포함된 데이터에 상응하는 원본 블록의 직전 버전 블록들이 비휘발성 스토리지에서 탐색하고, 탐색 결과에 따라 쓰기 대상 블록을 선정하는 쓰기 블록 선정부;
    상기 선정된 쓰기 대상 블록에 상기 체크포인트 트랜잭션에 포함된 데이터를 상기 비휘발성 스토리지에 쓰기 연산하는 쓰기 연산 처리부; 및
    새로 쓰기 연산된 데이터 블록들 및 갱신되지 않은 원본 블록들을 포인팅하도록 원본 트리 구조를 구성하고, 호스트 시스템이 상기 구성된 원본 트리 구조의 루트 노드를 포인팅하도록 설정하는 트리 구조 관리부를 포함하고,
    상기 비휘발성 스토리지는 상기 새로 쓰기 연산된 데이터 블록들 및 갱신되지 않은 원본 블록들을 포인팅하는 원본 트리 구조와, 상기 직전 버전 블록들 및 상기 갱신되지 않은 원본 블록들을 포인팅하는 직전 트리 구조를 포함하는 것을 특징으로 하는 듀얼 버퍼링 파일 관리 시스템.
  2. 청구항 1에 있어서, 상기 쓰기 블록 선정부는,
    상기 체크포인트 트랜잭션에 포함된 데이터의 원본 블록에 대해 직전 버전 블록이 보전되어 있으면, 상기 비휘발성 스토리지에서 직전 버전이 저장된 블록들을 쓰기 대상 블록으로 선정하도록 동작하는 것을 특징으로 하는 듀얼 버퍼링 파일 관리 시스템.
  3. 청구항 2에 있어서, 상기 쓰기 블록 선정부는,
    상기 직전 트리 구조 및 활성화된 원본 트리 구조를 참조하여, 상기 체크포인트 트랜잭션에 포함된 데이터에 상응하는 데이터 블록에 대한 직전 트리 구조 내의 포인터와 현재 원본 트리 구조의 상응하는 포인터가 서로 다르면, 상기 비휘발성 스토리지에서 상기 직전 트리 구조 내의 포인터에 의해 포인팅되는 직전 버전이 저장된 데이터 블록을 쓰기 대상 블록으로 선정하도록 동작하는 것을 특징으로 하는 듀얼 버퍼링 파일 관리 시스템.
  4. 청구항 1에 있어서, 상기 쓰기 블록 선정부는,
    만약 상기 체크포인트 트랜잭션에 포함된 데이터에 상응하는 원본 블록 또는 상기 원본 블록의 직전 버전 블록을 탐색할 수 없는 경우에는, 상기 비휘발성 스토리지에서 빈 블록을 쓰기 대상 블록으로 선정하도록 동작하는 것을 특징으로 하는 듀얼 버퍼링 파일 관리 시스템.
  5. 청구항 4에 있어서, 상기 쓰기 블록 선정부는,
    상기 체크포인트 트랜잭션에 포함된 데이터가 신규 파일의 데이터 또는 기존 파일의 부가 데이터인 경우에는 상기 비휘발성 스토리지에서 빈 블록을 쓰기 대상 블록으로 선정하도록 동작하는 것을 특징으로 하는 듀얼 버퍼링 파일 관리 시스템.
  6. 청구항 4에 있어서, 상기 쓰기 블록 선정부는,
    상기 체크포인트 트랜잭션에 포함된 데이터가 기존 파일의 갱신 데이터로서 온전한 직전 트리 구조가 존재하지 않는 경우에는, 상기 비휘발성 스토리지에서 빈 블록을 쓰기 대상 블록으로 선정하도록 동작하는 것을 특징으로 하는 듀얼 버퍼링 파일 관리 시스템.
  7. 청구항 4에 있어서, 상기 쓰기 블록 선정부는,
    상기 직전 트리 구조 및 원본 트리 구조를 참조하여, 상기 체크포인트 트랜잭션에 포함된 데이터가 기존 파일의 갱신 데이터이고, 상기 직전 트리 구조가 온전히 존재하며, 해당 갱신 데이터에 상응하는 기존 파일의 데이터 블록에 대한 직전 트리 구조 내의 포인터와 현재 원본 트리 구조의 상응하는 포인터가 서로 동일한 경우에는, 상기 비휘발성 스토리지에서 빈 블록을 쓰기 대상 블록으로 선정하도록 동작하는 것을 특징으로 하는 듀얼 버퍼링 파일 관리 시스템.
  8. 청구항 1에 있어서, 상기 쓰기 연산 처리부는,
    갱신될 데이터 블록 중에서 변경된 부분만 쓰기 연산하도록 동작하는 것을 특징으로 하는 듀얼 버퍼링 파일 관리 시스템.
  9. 청구항 1에 있어서, 상기 트리 구조 관리부는,
    직전 버전 블록들 및 직전 트리 구조가 온전히 보전되어 있는 경우에는, 직전 버전 블록들에 덮어 쓴 갱신 버전 블록들 및 원본 블록들을 포인팅하도록 상기 직전 트리 구조를 갱신하여 새로운 원본 트리 구조를 구성하고, 호스트 시스템이 상기 새로운 원본 트리 구조의 루트 노드를 포인팅하도록 설정하도록 동작하는 것을 특징으로 하는 듀얼 버퍼링 파일 관리 시스템.
  10. 청구항 9에 있어서, 상기 쓰기 블록 선정부는
    상기 직전 트리 구조가 저장된 블록들을 해당 데이터 블록의 갱신이 있기 전까지 쓰기 보호하도록 동작하는 것을 특징으로 하는 듀얼 버퍼링 파일 관리 시스템.
  11. 청구항 9에 있어서, 상기 쓰기 블록 선정부는
    상기 직전 트리 구조가 저장된 블록들을 빈 블록과 동등하게 또는 빈 블록에 비해 비우선적으로 쓰기 대상 블록으로 선정하도록 동작하는 것을 특징으로 하는 듀얼 버퍼링 파일 관리 시스템.
  12. 청구항 9에 있어서, 상기 트리 구조 관리부는,
    상기 직전 트리 구조를 상기 비휘발성 스토리지의 내부에, 또는 외부의 저장 공간에 저장하도록 동작하는 것을 특징으로 하는 듀얼 버퍼링 파일 관리 시스템.
  13. 청구항 9에 있어서, 상기 원본 트리 구조는 각각의 파일에 관하여 원본 블록을 포인팅하는 포인터와 상기 원본 블록의 직전 버전 블록을 포인팅하는 포인터를 하나의 쌍으로 포함하는 것을 특징으로 하는 듀얼 버퍼링 파일 관리 시스템.
  14. 청구항 1에 있어서, 상기 트리 구조 관리부는,
    상기 직전 트리 구조가 온전히 존재하고 상기 체크포인트 트랜잭션에 포함된 데이터가 신규 파일의 데이터인 경우에는, 새로 쓰기 연산된 데이터 블록들을 추가로 포인팅하도록 직전 트리 구조를 갱신하여 새로운 원본 트리 구조를 구성하고, 호스트 시스템이 새로운 원본 트리 구조의 루트 노드를 포인팅하도록 설정하도록 동작하는 것을 특징으로 하는 듀얼 버퍼링 파일 관리 시스템.
  15. 청구항 1에 있어서, 상기 트리 구조 관리부는,
    상기 직전 트리 구조가 온전히 존재하고 상기 체크포인트 트랜잭션에 포함된 데이터가 기존 파일의 데이터이지만 직전 버전 블록이 존재하지 않은 경우에는, 새로 쓰기 연산된 갱신 버전 블록들 또는 부가 블록들 및 원본 블록들을 포인팅하도록 직전 트리 구조를 갱신하여 새로운 원본 트리 구조를 구성하고, 호스트 시스템이 새로운 원본 트리 구조의 루트 노드를 포인팅하도록 설정하도록 동작하는 것을 특징으로 하는 듀얼 버퍼링 파일 관리 시스템.
  16. 청구항 1에 있어서, 상기 트리 구조 관리부는,
    직전 트리 구조가 온전하게 존재하지 않은 경우에는, 파일을 구성하는 새로 쓰기 연산된 데이터 블록들 및 갱신되지 않은 원본 블록들을 포인팅하도록, 상기 원본 트리 구조의 갱신되지 않는 부분과 상기 새로 쓰기 연산된 데이터 블록들을 위한 새로운 포인터들을 조합하여 새로운 원본 트리 구조를 구성하고, 호스트 시스템이 새로운 원본 트리 구조의 루트 노드를 포인팅하도록 설정하도록 동작하는 것을 특징으로 하는 듀얼 버퍼링 파일 관리 시스템.
  17. 청구항 1에 있어서, 호스트 시스템의 버퍼 캐시 내에서 쓰기 연산의 대상이 되는 더티 캐시들의 컨텐츠들을 비휘발성 스토리지에 기록하기 위한 상기 체크포인트 트랜잭션을 생성하는 체크포인트 트랜잭션 생성부를 더 포함하는 것을 특징으로 하는 듀얼 버퍼링 파일 관리 시스템.
  18. 청구항 1에 있어서, 호스트 시스템의 쓰기 연산의 대상이 되는 메모리 블록들의 컨텐츠들을 비휘발성 스토리지에 기록하기 위한 상기 체크포인트 트랜잭션을 생성하는 체크포인트 트랜잭션 생성부를 더 포함하는 것을 특징으로 하는 듀얼 버퍼링 파일 관리 시스템.
  19. 컴퓨터를 청구항 1 내지 청구항 18 중 어느 한 청구항에 따른 듀얼 버퍼링 파일 관리 시스템으로 동작시키는 프로그램이 수록된 컴퓨터로 독출가능한 기록 매체.
  20. 체크포인트 트랜잭션에 포함된 데이터에 상응하는 원본 블록의 직전 버전 블록들을 비휘발성 스토리지에서 탐색하고, 탐색 결과에 따라 쓰기 대상 블록을 선정하는 쓰기 블록 선정부;
    상기 선정된 쓰기 대상 블록에 상기 체크포인트 트랜잭션에 포함된 데이터를 상기 비휘발성 스토리지에 쓰기 연산하는 쓰기 연산 처리부;
    새로 쓰기 연산된 데이터 블록들 및 갱신되지 않은 원본 블록들을 포인팅하도록 원본 트리 구조를 구성하고, 호스트 시스템이 상기 원본 트리 구조의 루트 노드를 포인팅하도록 설정하는 트리 구조 관리부; 및
    상기 새로 쓰기 연산된 데이터 블록들 및 갱신되지 않은 원본 블록들을 포인팅하는 원본 트리 구조와, 상기 직전 버전 블록들 및 상기 갱신되지 않은 원본 블록들을 포인팅하는 직전 트리 구조를 포함하는 비휘발성 스토리지를 포함하는 비휘발성 스토리지 장치.
  21. (a) 체크포인트 트랜잭션에 포함된 데이터에 상응하는 원본 블록의 직전 버전 블록들이 비휘발성 스토리지에서 탐색하고, 탐색 결과에 따라 쓰기 대상 블록을 선정하는 단계;
    (b) 상기 선정된 쓰기 대상 블록에 상기 체크포인트 트랜잭션에 포함된 데이터를 상기 비휘발성 스토리지에 쓰기 연산하는 단계; 및
    (c) 새로 쓰기 연산된 데이터 블록들 및 갱신되지 않은 원본 블록들을 포인팅하도록 구성한 원본 트리 구조의 루트 노드를 호스트 시스템이 포인팅하도록 설정하는 단계를 포함하고,
    상기 비휘발성 스토리지는 상기 새로 쓰기 연산된 데이터 블록들 및 갱신되지 않은 원본 블록들을 포인팅하는 원본 트리 구조와, 상기 직전 버전 블록들 및 상기 갱신되지 않은 원본 블록들을 포인팅하는 직전 트리 구조를 포함하는 것을 특징으로 하는 비휘발성 스토리지의 듀얼 버퍼링 파일 관리 방법.
  22. 청구항 21에 있어서, 상기 (a) 단계는,
    상기 체크포인트 트랜잭션에 포함된 데이터의 원본 블록에 대해 직전 버전 블록이 보전되어 있으면, 상기 비휘발성 스토리지에서 직전 버전이 저장된 블록들을 쓰기 대상 블록으로 선정하는 단계를 포함하는 것을 특징으로 하는 비휘발성 스토리지의 듀얼 버퍼링 파일 관리 방법.
  23. 청구항 22에 있어서, 상기 (a) 단계는,
    상기 직전 트리 구조 및 활성화된 원본 트리 구조를 참조하여, 상기 체크포인트 트랜잭션에 포함된 데이터에 상응하는 데이터 블록에 대한 직전 트리 구조 내의 포인터와 현재 원본 트리 구조의 상응하는 포인터가 서로 다르면, 상기 비휘발성 스토리지에서 상기 직전 트리 구조 내의 포인터에 의해 포인팅되는 직전 버전이 저장된 데이터 블록을 쓰기 대상 블록으로 선정하는 단계를 포함하는 것을 특징으로 하는 비휘발성 스토리지의 듀얼 버퍼링 파일 관리 방법.
  24. 청구항 21에 있어서, 상기 (a) 단계는,
    만약 상기 체크포인트 트랜잭션에 포함된 데이터에 상응하는 원본 블록 또는 상기 원본 블록의 직전 버전 블록을 탐색할 수 없는 경우에는, 상기 비휘발성 스토리지에서 빈 블록을 쓰기 대상 블록으로 선정하는 단계를 포함하는 것을 특징으로 하는 비휘발성 스토리지의 듀얼 버퍼링 파일 관리 방법.
  25. 청구항 24에 있어서, 상기 (a) 단계는,
    상기 체크포인트 트랜잭션에 포함된 데이터가 신규 파일의 데이터 또는 기존 파일의 부가 데이터인 경우에는 상기 비휘발성 스토리지에서 빈 블록을 쓰기 대상 블록으로 선정하는 단계를 포함하는 것을 특징으로 하는 비휘발성 스토리지의 듀얼 버퍼링 파일 관리 방법.
  26. 청구항 24에 있어서, 상기 (a) 단계는,
    상기 체크포인트 트랜잭션에 포함된 데이터가 기존 파일의 갱신 데이터로서 온전한 직전 트리 구조가 존재하지 않는 경우에는, 상기 비휘발성 스토리지에서 빈 블록을 쓰기 대상 블록으로 선정하는 단계를 포함하는 것을 특징으로 하는 비휘발성 스토리지의 듀얼 버퍼링 파일 관리 방법.
  27. 청구항 24에 있어서, 상기 (a) 단계는,
    상기 직전 트리 구조 및 원본 트리 구조를 참조하여, 상기 체크포인트 트랜잭션에 포함된 데이터가 기존 파일의 갱신 데이터이고, 상기 직전 트리 구조가 온전히 존재하며, 해당 갱신 데이터에 상응하는 기존 파일의 데이터 블록에 대한 직전 트리 구조 내의 포인터와 현재 원본 트리 구조의 상응하는 포인터가 서로 동일한 경우에는, 상기 비휘발성 스토리지에서 빈 블록을 쓰기 대상 블록으로 선정하는 단계를 포함하는 것을 특징으로 하는 비휘발성 스토리지의 듀얼 버퍼링 파일 관리 방법.
  28. 청구항 21에 있어서, 상기 (b) 단계는,
    만약 빈 블록이 쓰기 대상 블록으로 선정된 경우에는 데이터 블록 전체를 쓰기 연산하고, 만약 직전 버전 블록이 쓰기 대상 블록으로 선정된 경우에는, 데이터 비교 쓰기(Data-Comparison Write, DCW) 기법에 따라, 갱신될 데이터 블록 중에서 변경된 부분만 쓰기 연산하는 단계를 포함하는 것을 특징으로 하는 비휘발성 스토리지의 듀얼 버퍼링 파일 관리 방법.
  29. 청구항 21에 있어서, 상기 (c) 단계는,
    직전 버전 블록들 및 직전 트리 구조가 온전히 보전되어 있는 경우에는,
    직전 버전 블록들에 덮어 쓴 갱신 버전 블록들 및 원본 블록들을 포인팅하도록 상기 직전 트리 구조를 갱신하여 새로운 원본 트리 구조를 구성하고,
    호스트 시스템이 상기 새로운 원본 트리 구조의 루트 노드를 포인팅하도록 설정하는 단계를 포함하는 것을 특징으로 하는 비휘발성 스토리지의 듀얼 버퍼링 파일 관리 방법.
  30. 청구항 29에 있어서, 상기 직전 트리 구조가 저장된 블록들은 해당 데이터 블록의 갱신이 있기 전까지 쓰기 보호되는 것을 특징으로 하는 비휘발성 스토리지의 듀얼 버퍼링 파일 관리 방법.
  31. 청구항 29에 있어서, 상기 직전 트리 구조가 저장된 블록들은 빈 블록과 동등하게 또는 빈 블록에 비해 비우선적으로 쓰기 대상 블록으로 선정되는 것을 특징으로 하는 비휘발성 스토리지의 듀얼 버퍼링 파일 관리 방법.
  32. 청구항 29에 있어서, 상기 직전 트리 구조는 상기 비휘발성 스토리지의 내부에, 또는 외부의 저장 공간에 저장되어 보전되는 것을 특징으로 하는 비휘발성 스토리지의 듀얼 버퍼링 파일 관리 방법.
  33. 청구항 29에 있어서, 상기 원본 트리 구조는 각각의 파일에 관하여 원본 블록을 포인팅하는 포인터와 상기 원본 블록의 직전 버전 블록을 포인팅하는 포인터를 하나의 쌍으로 포함하는 것을 특징으로 하는 비휘발성 스토리지의 듀얼 버퍼링 파일 관리 방법.
  34. 청구항 21에 있어서, 상기 (c) 단계는,
    상기 직전 트리 구조가 온전히 존재하고 상기 체크포인트 트랜잭션에 포함된 데이터가 신규 파일의 데이터인 경우에는, 새로 쓰기 연산된 데이터 블록들을 추가로 포인팅하도록 직전 트리 구조를 갱신하여 새로운 원본 트리 구조를 구성하고, 호스트 시스템이 새로운 원본 트리 구조의 루트 노드를 포인팅하도록 설정하는 단계를 포함하는 것을 특징으로 하는 비휘발성 스토리지의 듀얼 버퍼링 파일 관리 방법.
  35. 청구항 21에 있어서, 상기 (c) 단계는,
    상기 직전 트리 구조가 온전히 존재하고 상기 체크포인트 트랜잭션에 포함된 데이터가 기존 파일의 데이터이지만 직전 버전 블록이 존재하지 않은 경우에는, 새로 쓰기 연산된 갱신 버전 블록들 또는 부가 블록들 및 원본 블록들을 포인팅하도록 직전 트리 구조를 갱신하여 새로운 원본 트리 구조를 구성하고, 호스트 시스템이 새로운 원본 트리 구조의 루트 노드를 포인팅하도록 설정하는 단계를 포함하는 것을 특징으로 하는 비휘발성 스토리지의 듀얼 버퍼링 파일 관리 방법.
  36. 청구항 21에 있어서, 상기 (c) 단계는,
    직전 트리 구조가 온전하게 존재하지 않은 경우에는, 새로 쓰기 연산된 데이터 블록들 및 갱신되지 않은 원본 블록들을 포인팅하도록, 상기 원본 트리 구조의 갱신되지 않는 부분과 상기 새로 쓰기 연산된 데이터 블록들을 위한 새로운 포인터들을 조합하여 새로운 원본 트리 구조를 구성하고, 호스트 시스템이 새로운 원본 트리 구조의 루트 노드를 포인팅하도록 설정하는 단계를 포함하는 것을 특징으로 하는 비휘발성 스토리지의 듀얼 버퍼링 파일 관리 방법.
  37. 청구항 21에 있어서, 호스트 시스템의 버퍼 캐시에서 쓰기 연산의 대상이 되는 더티 캐시들의 컨텐츠들을 비휘발성 스토리지에 기록하기 위한 상기 체크포인트 트랜잭션을 생성하는 단계를 더 포함하는 것을 특징으로 하는 비휘발성 스토리지의 듀얼 버퍼링 파일 관리 방법.
  38. 청구항 21에 있어서, 호스트 시스템의 쓰기 연산의 대상이 되는 메모리 블록들의 컨텐츠들을 비휘발성 스토리지에 기록하기 위한 상기 체크포인트 트랜잭션을 생성하는 단계를 더 포함하는 것을 특징으로 하는 비휘발성 스토리지의 듀얼 버퍼링 파일 관리 방법.
  39. 컴퓨터에서 청구항 21 내지 청구항 38 중 어느 한 청구항에 따른 비휘발성 스토리지의 듀얼 버퍼링 파일 관리 방법을 구현할 수 있는 프로그램이 수록된 컴퓨터로 독출 가능한 기록 매체.
KR1020130036737A 2013-04-04 2013-04-04 비휘발성 메모리를 위한 듀얼 버퍼링 파일 관리 방법, 파일 관리 시스템 및 대용량 저장 장치 KR101456104B1 (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR1020130036737A KR101456104B1 (ko) 2013-04-04 2013-04-04 비휘발성 메모리를 위한 듀얼 버퍼링 파일 관리 방법, 파일 관리 시스템 및 대용량 저장 장치

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020130036737A KR101456104B1 (ko) 2013-04-04 2013-04-04 비휘발성 메모리를 위한 듀얼 버퍼링 파일 관리 방법, 파일 관리 시스템 및 대용량 저장 장치

Publications (2)

Publication Number Publication Date
KR20140121013A true KR20140121013A (ko) 2014-10-15
KR101456104B1 KR101456104B1 (ko) 2014-11-04

Family

ID=51992668

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020130036737A KR101456104B1 (ko) 2013-04-04 2013-04-04 비휘발성 메모리를 위한 듀얼 버퍼링 파일 관리 방법, 파일 관리 시스템 및 대용량 저장 장치

Country Status (1)

Country Link
KR (1) KR101456104B1 (ko)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20200060220A (ko) * 2018-11-22 2020-05-29 서강대학교산학협력단 비휘발성 메모리 기반 파일 시스템 및 이를 이용한 데이터 갱신 방법
KR20210086150A (ko) * 2019-12-31 2021-07-08 성균관대학교산학협력단 메모리 스왑 방법 및 시스템
CN114697060A (zh) * 2020-12-29 2022-07-01 广州腾讯科技有限公司 业务控制方法、装置和电子设备

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101789933B1 (ko) * 2016-07-19 2017-10-25 울산과학기술원 데이터 일관성을 위한 컴퓨팅 시스템 및 방법

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8456926B2 (en) * 2010-11-18 2013-06-04 Grandis, Inc. Memory write error correction circuit
US20110261616A1 (en) * 2010-04-26 2011-10-27 Mosaid Technologies Incorporated Write scheme in phase change memory

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20200060220A (ko) * 2018-11-22 2020-05-29 서강대학교산학협력단 비휘발성 메모리 기반 파일 시스템 및 이를 이용한 데이터 갱신 방법
KR20210086150A (ko) * 2019-12-31 2021-07-08 성균관대학교산학협력단 메모리 스왑 방법 및 시스템
US11625187B2 (en) 2019-12-31 2023-04-11 Research & Business Foundation Sungkyunkwan University Method and system for intercepting a discarded page for a memory swap
CN114697060A (zh) * 2020-12-29 2022-07-01 广州腾讯科技有限公司 业务控制方法、装置和电子设备
CN114697060B (zh) * 2020-12-29 2024-05-07 广州腾讯科技有限公司 业务控制方法、装置和电子设备

Also Published As

Publication number Publication date
KR101456104B1 (ko) 2014-11-04

Similar Documents

Publication Publication Date Title
US20230117542A1 (en) Remote Data Replication Method and System
US10649897B2 (en) Access request processing method and apparatus, and computer device
EP3724764B1 (en) Write-ahead style logging in a persistent memory device
CN105843551B (zh) 高性能和大容量储存重复删除中的数据完整性和损耗电阻
JP5948340B2 (ja) データストレージシステムにおける、ファイルのクローニング及びデクローニング
JP6309103B2 (ja) スナップショットおよびクローンの複製
US7761655B2 (en) Storage system and method of preventing deterioration of write performance in storage system
CN108319602B (zh) 数据库管理方法及数据库系统
US10152416B2 (en) Buffer cache apparatus, journaling file system and journaling method for incorporating journaling features within non-volatile buffer cache
US10019323B1 (en) Method and system for container data recovery in a storage system
US8280858B2 (en) Storage pool scrubbing with concurrent snapshots
US8261030B2 (en) Using delete notifications to free related storage resources
CN101743546A (zh) 用于提供快照的文件系统的分层存储管理
US11030092B2 (en) Access request processing method and apparatus, and computer system
US9940071B2 (en) Memory system that carries out an atomic write operation
US10229127B1 (en) Method and system for locality based cache flushing for file system namespace in a deduplicating storage system
US9015526B2 (en) Restoring method and computer system
KR101456104B1 (ko) 비휘발성 메모리를 위한 듀얼 버퍼링 파일 관리 방법, 파일 관리 시스템 및 대용량 저장 장치
US20150302021A1 (en) Storage system
KR101676175B1 (ko) 전원 손실 이후 데이터 손실을 방지하기 위한 메모리 저장 장치 및 방법
KR101541532B1 (ko) 스토리지 클래스 메모리의 데이터 일관성 유지를 위한 장치 및 방법
US10712941B2 (en) Leveraging temporal locality to link files together and bypass accessing a central inode list
TW202409840A (zh) 非暫態電腦可讀取媒體、儲存裝置、及儲存方法
KR101404129B1 (ko) 데이터 저장 시스템 및 데이터 관리 방법
KR20200102337A (ko) 캐시라인 컨시어스 익스텐더블 해싱 방법 및 장치

Legal Events

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

Payment date: 20171020

Year of fee payment: 4

FPAY Annual fee payment

Payment date: 20181002

Year of fee payment: 5

FPAY Annual fee payment

Payment date: 20191001

Year of fee payment: 6