KR102238942B1 - 가상화 인스턴스 내의 파일의 계층화된 액세스를 위한 방법 및 장치 - Google Patents

가상화 인스턴스 내의 파일의 계층화된 액세스를 위한 방법 및 장치 Download PDF

Info

Publication number
KR102238942B1
KR102238942B1 KR1020197012194A KR20197012194A KR102238942B1 KR 102238942 B1 KR102238942 B1 KR 102238942B1 KR 1020197012194 A KR1020197012194 A KR 1020197012194A KR 20197012194 A KR20197012194 A KR 20197012194A KR 102238942 B1 KR102238942 B1 KR 102238942B1
Authority
KR
South Korea
Prior art keywords
operating system
directory
federated
file
library operating
Prior art date
Application number
KR1020197012194A
Other languages
English (en)
Other versions
KR20190058596A (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 KR20190058596A publication Critical patent/KR20190058596A/ko
Application granted granted Critical
Publication of KR102238942B1 publication Critical patent/KR102238942B1/ko

Links

Images

Classifications

    • 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/18File system types
    • G06F16/188Virtual file systems
    • 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/16File or folder operations, e.g. details of user interfaces specifically adapted to file systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • 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/176Support for shared access to files; File sharing support
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • G06F2009/45583Memory management, e.g. access or allocation

Abstract

본 발명은 가상화 인스턴스의 파일 액세스 방법을 개시하는데, 이는: 호스트 운영 시스템 내의 일부 이미지 서브파일들에 대해 연합을 수행하고 연합된 디렉토리에 연합 디렉토리에 마운팅하는 단계; 라이브러리 운영 시스템 인스턴스 내의 애플리케이션이 상기 연합 디렉토리 내의 파일에 액세스할 필요가 있을 때, 중앙 처리 유닛으로 하여금 엑시트 이벤트를 생성하게 하는 단계 - 따라서 하이퍼바이저가 상기 엑시트 이벤트를 캡처 및 처리하고, 처리 동안, 상기 인스턴스로부터의 액세스 요청을 상기 호스트 운영 시스템의 시스템 콜에 기초한 액세스 요청으로 변환하고, 액세스를 수행하게 됨 - 를 포함한다.

Description

가상화 인스턴스 내의 파일의 계층화된 액세스를 위한 방법 및 장치
삭제
본 발명은 소프트웨어 기술 분야에 관한 것으로, 특히, 가상화 인스턴스의 층 기반 파일 액세스 방법 및 장치에 관한 것이다.
라이브러리 운영 시스템(LibOS)은 경량의 운영 시스템이다. LibOS 기반 애플리케이션의 포터블 운영 시스템 인터페이스(Portable Operating System Interface, POSIX)는 호스트 운영 시스템(예컨대 Linux 또는 다른 종래의 운영 시스템)에 의해서가 아니라 LibOS 내의 런타임 라이브러리에 의해 제공되는데, 즉, LibOS는 POSIX 기능을 구현 및 관리한다. LibOS의 일부 흔한 특정 구현 기술들은 Osv(http://Osv.io), Mirage(https://mirage.io/), Graphene(http://graphene.cs.stonybrook.edu/), 등을 포함한다.
도 1을 참조하면, 도 1은 종래 기술의 라이브러리 운영 시스템에 기초한 예시적인 애플리케이션의 도이다. 라이브러리 운영 시스템 및 애플리케이션이 라이브러리 운영 시스템 인스턴스를 구성한다. 인스턴스는 호스트 운영 시스템 위에서 실행된다. 하이퍼바이저, 라이브러리 운영 시스템 엔진, 및 다른 모듈들이 호스트 운영 시스템 상에서 실행될 수 있다. 라이브러리 운영 시스템 엔진은 라이브러리 운영 시스템 인스턴스를 실행하도록 구성된다.
종래 기술에서, 각각의 라이브러리 운영 시스템 인스턴스는 그 자신의 파일을 관리하고 다른 인스턴스들과 파일을 공유하지 않는다. 복수의 인스턴스가 있을 때, 인스턴스들 사이에 일부 동일한 파일들이 존재하기 때문에 저장 공간이 낭비된다.
본 발명의 실시예들은 복수의 인스턴스가 실행될 때 더 많은 저장 공간이 점유되는 종래 기술의 문제점을 해결하기 위해 가상화 인스턴스의 층 기반 파일 액세스 방법을 제공한다.
제1 양태에 따르면, 본 발명의 실시예는 호스트 운영 시스템(Host OS) 내의 파일에 액세스하기 위해 사용되는 가상화 인스턴스의 층 기반 파일 액세스 방법을 제공하는데, 여기서 하이퍼바이저(Hypervisor) 및 라이브러리 운영 시스템 엔진(LibOS Engine)이 호스트 운영 시스템 상에서 실행되고, 호스트 운영 시스템, 하이퍼바이저, 및 라이브러리 운영 시스템 엔진은 호스트(Host) 모드에서 실행되고; 상기 방법은:
상기 라이브러리 운영 시스템 엔진에 의해, 라이브러리 운영 시스템(LibOS)에 기초하여 라이브러리 운영 시스템 인스턴스의 이미지 파일을 획득하는 단계 - 상기 이미지 파일은 복수의 이미지 서브파일을 포함하고, 상기 복수의 이미지 서브파일은 하나 이상의 이미지 층으로서 지정됨 -; 및 상기 이미지 파일로부터 상기 복수의 이미지 서브파일을 획득하고, 상기 복수의 이미지 서브파일에 의해 지정된 상기 하나 이상의 이미지 층에 따라, 상기 복수의 이미지 서브파일을 상기 호스트 운영 시스템 내에 있고 상기 하나 이상의 이미지 층에 일 대 일 대응하는 복수의 이미지 서브파일 디렉토리에 저장하는 단계;
연합 파일 시스템을 이용하여, 모든 이미지 서브파일 디렉토리들에 대해 제1 연합을 수행하고 연합된 디렉토리를 제1 연합 디렉토리에 마운팅하는 단계 - 상기 제1 연합 디렉토리는 적어도 하나의 연합 디렉토리 파일을 포함하고, 상기 제1 연합에 기초하여 상기 적어도 하나의 연합 디렉토리 파일에 의해 형성된 하나 이상의 연합 층이 상기 하나 이상의 이미지 층에 일 대 일 대응하고; 명칭이 제안하는 바와 같이, 상기 연합 디렉토리 파일은 제1 연합 디렉토리 내의 파일이고, 상기 연합 층은 상기 연합 파일 시스템에 기초한 "층"임 -;
상기 라이브러리 운영 시스템 엔진에 의해 상기 복수의 이미지 서브파일 중 하나 이상에 기초하여 게스트(Guest) 모드에서, 상기 라이브러리 운영 시스템 인스턴스를 실행하는 단계; 및
상기 라이브러리 운영 시스템 인스턴스 내의 애플리케이션이 상기 연합 디렉토리 파일에 액세스할 필요가 있을 때, 상기 라이브러리 운영 시스템(LibOS)이 상기 애플리케이션으로부터 제1 액세스 요청을 수신한 후에, 중앙 처리 유닛으로 하여금 상기 게스트 모드로부터 상기 호스트 모드로 스위칭하는 엑시트 이벤트를 생성하게 하는 단계 - 따라서 상기 하이퍼바이저가 상기 엑시트 이벤트를 캡처하고, 상기 제1 액세스 요청을, 호스트 운영 시스템 콜에 기초하여 상기 호스트 모드에서, 상기 연합 디렉토리 파일에 대응하는 이미지 서브파일에 액세스하는 데 사용될 수 있는 제2 액세스 요청으로 변환하는 처리를 수행하고, 상기 제2 액세스 요청에 기초하여, 상기 연합 디렉토리 파일에 대응하는 이미지 서브파일에 액세스하게 됨 - 를 포함한다.
상기 호스트 운영 시스템, 상기 하이퍼바이저, 상기 라이브러리 운영 시스템 엔진, 상기 라이브러리 운영 시스템, 및 상기 라이브러리 운영 시스템 인스턴스와 같은 개념들의 의미는 종래 기술의 정의들에 기초한다. 특정 의미들에 대해서는, 다음의 실시예들에서의 특정 설명들을 참조한다. 호스트 운영 시스템은 하이퍼바이저 및 라이브러리 운영 시스템 엔진을 커널 모드 또는 사용자 모드에서 실행할 수 있거나, 또는 그것들 중 하나를 커널에서 그리고 다른 하나를 사용자 모드에서 실행할 수 있다.
이 실시예에서, 라이브러리 운영 시스템 엔진에 의해, 라이브러리 운영 시스템 인스턴스를 실행하는 것은, 라이브러리 운영 시스템 엔진에 의해, 인스턴스를 시작하고 인스턴스를 실행되게 하는 것이다. 이 단계와 이전 단계(연합 및 마운팅)를 수행하는 순서는 제한되지 않는다. 이 단계는 이전 단계 이전 또는 이후에 수행될 수 있거나, 또는 이전 단계와 동시에 수행될 수 있다(2개의 단계가 다음 단계(애플리케이션이 연합 디렉토리 파일에 액세스함) 이전에 완료된다면).
이 실시예에서, 호스트 모드 및 게스트 모드는 2개의 프로세서 실행 모드, 즉, 보안 이유로 프로세서를 위해 설계된 2개의 실행 모드이다. 게스트 모드에서 실행되는 프로그램은 통상 호스트 모드에서 실행되는 프로그램보다 더 낮은 권한을 가지며, 게스트 모드에서 실행되는 프로그램은 호스트 모드에서 실행되는 리소스에 직접 액세스할 수 없는 반면, 호스트 모드에서 실행되는 프로그램은 게스트 모드에서 실행되는 리소스에 직접 액세스할 수 있다. 상이한 프로세서들에 기초하여, 호스트 모드 및 게스트 모드는 상이한 특정 명칭들을 갖는다. 예를 들어, x86 아키텍처 기반 프로세서에 대해, 호스트 모드는 루트 모드(root mode)라고도 지칭되고, 게스트 모드는 비루트 모드(non-root mode)라고도 지칭된다. 다른 예를 들어, ARM64 아키텍처 기반 프로세서에 대해, 호스트 모드는 호스트 운영 시스템이 실행되는 프로세서 실행 모드이고, 2개의 실행 모드: EL2(커널에 대한 것) 및 EL0(사용자에 대한 것)을 포함하고, 게스트 모드는 게스트 운영 시스템이 실행되는 프로세서 모드이고, 2개의 실행 모드: EL1(커널에 대한 것) 및 EL0(사용자에 대한 것)을 포함한다. 또한, ARM64 아키텍처 기반 프로세서에서, 이 해결책에서의 라이브러리 운영 시스템 인스턴스는 EL1 실행 모드에서만 실행될 수 있다는 점에 유의해야 한다. 본 기술분야의 통상의 기술자는 전술한 정의들 및 설명들에 따라 상이한 프로세서들에 대한 호스트 모드 및 게스트 모드의 의미들을 이해할 수 있다.
프로세서 실행 모드가 게스트 모드로부터 호스트 모드로 스위칭할 때, 이 프로세스는 "엑시트(exit)"라고 지칭된다. 프로세서 실행 모드가 호스트 모드에서 게스트 모드로 스위칭할 때, 이 프로세스는 "엔터(enter)"라고 지칭된다. 이 실시예에서의 엑시트 이벤트는 vm 엑시트 프로세스를 나타내는 이벤트이다.
이 실시예에서, "제1 연합"에서의 "제1"(및 아래 "제2 연합"에서의 "제2)은 다른 단계에서 수행되는 "연합" 액션과 구별하기 위해서만 사용되고, 특별한 의미를 지시하기 위해 사용되는 것은 아니다. 연합을 수행하기 위해 연합 파일 시스템을 사용하는 것은 구체적으로 종래 기술에 속하므로, 세부 사항들은 본 명세서에서 설명되지 않는다.
이 실시예에서, "제1 액세스 요청"은 애플리케이션에 의해 라이브러리 운영 시스템에 전송되는 액세스 요청이고, 이 요청은 연합 디렉토리 파일에 액세스하는 데 사용된다. 일부 경우들에서, 연합 디렉토리 파일이 애플리케이션에 의해 인식되고(즉, 애플리케이션의 인터페이스를 이용함으로써 애플리케이션에게 연합 디렉토리 파일이 보이고) 애플리케이션에 의해 인식된 연합 디렉토리 파일의 명칭이 실제 연합 디렉토리 파일의 명칭과 상이하지만(예를 들어, 연합 디렉토리 파일의 파일 명칭은 a.txt이고, 연합 디렉토리 파일에 대해 처리가 수행된 후에, 애플리케이션에 의해 인식된 파일의 명칭은 b.txt임), 2개의 연합 디렉토리 파일이 하드웨어에서 동일한 데이터에 액세스할 때(즉, 애플리케이션이 b.txt에 액세스하고, b.txt에 대해 처리가 수행된 후에 a.txt가 액세스되고, a.txt에 대응하는 하드웨어에서의 데이터가 최종적으로 액세스될 때) 연합 디렉토리 파일에 대해 일부 처리(예를 들어, 다양한 파일 시스템들에 의한 변환, 일부 매핑, 또는 일부 마운팅)가 수행될 수 있다는 점에 유의해야 한다. 따라서, 본 발명의 실시예들에서, 제1 액세스 요청에서, 연합 디렉토리 파일에 대한 액세스를 지시하기 위해 사용되는 파라미터(예컨대 파일 명칭)는 연합 디렉토리 파일의 파일 명칭과 엄격하게 동일한 것으로 제한되지 않는다(연합 디렉토리 파일이 제1 액세스 요청을 이용하여 최종적으로 액세스될 수 있다면).
이 실시예에서, 연합 파일 시스템이 호스트 운영 시스템 내의 이미지 서브파일에 대해 연합을 수행하기 위해 도입되고, 엑시트 이벤트가 생성되어, 게스트 모드에서의 애플리케이션이 호스트 모드에서 실행되는 호스트 운영 시스템 내의 이미지 서브파일에 액세스할 수 있게 한다. 이러한 방식으로, 모든 이미지 서브파일 디렉토리들이 연합 파일 시스템에 의해 연합되고, 게스트 모드에서 실행되는 애플리케이션이 호스트 모드에서 실행되는 호스트 OS 내의 이미지 서브파일에 액세스할 수 있어, 각각의 인스턴스가 호스트 OS 내의 이미지 서브파일에 액세스할 수 있고, 호스트 OS 내의 이미지 서브파일이 각각의 인스턴스에 의해 공유되고, 각각의 인스턴스는 중복(또는 소유된) 파일을 저장할 필요가 없다. 이는 각각의 라이브러리 운영 시스템 인스턴스의 저장 공간을 절약한다.
또한, 연합 파일 시스템이 사용된 후에, 각각의 라이브러리 운영 시스템 인스턴스가 디렉토리(제1 연합 디렉토리) 내의 모든 파일들을 볼 수 있다(연합 파일 시스템의 특성에 따라). 이러한 방식으로, 애플리케이션 개발자는 실제 파일 어드레스는 제쳐두고 디렉토리 어드레스를 이용할 수 있다. 이는 개발자에게 애플리케이션 개발을 크게 용이하게 한다.
또한, 이 실시예에서, 엑시트 이벤트를 캡처함으로써 제1 액세스 요청이 제2 액세스 요청으로 변환된다. 이러한 방식은 많은 절차들(예를 들어, ext3과 같은 일부 보통 파일 시스템들을 호출하는 절차)을 요구하지 않고, 더 높은 실행 효율 및 더 빠른 속도를 달성한다.
제1 양태에 기초하여, 제1 양태의 제1 구현에서, 상기 제1 연합 디렉토리는 상기 라이브러리 운영 시스템 내에 있고, 제1 양태에서의 연합 파일 시스템을 이용하여, 모든 이미지 서브파일 디렉토리들에 대해 제1 연합을 수행하고 연합된 디렉토리를 제1 연합 디렉토리에 마운팅하는 단계는 구체적으로 다음의 단계들을 포함할 수 있다:
상기 라이브러리 운영 시스템 엔진에 의해, 상기 복수의 이미지 서브파일 디렉토리를 상기 라이브러리 운영 시스템 내의 하나 이상의 마운트 디렉토리에 마운팅하는 단계; 및
상기 라이브러리 운영 시스템에 의해, 상기 라이브러리 운영 시스템에 포함된 연합 파일 시스템을 이용하여, 상기 라이브러리 운영 시스템 내의 상기 하나 이상의 마운트 디렉토리 및 적어도 하나의 보통 파일 시스템 기반 판독가능/기입가능 디렉토리에 대해 상기 제1 연합을 수행하고 연합된 디렉토리를 상기 제1 연합 디렉토리에 마운팅하는 단계 - 상기 적어도 하나의 판독가능/기입가능 디렉토리의 속성이 상기 연합 파일 시스템에서 판독가능/기입가능함 -.
이 구현에서, 상기 이미지 서브파일 디렉토리들은 또한 상기 LibOS 내의 판독가능/기입가능 디렉토리와 연합된다. 상기 이미지 서브파일 디렉토리들은 판독가능/기입가능 디렉토리와 연합되어, 상기 LibOS 인스턴스가 그의 개인 데이터에 대한 공간을 가질 수 있다. 또한, 상기 판독가능/기입가능 디렉토리는 상기 호스트 OS 대신에 상기 LibOS 내에 배치되고, 따라서, 다른 LibOS 인스턴스에 의해 액세스될 수 없다. 이것은 더 안전하다. 이 구현 및 다른 다양한 구현들에서, 판독 전용 방식으로 마운팅된 디렉토리(예를 들어, 이미지 서브파일 디렉토리)와 비교하여, 하나 이상의 판독가능/기입가능 디렉토리의 마운팅이 요구된다면, 이러한 디렉토리들은 통상 판독 전용 방식으로 마운팅된 디렉토리 위에 위치한다는 점에 유의해야 한다. 또한, 상기 판독가능/기입가능 디렉토리는 상기 LibOS 내에 있으며, 따라서, 상기 LibOS 내의 애플리케이션은 상기 호스트 OS로부터의 상기 판독가능/기입가능 디렉토리에 액세스할 필요가 없다. 이것은 액세스 효율을 개선한다.
또한, 인스턴스 마이그레이션 동작(즉, 인스턴스를 중지하고 다른 호스트 상에서 상기 인스턴스를 실행하는 것)이 수행될 필요가 있다면, 판독가능/기입가능 디렉토리에 대해 스냅샷이 생성될 수 있고, 스냅샷은 다른 인스턴스에 복사된다. 이것은 구현하기 용이하고, 마이그레이션 동작을 단순화한다.
더욱이, 상기 연합 동작은 한 번만 수행되기 때문에(상기 LibOS에서만 한 번 연합이 수행됨), 상기 호스트 OS 내의 파일이 LibOS 인스턴스로부터 액세스될 때 과도한 변환 동작이 요구되지 않는다. 이것은 높은 효율을 달성한다.
제1 양태에 기초하여, 제1 양태의 제2 구현에서, 상기 제1 연합 디렉토리는 상기 라이브러리 운영 시스템 내에 있고, 제1 양태에서의 연합 파일 시스템을 이용하여, 모든 이미지 서브파일 디렉토리들에 대해 제1 연합을 수행하고 연합된 디렉토리를 제1 연합 디렉토리에 마운팅하는 단계는 구체적으로 다음을 포함한다:
상기 라이브러리 운영 시스템 엔진에 의해, 상기 복수의 이미지 서브파일 디렉토리를 상기 라이브러리 운영 시스템 내의 하나 이상의 마운트 디렉토리에 마운팅하는 단계; 및
상기 라이브러리 운영 시스템에 의해, 상기 라이브러리 운영 시스템에 포함된 연합 파일 시스템을 이용하여, 상기 하나 이상의 마운트 디렉토리에 대해 상기 제1 연합을 수행하고 연합된 디렉토리를 상기 제1 연합 디렉토리에 마운팅하는 단계.
이 구현에서, 상기 제1 연합은 상기 라이브러리 운영 시스템에서 수행되어, 제1 구현에서 설명된 마이그레이션이 용이한 효과가 또한 달성된다.
제1 양태에 기초하여, 제1 양태의 제3 구현에서, 상기 제1 연합 디렉토리는 상기 호스트 운영 시스템에 있고, 제1 양태에서의 연합 파일 시스템을 이용하여, 모든 이미지 서브파일 디렉토리들에 대해 제1 연합을 수행하고 연합된 디렉토리를 제1 연합 디렉토리에 마운팅하는 단계는 구체적으로 다음을 포함한다:
상기 라이브러리 운영 시스템 엔진에 의해, 상기 호스트 운영 시스템 내의 연합 파일 시스템을 호출함으로써, 모든 이미지 서브파일 디렉토리들에 대해 상기 제1 연합을 수행하고 상기 연합된 디렉토리를 상기 제1 연합 디렉토리에 마운팅하는 단계.
상기 제1 연합 디렉토리가 상기 호스트 OS에 배치되어, 상기 제1 연합 디렉토리는 다른 라이브러리 운영 시스템 인스턴스에게 보여, 다른 인스턴스에 대한 사용을 용이하게 한다(예를 들어, 다른 인스턴스는, 제1 연합 디렉토리에 기초하여, 일부 디렉토리들에 대해 연합을 수행할 수 있다).
제1 양태의 제3 구현에 기초하여, 제1 양태의 제4 구현에서, 상기 방법은 다음을 추가로 포함한다:
상기 라이브러리 운영 시스템 엔진에 의해, 상기 제1 연합 디렉토리를 상기 라이브러리 운영 시스템 인스턴스 내의 마운트 디렉토리에 마운팅하는 단계; 및
상기 라이브러리 운영 시스템에 의해, 상기 라이브러리 운영 시스템에 포함된 연합 파일 시스템을 호출함으로써, 상기 라이브러리 운영 시스템 내의 상기 마운트 디렉토리 및 적어도 하나의 판독가능/기입가능 디렉토리에 대해 제2 연합을 수행하고 연합된 디렉토리를 제2 연합 디렉토리에 마운팅하는 단계 - 상기 적어도 하나의 판독가능/기입가능 디렉토리의 속성이 상기 라이브러리 운영 시스템 내의 상기 연합 파일 시스템에서 판독가능/기입가능함 -.
이 구현에서, 상기 호스트 OS에서 수행되는 연합에 더하여, 판독가능/기입가능 디렉토리와의 연합이 상기 LibOS에서 수행된다.
2개의 연합 동작이 수행되고, 상기 제2 연합 동작으로부터 획득된 결과에 의해 상기 제1 연합 동작으로부터 획득된 결과가 상기 LibOS에서 차폐된다. 따라서, 상기 제1 연합 디렉토리 내의 연합 디렉토리 파일에 액세스하기 위해, 상기 제2 연합 디렉토리가 먼저 액세스되고, 그 후, 커스터마이즈된 파일 시스템이 호출되어 엑시트 이벤트를 생성하고, 최종적으로, 상기 연합 디렉토리 파일이 액세스된다.
이 실시예에서는, 판독가능/기입가능 디렉토리와의 연합이 상기 LibOS에서 수행되기 때문에, 더 높은 보안 및 마이그레이션의 용이함을 포함하는 제1 양태의 제1 구현에서 언급된 것들과 유사한 이점들도 달성된다.
제1 양태의 제1 구현 또는 제1 양태의 제4 구현에 기초하여, 제1 양태의 제5 구현에서, 상기 방법은 다음을 추가로 포함한다:
상기 라이브러리 운영 시스템이 상기 판독가능/기입가능 디렉토리 내의 파일에 액세스하기 위해 사용되는 제3 액세스 요청을 수신할 때, 상기 라이브러리 운영 시스템 내의 보통 파일 시스템에 기초하여, 상기 판독가능/기입가능 디렉토리 내의 상기 파일에 액세스하는 단계.
제1 양태 또는 제1 양태의 다양한 구현들에 기초하여, 제1 양태의 제6 구현에서, 중앙 처리 유닛으로 하여금 상기 게스트 모드로부터 상기 호스트 모드로 스위칭하는 엑시트 이벤트를 생성하게 하는 단계는 구체적으로 다음을 포함할 수 있다:
상기 연합 디렉토리 파일에 액세스하기 위해 상기 라이브러리 운영 시스템 내의 커스터마이즈된 파일 시스템을 호출함으로써, 상기 중앙 처리 유닛으로 하여금 상기 엑시트 이벤트를 생성하게 하는 단계 - 상기 커스터마이즈된 파일 시스템은, 상기 제1 액세스 요청에 따라, 상기 중앙 처리 유닛으로 하여금 상기 엑시트 이벤트를 생성하게 할 수 있는 파일 시스템이다. 구체적으로, 상기 커스터마이즈된 파일 시스템은 파일 시스템 기능, 즉, 종래 기술에서 다양한 보통 파일 시스템들과 같은 파일을 관리할 수 있는 것이다. 또한, 상기 커스터마이즈된 파일 시스템은 상기 제1 액세스 요청에 따라 엑시트 이벤트를 생성할 수 있다. 구체적으로, 상기 커스터마이즈된 파일 시스템은, 상기 제1 액세스 요청에 대응하는 명령어에 따라, 상기 중앙 처리 유닛이 상기 엑시트 이벤트를 생성하는 것을 가능하게 하는 vm 엑시트 명령어를 호출할 수 있다. 예를 들어, x86 아키텍처 기반 프로세서에서는, vm 엑시트를 트리거하기 위해 vmcall 명령어가 호출될 수 있다.
제5 및 제6 구현들에서, 상기 라이브러리 운영 시스템은 3개의 파일 시스템: 커스터마이즈된 파일 시스템, 보통 파일 시스템, 및 연합 파일 시스템을 포함할 수 있다. 상기 보통 파일 시스템은 판독가능/기입가능 디렉토리를 관리하는 데 사용되고, 다양한 빈번하게 사용되는 파일 시스템들(예컨대 ext3, tmpfs, 및 ramdisk)일 수 있다. 바람직하게는, 메모리 기반 파일 시스템(예컨대 tmpfs)이 관리를 수행하는 데 사용될 수 있어서, 파일 시스템의 메모리가 직접 액세스될 수 있고, 효율이 더 높다. 상기 연합 파일 시스템은 연합을 수행하는 데 사용된다. 이 기능은 기존의 연합 파일 시스템의 기능과 동일하므로, 세부 사항들은 본 명세서에서 설명되지 않는다. 상기 커스터마이즈된 파일 시스템은 보통 파일 시스템의 기능을 갖는 그리고 엑시트 이벤트를 생성할 수 있는 파일 시스템이다. 상기 커스터마이즈된 파일 시스템은 호스트 운영 시스템으로부터의 이미지 서브파일 디렉토리를 마운팅하는 데 사용되는 마운트 디렉토리를 관리하는 데 사용된다. 예를 들어, 전술한 다양한 구현들에서 언급된 이미지 서브파일 디렉토리를 마운팅하는 데 사용되는 마운트 디렉토리는 커스터마이즈된 파일 시스템에 기초하여 관리될 수 있다.
상기 LibOS에서는, 연합 파일 시스템이 최상 층에 있는 파일 시스템으로서 간주될 수 있고, 커스터마이즈된 파일 시스템 및 보통 파일 시스템은 상기 연합 파일 시스템 아래의 2개의 병렬 파일 시스템으로서 간주될 수 있다. 하나 이상의 판독가능/기입가능 디렉토리와의 연합이 요구되는 전술한 구현들에서는, 사용자 요청을 수신한 후에, 상기 LibOS 내의 연합 파일 시스템은 액세스 요청이 제1 액세스 요청인지 또는 제3 액세스 요청인지를 결정하고, 결정 결과에 기초하여, 커스터마이즈된 파일 시스템(제1 액세스 요청에 대해) 또는 보통 파일 시스템(제3 액세스 요청에 기초하여)을 호출하여 처리를 수행한다. 커스터마이즈된 파일 시스템이 호출될 때, 엑시트 이벤트가 생성될 수 있어서, 하이퍼바이저는 엑시트 이벤트를 캡처하고 후속 처리를 수행할 수 있다.
제1 양태에 기초하여, 제1 양태의 제7 구현에서, 상기 제1 연합 디렉토리는 상기 호스트 운영 시스템 내에 있고, 제1 양태에서의 연합 파일 시스템을 이용하여, 모든 이미지 서브파일 디렉토리들에 대해 제1 연합을 수행하고 연합된 디렉토리를 제1 연합 디렉토리에 마운팅하는 단계는 구체적으로:
상기 라이브러리 운영 시스템 엔진에 의해, 상기 호스트 운영 시스템 내의 연합 파일 시스템을 이용하여, 상기 호스트 운영 시스템 내의 상기 복수의 이미지 서브파일 디렉토리 및 적어도 하나의 판독가능/기입가능 디렉토리에 대해 상기 제1 연합을 수행하고 연합된 디렉토리를 상기 제1 연합 디렉토리에 마운팅하는 단계를 포함할 수 있고, 상기 제1 연합 동안 상기 적어도 하나의 판독가능/기입가능 디렉토리의 속성이 판독가능/기입가능하고;
상기 방법은 다음을 추가로 포함한다:
상기 라이브러리 운영 시스템 엔진에 의해, 상기 제1 연합 디렉토리를 상기 라이브러리 운영 시스템 내의 마운트 디렉토리에 마운팅하는 단계; 및
상응하여, 상기 라이브러리 운영 시스템 인스턴스 내의 애플리케이션이 상기 연합 디렉토리 파일에 액세스할 필요가 있을 때, 상기 마운트 디렉토리를 통해 상기 연합 디렉토리 파일에 액세스하는 단계.
이 구현에서, 상기 판독가능/기입가능 디렉토리와 상기 이미지 서브파일 디렉토리들은 상기 호스트 OS 내에 연합된다. 이러한 방식으로, 인스턴스에서 고장이 발생할 때, 데이터가 여전히 호스트 OS에 유지되기 때문에, 인스턴스는 호스트 OS 내의 데이터에 기초하여 편리하게 복구될 수 있다. 이것은 시스템 신뢰도를 개선한다.
제1 양태 또는 제1 양태의 다양한 구현들에 기초하여, 제1 양태의 제8 구현에서, 상기 제1 연합 동안 상기 이미지 서브파일 디렉토리의 속성이 판독 전용이다(즉, 이미지 서브파일 디렉토리의 속성이 제1 연합 디렉토리에서 판독 전용이다). 2개 이상의 연합 동작이 요구된다면, 이미지 서브파일 디렉토리의 속성이 또한 후속하여 연합 파일 시스템에서 판독 전용일 수 있다. 이러한 방식으로, 원래 데이터가 인스턴스들에 의해 수정될 수 없고, 공유가 구현되는 동안 원래 데이터의 보안이 개선된다. 하나 이상의 판독가능/기입가능 디렉토리와의 연합이 요구되는 전술한 구현들에서는, 연합 동안 판독가능/기입가능 디렉토리의 속성이 판독가능/기입가능하여, 연합 파일 시스템이 판독가능/기입가능 디렉토리를 수정할 수 있다. 이미지 서브파일의 원래 속성은 제한되지 않는다. 판독가능/기입가능 디렉토리의 원래 속성은 상응하여 판독가능/기입가능으로 설정될 필요가 있는데 그 이유는 판독가능/기입가능 디렉토리가 판독 또는 기입될 필요가 있기 때문이다.
제1 양태 또는 제1 양태의 다양한 구현들에 기초하여, 제1 양태의 제9 구현에서, 상기 엑시트 이벤트는 상기 라이브러리 운영 시스템이 하이퍼콜 명령어(예를 들어, 위에 설명된 vmcall 명령어)를 호출할 때 생성되거나, 상기 라이브러리 운영 시스템이 예외를 구성할 때 생성된다. 예외를 구성하기 위한 방법은 다음과 같을 수 있다: LibOS 내의 무효 어드레스에 액세스하는 데 사용되는 (연합 디렉토리 파일에 액세스하기 위해 사용되는 일부 파라미터들을 운반하는) 명령어를 이용하여 예외가 생성된다. 후속하여 예외를 캡처한 후에, 하이퍼바이저는 처리를 위한 명령어에 포함된 파라미터들을 추출한다. 대안적으로, 예를 들어, x86 아키텍처 기반 프로세서에서는, wrmsr 명령어를 호출함으로써 예외가 구성될 수 있다. 대안적으로, 예외를 구성하기 위한 다른 방식들이 사용될 수 있다. 이것은 본 발명에서 제한되지 않는다.
하이퍼콜 명령어 및 예외를 구성하기 위한 방식은 각각의 시스템에 의해 제공된다. 따라서, 엑시트 이벤트는 복잡한 절차들 없이, 시스템에 의해 사용되는 기존의 방식으로 용이하게 그리고 효율적으로 구현될 수 있다.
제1 양태 또는 제1 양태의 다양한 구현들에 기초하여, 다른 구현에서, LibOS는 보통 파일 시스템을 이용하여 관리되는 하나 이상의 비-연합 판독가능/기입가능 디렉토리들을 추가로 포함할 수 있고(접두어 비-연합은 판독가능/기입가능 디렉토리들이 다른 파일과 연합되지 않는다는 것을 의미한다), LibOS 내의 애플리케이션은 보통 파일 시스템을 이용하여 이러한 판독가능/기입가능 디렉토리들에 액세스한다.
일부 애플리케이션 시나리오들에서는, 일부 판독가능/기입가능 디렉토리들과의 연합이 요구되지 않을 수 있고, 판독가능/기입가능 디렉토리들은 LibOS 내에서만 사용될 필요가 있다; 따라서, 연합 파일 시스템이 이러한 디렉토리들을 독립적으로 관리하는 데 사용되지 않을 수 있다. 또한, 이러한 디렉토리들은 LibOS 내에 설정되어, 애플리케이션이 호스트 OS에서 액세스를 수행할 필요가 없다. 이것은 효율을 개선할 수 있다.
제1 양태의 제7 구현에 기초하여, 호스트 OS 내의 파일에 액세스하기 위해 LibOS 내에 상이한 파일 시스템들이 설계될 수 있다.
구체적으로, 다른 구현에서, LibOS는 커스터마이즈된 파일 시스템을 포함한다. 상기 커스터마이즈된 파일 시스템은 애플리케이션에 커스터마이즈된 파일 액세스 인터페이스를 제공하고, 애플리케이션으로부터의 액세스 요청이 수신된 후에, 시스템 콜을 호출하지 않고, 엑시트 이벤트를 생성하는 데 사용될 수 있는 명령어를 직접 호출한다. 이러한 방식으로 액세스가 수행되는 경우, 액세스 경로가 더 짧다(즉, 시스템 콜이 요구되지 않는다).
다른 구현에서, LibOS는 보통 파일 시스템 및 시스템 콜 캡처 모듈을 포함한다. 상기 보통 파일 시스템에 기초하여 마운팅이 수행되는 디렉토리 내의 내용이 상기 보통 파일 시스템을 이용하여 액세스될 때, 시스템 콜이 호출된다. 이 경우, 시스템 콜 캡처 모듈은 시스템 콜을 캡처하고 엑시트 이벤트를 생성하도록 구성된다. 이러한 방식으로 액세스가 수행되는 경우, 파일 액세스 인터페이스를 커스터마이즈할 필요 없이, 보통 파일 액세스 인터페이스가 사용될 수 있다. 이는 개발자에게 애플리케이션 개발을 용이하게 한다.
제1 양태에 기초하여, 다른 구현에서, 상기 제1 연합 디렉토리는 상기 호스트 OS 내에 설정되고 상기 LibOS에 마운팅된다(구체적으로, 상기 LibOS 내의 보통 파일 시스템에 의해 관리되는 마운트 디렉토리에 마운팅됨). 상기 LibOS는 상기 보통 파일 시스템을 이용하여 관리되는 하나 이상의 판독가능/기입가능 디렉토리를 추가로 포함하고, 상기 하나 이상의 판독가능/기입가능 디렉토리는 마운팅되는 디렉토리와 연합되지 않는다. 상기 호스트 OS 내의 이미지 서브파일이 수정될 필요가 있을 때, 상기 파일이 획득되고, 판독가능/기입가능 디렉토리로 복사되고, 그 후 수정된다. 상기 파일이 후속하여 다시 수정될 필요가 있다면, 상기 판독가능/기입가능 디렉토리에 저장된 파일에 대해 수정이 이루어진다. 이 구현에서, 상기 LibOS 내의 애플리케이션에 의해 상기 연합 파일 시스템 내의 내용에 액세스하기 위한 방법에 대해서는, 전술한 다양한 구현들에서의 방법들, 예를 들어, 커스터마이즈된 파일 액세스 인터페이스를 이용하는 방식, 또는 보통 파일 액세스 인터페이스 및 시스템 콜 캡처 모듈을 이용하는 방식을 참조한다.
제2 양태에 따르면, 본 발명의 실시예는 가상화 인스턴스에 대한 층 기반 파일 액세스를 구현할 수 있는 전자 디바이스를 개시하고, 여기서 상기 전자 디바이스는 호스트 운영 시스템 내의 파일에 액세스하도록 구성되고, 하이퍼바이저, 라이브러리 운영 시스템 엔진, 및 라이브러리 운영 시스템을 포함하고; 상기 하이퍼바이저 및 상기 라이브러리 운영 시스템 엔진은 상기 호스트 운영 시스템 상에서 실행되고; 상기 호스트 운영 시스템, 상기 하이퍼바이저, 및 상기 라이브러리 운영 시스템 엔진은 호스트 모드에서 실행된다. 상기 하이퍼바이저 및 상기 라이브러리 운영 시스템 엔진에 의해 수행되는 기능들에 대해서는, 제1 양태 또는 제1 양태의 다양한 구현들에서 설명된 기능들을 참조한다.
제3 양태에 따르면, 본 발명의 실시예는 가상화 인스턴스에 대한 층 기반 파일 액세스를 구현할 수 있는 전자 디바이스를 개시하고, 여기서 상기 전자 디바이스는 CPU 및 스토리지를 포함하고; 상기 CPU는 상기 스토리지에 저장된 코드를 판독 및 실행하도록 구성되고; 상기 스토리지에 저장된 코드는 상기 하이퍼바이저 및 상기 라이브러리 운영 시스템 엔진과 같은 제2 양태에서 언급된 모듈들의 코드를 포함할 수 있다.
제4 양태에 따르면, 본 발명의 실시예는 저장 매체를 개시하고, 여기서 상기 저장 매체는 상기 하이퍼바이저 및 상기 라이브러리 운영 시스템 엔진과 같은 제2 양태에서 언급된 모듈들의 코드를 저장하도록 구성되거나, 다음의 동작들을 수행하기 위해, 상기 하이퍼바이저 및 상기 라이브러리 운영 시스템 엔진과 같은 모듈들 및 호스트 운영 시스템의 코드를 저장할 수 있다: 상기 호스트 운영 시스템의 사용자 모드에 엔터하는 동작; 및 LibOS 인스턴스의 이미지를 다운로드하여 상기 LibOS 인스턴스를 실행하고, 상기 LibOS 인스턴스 내의 애플리케이션이 연합 파일 시스템의 층들에 기초하여 상기 호스트 OS 내의 파일에 액세스하도록, 상기 인스턴스와 제1 양태 또는 제1 양태의 다양한 구현들에서 설명된 상호작용 동작들을 수행하는 동작.
본 발명의 실시예들에서의 또는 종래 기술에서의 기술적 해결책들을 더 명확하게 설명하기 위해, 다음은 실시예들 또는 종래 기술을 설명하기 위해 요구되는 첨부 도면들을 간단히 설명한다. 분명히, 다음의 설명에서의 첨부 도면들은 단지 본 발명의 일부 실시예들을 도시하고, 본 기술분야의 통상의 기술자는 창의적 노력 없이 이러한 첨부 도면들로부터 다른 도면들을 여전히 도출할 수 있다.
도 1은 라이브러리 운영 시스템에 기초한 시스템 아키텍처의 개략도이다.
도 2는 본 발명의 실시예 1에 따른 흐름도이다.
도 3은 본 발명의 실시예 1에 따른 특정 예의 개략도이다.
도 4는 본 발명의 실시예 1에 따른 파일 액세스 방법의 개략도이다.
도 5는 본 발명의 실시예 2에 따른 흐름도이다.
도 6은 본 발명의 실시예 2에 따른 특정 예의 개략도이다.
도 7은 본 발명의 실시예 2에 따른 파일 액세스 방법의 개략도이다.
도 8은 본 발명의 실시예 3에 따른 흐름도이다.
도 9는 본 발명의 실시예 3에 따른 특정 예의 개략도이다.
도 10은 본 발명의 실시예 3에 따른 파일 액세스 방법의 개략도이다.
도 11은 본 발명의 실시예 4에 따른 파일 액세스 방법의 개략도이다.
도 12는 본 발명의 실시예 5에 따른 흐름도이다.
도 13은 본 발명의 실시예 5에 따른 특정 예의 개략도이다.
도 14는 본 발명의 실시예 6에 따른 특정 예의 개략도이다.
도 15는 본 발명의 실시예 7에 따른 전자 디바이스의 개략 구조도이다.
도 16은 본 발명의 실시예 7에 따른 다른 전자 디바이스의 개략 구조도이다.
도 17은 본 발명의 실시예 8에 따른 전자 디바이스의 개략 구조도이다.
도 18은 본 발명의 실시예 9에 따른 저장 매체 내용의 개략도이다.
다음은 첨부 도면들을 참조하여 본 출원을 상세히 설명한다. 본 발명의 실시예들에서의 내용을 본 기술분야의 통상의 기술자에게 더 이해가능하게 하기 위해, 다음은 먼저 실시예들의 애플리케이션 시나리오들 및 다양한 유형의 배경 지식을 설명한다.
도 1을 참조하면, 도 1은 다음의 실시예들이 기초하는 디바이스(호스트로 지칭될 수 있음)의 소프트웨어 및 하드웨어 아키텍처의 개략도이다. 하드웨어는 통상 프로세서, 메모리, 저장 디바이스(예컨대 하드 디스크), 및 다양한 주변 장치들(예컨대 키보드 및 마우스)을 포함하는 기존의 하드웨어 디바이스일 수 있다. 디바이스가 동작할 때, 프로세서는 저장 디바이스로부터, 시스템 실행을 위해 요구되는 코드를 판독하고, 코드를 메모리에 로딩하고, 메모리에 로딩된 코드에 따라 대응하는 프로그램을 실행한다. 일부 데이터는 프로그램 실행 동안 생성된다. 데이터는 요건에 따라 메모리 또는 하드 디스크에 저장될 수 있다. 하드웨어 디바이스들의 동작 원리들과 그들 사이의 특정 연결들은 종래 기술에 속하므로, 세부 사항들은 본 명세서에서 설명되지 않는다.
소프트웨어는 호스트 운영 시스템(Host OS)을 포함한다. 접두어 "호스트"는 단지 "운영 시스템"(예를 들어, 아래의 라이브러리 운영 시스템)을 포함하는 아래의 용어들을 구별하기 위해 사용되지만, 다른 특별한 의미를 나타내지는 않는다. 호스트 운영 시스템은 Linux 운영 시스템과 같은 임의의 기존의 주류 운영 시스템일 수 있다. 호스트 운영 시스템에서 실행될 수 있는 다양한 소프트웨어 모듈들은 종래 기술에 기초할 수 있고, 예를 들어, 디바이스 드라이버, 프로세스 관리자, 네트워크 프로토콜, 보통 파일 시스템, 연합 파일 시스템, 및 다양한 사전 설치된 애플리케이션들을 포함할 수 있다.
"보통 파일 시스템(common file system)"에서의 "보통"은 "연합 파일 시스템(union file system)"에서의 "연합"과 구별되기 위해 사용된다. 보통 파일 시스템은 본 기술분야의 통상의 기술자에 의해 일반적으로 이해되는 파일 시스템, 예를 들어, FAT32 또는 NTFS와 같은 Windows 시스템에서 빈번하게 사용되는 파일 시스템, 및 ext2 또는 ext3과 같은 Linux 시스템에서 빈번하게 사용되는 파일 시스템이다.
연합 파일 시스템(Union File System, Unionfs라고도 지칭됨)은 다른 파일 시스템(예컨대 보통 파일 시스템)에 대해 연합 마운팅을 수행할 수 있는 파일 시스템이고, 커널의 일부로서 사용되거나 애플리케이션(사용자 모드) 형태로 호스트 운영 시스템에 존재할 수 있다. 연합 파일 시스템은 다른 파일 시스템들 내의 디렉토리들이 층에 의해 연합 중첩되는 것을 가능하게 한다. 상위 층 애플리케이션의 관점에서, 디렉토리들 내의 모든 내용(디렉토리들 및 파일들을 포함함)은 동일한 디렉토리에 있다. 보통의 연합 파일 시스템은 aufs(Advance UnionFS, 고급 다층 연합 파일시스템(advanced multi-layered unification filesystem), 공식 웹사이트: http://aufs.sourceforge.net/)일 수 있다. 연합 파일 시스템의 기능들을 더 잘 설명하기 위해, aufs를 사용하는 간단한 예가 여기에 제공된다.
아래에 도시된 바와 같이, 2개의 파일, fruits 디렉토리 및 vegetables 디렉토리가 보통 파일 시스템에 기초하여 생성되고, fruits 디렉토리는 apple 파일 및 tomato 파일을 포함하고, vegetables 디렉토리는 carrots 파일 및 tomato 파일을 포함하는 것으로 가정한다.
.
├── fruits
│ ├── apple
│ └── tomato
└── vegetables
├── carrots
└── tomato
그 후, 마운트 디렉토리(그 디렉토리 명칭이 mnt임)를 생성하기 위해 다음의 명령을 실행한다:
$ mkdir mnt
fruits 디렉토리 및 vegetables 디렉토리에 대해 연합을 수행하고 연합된 디렉토리를 디렉토리 ./mnt에 마운팅하기 위해 다음의 명령을 실행한다:
$ sudo mount -t aufs -o dirs=./fruits:./vegetables none ./mnt
디렉토리 ./mnt를 디스플레이하기 위해 다음의 명령을 실행한다:
$ tree ./mnt
다음의 내용이 디스플레이된다:
./mnt
├── apple
├── carrots
└── tomato
apple 파일, carrots 파일, 및 tomato 파일은 디렉토리 ./mnt에 있고, 즉, fruits 디렉토리와 vegetables 디렉토리 양쪽 모두에서의 내용은 연합을 통해 디렉토리 ./mnt에 추가된다는 것을 알 수 있다.
전술한 예는 단지 연합 파일 시스템의 간단한 애플리케이션이다. 연합 파일 시스템은 종래 기술에 속하므로, 연합 파일 시스템의 더 많은 기능들은 본 명세서에서 상세히 설명되지 않는다.
전술한 설명에서의 "마운팅" 동작도 본 기술분야의 통상의 기술자에게 알려진 기술이다. 예를 들어, Linux 운영 시스템에서, 마운팅은 디바이스를 이미 존재하는 디렉토리에 마운팅하는 것(예를 들어, mount 명령을 이용하여 마운팅하는 것)을 의미한다. 저장 디바이스 내의 파일에 액세스하기 위해, 파일이 위치하는 파티션이 이미 존재하는 디렉토리에 마운팅될 수 있고, 그 후, 저장 디바이스는 디렉토리에 액세스함으로써 액세스된다.
도 1의 소프트웨어는 하이퍼바이저(Hypervisor)를 추가로 포함한다. 하이퍼바이저는 주로 일부 하드웨어 리소스들(예컨대 하드웨어 머신)을 가상화하여, 상위 층 소프트웨어가 사용하기 위한, 예를 들어 나중에 설명되는 라이브러리 운영 시스템이 사용하기 위한 대응하는 인터페이스들을 제공하기 위해 사용된다. 하이퍼바이저는 호스트 운영 시스템의 커널에서 실행되거나, 애플리케이션 형태로 호스트 운영 시스템 사용자 모드에서 실행될 수 있다. 대안적으로, 하이퍼바이저의 일부는 커널에 있고, 하이퍼바이저의 일부는 운영 시스템의 위에 있다. 이러한 구현들은 종래 기술에 속하므로, 세부 사항들은 본 명세서에서 설명되지 않는다.
라이브러리 운영 시스템 엔진(LibOS Engine)은 라이브러리 운영 시스템에 기초하여 라이브러리 운영 시스템 인스턴스를 관리하도록 구성되는 라이브러리 운영 시스템의 일부 지원 소프트웨어 모듈들이다. 라이브러리 운영 시스템 엔진의 특정 기능들이 다음의 실시예들에서 상세히 설명된다. 라이브러리 운영 시스템 엔진은 또한 커널에서 또는 사용자 모드에서 실행될 수 있지만, 보안 이유로, 라이브러리 운영 시스템 엔진은 통상 사용자 모드에서 실행된다.
다음의 실시예들에서, LibOS 및 애플리케이션은 세트적으로 LibOS 인스턴스라고 지칭된다. 전체 라이브러리 운영 시스템 인스턴스는 통상 실행을 위한 이미지 파일에 기초하여 설치된다.
라이브러리 운영 시스템(또는 라이브러리 운영 시스템 인스턴스)은, 예를 들어, 라이브러리 파일, 연합 파일 시스템, 및 보통 파일 시스템을 제공하고, 다양한 동작들을 수행하고, 다른 모듈과 상호작용하는 복수의 기능을 지원한다. 설명의 용이함을 위해, 이러한 기능들 모두가 실시예들에서 명명되는 것은 아니다. 본 기술분야의 통상의 기술자는 단계가 수행될 때 분명히 대응하는 기능이 있다는 것을 알 수 있다. 또한, 본 기술분야의 통상의 기술자는 "LibOS(또는 LibOS 인스턴스)가 LibOS(또는 LibOS 인스턴스) 내의 연합 파일 시스템을 호출한다"와 같은 묘사는 연합 파일 시스템과 독립적인 LibOS(또는 LibOS 인스턴스) 내의 모듈이 연합 파일 시스템 모듈을 호출한다는 것을 의미한다는 것을 알 수 있다는 것을 이해할 수 있다.
전술한 설명에 기초하여, 다음은 특정 실시예들 및 관련 첨부 도면들을 참조하여 본 출원을 상세히 더 설명한다.
실시예 1
LibOS 인스턴스가 실행되기 전에 LibOS 인스턴스에 대한 이미지 파일이 준비될 필요가 있다. 이 실시예 및 다른 모든 실시예들에서, 이미지 파일의 의미는 종래 기술에서와 유사하고, 즉, LibOS 인스턴스를 실행하기 위해 요구되는 일부 파일들의 패키지 파일이다. 통상, 파일은 크기를 감소시키기 위해 압축될 수 있다. 예를 들어, Linux 운영 시스템에서, 파일들은 tar 프로그램을 이용하여 패킹되고 다양한 압축 알고리즘들을 이용하여 압축될 수 있다. 이미지 파일은 런타임 라이브러리 및 구성 파일과 같은, LibOS 인스턴스에 의해 요구되는 다양한 파일들을 포함한다. 다양한 기능들, 예를 들어, 다양한 파일 시스템들(예컨대 보통 파일 시스템, 연합 파일 시스템, 및 커스터마이즈된 파일 시스템)의 기능들 및 LibOS 엔진, 하이퍼바이저, 또는 다른 모듈과 상호작용하는 소프트웨어 기능이 런타임 라이브러리를 이용하여 구현될 수 있다. 이미지 파일은 로컬 저장 디바이스 또는 원격 저장 디바이스에 저장될 수 있다. 이것은 본 명세서에서 제한되지 않는다.
이미지 파일 내의 모든 파일들(즉, 이미지 서브파일들)은 하나 이상의 층으로 논리적으로 분할된다(또는 "지정된다"). 본 명세서에서 "층"은 연합 파일 시스템에 대한 용어이다. 연합 파일 시스템(예를 들어, aufs, advanced multi-layered unification filesystem)에서, 연합을 수행하는 것은 구체적으로 상이한 디렉토리들에 대해 연합을 수행하고 연합된 디렉토리를 마운팅하는 것일 수 있고, 연합 및 마운팅이 완료된 후에, 디렉토리들 내의 파일들은 "이미지 층"(줄여서 "층")에 기초하여 논리적으로 중첩된다. "층"의 개념을 반영하기 위해, 층은 특정 구현 동안 구성 파일을 이용하여 구성될 수 있거나(예를 들어, 특정 파일들 및 그 파일들이 위치하는 층들이 구성 파일에서 지정되고, 후속 연합 동안, 동일한 층에 있는 파일들이 구성 파일에 따라 특정 디렉토리에 배치될 수 있고, 디렉토리에 기초하여 연합이 수행된다), 또는 층은 이미지 파일 내의 디렉토리로서 반영될 수 있다(예를 들어, 상이한 층들에 있는 파일들이 상이한 디렉토리들에 배치되고, 후속 연합 동안, 이러한 디렉토리들에 대해 연합이 수행된다). 연합 파일 시스템의 특정 구현 및 애플리케이션 및 하나 이상의 층으로서 이미지 파일 내의 모든 파일들을 어떻게 지정하는가는 본 기술분야의 통상의 기술자에게 알려진 기술들이므로, 세부 사항들은 본 명세서에서 설명되지 않는다.
이미지 파일이 준비된 후에, 이 실시예에서의 가상화 인스턴스의 층 기반 파일 액세스 방법이 수행될 수 있다. 도 2에 도시된 흐름도, 도 3에 도시된 특정 예의 개략도, 및 도 4에 도시된 애플리케이션에 의해 파일에 액세스하는 개략도를 참조하여, 이 방법은 구체적으로 다음의 단계들을 포함한다.
S11. LibOS 엔진은 라이브러리 운영 시스템 인스턴스의 이미지 파일 내의 이미지 서브파일을 획득하고, 이미지 서브파일을 호스트 OS 내의 각각의 이미지 서브파일 디렉토리에 저장한다.
LibOS 인스턴스를 실행하기 위한 명령어(예를 들어, 입력 디바이스를 이용하여 사용자에 의해 입력되거나 일부 다른 소프트웨어 모듈에 의해 전송된)를 수신한 후에, LibOS 엔진은 로컬 또는 원격 저장 디바이스로부터 저장된 이미지 파일을 획득한다. 이미지 파일은 통상 압축되어 있다. LibOS 엔진은 이미지 파일을 압축 해제한 후에 모든 이미지 서브파일을 획득하고, 이러한 이미지 서브파일들을 호스트 OS 내의 각각의 디렉토리(여기서는 이미지 서브파일 디렉토리라고 지칭됨)에 저장한다. 본 출원에서, 달리 지정되지 않는 한, "디렉토리"를 설명하기 위해 사용되는 접두어는 다른 특별한 의미를 나타내기 위해서가 아니라 단지 디렉토리의 기능을 편리하게 설명하기 위한 명칭이라는 점에 유의해야 한다. 예를 들어, 본 명세서에서 "이미지 서브파일 디렉토리" 는 "이미지 서브파일을 저장하기 위해 사용되는 디렉토리"이고, 아래의 "연합 디렉토리"는 "연합된 디렉토리들이 마운팅되는 디렉토리"이다.
이미지 파일 img는 2개의 디렉토리: /sys 및 /doc를 포함한다고 가정하고, 여기서
디렉토리 /sys는 2개의 파일: a.bin 및 b.so(즉, 이미지 서브파일들)를 포함하고;
디렉토리 /doc는 2개의 파일: b.so 및 c.txt(즉, 이미지 서브파일들)를 포함하고;
논리적으로 2개의 층이 존재하고, 디렉토리 /sys 내의 파일들은 하나의 층에 있고, 디렉토리 /doc 내의 파일들은 다른 층에 있다.
압축 해제된 후에, 이미지 서브파일들은 호스트 OS의 디렉토리 /img에 배치된다고 가정한다. 이 경우, 디렉토리는 다음의 파일들을 포함한다:
/img/sys/a.bin
/img/sys/b.so
/img/doc/b.so
/img/doc/c.txt
/img/sys 및 /img/doc는 이미지 서브파일 디렉토리들이고, 이미지 서브파일 디렉토리들에 포함된 파일들은 이미지 서브파일들이다.
전술한 특정 예들은 해결책을 더 이해가능하게 하기 위해 제공되는 일부 간단한 예들이고, 이러한 예들은 단지 이 실시예의 기본 원리를 예시하는 데 사용되고, 실제 사례를 나타내는 것은 아니라는 점에 유의해야 한다. 실제로는, 더 많은 파일들 및 층들이 존재할 수 있다.
S12. LibOS 엔진은, 게스트 모드에서, LibOS 인스턴스를 실행한다.
예를 들어, LibOS 엔진은, a.bin에 기초하여, LibOS 인스턴스를 실행할 수 있다. 실제로는, 통상 더 많은 파일들, 예를 들어, 실행될 필요가 있는 애플리케이션 프로그램 및 다양한 구성 파일들이 필요하다. LibOS 인스턴스를 실행하기 위한 특정 방법은 종래 기술에 속하므로, 세부 사항들은 본 명세서에서 설명되지 않는다.
S13. LibOS 엔진은 호스트 OS 내의 이미지 서브파일 디렉토리를 LibOS 인스턴스에 마운팅한다.
마운팅 후에, LibOS는 호스트 OS로부터의 파일의 어드레스를 변환할 수 있거나 그렇지 않을 수 있다. 다음은 그 2가지 경우를 설명한다.
1. 디렉토리 어드레스가 변환된다.
(1) 디렉토리 /img/sys 및 /img/doc가 각각 LibOS 인스턴스 내의 디렉토리 /mount1 및 /mount2에 마운팅된다고 가정한다. 마운팅 후에, 디렉토리들 및 대응하는 파일들은 다음과 같다:
/mount1/a.bin
/mount1/b.so
/mount2/b.so
/mount2/c.txt
또는,
(2) 전체 디렉토리 /img는 LibOS 인스턴스 내의 디렉토리에 마운팅될 수 있다. 예를 들어, 디렉토리 /mount3(도 3에 도시된 경우에 대응함). 마운팅 후에, 디렉토리들 및 대응하는 파일들은 다음과 같다:
mount3/sys/a.bin
mount3/sys/b.so
mount3/doc/b.so
mount3/doc/c.txt
디렉토리 어드레스 변환 기능은 LibOS 인스턴스 내의 LibOS에 의해 제공된다. 이점은 애플리케이션이 더 짧은 경로를 이용하여 파일에 액세스할 수 있다는 것이고, 예를 들어, 원래는 경로 /mount2/img/doc/c.txt를 이용하여 액세스될 필요가 있는 파일이 경로 /mount2/c.txt만을 이용하여 액세스될 수 있다는 것이다.
2. 디렉토리 어드레스가 변환되지 않는다.
sys 디렉토리 및 doc 디렉토리는 LibOS 인스턴스에 있는 디렉토리 /mount4 및 디렉토리 /mount5에 각각 마운팅된다고 가정한다. 마운팅 후에, 디렉토리들 및 대응하는 파일들은 다음과 같다:
/mount4/img/sys/a.bin
/mount4/img/sys/b.so
/mount5/img/doc/b.so
/mount5/img/doc/c.txt
S14. LibOS는 연합 파일 시스템을 호출함으로써, 판독가능/기입가능 디렉토리 및 S13에서의 마운팅되는 디렉토리에 대해 연합을 수행하고 연합된 디렉토리를 연합 디렉토리에 마운팅한다.
예를 들어, 판독가능/기입가능 디렉토리는 /write인 것으로 가정하고, S13에서의 마운팅되는 디렉토리는 제1 경우의(2)에서의 변환 후에 획득된 디렉토리인 것으로 가정한다. 이 경우, 다음의 명령은 연합 및 연합 디렉토리 /union에 마운팅을 수행하는 데 사용될 수 있다:
mount -t aufs -o dirs=/mount3:/write none /union
판독가능/기입가능 디렉토리는 이 단계 이전에 생성될 수 있고, 일부 파일들을 포함할 수 있다. 판독가능/기입가능 디렉토리는 LibOS 내의 보통 파일 시스템에 기초하여 관리되고, 생성 동안에 판독가능/기입가능 디렉토리의 속성이 판독가능/기입가능하다.
연합을 위한 규칙은 사전 합의된 "층"(즉, 이미지 파일에 포함된 파일들의 층)에 따라 연합을 수행하는 것이다. /sys 및 /doc가 2개의 층으로서 사용되는 것은 사전에 합의된다. /sys 및 /doc는 디렉토리 /mount3에 마운팅된다. 따라서, 연합 동안, 연합될 소스 디렉토리로서, /mount3이 판독가능/기입가능 디렉토리 /write(예를 들어, d.txt 파일을 포함함)과 연합되고, 연합된 디렉토리는 연합 디렉토리 /union에 마운팅된다. 이 경우, 디렉토리 /union은 다음의 파일들을 포함한다:
/union/a.bin
/union/b.so
/union/c.txt
/union/d.txt
또한, 이미지 서브파일 디렉토리들이 판독 전용 층들로서 연합 파일 시스템에 의해 연합되는 것이 사전에 합의될 수 있다. 연합 동안, 이미지 서브파일 디렉토리에 대한 연합 파일 시스템의 액세스 속성이 판독 전용으로 설정된다. 상응하여, 판독가능/기입가능 디렉토리에 대한 연합 파일 시스템의 액세스 속성이 판독가능/기입가능으로 설정된다.
S15. 연합 디렉토리 내에 있는 그리고 호스트 OS 내의 이미지 서브파일에 대응하는 파일에 액세스할 때, LibOS 인스턴스 내의 애플리케이션은 하이퍼콜 명령어를 호출함으로써 하이퍼바이저에 제1 액세스 요청(즉, 애플리케이션에 의해 라이브러리 운영 시스템에 전송된 액세스 요청, 여기서 요청은 연합 디렉토리 내의 파일에 액세스, 즉, 연합 디렉토리 파일에 액세스하기 위해 사용됨)을 전송하고, 하이퍼바이저는 제1 액세스 요청을, 호스트 모드에서, 호스트 OS 내에 있는 그리고 연합 디렉토리 내의 파일에 대응하는 이미지 서브파일에 액세스하는 데 사용될 수 있는 제2 액세스 요청으로 변환한다.
이미지 서브파일에 더하여, 호스트 OS 내의 하나 이상의 판독가능/기입가능 디렉토리 내의 파일이 이러한 방식으로 액세스될 수 있다는 점에도 유의해야 하는데 그 이유는 하나 이상의 판독가능/기입가능 디렉토리도 호스트 OS 내에 있기 때문이다. 다음은 연합 디렉토리 내의 파일에 액세스하는 것에 대한 세부 사항들을 설명한다.
애플리케이션에 의해 연합 디렉토리 내의 파일에 액세스하는 것은 본질적으로, 일부 중간 층들(예를 들어, 연합 파일 시스템, 하이퍼바이저 등을 포함함)을 이용하여, 호스트 OS 내에 있는 그리고 연합 디렉토리 내의 파일에 대응하는 이미지 서브파일에 액세스하는 것이다(연합 디렉토리 내의 파일은 호스트 OS 내의 이미지 서브파일들에 대해 수행되는 연합에 기초하여 획득되기 때문에).
이 실시예에서, 이 프로세스 동안, 연합 디렉토리 내의 파일은 게스트(Guest) 모드에서 실행되는 LibOS 인스턴스 내에 있고, 호스트 OS 내의 파일은 호스트 모드에서 실행된다; 따라서, LibOS 내의 애플리케이션은 액세스를 직접 수행할 수 없고, 액세스를 수행하기 위해, 일부 기능들을 구현하기 위한 중간 층을 필요로 한다.
구체적으로, 도 4를 참조하여, 게스트 모드에서 실행되는 애플리케이션이 호스트 모드에서 실행되는 호스트 OS 내의 파일에 액세스할 필요가 있을 때, 다음의 단계들이 포함될 수 있다.
S151. 애플리케이션은 LibOS 내의 라이브러리 파일 내의 파일 액세스 인터페이스를 호출한다.
예를 들어, 다음의 의사코드가 인터페이스를 호출하는 데 사용될 수 있다:
read (/mount/a.bin)
라이브러리 파일은 프로그래밍 언어와 호환가능하고, 특정 프로그래밍 언어를 이용하여 컴파일된 프로그램을 실행하기 위한 라이브러리 함수를 제공하기 위해 사용되는 파일이다. LibOS에서는, 상이한 프로그래밍 언어들에 대한 복수의 라이브러리 파일이 제공될 수 있거나, 프로그래밍 언어들 중 하나에 대해서만 라이브러리 파일이 제공될 수 있다. 전술한 예시적인 의사 코드에서의 read는 라이브러리 파일에 의해 제공되는 파일 액세스 인터페이스이다.
S152. 파일 액세스 인터페이스는 LibOS 내에 있는 그리고 파일 액세스를 위해 사용되는 시스템 콜을 호출한다.
예를 들어, 다음의 의사 코드가 시스템 콜을 호출하는 데 사용될 수 있다:
syscall_read (/mount/a.bin)
시스템 콜은 사용자 공간에서 실행되는 프로그램(예를 들어, 애플리케이션)이, 운영 시스템의 커널로부터, 실행을 위해 더 높은 권한을 필요로 하는 서비스를 요청하는 방식이다. 시스템 콜은 사용자 프로그램과 운영 시스템 사이의 인터페이스를 제공한다. 이 실시예에서, LibOS 및 호스트 OS는 그들 자신의 시스템 콜들을 갖고, 시스템 콜들은 그들 자신의 운영 시스템들에서만 기능한다.
S153. LibOS 내의 시스템 콜은 액세스를 수행하기 위해 LibOS 내의 연합 파일 시스템을 호출한다.
예를 들어, 다음의 의사 코드가 연합 파일 시스템을 호출하는 데 사용될 수 있다:
union_read (/mount/a.bin)
S154. 연합 파일 시스템은 액세스될 파일이 판독가능/기입가능 디렉토리 내에 있는지 또는 호스트 OS 내의 판독 전용 디렉토리에 대응하는지를 결정하고, 상이한 경우들에 대해 상이한 처리 방법들을 사용하고, 다음을 포함한다:
S154A. 액세스될 파일이 판독가능/기입가능 디렉토리 내에 있다면, 연합 파일 시스템은 액세스를 수행하기 위해 LibOS 내의 보통 파일 시스템을 호출한다.
예를 들어, 파일 /union/d.txt가 액세스되어야 할 때, 판독가능/기입가능 디렉토리가 LibOS 내의 보통 파일 시스템에 기초하여 관리되기 때문에, LibOS 내의 보통 파일 시스템 내의 대응하는 인터페이스가 액세스를 수행하기 위해 직접 호출될 수 있다.
S154B. 액세스될 파일이 호스트 OS 내의 판독 전용 디렉토리 내의 파일에 대응한다면, 커스터마이즈된 파일 시스템이 서비스를 제공하는 데 사용된다. 보통 파일 시스템의 기능에 더하여, 커스터마이즈된 파일 시스템은 액세스 요청을 전송하기 위해 하이퍼콜(hypercall) 명령어를 호출하는 기능을 갖는다. 하이퍼콜 명령어는 하이퍼콜 명령어가 상이한 프로세서들에 기초하고 상이한 기능들을 수행하는 데 사용될 때 상이한 특정 명령어들을 가질 수 있다. 예를 들어, x86 프로세서에 대해, 엔터의 경우에, vmcall 명령어를 호출함으로써 엑시트 이벤트가 생성될 수 있다; 엑시트의 경우에, vmlaunch를 호출함으로써 엔터 이벤트가 생성될 수 있다.
이 실시예에서, 예를 들어, 다음의 의사 코드가 액세스 요청을 전송하기 위해 vmcall 명령어를 호출하는 데 사용된다:
vmcall (read, /mount/host/union/a.bin)
S155. 단계 S154B에 기초하여, vmcall 명령어가 호출된 후에, CPU는 게스트 모드로부터 호스트 모드로 스위칭하는 엑시트 이벤트를 생성하고 이벤트는 하이퍼바이저에 의해 캡처되고 처리된다.
S156. 처리를 수행할 때, 하이퍼바이저는 호스트 OS 내의 대응하는 파일에 액세스하기 위해 호스트 OS에 있는 그리고 파일에 액세스하기 위해 사용되는 시스템 콜을 호출한다.
여기서, 시스템 콜을 이용하여 액세스하는 것도 액세스 요청에 대응한다. 액세스 요청은 전술한 발명 내용 및 S15에서 언급된 제2 액세스 요청이다. 그 후, 시스템 콜은 보통 파일 시스템 및 일련의 다른 콜들(예컨대 드라이버)을 호출하여, 최종적으로 기저 하드웨어(예컨대 하드 디스크 및 플래시 메모리) 내의 데이터에 액세스한다.
S157. 액세스가 완료된 후에, 결과가 원래 경로에서 반환된다 - 반환 방식은 호출 방식에 대응하고, 예를 들어, 값이 반환될 수 있거나, 결과가 지정된 곳(예컨대, 버퍼)에 반환될 수 있다.
단계 S155 및 단계 S156에 대해, 하이퍼바이저는 구체적으로 vmlaunch 명령어를 호출하여 호스트 모드로부터 게스트 모드로 스위칭하는 엔터 이벤트를 생성하고, 결과를 반환할 수 있다는 점에 유의해야 한다.
실시예 2
실시예 1에 기초하여, 실시예 2는 가상화 인스턴스의 다른 층 기반 파일 액세스 방법을 개시한다. 모든 디렉토리들(호스트 OS 내의 판독 전용 디렉토리 및 LibOS 내의 판독가능/기입가능 디렉토리)이 LibOS 내에 연합되는 실시예와 상이하게, 이 실시예에서는, 호스트 OS 내의 판독 전용 디렉토리들이 먼저 호스트 OS 내에 연합되고, 그 후 LibOS 내의 판독가능/기입가능 디렉토리와의 연합이 LibOS 내에서 수행된다.
다음은 특정 단계들을 이용하여 이 실시예를 설명한다. 이 실시예는 실시예 1에 기초하고, 따라서, 실시예 1의 것들과 동일한 일부 단계들은 이 실시예에서 상세히 설명되지 않고, 본 기술분야의 통상의 기술자는 실시예 1의 설명들을 참조하여 이 실시예에서의 대응하는 단계들의 특정 의미들을 이해할 수 있다는 점에 유의해야 한다. 구체적으로, 도 5에 도시된 흐름도, 도 6에 도시된 특정 예의 개략도, 및 도 7에 도시된 애플리케이션에 의해 호스트 OS 내의 파일에 액세스하는 개략도를 참조하여, 이 실시예는 다음의 단계들을 포함할 수 있다.
S21. LibOS 엔진은 라이브러리 운영 시스템 인스턴스의 이미지 파일 내의 이미지 서브파일을 획득하고, 이미지 서브파일을 호스트 OS 내의 각각의 이미지 서브파일 디렉토리에 저장한다.
S22. LibOS 엔진은 호스트 OS 내의 연합 파일 시스템을 호출함으로써, 제1차의 연합을 수행하고 연합된 디렉토리를 제1 연합 디렉토리에 마운팅한다.
예를 들어, 여전히 실시예 1에서의 특정 예에 기초하여, 제1차의 연합의 규칙은 제1 층으로서 디렉토리 /img/sys, 및 제2 층으로서 디렉토리 /img/doc를 이용하는 것이고, 연합된 디렉토리들이 마운팅되는 제1 연합 디렉토리는 /host/union이고, 디렉토리 /host/union은 다음의 파일들을 포함한다:
/host/union/a.bin
/host/union/b.so
/host/union/c.txt
S23. LibOS 엔진은, 게스트 모드에서, LibOS 인스턴스를 실행한다.
실시예 1에서와 유사하게, 이 단계가 S24 전에 수행된다면, 이 단계 및 단계 S21 및 단계 S22의 순서는 제한되지 않는다.
S24. LibOS 엔진은, 커스터마이즈된 파일 시스템에 기초하여, 제1 연합 디렉토리를 LibOS에 마운팅하는데, 예를 들어, 디렉토리 /host/union을 LibOS 내의 디렉토리, 예를 들어, 디렉토리 /mount에 마운팅할 수 있거나, 디렉토리 /host를 LibOS 내의 디렉토리 /mount에 마운팅할 수 있다.
커스터마이즈된 파일 시스템의 정의는 실시예 1에서와 동일하고, 즉, 커스터마이즈된 파일 시스템은, 보통 파일 시스템에 기초하여, 하이퍼콜 명령어를 호출하여 게스트 모드로부터 호스트 모드로 스위칭하는 엑시트 이벤트를 생성할 수 있다.
이 단계에서는, 마운팅되는 판독 전용 디렉토리의 어드레스가 변환되어, LibOS 인스턴스에서, 애플리케이션이 과도하게 긴 디렉토리 접두어가 보지 않도록 할 수 있다. 예를 들어, LibOS 인스턴스 내의 애플리케이션이 "볼" 수 있는 변환되지 않은 전체 파일 경로는 다음을 포함할 수 있다:
/mount/host/union/a.bin
전술한 "보는"은 파일 관리자(예를 들어, Windows 운영 시스템에 기초한 "내 컴퓨터") 내의 다양한 파일들을 "보는 것"과 유사하다. 본질은 일부 소프트웨어 모듈들(예컨대 파일 시스템)을 이용하여 파일 관리 메커니즘을 제공하여, 애플리케이션들에 일부 파일 액세스 인터페이스들을 제공하여, 애플리케이션들이 이러한 액세스 인터페이스들을 이용하여 파일의 다양한 유형의 정보(예컨대 파일 명칭, 파일 크기, 및 파일 유형)를 획득할 수 있도록 하는 것이다.
이 경우, 프로그래밍을 시작할 때, 애플리케이션 개발자가/a.bin과 같은 파일에 액세스할 필요가 있다면, 애플리케이션 개발자는 전체 경로를 이용하여 파일에 액세스할 필요가 있다.
애플리케이션에게 "보일" 수 있는 변환된 파일 경로는 다음과 같을 수 있다:
/mount/a.bin
즉, 변환이 수행되지 않는 해결책과 비교하여, 일부 경로 접두어들이 생략될 수 있고, 예를 들어, 전체 경로에서의 접두어 /host/union은 이 예에서 생략된다.
S25. LibOS 인스턴스는 LibOS 내의 연합된 연합 파일 시스템을 호출함으로써, 마운팅되는 디렉토리 및 적어도 하나의 판독가능/기입가능 디렉토리에 대해 제2차의 연합을 수행하고 연합된 디렉토리를 제2 연합 디렉토리에 마운팅한다.
LibOS 인스턴스 내에, 하나의 판독가능/기입가능 디렉토리, 구체적으로/write가 존재하고, 디렉토리 내에는 어떠한 파일도 존재하지 않고; 제2 연합 디렉토리는 디렉토리 /lib_union인 것으로 가정한다.
디렉토리 /host가 LibOS 내의 디렉토리 /mount에 마운팅되고, 마운팅되는 디렉토리 및 판독가능/기입가능 디렉토리 /write에 대해 제2차의 연합이 수행되고, 연합된 디렉토리가 디렉토리 /lib_union에 마운팅되면, 다음의 파일들이 획득된다:
/lib_union/union/a.bin
/lib_union/union/b.so
/lib_union/union/c.txt
대안적으로, 디렉토리 /host/union이 LibOS 내의 디렉토리 /mount에 마운팅되고 마운팅되는 디렉토리 및 판독가능/기입가능 디렉토리 /write에 대해 제2차의 연합이 수행되고, 연합된 디렉토리가 디렉토리 /lib_union에 마운팅되면(도 6에 도시된 예에 대해), 다음의 파일들이 획득된다:
/lib_union/a.bin
/lib_union/b.so
/lib_union/c.txt
도 7을 참조하면, 도 7은 이 실시예에서 LibOS 인스턴스 내의 애플리케이션에 의해 파일에 액세스하기 위한 방법의 개략도이다. 이 실시예에서의 방법은 실시예 1에서와 유사하다. 예를 들어, 판독가능/기입가능 디렉토리 내의 파일이 액세스될 필요가 있다면, 그 파일은 S151 내지 S154 및 S154A의 방식으로 액세스될 수 있다; 액세스될 필요가 있는 파일이 호스트 OS 내의 판독 전용 디렉토리 내의 파일에 대응한다면, S151 내지 S154, S154B 및 S155가 먼저 수행될 수 있고, 그 후, 다음의 단계들이 수행된다.
S256. 엑시트 이벤트를 처리할 때, 하이퍼바이저는, 호스트 OS에서, 파일에 액세스하기 위해 사용되는 시스템 콜을 호출한다.
S257. 시스템 콜은 액세스를 수행하기 위해 호스트 OS 내의 연합 파일 시스템을 호출한다. 연합 파일 시스템은 보통 파일 시스템을 호출함으로써 기저 하드웨어에 액세스할 수 있다.
즉, 이 실시예에서, 호스트 OS에서의 연합이 수행되고, 따라서, 액세스를 완료하기 위해 단계 S257이 수행될 필요가 있다.
실시예 3
전술한 실시예들에 기초하여, 본 발명의 이 실시예는 가상화 인스턴스의 다른 층 기반 파일 액세스 방법을 개시한다. 도 8에 도시된 흐름도, 도 9에 도시된 특정 예의 개략도, 및 도 10에 도시된 애플리케이션에 의해 호스트 OS 내의 파일에 액세스하는 개략도는 이 실시예의 개략 흐름도들이다. 전술한 실시예에서 판독가능/기입가능 디렉토리가 LibOS 내에 있는 것과 상이하게, 이 실시예에서는, 판독가능/기입가능 디렉토리는 호스트 OS 내에 있다.
다음은 특정 단계들을 이용하여 이 실시예를 설명한다. 전술한 실시예들에서의 것들과 동일한 일부 단계들은 이 실시예에서 상세히 설명되지 않고, 본 기술분야의 통상의 기술자는 실시예 1 및 실시예 2에서의 설명들을 참조하여 이 실시예에서의 대응하는 단계들의 특정 의미들을 이해할 수 있다.
구체적으로, 이 실시예는 다음의 단계들을 포함할 수 있다.
S31. LibOS 엔진은 라이브러리 운영 시스템 인스턴스의 이미지 파일 내의 이미지 서브파일을 획득하고, 이 이미지 서브파일을 호스트 OS 내의 이미지 서브파일 디렉토리들(/img/sys 및 /img/doc)에 저장한다.
S32. LibOS 엔진은 호스트 OS 내의 연합 파일 시스템을 호출함으로써, 모든 이미지 서브파일 디렉토리들 및 적어도 하나의 판독가능/기입가능 디렉토리(/write)에 대해 연합을 수행하고 연합된 디렉토리를 호스트 OS 내의 연합 디렉토리(/union)에 마운팅한다.
S33. LibOS 엔진은, 게스트 모드에서, LibOS 인스턴스를 실행한다.
이 단계가 단계 S34 전에 완료된다면, 이 단계 및 단계 S32 및 단계 S31의 순서는 제한되지 않는다.
S34. LibOS 엔진은 연합 디렉토리를 LibOS 내의 마운트 디렉토리(/mount)에 마운팅한다.
마운팅 동안, 이미지 서브파일 디렉토리에 대한 연합 파일 시스템의 액세스 속성이 판독 전용이고, 판독가능/기입가능 디렉토리에 대한 연합 파일 시스템의 액세스 속성이 판독가능/기입가능하다.
도 10을 참조하여, 다음은 LibOS 인스턴스 내의 애플리케이션이 마운트 디렉토리 내의 내용에 어떻게 액세스하는지를 설명한다.
S35. 애플리케이션은 마운트 디렉토리 내의 내용에 액세스하기 위해 파일 액세스 인터페이스를 호출한다.
S36. 파일 액세스 인터페이스는 하이퍼콜 명령어를 호출하여 게스트 모드로부터 호스트 모드로 스위칭하는 엑시트 이벤트를 생성한다.
이 실시예에서, 파일 액세스 인터페이스는 시스템 콜을 호출하지 않지만, 하이퍼콜 명령어에 기초하여, 엑시트 이벤트를 직접 생성한다.
S37. 하이퍼바이저는 엑시트 이벤트를 캡처하고 이벤트를 처리하여, 호스트 OS 내의 시스템 콜을 호출한다.
S38. 호스트 OS 내의 시스템 콜은 호스트 OS 내의 연합 파일 시스템을 호출한다.
S39. 연합 파일 시스템은 호스트 OS 내의 보통 파일 시스템을 호출한다.
후속하여, 보통 파일 시스템은 최종적으로, 일련의 콜들을 이용하여, 기저 하드웨어에 저장된 데이터에 액세스하고, 원래 경로에 따라 데이터를 반환한다. 특정 반환 방법은 전술한 실시예들에서 설명된 동일한 원리에 기초하므로, 세부사항들은 본 명세서에서 다시 설명되지 않는다.
실시예 4
전술한 실시예들에 기초하여, 본 발명의 이 실시예는 가상화 인스턴스의 다른 층 기반 파일 액세스 방법을 개시한다. 이 실시예에서의 단계 S41 내지 단계 S44는 실시예 3에서의 단계 S31 내지 단계 S34와 동일하지만, 이 실시예에서의 액세스 방법은 실시예 3에서와 상이하다. 구체적으로, 도 13에 도시된 애플리케이션에 의해 호스트 OS 내의 파일에 액세스하는 개략도를 참조하여, 다음의 단계들이 포함된다.
애플리케이션이 마운팅되는 디렉토리 내의 내용에 액세스할 때, 다음의 단계들이 포함된다:
S45. 애플리케이션은 마운트 디렉토리 내의 내용에 액세스하기 위해 파일 액세스 인터페이스를 호출한다.
S46. 파일 액세스 인터페이스는 LibOS 내의 시스템 콜을 호출한다.
실시예 3과 비교하여, 이 실시예에서는, LibOS는 시스템 콜을 캡처하기 위해 캡처 모듈을 구성할 필요가 있다.
S47. LibOS 내의 캡처 모듈은 시스템 콜을 캡처한다.
S48. 캡처 모듈은 하이퍼콜 명령어를 호출하여 엑시트 이벤트를 생성한다.
후속 단계 S49 내지 단계 S51은 실시예 3에서의 단계 S37 내지 단계 S39와 동일하다.
실시예 5
전술한 실시예들에 기초하여, 본 발명의 이 실시예는 가상화 인스턴스의 다른 층 기반 파일 액세스 방법을 개시한다. 도 12에 도시된 흐름도 및 도 13에 도시된 특정 예의 개략도는 이 실시예의 개략 흐름도들이다. 이 실시예는 주로 실시예 3 및 실시예 4에 기초한다. 이 실시예에서는, LibOS 인스턴스 내의 애플리케이션이 사용하기 위해 LibOS 내에 판독가능/기입가능 디렉토리가 추가로 설정될 수 있다.
구체적으로, 다음의 단계들이 포함될 수 있다:
단계 S51 내지 단계 S54는 각각 S31 내지 S34에 대응한다.
S55. LibOS 내에 적어도 하나의 판독가능/기입가능 디렉토리(/write2)를 설정한다.
이 실시예에서는, 호스트 OS 내에 설정되어 있는 판독가능/기입가능 디렉토리에 더하여, 판독가능/기입가능 디렉토리(/write2)가 LibOS 내에 설정된다. 호스트 OS 내의 판독가능/기입가능 디렉토리 및 이미지 서브파일 디렉토리에 대해서는 연합이 수행되는 반면, LibOS 내의 판독가능/기입가능 디렉토리 및 이미지 서브파일 디렉토리에 대해서는 연합이 수행되지 않는다. LibOS 내의 판독가능/기입가능 디렉토리는 연합될 필요가 없는 그리고 애플리케이션에 의해 사용되는 일부 데이터를 저장하는 데 사용될 수 있다. 이 디렉토리는 LibOS 내의 보통 파일 시스템에 기초하여 관리될 수 있다.
액세스 절차에서, 디렉토리는 LibOS 내의 보통 파일 시스템에 기초하여 액세스될 수 있다. 호스트 OS에서의 연합 후에 마운팅이 수행되는 LibOS 내의 마운트 디렉토리가 액세스되면, 실시예 3 및 실시예 4에서의 방법들이 이용될 수 있고, 세부사항들은 본 명세서에서 다시 설명되지 않는다.
실시예 6
전술한 실시예들에 기초하여, 본 발명의 이 실시예는 가상화 인스턴스의 다른 층 기반 파일 액세스 방법을 개시한다. 도 14를 참조하면, 도 14는 이 실시예의 특정 예의 개략도이다. 이 실시예에서는, 호스트 OS에서 연합이 수행될 때, 이미지 서브파일 디렉토리에 대해서만 연합이 수행되고, 그 후 연합된 디렉토리가 LibOS에 마운팅되지만, 적어도 하나의 판독가능/기입가능 디렉토리와의 연합은 수행되지 않는다. 또한, 실시예 5에서와 유사하게, LibOS 내에 판독가능/기입가능 디렉토리(/write3)가 설정된다.
실시예 5에서의 방법과 유사하게, 애플리케이션은 LibOS 내의 보통 파일 시스템을 이용하여 판독가능/기입가능 디렉토리(/write3)에 액세스한다.
애플리케이션은 실시예 3 및 실시예 4에서의 방법들을 이용하여 마운팅되는 디렉토리 내의 파일(호스트 OS 내의 연합 디렉토리 내의 파일에 대응함)에 판독-액세스할 수 있다.
마운팅되는 디렉토리 내의 파일이 수정될 필요가 있다면, 실시예 3 및 실시예 4에서의 방법들을 이용하여 대응하는 파일이 판독되고, LibOS 내의 판독가능/기입가능 디렉토리에 복사되고, 그 후 수정될 수 있다. 후속하여, 그 파일은 LibOS 내의 판독가능/기입가능 디렉토리 내의 파일에 기초하여 액세스될 수 있다. 전술한 실시예들에서는, 연합 파일 시스템이 적어도 하나의 판독가능/기입가능 디렉토리 및 이미지 서브파일 디렉토리에 대해 연합을 수행하고, 따라서, 연합 파일 시스템은 이 단계를 완료하는 데 도움이될 수 있다. 그러나, 이 실시예에서는, 어떠한 연합 파일 시스템도 사용되지 않고, 따라서, 이미지 서브파일은 이 단계에서 설명된 방법을 이용하여 수정될 필요가 있다.
실시예 7
도 15를 참조하여, 전술한 실시예들 모두에 기초하여, 본 발명의 이 실시예는 하이퍼바이저(Hypervisor)(71) 및 라이브러리 운영 시스템 엔진(LibOS Engine)(72)을 포함하는 전자 디바이스(70)를 개시한다. 하이퍼바이저 및 LibOS 엔진은 호스트 운영 시스템(Host OS) 상에서 실행되고, 하이퍼바이저, LibOS 엔진, 및 호스트 OS는 호스트 모드에서 실행된다. 라이브러리 운영 시스템 엔진은 라이브러리 운영 시스템 인스턴스를 실행할 수 있다.
다른 실시예에서, 전자 디바이스(70)는 하이퍼바이저(71), 라이브러리 운영 시스템 엔진(72), 및 호스트 운영 시스템(73)을 포함할 수 있다.
모듈들 각각은 소프트웨어의 형태로 실행될 수 있다. 특정 기능 및 방법 절차에 대해서는, 전술한 실시예들에서의 특정 설명들을 참조한다.
도 16을 참조하여, 다른 실시예에서, 전자 디바이스(710)는 하이퍼바이저(711) 및 라이브러리 운영 시스템 엔진(712)을 포함한다. 모듈들의 기능들에 대해서는, 전술한 실시예들에서의 설명들을 참조한다.
실시예 8
도 17을 참조하여, 전술한 실시예들 모두에 기초하여, 본 발명의 이 실시예는 프로세서(81) 및 스토리지(82)를 포함하는 전자 디바이스(80)를 개시한다. 스토리지는 하이퍼바이저 및 라이브러리 운영 시스템 엔진에 의한 실행을 위해 요구되는 코드를 저장하도록 구성된다. 프로세서는 코드에 따라 대응하는 동작을 수행하도록 구성된다. 스토리지는 구체적으로 비휘발성 메모리(예컨대 하드 디스크 또는 디스크) 또는 메모리일 수 있다. 통상, 비휘발성 메모리는 부트 파일과 같은 유지될 필요가 있는 파일을 저장하도록 구성된다. 메모리는 실행 중인 프로세스 데이터를 저장하도록 구성된다.
다른 실시예에서, 스토리지는 하이퍼바이저, 라이브러리 운영 시스템 엔진, 및 호스트 운영 시스템에 의해 전술한 실시예들에서의 단계들을 수행하기 위해 요구되는 코드를 저장하도록 구성된다. 프로세서는 코드에 따라 대응하는 동작을 수행하도록 구성된다.
다른 실시예에서, 스토리지는 도 16 또는 도 17에 도시된 전자 디바이스 내의 관련 모듈들에 대한 코드를 저장하도록 구성된다.
전자 디바이스는 통신 분야 내의 디바이스 또는 컴퓨팅 분야 내의 디바이스와 같은 다양한 분야들에서 사용되는 디바이스일 수 있고, 구체적으로 단말기, 서버, 라우터, 스위치 등일 수 있다.
실시예 9
도 18을 참조하여, 전술한 실시예들에 기초하여, 이 실시예는 저장 매체(90)를 개시한다. 저장 매체는 프로세서에 의해 전술한 실시예들을 수행하기 위한 코드를 저장한다. 바람직하게는, 이 실시예에서, 저장 매체는 하이퍼바이저(91) 및 라이브러리 운영 시스템 엔진(92)을 실행하기 위해 요구되는 코드를 저장할 수 있다. 대안적으로, 이 실시예에서, 저장 매체는 하이퍼바이저(91), 라이브러리 운영 시스템 엔진(92), 및 호스트 운영 시스템(93)을 실행하기 위해 요구되는 코드를 저장할 수 있다.
다른 실시예에서, 저장 매체는 도 16 또는 도 17에 도시된 전자 디바이스 내의 관련 모듈들에 대한 코드를 저장하도록 구성된다.
이 실시예에서의 저장 매체는 자기 디스크, 광 디스크, 또는 하드 디스크와 같은 비휘발성 저장 매체일 수 있다.
본 출원의 목적, 기술적 해결책, 및 이점을 상세히 더 설명하기 위해 실시예들의 예들이 위에 제공되어 있다. 전술한 것은 단지 본 출원의 실시예들의 예들에 불과하고, 본 출원을 제한하도록 의도되지 않는다는 것을 이해해야 한다. 본 발명의 사상 및 원리로부터 벗어나지 않고서 이루어지는 임의의 수정, 등가의 대체, 및 개선은 본 출원의 보호 범위 내에 속해야 한다.

Claims (21)

  1. 호스트 운영 시스템 내의 파일에 액세스하기 위해 사용되는, 가상화 인스턴스의 파일 액세스 방법으로서, 하이퍼바이저(hypervisor) 및 라이브러리 운영 시스템 엔진이 상기 호스트 운영 시스템 상에서 실행되고, 상기 호스트 운영 시스템, 상기 하이퍼바이저, 및 상기 라이브러리 운영 시스템 엔진은 호스트 모드에서 실행되고; 상기 방법은:
    상기 라이브러리 운영 시스템 엔진에 의해, 라이브러리 운영 시스템에 기초하여 라이브러리 운영 시스템 인스턴스의 이미지 파일을 획득하는 단계 - 상기 이미지 파일은 복수의 이미지 서브파일을 포함하고, 상기 복수의 이미지 서브파일은 하나 이상의 이미지 층으로서 지정됨 -; 및 상기 이미지 파일로부터 상기 복수의 이미지 서브파일을 획득하고, 상기 복수의 이미지 서브파일에 의해 지정된 상기 하나 이상의 이미지 층에 따라, 상기 복수의 이미지 서브파일을 상기 호스트 운영 시스템 내에 있고 상기 하나 이상의 이미지 층에 일 대 일 대응하는 복수의 이미지 서브파일 디렉토리에 저장하는 단계;
    연합 파일 시스템을 이용하여, 모든 이미지 서브파일 디렉토리들에 대해 제1 연합을 수행하고 연합된 디렉토리를 제1 연합 디렉토리에 마운팅하는 단계 - 상기 제1 연합 디렉토리는 적어도 하나의 연합 디렉토리 파일을 포함하고, 상기 제1 연합에 기초하여 상기 적어도 하나의 연합 디렉토리 파일에 의해 형성된 하나 이상의 연합 층이 상기 하나 이상의 이미지 층에 일 대 일 대응함 -;
    상기 라이브러리 운영 시스템 엔진에 의해 상기 복수의 이미지 서브파일 중 하나 이상에 기초하여 게스트 모드에서, 상기 라이브러리 운영 시스템 인스턴스를 실행하는 단계; 및
    상기 라이브러리 운영 시스템이, 상기 라이브러리 운영 시스템 인스턴스 내의 애플리케이션으로부터, 상기 연합 디렉토리 파일에 액세스하기 위해 사용되는 제1 액세스 요청을 수신할 때, 중앙 처리 유닛으로 하여금 상기 게스트 모드로부터 상기 호스트 모드로 스위칭하는 엑시트 이벤트(exit event)를 생성하게 하는 단계 - 따라서 상기 하이퍼바이저가 상기 엑시트 이벤트를 캡처하고, 상기 제1 액세스 요청을, 호스트 운영 시스템 콜에 기초하여 상기 호스트 모드에서, 상기 연합 디렉토리 파일에 대응하는 이미지 서브파일에 액세스하는 데 사용될 수 있는 제2 액세스 요청으로 변환하는 처리를 수행하고, 상기 제2 액세스 요청에 기초하여, 상기 연합 디렉토리 파일에 대응하는 이미지 서브파일에 액세스하게 됨 - 를 포함하고,
    상기 제1 연합 디렉토리는 상기 라이브러리 운영 시스템 내에 있고, 연합 파일 시스템을 이용하여, 모든 이미지 서브파일 디렉토리들에 대해 제1 연합을 수행하고 연합된 디렉토리를 제1 연합 디렉토리에 마운팅하는 단계는:
    상기 라이브러리 운영 시스템 엔진에 의해, 상기 복수의 이미지 서브파일 디렉토리를 상기 라이브러리 운영 시스템 내의 하나 이상의 마운트 디렉토리에 마운팅하는 단계; 및
    상기 라이브러리 운영 시스템에 의해, 상기 라이브러리 운영 시스템에 포함된 연합 파일 시스템을 이용하여, 상기 라이브러리 운영 시스템 내의 상기 하나 이상의 마운트 디렉토리 및 적어도 하나의 보통 파일 시스템 기반 판독가능/기입가능 디렉토리에 대해 상기 제1 연합을 수행하고 연합된 디렉토리를 상기 제1 연합 디렉토리에 마운팅하는 단계를 포함하고, 상기 적어도 하나의 판독가능/기입가능 디렉토리의 속성이 상기 연합 파일 시스템에서 판독가능/기입가능하거나;
    상기 제1 연합 디렉토리는 상기 라이브러리 운영 시스템 내에 있고, 연합 파일 시스템을 이용하여, 모든 이미지 서브파일 디렉토리들에 대해 제1 연합을 수행하고 연합된 디렉토리를 제1 연합 디렉토리에 마운팅하는 단계는:
    상기 라이브러리 운영 시스템 엔진에 의해, 상기 복수의 이미지 서브파일 디렉토리를 상기 라이브러리 운영 시스템 내의 하나 이상의 마운트 디렉토리에 마운팅하는 단계; 및
    상기 라이브러리 운영 시스템에 의해, 상기 라이브러리 운영 시스템에 포함된 연합 파일 시스템을 이용하여, 상기 하나 이상의 마운트 디렉토리에 대해 상기 제1 연합을 수행하고 연합된 디렉토리를 상기 제1 연합 디렉토리에 마운팅하는 단계를 포함하거나;
    상기 제1 연합 디렉토리는 상기 호스트 운영 시스템 내에 있고, 연합 파일 시스템을 이용하여, 모든 이미지 서브파일 디렉토리들에 대해 제1 연합을 수행하고 연합된 디렉토리를 제1 연합 디렉토리에 마운팅하는 단계는:
    상기 라이브러리 운영 시스템 엔진에 의해, 상기 호스트 운영 시스템 내의 연합 파일 시스템을 이용하여, 상기 호스트 운영 시스템 내의 상기 복수의 이미지 서브파일 디렉토리 및 적어도 하나의 판독가능/기입가능 디렉토리에 대해 상기 제1 연합을 수행하고 연합된 디렉토리를 상기 제1 연합 디렉토리에 마운팅하는 단계를 포함하고, 상기 제1 연합 동안 상기 적어도 하나의 판독가능/기입가능 디렉토리의 속성이 판독가능/기입가능하고;
    상기 방법은:
    상기 라이브러리 운영 시스템 엔진에 의해, 상기 제1 연합 디렉토리를 상기 라이브러리 운영 시스템 내의 마운트 디렉토리에 마운팅하는 단계; 및
    상응하여, 상기 라이브러리 운영 시스템 인스턴스 내의 애플리케이션이 상기 연합 디렉토리 파일에 액세스할 필요가 있을 때, 상기 마운트 디렉토리를 통해 상기 연합 디렉토리 파일에 액세스하는 단계를 추가로 포함하거나,
    상기 제1 연합 디렉토리는 상기 호스트 운영 시스템 내에 있고, 연합 파일 시스템을 이용하여, 모든 이미지 서브파일 디렉토리들에 대해 제1 연합을 수행하고 연합된 디렉토리를 제1 연합 디렉토리에 마운팅하는 단계는:
    상기 라이브러리 운영 시스템 엔진에 의해, 상기 호스트 운영 시스템 내의 연합 파일 시스템을 호출함으로써, 모든 이미지 서브파일 디렉토리들에 대해 상기 제1 연합을 수행하고 상기 연합된 디렉토리를 상기 제1 연합 디렉토리에 마운팅하는 단계를 포함하고,
    상기 방법은:
    상기 라이브러리 운영 시스템 엔진에 의해, 상기 제1 연합 디렉토리를 상기 라이브러리 운영 시스템 인스턴스 내의 마운트 디렉토리에 마운팅하는 단계; 및
    상기 라이브러리 운영 시스템에 의해, 상기 라이브러리 운영 시스템에 포함된 연합 파일 시스템을 호출함으로써, 상기 라이브러리 운영 시스템 내의 상기 마운트 디렉토리 및 적어도 하나의 판독가능/기입가능 디렉토리에 대해 제2 연합을 수행하고 연합된 디렉토리를 제2 연합 디렉토리에 마운팅하는 단계를 추가로 포함하고, 상기 적어도 하나의 판독가능/기입가능 디렉토리의 속성이 상기 라이브러리 운영 시스템 내의 상기 연합 파일 시스템에서 판독가능/기입가능한, 방법.
  2. 제1항에 있어서, 상기 방법은:
    상기 라이브러리 운영 시스템이 상기 판독가능/기입가능 디렉토리 내의 파일에 액세스하기 위해 사용되는 제3 액세스 요청을 수신할 때, 상기 라이브러리 운영 시스템 내의 보통 파일 시스템에 기초하여, 상기 판독가능/기입가능 디렉토리 내의 상기 파일에 액세스하는 단계를 추가로 포함하는, 방법.
  3. 제1항에 있어서, 중앙 처리 유닛으로 하여금 상기 게스트 모드로부터 상기 호스트 모드로 스위칭하는 엑시트 이벤트를 생성하게 하는 단계는:
    상기 연합 디렉토리 파일에 액세스하기 위해 상기 라이브러리 운영 시스템 내의 커스터마이즈된 파일 시스템을 호출함으로써, 상기 중앙 처리 유닛으로 하여금 상기 엑시트 이벤트를 생성하게 하는 단계를 포함하고, 상기 커스터마이즈된 파일 시스템은, 상기 제1 액세스 요청에 따라, 상기 중앙 처리 유닛으로 하여금 상기 엑시트 이벤트를 생성하게 할 수 있는 파일 시스템인, 방법.
  4. 제1항에 있어서, 상기 이미지 서브파일 디렉토리의 속성이 상기 제1 연합 디렉토리에서 판독 전용인, 방법.
  5. 제1항에 있어서,
    상기 엑시트 이벤트는 상기 라이브러리 운영 시스템이 하이퍼콜 명령어를 호출할 때 생성되거나, 상기 라이브러리 운영 시스템이 예외를 구성할 때 생성되는, 방법.
  6. 호스트 운영 시스템 내의 파일에 액세스하도록 구성된 가상화 인스턴스의 층 기반 파일 액세스 전자 디바이스로서, 상기 전자 디바이스는 상기 호스트 운영 시스템 상에서 실행되는 하이퍼바이저 및 라이브러리 운영 시스템 엔진을 포함하고, 상기 하이퍼바이저, 상기 라이브러리 운영 시스템 엔진, 및 상기 호스트 운영 시스템은 호스트 모드에서 실행되고;
    상기 라이브러리 운영 시스템 엔진은 라이브러리 운영 시스템에 기초하여 라이브러리 운영 시스템 인스턴스의 이미지 파일을 획득하도록 구성되고, 상기 이미지 파일은 복수의 이미지 서브파일을 포함하고, 상기 복수의 이미지 서브파일은 하나 이상의 이미지 층으로서 지정되고; 상기 라이브러리 운영 시스템 엔진은 상기 이미지 파일로부터 상기 복수의 이미지 서브파일을 획득하고, 상기 복수의 이미지 서브파일에 의해 지정된 상기 하나 이상의 이미지 층에 따라, 상기 복수의 이미지 서브파일을 상기 호스트 운영 시스템 내에 있고 상기 하나 이상의 이미지 층에 일 대 일 대응하는 복수의 이미지 서브파일 디렉토리에 저장하도록 추가로 구성되고;
    상기 라이브러리 운영 시스템, 또는 상기 라이브러리 운영 시스템 엔진, 또는 상기 라이브러리 운영 시스템 및 상기 라이브러리 운영 시스템 엔진은, 연합 파일 시스템을 이용하여, 모든 이미지 서브파일 디렉토리들에 대해 제1 연합을 수행하고 연합된 디렉토리를 제1 연합 디렉토리에 마운팅하도록 구성되고, 상기 제1 연합 디렉토리는 적어도 하나의 연합 디렉토리 파일을 포함하고, 상기 제1 연합에 기초하여 상기 적어도 하나의 연합 디렉토리 파일에 의해 형성된 하나 이상의 연합 층이 상기 하나 이상의 이미지 층에 일 대 일 대응하고;
    상기 라이브러리 운영 시스템 엔진은, 상기 라이브러리 운영 시스템 엔진에 의해 획득된 상기 복수의 이미지 서브파일 중 하나 이상에 기초하여, 게스트 모드에서 상기 라이브러리 운영 시스템 인스턴스를 실행하도록 추가로 구성되고;
    상기 라이브러리 운영 시스템은: 상기 라이브러리 운영 시스템 인스턴스 내의 애플리케이션으로부터, 상기 연합 디렉토리 파일에 액세스하기 위해 사용되는 제1 액세스 요청을 수신할 때, 중앙 처리 유닛으로 하여금 상기 게스트 모드로부터 상기 호스트 모드로 스위칭하는 엑시트 이벤트를 생성하게 하도록 구성되고;
    상기 하이퍼바이저는: 상기 라이브러리 운영 시스템에 의해 생성된 상기 엑시트 이벤트를 캡처하고; 상기 제1 액세스 요청을, 호스트 운영 시스템 콜에 기초하여 상기 호스트 모드에서, 상기 연합 디렉토리 파일에 대응하는 이미지 서브파일에 액세스하는 데 사용될 수 있는 제2 액세스 요청으로 변환하는 처리를 수행하고; 상기 제2 액세스 요청에 기초하여, 상기 연합 디렉토리 파일에 대응하는 이미지 서브파일에 액세스하도록 구성되고,
    상기 제1 연합 디렉토리는 상기 라이브러리 운영 시스템 내에 있고, 상기 제1 연합 및 마운팅은 상기 라이브러리 운영 시스템 및 상기 라이브러리 운영 시스템 엔진에 의해 수행되고, 구체적으로, 상기 라이브러리 운영 시스템 및 상기 라이브러리 운영 시스템 엔진이 상기 제1 연합 및 마운팅을 수행하도록 구성될 때,
    상기 라이브러리 운영 시스템은 구체적으로 상기 복수의 이미지 서브파일 디렉토리를 상기 라이브러리 운영 시스템 내의 하나 이상의 마운트 디렉토리에 마운팅하도록 구성되고;
    상기 라이브러리 운영 시스템은 구체적으로, 상기 라이브러리 운영 시스템에 포함된 연합 파일 시스템을 이용하여, 상기 라이브러리 운영 시스템 내의 상기 하나 이상의 마운트 디렉토리 및 적어도 하나의 보통 파일 시스템 기반 판독가능/기입가능 디렉토리에 대해 상기 제1 연합을 수행하고 연합된 디렉토리를 상기 제1 연합 디렉토리에 마운팅하도록 구성되고, 상기 적어도 하나의 판독가능/기입가능 디렉토리의 속성이 상기 연합 파일 시스템에서 판독가능/기입가능하거나;
    상기 제1 연합 디렉토리는 상기 라이브러리 운영 시스템 내에 있고, 상기 제1 연합 및 마운팅은 상기 라이브러리 운영 시스템 및 상기 라이브러리 운영 시스템 엔진에 의해 수행되고, 구체적으로, 상기 라이브러리 운영 시스템 및 상기 라이브러리 운영 시스템 엔진이 상기 제1 연합 및 마운팅을 수행하도록 구성될 때,
    상기 라이브러리 운영 시스템 엔진은 구체적으로 상기 복수의 이미지 서브파일 디렉토리를 상기 라이브러리 운영 시스템 내의 하나 이상의 마운트 디렉토리에 마운팅하도록 구성되고;
    상기 라이브러리 운영 시스템은 구체적으로, 상기 라이브러리 운영 시스템에 포함된 연합 파일 시스템을 이용하여, 상기 하나 이상의 마운트 디렉토리에 대해 상기 제1 연합을 수행하고 연합된 디렉토리를 상기 제1 연합 디렉토리에 마운팅하도록 구성되거나,
    상기 제1 연합 디렉토리는 상기 호스트 운영 시스템 내에 있고, 상기 제1 연합 및 마운팅은 상기 라이브러리 운영 시스템 엔진에 의해 수행되고, 구체적으로, 상기 라이브러리 운영 시스템 엔진이 상기 제1 연합 및 마운팅을 수행하도록 구성될 때,
    상기 라이브러리 운영 시스템 엔진은 구체적으로, 상기 호스트 운영 시스템 내의 연합 파일 시스템을 이용하여, 상기 호스트 운영 시스템 내의 상기 복수의 이미지 서브파일 디렉토리 및 적어도 하나의 판독가능/기입가능 디렉토리에 대해 상기 제1 연합을 수행하고 연합된 디렉토리를 상기 제1 연합 디렉토리에 마운팅하도록 구성되고, 상기 제1 연합 동안 상기 적어도 하나의 판독가능/기입가능 디렉토리의 속성이 판독가능/기입가능하고;
    상기 라이브러리 운영 시스템 엔진은 상기 제1 연합 디렉토리를 상기 라이브러리 운영 시스템 내의 마운트 디렉토리에 마운팅하는 추가로 구성되고; 상응하여, 상기 라이브러리 운영 시스템 인스턴스 내의 애플리케이션이 상기 연합 디렉토리 파일에 액세스할 필요가 있을 때, 상기 마운트 디렉토리를 통해 상기 연합 디렉토리 파일이 액세스되거나,
    상기 제1 연합 디렉토리는 상기 호스트 운영 시스템 내에 있고, 상기 제1 연합 및 마운팅은 상기 라이브러리 운영 시스템 엔진에 의해 수행되고, 구체적으로, 상기 라이브러리 운영 시스템 엔진이 상기 제1 연합 및 마운팅을 수행하도록 구성될 때,
    상기 라이브러리 운영 시스템 엔진은 구체적으로, 상기 호스트 운영 시스템 내의 연합 파일 시스템을 호출함으로써, 모든 이미지 서브파일 디렉토리들에 대해 상기 제1 연합을 수행하고 상기 연합된 디렉토리를 상기 제1 연합 디렉토리에 마운팅하도록 구성되고,
    상기 라이브러리 운영 시스템 엔진은 상기 제1 연합 디렉토리를 상기 라이브러리 운영 시스템 인스턴스 내의 마운트 디렉토리에 마운팅하도록 추가로 구성되고;
    상기 라이브러리 운영 시스템은, 상기 라이브러리 운영 시스템에 포함된 연합 파일 시스템을 호출함으로써, 상기 라이브러리 운영 시스템 내의 상기 마운트 디렉토리 및 적어도 하나의 판독가능/기입가능 디렉토리에 대해 제2 연합을 수행하고 연합된 디렉토리를 제2 연합 디렉토리에 마운팅하도록 추가로 구성되고, 상기 적어도 하나의 판독가능/기입가능 디렉토리의 속성이 상기 라이브러리 운영 시스템 내의 상기 연합 파일 시스템에서 판독가능/기입가능한, 전자 디바이스.
  7. 제6항에 있어서, 상기 라이브러리 운영 시스템은: 상기 라이브러리 운영 시스템이 상기 판독가능/기입가능 디렉토리 내의 파일에 액세스하기 위해 사용되는 제3 액세스 요청을 수신할 때, 상기 라이브러리 운영 시스템 내의 보통 파일 시스템에 기초하여, 상기 판독가능/기입가능 디렉토리 내의 상기 파일에 액세스하도록 추가로 구성되는, 전자 디바이스.
  8. 제6항에 있어서, 상기 중앙 처리 유닛으로 하여금 상기 게스트 모드로부터 상기 호스트 모드로 스위칭하는 엑시트 이벤트를 생성하게 하는 것은:
    상기 연합 디렉토리 파일에 액세스하기 위해 상기 라이브러리 운영 시스템 내의 커스터마이즈된 파일 시스템을 호출함으로써, 상기 중앙 처리 유닛으로 하여금 상기 엑시트 이벤트를 생성하게 하는 것을 포함하고, 상기 커스터마이즈된 파일 시스템은, 상기 제1 액세스 요청에 따라, 상기 중앙 처리 유닛으로 하여금 상기 엑시트 이벤트를 생성하게 할 수 있는 파일 시스템인, 전자 디바이스.
  9. 제6항에 있어서, 상기 제1 연합 동안 상기 이미지 서브파일 디렉토리의 속성이 판독 전용인, 전자 디바이스.
  10. 제6항에 있어서,
    상기 엑시트 이벤트는 상기 라이브러리 운영 시스템이 하이퍼콜 명령어를 호출할 때 생성되거나, 상기 라이브러리 운영 시스템이 예외를 구성할 때 생성되는, 전자 디바이스.
  11. 컴퓨터 판독가능 명령어들을 포함하는 컴퓨터 판독가능 저장 매체에 저장된 컴퓨터 프로그램으로서,
    상기 컴퓨터 판독가능 명령어들은 하나 이상의 프로세서에 의해 실행될 때 상기 하나 이상의 프로세서로 하여금 제1항 내지 제5항 중 어느 한 항의 방법을 구현하게 하는, 컴퓨터 판독가능 저장 매체에 저장된 컴퓨터 프로그램.
  12. 삭제
  13. 삭제
  14. 삭제
  15. 삭제
  16. 삭제
  17. 삭제
  18. 삭제
  19. 삭제
  20. 삭제
  21. 삭제
KR1020197012194A 2016-09-30 2017-09-29 가상화 인스턴스 내의 파일의 계층화된 액세스를 위한 방법 및 장치 KR102238942B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
CN201610874195.1 2016-09-30
CN201610874195.1A CN107885748B (zh) 2016-09-30 2016-09-30 虚拟化实例的文件分层访问方法和装置
PCT/CN2017/104409 WO2018059545A1 (zh) 2016-09-30 2017-09-29 虚拟化实例的文件分层访问方法和装置

Publications (2)

Publication Number Publication Date
KR20190058596A KR20190058596A (ko) 2019-05-29
KR102238942B1 true KR102238942B1 (ko) 2021-04-12

Family

ID=61763705

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020197012194A KR102238942B1 (ko) 2016-09-30 2017-09-29 가상화 인스턴스 내의 파일의 계층화된 액세스를 위한 방법 및 장치

Country Status (5)

Country Link
US (1) US11010355B2 (ko)
EP (1) EP3518116A1 (ko)
KR (1) KR102238942B1 (ko)
CN (1) CN107885748B (ko)
WO (1) WO2018059545A1 (ko)

Families Citing this family (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109445861B (zh) * 2018-10-18 2022-04-01 深圳市网心科技有限公司 系统启动方法、装置、计算机装置及存储介质
CN111459623B (zh) * 2019-01-18 2024-04-12 华为技术有限公司 应用程序恢复运行的方法、装置及计算机
CN110007863B (zh) * 2019-04-10 2022-06-17 苏州浪潮智能科技有限公司 一种基于lib库接口的存储服务访问方法及相关装置
CN110120940B (zh) * 2019-04-12 2020-07-07 华中科技大学 一种面向Docker容器的文件系统资源隔离方法
US20220222223A1 (en) * 2021-01-12 2022-07-14 Vmware, Inc. Virtual computing instance based system to support union mount on a platform
TWI806341B (zh) * 2022-01-06 2023-06-21 威聯通科技股份有限公司 主機的容器系統、動態掛載主機資料至容器的方法及應用程式
CN114936066A (zh) * 2022-04-15 2022-08-23 支付宝(杭州)信息技术有限公司 镜像堆叠方法、装置、设备、介质及程序产品
CN116701299B (zh) * 2022-12-09 2024-03-26 荣耀终端有限公司 一种目录管理方法及相关装置

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20120227061A1 (en) 2011-03-03 2012-09-06 Microsoft Corporation Application compatibility with library operating systems
CN105740044A (zh) 2016-01-25 2016-07-06 华中科技大学 一种缩减宿主型虚拟化软件可信计算基的方法

Family Cites Families (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7293033B1 (en) * 2002-03-27 2007-11-06 Swsoft Holdings, Ltd. System and method for providing effective file-sharing in a computer system to allow concurrent multi-user access
US7107385B2 (en) 2002-08-09 2006-09-12 Network Appliance, Inc. Storage virtualization by layering virtual disk objects on a file system
US8239938B2 (en) 2008-12-08 2012-08-07 Nvidia Corporation Centralized device virtualization layer for heterogeneous processing units
US9069596B2 (en) 2009-11-17 2015-06-30 International Business Machines Corporation Hypervisor file system
US8291135B2 (en) * 2010-01-15 2012-10-16 Vmware, Inc. Guest/hypervisor interrupt coalescing for storage adapter virtual function in guest passthrough mode
US9792131B1 (en) * 2010-05-28 2017-10-17 Bromium, Inc. Preparing a virtual machine for template creation
CN102736945B (zh) 2011-03-31 2016-05-18 国际商业机器公司 一种运行应用程序的多个实例的方法和系统
US9075638B2 (en) 2012-08-14 2015-07-07 Atlassian Corporation Pty Ltd. Efficient hosting of virtualized containers using read-only operating systems
CN104021063B (zh) * 2014-05-14 2015-03-11 南京大学 一种基于硬件虚拟化的模块化计算机取证系统及其方法
US10809998B2 (en) * 2016-02-12 2020-10-20 Nutanix, Inc. Virtualized file server splitting and merging

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20120227061A1 (en) 2011-03-03 2012-09-06 Microsoft Corporation Application compatibility with library operating systems
CN105740044A (zh) 2016-01-25 2016-07-06 华中科技大学 一种缩减宿主型虚拟化软件可信计算基的方法

Also Published As

Publication number Publication date
EP3518116A4 (en) 2019-07-31
WO2018059545A1 (zh) 2018-04-05
CN107885748B (zh) 2021-10-26
US20190227995A1 (en) 2019-07-25
EP3518116A1 (en) 2019-07-31
US11010355B2 (en) 2021-05-18
CN107885748A (zh) 2018-04-06
KR20190058596A (ko) 2019-05-29

Similar Documents

Publication Publication Date Title
KR102238942B1 (ko) 가상화 인스턴스 내의 파일의 계층화된 액세스를 위한 방법 및 장치
US11556367B2 (en) Dynamic image composition for container deployment
KR101793306B1 (ko) 가상 애플리케이션 확장 포인트
US9639432B2 (en) Live rollback for a computing environment
US10649802B2 (en) Component based dynamic guest instantiation
US10048960B2 (en) Identifying source code used to build executable files
US10101915B2 (en) Methods and apparatus to manage inter-virtual disk relations in a modularized virtualization topology using virtual hard disks
US9928010B2 (en) Methods and apparatus to re-direct detected access requests in a modularized virtualization topology using virtual hard disks
US11775475B2 (en) Deferred path resolution during container deployment
US11061695B2 (en) Unikernel provisioning
US9804789B2 (en) Methods and apparatus to apply a modularized virtualization topology using virtual hard disks
US20230266984A1 (en) Container-based operating system translation
US9292318B2 (en) Initiating software applications requiring different processor architectures in respective isolated execution environment of an operating system
US10126983B2 (en) Methods and apparatus to enforce life cycle rules in a modularized virtualization topology using virtual hard disks
US11907176B2 (en) Container-based virtualization for testing database system
US20150379039A1 (en) Integrating virtual machine file system into a native file explorer
Okafor et al. Eliminating the operating system via the bare machine computing paradigm
Nikolos et al. Deverlay: Container Snapshots For Virtual Machines
US20210303316A1 (en) Unikernel provisioning
Holt et al. Overview of GNU/Linux
US11886351B2 (en) Memory efficient virtual address management for system calls
Holt et al. Overview of GNU/Linux

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