본 발명의 실시예에 따라 논리적 파티션 사이에서 운용 시스템의 커널을 공유하기 위한 예시의 방법, 시스템 및 제품이 도 1에서 시작하여 첨부한 도면을 참조하여 설명된다. 본 발명에 따라 논리적 파티션 사이에서 운용 시스템의 커널을 공유하는 것은 자동 컴퓨팅 기기, 즉 하나 이상의 컴퓨터 상에서 구현된다. 도 1 은 본 발명의 실시예에 따라 논리적 파티션 사이에서 운용 시스템의 커널을 공유하는 데에 유용한 예시의 컴퓨터(152)를 포함하는 자동 컴퓨팅 기기의 블럭도를 나타낸다. 도 1의 컴퓨터(152)는 몇개의 물리적 프로세서(156) 뿐만 아니라 물리적 프로세서 및 그 외 컴퓨터의 다른 구성 요소에 시스템 버스(160)를 통해 연결된 랜던 액세스 메모리 ("RAM")(168)를 포함한다.
RAM(168)에는 논리적 파티션(408), 어플리케이션 프로그램(412), 운용 시스템(154), 논리적 프로세서(106), 파티션 관리기(422), 커널(416), 및 가상 프로세서(122)가 저장된다. 논리적 파티션 ("LPAR)(408)은 컴퓨터 기능이 둘 이상의 개별적 컴퓨터인 것처럼 하기 위해 단일의 컴퓨터 내에서 컴퓨터 리소스의 분산을 가능하게 하는 데이터 구조와 서비스의 세트이다. 각 논리적 파티션에는 프로세서 시간, 메모리, 운용 시스템 등을 포함하는 독립 컴퓨터인 것 처럼 동작하는 데에 필요한 모든 리소스가 할당된다. 논리적 파티션과 논리적 파티션에 의해 어플리케이션에 이용할 수 있는 리소스는 때로 함께 "가상 머신"으로 불린다. 설명을 간소하게 하기 위해, 도 1의 시스템은 하나의 논리적 파티션만을 포함하지만, 본 발명의 실시예에 따라 논리적 파티션 사이에서 커널을 공유하는 시스템은 다수의 논리적 파티션을 지원할 수 있다.
응용 프로그램(412)은 유저 레벨의 컴퓨터 프로그램 코드의 모듈이다. 응용 프로그램은 운용 시스템에 의한 커널 호출로 컴퓨터 리소스에의 액세스를 성취해야 하는 비특권 코드이다.
운용 시스템(154)는 스레드를 스케줄하며 메모리 액세스, 입/출력 리소스에의 액세스 등을 포함하여, 시스템 리소스를 스레드에 이용 가능하게 하는 기능을 제공하는 시스템 소프트웨어의 층이다. 운용 시스템은 또한 컴퓨터 리소스에의 액세스를 위한 할당 및 인가를 제어한다. 운용 시스템은 키보드로부터의 입력을 인식하고, 디스플레이 스크린으로 출력을 보내고, 자기 디스크 드라이브 상의 파일과 디렉토리를 추적하고, 디스크 드라이브와 프린터 등의 주변 장치를 제어하는 등과 같이, 저 레벨의 기본 태스크를 실행한다. 운용 시스템은 또한 보안의 책임이 있어, 비인증된 유저가 시스템에 액세스하지 못하고, 스레드가 액세스 인가된 리소스만 액세스하는 것을 확실히 한다. 많은 운용 시스템 기능은 커널, 이 예에서, 공유 커널에 의해 구현된다. 본 발명의 실시예에 따라 논리적 파티션 사이에서 운용 시스템의 커널을 공유하는 데에 유용한 운용 시스템은 다중 스레딩 운용 시스템으로, 이의 예로는 UNIXTM, LinuxTM, Microsoft XPTM, AIXTM, IBM's i5os, 및 그 외 본 기술의 당업자에게 가능한 것들을 포함한다.
논리적 프로세서(106)는 실행용 스레드를 스케줄링하기 위한 운용 시스템의 구조이다. 즉, 운용 시스템(154)은 물리적 프로세서나 가상 프로세서에서 실행용 스레드를 스케줄링하는 것이 아니고, 논리적 프로세서(106)에서 실행용 스레드를 스케줄링한다. 논리적 프로세서에서 스레드를 스케줄링하게 되면 스레드의 관점에서 보면 스레드는 전체 논리적 파티션의 모든 리소스를 갖는 것으로 보이는 간편한 구조와 처리를 제공하게 된다. 가상 프로세서에는 물리적 프로세서의 기능이 할당된다. 그러나, 논리적 프로세서는 기기 상에서의 모든 다른 실행과 같이 부분적인 타임 슬라이스에서 물리적으로 실행하고 있다는 사실에도 불구하고, 논리적으로 전체 프로세서가 된다. 따라서, LPAR의 논리적 프로세서에서 실행되는 스레드는 그 관점에서 보면 전체 독립적인 컴퓨터의 모든 리소스를 갖는 것으로 보인다. 즉, 논리적 프로세서는 파티션에서 실행되는 운용 시스템의 디스패쳐 (dispatcher)가 스레드를 디스패치하는 대상이며, 가상 프로세서는 파티션 관리기에 의해 디스패치되는 것이다. ST 모드에서 동작하는 LPAR에서, 논리적 프로세서와 가상 프로세서는 각 가상 프로세서에 대해 하나의 논리 프로세서가 일 대 일 대응한다. SMT 모드에서 동작하는 LPAR에서, 논리적 프로세서와 가상 프로세서는 N 대 일 대응하고, 이 때 N은 가상 프로세서 상에서 지원되는 논리적 프로세서의 개수로, 즉 각 가상 프로세서에 대해 N개의 논리적 프로세가 대응한다.
가상 프로세서(122)는 논리적 파티션에 대한 프로세서 시간의 할당을 구현하는 데이터 구조와 컴퓨터 프로그램 명령으로 구성되는 서브시스템이다. 공유 층의 물리적 프로세서는 논리적 파티션에 대한 부분 물리적 프로세서의 (타임 슬라이스) 할당을 지원한다. 타임 슬라이스에서 공유된 이 부분 물리적 프로세서를 "가상 프로세서"로 부른다. 공유된 처리 층에 유지되는 물리적 프로세서는 논리적 파티션 사이에서 공유된다. 이 명세서의 예에서, 물리적 프로세서는 처리 단위에 따라 공유되고, 1.0 처리 단위는 하나의 물리적 프로세서의 처리 용량을 나타낸다. 가상 프로세서 상에서 실행되는 스레드를 할당하는 것은 통상 가상 프로세서의 논리적 프로세서에서 실행되는 스레드를 할당하여 실행된다. ST 모드에서, 각 가상 프로세서는 하나의 논리적 프로세서를 갖는다. 그러나 SMT 모드에서, 각 가상 프로세 서는 두개의 논리적 프로세서를 갖는다.
도 1의 파티션 관리기(422)는 논리적 파티션에서 실행되는 시스템 소프트웨어 층이다. 즉, 파티션 관리기(422)는 논리적 파티션과 물리적 프로세서를 포함하는 하부 컴퓨터 하드웨어, 즉 물리적 컴퓨터 구성 요소 사이에서 실행된다. 파티션 관리기는 다수의 논리적 파티션에서 다수의 운용 시스템과 어플리케이션을 구축하여 실행하는 것을 지원하고 가능하게 한다. 무엇보다도, 파티션 관리기는 유저또는 시스템 관리자의 구축 파티션, 가상 프로세서 및 논리적 프로세서를 지원한다. 다수의 논리적 파티션을 지원하는 컴퓨터에서의 운용 시스템의 커널이 논리적 프로세서 상에서 스레드를 스케줄하여 디스패치하는 것 같이, 파티션 관리기는 물리적 프로세서 상에서 가상 프로세서를 스케줄하여 디스패치한다. 논리적 파티션에서의 운용 시스템이 특정 어플리케이션이나 어플리케이션의 세트를 실행하는 데에 이용되기 때문에, 파티션은 하나의 컴퓨터에서 다수의 운용 시스템과 이들의 어플리케이션을 실행 가능하게 하여, 전체 하드웨어의 비용을 절감시킨다. 제조 및 테스트 시스템은 동일한 하드웨어에서 동시에 실행될 수 있다. 부가하여, 파티션 관리기가 다수의 논리적 파티션을 지원하므로, 윈도와 리눅스 등의 여러 운용 시스템은 동일한 하부 컴퓨터 하드웨어를 공유할 수 있다. 파티션 관리기는 "수퍼바이저", "가상 관리기", 또는 "가상 기기 모니터"로 불리는 소프트웨어의 종류이다.
도 1의 예에서, 파티션 관리기(422)는 복수의 논리적 파티션에 의해 이용되는 커널 유형(416)를 파티션 관리기에 설치하며 복수의 논리적 파티션 각각에 할당된 컴퓨터 리소스를 지정하는 일반 데이터 구조(420)을 파티션 관리기에 설치할 수 있는 컴퓨터 프로그램 명령을 포함하는 하드웨어 지원을 갖는 컴퓨터 소프트웨어 모듈이다. 파티션 관리기(422)는 그 컨텐츠가 복수의 논리적 파티션 각각에 할당된 컴퓨터 리소스를 지정하는 일반 데이터 구조(420)를 포함한다. 일반 데이터 구조(420)은 글로벌 데이터 구조(426)를 이용하여 구현된다. 글로벌 데이터 구조(426)는 비휘발성 메모리에 저장된 정보로부터 시스템 초기 프로그램 로딩 시간에 로딩된 구조인, "디바이스 트리"로 불리는 종류의 데이터 구조이다. 유닉스의 여러 형상으로, 예를 들어, 디바이스 트리는 저장 경로 위치 '/디바이스', 및 '/dev'에서 디스크 상에 저장된 정보로부터 로딩된다. 이 예에서, 글로벌 데이터 구조(426)는 파티션 관리기에서 커널에 글로벌하게 이용 가능하며 논리적 파티션에 의한 이용을 위해, 즉 논리적 파티션에서 실행되는 어플리케이션에 이용되도록 컴퓨터 시스템에서 이용 가능한 컴퓨터 리소스를 지정한다. 글로벌 데이터 구조(426)와 일반 데이터 구조(420)의 예는 도 7A 및 도 7B를 참조하여 이하 상세히 설명된다.
도 1의 예에서, 파티션 관리기(422)는 도시된 바와 같이, 논리적 파티션(408)에서 운용 시스템(154)으로부터 파티션 관리기로 제거(415)된 커널(416)을 포함한다. 커널은 운용 시스템의 중심이다. 커널은 특권 모듈이거나 '시스템 실행' 또는 '시스템 모니터'로 알려진 모듈이다. 커널은 어플리케이션 및 그 외 다른 운용 시스템 구성 요소에서의 실행 스레드를 대신하여 컴퓨터 시스템 하드웨어에 안정된 액세스를 제공하는 소프트웨어이다 - 메모리에의 액세스, 처리 용량, 입/출력 리소스 등을 포함. 커널은 또한 어프릴케이션 프로그램을 구성하는 실행 스 레드 뿐만 아니라 운용 시스템 프로세스를 스케줄한다. 커널은 또한 메모리 락 (memory locks), 신호 및 세마포어 (semaphore) 등의 프로세스간 통신과 동기화를 위한 서비스를 제공한다. 커널은 또한 하드웨어 앱스트랙션 (hardware abstraction) - 특정 유형의 모든 디바이스에 통상적인 명령의 세트 - 을 제공하여 어플리케이션과 운용 시스템의 다른 구성 요소에게 복잡성을 감추도록 한다. 하드웨어 앱스트랙션 구성 요소는 소프트웨어 드라이버에 따라 달라지므로 하드웨어 디바이스의 제조 사양에 특정적인 기능을 제공하게 된다. 요약하면, 커널은 다음의 커널 서비스를 제공한다:
·시스템 하드웨어에의 액세스를 제어 및 조정
·기초 앱스트랙션을 구현 및 지원: 프로세스, 스레드, 파일, 드라이브 등;
·시스템 리소스를 할당 및 스케줄: 메모리, 프로세서, 디스크, 파일 디스크립터, 프로세스 디스크립터, 스레드 디스크립터 등;
·시스템 리소스의 보안과 보호를 강화; 및
·시스템 호출로 서비스에 대한 유저와 어플리케이션 요청에 응답
도 1의 예에서, 커널(416)은 일반 데이터 구조(420)에 따라 논리적 파티션에 커널 서비스를 제공하도록 본 발명의 실시예에 따라 개선되었다. 부팅 시간에 종래의 커널은 이 종래의 커널이 운용 시스템에 설치되어 있는 경우 시스템의 모든 하드웨어 구성 요소 및 그 외 파티션에서 실행되는 어플리케이션과 그 외 운용 시스템 구성 요소에 이용 가능한 리소스를 지정하는 고유의 디바이스 트리를 로딩한다. 그러나, 커널(416)은 더 이상 하나의 파티션에는 위치하지 않는다. 커 널(416)은 파티션 관리기 공간으로 제거되어 동일한 유형의 운용 시스템과 커널을 이용하는 임의 개수의 논리적 파티션에 의해 이용될 수 있다. 이런 각 논리적 파티션은 컴퓨터 하드웨어의 여러 보완물을 필요로 한다. 파티션 관리기(422)는 각 논리적 파티션에 의해 이용하게 할당된 컴퓨터 하드웨어 및 그 외 이용 가능한 리소스를 지정하는 각 논리적 파티션에 일반 데이터 구조(420)를 제공한다.
도 1의 예에서, 컴퓨터 소프트웨어 구성 요소, 어플리케이션(412), 논리적 파티션(408), 논리적 프로세서(106), 운용 시스템(154), 파티션 관리기(422), 가상 프로세서(122), 커널(416) 등은 RAM(168)에 도시되어 있다. 그러나, 당업자라면 이런 소프트웨어의 많은 구성 요소들은 또한 비휘발성 메모리(166)에 저장될 수 있다는 것이 이해될 것이다. 도 1의 컴퓨터(152)는 프로세서(156)와 그 외 컴퓨터(152)의 구성 요소에 시스템 버스(160)를 통해 결합된 비휘발성 컴퓨터 메모리(166)를 포함한다. 비휘발성 컴퓨터 메모리(166)는 하드 디스크 드라이브(170), 광 디스크 드라이브(172), 전기적 소거 가능한 프로그래머블 판독 전용 메모리 공간 (소위 'EEPROM' 또는 '플래시' 메모리)(174), RAM 드라이브 (도시 생략)으로, 또는 당업자에게는 자명한 다른 종류의 컴퓨터 메모리로 구현될 수 있다.
도 1의 예시의 컴퓨터는 하나 이상의 입/출력 인터페이스 어댑터(178)를 포함한다. 컴퓨터의 입/출력 인터페이스 어댑터는 컴퓨터 디스플레이 스크린과 같은 디스플레이 장치(180)로의 출력과 키보드와 마우스 등의 유저 입력 장치(181)로부터의 유저 입력을 제어하기 위해, 예를 들어, 소프트웨어 드라이버 및 컴퓨터 하드웨어로 유저 지향 입/출력을 구현한다.
도 1의 예시의 컴퓨터(152)는 데이터 통신(184)를 다른 컴퓨터(182)로 구현하기 위한 통신 어댑터(167)를 포함한다. 이 데이터 통신은 예를 들어, IP 네트워크 등의 데이터 통신 네트워크로 - 당업자에게는 자명한 다른 방법으로도 - 실행된다. 통신 어댑터는 하나의 컴퓨터가 직접적으로나 네트워크를 통해 다른 컴퓨터로 데이터 통신을 송신하도록 하는 하드웨어 레벨의 데이터 통신을 구현한다. 본 발명의 실시예에 따라 목적지의 가용성을 판정하는 데에 유용한 통신 어댑터의 예는 유선 다이얼업 통신용 모뎀, 유선 네트워크 통신용 이더넷 (IEEE 802.3) 어댑터, 무선 네트워크 통신용 802.11b 어댑터가 있다.
더욱, 도 2는 본 발명의 실시예에 따라 논리적 파티션 사이에서 운용 시스템의 커널을 공유하기 위한 예시의 시스템을 설명하는 기능 블럭도를 나타낸다. 도 2의 시스템은 ST 모드에 하나(408) SMT 모드에 하나(410)인, 두 논리적 파티션을 포함한다.
도 2의 시스템은 논리적 파티션(408)에 대해 두개(106, 108), 논리적 파티션(410)에 대해 네 개(110, 112, 114, 116)인 6개의 논리적 프로세서를 포함한다. 도 2의 시스템은 또한 논리적 파티션(408)에 할당된 두 개(122, 124)와 논리적 파티션(410)에 할당된 두 개(126, 128)인 4개의 가상 프로세서를 포함한다. 도 2의 시스템은 또한 세 개의 물리적 프로세서(156, 130, 132)를 포함한다. 이 예에서, 세 개의 물리적 프로세서(156, 130, 132)의 처리 용량은 다음과 같이 논리적 파티션에 할당된다:
·물리적 프로세서(156)의 모든 처리 용량이 가상 프로세서(122)에 전부 할 당되어, 논리적 프로세서(106)는 물리적 프로세서(156) 전체가 이용 가능하다.
·물리적 프로세서(130)의 처리 용량의 절반이 가상 프로세서(124)에 할당되어, 논리적 프로세서(108)는 물리적 프로세서(130)의 절반을 타임 슬라이스에서 이용 가능하다.
·물리적 프로세서(130)의 처리 용량의 절반이 가상 프로세서(126)에 할당된다. 가상 프로세서(126)는 가상 프로세서(126)에 대해 두 논리적 프로세서(110, 112)를 갖는 SMT 모드에서 실행되는 논리적 파티션(410)에 할당된다. 논리적 프로세서(110) 및 논리적 프로세서(112) 각각은 물리적 프로세서(130)의 처리 용량의 4분의 1을 타임 슬라이스에서 이용 가능하다.
·물리적 프로세서(132)의 처리 용량 모두가 가상 프로세서(128)에 할당된다. 가상 프로세서(128)는 가상 프로세서(128)에 대해 두 논리적 프로세서(114, 116)를 갖는 SMT 모드에서 실행되는 논리적 파티션(410)에 할당된다. 논리적 프로세서(114) 및 논리적 프로세서(116) 각각은 물리적 프로세서(132)의 처리 용량의 절반을 타임 슬라이스에서 이용 가능하다.
도 2의 시스템은 파티션 관리기(422)를 포함한다. 도 2의 예에서, 파티션 관리기(422)는 복수의 논리적 파티션(408, 410)에 의해 이용되는 커널 유형(416)을 파티션 관리기에 설치하고, 복수의 논리적 파티션 각각에 할당된 컴퓨터 리소스를 지정하는 일반 데이터 구조(420, 421)를 파티션 관리기에 설치하는 단계를 포함하는 본 발명의 실시예에 따른 논리적 파티션 사이에서 운용 시스템의 커널을 공유할 수 있는 컴퓨터 프로그램 명령을 포함한다.
도 2의 시스템은 논리적 파티션(408) 및 논리적 파티션(410) 각각에 하나씩 두 운용 시스템(154, 155)를 포함한다. 이 예에서, 어플리케이션이나 유저에게 직접 액세스 가능한 운용 시스템의 특성은 논리적 파티션에 남아 있는다. 이런 특성은 그래픽 유저 인터페이스 ('GUI')(190, 191)의 지원을 포함한다. 이런 특성은 또한 예를 들어, 운용 시스템 유틸리티와 라이브러리 기능에 대한 명령 라인 인터페이스를 제공하는 셀(shell; 192, 193)의 지원을 포함한다. 어플리케이션이나 유저에게 바로 액세스 가능한 운용 시스템 특성은 또한 예를 들어, 시스템 유틸리티(194, 195)를 포함한다. 시스템 유틸리티는 개발 또는 삭제된 파일을 형성하는 프로그램, 파일 시스템의 디렉토리를 형성하거나 네비게이트하는 프로그램, 환경 변수를 판독하여 설정하는 프로그램, 파일 내의 텍스트 검색 등, GUI 또는 셀을 통해 통상 액세스 가능한 시스템 관리용 프로그램을 포함한다.
어플리케이션이나 유저에게 직저 액세스 가능한 운용 시스템 특성은 시스템 호출(196, 197)의 라이브러리를 또한 포함한다. 시스템 호출 라이브러리는 호출 프로그램이 커널(416) 내측의 특권 소프트웨어 루틴 내로의 호출에 의해 하드웨어에 의한 서비스와 그 외 보호된 시스템 리소스에 액세스할 수 있도록 하는 노출 어플리케이션 프로그래밍 인터페이스 (API)를 노출시킨다. 이런 커널 영역 내의 특권 코드의 호출은 시스템 콜 라이브러리의 함수 내로부터 호출된 인터럽트나 소프트웨어 트랩에 의해 이루어진다. 시스템 호출 라이브러리 내의 함수 호출에의 액세스는 통상 하나 이상의 시스템 호출 라이브러리를 어플리케이션이나 유틸리티 또는 실행 시간에 동적으로 로딩 가능한 다른 라이브러리로 컴파일링하는 것으로 실 행된다.
논리적 파티션(408, 410)은 각각 논리적 파티션의 통상의 위치로부터 제거되어 동일한 커널 유형을 필요로 하는 논리적 파티션에 의해 이용하는 것이 가능한 파티션 관리기 영역에 설치되는 동일한 커널(416)을 공유한다. 커널(416)은 논리적 파티션에 커널 서비스를 제공하며, 이들 각각은 커널을 이용하는 논리적 파티션 각각에 할당된 컴퓨터 리소스를 지정하는 일반 데이터 구조(420, 421)의 이용으로 여러 컴퓨터 리소스를 필요로 한다. 이 예에서, 커널(416)은 논리적 파티션(408, 410)에 각각 하나인 두 개의 일반 데이터 구조(420, 421)을 이용한다.
커널 서비스를 논리적 파티션에 제공하도록 일반 데이터 구조를 이용할 때, 커널(416)은 일반 데이터 구조의 사양을 구분하도록 간접적인 메모리 어드레싱을 구현한다. 이런 간접 어드레싱은 포인터, 일반 데이터 구조 자체에 대한 간접 어드레스 참조로 구현된다. 이런 식으로, 파티션 관리기가 논리적 파티션의 논리적 프로세서를 상태 실행하도록 디스패치할 때, 파티션 관리기는 이 논리적 파티션에 할당된 컴퓨터 리소스를 지정하는 일반 데이터 구조에 대한 포인터를 커널에 제공한다. 이 파티션에서 유저 레벨 소프트웨어로부터의 시스템 호출에 응답하여 커널 서비스를 제공하면서, 커널은 포인터에 의해 어드레스된 일반 데이터 구조로부터의 그 파티션에 대한 리소스의 사양을 이용한다. 논리적 프로세서는 파티션 관리기가 그 하부 가상 프로세서를 디스패칭하는 것으로 디스패치된다. 도 2의 예에서, 가상 프로세서(122)를 디스패칭하는 것은 논리적 프로세서(106)를 디스패치한다. 그러나, 가상 프로세서(126)를 디스패칭하는 것은 SMT 모드에서 실행되는 논리적 파 티션(410)이 가상 프로세서 당 두 개의 논리적 프로세서를 갖기 때문에 논리적 프로세서(110, 112) 둘 다를 디스패치게 된다.
더욱 구체적인 예로: 커널(416)은 파티션 관리기(422)가 논리적 파티션(408)의 논리적 프로세서(106)를 상태 실행하도록 디스패치할 때, 커널을 이용하는 논리적 파티션 각각에 할당된 컴퓨터 리소스를 지정하는 일반 데이터 구조(420, 421)의 이용으로 논리적 파티션에 커널 서비스를 제공할 수 있다. 파티션 관리기(422)는 그 논리적 파티션(408)에 할당된 컴퓨터 리소스를 지정하는 일반 데이터 구조(420)에 대한 포인터(510)를 커널(416)에 제공한다. 포인터(510)는 일반 데이터 구조(420)의 시작 주소인 주소를 포함하고, 이 논리적 파티션(408)에 유저 레벨 소프트웨어로부터의 시스템 호출에 응답하여 커널 서비스를 제공하면서, 커널은 포인터(510)에 의해 어드레스된 일반 데이터 구조(420)로부터의 그 파티션에 대한 리소스의 사양을 이용한다.
유사하게, 파티션 관리기(422)가 논리적 파티션(410)의 논리적 프로세서(110, 112)를 상태 실행하도록 디스패치될 때, 파티션 관리기(422)는 그 논리적 파티션(410)에 할당된 컴퓨터 리소스를 지정하는 일반 데이터 구조(421)에 대한 포인터(510)를 커널(416)에 제공한다. 포인터(510)는 일반 데이터 구조(421)의 시작 주소인, 주소를 포함하며, 그 논리적 파티션(410)의 유저 레벨 소프트웨어로부터의 시스템 호출에 응답하여 커널 서비스를 제공하면서, 커널은 포인터(510)에 의해 어드레스되는 일반 데이터 구조(421)로부터의 그 파티션에 대한 리소스의 사양을 이용한다.
각 경우, 논리적 파티션의 논리적 프로세서를 디스패칭할 때, 커널 서비스를 논리적 파티션에 대한 여러 사양의 리소스로 리디렉트하기 위해, 파티션 관리기(422)는 커널에 이용 가능한 포인터 주소를 유지해야 할 필요가 있다. 새로 디스패치된 논리적 프로세서가 바로 전의 것과 동일한 논리적 파티션으로부터 디스패치된 것이면, 포인터 주소는 이미 정확하게 세트된 것이다. 새로 디스패치된 논리적 프로세서가 바로 전의 것의 논리적 파티션 이외의 것이라면, 포인터 주소는 새로 디스패치된 논리적 프로세서의 논리적 파티션에 대한 컴퓨터 리소스를 지정하는 일반 데이터 구조를 가리키도록 리세트된다.
더욱, 도 3a는 본 발명의 실시예에 따라 논리적 파티션 사이에서 운용 시스템의 커널을 공유하기 위한 예시의 스레드 상태를 나타내는 상태도를 나타낸다. 도 3a의 버블은 드레스 상태를 나타낸다. 버블 사이의 화살표는 커널 기능으로 실행되는 상태 전이를 나타낸다. 도 3a에 나타낸 스레드 상태는 형성 상태(302), 준비 상태(304), 실행 상태(306), 대기 상태(308), 및 슬립 (sleep) 상태(310)을 포함한다. 스레드는 스레드에 대한 정보와 리소스를 수집하는 커널 시간을 부여하도록, 스레드가 다른 스레드의 요청시 먼저 형성될 때 형성 상태(302)에 임시로 위치한다. 커널이 실행할 스레드를 준비하자마자, '시작'(303)되는데, 즉 준비 상태(304)로 이동된다.
준비 상태(304)에서의 스레드는 실행 기회를 대기하는 준비 큐(ready queue; 도시 생략)에 큐된다. 어느 준비 스레드가 다음에 실행되는지를 결정하는 프로세스를 '스케줄링'으로 불린다. 많은 스케줄링 알고리즘, FIFO, 라운드 로빈 (Round Robin), 프라이오리티 (Priority) 등이 있으며, 이들 중에는 본 발명의 실시예에 따라 커널을 공유하는 시스템에 이용될 수 있다. 스레드를 준비 상태에서 실행 상태로 이동시키는 커널 기능을 디스패칭(312)으로 부른다. 사실상, '디스패칭', '실행', 및 '실행 상태중'는 일반적으로 동일한 것이다.
스레드가 디스패치될 때, 즉 실행 상태(306)일 때, 스레드는 현재 논리적 프로세서 상에서 실행되게 할당되어 있다. 스레드가 물리적으로 실행되고 있는지의 여부는 논리적 프로세서의 가상 프로세서가 파티션 관리기를 통해 현재 디스패치되는지, 즉 물리적 프로세서 상에서 타임 슬라이스에서 현재 실행하고 있는지에 따라 좌우된다. 논리적 프로세서의 준비 큐는 논리적 프로세서 상에서 실행하길 대기하는 준비 상태에서 하나, 둘 또는 그 이상의 스레드를 포함한다. 한번에 하나의 스레드만이 논리적 프로세서 상에서 실행 상태에 놓인다.
스레드는 선점 (preemption)이나 시간 종료에 의해, 논리적 프로세서의 소유를 유지할 수 없고, 실행 상태에서 준비 상태로 이동될 수 있다 (314). 스레드는 우선권이 더 높은 스레드가 논리적 프로세서에 대한 준비 큐에 들어갈 때 선점된다. 스레드는 전체 타임 슬라이스에 걸쳐, 논리적 프로세서의 소유를 유지하면, 즉 실행 상태에 유지되면 시간 종료된다.
스레드는 또한 시스템 호출(316)을 발하여 대기 상태(308)에 들어가는 것으로 실행 상태(306)에서 나올 수 있다 - 시스템 호출의 완성을 대기하기 위해. 이런 시스템 호출은 예를 들어, 특정한 시간 주기 동안 슬립하거나 대기하기 위한 의도적 요청, 디스크로부터 판독되거나 디스크에 기록될 데이터의 요청, 입/출력 리 소스로부터 판독되거나 여기에 기록될 데이터의 요청 등을 포함하여, 커널에 의해 제공되는 서비스의 요청일 수 있다.
다른 설명으로, 도 3B는 본 발명의 실시예에 따라 커널을 공유하는 컴퓨터 시스템에서 가상 프로세서를 스케줄링하기 위한 예시의 가상 프로세서 상태를 나타내는 상태도를 나타낸다. 도 3b의 버블은 가상 프로세서 상태를 나타낸다. 버블 사이의 화살표는 파티션 관리기의 기능으로 실행되는 상태 전이를 나타낸다. 도 3b에 나타낸 가상 프로세서 상태는 형성 상태(322), 준비 상태(324), 실행 상태(326), 대기 상태(328), 및 슬립 상태(330)를 포함한다. 가상 프로세서는 가상 프로세서에 대한 정보와 리소스를 모으는 파티션 관리기 시간을 허용하도록 통상 부팅시에 가상 프로세서가 먼저 형성될 때 형성 상태(322)에 임시로 놓이게 된다. 파티션 관리기가 실행할 가상 프로세서를 준비하자 마자, 가상 프로세서는 '시작'(322)되는데, 준비 상태(324)로 이동된다.
준비 상태(324)에서의 가상 프로세서는 실행할 기회를 대기하는 준비 큐(도시 생략)에서 큐된다. 파티션 관리기는 하나 이상의 스케줄링 알고리즘, 라운드 로빈 (Round Robin), 프라이오리티 등에 따라 실행하도록 가상 프로세서를 스케줄한다. 파티션 관리기는 가상 프로세서가 할당된 물리적 프로세서를 현재 실재로 가장 소유할만한 준비 큐로부터 하나의 가상 프로세서를 준비 상태에서 실행 상태로 디스패치한다(322). 한번에 하나의 가상 프로세서만이 물리적 프로세서 상에서 실행 상태에 놓인다.
가상 프로세서는 선점이나 시간 종료로 물리적 프로세서의 소유를 유지할 수 없고 실행 상태에서 준비 상태로 이동될 수 있다 (334). 가상 프로세서는 우선권이 더 높은 가상 프로세서가 물리적 프로세서에 대한 준비 큐에 들어갈 때 선점된다. 가상 프로세서는 전체 타임 슬라이스에 걸쳐 물리적 프로세서의 소유를 유지하는 경우, 즉 실행 상태로 유지하면 시간 종료된다.
가상 프로세서는 또한 시스템 호출을 발하고 대기 상태(328)에 들어가는 것으로 실행 상태(326)에서 나오게 된다 - 시스템 호출의 완성을 대기하기 위해. 이런 시스템 호출은 일정한 시주기 동안 슬립하거나 대기하는 의도적 요청, 디스크로부터 판독되거나 디스크에 기록될 데이터 요청, 입/출력 리소스로부터 판독되거나 여기에 기록될 데이터 요청 등을 포함한다. 가상 프로세서에서 실행되는, 즉 논리적 파티션의 논리적 프로세서에서 실행되는 스레드가 키보드 입력을 대기하거나 디스크로부터 파일을 판독하도록 시스템 호출을 발하게 되면, 가상 프로세서는 키스트로크에 이르거나 디스크 판독이 완성될 때 까지 단지 아무것도 행하지 않도록 가상 프로세서가 물리적 프로세서를 계속 점유할 필요가 없다고 결정하게 된다. 이 경우, 가상 프로세서는 일정한 주기의 오프 시간, 예를 들어 1/10초 동안 슬립(336)되게 한다. 가상 프로세서를 대기 상태에서 준비 상태로 하는 것은 가상 프로세서를 깨우는(318) 것이라고 할 수 있다.
더욱, 도 4는 본 발명의 실시예에 따라 논리적 파티션 사이에서 운용 시스템의 커널을 공유하기 위한 또 다른 예시의 시스템을 나타내는 기능 블럭도를 나타낸다. 설명을 간편하게 하기 위해서, 도 1의 예는 하나의 논리적 파티션만을 포함했다. 또한 간편한 설명을 위해, 도 2의 예시는 하나의 공유 커널만을 포함했다. 그러나, 도 4의 시스템은 세 개의 공유 커널 사이에서 공유하는 9개의 논리적 파티션을 포함하여, 본 발명의 실시예에 따라 커널을 공유하는 시스템은 임의 개수의 논리적 파티션 사이에서 다수의 커널을 공유한다는 사실을 설명한다. 도 4의 시스템은 논리적 파티션(408, 410)을 포함하고, 이들 각각은 커널(416)을 공유한다. 도 4의 시스템은 또한 논리적 파티션(434, 436, 438)을 포함하고, 이들 각각은 커널(430)을 공유한다. 도 4의 시스템은 또한 논리적 파티션(440, 442, 444, 446)을 포함하고, 이들 각각은 커널(432)을 공유한다.
도 4의 시스템에서, 파티션 관리기(422)는 인터럽트 처리기(448)를 갖고 각 커널(416, 430, 432)은 인터럽트 처리기(450, 452, 454)를 갖는다. 인터럽트 처리기는 시스템 호출을 중단하여 이를 중단 유형에 따른 서브루틴으로 보내는 보호된 소프트웨어 루틴이다. 디스크 I/O 서비스를 요청한 인터럽트는 디스크 드라이버로 보내진다. 키보드로부터 입력을 요청하는 인터럽트는 키보드 드라이버로 보내지는 등이다. 인터럽트 처리기에 의한 시스텝 호출의 인터셉션은 하드웨어에 의해 지원되며, 인터럽트 처리기의 주소가 저장되는 보호된 레지스터나 메모리 위치를 필요로 한다 - 즉 일반 유저 코드가 아닌 특권 코드만이 보호된 컴퓨터 리소스에의 액세스를 허용할 수 있도록 보호됨- . 그러나, 도 4의 시스템에서, 공유 커널은 하나의 논리적 파티션의 운용 시스템에 더 이상 구체화되지 않기 때문에, 특정한 시스템 호출과 특정한 커널 간에 일대일 관계가 없다. 따라서, 도 4의 시스템은 모든 인터럽트 처리에 대한 보호 레지스터나 메모리 변수를 파티션 관리기의 인터럽트 처리기(448)의 시작 주소로 설정함으로써 그 파티션 관리기(422)를 통해 모든 시스템 호출(456, 458, 460)을 벡터링하도록 구성된다. 파티션 관리기의 인터럽트 처리기(448)는 시스템 호출을 커널의 인터럽트 처리기로 보내어 (462, 464, 466), 먼저 인터럽트가 예를 들어, 표 1에 나타낸 것과 같은 데이터 구조를 이용하여 전달되게 되는 것이 어느 커널인지를 결정한다:
논리적 파티션 |
커널 |
구조 포인터 |
408 |
416 |
structPtr1 |
410 |
416 |
structPtr2 |
434 |
430 |
structPtr3 |
436 |
430 |
structPtr4 |
438 |
430 |
structPtr5 |
440 |
432 |
structPtr6 |
442 |
432 |
structPtr7 |
444 |
432 |
structPtr8 |
446 |
432 |
structPtr9 |
표 1의 각 레코드는 논리적 파티션 식별자, 커널 식별자 및 특정 논리적 파티션에 할당된 리소스를 지정하는 일반 데이터 구조에 대한 포인터와 관련된다. 파티션 관리기의 인터럽트 처리기(448)는, 논리적 파티션으로부터 시스템 호출을 인터셉트할 때, 논리적 파티션 식별자를 이용하여 이 표에서 시스템 호출을 보내야 하는 커널의 신원을 조사할 수 있다.
논리적 파티션에 대한 커널 식별자 및 일반 데이터 구조에 대한 포인터와 같이 관련시키는 표 1에서와 같은 구조는 이중 임무를 행한다. 파티션 관리기가 논리적 파티션의 논리적 프로세서를 상태 실행하도록 디스패치하고 그 논리적 파티션에 할당된 컴퓨터 리소스를 지정하는 일반 데이터 구조에 대한 포인터를 공유 커널에 제공할 때, 파티션 관리기는 논리적 파티션의 신원을 이용하여 커널에 어느 포인터 값을 제공할지를 결정한다.
또한, 도 5는 복수의 논리적 파티션(408, 410)에 의해 이용되는 커널 유형(416)을 파티션 관리기(422)에 설치하는 단계(402)를 포함하는 본 발명의 실시예에 따라 논리적 파티션 사이에서 운용 시스템의 커널(416)을 공유하기 위한 예시의 방법을 설명하는 플로우챠트이다. 이런 커널을 설치하는 것은 디스크 드라이브 상에 부트 섹터를 갖는 커널을 설치하는 파티션 관리기의 서브루틴을 이용하여 실행되므로, 예를 들어, 부트 섹터는 커널에 대해 부트 시간에 액세스될 수 있다. 이런 서브루틴은 통상 파티션 관리기에 직접 결합되는 명령 컨솔을 통해 또는 일차 파티션을 통해 파티션 관리기에 의해 노출되는 GUI 툴이나 명령 라인 인터페이스를 통해 시스템 관리자나 그 외 인가 유저에 의해 액세스된다.
도 5의 방법은 복수의 논리적 파티션 각각에 할당된 컴퓨터 리소스를 특정한 일반 데이터 구조(420)를 파티션 관리기(422)에 설치하는 단계(404)를 포함한다. 일반 데이터 구조를 설치하는 것은 이 목적을 위해 개량된 파티션 관리기의 서브루틴을 이용하여 실행된다. 파티션 관리기는 통상 논리적 파티션을 형성하고 유지하기 위한 서브루틴을 제공한다. 이 서브루틴은 표 1과 도 8 및 9의 표(514)에서 나타낸 바와 같이 일반 데이터 구조를 형성하고 이들에 대한 포인터를 논리적 파티션 식별자와 관련시키는 기능을 포함한다. 이런 서브루틴은 통상 파티션 관리기에 직접 결합된 명령 콘솔을 통해서나 일차 파티션을 통해 파티션 관리기에 의해 노출된 GUI 툴이나 명령 라인 인터페이스를 통해 시스템 관리자나 그 외 인가된 유저에 의해 액세스된다.
도 5의 방법은 논리적 파티션에 대한 커널(416)에 의해 일반 데이터 구조에 따른 커널 서비스를 제공하는 단계(406)를 포함한다. 보통의 커널은 커널 자체 내에 커널이 운용 시스템의 일부로 실행하고 있는 파티션에 할당된 컴퓨터 리소스를 지정하는 데이터 구조를 보유한다. 커널이 그 운용 시스템 외부로 이동되며 본 발명의 실시예에 따라 파티션 사이에서 공유되게 개선되면, 커널은 파티션 관리기 공간의 커널 외부에 구축되어 유지되는 일반 데이터 구조로부터 파티션에 대한 컴퓨터 리소스에 관한 정보를 액세스하도록 수정된다. 논리적 파티션에서 실행되는 소프트웨어 어플리케이션(412, 414)로부터의 공유 커널(416)에 대한 시스템 호출은 통상적으로 커널에 의해 보호되어 관리되는 컴퓨터 리소스의 액세스나 이에 따른 서비스를 요청한다. 이런 공유 커널은 논리적 파티션에서 실행되는 소프트웨어로부터의 시스템 호출에 응답하여, 그 컨텐츠가 파티션에 의해 이용하도록 할당된 컴퓨터 하드웨어와 그 외 리소스를 지정하는 일반 데이터 구조(420)로부터의 파티션에 대한 컴퓨터 리소스에 관하여 필요 정보를 액세스한다.
또한, 도 6은 본 발명의 실시예에 따른 논리적 파티션 사이에서의 운용 시스템의 커널(416)을 공유하는 방법의 다른 예를 도시하는 플로우챠트이다. 도 6의 방법은 도 5의 방법과 유사하다. 즉, 도 6의 방법은 복수의 논리적 파티션(408, 410)에 의해 이용되는 커널 유형(416)을 파티션 관리기(422)에 설치하는 단계(402), 복수의 논리적 파티션 각각에 할당된 컴퓨터 리소스를 지정하는 일반 데이터 구조(420)을 파티션 관리기(422)에 설치하는 단계(404), 및 일반 데이터 구조에 따라 커널 서비스를 제공하는 단계(406)을 포함하고, 이들 모두는 도 5의 방법과 관련하여 상술된 바와 같이 동작한다.
그러나, 도 6의 방법은 또한 전체 컴퓨터 시스템의 초기 프로그램 로딩시, 파티션 관리기의 커널에 글로벌하게 이용 가능한 데이터 구조(426)에서, 논리적 파티션에 의한 이용을 위해 컴퓨터 시스템에서 이용 가능한 컴퓨터 리소스를 지정하는 단계(424)를 포함한다. 초기 프로그램 로딩은 파워가 전체 컴퓨터 시스템에 초기에 인가될 때 발생하거나, 초기 프로그램 로딩은 전체 시스템의 리세트나 웜 리부팅 (warm reboot)시 발생할 수 있다. 상이점은 초기 프로그램 로딩이 논리적 파티션의 활성화가 아니고, 전체 시스템, 파티션 관리기 및 모든 활성 논리적 파티션의 리로딩이라는 것이다. 이 설명에서, 전체 시스템을 브링 업 (bring up)하는 것을 '초기 프로그램 로딩'으로 부르고, 논리적 파티션을 활성화하는 것을 논리적 파티션의 '부팅'으로 부른다.
또한, 도 7a는 논리적 파티션에 의해 이용하는 컴퓨터 시스템에서 이용 가능한 컴퓨터 리소스를 특정하기 위한 커널에 글로벌하게 이용 가능한 데이터 구조의 개략도를 나타낸다. 도 7a의 데이터 구조에 특정된 컴퓨터 리소스는 디스크 드라이브, 디스플레이 어댑터, IDE 컨트롤러, 1394 또는 '파이어와이어 (firewire)' 컨트롤러, 키보드, 마우스, 모뎀, 모니터 등을 포함한다. 도 7a의 데이터 구조는 '디바이스 트리', 비휘발성 메모리에 저장된 정보로부터 시스템 초기 프로그램 로딩시 로딩된 구조로 불리는 종류의 구조가다. 예를 들어 Unix의 여러 유형으로, 디바이스 트리는 경로 위치 '/devices' 및 '/dev'에서 디스크에 저장된 정보로부터 로딩된다. 이런 구조는 본 발명의 실시예에 따라 커널을 공유하는 시스템에서 파티션 관리기의 커널에 글로벌하게 이용 가능하게 되며 논리적 파티션의 이용을 위해, 즉 논리적 파티션에서 실행되는 어플리케이션과 그 외 소프트웨어에 의해 이용하기 위해 컴퓨터 시스템 상에서 이용 가능한 컴퓨터 리소스를 특정한다.
도 7a의 데이터 구조는 본 발명을 제한하고자 하는 것이 아니고 오직 설명을 위한 트리 구조로 설명된다. 논리적 파티션의 이용을 위해 컴퓨터 시스템 상에서 이용 가능한 컴퓨터 리소스를 지정하는 데이터 구조는 예를 들어, C 스타일 구조로 구현될 수 있다:
struct {
char DiskDrives[256];
char DisplayAdapters[256];
char IDE_Controller[256];
char IEEE_1394_Controllers[256];
char Keyboards[256];
char MiceAndOtherPointingDevices[256];
char Monitors[256];
char NetworkAdapters[256];
} Resources-systemGlobalStructure;
논리적 파티션의 이용을 위해 컴퓨터 시스템 상에서 이용 가능한 컴퓨터 리소스를 지정하는 데이터 구조는 어레이, 링크된 리스트, 테이블과 같은 C 스타일 구조로, 그리고 당업자에게는 자명한 그 외 종류의 구조로 구현될 수 있다.
부가하여, 도 6의 방법에서, 일반 데이터 구조를 설치하는 단계(404)는 파티션 관리기의 모든 커널에 글로벌하게 이용 가능한 리소스 사양(426)에 따라 논리적 파티션에 대한 부팅 시간에 일반 데이터 구조의 커널에 의해 부팅된 논리적 파티션에 의한 이용을 위해 할당된 컴퓨터 시스템의 컴퓨터 리소스를 지정하는 단계(428)을 포함한다. 이 리소스 사양(426)은 상술한 바와 같이 컴퓨터 상에서 이용 가능한 컴퓨터 리소스를 특정하기 위해 커널에 글로벌하게 이용 가능한 데이터 구조에 제공된다.
부팅된 논리적 파티션의 이용을 위해 할당된 컴퓨터 시스템의 컴퓨터 리소스를 지정하는 단계(428)는 논리적 파티션을 나타내는 데이터 구조에서 식별되는 리소스 사양을 글로벌 데이터 구조로부터 추출하여 실행된다. 각 논리적 파티션을 나타내는 데이터는 각 논리적 파티션이 일차 파티션을 통해서나 파티션 관리기에 직접 결합된 명령 콘솔을 통해서 파티션 관리기에 의해 노출된 GUI 툴이나 명령 라인 인터페이스를 통해 정의될 때 시스템 관리자나 그 외 인가된 유저에 의해 형성되게 된다. 이 예에서, 커널의 부트 루틴은 도 7a에서 나타낸 것과 같이 글로벌 데이터 구조로부터 논리적 파티션을 나타내는 데이터 구조로 식별되는 리소스 사양을 추출하고, 도 7b에 나타낸 일반 데이터 구조과 같은 논리적 파티션에 대한 일반 데이터 구조의 리소스 사양을 설비함으로써 부팅된 논리적 파티션의 이용을 위해 할당된 컴퓨터 시스템의 컴퓨터 리소스를 특정(428)하도록 개선된다.
또한, 도 7b는 논리적 파티션에 할당된 컴퓨터 리소스를 지정하는 일반 데이터 구조의 개략도를 나타낸다. 도 7b의 데이터 구조는 '디바이스 트리'로 불리는 종류의 구조, 즉 비휘발성 메모리에 저장된 정보로부터 커널 부트 시간에 로딩된 구조가다. 예를 들어, Unix의 여러 유형으로, 디바이스 트리는 저장 경로 위치 '/디바이스', 및 '/dev'에서 디스크 상에 저장된 정보로부터 로딩된다
도 7b의 데이터 구조는 본 발명을 제한하고자 하는 것이 아니고 오직 설명을 위한 트리 구조로 설명된다. 논리적 파티션에 할당된 컴퓨터 리소스를 지정하는 일반 데이터 구조는 예를 들어, C 스타일 구조로 구현될 수 있다:
struct {
char DiskDrives[256];
char DisplayAdapters[256];
char IDE_Controller[256];
char IEEE_1394_Controllers[256];
char Keyboards[256];
char MiceAndOtherPointingDevices[256];
char Monitors[256];
char NetworkAdapters[256];
...
} Resources-PartitionGenericStructure;
이런 구조는 파티션 관리기의 모든 공유 커널에의 데이터 액세스를 위해 동일한 인터페이스를 제공한다는 견지에서 보편적이다. 상기 C 스타일 구조는 논리적 파티션에 할당된 컴퓨터 리소스를 지정하는 일반 데이터 구조의 일 예를 든 것이라면, 각 커널은 다음에 의해 형성되는 구조에 대한 포인터를 가질 수 있다:
struct*structPtr=&Resources-PartitionGenericStructure;
이 때 각 커널은 예를 들어, 다음에 의해 논리적 파티션에 대한 디스플레이 어댑터 사양을 액세스할 수 있다:
char*displayAdapterInfo=strcpy(structPtr->DisplayAdapters);
각 커널은 예를 들어, 다음에 의해 논리적 파티션에 대한 디스크 드라이브 사양을 액세스할 수 있다:
strcpy(diskDriveInfo, StructPtr->DiskDrives);
각 커널은 예를 들어, 다음에 의해 논리적 파티션에 대한 인티그레이티드 드라이브 일렉트로닉 ('IDE')을 갖는 디스크 드라이브에 대한 사양을 액세스할 수 있다:
strcpy(IDE_Info,structPtr->IDE_Controller);
참조로 검색되는 정보가 논리적 파티션마다 달라지지만 동일한 체계로 구현되는 동일한 유형의 정보에 관련하여, 이런 식이다. 논리적 파티션 마다의 차이는 structPtr의 값을 변형시켜 이루어진다. structPtr의 값은 이 값이 파티션 관리기에 의해 각 논리적 파티션에 대한 다른 일반 데이터 구조를 가리키도록 설정되기 때문에 각 논리적 파티션 마다 다르다. 이 예에서, 'structPtr'로 불리는 일반 데이터 구조에 대한 포인터를 이용하여, 공유 커널에 대한 structPtr의 값이 파티션 관리기가 커널을 이용하는 논리적 파티션의 논리적 프로세서를 디스패치할 때 마다 파티션 관리기에 의해 검사된다.
C 스타일 구조로서의 구현에 부가하여, 논리적 파티션에 할당된 컴퓨터 리소스를 지정하는 일반 데이터 구조는 예를 들어, 논리적 파티션에 할당된 리소스의 유형에 대한 사양을 각각 포함하는 서브어레이에 대해 표준 오프세트를 갖는 어레이로 구현될 수 있다. 논리적 파티션에 할당된 컴퓨터 리소스를 지정하는 일반 데이터 구조는 어레이, 링크된 리스트, 테이블과 같은 C 스타일의 구조로, 그리고 당업자에게는 명백한 다른 종류의 구조로 구현될 수 있다.
더욱, 도 8은 본 발명의 실시예에 따라 논리적 파티션 사이에서 운용 시스템의 커널(416)을 공유하기 위한 다른 예시의 방법을 설명하는 플로우챠트이다. 도 8의 방법은 도 5의 방법과 유사하다. 즉, 도 8의 방법은 복수의 논리적 파티션(408, 410)에 의해 이용되는 커널 유형(416)을 파티션 관리기(422)에 설치하는 단계(402), 복수의 논리적 파티션 각각에 할당된 컴퓨터 리소스를 지정하는 일반 데이터 구조(420)을 파티션 관리기(422)에 설치하는 단계(404), 및 일반 데이터 구조에 따라 커널 서비스를 제공하는 단계(406)를 포함하고, 이들 모두는 도 5의 방법을 참조하여 상술된 바와 같이 동작한다.
그러나, 도 8의 방법은 커널(416)을 이용하는 논리적 파티션(408)의 논리적 프로세서(506)을 파티션 관리기(422)에 의해 상태 실행하도록 디스패칭하는 단계(502)를 포함한다. 파티션 관리기는 스케줄링 알고리즘에 따라, 물리적 프로세서에 대한 대기 큐에 대기 상태에서 대기하는 대응 가상 프로세서를 선택하고 이 가상 프로세서의 물리적 프로세서 소유를 허용함으로써 논리적 프로세서를 디스패치한다.
새로 디스패치된 논리적 프로세서 상의 논리적 파티션에서 실행되는 스레드에 의해 이루어지는 시스템 호출에 응답하여, 커널은 다수의 일반 데이터 구조 중 어느 것이 새로 디스패치된 논리적 프로세서의 논리적 파티션에 대한 컴퓨터 리소스를 특정하는지를 알 필요가 있다. 따라서 도 8의 방법은 파티션 관리기의 일반 데이터 구조(420)에 대한 포인터(510)을 커널에 제공하는 단계(504)를 포함하고, 일반 데이터 구조는 논리적 파티션에 할당된 컴퓨터 리소스, 즉 새로 디스패치된 논리적 프로세서의 논리적 파티션을 지정한다. 새로 디스패치된 논리적 프로세서는 그 바로 이전의 것, 즉 이 대응 가상 프로세서가 현재 실행하고 있는 물리적 프로세서를 그 가상 프로세서가 소유하지 않는 논리적 프로세서와 동일한 논리적 파티션으로부터 디스패치된 것이면, 포인터 주소는 이미 정확하게 세트되어 있다. 새로 디스패치된 논리적 프로세서가 그 바로 이전의 것의 논리적 파티션 이외의 논리적 파티션으로부터 디스패치된 것이면, 포인터 주소는 새로 디스패치된 논리적 프로세서의 논리적 파티션에 대한 컴퓨터 리소스를 지정하는 일반 데이터 구조를 가리키도록 리세트된다. 파티션 관리기는 표 1에서, 또는 도 8 및 9의 표(514)에서 나타낸 것과 같은 포인터 값과 파티션 신원과 관련시키는 데이터 구조의 논리적 파티션의 신원에 따라 조사함으로써 포인터에 대한 정확한 값을 알게 된다.
도 8의 방법은 논리적 파티션(408, 410)에서 실행되는 어플리케이션 프로그램(412, 414)으로부터의 커널의 커널 서비스(418)에 대한 파티션 관리기(422)의 시스템 호출을 통해 벡터링하는 단계(512)를 포함한다. 파티션 관리기는 파티션 관리기의 인터럽트 처리기(도 4의 448)의 시작 주소를 가리키도록 보호된 레지스터의 포인터 또는 모든 인터럽트 처리에 대한 보호된 메모리의 변수를 세트함으로써 커널에 대한 시스템 호출을 벡터링한다. 파티션 관리기의 인터럽트 처리기는 커널의 인터럽트 처리기(도 4에서 450, 452, 454)에 시스템 호출을 보내어, 먼저 인터럽트가 예를 들어, 상기 표 1이나 도 8 및 도 9의 표(514)에서 나타낸 것과 같은 데이터 구조를 이용하여 어느 커널에 보내지는지를 판정한다. 표 1의 각 레코드는 논리적 파티션 식별자와 커널 식별자를 관련시킨다. 파티션 관리자의 인터럽트 처리기는 논리적 파티션으로부터의 시스템 호출을 인터셉트할 때, 논리적 파티션의 신원을 이용하여 이 표에서 시스템 호출을 보낼 커널의 신원을 조사한다.
더욱, 도 9는 본 발명의 실시예에 따라 논리적 파티션 사이에서 운용 시스템의 커널(416)을 공유하는 다른 방법을 설명하는 플로우챠트이다. 도 9의 방법은 도 5의 방법과 유사하다. 즉, 도 9의 방법은 복수의 논리적 파티션(408, 410)에 의해 이용되는 커널 유형(416)을 파티션 관리기(422)에 설치하는 단계(402), 복수의 논리적 파티션 각각에 할당된 컴퓨터 리소스를 지정하는 일반 데이터 구조(420)을 파티션 관리기(422)에 설치하는 단계(404), 및 일반 데이터 구조에 따라 커널 서비스를 제공하는 단계(406)을 포함하고, 이들 모두는 도 5의 방법과 관련하여 상술된 바와 같이 동작한다. 그러나, 도 9의 방법은 또한 커널 식별자를 업그레이드를 거친 논리적 파티션의 식별자(516)와 관련시키는 데이터 구조(514)의 커널 식별자(518)을 업데이트하는 단계(902)를 포함하여, 복수의 논리적 파티션(408, 410) 중 하나 이상 대신에 커널(416)을 업그레이드하는 단계(902)를 포함한다.
논리적 파티션 대신에 커널을 업그레이드하는 것을 도 4를 참조하여 더욱 설명한다. 도 4는 예시의 시스템이 이들 사이에 세 개의 공유 커널을 공유하는 9개의 논리적 파티션을 포함하는 본 발명의 실시예에 따라 논리적 파티션 사이에서 운영 시스템의 커널을 공유하기 위한 예시의 시스템을 도시하는 기능적 블럭도를 나타낸다. 설명의 목적으로 커널(430)은 운용 시스템의 버전용 커널이고, 커널(432)은 동일한 운용 시스템의 더욱 진보된 차후 버전용 커널이라고 가정한다. 논리적 파티션(434, 436)에서 실행되는 어플리케니션은 구 커널로 만족된다. 그러나, 시스템 관리자는 논리적 파티션(438)에서 실행되는 어플리케니션이 차후 버전의 커널의 새로운 특성의 액세스로 이익을 얻게 될 것이라고 판단한다. 관리자는 커널 식별자를 업그레이드를 거친 논리적 파티션의 식별자와 관련시키는 데이터 구조의 커널 식별자를 업데이트하여 논리적 파티션(438) 대신에 커널을 업그레이드(904)할 수 있다. 업데이트는 표 1에 의해 나타낸 것과 같은 데이터 구조를 업데이트하도록 GUI 툴을 제공하는 파티션 관리기의 컨솔에 대한 시스템 관리자의 로그온으로 이루어질 수 있다. 표 2는 업데이트 이후의 관련 데이터 값을 설명한다.
논리적 파티션 |
커널 |
구조 포인터 |
408 |
416 |
structPtr1 |
410 |
416 |
structPtr2 |
434 |
430 |
structPtr3 |
436 |
430 |
structPtr4 |
438 |
432 |
structPtr5 |
440 |
432 |
structPtr6 |
442 |
432 |
structPtr7 |
444 |
432 |
structPtr8 |
446 |
432 |
structPtr9 |
표 1과 표 2 사이의 유일한 차이점은 논리적 파티션(438)과 관련된 커널 식별자의 값으로, 이는 430에서 432로 업데이트되었다. 업그레이드를 거친 논리적 파티션의 이용을 위해 할당된 컴퓨터 리소스를 지정하는 일반 데이터 구조에 대한 포인터를 업데이트할 필요는 없다. 커널의 나중 버전으로 업그레이드된 논리적 파티션(438)은 업그레이드 이전에 이용했던 컴퓨터 리소스를 특정하기 위해 동일한 일반 데이터 구조를 계속 이용한다.
본 발명의 예시의 실시예는 논리적 파티션 사이에서 운용 시스템의 커널을 공유하기 위한 완전 기능형 컴퓨터 시스템의 컨텍스트에서 주로 기재된다. 그러나, 당업자라면 본 발명은 또한 어느 적당한 데이터 처리 시스템의 이용을 위해 신호 저장 매체 상에 배치된 컴퓨터 프로그램 제품으로 구체화될 수 있다는 것이 이해될 것이다. 이런 신호 저장 매체는 자기 매체, 광 매체, 또는 그 외 적합한 매체를 포함하여 기기 판독 가능 정보에 대한 전송 매체나 판독 가능 매체나 가능하다. 기록 가능 매체의 예로는, 하드 드라이브나 디스켓 내의 자기 디스크, 광 드라이브용 컴팩트 디스크, 자기 테이프, 및 그 외 당업자에는 자명한 것들을 포함한다. 전송 매체의 예로는 예를 들어, EthernetTM 등의 음성 통신 및 디지털 데이터 통신용 전화망, 및 인터넷 프로토콜과 월드 와이드 웹과 통신하는 네트워크를 포함한다. 당업자라면 적당한 프로그래밍 수단을 갖는 컴퓨터 시스템이 프로그램 제품으로 구체화되는 본 발명의 방법의 단계를 실행할 수 있다는 것이 바로 이해될 것이다. 당업자라면 이 명세서에서 기재된 예시의 실시예가 컴퓨터 하드웨어에서 설치되어 실행되는 소프트웨어에 관한 것이지만, 펌웨어나 하드웨어로 구현되는 다른 실시예가 본 발명의 영역 내에 있다는 것이 이해될 것이다.
상술한 설명으로부터 본 발명의 여러 실시예에에 대해서 그 진정한 정신에서 벗어나지 않고 수정 및 변형이 행해질 수 있다는 것이 이해될 것이다. 이 상세한 설명은 오직 설명을 위한 것이지 제한적인 의미로 생각되어서는 안된다. 본 발명의 영역은 다음 청구범위에 의해서만 제한되는 것이다.