KR20080006558A - 파일 시스템 디렉터리들의 신속하고 신뢰할 만한 동기화 - Google Patents

파일 시스템 디렉터리들의 신속하고 신뢰할 만한 동기화 Download PDF

Info

Publication number
KR20080006558A
KR20080006558A KR1020077023746A KR20077023746A KR20080006558A KR 20080006558 A KR20080006558 A KR 20080006558A KR 1020077023746 A KR1020077023746 A KR 1020077023746A KR 20077023746 A KR20077023746 A KR 20077023746A KR 20080006558 A KR20080006558 A KR 20080006558A
Authority
KR
South Korea
Prior art keywords
directories
directory
operations
differences
caller
Prior art date
Application number
KR1020077023746A
Other languages
English (en)
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 KR20080006558A publication Critical patent/KR20080006558A/ko

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/01Protocols
    • H04L67/10Protocols in which an application is distributed across nodes in the network
    • H04L67/1095Replication or mirroring of data, e.g. scheduling or transport for data synchronisation between network nodes
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/10File systems; File servers
    • G06F16/17Details of further file system functions
    • G06F16/178Techniques for file synchronisation in file systems
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10TECHNICAL SUBJECTS COVERED BY FORMER USPC
    • Y10STECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10S707/00Data processing: database and file management or data structures
    • Y10S707/99951File or database maintenance
    • Y10S707/99952Coherency, e.g. same view to multiple users
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10TECHNICAL SUBJECTS COVERED BY FORMER USPC
    • Y10STECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10S707/00Data processing: database and file management or data structures
    • Y10S707/99951File or database maintenance
    • Y10S707/99952Coherency, e.g. same view to multiple users
    • Y10S707/99954Version management

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Data Mining & Analysis (AREA)
  • Databases & Information Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Information Transfer Between Computers (AREA)
  • Multi Processors (AREA)

Abstract

기술된 시스템 및 방법은 컴퓨터/파일 시스템 디렉터리들의 신속하고 신뢰할 만한 동기화를 촉진한다. 동기화(패스트싱크) 서브시스템은 발견/열거 과정에서 호출 클라이언트에게 디렉터리들 사이에 있는 한 세트의 차이들을 제공하도록 작동하고, 동작 과정에서 상이한 디렉터리들을 동기화하라고 클라이언트에 의해 지시된 바에 따라 연산을 수행하도록 작동한다. 발견/열거 및 동작 과정들은 병렬 연산 및 I/O 파이프라이닝을 이용한다. 열거하는 동안에 각각의 디렉터리의 자식들을 열거하기 위해 다수의 스레드들이 이용되며, 각각의 서브 디렉터리가 새로운 스레드에 의해 취급되도록 인큐된다. 동작 과정에서, 연산이 요청될 때, 패스트싱크 서브시스템은 연산, 아이템 포인터 및 문맥 정보를 내부 문맥 블록으로 패키지하고 그 패킷을 프로세스 스레드 풀이 취급할 워크 아이템으로서 큐한다.
디렉터리, 파일, 동기, 스레드, 네트워크, 싱크

Description

파일 시스템 디렉터리들의 신속하고 신뢰할 만한 동기화{FAST AND RELIABLE SYNCHRONIZATION OF FILE SYSTEM DIRECTORIES}
본 발명은 일반적으로 컴퓨터 시스템에 관한 것이며, 좀더 자세하게는 컴퓨터 파일 및 디렉터리들에 관한 것이다.
컴퓨터 사용자들은 흔히 여행, 가정에서의 작업 또는 네트워크가 다운되었을 때와 같이 네트워크와의 접속을 끊고 오프라인으로 작업할 필요가 있다. 그 결과, 다양한 메커니즘들이 로컬 컴퓨터가 네트워크로부터 접속이 끊어질 때 로컬 컴퓨터 상의 캐시 네트워크 정보에 액세스하기 위해 그 정보에 주목했다. 로컬 캐시는 또한 오프라인 모드로 작업하는 네트워크 서버와 클라이언트 사이에 전달되는 데이터의 양을 감소시킨다. 전달되는 데이터의 양을 감소시키는 것에 대한 이점은 서버 워크로드의 감소, 클라이언트가 감지하는 대기 시간의 감소 및 이용 가능한 네트워크 대역폭의 증대를 포함한다.
오프라인 작업은 통상적으로 서버 디렉터리 계층 구조에 대응하는 오프라인 디렉터리 계층 구조의 상태를 변경시킨다. 디렉터리들에 대한 계층 구조 변경은 속성 변경 또는 데이터 쓰기와 같은 파일 변경의 형태, 또는 새로운 파일 또는 디렉터리의 생성이나 파일의 삭제와 같은 네임스페이스 변경의 형태로 일어날 수 있 다.
하나 또는 다수의 변경에 무관하게, 어떤 점에서는 그것이 오프라인 클라이언트와 서버 디렉터리들을 동기화 상태로 동기화하기 위한 어떤 프로세스를 수행할 필요가 있게 한다. 동기화 상태에서, 두개의 디렉터리 계층 구조들은 동일한 파일명들이 들어 있는 동일한 서브디렉터리 구조를 갖는다. 또한, 양쪽 디렉터리 모두에 존재하는 파일마다 데이터 스트림이 동일한 데이터를 포함하고 동일한 관련 속성, 타임스탬프 및 기타의 파일 시스템 정보를 포함할 것이 요구된다.
그러나, 캐시된 오프라인 아이템들을 서버 파일 시스템들의 아이템(디렉터리 및 파일)들과 동기화하는 것은 복잡하며, 비교적 느리고 항상 문제를 갖고 있다. 오프라인 파일들을 동기화하기 위한 신속하고 신뢰할 만한 방식이 요구된다.
요약해서 말하자면, 본 발명은 로컬, 오프라인 캐시에서 관리되는 디렉터리를 원격 네트워크 파일 시스템에 있는 다른 한 디렉터리와 동기화하는 것 등과 같이 디렉터리 및 그 파일들의 동기화를 촉진하는 다과정 시스템 및 방법에 주목하고 있다. 이를 위해, 신속하고 신뢰할 만한 동기화(FastSync) 서브시스템이 발견/열거 과정(discovery/enumeration phase)에서 콜(call)하는 클라이언트에게 한 세트의 차이를 제공하도록 작동하고, 동작 과정(action phase)에서 클라이언트에 의해 지시된 바에 따라 상이한 디렉터리들을 동기화하기 위한 연산(operation)을 수행한다.
발견/열거 과정에서, 패스트싱크 서브시스템은 한 디렉터리에서는 삭제되었지만 그 상대 디렉터리에서는 삭제되지 않은 파일 등과 같은 네임스페이스 차이, 또는 두개의 파일들의 속성 및/또는 콘텐츠 사이의 차이를 포함하는 디렉터리들 사이에 존재하는 어떤 차이들을 판단한다. 한 구현에서, 차이들을 기술하는 노드들의 트리와 같은 동기화 구조가 패스트싱크 서브시스템에 의해 클라이언트 콜러(client caller)에게 반환된다.
동기화 트리 구조는 변경된 아이템(파일 또는 디렉터리)들을 나타내는 노드들을 포함하는 디렉터리 네임스페이스의 서브셋으로서 구성된다. 메모리 사용법에 따라 저장하기 위해, 정확한 계층 구조 조직을 보존하기 위해 변경된 아이템들을 하위에 갖는 변경되지 않은 서브디렉터리들을 위한 단순 노드들이 트리에서 관리될지라도, 변경되지 않은 아이템들을 위한 노드들은 트리에 배치되지 않는다. 동기화할 각각의 아이템은 예를 들어 한 디렉터리 또는 다른 디렉터리에 있는 그 원본 상태로부터 변경되었는지, 또는 둘다 변경되었는지, 또는 파일이 그것이 존재하는 디렉터리에서 새롭게 생성되었거나 그것이 없는 디렉터리에서 삭제되었기 때문에 한 디렉터리에만 존재하는지와 같은 현재 상태를 기술하는 동기 상태 필드를 포함한다.
클라이언트 콜러는 요청에 따라 반환된 구조를 분석하고, 패스트싱크 서브시스템이 디렉터리들을 동기화 상태로 유도해나가는 지정된 동작을 취할 것을 요구한다. 동작 과정에서, 패스트싱크 서브시스템은 클라이언트에 의해 지시된 바에 따라 동기화 프리미티브(primitives)(더 복잡한 동작으로 결합될 연산)를 수행한다.
한 구현에서, 패스트싱크 서브시스템의 발견/열거 및 동작 과정들은 각각의 과정에서 다수의 스레드들을 이용하는 것을 포함해서 병렬 연산 및 I/O(input/output) 파이프라이닝을 지렛대 삼는다. 예를 들어, 열거 과정에서, 각각의 스레드는 양쪽 디렉터리들의 하위에 동일한 경로를 개설하고, 자식(파일 및 디렉터리)들을 열거한다. 스레드는 새로운 스레드에 의해 취급될 각각의 서브 디렉터리를 인큐(enqueue)시키고, 변경된 요소들을 위한 동기 아이템들을 포함하도록 트리를 수정함으로써 그 디렉터리 내의 차이를 처리한다. 패스트싱크 서브시스템은 또한 파일 열거보다는 디렉터리 열거를 이용한다. 각각의 열거는 새로운 디렉터리들을 발견하고, 그 디렉터리들은 차례로 다른 한 스레드에 의한 열거를 위해 큐된다. 따라서 한 디렉터리 및 그 서브디렉터리들이 상이한 스레드들에 의해 병렬로 처리될 수 있다. 이 것은 CPU 활용을 최대화하고 특히 네트워크를 통한 I/O 파이프라이닝의 장점을 취한다. 네트워크 상에서, 그러한 파이프라이닝은 동기화하기 위해 총 시간에 미치는 대기 시간의 영향을 감소시킨다.
동작 과정에서, 연산이 요청될 때, 패스트싱크 서브시스템은 연산, 아이템 포인터 및 문맥 정보를 내부 문맥 블록으로 패키지하고, 그 패킷을 프로세스 스레드 풀이 취급할 워크 아이템으로서 큐한다. 내부 큐(internal queuing)는 동작들이 적절한 순서로 실행되는 것을 보장함을 주목해야 한다. 스레드가 한 연산에 종사하게 사용 가능할 때, 패스트싱크 서브시스템은 이 큐로부터 아이템을 추출하고 필요에 따라 콜러에게 콜백(callback)을 만들면서 작업을 수행한다. 동작이 성공적이면, 전체 프로세스가 스레드를 나중에 다른 한 아이템을 위해 필요해질 때까지 스레드 풀에 반환한 것으로 간주될 수 있다. 성공적이지 않으면, 클라이언트가 몇 번의 재시도를 허용하거나 예를 들어 콜러에게 실패 코드(failure code)를 반환함으로써 그 아이템이 워크 리스트에 더해질 수 있다.
아래의 상세한 기술을 도면과 관련해서 읽으면 다른 이점들이 명백해질 것이다.
도 1은 본 발명이 합체될 수 있는 컴퓨팅 환경을 전체적으로 나타낸 블록 다이어그램이다.
도 2는 본 발명의 다양한 양태에 따른 신속하고 신뢰할 만한 동기화 서브시스템으로 동기화를 구현하는 일반적 예제 아키텍처를 포함하는 블록 다이어그램이다.
도 3은 본 발명의 다양한 양태에 따른 동기화를 위한 디렉터리들을 포함하는 블록 다이어그램이다.
도 4는 본 발명의 다양한 양태에 따른 열거 과정에서 동기화 서브시스템에 의해 전개되는 동기화 트리의 묘사이다.
도 5는 본 발명의 다양한 양태에 따라 동기화할 아이템을 위한 데이터를 관리하기 위해 이용되는 예제 데이터 구조의 묘사이다.
도 6 및 7은 대체로 본 발명의 다양한 양태에 따른 디렉터리들의 동기화를 향해 나아가는 예제 논리를 나타내는 흐름도이다.
도 8은 본 발명의 다양한 양태에 따른 클라이언트 콜러와 신속하고 신뢰할 만한 동기화 서브시스템 사이의 다양한 상호작용들의 묘사이다.
예시적 작동 환경
도 1은 본 발명이 구현되기에 적합한 컴퓨팅 시스템 환경(100)의 일례를 도시하고 있다. 컴퓨팅 시스템 환경(100)은 적합한 컴퓨팅 환경의 일례에 불과하며, 본 발명의 용도 또는 기능성의 범위에 관해 어떤 제한을 암시하고자 하는 것이 아니다. 컴퓨팅 환경(100)이 예시적인 운영 환경(100)에 도시된 컴포넌트들 중 임의의 하나 또는 그 컴포넌트들의 임의의 조합과 관련하여 어떤 의존성 또는 요구사항을 갖는 것으로 해석되어서는 안된다.
본 발명은 많은 기타 범용 또는 특수 목적의 컴퓨팅 시스템 환경 또는 구성에서 동작할 수 있다. 본 발명에서 사용하는 데 적합할 수 있는 잘 알려진 컴퓨팅 시스템, 환경 및/또는 구성의 예로는 퍼스널 컴퓨터, 서버 컴퓨터, 핸드-헬드 또는 랩톱 장치, 태블릿 장치, 멀티프로세서 시스템, 마이크로프로세서 기반 시스템, 셋톱 박스, 프로그램가능한 가전제품, 네트워크 PC, 미니컴퓨터, 메인프레임 컴퓨터, 전화 시스템, 상기 시스템들이나 장치들 중 임의의 것을 포함하는 분산 컴퓨팅 환경, 기타 등등이 있지만 이에 제한되는 것은 아니다.
본 발명은 일반적으로 컴퓨터에 의해 실행되는 프로그램 모듈과 같은 컴퓨터 실행가능 명령어와 관련하여 기술될 것이다. 일반적으로, 프로그램 모듈은 특정 태스크를 수행하거나 특정 추상 데이터 유형을 구현하는 루틴, 프로그램, 개체, 컴포넌트, 데이터 구조 등을 포함한다. 본 발명은 또한 통신 네트워크를 통해 연결되어 있는 원격 처리 장치들에 의해 태스크가 수행되는 분산 컴퓨팅 환경에서 실시 되도록 설계된다. 분산 컴퓨팅 환경에서, 프로그램 모듈은 메모리 저장 장치를 비롯한 로컬 및/또는 원격 컴퓨터 저장 매체에 위치할 수 있다.
도 1과 관련하여, 본 발명을 구현하는 예시적인 시스템은 컴퓨터(110) 형태의 범용 컴퓨팅 장치를 포함한다. 컴퓨터(110)의 컴포넌트들은 처리 장치(120), 시스템 메모리(130), 및 시스템 메모리를 비롯한 각종 시스템 컴포넌트들을 처리 장치(120)에 연결시키는 시스템 버스(121)를 포함하지만 이에 제한되는 것은 아니다. 시스템 버스(121)는 메모리 버스 또는 메모리 컨트롤러, 주변 장치 버스 및 각종 버스 아키텍처 중 임의의 것을 이용하는 로컬 버스를 비롯한 몇몇 유형의 버스 구조 중 어느 것이라도 될 수 있다. 예로서, 이러한 아키텍처는 ISA(industry standard architecture) 버스, MCA(micro channel architecture) 버스, EISA(Enhanced ISA) 버스, VESA(video electronics standard association) 로컬 버스, 그리고 메자닌 버스(mezzanine bus)로도 알려진 PCI(peripheral component interconnect) 버스 등을 포함하지만 이에 제한되는 것은 아니다.
컴퓨터(110)는 통상적으로 각종 컴퓨터 판독가능 매체를 포함한다. 컴퓨터(110)에 의해 액세스 가능한 매체는 그 어떤 것이든지 컴퓨터 판독가능 매체가 될 수 있고, 이러한 컴퓨터 판독가능 매체는 휘발성 및 비휘발성 매체, 이동식 및 비이동식 매체를 포함한다. 예로서, 컴퓨터 판독가능 매체는 컴퓨터 저장 매체 및 통신 매체를 포함하지만 이에 제한되는 것은 아니다. 컴퓨터 저장 매체는 컴퓨터 판독가능 명령어, 데이터 구조, 프로그램 모듈 또는 기타 데이터와 같은 정보를 저장하는 임의의 방법 또는 기술로 구현되는 휘발성 및 비휘발성, 이동식 및 비이동 식 매체를 포함한다. 컴퓨터 저장 매체는 RAM, ROM, EEPROM, 플래시 메모리 또는 기타 메모리 기술, CD-ROM, DVD(digital versatile disk) 또는 기타 광 디스크 저장 장치, 자기 카세트, 자기 테이프, 자기 디스크 저장 장치 또는 기타 자기 저장 장치, 또는 컴퓨터(110)에 의해 액세스되고 원하는 정보를 저장할 수 있는 임의의 기타 매체를 포함하지만 이에 제한되는 것은 아니다. 통신 매체는 통상적으로 반송파(carrier wave) 또는 기타 전송 메커니즘(transport mechanism)과 같은 피변조 데이터 신호(modulated data signal)에 컴퓨터 판독가능 명령어, 데이터 구조, 프로그램 모듈 또는 기타 데이터 등을 구현하고 모든 정보 전달 매체를 포함한다. "피변조 데이터 신호"라는 용어는, 신호 내에 정보를 인코딩하도록 그 신호의 특성들 중 하나 이상을 설정 또는 변경시킨 신호를 의미한다. 예로서, 통신 매체는 유선 네트워크 또는 직접 배선 접속(direct-wired connection)과 같은 유선 매체, 그리고 음향, RF, 적외선, 기타 무선 매체와 같은 무선 매체를 포함한다. 상술된 매체들의 모든 조합이 또한 컴퓨터 판독가능 매체의 영역 안에 포함되는 것으로 한다.
시스템 메모리(130)는 판독 전용 메모리(ROM)(131) 및 랜덤 액세스 메모리(RAM)(132)와 같은 휘발성 및/또는 비휘발성 메모리 형태의 컴퓨터 저장 매체를 포함한다. 시동 중과 같은 때에, 컴퓨터(110) 내의 구성요소들 사이의 정보 전송을 돕는 기본 루틴을 포함하는 기본 입/출력 시스템(BIOS)(133)은 통상적으로 ROM(131)에 저장되어 있다. RAM(132)은 통상적으로 처리 장치(120)가 즉시 액세스 할 수 있고 및/또는 현재 동작시키고 있는 데이터 및/또는 프로그램 모듈을 포함한 다. 예로서, 도 1은 운영 체제(134), 애플리케이션 프로그램(135), 기타 프로그램 모듈(136) 및 프로그램 데이터(137)를 도시하고 있지만 이에 제한되는 것은 아니다.
컴퓨터(110)는 또한 기타 이동식/비이동식, 휘발성/비휘발성 컴퓨터 저장매체를 포함한다. 단지 예로서, 도 1은 비이동식/비휘발성 자기 매체에 기록을 하거나 그로부터 판독을 하는 하드 디스크 드라이브(141), 이동식/비휘발성 자기 디스크(152)에 기록을 하거나 그로부터 판독을 하는 자기 디스크 드라이브(151), CD-ROM 또는 기타 광 매체 등의 이동식/비휘발성 광 디스크(156)에 기록을 하거나 그로부터 판독을 하는 광 디스크 드라이브(155)를 포함한다. 예시적인 운영 환경에서 사용될 수 있는 기타 이동식/비이동식, 휘발성/비휘발성 컴퓨터 기억 매체로는 자기 테이프 카세트, 플래시 메모리 카드, DVD, 디지털 비디오 테이프, 고상(solid state) RAM, 고상 ROM 등이 있지만 이에 제한되는 것은 아니다. 하드 디스크 드라이브(141)는 통상적으로 인터페이스(140)와 같은 비이동식 메모리 인터페이스를 통해 시스템 버스(121)에 접속되고, 자기 디스크 드라이브(151) 및 광 디스크 드라이브(155)는 통상적으로 인터페이스(150)와 같은 이동식 메모리 인터페이스에 의해 시스템 버스(121)에 접속된다.
위에서 설명되고 도 1에 도시된 드라이브들 및 이들과 관련된 컴퓨터 저장 매체는, 컴퓨터(110)에 대한 컴퓨터 판독가능 명령어, 데이터 구조, 프로그램 모듈 및 기타 데이터를 저장한다. 도 1에서, 예를 들어, 하드 디스크 드라이브(141)는 운영 체제(144), 애플리케이션 프로그램(145), 기타 프로그램 모듈(146), 및 프로 그램 데이터(147)를 저장하는 것으로 도시되어 있다. 여기서 주의할 점은 이들 컴포넌트가 운영 체제(134), 애플리케이션 프로그램(135), 기타 프로그램 모듈(136), 및 프로그램 데이터(137)와 동일하거나 그와 다를 수 있다는 것이다. 이에 관해, 운영 체제(144), 애플리케이션 프로그램(145), 기타 프로그램 모듈(146) 및 프로그램 데이터(147)에 다른 번호가 부여되어 있다는 것은 적어도 이들이 다른 사본(copy)이라는 것을 나타내기 위한 것이다. 사용자는 태블릿 또는 전자 디지타이저(164), 마이크(163), 키보드(162), 마이크(163) 및 마우스, 트랙볼(trackball) 또는 터치 패드와 같은 포인팅 장치(161) 등의 입력 장치를 통해 명령 및 정보를 컴퓨터(110)에 입력할 수 있다. 다른 입력 장치(도시 생략)로는 마이크, 조이스틱, 게임 패드, 위성 안테나, 스캐너 등을 포함할 수 있다. 이들 및 기타 입력 장치는 종종 시스템 버스에 결합된 사용자 입력 인터페이스(160)를 통해 처리 장치(120)에 접속되지만, 병렬 포트, 게임 포트 또는 USB(universal serial bus) 등의 다른 인터페이스 및 버스 구조에 의해 접속될 수도 있다. 모니터(191) 또는 다른 유형의 디스플레이 장치도 비디오 인터페이스(190) 등의 인터페이스를 통해 시스템 버스(121)에 접속될 수 있다. 모니터(191)는 터치 스크린 패널 등과 통합될 수도 있다. 모니터 및/또는 터치 스크린 패널은 태블릿 유형 개인용 컴퓨터 등과 같은 컴퓨팅 장치(110)가 들어 있는 하우징에 물리적으로 연결될 수도 있음을 주목해야 한다. 또한, 컴퓨팅 장치(110)와 같은 컴퓨터는 스피커(195) 및 프린터(196) 등의 기타 주변 출력 장치를 포함할 수 있고, 이들은 출력 주변장치 인터페이스(194)를 통해 접속될 수 있다.
컴퓨터(110)는 원격 컴퓨터(180)와 같은 하나 이상의 원격 컴퓨터로의 논리적 접속을 사용하여 네트워크화된 환경에서 동작할 수 있다. 원격 컴퓨터(180)는 또 하나의 퍼스널 컴퓨터, 핸드-헬드 장치, 서버, 라우터, 네트워크 PC, 피어 장치 또는 기타 통상의 네트워크 노드일 수 있고, 통상적으로 컴퓨터(110)와 관련하여 상술된 구성요소들의 대부분 또는 그 전부를 포함한다. 도 1에 도시된 논리적 접속으로는 LAN(171) 및 WAN(173)이 있지만, 기타 네트워크를 포함할 수도 있다. 이러한 네트워킹 환경은 사무실, 전사적 컴퓨터 네트워크(enterprise-wide computer network), 인트라넷, 및 인터넷에서 일반적인 것이다.
LAN 네트워킹 환경에서 사용될 때, 컴퓨터(110)는 네트워크 인터페이스 또는 어댑터(170)를 통해 LAN(171)에 접속된다. WAN 네트워킹 환경에서 사용될 때, 컴퓨터(110)는 통상적으로 인터넷과 같은 WAN(173)을 통해 통신을 설정하기 위한 모뎀(172) 또는 기타 수단을 포함한다. 내장형 또는 외장형일 수 있는 모뎀(172)은 사용자 입력 인터페이스(160) 또는 기타 적절한 메커니즘을 통해 시스템 버스(121)에 접속된다. 네트워크화된 환경에서, 컴퓨터(110) 또는 그의 일부와 관련하여 기술된 프로그램 모듈은 원격 메모리 저장 장치에 저장될 수 있다. 예로서, 도 1은 원격 애플리케이션 프로그램(185)이 원격 컴퓨터(180)에 있는 것으로 도시하고 있지만 이에 제한되는 것은 아니다. 도시된 네트워크 접속은 예시적인 것이며 이 컴퓨터들 사이에 통신 링크를 설정하는 기타 수단이 사용될 수 있다는 것을 이해할 것이다.
로컬 및 원격 파일 및 디렉터리들의 동기화
본 발명은 대체로 로컬 오프라인 캐시 및 원격 네트워크 파일 시스템과 같은 디렉터리들이 동기화되는 시스템 및 방법을 향해 나아가게 된다. 이를 위해, 본 발명은 디렉터리들 사이에 어떤 차이가 존재하는지를 발견하고, 그 차이들을 호출 클라이언트에게 열거해 준 후, 클라이언트에 의해 요청된 바에 따라, 예를 들어, 동기화 상태에 도달하기 위해 필요한 파일 시스템 관련 명령어들을 내리기 위한 동작들을 취한다. 알 수 있듯이, 본 발명을 구현하기 위한 수 많은 방식이 실현 가능하고, 대안들의 일부만 여기에 기술된다. 예를 들어, 본 발명은 아래에서 주로 다수의 동기화 관련 연산들을 병렬로 수행하는 다과정, 다중 스레딩된 모델을 참조하여 기술된다. 그럼에도 불구하고, 다른 유형의 배열들이 실현 가능하며, 본 발명은 여기에 사용된 어떤 특정한 예제들에도 제한되지 않고, 일반적으로 컴퓨팅에서의 장점 및 이점을 제공하는 다양한 방식들이 이용될 수 있다.
다과정 연산과 관련해서, 한 구현에서는, 동기화 서브시스템은, 발견 과정에서 동기화 될 두개의 디렉터리 구조들 사이의 차이들을 찾아서 열거하도록 작동하고, 동작 과정에서 동기화 프리미티브(더 복잡한 동작으로 결합될 수 있는 연산)들이 수행된다. 이 것은 분석 과정에서 작동하는 클라이언트 콜러 메커니즘이 지렛대로 삼기 위한 매우 신속하고 신뢰할 만한 메커니즘을 제공한다. 알 수 있듯이, 이 구현에서의 서브시스템은 중요한 병렬 연산 및 I/O(input/output) 파이프라이닝을 제공하며, 따라서 신속한 동기화를 촉진하고, 그래서 여기에서는 서브시스템이 (축약해서) 패스트싱크 서브시스템(FastSync Subsystem)(200)이라고 지칭된다(도 2).
일반적으로, 이 예제 구현에서는, 패스트싱크 서브시스템(200) 컴포넌트가 디렉터리들 사이의 차이들을 열거하고, 동기화 관련 요청들을 수행하지만, 디렉터리들을 어떻게 동기화할지에 관한 결정은 하지 않는다. 패스트싱크 서브시스템(200)은 그 대신에 열거 과정에서 디렉터리의 상태를 보고하고, 동작 과정에서 개별적 파일 또는 디렉터리들을 동기화 하기 위해 어떤 하나 또는 다수의 연산(동작에 대응하는)이 취해져야 하는지에 관한 명시적 명령어들을 클라이언트 콜러(202)로부터 취한다(도 2). 이 것은 동기화하기 위해 사용자 입력을 얻는 상호작용적 애플리케이션, 또는 사용자를 자극하지 않고 배경에서 실행될 필요가 있는 그룹 정책 프로세서 및 스크립트들과 같은 상이한 유형의 콜러들이 패스트싱크 서브시스템(200)에 결부되게 한다. 한 적절한 클라이언트 콜러(202)는 2005. 1. 10자 출원되고 본 발명의 양수인에게 양도되며 여기에 참고로 포함된 미국 특허 출원 11/032,870호에 기술된 캐시 서비스의 클라이언트측 컨트롤러를 포함한다. 이 서비스 모델에서는, 서비스가 애플리케이션 프로그램 또는 동기화 매니저 프로그램(204)이 복잡한 동기화 분석을 그다지 수행하지 않는 동기화 기능을 갖게 한다는 것을 주목해야 한다.
일반적으로, 이 구현에서는, 패스트싱크 서브시스템(200)이 동기를 벗어나는 조건들을 분석하기 위한 논리를 포함하지 않는다. 한 이유는 이 것이 상이한 콜러들을 상이한 방식으로 동기화하게 하기 때문이다. 패스트싱크 서브시스템(200) 동작 연산들은 그 대신에 아래의 예제 연산(두개의 디렉터리 A와 B를 동기화 함)들에서 설명된 것과 같은 프리미티브들을 제공한다.
Create new file/directory in A Create new file/directory in B Copy information (data stream/attributes) from file in A to one in B Copy information (data stream/attributes) from file in B to one in A Delete a file/directory in A Delete a file/directory in B Copy a full sub-tree from A to B Copy a full sub-tree from B to A Delete a full sub-tree in A Delete a full sub-tree in B Make a copy of a file from A to a backup location Make a copy of a file from B to a backup location
연산들은 콜러가 상세사항들을 걱정하지 않아도 되기에 충분하게 높은 수준이지만, 콜러에게 상충을 상이한 방식으로 분석할 선택권을 준다. 예를 들어, 콜러는 종종(항상은 아니지만) 파일을 삭제하거나 덮어쓰기 전에 그 백업을 만들고 싶어할 수 있으며, 그러한 행위가 이 시스템에서 가능하다. 다른 한 예제로서, 콜러는 폴더 A가 변경되었는지 여부에 무관하게 특정한 상황에서 폴더 A를 닮은 폴더 B를 항상 만들고 싶어할 수도 있다. 그러한 경우에, 콜러는 단지 B에 있는 변경들을 삭제하거나 덮어쓸 수 있는 연산들을 선택하고 A로부터 B로 새로운 콘텐츠를 복사할 수 있다.
패스트싱크 서브시스템(200)에 분석 논리를 갖지 않는다는 것은 어떤 면에서 그것을 단순화하지만, 다른 면에서는 더 복잡한 상황들을 만든다는 것을 주목해야 한다. 복잡한 상황 중 하나는 패스트싱크 서브시스템(200)이 예를 들어 데이터 구조들을 업데이트 함으로써 파일 또는 디렉터리의 상태에 관한 최신의 및 정확한 정보를 제공할 필요가 항상 있다는 것이다.
도 2를 다시 보면, 거기에 나타낸 예제 배열이 애플리케이션/동기화 매니저(204), 클라이언트 콜러/동기 분석 메커니즘(202) 및 패스트싱크 서브시스 템(200)을 포함한다. 한 구현에서, 이러한 컴포넌트들은 정해진 인터페이스 세트들에 의해 통신한다.
패스트싱크 서브시스템(200)은 볼륨 A(214) 및 볼륨 B(216) 상의 파일 시스템(212) 및/또는 적절한 원격 인터페이스(도시 안됨)에 의해 디렉터리 정보에 액세스한다. 도 2가 로컬 볼륨(214) 및 통상적으로 원격 볼륨 상의 네트워크 서버인 서버 볼륨(216)을 도시할지라도, 본 발명은 어떤 특정한 볼륨 배열들로도 제한되지 않는다. 사실, 본 발명은 두개의 원격 볼륨, 두개의 로컬 볼륨 및 동일한 볼륨 상의 두개의 디렉터리-동기화하기에 적합하게 될 수 있을지라도-에 있는 파일들을 동기화할 수 있다. 본 발명은 또한 마운트 포인트 볼륨(mount point volume)들도 지원할 수 있으며, 여기에서 마운트 포인드 볼륨은 본래 다른 한 볼륨의 디렉터리에 마운트되는 볼륨이다. 그래서, 본 발명이 로컬 볼륨(또는 그것의 디렉터리 기반 서브셋 일부)을 원격 볼륨과 동기화하는 통상적 예제들로 기술되고 있을지라도, 이 것은 비제한적인 예제들이다.
도 3에 나타냈듯이, 열거 과정에서, 패스트싱크 서브시스템(200)은 로컬 볼륨의 루트 디렉터리 및 서버 상의 대응하는 사용자 네임스페이스에서 시작할 수 있는 두개의 디렉터리(314, 316)(그러나, 서로 대응하는 서브디렉터리들일 수도 있음)를 평가한다. 도 3에서, 디렉터리들은 원으로 도시되어 있고, 파일들은 사각형으로 도시되어 있음을 주목해야 한다. 또한, 열거 과정은 아래에 기술된 바와 같이 신속한 연산을 위해 다수의 스레드들을 이용할 수도 있음을 주목해야 한다.
일반적으로, 열거 과정에 이어서, 클라이언트 콜러(202)는 패스트싱크 서브 시스템(200)으로부터 동기화될 아이템들에 관한 정보를 포함하는 동기화 상태 데이터 구조를 획득한다. 도 3의 예제 구현에서는, 그 구조가 동기화 트리(320)로서 배열된다. 아래에 기술된 바와 같이, 클라이언트 콜러(202)는 그 정보를 평가하고, 필요할 때는 시스템 정책 등을 참조하며, 패스트싱크 서브시스템(200)이 그 아이템들에 관해 하나 이상의 동기화 관련 동작(프리미티브)들을 수행하게 한다. 이 것은 도 3에 클라이언트 콜러(202)에 의해 동작 취급 컴포넌트(326)에 제공되는 동작 요청(324)으로 표현되어 있다.
동기화 트리 데이터 구조(320)를 제공하기 위해, 패스트싱크 서브시스템(200)은 각각의 디렉터리의 상태를 능률적으로 검사하고, 디렉터리들 사이의 차이를 콜러에게 보고한다. 동기화 트리(320)는 변경된 파일 또는 디렉터리들을 포함하는 디렉터리 네임스페이스의 서브셋으로서 구성된다. 메모리 사용법에 따라 저장하기 위해, 변경되지 않은 파일들은 트리에 나타나지 않고, 변경된 콘텐츠를 포함하지 않거나 또는 그 자체가 변경되지 않은 디렉터리들은 트리에 포함되지 않는다. 그러나, 변경되지 않았지만 그 안에 변경된 파일들을 갖고 있는 디렉터리들은 정확한 계층 구조 조직을 보존하기 위해 트리에 단순 노드들로서 관리됨을 주목해야 한다.
도 4는 도 3의 동기화될 예제 디렉터리들로부터 구성된 차이 노드들을 포함하는 동기화 트리(320)를 나타낸다. 도 4에서, 계층 구조 조직을 보존하기 위해 제공되는 트리의 단순 노드들은 하첨자 문자 S로 표시되어 있다. 또한, 도 3과 유사하게, 도 4에서는 디렉터리를 나타내는 노드들이 원으로 도시되고 파일을 나타내 는 노드들은 사각형으로 도시되어 있다.
알 수 있듯이, 동기화 트리(320)에 있는 노드들은 네임스페이스 차이 또는 파일들 사이의 차이(속성 및/또는 콘텐츠)에 대응한다. 예를 들어, 도 4에서, 노드 E 및 I(그리고 E의 자식 노드)는 양쪽 디렉터리 모두에 있지 않으며, 따라서 이러한 네임스페이스 차이들은 자식 노드들과 함께 동기화 트리(320)에 있는 노드들이다. 노드 J 및 그 자식 파일 K는 각각에서 동일한 것이고, 따라서 능률을 위해 동기화 트리(320)에 포함되지 않는다. 또한, 파일 H에는 도 3의 디렉터리 구조(316)에 빗금친 박스로 표현된 바와 같이 파일 차이가 있으며, 따라서 이 파일은 그 부모로서의 단순 노드 C와 함께 동기화 트리(320)에 포함된다.
도 5에 나타낸 바와 같이, 트리(320)의 각각의 노드(단순 노드들이 아님)들은 파일 또는 디렉터리에 있는 하나의 동기 아이템을 위한 정보의 데이터 구조(550)를 포함한다. 동기 아이템들은 동기화 상태에서 최후에 있던 때로부터 각각의 아이템이 변경된 하나 이상의 방식뿐만 아니라 동기 아이템의 원본 동기화 상태를 나타내는 동기 기술을 포함한다. 예를 들어, 수정된 파일을 위해, 동기 아이템은 사본이 존재한다면 양쪽 디렉터리 모두로부터의 사본(적어도 한 세트의 값들이 원본과 달라야 하는 또는 동기를 벗어나 있을 수 있음을 주목해야 함)들을 위한 그 필드들의 현재 값 뿐만 아니라 동기화 상태로부터의 원본 최종 쓰기 시각(Last Write Time), 파일 크기, 속성 등을 포함할 수 있다.
또한, 각각의 동기 아이템은 파일의 “상태”를 기술하는 동기 상태 필드를 포함한다. 예를 들어, 동기 상태는 한 디렉터리 또는 다른 디렉터리나 양쪽 모두 에서 파일이 그 원본 상태로부터 변경되었는지, 또는 한 디렉터리에서 파일이 새롭게 생성되어 존재하거나 다른 디렉터리에서 파일이 삭제되어 없기 때문에 파일이 한 디렉터리에만 존재하는지를 표시한다. 동기 상태는 콜러가 아이템을 동기화하기에 적절하게 수행할 하나 이상의 연산을 선택하기 위해 그 상태 머신을 적용하기 위한 근거로서 그 동기 상태를 이용할 수 있기에 충분한 그래뉼(granule)을 가진다.
콜러(202)는 동기화 트리(320) 및 그 안의 아이템들을 앞서 언급된 미국 특허 출원 11/032,870호에 기술된 바와 같은 분석을 수행하기 위해 이용한다. 이 분석에 기반하여, 콜러(202)는 패스트싱크 서브시스템이 디렉터리들을 동기화 상태로 유도해 나가기 위한 하나 이상의 동작들을 수행할 것을 요청한다.
더 자세하게는, 콜러(202)로부터의 연산 요청에 응답하여, 패스트싱크 서브시스템(200)이 요청된 연산 및 다른 연산을 수행하고 진행/상태를 콜러(202)에게 보고하기 위해 클라이언트측 캐시 드라이버 및 서버 볼륨 드라이버에 대해 필요한 콜(call)(예를 들어, 리다이렉터(redirector))을 만들 수 있다. 본 발명에 필수적인 것은 아닐지라도, 한 구현에서, 연산이 요청될 때, 패스트싱크 서브시스템(200)은 연산, 아이템 포인터 및 문맥 정보를 내부 문맥 블록으로 패키지하고 그 패킷을 프로세스 스레드 풀이 취급할 워크 아이템으로서 큐한다. 내부 큐(internal queuing)는 동작들이 적절한 순서에 따라 실행되는 것을 보장함을 주목해야 한다. 스레드가 한 연산에 종사하게 사용 가능할 때, 패스트싱크 서브시스템(200)은 이 큐로부터 아이템을 추출하고, 필요에 따라 콜러(202)에 대한 콜백을 만들면서 작업 을 수행한다. 또한, 패스트싱크 서브시스템 연산들은 비동기적임을 주목해야 한다. 그러나, 많은 스레드 풀 스레드들 중 하나로부터 언제든 실행될 수 있기 때문에, 콜백 문맥은 아무런 특정한 스레드 친화성도 갖지 않으며, 따라서 클라이언트 진행 및 상충(conflict) 취급 구현에 대한 콜들이 예를 들어 콜러(202)에 의해 순차화된다. 콜러(202)는 진행/상태를 호출 애플리케이션 프로그램(204)에 반영해줄 수도 있다(도 2).
도 6은 패스트싱크 서브시스템(200)의 콜러(202)를 위한 통상적인 제어/흐름을 나타낸다. 도 6에서, 단계 600에 의해 나타낸 바와 같이, 콜러(202)는 패스트싱크 서브시스템(200)이 상기 열거 과정을 수행할 것을 요청한다. 단계 602에 평가된 어떤 이유(예를 들어, 서버가 응답하지 않음)로 성공적이지 않으면, 프로세스는 단계 616에 의해 적절한 오류를 보고하면서 종료된다.
아무런 오류도 발생하지 않은 통상적 상황에서는, 단계 602가 하나 이상의 동작 아이템들을 워크 리스트(이 워크 리스트는 콜러가 순차화하는 앞서 기술한 내부 패스트싱크 서브시스템 워크 아이템 큐와 동일하지 않음을 주목해야 함)에 부가하기 위해 단계 604로 분기한다. 일반적으로, 워크 리스트는 콜러에 의해 처리되어야 하는 동기 아이템들의 집합을 나타낸다.
단계 606은 워크 리스트로부터 아이템을 선택하는 것을 나타내며, 단계 608은 선택된 아이템을 처리하는 것을 나타낸다. 한 구현에서, 파일들의 초기 인큐는 순환 큐(revolving queue)를 포함해서 각각의 아이템을 위한 초기 동작을 선택하고 아이템들을 이 리스트에 부가하기 위해 깊이 우선 횡단(depth-first traversal)에 의해 트리를 순행(walk)하는 것을 포함한다. 단계 606에서, 아래에 기술된 바와 같이 아무런 워크 아이템도 남지 않을 때까지 프로세스가 큐에서 사실상 반복되면서, 오류(아래에 기술된 단계 710에 의해)들로부터 뿐만 아니라 트리의 초기 순행으로부터 워크 아이템들이 도달할 수 있음을 주목해야 한다.
그래서, 일반적으로, 아이템을 처리하는 것은 아이템을 위해 요청되는 동작을 판단하거나, 아이템이 복구할 수 없는 오류를 갖는지를 결정하거나, 아이템이 이미 동기화되었다고 결론짓는다. 아이템이 동기화될 필요가 있는 것이면, 단계 610 및 612는 그 아이템을 패스트싱크 컨트롤러(200)에 의한 동작을 위해 인큐하는 것을 요청함을 나타낸다.
614는 워크 리스트가 비워질 때까지 선택, 처리 및 가능한 인큐(enqueuing) 단계들을 반복한다. 비워질 때, 콜러 연산들이 완료되지만, 패스트싱크 서브시스템(200)이 아래에 기술된 바와 같이 요청된 동작을 적절히 수행할 수 없는 경우에 아이템이 워크 리스트에 더해지는 것이 가능하다. 패스트싱크 서브시스템(200)이 그 처리를 모두 성공적으로 완료하고 콜러가 처리할 동기 아이템이 없으면 동기화가 사실상 완료된다.
단계 612에서 동작이 인큐(예를 들어, 패스트싱크 서브시스템(200)에 대한 API 콜에 의해)될 때는 언제나, 패스트싱크 서브시스템(200)은 그것이 그렇게 할 자원(예를 들어, 사용 가능한 스레드)을 갖자 마자 그것을 데큐(dequeue)할 수 있다. 일반적으로, 도 7은 단계 702에서 큐에 있는 아이템을 대기하는 것을 포함해서 이러한 연산들을 표현한다. 한 구현에서, 데큐된 아이템들은 다른 한 스레드에 의한 소비를 위해 다른 한 큐에 인큐되고, 그럼으로써 아래에 기술된 병렬 연산을 촉진한다.
이 병렬 구현에서, 패스트싱크 서브시스템(200)은 별개의 스레드들에 의해 동기 아이템들에 대한 연산을 처리하며, 따라서 단계 704 아래의 단계들은 별개의 스레드들로서 수행되는 연산의 실행의 완료(성공적이거나 성공적인 아님) 후의 제어 흐름을 나타낸다. 일반적으로, 단계 706에 보이듯이 동작들이 시도되고 콜백이 만들어진다. 동작이 성공적이 아니면(단계 708), 전체 프로세스는 나중에 다른 한 아이템을 위해 요청될 때까지 스레드를 스레드 풀에 반환한 것으로 간주될 수 있다. 성공적이지 않으면, 클라이언트는 단계 706로 복귀하는 단계 710에 의해 표현된 바와 같이 몇 번의 재시도를 허용할 수 있다. 재시도가 허용되지 않으면, 아이템은 예를 들어, 실패 코드를 콜러에게 반환함으로써 도 7로부터 단계 604로 복귀하여 도 6에 표현된 바와 같이 워크 리스트에 부가된다.
도 8은 패스트싱크 서브시스템(200) 애플리케이션 프로그래밍 인터페이스(API)의 콜러의 관점을 주로 표현해서 병렬 처리를 좀더 상세하게 설명한다. 하이 레벨에서, 패스트싱크 서브시스템(200)을 이용하는 동기화는 두개의 과정, 즉 위에 기술된 열거 과정 및 동작 과정을 갖는다. 열거의 목적은 동기화될 필요가 있는 디렉터리들의 파트 상에서 신속하고 능률적으로 찾고 보고하며, 차이를 콜러(202)에게 어떤 논리적 방식으로 보고한다. 동작 과정에서, 콜러(202)는 아이템을 동기화 상태로 반환하려는 동기화를 벗어난 각각의 파일 또는 디렉터리를 위해 하나 이상의 연산들을 선택했다.
콜러(202)는 연산들을 인큐하도록 설정된 패스트싱크 서브시스템 API를 이용할 수 있으며, 패스트싱크 서브시스템(200)은 그것들을 큐에 단순히 부가하고 즉시 반환한다. 패스트싱크 서브시스템(200)은 연산들을 다수의 스레드들을 이용하여 병렬로 수행하며, 스레드의 각각은 큐로부터 하나의 연산을 취하여 실행한다. 각각의 연산이 완료되면, 패스트싱크 서브시스템(200)은 연산이 인큐되었을 때 제공된 콜백을 실행함으로써 콜러에게 알린다. 콜러는 연산의 결과를 평가하고 연산이 실패했으면 재시도하거나 그 파일 또는 디렉터리에 대한 새로운 연산을 인큐할 수 있다.
콜러가 상당한 시간 동안 그 호출 스레드의 제어를 포기하는 시점은 단지 열거 과정에서, 패스트싱크 서브시스템(200)이 콜러가 열거의 행위를 수정하거나 또는 열거를 전적으로 멈추게 하는 빈번한 콜백을 제공할지라도, 열거가 완료(성공적 또는 성공적이 아님)되기까지 그것이 제어를 반환하지 않는 동안임을 주목해야 한다. 동작 과정에서, 수행될 연산들의 큐에 대해 그것들을 부가하기 위해 패스트싱크 서브시스템(200)이 하는 작업이 적으므로 동기 아이템들에 관한 연산들을 인큐하기 위한 콜러들의 요청들은 비교적 신속하게 반환한다.
동작 과정의 끝에서, 패스트싱크 서브시스템(200) 스레드가 그 작업 수행을 완료했을 때, 그것은 연산의 결과에 관한 정보 및 그 동작에서 작동된 파일 또는 디렉터리를 표현하는 동기 아이템을 반환하기 위해 연산이 인큐될 때 제공된 콜백을 실행한다. 콜백은 연산을 패스트싱크 서브시스템(200)에 인큐하기 위해 이용된 것이 아닌 별개의 스레드에서 발생한다. 콜백 내에서, 콜러는 연산을 재시도할 선 택권을 가지며, 그 경우에 콜러는 재시도된 연산의 결과를 보고하는 다른 한 콜백을 수신할 것이다. 그렇지 않고, 콜러가 완료 콜백 동안에 정확하게 동일한 연산을 재시도하기를 원하지 않으면, 그것은 나중에 동일한 동기 아이템을 위해 새로운 연산(전과 동일한 연산이든 새로운 연산이든)을 인큐할 수 있다.
이러한 방식으로, 병렬 연산 및 I/O 파이프라이닝(처리 및 I/O가 유휴 시간을 감소시키기 위한 다수의 스레드)이 최대화되고, 전달되는 총 데이터가 최소회된다. 이를 위해, 한 구현에서, 도 8에 전체적으로 표현된 바와 같이 다수의 스레드들이 열거 및 동작하는 동안 이용되며, 패스트싱크 서브시스템(200)은 다수의 스레드 상에 양쪽 디렉터리 트리들의 콘텐츠를 열거하고 모든 스레드들이 처리를 완료할 때 반환한다.
열거하는 동안, 각각의 스레드는 양쪽 디렉터리들의 하위에 동일한 경로를 개설하고, 모든 자식(파일 및 디렉터리)들을 열거한다. 스레드는 새로운 스레드에 의해 취급될 각각의 서브디렉터리를 인큐하고, 변경된 요소들을 위한 동기 아이템들을 포함하기 위해 트리를 수정함으로써 그 디렉터리 내의 차이들 처리한다.
패스트싱크 서브시스템(200)의 열거 방법의 다른 한 양태는 동기화될 디렉터리에 있는 모든 파일을 열지 않고 하는 것이다. 열기는 비용이 드는 것이며, 특히 네트워크를 통하는 열기는 더 그렇다. 모든 파일을 열어서 파일의 특성(변경 시각, 크기, 속성 등)을 결정하기 위해서는, 파일이 열어지고 파일 정보가 쿼리되며 파일이 닫혀질 것이다. 로컬 시스템에서, 이러한 세개의 연산들의 각각은 원격 파일 시스템 상에서 운영 체계에 들어갈 것을 요구하고, 이 것은 네트워크를 통한 적 어도 3회의 왕복을 의미하고 아마 오버헤드가 더 커질 것이다.
이러한 비용을 회피하기 위해, 패스트싱크 서브시스템(200)은 그 대신에 디렉터리 열거를 이용한다. 디렉터리 열거를 위해서는, 디렉터리를 한번만 열 것이 요구되며, 그 후 그 취급에 관한 각각의 쿼리가 그들을 실제로 열지 않고 다수의 파일들에 관한 정보를 페치한다. 그리고, 디렉터리를 닫을 것이 요구된다. 주요한 차이는 디렉터리 열거를 지렛대 삼음으로써, 모든 파일 및 디렉터리마다 한번의 대신에 디렉터리 당 한번 열고 한번 닫으면 된다는 것이다. 또한, 파일별 방법(per-file method)을 이용하는 각각의 파일 및 디렉터리마다 하나의 쿼리 정보인 것과 반대로, 단 한번의 쿼리만 가지면 많은 파일들을 위한 정보를 생성한다(파일과 디렉터리는 운영 체계 및 왕복 비용의 관점에서 대략 등가임). 서버와의 왕복 교환을 최소화하는 것 외에, 이 것은 또한 오버헤드 감소에 따라 전달되는 데이터의 총량을 감소시킨다.
각각의 열거가 새로운 디렉터리들을 발견함에 따라, 그러한 디렉터리들은 다른 하나의 스레드에 의한 열거를 위해 차례로 큐된다. 그러므로, 디렉터리 및 그 모든 서브디렉터리들이 상이한 스레드들에 의해 병렬로 처리될 수 있다. 이 것은 CPU 활용을 최대화하고, 특히 네트워크를 통한 I/O 파이프라이닝의 장점을 갖는다. 네트워크 상에서, 그러한 파이프라이닝은 동기화하기 위한 총 시간에 대한 대기 시간의 영향을 감소시킨다.
동작 과정에서, 다수의 스레드들은 각각의 동작이 단일의 스레드에 관해 실행하고 완료하는 것, 즉 동작 당 한 스레드로 다수의 동작들이 동시에 실행되어 콜 러에 의해 인큐된 연산들을 취급한다.
쉽게 알 수 있듯이, 신뢰성을 위해, 시스템은 어떤 연산을 여러 번 재시도할 능력이 있는 파일 시스템의 파트들의 인터럽션(interruption) 및 사용 불가성(unavailability)(예를 들어, 공유 위반으로 인해)을 세련되게 취급해야 한다. 열거에 관해서는, 개별적 파일 또는 디렉터리가 열거되는 것에 실패할지라도 열거 과정은 실패하지 않을 것이다. 그 대신에, 패스트싱크 서브시스템(200)은 동기 트리의 특정 노드가 열거될 수 없음을 보고할 것이다. 콜러는 나중에 적시에 서브 트리로부터 시작하는 새로운 열거를 개시할 수 있다.
동작 과정은 더 세련된 실패 취급 논리를 포함할 수 있다. 예를 들어, 패스트싱크 서브시스템(200)이 특정 동기 아이템을 위한 실패된 연산을 보고할 때, 그것은 새로운 동기상태 및 파일의 관련 정보(속성, 크기 및 변경 시각 등)를 반영하기 위해 아이템을 업데이트한다. 콜러는 패스트싱크 서브시스템(200)에게 이전의 동작을 즉시 재시도하라거나(그리고 재시도된 연산이 완료될 때 다른 한 콜백을 수신함), 또는 기다리라는 신호를 줄 선택권을 가지며 어느 시점에서든 동일한 연산 또는 새로운 연산을 위한 동기 아이템을 인큐한다.
이러한 유연성을 가짐으로써, 콜러가 연산의 결과에 응답할 풍부한 한 세트의 가능성들을 구현할 수 있다. 예를 들어, 콜러는 어느 정도의 시간을 대기하고나서 그 파일을 갖는 애플리케이션이 닫혀진 그 핸들을 열기를 바라면서 그것을 인큐함으로써 공유 위반에 응답할 수 있다. 또한, 콜러는 모든 실패 후에 임의의 복잡한 상태 머신(예를 들어, 많은 경우에, 파일을 동기화하기 위한 방법을 결정하기 위해 초기에 이용되었던 동일한 상태 머신)을 통해 아이템을 실행할 수 있다. 그러한 방식에서, 콜러는 파일을 자꾸 동기화할 방법을 결정하는 단일의 상태 없는 시스템을 통해 동기 아이템들을 실행할 수 있다. 그 시스템은 해야 할 것을 사용자에게 묻고, 머신 또는 도메인 정책을 참조하며, 파일들의 백업 사본을 만드는 것 등을 포함할 수 있다.
또한, 본 발명은 파일 시스템의 사용 편의성에 관한 영향을 감소시키며, 파일 또는 디렉터리들이 장시간 동안 잠겨지지 않아도 됨을 인정한다. 한번에 한 파일을 동기화하는 것과 반대로, 능률과 속도를 위해 한번에 전체 디렉토리 트리를 동기화함에 따른 한 문제는 예를 들어, 다른 애플리케이션들에 의한 쓰기 연산을 금지하는 핸들을 열어서 어떤 파일을 독점적으로 홀드하는 것이 실용적이지 않다는 것이다. 그러나, 한번에 한 파일을 동기화할 때, 파일을 독점적으로 홀드하고, 콜러에게 그것으로 무엇을 해야 하는지 문의하며, 그것을 릴리즈하지 않고 동작을 수행하는 것은 만족스럽다. 패스트싱크 서브시스템(200)은 최종 연산의 완료 도중 내내 열거로부터 모든 단일의 수정된 파일 또는 디렉터리를 홀드하지 않음으로써 시스템 자원을 드레인(drain)하고 애플리케이션 사용자들을 번거롭게 하는 것을 회피하고자 한다.
이를 위해, 패스트싱크 서브시스템(200)은 쿼리 및 파일/서브디렉터리 생성과 같은 디렉터리 연산들을 허용하지만, 파일에 대한 쓰기를 막지 않는 디렉터리 열거에 의해 디렉터리 계층 구조들을 열거한다. 동작 과정에서, 패스트싱크 서브시스템(200)은 파일이 그것이 열거 동안에 있었던 것과 동일한 상태에 있는지를 확 인하며, 통상적으로 파일은 열거 동안과 동일한 상태에 있지만 그것이 변경될 가능성이 있다. 파일이 열거와 동작 사이에서 변경되었으면, 선택되었던 것과 상이한 연산이 적합할 수 있다. 그러한 상황에서, 패스트싱크 서브시스템(200)은 파일 또는 디렉터리를 건드리지 않고 연산을 완료하며, 콜러에게 변경이 발생했음을 설명하는 실패 코드를 보고한다. 콜러는 연산을 재시도하거나 연산을 취소하라고 즉시 응답할 기회를 갖는다. 나중에, 콜러는 그 아이템을 위해 새로운 동작을 제출할 수 있다. 콜러는 또한 패스트싱크 서브시스템(200)에게 거슬리지 않는 방식으로 변경할 수 있는 파일의 특정한 양태들을 무시하라고 명령할 수도 있다.
따라서, 패스트싱크 서브시스템(200)이 파일을 여는(따라서, 그것을 다른 파일 시스템 액세스들로부터 어느 정도 잠금) 시간은 단지 연산이 처리되면서 열거하는 동안 및 동작하는 동안의 짧은 시간이다. 그것이 인터럽션을 세련되게 수락하기 때문에, 패스트싱크 서브시스템(200) 및 그 콜러들은 또한 열거 과정과 동작 과정 사이의 불일치를 취급할 수 있다. 트랜잭셔널 파일 시스템(미국 특허 제6,856,993에 기술된 트랜잭셔널 NTFS와 같은)의 경우에, 패스트싱크 서브시스템(200)이 동기화 변경들을 롤백(roll-back)할 능력을 제공하기 위해 트랜잭션 문맥을 동기 아이템과 관련시킬 수도 있음을 주목해야 한다.
본 발명에 필수적인 것은 아닐지라도, 콜러는 패스트싱크 서브시스템(200)을 작동하는 동안에 수행할 필요가 있는 어떤 파일별 또는 디렉터리별 처리(per-file or per-directory processing)를 위한 콜백을 제공해야 한다. 패스트싱크 서브시스템(200)이 열거 및 동작을 구동할지라도, 콜러가 어떤 처리를 수행하고 패스트싱 크 서브시스템(200)에 대해 피드백을 제공하는 것이 필요할 수 있는 인스턴스(instance)들이 있다. 그러한 인스턴스에서, 콜백은 패스트싱크 서브시스템(200)이 사용자를 자극할 수 있도록 이용된다. 한 예제에서는 열거하는 동안에, 콜러가 전체 사용 가능 디렉터리들로 된 한 서브셋만을 동기화하도록 선택하고 다른 것들 은 무시할 수 있다. 한 예제는 특정 디렉터리들이 느린 연결로 실제로 설치된 원격 파일 시스템일 때, 또는 읽기 전용 데이터만을 포함하는 것올 알려진 디렉터리들이 있을 때이다. 패스트싱크 서브시스템(200)은 디렉터리를 열거하기 전에, 그것이 콜러에게 무엇을 해야 하는지를 사실상 묻는 콜백을 실행하도록 콜러에게 콜백을 제공할 수 있다. 그리고, 콜러는 그것이 디렉터리를 열거해야 하는지, 스킵해야 하는지 또는 열거를 전적으로 중단해야 하는지를 표시함으로써 패스트싱크 서브시스템(200)에 응답할 수 있다.
다른 한 예제는 동작 과정에서 콜러가 모든 파일에 관해 알고 특정한 파일 또는 디렉터리들을 복사하는 것을 회피하는 것이 중요할 때 새롭게 생성된 서브 디렉터리를 생성한다. 예를 들어, 저작권이 있는 콘텐츠와 같은 특정한 유형의 파일들을 특정한 파일 서버와 격리시켜 두는 것이 중요할 수 있거나, 또는 원격 파일 시스템에 설치된 서브디렉터리를 복사하지 못하는 것이 중요할 수 있다. 그러한 이유로, 디렉터리 트리를 복사하는 동안에 콜백이 제공되고, 그럼으로써 콜러가 특정한 파일 또는 디렉터리들을 스킵하도록 또는 복사를 전적으로 취소하도록 선택할 수 있다.
앞서의 상세한 기술로부터 알 수 있듯이, 열거 및 동작 방법론들이 사실상 자체적으로 충족되어 있고 패스트싱크 서브시스템에 의해 구동되는 동기화를 위한 모델이 제공되며, 콜러가 동기화 처리의 전반에 걸쳐 요구되는 제어를 하게 한다. 동기화 처리는 신속하고 신뢰할 만한 하며, 다양한 콜러들에게 열거된 정보 및 요구된 동작들을 확보하기 위한 능력을 허용함에 있어서 유연하다. 따라서, 본 발명은 동시적 컴퓨팅에 요구되는 많은 장점 및 이점을 제공한다.
본 발명이 다양한 변경 및 대안적 구성을 쉽게 허용하지만, 그 특정한 예시적 실시예만 도면에 도시되고 위에서 상세하게 기술되었다. 그러나, 본 발명을 개시된 특정한 형태로 제한하려는 의도는 전혀 없으며, 본 발명의 정신 및 범위에 드는 모든 변화예, 대안적 구성 및 등가물을 포함할 것을 의도함을 알아야 한다.

Claims (20)

  1. 컴퓨팅 환경에서 컴퓨터로 구현되는 방법에 있어서,
    제1 과정에서 디렉터리들 사이의 차이들을 열거하기 위해 다수의 디렉터리들의 콘텐츠를 평가하는 단계, 및
    제2 과정에서 디렉터리들을 동기화하기 위해 요청된 동작들에 응답하여 연산을 수행하는 단계
    를 포함하는 방법.
  2. 제1항에 있어서,
    제1 및 제2 과정이 적어도 한 클라이언트 요청에 응답하여 수행되고, 열거된 디렉터리들 사이의 차이들을 포함하는 데이터 구조를 분석을 위해 클라이언트 콜러에게 반환하는 단계를 더 포함하는 방법.
  3. 제2항에 있어서,
    데이터 구조를 노드들의 트리로서 배열하는 단계를 더 포함하고, 노드들의 적어도 일부는 동기화되지 않은 파일 또는 디렉터리들에 관한 정보를 포함하는 방법.
  4. 제3항에 있어서,
    상기 데이터 구조를 노드들의 트리로서 배열하는 단계는, 동기화된 노드들을 배제하는 단계를 포함하는 방법.
  5. 제1항에 있어서,
    상기 제2 과정에서 디렉터리들을 동기화하기 위해 요청된 동작들에 응답하여 연산을 수행하는 단계는 복잡한 동작으로 결합되는 한 세트의 프리미티브 연산들을 처리하는 방법.
  6. 제1항에 있어서,
    상기 다수의 디렉터리들의 콘텐츠를 평가하는 단계는 두개의 디렉터리 트리들 사이의 차이들을 판단하기 위해 다중 스레딩된 디렉터리 열거들을 이용하는 단계를 포함하는 방법.
  7. 제1항에 있어서,
    상기 요청된 동작들에 응답하여 연산을 수행하는 단계는 별개의 스레드들에 의해 병렬로 취급되는 동기화 관련 연산들을 큐하는 단계를 포함하는 방법.
  8. 제7항에 있어서,
    완료된 연산의 결과를 콜백으로 보고하는 단계를 더 포함하는 방법.
  9. 실행시에 제1항의 방법을 수행하는 컴퓨터 실행 가능 명령어들을 갖는 적어도 하나의 컴퓨터 판독 가능 매체.
  10. 다수의 저장장치 유니트들을 갖는 컴퓨팅 환경에서의 시스템에 있어서,
    디렉터리 트리들 사이의 차이들을 판단하기 위해 한 저장장치 유니트 상의 디렉터리 트리를 다른 한 저장장치 유니트 상의 상대 디렉터리 트리에 대해 평가하는 수단을 포함하는 동기화 서브시스템,
    요청에 응답하여 상기 차이들을 보고하는 수단, 및
    상기 디렉터리 트리들을 동기화하기 위해 요청된 연산들을 수행하는 수단
    을 포함하는 시스템.
  11. 제10항에 있어서,
    상기 디렉터리 트리를 평가하는 수단은 다중 스레딩된 디렉터리 열거들을 수행하는 수단을 포함하는 시스템.
  12. 제10항에 있어서,
    상기 요청된 연산을 수행하는 수단은 스레드 풀의 병렬 스레드들에 의해 처리하기 위한 연산들을 큐하는 수단을 포함하는 시스템.
  13. 실행시 단계들을 수행하는 컴퓨터 실행 가능 명령어들을 갖는 적어도 한 컴 퓨터 판독 가능 매체에 있어서, 상기 단계들은,
    클라이언트 콜러로부터 적어도 한 동기화 관련 요청을 수신하는 단계,
    제1 과정에서 디렉터리들 사이의 차이들을 열거하기 위해 다수의 디렉터리들의 콘텐츠를 평가하는 단계,
    상기 차이들을 클라이언트 콜러에게 반환하는 단계, 및
    제2 과정에서 디렉터리들을 동기화하기 위해 클라이언트 콜러에 의해 지시된 연산들을 수행하는 단계
    를 포함하는 컴퓨터 판독 가능 매체.
  14. 제13항에 있어서,
    상기 클라이언트 콜러에 대해 차이들을 반환하는 단계는 상기 차이들에 대응하는 정보를 갖는 아이템 노드들의 트리를 포함하는 데이터 구조를 배열하는 단계를 포함하는 컴퓨터 판독 가능 매체.
  15. 제13항에 있어서,
    동기화 변경들을 적어도 한 파일에 롤백하기 위한 트랜잭션 기반 메커니즘을 이용하는 단계를 수행하는 컴퓨터 실행 가능 명령어들을 더 갖는 컴퓨터 판독 가능 매체.
  16. 제13항에 있어서,
    상기 다수의 디렉터리들의 콘텐츠를 평가하는 단계는,다중 스레딩된 디렉터리 열거들을 이용하는 단계를 포함하는 컴퓨터 판독 가능 매체.
  17. 제13항에 있어서,
    상기 요청된 동작들에 응답하여 연산들을 수행하는 단계는 별개의 스레드들에 의해 병렬로 취급하기 위해 동기화 관련 연산들을 큐하는 단계를 포함하는 컴퓨터 판독 가능 매체.
  18. 제17항에 있어서,
    완료된 연산의 결과를 콜백으로 보고하는 단계를 수행하는 컴퓨터 실행 가능 명령어들을 더 갖는 컴퓨터 판독 가능 매체.
  19. 제17항에 있어서,
    실패한 연산을 시도하는 단계를 수행하는 컴퓨터 실행 가능 명령어들을 더 갖는 컴퓨터 판독 가능 매체.
  20. 제17항에 있어서,
    동기화할 아이템이 상기 차이들을 클라이언트 콜러에게 반환하고 그 아이템에 관해 요청된 연산을 수행한 이래 상태를 변경하지 않았음을 보장하는 단계를 포함하는 컴퓨터 실행 가능 명령어들을 더 갖는 컴퓨터 판독 가능 매체.
KR1020077023746A 2005-05-09 2006-04-03 파일 시스템 디렉터리들의 신속하고 신뢰할 만한 동기화 KR20080006558A (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US11/124,739 US7634514B2 (en) 2005-05-09 2005-05-09 Synchronizing file system directories
US11/124,739 2005-05-09

Publications (1)

Publication Number Publication Date
KR20080006558A true KR20080006558A (ko) 2008-01-16

Family

ID=37395230

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020077023746A KR20080006558A (ko) 2005-05-09 2006-04-03 파일 시스템 디렉터리들의 신속하고 신뢰할 만한 동기화

Country Status (6)

Country Link
US (1) US7634514B2 (ko)
EP (1) EP1880321A4 (ko)
JP (1) JP2008541263A (ko)
KR (1) KR20080006558A (ko)
CN (1) CN101523358A (ko)
WO (1) WO2006121526A2 (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101319465B1 (ko) * 2011-09-27 2013-10-17 주식회사 미니게이트 엔스크린용 파일 제공 시스템

Families Citing this family (35)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
FR2816090B1 (fr) * 2000-10-26 2003-01-10 Schlumberger Systems & Service Dispositif de partage de fichiers dans un dispositif a circuit integre
US7346664B2 (en) 2003-04-24 2008-03-18 Neopath Networks, Inc. Transparent file migration using namespace replication
US8539081B2 (en) 2003-09-15 2013-09-17 Neopath Networks, Inc. Enabling proxy services using referral mechanisms
US8195627B2 (en) * 2004-04-23 2012-06-05 Neopath Networks, Inc. Storage policy monitoring for a storage network
US8190741B2 (en) 2004-04-23 2012-05-29 Neopath Networks, Inc. Customizing a namespace in a decentralized storage environment
EP1900189B1 (en) * 2005-06-29 2018-04-18 Cisco Technology, Inc. Parallel filesystem traversal for transparent mirroring of directories and files
US8131689B2 (en) * 2005-09-30 2012-03-06 Panagiotis Tsirigotis Accumulating access frequency and file attributes for supporting policy based storage management
US7464237B2 (en) * 2005-10-27 2008-12-09 International Business Machines Corporation System and method for implementing a fast file synchronization in a data processing system
JP4912026B2 (ja) * 2006-04-27 2012-04-04 キヤノン株式会社 情報処理装置、情報処理方法
US7917963B2 (en) * 2006-08-09 2011-03-29 Antenna Vaultus, Inc. System for providing mobile data security
US8775678B1 (en) * 2007-12-19 2014-07-08 Symantec Corporation Automated wireless synchronization and transformation
US8065381B2 (en) * 2008-01-25 2011-11-22 Microsoft Corporation Synchronizing for directory changes performed while offline
US8583600B2 (en) * 2008-04-03 2013-11-12 International Business Machines Corporation Deploying directory instances
US8805925B2 (en) 2009-11-20 2014-08-12 Nbrella, Inc. Method and apparatus for maintaining high data integrity and for providing a secure audit for fraud prevention and detection
US9058334B2 (en) * 2010-02-11 2015-06-16 Emc Corporation Parallel file system processing
US8290900B2 (en) * 2010-04-24 2012-10-16 Research In Motion Limited Apparatus, and associated method, for synchronizing directory services
US9880860B2 (en) * 2010-05-05 2018-01-30 Microsoft Technology Licensing, Llc Automatic return to synchronization context for asynchronous computations
US8825598B2 (en) * 2010-06-16 2014-09-02 Apple Inc. Media file synchronization
CN102567341B (zh) * 2010-12-09 2016-02-17 腾讯科技(深圳)有限公司 一种实现软件内外目录同步的方法和系统
US20140040191A1 (en) * 2012-08-01 2014-02-06 A Charles BEDDOE Inventorying and copying file system folders and files
US9298391B2 (en) * 2012-12-19 2016-03-29 Dropbox, Inc. Application programming interfaces for data synchronization with online storage systems
US9552363B2 (en) * 2013-04-30 2017-01-24 Microsoft Technology Licensing, Llc File management with placeholders
US9405767B2 (en) 2013-05-01 2016-08-02 Microsoft Technology Licensing, Llc Streaming content and placeholders
GB2515192B (en) * 2013-06-13 2016-12-14 Box Inc Systems and methods for synchronization event building and/or collapsing by a synchronization component of a cloud-based platform
US10140309B2 (en) * 2014-06-10 2018-11-27 Alfresco Software, Inc. File tracking on client machines synchronized with a content management system repository
US10706012B2 (en) 2014-07-31 2020-07-07 Hewlett Packard Enterprise Development Lp File creation
CN104994177B (zh) * 2015-08-06 2019-01-25 上海爱数信息技术股份有限公司 网盘系统的同步方法、终端设备和网盘系统
US10083068B2 (en) * 2016-03-29 2018-09-25 Microsoft Technology Licensing, Llc Fast transfer of workload between multiple processors
US20180059990A1 (en) 2016-08-25 2018-03-01 Microsoft Technology Licensing, Llc Storage Virtualization For Files
JP6767662B2 (ja) * 2017-02-14 2020-10-14 株式会社バッファロー 記憶装置、ファイル複製システム、ファイル複製方法、および、コンピュータプログラム
US20180335902A1 (en) * 2017-05-16 2018-11-22 Apple Inc. Techniques for dynamically displaying relevant files for selection
US10866963B2 (en) 2017-12-28 2020-12-15 Dropbox, Inc. File system authentication
US20210126986A1 (en) * 2018-01-08 2021-04-29 Here Global B.V. Distributed processing system and method for the provision of location based services
CN112162964B (zh) * 2020-10-15 2024-04-05 苏州交驰人工智能研究院有限公司 一种自适应数据同步方法、装置、计算机设备及存储介质
US11573931B2 (en) * 2021-01-21 2023-02-07 Microsoft Technology Licensing, Llc Smart near-real-time folder scan based on a breadth first search

Family Cites Families (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6147773A (en) * 1995-09-05 2000-11-14 Hewlett-Packard Company System and method for a communication system
US5778389A (en) * 1996-05-23 1998-07-07 Electronic Data Systems Corporation Method and system for synchronizing computer file directories
US6070254A (en) * 1997-10-17 2000-05-30 International Business Machines Corporation Advanced method for checking the integrity of node-based file systems
JPH11232159A (ja) * 1998-02-13 1999-08-27 The Japan Reserch Institute Ltd ファイル管理方法およびファイル管理のためのプログラムを記憶した媒体
JP3254434B2 (ja) * 1999-04-13 2002-02-04 三菱電機株式会社 データ通信装置
JP3464172B2 (ja) * 1999-06-30 2003-11-05 株式会社次世代情報放送システム研究所 送信装置および送信方法、受信装置および受信方法、ならびに、送受信システムおよび送受信方法
JP3963417B2 (ja) * 1999-11-19 2007-08-22 株式会社東芝 データ同期処理のための通信方法および電子機器
DE60213419T2 (de) * 2001-03-16 2007-10-31 Novell, Inc., Provo Client-server-modell zur synchronisation von dateien
WO2002077862A1 (en) * 2001-03-27 2002-10-03 British Telecommunications Public Limited Company File synchronisation
US7389335B2 (en) * 2001-11-26 2008-06-17 Microsoft Corporation Workflow management based on an integrated view of resource identity
US6745303B2 (en) * 2002-01-03 2004-06-01 Hitachi, Ltd. Data synchronization of multiple remote storage
US6721871B2 (en) * 2002-04-02 2004-04-13 Nokia Corporation Method and apparatus for synchronizing data stores with respect to changes in folders
JP2003330784A (ja) * 2002-05-13 2003-11-21 Tdk Corp データベース同期方法、データベース同期システム、コンピュータプログラム及び記録媒体
US7047377B2 (en) * 2002-08-20 2006-05-16 Gruintine Pueche, Inc. System and method for conducting an auction-based ranking of search results on a computer network
WO2005116868A1 (en) * 2004-05-26 2005-12-08 Nokia Corporation Method, system, computer programs and devices for management of media items
US20060041596A1 (en) * 2004-08-19 2006-02-23 Vlad Stirbu Caching directory server data for controlling the disposition of multimedia data on a network

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101319465B1 (ko) * 2011-09-27 2013-10-17 주식회사 미니게이트 엔스크린용 파일 제공 시스템

Also Published As

Publication number Publication date
JP2008541263A (ja) 2008-11-20
EP1880321A2 (en) 2008-01-23
WO2006121526A3 (en) 2008-01-10
WO2006121526A2 (en) 2006-11-16
US7634514B2 (en) 2009-12-15
CN101523358A (zh) 2009-09-02
EP1880321A4 (en) 2010-09-22
US20060253501A1 (en) 2006-11-09

Similar Documents

Publication Publication Date Title
US7634514B2 (en) Synchronizing file system directories
CN109564529B (zh) 基于符号链接的占位符
US8832697B2 (en) Parallel filesystem traversal for transparent mirroring of directories and files
Macedo et al. Redis cookbook: Practical techniques for fast data manipulation
JP2021509191A (ja) クライアント同期における違反の解決
US8156507B2 (en) User mode file system serialization and reliability
JP2012520504A (ja) デバイスおよびウェブ・サービスにわたってブラウザー・キャッシュを同期させるためのプログラミング・モデル
EP3062260A1 (en) A method for controlling access to electronic documents using locks
JPH11506552A (ja) pipes及びfifosを用いてマルチプロセッサ・コンピュータ・システムのファイルをアクセスする方法
JP7416845B2 (ja) Gui応答時間を改善するために予測ベースのguiを生成するシステム及び方法
Nicolae BlobSeer: Towards efficient data storage management for large-scale, distributed systems
Natrajan et al. Grid resource management in Legion
Zarei et al. Past, present and future of Hadoop: A survey
Goniwada et al. Cloud native architecture and design patterns
US7478115B2 (en) System and method for database and filesystem coordinated transactions
US20140040191A1 (en) Inventorying and copying file system folders and files
US8560691B2 (en) Relocating item in distributed storage system
US9432485B2 (en) Method and system of an accelerated application-oriented middlewarelayer
US11314700B1 (en) Non-native transactional support for distributed computing environments
Shreedharan Using flume: flexible, scalable, and reliable data streaming
Lev-Ari et al. Quick: a queuing system in cloudkit
Cavage et al. Bringing arbitrary compute to authoritative data
Duranti Microservice Oriented Pipeline Architectures
Donnelly Data locality techniques in an active cluster file system designed for scientific workflows
JP2023547439A (ja) 非同期動作のための意図トラッキング

Legal Events

Date Code Title Description
A201 Request for examination
E601 Decision to refuse application