KR101690824B1 - 순서 의존성 없는 일관성 - Google Patents

순서 의존성 없는 일관성 Download PDF

Info

Publication number
KR101690824B1
KR101690824B1 KR1020127017771A KR20127017771A KR101690824B1 KR 101690824 B1 KR101690824 B1 KR 101690824B1 KR 1020127017771 A KR1020127017771 A KR 1020127017771A KR 20127017771 A KR20127017771 A KR 20127017771A KR 101690824 B1 KR101690824 B1 KR 101690824B1
Authority
KR
South Korea
Prior art keywords
logical
repository
storage
objects
copy
Prior art date
Application number
KR1020127017771A
Other languages
English (en)
Other versions
KR20120104302A (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 KR20120104302A publication Critical patent/KR20120104302A/ko
Application granted granted Critical
Publication of KR101690824B1 publication Critical patent/KR101690824B1/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/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/0614Improving the reliability of storage systems
    • G06F3/0619Improving the reliability of storage systems in relation to data integrity, e.g. data losses, bit errors
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • 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/44Arrangements for executing specific programs
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/0614Improving the reliability of storage systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0646Horizontal data movement in storage systems, i.e. moving data in between storage devices or systems
    • G06F3/065Replication mechanisms
    • 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/0683Plurality of storage devices
    • 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
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/067Distributed or networked storage systems, e.g. storage area networks [SAN], network attached storage [NAS]

Abstract

본원에 기술된 대상의 양태들은 저장 시스템에서 일관성을 유지하는 것에 관한 것이다. 양태 면에서, 트랜잭션 내에서 하나 이상의 객체들이 업데이트될 수 있다. 객체들의 업데이트와 함께, 객체들의 논리적 복사본을 얻고 수정할 수 있다. 업데이트된 논리적 복사본을 기록하기 위한 요청을 저장 장치 컨트롤러로 전송한다. 논리적 복사본은 원본에 겹쳐쓰지 않는다. 요청 전송과 함께, 디스크에 저장하기 위한 데이터 구조가 저장 장치 컨트롤러에 제공된다. 데이터 구조는 디스크에 기록되었어야 할 하나 이상의 객체를 나타내고, 디스크에 기록되어야 했던 컨텐츠를 나타내는 인증 데이터를 포함할 수 있다. 복구하는 동안, 이 데이터 구조는 모든 객체(들)가 정확하게 디스크에 기록되었는지를 결정하는 데 사용될 수 있다.

Description

순서 의존성 없는 일관성{CONSISTENCY WITHOUT ORDERING DEPENDENCY}
디스크 성능을 향상시키기 위한 노력의 일환으로, 디스크 제조업자들은 캐시(caches)가 있는 디스크를 만들어 왔다. 이전에는 디스크로부터 데이터를 읽을 때 이들 캐시를 사용하였지만, 최근에는 디스크에 데이터를 기록할 때에도 사용할 수 있다. 특히, 운영 체제에서 디스크에 데이터 기록 요청을 할 때, 데이터가 디스크 캐시로부터 비휘발성 디스크 메모리에 실제 전송되기 전에 디스크 컨트롤러는 데이터가 기록되었다고 보고할 수 있다. 또한, 비휘발성 디스크 메모리에 데이터가 기록되는 순서는 디스크 컨트롤러에서 데이터를 수신하는 순서와 다를 수 있다. 이러한 동작은 일관성(consistency)을 유지하고자 하는 시스템들에서 문제가 된다.
본원에서 특허청구된 대상은 임의의 단점을 해결하거나 또는 전술한 바와 같은 환경에서만 동작하는 실시예에 제한되는 것은 아니다. 그보다는, 본 배경기술은 본원에 기술된 몇몇 실시예들이 실시될 수 있는 기술 분야의 일례를 설명하기 위해서만 제공된다.
간략하게, 본원에 기술된 대상의 양태들은 저장 시스템에서 일관성을 유지하는 것에 관한 것이다. 양태 면에서, 트랜잭션(transaction) 내에서 하나 이상의 객체들이 업데이트될 수 있다. 객체들의 업데이트와 함께, 객체들의 논리적 복사본(logical copies)을 얻고 수정할 수 있다. 업데이트된 논리적 복사본을 기록하기 위한 요청을 저장 장치 컨트롤러로 전송한다. 논리적 복사본은 원본에 겹쳐쓰지 않는다. 요청 전송과 함께, 디스크에 저장하기 위한 데이터 구조가 저장 장치 컨트롤러에 제공된다. 데이터 구조는 디스크에 기록되었어야 할 하나 이상의 객체를 나타내고, 디스크에 기록되어야 했던 컨텐츠를 나타내는 인증 데이터를 포함할 수 있다. 복구하는 동안, 이 데이터 구조는 모든 객체(들)가 정확하게 디스크에 기록되었는지를 결정하는 데 사용될 수 있다.
본 요약은 아래의 상세한 설명에서 추가적으로 설명되는 대상의 몇몇 양태들을 간략하게 식별하기 위한 것이다. 본 요약은 특허청구된 대상의 핵심적인 특징 또는 필수적인 특징을 밝히기 위한 것이 아니며, 특허청구된 대상의 범위를 결정하는 데 일조하기 위한 것도 아니다.
“본원에 기술된 대상”이라는 표현은 본문에서 명시적으로 다르게 언급하지 않는 한, 상세한 설명에 기술된 대상을 말한다. "양태들"이라는 용어는 "적어도 하나의 양태"로 해석되어야 한다. 상세한 설명에 기술된 대상의 양태들을 식별하는 것은 특허청구된 대상의 핵심적인 특징 또는 필수적인 특징을 밝히기 위한 것이 아니다.
상기의 양태들 및 본원에 기술된 대상의 기타 양태들은 예를 들어 설명되며, 유사한 참조 번호가 유사한 구성 요소를 가리키는 첨부 도면에 제한되지 않는다.
도 1은 본원에 기술된 대상의 양태들을 포함할 수 있는 예시적인 범용 컴퓨팅 환경을 나타내는 블록도이다.
도 2는 본원에 기술된 대상의 양태들이 동작할 수 있는 시스템의 컴포넌트들의 예시적인 배치를 나타내는 블록도이다.
도 3은 본원에 기술된 대상의 양태들을 도시하는 블록도이다.
도 4는 본원에 기술된 대상의 양태들에 따라 단일 객체가 트랜잭션(transaction) 내에서 수정될 때 발생 가능한 예시적인 동작을 일반적으로 나타내는 순서도이다.
도 5는 본원에 기술된 대상의 양태들에 따라 다수의 객체가 트랜잭션 내에서 수정될 때 발생 가능한 예시적인 동작을 일반적으로 나타내는 순서도이다.
정의
본원에서 사용된 바와 같이, 용어 “포함하는” 및 그 변형은 “포함하지만, 그에 제한되지 않는”을 의미하는 개방형 용어로 해석되어야 한다. 용어 “또는”은 본문에서 명시적으로 다르게 언급하지 않는 한 “및/또는”으로 해석되어야 한다. 용어 “기반하여”는 “적어도 부분적으로는 기반하여”로 해석되어야 한다. 용어 “일 실시예” 및 “실시예”는 “적어도 하나의 실시예”로 해석되어야 한다. 용어 “다른 실시예”는 “적어도 하나의 다른 실시예”로 해석되어야 한다. 기타 정의는, 명시적으로 그리고 암시적으로, 아래에 포함될 수 있다.
예시적인 운영 환경
도 1은 본원에 기술된 대상의 양태들이 구현될 수 있는 적절한 컴퓨팅 시스템 환경(100)의 예를 도시한다. 컴퓨팅 시스템 환경(100)은 단지 적절한 컴퓨팅 환경의 일례이고, 본원에 기술된 대상의 양태들의 사용 또는 기능의 범위에 제한을 가하도록 의도된 것은 아니다. 컴퓨팅 환경(100)은 예시적인 운영 환경(100)에 도시된 컴포넌트들 중 임의의 하나 또는 조합에 관하여 임의의 종속성(dependency) 또는 요구 사항(requirement)을 갖는 것으로 해석되어서는 안 된다.
본원에 기술된 대상의 양태들은 많은 다른 범용 또는 전용 컴퓨팅 시스템 환경들 또는 구성들로 동작될 수 있다. 본원에 기술된 대상의 양태들과 함께 사용하기에 적절한 공지된 컴퓨팅 시스템, 환경, 또는 구성의 예로는 퍼스널 컴퓨터, 서버 컴퓨터, 핸드헬드(hand-held) 또는 랩탑 장치, 멀티프로세서 시스템, 마이크로프로세서 기반 시스템, 셋탑박스(set-top box), 프로그램 가능한 소비자 가전(programmable consumer electronics), 네트워크 PC, 미니컴퓨터, 메인프레임 컴퓨터, PDA(personal digital assistant), 게임 장치, 프린터, 셋-탑을 포함하는 가전 제품, 미디어 센터, 또는 기타 가전 제품, 자동차 내장 또는 부착 컴퓨팅 장치, 기타 이동 장치, 상기의 시스템들 또는 장치들 중 임의의 것을 포함하는 분산형 컴퓨팅 환경 등이 포함된다.
본원에 기술된 대상의 양태들은 컴퓨터로 실행가능한, 프로그램 모듈 등의 컴퓨터 실행 가능 인스트럭션과 일반적으로 관련하여 기술될 수 있다. 일반적으로, 프로그램 모듈은 특정 태스크를 수행하거나 특정 추상 데이터 타입을 구현하는 루틴, 프로그램, 객체, 컴포넌트, 데이터 구조 등을 포함한다. 또한, 본원에 기술된 대상의 양태들은 통신 네트워크를 통해 링크된 원격 처리 장치에 의해 태스크를 수행하는 분산형 컴퓨팅 환경에서 실시될 수 있다. 분산형 컴퓨팅 환경에서, 프로그램 모듈은 메모리 저장 장치를 포함하는 로컬 컴퓨터 저장 매체와 원격 컴퓨터 저장 매체 모두에 배치될 수 있다.
도 1을 참조하면, 본원에 기술된 대상의 양태들을 구현하기 위한 예시적인 시스템은 컴퓨터(110)의 형태의 범용 컴퓨팅 장치를 포함한다. 컴퓨터는 인스트럭션을 실행할 수 있는 임의의 전자 장치일 수 있다. 컴퓨터(110)의 컴포넌트들로는, 처리 장치(120), 시스템 메모리(130), 및 시스템 메모리를 포함한 각종 시스템 컴포넌트들을 처리 장치(120)에 접속시키는 시스템 버스(121)가 포함될 수 있지만, 이에 한정되는 것은 아니다. 시스템 버스(121)는, 메모리 버스 또는 메모리 컨트롤러, 주변 버스(peripheral bus), 및 다양한 버스 아키텍처 중의 임의의 것을 사용하는 로컬 버스를 포함하는 여러 유형의 버스 구조 중 임의의 것일 수 있다. 예로서, 이러한 아키텍처로는 ISA(Industry Standard Architecture) 버스, MCA(Micro Channel Architecture) 버스, EISA(Enhanced ISA) 버스, VESA(Video Electronics Standards Associate) 로컬 버스, 및 메자닌(Mezzanine) 버스로도 알려진 PCI(Peripheral Component Interconnect) 버스, PCI-X(Peripheral Component Interconnect Extended) 버스, AGP(Advanced Graphics Port) 및 PCIe(PCI express) 버스가 포함되지만, 이에 한정되는 것은 아니다.
컴퓨터(110)는 통상적으로 다양한 컴퓨터 판독 가능 매체를 포함한다. 컴퓨터 판독 가능 매체는 컴퓨터(110)에 의해 액세스될 수 있는 임의의 이용 가능한 매체일 수 있고, 휘발성 및 비휘발성 매체, 이동식(removable) 및 비이동식(non-removable) 매체를 모두 포함한다. 예를 들어, 컴퓨터 판독 가능 매체는 컴퓨터 저장 매체 및 통신 매체를 포함할 수 있지만, 이에 한정되는 것은 아니다.
컴퓨터 저장 매체는 컴퓨터 판독 가능 인스트럭션, 데이터 구조, 프로그램 모듈 또는 다른 데이터와 같은 정보의 저장을 위한 임의의 방법 또는 기술로 구현되는 휘발성 및 비휘발성, 이동식 및 비이동식 매체를 모두 포함한다. 컴퓨터 저장 매체로는 RAM, ROM, EEPROM, 플래쉬 메모리 또는 기타 메모리 기술, CD-ROM, DVD(digital versatile disk) 또는 기타 광 디스크 저장 장치, 자기 카세트, 자기 테이프, 자기 디스크 저장 장치 또는 기타 자기 저장 장치, 또는 컴퓨터(110)에 의해 액세스될 수 있고 원하는 정보를 저장하는 데 사용될 수 있는 임의의 기타 매체가 포함한다.
통신 매체는 통상적으로 반송파(carrier wave) 또는 기타 전송 메커니즘 등의 변조된 데이터 신호에 컴퓨터 판독 가능 인스트럭션, 데이터 구조, 프로그램 모듈, 또는 다른 데이터를 구현하며, 임의의 정보 전달 매체를 포함한다. "변조된 데이터 신호(modulated data signal)"라는 용어는 신호 내에 정보를 인코딩하도록 설정 또는 변환된 특성을 하나 이상 갖는 신호를 의미한다. 예를 들어, 통신 매체로는 유선 네트워크 또는 직접 유선 접속 등의 유선 매체와, 음향, RF, 적외선, 및 기타 무선 매체 등의 무선 매체가 포함되지만, 이에 한정되지 않는다. 또한, 상기의 것들 중 임의의 조합이 컴퓨터 판독 가능 매체의 범위 내에 포함되어야 한다.
시스템 메모리(130)는 ROM(131) 및 RAM(132) 등의 휘발성 및/또는 비휘발성 메모리 형태의 컴퓨터 저장 매체를 포함한다. 시동(start-up)과 같은 때에 컴퓨터(110) 내의 구성 요소들 간의 정보 전송을 돕는 기본 루틴을 포함하는 BIOS(basic input/output system)(133)는 일반적으로 ROM(131)에 저장된다. RAM(132)은 일반적으로 처리 장치(120)에 즉시 액세스될 수 있고 및/또는 처리 장치(120)에 의해 현재 작동되고 있는 프로그램 모듈 및/또는 데이터를 포함한다. 예로서, 도 1은 운영 체제(134), 애플리케이션 프로그램(135), 기타 프로그램 모듈(136), 및 프로그램 데이터(137)를 도시하지만, 이에 한정되지 않는다.
또한, 컴퓨터(110)는 다른 이동식/비이동식, 휘발성/비휘발성 컴퓨터 저장 매체를 포함할 수 있다. 단지 예로서, 도 1에는 비이동식, 비휘발성 자기 매체로부터 판독하거나 그 자기 매체에 기록하는 하드 디스크 드라이브(141), 이동식, 비휘발성 자기 디스크(152)로부터 판독하거나 그 자기 디스크에 기록하는 자기 디스크 드라이브(151), 및 CD-ROM, 기타 광학 매체 등의 이동식, 비휘발성 광디스크(156)로부터 판독하거나 그 광 디스크에 기록하는 광 디스크 드라이브(155)가 도시되어 있다. 예시적인 운영 환경에서 사용될 수 있는 다른 이동식/비이동식, 휘발성/비휘발성 컴퓨터 저장 매체로는 자기 테이프 카세트, 플래쉬 메모리 카드, DVD, 기타 광 디스크, 디지털 비디오 테이프, 고체 상태 드라이브, 고체 상태 RAM, 고체 상태 ROM, 둘 이상의 저장 매체를 포함하는 혼합 장치, 각 장치가 유사한 및/또는 다른 특성을 포함 가능한 단일 장치로 논리적으로 다루어지는 일련의 저장 장치 등을 포함한다. 하드 디스크 드라이브(141)는 통상적으로 인터페이스(140)와 같은 비이동식 메모리 인터페이스를 통해 시스템 버스(121)에 접속되고, 자기 디스크 드라이브(151) 및 광 디스크 드라이브(155)는 통상적으로 인터페이스(150)와 같은 이동식 메모리 인터페이스에 의해 시스템 버스(121)에 접속된다.
로컬 저장을 하는 인터페이스에 더해서, 인터페이스(140)는 SAN(storage area network) 기반 인터페이스, NAS(network addressed storage) 기반 인터페이스, SAN 및 NAS의 혼합 인터페이스를 포함할 수 있다. SAN 및/또는 NAS는 파이버 채널(Fibre Channel), SCSI, iSCSI, PCI-X, 이더넷, USB, 또는 저장 매체와 통신하기 위한 기타 상호 접속 기술을 사용할 수 있다.
앞서 논의되고 도 1에 도시된 드라이브 및 그 관련 컴퓨터 저장 매체는 컴퓨터(110)를 위한 컴퓨터 판독 가능 인스트럭션, 데이터 구조, 프로그램 모듈, 및 기타 데이터의 저장을 제공한다. 도 1에서, 예를 들어, 하드 디스크 드라이브(141)는 운영 체제(144), 애플리케이션 프로그램(145), 기타 프로그램 모듈(146), 및 프로그램 데이터(147)를 저장하는 것으로 도시되어 있다. 이러한 컴포넌트들은 운영 체제(134), 애플리케이션 프로그램(135), 기타 프로그램 모듈(136), 및 프로그램 데이터(137)와 동일할 수도 있고 다를 수도 있다. 운영 체제(144), 애플리케이션 프로그램(145), 기타 프로그램 모듈(146), 및 프로그램 데이터(147)는 최소한 이들이 다른 복사본(different copies)임을 나타내기 위하여 다른 참조 번호가 부여된다.
사용자는 일반적으로 마우스, 트랙볼, 또는 터치 패드라 불리우는 포인팅 장치(161) 및 키보드(162)와 같은 입력 장치를 통해 컴퓨터(110)에 명령어 및 정보를 입력할 수 있다. 다른 입력 장치(도시되지 않음)로는 마이크로폰, 조이스틱, 게임 패드, 위성 안테나, 스캐너, 접촉 감지 스크린, 필기용 태블릿(writing tablet) 등이 포함될 수 있다. 이들 및 그 외의 입력 장치들은 시스템 버스에 연결된 사용자 입력 인터페이스(160)를 통해 처리 장치(120)에 접속되곤 하지만, 병렬 포트, 게임 포트, USB(universal serial bus)와 같은 기타 인터페이스 및 버스 구조에 의해 접속될 수 있다.
모니터(191) 또는 다른 유형의 디스플레이 장치도 비디오 인터페이스(190) 등의 인터페이스를 통해 시스템 버스(121)에 접속된다. 모니터 외에도, 컴퓨터는 출력 주변 인터페이스(195)를 통해 접속될 수 있는 스피커(197), 프린터(196) 등의 기타 주변 출력 장치를 포함할 수도 있다.
컴퓨터(110)는 원격 컴퓨터(180)와 같은 하나 이상의 원격 컴퓨터로의 논리적 접속(logical connection)을 이용한 네트워크 환경에서 동작할 수 있다. 원격 컴퓨터(180)는 퍼스널 컴퓨터, 서버, 라우터, 네트워크 PC, 피어(peer) 장치, 또는 기타 일반적인 네트워크 노드일 수 있으며, 비록 도 1에는 메모리 저장 장치(181)만이 도시되어 있지만, 일반적으로는 컴퓨터(110)에 관하여 전술한 구성 요소 중 다수 또는 전부를 포함할 수 있다. 도 1에 도시된 논리적 접속은 LAN(171)과 WAN(173)을 포함하지만, 그 외의 네트워크를 포함할 수도 있다. 이러한 네트워크 환경은 사무실, 전사적 컴퓨터 네트워크(enterprise-wide computer network), 인트라넷, 및 인터넷에서 일반적인 것이다.
LAN 네트워크 환경에서 사용되는 경우, 컴퓨터(110)는 네트워크 인터페이스 또는 어댑터(170)를 통해 LAN(171)에 접속된다. WAN 네트워크 환경에서 사용되는 경우, 컴퓨터(110)는 일반적으로 인터넷 등의 WAN(173)을 통해 통신을 구축하기 위한 모뎀(172) 또는 기타 수단을 포함한다. 내장형 또는 외장형일 수 있는 모뎀(172)은 사용자 입력 인터페이스(160) 또는 기타 적절한 메커니즘을 통해 시스템 버스(121)에 접속될 수 있다. 네트워크 환경에서, 컴퓨터(110)에 관하여 도시된 프로그램 모듈 또는 그 일부분은 원격 메모리 저장 장치에 저장될 수 있다. 예로서, 도 1은 원격 애플리케이션 프로그램(185)이 메모리 장치(181)에 상주하는 것으로 도시하고 있지만, 이에 한정되지 않는다. 도시된 네트워크 접속은 예시적인 것이며, 컴퓨터들 간의 통신 링크를 구축하는 기타의 수단이 사용될 수도 있다.
일관성
앞서 언급한 바와 같이, 캐싱 및 순서가 뒤바뀐 디스크 기록은 일관성을 유지하고자 하는 시스템에서 문제가 된다. 본원에서는 때때로, 트랜잭션이라는 용어가 사용된다. 트랜잭션은 원자성(atomic), 일관성(consistent), 고립성(isolated) 및 지속성(durable) 등을 포함하는 여러 특성들을 포함할 수 있는 동작들의 그룹이다. 본원에 사용된 바와 같이, 트랜잭션은 적어도 원자 특성을 포함하며, 상기의 다른 특성들 중 하나 이상을 포함할 수 있다.
원자 특성은, 그룹의 모든 동작이 성공하거나 그렇지 않다면, 그룹의 동작들의 실질적인 결과(예컨대, 파일 변경)가 취소(undone), 폐기(discarded) 또는 미적용되는 동작들의 그룹을 지칭하는 데 사용된다. 편의를 위해, 트랜잭션 내에서 행해진 임의의 변경이 그 변경에 관련된 객체에 확실하게 반영되지 않도록 적절한 임의의 행동을 취하는 것을 가리키기 위해 폐기라는 용어가 때때로 사용된다. 폐기는 취소, 폐기, 업데이트 동작을 적용하지 않음 등을 포함할 수 있다.
예를 들어, 어느 한 계좌로부터 인출 및 다른 계좌로의 입금, 이 두 동작의 원자 집합(atomic set)으로써 계좌 이체를 구현할 수 있다. 이 두 동작이 모두 성공하지 못하면, 이체는 불공평하게 은행이나 예금주 둘 중 하나에게 유리해진다. 따라서, 두 동작 모두가 트랜잭션 안에서 성공하게 되거나, 아니면 성공한 임의의 트랜잭션의 실질적인 결과(예컨대, 디스크나 메모리에 저장된 데이터)가 폐기된다.
본원에서 “트랜잭션”이 사용되면, 반드시 그런 것은 아니지만, 이는 그 트랜잭션에 관여한 컴포넌트가 트랜잭션이 발생하고 있다는 것을 알고 있음을 의미한다. 예를 들어, 컴포넌트는 둘 이상의 객체가 트랜잭션에 관여하고 있음을 확실히 알고 있을 수 있다. 전술한 바와 같이, 컴포넌트는 객체들에 대한 동작에 원자 특성을 강요할 수 있다. 다른 예로써, 컴포넌트는 트랜잭션이 발생하고 있음을 알고 있지 못할 수도 있다. 대신에, 컴포넌트는 자신에게 부여된 둘 이상의 동작이 성공적으로 완료되는지 아니면 동작 결과가 폐기되는지에 대해 결정을 내리거나 또는 지시를 받을 수 있다.
상기의 첫번째 예시에서, 객체들이 트랜잭션에 관여하고 있다는 분명한 정보가 컴포넌트에게 제공되었다. 두번째 예시에서는, 컴포넌트는 트랜잭션이 둘 이상의 동작에 영향을 미치는 것에 대해 알지 못했을 수 있다. 오히려, 컴포넌트는 원자 특성을 동작에 강요하기 위한 지시를 받았을 수 있다. 본원에 기술된 대상의 양태들은 상기의 예시 모두에 적용될 수 있다.
나아가, 하나 이상의 객체가 “트랜잭션 내에서(in the context of a transaction)” 수정되면, 이는 하나 이상의 객체를 수정하도록 발행된 업데이트 동작에 대해 원자 특성이 강요될 것이라는 가정이 있음을 의미한다. 예를 들어, 트랜잭션 내에서 수정을 요청하는 애플리케이션은 수정을 하기 위한 모든 업데이트 동작들이 성공할 것이라거나, 아니면, 성공했거나 성공했을 수 있는 업데이트가 폐기될 것이라고 가정해도 무방할 것이다.
도 2는 본원에 기술된 대상의 양태들이 동작할 수 있는 시스템의 컴포넌트들의 예시적인 배치를 나타내는 블록도이다. 도 2에 도시된 컴포넌트들은 예시적인 것으로, 필요하거나 포함될 수 있는 컴포넌트들을 모두 포함하고자 의도한 것은 아니다. 다른 실시예에서, 도 2와 관련하여 설명된 컴포넌트 및/또는 기능은 다른 컴포넌트에 포함되거나(도시되거나 도시되지 않음), 또는 본원에 기술된 대상의 양태들의 사상 또는 범위를 벗어나지 않으면서 서브컴포넌트에 위치할 수 있다. 몇몇 실시예에서, 도 2와 관련하여 설명된 컴포넌트 및/또는 기능은 다수의 장치에 분산될 수도 있다.
다시 도 2로 가서, 시스템(205)은 하나 이상의 애플리케이션(210), API(215), 일관성 컴포넌트(220), 저장소(250), 통신 메커니즘(255) 및 기타 컴포넌트들(도시되지 않음)을 포함할 수 있다. 시스템(205)은 하나 이상의 컴퓨팅 장치를 포함할 수 있다. 이러한 장치에는 예컨대, 퍼스널 컴퓨터, 서버 컴퓨터, 핸드헬드 또는 랩탑 장치, 멀티프로세서 시스템, 마이크로프로세서 기반 시스템, 셋탑박스, 프로그램 가능한 소비자 가전, 네트워크 PC, 미니컴퓨터, 메인프레임 컴퓨터, PDA(personal digital assistant), 게임 장치, 프린터, 셋-탑을 포함하는 가전 제품, 미디어 센터, 또는 기타 가전 제품, 자동차 내장 또는 부착 컴퓨팅 장치, 기타 이동 장치, 상기의 시스템들 또는 장치들 중 임의의 것을 포함하는 분산형 컴퓨팅 환경 등이 포함된다.
시스템(205)이 하나의 장치를 포함하면, 시스템(205)으로 동작하도록 구성될 수 있는 예시적인 장치는 도 1의 컴퓨터(110)를 포함한다. 시스템(205)이 다수의 장치를 포함하면, 다수의 장치 각각은 유사하거나 또는 다르게 구성된 도 1의 컴퓨터(110)를 포함할 수 있다.
일관성 컴포넌트(220)는 복구 관리자(recovery manager)(225), 체크포인트 관리자(checkpoint manager)(230), I/O 관리자(235) 및 기타 컴포넌트들(도시되지 않음)을 포함할 수 있다. 본원에서 사용된 바와 같이, 컴포넌트라는 용어는 장치의 전부 또는 일부, 일련의 하나 이상의 소프트웨어 모듈이나 그 일부, 하나 이상의 소프트웨어 모듈 또는 그 일부와 하나 이상의 장치 또는 그 일부의 조합 등을 포함하는 것으로 해석되어야 한다.
통신 메커니즘(255)에 의해 시스템(205)은 다른 엔티티들과 통신할 수 있다. 예를 들어, 통신 메커니즘(255)을 통해 시스템(205)이 원격 호스트 상의 애플리케이션들과 통신할 수 있게 된다. 통신 메커니즘(255)은 도 1과 관련하여 설명한 바와 같이 통신을 구축하는 네트워크 인터페이스 또는 어댑터(170), 모뎀(172), 또는 임의의 다른 메커니즘일 수 있다.
저장소(250)는 데이터에 대한 액세스를 제공할 수 있는 임의의 저장 매체이다. 저장소는 휘발성 메모리(예컨대, 캐시) 및 비휘발성 메모리(예컨대, 영속(persistent) 저장 장치)를 포함할 수 있다. 데이터라는 용어는 하나 이상의 컴퓨터 저장 구성 요소로 표현될 수 있는 모든 것을 포함하도록 광범위하게 해석되어야 한다. 논리적으로, 데이터는 휘발성 또는 비휘발성 메모리에서 1과 0의 연속으로 표현될 수 있다. 비-이진(non-binary) 저장 매체가 있는 컴퓨터에서, 데이터는 저장 매체의 기능에 따라 표현될 수 있다. 데이터는, 숫자, 문자 등과 같은 단순한 데이터 유형, 계층적이거나, 링크되거나(linked) 또는 그 밖의 관련 데이터 유형, 다수의 다른 데이터 구조나 단순한 데이터 유형을 포함하는 데이터 구조 등을 포함하는 여러 다른 유형의 데이터 구조로 조직될 수 있다. 데이터의 몇 가지 예로 정보, 프로그램 코드, 프로그램 상태, 프로그램 데이터, 기타 데이터 등을 들 수 있다.
저장소(250)는 하드 디스크 저장 장치, 기타 비휘발성 저장 장치, RAM과 같은 휘발성 메모리, 다른 저장소, 상기의 조합 등을 포함할 수 있으며, 다수의 장치에 분산될 수도 있다. 저장소(250)는 외부 또는 내부에 있거나, 또는 시스템(205)의 내외부에 있는 컴포넌트들을 포함할 수 있다.
저장소(250)는 저장 장치 컨트롤러(storage controller)(240)를 통해 액세스할 수 있다. 본원에서 사용된 액세스란 데이터 판독, 데이터 기록, 데이터 삭제, 데이터 업데이트, 상기 둘 이상을 포함하는 조합 등을 포함할 수 있다. 저장 장치 컨트롤러(240)는 저장소(250)에 액세스하기 위한 요청을 수신하고, 이러한 요청을 적절하게 수행할 수 있다. 저장 장치 컨트롤러(240)는 데이터를 수신한 순서대로 저장소(250)에 기록하는 것을 보장하지 않도록 처리될 수도 있다. 나아가, 저장 장치 컨트롤러(240)는, 저장 장치 컨트롤러(240)가 저장소(250)의 비휘발성 메모리에 데이터를 실제로 기록하기 전에 요청된 데이터를 기록했다고 나타낼 수도 있다.
하나 이상의 애플리케이션(210)은 자원을 생성, 제거 또는 업데이트하기 위한 트랜잭션에 관련될 수 있는 임의의 프로세스를 포함한다. 이런 프로세스는 사용자 모드 또는 커널 모드(kernel mode)로 실행될 수 있다. 본원에서 사용된 용어 “프로세스” 및 그 변형은 하나 이상의 전통적인 프로세스, 쓰레드, 컴포넌트, 라이브러리, 태스크를 수행하는 객체 등을 포함할 수 있다. 프로세스는 하드웨어, 소프트웨어, 하드웨어와 소프트웨어의 조합으로 구현할 수 있다. 실시예에서, 프로세스는 이른바, 동작을 실행할 수 있거나 동작을 실행하는 데 사용되는 임의의 메커니즘이다. 프로세스는 다수의 장치들 또는 하나의 장치에 분산될 수 있다. 하나 이상의 애플리케이션(210)은 API(215)를 거쳐 I/O 관리자(235)에 (예컨대, 함수/메소드 콜(method call)를 통해) 파일 시스템 요청을 할 수 있다.
I/O 관리자(235)는 저장 장치 컨트롤러(240)(또는 다른 중간 컴포넌트)에 어떤 I/O 요청 또는 요청들을 발행할 지를 결정할 수 있다. I/O 관리자(235)는 파일 시스템 요청에 관련된 동작들이 진행되거나, 완료되거나 또는 실패할 때, 하나 이상의 애플리케이션(210)에 데이터를 반환할 수도 있다. 파일 시스템 요청이 트랜잭션을 수반하면, I/O 관리자(235)는 트랜잭션 관리자(도시되지 않음)에게 이를 알려, 트랜잭션 관리자가 그 트랜잭션을 적절하게 관리하게 할 수 있다. 몇몇 실시예에서, 트랜잭션 관리자의 기능은 I/O 관리자(235)에 포함될 수도 있다.
아래에서는, 일관성 및 실패 후 복구를 용이하게 하도록 저장소(250)에 데이터를 기록하는 예시적인 알고리즘이 제공된다. 이런 알고리즘에서 제시된 바대로, 각 객체는 Dn으로 표시되며, 여기서 n은 시스템에 대해 객체를 식별한다. 객체들은 직렬화될 수 있다고(serializable)(즉, 저장소(250)에 데이터로 표현될 수 있음) 가정한다. 객체 테이블은 각각의 객체 식별자를 저장소(250) 상의 각 위치와 연계시킨다.
수정 트랜잭션 내에서 처음 Dn이 업데이트될 때, n을 사용하여 객체 테이블에서 위치를 검색으로써 Dn의 위치를 찾을 수 있다. 이러한 예에서 사용하기 위해, 저장소(250) 상에서 Dn의 저장 위치를 L1이라 한다.
그 다음에, 저장소(250)로부터 L1의 컨텐츠가 판독되고, 객체는 역직렬화될 수 있으며(de-serialized)(예컨대, 직렬화된 형식에서 객체의 구조로 변화됨), 수정되어야 할 객체의 부분이 메인 시스템 메모리에 복사된다. 메모리의 해당 부분(또는 그 복사본)에서 업데이트가 실행된다. 수정 중인 메모리의 부분과 함께, 저장소(250)의 하나 이상의 새로운 위치(이를 L2라고 하자)가 수정된 부분에 할당된다.
본원에서는 때때로 메인 시스템 메모리의 이들 복사본을 객체의 “논리적 복사본”이라고도 한다. 객체의 논리적 복사본은 객체를 표현하는 데 사용할 수 있는 하나 이상의 데이터 구조를 포함한다. 논리적으로, 논리적 복사본은 객체의 사본(duplicate)이다. 물리적으로, 논리적 복사본은 객체의 사본을 생성하는 데 사용가능한 데이터(다른 데이터에 대한 포인터를 포함)를 포함할 수 있다. 예를 들어, 일 구현예에서, 논리적 복사본은 객체의 실제 복사본(예컨대, 비트 단위 복사본)이거나, 또는 객체를 생성하는 데 사용될 수 있는 데이터를 포함하는 데이터 구조일 수 있다. 다른 구현예에서, 수정되지 않은 논리적 복사본은 원래(original) 객체를 나타내는 하나 이상의 포인터를 포함한다. 논리적 복사본이 수정될 때, 논리적 복사본의 포인터들은 (예컨대, 논리적 복사본의 변경된 부분에 대해서) 새로운 메모리 위치를 가리키는 한편, 다른 포인터들은 (예컨대, 논리적 복사본의 변경되지 않은 부분에 대해서) 원래 객체의 부분을 가리킬 수 있다. 포인터를 사용함으로써, 원래 객체의 수정되지 않은 데이터와 함께 수정된 데이터를 사용하여 수정된 복사본을 구성할 수 있다. 객체의 사본을 생성하는 데 필요한 저장 공간을 줄이기 위해 논리적 복사본을 생성할 수 있다.
게다가, 본원에서 때때로 직렬화 및 역직렬화가 언급되더라도, 본원에 기술된 대상의 양태들을 직렬화 및 역직렬화라고 통상적으로 여겨지는 것으로 제한하려는 의도는 없다. 일 실시예에서, 직렬화된 버전이 역직렬화된 버전과 비트 단위로 동일할 수 있다. 다른 실시예에서, 직렬화된 버전의 비트들은 역직렬화된 버전의 비트들과 다른 형식과 순서로 포장될 수도 있다. 실제로, 일 실시예에서, 직렬화와 역직렬화는 객체들을 표현하는 데이터를 저장소에서 저장하고 검색하는 임의의 메커니즘을 의미하는 것으로 해석되어야 한다. 예를 들어, 다른 메커니즘으로는 저장소에 대한 객체의 문자 포맷의 기록 특성, 저장소에서의 객체의 마크업(markup) 언어의 인코딩 특성, 저장소에 객체의 특성 및 다른 특징을 저장하는 기타 방법 등을 포함할 수 있다.
시스템이 원할 때(예컨대, 트랜잭션의 커밋(commit) 후에 또는 어떤 다른 시점에), 시스템은 수정된 논리적 복사본을 다시 안정적인 매체로 직렬화시킬 수 있으며, 이는 위치 L2에서 직렬화된다. 수정된 논리 복사본을 새로운 위치에 기록하고자 하는 의도를 기록 플랜(write plan)이라 한다. 기록 플랜은 하나 이상의 객체에 대한 임의의 수의 업데이트를 포함할 수 있다. 기록 플랜은 하나 이상의 트랜잭션에서 생긴 변경을 참조할 수 있다. 다수의 기록 플랜을 하나의 기록 플랜으로 결합할 수도 있다.
체크포인트 직후에 수정이 생기면, 복구 블록이라고 불리는 블록(다수의 위치에서 중복될 수 있음)이 수정된 논리적 복사본의 시작(즉, L2)을 가리키도록 수정된다. L2에 있는 객체의 필드(field)는 다음에 기록될 위치를 가리킨다. 이 필드는 일련의 기록 플랜의 링크를 나타낸다.
논리적 복사본의 기록 요청을 전송하는 것과 함께, 객체 테이블을 수정할 수 있다. 특히, 객체의 식별자에 의해 인덱싱된 위치 값은 수정된 논리적 복사본이 저장될 위치 값(즉, L2)으로 설정될 수 있다. 이는 객체 Dn의 위치의 다음번 검색에서 객체의 새로운 버전인 위치 L2를 참조하도록 하기 위해 행해진다.
트랜잭션이 여러 객체, 예컨대, Di 및 Dj를 수정하는 경우, 객체들은 서로 “원자적으로 묶인(atomically bound)” 것으로 여겨지고, 하나의 기록 플랜으로 기록된다. 기록 플랜은 (예컨대, 관련 객체들에 대한 링크로) 이 관계를 명시할 수 있다.
임의의 수의 객체들이 이러한 방식으로 계속될 수 있다. 주기적으로, 객체 테이블은 임의의 다른 객체와 동일한 방식으로 저장소(250)에 기록될 수도 있다.
저장소(250)에 객체 테이블을 기록하기 위한 요청을 전송하는 것과 함께, 플러시 명령어(flush command)를 저장 장치 컨트롤러(240)에 전송할 수도 있다. 플러시 명령어는 아직 기록되지 않은 휘발성 메모리의 모든 데이터를 저장소(250)의 비휘발성 메모리에 기록하라고 저장 장치 컨트롤러(240)에 지시한다.
주기적으로, 체크포인트가 발생할 수 있다. 체크포인트는 저장소(250)에 저장되어 있는 체크포인트 기록(record)으로 나타낼 수 있다. 체크포인트는 아무때나 기록할 수 있으며, 플러시 후에도 안정되고/지속될 수 있다. 안정/지속이란 체크포인트가 저장소의 비휘발성 메모리에 저장되어 있음을 말한다.
체크포인트가 안정되고/지속된 다음에는, 오래되고 사용되지 않은 객체들의 복사본(또는 그 일부)에 사용된 공간을 재사용할 수 있다. 플러시가 완료된 후에, 복구 블록은 일련의 다음 기록 플랜의 시작을 가리키게 된다. 일 실시예에서, 복구 블록은 객체 테이블의 새로운 위치에 대한 일련의 기록 플랜의 시작을 가리킬 수 있다.
본원에 기술된 대상의 양태들을 도시하는 블록도인 도 3과 함께 보다 구체적인 예를 설명한다. 도시된 바와 같이, 도 3은 메인 메모리(305) 및 저장소(250)를 나타낸다. 선(307)은 메인 메모리(305)와 저장소(250) 사이의 경계선을 나타낸다. 선(310) 위의 객체들은 메인 메모리에 있으며, 선(310) 아래의 객체들은 저장소(250)의 휘발성 또는 비휘발성 메모리에 있다.
객체들(314 및 316)이 메인 메모리(305)에서 보여진다. 구현 시에, 객체들(314 및 316)은 각각 객체들(319 및 321)의 역직렬화된 논리적 복사본일 수 있다. 객체(319)는 저장소(250)의 위치(1550)에 있고, 객체(320)는 저장소(250)의 위치(200)에 있으며, 객체(321)는 저장소(250)의 위치(800)에 있다.
객체 테이블(310)은 저장소(250) 상에서의 객체들(314 및 316)의 위치를 나타내는 키값 쌍(key value pairs)을 포함한다. 키값 쌍은 객체들(314 및 316)의 식별자(n)를 사용하여 인덱싱된다.
트랜잭션이 (예컨대, 그 이름을 foo.txt로 변경함으로써) 객체(316)를 수정할 때, 일관성 컴포넌트(예컨대, 도 2의 일관성 컴포넌트(220))는 업데이트된 객체에 대한 새로운 저장 위치(예컨대, 위치(801))를 결정할 수 있다. 객체가 파일이면, 트랜잭션 내에서 그 이름을 업데이트함으로써 파일을 포함하는 디렉토리도 트랙잭션에 관여하게 될 수 있다. 예를 들어, 파일 이름이 변경되면, 파일을 표현하는 객체 및 파일을 포함하는 디렉토리를 표현하는 객체 모두가 트랜잭션에 관여할 필요가 있다. 이런 경우에, 객체를 포함하는 디렉토리는 객체(314)로 표현되고, 업데이트된 디렉토리의 논리적 복사본(예컨대, 객체(318))은 저장소(250)에서 객체(323)로 표현된다. 또한, 테이블(310)은 테이블(311)로 논리적으로 업데이트되어, 수정된 객체들(즉, 객체들(317 및 318))의 새로운 저장 위치(즉, 801 및 1000)를 나타내게 된다.
트랜잭션 안에서의 객체의 수정이 다른 객체에도 영향을 미친다는 점은 도 2의 I/O 관리자(235) 또는 다른 컴포넌트에 의해 분명하게 나타내어지거나 결정되어질 수 있다.
둘 이상의 객체들이 트랜잭션의 업데이트에 관여할 때, 앞서 언급한 바와 같이 그 객체들은 “원자적으로 묶여진” 것으로 여겨진다. 복구 동작에서, 트랜잭션 내에서 변경된 모든 객체들에 대한 변경이 저장소(250)에서 발견되지 않으면, 발견된 모든 변경은 폐기된다. 즉, 객체들 중 한 객체에 대한 변경이 발견되었으나 다른 객체에 대한 변경이 발견되지 않으면, 객체들 중 그 한 객체에 대한 변경은 폐기된다.
둘 이상의 객체들을 원자적으로 묶기 위해, 일 실시예에서, 포인터가 저장되거나, 아니면 저장소(250)의 각 객체와 연계될 수 있다. 포인터는 트랜잭션에 관여한 다른 객체(또는 그 일부)의 저장 위치를 나타낼 수 있다. 트랜잭션에 관여한 추가적인 객체가 없는 경우, 포인터는 “데드 블록(dead block)”을 가리키거나 또는, 다른 기록 플랜의 “헤드(head)” 객체의 저장 위치를 나타낼 수 있다. 이 헤드 객체는 기록 플랜, 기록 플랜의 수정된 객체(또는 그 일부) 등을 포함할 수 있다.
파일 시스템은 많은 트랜잭션에 관여할 수 있기 때문에, 성능 상의 이유로, 다른 트랜잭션이 완료될 때까지 완료된 트랜잭션의 “마지막(last)” 객체에 대한 기록 변경 요청을 기다리는 것이 바람직할 수 있다. 트랜잭션의 마지막 객체는 다른 기록 플랜의 “헤드(head)” 객체를 가리키는 포인터에 관련될 수 있다. 그러나, “헤드” 객체의 저장 위치는 다른 트랜잭션이 완료될 때까지 알 수 없다. 따라서, 일련의 기록 플랜을 계속하기 위해, 다른 기록 플랜의 헤드 객체에 대한 저장 위치를 알 때까지 기록 플랜의 “마지막” 객체는 기록되지 않을 수 있다.
트랜잭션의 “마지막” 객체가 비휘발성 메모리에 기록되기 전에, 디스크가 전원이 꺼지거나 고장이 나면, 상기의 방법은 기록 플랜에서의 변경을 폐기한다. 트랜잭션의 빈도가 낮은 시스템에서 이런 결과를 피하기 위해, 몇몇 실시예에서, 1) 다른 트랜잭션이 완료되거나, 2) 다음 저장 위치에 포인터와 함께 “마지막” 객체를 기록하기 전에 타임아웃 시간이 지나가는 것 중에서 먼저 일어나는 것의 그 시점까지 일관성 컴포넌트가 기다릴 수 있거나, 또는 일관성 컴포넌트는 3) 다음 저장 위치에 포인터와 함께 “마지막” 객체를 항상 기록할 수 있다. 상기의 2) 및 3)에서, 일관성 컴포넌트는 “마지막” 객체가 가리킬 저장 위치를 결정할 수 있다. 이 저장 위치는 다른 기록 플랜의 “헤드” 객체를 가리키는 포인터를 갖고 있을 수 있다. “마지막” 객체가 가리키는 이 저장 위치는 종종 “데드 블록”이라고도 한다. 이러한 방식으로, 트랜잭션 동안 생긴 변경 손실을 줄일 수 있다.
다음 저장 위치로의 포인터뿐만 아니라, “가리키는” 객체의 정확한 컨텐츠를 나타내기 위해 데이터를 저장소(250)에 저장할 수도 있다. 예를 들어, 가리키는 객체의 정확한 컨텐츠를 나타내는 해시(hash)가 저장될 수 있다.
도 3에 제시된 예에서, 객체(322)와 관련된 포인터는 객체(323)와 관련된 저장 위치를 가리킬 수 있다. 포인터는 그 두 객체들을 함께 묶는다. 복구 중에, 어느 하나의 객체를 발견하지 못하거나 또는 객체들이 정확한 컨텐츠를 갖고 있지 않은 경우, 발견된 객체들에서 보여준 변경들은 폐기될 수 있다.
저장소(250)의 특성으로 인해, 저장소(250)의 비휘발성 메모리에 어떤 객체가 먼저 기록될 것인지는 확실하게 할 수 없다. 객체(322)가 먼저 기록되고 객체(323)가 기록되지 않으면, 객체(322)의 포인터는 미심쩍은 데이터(spurious data)를 갖고 있을 수 있는 저장 위치를 가리킬 것이다. 그러나, 저장 위치에서 데이터의 해시를 계산하고 이 해시를 객체(322)와 함께 저장된 해시와 비교함으로써, 일관성 컴포넌트는 객체(323)에 대한 올바르지 않는 데이터(invalid data)를 탐지할 수 있다. 이 경우, 복구되는 동안, 일관성 컴포넌트는 객체들(322 및 323)에서 보여준 변경들을 폐기할 수 있다.
복구 블록(330)은 체크포인트 후에 데이터가 저장되었어야 하는 제 1 저장 위치(이 경우 801)를 가리킨다. 복구 블록(330)은 또한 제 1 저장 위치에 저장된 객체의 올바른 컨텐츠를 사용하여 계산되는 해시를 포함하거나 또는 이 해시와 연계될 수 있다.
복구되는 동안, 먼저, 마지막으로 알려진 좋은 버전의 객체 테이블이 복구된다. 마지막으로 알려진 좋은 버전의 객체 테이블은 저장소(250)의 비휘발성 메모리에 성공적으로 저장된 마지막 논리 객체 테이블이다. 다음으로, 복구 블록(330)이 가리키고 있는 것으로부터 시작하는 기록 플랜이 검사된다.
기록 플랜은 트랜잭션에 관여한 수정된 모든 논리적 복사본을 저장소(250)에 기록하기 위한 의도이다. 기록 플랜은, 기록 플랜에 관여한 객체들의 저장 위치로의 링크와 함께 기록 플랜에 관여한 객체의 개수를 나타내는 데이터를 통해 저장소에서 인코딩될 수 있다. 일 실시예에서, 객체의 개수를 나타내는 데이터는 기록 플랜의 “헤드” 객체에 저장될 수 있는 한편, 다음 저장 위치에 링크된 데이터는 저장소(250)에 기록된 각 구성 요소와 함께 저장될 수 있다. 다른 실시예에서, 객체의 개수와 저장 위치로의 링크들을 포함하는 데이터 구조는 기록 플랜과 관련된 저장 위치 중 어느 하나(예컨대, 저장 위치의 “헤드”)에 저장되거나 또는 저장 위치와는 별개로 저장될 수 있다. 다른 실시예에서, 기록 플랜은 다음 저장 위치만을 포함할 수도 있다.
일 실시예에서, 체크포인트 후에 발생하는 기록 플랜들은 기록 플랜들 사이의 “링크” 없이 비휘발성 저장 매체에서 알고 있는 위치에 기록될 수 있다. 이런 실시예에서, 복구 중에, 기록 플랜에서 표시한 기록들이 성공적이라면, 복구 관리자는 알고 있는 위치로부터 각 기록 플랜을 판독하고 객체 테이블 및 다른 저장 데이터 구조들을 적절하게 업데이트할 수 있다.
상기의 예시들은 기록 플랜의 구성 요소들을 나타내는 데 사용가능한 데이터 구조들의 유형을 모두 포함하거나 총망라하기 위한 것은 아니다. 본원의 기재에 기반하여, 본원에 기술된 대상의 양태들의 사상 또는 범위를 벗어나지 않고서 기록 플랜의 구성 요소들을 나타내는 데 사용가능한 다른 데이터 구조들을 당업자라면 알 수 있을 것이다.
각 기록 플랜을 검사할 때, 기록 플랜의 객체들이 저장소(250)에 성공적으로 기록되었는지를 결정한다. 예를 들어, 이는 기록 플랜과 관련된 각 저장 위치의 컨텐츠의 해시를 위치에 대한 링크와 관련된 해시와 비교함으로써 실행될 수 있다. 해시들이 기록 플랜의 모든 객체들에 대해 같은 값을 갖는다면(equivalent), 객체 테이블이 객체들의 새로운 위치를 반영하도록 업데이트된다. 어느 해시든 등가가 아니라면, 복구는 중단된다.
복구가 끝난 후에, 객체 테이블은 성공적인 기록 플랜에 의해 업데이트된 모든 객체들의 루트(root)의 위치를 갖게 되며, 플랜과 관련된 모든 객체들이 디스크의 비휘발성 메모리에 성공적으로 기록되었을 때 성공적인 기록 플랜이 된다.
다시 도 2에서, API(215)는 트랜잭션에 관련된 객체를 수정하기 위한 요청을 수신할 수 있다. 이에 대응하여, I/O 관리자(235)는 저장소의 저장 위치(예컨대, L1)에 객체를 두고, 객체의 논리적 복사본을 생성하고, 트랜잭션 내에서 객체에 변경을 가하고, 논리적 복사본을 변경된 대로 저장하기 위한 제 2 저장 위치(예컨대, L2)를 결정하고, 논리적 복사본을 변경된 대로 기록하기 위한 요청을 저장 장치 컨트롤러(240)에 전송하고, 논리적 복사본이 제 2 저장 위치에 저장됨을 나타내도록 휘발성 데이터 구조(예컨대, 객체 테이블(310))를 업데이트할 수 있다.
API(215)가 트랜잭션에 관여한 다른 객체를 수정하기 위한 요청을 수신하면, I/O 관리자(235)는 다른 객체와 제 1 객체를 함께 묶는 연관 관계(association)(예컨대, 기록 플랜)를 생성하는 것을 포함하는 추가적인 동작을 실행할 수 있다. 다음으로, 객체의 수정을 기록하기 위한 요청을 저장소에 전송하는 것과 함께, I/O 관리자(235)는 저장 장치 컨트롤러(240)에 연관 관계를 기록하기 위한 요청도 전송할 수 있다.
체크포인트 관리자(230)는 저장 장치 컨트롤러(240)에 휘발성 데이터 구조(예컨대, 객체 테이블)를 기록하기 위한 요청을 전송하고, 저장 장치 컨트롤러(240)에 플러시 요청을 전송하도록 동작할 수 있다. 플러시 요청은 저장소(250)의 휘발성 메모리의 데이터를 저장소(250)의 비휘발성 메모리로 플러시하도록 저장 장치 컨트롤러(240)에 지시한다.
복구 관리자(225)는 전술한 복구 동작을 실행할 수 있다. 가리킨 위치에서 올바른 컨텐츠를 포함하는지를 결정하는 데 있어, 복구 관리자(225)는 변경된 대로의 논리적 복사본의 저장된 해시와 제 2 저장 위치에서 판독한 컨텐츠로부터 계산된 해시와의 비교에 기반하여, 변경된 대로의 논리적 복사본이 제 2 저장 위치에 기록되었는지를 결정할 수 있다. 해시가 같은 값을 갖는다면, 복구 관리자는 논리적 복사본이 제 2 저장 위치에 저장됨을 나타내도록, 다른 데이터 구조(예컨대, 마지막으로 알려진 좋은 상태로부터 구성된 객체 테이블)를 업데이트하도록 동작할 수도 있다. (예컨대, 기록 플랜이 성공적이었기 때문에) 저장소에서의 할당된/여유 데이터 구조는 유효한(valid) 기록이라고 현재 알려진 위치들과 일치되도록 업데이트될 수 있다.
도 4 및 5는 본원에 기술된 대상의 양태들에 따라 발생 가능한 동작을 일반적으로 나타내는 순서도이다. 설명의 간결함을 위해, 도 4 및 5와 관련하여 설명되는 방법은 일련의 동작으로 도시되고 기술된다. 본원에 기술된 대상의 양태들은 예시된 동작에 의해 및/또는 동작의 순서에 의해 제한되지 않음을 이해할 것이다. 일 실시예에서, 아래에서 설명되는 순서대로 동작들이 일어난다. 다른 실시예에서는, 한편, 동작들이 동시에, 다른 순서대로, 및/또는 본원에 제시되거나 기술되지 않은 다른 동작들과 함께 일어날 수 있다. 게다가, 도시된 동작들 전부가 본원에 기술된 대상의 양태들에 따른 방법을 구현하는 데 꼭 필요한 것은 아닐 수도 있다. 또한, 당업자라면 상태도를 통해 서로 밀접한 관계가 있는 일련의 상태들로써 또는 이벤트로써 방법을 표현할 수 있음을 이해하고 알 것이다.
도 4는 본원에 기술된 대상의 양태들에 따라 단일 객체가 트랜잭션 내에서 수정될 때 발생 가능한 예시적인 동작을 일반적으로 나타내는 순서도이다. 블록(405)에서, 동작들이 시작된다. 예를 들어, 도 2 및 3을 참조하면, API(215)는 객체(316)의 데이터를 업데이트하기 위한 요청을 수신할 수 있다.
블록(410)에서, 트랜잭션의 업데이트에 관여한 객체의 표식(indication)이 수신된다. 예를 들어, 도 2 및 3을 참조하면, I/O 관리자(235)는 객체(316)의 식별자(10)를 수신할 수 있다.
블록(415)에서, 저장소의 제 1 저장 위치에서 객체가 찾아진다. 예를 들어, 도 2 및 3을 참조하면, I/O 관리자(235)는 객체 테이블(310)을 참고하여 객체(321)의 위치(800)를 결정할 수 있다. 객체(321)는, 예를 들어, 객체(316)의 직렬화된 표현에 해당할 수 있다.
블록(420)에서, 트랜잭션 내에서 객체에 가해진 변경을 포함하는 객체의 논리적 복사본이 생성된다. 예를 들어, 도 3을 참조하면, (예컨대, 객체(317)로 표현된) 논리적 복사본이 생성되고, 트랜잭션 내에서 지정된 업데이트로 업데이트된다.
블록(425)에서, 업데이트된 논리적 복사본을 저장하기 위한 새로운 위치가 결정된다. 예를 들어, 도 2 및 3을 참조하면, I/O 관리자(235)는 위치(801)가 (예컨대, 객체(317)로 표현된) 업데이트된 논리적 복사본의 직렬화된 표현을 저장하는 데 사용될 것인지를 결정할 수 있다.
블록(430)에서, 새로운 위치에 논리적 복사본을 기록하기 위한 요청이 저장 장치 컨트롤러로 전송된다. 예를 들어, 도 2 및 3을 참조하면, I/O 관리자(235)는 저장소(250)의 위치(801)에 객체(317)를 기록하기 위한 요청을 저장 장치 컨트롤러(240)에 전송한다.
블록(435)에서, 다음 위치로의 링크 데이터(linking data)가 제공된다. 전술한 바와 같이, 다른 트랜잭션 내에서 이루어진 변경의 헤드의 저장 위치를 나타내는 데이터를 저장소에 전달하는 것 또는, 다음 트랜잭션 내에서 생긴 변경을 발견하는 데 사용가능한 “데드 블록”을 나타내는 데이터가 있다면 그것을 전송하는 것을 포함할 수 있다. 이 링크 데이터는 논리적 복사본에 기록하기 위한 요청과 동일한 요청에서 전송되거나 다른 요청에서 전송될 수 있다. 예를 들어, 도 2 및 3을 참조하면, I/O 관리자(235)는 다른 트랜잭션 내에서 생긴 데이터 업데이트가 저장소(250)의 저장 위치(1000)를 시작으로 저장될 수 있음을 나타내는 링크 데이터(100)를 전송할 수 있다.
블록(440)에서, 새로운 저장 위치에 객체의 논리적 복사본을 저장하도록 요청된 것을 반영하도록 객체 테이블이 업데이트된다. 예를 들어, 도 2 및 3을 참조하면, I/O 관리자(235)는 ID(10)인 객체의 값이 801로 업데이트되도록 객체 테이블(310)을 업데이트할 수 있다.
블록(445)에서, 다른 동작들이 있다면 실행될 수 있다. 예를 들어, 플러시 명령어에 이어 객체 테이블에 대한 변경을 기록하기 위한 요청을 저장 장치 컨트롤러로 전송할 수 있다. 다른 예로, 복구 동작이 실행될 수도 있다. 전술한 바와 같이, 일 구현예에서, 이런 동작으로는 예컨대, 연결 리스트(linked list)의 헤드의 위치 찾기, 저장소에 기록되지 않은 연결 리스트의 항목과 관련된 객체를 발견할 때까지 연결 리스트를 따라가기(iterating), 연결 리스트를 따라가는 것과 함께, 객체들에 대한 새로운 위치를 나타내도록 객체 테이블을 업데이트하기를 포함할 수 있다.
도 5는 본원에 기술된 대상의 양태들에 따라 다수의 객체가 트랜잭션 내에서 수정될 때 발생 가능한 예시적인 동작을 일반적으로 나타내는 순서도이다. 블록(505)에서, 동작들이 시작된다. 예를 들어, 도 2 및 3을 참조하면, API(215)는 파일의 이름을 업데이트하기 위한 요청을 수신할 수 있다. 예를 들어, 파일의 이름을 업데이트 하는 것은 디렉토리의 데이터 구조를 업데이트하는 것을 포함할 수 있다.
블록(510)에서, 트랜잭션에 관여한 객체들의 하나 이상의 표식을 얻게 된다. 예를 들어, 도 2 및 3을 참조하면, I/O 관리자(235)는 객체(316)의 식별자(10), 및 객체(316)에 대응하는 파일의 이름을 바꾸기 위한 요청을 수신할 수 있다. 파일의 이름이 변경되기 때문에, I/O 관리자(235)(또는 다른 컴포넌트)는 디렉토리(예컨대, 객체(318)에 대응하는 디렉토리)도 트랜잭션에 관여하였는지를 결정할 수 있다. 디렉토리(11)의 ID도 얻을 수 있다.
블록(515)에서, 저장소에서 객체들의 위치를 찾는다. 예를 들어, 도 2 및 3을 참조하면, I/O 관리자(235)는 객체 테이블(310)을 참고하여, 객체들(319 및 321)의 위치(1500 및 800)를 각각 결정할 수 있다. 객체(321)는, 예를 들어, 객체(316)의 직렬화된 표현에 해당하고, 객체(319)는 객체(314)의 직렬화된 표현에 해당할 수 있다.
블록(520)에서, 트랜잭션 내에서 변경된 객체들의 논리적 복사본이 생성된다. 예를 들어, 도 3을 참조하면, (예컨대, 객체들(317 및 318)로 표현된) 논리적 복사본이 생성되고, 트랜잭션 내에서 지정된 업데이트로 업데이트된다.
블록(525)에서, 변경된 객체를 저장하기 위한 새로운 위치가 결정된다. 예를 들어, 도 2 및 3을 참조하면, I/O 관리자(235)는 위치(801)가 (예컨대, 객체(317)로 표현된) 파일의 업데이트된 논리적 복사본의 직렬화된 표현을 저장하는 데 사용될 것인지와 위치(1000)가 (예컨대, 객체(318)로 표현된) 디렉토리의 업데이트된 논리적 복사본의 직렬화된 표현을 저장하는 데 사용될 것인지를 결정할 수 있다.
블록(530)에서, 객체들의 논리적 복사본을 원자 단위로 묶는 연관 관계가 생성된다. 예를 들어, 논리적 복사본들을 연결하는 기록 플랜을 생성할 수 있다. 예를 들어, 도 2 및 3을 참조하면, I/O 관리자(235)는 객체들(317 및 318)을 연결하는 기록 플랜을 생성할 수 있다. 다른 예를 들면, 해시 값과 함께 저장 위치들 간의 참조를 포함하는 연결 리스트를 생성할 수 있다. 전술한 바와 같이, 이들 해시 값은 기록 요청에 관여한 논리적 복사본의 올바른 컨텐츠를 나타낼 수 있다.
블록(535)에서, 연관성과 객체들을 기록하기 위한 요청을 저장소에 전달한다. 앞서 언급한 바와 같이, 이러한 요청은 새로운 복사본을 만들고 객체들의 원본을 저장소에 유지하기 위한 것이다. 예를 들어, 도 2 및 3을 참조하면, I/O 관리자(235)는 객체들(317 및 318)과 함께 기록 플랜을 저장소(250)에 기록하기 위한 요청을 저장 장치 컨트롤러(240)에 전송할 수 있다.
다른 예로, 연관 관계 및 객체들을 기록하기 위한 요청을 전송하는 것은, 논리적 복사본들에 대한 각 저장 위치를 나타내는 데이터 구조를 기록하기 위한 하나 이상의 요청, 논리적 복사본의 하나를 제외한 전부를 저장소에 기록하기 위한 하나 이상의 요청을 전송하는 것 및, 다른 트랜잭션이 완료될 때까지, 사전 결정된 기간이 지날 때까지, 및 체크포인트에 도달할 때까지 등 사전 결정된 이벤트가 발생할 때까지 논리적 복사본의 그 하나를 기록하기 위한 요청의 전송을 기다리는 것을 포함할 수 있다. 다른 트랜잭션이 완료되면, 다른 트랜잭션 내에서 수정된 객체의 논리적 복사본의 저장 위치에 대한 참조와 함께 “마지막” 논리적 복사본을 기록하기 위한 요청의 전송을 포함한 추가적인 동작들을 실행할 수 있다.
블록(540)에서, 객체 테이블이 업데이트된다. 예를 들어, 도 3을 참조하면, 객체 테이블(310)은 새로운 위치들로 업데이트되어 객체 테이블(311)을 생성할 수 있다.
블록(545)에서, 만약 있다면, 다른 동작들도 실행할 수 있다. 예를 들어, 복구 동작을 실행할 수 있다. 이들 복구 동작은 다음을 포함한다:
1. 비휘발성 저장소에서 마지막으로 알려진 객체들의 올바른 저장 위치를 나타내는 제 1 데이터 구조를 얻음;
2. 논리적 복사본들이 저장될 예정이었던 비휘발성 저장소의 저장 위치를 나타내는 다른 데이터 구조를 얻음. 이 데이터 구조는 논리적 복사본들의 올바른 컨텐츠를 나타내는 제 1 해시 집합을 나타냄;
3. 저장 위치에 있는 컨텐츠를 판독;
4. 컨텐츠의 제 2 해시 집합을 계산;
5. 제 1 및 제 2 해시 집합의 해당 항목들의 값이 같다면, 논리적 복사본들이 저장 위치에 저장됨을 나타내도록 제 1 데이터 구조를 업데이트하고, 업데이트된 일련의 다음 로컬 복사본들이 저장소에 저장되어 있다면 그에 대해 상기의 단계들 1 - 5를 반복함;
6. 제 1 및 제 2 해시 집합의 해당 항목들 중 어느 하나라도 등가가 아니라면, 복구 동작을 종료함.
발생할 수 있는 다른 예시적인 동작으로는 모든 논리적 복사본을 저장소의 비휘발성 메모리에 성공적으로 플러시한 후에 객체들의 원본과 관련된 저장 위치들이 사용 가능함을 나타내는 것을 포함한다.
이러한 다른 예시적인 동작들은 발생할 수 있는 동작들을 모두 포함하거나 총망라하기 위한 것은 아니며, 단지 발생할 수 있는 몇몇 다른 동작들의 예를 들기 위해 제공된 것이다.
전술한 상세한 설명에서 볼 수 있듯이, 저장 시스템에서의 일관성 유지와 관련된 양태들이 설명되었다. 본원에 기술된 대상의 양태들은 다양한 수정 및 대안 구성이 가능하지만, 예시된 특정 실시예들만이 도면에 도시되고, 상기에서 상세하게 설명되었다. 특허청구된 대상의 양태들을 개시된 특정 형태로 제한하기 위한 의도는 없으며, 오히려, 그 의도는 본원에 기술된 대상의 각종 양태들의 사상과 범위에 속하는 모든 수정, 대안 구성 및 등가물을 포함하기 위한 것임을 이해하여야 할 것이다.

Claims (20)

  1. 적어도 부분적으로 컴퓨터에 의해 구현되는 방법으로서,
    트랜잭션에 관여하는 객체들의 하나 이상의 표식을 얻는 단계와,
    상기 트랜잭션에 관여하는 상기 객체들을 위한 저장소의 제 1 저장 위치 집합을 찾는 단계와,
    상기 트랜잭션 내에서(in the context of a transaction) 수정된 상기 객체들의 논리적 복사본들을 생성하는 단계와,
    상기 논리적 복사본들을 위한 상기 저장소의 제 2 저장 위치 집합을 결정하는 단계와,
    상기 객체들의 상기 논리적 복사본들을 원자 단위로 묶는 연관 관계를 생성하는 단계와,
    상기 저장소에 상기 객체들의 원본을 유지하면서, 상기 저장소에 상기 연관 관계 및 상기 논리적 복사본들을 기록하기 위한 하나 이상의 요청을 전송하는 단계와,
    장애(failure)가 발생한 후에, 복구 동작(recovery operation)을 수행하는 단계
    를 포함하되, 상기 복구 동작은
    상기 트랜잭션 내에서 수정된 상기 객체들 모두의 복사본이 상기 저장소에 존재하는지 여부를 판정하는 단계와,
    상기 트랜잭션 내에서 수정된 상기 객체들 중 하나의 객체에 대응하는 객체의 복사본이 상기 저장소에 존재하지 않는 것으로 판정될 경우, 상기 트랜잭션 내에서 수정된 상기 저장소 내의 상기 모든 객체들의 복사본에 대한 수정을 폐기하는 단계
    를 포함하는 방법.
  2. 제 1 항에 있어서,
    상기 트랜잭션에 관여하는 객체들의 하나 이상의 표식을 얻는 단계는 상기 트랜잭션 내에서 상기 객체들에 대한 수정 요청과 함께 상기 객체들의 식별자들을 수신하는 단계를 포함하는
    방법.
  3. 제 2 항에 있어서,
    상기 트랜잭션에 관여하는 상기 객체들을 위한 저장소의 제 1 저장 위치 집합을 찾는 단계는 상기 식별자들을 룩업 테이블 내의 키들(keys)로서 이용하는 단계 -상기 룩업 테이블은 상기 키들을 상기 객체들이 저장되는 저장소 내의 위치들과 연관시킴- 를 포함하는
    방법.
  4. 제 1 항에 있어서,
    상기 제 2 저장 위치 집합에서의 각 저장 위치는 상기 제 1 저장 위치 집합에서의 각 저장 위치와 다르며,
    상기 객체들의 논리적 복사본들을 생성하는 단계는 상기 트랜잭션 중에 수정되는 상기 객체들의 일부의 복사본들을 생성하는 단계를 포함하는
    방법.
  5. 제 1 항에 있어서,
    상기 객체들의 상기 논리적 복사본들을 원자 단위로 묶는 연관 관계를 생성하는 단계는 상기 객체들 각각을 참조하는 연결 리스트(linked list)를 생성하는 단계를 포함하는
    방법.
  6. 제 1 항에 있어서,
    상기 객체들의 상기 논리적 복사본들을 원자 단위로 묶는 연관 관계를 생성하는 단계는 상기 논리적 복사본들의 쌍들 간에 링크들을 생성하는 단계 - 각 링크는 상기 논리적 복사본들의 쌍들 중 적어도 하나의 올바른 컨텐츠를 나타내는 해시 값을 포함함 - 를 포함하는
    방법.
  7. 제 1 항에 있어서,
    상기 연관 관계 및 상기 논리적 복사본들을 기록하기 위한 하나 이상의 요청을 전송하는 단계는 상기 논리적 복사본들에 대한 각 저장 위치를 나타내는 데이터 구조를 기록하기 위한 하나 이상의 요청과, 상기 논리적 복사본들 중 하나의 논리적 복사본을 제외한 나머지 논리적 복사본을 상기 저장소에 기록하기 위한 하나 이상의 요청을 전송하는 단계, 및 사전 결정된 이벤트가 발생할 때까지, 상기 논리적 복사본들 중 상기 하나의 논리적 복사본을 기록하기 위한 요청의 전송을 기다리는 단계를 포함하는
    방법.
  8. 제 7 항에 있어서,
    상기 사전 결정된 이벤트가 발생할 때까지, 상기 논리적 복사본들 중 상기 하나의 논리적 복사본을 기록하기 위한 요청의 전송을 기다리는 단계는 다른 트랜잭션이 완료될 때까지, 사전 결정된 기간이 지날 때까지, 및 체크포인트에 도달할 때까지 중 하나 이상에 대해 기다리는 단계를 포함하는
    방법.
  9. 제 8 항에 있어서,
    상기 논리적 복사본들 중 상기 하나의 논리적 복사본을 상기 다른 트랜잭션 내에서 수정된 객체의 논리적 복사본의 저장 위치에 대한 참조와 함께 기록하라는 요청을 전송하는 단계를 더 포함하는
    방법.
  10. 제 1 항에 있어서,
    상기 복구 동작은
    비휘발성 저장소에서 마지막으로 알려진 객체들의 올바른 저장 위치들을 나타내는 제 1 데이터 구조를 얻는 단계와,
    상기 논리적 복사본들이 저장될 예정이었던 상기 비휘발성 저장소의 저장 위치들을 나타내는 다른 데이터 구조를 얻는 단계 -상기 다른 데이터 구조는 상기 논리적 복사본들의 올바른 컨텐츠를 나타내는 제 1 해시 집합을 가리킴- 와,
    상기 저장 위치들에 있는 컨텐츠를 판독하는 단계와,
    상기 컨텐츠의 제 2 해시 집합을 계산하는 단계와,
    상기 제 1 및 제 2 해시 집합의 대응 항목들이 같은 값을 갖는다면, 상기 논리적 복사본들이 상기 저장 위치들에 저장됨을 나타내도록 상기 제 1 데이터 구조를 업데이트하는 단계와,
    상기 제 1 및 제 2 해시 집합의 대응 항목들 중 어느 하나라도 값이 다르다면, 상기 복구 동작을 종료하는 단계
    를 더 포함하는 방법.
  11. 제 1 항에 있어서,
    상기 객체들의 상기 원본에 관련된 상기 저장 위치들이 사용가능함을 나타내는 단계와,
    모든 논리적 복사본들을 상기 저장소의 비휘발성 메모리에 성공적으로 플러시한 후에 상기 논리적 복사본들에 관련된 상기 저장 위치가 유효함을 나타내는 단계
    를 더 포함하는 방법.
  12. 실행될 경우 동작을 수행하는 컴퓨터 실행가능 인스트럭션을 포함하는 컴퓨터 저장 매체로서,
    상기 동작은
    하나 이상의 트랜잭션의 업데이트에 관여하는 객체의 표식을 얻는 단계와,
    저장소의 제 1 저장 위치에서 상기 객체를 찾는 단계와,
    상기 하나 이상의 트랜잭션 내에서 상기 객체에 일어난 변경을 포함하는 상기 객체의 논리적 복사본을 생성하는 단계와,
    상기 논리적 복사본을 저장하기 위한 상기 저장소의 제 2 저장 위치를 결정하는 단계와,
    변경된 상기 논리적 복사본을 상기 제 2 저장 위치에 기록하기 위한 요청을 전송하는 단계와,
    상기 요청의 전송과 함께, 다른 트랜잭션에 관한 논리적 복사본이 있다면, 상기 논리적 복사본이 기록될 다음 위치를 나타내는 데이터를 제공하는 단계와,
    상기 논리적 복사본이 상기 제 2 저장 위치에 저장됨을 나타내도록 휘발성 데이터 구조를 업데이트하는 단계와,
    상기 저장소에 상기 휘발성 데이터 구조에 대한 변경을 기록하기 위한 요청을 전송하고, 상기 변경을 기록하기 위한 요청의 전송과 함께, 플러시 명령어를 상기 저장소에 전송하는 단계 -상기 플러시 명령어는 상기 저장소와 연계된 캐시를 상기 저장소의 비휘발성 메모리에 기록할 것을 상기 저장소의 컨트롤러에 지시함-
    를 포함하는 컴퓨터 저장 매체.
  13. 제 12 항에 있어서,
    저장소의 제 1 저장 위치에서 상기 객체를 찾는 단계는, 상기 객체의 식별자를 수신하고, 상기 식별자를 사용하여 식별자들과 저장 위치들을 연계시키는 데이터 구조에서 연관 관계를 찾는 단계를 포함하는
    컴퓨터 저장 매체.
  14. 제 12 항에 있어서,
    상기 동작은 상기 저장소에 상기 휘발성 데이터 구조에 대한 변경을 기록하기 위한 요청을 전송한 후에 다른 트랜잭션 내에서 행해진 변경들을 저장하기 위한 저장소 위치를 나타내도록 상기 휘발성 데이터 구조를 업데이트하는 단계를 더 포함하는
    컴퓨터 저장 매체.
  15. 제 12 항에 있어서,
    상기 동작은 복구 동작을 실행하는 단계를 더 포함하며,
    상기 복구 동작은
    연결 리스트의 헤드를 찾는 단계 -상기 연결 리스트의 각 항목은 상기 연결 리스트에 의해 지정된 상기 저장소의 위치에 기록되어야 했던 논리적 복사본과 관련됨- 와,
    상기 연결 리스트의 항목이 상기 항목과 관련된 상기 위치에 기록되지 않은 논리적 복사본에 관련될 때까지, 상기 연결 리스트를 따라가는 단계와,
    상기 연결 리스트를 따라가면서, 항목에서 지정한 위치에 논리적 복사본이 기록된 각 항목에 대해, 상기 논리적 복사본과 관련된 객체의 새로운 위치를 나타내는 데이터 구조를 업데이트하는 단계
    를 포함하는 컴퓨터 저장 매체.
  16. 제 12 항에 있어서,
    상기 동작은 복구 동작을 실행하는 단계를 더 포함하고,
    상기 복구 동작은
    상기 객체의 논리적 복사본에 대한 변경들 및 상기 객체와 원자적으로 묶인(atomically bound) 적어도 하나의 다른 객체의 각각의 논리적 복사본에 대한 변경들이 상기 저장소에 기록되었는지 여부를 판정하는 단계와,
    상기 객체의 논리적 복사본 및 상기 적어도 하나의 다른 객체의 각각의 논리적 복사본 중 적어도 하나에 대응하는 변경들이 상기 저장소에 기록되지 않은 것으로 판정될 경우, 상기 객체의 논리적 복사본 및 상기 적어도 하나의 다른 객체의 논리적 복사본에 대응하는, 상기 저장소에 기록된 변경들을 폐기하는 단계
    를 포함하는 컴퓨터 저장 매체.
  17. 컴퓨팅 환경에서의 시스템으로서,
    트랜잭션에 관여한 객체를 수정하기 위한 요청을 수신하도록 동작하는 인터페이스와,
    비휘발성 메모리와 휘발성 메모리를 갖고 있는 저장소와,
    기록에 대한 요청이 수신된 순서와 다른 순서로 상기 비휘발성 메모리에 대한 기록이 진행되는 것을 허용하는 저장 장치 컨트롤러와,
    I/O 관리자 -상기 I/O 관리자는
    상기 저장소의 제 1 저장 위치에서 상기 객체를 찾는 단계와,
    상기 트랜잭션 내에서 상기 객체에 가해진 변경을 포함하는 상기 객체의 논리적 복사본을 생성하는 단계와,
    상기 논리적 복사본을 저장하기 위한 상기 저장소의 제 2 저장 위치를 결정하는 단계와,
    변경된 상기 논리적 복사본을 상기 제 2 저장 위치에 기록하기 위한 요청을 전송하는 단계와,
    상기 논리적 복사본이 상기 제 2 저장 위치에 저장됨을 나타내도록 휘발성 데이터 구조를 업데이트하는 단계
    를 포함하는 동작을 실행하도록 동작함- 와,
    복구 관리자 -상기 복구 관리자는
    변경된 상기 객체의 논리적 복사본 및 상기 객체와 원자적으로 묶인(atomically bound) 적어도 하나의 다른 객체의 각각의 변경된 논리적 복사본이 상기 제 2 저장 위치에 기록되었는지 여부를 판정하는 단계와,
    상기 객체의 논리적 복사본 및 상기 적어도 하나의 다른 객체의 각각의 논리적 복사본 중 적어도 하나에 대응하는 변경들이 상기 제 2 저장 위치에 기록되지 않은 것으로 판정될 경우, 상기 객체의 논리적 복사본 및 상기 적어도 하나의 다른 객체의 논리적 복사본에 대응하는, 상기 제 2 저장 위치에 기록된 변경들을 폐기하는 단계
    를 포함하는 동작을 실행하도록 동작함-
    를 포함하는 시스템.
  18. 제 17 항에 있어서,
    상기 인터페이스는 또한 상기 트랜잭션에 관여한 상기 적어도 하나의 다른 객체 중 한 객체를 수정하기 위한 요청을 수신하도록 동작하고,
    상기 I/O 관리자는
    상기 적어도 하나의 다른 객체 중 한 객체 및 상기 한 객체를 함께 묶는 연관 관계를 생성하는 단계와,
    변경된 상기 논리적 복사본을 상기 제 2 저장 위치에 기록하기 위한 요청을 전송하는 단계와 함께, 상기 저장 장치 컨트롤러에 상기 연관 관계를 기록하기 위한 요청을 전송하는 단계
    를 포함하는 추가 동작을 실행하도록 동작하는 시스템.
  19. 제 17 항에 있어서,
    상기 저장 장치 컨트롤러에 상기 휘발성 데이터 구조를 기록하기 위한 요청을 전송하고, 상기 저장 장치 컨트롤러에 플러시 요청을 전송하도록 동작하는 체크포인트 관리자 -상기 플러시 요청은 상기 저장소의 상기 휘발성 메모리의 데이터를 상기 저장소의 비휘발성 메모리에 플러시하도록 상기 저장 장치 컨트롤러에 지시함- 를 더 포함하는 시스템.
  20. 제 17 항에 있어서,
    상기 복구 관리자는 또한 변경된 상기 객체의 논리적 복사본의 저장된 해시와 상기 제 2 저장 위치에서 판독한 컨텐츠로부터 계산된 해시의 비교에 기반하여, 변경된 상기 객체의 논리적 복사본이 상기 제 2 저장 위치에 기록되었는지 여부를 판정하도록 동작하고,
    상기 복구 관리자는 또한, 상기 해시들이 같은 값을 갖는다면, 상기 객체의 논리적 복사본이 상기 제 2 저장 위치에 저장됨을 나타내도록 다른 데이터 구조를 업데이트하도록 동작하는
    시스템.
KR1020127017771A 2009-12-11 2010-11-11 순서 의존성 없는 일관성 KR101690824B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US12/635,725 US8433865B2 (en) 2009-12-11 2009-12-11 Consistency without ordering dependency
US12/635,725 2009-12-11
PCT/US2010/056311 WO2011071656A2 (en) 2009-12-11 2010-11-11 Consistency without ordering dependency

Publications (2)

Publication Number Publication Date
KR20120104302A KR20120104302A (ko) 2012-09-20
KR101690824B1 true KR101690824B1 (ko) 2017-01-09

Family

ID=44144203

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020127017771A KR101690824B1 (ko) 2009-12-11 2010-11-11 순서 의존성 없는 일관성

Country Status (9)

Country Link
US (3) US8433865B2 (ko)
EP (1) EP2510434B1 (ko)
JP (1) JP5628341B2 (ko)
KR (1) KR101690824B1 (ko)
CN (1) CN102667720B (ko)
AU (1) AU2010328591B2 (ko)
CA (1) CA2780003C (ko)
RU (1) RU2560786C2 (ko)
WO (1) WO2011071656A2 (ko)

Families Citing this family (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8433865B2 (en) 2009-12-11 2013-04-30 Microsoft Corporation Consistency without ordering dependency
US8793440B2 (en) 2010-06-17 2014-07-29 Microsoft Corporation Error detection for files
US8776094B2 (en) 2011-08-11 2014-07-08 Microsoft Corporation Runtime system
US20150032982A1 (en) * 2013-07-26 2015-01-29 Fusion-Io, Inc. Systems and methods for storage consistency
US9715520B1 (en) * 2013-12-20 2017-07-25 Amazon Technologies, Inc. Validity map-based tracking of user data updates
US10489161B2 (en) 2014-03-26 2019-11-26 Hewlett Packard Enterprise Development Lp NVM object
WO2015167603A1 (en) * 2014-04-29 2015-11-05 Hewlett-Packard Development Company, L.P. Maintaining files in a retained file system
US10635504B2 (en) 2014-10-16 2020-04-28 Microsoft Technology Licensing, Llc API versioning independent of product releases
WO2017171798A1 (en) * 2016-03-31 2017-10-05 Intel Corporation Fabric resiliency support for atomic writes of many store operations to remote nodes
US10346284B1 (en) * 2018-01-11 2019-07-09 Microsoft Technology Licensing, Llc Feature usage prediction using shell application feature telemetry
US11068351B2 (en) * 2018-11-19 2021-07-20 International Business Machines Corporation Data consistency when switching from primary to backup data storage

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2003223350A (ja) 2002-01-29 2003-08-08 Ricoh Co Ltd データベースシステム
JP2006106868A (ja) 2004-09-30 2006-04-20 Toshiba Corp ファイル管理機能を備えたファイルシステム及びファイル管理方法
JP2009282752A (ja) 2008-05-22 2009-12-03 Hitachi Systems & Services Ltd ストレージデバイス及びファイルシステムの記録方法

Family Cites Families (47)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP0394173A3 (en) * 1989-04-17 1993-10-27 International Business Machines Corporation High concurrency manager of open files
US5371885A (en) 1989-08-29 1994-12-06 Microsoft Corporation High performance file system
JPH0540682A (ja) * 1990-06-08 1993-02-19 Internatl Business Mach Corp <Ibm> アトミシテイを有する記憶装置の高可用性耐故障再配置
US5964835A (en) 1992-12-17 1999-10-12 Tandem Computers Incorporated Storage access validation to data messages using partial storage address data indexed entries containing permissible address range validation for message source
US5594863A (en) 1995-06-26 1997-01-14 Novell, Inc. Method and apparatus for network file recovery
CA2199675C (en) 1996-05-08 2002-03-26 John C. Goodwin, Iii System and method for managing electronic price label overlays
US6542909B1 (en) * 1998-06-30 2003-04-01 Emc Corporation System for determining mapping of logical objects in a computer system
US6883063B2 (en) * 1998-06-30 2005-04-19 Emc Corporation Method and apparatus for initializing logical objects in a data storage system
US6393540B1 (en) * 1998-06-30 2002-05-21 Emc Corporation Moving a logical object from a set of source locations to a set of destination locations using a single command
US6269431B1 (en) * 1998-08-13 2001-07-31 Emc Corporation Virtual storage and block level direct access of secondary storage for recovery of backup data
US6920537B2 (en) * 1998-12-31 2005-07-19 Emc Corporation Apparatus and methods for copying, backing up and restoring logical objects in a computer storage system by transferring blocks out of order or in parallel
US6629264B1 (en) * 2000-03-30 2003-09-30 Hewlett-Packard Development Company, L.P. Controller-based remote copy system with logical unit grouping
US6643672B1 (en) 2000-07-31 2003-11-04 Hewlett-Packard Development Company, Lp. Method and apparatus for asynchronous file writes in a distributed file system
US6925476B1 (en) 2000-08-17 2005-08-02 Fusionone, Inc. Updating application data including adding first change log to aggreagate change log comprising summary of changes
US6928555B1 (en) 2000-09-18 2005-08-09 Networks Associates Technology, Inc. Method and apparatus for minimizing file scanning by anti-virus programs
US6687805B1 (en) * 2000-10-30 2004-02-03 Hewlett-Packard Development Company, L.P. Method and system for logical-object-to-physical-location translation and physical separation of logical objects
US7730213B2 (en) * 2000-12-18 2010-06-01 Oracle America, Inc. Object-based storage device with improved reliability and fast crash recovery
US6643612B1 (en) 2001-06-28 2003-11-04 Atrica Ireland Limited Mechanism and protocol for per connection based service level agreement measurement
US7072915B2 (en) * 2002-01-22 2006-07-04 International Business Machines Corporation Copy method supplementing outboard data copy with previously instituted copy-on-write logical snapshot to create duplicate consistent with source data as of designated time
US7334124B2 (en) 2002-07-22 2008-02-19 Vormetric, Inc. Logical access block processing protocol for transparent secure file storage
US7020746B2 (en) * 2003-01-28 2006-03-28 Microsoft Corporation Method and system for an atomically updated, central cache memory
US7322029B2 (en) 2003-05-08 2008-01-22 American Megatrends, Inc. Method and system for recovering program code in a computer system
US7440966B2 (en) 2004-02-12 2008-10-21 International Business Machines Corporation Method and apparatus for file system snapshot persistence
WO2005114487A2 (en) 2004-05-21 2005-12-01 Computer Associates Think, Inc. Method and apparatus for updating a database using table staging and queued relocation and deletion
JP4956922B2 (ja) * 2004-10-27 2012-06-20 ソニー株式会社 記憶装置
US7464124B2 (en) 2004-11-19 2008-12-09 International Business Machines Corporation Method for autonomic data caching and copying on a storage area network aware file system using copy services
US20060129745A1 (en) * 2004-12-11 2006-06-15 Gunther Thiel Process and appliance for data processing and computer program product
US7617259B1 (en) 2004-12-31 2009-11-10 Symantec Operating Corporation System and method for managing redundant storage consistency at a file system level
CN1936853B (zh) 2005-09-22 2010-05-05 康佳集团股份有限公司 嵌入式设备的数据掉电保护和修复方法
CA2632935C (en) * 2005-12-19 2014-02-04 Commvault Systems, Inc. Systems and methods for performing data replication
US7552148B2 (en) 2006-02-28 2009-06-23 Microsoft Corporation Shutdown recovery
US7620721B2 (en) 2006-02-28 2009-11-17 Microsoft Corporation Pre-existing content replication
US7730351B2 (en) 2006-05-15 2010-06-01 Oracle America, Inc. Per file dirty region logging
JP2007316944A (ja) * 2006-05-25 2007-12-06 Toshiba Corp データ処理装置、データ処理方法、およびデータ処理プログラム
RU57929U1 (ru) * 2006-07-10 2006-10-27 Сергей Васильевич Городилов Устройство для защищенного хранения информации
US20080077590A1 (en) 2006-09-22 2008-03-27 Honeywell International Inc. Efficient journaling and recovery mechanism for embedded flash file systems
KR101046304B1 (ko) 2006-10-20 2011-07-05 후지쯔 가부시끼가이샤 메모리 장치 및 리프레시 조정 방법
US7840752B2 (en) 2006-10-30 2010-11-23 Microsoft Corporation Dynamic database memory management policies
US8402201B2 (en) * 2006-12-06 2013-03-19 Fusion-Io, Inc. Apparatus, system, and method for storage space recovery in solid-state storage
CN101051324A (zh) 2007-05-23 2007-10-10 中兴通讯股份有限公司 一种内存数据库的事务管理方法
JP2008293218A (ja) 2007-05-23 2008-12-04 Nec Corp ファイル管理システム、ファイル管理方法、ファイル管理プログラム
US20090012932A1 (en) * 2007-07-03 2009-01-08 Xeround Systems Ltd. Method and System For Data Storage And Management
US8732386B2 (en) * 2008-03-20 2014-05-20 Sandisk Enterprise IP LLC. Sharing data fabric for coherent-distributed caching of multi-node shared-distributed flash memory
US8433865B2 (en) * 2009-12-11 2013-04-30 Microsoft Corporation Consistency without ordering dependency
US8224780B2 (en) * 2010-06-15 2012-07-17 Microsoft Corporation Checkpoints for a file system
US8793440B2 (en) 2010-06-17 2014-07-29 Microsoft Corporation Error detection for files
US9411634B2 (en) * 2010-06-21 2016-08-09 Microsoft Technology Licensing, Llc Action framework in software transactional memory

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2003223350A (ja) 2002-01-29 2003-08-08 Ricoh Co Ltd データベースシステム
JP2006106868A (ja) 2004-09-30 2006-04-20 Toshiba Corp ファイル管理機能を備えたファイルシステム及びファイル管理方法
JP2009282752A (ja) 2008-05-22 2009-12-03 Hitachi Systems & Services Ltd ストレージデバイス及びファイルシステムの記録方法

Also Published As

Publication number Publication date
EP2510434B1 (en) 2019-09-25
AU2010328591B2 (en) 2014-04-10
RU2560786C2 (ru) 2015-08-20
US9430160B2 (en) 2016-08-30
US20150199143A1 (en) 2015-07-16
CA2780003C (en) 2017-10-03
AU2010328591A1 (en) 2012-05-31
US20110145527A1 (en) 2011-06-16
WO2011071656A3 (en) 2011-09-09
JP2013513862A (ja) 2013-04-22
US8433865B2 (en) 2013-04-30
US8996829B2 (en) 2015-03-31
CN102667720A (zh) 2012-09-12
JP5628341B2 (ja) 2014-11-19
KR20120104302A (ko) 2012-09-20
CN102667720B (zh) 2016-06-01
EP2510434A2 (en) 2012-10-17
CA2780003A1 (en) 2011-06-16
WO2011071656A2 (en) 2011-06-16
US20130311733A1 (en) 2013-11-21
RU2012129205A (ru) 2014-01-27
EP2510434A4 (en) 2017-01-25

Similar Documents

Publication Publication Date Title
KR101690824B1 (ko) 순서 의존성 없는 일관성
JP5735104B2 (ja) ファイルシステムのチェックポイント
KR101014089B1 (ko) 데이터베이스 백업의 일관성 검사를 위한 시스템 및 방법
US7849054B2 (en) Method and system for creating and maintaining version-specific properties in a file
US8793440B2 (en) Error detection for files

Legal Events

Date Code Title Description
N231 Notification of change of applicant
A201 Request for examination
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant