KR20080067639A - 압축 버전을 포함하는 내용을 업데이트하는 방법 및시스템들 - Google Patents

압축 버전을 포함하는 내용을 업데이트하는 방법 및시스템들 Download PDF

Info

Publication number
KR20080067639A
KR20080067639A KR1020087010881A KR20087010881A KR20080067639A KR 20080067639 A KR20080067639 A KR 20080067639A KR 1020087010881 A KR1020087010881 A KR 1020087010881A KR 20087010881 A KR20087010881 A KR 20087010881A KR 20080067639 A KR20080067639 A KR 20080067639A
Authority
KR
South Korea
Prior art keywords
update
block
content
version
original
Prior art date
Application number
KR1020087010881A
Other languages
English (en)
Other versions
KR101359834B1 (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 KR20080067639A publication Critical patent/KR20080067639A/ko
Application granted granted Critical
Publication of KR101359834B1 publication Critical patent/KR101359834B1/ko

Links

Images

Classifications

    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M7/00Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
    • H03M7/30Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/60Software deployment
    • G06F8/65Updates
    • G06F8/658Incremental updates; Differential updates
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/60Software deployment
    • G06F8/65Updates
    • G06F8/654Updates using techniques specially adapted for alterable solid state memories, e.g. for EEPROM or flash memories

Abstract

블록을 포함하는 비휘발성 기억 장치에서 원래 버전의 내용을 업데이트 버전의 내용으로 적절히 업데이트하기 위한 방법 및 시스템들이 제공되며, 여기서, 원래의 버전 및/또는 업데이트 버전은 기억 장치에 압축되어 있다.
인플레이스 업데이트, 업데이트 패키지, 비압축 업데이트, 변형 명령, 비휘발성 메모리, 기억 장치.

Description

압축 버전을 포함하는 내용을 업데이트하는 방법 및 시스템들{METHODS AND SYSTEMS FOR UPDATING CONTENT INCLUDING A COMPRESSED VERSION}
본 출원은 2005년 10월 6일 출원되어, 본 원에 참조로서 포함된 "Method and system for updating content stored in a storage device"라는 제목의 미국 가특허출원번호 제 60/723,939 호로부터 우선권의 이익을 주장한다.
본 발명은 기억 장치에 저장된 내용을 인플레이스(in-place) 업데이트하기 위한 방법 및 시스템들에 관한 것이다. 특히, 본 출원은 블록들을 포함하는 비휘발성 기억 장치에서 원래 버전의 내용을 업데이트 버전으로 인플레이스 업데이트하는 것에 관한 것으로서, 여기서, 원래의 버전 및/또는 업데이트 버전은 기억 장치에 압축되어 있다.
기억 장치에 저장된 내용을 업데이트할 필요가 종종 발생한다. 예를 들어, 내용이 소프트웨어 또는 프로그램(실행 파일과 같은)인 경우, 그 안에 존재하는 버그를 수정하거나 내부에 새로운 특징들을 도입할 필요가 종종 발생한다. 그러나, 후자의 예의 경우, 비제한적(non-limiting)이고 다른 형태의 내용에서 텍스트, 데이터 베이스에 저장된 데이터 등을 업데이트할 필요가 있을 수 있다. 이하에서, "구 버전(old version)" 또는 "원래의 버전(original version)"은 업데이트 이전의 내용 버전을 말하고, "신 버전(new version)" 또는 "업데이트(updated) 버전"은 이미 업데이트된 내용을 포함하는 버전을 말한다. 즉, 원래의 버전은 "원래의 내용"를 포함하는 반면, 업데이트 버전은 "업데이트 내용"를 포함한다. 업데이트 내용은 더욱더 업데이트 될 수 있음은 명확하다. 제2 업데이트의 경우, 예컨대, 제1 업데이트의 업데이트 내용이 제2 업데이트의 원래의 내용이 되는 한편, 새로이 업데이트된 내용은 제2 업데이트 등에 의하여 생성된다.
업데이트 내용을 생성하는 원래의 내용을 업데이트하는 과정을 "업데이트 과정"이라고 한다. 통상적으로, 업데이트 과정은 지침을 필요로 하며, 이는 업데이트를 수행하는 방법을 지시한다. 업데이트 과정에 제공되는 이러한 지침들은 "업데이트 패키지"를 함께 구성하며, 여기서, 그 내부에 포함된 각각의 지침은 "업데이트 명령어(update command)"를 구성한다. 즉, 업데이트 과정은 입력으로서 업데이트 패키지를 획득하고, 원래의 내용을 업데이트 내용로 업데이트할 수 있도록 그에 따라 동작한다. 이는 비제한적이나 때로는 업데이트 과정은 함께 내용을 업데이트하도록 하는 하나 이상의 업데이트 패키지를 얻을 수 있다. 대안적으로, 업데이트 패키지를 획득하는 대신, 업데이트 과정은 기억 장치 또는 데이터베이스 등으로부터 업데이트 패키지(또는 업데이트 명령어들의 집합)를 검색할 수도 있다. 그러므로, 이하에서, "업데이트 패키지를 획득"이라하면 업데이트 과정이 패키지를 수동적으로 획득할 수 있거나, 능동적으로 패키지를 검색할 수 있거나, 때로는 내부에 구비된 패키지(예컨대, 하드 코딩된(hard coded) 업데이트 명령어들의 집합)를 활성화할 수도 있는 것임을 이해할 것이다.
원래의 버전에서 업데이트 버전으로 업데이트하는 하나의 방법은 원래의 버전에 추가하여 기억 장치에 업데이트 버전을 저장하는 것이다. 예를 들어, 사용자가 PC(개인용 컴퓨터) 윈도우 데스크탑상의 소정의 아이콘을 누를 때마다 컴퓨터 프로그램 "prog.exe"가 활성화된다. prog.exe를 업데이트하기 위하여, 현재(원래의) 버전과 다른 위치에 이 파일의 업데이트 버전을 저장하고, 이후 원래의 버전을 대신하여 업데이트 버전을 활성화할 수 있도록 상기 아이콘과 연결된 경로를 재설정하는 것이 가능하다. 이후, 업데이트 과정이 성공적으로 완료되었음을 확인하는 경우, 원래의 버전은 안전하게 삭제되어 이들이 차지한 공간을 확보할 수 있다. 추가적으로, 이러한 후자의 업데이트 방법은 완료된 업데이트 버전이 예컨대, 업데이트 패키지로 업데이트 과정에 제공될 것을 요구한다. 이러한 업데이트 패키지는 크기에 있어서 대형화되기 쉽고, 이를 대역폭 제한 통신 채널을 통하여 업데이트 장치에 전송할 필요가 있는 경우, 전송이 성가시고 때로는 불가능하기 조차하다. 그러므로, 업데이트 패키지의 크기를 줄이는 것이 바람직하다.
다른 업데이트 방법은 원래의 내용을 업데이트 내용을 이용하여 간단히 덮어쓰기할 수 있다. 이러한 업데이트 방법은 원래의 버전이 이미 덮어쓰기된 상황에서 일부의 업데이트 버전만이 기억 장치에 쓰여지고 동작 중에 업데이트 과정이 실패로 끝난다면, 중단시 기억 장치에 저장된 버전은 아마도 유효하기 않거나 동작이 불가능할 것으로 생각되므로, 리스크가 크고, 신뢰성이 떨어진다. 더욱이, 이 방법으로는 완전한 업데이트 버전을 전송하기 위한 필요조건이 아직 해결되지 않는다. 그러나, 업데이트 내용을 이용하여 원래의 내용을 덮어쓰기함으로써 내용을 업데이 트하는 것을 통상적으로 이 분야에서 "인플레이스(in-place) 업데이트"라 함은 알려진 바이다. 이하에서 특별히 언급하지 않는한, "업데이트"란 용어는 "인플레이스 업데이트"를 의미한다.
업데이트 패키지의 크기를 줄이기 위한 하나의 방법은 원래의 내용와 업데이트 내용 간의 차이점을 나타내는 정보를 그 내부에 포함하는 것으로 가능하다. 이러한 업데이트 패키지는 종종 "차이(difference)", "차이 결과(difference result)" 또는 "델타(delta)"로 불린다. 델타에 따라 동작할 시, 업데이트 과정은 이를 원래의 내용에 적용하여, 이에 따라 업데이트 내용을 생산한다.
델타의 크기를 고려하여, 이들의 크기를 줄이기 위한 방법들이 존재한다. 예를 들어, 미국특허 제 6,546,552호(2003년 공개된 "Difference extraction between two versions of data-tables containing intra-references")는 구 프로그램과 새로운 프로그램 사이의 콤팩트(compact) 차이 결과를 생성하는 방법을 개시한다. 각각의 프로그램은 프로그램에서 다른 엔트리를 참조하는 참조들을 포함하는 참조 엔트리들(reference entries)을 포함한다. 상기 미국 특허 제 6,545,552호의 방법에 따르면, 구 프로그램은 스캐닝되고 각각의 참조 엔트리에 대하여, 참조는 구별 라벨 마크(distinct label mark)에 의하여 교체되며, 이에 의하여 변경된 구 프로그램이 생성된다. 게다가, 상기 미국 특허 제 6,545,552호의 방법에 따라서, 새로운 프로그램이 스캐닝되고, 각각의 참조 엔트리에 대하여 참조가 구별 라벨 마크에 의하여 교체되고, 이에 의하여 변경된 새로운 프로그램이 생성된다. 이와 같이, 변경된 구 프로그램 및 변경된 신 프로그램을 직접 또는 간접으로 이용함으로써, 차이 결과가 생성된다.
국제출원 WO 2004/114130(2004년 공개된 "Method and system for updating versions of content stored in a storage device")는 구버전의 내용와 신버전의 내용 사이에서 콤팩트 업데이트 패키지를 생성하는 시스템 및 방법을 개시한다. WO 2004/114130의 시스템은 구버전과 신버전을 연결하는 변환 요소를 생성하는 변환 요소 생성기를 포함한다. 또한, 이는 변경된 버전을 생성하는 변경 버전 생성기 및 콤팩트 업데이트 패키지를 생성하는 업데이트 패키지 생성기를 포함한다. 상기 콤팩트 업데이트 패키지는 변경된 버전 및 새로운 버전에 기초하여 변경된 델타 및 변환 요소를 포함한다.
국제출원 WO 2005/003963(2005년 공개된 "Method and system for updating versions of content stored in a storage device")는 기억 장치에 저장된 내용의 버전을 업데이트하기 위한 시스템 및 방법을 개시한다. WO 2005/003963의 시스템은 변환 요소 및 소형 델타를 얻기 위한 업데이트 모듈을 포함한다. 또한, 이는 변환 요소를 구버전의 항목들에 적용함으로써 변환된 구항목을 생성하는 변환 구항목 생성기, 변경 데이터 엔트리들에 기초하여 데이터 엔트리들을 생성하는 데이터 엔트리 생성기, 및 명령어들 및 델타 엔트리들을 구버전에 적용함으로써 새로운 버전의 내용을 생성하는 신버전 생성기를 포함한다.
앞서, 업데이트 패키지는 종종 델타로 언급됨을 주지한 바이나, 이는 비제한적이며, WO 2004/114130 및 WO 2005/003963에서 나타나는 바와 같이, 업데이트 패키지는 종종 델타를 포함한다.
그 밖의 다른 방법들이 당해 기술분야에 존재하나 이를 언급하기에 앞서, 몇가지 고려할 사항이 언급되어야 할 것이다. 예를 들어, 내용은 통상 기억 장치에 저장됨을 이해할 것이다. 기억 장치는 휘발성 기억 장치(예컨대, 램) 또는 비휘발성 기억 장치(예컨대, 하드 디스크 또는 플래시 메모리)일 수 있다.
블록 또는 섹트로 불리는 개별 영역으로 조직된 기억 장치들이 있으며, 여기서, 하나의 블록은 하나 이상의 파일에 속하는 내용을 포함할 수 있다. 따라서, 예컨대, 하나의 기억 장치에 저장된 2개의 파일이 존재하는 경우, 단일 블록은 2개의 파일 중 두 번째 파일에 속하는 몇('y') 바이트뿐만 아니라, 2개의 파일 중 첫 번째 파일에 속하는 몇('x') 바이트를 포함할 수 있다. 만약 블록의 크기를 'z' 바이트라 한다면, z>=x+y임이 명확하다. 그러나, 당해 기술분야에서 숙련된 자들은 내용을 블록에 쓰기가 그 내부에 저장된 다른 내용에 영향을 미친다는 사실을 이해할 것이다. 즉, 첫 번째 파일(예컨대, 이들의 업데이트시)의 x 바이트에 저장된 내용을 다시쓰기할 필요가 있는 경우, 기억 장치의 제한으로 인하여, x 바이트를 쓰는 것이 불가능할 수 있으며, 모든 z 바이트의 내용을 기억 장치에 쓰는 것이 필요할지도 모른다. 이는 예컨대, 비휘발성 기억 장치로부터 블록을 포함하지 않는 램과 같은 휘발성 기억 장치로 z 바이트로 저장된 내용을 읽고, 휘발성 기억 장치에 x 바이트로 저장된 내용만을 업데이트하고(즉 다른 z-x 바이트의 내용은 그 내부에 영향받지 않은 채로 남음), 이후 z 바이트의 내용을 비휘발성 기억 장치로 다시 쓰기함으로써 수행될 수 있다. 이러한 제한은, 예컨대, 새로운 내용(업데이트 내용을 포함)가 쓰여질 수 있기 이전에 블록의 현재 내용을 완전히 삭제할 필요가 있는 경 우의 플래시 메모리 장치, 및 데이터를 쓰기에 앞서 전체 섹터를 삭제할 필요는 없으나, 한 번의 쓰기 동작에서 블록의 전체 내용을 쓸 필요가 있는 하드디스크(예컨대, z-x 바이트로 저장된 내용을 영향받지 않은 상태로 둘 경우 단지 x 바이트만을 쓰는 것이 불가능함; z-x 바이트를 영향받지 않은 채로 두기 위하여, 이들의 내용을 휘발성 메모리 장치에 저장하고 이들을 x 바이트와 함께 블록으로 다시 쓰기가 필요하다)에서 특색을 이룬다. 그러므로, 업데이트 절차는 블록을 포함한 기억 장치에 많은 쓰기 동작을 필요로 할 수 있으며, 효율적인 업데이트를 달성하기 위하여, 업데이트는 더욱 최적화되어야 함을 이해할 것이다. 예를 들어, x가 예컨대 2 바이트인 경우, 이들 2 바이트는, 첫 번째 바이트를 업데이트하고 이후 두 번째 바이트를 업데이트하는 대신, 함께 업데이트되어 이들 2 바이트를 별도로 블록에 쓰기하는것이 좋을 것이다.
더욱이, 원래의 버전(원래의 내용을 포함함)을 업데이트 버전(업데이트 내용을 포함함)으로 업데이트하는 경우, 종종 업데이트 내용을 생성하기 위하여 원래의 내용을 이용하는 업데이트 명령어들이 존재한다. 예를 들어, 원래의 내용을 기억 장치의 서로 다른 위치로 복사하는 것이 가능하며, 이 경우, 상기 복사된 내용은, 목적지에서, 업데이트 버전의 일부를 형성한다. 내용을 목적지로 복사하는 경우, 상기 목적지는 다른 내용(어쩌면 원래의 버전의 일부가 될 수도 있음)를 저장하기 위하여 앞서 사용될 수 있음을 이해하여야 할 것이다. 그러므로, 복사된 내용은 다른 원래의 내용을 덮어쓰기할 수 있다. 나아가, 업데이트 내용을 생성하기 위하여 다른 원래의 내용을 이용하는 다른 업데이트 명령어가 존재할 수 있다. 상기 다른 업데이트 명령어가 최초 업데이트 명령어에 따라서 다른 동작을 하는데 호출되는 경우, 다른 원래의 내용은 이미 덮어쓰기될 수 있다. 이러한 상황은 "읽기전 쓰기 충돌(write before read conflict)"을 구성한다.
읽기전 쓰기 충돌은 당해 기술분야에서 알려진 문제점이며, 미국특허 제 6,018,747호에서 이를 다루고 있다.
상기 미국특허 제 6,018,747호(2000년 공개된, "Method for generating and reconstructing in-place delta files")은 소스 컴퓨터로부터 타겟 컴퓨터로 파일에 인플레이스 복구가능한 소프트웨어 업데이트를 생성, 전송, 복제 및 복구하는 방법, 장치, 및 제조 물품을 개시한다. 미국특허 제 6,018,747호는 을 저장하고 소스 컴퓨터의 메모리에 파일의 첫 번째 버전과 상기 파일의 첫 번째 버전의 업데이트물을 저장한다. 첫 번째 버전은 타겟 컴퓨터의 메모리에도 저장된다. 이후, 업데이트물이 소스 컴퓨터의 메모리로부터 타겟 컴퓨터의 메모리로 전송된다. 상기 업데이트물은 타겟 컴퓨터에서 적절하게 두 번째 버전을 구축하는데 이용된다.
미국특허 제 6,018,747에 따르면, 델타 파일이 이미 쓰여진 메모리 오프셋으로부터 읽어오기를 시도하는 경우, 이전 버전의 데이터가 덮어쓰여져 있기 때문에 부정확한 복구가 될 수 있다. 이는 읽기전 쓰기 충돌로 불린다. 미국특허 제 6,018,747은 델타 파일을 생성하고, 읽기전 쓰기 충돌의 횟수를 최소화하고, 이후 충돌을 제거하기 위하여 복사 명령들을 추가(add) 명령으로 교체하기 위하여 델타 파일을 후처리하는 방법을 교시한다. 다이그래프(digraph)가 생성되어, 복제 명령어 사이에서 읽기전 쓰기 충돌을 나타낸다. 상기 다이그래프를 비순환(acyclic) 다 이그래프로 전환함으로써 읽기전 쓰기 충돌들을 제거하는 스케줄이 생성된다. 그러나, 미국특허 6,018,747은 읽기전 쓰기 충돌 중 덮어쓰기된 내용을 백업 또는 보호하기 위하여 델타 파일을 이용한다. 따라서, 델타 파일이 대형화된다.
구버전을 업데이트하는 절차가 전원공급 중단과 같은 정상적인 종료에 앞서 중단되는 경우, 당해 기술분야에서 다른 알려진 문제점이 발생한다. 이러한 경우, 중단 중 업데이트되었던 블록의 내용에 오류가 발생할 수 있으며 예기치못한 내용을 포함할 가능성이 있다.
내용의 블록들을 업데이트하는 경우, 원래 내용의 블록은 업데이트 과정에서 이용되는 일부의 입력을 형성함은 이미 앞서 언급된 바이다. 이러한 경우, 원래의 블록(중단으로 인하여 오류가 있음)이 필요한 경우, 업데이트 과정이 재개될 수 없다. 오류가 있는 블록을 다시 업데이트하는 것이 불가능할 수 있다.
미국특허 6,832,373(2004년 공개된, "System and method for updating and distributing information")는 예컨대 상기 문제점을 다루고 있다. 이는 소프트웨어, 장치 및 데이터에 의하여 구성된 디지털 정보 시퀀스를 업데이트하는 장치, 시스템 및 방법들을 개시한다. 더욱이, 상기 디지털 정보 시퀀스들은 이에 제한되지는 않으나, 파일, 메모리 위치 및/또는 임베디드 저장 위치를 포함하여, 다양한 형태로 저장 및 이용될 수 있다. 나아가, 미국특허 6,832,373에 기술된 장치, 시스템 및 방법들은 필요시 업데이트 정보를 생성할 능력이 있는 당해 기술분야에서 숙련된 개발자(developer)를 제공하고, 추가적으로 사용자들이 단순화된 업데이트 경로를 통해 나아가도록 하며, 이는 에러가 좀처럼 없고, 미국특허 6,832,373의 발명자 들에 따라서, 미국특허 6,832,373이 출원되었을 때 존재하는 기술을 이용하는 것보다 더 빨리 수행될 수 있다.
즉, 미국특허 6,832,373은 보조 백업 블록을 이용하는 단계를 기술하는 한편, 모든 블록 업데이트 동작들은 이에 의하여 2 국면 '2-국면 프로토콜' 또는 '2-국면 커밋(commit)'을 이용하여 수행된다. 미국특허 6,832,373에 따라서, 블록을 업데이트하는 제1 국면에서, 업데이트 과정은 업데이트 내용을 보조 백업 블록에 쓰기를 수행하고 내용이 올바르게 저장됨을 확인한다. 제 2국면에서, 업데이트 과정은 업데이트 내용을 타겟 블록에 쓰기를 수행하여 업데이트 블록의 업데이트 내용을 형성한다. 그러나, 제1 국면에서 보조 백업 블록에 업데이트 블록의 원래의 내용을 복사하고, 제2 국면에서 업데이트 내용을 저장하기 위하여 타겟 블록을 업데이트하는 것과 같은 동일한 방법의 변형예가 존재한다.
그러나, 모든 쓰기 동작은 2개의 동작(2 국면을 위한)을 수행할 것을 필요로 하기 때문에, 2개의 국면 커밋(백업 내용이 원래의 내용이든지 업데이트 내용이든지)은 시간 소모적이다. 또한, 미국특허 6,832,373에 따르면, 모든 백원 동작은 보조 백업 블록에 블록의 전체(원래 또는 업데이트) 내용을 백업하며, 이에 따라, 업데이트 과정에 의하여 업데이트된 블록의 갯수가 n인 경우, 업데이트 과정(보조 백업 블록으로의 쓰기 동작 및 업데이트 동작들을 포함함)에 필요한 동작의 전체 갯수는 2n보다 작을 수 없다. 만약 내용이 하나 이상의 쓰기 동작으로 쓰여질 블록들이 존재하는 경우, 업데이트 과정이 수행할 필요가 있는 동작의 갯수는 2n보다 훨씬 클 것이다.
이와 같이, 원래의 버전의 원래의 내용을 인플레이스 업데이트하여, 업데이트 버전을 생성하며, 원래의 버전 및/또는 업데이트 버전은 압축된 채로 기억 장치에 저장될 수 있는 신뢰성 있고 효율적인 메카니즘이 당해 기술분야에서 필요하다.
본 발명에 따라서, 업데이트 버전의 내용을 산출하기 위하여 저장 블록들을 갖는 비휘발성 기억 장치에 저장된 원래 버전의 내용을 인플레이스(in-place) 업데이트하는 방법이 제공되며, 상기 방법은: 업데이트 패키지를 획득하는 단계; 상기 원래 버전 또는 그 일부를 휘발성 메모리로 복사하는 단계; 비압축 업데이트 버전 또는 그 일부를 제공하기 위하여 상기 원래의 버전 도는 그 일부를 업데이트하는 단계; 각각의 양의 비압축 업데이트 내용을 독립적으로 압축하기 위하여 상기 비압축 업데이트 버전 또는 그 일부를 압축하는 단계; 및 상기 기억 장치에 상기 원래의 버전 또는 그 일부를 대신하여 상기 압축된 업데이트 버전 또는 그 일부를 쓰는 단계-여기서, 상기 각각의 독립적으로 압축된 양은 분리된 저장 블록에 쓰여짐-를 포함한다.
본 발명에 따라서, 업데이트 버전의 내용을 산출하기 위하여 저장 블록들을 갖는 비휘발성 기억 장치에 저장된 원래 버전의 내용을 인플레이스(in-place) 업데이트하기 위하여 업데이트 패키지를 생성하는 방법이 제공되며, 상기 방법은: 각각의 독립적으로 압축된 내용을 위한 분리된 저장 블록들을 포함하는 가상 블록들로 상기 원래 또는 업데이트 버전을 압축해제하는 단계; 및 변형 명령들을 수행하는데 필요한 데이터의 보호 버퍼에서의 보호를 시뮬레이트하는 단계를 포함한다.
본 발명에 따라서, 업데이트 버전의 내용을 산출하기 위하여 저장 블록들을 갖는 기억 장치에 저장된 원래 버전의 내용을 인플레이스 업데이트하는 방법이 제공되며, 상기 방법은: 업데이트 패키지를 획득하는 단계; 상기 원래의 버전을 휘발성 메모리로 복사하는 단계-여기서, 상기 원래의 버전이 독립적으로 압축된 하나 이상의 저장 블록에 내용을 포함하는 경우, 상기 복사하는 단계는 상기 원래의 버전을 휘발성 메모리로 압축해제하는 단계 및 상기 원래의 버전을 압축해제하는데 필요한 적어도 일부의 내부을 보호하는 단계를 포함함-; 비압축 업데이트 버전을 제공하기 위하여 원래의 버전을 업데이트하는 단계; 및 상기 원래의 버전을 대신하여 상기 업데이트 버전을 비휘발성 메모리로 복사하는 단계-여기서, 상기 업데이트 버전이 블록들이 독립적으로 압축되는 것으로 압축되어 저장되는 경우, 상기 복사하는 단계는 상기 업데이트 버전을 압축해제하고 독립적으로 업데이트된 블록들을 압축하는데 필요한 적어도 일부의 내용을 보호하는 단계를 포함함-를 포함하고; 여기서, 상기 원래의 버전 및 상기 업데이트 버전 중 적어도 하나의 버전은 독립적으로 압축된 하나 이상의 저장 블록에 내용을 포함한다.
본 발명에 따라서, 업데이트 버전의 내용을 산출하기 위하여 저장 블록들을 갖는 비휘발성 기억 장치에 저장된 원래 버전의 내용을 인플레이스(in-place) 업데이트하기 위하여 업데이트 패키지를 생성하는 방법이 제공되면, 상기 방법은: 내용의 비압축 구(old) 및 비압축 신(new) 버전을 획득하는 단계; 임의의 변형 명령과 하나 또는 양자 모두의 버전의 압축해제로부터 기인하는 구 또는 신 버전의 저장 블록들 사이의 종속성들(dependencies)을 획득하는 단계; 및 임의의 변형 명령을 수행하고 하나 또는 양자 모두의 버전들을 압축해제하는데 필요한 데이터의 보호 버퍼 내에서의 보호를 시뮬레이트하는 단계를 포함한다.
본 발명에 따라서, 업데이트 버전의 내용을 산출하기 위하여 저장 블록들을 갖는 비휘발성 기억 장치에 저장된 원래 버전의 내용을 인플레이스 업데이트하기 위한 장치가 제공되면, 상기 장치는: 업데이트 패키지를 획득하도록 구성된 수신기; 상기 원래의 버전 또는 그 일부를 휘발성 메모리로 복사하도록 구성되고, 업데이트 버전 또는 그 일부를 제공하기 위하여 상기 원래의 버전 또는 그 일부를 업데이트하도록 구성된 업데이트 모듈; 및 만약 압축되는 경우, 상기 저장 장치에서 하나 이상의 블록에 해당하는, 상기 업데이트 버전의 비압축 양(amounts)을 독립적으로 압축하고, 상기 업데이트 버전을 압축해제하는데 필요한 적어도 일부의 내용을 보호함으로써, 또는 분리된 저장 블록에 해당하는 비압축 업데이트 내용의 각각의 양을 독립적으로 압축함으로써 상기 업데이트 버전 또는 그 일부를 압축하도록 구성된 압축 모듈을 포함하고; 여기서, 상기 업데이트 모듈은 상기 원래의 버전 또는 그 일부를 대신하여 상기 압축 업데이트 버전 또는 그 일부를 상기 기억 장치에 쓰도록 구성된다.
본 발명에 따라서, 업데이트 버전의 내용을 산출하기 위하여 저장 블록들을 갖는 비휘발성 기억 장치에 저장된 원래 버전의 내용을 인플레이스 업데이트하기 위하여 업데이트 패키지를 생성하는 장치가 제공되며, 상기 장치는: 각각의 저장 블록과 비압축 가상 블록 사이의 대응 관계를 결정하고 블록들 간의 압축해제 종속성들을 결정하도록 구성되거나, 독립적으로 압축되는 경우 저장 블록의 크기와 실질적으로 동일한 비압축 가상 블록과 각각의 저장 블록 사이의 대응관계를 결정하도록 구성된 압축해제 모듈; 및 임의의 변형 명령을 수행하고 하나 또는 양자 모두의 버전들을 압축해제하는데 필요한 데이터의 보호 버퍼 내에서의 보호를 시뮬레이트하도록 구성된 업데이트 패키지 빌더를 포함한다.
본 발명을 이해하고 실제로 수행되는 방법을 알아보기 위하여, 비제한적인 예를 이용하여, 수반된 도면들을 참조하여 바람직한 실시예가 기술될 것이며, 상기 도면들에서:
도 1은 본 발명의 일실시예에 따라서 셀룰러 네트워크에서 버전을 업데이트하기 위한 시스템의 개략도이고;
도 2A는 해당 세그먼트들을 포함하는 원래 및 업데이트 버전의 예를 도시하고;
도 2B는 도 2A의 원래의 버전을 업데이트 버전으로 업데이트하는 경우, 세그먼트의 모호한 부분이 형성되는 것을 도시하고;
도 2C는 도 2B의 읽기전 쓰기 충돌을 해결하기 위하여, 당해 기술분야에서 알려진 일 방식을 도시하고;
도 2D는 도 2B의 읽기전 쓰기 충돌을 해결하기 위하여, 당해 기술분야에서 알려진 대안적인 방식을 도시하고;
도 3A는 해당 세그먼트들을 포함하는 원래 및 업데이트 버전의 다른 예를 도시하고;
도 3B는 도 3A의 원래의 버전을 업데이트 버전으로 업데이트 하도록 구성된 업데이트 패키지를 도시하고;
도 3C는 도 3A의 원래의 버전을 업데이트 버전으로 업데이트하는 것을 도시하고;
도 3D는 도 3A의 원래의 버전을 업데이트 버전으로 업데이트하는 것을 도시하고;
도 4는 충돌 해결 업데이트 패키지의 생성을 도시하는 흐름도이고;
도 5는 본 발명의 일실시예에 따라서 압축된 원래의 버전을 압축된 업데이트 버전으로 업데이트하는 것을 도시하고;
도 6는 압축된 버전 및 각각의 비압축된 버전을 도시하고;
도 7은 본 발명의 일실시예에 따라서, 내용을 압축하기 위한 방법의 흐름도이고;
도 8은 본 발명의 일실시예에 따라서, 내용을 압축해제하는 방법의 흐름도이고;
도 9A는 원래의 버전 및 이의 업데이트 버전의 다른 예를 개략적으로 도시하고;
도 9B는 본 발명의 일실시예에 따라서, 도 9A의 원래의 버전을 이의 업데이트 버전으로 업데이트하는 동안 사용되는 보호 버퍼(protection buffer)를 개략적으로 도시하고;
도 9C는 본 발명의 일실시예에 따라서, 도 9A의 원래의 버전을 이의 업데이 트 버전으로 업데이트하는 동안 사용되는 보호 버퍼(protection buffer)를 개략적으로 도시하고;
도 10은 업데이트 순서를 결정하는 일실시예를 상세히 도시하는 흐름도이고;
도 11은 본 발명의 일실시예에 따라서, 업데이트 패키지의 생성을 도시하는 흐름도이고;
도 12(도 12A 및 12B로 구분됨)는 본 발명의 일실시예에 따라서, 원래의 버전을 이의 업데이트 버전으로 업데이트하는 것을 도시하는 흐름도이고;
도 13은 내용의 반복적인 내용 조각 및 각각의 압축 버전을 포함하는 예시적인 비압축 버전을 도시하고;
도 14는 본 발명의 다른 실시예에 따라서, 내용을 압축하는 방법의 흐름도이고;
도 15는 본 발명의 다른 실시에에 따라서, 내용들을 압축해제하는 방법의 흐름도이고;
도 16은 본 발명의 다른 실시예에 따라서, 업데이트 순서를 결정하는 방법의 흐름도이고;
도 17(도 17A 및 17B로 구분됨)은 본 발명의 다른 실시예에 따라서, 업데이트 패키지를 생성하는 방법의 흐름도이고;
도 18(도 18A, 18B 및 18C로 구분됨)은 본 발명의 다른 실시에에 따라서, 원래 버전의 내용을 이의 업데이트 버전으로 업데이트하는 방법의 흐름도이고;
도 19(도 19A, 19B 및 19C로 구분됨)는 본 발명의 다른 실시예에 따라서, 원 래 버전의 내용을 이의 업데이트 버전으로 업데이트하는 것을 재개하는 방법의 흐름도이고;
도 20은 본 발명의 일실시예에 따라서, 업데이트 패키지를 생성하는 장치를 도시하고; 그리고
도 21은 본 발명의 일실시예에 따라서, 원래 버전의 내용을 이의 업데이트 버전으로 업데이트하는 장치를 도시한다.
이하의 기술에서 하나 이상의 도면에 공통적인 요소들은 동일한 참조 번호로 참조될 것이다.
더욱이, 특별히 언급하지 않는 한, "업데이트'라는 용어는 이하에서 "인플레이스(in-place) 업데이트"로 사용된다.
도 1은 본 발명의 일실시예에 따라서, 셀룰러 네트워크 내에서 버전을 업데이트하기 위한 시스템(101)을 개략적으로 도시한다. 기억 장치들(103)에 연결되거나 이를 포함하는 셀룰러 전화기들(102)은 그들의 동작을 가능하게 하는 프로그램을 실행한다. 프로그램들은 정상적으로 파일의 형태로 저장된다. 셀룰러 전화기 상에 현재 실행하는 프로그램의 버전은 이하에서 "구버전" 또는 "원래의 버전"으로 언급된다.
또한, 기억 장치들(103)과 같은 메모리 장치들은 종종 "메모리 장치들" 또는 "메모리 유닛들"로 언급된다.
때때로, 전화기기 그들의 더 새로운 버전을 실행하기 위하여 프로그램들을 업데이트할 필요가 있으며, 이는 "업데이트 버전" 또는 "신버전"을 구성한다.
이러한 업데이트 버전은 전화기 내에서 동작하는 업데이트 과정에 의하여 생성된다. 업데이트 과정은 전화기가 수신하는 업데이트 패키지("델타"를 구성함)에 따라서 동작한다.
본 발명에 따라서, 업데이트 패키지는 예컨대 개인용 컴퓨터(PC) 또는 임의의 다른 형태의 컴퓨터에서 동작하는 업데이트 패키지 생성기(104) 내에서 생성된다. 업데이트 패키지는 업데이트 서버(105)에 저장되고 전송기(106)를 통하여 셀룰러 전화기(102)로 전송된다.
도 1에 도시된 시스템(101)은 비제한적인 예이며, 본 발명은 업데이트 프로그램에 제한되지 않음을 주지하여야 할 것이다. 기억 장치에 저장된 여러 가지 다른 형태의 내용은 데이터베이스에 저장된 데이트, 기억 장치에 저장된 파일 등과 같이 업데이트를 필요로 한다. 따라서, 이하에서 "내용"라는 용어는 "프로그램"을 대신하여 사용될 것이다.
동일한 방식으로, 본 발명은 셀룰러 네트워크들 및/또는 셀룰러 전화기들(102)에 제한되지 않는다. 셀룰러 전화기들은 내장 장치들(embedded devices)로 언급되는 그룹에 속함을 이해할 것이다. 여기에는 개인 휴대 정보 단말기들(PDA), 가입자 신호 변화장치들(set-top boxes) 및 내용을 저장하는 기억 장치들에 연결되는 그 밖의 다른 소비자 전자 장치들과 같은 그 밖의 다른 내장 장치들이 존재하며, 종종 이는 내부에 저장된 내용의 업데이트를 필요로 한다. 그러나, PC 또는 그 밖의 다른 컴퓨터들과 같은 비내장식(non-embedded) 장치들에 연결되는 기억 장치 들에 저장된 내용들도 업데이트하는 것이 가능하다. 그러므로, 기억 장치들(103)은 예컨대 하드 디스크 드라이브들, 플래시 메모리 장치들, EPROM들(erasable programmable read-only memory) 및 EEPROM들(electrically EPROM) 또는 그 밖의 다른 기억 장치들일 수 있다.
예를 들어, PC 또는 임의의 다른 컴퓨터는 자신의 동작 또는 그 내부에서 실행하는 프로그램들의 동작을 요하는 데이터를 포함하는 파일들(당해 기술분야에서 숙련된 자들에게 알려진 "정보 파일들(info files)" 또는 "도트 파일들(dot files)" 등)을 저장할 수 있다. 종종, 인터넷 또는 임의의 다른 통신 수단 등을 통하여 통신 회선 등을 경유하여 이러한 데이터를 업데이트할 필요가 있다.
이를 이해하기 위하여, "전화기", "PDA", "소비자 전자 장치", "컴퓨터", "PC" 등과 같은 용어를 사용하는 대신, "업데이트 장치들"이란 용어가 이하에서 사용될 것이며, "업데이트 장치"란 용어는 기억 장치에 연결된 임의의 장치를 말하며, 그 안에 저장된 내용을 업데이트하도록 할 수 있음을 주지할 것이다.
기억 장치에 저장된 내용을 업데이트하기 위하여, 업데이트 패키지들이 생성되고, 업데이트 서버(105)에 저장되고, 업데이트 장치들(셀룰러 전화기들(102) 등) 및 이들과 연결된 기억 장치로 전달된다. 대안적으로, 업데이트 서버(105)에 최초 저장되지 않고 업데이트 패키지를 전달하는 것도 가능하다. 예를 들어, 업데이트 패키지가 생성된 업데이트 패키지 생성기로부터 직접 업데이트 패키지를 전달하는 것이 가능하다. 이러한 경우, 업데이트 생성기가 동작하는 기계 또는 업데이트 생성기 자체는 업데이트 서버(105)로 간주된다.
더욱이, 도 1에 도시된 예에서, 업데이트 패키지는 전송기(106)를 통하여 전달된다. 이는 비제한적이며 업데이트 패키지를 전달하는데 적용할 수 있는 임의 다른 방식이 이용될 수 있다. 예를 들어, 플로피 디스크 또는 디스크온키(disk-on-key)와 같은 휴대용 기억 장치에 업데이트 패키지를 저장하는 것이 가능하며, 이를 통해 업데이트 장치(전화기들(102) 등)가 휴대용 기억 장치로부터 업데이트 패키지를 읽어들임으로서 업데이트 패키지에 대한 접근을 허용한다.
업데이트 장치가 업데이트 패키지를 수신하는 경우, 업데이트 장치는 업데이트 패키지에 따라서 업데이트 과정을 작동할 수 있으며, 여기서, 업데이트 과정은 업데이트 버전을 생성하기 위하여 원래의 버전을 업데이트한다. 업데이트 장치가 업데이트 패키지를 수신한 즉시 업데이트 과정을 작동할 수 있음을 주지하여야 한다. 대안적으로, 기억 장치(103)에서와 같이 비휘발성 메모리에 업데이트 패키지를 저장할 수 있으며, 얼마간의 시간(업데이트 장치가 재부팅한 다음과 같이)이 지난 후에 업데이트 과정을 작동한다.
기억 장치는 하나 이상의 원래 및/또는 업데이트 버전의 내용을 저장할 수 있음을 주지할 것이다. 예를 들어, 여기에는 단일 하드 디스크에 설치된 수개의 컴퓨터 프로그램이 존재할 수 있음을 이해할 것이다.
많은 경우에 있어서, 파일은 논리적으로 연속적인 내용로 구성된다. 예를 들어, 텍스트를 포함하는 파일에서, 텍스트가 "123456789"인 경우, 숫자 '2'는 논리적으로 '1'에 연속하고, 숫자 '3'은 논리적으로 '2'에 연속한다. 그러나, 당해 기술분야에서 숙련된 자들에게 있어서 이러한 파일을 기억 장치에 저장하는 경우, 저 장된 파일 또는 그 안에 포함된 내용은 조각이 날 수 있음을 이해할 것이다. 즉, 서로 다른 파일 부분들이 기억 장치의 서로 다른 부분 또는 블록들에 저장될 수 있다. 다시 말해, 논리적으로 순차적인 내용은 반드시 물리적으로 기억 장치에 물리적으로 순차적인 방식으로 저장될 필요는 없다.
논리적으로 순차적인 내용은 기억 장치 내에 물리적으로 순차적인 방식으로 저장될 필요가 없고/없거나 논리적으로 순차적인 내용은 블록의 크기보다 클 수 있다는 점을 염두에 두고, 논리적으로 순차적인 내용은 수개의 저장 블록들에 걸쳐 퍼져있을 수 있음을 이해하여야 한다. 더욱이, 하나의 저장 블록은 논리적으로 순차적인 내용들(수개의 파일 등)에 속하는 내용을 포함할 수 있다. 앞서의 예로 돌아가서, 텍스트 "123456789"가 논리적으로 순차적인 내용을 구성하는 경우, 내용 "1234"는 하나의 물리적인 블록에 저장될 수 있는 한편, 본 예에서 내용 "56789"는 "1234"가 저장된 블록보다 물리적으로 앞서 있는 다른 물리적인 블록에 저장될 수 있다(그러나, 논리적으로 내용 "1234"는 내용 "56789"를 앞서는 점은 명확하다).
논리적으로 순차적인 텍스트 "123456789"는 원래의 버전으로 간주될 것이다. 본 예에 따라서, 업데이트 버전을 포함하기 위하여 이러한 파일을 업데이트하는 것이 가능하며, 여기서 업데이트 버전에 저장되는 텍스트는 "123756489"이다. 이러한 업데이트 버전에서, 숫자 '4' 및 '7'은 원래의 버전에서의 그들의 위치에 비교하여 서로 뒤바뀌었다. 즉, 업데이트 버전에서 숫자 '7'은 원래의 버전에서 보이는 '4'를 대체하는 한편, 숫자 '4'는 숫자 '7'을 대체한다. 이러한 업데이트 버전을 생성하기 위하여 예컨대, 원래의 버전을 몇 개의 세그먼트(각각의 세그먼트는 "논리 블 록"을 구성함)로 나누는 것이 가능함을 이해하여야 할 것이다. 제1 세그먼트는 내용 "123"을 포함하고, 제2 세그먼트의 내용은 "4"이고, 제3 세그먼트는 "56"을 포함하고, 제4 세그먼트는 "7"을 포함하고, 제5 세그먼트는 "89"를 포함한다. 업데이트 버전을 생성하는 경우, 제1, 제3 및 제 5 세그먼트들은 그대로 남겨두는 반면, 제2 및 제4의 세그먼트들은 서로 교체된다. 이와 같이, 세그먼트는 논리적으로 순차적인 내용을 포함한다.
"123456789" 텍스트의 및 업데이트 버전 "123456789"로의 이들의 업데이트의 이전 예는 간단한 예이다. 다른 예들에서, 내용을 하나 이상의 물리적 블록으로 물리적으로 순차적인 영역을 점유하는 세그먼트들로 분할하는 것이 가능하다. 따라서, 만약 "123"이 "12"가 제1 블록에 저장되는 한편, "3"은 제2 블록에 저장되는 방식으로 조각나는 경우, 여기서, "12"가 "3"에 순서상 앞서는 것이 아닌 경우, 본 예 "123"에 따라서, 비록 논리적으로 순차적이라도, 2개의 세그먼트로 분할되어야 한다(특히 이들은 "12" 및 "3"이다).
후자의 예에서, 블록들이 순차적이고(제1 블록은 제2 블록보다 순서적으로 앞섬), 숫자 '1'이 제1 블록이 끝나는 영역에 저장되는 한편, 숫자 '2'가 제2 블록이 시작하는 영역에 저장되는 한, 세그먼트 "12"는 2개의 서로 다른 블록상에 상주할 수 있다.
이러한 후자의 예는 비제한적이다. 예를 들어, 대안적인 실시예는 하나의 물리적 블록(앞선 예에서 "하나 이상"과는 달리)으로 물리적으로 순차적인 영역을 점유하도록 세그먼트를 제한할 수 있다. 이와 같이, "12"가 순차적으로 2개의 순차적 인 블록에 저장되는 경우, 이는 틀림없이 2개의 세그먼트로 분할되어야 한다(첫 번째는 "1"이고 두 번째는 "2"이다).
게다가, 세그먼트를 움직이거나 그대로 두는 것이 허용된 유일한 행동(behavior) 또는 변환(transformation)이 아니다. 예를 들어, 세그먼트를 삭제하거나 그 안에 저장된 내용에 대하여 계산을 수행하는 것이 가능하다. 이와 같이, "123456789"의 예에서 "4"와 "7" 세그먼트들을 교체하는 대신, 3을 "4" 세그먼트의 내용에 해당하는 수치값에 더하는 것이 가능하다(4 더하기 3은 7). 유사하게, "7" 세그먼트의 내용에 해당하는 수치값에서 3을 빼는 것이 가능하다(7 빼기 3은 4). 이러한 경우에 따라서, "4"와 "7"은 여전히 원래의 버전에서 세그먼트들로 간주된다.
업데이트 버전에서 세그먼트의 내용("업데이트 세그먼트")이 원래의 버전에서의 세그먼트 내용("원래의 세그먼트")에 대응하는 경우, 이러한 세그먼트들은 "대응 세그먼트(corresponding segment)" 또는 "정합(matched) 세그먼트"로 간주된다. 대응(correspondence)은 세그먼트들 간의 임의의 논리 또는 산술(arithmetic) 연결과 관련되며, 여기서 업데이트 세그먼트는 원래의 세그먼트의 복사본이고, 이는 원래의 세그먼트의 변경된 복사본일 수 있고(예컨대, 때때로 세그먼트의 내용을 복제하고 복제된 내용의 일부 또는 전부를 변경하는 것이 바람직함), 원래의 세그먼트의 내용에 기초하여 업데이트 세그먼트의 내용을 계산함으로써 수신된 내용을 포함할 수 있다.
때로는 소정의 원래의 세그먼트에 대응하는 하나 이상의 업데이트 세그먼트 가 존재할 수 있음을 주지할 것이다(예컨대, 원래의 세그먼트의 내용은 2번 복사되고, 이에 따라 원래의 세그먼트에 대응하는 2개의 업데이 세그먼트들을 생성한다). 반대의 경우도 같다: 때때로 하나의 업데이트 세그먼트에 대응하는 하나 이상의 원래의 세그먼트가 존재할 수 있다(예컨대, 하나의 업데이트 세그먼트의 내용을 계산하기 위하여, 2개의 특징적인 원래의 세그먼트들에 저장된 내용을 사용하는 것이 가능하다).
도 2A는 원래 및 업데이트 버전(2A01 및 2A02)이 해당 세그먼트들을 포함하는 기억 장치의 일부를 도시한다. 이러한 예에 따라서, 원래의 버전(2A01)의 2개의 세그먼트들(2A03 및 2A04)은, 업데이트 버전(2A02)에서, 각각 세그먼트들(2A03' 및 2A04')에 대응하며, 그의 역도 같다: 세그먼트들(2A03' 및 2A04')은 세그먼트들(2A03 및 2A04)에 대응한다. 본 예에 따라서, 비록 세그먼트들(2A03' 및 2A04')이 세그먼트들(2A03 및 2A04)과 다른 기억 장치에 위치하더라도, 세그먼트(2A03)의 내용은 세그먼트(2A03')의 내용과 유사하며, 세그먼트(2A04)의 내용은 세그먼트(2A04')의 내용과 유사하다. 특별한 예에 따라서, 세그먼트의 위치들을 변경하는 것과는 별개로, 상대적 순서 역시 변경된다. 즉, 세그먼트(2A03)는 기억 장치에서 물리적으로 세그먼트(2A04)보다 앞서나, 세그먼트(2A04')는 물리적으로 세그먼트(2A03')를 앞선다.
도 2B는 도 2A의 원래의 버전(2A01)을 이의 업데이트 버전(2A02)으로 업데이트하는 경우, 세그먼트의 모호한 부분이 형성되는 것을 도시한다. 이러한 예에 따라서, 세그먼트(2A04)의 내용은 세그먼트(2A03)의 내용을 이용하기 전에 이동되어, 기억 장치에서 중간 버전(2Bo1)을 생성한다. 중간 버전(2Bo1)에 의하여 세그먼트(2A04')의 일부가, 여전히 원래의 위치에 위치하는, 세그먼트(2A03)의 일부와 중복되는 것을 볼 수 있다. 그러므로, 세그먼트(2A04')의 내용은 세그먼트(2A03)의 내용의 일부를 덮어쓰기한다. 세그먼트 부분(2Bo2)의 중복된 원래의 내용은 2A03의 일부가 되며 손실된다. 이러한 세그먼트 부분(2Bo2)은 "모호한(ambiguous) 부분"을 도시하며, 중복에 의하여 발생하고, 2개의 세그먼트들 사이의 "충돌(conflict)"을 나타낸다.
도 2B에 도시된 충돌과 같은 충돌은 당해 기술분야에서 "읽기전 쓰기 충돌"로 알려져 있다. 일반적인 방식에서, 읽기전 쓰기 충돌은 원래의 세그먼트 또는 그의 일부가 세그먼트들을 한층 더 업데이트하기 위한 업데이트 과정에 의하여 여전히 필요한 경우(예컨대, 세그먼트(2A03) 원래의 내용이 세그먼트(2A03)의 내용을 생성하기 위하여 필요한 경우), 원래의 세그먼트 또는 그 일부가 이용되기 이전에 변경 또는 손실되는 경우(본 예에서, 세그먼트(2A03')을 생성하기 위하여 세그먼트(2A03)의 내용을 복사하기 이전에)에 발생한다. 달리 언급하지 않는 한, "충돌"이란 용어는 이하에서 "읽기전 쓰기 충돌"이란 용어를 짧게 언급하는 것이다.
도 2C의 예에서 도시된 바와 같이, 세그먼트(2A04')의 내용이 덮어쓰기하기 이전에, 새로운 위치(즉, 세그먼트(2A03')로 복사함으로써 세그먼트(2A03)의 내용이 충돌로부터 보호될 수 있음은 현재 당해 기술분야에서 알려진 바이다. 중간 버전(2C01)은 원래의 세그먼트(2A04) 및 업데이트 세그먼트(2A03')을 포함하고, 이후 세그먼트(2A04)의 내용은 새로운 버전(2A02)의 새로운 위치(세그먼트(2A04'))로 안 전하게 이동될 수 있다. 도 2A, 2B 및 2C는 올바른 복사 순서로 충돌을 해결할 수 있는 복사 사이클의 예를 제공한다.
대안적인 예에서, 도 2D에서 도시된 바와 같이, 세그먼트(2A03)의 내용은 "백업 버퍼", "백업 저장(backup storage)" 또는 "보호 버퍼(protection buffer)"라는 메모리 영역(2D01)으로 복사되어, 세그먼트(2A03)에 저장된 원래의 내용을 잉여(redundant) 내용 또는 방출(released) 내용으로 바꾸는 한편, 방출 내용에 의하여 이전에 점유되었던 세그먼트 또는 영역은 "방출 영역"으로 언급되어 중간 버전(2D03)에서 2D02로서 표시된다. 이는 세그먼트(2A04)가, 중간 버전(2D04)에 의하여 도시된 바와 같이 세그먼트(2A03)의 내용을 덮어쓰기 없이 방출 영역(2D02)에 부분적으로 중첩되는 새로운 위치(2A04')에 세그먼트(2A04)의 내용을 복사하는 것을 가능하게 한다. 이제, 세그먼트(2A03)의 내용(또는, 더 정확히는, 이들의 복사본)을 보호 버퍼(2D01)로부터 업데이트 버전 내의 위치, 즉, 업데이트 버전(2A02)의 업데이트 세그먼트(2A03')로 복사하는 것이 가능하다. 본 예에 따라서, 보호 버퍼가 업데이트 과정에 이용가능한 저장 영역임을 주지할 것이다. 즉, 이러한 저장영역은 원래 및/또는 업데이트 내용의 저장에 사용되는 영역을 포함하지 않으며, 저장 영역은 업데이트 패키지를 저장하는데 이용되지 않는다.
도 3A는 해당 세그먼트들(3A03과 3A04 및 3A03'과 3A04')을 각각 포함하는 원래 및 업데이트 버전(3A01 및 3A02)의 다른 예를 도시한다.
도 2A와 유사하게, 업데이트 세그먼트(3A04')는 모호한 부분(3A05)으로 도시된 원래의 세그먼트(3A03)와 충돌한다. 그러나, 도 2A의 예와는 달리, 모호한 부 분(3A06)으로 도시된 원래의 세그먼트(3A04)와 업데이트 세그먼트(3A03') 간의 충돌이 더 존재한다. 따라서, 당해 기술분야에서 숙련된 자에게 있어서, 도 2C의 해법, 즉, 복사 순서를 변경하는 것이 여기에서는 적용될 수 없음을 이해할 것이다. 도 3A는 도시된 읽기전 쓰기 충돌들을 회피할 수 있는 복사 순서를 허용하지 않음을 알 수 있다.
도 3A는 충돌을 해결하는 올바른 복사 순서가 존재하지 않는 복사-사이클의 예를 제공한다. 2개 이상의 세그먼트들이 관련된 다른 복사-사이클("다중-복사-사이클")이 존재할 수 있음을 이해하여야 할 것이다. 이러한 다중-복사-사이클에서 조차, 때때로 충돌을 해결하는 복사 순서가 없을 수 있다. 예를 들어, 4개의 세그먼트들(A, B, C 및 D)의 복사-사이클은 다음의 방식으로 구성될 수 있다: 업데이트 A는 원래의 B와 충돌하고, 업데이트 B는 원래의 C와 충돌하고, 업데이트 C는 원래의 D와 충돌하고, 업데이트 D는 원래의 A와 충돌한다. 이러한 복사 사이클은 충돌을 해결하는 복사 순서를 허용하지 않음을 알 수 있다.
예를 들어, 미국특허 6,018,747은 복사 사이클을 식별함으로써 읽기전 쓰기 충돌에 대처하고자 하였으며, 업데이트 버전을 완전한 세그먼트들이 다른 세그먼트들과 충돌하는 방식(이에 따라, "모호한 세그먼트"를 야기함)로 업데이트 버전을 세그먼트로 재분할하고, 충돌을 일으키는 복사 명령들을 추가 명령으로 교체한다(추가 명령들은 종종 "삽입 명령"으로 참조됨). 추가 명령은 추가되거나 삽입된 데이터가 업데이트 패키지에서 이용가능할 것을 요구한다. 그러므로, 복사 명령을 추가 명령으로 교체하는 한편, 이전에 복사되고, 현재 삽입된 내용이 업데이트 패키 지로 삽입되어, 그 크기를 커진다.
다른 접근법에 따라서, 충돌을 해결하기 위하여 원래의 버전(3A01)을 업데이트 버전(3A02)로 업데이트하는 업데이트 과정은 도 2D에 도시된 방법과 유사한 방법을 이용할 수 있다. 더 자세히는, 이는 원래의 충돌하는 세그먼트들의 복사본들을 저장하는 보호 버퍼를 이용할 수 있다.
충돌이 존재하는지 결정한 후, 미국특허 6,018,747과 유사한 방식으로 세그먼트를 재분할하는 것이 가능하나, 업데이트 패키지에서 모호한 세그먼트의 원래의 내용을 저장하는 대신, 이를 보호 버퍼에 저장할 수 있음을 주지할 것이다.
도 3B는 도 3A의 원래의 버전(3A01)을 이의 업데이트 버전(3A02)으로 업데이트 하도록 구성된 업데이트 패키지(3Bo1)를 도시한다. 업데이트 패키지(3Bo1)은 원래의 세그먼트(3A03)의 내용과 유사한 내용을 포함하는 부분(3Bo2)을 포함하여, 세그먼트(3A03)의 원래의 내용을 잉여(redundant)가 되도록 한다. 이제, 업데이트 과정은 업데이트 명령(3Bo3)에 따라서 세그먼트(3A04)의 내용을 이의 업데이트 위치, 해당 세그먼트(3A04')로 안전하게 복사할 수 있다. 업데이트 세그먼트(3A04')에 원래의 세그먼트(3A04)의 복사본을 저장한 후, 세그먼트(3A04)의 내용은 역시 잉여가 되어, 업데이트 과정에서 세그먼트(3A03)의 원래의 내용의 복사본인 3Bo2에 저장되는 내용으로 이를 덮어쓰도록 할 수 있다. 본 예에 따라서, 이는 업데이트 패키지(3Bo1)의 삽입 명령(3Bo4)에 따라서 수행된다.
다수의 충돌이 있는 경우, 다른 충돌을 해결하기 이전에 해결되어야 할 충돌 중 하나를 선택하는 것이 바람직할 수 있음을 주지하여야 한다. 상기 선택은 최적 화 기준(optimization criteria)에 따른다. 예를 들어, 보호되는 세그먼트의 크기가 최적화 기준으로 이용될 수 있다. 원래의 세그먼트(3A04)의 크기가 원래의 세그먼트(3A03)의 크기보다 작은 경우, 도 3B에 도시된 바와 같이 3A03에 저장된 내용의 복사본을 저장하는 대신, 세그먼트(3A04)의 내용의 복사본을 저장하는 것이 바람직할 수 있다. 또한, 적어도 하나의 충돌하는 세그먼트에 저장된 내용의 복사본을 저장하는 대신, 적어도 하나의 모호한 부분에 저장된 내용의 복사본을 저장하는 것이 가능하다. 만약 모호한 부분들의 크기가 최적화 기준으로 사용되는 경우, 본 예에 따라서, 크기가 더 작은 이들(하나 이상의) 모호한 부분들만을 저장하고자 하는 것이 가능하다.
도 3C는 도 3A의 원래의 버전(3A01)을 이의 업데이트 버전(3A02)으로 업데이트하는 것을 도시한다. 업데이트 패키지(3C01)을 생성하는 한편, 모호한 부분(3A06)의 크기가 모호한 부분(3A05)의 크기보다 작기 때문에, 상기 모호한 부분(3A06)의 원래 내용의 복사본은 업데이트 패키지(3C02를 참조)에 삽입된다. 3C02는 부분(3A06)의 내용을 보호하고, 이에 따라 이들의 내용을 삭제(또는 변경)하는 것이 가능하게 함은 주지할 것이다. 이를 수행한 후, 업데이트 패키지(3C01)은 다음의 업데이트 며령들을 포함한다: 업데이트 명령(3C03)은 업데이트 과정에서 세그먼트(3A03)의 업데이트 내용을 생성하기 위하여 세그먼트(3A03')의 업데이트 내용을 복사하도록 지시하여, 세그먼트(3A04)의 부분(3A06)을 덮어쓴다. 그러나, 부분(3A06)의 원래의 내용은 3C02에 의하여 보호된다. 세그먼트(3A03)은 이제 방출 세그먼트가 된다; 업데이트 명령(3C04)은 업데이트 과정에서 3A04의 내용을 3A04' 로 복사하도록 지시한다(이러한 명령에 따라서 복사된 내용은 세그먼트(3A03')에 저장된 내용의 일부도 포함한다, 즉, 부분(3C08)에 의하여 나타낸, 도면에 도시된 바와 같이 부분(3A06)을 덮어쓰는 내용의 복사본을 포함한다는 점을 주지할 것이다); 그리고 업데이트 명령(3C05)는 업데이트 과정에서 3A04'의 내용을 저장하기 위하여, 3C02에 저장된 내용(즉, 부분(3A06)의 원래의 내용과 유사한 내용)을 3C08에 삽입하도록 지시한다. 삽입 명령(3C05)은 "복구(restoration) 업데이트 명령" 또는 간단히, "복구 명령"이며, 도면에서는 이를 강조하기 위하여 "복구함(restore)"으로 표시된다. 그러나, 3C05는 삽입 명령(도 3B에서의 3Bo4와 같이)일 수 있다는 점은 주지할 것이다.
이러한 예는 업데이트가 소정 순서에 따라서 수행되는 것을 가정하고 있음을 주지할 것이며, 여기서 3A03은 3A03'으로 복사되고, 이후 3A04는 3A04'로 복사되고, 이후 3C08이 복구된다. 이러한 경우, 업데이트 순서는, 모호한 부분(3A05)의 크기보다 작은 모호한 부분(3A06)의 크기에 의하여 영향을 받는다. 따라서, 3A06의 복사본을 포함하는 업데이트 패키지는 3A05의 복사본을 포함하는 업데이트 패키지보다 작다.
당해 기술분야에서 숙련된 자들은 이러한 예(즉, 도 3C의 예)의 변형예는 업데이트 세그먼트(3A04')를 생성하기 위하여, 전체 세그먼트(3A04)의 원래의 내용을 복사하는 것을 회피할 것이며, 3A04'의 내용을 복구하기 위하여 3C02 의 보호된 내용에 의하여 이의 부분(3C08)을 덮어쓰기가 이어짐을 주지할 것이다. 2개의 세그먼트(3A03 및 3A04) 각각은 2개의 세그먼트로 분할되는 것이 가능하며, 하나의 세 그먼트는 충돌(모호한 세그먼트)을 생성하고, 다른 하나는 그러하지 아니하다.
도 3D는 도 3A의 원래의 버전(3A01)을 이의 업데이트 버전(3A02)으로 업데이트하는 또 다른 예를 도시한다. 이러한 예에 따라서, 충돌로부터 보호될 필요가 있는 내용은 기억 장치의 보호 버퍼에 저장된다.
이러한 예에 따라면, 단지 하나의 모호한 부분의 내용을 보호할 필요가 있음은 이미 도시되었다. 또다시, 이는 다른 것에 비해 크기가 작은 모호한 부분이 될 것이다. 이러한 경우, 이는 모호한 부분(3A06)이 될 것이다.
업데이트 패키지(3D01)를 생성할 때, 업데이트 명령(3D02)이 여기에 삽입되어, 업데이트 과정에서 보호 버퍼(3D03)에 모호한 부분(3A06)의 원래 내용의 복사본을 저장하도록 명령하여, 이의 내용을 보호한다. 명령(3D02)는 "백업 명령", "보호 업데이트 명령", 또는 간단히, "보호 명령"을 구성한다. 업데이트 과정은 세그먼트(3A03')의 내용으로 부분(3A06)을 덮어쓰기하기 이전에 이러한 명령을 수행할 필요가 있다. 보호 명령에 따라서 업데이트 과정에 의하여 수행되는 동작은 "보호 동작(protection or protect operation)" 또는 "백업 동작"으로 언급되며, 명료한 "보호" 업데이트 명령을 이용하는 대신, "복사" 명령이 이용될 수 있음을 주지할 것이다.
업데이트 명령(3D02)에 따라서 동작하는 경우, 업데이트 과정은 부분(3A06)의 내용을 보호 버퍼(3D03)로 복사하여, 보호 부분(3D04)을 생성한다. 이러한 단계에서, 업데이트 과정은 업데이트 명령(3C03)에 따라서 안전하게 동작하고, 3A03의 원래의 내용을 세그먼트(3A03')로 복사하여, 원래의 내용이 보호 버퍼(3D03)에서 보호되는 모호한 부분(3A06)의 내용을 덮어쓰기 한다. 기억 장치 내의 버전은 중간 버전(3D05)가 된다.
이후, 업데이트 과정은 업데이트 명령(3C04)에 따라서 동작할 수 있으며, 세그먼트(3A04)의 내용을 중간 버전(3D06) 내의 새로운 위치(3A04")로 복사한다. 이 단계에서, 부분(3A06)은 원래 3A03의 일부였던 내용을 포함함을 주지하여야 한다. 이와 같이, 3A04를 3A04"로 복사하는 경우, 부분(3C08)에 의하여 도시된 바와 같이, 3A03의 원래의 내용의 작은 부분도 복사된다. 부분(3C08)의 크기는 모호한 부분(3A06)의 크기와 비슷함을 주지할 것이다.
세그먼트(3A04')의 예상 내용을 생성하기 위하여, 업데이트 과정은 세그먼트(3A06)의 원래 내용과 유사하도록 3C08의 내용을 복구할 필요가 있다. 그렇게 하기 위하여, 업데이트 과정은 업데이트 명령(3D07)에 따라서 동작하여, 부분(3C08)의 내용을 교체하기 위하여 3D04의 보호 내용을 복사하고, 세그먼트(3A04')의 예상 내용을 생성하게 된다. 3D07은 복구 명령의 다른 예이나, 복사 명령이 대신 사용될 수 있음을 주지할 것이다.
다른 세그먼트의 내용으로 덮어쓰기 하기 이전에 종종 원래의 내용이 보호될 필요가 있음(예컨대, 보호 버퍼에 복사본을 저장함으로써)이 도시되었다. 그러나, 이는 비제한적이며, 원래의 내용을 보호할 필요가 있는 다른 상황이 존재한다. 예를 들어, 세그먼트(또는 그 일부)의 내용은 종종 업데이트 중간에 변경된다. 그러나, 변경된 세그먼트의 원래의 내용을 필요로 하는 다른 세그먼트의 업데이트가 있을 수 있다. 예를 들어, 원래의 세그먼트("세그먼트 A")는 원래 숫자(예컨대, 2)를 저장하고, 여기서 이의 업데이트 내용은 다른 숫자(예컨대, 4)를 저장한다. 이 경우, 업데이트 내용의 크기는 원래의 내용의 크기와 유사하다. 그러나, 예컨대, 원래의 세그먼트 A에 저장된 값을 원래의 세그먼트 B에 저장된 숫자에 더할 필요가 있는 다른 세그먼트 또는 그 일부("세그먼트 B")의 업데이트가 있을 수 있다. 여기서, 상기 더하기의 결과는 업데이트 세그먼트 B에 저장된다. 비록 업데이트 세그먼트 A(또는 내부에 숫자를 저장하는 부분)의 위치는 원래의 세그먼트의 위치와 유사하게 유지되더라도, 실제는 그 내용이 변경된다(원래의 2는 4로 교체됨). 이와 같이, 세그먼트 A를 업데이트한 후 세그먼트 B를 업데이트함으로써, 업데이트 과정은 세그먼트 A의 업데이트 내용을 이용하는 것을 피하여야 한다. 이는 보호 버퍼(또는 업데이트 패키지) 내에 세그먼트 A의 원래의 내용을 저장함으로써 수행될 수 있으며, 이에 따라 세그먼트 A의 원래의 내용을 보호하게 된다.
이러한 비제한적인 예에서 업데이트 세그먼트 A는 원래의 세그먼트 A에 대응함을 주지하여야 한다. 또한, 업데이트 세그먼트 B는 원래의 세그먼트 A 및 원래의 세그먼트 B 모두에 해당한다.
도면으로 다시 돌아가서, 도 3C 및 3D의 업데이트 패키지들(3C01 및 3D01)은 각각 충돌 해결 업데이트 패키지로 언급된다. 그러나, 도 3C 및 3C에서 도시된 2가지 예들을 비교할 경우, 업데이트 패키지(3D01)은 백업 업데이트 명령(3D01)을 더 포함하므로 업데이트 패키지(3C01)에 비하여 더 많은 업데이트 명령을 포함함을 주지할 것이다. 백업 명령들은 대량의 내용을 백업할 수 있어 업데이트 과정을 지연시킬 수 있다. 도 3C의 실시예는 백업 명령들이 업데이트 패키지(3C01)에 삽입될 것을 요구하지 않으므로, 업데이트 과정을 더 빠르다. 한편, 업데이트 패키지(3C01)는 보호 버퍼(3D03) 대신에 보호 데이터를 저장하는데 이용되므로, 보호 데이터의 크기가 각각의 백업 명령의 크기보다 큰 경우라면, 업데이크 패키지(3C01)는 업데이트 패키지(3D01)보다 크다. 업데이트 패키지들이, 예컨대, 이들을 통신 회선상에서 전송함으로써, 업데이트 장치들로 전달됨을 상기하면, 대용량의 업데이트 패키지는 제한점이 될 수 있다.
도 4는 충돌 해결 업데이트 패키지의 생성을 도시하는 흐름도이다. 흐름도는 충돌 세그먼트들의 내용을 보호하기 위한 보호 버퍼을 이용하는 실시예들에 해당한다. 401 단계에서, 업데이트 패키지를 획득한다. 업데이트 패키지는 당해 기술분야에서 알려진 임의의 방식에 의하여 생성될 수 있다(예컨대, 미국특허 6,546,552, WO 2004/114130, WO 2005/003963 등을 참조). 업데이트 패키지는 현재 참조된 흐름도(도 4)의 기초를 형성하기 위하여 401 단계에서 생성될 수 있거나, 임의의 이용가능한 방법(예컨대, 이를 기억 장치로부터 읽어들이거나, 프로세스간 연락을 통하여 통신 회선으로부터 수신하는 등)에 의하여 사전 생성 및 입수될 수 있다. 이후, 402 단계에서, 업데이트 패키지는 충돌 세그먼트들을 형성하는 세그먼트를 식별하기 위하여 분석된다. 이는 예컨대 미국특허 6,018,747에 의하여 기술된 바와 같이, 다이그래프(digraph)를 구성하고 내부의 사이클(즉, 다른 표현으로 "복사-사이클")을 식별함으로써 수행된다. 충돌 세그먼트들은 이들 각각의 세그먼트들의 크기보다 작거나 이와 비슷할 수 있는 수 있는 모호한 부분들을 포함하여, 영(0) 이상의 모호하지 않은 부분들을 세그먼트들에 남긴다.
해결되지 않은 충돌들은 403 단계에서 지시된 바와 같이 차례로 다루어진다. 404 단계에서, 모호한 부분을 포함하는 선택된 세그먼트은 모호한 부분과 모호하지 않은 부분으로 분할되어, 모호한 세그먼트와 모호하지 않은 세그먼트, 2개의 세그먼트를 생성한다. 세그먼트는 3개 이상의 부분들(2 이상의 모호한 부분 및/또는 2 이상의 비모호한 부분)을 포함한다. 예를 들어, 모호한 부분이 세그먼트의 중간에 있는 경우, 적어도 2개의 비모호한 부분들과 하나의 모호한 부분이 존재할 수 있다. 이러한 경우, 세그먼트는 3개 이상의 세그먼트로 분할될 것이다.
405 단계에서, 각각의 비모호한 세그먼트들을 위한 새로운 업데이트 명령이 생성되며, 406단계에서, 보호 명령 및 복구 명령은 각각의 모호한 세그먼트를 위하여 생성된다. 407 단계에서, 충돌을 생성하였던 원래의 업데이트 명령은 업데이트 패키지로부터 제거되고, 408 단계에서, 보호 명령뿐만 아니라 새로운 업데이트 명령들은 업데이트 패키지로 삽입되어, 제거된 업데이트 명령들을 대신한다. 409 단계에서, 복구 명령들은 예컨대 미국특허 6,018,747에 따라서 삽입된 삽입 명령들을 대신하여 업데이트 패키지로 삽입된다.
원래의 업데이트 명령을 제거하고 새로이 생성된 업데이트 명령을 이들 대신에 삽입하는 대신(예컨대, 405, 406, 407 및 408 단계를 참조), 비모호한 부분들(이들은 비모호한 세그먼트가 됨)만을 참조하도록 원래의 업데이트 명령을 변경하는 것이 가능하다는 점을 주지할 것이다.
완전한 블록들 대신 보호를 필요로 하는 내용의 세그먼트들만을 보호하는 것이 가능함을 이해한 후, 기억 장치에 저장된 원래 및/또는 업데이트 버전들은 압축 된 내용을 포함할 수 있음을 이해하여야 한다.
업데이트 가능한 장치는 그 내부에 저장된 버전에 따라서 동작하는 경우, 그 버전이 압축되어 있으면, RAM 등으로 압축해제되어(예컨대, 런타임으로), 동작이 가능하게 된다.
예를 들어, 만약 실행가능한 파일(프로그램)이 압축된 형태로 저장되면, 동작이 가능하게 하기 위하여 압축해제된다. 다른 예는 압축된 데이터를 갖는 것이다. 프로그램이 데이트에 접근할 필요가 있는 경우, 데이터는 압축해제되어 프로그램 동작을 허용하게 된다.
이와 같이, 업데이트 가능한 장치에 저장된 원래의 버전은 압축된 원래의 버전일 수 있으며, 이와 유사하게, 업데이트 버전은 압축된 업데이트 버전일 수 있다.
원래의 버전 및 업데이트 버전이 기억 장치에 압축되어 있는 본 발명의 실시예들이 이하에서 기술되며, 상기 실시예들은 가장 복잡하다. 그러므로, 압축/압축해제, 가상 블록(virtual blocks), 가상 경계(virtual boundaries), 및/또는 원래의 버전 또는 업데이트 버전의 압축해제 종속성(decompression dependencies)과 관련된 아래의 설명 중 어느 것도 각각 관련되지 않음을 가정함으로써, 원래의 버전도 업데이트 버전도 압축 저장되지 않는 더 단순한 실시예들을 용이하게 이해할 수 있을 것이다.
우선, 압축된 원래의 버전을 압축된 업데이트 버전으로 업데이트하기 위하여, 차례로 2개의 압축된 버전들 간의 차이점을 다루는, 간단한 방식으로 구성된 업데이트 명령을 포함하는, 간단한 델타 파일에 따라서 업데이트 과정을 운영하는 것이 가능하다. 그러나, 당해 기술분야에서 숙련된 자들에게 있어서, 2개의 비압축 버전 사이에 존재하는 작은 차이는 ZIP파일의 예처럼, 각각의 압축된 버전 사이에서 큰 차이로 나타날 수 있다. 그러므로, 업데이트 가능한 장치로의 전송에 필요한 대역폭, 장치에 이를 저장하기 위하여 필요한 저장공간(storage) 또는 이들 모두에도 불구하고, 간단한 델타는 대용량이고 비효율적으로 될 것이다.
다른 해법이 도 5에 도시된 본 발명의 하나의 실시예에 따라서 제공된다. 상기 실시예에 따라서, 업데이트 패키지(501)가 2개의 비압축 버전 사이에서 생성된다. 이후, 이러한 업데이트 패키지(501)가, 압축된 원래의 버전(502)가 저장되는, 업데이트가능한 장치(예컨대, 이동 전화기)에 수신되는 경우, 압축된 원래의 버전(502)을 예컨대, 램에 압축해제하여, 압축해제된 원래의 버전(503)을 생성하는 것이 가능하다. 압축해제된 원래의 버전(503)은 업데이트 패키지(501)에 따라서 업데이트되어, 이번에는 업데이트가능한 장치에 압축되어, 압축된 업데이트 버전(505)을 산출하는 비압축 업데이트 버전(504)을 산출할 수 있다. 비압축 업데이트 버전(504)로의 압축해제된 원래의 버전(503)의 업데이트는 인플레이스 업데이트와 같은 임의의 방법에 따라서 수행될 수 있으며, 업데이트 패키지(501)는 간단한 델타로 제한되지는 않는다는 점을 주지할 것이다. 그러나, 상기 실시예는 비제한적이며, 예컨대, 압축해제된 원래의 버전(503)을 덮어쓰지(overriding) 않고 램의 다른 장소에 비압축 업데이트 버전(504)를 생성함으로써, 인플레이스 방식이 아닌 임의의 다른 업데이트 방법에 따라서 압축해제된 원래의 버전(503)을 비압축 업데이 트 버전(504)로 업데이트하는 것이 가능함을 이해하여야 한다. 그러나, 완전한 원래의 버전의 압축해제를 허용하기 위하여, 상기 방식의 동작은 통상적으로 더 많은 램 공간을 요구한다는 점을 주지할 것이다.
본 발명의 하나의 실시예에 따라서, 압축된 원래 및 업데이트 버전을 생성하는데 이용되는 압축은, 호프만(Hoffman) 코드 및/또는 이들의 조합, per se zip으로 알려진 바와 같은 선형 압축(여기서, 압축된 내용은 비압축 내용과 동일한 순서를 유지함)이다. 이와 같이, 선형 압축에서 압축된 버전의 제1 블록은, 압축 순서에 따라서, 각각의 비압축 버전의 제1 가상 블록에 해당하고, 압축된 버전의 제2 블록은 각각의 비압축 버전의 제2 가상 블록에 해당하도록 정하는 것이 가능하다. 이는 도 6에 도시되며, 여기서, 601은 압축된 버전을 나타내며, 한편, 602는 각각의 비압축 버전을 나타낸다. 압축 버전(601)은 기억 장치의 3개의 저장 블록(603, 604 및 605)에 저장된다. 유사하게, 비압축 버전(602)은 3개의 가상 블록(606, 607 및 608)로 분할될 수 있으며, 이들은 크기에서 다른 것과 반드시 같을 필요가 없다. 가상 블록(606)의 내용은 저장 블록(603)으로 압축되고; 가상 블록(607)의 내용은 저장 블록(604)으로 압축되고; 그리고, 가상 블록(608)의 내용은 저장 블록(605)으로 압축된다.
본 발명의 하나의 실시예에 따라서, 압축된 원래의 버전의 하나의 저장 블록에 저장된 내용을 압축해제하여, 각각의 비압축 원래의 가상 블록을 산출하는 것이 가능하다. 이러한 경우, 저장 블록이 업데이트되는 원래의 버전의 일부가 아닌 내용(예컨대, 다른 프로그램의 일부인 내용)뿐만 아니라 원래의 버전의 일부인 내용 을 포함하는 경우, 원래 버전의 일부인 내용만이 압축해제될 필요가 있을 수 있음을 주지할 것이다.
이후, 비압축 원래의 가상 블록의 내용이 업데이트되어, 해당 비압축 업데이트 가상 블록을 산출하고, 상기 비압축 업데이트 가상 블록 또는 그 일부는 이후 압축된 업데이트 블록으로 압축될 수 있다. 압축된 업데이트 블록의 압축된 내용은 이와 같이 압축된 업데이트 버전의 일부이다.
내용은 저장 장치에 압축된 형태로 저장되어 있다는 것을 가정하면, 각 압축 블록은 물리적 블록이라는 것이 가정된다. 각 압축된 블록은 크기가 다양할 수 있는 하나의 압축되지 않은 "블록"에 각각 대응한다. 상기 설명한 바와 같이, 가상의 블록이 분리된 블록으로 조직되지 않은 램에 전형적으로 있기 때문에 비압축 "블록"은 이하 본 원에서 가상의 블록으로도 불린다. 이하에서, 가상 또는 압축해제된 블록(들)을 언급하는 경우에도 블록(들)은 가독성 향상을 위한 따옴표 없이 사용될 것이다. 세그먼트들이 앞축해제된 형태로 조사되나 압축된 형태로 저장될 것이라고 가정하면, 어떤 비압축 세그먼트가 압축된 데이터의 임의의 주어진 물리적 블록에 해당하는 가상 블록을 구성하는지 인식하고 있는 것은 도움이 될 것이다.
본 발명의 하나의 실시예에 따르면, 비압축 업데이트 버전의 압축 업데이트 버전으로의 압축은 블록 단위로 수행되어, 이에 따라서 압축 업데이트 버전을 생성한다. 이러한 실시예에서는, 압축될 때 하나의 물리적 블록에 들어맞는 각각의 양의 비압축된 내용(즉, 가상의 블록)은 독립적으로 압축된다. 그러므로, 이 실시예는 "단일-블록 실시예" 또는 "블록 단위(block by block)" 실시예라고 한다. 몇몇 경우에, 블록 단위 압축은 블록들 간에 압축해제 종속성이 없으므로 각각의 블록은 독립적으로 압축해제될 수 있으므로 유리하다.
블록 단위 압축을 실행하기 위하여, 비압축 버전에서 가상의 블록을 결정하는 것이 요구되고, 각각의 가상의 블록에 저장된 내용은 단 하나 저장 블록을 채우기 위하여 압축될 수 있다. 업데이트 패키지는 결정된 가상의 블록을 압축하기 위한 명령을 선택적으로 포함하여 압축 업데이트 버전을 산출한다.
추가적으로, 종종 원래 및/또는 업데이트 버전의 일부만이 압축되는 점을 주지하여야 한다. 따라서, 일반적으로 말하여, 본 발명은 압축된 내용을 업데이트하기 위한 방법 및 시스템을 위하여 제공되며, 여기서, 압축된 내용이 원래의 내용, 업데이트 내용 또는 원래 및 업데이트 내용 중 어느 하나일 수 있다.
블록 단위 압축 실시예에서, 압축 데이터의 물리적 블록과 비압축 데이터의 가상의 블록 사이의 대응관계를 더 잘 이해하기 위하여, 독자에게 내용을 압축 및 압축해제하기 위한 비제한적 방법론이 제공될 것이다.
물리적 블록에 대응하는 가상의 블록을 결정하기 위한 하나의 비제한적 방식은 알려진 본질적인(per se) 이분 탐색을 이용하는 것임을 이해하여야 한다. 즉, 가상의 블록이 시작하는 주소를 안 후, 종료 주소를 선택하는 것이 가능하다. 시작 주소로부터 출발하여 종료 주소에서 끝나는, 저장 공간에 저장된 내용은 압축될 수 있다.
본 발명의 실시예에 따라서, 물리적 블록의 이용을 최대화하기 위하여 압축된 물리적(즉, 저장 공간) 블록에 내용을 압축하는 방법(700)의 예가 도 7의 흐름 도에 의하여 도시된다. 물리적 블록으로의 내용 압축 및 물리적 블록으로부터 내용 압축해제를 논의할 때 이하에서 물리적 블록이란 용어가 이용되더라도, 몇몇 실시예에서 물리적 블록의 동등한 크기의 램에 있는 내용이 압축 및/또는 압축해제 가능하다는 점을 주의하여야 한다. 도 7 및 이하 다른 도면들에서, 도시된 실시예들에서 위치가 과정 진행 도중 이용되는 소정 커서들이 기술된다. 이 커서들에 대한 설명은 독자의 이해를 돕기 위한 것이고, 위치를 추적하기 위한 다른 수단이 추가적으로 또는 대신 사용될 수 있음을 이해하여야 한다. 또한, 몇몇 실시예에서, 설명을 복잡하게 하지 않도록 여기에서 기술되지 않는 추가 커서들이 추가적으로 또는 대신하여 사용될 수 있음을 이해하여야 한다.
단계 702에서, 시작 커서(가상의 블록을 위한)는 비압축된 내용(즉, 압축될 내용)의 시작에 설정된다. 단계 704에서, 물리적 블록으로 압축될 때 끼워지는 비압축된 내용의 가상의 블록의 크기에 대한 최초 추정이 이루어진다. 예를 들어, 가상의 블록의 최초 크기(즉, 시작과 종료 주소 사이의 거리)는 예컨대, 물리적(압축된) 블록의 크기 및 압축된 내용에 대한 전형적인 압축비에 따라는 첫번째 추정으로 생각될 수 있다. 예를 들어, 만약 물리적인(압축된) 블록의 크기가 128 바이트이고 압축 비율이 1:2( 비압축된 크기에 의하여 분할되는 압축된 크기)인 경우에, 256 바이트를 점유하는 내용이 128 바이트(물리적 블록)로 대략 압축되는 것으로 최초 가정하는 것으로 시작하는 것이 가능하다. 대안적으로, 최초 내용의 크기는, 만일 압축 비율에 대한 물리적 블록 크기의 비율보다는 더 작으면, 잔여 비압축된 내용으로 추정될 수 있다. 단계 712에서, 시작 커서로 시작하고 가상의 블록의 추 정 크기를 포함하는 내용은, 원하는 압축 비율 및 임의의 적당한 압축 알고리즘을 이용하여 압축된다. 몇몇 실시예에서, 내용의 원래의 버전을 압축하기 위하여 이용된 압축 알고리즘 및/또는 압축 비율은 원래의 버전을 인플레이스 업데이트하는 내용의 새 버전을 압축하기 위하여 이용되는 압축 알고리즘 및/또는 압축 비율과 다를 수 있음을 주지할 것이다. 단계 714에서, 압축된 내용의 크기(즉, 단계 712에서 압축됨)는 하나 이상의 중지 기준이 충족되는지 알아보기 위하여 물리적 블록의 크기와 비교된다. 중지 기준은 특별한 실시예에서 가장 최근의 이전 추정 크기를 가상의 블록을 위한 크기로서 인정되게 하는 기준으로 이해하여야 한다. 예를 들어, 하나의 실시예에서, 중지 기준은, 예컨대, 2번(또는 임의의 소정 횟수)의 반복(iteration)이 프로세스가 수렴하지 않는 것을 보여주는 경우(압축 내용 크기와 물리적 블록 크기 사이의 압축된 크기 차이값의 감소가 중지) 또는 압축 크기 차이값이 미리 정해진 값의 밑으로 내려가는 경우일 수 있다. 중지 기준이 충족되지 않는 경우(즉, 가상의 블록을 위한 마지막 이전에 추정된 내용 크기가 인정되지 않는 경우), 단계 718에서 압축 내용 크기가 물리적 블록 크기 보다 더 큰지 여부가 결정된다. 만약 압축 내용 크기가 물리적 블록 크기 보다는 더 큰 것으로 드러난 경우, 비압축 가상 블록의 내용 크기는 내용 크기는 감소되어야하고(단계 720), 한편, 압축된 내용의 크기가 물리적 블록 크기 보다는 더 작은 경우에, 비압축 가상 블록의 내용 크기는 확장될 필요가 있다(단계 722)(내용 크기는 비압축 내용의 끝을 지나서 증가될 수 없음을 이해하여야 한다).예를 들어, 하나의 실시예에서, 압축 내용 크기와 물리적 블록 크기 사이의 차이가
크기 차이 = 압축 내용 크기 - 물리적 블록 크기
에 의하여 결정되는 경우에, 새로이 추정된 가상의 블록 크기는, 예컨대, 다음의 식에 따라서, 단계 720 또는 722에서 결정될 수 있다:
새로이 추정된 비압축 가상 블록 크기 = 이전에 계산된 비압축 가상의 블록 크기 - 크기 차이/압축 비율
이후, 과정은 다시 새로이 추정된 비압축 블록 크기를 갖는(그리고, 동일한 시작 주소에서 시작함) 가상의 블록이 압축되고 새로이 압축된 내용 크기는 물리적 블록 크기와 다시 비교되는 단계 712로 돌아가 반복한다. 크기가 여전히 같은 경우, 새로운 크기는 당해 기술분야에서 숙련된 자들에게 알려진 바와 같이, 예컨대, 이분 탐색 기준에 따라서 결정될 수 있다. 가상의 블록을 위한 적당한 크기가 달성될 때까지, 예컨대, 중지 기준이 충족될 때까지, 압축 및 비교가 반복될 수 있다(단계 716에서 예). 임의의 가상의 블록을 위한 중지 기준은 단계 716가 최초로 실행되거나 임의의 후속적인 실행에서 만족될 수 있다. 단계 724에서, 가상의 블록의 크기 및/또는 가상의 블록의 경계는 선택적으로 정의되고(거나) 기록된다. 예를 들어, 가상의 블록의 하부 경계는 시작 커서 (시작 주소)의 위치로 정의될 수 있고, 상부 경계는 가상의 블록의 종결 주소(즉, 충족되는 중지 기준으로 귀착되는 가상 블록을 위한 내용 크기의 추정을 더한 시작 커서의 주소)에서 정의된다. 단계 726에서, 시작 커서는 다음 가상 블록의 시작으로 향하도록 내용 크기에 의하여 증가된다(즉, 이전 가상 블록의 종결 주소+1은 압축될 다음 가상의 블록을 위한 시작 주소가 된다). 시작 커서가 비압축 업데이트 버전(단계 728)의 끝을 넘어 증가될 때까지, 전 과정이 단계 704로부터 반복되고 두번째 가상 블록, 세번째 가상 블록 등을 결정하기까지 계속되며, 그리고 방법은 종료된다.
다른 실시예에서, 압축은 압축 크기 차이가 0보다 작거나 같은 한, 내용을 압축함으로써 단순화될 수 있으며, 이를 통해 물리적 블록을 더 잘 채우기 위하여 내용 크기를 증가하는 단계를 생략할 수 있다(단계 722). 상기 실시예들은 몇몇 경우에서 물리적 블록의 덜 효율적인 사용으로 귀착될 수 있다.
단순화를 위하여, 이하 본 원에서 실시예들은 정의되고(거나) 기록되는 가상의 블록의 경계들을 기술한다. 그러나, 본 발명의 범위 내의 다른 실시예들에서 경계들의 계산을 가능하게 하는 가상의 블록의 다른 특성이 추가적으로 또는 대신 정의되고(거나) 기록될 수 있음은 명백하다.
블록 단위 압축이 설명된 이상, 이제 물리적 블록으로부터 가상의 블록으로 내용을 압축해제하기 위한 비제한적 방법론이 제공될 것이다. 각각의 물리적 블록을 채울 내용은, 예를 들어, 방법 700에 따라서 독립적으로 압축(즉, 블록 간 압축 종속성 없음)되었음을 가정한다. 도 8은 본 발명의 실시예에 따른 내용을 압축해제하기 위한 방법의 흐름도이다. 단계 802에서, (압축된 내용을 추적하는) 압축 내용 커서는 압축된 내용의 시작 주소, 즉, 압축해제될 첫번째 물리적 블록의 시작에 설정된다. 위에서 말한 바와 같이, 물리적 블록이란 용어는 본 원에서 설명의 단순화를 위하여 이용된다. 그러나 각각의 물리적 블록으로부터 압축된 내용이 동등한 크기의 램으로 복사되었고, 압축 내용 커서는 램에 있는 압축된 내용의 시작 주소를 지시하는 것이 가능하다. 단계 804에서, (비압축된 내용을 추적하는) 비압축 내용 커서는 비압축된 내용을 위한 시작 주소, 즉, 압축해제될 첫번째 물리적 블록에서 압축해제한 내용을 보유하는 첫번째 가상 블록의 시작에 설정된다. 단계 806에서, 가상 블록의 하부 경계는 비압축 내용 커서의 위치로 선택적으로 정의되고(거나) 기록된다. 단계 808에서, 단위 내용, 예컨대, 물리적 블록으로부터의 1 바이트가 내용을 압축하는데 이용되었던 역압축 비율(inverse compression ration) 및 적당한 압축해제 알고리즘을 이용하여 압축해제된다. 압축 내용 커서 및 비압축 내용 커서는 증가하여 내용의 압축 단위 및 해당하는 내용의 비압축 단위의 종결 주소에 각각 위치한다(단계 810). 압축 내용 커서가 물리적 블록의 끝에 있지 않은 경우(단계 812), 다른 단위 내용이 압축해제되고(단계 808), 따라서 압축 내용 커서 및 비압축 내용 커서는 증가된다(단계 810).
압축 내용 커서가 물리적 블록의 끝에 도달할 경우(단계 812), 단계 814에서 가상 블록의 상부 경계는 비압축 내용 커서의 위치로 선택적으로 정의되고(거나) 기록된다. 만약 물리적 블록이 마지막 블록이 아닌 경우(단계 816에서 아니오), 압축 내용 커서 및 비압축 내용 커서는 각각 다음 물리적 블록의 시작 주소와 다음 물리적 블록의 내용이 압축해제될 시작 주소(즉, 해당 가상 블록이 될 주소)를 나타내도록 증가된다(단계 818). 이후, 과정은 마지막 블록에 도달하고 과정이 종료될 때까지 다음 블록을 위하여 반복된다(단계 816에서 예).
이와 같이, 도 8의 방법 및 이와 유사한 방법들을 따름으로써, 각각의 물리적 블록에 일치하는 각각의 가상 블록의 경계들이 압축해제 과정 중 정의되고(거나) 기록될 수 있다. 선택적인 단계들(724) 압축 중 실행되었다면, 가상 블록의 경 계들은 이미 압축 과정으로부터 알려질 수 있다는 점은 주지할 것이다. 이런 경우에, 반드시 가상의 블록의 상부 경계(단계 814) 및 하부 경계(단계 806) 필수적 재정의(redefining) 없이(경계들이 이미 알려져 있기 때문에), 내용의 압축해제를 포함하는 단순화된 압축해제 알고리즘이 대신 수행 수 있다.
그러므로, 상기 한 바와 같은 정의 및/또는 기록을 포함하는 압축 및/또는 압축해제의 방법을 실행함으로써, 각각의 가상 블록과 물리적 블록 사이의 대응관계가 결정될 수 있다.
도 9A는 원래의 버전(9A01) 및 램에서 압축해제된 형태의 업데이트 버전(9A02)의 예를 개략적으로 도시한다. 비압축 원래의 버전(9A01)이 비압축 업데이트 버전(9A02)으로 업데이트 됨을 이해하여야 한다. 실시예에 따라서, 9A01의 원래 버전의 가상 블록들은 램에서 인플레이스 업데이트될 수 있거나 램의 다른 영역으로 업데이트될 수 있으나, 둘 중 한 경우에, 9A01의 압축 버전을 포함하는 물리적 블록은 인플레이스 업데이트된다. 설명의 단순화를 위하여, 도 9A, 9B 및 9C의 설명에서, 램에 있는 가상의 블록들이 인플레이스 업데이트되는 것으로 가정한다. 상기 실시예에서, 원래의 버전(9A01)은, 특히 9A03, 9A04 및 9A05로 참조되는, 적어도 3개의 가상의 블록을 점유한다. 업데이트 버전(9A02)은 적어도 동일한 가상 블록(램에서 인플레이스 업데이트를 가정함)을 점유한다. 그러나, 원래 및 업데이트 내용 간의 차별화를 위하여, 9A03'는 업데이트 내용이 그 내부에 저장되는 경우 가상 블록(9A03)을 나타내고; 9A04'는 업데이트 내용이 그 내부에 저장되는 경우 가상 블록(9A04)을 나타내고; 그리고 9A05'는 업데이트 내용이 그 내부에 저장되는 경우 가상 블록(9A05)를 나타내었다. 비록 도 9A에서 원래의 비압축 내용을 포함하는 경우와 같이 업데이트된 비압축 내용을 포함하는 경우에 가상 블록(특별한 물리적 블록에 해당함)이 동일한 크기인 것으로 나타날 지라도, 크기가 필연적으로 동일한 것은 아니며, 업데이트된 비압축 내용을 포함하는 경우의 가상 블록(특별한 물리적 블록에 해당함)은 원래의 비압축 내용을 포함하는 경우보다 크거나 작거나 혹은 동일한 크기일 수 있다. 사소하게 변경된 내용조차 완전히 다른 압축 양상(behavior)(따라서, 물리적 블록에 들어가는 서로 다른 가상 블록 크기의 비압축 내용)을 보일 수 있다는 점을 이해할 것이다.
블록(9A03)은 4개의 세그먼트를 포함한다: 9A06, 9A07, 9A08 및 9A09; 블록(9A04)은 6개의 세그먼트를 포함한다: 9A10, 9A11, 9A12, 9A13, 9A14 및 9A15; 그리고 블록(9A05)은 3개의 세그먼트를 포함한다: 9A16, 9A17 및 9A18.
업데이트 도중, 세그먼트(9A06)에 저장된 내용은 삭제되고, 이에 따라 업데이트 버전(9A02)에는 대응하는 세그먼트가 없게 된다. 다른 삭제된 세그먼트는 9A10, 9A12 및 9A18이다. 더욱이, 세그먼트(9A07)에 저장된 내용은 블록(9A05)'으로 이동되어(복사되어) 세그먼트(9A07')를 생성한다. 세그먼트(9A08)에 저장된 내용은 블록(9A03')에 남겨져, 세그먼트(9A08')를 구성한다. 그러나, 세그먼트(9A06)가 삭제되기 때문에, 세그먼트(9A08')(또는 적어도 그 일부)는 이제 이전에 9A06의 내용에 의하여 점유되었던 블록 내의 주소를 점유한다. 즉, 블록에 있는 업데이트 버전(9A02)에 속하는 첫번째 세그먼트가 된다. 세그먼트(9A09)에 저장된 내용은 블록(9A03)으로부터 블록(9A04')로 복사되어 세그먼트(9A09')를 구성한다. 세그먼트 들(9A07', 9A08' 및 9A09')는 각각 세그먼트(9A07, 9A08 및 9A09)에 대응하는 업데이트 버전에 있는 세그먼트들임을 주지할 것이다.
세그먼트(9A11 및 9A13)의 내용은 블록(9A03')로 복사되어, 각각, 대응하는 세그먼트(9A11' 및 9A13')를 내부에 생성한다. 그러나, 원래의 버전에서 세그먼트(9A11)는 세그먼트(9A13)를 선행하는 한편, 업데이트 버전(9A02)에서 이들의 각각의 순서는 변화하여 세그먼트(9A13')가 세그먼트(9A11')를 선행한다. 추가적으로, 내용은 블록(9A03')의 3개의 새로운 세그먼트들(9A19, 9A20 및 9A21)로 삽입되고, 상기 새로운 세그먼트들(9A19, 9A20 및 9A21) 중 어느 것도 원래의 버전에 있는 세그먼트에 대응하지 않는다는 점을 주지할 것이다. 이와 유사하게, 내용은 블록(9A04')의 2개의 새로운 세그먼트(9A22 및 9A23)와 블록(9A05')의 하나의 새로운 세그먼트(9A24)로 삽입된다. 9A22, 9A23 및 9A24 중 어느 것도 원래의 버전에 있는 세그먼트에 대응하지 않는다. 블록(9A04)의 세그먼트(9A14)에 저장된 내용은 동일한 블록(9A04)에 남겨져, 대응하는 세그먼트(9A14')를 생성하고, 동일한 블록(9A04)의 세그먼트(9A15)에 저장된 내용은 블록(9A05')로 이동되어(복사되어), 세그먼트(9A15')를 구성한다.
블록(9A05)의 세그먼트(9A16)는 블록(9A05')의 세그먼트(9A16')에 대응한다. 원래의 버전(9A01)의 일부분인 블록(9A05)에 있는 첫번째 세그먼트인, 세그먼트(9A16)와 유사하게, 세그먼트(9A16')는 업데이트 버전(9A02)의 일부분인 블록(9A05')에 있는 첫번째 세그먼트이다. 그러나 세그먼트(9A16')의 업데이트 내용이 세그먼트(9A16)에 저장된 원래 내용과 반드시 동일하지 않으며, 이 경우, 9A16' 의 업데이트 내용의 크기는 9A16의 원래 내용의 크기 보다는 더 크다는 점을 주지할 것이다. 예를 들어, 업데이트 명령은 업데이트 세그먼트의 내용에 따라서 하나 이상 제로들(0들)을 삽입할 수 있다. 이러한 명령은, 예컨대, 각각의 원래의 천 바이트 뒤에, 백 개의 0들을 삽입할 수 있었다. 9A16의 내용을 9A16'의 내용으로 업데이트하는 것을 허용하는 업데이트 명령은, 예컨대, "소문자들을 소문자로 변환하는 것과 같은 임의의 다른 변형 동작을 표시할 수 있다. 블록(9A05)의 세그먼트(9A17)는 블록(9A05')의 세그먼트(9A17')에 대응하나, 블록 내에서 이들의 위치는 서로 다르다.
특별히 앞서 주지되지 않았을 지라도, 9A14' 및 9A14와 같은 추가적인 대응 세그먼트들이 존재할 수 있으며, 이들 각각의 블록 내에서의 위치는 변화하였다.
본 예에 따라서 업데이트 과정에 이용가능한 보호 버퍼(9A25)가 존재한다는 점을 주지할 것이다. 보호 버퍼의 크기는 본 발명에 의하여 제한되지 않음에도 불구하고, 도 9A의 본 예에서 보호 버퍼 크기는 하나의 보호 블록이 9A26로 참조되고, 다른 하나는 9A27로 참조되는 2개의 (물리적) 저장 블록의 크기와 같다. 그러나, 이것이 비제한적 예이고, 보호 버퍼는 임의의 크기일 수 있음을 주지할 것이다.
도 9A를 참조하여 세그먼트(9A13)에 저장된 원래 내용이 블록(9A03')의 세그먼트(9A13')를 업데이트를 위하여 요구된다는 것을 주지할 것이다. 블록(9A05'), 이후 블록(9A04'), 이후 블록(9A03')의 업데이트 순서를 가정하면, 업데이트 블록(9A03')의 내용(세그먼트(9A13')를 포함함)이 세그먼트(9A13)의 원래의 내용(또 는 적어도 그 일부)을 덮어쓰기하는, "9A09를 9A09'로 복사"라는 업데이트 명령에 따라서 업데이트 과정이 동작하는 동안 아직 생성되지 않는다는 점을 이해할 것이다. 그러므로 "9A13'로 9A13를 복사" 명령에 도달하자마자, 세그먼트(9A13)에 저장된 내용이 세그먼트(9A09')의 일부인 이미 업데이트된 내용일 것이고, 9A13의 원래 내용 아니라는 점을 이해할 것이다. 그러므로, 9A13'에 저장될 "업데이트" 내용은, 이 경우에, 예상한 내용이 아닐 것이다(9A13의 원래 내용의 복사본이 아닐 것이다). 이 오류를 피하기 위하여, 9A13에 저장된 원래 내용은 세그먼트(9A09')로 덮어쓰기 이전에 (예컨대, 보호 버퍼에서) 보호될 필요가 있다.
이를 이해하면, 세그먼트에 저장된 원래 내용을 덮어쓰기 전에, 업데이트 순서에 더하여 블록에 저장될 업데이트 내용을 산출하는 적어도 하나의 업데이트 명령에 필요한 경우, 이러한 원래의 내용이 보호되어야 한다는 것을 결정하는 것이 가능하다.
단순화을 위하여, 하기 실시예들은 보호 버퍼로의 비압축된 원래의 내용을 보호하는 선택사항을 언급한다는 점을 주지할 것이다. 그러나, 이는 비제한적이며, 다른 실시예에서, 압축된 원래 내용 및/또는 다른 임의의 방식으로, 예컨대, 암호화(encryption) 또는 다른 변형방식을 통하여 동작된 원래의 내용이 보호 버퍼에서 대신 보호될 수 있다는 점을 이해하여야 한다.
또한, 도 9A를 참조하여, 세그먼트(9A17)의 내용은 동일한 블록(9A05)의 세그먼트(9A17')로 복사된다. 9A17'은 9A17를 선행하는 것으로 나타난다, 즉, 9A17'의 업데이트 내용은 9A17의 원래 내용을 덮어쓰지 않는다. 그러므로, 일견하여 9A17의 원래 내용이 9A17'에 의하여 명백하게 보호되고, 이러한 원래의 내용은 명백한 보호를 요구하지 않는다는 것으로 나타난다(예컨대, 보호 버퍼에서). 그러나 일반적으로 업데이트 장치가 블록을 포함하는 플래시 메모리와 같은 기억 장치를 포함하고 있는 경우들에 있어서, 통상적으로 업데이트 내용의 복사본본 예컨대 램(RAM)에서 생성되고, 전체 업데이트된 블록(이 경우 9A05')의 업데이트 내용 생성을 완료한 후, 업데이트 내용이 압축되고 램으로부터 원래의 9A05에 해당하는 물리적 블록의 내용을 삭제한 후 업데이트 블록(9A05')에 해당하는 물리적 블록으로 복사된다 것을 이해할 것이다. 이와 같이, 9A05에 해당하는 원래의 물리적 블록을 9A05'에 해당하는 (압축된) 업데이트 내용으로 덮어쓰기하는 동안, 만약 쓰기 동작이 삭제 동작의 성공 후에 실패한다면, 9A17'에 해당하는 압축된 내용에 의하여 덮어쓰기되지 않은 사실에 관계없이, 9A17에 해당하는 원래의 압축 내용을 잃게 될 것이라는 점을 알 수 있다. 그러므로, 또한, 보호는 원래 세그먼트의 내용이 동일한 가상의 블록의 대응하는 업데이트 세그먼트의 내용을 업데이트하기 위하여 필요한 경우에 신뢰도를 위하여 요구된다.
한편, 세그먼트(9A15)는 블록(9A05')의 세그먼트(9A15')로 복사된다. 이는 블록(9A05')를 업데이트 하는 동안, 즉, 블록(9A04' 및 9A03')를 업데이트하기 이전에 수행된다. 블록(9A04')를 업데이트하고 세그먼트(9A23, 9A14' 및 가능하게는 9A22)의 업데이트 내용으로 9A15의 원래 내용을 덮어쓰기 할 때, 9A15의 원래 내용이 업데이트 순서에서 9A04'보다 선행하는 블록에 있는 9A15'로 이미 복사되었음을 이해할 수 있다. 그러므로, 도 9A의 예에서, 9A15의 원래의 내용을 명백하게 보호 할 필요가 없다.
더욱이, 만약 본 예에서, 9A15의 내용을 블록(9A05')의 9A15'로 복사하는, 현재 존재하는 복사 명령 이외에, 9A05의 내용을 9A15의 원래 내용을 블록(9A03')의 해당 세그먼트로 복사하는 추가 업데이트 명령이 있는 경우에(블록(9A03')는 업데이트 순서에 있어 블록(9A05')을 따름을 주지할 것), 9A05의 내용을 명백히 보호할 필요가 여전히 존재하지 않는다. 블록(9A03')가 업데이트 순서에 있어 블록(9A04')을 따르고, 따라서 블록(9A03')을 업데이트하기 전에 9A15의 원래 내용을 덮어쓰기 하더라도, 보호 버퍼에 명백하게 저장된 이의 복사본 대신에 9A15'에 저장된 내용을 이용하는 것이 가능하다.
그러므로 업데이트 순서에 있어 원래 세그먼트의 원래 블록을 선행하는 블록의 이의 내용을 복사하는 적어도 하나의 업데이트 명령이 있는 경우, 세그먼트의 내용을 명백하게 보호할 필요가 없다.
이를 이해하면, 블록(9A05)에서 세그먼트(9A16 및 9A17) 또는 이들의 일부는 보호를 필요로 한다는 점을 알 수 있다. 블록(9A04)에서, 세그먼트(9A11, 9A13 및 9A14) 또는 이의 모호한 부분들은 보호를 필요로 하고, 한편 9A03에서는 9A08 또는 이의 모호한 부분이 보호를 필요로 한다.
도 9A의 예는 비제한적임을 주지할 것이다. 본 예에서, 블록(9A05')을 업데이트하기 위한 업데이트 명령을 최초로 실행하고, 이후 블록(9A04')을 업데이트하기 위한 업데이트 명령을 실행하는 동안, 업데이트 패키지는 업데이트 과정이 원래의 버전(9A01)을 업데이트 버전(9A02)로 업데이트하도록 한다. 대안적으로, 블 록(9A05')를 업데이트한 후에 9A03'를 업데이트하고 마지막으로 블록(9A04')을 업데이트하는 것이 가능하다. 블록(9A04')을 먼저 업데이트하고 블록(9A03' 및 9A05')을 업데이트 하는 것도 가능하다. 본 예에 따라서, 6개의 서로 다른 업데이트 순서가 허용됨을 주지할 것이다. 일반적으로, n!의 가능한 업데이트 순서가 존재한다, 여기서, n은 새 버전의 일부분인 변경된 데이터를 포함하는 블록들의 개수이다. 상기 n! 모두는 동일한 업데이트 버전을 생성한다. "업데이트 순서(sequence)" 또는 "업데이트 순서(order)"는 업데이트 버전의 블록이 업데이트되는(또는 쓰여지는) 순서이다.
본 발명에 따르면, 업데이트 장치의 동작 환경은 상기 장치에 의하여 실행되는 임의의 소프트웨어에 의하여 수행되는 동작들을 백업 및/또는 보호할 목적으로 위한 이용되는 기억 장치(103)에서 하나 이상의 영역들을 할당하기 위하여 사전 설정될 수 있다. 내용을 업데이트하는 것은 이러한 동작을 위한 하나의 예다. 이러한 영역은 "보호 버퍼"이다. 도 3D를 참조하여 예로서 기술된 하나의 실시예에서 따르면, 보호된 세그먼트의 내용을 내부에 저장하는 패키지에 비하여, 업데이트 패키지의 크기를 감소시키는 기억 장치(103) 내의 보호 버퍼(3D03)에서 이의 복사본을 저장함으로써 세그먼트의 원래 내용을 보호하는 것이 가능하다.
다른 실시예에 따르면, 하나 이상의 세그먼트(또는 하나 이상 이의 부분들)의 내용은 보호 버퍼에 저장될 수 있다. 만약 부분들을 저장한 후에 보호 버퍼가 미사용 영역을 포함하는 경우, 보호를 필요로 하는 추가적인 세그먼트들(또는 이들의 일부)에 저장된 내용의 복사본들을 저장하기 위한 상기 미사용 영역을 사용하는 것이 가능하다는 점을 주지할 것이다. 상기 추가 보호된 세그먼트들은 현재의 블록에 저장될 수 있거나 기억 장치에 있는 다른 블록에 저장될 수 있다. 다시 말하면, 완전한 블록들을 복사하는 대신에, 보호 버퍼에서 세그먼트 또는 그 부분을 저장하는 것이 가능하다.
모호한 세그먼트를 몇몇 세그먼트로 분할하는 것, 즉, 모호한 세그먼트가 하나 이상 모호한 세그먼트 및 하나 이상 비모호한 세그먼트로 분할되는 것이 가능하다는 점을 주지할 것이다. 이후, 업데이트 명령은 분할 세그먼트에 대응하도록 구성된다. 이를 파악하면, 이하에서, 모호한 세그먼트 및/또는 이의 모호한 부분을 언급하는 대신, 세그먼트들(및/또는 모호한 세그먼트들)이 논의될 것이라는 점을 주지할 것이다.
그럼에도 불구하고 (애매하고 및/또는 명백한) 세그먼트를 하위 세그먼트들로 분할하는 대신, 설명을 가능한 한 단순하게 하기 위하여, 하기 도 9B와 3C의 예들을 더 논의하는 경우, 완전한 "원래" 세그먼트를 참조할 것이다. 예를 들어, 그것은 도 9A에서 9A17는 2개의 부분 또는 하위 세그먼트들로 분할되어야 하는 것으로 나타난다; 하나는 세그먼트(9A16')의 업데이트 내용에 의하여, 다른 하나는 세그먼트(9A07')의 업데이트 내용에 의하여 덮어쓰기된다. 그러나, 하기 설명은 완전한 세그먼트(9A07)의 원래의 내용을 보호하는 것을 참조한다.
도 9B는 도 9A의 원래의 버전을, 본 발명의 하나의 실시예에서 따라서 이의 업데이트 버전으로 업데이트하고 있는 동안 이용된 보호 버퍼(9Bo1)를 개략적으로 도시한다. 본 예에서, 보호 버퍼(9Bo1)의 크기는 도 9A의 보호 버퍼(9A25)에서와 같이 2개의 저장 블록이다, 그러나, 이것은 비제한적이고, 보호 버퍼는 임의의 적용 가능한 크기일 수 있다. 업데이트 과정이 동작을 개시하는 경우, 보호 버퍼는 비어 있게 됨, 또는 다시 말해, 이의 미사용 영역의 크기가 보호 버퍼의 크기와 유사하다는 점을 주지할 것이다.
현재의 예에서, 선택된 업데이트 순서는 9A05', 9A04', 그런 다음 9A03'이다. 따라서, 블록(9A05')의 원래 내용을 업데이트할 경우(이는 9A05에 저장된 원래 내용을 덮어쓰기함을 의미함), 세그먼트(9A16)의 원래 내용은 보호를 필요로 한다. 세그먼트(9A16)의 크기는 보호 버퍼의 크기보다 더 작으므로 세그먼트(9A16)의 원래 내용은 그리로 복사된다.
세그먼트(9A17) 또한 보호를 필요로 한다. 세그먼트(9A17)의 크기가 보호 버퍼의 미사용 영역보다 더 작기 때문에, 세그먼트(9A17)의 원래 내용 또한 복사될 수 있다. 이제, 보호를 요구하는 9A05의 모든 세그먼트들이 보호되는 경우, 블록(9A05)에 저장된 내용은 9A05'의 업데이트 내용에 의하여(즉, 세그먼트(9A16', 9A07', 9A17', 9A15 및 9A24)의 업데이트 내용에 의하여) 안전하게 덮어쓰일 수 있다. 이미 설명된 바와 같이, 보호 버퍼로 원래 내용을 복사하는 것은 모호한 세그먼트들에게 업데이트 과정의 신뢰도와 같은 보호를 제공한다.
게다가, 블록(9A04')(이와 같이, 9A04에 저장되는 원래 내용을 덮어쓰기하는)을 업데이트 하기 전에, 그리고 보호 버퍼에 미사용 영역이 있을 한, 세그먼트(9A11, 9A13 및 9A14)의 원래 내용은 복사되는 반면, 세그먼트(9A15)의 원래 내용은 더 보호할 필요가 없어 그 내용은 보호 버퍼로 복사되지 않는다(도 9A에서 이 미 설명된 바와 같이, 9A15는 9A15'에 의하여 내재적으로(implicitly) 보호됨). 추가적으로, 블록(9A03')을 업데이트하기 전에, 그리고 보호 버퍼에 충분한 미사용 영역이 있을 한, 9A08의 원래 내용은 또한 복사된다.
이제 보호 버퍼 9Bo1의 사용된 영역이 하나의 저장 블록의 크기보다 조금 더 큼을 주지할 것이다. 만약 보호 버퍼의 크기가 단지 하나의 저장 블록이었더라면, 세그먼트(9A08)의 복사본을 내부에 저장하기 위한 충분한 미사용 영역이 없었을 것이다. 보호 버퍼에 보호를 필요로 하는 모든 세그먼트들을 보호하기 위한 충분한 미사용 영역이 없이 없는 경우, 이들의 내용은 미국특허 제 6,018,747호에서 또는 도 3C를 참조하여 설명된 바와 같이 업데이트 패키지 자체와 같은, 대안적인 저장 영역에 백업될 필요가 있다.
도 9C는 본 발명의 다른 실시예에 따라서 도 9A의 원래의 버전을 이의 업데이트 버전으로 업데이트하고 있는 동안 이용된 보호 버퍼(9C01)를 개략적으로 도시한다. 상기 실시예에 따르면 업데이트 순서는 보호 동작들의 개수 또는 보호된 내용에 의하여 사용된 영역을 감소시키도록 정하여진다. 예를 들어, 보호 버퍼(9C01)의 사용은 업데이트 순서가 9A05', 9A03' 및 마지막으로 9A04'인 경우 요구되는 보호 동작들을 설명한다. 이미 도 9B를 참조하여 설명된 바와 같이, 세그먼트들(9A16와 9A17)의 원래 내용은 블록(9A05')의 업데이트 내용으로 이들을 덮어쓰기 전에 보호 버퍼로 복사된다. 블록(9A03')를 업데이트하기 전에, 그리고 도 9B의 개시를 참조하여, 세그먼트(9A07)는 보호를 필요로 하지 않는다는 점을 이해하여야 한다. 그러므로, 보호를 필요로 하는 세그먼트들(9A08 및 9A09)의 내용은 9A07의 내용을 복사함이 없이, 보호 버퍼(9C01)의 미사용 영역으로 복사된다.
이제, 블록(9A04')으로 돌아가서, 이들의 내용이 블록(9A03' 및 9A05')으로 앞서 복사되었기 때문에(이들의 원래 내용은 내재적으로 보호됨), 세그먼트들(9A11, 9A13 및 9A15)은 명백한 보호를 요구하지 않는다는 것을 이해하여야 한다. 보호를 필요로 하는 블록(9A04)의 원래 내용만이 세그먼트(9A14)에 저장된 원래 내용이며, 따라서 이러한 내용은 보호 버퍼(9C01)의 미사용 영역으로 복사된다.
보호 버퍼(9C01)의 사용을 보호 버퍼(9Bo1)의 사용과 비교함으로써, 보호 버퍼 (9C01)가 보호 버퍼(9Bo1)에 비교하여 더 적은 세그먼트들의 내용을 포함하는 것을 파악하는 것이 가능하다(9Bo1에 있는 6개의 세그먼트와는 달리, 9C01에는 5개의 세그먼트). 당해 기술분야에서 숙련된 자들에게 있어서, 이러한 보호되는 세그먼트들의 개수에서의 감소는 블록(9A04')에 앞서 블록(9A03')을 업데이트함으로써 달성되는 3개의 세그먼트들(9A11, 9A13 및 9A15)의 내재적인 보호에 기인한다는 점은 자명하다.
추가적으로, 모든 3개의 블록에 있는 세그먼트의 원래 내용을 보호 후의 보호 버퍼(9C01)의 사용한 영역이 보호 버퍼(9Bo1)의 사용한 영역보다 더 작다는 것을 주지할 것이다. 다시, 이는 상기 업데이트 순서(9A05', 9A03' 그리고 난 후 9A04')를 선택함으로써 내재적으로 보호되는 더 큰 세그먼트들을 포함하기 때문이다.
일반적으로, 소정의 업데이트 순서를 선택함으로써 백업 동작의 개수 및/또는 업데이트 과정 중에 요구되는 보호 버퍼 공간을 감소시키는 것이 가능할 수 있 다. 백업 동작들은 시간을 소모하는 일임을 상기하면, 백업 동작을 감소시키는 일이 더 빠른 업데이트 과정을 달성하는데 유리하다. 추가적으로 블록을 포함하는 기억 장치의 블록들에 데이터를 기록하는 것이 시간이 소모되는 일임을 고려할 때, 보호에 사용된다는 것은 공간(또한, 가능하게는 보호 버퍼에서 이용되는 블록의 수)을 감소시킨다는 것은 더 빠른 업데이트 과정을 달성하는데 유리하다는 점을 이해하여야 한다.
더욱이, 업데이트 순서가 보호 버퍼의 세그먼트의 원래 내용의 사본을 유지하는데 필요한 시간에 영향을 미친다는 점을 주지할 것이다. 도 9A의 예에서, 예컨대, 세그먼트(9A09)는 블록(9A04')을 업데이트하는데 필요하다. 만약 업데이트 순서가 블록(9A03')이 블록(9A04')에 앞서 업데이트되어야 하는 것으로 결정되면, 세그먼트(9A09)의 원래 내용은 보호 버퍼로 복사되어야 한다. 블록(9A03') 와 블록(9A04')을 업데이트하는 사이에, 다른 블록들(도시되지 않은 추가 블록)이 업데이트되는 것이 가능하며(도면에서 도시되지 않았음에도 불구하고), 한편 9A04'는 업데이트 순서에 따라서 업데이트되는 마지막 블록이다. 이러한 경우, 블록(9A04')이 업데이트될 때까지 또는, 업데이트 과정의 거의 끝까지 세그먼트(9A09)의 보호되는 내용을 보호 버퍼에 유지하는 것이 필요하다는 점을 이해하여야 한다. 이러한 전 과정에서 세그먼트(9A09)의 보호되는 내용은 보호 버퍼의 영역을 차지한다.
그러나, 이 경우에 업데이트 순서를 변경하는 것이 가능하며, 다른 세그먼트에 앞서 블록(9A04')을 업데이트한다. 9A09'이 9A09의 내용과 동일한 내용을 포함하는 경우, 이의 내재적 보호로 사용될 수 있으며, 이 경우, 블록(9A04')을 업데이 트한 후에 9A09의 보호된 내용에 의하여 점유된 보호 버퍼의 영역을 자유롭게(또는 재사용)하는 것이 가능하다는 점은 이미 주지한 바이다.
그러나 9A09'의 내용이 9A09의 내용과 다른 경우들에서조차, 나머지 블록을 업데이트하기 전에 9A09의 원래 내용에 그 업데이트가 의존하는 블록을 업데이트하는 것을 허용하는 업데이트 순서를 선택하는 것이 여전히 가능하며, 이에 따라 이전에 9A09의 원래 내용의 보호된 복사본에 의하여 점유된 보호 버퍼의 영역을 해제 또는 재사용하도록 할 수 있다.
위에서 언급된 바와 같이, 도 9A, 9B 9C의 설명에서, 비압축 업데이트 가상 블록은 램에 있는 비압축 원래의 가상 블록을 덮어쓰기하였고, 편의를 위하여 세그먼트의 보호가 업데이트 순서가 램의 덮어쓰기에 적용되기 이전에 발생함을 가정하였다. 다른 실시예에서, 저장 (물리적인) 블록이 아직 덮어쓰이지 않는 한, 원래 내용은 기억 장치에서 여하튼간 회복되고 압축해제될 수 있기 때문에, 세그먼트들은 램에서 덮어쓰기 이전에 램에 있는 다른 장소에서 대신 보호될 수 있거나, 램에서 덮어쓰기 이전에 전혀 보호되지 않을 다는 점을 이해하여야 한다. 상기 다른 실시예 또는 비압축 업데이트 가상의 블록들이 램의 분리된 영역에 대신 기록되는 실시예에서, 비휘발성 저장 장치에 있는 세그먼트의 보호는 압축된 내용을 물리적 블록에 쓰기 이전의 언제까지나 지연될 수 있다. 램의 분리된 영역으로 업데이트할 경우, 세그먼트들의 보호는 램에 있는 원래 가상의 블록이 터치되지 않기 때문에 관련되지 않는다. 그러나, 업데이트 순서에 따라서 저장 공간의 원래 내용을 덮어쓰는 압축 업데이트 내용 이전에, 소정 세그먼트들이 상기 설명한 바와 같이 보호 될 필요가 있을 수 있다.
이렇게, 본 발명은 물리적 블록들을 포함하는 기억 장치에 적응되며, 여기서 물리적 블록에 업데이트된 내용을 쓰는 것은 그 곳에 저장된 다른 내용에 영향을 미친다. 그러므로, 접근 효율성을 고려하여, 다른 블록으로 내용을 쓰기 이전에 그에 따라서 동작하는 특별한 물리적 블록으로 내용을 쓰는 업데이트 명령들을 그룹으로 같이 묶는 것이 가능하다. 도 9A의 본 예에서, 업데이트 과정은 블록(9A05')를 업데이트하고, 이후 블록(9A04') 및 블록(9A03')를 업데이트 한다.
램(RAM)에서 내용을 저장하는 것과 관련하여 제한이 없다는 점을 주지할 것이다. 램은 블록을 포함하지 않으므로, 램에 쓰여진 내용은 그 내부에 쓰여진 다른 내용에 영향을 미치지 않는다. 예컨대, 내용(예컨대, 세그먼트)의 임의의 조각을 쓰기 이전에 블록에 저장된 내용을 지울 필요가 없고, 마찬가지로, 하나의 쓰기 동작 중 블록의 전체 내용을 쓸 필요가 없다. 따라서, 세그먼트를 차례로 램에서 업데이트 블록의 복사본을 생성하는 것이 가능하며(업데이트 명령에 따라서 동작), 이후 전체 블록의 내용을 기억 장치의 블록으로 압축하고 쓴다. 추가적으로 몇몇 경우에 접근 효율성이 고려될 수 있더라도, 하나의 업데이트 블록과 관련하여 업데이트 명령의 순서는 특별한 중요하지 않다.
즉, 업데이트 패키지는 "9A24를 삽입", 이후 "9A15'로 9A15를 복사", "9A17'로 9A17을 복사", "9A07'로 9A07을 복사", 및 "9A16'을 산출하기 위하여 9A16을 업데이트"하는 명령들을 포함한다. 그러나 접근 효율성을 고려하여, 이는 "9A17'로 9A17을 복사", 이후 "9A16'을 산출하기 위하여 9A16을 업데이트", "9A15'로 9A15를 복사", "9A07'로 9A07을 복사", 그리고 "9A24를 삽입"하는 것과 같다.
업데이트 순서를 결정하기 위한 실시예의 설명으로 진행하기 전에, 세그먼트의 "크기"는 상기 세그먼트에 의하여 점유된 바이트 갯수라는 점을 주지하여야 한다. 그러나, 이는 비제한적이며 비트(bits), 워드(words) 등과 같은 다른 임의의 적용 가능한 수단에 의하여 세그먼트의 크기를 측정하는 것이 가능하다.
추가적으로, 각각의 원래의 블록에는 DEP(블록)로 표시된 종속성 값이 있다. 각각의 가상 블록은 하나의 물리적 블록에 해당하기 때문에(그리고, 물리적 블록에 해당하는 각각의 가상 블록의 경계들은, 예컨대, 방법 700 또는 800에서와 같이 결정될 수 있다), 블록 B, Bi 등은 동일하게 물리적 블록 또는 가상 블록을 나타내는 것으로 이해하여야 한다. 그러나, 상기 설명된 바와 같이, 특별한 물리적 블록에 해당하는 구(old) 내용을 포함할 경우의 가상 블록의 크기/ 경계들은 동일한 특별한 물리적 블록에 해당하는 새로운 내용을 포함할 경우의 가상 블록의 크기와 몇몇 경우에서 다를 수 있으며, 따라서 아래에서 설명의 용이함을 위하여, 업데이트 순서는 물리적 블록들을 업데이트하는 순서를 말한다.
아래에서 기술하는 바와 같은 실시예에서, 내용이 비압축되는 경우 업데이트가 일어나기 때문에, 세그먼트들의 크기는 식 1과 2(좀더 아래에서 언급됨)를 계산하는 경우 물리적 블록에 해당하는 가상 블록의 비압축 세그먼트의 크기를 나타내는 것으로 가정된다. 그러나, 다른 실시예에서, 크기들은 압축될 경우의 세그먼트의 크기를 나타날 수 있다. 업데이트 버전에서 업데이트(비압축) 세그먼트들 해당하는 블록 B의 원래의(비압축) 세그먼트들은 "원래의 해당 세그먼트 CS"를 구성한 다. 잠재적으로 보호를 필요로 하는 구 블록의 세그먼트가 원래의 해당 세그먼트라는 점을 이해하면, 블록의 종속성 값은 그 곳에 포함된 모든 원래의 해당 세그먼트들의 전체 크기로 결정된다. 초기에 블록의 DEP 값은 식 1에 의하여 주어진다.
Figure 112008032220988-PCT00001
여기서:
Bi는 i번째 블록이다(여기서 언급된 블록들은 업데이트 블록들, 즉, 원래의 내용이 업데이트 내용에 의하여 덮어 쓰여지는 블록들이며, 한편, 업데이트되지 않는 그 블록들에 저장된 내용을 보호할 필요가 없다는 점을 주지할 것이다);
m은 잠재적으로 보호 (m>=0)를 필요로 하는 블록 내의 원래의 세그먼트의 수이다; 그리고
CSj는 업데이트된(비압축) 세그먼트에 해당하는 Bi 내의 원래의 세그먼트이며, 여기서 j=l, 2,…, m.
m=0인 경우, B1 내에 해당 세그먼트들이 존재하지 않으며, 따라서 DEP (Bi)=O이다.
예컨대, 도 9A에서, 블록(9A04)의 최초 종속성은:
DEP (9A04)=size(9All)+size(9A13)+size(9A14)+size(9A15)이다.
도 10은 업데이트 순서 결정을 위한 하나의 실시예를 상세히 설명하는 흐름도이다. 도시된 실시예에 의하여 결정된 업데이트 순서는 보호된 내용에 의하여 이 용된 영역 또는 공간을 감소시키도록 결정될 것이라는 점을 주지할 것이다. 업데이트 블록이 기억 장치에서 업데이트되는 것에 따른 순서이기 때문에, 업데이트 순서는 항상 업데이트 패키지와 관련하여 결정될 것이라는 점(이는 업데이트 과정의 동작에 따라서 업데이트 순서를 결정하는 업데이트 패키지이기 때문에) 또한 이해하여야 한다.
1001에서 업데이트 패키지는, 예컨대, 그 내용이 업데이트 버전의 세그먼트로 복사되는 원래의 세그먼트들 및/또는 그 내용이 원래의 세그먼트 등의 내용에 근거하여 산출되는 업데이트 세그먼트들을 식별함으로써 해당 세그먼트를 식별하기 위하여 분석된다. 위에서 설명한 바와 같이, 도 10에서 참조된 세그먼트들은 물리적 블록들에 해당하는 가상 블록 내의 내용의 비압축 세그먼트들로 추정된다. 원래의 버전에 임의의 대응관계도 없이 업데이트 버전으로 삽입되는 새로운 내용과 같이 업데이트 버전에 포함된 비대응(비대응) 세그먼트(즉, 원래의 버전의 세그먼트와 대응관계가 없는 세그먼트들)는 반드시 업데이트 순서에 영향을 미치지 않는다는 점을 주지할 것이다. 대안적으로, 대응하는 세그먼트들은 사전 식별될 수 있으며(예컨대, 도 11을 참조), 이 경우, 1001을 건너뛸 수 있다.
추가적으로, 사전 준비된 업데이트 패키지는 전제조건이 아니다. 사전 준비된 업데이트 패키지가 없는 경우, 예컨대, 당해 기술분야에서 또는 미국특허 6,546,552, WO 2004/114130 또는 WO 2005/003963에서 기술된 방법과 같은 임의의 다른 방법에 의하여 알려진 바와 같은 diff 툴을 이용함으로써 하나를 생성하는 것이 가능하다.
1002에서, 업데이트 버전을 위하여 업데이트될 모든 블록들은 "블록 목록"로 표시된 목록으로 열거되며, 여기서 k는 블록의 수이다. 목록(1003을 참조)에서 각각의 블록i(i는 = 1, 2,.., k)에 있어서, DEP(Bi)는 (1004에서) 산출된다.
도시된 실시예에 따르면, 그 종속성(DEP)이 가장 낮은 블록이 최초로 삽입될 경우, 블록들은 "업데이트 순서 큐"로 열거될 것이다 (그러므로 이는 최초로 회복될 것이다). 각각의 가상 블록이 하나의 물리적 블록에 해당하기 때문에(그리고, 예컨대, 방법 700 또는 800에서와 같이 물리적 블록에 해당하는 각각의 가상 블록의 경계들이 결정될 수 있다), 블록 목록 및 업데이트 순서 큐는 동일하게 가상 블록 또는 물리적 블록들을 언급하는 것으로 이해하여야 한다. 그러나, 상기 설명된 바와 같이, 특별한 물리적 블록에 해당하는 구 내용을 포함할 경우의 가상 블록의 크기/ 경계들은 동일한 특별한 물리적 블록에 해당하는 새로운 내용을 포함할 경우의 가상 블록의 크기와 몇몇 경우에서 다를 수 있으며, 따라서 아래에서 설명의 용이함을 위하여, 업데이트 순서는 물리적 블록들을 업데이트하는 순서를 말한다.
따라서, 1005에서 비어있는 큐는 초기화된다. 그러나, 상기 실시예는 비제한적이고 스택(stack)과 같은 다른 데이타 구조는 당해 기술분야에서 숙련된 기술을 가진 자들에 의하여 이해될 수 있을뿐 아니라, 또한 이용될 수 있다. 업데이트 순서에 따라서 업데이트될 첫번째 블록, 즉, 업데이트 순서 큐로 밀어 넣어지고(pushed) 첫번째 블록은 DEP가 가장 낮은 블록이다.
1006에서 블록 목록에서 그 DEP 값이 가장 작은 블록이 선택된다. 동일한 가장 작은 DEP 값을 가진 수개(하나 이상)의 블록들이 있는 경우, 이들 중 하나가, 예컨대, 가장 작은 i에 따라서 선택된다는 점을 주지할 것이다. 선택된 블록은 Bj로 표시된다. 1007에서, Bj는 업데이트 순서 큐로 밀어 넣어지고, 1008에서 블록 목록으로부터 제거된다. 블록 목록이 비어 있는 경우(k = 0), 1012에서 프로세스가 종결된다.
Bj가 다른 블록들에 의존하는 것이 가능하다는 점은 이미 설명되었다. 즉, 그 대응하는 원래의 세그먼트가 다른 원래의 블록들에 있는 Bj에서(또는 더 상세히는, Bj의 업데이트 버전에서) 어떻게든 업데이트된 세그먼트가 존재한다. 블록 목록에 여전히 열거된 각각의 다른 블록 Bo에 있어서, Bj의 업데이트 버전의 세그먼트에 해당하는 세그먼트들이 식별되고(블록 목록에서 열거된 다른 블록들의 시작 및 끝 주소들에 따라서 세그먼트들을 인식하는 것이 가능하다), 이들의 크기는 DEP(Bo)로부터 감소된다.
이렇게 하기 위하여, 여전히 블록 목록에 열거된 각각의 블록Bo(1009 및 1010을 참조)는 Bj가 블록Bo에 의존하는지 여부(즉, 그 해당 소스 세그먼트가 그 블록 Bo의 구 버전의 즉, Bj에 저장된 업데이트된 내용이 그 해당 소스 세그먼트가 블록 Bo의 구 버전인 세그먼트를 포함하는지 여부)를 알아본 예 위하여 테스트된다. 만약 Bj가 테스트된 블록 Bo에 의존하는 경우, 1011에서 의존하는 세그먼트들 식별되고 이들의 전체(비압축) 크기는 테스트된 블록 Bo의 종속성 값(DEP)으로부터 감소된다. 즉, Bo의 구 세그먼트에 해당하는 Bj의 업데이트된 세그먼트t가 존재하는 경우에,
Figure 112008032220988-PCT00002
여기서:
Bo는 Bj가 의존하는 블록 목록(아직 업데이트 목록에서가 아님)의 블록이고;
t는 Bj(t>=2)에서 업데이트 세그먼트에 해당하는 Bo에서의 해당 세그먼트(CS)의 갯수이고; 그리고
CSi는 Bo의 구 세그먼트이다. 이는 Bj의 업데이트 세그먼트에 해당한다
DEP 값들이 1011에서 잠재적으로 변경된 후, 가장 작은 종속성 값을 포함하는 다음 블록이 선택되고(1006), 그리고 프로세스 블록 목록이 비어 있는 것으로 밝혀질 때까지 자체 반복된다(이후, k=O으로 인식된다).
종료시, 업데이트 순서 큐는 결정된 업데이트 순서를 나타낸다. 하나의 실시예에 따라서, 업데이트 패키지는 업데이트 순서를 반영하기 위하여 재정비될 수 있음을 주지하여야 한다. 대안적으로, 업데이트 순서 또는 더 정확하게는 이들의 표현을 업데이트 패키지와 연관시키는 것이 가능하다. 업데이트 순서의 표현은, 예컨대, 업데이트 순서에 따라서, 이들의 타겟 세그먼트 주소에 따라 업데이트 패키지의 업데이트 명령들을 분류하고 저장하는 것에 의할 수 있다.
방법 1000은 블록 Bj를 업데이트하기 위하여 필요한 블록 Bo를 위한 임의의 세그먼트 CS도 다른 블록을 업데이트하기 위하여 필요하지 않다는 것을 가정하고 있음을 이해할 것이다. 그러나, 모든 종속적인 블록이 Bo에 앞서는 경우, Bo의 임의의 특정 세그먼트가 Bj에 추가하여 다른 블록들을 업데이트하기 위하여 필요할 수 있는 실시예에서, 식 2는 CS의 크기가 Bo의 DEP로부터 단지 덜 수 있도록 변경될 수 있다. 예컨대, 단계 1010은 "Bo에 의존하는 업데이트 순서에서 가장 최근의 블록이 Bj인가?"의 질문으로 변경될 수 있다.
도 11은 본 발명의 하나의 실시예에 따라서, 업데이트 패키지의 생성을 설명하는 흐름도다. 흐름도에 관한 세부 사항을 설명하기 전에, 업데이트 패키지를 생서하는 경우, 생성기는 보호 버퍼의 사용을 포함한여, 업데이트 장치들의 거동을 예측하여, 예컨대, 업데이트 순서를 결정함으로써 이들의 사용을 개선하도록 하여야 한다는 점을 이해하여야 한다. 보호 버퍼가 완전히 점유되는 (또는 이용할 수 없는) 것으로 예상하는 경우에만, 복사 명령들은 예컨대, 미국특허 6,018,747에서와 같은 삽입 명령들로 교환된다.
1101에서, 업데이트 패키지(첫번째 업데이트 패키지를 구성함)는 임의의 방법에 의하여 획득된다. 이는 국부적으로 생성되거나, 예컨대, 프로세스간 통신에서 통신 네트워크를 통해, 임의 종류의 기억 장치 등으로부터 읽어 들임으로써 외부 소스로부터 수신될 수 있다. 이를 위하여 (첫번째 업데이트 패키지를 구성하는) 업데이트 패키지는 미국특허 6,546,552, WO 2004/114130 또는 WO 2005/003963에 따르거나 알려진 per se diff 툴을 이용함으로써 임의의 알려진 방법에 의하여 생성될 수 있다.
하나의 실시예에서, 업데이트 패키지 생성의 일부로서, 구 버전은 압축해제되고 램으로 로딩되고(거나) 새 버전은 압축해제되고 램으로 로딩된다. 이러한 실시예에서, 압축해제된 구 내용의 가상 블록과 압축된 구 내용의 물리적 블록들 사 이에서 대응관계가 결정되고(거나), 이와 유사하게, 예컨대, 방법 800을 실행하거나 방법 700 또는 800의 이전 실행 중에 가상 블록 경계의 이전의 저장으로부터 압축해제된 새로운 내용의 가상 블록과 압축 새로운 내용의 물리적 블록 사이의 대응관계가 결정된다. 예컨대 하나의 실시예에서, 수신된 업데이트 패키지는 선택적으로 가상 블록 경계를 포함할 수 있거나 대안적으로, 단계 1101에서 실행된 압축해제의 일부로서, (예컨대, 방법 800에서와 같이 정의되는) 가상 경계는 국부적으로 생성된 업데이트 패키지에서 저장될 수 있다.
가상 블록(예전 또는 새로운 비압축 내용 중 어느 하나)과 물리적인 압축 블록들 사이의 대응관계가 알려져 있는 경우, 업데이트 명령이 실행되는 가상 블록의 타겟 비압축 세그먼트 및 소스 비압축 세그먼트들은 언제 소스 비압축 세그먼트 및 타겟 비압축 세그먼트들이 업데이트 순서로 업데이트되는지 결정하기 위하여 해당 압축 물리적 블록과 용이하게 연관될 수 있다. 이하에서, 특별히 다르게 언급하지 않는 한, 소스와 타겟 세그먼트들이 압축되지 않는다는 점을 가정한다.
업데이트 패키지는 1102에서 해당(비압축) 세그먼트 및 업데이트 순서를 식별하기 위하여 분석된다. 업데이트 순서는, 예컨대, 상기 도 10에 따라서 결정될 수 있다. 업데이트 순서를 결정하기 전에 내부의 해당 세그먼트를 식별하기 위하여 업데이트 패키지를 분석하는 것이 가능하다는 점을 주지할 것이다. 대안적으로, 업데이트 순서를 결정할 경우, 해당 세그먼트를 식별하는 것이 가능하다(예컨대, 도 10에서 1001 참조). 추가적으로 업데이트 패키지가 바람직한 업데이트 순서에 따라서 사전 편성될 경우, 또는 예컨대 바람직한 업데이트 순서를 배치하는 정보와 관 련되는 경우(목록 등)에는, 1102을 건너뛸 수 있다.
실시예에 따라서 업데이트 패키지를 생성하기 위하여 (1103) 이 장치를 위하여 업데이트 장치에서 보호 버퍼로서 이용가능한 저장 영역의 크기를 획득하는 것이 필요하며, 이에 의하여 이러한 장치를 위한 최적화된 업데이트 패키지를 생성하게 된다. 상기 실시예는 생성된 업데이트 패키지에 따라서 업데이트될 모든 기억 장치들이 그 크기가 실질적으로 상기 획득된 크기와 동일한 이용가능한 저장 공간이라는 점을 가정한다.
대안적으로, 다른 실시예에 따라서, 보호 버퍼를 위한 소정의 크기를 갖는 것이 가능하다. 이러한 후자의 실시예에 따라서 생성된 업데이트 패키지는 소정의 크기보다 더 크거나 동등한 자유 영역(free area)을 갖는 업데이트 장치에 적응된다. 예컨대, 업데이트 패키지 생성기에서 보호 버퍼의 필요한 크기(소정의 크기와 같이)를 결정하고, 업데이트 패키지의 필요한 크기를 저장하는 것이 가능하다. 업데이트 장치가 업데이트 패키지를 수신하거나, 업데이트 과정이 그에 따라 동작을 시작할 경우, 업데이트 장치는 업데이트 패키지에 저장된 필요한 크기에 따라서, 보호 버퍼를 할당하고자 시도할 수 있다. 보호 버퍼 할당을 위하여 장치에 충분한 자유 저장공간 영역이 없는 경우, 업데이트 과정의 동작을 종결하는 것이 가능하고, 이에 따라 기억 장치 과잉 등을 회피할 수 있다. 이용가능한 저장 공간 영역의 업데이트 크기를 가능한 포함하여, 상기 상황에 관하여 업데이트 패키지 서버(105)에 알리는 것이 추가적으로 가능하며, 이에 따라 업데이트 패키지의 전송 또는 재전송을 업데이트 장치에 더욱 적응되는 것이 가능하다. 이러한 업데이트 패키지는 업데이트 패키지 생성기(104)에 의하여 사전 준비되고 하기하는 바와 같이 업데이트 서버에서 사전 저장될 수 있다는 점을 주지할 것이다. 대안적으로, 업데이트 서버는 업데이트 패키지 생성기(104)로 하여금 이용가능한 크기 등에 적응된 업데이트 패키지를 생성하도록 지시할 수 있다.
또 다른 실시예가 가능하다. 예컨대, 보호 버퍼로서 사용될 수 있는 이용가능한 저장 공간을 얻기를 위한 업데이트 장치와 통신하는 것이 가능하고 (적응되지 않는 업데이트 패키지를 전송하는 경우 장치로부터 정보를 수신하는 것과는 달리), 이후 획득된 크기에 적응된 업데이트 패키지를 생성하고, 이를 업데이트 장치로 전달하는 것이 가능하다. 전술한 실시예들의 조합이 또한 가능하다.
당해 기술분야에서 숙련된 자들은 업데이트 장치가 업데이트 패키지를 수신할 경우, 이를 접근 가능한 저장 영역에 저장한다는 점을 이해할 것이다. 그러므로, 업데이트 장치의 이용가능한 저장 공간 영역을 고려할 경우, 업데이트 패키지 역시 그 곳에 저장될 것이라는 점을 고려하여야 한다. 이와 유사하게, 소정 저장공간 영역이 업데이트 과정 등의 동작을 위하여 필요할 수 있다.
도 11로 돌아가서, 실시예에 따라서 업데이트 패키지를 생성하기 위하여, 1104에서 업데이트 순서로 첫번째 업데이트 명령을 표시하기 위하여 커서가 개시된다. 이러한 커서는 "명령 커서"를 구성한다. 기술된 실시예에서, 업데이트 명령은 비압축 내용(즉 가상 블록의 세그먼트)를 나타난다. 도 11에 관한 설명을 계속하기 전에, 업데이트 명령은 실시예에 따라서, 일반적으로 3가지 주요 카테고리로 구분된다는 점을 주지할 것이다. 첫번째 종류는 원래의 버전의 세그먼트에 저장된 원래 의 내용에 기초하거나, 근거를 둔 명령들을 포함한다. 즉, 이러한 명령들은 업데이트된 내용을 생성하기 위하여 원래의 내용을 이용한다. 이러한 명령들은 "기초 명령들" 또는 "변형 명령들"을 구성한다. 예컨대, "복사 명령들"은 변형 명령의 종류에 속한다. 따라서, 변형 명령들은 "소스 세그먼트"(그 원래의 내용에 명령이 근거하는 원래의 세그먼트) 및 "타겟 세그먼트"(그 업데이트된 내용이 변형 업데이트 명령에 의하여 생성되는 업데이트 세그먼트)를 갖는다. 두번째 종류는 "통합 명령"으로서, 원래의 내용에 근거를 두지 않는 업데이트 내용을 업데이트 버전으로 통합하는 업데이트 명령들을 포함한다. 예컨대, "삽입 명령"은 내용을 업데이트 버전으로 도입하고; 이 내용은 원래의 버전으로부터가 아닌 업데이트 패키지 또는 다른 임의의 소스로부터 가져온다. 세번째 종류는 "지우기 명령들"이다. 지우기 명령은 업데이트 버전의 그 해당 세그먼트를 산출함이 없이 원래의 버전의 세그먼트에 포함된 원래의 내용을 지운다. 지우기 명령의 예는 "삭제" 업데이트 명령이다.
복사 명령들은 유일한 변형 명령이 아니라는 점을 주지할 것이다. 소스 세그먼트 및 타겟 세그먼트를 갖는 임의의 명령은 변형 명령이다. 예컨대, 하나의 이러한 변형 명령은 소스 세그먼트에 저장된 모든 소문자를 대문자로 변형시킬 수 있다. 다른 변형 명령은 소스 세그먼트에 저장된 수를 소정값 등으로 곱할 수 있다.
추가적으로, 변형 명령에 의하여 영향을 받은 내용은 "변경된 내용"을 구성한다. 소스 세그먼트가 상주하는 블록("소스 블록"을 구성) 및 타겟 세그먼트가 상주하는 블록("타겟 블록"를 만들어 내기)을 고려하는 경우, 소스 블록의 내용의 적어도 일부가 타겟 블록에서 변경된다는 점을 이해하여야 한다. 즉 소스 블록의 일 부는, 예컨대, 삭제되고, 따라서 업데이트 블록에 저장된 내용의 일부분을 형성하지 않는다.
도 11에서 도시된 실시예에 따라서, 업데이트 패키지의 각각의 업데이트 명령에 대하여(1105을 참조), 1106에서 명령 커서가 변형 명령을 표시하는지 여부가 결정되면, 만일 그렇다면, 소스 세그먼트의 원래의 내용이 명백한 보호를 필요로 하는지 여부가 검사되어야 한다.
도 9A 및 9B를 참조하여, 예컨대, 업데이트 블록의 내용을 업데이트할 경우, 업데이트 순서에 따라, 변형 명령의 타겟 비압축 세그먼트의 가상 블록에 해당하는 물리적인(압축) 블록이 변형 명령의 비압축 소스 세그먼트의 가상 블록에 해당하는 물리적인(압축) 블록보다 선행하는 경우 원래의 세그먼트의 내용의 명백한 보호가 요구되지 않는다는 것은 이전에 설명되었다. 그러므로, 1107에서, 소스 비압축 세그먼트의 가상 블록에 해당하는 물리적인(압축) 블록이 타겟 비압축 세그먼트의 가상 블록에 해당하는 물리적인(압축) 블록에 선행하는지 여부, 또는 소스 비압축 세그먼트의 가상 블록에 해당하는 물리적인(압축) 블록이 타겟 비압축 세그먼트의 가상 블록에 해당하는 물리적인(압축) 블록과 동일한지 여부가 검사되고, 만일 그렇다면, 소스 세그먼트의 내용은 보호를 필요로 한다. 내용을 보호하기 전에, 1108에서 보호 버퍼가 소스 세그먼트의 보호되는 복사본을 저장하기에 충분한 이용가능한 저장 공간 영역을 포함하는지 여부가 더 검사된다.
보호 버퍼에서 이용가능한 충분한 공간이 있는 경우, 1109에서 이용가능한 크기는 소스 세그먼트의 크기에 의하여 (예컨대, 비압축 형식으로) 감소되고, 선택 적으로, 1110에서 소스 세그먼트는 프리(free)로 표시된다. 프리로 소스 세그먼트를 표시되는 대신에, 대안적인 실시예가 소스 세그먼트의 원래의 내용을 삭제하거나, 동작을 전혀 실행하지 않는 것을 포함하여, 다른 임의의 적용 가능한 동작을 실행할 수 있다는 점을 주지할 것이다.
1111에서 명령 커서는 업데이트 순서에 따라서 다음 업데이트 명령으로 진행된다. 이를 위하여 업데이트 패키지 생성 도중 원래의 버전을 업데이트 버전으로 업데이트할 필요가 없으며, 이의 "시뮬레이션"이 충분하다는 점을 주지할 것이다. 이와 같이, 도 11의 흐름도에 따라서, 동작하는 경우, 업데이트 패키지 생성기(또는 그에 따라 업데이트 패키지를 생성하는 그 밖의 다른 임의의 프로세서)는 업데이트 명령에 따라서 동작할 필요가 없다.
1108으로 돌아가서, 소스 세그먼트의 보호되는 내용을 저장하기 위한 보호 버퍼 내의 이용가능한 공간이 충분하지 않은 것으로 밝혀진 경우, 업데이트된 내용으로 해당 압축한 세그먼트를 덮어쓰기 전에 이러한 내용이 그 밖의 다른 곳에서 보호되어야 한다는 점을 이해할 것이다. 도 3B와 3C를 참조하여, 예컨대, 업데이트 패키지 자체에 그 복사본을 저장함으로써 내용이 보호될 수 있다는 점은 앞서 주지한 바이다. 보호될 비압축 내용이 업데이트 패키지에 저장되나, 대안적으로 보호될 압축 내용은 업데이트 패키지에 저장될 수 있다는 점을 이하에서 가정한다. 그러므로, 1112에서 명령 커서에 의하여 지시된 업데이트 명령은 삽입 명령으로 교환되고, 1113에서 소스 세그먼트의 원래의 내용은 업데이트 패키지에 그 복사본을 저장함으로써 보호된다(예컨대, 미국특허 6,018,747를 참조).
도 11에서 도시된 실시예에서, 이용가능한 보호 버퍼 크기가 너무 작은 경우(1108을 참조), 보호를 필요로 하는 내용은 업데이트 패키지에 저장된다. 비록 소스 세그먼트가 보호 버퍼에서의 보호를 비하여 지나치게 크더라도, 보호 버퍼의 이용가능한 크기가 0보다 더 큰 경우에는, 다른 소스 세그먼트(더한 업데이트 순서에서 다른 변형 업데이트 명령의 소스 세그먼트 임)의 내용은 그 내부에서의 보호를 위하여 충분히 작을 수 있다는 점으로 이해하여야 한다.
대안적으로, 하나의 실시예에서, 1108에 대한 대답이 소정 횟수에서 "아니오"인 경우, 후속적인 변형 명령을 처리하는 경우, 1112는 직접 1107의 뒤를 잇는다(즉, 소스 세그먼트의 크기에 관계 없이 보호 버퍼에 공간이 없어 가정하여, 그로 인하여 후속적인 반복(subsequent iterations)에서 1108을 우회하여 1110으로 진행함).
하나의 실시예에서, 더 늦은 가상 블록을 업데이트할 경우 복사된 세그먼트가 대신 사용될 수 있도록, 소스 세그먼트가 업데이트 순서에서 더 일찍 업데이트 가상 블록으로 복사되는지 여부가 1107에서 검사될 수도 있다. 이런 경우에, 업데이트 명령은 복사된 세그먼트를 참조하도록 변경될 수 있고, 방법은 1111로 직접 계속된다(1113으로 1108를 우회함).
하나의 실시예에서, 1107은, 예컨대, 먼저 처리한 변형 명령 때문에, 소스 세그먼트가 보호 버퍼/업데이트 패키지에서 이미 보호되었는지 여부를 또한 검사하도록 변경될 수 있다. 하나의 실시예에서, 만약 소스 세그먼트가 보호 버퍼에서 이미 보호되었다면, 소스 세그먼트가 업데이트 도중 용이하게 얻어질 수 있다면, 방 법은 직접 1111로 계속된다(1113으로 1108을 우회함). 다른 실시예에서, 소스 세그먼트를 다시 보호하는 대신에, 보호된 소스 세그먼트에 대한 포인터가 대신 저장될 수 있다.
상기 실시예에 따라서, 보호 버퍼의 크기가 시스템 제한을 충족하기 위하여, 업데이트 패키지를 대가로 감소될 수 있으며, 그 반대도 마찬가지라는 것은 명백하다.
업데이트 패키지는 블록에 저장된 압축된 원래의 내용을 압축해제하기 위한, 압축해제 명령을 선택적으로 포함할 수 있다는 점을 주지하여야 한다. 이는 또한 업데이트된 부분들을 압축 업데이트 버전의 블록들에 저장된 내용으로 압축하기 위한, 압축 명령들을 포함할 수도 있다.
상기 실시예에 따라서, 업데이트 패키지는, 업데이트 패키지 빌더(builder) 및 업데이트 장치에 의하여 인정된 압축 방법을 이용하여, 도 12A와 12B를 참조하여 하기하는 바와 같이 업데이트 장치에 공급하기에 앞서 압축될 수 있다.
업데이트 장치에서 동작하는 업데이트 과정을 기술하기에 앞서, 몇몇 실시예에 따라서, 도 9A, 9B 및 9C를 참조하여 이미 주지된 바와 같이, 그 효과를 증가하기 위하여 보호 버퍼가 재사용될 수 있다는 점을 이해하여야 한다. 즉 보호 버퍼에 저장되는 내용이 더 이상 필요하지 않는 경우, 몇몇 실시예는 이러한 필요하지 않은 내용에 의하여 사용된 영역을 프리영역으로 해제할 수 있으며(예컨대, 내용을 물리적으로 삭제하거나 이를 프리로 표시함으로써), 이렇게 하여 업데이트 과정으로 하여금 업데이트하고 있는 동안 필요한 추가 백업 동작들을 위한 자유 영역을 재사용하는 것을 가능하게 한다. 보호 버퍼를 효과적으로 재사용하는 것은 추가 보호 동작을 실행하는 것을 허용하고, 따라서 업데이트 패키지의 크기는 감소될 수 있다(보다 적은 보호되는 내용이 내부에 저장될 필요가 있음). 재사용은 업데이트 패키지의 생성 도중 모의 테스트되고, 따라서 생성기로 하여금 보호 버퍼가 가득 차는 시기 및 자유 공간이 존재하는 시기를 파악할 수 있도록 한다.
업데이트 패키지 생성을 위한 실시예를 고려한 후, 본 발명의 하나의 실시예에 따라서, 원래의 버전을 이의 업데이트 버전으로 업데이트하는 것을 설명하는 흐름도를 함께 도시하는 도 12A와 12B를 이제 설명하기로 한다. 도 12A와 12B에서 도시된 흐름도는, 예컨대, 업데이트 장치에서 동작 가능한 업데이트 과정에 적용 가능하다. 도시된 실시예는 블록들을 포함하는 기억 장치를 포함하는 업데이트 장치에서 동작하도록 적응된다는 점을 이해하여야 한다.
업데이트 과정이 동작을 시작하는 경우, 1201에서, 이는 예컨대, 휘발성 또는 비휘발성 메모리의 기억 장치(103)에 저장된 업데이트 패키지를 획득하거나 이에 접속한다. 업데이트 장치가 업데이트 서버(105)로부터 업데이트 패키지를 미리 수신할 수 있다는 점을 이해할 것이다. 대안적으로, 업데이트 패키지는 휴대용 기억 장치(예컨대, 플로피 또는 콤팩트 디스크)로부터 이를 복사함으로써 또는 인터넷에서 그것을 수신함으로써 임의의 적용 가능한 방법에 의하여 기억 장치로 로딩되었다. 실시예에 따라서, 업데이트 패키지는 패키지 빌더 및 업데이트 장치에 의하여 인정되는 압축해제 방법을 이용하여 압축해제될 필요가 있거나 필요하지 않을 수도 있다. 실시예에 따라서, 접속된 업데이트 패키지에는 소정 업데이트 순서를 갖는다는 점을 더욱 이해하여야 할 것이다. 업데이트 순서는 업데이트 패키지의 업데이트 명령의 순서에 의하여 간단히 결정될 수 있거나, 예컨대, 명령들이 패키지에서 나타나는 순서와 다른 경우, 업데이트 명령을 실행하는 순서를 결정하는 목록과 같은, 업데이트 패키지와 관련하여 저장된 추가 정보에 따라서 결정될 수 있다. 본 예에 따르면, 업데이트 순서는 업데이트 장치에서 보호 버퍼 사용을 감소시키거나, 적어도 내부의 이용가능한 보호 버퍼의 이용을 향상시키도록 구성된다. 하나의 실시예에 따르면, 도 10 및 11의 흐름도에 따라서 업데이트 패키지가 생성되고 업데이트 순서가 결정될 수 있다(예컨대, 업데이트 패키지 생성기에서).
1201에서, 원래의 압축 버전은 기억 장치로부터 회복되고 램으로 압축해제된다. 압축해제된 원래의 버전의 가상 블록과 압축된 원래의 버전의 물리적 블록 사이 대응관계는 예컨대 도 8의 방법의 실행을 통하여 결정되거나 도 7 또는 8의 방법의 이전 실행 중에 가상 블록 경계의 이전 저장으로부터 결정된다. 예를 들어, 하나의 실시예에서 획득된 업데이트 패키지는 선택적으로 압축해제된 원래의 버전의 가상 블록 경계를 포함할 수 있다. 어쨌든, 업데이트 명령들이 실행되는 가상 블록들의 소스 비압축 세그먼트들은 비압축 소스 세그먼트가 업데이트 순서로 업데이트되는 때를 결정하기 위하여 해당(압축) 물리적 블록들과 용이하게 연결될 수 있다.
하나의 실시예에서, 획득된 업데이트 패키지는, 예컨대, 도 7 또는 8의 방법의 실행을 통하여 먼저 결정되고 저장되었던 새로운 비압축 버전의 가상 경계를 포함한다. 이러한 경우에, 업데이트 명령이 실행되는 가상 블록의 타겟 비압축 세그 먼트들은 타겟 비압축 세그먼트가 업데이트 순서에서 언제 업데이트되는지 결정하기 위하여 해당(압축) 물리적 블록들과 용이하게 연결될 수 있다. 그러므로, 설명의 용이함을 위하여, 가상 경계들은 업데이트 패키지로 수신되었다는 것을 가정한다. 다른 설명에서, 이러한 가정은 다른 실시예를 설명하는 경우에 완화될(relaxed) 것이다.
실시예에 따르면, 임의의 내용을 업데이트하기 전에(이에 따른 보호를 필요로 하는 원래의 내용을 덮어쓰기하는데 따른 위험), 업데이트 과정은 1201에서 획득된 업데이트 패키지에 따라서 업데이트 과정을 운영하기 위한 업데이트 장치에서 이용가능한 충분한 기억 장치가 있는지 1202에서 검사한다. 실시예에 따르면, 업데이트 패키지가 필요한 보호 버퍼 크기의 표시를 포함하는 경우에, 이러한 필요한 보호 버퍼 크기는 1202에서 업데이트 장치에서 이용가능한 보호 버퍼 크기와 비교되며, 이용가능한 보호 버퍼 크기가 충분하지 않은 경우 업데이트 과정을 종결한다.
게다가, 임의의 내용을 업데이트하기 전에 업데이트 과정은 보호를 필요로 하는 모든 원래의 내용을 보호한다. 1202에서 실행된 검증에 의하여, 이용가능한 보호 버퍼는 보호를 필요로 하는 모든 데이터 저장하기에 충분한 것이 보장되고, 따라서, "이용가능한 보호 버퍼 크기 >= 세그먼트 보호 크기"와 같은 추가 테스트가 남는다.
보호를 허용하기 위하여, 포인터 또는 커서가 1203에서 업데이트 순서에 따라서 최초 업데이트 명령을 표시하도록 개시된다. 이러한 커서는 "명령 커서"를 구 성한다. 명령 커서는 업데이트 순서에 따라서 더 진행될 것이다.
게다가, 1204에서 보호 버퍼에 대한 포인터가 개시되어, "보호 포인터"를 구성한다. 보호 포인터는 보호 데이타가 다음에 쓰여져야 할 보호 버퍼의 위치를 표시한다. 실시예에 따라서 업데이트 장치는, 예컨대, 램("램 보호 버퍼"를 구성함)에서 보호된 내용의 복사본을 생성할 수 있으며, 이후, 램 복사본이 완전한 경우(즉, 보호될 필요가 있는 모든 내용을 포함하는 경우), 이를 비휘발성 저장 장치의 "비휘발성 보호 버퍼"(또한, "비휘발성 백업 버퍼"를 구성함)로 쓰기한다는 점을 주지할 것이다. 비휘발성 백업 버퍼로 램 보호 버퍼에 저장된 보호된 내용을 쓰기하는 것은 "백업 블록 저장 동작"으로 불린다. 비휘발성 저장 장치는 블록을 포함하는 기억 장치이기 때문에(램과 달리), 이러한 방법은 모든 보호되는 세그먼트의 내용을 직접 비휘발성 보호 버퍼로 쓰는 것보다 더 효율적이다. 이를 위하여, 이 경우에 보호 포인터가 보호되는 데이타가 다음에 쓰여져야 하는 램 보호 버퍼에서의 위치를 표시한다는 점을 이해할 것이다. 특별히 주지하지 않는 한, 이하의 설명에서 램과 비휘발성 보호 버퍼 간의 구별 없이 "보호 버퍼"를 언급하는 것으로 주지할 것이다.
"램 보호 버퍼"가 "휘발성 보호 버퍼"의 단지 하나의 예라는 점을 주지할 것이다.
가상 블록들의 임의의 세그먼트들이 보호 버퍼에서 보호될 필요가 있는지 여부가 이제 검사된다. 각각의 업데이트 명령을 위하여(1205을 참조), 업데이트 과정은 명령 커서가 변형 업데이트 명령을 표시하는지 여부를 검사한다(1206에서). 변 형 업데이트 명령이 아닌 업데이트 명령이 보호를 필요로 하지 않는다는 점을 이해하여야 한다. 그러므로, 1207에서 명령 커서는 다음 업데이트 명령으로 진행될 수 있다. 그러나, 1206에서 업데이트 과정이 업데이트 명령이 변형 명령이라는 점을 결정하는 경우, 명령의 소스 세그먼트를 포함하는 가상 블록에 해당하는 물리적 블록이 업데이트 순서에서 선행하는지 또는 타겟 세그먼트를 포함하는 가상 블록에 해당하는 물리적 블록과 동일한지 여부가 1208에서 더 검사된다. 또 다시, 타겟 세그먼트를 포함하는 가상 블록에 해당하는 물리적 블록이 명령의 소스 세그먼트를 포함하는 가상 블록에 해당하는 물리적 블록을 선행하는 경우에 보호가 요구되지 않으며 업데이트 과정은 (1207에서) 명령 커서를 진행할 수 있다는 점을 이해하여야 한다. 그러나, 명령의 소스 세그먼트를 포함하는 가상 블록에 해당하는 물리적 블록이 타겟 세그먼트를 포함하는 가상 블록에 해당하는 물리적 블록에 대하여 업데이트 순서에서 선행하거나 동일한 경우, 보호가 요구된다. 따라서, 1209에서 업데이트 과정은 보호 버퍼, 즉, 보호 포인터에 소스 세그먼트를 복사하고, 1210에서 소스 세그먼트의 크기에 의하여 보호 포인터를 진행한다. 소스 세그먼트가 업데이트 순서에서 업데이트 가상 블록으로 먼저 복사되었고, 업데이트 블록의 복사된 세그먼트로부터 타겟 세그먼트를 복사하도록 업데이트 명령이 변경되었던 실시예에서, 보호는 또한 필요하지 않다. 소스 세그먼트가 보호 버퍼/업데이트 패키지에서 이미 보호되었던 실시예에서(예컨대 소스 세그먼트가 이미 변형 명령에 지배를 받았었기 때문에), 예컨대, 소스 세그먼트가 업데이트 도중 용이하게 얻어질 수 있다고 가정하면, 동일한 소스 세그먼트의 보호는 또한 필요하지 않을지도 모른다. 다 른 실시예에서, 소스 세그먼트 다시 보호하는 대신에, 보호된 소스 세그먼트에 대한 포인터가 대신 저장될 수 있다.
상기 주지된 바와 같이, 단순화를 위하여, 보호된 세그먼트가 비압축이나 다른 실시예에서 세그먼트가 압축 및/또는 달리 조작될 수 있음을 가정한다.
앞서 주지된 바와 같이, 1206, 1207, 1208, 1209 및 1210를 참조하여 이제까지 기술된 과정은 업데이트 과정이 보호를 요구하는 모든 세그먼트들을 보호할 때까지 반복한다(1205을 참조). 이것이 완료된 후에, 보호를 필요로 하는 내용은 보호 버퍼에서 보호된다. 보호 버퍼의 보호된 내용을 보호하기 위하여 이용된 보호 동작의 개수는 p.로 언급된다. 그러나, 보호 버퍼가 램 보호 버퍼인 경우, 그 내용은 원래의 버전의 원래의 내용을 업데이트하지 전에 비휘발성 보호 버퍼에 저장되어야 함을 주지할 것이며, 이에 따라, 원래의 내용의 적어도 부분들을 덮어쓰기하고, 이에 따라 과정이 중단되고 복구되는 경우 업데이트 과정에 신뢰성을 제공하게 된다. 비휘발성 보호 버퍼의 저장은, 예컨대, 1205 후 그리고 1221로 이동하기 전에 일어날 수 있다.
보호 버퍼의 내용을 보호한 후에, 업데이트 과정은 원래 기억 장치에 저장된 원래의 내용을 업데이트하는 것을 시작하여, 업데이트 버전을 생성할 수 있다. 이렇게 하기 위하여, 이전에 보호 버퍼에서 보호된 원래의 내용이 원래의 버전으로부터 읽어오는 대신 그로부터 읽어와야 한다는 점을 이해하여야 한다. 즉 이러한 내용은 복구되어야 한다. 그러므로, "복구 포인터"를 구성하는, 새로운 포인터는 1211에서 초기화되고, 보호 버퍼의 시작을 초기 지시한다. 1212에서, 명령 커서는 업데이트 패키지의 최초 업데이트 명령을 표시하도록 재설정된다.
도시된 실시예에서, 압축 물리적 블록에 해당하는 가상 업데이트 비압축 블록의 가상 경계가 알려지고, 그리고 각각의 업데이트 가상 블록은 물리적 블록으로 효율적으로 그리고 독립적으로 압축될 수 있음을 가정한다.
도시된 실시예는 블록을 포함하는 기억 장치를 위하여 적응되어, 램(또는 일반적으로 휘발성 업데이트 버퍼")에 업데이트 가상 블록의 복사본을 생성하고, 이후, 전체 가상 블록의 내용을 비휘발성 기억 장치의 해당하는 물리적 블록으로 압축한다는 점은 앞서 설명되었다. 휘발성 업데이트 버퍼에 저장된 내용을 비휘발성 기억 장치의 물리적 블록으로 압축하는 동작은 "업데이트 블록 저장 동작들"로 언급된다. 그러므로, "블록 커서"를 구성하는 추가 커서는 1213에서 업데이트 순서에 따라서 최초 업데이트된 블록을 표시하도록 초기화된다.
이하에서, 업데이트 블록 저장 동작 및 백업 블록 저장 동작의 개수는 m으로 언급된다. 그러나 이는 비제한적이며 m은 비휘발성 저장 장치의 블록에 내용을 저장하는 모든 동작을 포함하는, 블록 저장 동작들의 전체 개수를 나타낸다.
1214에서 명령커서가 변형 업데이트 명령이 아닌 업데이트 명령을 표시하는 것으로 결정되는 경우, 이러한 업데이트 명령은 원래의 버전의 일부분인 원래의 내용에 근거를 두지 않는다는 점 이해할 것이다.
즉, 원래의 버전 또는 보호 버퍼에 저장된 내용에 기초를 두지 않으며, 그리고 그에 따라 1215의 업데이트 과정은 명령에 따라 동작할 수 있고, 따라서 램에 타겟 세그먼트의 복사본을 생성한다. 변형 명령들이 아닌 업데이트 명령들은 1112 에서 선택적으로 업데이트 패키지로 삽입된 삽입 명령을 포함할 수 있다. 1214으로 돌아가서, 만약 업데이트 과정이 명령 커서가 변형 명령을 표시하는 것으로 결정하는 경우, 1216에서, 명령의 소스 세그먼트를 포함하는 가상 블록에 해당하는 물리적 블록이 타겟 세그먼트를 포함하는 가상 블록에 해당하는 물리적 블록보다 업데이트 순서에서 선행하거나 또는 동등한지 여부가 더 검사된다. 도시된 실시예에서 상기한 바와 같이, 분석은 가상 블록의 비압축 세그먼트 및 가상 블록의 비압축 세그먼트에 관련된 명령들과 관련된다. 업데이트 순서에 따라서 타겟 세그먼트의 가상 블록에 해당하는 물리적 블록들을 따르는 물리적 블록들에 해당하는 가상 블록에 포함된 소스 세그먼트에 있어서 보호가 필요하지 않다는 점을 기억하면, 업데이트 과정은 1208 및 1209에서 이러한 업데이트 명령의 소스 세그먼트를 보호하지 않는다는 점을 이해할 것이며, 이를 보호 버퍼에 복사하는 대신 원래의 내용을 원래의 세그먼트에 저장된 채로 남겨둔다. 그러므로 1217에서 업데이트 과정은 업데이트 명령의 소스 세그먼트으로부터 소스 내용을 읽고, 1215에서 업데이트 과정은 업데이트 명령에 따라서 동작하여, 램에 타겟 세그먼트의 복사본을 생성한다.
그러나, 1216에서 업데이트 과정이 소스 세그먼트의 가상 블록에 해당하는 물리적 블록이 타겟 세그먼트의 가상 블록에 해당하는 물리적 블록보다 선행하거나 동일한 것으로 결정한 경우, 보호 버퍼로부터 원래의 내용(또는 이의 복사본) 읽어 들여야 한다. 그러므로, 1218에서 업데이트 과정은 복구 포인터(restoration pointer)에 의하여 지시된 주소로부터 소스 내용을 읽고, 1219에서 복구 포인터는 소스 세그먼트의 크기에 의하여 진행되어, 다음 보호 세그먼트를 지시하고, 그리고 1215에서 업데이트 과정은 업데이트 명령에 따라서 동작하여, 램에 타겟 세그먼트의 복사본을 생성한다.
1215를 이어, 어느 쪽이든지(램의 타겟 내용을 생성하는 업데이트 명령의 실행), 1215에서 램으로 업데이트 블록의 마지막 타겟 세그먼트의 내용을 쓴 경우에 업데이트 과정이 램에 저장된 내용을 업데이트 블록으로 압축할 것이라는 점을 이해할 것이다. 그러므로, 1220에서 업데이트 과정은 명령 커서가 블록 커서에 의하여 지시된 블록의 마지막 업데이트 명령을 표시하는지 여부를 검사하고, 만일 그렇다면, 1221에서 램에 현재 저장된 업데이트 가상 블록의 비압축 내용은 기억 장치의 업데이트 물리적 블록으로 압축되고 1222에서 블록 커서는 다음 업데이트 블록으로 진행된다. 대안적으로, 업데이트 가상 블록의 내용은 몇몇 경우에는 램으로 최초 압축되고(물리적 블록의 크기) 이후 저장 공간에 복사될 수 있다. 대안적인 실시예에서, 가상 블록의 각각의 업데이트 세그먼트는 램으로 분리되어 압축될 수 있으며, 물리적 블록의 정확한 크기가 램에 도달될 경우, 압축 블록은 저장 공간으로 복사된다.
그러나, 1220에서 업데이트 과정은 업데이트 명령이 업데이트 블록에서 마지막이 아니라는 것을 결정하는 경우(블록 커서에 의하여 지시된 바와 같이), 명령 커서는 램 저장 내용을 복사하거나 블록커서를 진행함이 없이 진행된다(1223을 참조)는 점을 주지할 것이다. 업데이트 가상 블록의 마지막 명령을 넘어 명령 커서를 진행함으로써(1223에서), 다음 업데이트 가상 블록에서 최초 업데이트 명령을 표시하게 된다는 점을 또한 주지할 것이다. 그리고 진행된 명령 커서는 업데이트 순서 에 따라서 마지막 업데이트 명령보다 선행하거나 이와 동등한 경우(1224을 참조), 업데이트 과정은 이러한 업데이트 명령에 따라서 동작되어, 업데이트 내용을 생성한다(1214, 1215, 및 1216 등을 참조). 대안적으로, 1224에서 업데이트 과정이 마지막 업데이트 명령을 지나서 이동한 것으로 결정되는 경우, 업데이트 버전이 기억 장치에서 저장되기 때문에, 업데이트 과정은 종료될 수 있다.
다른 실시예에서, 가상 경계들이 알려지거나 효율적인 압축이 중요하지 않다고 가정하는, 상기한 바와 같이 각각의 블록을 분리하여 압축하는 것보다는 오히려, 대신 단계 1221은 1224을 따른다. 즉, 예컨대, 방법 700을 이용하여 블록 단위로 차례로 달성된다.
다른 실시예에서, 원래의 버전이 램으로 압축해제되고, 그리고 업데이트 비압축 버전이 램의 다른 영역에 쓰여질 것으로 가정한다(즉 램의 원래의 버전을 덮어쓰지 않음). 상기 실시예에서, 단계 1207 이전에(즉, 다음 업데이트 명령으로 진행하기 이전에), 현재의 업데이트 명령이 실행되어, 램의 다른 영역에 완전한 업데이트 비압축 버전을 구축할 수 있다. 상기 실시예에서, 단계 1211 및 1212는 생략될 수 있다. 단계 1213에서, 블록 커서는 업데이트 순서에서 최초 물리적 블록에 해당하는 램의 업데이트 가상 블록을 지시한다. 단계 1214 내지 1220는 원래의 버전이 여전이 램에 있고, 따라서 모든 원래의 세그먼트가 업데이트 도중 접속될 수 있기 때문에 상기 실시예에서 생략될 수 있다. 단계 1221과 1222는 즉, 각각의 가상 블록의 압축 및 업데이트 순서로 발생하는 저장공간에 쓰기를 이용하여(압축 물리적 블록에 해당하는 업데이트 비압축 가상 블록의 가상 경계들이 알려진 것으로 가정함), 직접 단계 1213의 뒤를 따른다. 단계 1221 및 1222은 업데이트 순서의 마지막 블록에 도달될 때까지 반복된다. 단계 1223 및 1224는 생략된다.
다른 실시예에서, 업데이트 버전의 가상 블록을 위한 가상 경계들이 업데이트 패키지로부터 또는 방법 1200을 실행하기 이전에 알려지지 않은 것으로 가정한다. 업데이트 패키지의 업데이트 명령들은 업데이트 버전의 블록들의 가상 경계들로부터 독립적이라고 가정한다. 예컨대, 업데이트 패키지는 업데이트 비압축 버전을 위하여 램에서 할당되어야 하는 주소 범위를 지정할 수 있고 명령들은 상기 범위 내의 주소와 관련될 수 있다(예컨대, 범위의 상부 또는 하부 경계에 대하여). 상기 실시예들에서, 업데이트 명령은 특별하지 않은 순서로 실행되어, 램에 업데이트 비압축 버전을 구축한다(구 비압축 버전은 덮어쓰이지 않는다). 이후, 비압축 업데이트 버전은, 예컨대 램의 동일 크기 영역이 각각의 물리적 블록을 대체하는, 방법 700를 사용하여 램에 압축될 수 있다. 일단 압축이 달성되면, 비압축 업데이트 버전의 가상 블록 경계들이 알려진다. 상기 실시예들 중의 어느 하나의 실시예에서 상기 업데이트 버전의 가상 경계들은 예컨대 보호 버퍼의 비휘발성 기억 장치에 저장된다. 이후, 업데이트 명령들은 예컨대 업데이트 순서(또는 방법 1100에서 따르는 임의의 순서)로 보호 버퍼에서 보호될 필요가 있는 임의의 소스 세그먼트들을 보호하기 위하여 분석된다 - 단계 1203, 1204, 1206, 1208, 1209, 1210, 1207, 및 1205에 관한 상기 설명을 참조하시오. 이후, 압축 업데이트 버전은 업데이트 순서대로 저장 공간에 쓰여진다(단계 1221).
몇몇 실시예에서, 복구 포인터에 추가하여 또는 대신에, 보호 버퍼에 보호 내용을 위치시키기 위한 다른 매체, 예컨대, 보호 버퍼의 보호된 세그먼트의 위치와 소스 세그먼트/블록 및/또는 타겟 세그먼트/블록 사이의 상호 참조표가 이용된다. 상기 실시예들에서, 각각의 블록을 완전하게 처리, 즉 업데이트, 복구 포인터 진행, 다른 블록을 처리하기 이전에 저장 공간에 쓸 필요가 없으며, 그 결과 중단하는 경우에 복구 포인터가 보호 버퍼의 정확한 세그먼트를 지시할 것이다.
도 12A 및 12B 의 흐름도 및 도 9A, 9B 및 9C의 예에 더하여, 보호 내용의 크기는 하나의 실시예에서 업데이트 버전에서 변경된 원래의 버전의 n(n>1) 개의 블록의 수보다는 더 적은 블록을 포함할 수 있다는 점을 이해하여야 한다. 즉, 상기 실시예에서 n 보다 적은 동작들이 비휘발성 보호 버퍼에 보호 내용을 저장하는데 요구된다. 만약 블록 저장 동작의 수가 m이라고 지정되는 경우, 상기 실시예에서 2<=m<2n임을 이해하여야 한다.
보호 버퍼를 재사용하는 것이 유리할 수 있다는 점을 또한 주지할 것이다. 업데이트 패키지의 생성 도중 시뮬레이트된 재사용(도 11을 참조)은 도 12A 및 12B에서 기술된 업데이트 과정의 거동(behavior)을 반영한다. 그러므로, 재사용이 이용되는 경우에, 1221에 더하여 업데이트 압축 내용이 사용한 보호 내용을 단지 저장하는지 검사하는 것이 가능하고, 만약 그렇다면, 추가적 세그먼트들(동일한 물리적 블록에 해당하거나 업데이트 순서에 따라서 뒤따르는 다른 물리적 블록들에 해당함)을 업데이트하는데 보호 내용이 요구되지 않는 한, 이러한 보호 내용은 프리(free)로 표시될 수 있다. 상기 실시예에서, 비휘발성 보호 버퍼의 하나의 블록에 저장된 모든 보호되는 내용이 프리로 표시되는 경우, 상기 보호되는 내용은 삭 제될 수 있으며, 블록은 재사용될 수 있다.
위에서 언급된 바와 같이, 몇몇 경우에 새 버전에 사용된 압축 알고리즘 및/또는 압축 비율은 원래의 버전에 사용된 압축 알고리즘 및/또는 압축 비율과 반드시 동일하지 않다. 신(new) 버전에서 사용된 압축이 원래의 버전에서 사용된 압축과 같은지 아니면 다른지에 관하여 아무런 제한이 없기 때문에 방법 1200은 이러한 가능성을 완전히 허용한다. 몇몇 실시예에서, 비압축 내용의 업데이트가 아닌 다른 알고리즘 및/또는 압축 비율을 이용하는 단순히 원래의 내용의 재압축이 존재한다는 점을 또한 이해하여야 한다. 상기 실시예들에서, 업데이트 패키지는 다른 알고리즘 및/또는 압축 비율을 이용하여 원래의 내용을 재압축하는 명령을 포함할 수 있다. 상기 실시예에서 변형 명령들이 없기 때문에, 소스 세그먼트들은 보호될 필요가 없으며, 따라서, 보호 버퍼의 세그먼트 보호의 시뮬레이션 및 방법 1100에서 업데이트 명령들의 삽입 명령들으로의 교체가 상기 실시예에서 생략될 수 있다. 유사하게, 방법 1200에서 보호 버퍼의 소스 세그먼트들의 실제적인 보호는 상기 실시예들에서 생략될 수 있다. 그러므로, 인플레이스 업데이트는 원래의 버전이, 비압축 원래의 버전의 내용이 비압축 업데이트 버전의 내용과 동일한지 여부에 관계없이, 원래의 버전과는 다른 알고리즘 및/또는 압축 비율에 따라서 압축된 새로운("업데이트된") 버전으로 인플레이스 업데이트되는 실시예들을 포함하는 것으로 이해되어야 한다.
이제, 도 12에 따라서 블록들을 업데이트하고 있는 동안, 프로세스가 어떤 이유로 중단되고 램의 내용이 지워진다고 가정한다. 이런 경우에, (비휘발성) 기억 장치, 업데이트 패키지 및 보호 버퍼의 물리적 블록의 내용들은 지워지지 않는다. 그러나, 독자는 상기 논의된 바에 기초하여, 일단 단계 1221 또는 저장공간으로의 동등한 쓰기가 적어도 하나의 블록에 대하여 실행된 이상, 구(압축) 내용을 원래 구성했던 몇몇 물리적 블록들이 대신 이미 발생한 업데이트로 인하여 중단된 새로운(압축) 내용의 경우를 포함할 것이라는 점을 이해할 것이다. 몇몇 실시예에서, 보호를 필요로 하는 세그먼트가 단계 1209에서 보호되었기 때문에, 업데이트는 업데이트 순서에 따라서 업데이트될 다음 블록으로 확실하게 계속될 수 있다. 재개 위치는 예컨대 참고로서 본원에 포함된 Meller 외의 미국 공개 출원 번호 20050216530에서와 같이 결정될 수 있다. 상기 실시예들 중 어느 하나의 실시예에서, 물리적 블록들에 해당하는 업데이트 가상 블록들의 가상 경계들이 알려져 있는 것으로 가정하면, 새로운 내용 구성하는 물리적 블록을 추가로 다루는 것이 필요 없다. 그러므로, 이러한 실시예들에서, 아직 업데이트되지 않은 모든 물리적 블록들(즉, 구 내용을 포함함)은, 예컨대, 방법 800에 따라서 램으로 압축해제될 수 있고, 이후 상기 방법은 아직 업데이트되지 않은 업데이트 순서로 최초 블록을 지시하는 블록 커서를 이용하여 단계 1213을 계속할 수 있다. 상기 실시예들 중 몇몇에서, 1218의 복구 포인터는 관련되지 않으며 보호 버퍼로부터의 내용은 상호 참조표를 이용하여 회복될 수 있다.
도 11 및 12를 참조하여 기술된 실시예들이 변형 명령들에 관련한 소스 세그먼트들이 보호 버퍼 및/또는 업데이트 패키지에서 잠재적으로 보호될 수 있다고 가정하더라도, 다른 실시예들에서, 변형 명령들에 관련한 다른 데이터가 추가로 또는 대신하여 보호될 수 있다. 예컨대 이러한 다른 실시예들 중 어느 하나에서, 타겟 세그먼트들은 소스 세그먼트에 추가하여 또는 대신하여 잠재적으로 보호될 수 있다. 다른 예에서와 같이, 이러한 다른 실시예들 중 어느 하나에서, 소스 및/또는 타겟 세그먼트들의 조작 형태는 보호될 수 있으며, 여기서 상기 조작은 명령에 의하여 지시된 변형(transformation)과 관련되거나 관련되지 않을 수 있다.
지금까지 기술된 실시예는 각각의 가상 블록이 물리적 블록으로 독립적으로 압축된다고 가정했다. 그러므로 이러한 실시예에서, 각각의 물리적 블록은 해당 가상 블록으로 독립적으로 압축해제될 수 있다.
단일 블록 실시예를 이해한 후, 종종 압축이 한번에 하나 이상의 블록상에서 수행되는 점을 주지하여야 한다(즉, 하나의 블록의 압축은 다른 블록들의 압축에 의존할 수 있다). 예를 들어, 원래 및 업데이트 버전이 사전 준비되고 사전 압축된 경우, 이후 업데이트 패키지 생성을 위한 업데이트 패키지 생성기로 전달된다(한편, 업데이트 패키지 생성기는 압축 순서 및 압축 알고리즘에 관한 정보를 포함함). 따라서 "다중 블록 실시예"로 언급되는 대안적인 실시예가 이하에서 기술된다.
다중 블록 실시예에서, 압축된 원래의 버전의 일부를 포함하는 소정 블록에 저장된 소정 압축 내용을 성공적으로 압축해제하기 위하여, 소정 압축 내용이 의존하는, 다른 블록들에 저장된 압축 내용을 압축해제하는 것이 종종 필요하다. 예컨대, 몇몇 압축 방법(이하에서, 집(zip)으로 언급되는 집 툴에 의하여 사용되는 것과 같은)에서, 내용 조각이 내용에서 한번 이상 다시 나타나는 경우, 하나의 출현(appearance)은 압축된 버전의 하나의 블록에 유지되는 한편, 다른 출현은 포인 터, 또는 "압축-참조"를 이용하여 다른 하나로 교체되어, 상기 조각의 출현을 반복하는 것을 방지한다(포인터는 더 압축될 수 있음). 이러한 예는 도 13에 도시되며, 여기서 1301은 비압축 버전을 나타낸다. 비압축 버전(1301)은 1302, 1303 및 1304가 설명되는 몇몇 가상 블록들을 포함한다. 가상 블록(1302)은 내용의 조각(1305)을 포함한다. 가상 블록(1303)은 두 조각의 내용(1306 및 1307)을 포함하며, 이들의 내용은 1305의 내용과 동일하다. 가상 블록(1304) 또한 그 내용이 1305의 내용과 동일한 조각(1308)을 포함한다. 버전(1309)은 비압축 버전(1301)에 해당하는 압축 버전이다. 압축 버전(1309)은 가상 블록들(1302, 1303 및 1304)의 각각에 적어도 3개의 블록(1310, 1311 및 1312)에 걸치는 버전의 기억 장치에 저장된다. 조각(1305)의 내용은 압축 버전으로 복사되어 조각(1313)을 생성한다. 이러한 조각(1313)은 다른 압축 방법을 이용하여 압축될 수 있음을 주지할 것이나, 설명의 간단함을 위하여 이러한 가능성은 도 13의 설명에서 제외된다.
블록(1311)은 2개의 압축 참조(1314 및 1315)를 포함하며, 양자 모두 조각(1313)을 표시하며, 한편 블록(1312)은 이러한 하나의 압축 참조(1316)를 포함한다. 압축 참조(1314, 1315 및 1316)는 조각(1306, 1307 및 1308)을 각각 대체한다. 만약 압축 참조의 크기가 대체하는 각각의 조각의 크기 보다 더 작은 경우, 그런 압축 참조의 사용은 버전에 저장된 내용의 크기를 감소시키는, 즉 상기 내용을 압축한다는 점을 이해할 것이다. 압축 참조(1314, 1315 및 1316)는 1313에서 해당하는, 그리고 다른 임의의 해당 비압축 또는 압축 조각에 대하여 비압축 조각(1305)을 참조할 수 있다는 점을 또한 주지할 것이다.
즉, 도 13은, 블록들 사이의 압축 종속성을 도시한다. 이러한 압축 참조를 포함하는 블록의 내용을 압축해제하기 위하여, 이러한 내용의 압축된 한번의 출현 또는 한번의 출현을 포함하는 적어도 일부를 포함하는 블록의 내용을 압축해제하는 것이 필요하다. 예컨대, 블록(1312)의 내용을 압축해제하기 위하여, 조각(1313)의 내용은 압축해제되어야 한다. 1313의 내용이 마치 비압축인 것처럼 보이는 도 13의 단순화된 예와는 달리, 1313의 내용은 통상적으로 더욱 압축되고, 이에 따라 블록들(1311과 1312)이 압축해제될 수 있기 이전에, 즉, 1313의 비압축 내용이 블록(1311과 1312)으로 복사되기 이전에 압축해제되어야 한다.
만약 하나의 블록(하나의 출현을 포함함)에 저장된 내용이 다른 출현을 압축하기 이전에(즉, 지시자들이 저장되는 다른 블록들의 내용을 압축해제하기 이전) 업데이트되는 경우, 다른 블록들을 압축해제하는 것이 불가능하게 될 수도 있다. 본 예에서, 1313의 내용이 업데이트된 후, 지시자들(1314, 1315 및 1316)을 대체하기 위하여 1313의 원래의 내용(또는 1305의 내용)을 복사하는 것은 불가능하다.
본 발명의 실시예들에 따라서, 제한을 극복하기 위한 하나의 방식은, 업데이트된 내용으로 덮어쓰기 전에, 1313의 내용을, 예컨대, 백업 저장공간으로 복사하는 것이다. 블록들(1311 및 1312)을 압축해제하는 경우, 1313의 원래의 내용은 1313을 대신하여 백업 저장으로부터 복사될 수 있다.
추가적으로 또는 대신하여, 특별한 블록을 압축해제하는데 필요한 계산과정들(computations)은 보호될 필요가 있을 수 있다. 계산과정의 예들은 특히: 상태 레지스터들의 내용, 카운터 및/또는 특별한 블록의 압축해제 이전의 압축해제 중 계산되는 테이블들, 예컨대 Zlib 또는 Gzip 압축 방법들의 Huffman 트리(tree), 특별한 블록의 압축해제를 위하여 또한 필요한 이전에 압축된 블록(들)에 생성되고 쓰여지는 하나 이상 테이블들을 포함한다.
몇몇 실시예에서, 도 13에서 도시된 압축 종속성에 추가하여, 상기 논의된 바와 같이, 그 업데이트가 변경된 세그먼트의 원래의 내용을 필요로 하는 세그먼트들이 존재할 수도 있다는 점을 이해할 것이다. 예컨대, 도 13에서 도시된 압축 종속성에 추가하여 하나의 실시예에서, 그 업데이트가 도 9 A에서와 같이 원래의 내용을 필요로 하는 세그먼트들이 존재할수 있다.
그러므로 일반적으로, 압축되고 원래의 압축 내용을 덮어 쓸 내용을 업데이트하는 경우, 원래의 내용의 적어도 일부(예컨대, 비압축인 경우)는, 현재 블록의 다른 세그먼트들을 업데이트하거나 업데이트 순서에 따라서 물리적 블록들에 해당하는 다른 가상 블록들을 더 업데이트하는데 필요한 경우(예컨대, 도 10, 11 및 12 참조), 업데이트 순서로 원래의 물리적 블록들을 더 압축해제하는데 필요한 경우, 및/또는 업데이트 순서로 새로운(업데이트된) 물리적 블록들을 더 일찍 압축해제하는데 필요한 경우, 보호될 필요가 있다. 상기 설명한 바와 같이, 다른 계산과정들이 추가로 또는 대신 보호될 필요가 있을 수 있다.
압축 참조를 포함하는 블록의 내용을 압축해제하기 위하여, 내용의 참조된 조각을 포함하는 블록의 내용을 압축해제하는 것이 요구된다는 점은 도 13을 참조하여 앞서 주지한 바이다. 예컨대, 도 13의 블록(1311)을 참조하시오. 버전(1309)을 도면에서 도시되지 않은 다른 버전으로 업데이트할 경우, 블록(1311)을 압축해 제하기 위하여, 블록(1310) 역시 압축해제되어야 한다.
그러나, 도 13의 블록들이 구 버전과 관련된다고 가정하면, 만약 블록(1310)이 업데이트 순서에서 블록(1311)을 선행한다면, 내용의 참조된 조각(블록(1310)에 저장됨)은 업데이트 과정이 블록(1311)에 도달하기 이전에 업데이트되는 것이 가능하다. 이것이 사실인 경우, 블록(1311)에 저장된 내용을 압축해제하는 것은 불가능하게 될 수 있다. 그러므로, 참조된 조각에 저장된 내용은, 예컨대, 백업 저장공간에서 보호되어야 하며, 이에 따라, 비록 본래 내부에 포함된 압축 참조가 이미 덮어쓰여져서 이용할 수 없게 된 내용 조각을 참조할지라도, 블록(1311)의 압축해제를 허용하게 된다.
일반적으로, 원래의 블록(("업데이트된 블록")에 저장된 압축 내용을 업데이트 하는 경우, 그리고 압축된 원래의 내용이 업데이트 순서에 따라서 업데이트된 블록보다 선행하는 블록들에 대한 압축 참조들을 포함하는 경우, 내용의 역방향(backward)-참조된 조각들(압축이든 아니든)은, 예컨대, 백업 저장공간에서 보호되어야 한다. 비휘발성 기억 장치(백업 저장공간과 같은)의 내용을 보호함으로써, 다른 것들이 압축된 원래의 내용을 포함하는 반면, 몇몇 블록들이 압축된 업데이트된 내용을 포함할 경우, 종료 이전에 실패하는 경우, 업데이트 과정이 재개될 수 있다는 점은 확실하다.
즉, 이 경우에 신뢰성 있는 보호(protection)가 보장된다. 추가적으로 원래의 블록을 위한 압축 참조들은 업데이트 순서로 업데이트-블록에 더하여 내용 조각들을 참조한다는 점이 고려되어야 한다("순방향 참조"를 구성함). 앞서 주지된 바 와 같이, 업데이트 블록의 원래의 내용은, 참조된 내용 조각이 압축해제되기 이전에, 압축해제되거나 업데이트될 수 없음을 이해할 것이다. 따라서, 업데이트 과정이 업데이트-블록을 업데이트하기 전에 실패하는 경우, 순방향 참조된 내용 조각은 아직 덮어쓰여지지 않으며, 따라서 순방향 참조된 내용 조각들을 다시 압축해제하는 것이 가능할 것이라는 점은 확실하다. 그러므로, 비휘발성 저장 장치(예컨대, 백업 저장공간)에 순방향 참조된 내용 조각들을 보호하는 것이 필요하지 않으며, 이들을 램(램 저장공간을 구성함)으로 압축해제하는 것이 충분하다.
본 발명의 하나의 실시예에 따르면, 원래의 순방향 참조된 내용 조각은 업데이트 과정의 시작에, 내용을 업데이트하고 업데이트된 압축 내용으로 원래의 압축 내용을 덮어쓰기하기 전에 램 저장공간에 저장될 수 있다. 순방향 참조된 내용 조각이 이들 블록들 사이에서 존재하는 블록들에 저장된 내용을 압축해제하는 것이 가능하고, 이후, 순반향 참조된 조각들에 의하여 사용된 내용만을 램 저장공간에 저장한다는 점을 이해할 것이다. 유사한 방법에서, 모든 역방향 참조된 내용 조각들은 업데이트가 시작되기 전에 백업 저장공간에서 보호될 수 있다.
원래의 모든 순방향 참조된 내용 조각이 램 저장공간에서 저장되고 모든 역방향 참조된 내용 조각이 백업 저장공간에서 보호되는 경우에, 내용의 순방향 참조된 조각들이 램 저장공간에 백업되고 한편, 역방향 참조된 내용 조각은 백업 저장공간에서 보호되기 때문에, 업데이트는 압축 순서와 다른 업데이트 순서를 포함하는, 임의의 요구되는 순서에 따라서 진행할 것이라는 점을 이해하여야 한다.
선형 압축이 이용될 경우, 압축 참조는 일반적으로 압축 순서에 따라서 압축 참조 앞의 내용 조각들을 참조한다는 점을 또한 설명한다. 그러나, 예외가 있을 수 있다. 예컨대, 호프만(Hoffman) 코드는 선형 압축의 한 종류이며, 여기서, 호프만 코드 압축 버전이 호프만 테이블을 포함한다는 점은 당업자에게 잘 알 것이다. 그러나, 이러한 예는 비제한적이며, 디렉토리 등의 다른 종류등과 같은 다른 객체들이 역시 저장될 수 있다. 디렉토리 및 다른 객체들이 원래의 압축 버전의 끝에 저장되는 그러한 경우(다시, 업데이트 순서에 따라서), 상기 객체들은, 예컨대, 업데이트 패키지에 특별한 업데이트 명령을 삽입함으로써 백업 저장공간에서 보호될 수 있다.
이와 유사하게, 업데이트(새로운) 압축 내용이 업데이트 순서에서 나중에 내용을 참조하는 경우, 업데이트 블록의 새로운 내용은 새로운 내용의 참조된 조각이 압축해제되기 전에 압축해제될 수 없다. 그러나, 업데이트 과정이 참조하는 내용과 참조된 내용의 업데이트 사이에서 실패하는 경우, 참조된 내용이 보호되지 않은 한, 이후, 새로운 압축 내용의 압축해제는 가능하지 않을 것이다.
이제, 구 압축 버전 및/또는 신 압축 버전이 멀티블록 압축을 이용하여 압축되고 그에 따라 블록들간에 압축 종속성이 존재할 수 있는 내용 압축을 위한 비제한적 방법론적 실시예들이 상세히 기술될 것이다.
설명의 길이를 제한하기 위하여, 멀티블록 실시예를 위하여 이하에서 제시된 모든 흐름도들은 설명이 동일한 경우 블록 단위 실시예에서 단계들을 위하여 상기에서 사용된 참조들을 유지하며, 독자들은 여기서 설명을 반복하기보다 상기 그러한 단계들의 설명을 참조하기 바란다.
도 14는 본 발명의 실시예에 따라서 멀티블록 압축을 위한 흐름도를 도시한다. 단계 1402의 방법 1400에서, 압축 내용 커서(압축 내용을 계속하여 추적함) 는 압축 내용의 시작 주소, 즉 비압축 내용이 상기 실시예의 압축 기법과 관련된 압축 순서에 따라서 압축될 물리적 블록의 시작에 놓인다. 몇몇 실시예에서, 내용의 원래의 버전을 압축하기 위하여 이용된 압축 알고리즘 및/또는 압축 비율은 원래의 버전을 인플레이스 업데이트하는 내용의 새 버전을 압축하기 위하여 이용된 압축 알고리즘 및/또는 압축 비율과 다를 수 있다는 점을 주지하여야 한다. 또한, 물리적 블록이란 용어가 여기에서 사용되더라도, 내용이 물리적 블록과 동등한 크기의 램의 영역으로 압축될 수 있다는 점을 주지할 것이다. 단계 1404에서, 비압축 내용 커서(비압축 내용을 계속하여 추적함)는 비압축 내용을 위한 시작 주소-즉, 그 내용이 압축될 최초 가상 블록의 시작에 놓인다. 단계 1406에서 가상 블록의 하부 경계는 비압축 내용 커서의 위치로 정의되고(거나) 기록된다.
단계 1408에서, 단위 내용, 예컨대, 가상 블록으로부터의 1 바이트는 적당한 압축해제 기법을 이용하여 압축된다. 이후, 압축 내용 커서 및 비압축 내용 커서는 증가되어 내용의 압축 단위 및 해당하는 내용의 비압축 단위의 종결 주소에 각각 위치한다(단계 1410). 압축 내용 커서가 물리적 블록의 끝에 있지 않은 경우(단계 1412), 다른 단위 내용이 압축되고(단계 1408), 압축 내용 커서 및 비압축 내용 커서는 그에 따라 증가된다(단계 1410).
압축 내용 커서가 물리적 블록의 끝에 도달하거나 비압축 내용 커서가 비압축 내용의 끝에 도달한 후(단계 1412), 단계 1414에서, 가상 블록의 상부 경계는 비압축 내용 커서의 위치로 정의되고(거나) 기록된다. 하나 이상의 압축해제 기록이 아래에서 상세히 논의되는 바와 같이 단계 1416에서 업데이트될 수 있다. 만약 비압축 내용의 끝에 도달하면(1418), 방법은 종료된다. 그렇지 않은 경우, 압축 내용 커서 및 비압축 내용 커서는 각각 다음 블록을 나타내도록 증가된다(단계 1420). 이후, 과정은 마지막 블록에 도달하고 과정이 종료될 때까지 단계 1406까지 다음 블록을 위하여 반복된다(단계 1418에서 예(yes)).
이와 같이, 도 14의 방법 및 이와 유사한 방법들을 따름으로써, 각각의 물리적 블록에 일치하는 각각의 가상 블록의 경계들이 압축 과정 중 정의되고(거나) 기록될 수 있다.
단계 1416은 구 버전 또는 새 버전이 압축되는지 여부에 따라서 변화한다. 어느 하나의 경우에서, 압축해제 기록은 최적 업데이트 순서의 결정 및 압축해제에 요구되는 세그먼트들의 보호를 허용한다. 상기 언급된 바와 같이, 그 원래의 형태로 다른 원래의 내용을 압축해제하는 것이 필요한 내용을 업데이트 순서에 있어서 나중에 업데이트하는 것이 바람직하다. 대조적으로, 그 업데이트하는 형태로 다른 업데이트된 내용을 압축해제하는 것이 필요한 내용을 업데이트 순서에서 먼저 업데이트하는 것이 바람직하다. 그러므로, 구 버전에 있어서, 더 큰 종속성을 갖는 블록이 업데이트 순서에서 나중에 업데이트되는, 상기 기술된 크기 종속성(size dependencies)의 방법론을 유지하기 위하여, 다른 블록들을 압축해제하는데 필요한 특별한 블록으로부터의 내용의 크기는 그 특별한 블록의 크기 종속성을 결정하는데 이용된다. 그러나 새로운 버전에 있어서, 특별한 블록을 압축해제하는데 이용되는 다른 블록들로부터의 내용의 크기는 그 특별한 블록의 크기 종속성에 영향을 미친다.
그러므로, 구 버전이 압축되는 점을 가정하면, 각각의 블록을 위하여, 압축해제 기록은 다른 블록 압축해제를 위하여 필요한 그 블록으로부터의 내용을 유지한다. 예컨대, 하나의 실시예에서, 특별한 블록을 위하여 기록은 다른 블록에 의하여 요구되는 내용의 각 조각, 내용 조각의 크기(임의의 정해진 단위로), 및 내용 조각을 필요로 하는 블록 번호(block number)를 포함할 수 있다. 본 예에서 계속하여, 각각의 블록을 위한 기록은 하나 이상의 튜플(tuples)을 포함할 수 있으며, 각각의 튜플의 형식은: <압축해제을 위하여 내용을 필요로 하는 블록, 필요한 내용, 필요한 내용의 크기>이다. 하나의 실시예에서, 내용의 조각이 하나 이상의 블록을 압축해제를 위하여 필요한 경우에, DR 기록은 내용의 조각을 필요로 하는 블록들의 배열을 포함하는 튜플을 가진 내용의 그 조각을 위하여 단지 하나의 튜플만을 포함한다. 예컨대, 상기 형태는 <압축해제를 위한 내용을 필요로 하는 blockl,.., 압축해제를 위한 내용을 필요로 하는 blockn, 필요한 내용, 필요한 내용의 크기>일 수 있다. 이러한 실시예는 내용의 보호되는 조각이 업데이트 순서에서 나중인 원래의 블록들을 압축해제하기 위하여 한번 이상 회복될 수 있다.
그러나, 새 버전이 압축되는 것으로 가정하면, 각각의 특별한 블록을 위하여 압축해제 기록은 특별한 블록을 압축해제하기에 필요한 다른 블록들로부터의 내용을 유지한다. 예컨대, 하나의 실시예에서, 특별한 블록을 위하여 기록은 다른 블록으로부터 요구되는 내용의 각 조각, 내용 조각의 크기(임의의 정해진 단위로), 및 내용 조각을 공급하는 블록 번호를 포함할 수 있다. 본 예에서 계속하여, 각각의 블록을 위한 기록은 하나 이상의 튜플(tuples)을 포함할 수 있으며, 각각의 튜플의 형식은: <압축해제에 필요한 내용을 공급하는 블록, 필요한 내용, 필요한 내용의 크기>이다.
하나의 실시예에서, 동일한 기록은 블록이 원래 및 업데이트된 내용을 포함하는지 여부에 관계없이 블록을 서비스할 수 있으며, 상기 실시예에서 튜플은 내용이 원래 또는 업데이트된 내용과 관련되는지 여부의 이진 표시를 포함할 수 있다. 그러므로, 이진 표시에 기초하여, 튜플의 내용이 다른 블록을 압축해제하기 위하여 필요한지(원래의), 또는 기록(업데이트된)과 관련된 블록을 압축해제하는데 필요한지 여부가 이해될 수 있다.
하나의 실시예에서, 임의의 튜플의 내용은 내용의 크기가 그 형태의 내용의 크기를 반영하면서, 내용이 압축해제에 필요한 형태에 의존하여 비압축 또는 압축된 형태일 수 있다.
다른 실시예에서, 튜플에 포함된 내용은 비압축 내용이고, 기록된 크기는 보호 버퍼 또는 업데이트 패키지가 임의의 보호되는 내용을 비압축 내용으로 저장하는 것으로 가정하기 때문에 비압축 내용의 크기이다. 다른 실시예에서, 예컨대, 보호되는 내용이 보호 버퍼 또는 업데이트 패키지에의 저장 이전에 압축되는 경우에 있어서, 튜플은 압축 내용 및 압축 내용의 크기를 기록할 수 있다.
압축해제 기록의 형식 및 내용은 실시예에 따라서 변화할 수 있다. 예컨대, 하나의 실시예에서, 크기는 기록되지 않을 수 있다.
압축해제를 위하여 필요한 내용은 블록 내의 실제 내용,(즉, 압축 알고리즘에 관계없이 블록의 일부인 내용), 예컨대, 저장된 표 또는 임의의 다른 계산과정인 압축 중 블록에 추가된 내용, 또는, 예컨대, 상태 레지스터, 메모리 카운터들, 작업표들 또는 임의의 다른 계산과정인 임의의 블록에 실제로 저장되지 않는 내용일 수 있다. 압축해제 기록의 목적을 위하여, 하나의 실시예에서, 임의의 블록에 실제로 저장되지 않는 임의의 내용은 압축해제를 위하여 그 내용을 필요로 하는 블록보다 압축 순서에서 바로 앞서는 블록에 "가상적으로" 저장된다는 점을 가정한다. 아래에서, 다르게 언급되지 않는 한, 압축해제 기록에 열거된 실제 내용, 추가된 내용 또는 가상적으로 저장된 내용의 처리에 있어서 차이점이 없다.
도 13에 도시된 설명한 압축 참조 예 이외에, 압축해제를 위하여 요구될 수 있는 블록에 실제적인 내용의 다른 예는 그 관련 내용이 블록 경계들 상에 걸치는 명령에 관한 내용이다. 예컨대, 그 관련된 내용이 후속적인 블록(들)에까지 연장되는 통합 명령이 존재한다는 점을 가정한다. 이런 경우에, 명령과 관련된 선행하는 블록(들)의 내용은 명령과 관련하여 후속적인 블록(들)의 내용을 압축해제하는데 필요할 수 있다.
또한, 압축 내용이 블록 경계에 걸치는 그러한 경우들에 있어서, 정확성를 위하여, 이러한 "걸치는" 내용에 의하여 압축된 비압축 내용은 다음의 가상 블록의 일부여서 상기 비압축 내용의 조각 바로 전에 경계를 설정하는 것처럼 관련된다.
독자는 각각의 블록의 압축을 따르는 단계 1416이 그 블록을 위한 압축해제 기록 및/또는 다른 블록을 위한 압축해제 기록을 업데이트할 수 있다는 점을 이해 해야 한다.
몇몇 실시예에서, 예컨대 압축해제 기록이 압축 내용의 압축해제 중 준비되고 그 이전에는 필요하지 않은 경우에, 단계 1416는 생략될 수 있다(압축해제 기록의 사용에 대하여 아래를 참조).
하나의 실시예에서, 압축해제 기록들은, 예컨대, 램의 테이블에서 분리된 저장 영역에 저장된다.
몇몇 실시예에서, 압축해제 기록들은 또한 비휘발성 저장 장치, 또는 업데이트 패키지에서 저장될 수 있다. 다른 실시예에서, 압축해제 기록들은 램에서 남으며, 일단 처리되면 덮어쓰일 수 있다(예컨대, 방법 1700 또는 1800을 이용하여).
각각의 가상 블록이 하나의 물리적 블록 해당하기 때문에(그리고 물리적 블록에 해당하는 각각의 가상 블록의 경계들이 예컨대 아래의 방법 1400 또는 1500에서처럼 결정될 수 있기 때문에), 압축해제 기록은 가상 블록들 또는 물리적 블록들과 동일하게 연관되거나 이를 참조할 수 있다는 점을 이해하여야 한다. 그러나, 몇몇 경우에, 특별한 물리적 블록에 해당하는 구 내용을 포함하는 경우의 가상 블록의 크기/경계들은 동일한 특별한 물리적 블록에 해당하는 새로운 내용 포함할 경우의 가상 블록의 크기/경계와 다를 수 있기 때문에, 간단함을 위하여, 압축해제 기록들은 물리적 블록들과 관련되거나/참조하는 것으로 취급된다. 상기 설명된 바와 같은 압축해제 기록들의 내용 및/또는 크기는 상기 설명된 바와 같은 비압축 및/또는 압축 형식일 수 있다.
압축해제 기록들은 추가로 또는 대안적으로 멀티블록 압축해제 중 결정될 수 있다. 다중 블록 압축해제의 하나의 예는 도 15에서 도시된다. 물리적 블록들의 압축해제는 이용된 압축 방법에 의존하는 압축 순서에 따라서 발생하는 것으로 가정된다.
도시된 실시예에서, 압축해제는, 방법 800에서와 같이, 압축 순서와 동일한 순서를 따라서 물리적 블록들의 압축해제를 시작한다. 그러나 물리적 블록이 압축해제될 때마다, 단계 1515에서 업데이트될 필요가 있는 임의의 압축해제 기록들이 업데이트되며, 여기서 압축해제 기록들은 상기 방법 1400 단계 1416에서 설명되었다.
몇몇 실시예에서, 예컨대, 압축해제 기록들 또는 이의 동등물이 압축 내용의 압축 중 준비되었고으며, 압축해제 중 접근 가능한 경우, 단계 1515은 생략될 수 있다. 예컨대, 상기 실시예들 중 몇몇에서, 압축해제 기록들은 비휘발성 저장 장치 또는 업데이트 패키지에 저장될 수 있으며, 그리고 압축해제 방법 1500 중 압축해제 기록들은 분리된 저장 영역, 예컨대 램의 테이블로 로딩될 수 있다.
다중 블록 압축해제 및 압축이 이해되었으므로, 도 13을 다시 참조하면, 원래의 블록(1310)이 원래의 블록(1311 및 1312)에 앞서 업데이트되는 경우, 세그먼트(1313)의 내용이 다른 곳에 저장되지 않는 한, 이는 어려움에 봉착할 것으로 이해되여야 한다(예컨대, 보호 버퍼 또는 임의의 적합한 형태의 업데이트 패키지에서). 그러므로 저장 공간의 감소가 원하는 특징인 경우, 블록들 사이 압축해제 종속성들이 업데이트 순서를 결정할 때 고려되어야 한다.
그러나, 많은 경우에, 예컨대, 도 13에 도시된 압축해제 종속성 이외에, 도 9A에서 설명되는 바와 같이, 업데이트 종속성들이 존재한다. 그러므로, 저장 공간 및/또는 백업 동작들을 최소화할 수 있는 업데이트 순서를 제공하기 위하여, 실시예에 따라서 잠재적으로 압축해제 종속성 및/또는 업데이트 종속성을 고려할 수 있는 방법이 제공된다. 독자는, 몇몇 경우에, 예컨대 저장 크기가 업데이트 순서 결정의 계산 복잡성만큼 큰 요인이 아닌 경우, 압축해제 종속성 및/또는 업데이트 종속성을 무시하고 최적 업데이트 순서를 결정하고자 시도하지 않는 것이 바람직할 수 있다는 것을 이해해야 한다.
그러나, 일반적으로, 소정 업데이트 순서를 선택함으로써 업데이트 과정 도중 요구되는 백업 동작들의 수 및/또는 보호 버퍼 공간을 감소시키는 것이 바람직하다. 백업 동작이 시간 소모적이라는 점을 명심하면, 백업 동작들을 감소하는 것은 더 빠른 업데이트 과정 달성에 유리하다. 추가적으로 블록들을 포함하는 기억 장치 내의 블록들에 데이터를 쓰는 것이 시간 소모적임을 고려하면, 보호에 사용된 공간(및, 이에 의하여 가능하게는 보호 버퍼에 사용된 블록의 수)을 줄이는 것 또한 더 빠른 업데이트 과정 달성에 있어 유리하다는 점을 이해하여야 한다.
업데이트 순서 결정을 위한 실시예에 대한 설명을 진행하기 전에, 세그먼트의 "크기"는 세그먼트에 의하여 점유된 바이트 수임을 주지하여야 한다. 그러나, 이는 비제한적이며 비트, 워드 등과 같은 다른 임의의 적용 가능한 단위에 의하여 세그먼트의 크기를 측정하는 것이 가능하다.
추가적으로, 모든 블록은 DEP(블록)로 표시된 종속성 값을 갖는다. 각각의 가상 블록은 하나의 물리적 블록에 해당하기 때문에(그리고, 물리적 블록에 해당하 는 각각의 가상 블록의 경계들은, 예컨대, 방법 1400 또는 1500에서와 같이 결정될 수 있다), 블록 B, Bi 등은 동일하게 가상 블록 또는 물리적 블록들을 나타내는 것으로 이해하여야 한다. 그러나, 특별한 물리적 블록에 해당하는 구(old) 내용을 포함할 경우의 가상 블록의 크기/경계들은 동일한 특별한 물리적 블록에 해당하는 새로운 내용을 포함할 경우의 가상 블록의 크기/경계들 몇몇 경우에서 다를 수 있으며, 따라서 아래에서 설명의 용이함을 위하여, 업데이트 순서는 물리적 블록들을 업데이트하는 순서를 말한다.
업데이트 버전의 업데이트(비압축) 세그먼트들에 해당하는 블록 B의 원래의(비압축) 세그먼트들은 "원래의 해당 세그먼트 CS"를 구성한다. 상기 CS는 실시예가 내용이 비압축인 경우 업데이트가 발생하는 것으로 가정하기 때문에 비압축인 것으로 가정되며, 따라서 상기 CS의 크기는 비압축 크기를 나타내는 것으로 가정된다. 그러나, 다른 실시예에서, 상기 크기들은 압축될 경우의 CS 크기를 나타낼 수 있다. 다른 원래의 블록의 압축해제를 위하여 요구되는 원래의 블록 B의 세그먼트들, 또는 블록 B의 바로 뒤에 블록을 압축해제하는데 필요한 작업 계산 결과(working computation results)는 "구 압축해제 세그먼트들 DSoId"를 구성한다. 세그먼트들 또는 업데이트 블록 B를 압축해제하는데 요구되는 작업 계산 결과는 "새로운 압축해제 세그먼트들 DSnew"를 구성한다. 각각의 DSoId DSnew의 형태(압축되는 비압축)는 그 DSoId 또는 DSnew을 포함하는 압축해제 목록에서 필요한 내용과 같이 열거된 경우의 그 DSold 또는 DSnewdml 형태와 동일한 것으로 가정되며, 여기서 DR에 열거된 필요한 내용의 형태는 상기 설명된 바와 같이 실시예에 따라서 가 변할 수 있다.
그러므로, 초기 블록의 DEP 값은 다음 식에 의하여 주어진다
Figure 112008032220988-PCT00003
여기서:
Bi는 i번째 블록이다(여기서 언급된 블록들은 업데이트 블록들, 즉, 원래의 내용이 업데이트 내용에 의하여 덮어 쓰여지는 블록들이며, 한편, 업데이트되지 않은 그 블록들에 저장된 내용을 보호할 필요가 없다는 점을 주지할 것이다);
m은 잠재적으로 보호 (m>=0)를 필요로 하는 블록 내의 원래의 세그먼트의 수이다; 그리고
CSj는 업데이트된 세그먼트에 해당하는 Bi 내의 원래의 세그먼트이며, 여기서 j=l, 2,…, m; (m>0, 그러한 세그먼트들의 개수)
Dsoldr은 다른 블록(들)이 Bi가 구 내용을 포함하는 동안 압축해제된 경우를 나타내는 압축해제된 Bi 또는 압축된 Bi의 세그먼트, 또는 Bi+1(압축 순서에서 다음 블록)의 압축해제에 이용되는 작업 계산 결과(예컨대, 메모리 카운터 또는 작업 압축 알고리즘(working compression algorithm)). r= 1,2를,…, s 임을 주지할 것이다(s>=0, 이러한 세그먼트/결과의 수).
DSnewu는 임의의 세그먼트이다(압축 또는 압축해제된 블록에서) 또는 새로운 내용을 포함하고 있는 동안, Bi을 압축해제하기 위하여 요구되는 작업 계산 결과이 다, 여기서 u= 1,2,…, v(v>=0, 이러한 세그먼트/결과의 수).
예컨대, 도 9 A 및 도 13의 종속성을 가정하고 원래의 블록 9A04는 원래의 블록(9A04)이 원래의 블록(1310)과 동일하다고 가정하면, 블록(9A10/1310)의 초기 종속성은:
DEP (9A04/1310)는 =size (9All) +size (9A13) +size (9A14) +size (9A15) + size (1313)이다.
특별한 블록을 위한 각각의 DSoId 세그먼트 및 DSnew 세그먼트의 크기는 도 14 또는 15를 참조하여 상기 논의된 바와 같이 예컨대 압축 및/또는 압축해제 도중 기술된 압축해제 기록들로부터 용이하게 결정될 수 있음을 주지하여야 한다. 예컨대, 필요한 내용의 크기가 압축해제 기록에 필요한 내용과 함께 포함되는 경우에, 기록된 크기는 DEP의 계산에서 사용될 수 있다. 다른 예로, 압축해제 기록에 기록된 필요한 내용의 크기가 압축해제 기록에 포함되지 않는 경우에, 필요한 내용의 크기는 DEP의 계산 도중 계산될 수 있다.
도 16은 본 발명의 실시예에 따라서 다중 블록 압축을 위한 업데이트 순서 결정하기 위한 실시예를 도시한다.
1601에서 사전 준비된 업데이트 패키지는 상기 정의되는 바와 같이 해당 세그먼트들을 식별하기 위하여 분석된다. 단순화를 위하여, 도 16에서 참조된 해당 세그먼트들(CS)은 내용의 비압축 세그먼트라는 점을 가정한다.
원래의 버전에 임의의 대응관계도 없이 업데이트 버전으로 삽입되는 새로운 내용과 같은 업데이트 버전에 포함된 비대응(non-corresponding) 세그먼트들(즉, 원래의 버전의 세그먼트와의 아무런 대응관계도 없는 세그먼트들)은 반드시 업데이트 순서에 영향을 미치지 않는다는 점을 주지할 것이다. 대안적으로, 해당 세그먼트는 1601을 건너 뛸 수 있는 임의의 경우에, 사전 식별될 수 있다(예컨대, 도 17를 참조). 추가적으로, 사전 준비된 업데이트 패키지는 전제조건이 아니다. 사전 준비된 업데이트 패키지가 없는 경우, 당해 기술분야에서 알려지거나 미국특허 6,546,552, WO 2004/114130 또는 WO 2005/003963에서 기술된 방법과 같은 다른 임의의 방법들에 의하여 알려진 diff 툴을 이용함으로써, 하나를 생성하는 것이 가능하다.
추가적으로 식 3과 관련하여 상기 정의되는 바와 같이 구 압축해제 세그먼트들 및 새로운 압축해제 세그먼트들이 또한 식별된다. 예컨대, 하나의 실시예에서 구 압축해제 세그먼트들 및 새로운 압축해제 세그먼트들은 압축해제 기록들로부터 얻어질 수 있다. 예컨대 압축해제 기록들은 예컨대, 도 17에 대하여 아래에 기술된 바와 같이, 램으로 신구(new and old) 압축 블록이 압축해제되고 로딩될 경우 발현될 수 있다. 다른 예로써, 압축해제 기록들은 사전 패키지화된 업데이트 패키지에 포함될 수 있다. 각각의 구 압축해제 세그먼트 및 새로운 압축해제 세그먼트의 형태(압축 또는 비압축)는 DR에 열거된 필요한 내용의 형식이 상기 설명된 바와 같이 실시예에 따라서 가변하는 압축해제 기록의 필요한 내용과 같이 열거되는 경우 그러한 구 또는 신 압축 세그먼트의 형식과 같은 것으로 가정된다.
방법 1600은 블록 목록(즉, 업데이트할 블록들)에서 모든 블록 i(i = 1, 2,…, k)에 대하여 방법 1000(상기 설명을 참조)에서와 같이 계속되나, DEP(Bi)는 식 3(1604에서)에서와 같이 산출된다.
Bj가 업데이트 큐에 넣어지면, 여전히 블록 목록상(즉, 아직 업데이트 큐가 아님)의 임의 블록의 DEP 값은, Bj가 먼저 업데이트되기를 고려하도록 구성될 수 있다. Bj가 다른 블록들에 의존하는 것이 가능하다는 점은 이미 설명한 바이다. 즉, 그 해당하는 원래의 세그먼트들이 다른 원래의 블록들에 있는 Bj(또는 더욱 상세하게는, Bj의 업데이트 버전에)에 업데이트된 세그먼트들이 존재한다. 대안적으로 또는 추가적으로, Bj의 압축해제(Bj가 구 내용을 갖는 경우)는 다른 블록의 (실제적이고(거나) 추가한) 내용 및/또는 압축 순서에서 바로 앞에 있는 블록과 관련된 작업 계산 결과에 의존할 수 있다. 또한, 다른 블록들의 압축해제는 Bj(Bj가 새로운 내용을 갖는 경우) 또는 Bj가 압축 순서에서 바로 앞서는 블록인 경우 Bj에 관련된 작업 계산 결과에 의존할 수 있다.
그러므로, 여전히 블록 목록에 열거된 각각의 이러한 다른 블록 Bo에 있어서, Bj의 업데이트 버전의 세그먼트들에 해당하는 세그먼트들이 식별되고 이들의 크기는 DEP(Bo)로부터 감소된다. 추가적으로 또는 대신하여, 원래의 Bj를 압축해제하기 위하여 요구되고 (실제적, 추가적 및/또는 가상적으로 저장된) 원래 Bo의 세그먼트들은 식별되고 이들의 크기는 단계 1610 및 1611에서 DEP (Bo)로부터 감소된다. (위에서 언급된 바와 같이, 압축해제를 위하여 필요한 세그먼트들은 압축과 관계 없이 블록에서 저장될 실제적인 내용, 압축 중 블록에 추가될 추가 내용 및/또는 바로 뒤따르는 블록의 압축해제에 필요한 가상적으로 "저장된" 내용을 포함할 수 있으나, 모두가 유사하게 처리될 수 있다). 추가적으로 또는 대신하여, (실제적, 추가적 및/또는 가상적으로 저장된) 업데이트 Bo를 압축해제하기 위하여 필요한 업데이트 Bj의 세그먼트들이 식별되고 이들의 크기는 단계 1613 및 1614에서 DEP(Bo)로부터 감소된다. 예컨대, 방법 1400 또는 1500을 이용하여 생성된 압축해제 기록들은 원래의 Bo로부터의 이들의 압축해제 내용을 위하여 필요로 하는 블록들을 열거하고 업데이트 Bo의 압축해제를 위하여 필요한 내용을 공급하는 블록들을 열거하기 때문에, 1611 및 1614에서 계산에 필요한 Bj 및 Bo 사이의 압축 종속성은 압축해제 기록들로부터 용이하게 얻어질 수 있을 거라는 점은 분명하다. 1611 및 1614에 사용된 크기가 방법 예컨대 1400 또는 1500을 이용하여 압축해제 기록에 기록된 경우, 상기 크기들은 압축해제 기록으로부터 직접 얻어질 수 있다. 그렇지 않으면, 크기는 압축해제 기록에 기록된 필요한 내용으로부터 산출될 수 있다. 단계 1611 및 1614의 계산 과정은 식 4에 의하여 요약된다.
Figure 112008032220988-PCT00004
여기서:
t는 세그먼트 Bi(t>=1)에 해당하는 Bo의 해당 세그먼트(CS)의 개수이고;
z는 원래의 Bi(z>=1)에 이용된 구 Bo의 압축해제 세그먼트들(실제, 추가 또는 가상적으로 저장된)의 개수이고;
b는 새로운 Bo(b>=1)에 이용된 새로운 Bi(실제, 추가 또는 가상적으로 저장 된)의 압축해제 세그먼트들의 개수이다.
DEP 값들이 블록 목록에서 남아 있는 모든 블록들에 대하여 식 4에서와 같이 잠재적으로 변경된 후에, 가장 작은 종속성 값을 갖는 다음 블록이 선택되고(1006), 프로세스는 블록 목록이 비워지는 것이 식별될 때까지, 반복한다(이후, k=O으로 인정될 것이다).
종료시, 업데이트 순서 큐는 업데이트 및 압축 종속성을 고려하는 결정된 업데이트 순서를 나타낸다. 다른 실시예에서, 업데이트 순서는 식 3 및 4를 변경함으로써 업데이트 또는 압축 종속성만을 고려할 수 있음을 주지하여야 한다. 예컨대, 업데이트 종속성만 고려되면, 식 3 및 4는 각각 식 1 및 2로 변환된다. 다른 예로, 압축 종속성만을 고려하면, 식 3은
Figure 112008032220988-PCT00005
이 되고, 식 4는
Figure 112008032220988-PCT00006
로 변환된다.
독자는 식 3과 4에의 상기 변경이 제한적이지 않으며, 실시예에 따라서 업데이트 순서가 식 3과 이에 따라 조정된 4를 이용하여 업데이트 종속성, 압축해제 종속성(원래의 버전), 및 압축해제 종속성(업데이트 버전)을 고려한다는 점을 이해할 것이다.
하나의 실시예에 따라서, 업데이트 패키지는 업데이트 순서를 반영하기 위하여 재정비될 수 있다는 점을 주지하여야 한다. 대안적으로, 업데이트 순서, 또는 더 정확하게는 그의 표현을 업데이트 패키지와 관련시키는 것이 가능하다. 업데이 트 순서의 표현은, 업데이트 순서에 따라서, 이들의 타겟 세그먼트 주소에 따라서 업데이트 패키지의 업데이트 명령을 분류하고 저장하는 것으로 가능하다.
원래의 블록 Bj를 업데이트하고(거나) 압축해제하는 것이 필요한 블록 Bo의 어떤 세그먼트 CS 및 Dsold도 임의의 다른 블록들을 업데이트하거나 압축해제하는데 요구되지 않는다는 것을 방법 1600이 가정한다는 점을 이해하여야 한다. 그러나 Bo의 임의의 특별한 세그먼트가 Bj에 추가하여 다른 블록들의 업데이트 및/또는 압축해제를 위하여 요구될 수 있는 실시예에서 식 4는 모든 종속하는 블록들이 Bo에 앞서는 경우, CS의 크기 및/또는 DSoId가 Bo의 DEP으로부터 오직 공제될 수 있도록 변경될 수 있다. 즉, 단계 1610은 "Bj는 예전의 것(old)을 업데이트하고(거나) 압축해제하는데 Bo에 의존하는 업데이트 순서에서 마지막 블록 인가?"를 질문하도록 변경될 수 있다.
도 17는 본 발명의 하나의 실시예에 따라서 업데이트 패키지의 생성을 도시하는 흐름도다. 흐름도의 세부적 설명을 하기 전에, 상기 논의된 바와 같이 업데이트 패키지를 생성할 경우, 생성기는 보호 버퍼의 사용을 포함하여 업데이트 장치의 행동을 예측하여야 하고, 이에 따라, 예컨대, 업데이트 순서를 결정함으로써 그 사용을 개선하도록 하여야 함을 이해하여야 한다. 보호 버퍼가 완전히 점유됨(또는 이용할 수 없음)을 예측할 시에만, 예컨대, 미국특허 6,018,747에서 수행된 바와 같이, 복사 명령이 삽입 명령으로 교체되며, 업데이트 또는 압축해제에 필요한 다른 내용이 업데이트 패키지로 삽입된다.
방법 1700은 보호 버퍼에 맞지 않는 임의의 보호된 내용을 업데이트 패키지로 삽입할 수 있도록 보호 버퍼에서의 내용 보호의 시뮬레이션을 포함함을 주지하여야 한다. 내용이 보호 버퍼로 삽입되도록 시뮬레이트되는 순서 및 내용이 업데이트 패키지로 삽입되는 실제적인 순서(보호 버퍼가 가득 차도록 시뮬레이트되는 경우)는, 예컨대 아래에서 언급되는 방법 1800 또는 1900의 과정 중 내용의 예측된 사용(즉, 필요조건)을 따를 수 있다. 다른 실시예에서, 보호 버퍼로의 내용의 시뮬레이트된 저장 및 업데이트 패키지로의 내용의 실제적인 저장의 순서는 다른 순서를 따를 수 있다. 상기 다른 실시예에서, 예컨대 방법 1800 또는 1900 과정 중 보호 버퍼 또는 업데이트 패키지로부터 정확한 내용의 복구를 허용하기 위한 매체가 존재할 수 있다. 또 다른 실시예들에서, 업데이트 패키지의 보호 버퍼 및/또는 영역은 업데이트에 필요한 세그먼트들 위한 영역, (구(old)) 압축해제에 필요한 세그먼트들을 위한 영역 및/또는 (신) 압축해제에 필요한 세그먼트들을 위한 영역을 표시하도록 다른 영역들로 설명될 수 있다. 이 다른 실시예들 중 어느 하나에서 설명된(delineated) 영역 내의 순서는 내용의 예측된 사용을 따르나, 영역들은 영역들에 접근하는 예측된 순서와는 다른 물리적 주소들의 순서로 배열될 수 있다(즉, 비록 신 압축해제에 필요한 세그먼트들에 앞서는 구 압축해제에 요구되는 세그먼트들을 필요로 하는 것으로 가정하더라도, 신 압축해제에 필요한 세그먼트들은 구 압축해제에 필요한 세그먼트들보다 더 낮은 주소에 배열될 수 있다). 그러나, 방법 1700에서의 시뮬레이션은, 예컨대 방법 1800에서와 같이, 보호 버퍼에서의 내용 보호의 실제적인 순서를 정확하게 시뮬레이트하여(즉, 예측하여), 방법 1800이 업데 이트 패키지가 보호 버퍼에 맞지 않는 임의의 보호된 내용을 포함하는 것으로 정당하게 가정할 수 있도록 하는 것이 바람직하다.
설명의 편이를 위하여, 보호 버퍼로의 시뮬레이트된 내용의 저장 및 업데이트 패키지로의 내용의 실제적인 저장의 순서가 반드시 내용의 예측된 사용을 따르지 않으나, 올바르게 저장된 내용의 회복을 허용하는 매체가 존재하는 실시예가 기술된다. 이러한 매체는 보호된 내용(예컨대, 구 내용을 갖는 블록을 압축해제하기 위하여, 새로운 내용을 갖는 블록을 압축해제하기 위하여, 또는 구 내용을 갖는 블록을 업데이트하기 위하여) 및 보호된 내용의 저장 위치(예컨대, 보호 버퍼 또는 업데이트 패키지의 위치)와 관련하여 블록들, DR 튜플들, 및/또는 업데이트 명령들 사이의 대응관계를 제공하는, 예컨대, 상호 참조표(aka 대응관계 테이블)를 포함할 수 있다. 대응관계 테이블은, 예컨대, 보호 버퍼, 업데이트 패키지 또는 그밖의 다른 곳에 저장될 수 있다.
단계 1701은 준비를 포함한다. 예를 들어, 업데이트 패키지(첫번째 업데이트 패키지를 구성함)는 임의의 방법에 의하여 획득된다. 이는 국부적으로 생성되거나, 예컨대, 프로세스간 통신에서 통신 네트워크를 통해, 임의 종류의 기억 장치 등으로부터 읽어 들임으로써 외부 소스로부터 수신될 수 있다. 이를 위하여 (첫번째 업데이트 패키지를 구성하는) 업데이트 패키지는 미국특허 6,546,552, WO 2004/114130 또는 WO 2005/003963에 따르거나 알려진 per se diff 툴을 이용함으로써 임의의 알려진 방법에 의하여 생성될 수 있다.
하나의 실시예에서, 업데이트 패키지 생성의 일부로서, 멀티블록 압축을 이 용하여 압축되었던 구 버전은 램으로 압축해제되어 로딩되고, 멀티블록 압축을 이용하여 압축되었던 신 버전은 램으로 압축해제되어 로딩된다. 이러한 실시예에서, 압축해제된 구 내용의 가상 블록과 압축된 구 내용의 물리적 블록들 사이에서 대응관계가 결정되고, 이와 유사하게, 예컨대, 도 15의 방법을 실행하거나 도 14 또는 15의 이전 실행 중에 가상 블록 경계의 이전의 저장으로부터 결정된 바와 같이 압축해제된 새로운 내용의 가상 블록과 압축된 새로운 내용의 물리적 블록 사이의 대응관계가 결정된다. 추가적으로, 구 내용과 관련되고 신 내용과 관련된 DR들은 도 15의 방법을 실행하거나 도 14 또는 15의 방법의 이전 실행 과정 중 DR들의 이전 저장으로부터 결정된다.
예컨대 하나의 실시예에서, 수신된 업데이트 패키지는 선택적으로 가상 블록 경계 및/또는 구 및/또는 신 내용을 위한 DR들을 포함할 수 있거나, 대안적으로, 단계 1701에서 실행된 압축해제의 일부로서, (예컨대, 도 15에서와 같이 정의되는) 가상 경계 및/또는 DR들은 업데이트 패키지에 저장될 수 있다.
1702에서, 업데이트 패키지는 해당(비압축) 세그먼트 및 업데이트 순서를 식별하기 위하여 분석된다. 업데이트 순서는, 예컨대, 상기 도 16에 따라서 결정될 수 있다. 추가적으로 업데이트 패키지가 바람직한 업데이트 순서에 따라서 사전 편성될 경우, 또는 예컨대 바람직한 업데이트 순서를 배치하는 정보와 관련되는 경우(목록 등)에는, 1702을 건너뛸 수 있다. 하나의 실시예에서, 업데이트 명령들 및/또는 압축해제 기록들은 업데이트 순서를 반영하기 위하여 순서가 재설정될 수 있다.
방법 1700은 방법 1100에서 바와 같이 계속 진행한다(단계 1103 내지 1113-상기 설명을 참조), 그러나 마지막 업데이트 명령에 도달될 경우(단계 1105에서 아니오) 종결 대신, 지정된 보호 버퍼의 시뮬레이트된 공간 제한으로 인하여, 상기 방법은 DR들의 어느 내용이 업데이트 패키지에서 포함될 것인지 결정하는 단계로 진행한다. 독자는 DR들에 관한 세부사항을 대하여 상기 방법 1400 및 1500의 설명을 참조할 것이다. 실시예가 대응관계 테이블을 가정하기 때문에, 업데이트 명령은 업데이트 순서대로 반드시 필요가 없으나, 시뮬레이트된 처리 순서는 바람직하게는 아래에서 논의된 방법 1800에서 처리된 실제적인 순서를 모방하여야 함을 주지하여야 한다.
단계 1714에서 DR 커서는 처리될 첫번째 블록과 관련된 DR의 첫번째 튜플을 지시하도록 개시된다. 설명의 간단화를 위하여, 기술된 실시예에서, 동일한 블록의 DR(들)과 관련된 튜플들은 순차적으로 처리되는 것으로 가정된다. 블록을 처리하는 순서는, 예컨대 압축 순서 또는 다른 임의의 순서에 의하여 업데이트 순서에 따른 임의의 순서를 따를 수 있다. 다른 실시예에서, 동일한 블록의 DR(들)에 관련된 튜플들은 반드시 순차적으로 처리되는 것은 아니다. 바람직하게는, 튜플들을 처리하는 시뮬레이트된 순서는 아래에서 논의된 방법 1800에서 처리된 실제적인 순서를 모방해야 한다. 또한, 설명의 간단화를 위하여, 새로운 내용을 가진 블록에 관련한 튜플들 및 원래의 내용을 가진 블록에 관련된 튜플들을 포함하는 각각의 블록에 대하여 하나의 DR이 존재하는 것으로 가정된다. 예컨대, 각각의 튜플은 튜플이 원래의 내용인지 아니면 새로운 내용을 압축해제하는 것과 관련되는지 여부의 이진 표 시(binary indication)를 포함할 수 있다. 대안적으로, 각각의 블록에 대하여 다수의 DR들, 예컨대, 새로운 내용을 갖는 블록과 관련한 하나 그리고 구 내용을 갖는 블록과 관련한 다른 하나인 2개의 DR들이 존재할 수 있다.
어느 경우에서든, DR 커서가 단계 1716에서 마지막 DR을 지나서 진행되지 않는 한, 이후, 단계 1718에서, 현재 검토된 튜플이 업데이트 순서에서 나중의 블록을 참조하는지 여부가 결정된다. 튜플이 구 내용을 갖는 블록과 관련되는 경우, 검토된 튜플의 내용이 업데이트 순서에서 나중의 적어도 하나의 블록을 압축해제하는데 필요한지 여부가 결정된다(예컨대, 튜플에서 블록 참조(들)을 검토함으로써). 튜플이 새로운 내용을 갖는 블록과 관련되는 경우, 검토된 블록을 압축해제하는데 필요한 검토된 튜플의 내용이 업데이트 순서에서 나중의 블록에 의하여 공급되는지 여부가 결정된다(예컨대, 튜플에서 블록 참조를 검토함으로써). 블록 튜플이 <압축해제를 위하여 DR의 내용을 요구하거나 공급하는 블록(들), DR의 필요한 내용, 필요한 내용의 크기>의 형식을 갖는 경우, DR를 검토하고 업데이트 순서를 파악함으로써, 단계 1716이 결정될 수 있음을 주지하여야 한다.
검토된 튜플이 먼저 오는 블록들만을 참조하는 경우, 더 이상의 처리과정이 필요하지 않으며 방법은 블록에 대한 DR(들)의 다음 튜플로 이동하거나, 만약 튜플이 검토된 블록에 있어 마지막인 경우 다음 블록과 관련된 DR로 이동할 수 있다(단계 1726).
한편, DR의 튜플이 적어도 하나의 나중 블록을 참조하는 경우, 단계 1722에서 DR 내용을 저장할 보호 버퍼 내에 잔여 공간이 존재하는지 여부가 결정된다. 만 약 보호 버퍼의 공간이 있는 경우, 잔여 공간은 DR 내용의 크기만큼 감소되고(단계 1722), 선택적으로 내용은 1724에서 프리로 표시된다. 예컨대, 튜플에 기록된 내용의 크기는 사용될 수 있거나 튜플에 기록된 내용의 크기는 산출될 수 있다. 보호 버퍼에 공간이 존재하지 않는 경우, 단계 1725에서 DR의 튜플의 내용은 업데이트 패키지로 삽입된다. 하나의 실시예에서, DR의 튜플의 내용은 업데이트 패키지로 삽입되는 것처럼 삽입되는(즉, 만약 DR에서 비압축인 경우 비압축으로 저장되고, DR에서 압축인 경우 압축으로 저장됨), 한편, 다른 실시예에서, 내용은 업데이트 패키지에의 저장에 앞서, 예컨대, 압축, 압축해제 등으로 조작될 수 있다. 상호 참조표를 갖는 일실시예에서, 엔트리(entry)가 상호 참조표에 기입되어, 예컨대 업데이트 패키지에서 위치를 참조하고 압축해제를 위하여 내용을 필요로 하는 블록(들) 및/또는 압축해제를 위하여 내용을 공급하는 블록을 참조한다.
하나의 실시예에서, 방법 1700에서 1720까지 그리고/또는 1108의 앞선 실행에서부터 소정 개수의 "아니오"들 이후, DR 튜플의 내용의 크기에 관계 없이 보호 버퍼에 더 이상의 공간이 존재하지 않고 후속적으로 단계 1725가 직접 단계 1718까지 "예"를 따를 수 있다고 가정할 수 있다.
하나의 실시예에서, 단계 1718에서, 예컨대, 초기 처리한 튜플들 때문에 튜플 내용이 업데이트 패키지 및/또는 보호 버퍼에서 이미 보호되었는지 여부가 검사될 수도 있으며, 보호된 튜플 내용이 업데이트 과정 중 용이하게 획득될 수 있다면, 이 경우 방법은 직접 단계 1726까지 계속된다. 다른 실시예에서, 튜플 내용을 다시 보호하는 대신에, 보호된 튜플 내용에 대한 포인터가 대신 저장될 수 있다.
과정은 단계 1726을 계속하여, 단계 1728의 다음 튜플로 진행하거나, 또는 튜플이 검토된 블록에 있어서 마지막 튜플인 경우, 단계 1730의 다음 블록에 대한 DR로 진행한다. 일단 마지막 블록에 대한 DR의 마지막 튜플이 처리되면, 방법은 종료된다.
실시예에 따라서, 보호 버퍼의 크기가, 예컨대, 시스템 제한을 충족시키기 위하여 업데이트 패키지를 대가로 감소되고 그 역도 마찬가지라는 점이 명백하다.
업데이트 패키지는, 저장 블록들에 저장된 압축된 원래의 내용을 압축해제하기 위하여 선택적으로 압축해제 명령들을 포함할 수 있음을 주지하여야 한다. 이는 또한 업데이트 가상 블록들을 압축 업데이트 버전의 블록에 저장된 내용으로 압축하기 위하여, 선택적으로 압축 명령들을 포함할 수도 있다.
실시예에 따라서, 업데이트 패키지는, 업데이트 패키지 빌더 및 업데이트 장치에 의하여 인정되는 압축 방법을 이용하여 도 18을 참조하여 아래 기술하는 바와 같이 업데이트 장치에 공급하기에 앞서 압축될 수 있다.
업데이트 장치에서 동작하는 업데이트 과정 설명으로 들어가기 전에, 몇몇 실시예에 따라서, 그 효과를 증가시키기 위하여 보호 버퍼가 재사용될 수 있다는 점을 이해하여야 한다. 즉 보호 버퍼에 저장되는 내용이 더 이상 필요하지 않는 경우, 몇몇 실시예는 이러한 필요하지 않은 내용에 의하여 사용된 영역을 프리영역으로 해제할 수 있으며(예컨대, 내용을 물리적으로 삭제하거나 이를 프리로 표시함으로써), 이렇게 하여 업데이트 과정으로 하여금 업데이트하고 있는 동안 필요한 추가 백업 동작들을 위한 자유 영역을 재사용하는 것을 가능하게 한다. 보호 버퍼를 효과적으로 재사용하는 것은 추가 보호 동작을 실행하는 것을 허용하고, 따라서 업데이트 패키지의 크기는 감소될 수 있다(보다 적은 보호되는 내용이 내부에 저장될 필요가 있음). 재사용은 업데이트 패키지의 생성 도중 모의 테스트되고, 따라서 생성기로 하여금 보호 버퍼가 가득 차는 시기 및 자유 공간이 존재하는 시기를 파악할 수 있도록 한다.
업데이트 패키지 생성을 위한 실시예(1700)를 고려한 후, 본 발명의 하나의 실시예에 따라서, 도 18은 다중 블록 압축되는 버전을 업데이트하는 방법을 도시한다. 예컨대, 도 18이 업데이트 장치에서 동작 가능한 업데이트 과정에 적용 가능하다. 도시된 실시예는 블록들을 포함하는 기억 장치를 포함하는 업데이트 장치에서 동작하도록 적응된다는 점을 이해하여야 한다.
업데이트 과정이 동작을 시작하는 경우, 준비(단계 1801)의 일부로서, 이는, 예컨대, 휘발성 또는 비휘발성 메모리에서 기억 장치(103)에 저장된 업데이트 패키지를 획득하거나, 이에 액세스한다. 업데이트 장치가 업데이트 서버(105)로부터 미리 업데이트 패키지를 수신할 수 있을 것이라는 점을 이해할 것이다. 대안적으로, 업데이트 패키지는 휴대용 기억 장치(예컨대, 플로피 또는 콤팩트 디스크)로부터 이를 복사함으로써 또는 인터넷에서 그것을 수신함으로써 임의의 적용 가능한 방법에 의하여 기억 장치로 로딩되었다. 실시예에 따라서, 액세스된 업데이트 패키지에는 소정 업데이트 순서를 갖는다는 점을 더욱 이해하여야 할 것이다. 업데이트 순서는 업데이트 패키지의 업데이트 명령의 순서에 의하여 간단히 결정될 수 있거나, 예컨대, 명령들이 패키지에서 나타나는 순서와 다른 경우, 업데이트 명령을 실행하 는 순서를 결정하는 목록과 같은, 업데이트 패키지와 관련하여 저장된 추가 정보에 따라서 결정될 수 있다. 본 예에 따르면, 업데이트 순서는 업데이트 장치에서 보호 버퍼 사용을 감소시키거나, 적어도 내부의 이용가능한 보호 버퍼의 이용을 향상시키도록 구성된다. 하나의 실시예에 따르면, 도 16 및 17의 흐름도에 따라서 업데이트 패키지가 생성되고 업데이트 순서가 결정될 수 있다(예컨대, 업데이트 패키지 생성기에서).
1801에서, 구(old) 압축 버전은, 예컨대, 압축 순서대로, 기억 장치로부터 회복되고 램으로 압축해제된다. 압축해제된 구 버전의 가상 블록들과 압축된 구 버전의 물리적 블록들 사이의 대응관계는 예컨대 도 15의 방법의 실행을 통하여 결정되거나 도 14 또는 15의 방법의 이전(previous) 실행 중에 가상 블록 경계들의 이전(previous) 저장으로부터 결정될 수 있다. 추가적으로, 구 내용에 관련된 DR 튜플들이 도 15의 방법의 실행을 통하여 결정되거나 도 14 또는 15의 방법의 이전 실행 중에 가상 블록 경계들의 이전 저장으로부터 결정될 수 있다. 예를 들어, 하나의 실시예에서 획득된 업데이트 패키지는 선택적으로 구 내용과 관련된 가상 블록 경계들 및/또는 DR 튜플들을 포함할 수 있다. 어느 경우에서나, 업데이트 명령들이 실행되는 가상 블록들의 소스 비압축 세그먼트들은 비압축 소스 세그먼트가 업데이트 순서로 업데이트되는 때를 결정하기 위하여 해당하는 압축된 물리적 블록들과 용이하게 연결될 수 있다.
하나의 실시예에서 획득된 업데이트 패키지는 새로운 비압축 버전의 가상 경계들 및 선택적으로는 예컨대 도 14 또는 15의 방법의 실행을 통하여 먼저 결정되 고 저장된 결합된 DR 기록들을 포함한다. 이런 경우에, 업데이트 명령들이 실행되는 가상 블록들의 타겟 비압축 세그먼트들은 타겟 비압축 세그먼트가 업데이트 순서로 업데이트 되는 때를 결정하기 위하여 해당(압축) 물리적 블록들과 용이하게 연결될 수 있다. 그러므로, 설명의 간단화를 위하여, 가상 경계들은 업데이트 패키지에 수신된 것으로 가정된다. 또 다른 설명에서, 이러한 가정은 다른 실시예를 설명하는 때 완화될 것이다.
이후, 방법 1800은, 방법 1200에서와 같이, 바람직하게는 시뮬레이트된 바와 동일한 순서로 업데이트 명령들의 처리과정에 착수한다(상기 방법 1700을 참조).
상호 참조표를 갖는 실시예에서, 위치 엔트리는 예컨대 보호 버퍼의 위치와 업데이트 명령, 소스 세그먼트 블록 및/또는 타겟 세그먼트 블록 사이에서 보호 버퍼에서 보호된 각각의 세그먼트를 위하여 기입된다. 이러한 실시예에서, 복구 포인터는 외래적(extraneous)일 수 있고, 이러한 경우에, 단계 1211은 생략될 수 있으며, 단계 1218에서, 상기 상호 참조표를 이용하여, 내용이 보호 버퍼로부터 회복될 수 있다.
방법 1200의 단계 1221은 방법 1800에서 생략된다. 즉 물리적 저장 블록들은 램의 내용으로 업데이트되지 않는다.
단계 1224 이후, 처리과정의 종료 대신, 업데이트(즉, 새로운) 버전은 예컨대 방법 1500에서 바와 같이, 단계 1826의 멀티블록 압축을 이용하여 램으로 압축된다. 각각의 블록(램에서 압축 블록에 해당함)을 위한 가상 블록 경계들 및 램에서 새로운 압축 블록들을 위한 DR 튜플들은 단계 1826의 실행을 통하거나 업데이트 패키지로부터 이용가능하다는 점을 가정한다. 대안적으로, 새로운 블록을 위한 DR들이 업데이트 패키지에 포함된 경우, 단계 1826의 멀티블록 압축은 늦게까지(예컨대 단계 1842 이전) 지연될 수 있다.
DR 튜플들(구 또는 신 블록들을 압축해제하는데 필요한)은 방법 1700에서 시뮬레이트된 바와 동일한 순서대로 처리된다.
단계 1828에서, DR 커서는 처리될 첫번째 블록과 관련된 DR의 첫번째 튜플을 지시하도록 개시된다. 설명의 간단화를 위하여, 기술된 실시예에서, 동일한 블록의 DR(들)과 관련된 튜플들은 순차적으로 처리되는 것으로 가정된다. 블록들을 처리하는 순서는, 예컨대 압축 순서 또는 다른 임의의 순서에 의하여 업데이트 순서에 따른 임의의 순서를 따를 수 있다. 다른 실시예에서, 동일한 블록의 DR(들)에 관련된 튜플들은 반드시 순차적으로 처리되는 것은 아니다. 바람직하게는, 튜플들을 처리하는 시뮬레이트된 순서는 상기 방법 1700에서 처리되는 시뮬레이트된 순서를 모방해야 한다. 또한, 설명의 간단화를 위하여, 새로운 내용을 가진 블록에 관련한 튜플들 및 원래의 내용을 가진 블록에 관련된 튜플들을 포함하는 각각의 블록에 대하여 하나의 DR이 존재하는 것으로 가정된다. 예컨대, 각각의 튜플은 튜플이 원래의 내용인지 아니면 새로운 내용을 압축해제하는 것과 관련되는지 여부의 이진 표시를 포함할 수 있다. 대안적으로, 각각의 블록에 대하여 다수의 DR들, 예컨대, 새로운 내용을 갖는 블록과 관련한 하나 그리고 구 내용을 갖는 블록과 관련한 다른 하나인 2개의 DR들이 존재할 수 있다.
DR 커서는 단계 1830에서 마지막 DR을 지나서 진행되지 않는 한, 이후, 단계 1832에서, 현재 검토된 튜플이 업데이트 순서에서 나중의 블록을 참조하는지 여부가 결정된다. 만약 튜플이 구 내용을 갖는 블록과 관련되는 경우, 검토된 튜플의 내용이 업데이트 순서에서 나중에 오는 적어도 하나의 블록을 압축해제하는데 필요한지 여부가 결정된다(예컨대, 튜플에서 블록 참조(들)을 검토함으로써). 튜플이 새로운 내용을 갖는 블록과 관련되는 경우, 검토된 블록을 압축해제하는데 필요한 검토된 튜플의 내용이 업데이트 순서에서 나중에 오는 블록에 의하여 공급되는지 여부가 결정된다(예컨대, 튜플에서 블록 참조를 검토함으로써). 블록 튜플들이 <압축해제를 위하여 DR의 내용을 요구하거나 공급하는 블록(들), DR의 필요한 내용, 필요한 내용의 크기>의 형식을 갖는 경우, DR를 검토하고 업데이트 순서를 파악함으로써, 단계 1832이 결정될 수 있음을 주지하여야 한다.
검토된 튜플이 먼저 오는 블록들만을 참조하는 경우, 더 이상의 처리과정이 필요하지 않으며 방법은 블록에 대한 DR(들)의 다음 튜플로 이동하거나, 만약 튜플이 검토된 블록에 있어 마지막인 경우 다음 블록과 관련된 DR로 이동할 수 있다(단계 1839 및 이후 1840 또는 1841까지).
한편, DR의 튜플이 적어도 하나의 나중 블록을 참조하는 경우, 단계 1834에서 DR 내용을 저장할 보호 버퍼 내에 잔여 공간이 존재하는지 여부가 결정된다. 만약 공간이 없는 경우, 튜플 내용이 앞서 업데이트 패키지에 저장되었으며(방법 1700을 참조), 과정은 단계 1839로 이동하는 것으로 가정된다.
만약 공간이 있는 경우, 튜플의 내용은 보호 버퍼로 복사되며, 보호 버퍼의 잔여 공간은 튜플 내용의 크기만큼 감소된다(단계 1836). 하나의 실시예에서, DR의 튜플의 내용은 보호 버퍼로 삽입되는 것처럼 삽입되는(즉, 만약 DR에서 비압축인 경우 비압축으로 저장되고, DR에서 압축인 경우 압축으로 저장됨), 한편, 다른 실시예에서, 내용은 보포 버퍼에의 저장에 앞서, 예컨대, 압축, 압축해제 등으로 조작될 수 있다. 상호 참조표를 갖는 일실시예에서, 엔트리가 상호 참조표에 기입되어, 예컨대 보호 버퍼에서 위치를 참조하고 압축해제를 위하여 내용을 필요로 하는 블록(들) 및/또는 압축해제를 위하여 내용을 공급하는 블록을 참조한다. 선택적으로 DR 내용은 1838에서 프리로 표시된다.
하나의 실시예에서, 단계 1832에서, 예컨대, 방법 1800의 초기에 처리된 튜플들 때문에 튜플 내용이 업데이트 패키지 및/또는 보호 버퍼에서 이미 보호되었는지 여부가 검사될 수도 있으며, 보호된 튜플 내용이 용이하게 접근가능하거나 대안적으로 보호된 내용에 대한 포인터가 대신 저장될 수 있다면, 이 경우 상기 방법은 단계 1839로 이동할 수 있다.
하나의 실시예에서, 1834까지 소정 개수의 "아니오"들의 다음에, DR 튜플의 내용의 크기에 관계없이 보호 버퍼에 더 이상의 공간이 없으며 후속적으로 과정이 단계 1842를 계속할 수 있는 것으로 가정될 수 있다.
프로세스는 1839과 이후 단계 1840의 다음 튜플로 이동하거나, 튜플이 검토한 블록에 대한 마지막 튜플인 경우, 다음 블록에 대한 DR로 이동한다(단계 1841).
일단 마지막 블록에 대한 DR의 마지막 튜플에 도달하면, 블록 커서는 업데이트 순서에 따라서 램의 최초 업데이트 압축 블록에 놓인다(단계 1842). 단계 1844에서, 업데이트 압축 블록은 램으로부터 저장공간의 해당 물리적 블록으로 복사된 다. 블록들은 마지막 블록에 도달될 때까지(단계 1846) 업데이트 순서대로 복사되며(단계 1848) 상기 방법은 종료된다.
다른 실시예에서, 원래의 버전이 램으로 압축해제되고, 그리고 업데이트 비압축 버전이 램의 다른 영역에 쓰여질 것으로 가정한다(즉, 램의 원래의 버전을 덮어쓰지 않음). 상기 실시예에서, 단계 1207 이전에(즉, 다음 업데이트 명령으로 진행하기 이전에), 현재의 업데이트 명령이 실행되어, 램의 다른 영역에 완전한 업데이트 비압축 버전을 구축할 수 있다. 상기 실시예에서, 단계 1211 및 1214는 상기 기술된 바와 같은 단계 1826을 계속하는 방법을 이용하여 생략될 수 있다.
다른 실시예에서, 업데이트 버전의 가상 블록을 위한 가상 경계들이 업데이트 패키지로부터 또는 방법 1800을 실행하기 이전에 알려지지 않은 것으로 가정한다. 업데이트 패키지의 업데이트 명령들은 업데이트 버전의 블록들의 가상 경계들로부터 독립적이라고 가정한다. 예컨대, 업데이트 패키지는 업데이트 비압축 버전을 위하여 램에서 할당되어야 하는 주소 범위를 지정할 수 있고 명령들은 상기 범위 내의 주소와 관련될 수 있다(예컨대, 범위의 상부 또는 하부 경계에 대하여). 상기 실시예들에서, 업데이트 명령은 특별하지 않은 순서로 실행되어, 램에 업데이트 비압축 버전을 구축한다(구 비압축 버전은 덮어쓰이지 않는다). 이후, 비압축 업데이트 버전은, 예컨대 램의 동일 크기 영역이 각각의 물리적 블록을 대체하는, 방법 700를 사용하여 램에 압축될 수 있다. 일단 압축이 달성되면, 비압축 업데이트 버전의 가상 블록 경계들 및 DR들이 알려진다. 상기 실시예들 중의 어느 하나의 실시예에서, 상기 업데이트 버전의 가상 경계들은 예컨대 보호 버퍼의 비휘발성 기 억 장치에 저장된다. 이후, 업데이트 명령들은 예컨대 업데이트 순서(또는 방법 1700에서 따르는 임의의 순서)로 보호 버퍼에서 보호될 필요가 있는 임의의 소스 세그먼트들을 보호하기 위하여 분석된다 - 단계 1203, 1204, 1206, 1208, 1209, 1210, 1207, 및 1205에 관한 상기 설명을 참조하시오. 마지막 명령이 분석된 후, 상기 방법은 상기 기술된 바와 같은 단계 1828을 속행할 수 있다.
도 18의 흐름도에 더하여, 보호 내용의 크기(이를 비휘발성 보호 버퍼에 저장하기 직전)는 하나의 실시예에서 업데이트 버전에서 변경된 원래의 버전의 n(n>1)개의 블록의 수보다 더 적은 블록을 포함할 수 있다는 점을 이해하여야 한다. 즉, 상기 실시예에서 n 보다 적은 동작들이 비휘발성 보호 버퍼에 보호 내용을 저장하는데 요구된다. 만약 블록 저장 동작의 수가 m이라고 지정되는 경우, 상기 실시예에서 2<=m<2n임을 이해하여야 한다.
보호 버퍼를 재사용하는 것이 유리할 수 있다는 점을 또한 주지할 것이다. 업데이트 패키지의 생성 도중 시뮬레이트된 재사용(도 17을 참조)은 도 18에 기술된 업데이트 과정의 거동(behavior)을 반영한다. 그러므로, 재사용이 이용되는 경우에, 1884에 더하여 업데이트 압축 내용이 사용한 보호 내용을 단지 저장하는지 검사하는 것이 가능하고, 만약 그렇다면, 추가적 세그먼트들(동일한 물리적 블록에 해당하거나 업데이트 순서에 따라서 뒤따르는 다른 물리적 블록들에 해당함)을 업데이트하거나, 업데이트 순서로 추가적인 원래의 블록들을 더 압축해제하거나, 업데이트 순서로 더 빠른 추가적인 새로운 블록들을 압축해제하는데 보호 내용이 요구되지 않는 한, 이러한 보호 내용은 프리(free)로 표시될 수 있다. 상기 실시예에 서, 비휘발성 보호 버퍼의 하나의 블록에 저장된 모든 보호되는 내용이 프리로 표시되는 경우, 상기 보호되는 내용은 삭제될 수 있으며, 블록은 재사용될 수 있다.
위에서 언급된 바와 같이, 몇몇 경우에 새 버전에 사용된 압축 알고리즘 및/또는 압축 비율은 원래의 버전에 사용된 압축 알고리즘 및/또는 압축 비율과 반드시 동일하지 않다. 신(new) 버전에서 사용된 압축이 원래의 버전에서 사용된 압축과 같은지 아니면 다른지에 관하여 아무런 제한이 없기 때문에 방법 1800은 이러한 가능성을 완전히 허용한다. 몇몇 실시예에서, 비압축 내용의 업데이트가 아닌 다른 알고리즘 및/또는 압축 비율을 이용하는 원래의 내용의 재압축이 단순히 존재한다는 점을 또한 이해하여야 한다. 상기 실시예들에서, 업데이트 패키지는 다른 알고리즘 및/또는 압축 비율을 이용하여 원래의 내용을 재압축하는 명령을 포함할 수 있다. 상기 실시예에서 변형 명령들이 없기 때문에, 소스 세그먼트들은 보호될 필요가 없으며, 따라서, 보호 버퍼의 세그먼트 보호의 시뮬레이션 및 방법 1700에서 업데이트 명령들의 삽입 명령들으로의 교체가 상기 실시예에서 생략될 수 있다. 추가적으로, 비압축 내용이 업데이트되지 않는 이러한 실시예들에서 최적의 업데이트 순서는 압축 순서이며, 따라서 DR 내용이 결정되거나(예컨대, 방법 1400 또는 1500에서) 보호될 필요가 없다. 보호 버퍼에서 DR 내용 보호의 시뮬레이션 및 업데이트 패키지에 DR 내용의 삽입이 이러한 실시예들의 방법 1700에서 생략될 수 있다. 유사하게, 방법 1800에서 보호 버퍼의 세그먼트들의 실제적인 소스 세그먼트/DR 내용 보호는 상기 실시예들에서 생략될 수 있다. 그러므로, 인플레이스 업데이트는 원래의 버전이, 비압축 원래의 버전의 내용이 비압축 업데이트 버전의 내용과 동일한지 여부에 관계없이, 원래의 버전과는 다른 알고리즘 및/또는 압축 비율에 따라서 압축된 새로운("업데이트된") 버전으로 인플레이스 업데이트되는 실시예들을 포함하는 것으로 이해되어야 한다.
업데이트 과정이 실패하는 경우에, 기억 장치에 저장된 버전은 중간 버전일 수 있는 한편, 램 저장 압축 업데이트 버전은 지워진다. 압축된 원래의 내용을 포함하는 중간 버전의 그러한 블록들에 손실(missing) 압축된 업데이트 내용의 쓰기를 재개하기 위하여, 적어도 손실 램 저장 압축된 업데이트 내용은 복원되어야 한다. 압축된 업데이트 내용의 일부는 중간 버전에서 저장될 수 있으나 다른 일부는 손실된다.
손실 압축된 업데이트 내용이 저장되었어야 하는 블록은 압축된 원래의 내용 ("잔여 압축된 원래의 내용"을 구성하는 내용)를 포함한다는 점을 이해하여야 한다. 추가적으로, 내용의 역방향 참조된 조각은 백업 저장공간에 저장된다. 잔여 압축된 원래의 내용을 위한 램 저장공간이 생성될 수 있다는 점(압축 순서에 따라서 잔여 압축된 원래의 내용을 압축해제하는데 더하여) 또한 이해하여야 한다.
이후, 손실 압축된 업데이트 내용에 해당하는 비압축 업데이트 가상 블록들은 잔여 압축된 원래의 내용이 저장되는 첫번째 블록부터(업데이트 순서에 따라) 시작하여 업데이트 순서에 따라서 재생성될 수 있다. 이러한 재개된 업데이트 과정에 의하여 구성된 비압축된 업데이트 내용은 앞서의 경우처럼 램에 저장된다.
램 저장 비압축 업데이트 내용이 완전한 비압축 업데이트 버전(또는 필요한 하나 이상의 가상 블록들)이 아니라는 점을 이해하여야 한다. 손실된 이러한 가상 블록들의 그러한 압축 내용은 중간 버전에 저장된다. 압축 순서에 따라서 비압축 업데이트 가상 블록을 검토하고, 이에 따라서, 손실 가상 블록들을 식별하는 것이 가능하기 때문에, 최초 손실 가상 블록은 임의의 선행하는 손실 가상 블록 전에 식별될 것이라는 점을 이해하여야 한다(이러한 경우 우선 순위는 압축 순서에 따름). 이렇게, 각각의 손실 가상 블록에 해당하는 압축된 업데이트 내용을 식별하고(압축된 업데이트 내용은 중간 버전의 블록에 저장됨), 손실 가상 블록에서 저장될 손실 비압축된 업데이트 내용을 산출하는, 상기 식별된 압축된 업데이트 내용을 압축해제하는 것이 가능하다. 비압축 업데이트 버전의 각각의 가상 블록을, 상기 식별된 블록들을 산출하기 위하여 저장된 내용을 비압축하는, 이러한 방식으로 검사하는 것은 램에 저장된 완전한 비압축 업데이트 버전의 결과를 낳는다(또는 일반적으로, 그 결과는 하나 이상의 가상 블록에 램 저장된 비압축 내용임).
이제 램 저장 비압축 업데이트 버전(또는 하나 이상의 가상 블록에 램 저장된 비압축 내용)은 램 저장 압축 업데이트 버전을 산출하기 위하여 재압축될 수 있으며, 중단 전 쓰여지지 않은 이러한 내용은 업데이트 블록들로 인플레이스 방식으로 쓰여질 수 있다.
도 19는 본 발명의 실시예에 따라서 저장공간에 업데이트 블록의 쓰기하는 동안 중단된 업데이트를 재개하는 방법 1900을 도시한다. 중단은 몇몇 블록들이 저장공간으로 복사되나 다른 블록들은 그렇지 않은 경우 단계 1844에서 발생하는 것으로 가정된다. 그러므로 램의 내용들이 지워지는 것으로 가정하면, 남아 있는 것들은 저장 공간의 블록들, 구 내용을 포함하는 몇몇 블록 및 신(업데이트된) 내용 을 포함하는 몇몇 블록, 그리고 보호 버퍼 또는 업데이트 패키지에서 보호되는 것이다. 업데이트된 내용을 갖는 물리적 저장 공간 내의 블록들을 덮어쓰기 이전에 중단이 대신 발생하는 경우, 중단 시 방법 1800은 아무런 문제 없이 처음부터 재시작할 수 있음을 이해할 것이다.
단계 1902에서, 블록 커서는 압축 순서의 최초 잔여 원래의 블록을 지시한다(즉, 압축 순서의 초기 블록들이 이미 업데이트된 경우 이 블록들은 당분간 무시된다). 재개 위치는 예컨대 참고로서 본원에 포함된 Meller 외의 미국 공개 출원 번호 20050216530에서와 같이 결정될 수 있다. 단계 1904에서, 원래의 블록들은, 예컨대, 방법 1500을 이용하여 압축 순서대로 램으로 압축해제된다(그러나 압축해제 기록들이 일찍이 결정되고 방법 1700 및/또는 1800에서 처리되었기 때문에 단계 1515는 생략함). 1906에서, 압축해제가 업데이트 순서에서 더 빠른 블록의 원래 버전(이후 업데이트됨)과 관련된 내용을 필요로 하는지 여부가 결정된다. 만일 그렇다면, 단계 1908에서 내용이 업데이트 패키지 또는 보호 버퍼로부터 취하여 질 수 있으며, 여기에 의존하여 내용이 방법 1700 및/또는 1800에서 보호되었다. 예컨대, 상호 참조표는 필요한 내용의 위치를 제공할 수 있다. 상기 방법은 단계 1911에서 압축 순서로 각각의 원래의 블록을, 모든 원래의 블록들이 압축해제될 때까지, 압축해제한다(임의의 이미 업데이트 블록들의 처리를 현재로서는 건너뛰면서)(단계 1910). 블록 커서는 단계 1912에서 업데이트 순서로 업데이트되기 위하여 남겨진 최초의 원래의 블록을 지시한다. 상기 방법은, 예컨대, 단계 1214 내지 1220 및 1222 내지 1224을 실행하면서(그러나, 방법 1200의 단계 1219 및 1221는 생략함) 원래의 블록들을 업데이트하는 단계를 진행한다. 단계 1218에서, 보호된 내용은 복구 포인터 대신에 상호 참조표를 이용하여 회복된다(복구 포인터를 진행시키는 업데이트는 방법 1800에서 업데이트 블록들을 저장 공간에 쓰기하는 것으로부터 분리되어, 쓰기 중단시 복구 포인터는 이미 보호 버퍼의 끝으로 진행되었으므로, 쓰기 중단이 발생한 블록과 아무런 관계가 없을 것임을 주의).
일단 마지막 업데이트 명령이 실행되면, 방법은 압축 순서에서 첫번째 새로운 블록을 지시하는 블록 커서를 이용하여, 단계 1926을 속행한다. 각각의 블록은 예컨대 압축 순서대로 방법 1500을 이용하여(그러나, 압축해제 기록들이 일찍이 방법 1700 및/또는 1800에서 결정되고 처리되었으므로 단계 1515를 생략함) 단계 1928에서 램에 압축해제된다(단계 1935). 임의의 블록에 있어서, 단계 1930에서, 블록을 압축해제하는데 필요한 내용이 업데이트 순서에서 뒤에 오는 블록과 연관되는 경우, 단계 1932에서 상기 필요한 내용은 업데이트 패키지 또는 보호 버퍼로부터 취하여질 수 있으며, 여기에 의존하여 내용이 방법 1700 및/또는 1800에서 보호된다. 마지막 새로운 블록이 램으로 압축해제된 후(단계 1934), 이후 단계 1936에서, 블록 커서는 압축 순서에서 첫번째 블록을 지시한다.
램의 몇몇 블록들이 개입중단 이전에 업데이트되고, 또 몇몇 블록들은 방법 1900의 일부로서 업데이트되었으나(즉, 업데이트를 재개한 후), 상기 블록들은 함께 비압축 새로운 버전을 형성하는 점을 이해하여야 한다.
단계 1936에서, 블록 커서는 압축 순서로 첫번째 블록을 지시하고, 블록들은 압축 순서대로 단계 1938에서 램으로 압축된다(단계 1941). 일단 마지막 블록이 압 축되면(단계 계속 1940), 저장공간으로의 압축 블록의 쓰기는 재개될 수 있다. 단계 1942에서, 블록 커서는 업데이트 순서로 업데이트될 첫번째 잔여 원래의 블록(압축되는)을 지시한다. 저장공간에 아직 쓰여지지 않았던 각각의 잔여 블록은 마지막 블록에 도달될 때까지(단계 1946) 업데이트 순서로(단계 1941) 저장공간에 쓰여진다(단계 1944).
도 17, 18 및 19를 참조하여 기술된 실시예들이 변형 명령들과 관련된 소스 세그먼트들이 보호 버퍼 및/또는 업데이트 패키지에서 잠재적으로 보호될 수 있다고 가정하더라도, 다른 실시예들에서, 변형 명령들과 관련된 다른 데이터가 추가로 또는 대신하여 보호될 수 있다. 예컨대 이러한 다른 실시예들 중 어느 하나에서, 타겟 세그먼트들은 소스 세그먼트에 추가하여 또는 대신하여 잠재적으로 보호될 수 있다. 다른 예에서와 같이, 이러한 다른 실시예들 중 어느 하나에서, 소스 및/또는 타겟 세그먼트들의 조작 형태는 보호될 수 있으며, 여기서 상기 조작은 명령에 의하여 지시된 변형과 관련되거나 관련되지 않을 수 있다.
그러나 상기 실시예들은 비제한적이며, 대안적인 실시예가 필요한 경우 존재할 수 있다는 점을 주지할 것이다. 예컨대, 대안적인 실시예는 백업 저장공간에서 이를 보호 대신, 업데이트 패키지에서 데이터(객체들을 포함)를 보호할 수 있다.
단일 블록 및 다중 블록 실시예들을 이해한 후, 업데이트 패키지는 업데이트 명령들을 포함하여야 함을 주지할 것이다. 업데이트 패키지는 내용의 순방향 및 역방향 참조된 조각들("보호 동작들"을 함께 구성함)을 램 저장하고 보호하는 것으로 앞서 설명되었다. 하나의 실시예에 따르면, 이러한 보호 동작들은 업데이트 패키지 로 보호 명령을 삽입함으로써 실현될 수 있다. 그러나, 대안적인 실시예에 따르면, 업데이트 과정에 의하여 업데이트가능한 장치를 운영하고 있는 동안 보호가 유추될 수 있으며, 이에 따라서 명백한 보호 명령들이 업데이트 패키지에서 요구되는 것은 아니다.
업데이트 패키지 생성과 내용의 원래 버전들을 업데이트하여 이의 업데이트된 버전들을 생성하기 위하여 기술된 방법들을 따라서, 이러한 방법들을 수행할 수 있는 장치가 또한 기술될 것이다.
도 20은 업데이트 패키지 생성기(104)와 같은 본 발명의 하나의 실시예에 따른 업데이트 패키지를 생성하는 장치(2001)을 도시한다. 실시예에 따르면, 업데이트 패키지 생성기(104)는, 업데이트 패키지 획득 유닛(2002)을 포함한다. 업데이트 패키지 접근 유닛(2002)에 의하여 획득된 업데이트 패키지는 알려진 per se diff 툴을 적용함으로써 생성된 간단단 델타를 포함하는 임의의 업데이트 패키지, 또는 케이스에 적용 가능한 임의의 방법에 따라서 생성된, 임의의 업데이트 패키지일 수 있다. 추가적으로, (예컨대, 도 11의 1101 또는 도 17의 1701을 참조하여 앞서 주지된 바와 같이) 업데이트 패키지 획득 유닛은 당해 기술분야에서 알려진 임의의 방법에 따라서 사전 준비된 업데이트 패키지를 획득하거나 업데이트 패키지를 생성할 수 있다.
데이트 순서 분석기(2003)은 업데이트 패키지 접근 유닛(2002)에 연결된다. 업데이트 순서 분석기(2003)은 업데이트 패키지 접근 유닛(2002)으로부터 업데이트 패키지를 수신하고 보호 버퍼 사용을 개선하는 업데이트 순서를 결정한다. 업데이 트 순서는, 예컨대, 도 10 또는 16에 도시된 방법에 따라서 결정될 수 있다.
업데이트 순서 분석기(2003)에 결합된 업데이트 패키지 빌더(2004)는 업데이트 순서 획득 유닛(2002)으로부터 수신된 업데이트 패키지 및 순서 분석기(2003)에서 결정된 업데이트 순서에서 따라서 새로운 업데이트 패키지를 구축한다. 도 11 및 17은 업데이트 패키지 빌더(2004)에 적용될 수 있는 방법의 실시예들을 도시한다. 또한, 장치(2001)는 실시예에 따라서 블록 단위(block by block) 및/또는 다중 블록 압축/압축해제를 수행하기 위한 압축/압축해제 모듈(2005)을 포함한다.
소정 실시예들에 따라서, 본 발명은 업데이트 패키지를 생성하기 위한 장치(2001)을 포함하며, 여기서 상기 업데이트 패키지는 업데이트 순서를 최적화하도록 구성됨을 주지할 것이다. 소정 실시예들에 따른 최적화는 임의의 다른 업데이트 순서에 의하여 달성된 임의의 다른 보호 내용 크기 보다 작은 보호 내용 크기를 달성할 것이다. 다른 실시예들에 따르면, 보호 내용 크기는 모든 가능한 업데이트 순서에 의하여 달성된 평균 보호 내용 크기보다 더 작다. 또 다른 실시예에 따르면, 보호 내용 크기는 업데이트 패키지와 관련된 임의 업데이트 순서에 의존하는 보호 내용의 임의의 크기보다 더 작다. 추가적으로, 다른 변형이 적용 가능하다.
도 21은 본 발명의 다른 실시예에 따라서, 내용의 원래의 버전을 이의 업데이트 버전으로 업데이트하기 위한 장치(2101)를 도시한다. 장치(2101)는 업데이트 패키지를 획득하는 수신기(2102)를 포함한다. 앞서 설명된 바와 같이, 예컨대 도 12A 및 12B의 1201 또는 도 18의 1801을 참조하여, 업데이트 패키지는 통신 네트워크로부터 수신함으로써 획득될 수 있거나 임의의 대안적인 방법에 의하여 획득될 수 있다. 장치(2101)는 업데이트 장치의 기억 장치에 저장된 원래의 버전을 업데이트하도록 적응되어 업데이트 버전을 생성하는 업데이트 과정과 같은 업데이트 모듈(2103)을 더 포함한다. 업데이트 모듈(2103)은, 예컨대, 도 12, 18 19에 도시된 흐름도에 따라서 운영될 수 있다. 또한, 장치(2101)는 실시에에 따라서 블록 단위 및/또는 멀티블록 압축/압축해제를 수행하는 압축/압축해제 모듈(2105)을 포함한다.
압축/압축해제 모듈(2005 및/또는 2105)은 장치(2001 및/또는 2101) 중 어느 하나에서 제공되는 압축 및 압축해제 모듈 중 어느 하나 또는 양자 모두를 이용하여, 분리된 압축 및 압축해제 모듈들로 분리될 수 있음은 명백하다. 예컨대, 하나의 실시예에서, 장치(2001)는 단지 압축해제 모듈 또는 단지 압축 모듈만을 포함한다. 다른 예에서와 같이, 하나의 실시예에서, 장치(2101)는 단지 압축해제 단위 또는 단지 압축 단위만을 포함한다.
하나의 실시예에서, 장치(2001)에서 업데이트 패키지를 준비하는 경우, 장치(2001)에서 압축해제 및/또는 압축에 사용된 알고리즘은 장치(2101)에서 압축해제 및/또는 압축에 사용된 알고리즘들을 고려하거나(내용을 준비된 업데이트 패키지에 따라서 업데이트할 경우), 그 반대의 경우도 같다.
하나의 실시예에서, 압축 및/또는 압축해제는 업데이트 가능한 장치에 설치되고 업데이트 과정에 의하여 활성화된 압축 및/또는 압축해제 소프트웨어(압축 모듈 및 압축해제 모듈을 구성함, 예컨대 2105)에 의하여 수행될 수 있다. 대안적으로, 업데이트 과정은 압축된 원래의 버전을 압축해제하는 압축해제 모듈 및/또는 압축 업데이트 버전을 산출하기 위하여 업데이트 버전을 압축하는 압축 모듈을 포함할 수 있다. 이는 비제한적이며, 조합(예컨대, 압축 모듈을 포함하고 압축해제 모듈에 연결된 업데이트 과정) 또는 예컨대 압축 모듈만을 포함하거나 이에 연결된 업데이트 과정과 같이, 임의의 대안적인 실시예가, 실행 가능한 경우, 허용됨을 이해하여야 한다. 후자의 업데이트 과정은 압축된 업데이트 내용을 산출하기 위하여 업데이트된 내용을 압축하는 비압축(un-compressed) 원래의 내용을 업데이트할 수 있음을 이해할 것이다. 그 반대의 경우 또한 사실이다. 압축해제 모듈만을 포함하여, 따라서, 비압축된 업데이트 버전을 산출하면서, 압축해제된 원래의 버전을 업데이트하는 것을 허용하는 것이 가능하다.
압축된 원래의 버전이 비압축 업데이트 버전으로 대체되는 것으로 가정하면, 상기 방법들 및 시스템은 예컨대 업데이트 버전에 있어서 압축해제/압축, 가상 블록들/경계들의 계산, 및/또는 압축해제 기록의 결정/검토 중 어느 것을 생략하는 등의 필요한 변경을 가함으로써 적용될 수 있다. 비압축 원래의 버전이 압축된 업데이트 버전으로 대체되는 것으로 가정하면, 상기 방법들 및 시스템은 예컨대 원래의 버전에 있어서 압축해제/압축, 가상 블록들/경계들의 계산, 및/또는 압축해제 기록의 결정/검토 중 어느 것을 생략하는 등의 필요한 변경을 가함으로써 적용될 수 있다.
독자는 원래 및 업데이트 버전을 기억 장치에 압축되어 저장되는 것으로 가정하면, 그 중 하나는 상기 단일 블록 압축을 이용하여 압축되고 다른 하나는 상기 다중 블록 압축을 이용하여 압축될 수 있음을 이해할 것이다. 예를 들어, 하나의 실시예에서, 원래의 버전은 블록 단위로 압축되고 업데이트 버전은 다중 블록으로 압축될 수 있다. 다른 실시예에서, 원래의 버전은 다중 블록으로 압축되고 업데이트 버전은 블록 단위로 압축될 수 있다. 상기 방법들 및 시스템은 이러한 실시예들에서 필요한 변경을 가함으로써 적용될 수 있다. 예를 들어, 압축해제 기록의 결정 또는 검사는 블록 단위로 압축되는 버전에 있어서 생략될 수 있다.
그러므로 본 발명의 실시예들은, 특히, 블록 단위 압축 업데이트 버전에 의하여 기억 장치에서 대체된 비압축 원래의 버전; 다중 블록 압축 업데이트 버전 대체된 비압축 원래의 버전; 비압축 업데이트 버전에 의하여 대체된 블록 단위 압축 원래의 버전; 블록 단위 압축 업데이트 버전에 의하여 대체된 블록 단위 압축 원래의 버전(동일 또는 서로 다른 압축 알고리즘/비율); 다중 블록 압축 업데이트 버전에 의하여 대체된 블록 단위 압축 원래의 버전; 비압축 업데이트 버전에 의하여 대체된 다중 블록 압축 원래의 버전; 블록 단위 압축 업데이트 버전에 의하여 대체된 다중 블록 압축 원래의 버전; 및 다중 블록 압축 업데이트 버전에 의하여 대체된 다중 블록 압축 원래의 버전(동일 또는 서로 다른 압축 알고리즘/비율)을 포함한다. 실시예에 따라서 업데이트 버전의 비압축 내용이 동일하지도 모른다 또는 상기 논의되는 바와 같이 원래의 버전의 비압축 내용과 다른 이해하여야 한다.
본 발명에 따라서 업데이트 버전의 비압축 내용은 상기한 바와 같이 원래의 버전의 비압축 내용과 동일하거나 다를 수 있음을 이해하여야 한다. 본 발명에 따른 시스템은 적당히 프로그램된 컴퓨터일 수 있음을 또한 이해할 것이다. 마찬가지로, 본 발명은 본 발명을 실행하는 컴퓨터에 의하여 읽을 수 있는 컴퓨터 프로그램 을 고려하고 있다. 또한, 본 발명은 본 발명의 방법을 실행하기 위한 기계에 의하여 실행할 수 있는 지침 프로그램을 실체적으로 구현하는 기계에 의하여 읽을 수 있는 메모리를 고려하고 있다.
추가적으로, 당해 기술분야에서 숙련된 자들은 본 발명에 따른 시스템이 하드웨어일 수 있다는 점을 이해할 것이다. 대안적으로, 상기 시스템은 하드웨어와 소프트웨어 성분으로 구성될 수 있다.
본 발명은 특별한 실시예에 대하여 도시되고 설명되었으나, 이에 제한되는 것은 아니다. 본 발명의 범위 내에서 수많은 변경, 변화 및 개선이 가능함을 이해할 것이다.

Claims (46)

  1. 업데이트 버전의 내용을 산출하기 위하여 저장 블록들을 갖는 비휘발성 기억 장치에 저장된 원래 버전의 내용을 인플레이스(in-place) 업데이트하는 방법에 있어서,
    업데이트 패키지를 획득하는 단계;
    상기 원래 버전 또는 그 일부를 휘발성 메모리로 복사하는 단계;
    비압축 업데이트 버전 또는 그 일부를 제공하기 위하여 상기 원래의 버전 또는 그 일부를 업데이트하는 단계;
    각각의 양의 비압축 업데이트 내용을 독립적으로 압축하기 위하여 상기 비압축 업데이트 버전 또는 그 일부를 압축하는 단계; 및
    상기 기억 장치에 상기 원래의 버전 또는 그 일부를 대신하여 상기 압축된 업데이트 버전 또는 그 일부를 쓰는 단계-여기서, 상기 각각의 독립적으로 압축된 양은 분리된 저장 블록에 쓰여짐-를 포함하는 것을 특징으로 하는 인플레이스 업데이트하는 방법.
  2. 청구항 1에 있어서,
    상기 원래의 버전은 압축되고, 상기 원래의 버전 또는 그 일부를 복사하는 단계는:
    상기 원래의 버전 또는 그 일부를 압축해제하는 단계를 포함하는 것을 특징 으로 하는 인플레이스 업데이트하는 방법.
  3. 청구항 2에 있어서,
    상기 압축된 원래의 버전은 상기 압축된 업데이트 버전과 다른 압축 알고리즘 또는 압축 비율을 이용하는 것을 특징으로 하는 인플레이스 업데이트하는 방법.
  4. 청구항 1에 있어서,
    상기 원래의 버전의 n(n>1)개의 블록 중 각각의 내용의 적어도 일부는 업데이트 버전에서 변경되고, 상기 업데이트 및 상기 쓰기 단계는 m개의 블록 저장 동작들을 수행하는 단계를 포함하고, 각각의 블록 저장 동작은 비휘발성 기억 장치의 블록에 내용을 쓰는 단계를 포함하고;
    상기 블록 저장 동작들은 비휘발성 기억 장치에 업데이트된 버전의 업데이트 내용을 저장하는 업데이트 블록 저장 동작들을 포함하고, 상기 업데이트된 내용은 적어도 상기 업데이트 패키지에 따라서 생성되고;
    여기서, 2<=m<2n인 것을 특징으로 하는 인플레이스 업데이트하는 방법.
  5. 청구항 1에 있어서,
    상기 원래의 버전의 n(n>1)개의 블록 중 각각의 내용의 적어도 일부는 업데이트 버전에서 변경되고, 상기 업데이트 및 상기 쓰기 단계는 블록 저장 동작들을 수행하는 단계를 포함하고, 각각의 블록 저장 동작은 비휘발성 기억 장치의 블록에 내용을 쓰는 단계를 포함하고, 또한, 상기 블록 저장 동작들은 적어도 하나의 백업 블록 저장 동작을 포함하는 것-여기서, 각각의 백업 블록 저장 동작은 비휘발성 보호 버퍼에 보호 내용을 저장하는 단계를 포함함-을 특징으로 하는 인플레이스 업데이트하는 방법.
  6. 청구항 5에 있어서,
    상기 업데이트 패키지는 명령들을 변형하는 단계를 포함하고, 상기 보호 내용은 변형 명령과 관련된 데이터를 포함하는 것을 특징으로 하는 인플레이스 업데이트하는 방법.
  7. 청구항 5에 있어서,
    상기 쓰기 단계 중 상기 휘발성 메모리는 지워지고:
    잔여 원래의 내용 또는 그 일부를 상기 기억 장치로부터 상기 휘발성 메모리로 복사하는 단계;
    상기 업데이트를 위하여 필요한 상기 보호 내용 중 적어도 일부를 회복하는 단계를 포함하여, 상기 잔여 원래의 내용 또는 그 일부를 업데이트하는 단계;
    각각의 양의 비압축 업데이트 원래의 내용을 독립적으로 압축하기 위하여 상기 업데이트된 잔여 내용 또는 그 일부를 압축하는 단계; 및
    상기 기억 장치에 상기 원래의 잔여 내용 또는 그 일부를 대신하여 상기 업데이트된 잔여 내용 또는 그 일부를 쓰는 단계-여기서, 상기 각각의 독립적으로 압 축된 양은 분리된 저장 블록에 쓰여짐-를 포함하는 것을 특징으로 하는 인플레이스 업데이트하는 방법.
  8. 청구항 5에 있어서,
    상기 업데이트 패키지는 업데이스 순서와 관련되고,
    상기 비휘발성 보호 버퍼 내의 보호 내용의 크기는 상기 업데이트 순서에 의존하고; 상기 크기는 상기 업데이트 패키지와 관련된 임의의 업데이트 순서에 의존하는 보호 내용의 임의의 크기보다 작고; 상기 임의의 업데이트 순서는 상기 업데이트 패키지와 관련될 수 있는 모든 가능한 업데이트 순서들로부터 임의로 선택되는 것을 특징으로 하는 인플레이스 업데이트하는 방법.
  9. 청구항 5에 있어서,
    상기 업데이트 패키지는 업데이트 순서와 관련되고,
    상기 비휘발성 보호 버퍼 내의 보호 내용의 크기는 상기 업데이트 순서에 의존하고; 상기 크기는 상기 업데이트 패키지와 관련될 수 있는 모든 가능한 업데이트 순서들 중 임의의 업데이트 순서에 의존하는 보호 내용의 크기들 중 가장 작은 것을 특징으로 하는 인플레이스 업데이트하는 방법.
  10. 청구항 1에 있어서,
    압축되는 경우, 상기 비압축 업데이트 내용의 각각의 양은 저장 블록의 크기 와 실질적으로 동일한 것을 특징으로 하는 인플레이스 업데이트하는 방법.
  11. 청구항 1에 있어서,
    상기 업데이트 패키지는 상기 비압축 업데이트 내용의 각각의 양을 묘사하는 데이터를 포함하는 것을 특징으로 하는 인플레이스 업데이트하는 방법.
  12. 청구항 11에 있어서,
    상기 각각의 양 중 어느 하나의 양은 상기 각각의 양의 다른 양의 업데이트, 압축 및 쓰기 이전에 업데이트되고, 압축되고 쓰여지는 것을 특징으로 하는 인플레이스 업데이트하는 방법.
  13. 청구항 1에 있어서,
    상기 원래의 버전은 상기 압축 업데이트 버전을 상기 기억 장치로 쓰기 이전에 전체적으로 업데이트되고 압축되는 것을 특징으로 하는 인플레이스 업데이트하는 방법.
  14. 업데이트 버전의 내용을 산출하기 위하여 저장 블록들을 갖는 비휘발성 기억 장치에 저장된 원래 버전의 내용을 인플레이스(in-place) 업데이트하기 위하여 업데이트 패키지를 생성하는 방법에 있어서,
    각각의 독립적으로 압축된 내용을 위한 분리된 저장 블록들을 포함하는 가상 블록들로 상기 원래 또는 업데이트 버전을 압축해제하는 단계; 및
    변형 명령들을 수행하는데 필요한 데이터의 보호 버퍼에서의 보호를 시뮬레이트하는 단계를 포함하는 것을 특징으로 하는 업데이트 패키지를 생성하는 방법.
  15. 청구항 14에 있어서,
    상기 업데이트 패키지에 상기 원래 버전 또는 업데이트 버전중 하나의 버전을 위한 가상 블록 묘사(delineation)를 저장하는 단계를 더 포함하는 것을 특징으로 하는 업데이트 패키지를 생성하는 방법.
  16. 청구항 14에 있어서,
    상기 업데이트 패키지는 상기 저장 블록들을 위한 업데이트 순서와 관련되고, 보호를 필요로 하는 변형 명령들과 관련된 데이터의 전체 크기는 상기 업데이트 순서에 의존하고; 상기 크기는 업데이트 패키지와 관련된 임의의 업데이트 순서에 의존하는 보호 내용의 임의의 크기보다 작고; 상기 임의의 업데이트 순서는 상기 업데이트 패키지와 관련될 수 있는 모든 가능한 업데이트 순서들로부터 임의로 선택되는 것을 특징으로 하는 업데이트 패키지를 생성하는 방법.
  17. 청구항 14에 있어서,
    상기 보호 버퍼가 충분하지 않은 경우, 변형 명령들을 수행하는데 필요한 데이터를 업데이트 패키지에서 보호하는 것은 업데이트 패키지에서 보호되는 것을 특 징으로 하는 업데이트 패키지를 생성하는 방법.
  18. 업데이트 버전의 내용을 산출하기 위하여 저장 블록들을 갖는 기억 장치에 저장된 원래 버전의 내용을 인플레이스 업데이트하는 방법에 있어서,
    업데이트 패키지를 획득하는 단계;
    상기 원래의 버전을 휘발성 메모리로 복사하는 단계-여기서, 상기 원래의 버전이 독립적으로 압축된 하나 이상의 저장 블록에 내용을 포함하는 경우, 상기 복사하는 단계는 상기 원래의 버전을 휘발성 메모리로 압축해제하는 단계 및 상기 원래의 버전을 압축해제하는데 필요한 적어도 일부의 내부을 보호하는 단계를 포함함-;
    비압축 업데이트 버전을 제공하기 위하여 원래의 버전을 업데이트하는 단계; 및
    상기 원래의 버전을 대신하여 상기 업데이트 버전을 비휘발성 메모리로 복사하는 단계-여기서, 상기 업데이트 버전이 블록들이 독립적으로 압축되는 것으로 압축되어 저장되는 경우, 상기 복사하는 단계는 상기 업데이트 버전을 압축해제하고 독립적으로 업데이트된 블록들을 압축하는데 필요한 적어도 일부의 내용을 보호하는 단계를 포함함-를 포함하고;
    여기서, 상기 원래의 버전 및 상기 업데이트 버전 중 적어도 하나의 버전은 독립적으로 압축된 하나 이상의 저장 블록에 내용을 포함하는 것을 특징으로 하는 인플레이스 업데이트하는 방법.
  19. 청구항 18에 있어서,
    상기 보호 내용은 압축과 관련없는 버전에 실제 내용을 포함하는 것을 특징으로 하는 인플레이스 업데이트하는 방법.
  20. 청구항 18에 있어서,
    상기 보호 내용은 압축과 관련된 버전에 추가된 내용을 포함하는 것을 특징으로 하는 인플레이스 업데이트하는 방법.
  21. 청구항 18에 있어서,
    상기 보호 내용은 상기 버전의 직전에 선행하는 블록과 가상적으로 관련된 버전의 블록을 압축해제하는데 필요한 데이터를 포함하는 것을 특징으로 하는 인플레이스 업데이트하는 방법.
  22. 청구항 18에 있어서,
    상기 업데이트 패키지는 변형 명령들을 포함하고, 상기 업데이트는 변형 명령과 관련된 데이터를 보호하는 단계를 포함하는 것을 특징으로 하는 인플레이스 업데이트하는 방법.
  23. 청구항 22에 있어서,
    상기 원래의 버전의 n(n>1)개의 블록 중 각각의 내용의 적어도 일부는 업데이트 버전에서 변경되고, 상기 복사, 압축, 업데이트 및 쓰기 단계는 m개의 블록 저장 동작들을 수행하는 단계를 포함하고, 각각의 블록 저장 동작은 비휘발성 기억 장치의 블록에 내용을 쓰는 단계를 포함하고;
    상기 블록 저장 동작들은 비휘발성 기억 장치에 업데이트된 버전의 업데이트 내용을 저장하는 업데이트 블록 저장 동작들을 포함하고, 상기 업데이트된 내용은 적어도 상기 업데이트 패키지에 따라서 생성되고;
    여기서, 2<=m<2n인 것을 특징으로 하는 인플레이스 업데이트하는 방법.
  24. 청구항 18에 있어서,
    상기 업데이트 패키지는 상기 저장 블록들을 업데이트하는 업데이트 순서와 관련되고, 업데이트 내용을 포함하는 저장 블록을 압축해제하는데 필요한 상기 보호 내용은 상기 업데이트 순서에 따라서 상기 저장 블록보다 나중에 업데이트되는 업데이트 내용을 포함하는 다른 저장 블록과 관련되는 것을 특징으로 하는 인플레이스 업데이트하는 방법.
  25. 청구항 18에 있어서,
    상기 업데이트 패키지는 상기 저장 블록들을 업데이트하는 업데이트 순서와 관련되고, 원래의 내용을 포함하는 저장 블록을 압축해제하는데 필요한 상기 보호 내용은 상기 업데이트 순서에 따라서 상기 저장 블록보다 더 일찍 업데이트되는 원 래의 내용을 포함하는 다른 저장 블록과 관련되는 것을 특징으로 하는 인플레이스 업데이트하는 방법.
  26. 청구항 18에 있어서,
    상기 원래의 버전의 n(n>1)개의 블록 중 각각의 내용의 적어도 일부는 업데이트 버전에서 변경되고, 상기 복사, 압축, 및 쓰기 단계는 m개의 블록 저장 동작들을 수행하는 단계를 포함하고, 각각의 블록 저장 동작은 비휘발성 기억 장치의 블록에 내용을 쓰는 단계를 포함하고;
    상기 블록 저장 동작들은 비휘발성 기억 장치에 업데이트된 버전의 업데이트 내용을 저장하는 업데이트 블록 저장 동작들을 포함하고, 상기 업데이트된 내용은 적어도 상기 업데이트 패키지에 따라서 생성되고;
    여기서, 2<=m<2n인 것을 특징으로 하는 인플레이스 업데이트하는 방법.
  27. 청구항 18에 있어서,
    상기 쓰기 단계 중 상기 휘발성 메모리는 지워지고:
    잔여 원래의 내용을 상기 기억 장치로부터 상기 휘발성 메모리로 복사하는 단계-여기서, 상기 잔여 원래의 내용이 상기 기억 장치에 압축 저장되는 경우, 상기 복사하는 단계는 상기 잔여 원래의 내용을 압축해제하는 단계를 포함함-;
    상기 잔여 원래의 내용을 업데이트하는 단계;
    업데이트 내용을 상기 기억 장치로부터 상기 휘발성 메모리로 복사하는 단계 -여기서, 상기 업데이트 내용이 상기 기억 장치에 압축 저장되는 경우, 상기 복사하는 단계는 상기 업데이트 내용을 압축해제하는 단계를 포함함-; 및
    상기 잔여 원래의 내용 또는 업데이트 내용을 압축해제할 때 상기 보호 내용을 이용하는 단계를 포함하는 것을 특징으로 하는 인플레이스 업데이트하는 방법.
  28. 청구항 18에 있어서,
    상기 원래의 버전은 상기 업데이트 버전을 압축하는데 이용된 것과 다른 압축 알고리즘 또는 압축 비율을 이용하여 압축되는 것을 특징으로 하는 인플레이스 업데이트하는 방법.
  29. 청구항 18에 있어서,
    상기 원래의 버전 및 상기 업데이트 버전 중 어느 하나의 버전은 각각의 독립적으로 압축된 내용을 위한 분리된 저장 블록들을 포함하는 것을 특징으로 하는 인플레이스 업데이트하는 방법.
  30. 업데이트 버전의 내용을 산출하기 위하여 저장 블록들을 갖는 비휘발성 기억 장치에 저장된 원래 버전의 내용을 인플레이스(in-place) 업데이트하기 위하여 업데이트 패키지를 생성하는 방법에 있어서,
    내용의 비압축 구(old) 및 비압축 신(new) 버전을 획득하는 단계;
    임의의 변형 명령과 하나 또는 양자 모두의 버전의 압축해제로부터 기인하는 구 또는 신 버전의 저장 블록들 사이의 종속성들(dependencies)을 획득하는 단계; 및
    임의의 변형 명령을 수행하고 하나 또는 양자 모두의 버전들을 압축해제하는데 필요한 데이터의 보호 버퍼 내에서의 보호를 시뮬레이트하는 단계를 포함하는 것을 특징으로 하는 업데이트 패키지를 생성하는 방법.
  31. 청구항 30에 있어서,
    상기 보호 버퍼가 충분한지 않은 경우, 임의의 변형 명령을 수행하고 하나 또는 양자 모두의 버전들을 압축해제하는데 필요한 데이터의 업데이트 패키지 내에서의 보호를 특징으로 하는 업데이트 패키지를 생성하는 방법.
  32. 청구항 30에 있어서,
    가상 블록 묘사 및 상기 비압축 구 또는 비압축 신 버전을 위한 압축해제 기록들을 상기 업데이트 패키지에 저장하는 단계를 더 포함하는 것을 특징으로 하는 업데이트 패키지를 생성하는 방법.
  33. 청구항 30에 있어서,
    상기 업데이트 패키지는 상기 저장 블록들을 업데이트하는 업데이트 순서와 관련되고,
    보호를 필요로 하는 데이터의 전체 크기는 상기 업데이트 순서에 의존하고; 상기 크기는 업데이트 패키지와 관련된 임의의 업데이트 순서에 의존하는 보호 내용의 임의의 크기보다 작고; 상기 임의의 업데이트 순서는 상기 업데이트 패키지와 관련될 수 있는 모든 가능한 업데이트 순서들로부터 임의로 선택되는 것을 특징으로 하는 업데이트 패키지를 생성하는 방법.
  34. 청구항 30에 있어서,
    상기 압축해제에 필요한 데이터는 압축과 관련 없는 버전에 실제 내용을 포함하는 것을 특징으로 하는 업데이트 패키지를 생성하는 방법.
  35. 청구항 30에 있어서,
    상기 압축해제에 필요한 데이터는 압축과 관련된 버전에 추가된 내용을 포함하는 것을 특징으로 하는 업데이트 패키지를 생성하는 방법.
  36. 청구항 30에 있어서,
    상기 압축해제에 필요한 데이터는 상기 버전의 직전 블록과 가상적으로 관련된 버전의 블록을 압축해제하는데 필요한 데이터를 포함하는 것을 특징으로 하는 업데이트 패키지를 생성하는 방법.
  37. 업데이트 버전의 내용을 산출하기 위하여 저장 블록들을 갖는 비휘발성 기억 장치에 저장된 원래 버전의 내용을 인플레이스 업데이트하기 위한 장치에 있어서,
    업데이트 패키지를 획득하도록 구성된 수신기;
    상기 원래의 버전 또는 그 일부를 휘발성 메모리로 복사하도록 구성되고, 업데이트 버전 또는 그 일부를 제공하기 위하여 상기 원래의 버전 또는 그 일부를 업데이트하도록 구성된 업데이트 모듈; 및
    만약 압축되는 경우, 상기 저장 장치에서 하나 이상의 블록에 해당하는, 상기 업데이트 버전의 비압축 양(amounts)을 독립적으로 압축하고, 상기 업데이트 버전을 압축해제하는데 필요한 적어도 일부의 내용을 보호함으로써, 또는 분리된 저장 블록에 해당하는 비압축 업데이트 내용의 각각의 양을 독립적으로 압축함으로써 상기 업데이트 버전 또는 그 일부를 압축하도록 구성된 압축 모듈을 포함하고;
    여기서, 상기 업데이트 모듈은 상기 원래의 버전 또는 그 일부를 대신하여 상기 압축 업데이트 버전 또는 그 일부를 상기 기억 장치에 쓰도록 구성되는 것을 특징으로 하는 인플레이스 업데이트하기 위한 장치.
  38. 업데이트 버전의 내용을 산출하기 위하여 저장 블록들을 갖는 비휘발성 기억 장치에 저장된 원래 버전의 내용을 인플레이스 업데이트하기 위하여 업데이트 패키지를 생성하는 장치에 있어서,
    각각의 저장 블록과 비압축 가상 블록 사이의 대응 관계를 결정하고 블록들 간의 압축해제 종속성들을 결정하도록 구성되거나, 독립적으로 압축되는 경우 저장 블록의 크기와 실질적으로 동일한 비압축 가상 블록과 각각의 저장 블록 사이의 대응관계를 결정하도록 구성된 압축해제 모듈; 및
    임의의 변형 명령을 수행하고 하나 또는 양자 모두의 버전들을 압축해제하는데 필요한 데이터의 보호 버퍼 내에서의 보호를 시뮬레이트하도록 구성된 업데이트 패키지 빌더를 포함하는 것을 특징으로 하는 업데이트 패키지를 생성하는 장치.
  39. 프로그램이 컴퓨터상에서 실행되는 경우, 청구항 1의 모든 단계들을 수행하기 위한 컴퓨터 프로그램 코드 수단을 포함하는 컴퓨터 프로그램.
  40. 청구항 39에 있어서,
    컴퓨터가 읽을 수 있는 매체 상에 구현되는 컴퓨터 프로그램.
  41. 상기 프로그램이 컴퓨터상에서 실행되는 경우, 청구항 14의 모든 단계들을 수행하기 위한 컴퓨터 프로그램 코드 수단을 포함하는 컴퓨터 프로그램.
  42. 청구항 41에 있어서,
    컴퓨터가 읽을 수 있는 매체 상에 구현되는 컴퓨터 프로그램.
  43. 상기 프로그램이 컴퓨터상에서 실행되는 경우, 청구항 18의 모든 단계들을 수행하기 위한 컴퓨터 프로그램 코드 수단을 포함하는 컴퓨터 프로그램.
  44. 청구항 43에 있어서,
    컴퓨터가 읽을 수 있는 매체 상에 구현되는 컴퓨터 프로그램.
  45. 상기 프로그램이 컴퓨터상에서 실행되는 경우, 청구항 30의 모든 단계들을 수행하기 위한 컴퓨터 프로그램 코드 수단을 포함하는 컴퓨터 프로그램.
  46. 청구항 45에 있어서,
    컴퓨터가 읽을 수 있는 매체 상에 구현되는 컴퓨터 프로그램.
KR1020087010881A 2005-10-06 2006-10-05 압축 버전을 포함하는 내용을 업데이트하는 방법 및시스템들 KR101359834B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US72393905P 2005-10-06 2005-10-06
US60/723,939 2005-10-06
PCT/IL2006/001165 WO2007039907A2 (en) 2005-10-06 2006-10-05 Methods and systems for updating content including a compressed version

Publications (2)

Publication Number Publication Date
KR20080067639A true KR20080067639A (ko) 2008-07-21
KR101359834B1 KR101359834B1 (ko) 2014-02-07

Family

ID=37771115

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020087010881A KR101359834B1 (ko) 2005-10-06 2006-10-05 압축 버전을 포함하는 내용을 업데이트하는 방법 및시스템들

Country Status (5)

Country Link
US (1) US8418167B2 (ko)
EP (1) EP1934729B1 (ko)
KR (1) KR101359834B1 (ko)
CN (1) CN101326492B (ko)
WO (1) WO2007039907A2 (ko)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20120106364A (ko) * 2011-03-18 2012-09-26 삼성전자주식회사 메모리 시스템에 데이터를 쓰는 쓰기 방법 및 메모리 시스템의 데이터 쓰기 방법
KR20140111867A (ko) * 2013-03-12 2014-09-22 삼성전자주식회사 데이터 처리 시스템과 이의 동작 방법

Families Citing this family (73)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9792308B2 (en) * 1998-12-11 2017-10-17 Realtime Data, Llc Content estimation data compression
US6624761B2 (en) 1998-12-11 2003-09-23 Realtime Data, Llc Content independent data compression method and system
US6601104B1 (en) 1999-03-11 2003-07-29 Realtime Data Llc System and methods for accelerated data storage and retrieval
US8692695B2 (en) 2000-10-03 2014-04-08 Realtime Data, Llc Methods for encoding and decoding data
US9143546B2 (en) 2000-10-03 2015-09-22 Realtime Data Llc System and method for data feed acceleration and encryption
US7386046B2 (en) 2001-02-13 2008-06-10 Realtime Data Llc Bandwidth sensitive data compression and decompression
US6667700B1 (en) * 2002-10-30 2003-12-23 Nbt Technology, Inc. Content-based segmentation scheme for data compression in storage and transmission including hierarchical segment representation
US8176186B2 (en) 2002-10-30 2012-05-08 Riverbed Technology, Inc. Transaction accelerator for client-server communications systems
JP4576130B2 (ja) * 2004-02-12 2010-11-04 パイオニア株式会社 通信系アプリケーションプログラムのバージョン更新方法及びそのプログラム
US8255362B2 (en) 2005-06-08 2012-08-28 rPath Methods, systems, and computer program products for provisioning software using local changesets that represent differences between software on a repository and a local system
US20060288054A1 (en) * 2005-06-08 2006-12-21 Johnson Michael K Methods, systems, and computer program products for provisioning software via a file repository in which a version string is used to identify branches of a tree structure
US20060288055A1 (en) * 2005-06-08 2006-12-21 Johnson Michael K Methods, systems, and computer program products for provisioning software via a networked file repository in which a parent branch has a shadow associated therewith
US8255363B2 (en) * 2005-06-08 2012-08-28 rPath Methods, systems, and computer program products for provisioning software using dynamic tags to identify and process files
US9583141B2 (en) 2005-07-01 2017-02-28 Invention Science Fund I, Llc Implementing audio substitution options in media works
US8732087B2 (en) 2005-07-01 2014-05-20 The Invention Science Fund I, Llc Authorization for media content alteration
US8203609B2 (en) * 2007-01-31 2012-06-19 The Invention Science Fund I, Llc Anonymization pursuant to a broadcasted policy
US7860342B2 (en) * 2005-07-01 2010-12-28 The Invention Science Fund I, Llc Modifying restricted images
US9230601B2 (en) 2005-07-01 2016-01-05 Invention Science Fund I, Llc Media markup system for content alteration in derivative works
US20070005422A1 (en) * 2005-07-01 2007-01-04 Searete Llc, A Limited Liability Corporation Of The State Of Delaware Techniques for image generation
US9092928B2 (en) 2005-07-01 2015-07-28 The Invention Science Fund I, Llc Implementing group content substitution in media works
US9065979B2 (en) 2005-07-01 2015-06-23 The Invention Science Fund I, Llc Promotional placement in media works
US20080013859A1 (en) * 2005-07-01 2008-01-17 Searete Llc, A Limited Liability Corporation Of The State Of Delaware Implementation of media content alteration
US9426387B2 (en) 2005-07-01 2016-08-23 Invention Science Fund I, Llc Image anonymization
US8910033B2 (en) 2005-07-01 2014-12-09 The Invention Science Fund I, Llc Implementing group content substitution in media works
US20070130232A1 (en) * 2005-11-22 2007-06-07 Therrien David G Method and apparatus for efficiently storing and managing historical versions and replicas of computer data files
US9215512B2 (en) 2007-04-27 2015-12-15 Invention Science Fund I, Llc Implementation of media content alteration
JP4944686B2 (ja) * 2007-06-28 2012-06-06 ソニーモバイルコミュニケーションズ株式会社 ソフトウェア更新方法および携帯端末装置
US8655858B1 (en) * 2008-11-13 2014-02-18 Amazon Technologies, Inc. Digital content reconstruction and distribution
US8250040B2 (en) * 2009-06-15 2012-08-21 Microsoft Corporation Storage or removal actions based on priority
EP2333660B1 (en) 2009-12-04 2016-10-05 ST-Ericsson SA Method of and apparatus for providing a logical view of data stored in an non-volatile memory
CN101763269A (zh) * 2010-01-27 2010-06-30 中兴通讯股份有限公司 一种软件安装包的制作方法
US10210162B1 (en) 2010-03-29 2019-02-19 Carbonite, Inc. Log file management
WO2011155141A1 (ja) * 2010-06-08 2011-12-15 パナソニック株式会社 コンテンツ管理サーバ及びコンテンツ管理方法
US8413132B2 (en) 2010-09-13 2013-04-02 Samsung Electronics Co., Ltd. Techniques for resolving read-after-write (RAW) conflicts using backup area
EP2697906A1 (en) 2011-04-11 2014-02-19 Marvell World Trade Ltd. Method for compression and real-time decompression of executable code
US8745338B1 (en) 2011-05-02 2014-06-03 Netapp, Inc. Overwriting part of compressed data without decompressing on-disk compressed data
US8997085B2 (en) * 2011-06-24 2015-03-31 International Business Machines Corporation Image delta-based upgrade of complex stack in software appliance
KR101667097B1 (ko) 2011-06-28 2016-10-17 휴렛 팩커드 엔터프라이즈 디벨롭먼트 엘피 시프트 가능 메모리
WO2013062561A1 (en) 2011-10-27 2013-05-02 Hewlett-Packard Development Company, L.P. Shiftable memory supporting atomic operation
KR101660611B1 (ko) 2012-01-30 2016-09-27 휴렛 팩커드 엔터프라이즈 디벨롭먼트 엘피 워드 시프트 정적 랜덤 액세스 메모리(ws-sram)
WO2013130109A1 (en) 2012-03-02 2013-09-06 Hewlett-Packard Development Company L.P. Shiftable memory defragmentation
WO2013130108A1 (en) 2012-03-02 2013-09-06 Hewlett-Packard Development Company , L. P. Shiftable memory supporting bimodal storage
CN103457905B (zh) * 2012-05-28 2015-09-09 腾讯科技(深圳)有限公司 数据同步方法、系统及设备
US9170804B2 (en) * 2012-07-05 2015-10-27 Nokia Technologies Oy Method and apparatus for modifying compressed files
TWI501110B (zh) * 2013-02-25 2015-09-21 Pixart Imaging Inc 通訊協定系統及其自動更新資料的方法
CN103389919B (zh) * 2013-07-30 2016-09-14 浙江中控技术股份有限公司 一种基于冗余设备系统的数据处理方法及装置
US9442944B2 (en) * 2013-11-12 2016-09-13 Dropbox, Inc. Content item purging
CN104714819B (zh) * 2013-12-16 2019-11-15 中兴通讯股份有限公司 文件系统升级包制作方法、升级方法及装置、终端
CN105404521B (zh) * 2014-05-30 2017-05-31 广州市动景计算机科技有限公司 一种增量升级方法及相关装置
EP3213162B1 (en) * 2014-10-29 2018-11-28 Siemens Aktiengesellschaft Automatic compression algorithm selection and parameter tuning based on contextual knowledge
JP6434994B2 (ja) 2015-01-26 2018-12-05 日立オートモティブシステムズ株式会社 車載制御装置、プログラム書き込み装置、プログラム生成装置及びプログラム
US20170083254A1 (en) * 2015-09-19 2017-03-23 Qualcomm Incorporated Secure transaction management techniques
US9496893B1 (en) * 2015-10-29 2016-11-15 Yahoo! Inc. Content compression and/or decompression
JP6452595B2 (ja) * 2015-11-13 2019-01-16 株式会社日立ソリューションズ ファイルシステム及びプログラム
CN105786563B (zh) * 2016-02-19 2018-11-09 联州(上海)信息科技有限公司 实现软件在线更新的装置、系统和方法
CN107783728B (zh) * 2016-08-31 2021-07-23 百度在线网络技术(北京)有限公司 数据存储方法、装置和设备
WO2018173911A1 (ja) * 2017-03-24 2018-09-27 日立オートモティブシステムズ株式会社 車載制御装置、及び、プログラム更新ソフトウェア
US10374628B2 (en) * 2017-04-05 2019-08-06 International Business Machines Corporation In-place data compression with small working memory
CN107247562B (zh) * 2017-06-30 2020-03-06 郑州云海信息技术有限公司 一种压缩优化方法及其装置
US10416993B2 (en) * 2017-10-06 2019-09-17 International Business Machines Corporation Mobile application update manager
US11119981B2 (en) * 2017-10-27 2021-09-14 Hewlett Packard Enterprise Development Lp Selectively redirect-on-write data chunks in write-in-place file systems
US10642602B2 (en) * 2017-12-12 2020-05-05 Nxp Usa, Inc. NVM architecture with OTA support
CN107948316B (zh) * 2017-12-25 2020-11-03 北京搜狐新媒体信息技术有限公司 一种文件同步方法、装置及设备
FR3084496B1 (fr) * 2018-07-25 2020-08-07 Orange Procede et dispositif de generation d'instructions destinees a un dispositif pour realiser une mise a jour sur place d'un fichier de donnees
JP7225596B2 (ja) * 2018-07-30 2023-02-21 トヨタ自動車株式会社 プログラム更新システム、プログラム更新サーバーおよび車両
CN108959662B (zh) * 2018-08-31 2022-09-27 百度在线网络技术(北京)有限公司 内容更新方法及装置
CN109634529A (zh) * 2018-12-12 2019-04-16 浪潮(北京)电子信息产业有限公司 一种数据压缩方法和解压方法
KR20200089490A (ko) * 2019-01-17 2020-07-27 삼성전자주식회사 펌웨어 업데이트 방법 및 이를 수행하는 장치
US10768861B1 (en) 2019-02-27 2020-09-08 Microsoft Technology Licensing, Llc In-place safe decompression
CN112541147A (zh) * 2019-09-23 2021-03-23 北京轻享科技有限公司 一种内容发布管理方法及系统
CN111258621B (zh) * 2019-11-19 2022-08-02 浙江瑞银电子有限公司 一种固件差异化升级方法
US11758022B2 (en) * 2020-09-24 2023-09-12 Servicenow, Inc. Compression of machine-generated data
US11971857B2 (en) * 2021-12-08 2024-04-30 Cohesity, Inc. Adaptively providing uncompressed and compressed data chunks

Family Cites Families (22)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3234075B2 (ja) * 1993-11-30 2001-12-04 ローム株式会社 立体映像再生装置
US6018747A (en) * 1997-11-26 2000-01-25 International Business Machines Corporation Method for generating and reconstructing in-place delta files
IL125846A0 (en) * 1998-08-19 1999-04-11 Emony Incremental program update
US7028251B2 (en) * 2000-03-02 2006-04-11 Iora, Ltd. System and method for reducing the size of data difference representations
US6912711B1 (en) * 2000-05-25 2005-06-28 International Business Machines Corporation Method of applying an update to a contained collection of program and data files based upon versions
US6832373B2 (en) * 2000-11-17 2004-12-14 Bitfone Corporation System and method for updating and distributing information
US7134041B2 (en) * 2001-09-20 2006-11-07 Evault, Inc. Systems and methods for data backup over a network
US7058783B2 (en) * 2002-09-18 2006-06-06 Oracle International Corporation Method and mechanism for on-line data compression and in-place updates
AU2003279086A1 (en) 2002-09-30 2004-04-23 Insignia Solutions Plc Efficient system and method for updating a memory device
JP2004152136A (ja) * 2002-10-31 2004-05-27 Matsushita Electric Ind Co Ltd データ更新システム、データ更新システムの差分データ生成装置及びプログラム、並びに更新後ファイル復元装置及びプログラム
US6892207B2 (en) 2003-01-24 2005-05-10 Hewlett-Packard Development Company, L.P. Method of updating data in a compressed data structure
KR101438215B1 (ko) 2003-06-23 2014-09-04 레드 밴드 리미티드 저장기기에 저장된 콘텐츠의 버전을 갱신하는 방법 및시스템
DE602004028840D1 (de) 2003-07-07 2010-10-07 Red Bend Ltd Verfahren und system zum aktualisieren von versionen von in einer speichereinrichtung gespeichertem inhalt
US7600225B2 (en) * 2003-07-21 2009-10-06 Microsoft Corporation System and method for intra-package delta compression of data
US7886093B1 (en) * 2003-07-31 2011-02-08 Hewlett-Packard Development Company, L.P. Electronic device network supporting compression and decompression in electronic devices
KR100880783B1 (ko) * 2003-09-03 2009-02-02 휴렛-팩커드 디벨롭먼트 컴퍼니, 엘 피 전자 장치에서의 3-단계 부팅 프로세스
JP4267420B2 (ja) * 2003-10-20 2009-05-27 株式会社日立製作所 ストレージ装置及びバックアップ取得方法
US7549042B2 (en) * 2003-12-16 2009-06-16 Microsoft Corporation Applying custom software image updates to non-volatile storage in a failsafe manner
US7103740B1 (en) * 2003-12-31 2006-09-05 Veritas Operating Corporation Backup mechanism for a multi-class file system
EP1738256B1 (en) 2004-03-15 2018-05-02 Red Bend Ltd. Method and apparatus for reliably updating a stored version of content
US7971199B1 (en) * 2004-05-03 2011-06-28 Hewlett-Packard Development Company, L.P. Mobile device with a self-updating update agent in a wireless network
JP5173427B2 (ja) * 2004-11-08 2013-04-03 イノパス・ソフトウェアー・インコーポレーテッド 圧縮リード・オンリ・メモリ・ファイル・システム(crmfs)イメージの更新

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20120106364A (ko) * 2011-03-18 2012-09-26 삼성전자주식회사 메모리 시스템에 데이터를 쓰는 쓰기 방법 및 메모리 시스템의 데이터 쓰기 방법
KR20140111867A (ko) * 2013-03-12 2014-09-22 삼성전자주식회사 데이터 처리 시스템과 이의 동작 방법

Also Published As

Publication number Publication date
KR101359834B1 (ko) 2014-02-07
CN101326492B (zh) 2013-07-17
CN101326492A (zh) 2008-12-17
US20070083571A1 (en) 2007-04-12
WO2007039907A3 (en) 2007-06-07
EP1934729B1 (en) 2021-06-23
US8418167B2 (en) 2013-04-09
EP1934729A2 (en) 2008-06-25
WO2007039907A2 (en) 2007-04-12

Similar Documents

Publication Publication Date Title
KR101359834B1 (ko) 압축 버전을 포함하는 내용을 업데이트하는 방법 및시스템들
EP1934727B1 (en) Method and system for in-place updating content stored in a storage device
JP5057519B2 (ja) 記憶装置に記憶されたコンテンツをインプレース更新するための方法およびシステム
US8200886B2 (en) Efficient system and method for updating a memory device
JP6568947B2 (ja) 車載制御装置、プログラム更新システム、及び、プログラム更新ソフトウェア
US8453138B2 (en) Method and apparatus for generating an update package
KR102319657B1 (ko) 저장된 데이터 유닛들의 동작 관리
CN109933545B (zh) 数据储存装置与存储器装置的数据处理方法
KR102275431B1 (ko) 저장된 데이터 유닛들의 동작 관리
EP2329366B1 (en) Performing a pre-update on a non volatile memory
US9043680B2 (en) Method and system for in-place updating content stored in a storage device
US20080172584A1 (en) Method and system for in-place updating content stored in a storage device
US8578359B2 (en) Method and apparatus for reliable in-place update
WO2007026484A1 (ja) 実行バイナリイメージの作成及び実行を行う装置、方法、プログラム、該プログラムを記録したコンピュータ読み取り可能な記録媒体
EP3355184A1 (en) A method for generating a delta file for in-place updating of memory content and a method for memory updating
CN111052075B (zh) 提高在位固件更新稳健性的方法及装置
CN114721584A (zh) 数据写入的方法、设备和计算机程序产品

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: 20170102

Year of fee payment: 4

FPAY Annual fee payment

Payment date: 20180110

Year of fee payment: 5

FPAY Annual fee payment

Payment date: 20190102

Year of fee payment: 6

FPAY Annual fee payment

Payment date: 20200102

Year of fee payment: 7