KR0170565B1 - 메모리 관리 방법, 마이크로커널 구조 데이타 프로세싱 시스템, 운영 체제 퍼스낼리티 시스템 동작 방법, 퍼스낼리티 뉴트럴 서비스 프로그램 실행 방법 및 응용 프로그램 실행방법 - Google Patents

메모리 관리 방법, 마이크로커널 구조 데이타 프로세싱 시스템, 운영 체제 퍼스낼리티 시스템 동작 방법, 퍼스낼리티 뉴트럴 서비스 프로그램 실행 방법 및 응용 프로그램 실행방법 Download PDF

Info

Publication number
KR0170565B1
KR0170565B1 KR1019950016773A KR19950016773A KR0170565B1 KR 0170565 B1 KR0170565 B1 KR 0170565B1 KR 1019950016773 A KR1019950016773 A KR 1019950016773A KR 19950016773 A KR19950016773 A KR 19950016773A KR 0170565 B1 KR0170565 B1 KR 0170565B1
Authority
KR
South Korea
Prior art keywords
memory
task
template
microkernel
pointer
Prior art date
Application number
KR1019950016773A
Other languages
English (en)
Other versions
KR960001993A (ko
Inventor
마이클 매기 제임스
레이 로손 3세 프리맨
길 소토메이어 2세 가이
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 KR960001993A publication Critical patent/KR960001993A/ko
Application granted granted Critical
Publication of KR0170565B1 publication Critical patent/KR0170565B1/ko

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/544Buffers; Shared memory; Pipes
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/10Address translation
    • G06F12/1027Address translation using associative or pseudo-associative address translation means, e.g. translation look-aside buffer [TLB]
    • G06F12/1036Address translation using associative or pseudo-associative address translation means, e.g. translation look-aside buffer [TLB] for multiple virtual address spaces, e.g. segmentation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/10Address translation
    • G06F12/109Address translation for multiple virtual address spaces, e.g. segmentation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/14Protection against unauthorised use of memory or access to memory
    • G06F12/1416Protection against unauthorised use of memory or access to memory by checking the object accessibility, e.g. type of access defined by the memory independently of subject rights
    • G06F12/145Protection against unauthorised use of memory or access to memory by checking the object accessibility, e.g. type of access defined by the memory independently of subject rights the protection being virtual, e.g. for virtual blocks or segments before a translation mechanism
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/12Replacement control
    • G06F12/121Replacement control using replacement algorithms
    • G06F12/126Replacement control using replacement algorithms with special data handling, e.g. priority of data or instructions, handling errors or pinning
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2211/00Indexing scheme relating to details of data-processing equipment not covered by groups G06F3/00 - G06F13/00
    • G06F2211/009Trust
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/65Details of virtual memory and virtual address translation
    • G06F2212/656Address space sharing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/65Details of virtual memory and virtual address translation
    • G06F2212/657Virtual address space management

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Computer Security & Cryptography (AREA)
  • Memory System Of A Hierarchy Structure (AREA)

Abstract

본 발명은 마이크로커널 구조 및 메모리내의 마이크로커널에 의해 특별 객체로서 정의된 마이크로커널 그 자체의 특성 탬플릿 영역에 관한 것이다. 메모리 관리 방법에 있어서, 마이크로커널이 데이타 프로세성 시스템의 메모리로 로딩된후, 상기 방법은 메모리내에 태스크 컨테이너를 생성하기 시작한다. 상기 태스크 컨테이너의 생성은 메모리내에 특별 객체로서 탬플릿 영역을 형성함으로써 수행되며, 상기 탬플릿 영역은 속성 세트를 갖는다. 이후, 마이크로커널이 메모리내에 태스크를 형성할 때, 이 태스크의 형성은 탬플릿 영역을 태스크로 매핑함으로써 이루어진다. 마이크로커널은 탬플릿 영역에 기초한 태스크의 가상 어드레스 공간을 정의한다. 이후, 마이크로커널이 탬플릿 영역상에서 가상 메모리 동작을 수행할 때, 가상 메모리 동작의 효과는 매핑 관계에 의해 태스크로 나타난다. 이러한 방법으로, 동시에 단일 탬플릿 영역이 다수의 태스크로 매핑될 수 있다. 효과를 발휘할 수 있는 탬플릿 영역상에서 가상 메모리 동작을 직접 수행함으로써, 각 태스크내의 탬플릿 영역의 매핑이 아니라 탬플릿 영역에서 변화가 발생하므로 가상 메모리 동작의 공유는 성취하기가 한결 용이하다.

Description

메모리 관리 방법, 마이크로커널 구조 데이타 프로세싱 시스템, 운영체제 퍼스낼리티 시스템 동작 방법, 퍼스낼리티 뉴트럴 서비스 프로그램 실행 방법 및 응용 프로그램 실행 방법
제1도는 마이크로커널 및 퍼스낼리티-뉴트럴 서비스(140)가 다양한 하드웨어 플랫폼상에서 다중 운영 체제 퍼스낼리티를 동작시키는 방법을 도시한 호스트 멀티프로세서(100) 메모리(102)내의 마이크로커널 시스템의 기능적인 블럭도.
제2도는 스레드와 연관된 고객 가시 구조를 도시한 도면.
제3도는 고객 가시 태스크 구조를 도시한 도면.
제4도는 일련의 전송 권리 및 단일 수신 권리를 나타내는 전형적인 포트를 도시한 도면.
제5도는 포트 명칭 공간에 포함되거나 혹은 메시지 통과시 포함되는 일련의 포트 권리를 도시한 도면.
제6도는 고객 가시 가상 메모리 구조를 도시한 도면.
제7a도는 마이크로커널 어드레스 공간에 형성된 3 개의 탬플릿 영역 즉, 내포가능한 베이스 영역 R0, 두 리프 노드 영역 R1 및 R2 (이들의 어드레스 공간은 R0 의 어드레스 공간내에 존재함)를 도시한 도면으로서, 여기서 탬플릿 영역 R0, R1 및 R2 는 캐시 객체 데이타 페이지 D0 및 D1으로의 PMAP 변환을 가리키는 제2포인터를 갖는 도면.
제7b도는 탬플릿 영역 R0 의 속성을 사용하여 마이크로커널에 의해 형성된 제1태스크 T(A) 를 도시한 도면으로서, 상기 태스크 T(A) 는 탬플릿 영역 R0 을 가리키는 제1포인터를 가지며, 탬플릿 영역 R0, R1 및 R2 의 제2포인터는 캐시 객체 데이타 페이지 D0 및 D1 에 대한 액서스를 태스크 T(A)에 제공하는 도면.
제7c도는 탬플릿 영역 R0의 속성을 사용하여 마이크로커널에 의해 형성된 제2태스크 T(B) 를 도시한 도면으로서, 태스크 T(B)는 탬플릿 영역 R0를 가리키는 제1포인터를 가지며, 탬플릿 영역 R0, R1 및 R2 의 제2포인터는 태스크 T(A)에서와 동일한 방법으로 캐시 객체 데이타 페이지 D0 및 D1에 대한 액세스를 태스크 T(B) 에 제공한다.
제8a도는 탬플릿 영역을 두 태스크로 매핑하는 것을 도시한 도면.
제8b도는 탬플릿 영역을 하나의 태스크로 두번 매핑하는 것을 도시한 도면.
제9도는 탬플릿 영역의 중첩을 나타낸 도면.
제10도는 메모리 할당 및 중첩 탬플릿 영역을 도시한 도면.
제11도는 탬플릿 영역의 요약을 도시한 도면.
제12도는 메모리 객체의 매핑을 도시한 도면.
제13도는 메모리 객체의 부정확한 매핑을 도시한 도면.
제14도는 가상 메모리 구성 요소를 도시한 도면.
제15도는 태스크의 탬플릿 영역을 도시한 도면.
제16도는 상이한 커널 인터페이스 라이브러리를 갖는 태스크를 도시한 도면.
제17도는 커널 태스크의 탬플릿 영역을 도시한 도면.
* 도면의 주요부분에 대한 부호의 설명
100 : 호스트 멀티프로세서 104 : 버스
106 : 보조 저장 장치 108 : I/O 어댑터
110 : 프로세서 A 112 : 프로세서 B
120 : 마이크로커널 122 : IPC
142 : 멀티 퍼스낼리티 지원 144 : 디폴트 페이저
146 : 장치 지원 150 : 멀티 운영 체제 퍼스낼리티
154 : 주도 퍼스낼리티 서버 156 : 대체 주도 퍼스낼리티
158 : 대체 퍼스낼리티 서버 200, 200', 200 : 탬플릿 영역
202 : 캐시 객체 204 : PMAP 테이블
210, 210' : 태스크
본 발명은 데이타 프로세싱 시스템(data processing system)에 관한 것으로 특히, 데이타 프로세싱 시스템의 운영 체제(operating systems)의 개선에 관한 것이다.
운영 체제는 컴퓨터에서 동작하는 가장 중요한 소프트웨어이다. 범용 컴퓨터(general purpose computers)는 다른 프로그램을 동작시키는 운영체제를 구비해야 한다. 운영 체제는 전형적으로 키보드로부터의 입력 인식, 디스플레이 스크린으로의 출력 전송, 디스크상의 화일 및 디렉토리 관리, 디스크 드라이브 및 프린터와 같은 주변 장치의 제어와 같은 기본적 태스크(basic tasks)를 수행한다. 더욱 복잡한 시스템의 경우, 운영 체제는 더 많은 책임과 권한(reponsibilities and powers)을 갖는다. 이러한 운영 체제는 동시에 실행중인 상이한 프로그램 및 사용자가 서로 방해하지 않도록 해준다. 프로그램이 동시에 수행되는 것을 가능하게 한다. 운영 체제는 또한 전형적으로 보안에 대한 책임을 가지며, 불법 사용자가 시스템을 액세스하는 것을 방지한다.
운영 체제는 멀티 유저 운영 체제(multi-user operating systems), 멀티 프로세서 운영 체제(multi-processor operating systems), 멀티 태스킹 운영 체제(multi-tasking operating systems) 및 실시간 운영 체제(real-time operating systems)등으로 분류될 수 있다. 멀티 유저 운영 체제는 둘 이상의 사용자가 동시에 프로그램을 실행할 수 있게 해준다. 일부 운영 체제는 수백, 수천의 사용자가 동시에 프로그램을 실행하는 것을 허용하기도 한다. 수행되는 각 프로그램은 프로세스(process)로 칭해진다. 대부분의 멀티 프로세싱 시스템은 둘 이상의 사용자를 지원한다. 멀티 태스킹 시스템에서는 단일 프로세서가 둘 이상의 태스크를 수행할 수 있다. 일반적으로, 멀티 태스킹 및 멀티 프로세싱은 의미상 유사한 점이 많기 때문에 종종 혼용되어 사용되기도 한다. 멀티 태스킹은 동시에 둘 이상의 태스크 즉 프로그램을 실행하는 기능이다. 멀티 태스킹에서는, 단지 하나의 중앙 프로세싱 장치만이 참여하며, 이 프로세싱 장치가 하나의 프로그램에서 다른 프로그램으로 신속히 전환하여 동시에 모든 프로그램이 실행되는 듯한 느낌을 준다. 멀티 태스킹에는 선취형 및 협동형(preemptive and cooperative)의 두가지 기본적인 유형이 있다. 선취형 멀티 프로세싱에서, 운영 체제는 CPU 시간을 각각의 프로그램에 나누어 분배한다. 협동형 멀티 태스킹에서, 각각의 프로그램은 필요로 하는 동안 CPU 를 제어할 수 있다. 그러나, 프로그램이 CPU 를 사용하지 않는경우, 이 프로그램은 다른 프로그램이 일시적으로 CPU 를 사용하도록 허용할 수도 있다. 예를 들면, OS/2(TM) 및 UNIX(TM) 운영 체제는 선취형 멀티 테스킹을 사용하며, 반면에 맥킨토시(TM) 컴퓨터(Macintosh computers)를 위한 멀티 파인더(Multi-finder)(TM) 운영 체제는 협동형 멀티 태스킹을 이용한다. 멀티 프로세싱은 둘 이상의 프로세스 혹은 프로그램을 동시에 지원하는 컴퓨터 시스템의 기능을 일컫는다. 멀티 프로세싱 운영 체제는 여러 프로그램을 동시에 실행하는 것을 가능하게 한다. 멀티 프로세싱 시스템은 자원을 이들 자원을 얻고자 서로 경쟁하는 프로세스들간에 적절한 방식으로 할당해야 하므로 단일 프로세싱 시스템보다 복잡하다. 실시간 운영 체제는 입력에서 즉시 응답한다. DOS 및 UNIX 와 같은 범용 운영 체제는 실시간으로 동작하지 않는다.
운영 체제는 소프트웨어 플랫폼(software platform)을 제공하여 응용 프로그램이 이 소프트웨어 플랫폼위에서 실행될 수 있도록 한다. 응용 프로그램은 특정 운영 체제위에서 실행될 수 있도록 작성되어야 한다. 따라서, 어떤 운영 체제를 선택하느냐에 따라 실행될 수 있는 응용 프로그램이 달라질 수 있다. IBM 호환 퍼스널 컴퓨터에 있어서, 운영 체제는 DOS, OS/2, AIX(TM) 및 XENIX(TM)등이 있다.
사용자는 일반적으로 커맨드 세트(a set of commands)를 통해 운영 체제와 대화한다. 예를 들면, DOS 운영 체제는 화일을 복제하거나 혹은 화일의 이름을 변경하기 위해서 COPY 및 RENAME과 같은 커맨드를 사용한다. 이들 커맨드는 커맨드 프로세서 혹은 커맨드 라인 인터프리터라 칭해지는 운영 체제의 일부에 의해 수신되어 실행된다.
퍼스널 컴퓨터에는 CP/M(TM), DOS, OS/2(TM), UNIX(TM), XENIX(TM) 및 AIX(TM)와 같은 다수의 상이한 운영 체제가 이었다. CP/M 은 소형 컴퓨터를 위한 첫번째 운영체제이었다. CP/M 은 초기에 퍼스널 컴퓨터에 폭넓게 사용되었으나, 결국은 DOS에 의해 밀려나게 되었다. DOS 는 모든 IBM 퍼스널 컴퓨터에서 동작하며, 단일 사용자, 단일 태스킹 운영 체제에 사용된다. DOS에 뒤이어 출현한 OS/2는 인텔 80286 혹은 후속 마이크로프로세서를 사용하는 IBM 호환 퍼스널 컴퓨터상에서 동작하는 비교적 강력한 운영 체제이다. OS/2 는 일반적으로 DOS와 호환되지만 멀티 태스킹이 가능하고 가상 메모리(virtual memory)를 지원하는 등 많은 부가적인 특징을 갖는다. UNIX 및 UNIX에 기초를 둔 AIX는 퍼스널 컴퓨터 및 워크스테이션에서 폭넓게 동작한다. UNIX 및 AIX 는 워크스테이션을 위한 표준 운영 체제가 되었으며, 강력한 멀티 유저, 멀티 프로세싱 운영 체제이다.
1981년에 IBM 퍼스널 컴퓨터가 미합중국에서 발표되었을 때, DOS 운영 체제는 약 10킬로바이트의 저장 영역을 차지했다. 시간이 지날수록, 퍼스널 컴퓨터는 점점 더 복잡해지고 더욱 큰 운영 체제가 필요하게 되었다. 현재에는, IBM 퍼스널 컴퓨터에 사용되는 OS/2 운영 체제가 약 22 메가바이트 이상의 저장 용역을 차지하게 되었다. 시간의 경과와 더불어 퍼스널 컴퓨터가 더욱 복잡해지고 강력해지고 있으나, 운영 체제는 이들 시스템과 연관된 저장 장치에 크게 부담을 주지 않고서 크기 및 복잡성에서 마냥 증가할 수 없다는 것은 명확하다.
운영 체제 크기의 이러한 성장 속도 때문에 1980년대에 카네기 멜론 대학(Carnegie Mellon University)에서 MACH 프로젝트가 수행되었다. 이 연구의 목적은 컴퓨터 프로그래머로 하여금 현대적인 새로운 하드웨어 구조를 활용할 수 있도록 허용하면서도 커널 운영 체제(kernel operating system)의 크기 및 특징은 감소된 새로운 운영 체제를 개발하는 것이었다. 커널은 하드웨어 자원 할당과 같은 기본적인 기능을 수행하는 운영 체제의 일부분이다. MACH 커널의 경우, 시스템의 기본 구축 블럭(basic buillding block)으로서 5 개의 프로그래밍 추상화(programming abstractions)가 설정되었다. 이들은, 그 위에서 전형적인 복잡한 동작이 커널 외부적으로 구축될 수 있는 유용한 시스템을 생성하는데 필요한 최소치로서 선택되었다. 카네기 멜론 MACH 커널은 버젼 3.0 에서 그 크기가 감소되었으며, MACH 마이크로커널이라 불리는 완전하게 동작하는 운영 체제가 되었다. MACH 마이크로커널은 태스크(task), 스레드(thread), 포트(port), 메시지(message) 및 메모리 객체(memory object)와 같은 원시요소(primitives)를 구비한다.
태스크는 MACH 마이크로커널에서 두개의 분리된 구성요소로 나누어진 통상적인 UNIX 프로세스이다. 제1구성요소는 태스크이며, 이 태스크는 협동형 엔티티 그룹(a group of cooperating entities)의 모든 자원을 포함한다. 태스크에서 자원의 예는 가상 메모리 및 통신 포트이다. 태스크는 자원의 수동적인 집단으로 프로세서상에서 실행되는 구성요소는 아니다.
스레드는 UNIX 프로세스의 제2구성요소이며, 능동 실행 환경이다. 각 태스크는 하나 혹은 그 이상의 동시에 실행되는 스레드라 일컬어지는 계산을 지원할 수 있다. 예를 들면, 멀티 스레드 프로그램(multi-thread program)은 다른 스레드가 사용자 인터페이스를 감시하는 동안 다른 스레드를 사용하여 과학적인 계산을 수행할 수 있다. MACH 태스크는 동시에 실행되는 다수의 실행 스레드를 가질 수 있다. 태스크내의 모든 스레드가 태스크의 자원을 공유한다는 사실로부터 MACH 프로그래밍 모델의 강력한 성능이 제공된다. 예를 들면, 이들 모델은 모두 동일한 가상 메모리 어드레스 공간을 갖는다. 그러나, 태스크내의 각 스레드는 그들 자신만의 실행 상태를 갖는다. 이 상태는 범용 레지스터, 스택 포인터, 프로그램 카운터 및 프레임 포인터와 같은 일련의 레지스터로 구성된다.
포트는 스레드가 이를 통해 서로 통신하는 통신 채널(communication channel)이다. 포트는 자원이며, 태스크가 소유한다. 스레드는 태스크에 포함됨으로써 포트를 액세스할 수 있다. 협동형 프로그램은 하나의 태스크의 스레드가 다른 태스크의 포트에 대해 액세스하도록 허용할 수도 있다. 중요한 특성은 이들 포트가 위치 가시적(location transparent)이라는 것이다. 이러한 기능은 프로그램의 변경없이 네트워크를 통한 서비스의 분사를 용이하게 한다.
상이한 태스크에 속한 스레드가 상호 통신할 수 있도록 하기 위해 메시지가 사용된다. 메시지는 주어진 부류 혹은 유형의 데이타 집합을 포함한다. 이 데이타는 숫자 혹은 스트링(numbers or strings)과 같은 프로그램 특정 데이타(program specific data)로 부터 하나의 태스크에서 다른 태스크로 포트 자격(capabilities of port)과 같은 MACH 연관된 데이타에 이르기까지 다양하다.
메모리 객체는 MACH 마이크로커널의 주특성으로서, 사용자 레벨 프로그램에서 종래의 운영 체제 기능을 수행할 수 있도록 지원하는 추상화이다. 예를 들면, MACH 마이크로커널은 사용자 레벨 프로그램에서 가상 메모리 페이징 방안(virtual memory paging policy)을 지원한다. 메모리 객체는 이 자격(capability)을 지원하는 추상화이다.
이들 모든 개념은 MACH 마이크로커널 프로그래밍 모델에는 기본적인 것이며, 커널 자체에서도 사용된다. 이들 개념 및 카네기 멜론 대학 MACH 마이크로커널의 다른 특징은 Addison Wessely Publishing 사가 1993년 출판한 조셉 보이킨(Joseph Boykin)등의 저술한 Programming Under MACH 란 명칭의 책에 상세히 개시되어 있다.
마이크로커널을 사용하여 UNIX를 지원하는 것에 대한 부가적인 논의는 1986년 아틀란타, 죠지아에서 열린 USENIX Conference 에서 발표된 마이크 액세타등의 논문 MACH: A New Kernel Foundation for UNIX Development에 개시되어 있다. 이와 관련된 또 다른 기술적인 논문으로는 1990년 캘리포니아 아나헤임에서 열린 USENIX Conference에서 발표된 데이비드 고럽등의 UNIX as an Application Program 이 있다.
현재의 마이크로커널 시스템의 한가지 문제점은 모든 가상 메모리 동작(virtual memory operation)이 태스크에 기초한다는 것이다. 이것은 부적절한 요건인데, 그 이유는 다수의 가상 메모리 호출이 반드시 단일 태스크로 제한되지는 않기 때문이다. 또한 태스크에 기초하는 가상 메모리 동작은 증대한 보안 노출을 발생할 수도 있다. 태스크의 제어 포트가 다른 태스크에 주어져서 다른 태스크가 상기 태스크를 대신하여 가상 메모리 서브시스템의 부분을 처리할 수 있어야 한다. 일단 태스크의 제어 포트가 주어지면, 다른 태스크는 제1태스크의 보안을 파괴할 수가 있다. 또한, 모든 가상 메모리 기능(function)이 태스크상에서 동작함으로써, 태스크 인터페이스는 반드시 태스크 처리의 일 부분을 형성하지는 않는 모든 가상 메모리 호출로 인해 과도하게 복잡해질 수 있다. 현재 마이크로커널의 가상 메모리 인터페이스의 또 다른 문제점은 다수의 가상 메모리 동작이 메모리 범위상에서 동작한다는 것이다. 태스크는 다수의 메모리 범위로 구성되므로, 인터페이스 정의내에는 다수의 메모리 범위상에서의 동작을 제한하는 어떠한 것도 존재하지 않는다. 예를 들면, 예약된 메모리 범위가 존재하는 경우, 예약된 범위 및 인접한 예약되지 않은 범위에 미치는(span) 메모리 할당과 같은 동작을 방지하는 어느 제한 조건도 존재하지 않는다. 이러한 사실로 인해 메모리내의 객체의 내용을 변질시키는 원하지 않은 결과가 발생할 수도 있다.
본 발명의 목적은 데이타 프로세싱 시스템의 개선된 마이크로커널 구성을 제공하는데 있다.
본 발명의 다른 목적은 종래 기술에서 보다 더욱 간결화된 가상 메모리 동작을 제공하는 데이타 프로세싱 시스템의 개선된 마이크로커널 구성을 제공하는데 있다.
본 발명의 또 다른 목적은 향상된 태스크 보안을 갖는 데이타 프로세싱 시스템의 개선된 마이크로커널 구조를 제공하는 것이다.
본 발명의 또 다른 목적은 메모리내의 정의된 객체의 변질을 막는, 데이타 프로세싱 시스템의 개선된 마이크로커널 구조를 제공하는 것이다.
상술한 목적 및 다른 목적, 특성 및 장점은 이하 개시되는 본 발명에 따른 매핑된 혹은 매핑되지 않은 영역의 관리 방법 및 장치에 따라 성취된다.
본 발명은 마이크로커널 구조에 대한 메모리 관리 방법에 관한 것이다. 이 방법은 메모리내의 마이크로커널에 의해 정의된 탬플릿 영역(template region)을 특별 객체(special object)로서 구비한다. 이 메모리 관리 방법에 있어서, 마이크로커널이 데이타 프로세싱 시스템의 메모리로 로딩된 후에, 이 방법은 먼저 메모리내에 태스크 컨테이너를 생성하기 시작할 것이다. 이러한 동작은 먼저 메모리내에 탬플릿 영역을 특별 객체로서 형성함으로서 행하여지며, 각 탬플릿 영역은 대응 태스크 컨테이너를 정의하는 속성 세트를 갖는다. 상기 속성은 가상 메모리, 데이타 및 통신 포트와 같은 스레드에 의한 사용을 위해 태스크에 사용가능한 자원을 지정할 수 있다. 이후, 마이크로커널은 탬플릿 영역에 의해 지정된 속성을 태스크로 매핑함으로써 메모리내에 태스크를 형성할 수 있다. 마이크로커널은 탬플릿 영역에 기초하여 태스크에 대한 가상 어드레스 공간을 정의한다. 이후, 마이크로커널이 탬플릿 영역상에서 가상 메모리 동작을 수행할 때, 가상 메모리 동작의 효과는 매핑 관계에 의해 테스크내에 명시된다.
마이크로커널은 탬플릿 영역으로부터의 크기 속성 및 태스크에 대한 시작 가상 어드레스를 사용하여 가상 어드레스에서 태스크를 나타내는 데이타 구조를 정의한다. 마이크로커널은 탬플릿 영역으로부터의 속성을 사용하여 태스크이 스레드가 그들의 동작을 수행할 수 있는 태스크의 가상 어드레스 공간을 정의한다. 마이크로커널은 또한 태스크에 대한 태스크 명칭을 정의하고, 태스크에 대한 메모리내의 포트 명칭 공간을 형성하여 통신 채널로서 사용한다. 마이크로커널은 탬플릿 영역으로부터의 속성을 사용하여 태스크의 포트 명칭 공간에 대한 액세스 권리를 정의한다. 마이크로커널은 그 후 태스크의 가상 어드레스 공간으로부터 인스트럭션을 인출하기 위해 태스크의 메모리내에 스레드 객체를 형성할 수 있다.
본 발명에 따르면, 마이크로커널은 탬플릿 영역을 가리키는 태스크의 제1포인터를 정의한다. 탬플릿 영역내에는, 직접적으로 혹은 간접적으로 PMAP이라 칭해지는 매핑 테이블을 가리키는 제2포인터가 존재한다. PMAP은 제2포인터의 가상 어드레스 값을 태스크에 의해 사용되는 데이타 페이지를 포함하는 메모리내의 캐시 객체의 물리적 주소로 변환한다. 종종, 태스크의 데이타 자원에서 변경이 요구된다. 이러한 변경은 탬플릿 영역내의 제2포인터에 의해 표시된 가상 어드레스 값을 변경하므로써 성취된다. 변경된 제2포인터는 PMAP에서 상이한 변환 값을 가리킬 수 있으며, 그 결과, 원하는 바대로 상이한 페이지 혹은 캐시 객체의 어드레싱이 이루어진다. 그러나, 태스크 그 자체의 내용은 변경될 필요가 없다. 캐시 객체내의 데이타와 같은 태스크 자원은 탬플릿 영역내의 제2포인터를 통해 태스크에 의해 어드레스된다. 마이크로커널이 탬플릿 영역으로부터 다수의 태스크를 정의한 경우, 탬플릿 영역내의 제2포인터를 변경시키면 그 탬플릿 영역을 가리키는 다수의 태스크에 이용가능한 자원에서의 전역 변화가 발생할 것이다. 이들 태스크에 의해 어드레스되는 데이타 페이지는 각 태스크의 내용을 변경시키는 대신 탬플릿 영역내의 제2포인터에 대한 단일 변화(single change)에 의해 변경될 수 있다. 이러한 방법으로, 단일 탬플릿 영역은 다수의 태스크로 동시에 매핑될 수 있다. 각 태스크는 탬플릿 영역에서 이루어지는 모든 변화를 볼 수 있다. 이에 의해, 이들 태스크는 동일한 탬플릿 영역으로부터 발생된 특성을 공유할 수 있다.
탬플릿 영역은 모든 가상 메모리 동작이 지향되는 객체이다. 종래에는, MACH 마이크로커널에서, 스레드가 가상 메모리 동작이 지향되는 객체이었다. 본 발명에 따라, 가상 메모리 동작을 그 효과가 발생하는 탬플릿 영역으로 지향함으로써 가상 메모리 동작의 공유를 성취하기가 한결 용이해 질 것이다. 왜냐하면, 변경이 각 태스크내의 영역 매핑에 대해 이루어지는 것이 아니고 영역에 대해 이루어 질 수 있기 때문이다.
[파트 A. 마이크로커널 시스템]
[제1장. 마이크로커널 원리(microkernel principle)]
제1도는 각종 하드웨어 플랫폼상에서 마이크로커널(120) 및 퍼스낼리티 마이크로커널 뉴트럴 서비스(personality-neutral services)(140)가 멀티 운영 체제 퍼스낼리티(150)를 실행하는 방법을 나타내는 마이크로커널 시스템(115)의 기능 블럭도이다.
제1도에 도시된 호스트 멀티 프로세서(100)는 버스(104)에 의해 디스크 드라이브(disk drive), 판독 전용 혹은 판독/기록 광 저장장치(read only or read/write optical storage) 혹은 다른 대량 저장장치(bulk storage device)등과 같은 보조 저장장치(auxiliary storage)(106)에 접속된 메모리(102)를 포함한다. 또한, 키보드, 모니터, 디스플레이, 통신 어댑터, 근거리 망 어댑터, 모뎀, 멀티미디어 인터페이스 장치, 혹은 다른 I/O 장치에 접속될 수 있는 I/O 어댑터(108)가 버스(104)에 접속되어 있다. 또한, 제1프로세서 A(110), 제2프로세서 B(112)가 버스(104)에 접속되어 있다. 제1도에 도시된 예는 대칭 멀티 프로세서 구조(symmetrical multiprocessor configuration)이며, 여기서 두 유니 프로세서(110, 112)는 공통 메모리 어드레스 공간(102)을 공유한다. 단일 혹은 멀티 프로세서의 다른 구조도 동일하게 적절한 예로서 도시될 수 있다. 프로세서는 예를 들면, 인텔 386(TM) CPU, 인텔 486(TM) CPU, 펜티엄(TM) 프로세서, 파워 PC(TM) 프로세서 혹은 다른 유니 프로세서 장치일 수 있다.
메모리(102)는 마이크로커널 시스템(115)을 내장하며, 이 시스템은 마이크로커널(120), 퍼스낼리티 뉴트럴 서비스(PNS)(140) 및 퍼스낼리티 서버(150)를 포함한다. 마이크로커널 시스템(115)은 메모리(102)에 저장된 응용 프로그램(180)의 운영 체제로서 동작한다.
본 발명의 목적은 UNIX 혹은 OS/2 와 같은 종래의 운영 체제처럼 동작하는 운영 체제를 제공하는 데 있다. 즉, 운영 체제는 OS/2 혹은 UNIX 혹은 어떠한 다른 통상적인 운영 체제의 퍼스낼리티를 가질 것이다.
마이크로커널(120)은 호스트 멀티 프로세서(100)의 최상의 특권 상태(most priviledged state)에서 동작하는 시스템 소프트웨어의 소형 메시지 전달 핵심부(small message-passing nucleus)를 포함하며, 이 핵심부는 시스템의 기본적 동작을 제어한다. 마이크로커널 시스템(115)은 마이크로커널(120), 퍼스낼리티 뉴트럴 서비스(140)을 제공하는 서버 및 장치 드라이버 세트를 포함한다. 명칭이 암시하는 바와 같이, 퍼스낼리티 뉴트럴 서버 및 장치 드라이버는 UNIX 혹은 OS/2등의 어떠한 퍼스낼리티에도 의존하지 않는다. 이들은 마이크로커널(120)에 의존하며 상호 의존한다. 퍼스낼리티 서버(150)는 마이크로커널(120)의 메시지 전달 서비스를 사용하여 퍼스낼리티 뉴트럴 서비스(140)와 통신한다. 예를 들면, UNIX, OS/2 혹은 다른 어떤 퍼스낼리티 서버도 메시지를 퍼스낼리티 뉴트럴 디스크 드라이버에 전송할 수 있고, 디스크로부터 데이타 블럭을 판독하도록 이 드라이버에 요구할 수 있다. 디스크 드라이브는 데이타 블럭을 판독하여 메시지 형태로 되돌려 준다. 메시지 시스템은 최적화되어 대량의 데이타가 포인터 처리에 의해 신속하게 전송될 수 있도록 한다. 데이타 그 자체는 복제되지 않는다.
크기가 작고 표준 프로그래밍 서비스 및 특징을 응용 프로그램으로서 지원할 수 있으므로, 마이크로커널(120)은 표준 운영 체제보다 간결하다. 마이크로커널 시스템(115)은 모듈 조각으로 나누어 지며, 이 모듈 조각은 다양한 방법으로 구성되어질 수 있고, 작은 시스템에 이들 모듈 조각을 부가함으로써 더 큰 시스템이 형성될 수 있다. 예를 들면, 각각의 퍼스낼리티 뉴트럴 서버(140)는 논리적으로 분리되어 있으며 다양한 방식으로 구성될 수 있다. 각 서버는 응용 프로그램으로서 동작하며, 응용 디버그(application debuggers)를 이용하여 디버그될 수 있다. 각 서버는 분리된 태스크에서 동작하며, 서버내의 에러는 이 태스크에 한정된다.
제1도에는 프로세스간 통신 모듈(IPC)(122), 가상 메모리 모듈(124), 태스크 및 스레드 모듈(126), 호스트 및 프로세서 세트(128), I/O 지원 및 인터럽트(I/O support and interrupts)(130) 머신 종속 코드(machine dependent code)(125)를 포함하는 마이크로커널(120)이 도시되어 있다.
제1도에 도시된 퍼스낼리티 뉴트럴 서비스(140)는 마스터 서버(master server), 초기화(initialization) 및 명령(naming)을 포함하는 멀티 퍼스낼리티 지원(multiple personality support)(142)를 포함하며, 또한 디폴트 페이저(default pager)(144)를 포함하고, 멀티 퍼스낼리티 지원(multiple personality support) 및 장치 드라이버(deliver device)를 포함하는 장치 지원(device support)(146)를 포함한다. 이 서비스는 또한 화일 서버(file server), 네트워크 서비스, 데이타베이스 엔진(database engine) 및 보안(security)을 포함하는 다른 퍼스낼리티 뉴트럴 서비스(other personality neutral products)(148)를 포함한다.
퍼스낼리티 서버(150)는 예를 들어, UNIX 퍼스낼리티일 수 있는 주도 퍼스낼리티(dominant personality)(152)일 수 있다. 이 서버는 UNIX 서버일 수 있는 주도 퍼스낼리티 서버(154) 및 UNIX 주도 퍼스낼리티를 지원하는 다른 주도 퍼스낼리티 서비스(155)를 포함한다. 대체 주도 퍼스낼리티(alternate dominant personality)(156)는 예를 들면 OS/2가 될 수도 있다. 대체 퍼스낼리티(156)에는 대체 퍼스낼리티 서버(158)가 포함되며, 이 대체 퍼스낼리티 서버(158)는 OS/2 퍼스낼리티 및 OS/2 에 대한 다른 대체 퍼스낼리티 서비스(159)를 특징지운다.
UNIX 주도 퍼스낼리티 예와 연관된, 제1도에 도시된 주도 퍼스낼리티 응용(182)은 UNIX 운영 체제 퍼스낼리티(152)의 상부에서 동작하는 UNIX 형 응용 프로그램이다. 제1도에 도시된 대체 퍼스낼리티 응용 프로그램(186)은 OS/2 대체 퍼스낼리티 운영 체제(156)의 상부에서 동작하는 OS/2 응용 프로그램이다.
제1도는 코드로 분할된 마이크로커널 시스템(115)을 도시한다. 이 코드는 하나의 프로세서 유형에서 다른 프로세서 유형으로 완전히 이식될 수 있는 이식성(probability)이 있으며, 코드가 동작하는 특정 시스템에서의 프로세서 유형에 종속된다. 이 시스템은 장치 종속 코드를 장치 드라이버로 분리한다. 그러나, 장치 드라이버 코드는 비록 장치 종속적이지만 프로세서 구조에 반드시 종속되지는 않는다. 이 시스템은 태스크당 다수의 스레드를 사용하여 어느 특정 머신이 멀티프로세서가 아니더라도 멀티 프로세서를 사용하는 것과 같은 응용 환경을 제공한다. 유니 프로세서에서 상이한 스레드는 상이한 시간에서 동작한다. 멀티 프로세서의 모든 필요한 지원은 소형의 간결한 마이크로커널(120)에 집중된다.
이하 마이크로커널 시스템(115) 구조의 개관(overview)을 제공할 것이며, 차후에 이 시스템 구조의 각각의 구성요소를 상세히 설명하고, 마이크로커널 시스템(115)의 서비스를 사용하여 새로운 프로그램을 생성하는데 필요한 기법을 상세히 개시할 것이다.
마이크로 시스템(115)은 운영 체제의 새로운 토대이다. 이 시스템은 아래의 특징과 더불어 운영 체제 개발의 포괄적인 환경을 제공한다.
멀티 퍼스낼리티를 위한 지원
확장가능한 메모리 관리
프로세스간 통신
멀티 스레딩
멀티 프로세싱
마이크로커널 시스템(115)은 순수 커널로서 구현된 간결한 커널 서비스 세트를 제공하고 또한 사용자 레벨 서버 세트로 구현된 운영 체제 퍼스낼리티를 구축하기 위한 광범위한 서비스 세트를 제공한다.
마이크로커널 시스템(115)의 목적은, 다중 운영 체제 퍼스낼리티가 조화를 이루어 작업하도록 조정하고, 장치 드라이버 및 화일 시스템과 같은 저 레벨 시스템 구성요소의 공통 프로그래밍을 제공하며, 운영 체제 및 사용자 응용의 양자에서 병렬성을 이용하고, 융통성있는 메모리 공유와 더불어 대형의 잠재적으로 희소한 어드레스 공간(large potentially sparse address space)을 제공하며, 가시적인 네트워크 자원 액세스를 허용하고, OS/2 및 UNIX 와 같은 기존의 소프트웨어 환경과 호환성이 있으며, (32 비트 및 64 비트 플랫폼)에 대해 이식 가능하도록 하는 것이다.
마이크로커널 시스템(115)은 아래의 개념에 기초를 둔다.
다수의 종래 운영 체제 기능(예를 들면, 화일 시스템 및 네트워크 액세스)을 수행하는 사용자 모드 태스크;
운영 체제를 생성하기 위해 사용자 레벨 실행 시간 서비스의 기본적인 세트;
단순하고, 확장가능한 통신 커널;
통신 채널(communication channels)이 객체 참조(object reference)로서 역할하는 갖는 객체 베이스(object basis);
동기적 및 비동기적 프로세스간 통신을 이용하는 고객/서버 프로그래밍 모델;
마이크로커널 시스템(115)의 베이스(basis)는 간결하고 확장가능한 커널을 제공하는 것이다. 마이크로커널 시스템(115)의 목적은 커널 자체에서의 기능을 최소로 유지한 채 사용자 혹은 커널 공간의 융통성있는 서비스 구성을 허용하는 것이다. 커널은 태스크 대 태스크 통신외에 아래에 개시되는 다른 지원도 제공해야 한다.
제어 점의 관리(스레드);
지원 할당(태스크);
태스크의 어드레스 공간 지원;
물리적 메모리, 프로세서, 인터럽트, DMA 채널 및 클럭과 같은 물리적 자원의 관리
사용자 모드 테스크가 자원 사용(resource usage)에 관한 방안을 구현한다. 커널은 단순히 이들 방안을 실행하는 메카니즘을 제공한다. 논리적으로 커널 상부에는 퍼스낼리티 뉴트럴 서비스(PNS)(140) 층이 존재한다. PNS 는 C 실행 시간 환경을 제공하며, 스트링 기능과 같은 기본적인 구조 및 아래에 개시되는 서버 세트를 포함한다.
명칭 서버(Name Server) - 고객이 서버를 찾을 수 있도록 해줌.
마스터 서버(Master Server) - 프로그램이 로딩되어 시작되도록 해줌.
[커널 추상화(Kernel Abstrations)]
마이크로커널 시스템(115)의 하나의 목적은 커널 자체에 의해 제공되는 추상화를 최소로 하는 것이지만, 이들 추상화와 연관된 시맨틱스(semantics)가 최소화되지는 않는다. 제공된 각각의 추상화는 이와 연관된 시맨틱스 세트 및 다른 추상화와 상호작용하는 복잡한 세트를 포함한다. 주요 커널 추상화는,
태스크 - 자원 할당의 단위, 큰 액세스 공간 및 포트 권리
스레드 - CPU 활용 단위, 경량(lightweight)(저 오버헤드)
포트 - 통신 채널, 전송/수신 기능 혹은 권리를 통해서만 액세스 가능
메시지 - 데이타 객체의 집단
메모리 객체 - 메모리 관리의 내부 장치(제2장의 구조 모델을 참조하면 태스크, 스레드, 포트 메시지 및 메모리 객체 개념이 상세히 설명되어 있다.)
[태스크 및 스레드]
마이크로커널 시스템(115)은 종래의 프로세스의 개념을 제공하지는 않는다. 왜냐하면, 모든 운영 체제 환경은 (사용자 ID, 신호 상태등과 같은) 프로세스와 연관된 많은 시맨틱스를 가지기 때문이다. 이러한 확장된 시맨틱스를 이해하고 제공하는 것이 마이크로커널 시스템의 목적은 아니다.
다수의 시스템은 제어 실행 지점(execution point of control)을 프로세스와 동일시하며, 어떠한 시스템은 그렇지 아니하다. 마이크로커널(120)은 다수의 제어 점을 운영 체제 환경의 프로세스로부터 분리하여 지원한다. 마이크로커널은 아래의 두 개념을 제공한다.
태스크
스레드
(제2장의 구조 모델을 참조하면 태스크 및 스레드 개념이 상세히 설명되어 있다.)
[메모리 관리]
커널은 소정의 메모리 관리를 제공한다. 메모리는 태스크와 연관된다. 메모리 객체는 태스크가 메모리 관리에 대한 제어를 얻는 수단이다. 마이크로커널 시스템(115)은 상당히 큰 잠재적으로 희소한 어드레스 공간을 지원하는 메카니즘을 제공한다. 각 태스크는 연관된 어드레스 맵을 가지며, 이 맵은 커널에 의해 유지되어 태스크 어드레스 공간내의 가상 어드레스를 물리적 어드레스로 변환하는 것을 제어한다. 가상 메모리 시스템에서와 같이, 어느 주어진 태스크의 전체 어드레스 공간의 내용은 동시에 물리적 메모리내에 완전히 상주할 수 없으며, 태스크의 가상 어드레스 공간을 위한 캐시로서 물리적 메모리를 사용하기 위한 메카니즘이 존재해야 한다. 종래의 가상 메모리 설계와는 다르게, 마이크로커널 시스템(115)은 모든 캐싱을 그 자신이 구현하지는 않는다. 이 시스템은 사용자 모드 태스크에 이 메카니즘에 참여할 자격을 제공한다. PNS는 사용자 태스크 및 메모리의 페이징 서비스를 제공하는 디폴트 페이저(144)를 포함한다.
마이크로커널 시스템(115)내의 다른 자원과는 달리, 가상 메모리는 포트를 사용하여 가상 메모리는 참조되지 않는다. 메모리는 가상 어드레스를 특정 태스크의 어드레스 공간에 대한 색인으로서 사용하여서만 참조될 수 있다. 메모리 및 태스크 어드레스 공간을 정의하는 연관된 어드레스 맵은 다른 태스크와 부분적으로 공유될 수 있다. 태스크는 자신의 어드레스 공간내에 새로운 메모리 범위를 할당할 수 있고, 할당해제할 수 있으며, 이들에 대한 보호(protection)를 변경할 수 있으며, 또한 메모리 범위에 계승 특성(inheritance properties for the ranges)을 지정할 수 있다. 새로운 태스크는 기존 태스크를 새로운 태스크의 어드레스 공간이 구성될 수 있는 새로운 태스크의 어드레스 공간이 구성될 수 있는 베이스(basis)로 지정함으로써 생성될 수 있다. 기존 태스크의 메모리의 각각의 범위에 계승 속성(inheritance attributes)은 새로운 태스크가 상기 정의된 범위를 갖는지의 여부 및 상기 범위가 가상적으로 복제되는지 혹은 기존 태스크와 공유되는지의 여부를 결정한다. 메모리에 대한 대부분의 복제 동작은 기록 시 복제(copy-on-write) 최적화를 통해 성취된다. 기록 시 복제 최적화는 보호된 공유(protected sharing)를 통해 성취된다. 두개의 태스크는 복제된 메모리를 공유하지만, 판독 전용 액세스만 가능하다. 어느 한쪽의 태스크가 그 범위의 일부분을 변경하려고 시도할 때에서야 그 부분이 복제된다. 이러한 지연된 메모리 복제는 마이크로커널 시스템(115)에 의해 수행되는 중요한 기능 최적화이며, 시스템의 통신/메모리 원리에 중요하다.
메모리의 임의의 주어진 영역은 메모리 객체에 의해 지지(back)된다. 메모리 관리자 태스크(memory manager task)는 메모리에 캐시된 페이지 세트의 이미지(메모리 영역의 물리적 메모리 내용)와 캐시되지 않은 페이지 세트의 이미지(추상 메모리 객체(abstract memory object))사이의 관계를 관리하는 방안을 제공한다. PNS는, 디폴트 메모리 관리자 혹은 페이저를 구비하며, 이 디폴트 메모리 관리자 혹은 페이저가 초기에는 0 로 설정되고 시스템 페이징 공간(system paging space)에 대해 페이지되는(paged) 기본적인 비영속 메모리 객체(basic non-persistent memory objects)를 제공한다.
[태스크 대 태스크 통신]
마이크로커널 시스템(115)은 고객/서버 시스템 구조를 사용하며, 태스크(고객)는 통신 채널상으로 전송되는 메시지를 통해 다른 태스크(서버)를 요구함으로써 서비스를 액세스한다. 마이크로커널(120 )은 자신의 서비스는 거의 제공하지 않기 때문에(예를 들면 화일 서비스는 거의 제공하지 않는다), 마이크로커널(120) 태스크는 필요로 하는 서비스를 제공하는 다수의 다른 태스크와 통신해야 한다. 프로세스간 통신 메카니즘의 통신 채널은 포트라 일컬어진다(제2장의 구조 모델을 참조하면 포트가 상세히 설명되어 있다). 메시지는 데이타, 메모리 영역 및 포트 권리의 집단이다. 포트 권리는 이 권리를 보유하고 있는 태스크가 포트를 명명하는 명칭이다. 태스크는 적절한 포트 권리를 보유하고 있는 경우에만 포트를 처리할 수 있다. 단지 하나의 태스크만이 포트 수신 권리를 보유할 수 있다. 이 태스크는 포트 큐(port queue)로부터 메시지를 수신할 수 있다. 다수의 태스크가 메시지를 큐로 전송하는 것을 허용하는 포트 전송 권리를 보유할 수 있다. 태스크는 데이타 구성요소 세트를 포함하는 데이타 구조를 생성한 후, 이 태스크가 전송 권리를 보유하고 있는 포트에 메시지 전송 동작을 수행하여 다른 태스크와 통신한다. 그 후, 이 포트에 대한 수신 권리를 보유하고 있는 태스크가 메시지 수신 동작을 수행한다.
주 : 이 메시지 전송은 비동기적인 동작이다. 메시지는 (아마도 기록시 복제 최적화에 의해) 논리적으로 수신 태스크로 복제된다. 수신 태스크내의 다수의 스레드가 주어진 포트로부터 메시지 수신을 시도할 수 있으나, 단지 하나의 스레드만이 주어진 메시지를 수신할 것이다.
[제2장. 구조 모델(Architectural Model)]
마이크로커널 시스템(115)은 그의 주 책무(primary responsibility)로서, 인스트럭션을 프레임워크(framework)내에서 실행하는 제어 점(points of control)을 제공한다. 이들 제어 점은 스레드라 일컬어진다. 스레드는 가상 환경에서 동작한다. 커널에 의해 제공되는 가상 환경은 모든 사용자 공간 액세스가능 하드웨어 인스트럭션(user space accessible hardware instructions)을 실행함과 아울러 사용자 공간 PNS와 커널에 의해 제공되는 에뮬레이트된 인스트럭션 시스템 트랩(system traps)을 실행하는 가상 프로세서를 포함한다. 가상 프로세서는 가상 레지스터 세트 및 다른 경우라면 물리적 메모리처럼 응답하는 소정의 가상 메모리를 액세스한다. 다른 모든 하드웨어 자원은 메모리 액세스 및 에뮬레이트된 인스트럭션의 특정한 조합을 통해 액세스가능하게 된다. 커널에 의해 제공되는 모든 자원은 가상화된다는 것을 주목하자. 이 장은 스레드에 의해 나타나는 가상 환경의 상위 레벨 구성요소를 개시한다.
[퍼스낼리티 뉴트럴 서비스(Personality Neutral Services:PNS)의 구성요소]
마이크로커널 시스템(115)의 PNS(140) 부분은 기저 마이크로커널(120)상에 구축된 서비스로 구성된다. 이 부분은 프로그램 구성의 기본 사용자 레벨 서비스 세트 뿐만 아니라 커널 자체가 의존하는 소정의 기능을 제공한다. 이들 프로그램은 멀티 운영 체제 퍼스낼리티 고객으로부터의 요구를 서비스할 수 있고, 운영 체제 퍼스낼리티 그 자체를 구성하는 데도 사용된다. 또한, PNS 프로그램을 표준 C 로 구성하기 위한 ANSI C 실행 시간 환경 및 POSIX 표준으로부터 취해진 정의를 갖는 소정의 부가적인 기능이 존재한다. PNS 자체를 정의하는 라이브러리외에도, 마이크로커널 자체의 일부분인 다수의 라이브러리가 PNS내에 존재한다. 이들 라이브러리는 마이크로커널이 수출(export)하는 인터페이스 및 마이크로커널 시스템(115)의 프로세스간 통신(InterProcessor Communication:IPC) 설비와 더불어 사용되는 메시지 인터페이스 발생기(Message Interface Generator:MIG)를 위한 지원 논리등이다.
PNS 환경 라이브러리의 구조는 각 서비스의 상세한 구현을 호출자에게는 밝히지 않는다. 하나의 C 실행 시간 라이브러리와 같은 소정의 라이브러리는 그들의 모든 기능을 호출자의 어드레스 공간으로 로딩되는 지역 루틴(local routines)으로서 구현하는 반면, 다른 라이브러리는 마이크로커널의 IPC 시스템을 호출하여 메시지를 서버에게 전송하는 스텁으로 구성된다. 이 구조에 의하면, 서버가 다른 서버에 의해 대체될 수 있고, 서비스는 이들을 사용하는 프로그램의 소오스에 영향을 주지않고 단일 태스크(single tasks)로 결합될 수 있는등, 융통성 있는 기능수행이 가능하다. PNS 환경의 주요 구성 요소는 이러한 것들이며, 이 환경은 와전한 운영 체제를 구성하지는 않는다. 대신에, PNS는 퍼스낼리티의 존재에 의존한다. 시스템이 개시(start-up)되는 동안 우선 로딩되는 주도 퍼스낼리티(152)는 시스템상에 사용자 인터페이스를 제공하고 고객 및 PNS의 구성요소에 서비스를 제공하는 운영 체제 퍼스낼리티이다. 따라서, 주도 퍼스낼리티는 최후의 수단(last resort) 서버이다. 주도 퍼스낼리티는 PNS 라이브러리에 의해 정의되지만 다른 서버에 의해서는 구현되지 않는 모든 서비스를 구현한다.
마이크로커널(120)은 또한 PNS의 소정의 구성요소에 의존한다. 이 마이크로커널(120)이 내부 커널 동작을 완결하기 위해 메시지를 퍼스낼리티 뉴트럴 서버에 전송해야할 경우가 있다. 예를 들면, 페이지 폴트를 해결하기 위해, 마이크로커널(120)은 메시지를 디폴트 페이저(144)로 전송할 수 있다. 디폴트 페이저(144)는 하드디스크로부터 커널이 필요로 하는 페이저를 판독한다. 페이지 폴트는 일반적으로 사용자 태스크를 대신하여 해결되지만, 커널이 메시지의 전송자이다.
[실행 시간]
PNS 실행 시간(PNS run time)은 이러한 환경에서 실행되는 프로그램을 위한 표준 C 프로그래밍 환경을 지원하는데 사용되는 ANSI C 세트 및 POSIX 라이브러리를 제공하며, 이들은 전형적인 C 언어 구성(C language construct)을 포함한다. 다른 모든 시스템과 유사하게, 마이크로커널 시스템(115)은 우선적 책무로서 인스트럭션을 프레임워크내에서 실행하는 제어 점을 제공한다. 마이크로커널(120)에서, 제어 지점은 스레드라 일컬어진다. 스레드는 가상 환경에서 동작한다. 마이크로커널(120)에 의해 제공되는 가상 환경은 모든 사용자 공간 액세스가능 하드웨이 인스트럭션을 실행하며 또한 커널에 의해 제공된 에뮬레이트된 인스트럭션을 실행하는 가상 프로세서를 포함한다. 가상 프로세서는 가상 레지스터 세트 및 다른 경우라면 시스템의 물리적 메모리처럼 응답하는 소정의 가상 메모리를 액세스한다. 다른 모든 하드웨어 자원은 메모리 액세스 및 에뮬레이트된 인스트럭션의 특정한 조합을 통해 액세스가능하게 된다. 마이크로커널에 의해 제공되는 모든 자원은 가상화된다는 것을 주목하자. 이 장은 마이크로커널 스레드 측면에서 바라본 가상 환경의 상위 레벨 구성요소를 개시한다.
[커널의 구성요소]
마이크로커널(120)은 아래의 커널 구성요소 목록에 개시된 구성요소를 포함하는 환경을 제공한다.
[스레드(thread):]
제어 실행점. 스레드는 경량 엔티티(lightweight entity)이다. 스레드에 대한 대부분의 상태는 스레드를 포함하는 태스크와 연관된다.
[태스크(Task):]
포트 명칭 공간, 가상 어드레스 공간 및 스레드 세트 형태로 자원에 대한 참조를 보유하는 컨테이너
[보안 토큰(Security Token):]
태스크에서 서버로 전송되는 보안 특성으로 액세스 검증(access validation)을 수행한다.
[포트(Port):]
태스크 사이의 단방향 통신 채널.
[포트 세트(Port set):]
메시지를 수신할 때 단일 유닛으로 간주될 수 있는 포트 세트(a set of ports).
[포트 권리(Port Right):]
포트를 액세스하는 특정 권리를 허용한다.
[포트 명칭 공간(Port Name Space):]
특정 포트 권리를 명명하는 포트 명칭의 색인된 집합
[메시지(Message):]
두 태스크 사이에서 전송되는 데이타, 메모리 영역 및 포트 권리의 집합.
[메시지 큐(Message Queue):]
단일 포트와 연관된 메시지 큐(a set of queues).
[가상 어드레스 공간(Virtual Address Space):]
태스크내의 스레드에 의해 참조되는 희소하게 분포하는 가상 페이지의 색인된 세트. 페이지 범위(ranges of pages) 커널 및 외부 메모리 관리자에 의해 구현된 메카니즘을 통해 이들과 연관된 임의의 속성 및 시맨틱스(arbitrary attributes and semantics)를 갖는다.
[추상 메모리 객체(Abstract Memory Object):]
이 객체에 의해 지지되는 메모리 범위의 비 상주 상태를 나타내는 추상 객체. 이 객체를 구현하는 태스크는 메모리 관리자라 일컬어진다. 추상 메모리 객체 포트는 커널이 이를 통해 메모리 관리자의 동작을 요구하는 포트이다.
[메모리 객체 대표(Memory Object Representative):]
메모리 관리자에 의해 메모리 객체의 고객에게 제공되는 메모리 객체의 추상 표현(the abstract representation of a memory object). 이 대표는 연관된 추상 메모리 객체를 명명하고, 고객에게 허용된 잠재적 액세스 모드를 제한한다.
[메모리 캐시 객체(Memory Cache Object):]
추상 메모리 객체에 의해 지지되는 메모리 범위의 상주 상태를 보유하는 커널 객체. 이 객체를 통해 메모리 관리자는 고객의 가시 메모리 이미지(visible memory image)를 처리한다.
[프로세서(processor):]
스레드를 수행할 수 있는 물리적 프로세서.
[프로세서 세트(Processor Set):]
프로세서 세트로서, 각각의 프로세서는 이 프로세서 세트에 할당된 스레드를 실행하는데 사용될 수 있다.
[호스트(Host):]
멀티프로세서 전체.
[클럭(clock):]
시간 경과의 표현. 일정 주파수로 증가된 시간 값.
다수의 이러한 구성요소는 스레드에 의해 직접적으로 처리될 수 있는 커널 구현 자원이다. 이들 구성요소 각각이 이하 상세히 논의될 것이다. 그러나, 이들 구성요소 정의중의 일부는 다른 구성요소의 정의에 따르기 때문에, 전체적인 설명이 이해 될 수 있도록 일부 주요 개념은 단순화된 형태로 설명된다.
[스레드(Threads)]
스레드는 경량 엔티티(lightweight entity)이다. 스레드는 적은 비용으로 생성되며 동작시에 오버헤드(low overhead)가 낮다. 스레드는 상태(state)를 거의 가지지 않는다(대부분 스레드의 레지스터 상태). 스레드를 소유하는 태스크는 자원 관리의 부담을 지게 된다. 멀티프로세서상에서 태스크내의 다수의 스레드가 병렬 실행되는 것이 가능하다. 병렬 처리가 목적이 아닐 때라도, 다수의 스레드는 이점을 가지는데, 그 이유는 각각의 스레드는 단일 스레드가 다수의 서비스를 제공하기 위해 시도하는 비동기적 프로그래밍 대신 동기적 프로그래밍 스타일을 사용할 수 있기 때문이다.
스레드는 아래의 특징을 포함한다.
1. 태스크 혹은 인스트럭션 실행 스트림에서의 제어 흐름점
2. 보유 태스크의 모든 구성요소에 대한 액세스
3. 다른 스레드, 심지어 동일한 태스크내의 스레드들과의 병렬 실행.
4. 저 오버헤드를 위한 최소 상태
스레드는 기본적인 계산 엔티티이다. 스레드는 그의 가상 어드레스 공간을 정의하는 단지 하나의 태스크에 포함된다. 어드레스 공간 구조에 영향을 주거나 혹은 어드레스 공간외의 다른 자원을 참조하기 위해 스레드는 특수한 트랩 인스트럭션을 실행해야 한다. 이 트램 인스트럭션은 커널로 하여금 스레드를 대신하여 동작을 수행하거나, 혹은 스레드를 대신하여 에이전트(agent)로 메시지를 전송하게 한다. 이들 트랩은 스레드를 보유하는 태스크와 연관된 자원을 처리한다. 커널은 이들 엔티티를 처리하는 요구를 발생하여 이들 엔티티를 생성하거나 혹은 삭제하고 이들 엔티티의 상태에 영향을 끼친다. 커널은 (상기 열거된 것과 같은) 자원 및 서비스를 제공하는 관리자이다. 태스크가 또한 서비스를 제공할 수 있고, 추상 자원을 구현할 수 있다. 커널은 통신 방법을 제공하며, 이 통신 방법은 고객 태스크가 서버 태스크 (실제적으로 서버 태스크내에서 실행하는 스레드)로 하여금 서비스를 제공하도록 요구할 수 있도록 해준다. 이러한 방식으로, 태스크는 이중 아이덴티티(dual identity)를 갖는다. 제1아이덴티티는 커널에 의해 관리되는 자원의 아이덴티티로서, 이 자원의 자원 관리자는 커널내에서 실행되며, 제2아이덴티티는 자원 관리자가 태스크 그자체인 자원 공급자 의 아이덴티티이다.
스레드는 아래의 상태를 갖는다.
1. 스레드가 수행됨에 따라 변하고, 커널 스레드 포트의 보유자에 의해 또한 변경될 수 있는 (레지스터등과 같은) 스레드의 머신 상태(machine state);
2. 스레드를 대신하여 예외 메시지(exception messages)를 전송하는 데 사용되는 스레드의 커널 포트 및 포트들을 식별하는 스레드 특정 포트 권리의 작은 세트;
3. 스레드가 인스트럭션을 실행하지 않는다면 0 이 아닌 값을 갖는 일시중단 카운트(suspend count).
4. 자원 스케쥴링 파라메터(Resource scheduling parameters).
스레드는 통상적인 방법으로 인스트럭션을 수행함으로써 스레드가 동작한다. 커널에 대한 각종 특수 인스트럭션 트랩이 스레드를 대신하여 동작을 수행한다. 이들 커널 트랩중 가장 중요한 트랩은 mach_msg_trap이다. 이 트랩에 의해 스레드는 메시지를 커널 및 다른 서버로 전송하여 허용하여 자원상에 대해 동작할 수 있다. 이 트랩은 결코 직접적으로 호출되지 않으며, mach_msg 라이브러리 루틴을 통해 도출된다. 부동 소수점 오버플로우(floating point overflow) 및 상주하지 않는 페이지 와 같은 스레드가 실행되는 동안 발생하는 예외 조건은 포트로 메시지를 전송하여 제어된다. 사용되는 포트는 예외 조건의 속성에 따라 결정된다. 예외 조건의 결과는 스레드의 상태 설정 및/혹은 예외 메시지에 응답하여 결정된다. 스레드상에 아래와 같은 동작이 수행될 수 있다.
[생성 및 삭제;]
(일시 중지 카운트 조작으로 인한) 일시 중지 및 재개;
(예외 포트와 같은) 머신 상태 조작 특정 포트 조작;
자원 (스케쥴링) 제어
[태스크]
태스크는 시스템 자원의 집합이다. 어드레스 공간을 제외하고 이들 자원은 만약 이들 포트에 의해 참조된다. 이들 자원은 만약 포트에 대한 권리가 분산되어 있다면 다른 태스크와 공유될 수 있다. 태스크는 큰 잠재적으로 희소한 어드레스 공간을 제공하며, 머신 어드레스에 의해 참조된다. 이 공간의 일부는 계승 혹은 외부 메모리 관리를 통해 공유될 수 있다. 주 : 태스크는 그 자신의 생명(life)은 갖지 않는다. 태스크는 인스트럭션을 실행하는 스레드를 포함한다. 태스크 Y 가 X 를 수행한다 는 것은 태스크 Y 내에 포함된 스레드가 X 를 수행한다. 는 것을 뜻한다. 태스크는 값비싼 엔티티이다. 태스크내의 모든 스레드는 모든 것을 공유한다. 두 태스크는 아무리 그 동작이 간단하여도 명시적인 동작(explicit action)이 없이 어떠한 것도 공유하지 않는다. 포트 수신 권리와 같은 일부 자원은 두 태스크 사이에 공유될 수 없다. 태스크는 스레드 세트를 보유하는 컨테이너로서도 보여질 수 있으며, 자신이 보유하는 스레드에 인가되는 디폴트 값(default values)을 포함한다. 가장 중요한 사항은, 태스크는 그가 보유한 스레드가 실행시 필요한 포트 명칭 공간 및 가상 어드레스 공간과 같은 요소를 포함한다는 것이다.
태스크와 연관된 상태는 아래에 개시된다.
포함된 스레드 세트;
연관된 가상 어드레스 공간;
포트 권리 세트를 명명하는 연관된 포트 명칭 공간 및 연관된 포트 통고 요구(port notification request) 세트;
태스크로부터 메시지와 함께 전송되는 보안 토큰;
태스크의 커널 포트를 식별하는 태스크 특정 포트의 작은 세트, 포함된 스레드를 위한 예외 처리에 사용하는 디폴트 포트, 및 다른 서비스를 명명하는 부트스트랩 포트;
포함된 스레드가 인스트럭션을 실행하지 않는다면 0 이 아닌 값을 갖는 일시 중지 카운트;
스레드를 위한 디폴트 스케쥴링 파라메터;
통계적인 PC 샘플을 포함하는 각종 통계;
새로운 태스크는 이 새로은 태스크가 생성되는 호스트를 지정하며 또한 자신의 어드레스 공간의 각종 부분을 계승에 의해 제공할 수 있는 프로토타입 태스크를 지정함으로써 생성될 수 있다.
아래에 개시되는 기능이 태스크상에서 수행될 수 있다.
생성 및 파괴
보안 토큰의 설정
일시 중지 및 재개
특수 포트 조작
포함된 스레드의 조작
스케쥴링 파라메터의 조작
[보안 포트(Security port)]
모든 태스크는 보안 토큰 및 커널의 관점(kernel's point of view)에서 불확실한(opaque) 식별자로 태그(tag)된다. 보안 포트는 아이덴티티 및 태스크의 다른 보안 속성을 인코드(encode)한다. 이 보안 토큰은 태스크에 의해 전송되는 모든 메시지내에 묵시 값(implicit value)으로서 포함된다. 신뢰 서버(trusted servers)는 이러한 전송 토큰을 액세스 심사 결정(access mediation decisions)시 사용되는 전송자 아이덴티티의 표시로서 사용할 수 있다. 태스크는 자신의 부모(parent)로부터 보안 토큰을 계승한다. 이 토큰은 위조 불가능한(un-forgeable) 아이덴티티 표시로서 사용되므로, 이 토큰을 변경하려면 특권(privilege)이 필요하게 된다. 이 특권은 호스트 보안 포트를 제공함으로써 표시된다. 하나의 예약 값(reserved value)은 커널의 아이덴티티를 나타낸다. 커널로부터의 예외 메시지를 제외한 모든 메시지는 커널 아이덴티티를 운반하며, 상기 예외 메시지는 예외 태스크의 아이덴티티를 운반한다.
[포트]
포트는 서비스를 요구하는 고객 및 서비스를 제공하는 서버를 요구하는 고객사이의 단방향 통신 채널이다. 포트는 단일 수신기 및 잠재적인 다수의 전송자를 갖는다. 포트와 연관된 상태는 아래와 같다.
포트의 연관된 메시지 큐;
포트에 대한 참조 (권리) 카운트;
포트를 통해 메시지로서 전송될 수 있는 포트 권리 및 가상 복제 메모리 용량의 설정가능한 제한(settable limits);
포트를 할당하기 위한 커널 서비스가 존재한다. 가상 메모리 범위외의 모든 시스템 엔티티는 포트에 의해 명명된다. 포트는 또한 이들 엔티티가 생성되었을 때 묵시적으로(implicitly) 생성된다. 커널은 요구시 포트가 동작하지 않을 경우 통고 메시지를 제공한다. 태스크의 가상 어드레스 공간을 제외한, 다른 모든 시스템 자원은 포트로 알려진 한 단계의 간접 수단을 통해 액세스된다. 포트는 서비스를 요구하는 고객 및 서비스를 제공하는 서버사이의 단방향 통신 채널이다. 이러한 서비스 요구에 대한 응답이 제공되어야 하면, 제2포트가 사용되어야 한다. 제공될 서비스는 포트를 통해 전송된 메시지를 수신하는 관리자에 의해 결정된다. 따라서, 커널 제공 엔티티(kernel provided entities)와 연관된 포트의 수신자는 커널이다. 태스크 제공 엔티티와 연관된 포트의 수신자는 엔티티를 제공하는 태스크이다. 태스크 제공 엔티티를 명명하는 포트의 경우, 그 포트의 메시지 수신자를 변경시키는 것이 가능하다. 단일 태스크는 자신이 지원하는 자원들을 참조하는 다수의 포트를 가질 수도 있다. 주어진 엔티티는 그를 나타내는 다수의 포트를 가질 수도 있으며, 각각의 포트는 상이한 허용가능 동작 세트를 포함한다. 예를 들면, 다수의 엔티티는 명칭 포트 및 종종 특권 포트라 불리는 제어 포트를 갖는다. 제어 포트를 액세스하면 엔티티를 처리할 수 있다. 명칭 포트를 액세스하면 단순히 엔티티를 명명하여 예를 들면 정보를 복귀시키도록 할 수 있다. 포트에 대한 시스템 전반 명칭 공간은 존재하지 않는다. 스레드는 이 스레드를 보유하는 태스크에 알려진 포트만을 액세스할 수 있다. 태스크는 포트 권리 세트를 보유하며, 각각의 포트 권리는(반드시 별개일 필요는 없는) 하나의 포트를 명명하고 그 포트에 허용된 권리를 지정한다. 포트 권리는 메시지로 전송될 수 있다. 태스크는 이러한 방식으로 포트 권리를 얻는다. 포트 권리는 포트 명칭으로 명명되고, 이 포트 명칭은 그 권리를 보유하는 태스크의 문맥내에서만 의미를 갖는 커널에 의해 선택된 정수이다. 시스템내의 대부분의 동작은 처리되고 있는 객체의 관리자를 명명하는 포트로 메시지를 전송하는 것으로 구성된다. 본 명세서에서는, 이것이 다음과 같은 형태로 표시된다.
[객체(object) - 기능(function)]
이는 기능이 객체를 명명하는 포트로 (적절한 메시지를 전송함으로써) 호출된다는 것을 의미한다. 메시지는 포트(권리)로 전송되어야 하므로, 이 동작은 객체 베이스(basis)를 갖는다. 스레드를 프로세서 세트에 바인딩(binding)하는 것과 같은 일부 동작은 두개의 객체를 요구한다. 이들 동작의 경우 객체는 콤마에 의해 분리된다. 모든 엔티티가 포트에 의해 명명되지는 않으며, 이 경우 순수 객체 모델이 아니다. 포트 권리에 의해 명명되지 않은 두개의 주된 엔티티는 포트 명칭/권리 자신 및 메모리 범위이다. 이벤트 객체(event object) 또한 태스크 지역 ID(taskk local IDs)에 의해 명명된다. 메모리 범위를 처리하기 위해, 메시지는 소유 태스크(owning task)에 의해 명명된 보유 가상 어드레스 공간(containing virtual address space)으로 전송된다. 포트 명칭/권리 및 종종 연관된 포트를 처리하기 위해, 메시지는 소유 태스크에 의해 명명된 보유 포트 명칭 공간으로 전송된다.
[객채[id] - 기능]
으로 표시되는 첨자 표기법(subscript notation)이 사용되며, 이는 객체의 어느 범위 혹은 구성요소가 처리되야 하는지를 나타내기 위해 메시지에서 파라메터로서 id가 요구된다는 것을 나타낸다.
[객체(포트) - 기능]
으로 표시되는 괄호 표기는 본 명세서에서 특정한 방식으로 처리하기에 충분한 특권을 나타내기 위해 호스트 제어 포트(host control port)와 같은 특권 포트가메시지에서 파라메터로서 요구됨을 나타내기 위해 사용된다.
[포트 세트]
포트 세트는 메시지를 수신할 때 단일 유닛으로서 처리될 수 있는 포트의 세트이다. mach_msg 수신 동작은 수신 권리 혹은 포트 세트를 명명하는 포트 명칭에 대응하여 허용된다. 포트 세트는 수신 권리의 집단을 포함한다. 수신 동작이 포트 세트에 대응하여 수행될 때, 메시지는 세트에 속한 포트중 하나의 포트로 부터 수신된다. 수신된 메시지는 어느 멥버 포트(member port)로부터 메시지가 수신되었는가를 나타낸다. 포트 세트의 멤버인 하나의 포트로부터 메시지를 직접적으로 수신하는 것은 허용되지 않는다. 포트 세트에서 포트의 우선 순위(priority) 개념은 존재하지 않는다. 즉, 주어진 메시지가 포트 세트내의 어느 포트로부터 수신되는지에 대한 커널 선택에 대한 제어는 제공되지 않는다.
포트 세트를 지원하는 동작은 다음을 포함한다.
생성 및 삭제;
멤버쉽 변경(membership changes) 및 멤버쉽 질의(membership queries)
[포트 권리]
포트는 포트 권리를 사용하여 액세스될 수 있다. 포트 권리는 특정한 방법으로 특정한 포트에 대한 액세스를 허용한다. 포트 권리는 다음과 같은 3 가지 유형이 있다.
수신 권리(receive right) - 권리 보유자에게 연관된 포트로부터 메시지를 수신하도록 허용한다.
전송 권리(send right) - 권리 보유자에게 연관된 포트로 메시지를 전송하도록 허용한다.
단일 전송 권리(send-once right) - 권리 보유자에게 단일 메시지를 연관된 포트에 전송하도록 허용한다. 포트 권리는 메시지 전송후에 스스로 제거된다.
포트 권리는 mach-msg 호출시의 각종 옵션을 사용하여 또한 명시적인 커맨드에 의해 태스크사이에서 복제되고 이동될 수 있다. 메시지 동작을 제외하고 포트 권리는 단지 포트 명칭 공간의 멤버로서 처리될 수 있다. 포트 권리는 다른 시스템 엔티티가 생성될 때 묵시적으로 생성되고 명시적 포트 생성을 사용하여 명시적으로 생성된다.
커널은 포트에 대한 더 이상의 전송할 더 이상의 전송 권리가 존재하지 않을 경우, 이를 요구에 따라 선택된 포트로 통고한다. 또한, 단일 전송 권리의 파괴는 (이를 사용하여 메시지를 전송하는 것을 제외하고) 단일 전송 통고가 상응하는 포트로 전송되도록 한다. 요구시, 커널은 수신 권리의 파괴를 통고한다.
[포트 명칭 공간]
포트 및 포트 권리는 임의의 포트 혹은 권리가 직접적으로 처리되는 것을 허용하는 시스템 전반 명칭(system wide names)을 갖지 않는다. 포트는 단지 포트 권리를 통해서 처리될 수 있으며, 포트 권리는 포트 명칭 공간내에 포함될 때만 처리될 수 있다. 포트 권리는 포트 명칭 공간에 대한 색인인 포트 명칭에 의해 지정된다. 각각의 태스크는 연관된 단일 포트 명칭 공간을 갖는다. 포트 명칭 공간내의 엔트리는 다음과 같은 4 가지 가능한 값을 가질 수 있다.
MACH_PORT_NULL - 포트 권리와 연관되지 않음.
MACH_PORT_DEAD - 하나의 권리가 이 명칭과 연관되었으나, 이 권리가 참조한 포트는 파괴되었음.
포트 권리 - 포트에 대한 단일 전송, 전송 혹은 수신 권리.
포트 세트 명칭 - 수신 권리처럼 동작하는 명칭이나, 다수 포트로부터의 수신을 허용한다.
태스크에서 새로운 권리를 얻으려면 새로운 포트 명칭이 발생한다. 코트 권리가 그들의 포트 명칭을 참조함으로써 포트 권리가 처리됨에 따라, 포트 명칭은 종종 스스로 처리된다. 주어진 포트 명칭 공간내의 주어진 포트에 대한 모든 전송 및 수신 권리는 동일한 포트 명칭을 갖는다. 주어진 포트에 대한 각각의 단일 전송 권리는 다른 전송 원리와는 다른 또한 보유된 전송 혹은 수신 권리에 사용되는 포트 명칭과는 다른 명칭을 갖는다. 포트 명칭을 지원하는 동작은,
생성 및 삭제
연관된 유형의 질의
재명명
요구에 따라, 사용불가능하게 된 명칭을 통고하는 커널 동작을 포함한다.
포트 명칭 공간은 태스크에 복속되므로, 그들을 소유하는 태스크와 함께 생성되고 제거된다.
[메시지]
메시지는 두 엔티티 사이에서 전송되는 데이타, 메모리 영역 및 포트 권리의 집단이다. 메시지 그 자체는 시스템 객체가 아니다. 그러나, 메시지는 큐잉되기 때문에 중요한 요소이다. 왜냐하면, 메시지가 전송되고 수신될 때의 시간사이에서 상태를 유지할 수 있기 때문이다. 이 상태는
순수 데이타;
메모리 범위의 복제본;
포트 권리;
전송자의 보안 토큰;
을 포함한다.
[메시지 큐]
포트는 메시지의 큐(a queue of message)로 구성된다. 이 큐는 메시지를 전송하는 메시지 동작(mach_msg)을 통해서만 처리된다. 큐와 연관된 상태는 큐잉된 메시지의 순서화된 세트 및 메시지의 수의 설정가능한 제한이다.
[가상 어드레스 공간]
가상 어드레스 공간은 이 가상 어드레스 공간을 소유하는 태스크내에서 실행중인 스레드가 참조하도록 허용된 유효 가상 어드레스 세트를 정의한다. 가상 어드레스 공간은 소유 태스크에 의해 명명된다.
가상 어드레스 공간은 희소하게 분포된 색인된 페이지 세트로 구성된다. 개별 페이지의 속성은 요구되는 바에 따라 설정될 수 있다. 효율성을 위하여 커널은 동일한 속성을 갖는 가상적으로 인접한 페이지 세트를 내부 메모리 영역으로 그룹화한다. 효율성을 위하여 커널은 요구되는 바에 따라 메모리 영역을 자유롭게 분할하거나 통합할 수 있다. 시스템 메카니즘은 메모리 영역의 아이덴티티에 민감하지만, 대부분의 사용자 액세스는 그렇게 영향을 받지 않으며, 메모리 영역에 걸쳐 자유롭게 존재할 수 있다. 주어진 메모리 영역은 메모리 관리기의 동작을 통해 자신과 연관된 별개의 시맨틱스를 가질 수 있다. 새로운 메모리 범위가 가상 어드레스 공간에 설정될 때, 추상 메모리 객체가 디폴트에 의해 지정되며, 시맨틱스를 제공하는 태스크(메모리 관리자)와 연관되어 상기 메모리 범위의 시맨틱스를 나타낸다. 가상 어드레스 공간은 태스크가 생성될 때 생성되며, 태스크가 제거될 때 제거된다. 어드레스 공간의 초기 내용은 태스크_생성 호출(task_create call)에 대한 각종 옵션 및 이 호출에 사용되는 프로토타입 태스크의 메모리 범위의 계승 특성으로부터 결정된다. 가상 어드레스 공간상에서의 대부분의 동작은 그 어드레스 공간내의 메모리 범위를 명명한다. 이들 동작은,
범위 생성 혹은 할당 및 재할당;
범위의 복제;
퇴거(eviction)를 방지하기 위한 물리적 메모리로의 페이지의 기록(writing) 을 포함하는 특정 속성의 설정;
메모리 보안 속성의 설정;
계승 특성의 설정;
범위의 직접적인 판독 및 기록;
보조 기억 장치(backing storage)로 범위 비움(flush) (범위내의 임의의 할당을 차단하는)범위 유보;
[추상 메모리 객체]
마이크로커널은 사용자 모드 태스크가 가상 어드레스 공간의 참조 부분과 연관된 시맨틱스를 제공하는 것을 허용한다. 마이크로커널은 추상 메모리 객체의 특정을 허용함으로써 상기 동작을 수행하며, 상기 추상 메모리 객체는 이 메모리 객체에 의해 지지되는 메모리 범위의 비 상주 상태를 나타낸다. 이 메모리 객체를 구현하고 이 메모리 객체를 명명하는 포트에 전송되는 메시지에 응답하는 태스크는 메모리 관리자로 칭해진다. 커널은 주 메모리를 각종 메모리 객체의 내용의 직접 액세스가능 캐시로서 사용한다. 커널은 메시지를 추상 메모리 객체 포트로 전송하여 커널이 원하는 바에 따라 캐시를 채우고 비우므로써 이 캐시를 보존하기 위해 각종 메모리 관리기와 비동기적으로 대화한다. 추상 메모리 객체에 대한 동작은,
초기화;
페이지 판독;
페이지 기록;
강제(force) 및 비움 동작의 동기화;
페이지 액세스 허용 요구;
페이지 복제;
종료;
를 포함한다.
[메모리 객체 대표]
추상 메모리 객체 포트는 커널이 사용되어 메모리 객체의 보조 저장장치에 대한 액세스를 요구하는데 사용된다. 이러한 대화의 보호 속성(protected nature)으로 인해, 메모리 관리자는 전형적으로 고객의 추상 메모리 객체 포트에 대한 액세스를 제공하지 않는다. 대신, 고객에게 메모리 객체 대표에 대한 액세스가 주어진다. 메모리 객체 대표는 고객의 메모리 객체 표현이다. 이 포트에 대해서는 단지 하나의 동작만이 허용되며, 이 동작은 연관된 메모리 객체를 태스크의 어드레스 공간으로 매핑하는 것이다. 이러한 요구를 행하면, 매핑 커널과 메모리 관리자 사이에 프로토콜이 개시되어 기저의 추상 메모리 객체(underlying abstract memory object)를 초기화하게 된다. 이러한 특수 프로토콜을 통해 커널은 대표에 의해 표현된 추상 메모리 객체 및 대표에 의해 허용된 액세스 모드 세트를 통고받는다.
[메모리 캐시 객체]
주어진 추상 메모리 객체와 연관된 상주 페이지를 포함하는 커널의 주 메모리 캐시 부분은 메모리 캐시 객체로서 언급된다. 메모리 객체의 메모리 관리자는 커널의 메모리 캐시 객체에 대한 전송 권리를 보유한다. 메모리 관리자는 연관된 메모리 캐시 객체에 메시지를 전송함으로써 자신의 추상 메모리 객체의 추상화를 제공하기 위해 커널과 비동기적으로 대화한다.
메모리 캐시 객체상의 동작은,
동작 속성의 설정;
속성 복귀;
커널에 페이지 제공;
커널에 의해 요구된 페이지는 사용불가임을 표시;
커널에 의해 요구된 페이지는 커널의 디폴트 규칙(kernel's default rules)인 완료될 객체의 강제 지연된 복제본(Force delayed copies)에 의해 채워져야 함을 표시;
메모리 관리자에 전송된 페이지는 메모리 페이지에 대한 제한 액세스(Restrict access)를 위해 배치됨을 표시;
성능 힌트(performance hints)를 제공;
종료;
를 포함한다.
[프로세서]
스레드를 실행할 수 있는 각각의 물리적 프로세서는 프로세서 제어 포트에 의해 명명된다. 비록, 프로세서는 실제적인 일을 수행한다는 점에 있어서는 중요하지만, 프로세서 세트의 멤버라는 것을 제외하고는 마이크로커널에 있어서는 그리 중요하지 않다. 프로세서 세트는 스레드 세트를 스케쥴하는데 사용되는 프로세서 풀(pool of processors)의 베이스(basis)를 형성하고, 이와 연관된 스케쥴링 속성을 갖는다. 프로세서에 대해 지원되는 동작은
프로세서 세트에 대한 할당;
시작 및 중단과 같은 머신 제어;
를 포함한다.
[프로세서 세트]
프로세서는 프로세서 세트로 그룹화된다. 프로세서 세트는 자신에게 할당된 스레드를 스케쥴하는데 사용되는 프로세서 풀을 형성한다. 프로세서 세트는 스레드 세트의 스케쥴가용성을 일관되게 제어하는 베이스로서 존재한다. 이 개념은 또한 시스템내의 주어진 활동에 프로세스를 조할당(coarse allocation)하는 방법을 제공한다. 프로세서 세트에 대해 지원되는 동작은,
생성 및 삭제;
프로세서의 할당;
스레드 및 태스크의 할당;
스케쥴링 제어;
를 포함한다.
[호스트]
네트워크된 마이크로커널 시스템에서의 각 머신(유니프로세서 혹은 멀티프로세서)은 자신 소유의 마이크로커널 실례(instantiation)를 실행한다. 호스트 멀티프로세서(100)는 일반적으로 고객 태스크에 의해 처리되지 않는다. 그러나, 각 호스트는 각각 자신만의 포트 공간, 물리적 메모리 및 다른 자원을 갖는 자신 소유의 마이크로커널(120)을 가지므로, 실행 호스트는 가시적이며 종종 직접적으로 처리된다. 또한, 각 호스트는 자신의 통계를 생성한다. 호스트는 자유롭게 분산되는 명칭 포트에 의해 명명되며, 이 명칭 포트는 호스트 및 밀접하게 보유되며 호스트를 처리하는데 사용될 수 있는 제어 포트에 대한 정보를 획득하는 데 사용될 수 있다. 호스트에 대해 지원되는 동작은,
클럭 처리;
통계 수집;
재 부팅(Re-boot);
디폴트 메모리 관리가 설정;
프로세서 및 프로세서 세트의 목록 획득;
을 포함한다.
[클럭]
클럭은 일정 주파수에서 시간 값 카운터를 증가시킴으로서 시간 경과 표시를 제공한다. 멀티컴퓨터내에서의 각각의 호스트 및 노드는 하드웨어에 의해 지원되는 각종 클럭 및 타이머에 기초한 자신의 클럭 세트 및 이들 타이머상에 구축된 추상 클럭을 구현한다. 주어진 시스템에 의해 구현되는 클럭 세트는 구성 시간(configuration time)에서 설정된다. 각각의 클럭은 명칭 및 제어 혹은 특권 포트에 모두에 의해 명명된다. 제어 포트를 통해 클럭의 시간 및 해상도(resolution)을 설정할 수 있다. 명칭이 주어졌을 때, 태스크는,
클럭의 시간 및 도출 결정.
시간 값을 매핑하는 메모리 객체 발생.
주어진 시간까지 지연.
주어진 시간에서 통고 혹은 경보(alarm) 요구.
를 수행한다.
[제3장. 태스크 및 스레드]
이 장은 사용자 관점에서 스레드 및 태스크에 대해 논의한다. 스레드는 마이크로커널 시스템(115)내의 능동 엔티티(active entity)이다. 스레드는 태스크내의 제어 점으로서 역할하며, 태스크는 가상 어드레스 공간 및 다른 자원의 액세스 통로인 포트 명칭 공간을 스레드에 제공한다.
[스레드]
스레드는 기본적인 계산 엔티티이다. 스레드는 자신의 가상 어드레스 공간을 정의하는 단지 하나의 태스크에 포함된다. 스레드는 최소의 상태를 갖는 경량 엔티티이다. 스레드는 하드웨어에 의해 지시된 방법으로 스레드의 레지스터 값에 근거한 자신의 태스크의 공간으로부터 인스트럭션을 인출한다. 스레드가 직접적으로 취할 수 있는 유일한 행동은 자신의 레지스터를 처리하고 자신의 메모리 공간으로 부터 판독 및 자신의 메모리 공간으로 기록하는 인스트럭션을 실행하는 것이다. 특권 머신 인스트럭션의 시도는 예외를 발생시킨다. 예외는 차후에 논의된다. 어드레스 공간의 구조에 영향을 주거나, 혹은 어드레스 공간 이외의 다른 자원을 참조하기 위해, 스레드는 특수한 트랩 인스트럭션을 수행하여야 하며, 이 인스트럭션은 커널이 스레드를 대신하여 동작을 수행하도록 하거나, 혹은 스레드를 대신하여 소정의 에이전트에 메시지를 전송하도록 야기한다. 또한, 고장(faults) 혹은 다른 불법적인 인스트럭션 동작(illegal instruction behavior)은 커널로 하여금 자신의 예외 처리를 호출하도록 야기한다.
제2도는 스레드와 연관된 고객 가시 구조를 도시한다. 스레드 객체는 커널 스레드 포트에 전송되는 메시지의 수신자이다. 이 스레드 포트에 대한 전송 권리를 보유하는 임의의 태스크외에, 스레드 포트는 보유 프로세서 세트(containing processor set) 혹은 보유 태스크(containing task)를 통해 스레드의 스레드 자체 포트(thread:thread self port)로서 액세스가능하다.
[스레드에 의한 동작]
이 장은 스레드가 직접적으로 수행할 수 있는 동작을 상세히 설명한다. 스레드가 정확한 포트에 대한 권리를 획득하여 메시지를 이 포트로 전송한다면, 스레드는 어떠한 것도 수행할 수 있다. 스레드가 수행할 수 있는 다양한 동작은 객체 조작을 서술하는 장에서 상세히 개시될 것이다.
[스케쥴링 지원 트랩]
마이크로커널은 우선적으로 스레드를 스케쥴한다. 이 스케쥴의 수행 방법은 다양한 요소와 관련된다. 현재, 스레드가, 주어진 프로세서 세트내에서 수행되어야 하는 스레드를 선택하는 데 사용되는 상기 요소와 연관된 우선 순위를 스케쥴링한다고 충분히 언급할 수 있다. 스레드_스위치(thread_switch)는 다양한 옵션을 갖는 문맥 스위치(a context switch)를 야기한다. 이 스레드_스위치는 소프트웨어 잠금 루틴(software lock routines)과 같이, 프로세서를 중단시켜 다른 스레드가 진행되기를 원하는 경우에 제공된다. 이 정보가 사용가능할 때, 상기 옵션은 적절한 새로운 스레드 동작을 선택하는 것과 관련이 있다. 스레드_스위치 옵션의 하나는 스레드의 우선 순위가 가능한 가장 낮은 값으로 저하(depress)되도록 스케쥴링하여 다른 스레드가 동작하게 하고 이 순위 저하된 스레드를 차단시키는 동작을 수행한다. 이 우선순위 저하는 주어진 시간이 초과하면 취소되며, 스레드는 우선순위 저하에도 불구하고 동작하고, 스레드-스레드_중지가 호출되거나 혹은 스레드-스레드_저하_중지가 호출된다. 최종적으로, 클럭_휴지 트랩(clock_sleep trap)은 지정된 시간까지 스레드가 지연되도록 한다. 이러한 지연은 에러 복귀를 발생하기 위해 클럭_휴지를 야기하는 스레드_중지에 의해 중지될 수 있다.
[아이덴티티 트랩(Identitu Traps)]
이장에서 언급되는 소수의 트랩외에, 서비스에 대한 모든 다른 요구는 포트 권리를 요구한다. 현재 스레드 혹은 태스크를 조작하는 커널상의 요구조차도 (현재 스레드 혹은 태스크를 명명하는)포트 권리를 필요로 한다. 이러한 처리를 부트스트랩(bootstrap)하기 위해, 스레드는 어떠한 포트 권리없이 스레드 혹은 스레드의 태스크에 대한 포트 권리를 획득하는 방법을 필요로 한다. 이들 권리는 mach_스레드_자기(mach_thread_self) 및 mach_태스크_자기(mach_task_self) 트랩을 통해 각기 성취될 수 있다.
복귀된 포트 권리는 실제로 스레드- 스레드_설정_특별_포트(thread_set_special_port) 및 태스크- 태스크_설정_특별_포트(task_set_special_port) 메시지 호출을 통해 마지막으로 설정된 스레드_커널_포트(THREAD_KERNEL_PORT) 및 태스크_커널_포트(TASK_KERNEL_PORT) 특별 포트이다. 이들 특별 포트에 대한 디폴트 값은 각기 실제 커널 스레드 및 태스크 포트이다. 태스크 혹은 스레드의 생성자는 스레드 혹은 태스크를 시작하기 전에 이들 특별 포트값을 설정할 수 있으며, 따라서 스레드 혹은 태스크는 자신의 커널 포트를 액세스하지 않지만, 대신 자신에게 행해지는 서비스를 요구할 때 소정의 매개 포트를 야기시킨다. 커널은 또한 트랩, mach_호스트_자기(mach_host_self)를 제공하며, 전송 권리를 태스크에 대한 호스트의 명칭 포트로 복귀시킨다.
[부트스트랩 응답 포트 트랩(Bootstrap Reply Port Trap)]
mach_응답_포트(mach_reply_port) 트랩은 또한 부트스트랩의 목적을 위해 사용된다. 전술한 바와 같이, 서비스 요구가 응답을 복귀시킨다면, 제2포트가 필요하게 된다. 이 트랩은 이 후 모든 다른 포트 관련 호출에 사용될 수 있는 초기 응답 포트(수신 권리)를 생성하는데 사용된다. 태스크의 자기 포트가 널(null)이라면, 태스크에 대한 마이크로커널 서비스의 사용 동작이 중지되고, 또한 이 호출은 널로 복귀한다.
[메시지 전송 및 수신 트랩]
최종적이고 가장 중요한 트랩은 mach_msg_trap 이다. 이 트랩은 mach_msg 라이브러리 루틴에 의해 발생된다. 상기 트랩은 모든 다른 시스템 서비스에 대한 액세스를 제공한다. 상기 트랩은 주어진 권리에 의해 명명된 포트로/로부터 메시지를 전송 및/혹은 수신한다. 이 호출의 시멘틱스는 커널 프로그래밍 문서 및 또한 이 문서내의 다양한 장에 포함되고 상세히 서술된다.
[예외 처리(exception processing)]
스레드에서 예외상황이 발생할 때, 스레드는 커널 문맥에서 동작하며, 메시지를 전송한다. 이 메시지의 내용은 예외 포트에 대한 예외를 서술한다. 예외는 커널 프로그래밍 참조 문서내의 포착_예외_증진(catch_exception_raise)하에서 리스트된다. 이 메시지에 대한 성공적인 응답은 스레드-설정-상태에 의해 변화된 상태에서 스레드가 계속되도록 한다. 어떠한 주어진 예외상황에서, 적용되는 이하 두개의 예외 포트가 존재한다.
예외 지정 유형에 대한 스레드 지정 포트
예외 지정 유형에 대한 태스크 포트
스레드 지정 포트는 스레드-스레드_설정_예외_포트로서 설정되고, 스레드-스레드_획득_예외_포트로서 판독된다. 태스크 포트는 태스크-태스크_설정_예외_포트로서 설정되고 태스크- 태스크_획득_예외_포트로 판독된다. 스레드-스레드_교체_예외_포트(thread_swap_exception_ports) 및 태스크-태스크_교체_예외_포트 호출은 이전 예외 포트를 설정하고 복귀시키며, 극미한 교체(atomic swap)를 수행한다.
커널은 리스트된 순서로 이들 포트중 제1포트를 예외 메시지의 목적지(정의되었다면)로서 선택한다. 반면에, 성공적인 응답은 스레드가 계속 되기를 야기하며, 성공적이지 않은 응답은 커널이 예외 메시지를 제2포트에 전송하도록 한다. 예외 메시지가 성공적인 응답을 수행하지 않는다면, 스레드는 종료된다. 예외 포트가 아래와 같이 설정되었을 때 이중 하나를 선택하여 커널은 다양한 예외 메시지 유형을 전송할 수 있다.
예외_포트-포착_예외_증진 - 고장 스레드, 태스크 및 스레드 자기 포트 및 예외 및 상태 코드의 유형을 가리키는 메시지
예외_포트-포착_예외_증진_상태 - 예외 유형, 상태 코드 및 예외 포트가 설정되었을 때 선택된 레지스터 값을 갖는 스레드 상태의 플레이버(flavor)를 가리키는 메시지. 스레드 상태는 입력, 출력 모두이며, 스레드 상태를 변화시키는 응답을 허용한다.
예외_포트-포착_예외_증진_상태 아이덴티티 - 태스크 및 스레드 포트를 내포하는 포착_예외_증진_상태 메시지.
스레드가 직면하는 모든 예외 조건이 반드시 이러한 방법으로 수행되는 것은 아니다. 오류(fault)가 존재하지 않는 페이지는 예외 포트로 메시지를 전송하지 않는다. 대신에, 메시지는 오류 어드레스 라인(faulting address line)이 있는 메모리 페이지와 연관된 외부 메모리 관리자로 전송된다. 이러한 동작은 가상 메모리의 일부로 논의된다. 일반적인 예외 규칙이 항상 시스템 호출 인스트럭션에 적용되는 것은 아니다. 첫째로, 다수의 가능한 시스템 호출 수들은 마이크로커널 호출에 대해 포함된다. 잔존하는 시스템 호출 수는 처음에 정의되지 않는다. 이들 잔존하는 시스템 호출 수의 실행을 시도함으로써 전술한 바와 같은 EXC_SW_EMULATION 의 예외가 발생한다.
[스레드상의 동작]
이하 개시되는 장은 커널의 스레드 포트에 대해 전송 권리가 주어진 경우, 스레드에 대해 수행될 수 있는 다양한 작용을 개시한다.
[수명 및 소멸(Life and Death)]
스레드는 태스크-태스크_생성(thread_create)을 통해 생성되고 스레드-스레드_종료(thread_terminate)를 통해 제거된다. 스레드는 주어진 태스크에 속하므로, 스레드 생성은 실지로 태스크상에서 수행되는 동작이다. 이 동작 결과는 새로운 스레드의 커널의 스레드 포트에 대한 전송 권리이다. 주어진 태스크에서 모든 스레드에 대한 커널 스레드 포트에 대한 리스트는 태스크-태스크_스레드로 획득될 수 있다. 새로이 생성된 스레드는 중지한 상태로 존재한다. 이는 스레드-스레드_중지가 자신의 제1인스트럭션을 수행하기에 앞서 호출된 경우와 동일하다. 스레드는 중지 상태에서 생성되고, 따라서 이 스레드의 머신 상태는 시작하기 전에 적절하게 설정될 수 있다. 중지 상태로부터 스레드를 제거하기 위해 스레드-스레드_재개(thread_resume)가 사용된다. 최적화를 이루기 위해, 스레드-스레드_생성, 스레드_설정_상태 및 스레드_재개를 동작 생성을 위해 필요한 단계의 순서는 태스크-스레드_생성_동작 호출로 통합된다.
[스레드 상태]
스레드는 머신 상태 및 특별 포트 세트의 두 주요한 상태 세트를 갖는다. 스레드의 머신 상태는 스레드-스레드_획득_상태를 사용하여 획득되고, 스레드-스레드_설정_상태를 사용하여 설정된다. 임의의 지점에서 스레드의 상태를 설정한 결과는 정의되지 않는다. 결정적 결과를 얻기위해서는 다양한 단계가 필요하다. 스레드-스레드_중지는 스레드를 중지하기 위해 필요하다. 이러한 그리고 후술되는 단계는 스레드가 생성되고 이미 동작한다면 불필요하다. 이들 단계는 예외 처리 혹은 신호 전송과 비동기적 인터럽션의 경우 필요하다. 스레드-스레드_중지가 호출되면, 이는 어떠한 시스템 호출(실지로 예외 혹은 페이지 빠짐 메시지와 같은 mach_msg 혹은 어떤 연관된 메시지 호출)이 중지되었다는 것을 뜻한다. 메시지 호출의 중지는 시스템 호출후에 호출의 인터럽션을 가리키는 복귀 값으로 스레드의 상태를 상기 지점에 설정한다. 페이지 오류 혹은 예외의 중지는 페이지 오류 혹은 예외의 지점에 스레드를 잔존하게 한다. 스레드를 재개하는 것은 페이지 오류 혹은 예외를 회복시킨다. 스레드_중지는 다중 페이지 메모리 관리 동작과 같은 비 회복가능 시스템 호출을 중지한다. 스레드-스레드_설정_상태는 이후 안전하게 사용될 수 있다.
스레드-스레드_재개는 스레드를 재시작한다. 스레드는 일반적으로 스레드와 연관된 단지 하나의 특별 포트만을 갖는다. 이 포트는 스레드상에서의 동작을 요구하는데 사용되는 스레드의 값이다. 이 값은 커널 스레드 일반적으로 커널 스레드 포트와 동일하지만, 스레드의 생성자에 의해 설정될 경우 상이할 수도 있다. 이 포트는 스레드-스레드_획득_특별_포트에 의해 복귀되고, 스레드-스레드_설정_특별_포트에 의해 설정된다. 중지 카운트 및 스케쥴링 정보와 같은 다양한 커널 스레드 상태는 스레드-스레드_정보를 사용하여 획득될 수 있다.
[스케쥴링 제어]
아래의 작용들은 스레드의 스케쥴링에 영향을 끼친다. 이들 작용은 물리적 자원 관리하에서 서술된다.
스레드, 프로세서_설정_제어-스레드_할당(thread_assign)
스레드-스레드_할당_디폴트(thread_assign_default)
스레드-스레드_획득_할당(thread_get_assignment)
스레드(프로세서_설정_제어)-스레드_설정_방안
스레드-스레드_방안(thread_policy)
스레드(호스트_제어)-스레드_와이어(thread_wire)
스레드-스레드_우선순위(thread_priority)
스레드(프로세서_설정_제어)-스레드_최대_우선순위
스레드_와이어 호출은 스레드를 와이어됨(wired)으로 표기하며, 이는 커널 자원 관리에 대해 특권(privileged)이 있다는 것을 의미한다. 와이어된 스레드는 항상 바람직하게 스케쥴될 수 있을 것이며, 자유 메모리(free memory)가 극히 부족할 때에도 메모리를 사용할 수 있다. 이러한 특성은 디폴트 페이지 아웃 경로(default page-out path)내의 스레드에 할당된다. 디폴트 페이지 아웃 경로내에 있지 않는 스레드는 이러한 특성을 가질 수 없으며, 커널의 페이지 자유 리스트가 소모되는 것을 차단한다.
[태스크]
태스크는 스레드 세트를 보존하는 컨테이너로서 보여질 수도 있다. 태스크는 자신이 포함하는 스레드에 적용하는 디폴트 값을 포함한다. 가장 중요한 사실은, 태스크는 자신이 포함하는 스레드를 실행하는 데 필요한 구성요소 즉, 포트 명칭 공간 및 가상 어드레스 공간을 포함한다는 것이다.
제3도는 고객 가시 태스크 구조를 도시한다. 태스크 객체는 커널 태스크 포트로 전송된 메시지의 수신기이다. 태스크 포트에 대한 전송 권리를 보존할 수 있는 임의의 태스크를 제외하고는, 태스크 포트는 태스크의 태스크 자기 포트, 포함된 스레드 혹은 포함하는 프로세서 세트로부터 획득될 수 있다.
[수명 및 소멸]
새로운 태스크는 태스크-태스크_생성으로부터 생성된다. 태스크 생성은 존재하는 원형 테스트가 요구되는 동작이라는 것을 유의해야 한다. 새로운 태스크는 빈 가상 어드레스 공간 혹은 부모 태스크로부터 계승된 하나의 태스크로서 생성될 수 있다. 새로운 태스크의 포트 명칭 공간은 비어있다. 새로운 태스크는 부모 태스크의 PC 샘플링 상태, 특별 및 예외 포트를 계승한다. 태스크는 태스크-태스크_종료로서 제거된다. 이 동작은 생성시에 태스크가 제거되도록 요구하며, 부모가 지정되도록 요구하지는 않는다. 태스크의 가상 어드레스 공간 및 포트 명칭 공간은 제거된다. 태스크에 대한 다양한 통계는 태스크-태스크_정보로 획득될 수 있다.
[특별 포트]
태스크는 연관된 포트 명칭 공간은 제외하고, 작은 특별 포트 세트를 갖는다. 태스크는 이하 개시되는 연관된 특별 포트를 갖는다.
태스크가 태스크 그 자신상에서 동작이 이루어지도록 요구하는 데 사용하는 포트. 이 포트는 커널 태스크 포트와 동일하지만, 상이하게 설정된다면 상이할 수도 있다.
어떠한 곳에도 사용될 수 있는 부트 스트랩 포트. 그러나 이 포트는 다른 서비스를 위치시키는 데의 사용을 위해 태스크가 태스크 자신이외의 다른 것을 보존하는 초기 포트로 간주된다.
호스트를 포함하는 정보를 요구하는데 사용되는 포트. 일반적으로 호스트 명칭 포트와 동일하다.
이들 포트는 태스크-태스크_획득_특별_포트에 의해 복귀되고, 태스크-태스크_설정_특별_포트에 의해 설정된다. 새로운 태스크에서 태스크 자기 포트는 제외하고 이들 포트의 값은 태스크_생성_호출의 목표였던 태스크로부터 계승된다. 태스크는 또한 예외 처리에서 도시된 바와 같이 부모 태스크로부터 계승된 예외 포트를 갖는다.
[스레드 관리]
스레드는 단지 하나의 태스크에 종속된다. 스레드는 태스크-태스크_생성으로서 생성된다. 태스크내에 제공된 스레드 세트는 태스크-태스크 스레드로서 발견될 수 있다. 비록 태스크는 그 자체로 실행하지는 않지만, 이후 태스크에 포함된 스레드에 적용할 태스크에 대한 일부 수행 특성이 설정될 수 있다. 태스크내의 모든 스레드는 태스크-태스크_중지 및 태스크-태스크_재개에 의해 중지될 수 있고 혹은 함께 재개될 수 있다. 이들 동작은 스레드의 중지 카운트 및 태스크의 중지 카운트에 영향을 끼친다. 스레드는 단지 자신 및 자신의 태스크 중지 카운트가 0이 되는 경우에만 실행할 수 있다. 스레드에 대한 디폴트 스케쥴링 특성은 이하 개시되는 바와 같이 설정될 수 있다.
태스크, 프로세서_설정_제어-태스크_할당
태스크, 태스크_할당_디폴트
태스크, 태스크_획득_할당
태스크, 태스크_우선순위
[아이덴티티]
각 태스크는 커널에 의해 인터럽터되지 않는 보안 토큰으로서 라벨된다. 이 보안 토큰은 서비스의 요구자에 관한 액세스 매개 판정신뢰로서 서버에 의한 사용을 위해 태스크에 의해 전송된 메시지로 전송된다. 이 보안 토큰은 태스크_생성에 의한 부모 태스크로부터 계승된다. 상기 보안 토큰은 특권 태스크(보안)-태스크_설정_보안_토큰 호출의 경우에만 변화될 수 있다. 보안 포트는 부트스트랩 태스크에 대해 제공된 특권 포트이며, 이 부트 스트랩의 목적은 태스크 아이덴티티의 설정 및 변화를 지원하는 것이다.
[제4장 IPC]
공유하는 메모리를 제외하고는, 마이크로커널 태스크는 순전히 메시지를 전송하고 응답을 수신함으로써 자신의 환경과 상호작용한다. 이들 메시지는 포트를 사용하여 전송된다. 포트는 단일 수신기를 갖는 통신 채널이며, 다수의 전송자를 가질수 있다. 태스크는 메시지를 전송하고 수신하는 능력을 규정하는 이들 포트에 대한 권리를 보존한다.
[포트]
포트는 서비스 및 서비스를 제공하는 서버를 요구하는 고객사이의 단방향 통신 채널이다. 포트는 단일 수신기를 가지며, 다수의 전송자를 구비할 수 있다. 자원이 지원된 커널을 나타내는 포트는 수신기로서 커널을 갖는다. 태스크에 의해 지원된 서비스를 명명하는 포트는 포트의 수신기로서 태스크를 포함한다. 이러한 수신기체제는 차후의 포트 권리에서 논의되는 바와 같이, 필요에 따라 변경될 수 있다.
포트와 연관된 상태는,
연관된 메시지 큐;
참조 카운트 혹은 포트에 대한 권리;
포트 권리 및 라인외 메모리(out-of-line memory) 수신 제한;
메시지 시퀀스 번호;
수신 권리로부터 생성된 전송 권리 번호;
포함하는 포트 세트;
지정되었다면, 더이상 전송자가 아닌(no-more-sender) 명칭;
이다.
제4도는 일련의 전송 권리 및 단일 수신 권리를 도시하는 전형적인 포트를 나타낸다. 연관된 메시지 큐는 일련의 순서화된 메시지를 갖는다. 메시지의 하나가 도시되어, 자신의 목적 포트를 나타내며, 응답 포트 참조, 메시지에서 전달되는 전송 및 수신 권리 및 라인외 메모리 혹은 가상 복제 메모리를 상세히 나타낸다.
포트 자체에 영향을 미치는 동작은 거의 존재하지 않는다. 대부분의 동작은 이들 권리를 포함하는 포트 권리 및 포트 명칭 공간 혹은 메시지 큐에 영향을 끼친다. 임의의 다른 시스템 엔티티가 생성될 때 포트는 생성된다. 또한 mach_reply_port 는 포트를 생성한다. 포트는 명시적으로 포트_명칭_공간 [포트_명칭] - mach_port_allocate 및 포트_명칭_공간 [포트_명칭] - mach_port_allocate_name 에 의해 생성될 수 있다. 포트는 명시적으로 제거될 수 없다. 포트는 수신 권리가 제거되었을 때만 제거된다. 포트의 속성은 생성시에 할당된다. 메시지에서 수신될 수 있는 포트 권리 수의 제한 혹은 라인외 메모리의 양과 같은 이들 속성의 일부는 포트_명칭_공간 [포트_명칭] - mach_name_set_attributes 로 변경될 수 있다. 이들 속성은 포트_명칭_공간 [포트_명칭] - mach_port_get_attributes 로 획득될 수 있다.
포트의 존재는 모든 포함된 구성요소들에게 명백히 중요하다. 이러한 바와 같이, 포트를 사용하는 많은 태스크는, 포트가 동작하지 않을 때, 메시지를 통해 통고되기를 기원할 수도 있다. 이러한 통고는 mach_msg(MACH_RCV_NOTIFY) 및 포트_명칭_공간[포트_명칭] - mach_port_request_notification의 옵션으로 요구된다. 결과적인 데드 명칭 통고(dead name notification)는 태스크의 포트 명칭이 명명된 포트의 제거로 인해 불필요하게 되었음을 나타낸다. 메시지는 현재 데드 포트에 대한 태스크의 명칭을 나타낸다(차후에 포트 명칭 공간에서 논의될 것이다).
[메시지]
메시지는 데이타, 라인외 메모리 영역 및 두 엔티티사이에서 전송되는 포트 권리의 집합이다. 메시지는 자신의 권리내에서는 처리가능한 시스템 객체가 아니다. 그러나, 메시지는 큐잉되기 때문에 중요한 요소이다. 왜냐하면, 메시지가 전송되고 수신될 때의 시간사이에서 상태를 유지할 수 있기 때문이다. 순수한 데이타를 제외하고는, 메시지는 또한 포트 권리를 포함할 수 있다. 이는 중요한 사실이다. 이러한 방식으로 태스크는 메시지에서 새로운 권리를 수신하여 획득한다. 메시지는 프로세스간 통신(IPC) 서브시스템의 희소한 제어 부분 및 데이타 부분을 포함한다. 부가하여, 메시지는 메시지 자체의 외부에 존재하는 전송되는 데이타의 영역을 가리킬 수 있다. 이들 영역은 포트 권리를 포함할 수 도 있다. 메시지는 또한 전송자의 보안 토큰을 전송한다. 메시지의 제어 부분은 헤더 및 선택적으로 메시지 몸체 및 하나 혹은 그 이상의 메시지 서술자(descriptor)로 구성된다. 헤더는 메시지가 전송되는 포트를 위한 포트 명칭 및 응답이 요구될 때 응답이 전송되는 포트를 위한 보조 포트 명칭을 지정한다.
메시지 몸체가 주어지면, 헤더가 뒤따르며 이어지는 서술자의 수를 선언한다. 서술자가 존재하지 않는다면, 메시지는 복합(complex)으로 간주되지 않으며, 데이타의 복제나 혹은 명시적 전환이 IPC 서브시스템에 요구되지 않는다. 비 복합 메시지는 메시지 몸체를 포함하지는 않는다. 각 서술자는 라인외 메모리 영역, 포트 권리 및 포트 권리 어레이와 같은 커널 처리된 데이타 부분을 서술한다. 메시지 데이타 부분에 포함된 데이타는 IPC 서브시스템에 의해 익명(anonymous)의 바이트 어레이로서 처리된다. 메시지의 전송자 혹은 수신기 모두 공통적인 데이타 유형을 공유해야 한다. 루틴이 발생된 메시지 인터페이스 발생기(MIG)에서 시작하는 메시지를 위해, 제1의 8 바이트 데이타는 메시지에 포함된 데이타의 머신간 변환(intermachine conversion)을 가능하게하는 머신 인코딩 정보를 포함한다.
단일 포트 권리의 서술자는 권리 및 여러 유형의 권리로부터 권리를 발생하거나 혹은 복제하는 대신, 권리를 이동시키는 것과 같은 mach_msg 에 의해 수행되는 임의의 특정 변환(special transformation)을 명명한다. 라인외 포트 어레이에 대한 서술자는 또한 권리 세트에 대한 IPC 프로세싱을 지정하며, 모두 동일한 유형이 되어야 하지만, 포트 명칭 어레이의 어드레스 및 크기를 지정한다.
라인외 데이타 서술자는 라인외 영역의 크기 및 어드레스를 지정한다. 이 영역은 페이지의 시작점에서 시작할 필요는 없으며, 페이지의 정수 번호를 포함하지도 않는다. 단지 지정된 데이타만이 논리적 형태로 전송된다. 서술자는 큐잉 동작을 지정하여 메시지가 마치 vm_deallocate 와 같이 전송 태스크로부터 메모리 영역을 할당 해제하도록 할 것이다. 전송자에게는 데이타의 물리적 혹은 가상 복제본의 전송에 대한 선택이 주어진다. 가상 복제본을 요구함으로써 커널이 자신의 가상 복제본을 사용하는 것 즉, 기록시 복제, 대량의 데이타의 효율적인 복제를 위한 메카니즘을 허용한다. 그 결과로써, 수신기는 전송자 메모리 관리자에 의해 지지되는 가상 복제를 볼 수도 있다. 전송자 및 수신기 모두 사용된 잠재적 가상 복제 메카니즘으로 인해 메모리에 대한 액세스 시간에서의 불확정성을 경험할 수 있다. 물리적 복제의 선택은 전송자 및 수신기에 의한 결정적인 데이타 액세스를 보장한다. 라인외 데이타 영역 혹은 메시지 데이타에서의 어느 값도 타이프되지 않는다. 단지 메시지가 출발하는 포트 및 메시지 데이타에 대한 지식을 갖는 메시지 수신기만이 이들 데이타 영역을 해석하고 변환하는 것이 가능하다.
[메시지 트레일러(message trailers)]
메시지가 수신될 때, 트레일러는 디폴트에 의해 종단부에 추가된다. 트레일러는 일반적으로 IPC 서브시스템에 의해 부가되며, 물리적으로 메시지와 인접한다. 트레일러는 메시지 시퀀스 번호 및 전송자 보안 토큰과 같은 각종 전송 연관 필드(transmission-related fields)를 포함한다. 트레일러의 유형 및 크기는 mach_msg 에 대한 수신측 옵션을 통해 제어가능하다. 또한 전송자가 트레일러를 제공하기 위한 옵션으로서도 가능하다.
[메시지 큐]
포트는 메시지의 큐를 포함한다. 큐는 메시지를 전송하는 메시지 동작(mach_msg)을 통해서 처리된다. 메시지 큐의 유일한 제어가능 상태는 이 큐의 크기이다. 이 상태는 포트_명칭_공간[포트_명칭] - mach_포트_설정_속성이 연관된 포트의 수신 권리에 주어질 때 설정될 수 있다. 메시지 큐가 가득 차 있다면, 더 이상의 메시지는 큐잉되지 않는다. 호출자는 봉쇄(block)할 것이다. 포트에 전송된 메시지는 신뢰성있게 전송된다. 메시지의 수용은 모든 이전의 메시지가 수신되었으며 수신 포트상에서 큐잉된 순서로 수신되었음을 보장한다.
[포트 권리]
포트 권리는 특정한 방식으로 특정한 포트를 액세스하는 권리를 나타내는 엔티티이다. 포트는 포트 권리만을 통해 액세스될 수 있다. 이 문맥에서, 포트 권리는 다음과 같은 3 가지 유형이 존재한다.
수신 권리 - 연관된 포트로부터 메시지를 수신하는 홀더를 허용한다.
전송 권리 - 연관된 포트로 메시지를 전송하는 홀더를 허용한다.
단일 전송 권리 - 단일 메시지를 연관된 포트에 전송하는 홀더를 허용한다. 포트 권리는 메시지 전송후에 스스로 제거된다. 포트 권리는 포트를 식별하는 안전하고 위치 독립적인 방식이다. 이들 권리는 커널 보호된 엔티티이다. 고객은 단지 이들 권리에 대해 그들이 갖는 포트 명칭만을 통해 포트 권리를 처리한다.
[기본 처리]
mach_msg 는 권리가 처리되는 주요한 방법의 하나이다. 포트 권리는 태스크사이에서 이동될 수 있다. 즉, 전송자로부터 삭제되어 메시지내의 전송자로 부가될 수 있다. 메시지내의 옵션 플랙(Option flag)은 mach_msg가 현존하는 전송 권리의 복제본 생성, 혹은 수신 권리로부터 전송 혹은 단일 전송 권리의 발생을 야기하는 것을 허용한다. 권리는 또한 강제적으로 복제되거나 혹은 포트_명칭_공간 [포트_명칭] - mach_포트_추출_권리(메시지로 권리를 전송하는 목표와 동일) 및 포트_명칭_공간[포트_명칭] - mach_포트_삽입(메시지로 권리를 수신하는 목표와 동일)에 의해 이동된다. 메시지 동작을 제외하고는, 포트 권리는 단지 포트 명칭 공간의 멥버로서 처리될 수 있다.
제5도는 포트 명칭 공간 혹은 메시지로의 통과중에 포함된 포트 권리를 도시한다. 포트 권리는 다른 시스템 엔티티가 생성될 때 암시적으로 생성된다. Mach_응답_포트는 포트 권리를 생성한다. 포트 권리는 포트_명칭_공간 [포트_명칭] - mach_포트_할당 [포트_명칭] 및 포트_명칭_공간 [포트_명칭] - mach_포트_할당_명칭에 의해 명백히 생성된다. 포트 권리는 포트_명칭_공간 [포트_명칭] - mach_포트_할당해제 [포트_명칭] 및 포트_명칭_공간 [포트_명칭] - mach_포트_제거 에 의해 제거된다. 제거는 포트_명칭_공간[포트_명칭] - mach_포트_변경_참조등에 의해 포트 명칭 공간 처리의 부산물(by-product)이 될 수 있다. 수신 권리를 제공함으로써, 소정의 상태 정보가 포트_명칭_공간[port-name] - mach_포트_획득_속성으로서 획득될 수 있다.
[더 이상 전송자가 아님을 통고(No-More-Senders Modification)]
시스템은 각 포트에 대한 전송 및 단일 전송 수의 시스템 와이드 카운트를 보존한다. 이 시스템은 목적지 및 응답 포트 권리를 포함하는 메시지 통과 권리를 포함한다. 포트의 수신기는 포트에 대한 더 이상의 전송 권리가 존재하는 지의 여부를 알고 싶어할 수도 있으며, 이는 포트가 더 이상의 값을 갖지 않을 수도 있음을 나타낸다. 이러한 유형의 통고는 포트_명칭_공간[포트_명칭] - mach_포트_요구_통고를 사용하여 요구될 수 있다. 이 통고는 포트 명칭 공간의 일부분으로 논의된 전송 발생 카운트(make-send count)의 개념에 의존한다. 수신 권리를 다른 태스크로 이동함으로써 중요한 더 이상 전송자가 아님의 통고는 취소되며, 단일 전송 통고가 이 취소를 나타내기 위해 전송된다. 더 이상의 전송자가 아님의 통고는 현존하는 전송 권리의 수가 중요한 단일 전송 권리의 수에 관계없이 0가 될 때 발생한다.
[단일 전송 권리(send-once right)]
단일 전송 권리는 전송될 단일 메시지를 허용한다. 이들 권리는 단지 수신 권리로부터 발생된다. 단일 전송 권리는 이 권리로부터 메시지가 발생할 것을 보장하는 특성을 갖는다. 일반적인 경우, 단일 전송 권리는 메시지에서 목적지 포트로 이를 이용함으로써 활용된다. 이 권리는 메시지가 수신되었을 때 제거된다. 단일 전송 권리는 활용되는 시간까지 목적지 권리로 사용되지 않을 때는 태스크에서 태스크로 이동될 수 있다. 이 권리가 메시지 전송에서의 사용이외의 다른 방법으로 제거된다면, 단일 전송 통고는 포트로 전송된다. 대부분의 방법에서 단일 전송 권리가 사용되지 않을 때, 이 권리가 제거될 수 있다는 것은 명백하다. 불명료한 두가지 경우가 존재한다.
단일 전송 권리는 전송자 아님 통고(no-senders notification)의 목표 및 요구된 전송자 아님 통고가 삭제되거나 혹은 이동된 수신 권리의 포트로서 지정된다. 전송자 아님 통고가 나타나지 않기 때문에, 단일 전송 권리가 대신하여 발생된다.
메시지 장치를 수행하는 프로세서에서, 태스크는 메시지가 포트로부터 디큐잉된 이후 그러나 태스크에 복귀하기에 앞서서 자신의 수신 권리를 제공한다(후술되는 메시지 전송을 참조). 단일 전송 통고는 단일 전송 권리 및 포트를 통해 전송된 메시지사이의 손실 결합(lost association)을 나타내는 목적지 포트에 전송된다.
[포트 명칭 공간]
포트는 명명되지 않지만, 포트 권리는 명명된다. 포트 권리는 포트 명칭 공간내에 포함되어 존재함으로써만 명명될 수 있다. 포트는 포트 명칭 공간에 대한 색인인 포트 명칭에 의해 지정된다. 각 태스크는 포트 명칭 공간과 연관된다.
포트 명칭 공간내의 엔트리는 4 개의 가능한 값을 갖는다.
MACH_PORT_NULL - 포트 권리와 연관되지 않음
MACH_PORT_DEAD - 권리는 이 명칭과 연관되어 있으나, 권리가 참조한 포트는 현재 사용되지 않는다. 포트 명칭은 고객 태스크가 어떠한 동작이 발생하였는가를 이해하기 전에 명시적 동작이 취해져서 이 명칭이 재사용되지 않을 때 까지 이 상태에 유지된다.
포트 권리 - 포트의 단일 전송, 전송 혹은 수신 권리
포트 설정 명칭 - 수신 권리와 유사하게 동작하는 명칭이지만, 다수의 포트로부터의 수신이 허용된다. 다음 장에서 상세히 논의된다.
포트 명칭 공간이 포함하는 각기 다른 권리는 포트 명칭 공간에서 별개의 명칭을 가질 필요가 없다. 단일 전송 권리는 항상 각 별개의 권리에 대해 분할 명칭을 사용한다. 동일한 포트에 대한 수신 및 전송 권리는 합체된다. 즉, 포트 명칭 공간이 포트에 대해 3 개의 전송 권리를 유지한다면, 이 공간은 3 개의 모든 권리에 대해 단일 명칭을 가질 것이다. 포트 명칭은 명칭과 연관된 단일 전송, 전송, 수신, 포트 세트 및 데이타 명칭의 각각의 권리 유형에 대해 연관된 참조 카운트를 갖는다. 포트 명칭 공간이 또한 수신 권리를 보존한다면, 수신 권리는 전송 권리와 동일한 명칭을 가질 것이다.
명칭은 이와 연관된 포트가 제거될 때 사용되지 않게 될 것이다. 데드 명칭(dead name)을 보존하는 태스크는 이 명칭하의 수신 권리를 보존할 수는 없다. 데드 명칭은 이전에 이 명칭에 의해 보존된 전송 참조의 수에 대한 단지 0 가 아닌 참조 카운트를 갖는다. 태스크는 자신의 명칭중의 하나가 포트_명칭_공간 [포트_명칭] - mach_포트_요구_통고를 사용하여 동작하지 않게될 때, 자신에게 전송된 메시지로 통고될 수 있다. 이 통고 메시지를 수신함으로써, 데드 명칭에 대한 참조 카운트는 증가하고 이 명칭을 처리하는 임의의 스레드와의 경쟁 상태가 해소된다. 태스크가 권리를 요구할 때는 언제나, 상기 규칙에 따르는 포트 명칭이 할당된다. 권리를 획득함으로써 이 권리의 유형에 대한 명칭의 참조 카운트는 증가한다. 참조 카운트는 포트_명칭_공간 [포트_명칭] - mach_포트_획득_참조로서 획득될 수 있다.
비록, 포트 명칭은 명백히 제거될 수 있고, 모든 참조는 포트_명칭_공간 [포트_명칭] - mach_포트_제거를 사용하여 제거될 수 있지만, 포트 명칭은 전형적으로 사용자 참조 카운트를 변경함으로써 처리된다. 포트_명칭_공간 [포트_명칭] - mach_포트_변경_참조는 명칭과 연관된 지정된 권리 유형의 참조 카운트를 변경한다. 포트_명칭_공간 [포트_명칭] - mach_포트_할당해제는 mach_포트_변경_참조와 유사하지만, 항상 카운트를 1 씩 감소시키고 전송 혹은 단일 전송 참조 카운트만을 감소시킬 것이다. 이 루틴은 포트 명칭을 변경시킬 수 있는 판정을 내리므로 동작하지 않게 될 수도 있는 포트 명칭의 참조 카운트를 처리하는데는 유용하다. 실제적으로 권리를 이동시키는 mach_msg 에 대한 옵션 및 포트_명칭_공간 [포트_명칭] - mach_포트_추출_권리는 명칭의 참조 카운트가 감소되도록 야기할 수 있다. 모든 참조 카운트가 0 가 될 때 포트 명칭은 해방(free)된다. 포트 명칭이 해방되고 데드 명칭 통고가 명칭에 대해 실시될 때, 포트 삭제된 통고가 발생된다. 데드 명칭 통고 요구를 갖는 명칭은 실제로 이하 3 가지 상태중 단지 하나의 상태에서 존재할 수 있다.
유효 권리 명명;
명칭이 사용되지 않을 때 전송된 데드 명칭 통고를 갖는 MACH_PORT_DEAD.
명칭이 널이 될 때 전송된 포트 삭제 통고를 갖는 MACH_PORT_NULL.
명칭의 유형과 같은 명칭에 대한 정보는 포트_명칭_공간 [포트_명칭] - mach_포트_유형 로 획득될 수 있다. 할당된 명칭의 목록은 포트_명칭_공간 [포트_명칭] - mach_포트_명칭 로서 획득될 수 있다. 이에 의해 권리가 알려진 명칭은 포트_명칭_공간[포트_명칭] - mach_포트_재명명 으로 변경될 수 있다. 수신 권리를 제공함으로써, 일부 상태 정보는 포트_명칭_공간 [포트_명칭] - mach_포트_획득_속성으로 획득될 수 있다.
수신 권리를 명명하는 포트 명칭은 더 이상 전송자가 아님의 통고 처리에 사용되는 연관된 전송 발생 카운트(make-send count)를 갖는다. 전송 발생 카운트는 (메시지 구성요소, 즉 mach_msg 에 대한 MACH_MSG_TYPE_MAKE_SEND 유형 서술자를 지정하는 포트 권리를 갖는)전송 권리가 수신 권리로부터 발생된 횟수의 커널 카운트이다. 이 전송 발생 카운트는 포트가 설정될 때 0 로 설정되며, 수신 권리가 메시지에서 전송될 때마다 0 로 리셋(reset)된다. 이 전송 발생 카운트는 또한 포트_명칭_공간 [포트_명칭] - mach_포트_설정_mscount로 변경될 수 있다. 전송 발생 카운트는 더 이상 전송자가 아님을 통고하는 메시지에 포함된다. 더 이상 전송자가 아님의 통고는 이 통고가 발생된 시점에서 전송 권리의 부족을 나타내지만, 여전히 중요한 단일 전송 권리는 존재할 수도 있는 사실을 유의해야 한다. 태스크는 단일 전송 권리의 트랙을 쉽게 유지할 수 있으며, 그 이유는 모든 단일 전송 권리가 메시지 혹은 단일 전송 통고를 보장하기 때문이다. 수신된 메시지에는 메시지가 수신되는 포트로부터 취해진 시퀀스 번호가 기록된다. 포트 세트로부터 수신된 메시지에는 적절한 멤버 포트로부터의 시퀀스 번호가 기록된다. 전송된 메시지에 위치한 시퀀스 번호는 겹쳐서 기록된다. 새로히 생성된 포트는 0 시퀀스 번호로 시작하며, 이 시퀀스 번호는 포트의 수신 권리가 이동할 때 마다 0 로 리셋되며, 또한 포트_명칭_공간 [포트_명칭] - mach_포트_설정_sequno 로 명백히 설정될 수 있다. 메시지가 포트로부터 디큐잉될 때, 이 메시지는 포트의 시퀀스 번호로 기록되며, 포트의 시퀀스 번호는 이 후 증가된다. 디큐잉 및 증가 동작은 극소로 이루어지므로, 포트로부터 메시지를 수신하는 스레드는 msgh_seqno 필드를 사용하여 메시지의 원래 순서를 재구성할 수 있다.
포트 명칭 공간은 틀림없이 태스크를 수행할 것이므로, 이 공간은 그 들이 소유하는 태스크와 함께 생성되고 제거된다.
[포트 세트]
포트 세트는 메시지를 수신할 때 단일 장치로서 처리될 수 있는 포트의 세트이다. mach_msg 수신 동작은 수신 권리 혹은 포트 세트중의 하나를 명명하는 포트 명칭에 대비해 허용된다. 포트 세트는 수신 권리의 집합을 포함한다. 수신 동작이 포트 세트에 대해 수행될 때, 메시지는 세트내의 포트중의 하나로부터 임의적으로 수신될 것이다. 포트 세트상에서 메시지의 전송 순서는 불확정적이며, 아래 두 발명 특허권 보호 신청의 구현에 따른다.
(1) 어떠한 포트 세트의 멤버도 자원의 고갈(resource starvation)을 경험하지 않을 것이다.
(2) 동일한 포트상의 다른 메시지에 대한 메시지 도착 순서는 보존된다.
세트내의 각각의 수신 권리는 자신의 명칭을 가지며, 이 세트 역시 자신의 명칭을 갖는다. 포트 세트에 대비한 수신은 자신의 포트에 메시지가 제공된 수신 권리의 명칭을 보고한다. 수신 권리는 단지 하나의 포트 세트에 포함될 수 있다. 태스크는 포트 세트내에 있는 수신 권리로부터 직접적으로 수신되지 않는다. 포트 세트는 포트_명칭_공간[포트_명칭] - mach_포트_할당 혹은 포트_명칭_공간 [포트_명칭] - mach_포트_할당_명칭으로 생성되며, 포트_명칭_공간 [포트_명칭] - mach_포트_제거 혹은 포트_명칭_공간 [포트_명칭] - mach_포트_할당해제로 제거된다. 포트 세트의 처리는 포트_명칭_공간[포트_명칭] - mach_포트_이동_멤버로 종료된다. 이 호출은 멤버를 세트에 부가할 수도 있고, 세트로부터 제거할 수도 있으며, 혹은 하나의 세트에서 다른 세트로 이동시킬 수도 있다. 포트 세트의 멤버쉽은 포트_명칭_공간[포트_명칭] - mach_포트_획득_설정_상태로 탐지될 수 있다. mach_msg 시스템은 전송 및 수신 마이크로커널 메시지를 호출할 수 있다. 2 개의 태스크사이에서 실제적으로 전송되는 메시지를 위해, 전송자는 전송 옵션 및 적절한 목표 포트를 갖는 mach_msg 를 발생해야 한다. 수신기는 수신 옵션을 갖는 mach_msg 호출을 발생하여 목표 포트상에서의 수신을 시도해야 한다. 두 호출의 순서는 중요하지 않다.
전송 동작은 포트에 대해 메시지를 큐잉한다. 메시지는 호출자의 데이타 복제본을 전송한다. 호출자는 전송 동작이 데이타 전송에 영향을 끼치지 않고 복귀한 후에 메시지 버퍼 및 라인외 영역(out-of 을 자유롭게 변경할 수 있다. 메시지에서 라인외로서 지정된 데이타는 전송자 옵션 및 메카니즘의 커널 선택에 의존하는 가상 복제본 혹은 물리적 복제본으로서 전송된다. 커널은 영역을 정의하는 페이지 세트의 가상 메모리 화상을 구성한다. 라인외 포트 어레이는 목적지 공간에 대한 적절한 포트 명칭으로 물리적으로 복제되고 전환된다. 커널이 가상 복제본을 구성한다면, 커널은 가상 복제본에서 데이타를 선행하는 제1페이지 부분 및 가상 복제본에서 데이타를 뒤따르는 마지막 페이지 부분을 0 로 한다. 호출자는 아래에 개시되는 동작중의 하나가 발생하지 않는다면 메시지가 큐잉될 수 있을 때까지 봉쇄한다.
메시지는 단일 전송 권리로 전송된다. 이들 메시지는 항상 강제적으로 큐잉된다. mach_msg 동작이 중단된다(thread_abort). 디폴트에 의해, mach_msg 라이브러리 루틴은 인터럽트된 동작을 재시도한다. 전송 동작은 자신의 타임 아웃 값을 초과한다. 포트는 제거된다. 메시지를 전송하는 것은 두 단계 프로세스이다. 제1단계는 메시지의 커널 복제본을 구성하는 것을 포함한다. 제2단계는 메시지를 큐잉하는 것을 포함한다. 무효 포트 권리 혹은 데이타 어드레스와 같은 제1단계 동안의 실패는 에러 복귀를 갖는 전송되는 메시지의 실패를 야기하지만, 나쁜 영향은 끼치지 않는다.
전송 타임 아웃 값이 초과되거나 혹은 인터럽트(thread_abort)가 발생할 때 제2단계에서의 실패가 또한 발생할 수 있다. 이들 실패는 전송의 실패를 야기하지만, 이러한 환경에서 커널은 슈도 수신 동작(pseudo-receive operation)으로 메시지 내용을 호출자에게 복귀시키기 위해 노력한다. 이 슈도 수신 동작은 메시지에만 존재하는 포트 권리 및 메모리의 손실(예를 들면, 메시지로 이동된 수신 권리, 혹은 할당 해제된 플랙으로 전송된 라인외 메모리)을 방지한다.
슈도 수신 동작은 정규 수신 동작과 매우 유사하다. 슈도 수신은 메시지 헤더에서 마치 메시지 몸체에 있는 것처럼 포트 권리를 제어한다. 슈도 수신후에, 메시지의 제공이 준비된다. 메시지가 제공되지 않는다면, 라인외 메모리 영역은 이동될 수 있고, 일부 포트 권리는 변경된 명칭을 가질 수도 있다.
수신 동작은 포트로부터 메시지를 디큐잉한다. 수신 태스크는 메시지로 운반되는 포트 권리 및 라인외 메모리 영역을 획득한다. 호출자는 헤더와 몸체가 복제되는 장소로 버퍼를 제공해야 한다. 수신된 메시지의 유형은 전송될 때와 동일하다. 메시지가 적합하지 않다면 제거된다. 옵션(MACH_RCV_LARGE)은 호출자가 대신에 필요한 버퍼 크기와 함께 에러를 수신하는 것을 허용하여 적절한 크기의 버퍼로 다른 수신 동작이 시도될 수 있도록 한다.
수신된 메시지는 포트 권리 및 라인외 메모리를 포함할 수 있다. 수신된 포트 권리 및 메모리는 소정의 방법으로 활용되거나 혹은 할당 해제된다. 포트 권리 혹은 라인외 메모리의 수신을 방해하는 자원의 부족은 그 엔티티를 제거한다. 포트 권리의 수신은 후술되는 포트 명칭 공간에서 개시되는 임의의 다른 수단에 의한 포트 권리의 삽입과 동일한 규칙을 따른다. 포트 권리 서술자는 수신된 권리의 유형을 개시한다.
전송된 각각의 라인외 영역에 대해, 커널은, 메모리의 위치를 정하고 커널이 물리적 복제본을 전송할 것인지 혹은 가상 복제본을 전송할 것인지(혹은 전송자에 의해 직접적으로 전송되었는지)에 대한 선택을 나타내는 수신된 메시지로 서술자를 복귀시킨다. 물리적 복제본을 전송하는 것은 결정론적인 동작을 보장한다. 비록 디폴트 메모리 관리자에 의해 지지되었지만, 커널의 가상 복제 최적화는 이미 메모리내에 존재하는 페이지 화상을 사용하거나 혹은 전송자의 메모리에 의해 지지되는 메모리 관리자로부터 페이지 화상을 인출할 수 있다. 비록, 이 동작이 수신 태스크를 임의의 메모리 관리기에 종속시킬 수 있지만, 대량의 메모리를 직접 복제하는데 있어서 중요한 기능 향상을 성취할 수 있다. 가상 복제의 최적의 경우는 전송자가 할당 해제 옵션에 사용되었을 때이다. 부가적인 정보를 위해서는 가상 메모리 관리(Virtual Memory Management)를 참조하기 바란다. 라인외 혹은 포트 어레이 메모리 영역의 수신을 위한 두가지 옵션이 존재한다. 제1옵션에서, 디폴트의 경우, 수신된 영역은 마치 vm_allocate 에 의한 것처럼 임시 메모리로서 수신기의 어드레스 공간에 동적으로 할당된다. 커널이 가상 복제본을 전송하였다면, 수신된 데이타는 전송자에서와 마찬가지로 할당된 공간에서 페이지내의 동일한 정렬로 나타난다. 다른 모든 경우에서는 할당된 데이타는 페이지 경계의 시작점에서 시작한다. 어떠한 환경하에서도 이 옵션으로 메시지를 수신하는 것은 우연히 가상 메모리 그 자체를 참조함으로써 수신기를 기능정지시킬 수가 없다.
제2옵션에서, 라인 수신 모드외의 다른 모드는 마치 vm_기록 처럼 라인외 영역을 지정된 영역내의 바이트로 겹쳐쓰도록 한다. 이 영역이 지정된 영역에 적합하지 않다면, 수신기는 에러를 검출할 것이다. 데이타 전송 및 데이타 정렬의 방법에 의존하는 각종 환경에서, 이 옵션은 페이지 처리를 수행하거나 혹은 실제적으로 데이타 복제를 수행한다. 이 동작은 어떠한 가상 복제본을 지지하고 임의적으로 수신기를 기능정지하는 메모리 관리자와 상호작용한다. 두 수신 모드의 선택은 MACH_RCV_OVERWRITE 옵션에 의존한다. 이 옵션을 설정하지 않을 때는, 모든 수신된 영역은 동적으로 할당되며, 설정하였으면 수신 버퍼는 전송 메시지에서의 서술자 목록과 동일한 유형의 분산(scatter) 서술자 목록을 기술하는 것으로 고려된다. 커널은 각각의 수신된 영역으로 무엇을 수행해야 할지를 결정하기 위해 이 목록을 스캔한다. 만약 영역의 전송 수를 제어하기 위한 충분한 서술자가 제공되지 않는다면, 임의의 부가적인 영역이 동적으로 할당될 것이다. 커널은 각각의 라인외 서술자를 감시(look at)하여 상응하는 영역의 처치(disposition)를 결정한다. 가상 복제의 전송 옵션은 동적인 할당을 포함하며, 물리적 복제의 옵션은 이 영역을 겹쳐쓰여지게 위치시키는데 사용되는 서술자 어드레스 및 크기 필드로의 겹쳐쓰기를 포함한다. 불충분한 크기는 에러의 복귀를 야기한다.
수신 동작은 또한, 메시지를 디큐잉하고 이후에 수신기내에 복제하는 두 단계 동작이다. 제1단계는 지정된 수신 타임 아웃 값이 초과하거나 혹은 수신의 실패(thread_abort)에 기인하여 실패할 수도 있다. 이들 상황은 수신되는 메시지에 영향을 끼치지는 않는다. 제2단계동안 발생하는 대부분의 실패는 메시지의 제거를 야기한다.
mach_msg 호출의 결과로서 요구될 수 있는 통고가 존재한다. 통고는 mach_msg 에 의해 발생되지만, MACH_RCV_NOTIFY 옵션에 의해서 요구된다. 이 옵션은 자동적으로 수신되고 마치 mach_포트_요구_통고 에 의한 것처럼 이 옵션에 대해 요구되는 데드 명칭 통고를 갖는 응답 포트 권리를 야기한다. 이 옵션은 RPC 상호작용의 어떤 부류에 대한 최적화이다. 응답 포트 명칭상의 데드 명칭 통고는 메시지 수신기가 적절한 방법으로 고객의 요구가 없음을 수신하는 것을 허용한다. 그러나, 응답 권리는 전형적으로 단일 전송 권리이기 때문에 응답을 전송하는 것은 권리를 제거하고 대신에 포트 삭제된 통고를 발생한다. 이 통고를 취소하는 최적화 방안은 mach_msg 에 대한 MACH_SEND_CANCEL 옵션에 의해 제공된다. 제5장 가상 메모리 관리(Virtual Memory Management) 마이크로커널의 가상 메모리 설계는 가상 메모리 시스템을 머신 의존(machine-dependent) 및 머신 독립 부분(machine independent)으로 층을 이룬다. 머신 의존 부분은 유효화(validating), 무효화(invalidating) 및 가상 메모리 페이지의 액세스 권리의 설정을 위한 단순 인터페이스(simple interface)를 제공하며, 이로인해 하드웨어 어드레스 맵을 보존한다. 머신과 무관한 부분은 (가상 어드레스 공간을 매핑하는)논리적 어드레스 맵, 이 맵내의 메모리 영역 및 외부 메모리 관리 인터페이스를 통한 이들 영역의 보조 저장 장치(메모리 객체)에 대한 인터페이스에 대한 지원을 제공한다.
가상 메모리 시스템은 적당한 수의 프로세스를 갖는 균등한 메모리 액세스 멀티프로세서를 위해 설계된다. 비 균일 메모리 액세스를 제공하는 구조 혹은 비 원격 메모리 액세스를 위한 지원이 현재 연구되고 있다.
마이크로커널 가상 메모리 설계의 특성은 고 기능이다. 이러한 고기능은 효율적인 큰, 회소 어드레스 공간, 공유 메모리 및 가상 복제 메모리 최적화의 결과로서 발생한다. 최종적으로, 가상 메모리 시스템은 고객이 메모리 영역을 위한 보조 저장장치를 제공하는 것을 허용하며, 이로 인해, 이러한 영역에 적합한 시맨틱스를 정의한다.
[가상 어드레스 공간]
가상 어드레스 공간은 가상 어드레스 공간을 소유하는 태스크내에서 수행하는 스레드의 참조가 허용되는 유효 가상 어드레스의 세트를 정의한다. 가상 어드레스 공간은 자신 소유의 태스크에 의해 명명된다. 가상 어드레스 공간은 메모리 페이지의 희소하게 배치된 색인 세트로 구성된다. 페이지의 크기는 호스트_명칭-호스트_페이지_크기로서 알 수 있다. 커널 내부적으로 모두 동일한 특성(보조 추상 메모리 객체, 계승 보안 및 다른 특성들)을 갖는 가상적으로 인접하는 페이지 세트를 메모리 영역으로 일컬어지는 내부 엔티티로 집단화한다. 메모리 영역은 그들의 어드레스 공간내의 가상 어드레스 영역에 의해서만 명명된다. 다양한 동작 및 시스템 메카니즘은 메모리 영역의 아이덴티티에 대해 민감하지만, 대부분의 사용자 액세스는 그렇게 영향을 받지 않으며 메모리 영역을 자유로히 확대(span)할 수 있다. 커널은 해방되어 분리되며, 커널의 어드레스 공간에 대한 고객의 관점에 적절하게 페이지 세트로서 메모리 영역을 합병한다. 메모리 영역에 민감한 유일한 호출은 가상_어드레스_공간 [메모리_어드레스]-vm_영역이다. 이 호출은 주어진 어드레스 주위에 상기 메모리 영역을 위치시키며, 이 메모리 영역에 대한 정보를 복귀시킨다. 메모리 영역은 순전히 커널 내부 개념이지만, vm_map 호출, 보안 변화 및 계승 속성에 의해 영향을 받는다. 따라서, 이 호출에 대한 결과는 호출(invocation)에서 호출로 변경될 수 있다.
가상 어드레스 공간은 태스크가 생성될 때 생성되며, 태스크가 제거될 때 제거된다. 새로운 태스크가 생성될 때, 계승을 무시함으로써, 태스크가 스레드를 실행하기전에 가상 어드레스 공간의 조작을 통해 이 새로운 태스크의 공간이 비고 생성되어야 한다. 태스크_생성 호출에 대한 옵션은 새로운 태스크가 생성 호출에 사용된 원형 태스크로부터의 메모리 영역을 계승하는 것을 허용한다. 커널 작용 가상_어드레스_공간 [메모리_영역]-vm_계승은 메모리 영역에 대한 계승 특성을 변화시켜, 계승을 허용할 수도 있고 허용하지 않을 수도 있다. 계승 가능성은, VM_INHERIT_NONE - 영역이 새로운 태스크에 정의되지 않은채로 남겨진다.
VM_INHERIT_COPY - 영역이 태스크 생성시에 복제 최적화로서 새로운 영역으로 복제된다.
VM_INHERIT_SHARE - 새로운 및 구 태스크는 메모리 영역에 대한 액세스를 공유한다.
메모리 영역은 메모리 관리자의 동작을 통해 연관된 다른 시멘틱스를 가질 수 있다. 새로운 메모리 영역이 가상 어드레스 공간내에서 설정되었을 때, 추상 메모리 객체는 가능한 디폴트에 의해 지정되고, 메모리 영역의 시멘틱스를 나타내게 된다. 추상 메모리 객체는 시멘틱스를 제공하는 태스크(메모리 관리자)와 연관된다. 직접적으로 태스크의 메모리 영역과 연관된 시멘틱스에 영향을 끼치는 태스크에 대한 커널 호출은 존재하지 않는다. 태스크는 단지 필요한 기능성을 제공하는 메모리 관리자를 선택함으로써, 혹은 메모리 관리자에게 직접적으로 메시지를 전달하여 이 메모리 관리자의 동작을 지시함으로써 이러한 제어를 갖게 된다. 가상_어드레스_공간 [메모리_영역]-vm_map 은 가상 메모리의 새로운 영역을 설정한다. 이 호출은 배치, 크기, 보안, 계승 및 객체 오프셋과 같은 자세한 메모리 영역을 설정한다. 이 호출에서 가장 중요한 파라메터는 메모리 객체에 대한 허용된 액세스 모드 및 영역에 대한 저장 장치를 보조하는 추상 메모리 객체를 내포하는 메모리 객체 대표 포트(memory object representative port)이다. 널 포트는 시스템의 디폴트 메모리 관리자가 사용된다는 것을 지정한다. 디폴트 메모리 관리자는 초기에 0 로 채워져 있는 저장장치를 제공한다. 이 저장장치는 시스템의 페이징 공간에 대해 페이지되고 시스템 부트-로드(system boot-loads)사이에서 지속되지 않는다. 가상_어드레스_공간 [메모리_영역]-vm_할당(vm_allocate)은 디폴트 메모리 관리자가 요구될 때 vm_map 호출의 간결화된 유형을 할당한다. 가상_어드레스_공간[메모리영역]-vm_할당해제(vm_deallocate)는 메모리 영역을 무효화한다. 가상_어드레스_공간 [메모리_영역]- vm_remap 은 태스크-태스크_생성을 통해 생성되는 바와 같이 목표 태스크의 어드레스 공간내의 메모리 영역을 생성하며, 원형 태스크는 소오스 태스크이며, 소오스 메모리 영역은 VM_INHERIT_SHARE 특성을 갖는다.
가상_어드레스_공간[메모리_영역]-vm_보호(vm_protect)는 메모리 영역에 대한 허용된 액세스를 설정한다. 각 메모리 영역은 현재 및 최대 보호 마스크를 갖는다. 영역의 메모리 관리자는 메모리 객체 대표를 통해 페이지 영역의 모든 사용자에 대한 최대 보호를 지정할 수 있다. 각 태스크는 이후 자신의 사설 최대 보호값을 가지며, 또한 허용된 허가 및 태스크의 현재 보호 마스크를 제한한다. 가상_어드레스_공간[메모리_영역]-vm_복제(vm_copy)-가상 어드레스 공간내의 한 장소에서 다른 장소로 메모리 영역을 복제.
가상_어드레스_공간[메모리_영역]- vm_판독(vm_read) - 메모리 영역으로부터 판독
가상_어드레스_공간[메모리_영역]-vm_기록(vm_write) - 메모리 영역으로 기록
가상_어드레스_공간[메모리_영역]-vm_msync - 보조 저장 장치의 가상 메모리의 영역을 플러시(flush) 하거나 혹은 클린(clean)하게 한다. 가상_어드레스_공간[메모리_영역]-vm_머신_속성(vm_machine_attribute) - 메모리 영역의 머신 지정 하드웨어 특성을 설정
가상_어드레스_공간[메모리_영역]-vm_보존 - 메모리의 영역을 보존함으로써, vm_할당, vm_map 혹은 라인의 메모리 수신으로 발생하는 영역내의 임의 할당(random allocation)을 저지한다. vm_할당해제는 영역을 보존하지 않는다. 가상_어드레스_공간 [메모리_영역]-vm_비보존 - 메모리의 영역을 보존하지 않는다. 가상_어드레스_공간[메모리_영역]-vm_와이어 - 메모리 영역의 페이지능력을 설정. 와이어된 메모리는 태스크의 와이어된 커널 메모리 제한에 대해 카운트된다. 커널은 영역이 와이어된 횟수의 카운트를 보존하며, 카운트가 0 가 될 때까지 와이어를 수행한다. 가상_어드레스_공간[메모리_영역]-vm_동작_설정 - 커널의 페이지 대체 알고리즘을 안내하기 위한 힌트로서, 영역에 대해 정규(normal), 임의(random), 순차(sequential), 역순차(reverse sequential)와 같은 기대되는 사용 유형을 지정한다. vm_할당(), vm_map(), 혹은 vm_remap()이 VM_ALLOCATE_ANYWHERE 플랙 및 0 의 입력 목표 어드레스 (input target address)와 함께 사용될 때 유효 메모리 영역이 어드레스 0에서 할당될 수 있다. 특히 C 언어로 작성된 일부 프로그램은 유효 메모리 바이트에 대한 포인터가 아니라 그 값이 0 이어서 널 포인터가 되는 메모리 포인터를 고려한다. 메모리가 어드레스 0 에서 할당된다면 이들 프로그램은 실패할 수 있다. 퍼스낼리티 서버 및 다른 태스크는 각 태스크의 제1페이지가 보존되는 것을 확인함으로써 이들 문제들을 피할 수 있다.
[메모리 객체]
마이크로커널은 사용자 모드 태스크가 가상 메모리 공간의 참조 부분의 동작과 연관된 시멘틱스를 제공한다. 추상 메모리 객체에 의해 지원되는 메모리 영역의 비 상주 상태를 나타내는 추상 메모리 객체의 지정을 허용함으로써 이러한 동작을 수행한다. 메모리 객체를 구현하는 태스크는 메모리 객체를 명명하는 포트에 전송된 메시지에 응답한다. 메모리 관리자가 태스크를 호출한다.
[기본 조작]
사용자 모드 태스크에 의한 가상 어드레스 공간의 조작은 아래 개시되는 기본적인 유형을 취한다.
태스크는 새로운 메모리 영역을 설정하고, 영역을 보조하는 메모리 객체를 명명하는 메모리 객체 대표 포트를 지정한다(가상_어드레스_공간[메모리_영역]-vm_map).
태스크는 일반적으로 접촉함으로써, 이 메모리 영역의 일부분에 대한 참조를 시도한다. 상기 부분이 메모리내에 아직 존재하지 않기 때문에, 참조 태스크는 오류가 상주하지 않는 페이지를 갖게 된다. 커널은 빠진 데이타를 요구하는 영역의 추상 메모리 객체로 전송된다. 추상 메모리 객체로부터의 응답은 요구 태스크의 페이지 오류를 해결한다.
결국, 고객 태스크에 의해 변경된 값을 갖는 메모리 영역의 상주 페이지는 메모리로부터 퇴거된다. 페이지는 메시지로 처리를 위해 영역의 추상 메모리 객체로 전송된다. 페이저는 커널이 단지 더티 페이지 혹은 클린 페이지로 복귀하도록 영향을 끼칠 수 있다.
고객 태스크는 가상_어드레스_공간 [메모리_영역]-vm_할당해제를 사용하여 메모리 영역을 설정해제 할 수 있다. 이 메모리 객체의 모든 매핑이 제거될 때, 추상 메모리 객체는 종료된다. 커널은 주 메모리를 사용하여 다양한 메모리 객체의 내용에 대해 캐시를 직접적으로 액세스함으로써 보여 질 수 있다. 메모리 객체에 대한 상주 페이지를 포함하는 캐시의 부분은 메모리 캐시 객체로 간주된다. 다양한 메모리 관리자를 갖는 다이알로그에 포함된 커널은 이 캐시를 포함하며, 적당한 커널로서 이 캐시를 채우고 플러시한다. 이 다이알로그는 일반적으로 비동기적 메시지로 구성된다. 왜냐하면, 커널은 메모리 관리자에 의해 기능 정지되지 않을 것이며, 메모리 관리자는 그들의 동작 병행성(concurrency)을 최대로 하기를 원하기 때문이다. 커널의 메시지는 추상 메모리 객체 포트를 통해 메모리 관리자에게 전송된다. 커널에 대한 메시지는 커널의 메모리 캐시 제어 포트를 통해 전송된다. 커널에 의해 전송되는 메시지는 서버 인터페이스로 라벨된 루틴을 사용하여 전송된다. 메모리 관리자에 의해 전송된 메시지는 정규 메시지 기능으로 라벨된다. 고객의 vm_map 호출로 정의된 메모리 객체 대표 포트는 추상 메모리 객체 포트를 포함한다. 포트는 추상 메모리 객체를 구현하는 메모리 관리자 태스크를 명명한다. 각 추상 메모리 객체는 연관된 상주 커널 메모리 캐시 객체를 가지며, 이 객체는 상기 메모리 객체에 대한 상주 페이지의 캐시를 나타낸다. 메모리 캐시 객체는 연관된 제어 포트를 가지며, 이 포트는 메모리 관리자에게 제공되어 메모리 캐시 객체를 제어할 수 있고 객체를 대신한 커널 요구에 응답한다. 커널은 또한 메모리 캐시 객체에 대한 명칭 포트를 발생하여 메모리 캐시 객체를 참조하는 고객 태스크에 의해 사용된다. 명칭 포트는 가상_어드레스_공간[메모리_어드레스]-vm_영역에 의해 복귀된다. 만약 추상 메모리 객체가 하나이상의 태스크에 의해 매핑된다면, 각 호스트상에 메모리 캐시에 대한 하나의 제어 포트 및 하나의 명칭 포트가 존재하게 될 것이다. 메모리 캐시 객체내의 각 페이지는 추상 메모리 객체내의 오프셋을 나타낸다. 메모리 객체 오프셋은 고객에 의해서 vm_map 호출 및 페이지 길이의 정수 배(integral multiple)로 지정되는 객체 오프셋이다. 고객이 vm_map 으로 임의의 오프셋을 지정할 수도 있다. 따라서, 메모리 객체는 자신의 고객에 의해 지정된 상이한 오프셋 값을 위해 메모리내에 자신의 데이타의 다수의 복제본을 가질 수도 있다. 그러나, 커널은 이들 복제본사이에서 데이타의 일관성을 유지하지는 않는다.
제6도는 고객 가시 가상 메모리 구조를 도시한다. 3 가지의 메모리 영역이 존재하며, 이들 중 두 영역은 동일한 보조 추상 메모리 객체를 가지지만, 상이한 계승 혹은 보안 속성을 갖는 것이 가능하다. 메모리 캐시/추상 메모리 객체 쌍의 하나는 두개의 메모리 객체 대표로 상세히 나타나며, 판독 및 판독/기록 액세스 및 메모리 관리자 태스크를 나타낸다. 보존된, 그러나 할당되지 않은 영역은 도시되지 않는다. 영역은 단지 보존 플랙 및 계승 속성만으로 표시될 것이며, 다른 속성은 적용되지 않는다.
[메모리 관리 초기화]
메모리 객체 초기화의 결과는 메모리 관리자의 추상 메모리 객체(보조 저장장치)를 커널의 메모리 캐시 객체(메모리 이미지)에 결합하는 것이다. 메모리 관리자는 커널과 추상 메모리 객체 포트를 통신시키며, 이 포트를 통해서 상기 커널은 뒤이은 조작 메시지를 전송한다.
추상 메모리 객체 포트는 커널이 이 포트상으로 특별히 지정된 프로토콜에 따라 메시지를 전송하는 포트이다. 메모리 관리자를 혼동시키기 때문에 고객이 이 포트를 액세스하는 것은 해로울 수가 있다. 예를 들면, 고객은 추상 메모리 객체 포트를 통해 무효 메시지 시퀀스를 전송할 수 있다면, 메모리 관리자는 불충분한 보호를 갖게된다. 이러한 이유로 인해, 메모리 객체에 대한 액세스를 제어하기 위해, 메모리 관리자는 커널을 제외하고는 일반적으로 그들의 추상 메모리 객체 포트를 분배하지 않는다. 대신, 고객은 메모리 객체 대표 포트로 전송할 권리를 받으며, 차례로, 연관된 추상 메모리 객체 포트 및 연관된 메모리 객체에 대해 허용된 액세스 모드의 연관된 세트를 내포한다.
추상 메모리 객체 포트 및 메모리 객체 대표 포트는 일반적 마이크로커널 포트이다. 즉, 이 포트들의 수신기는 커널 대신 마이크로커널 태스크이다. 고객이 vm_map 을 통해서 아직 객체의 아이덴티티를 알지 못한다고 나타난 커널로 메모리 객체 대표 포트를 지정할 때, 커널은 대표 포트를 사용하여 특별 다이알로그를 시작한다. 커널이 연관된 객체의 아이덴티티를 인식한다면, vm_map 호출은 메모리 관리자와 상호작용없이 직접적으로 수행될 수 있다. vm_map 호출은 커널이 메모리 캐시 제어 포트에 대한 전송 권리를 포함하는 메모리_객체_대표(호스트_명칭)-메모리_객체_통고 메시지를 전송하도록 한다. 메모리 캐시 제어 포트는 이 후 디폴트 속성으로 할당된다. 이 포트는 완전히 설립되었다고 고려되지는 않으며, 이 포트의 속성을 메모리_객체_설립 메시지가 전송된 후 까지 적당히 설정한다. 거짓 메모리_객체_통고 메시지가 vm_map 의 결과로서 커널 대신에 대표 포트를 유지하는 고객에 의해 발생될 수 없기 때문에, 메모리 관리자는 이 메시지에 대해 직접적으로 응답할 수 없지만, 대신 자신의 응답 메시지를 통고 메시지로 제공된 호스트 명칭 포트에 전송한다. 이 포트가 호스트 명칭 포트인지는 mach 호스트 자신(mach host self)를 검사하거나 혹은 명칭 서버를 질의함으로써 검증할 수 있다. 호스트 명칭 포트가 유효한지를 검증한 이후에, 메모리 관리자는 추상 메모리 객체 포트 및 객체 속성뿐 만 아니라 메모리 객체 대표 및 존재한다면 이 대표를 사용하여 매핑을 시도하려하는 태스크가 포함해야 하는 제한된 아이덴티티를 지정하는 호스트_명칭(메모리_캐시_제어)-메모리_객체_설정으로서 응답한다. 메모리 객체 대표 포트가 추상 메모리 객체 포트로서 지정되어야 하는 것이 비록 관리자에 대한 잠재적 취약점을 야기하지만 이는 허용된다. 객체 속성은 이하 개시되는 바와 같이 객체 캐시 속성의 지정 및 복제 전략을 허용하고, 뿐만 아니라 다른 성능 및 특별 속성도 허용한다. 이들 속성은 차후에 메모리_캐시_제어-메모리_객체_변화_속성으로 변화되고 메모리_캐시_제어-메모리_객체_획득_속성으로 검사된다. 관리자는 이 메시지내에 메모리 캐시 제어 포트를 포함한다는 것을 유의해야 한다. 제어 포트는 대표 포트의 이러한 사용을 위해 특별히 생성되므로, 이 포트는 다른 어떤 태스크에 대해서는 주어지지 않고, 관리자에 의해 사용될 수 있으며 그 자신을 커널에 대해 입증(authenticate)시킨다. 즉, 관리자가 메모리_객체_통고 메시지의 수신기임을 검증한다. 커널이 메모리_객체_설립 메시지를 기대하지 않았다면, 고객은 원 메모리_객체_통고 메시지를 전송하였으므로, 커널은 추상_메모리_객체-메모리_객체_거부로서 응답된다. 이는 관리자에게 메모리 캐시 제어 포트로서 인식된 포트는 실제가 아니라는 것을 알려준다. 메모리 관리자는 고객에게 어떠한 정보도 누설하지 않으며, 단지 외부 메시지(extraneous message)를 커널로 전송하며, 이 커널은 이 메시지를 기대하거나 혹은 수용하지 않는다.
호스트 명칭 포트 및 메모리 캐시 제어 포트를 포함하는 시퀀스는 메모리 관리자등에 대한 커널을 입증한다. 이 시퀀스는 메모리 관리자의 능력에 의존하여 주어진 명칭 포트를 입증한다. 커널상에 관리자 다이알로그를 삽입하기 위해, 매개자는 호스트 명칭 포트를 관리자에게 제공하지 않고, 일부 다른 명칭 포트를 제공한다. 이러한 동작을 수행하기 위해, 관리자는 주어진 명칭 포트 혹은 사용하는 입증 서비스를 입증하지 않아야 하며, 관리자에게 주어진 명칭 포트를 확증해야 한다. 선행하는 시퀀스는 아직 커널에게 알려지지 않은 메모리 객체의 초기화에 관련된다. 이 시퀀서는 커널이 알려지지 않은 메모리 객체 대표 포트를 갖는 vm_map 을 통해 제공될 때마다 발생한다. 메모리 객체의 근원적인 표본이 커널에 알려질 수 있다. 커널은 연관성을 알지 못하며, 따라서 커널은 이 표본이 새로운 메모리 객체의 초기화를 내포한다고 가정해야 한다. 동일 커널로부터의 차후의 메모리_객체_통고 메시지를 위해 메모리 객체가 초기화되면, 메모리 관리자는 호스트_명칭 (메모리_캐시_제어)-메모리_객체_대표로서 응답한다. 이 호출은 단지 추상 메모리 객체 및 상기 객체 대표만을 제공할 뿐 아니라 존재한다면 이 객체 대표를 사용하여 매핑을 시도하는 태스크가 갖는 제한된 아이덴티티를 제공한다. 커널이 이 메시지를 수신하였을 때, 커널은 다른 방법으로 제공된 여분의 메모리 캐시 제어 포트를 제거한다. 메모리_객체_대표에 대한 메시지 인터페이스 발생기(Message Interface Generator:MIG) 스터브는 최적화로서 전송 관리를 이동시키며, 따라서 관리자는 명시적으로 자신의 권리를 폐기할 필요는 없다.
메모리 객체 대표 메시지는 메모리 객체 종료(memory object termination)와 경합(race)할 것이라는 것은 가능하다. 이러한 사실은 관리자가 메모리 객체가 초기화되지만 더 이상 존재하지 않는다는 것을 인식할 때 발생한다. 이러한 경우, 커널은 메모리_객체_대표 메시지를 폐기한다. 왜냐하면, 객체는 커널의 관점에서 초기화되지 않기 때문이다. 관리자는 추상 메모리 객체 포트상의 메모리_객체_종료 메시지의 존재로 이러한 상황을 감지할 수 있다. 커널이 메모리_객체_대표 메시지를 폐기할 때, 커널은 메모리_객체_통고 메시지를 재전송한다. 관리자는 한번 더 메모리_객체_설립으로 응답해야 한다. 일반적으로, 관리자가 메모리 객체가 초기화되지 않았다는 사실을 인식하지 못한다면(즉, 객체가 결코 초기화되지 않았거나, 혹은 관리자가 메모리_객체_종료 메시지를 보았다면), 관리자는 메모리_객체_대표로서 메모리_객체_통고에 응답해야 한다. 고객이 메모리_객체_통고 메시지를 제조하였으므로, 커널이 메모리_객체_대표 메시지를 기대하지 않는다면, 커널은 단순히 이를 무시할 것이다. 관리자가 이 메시지를 전송하였다는 사실은 관리자가 메모리 객체가 초기화되었다는 사실을 인식한다는 것을 뜻한다. 관리자가 응답한 메모리_객체_통고 메시지는 관리자에게 어떠한 정보도 제공하지 않는다. 커널은 해방되어 임의의 시간에서 객체 연관을 추상화하기 위해 객체 대표를 무시한다. 커널이 메모리_객체_대표 메시지를 무시할 때, 이는 커널이 상기 메시지를 수용하였을 때와 동일하게 되며, 이후 즉각적으로 상기 연관을 무시한다. 이러한 시퀀스가 완료된후, 메모리 관리자는 이 메모리 객체를 대신하여 요구에 응답할 준비를 해야 한다. 메모리 캐시 객체는 또한 vm_영역을 통해 고객에게 제공된 명칭 포트를 갖는다. 관리자는 또한 메모리_객체_획득_명칭으로 상기 포트를 획득할 수 있다.
[기본 페이지 조작(Basic Page Manipulation)]
커널은 추상_메모리_객체-메모리_객체_데이타_요구로서 메모리의 데이타를 요구한다. 전형적으로, 커널은 한번에 하나의 페이지만을 요구하고 제공한다. 커널은 한번에 다수의 페이지를 동작시키는 권리를 갖는다. 메모리 관리자는 메모리 객체의 클러스터(cluster) 크기를 설정할 수 있으며, 이 메모리 객체는 각 전송(데이타 복귀)을 위해 준비된 페이지의 수를 지정한다. 다양한 인자가 한번에 실제적으로 전송될 수 있는 양에 영향을 끼친다. 메모리 관리자는 메모리_캐시_제어-메모리_객체_데이타 제공으로서 요구된 데이타를 제공한다. 이 호출은 또한 데이타의 최소 액세스 보호를 지정한다. 메모리 관리작 에러로 인해 데이타를 전송할 수 없다면, 메모리 관리자는 메모리_캐시_제어-메모리_객체_데이타_에러로서 응답할 것이다. 이러한 동작은 이 데이타를 대기하여 커널이 임의의 스레드를 야기하도록 하여 메모리 실패 예외를 취한다. 메모리 관리자는 이와달리 메모리_캐시_제어-메모리_객체_데이타_사용불가능으로서 응답한다. 이러한 경우, 커널은 빠진 데이타에 대해 0 로 채워진 페이지를 제공한다. 메모리 관리자는 메모리_캐시_제어-메모리_객체_데이타_제공을 사용하여 커널에 의해 캐시되지 않는 (요구되든지 혹은 요구되지 않든지에 상관없이)페이지를 제공할 수 있다.
커널이 메모리 객체에 속하는 일부 메모리 페이지를 플러시하기로 결정할 때, 변경된 페이지는 추상_메모리_객체-메모리_객체_데이타_복귀를 통해 메모리 관리자에게 라인외 데이타로서 메시지로 전송된다. 이러한 처리에서, 커널은 페이지의 가상 복제를 전송하고, 물리적 메모리 페이지 메모리를 객체와 연관된 상주 페이지에서 디폴트 메모리 관리 임시 객체와 연관된 페이지로 효과적으로 변환한다. 이러한 방법으로, 메모리 관리자가 이들 페이지를 적절한 시간에 그들의 목적지로 이동시킬 수 없다면, 커널은 디폴트 메모리 관리자를 사용하여 이들 임시 페이지를 퇴거시킬 수 있다. 디폴트 메모리 관리자는 상기 임시 페이지들을 페이지하여 저장 장치에 페이징하고, 여전히 메모리 관리자가 상기 페이지들에 대한 액세스를 수행하는 것을 허용한다. 일반적으로, 메모리 관리자는 이들 페이지를 장치 혹은 화일 시스템에 복제하고 이후 vm_할당해제를 사용하여 임의의 수신된 라인외 메모리를 처리하는 것처럼 상기 페이지들을 어드레스 공간으로부터 해방시킨다. 일단 페이지가 퇴거되면, 커널은 해방되어 가능한 한 빨리 임의의 시간에 다시 이들 페이지를 요구하게 된다. 메모리 관리자, 특히 멀티 스레드된 메모리 관리자는 동일한 페이지에 대한 백 투 백 데이타 복귀(back-to-back) 및 데이타 요구 메시지에 대비하여 자신을 보호해야 한다. 이 상황에 대한 설명은 서버 기록자 가이드(Server Writer's Guide)를 참고하기 바란다.
[장소내 클린(Clean-in-Place)]
커널은 페이지가 메모리 관리자로 복귀할 때 다수의 문제점에 직면한다. 관리자가 적절한 시간에 이들 페이지 자체를 제거하지 않는다면, 커널은 이들 페이지를 임시 보조 저장장치로 퇴거시킬 준비를 해야 한다. 커널은 단일 페이지에 관한 퇴거 결정을 한다. 효율성을 위해, 커널은 관리자에 대해 다수의 페이지 복귀를 시도하여 관리자가 즉시 자신의 보조 저장장치내에 다수의 페이지를 갱신할 수 있게 한다. 부가적인 페이지는 이들의 매핑 태스크에 대해 액세스가능하도록 잔존해야 한다. 근본적으로, 관리자는 상기 페이지를 복귀되도록 변경할 수 있다. 이들 페이지는 라인외 메모리로서 나타난다. 커널은 준비되어 상기 페이지의 기록가능한 복제를 생성할 수 있어야 한다.
커널은 페이지 복귀 메카니즘을 최적화하기 위해 최선을 다한다. 가장 좋은 성능은 관리자가 페이지를 변경하지 않고 이들을 처리할 수 있다고 신뢰될 때 획득된다. 내부적으로 장소내 클린으로 일컬어지는 특별한 고 성능 메카니즘은 이하 개시되는 조건이 사실이면 커널에 의해 이용된다.
메모리 관리자는 메모리 자원 소모에 대해 특권적이며, 메모리_객체_설립_특권 메시지를 호스트 명칭 포트대신에 호스트 제어 포트에 전송함으로써 이 특권을 삽입한다.
메모리 관리자는 메모리 캐시 객체와 동일한 호스트(노드)이다.
메모리 관리자는 페이지를 변경하지 않는다. 이들 특별한 메카니즘의 사용은 데이타 복귀의 시멘틱스에 영향을 끼친다. 왜냐하면, 메모리 관리자는 추상_메모리_객체-메모리_객체_데이타_요구 메시지가 복귀된 페이지를 위해 수용되어질 때, 명시적으로 커널을 나타내야 한다. 부가적으로, 커널은 메모리 관리자가 적절한 방법으로 복귀된 페이지를 할당해제하기를 기대한다.
[메모리 객체 종료]
모든 태스크가 메모리 객체 대표에 대한 그들의 매핑을 제거할 때, 커널은 근원적인 추상 메모리 객체에 대한 상기 메모리 객체 대표의 연관을 무시한다. 메모리 관리자는 통고되지 않는다. 메모리 관리자는 임의의 시간에서 메모리 객체 대표의 메모리_객체_통고 메시지를 수신하기 위해 준비된다. 각각의 뒤이은 메모리_객체_통고 메시지는 유일한 캐시 제어 포트를 포함할 것이다. 모든 태스크가 근원적인 추상 메모리 객체에 대한 매핑을 제거할 때, 커널은 추상_메모리_객체-메모리_객체_종료로서 메모리 관리자에게 통보한다. 객체가 임시 속성을 가지지 않는다면, 커널은 실제로 메모리 캐시 객체를 종료하고 종료 메시지를 전송하기에 앞서 모든 객체의 페이지를 퇴거시킨다. 종료 메시지는 관리자로 메모리 캐시 제어 포트에 대한 수신 권리를 전송하여, 관리자가 임의의 메시지를 획득할 수 있게 된다. 이 메시지는 커널이 객체를 종료시킨후에, 그러나 관리자가 종료 메시지를 수신하기 전에 상기 포트로 전송된다. 메모리 관리자는 명시적으로 메모리_캐시_제어-메모리_객체_제거(memory_object_destroy)로써 혹은 명시적으로 추상 메모리 객체 포트를 제거함으로써 커널이 메모리 캐시 객체를 제거하는 것을 요구할 수 있다. 전자의 경우, 커널은 추상_메모리_객체-메모리_객체_종료로서 응답한다. 모든 현재 및 차후의 메모리 객체 요구는 실패할 것이다. 후속되는 제거를 위해, 커널은 임의로 메모리 캐시 객체의 상주 페이지를 무시할 것이다. 메모리 객체가 메모리_객체_설립에 의해 초기화되거나 혹은 이후에 메모리_객체_변화_속성에 의해 변화될 때 객체 속성 세트의 하나는 객체 캐시 속성이다. 모든 매핑이 제거되고 이로 인해 모든 캐시 페이지를 퇴거시킬 때, 메모리 객체 대표-추상 메모리 객체 연관(representative-abstractive object association)을 해체하거나, 혹은 메모리 객체를 종료하는 대신 상기 속성과 함께 메모리 객체는 작은 커널 객체 캐시로 들어간다. 일부 태스크가 이 시간동안 객체를 매핑하면, 객체는 부가적인 메모리_객체_통고 메시지없이 생존하여 머무를 수 있다. 객체가 객체 캐시를 떠나기 전에 어떠한 태스크로 객체를 매핑하지 않는다면, 객체는 종료된다. 메모리 객체가 이러한 매핑되지 않은 상태에 있는 동안 객체 캐시 속성이 소거(clear)된다면, 메모리 객체는 신속히 종료될 것이다. 이러한 속성 변화는 이러한 효과, 즉 메모리_객체_변화_속성이 선택적으로 동기화에 사용될 수 있는 응답 (응답_포트- 메모리_객체_변화_완료 (memory_object_change_completed)을 복귀시키는 효과를 갖는다.
[보조 저장장치를 갖는 동기화]
메모리 객체의 고객은 종종 메모리 객체에 대해 발생된 변화가 보조 저장장치상에 반영된다는 사실을 인식하는 것이 필요하다. 고객은 메모리 영역에 대비해 vm_msync 를 수행함으로써 이러한 요구를 발생한다. 커널의 응답은 관리자에 대한 페이지 세트를 클린하거나 혹은 플러시하고, 관리자와의 동기와 다이알로그에 참여하는 것이다. 커널의 응답은 고객에 의해 주어진 플래그 및 메모리 객체의 무효 속성값에 따른다. 영역을 클린하거나 혹은 플러시한후, 커널은 메모리 객체 영역 및 고객의 플랙을 지정하는 추상_메모리_객체-메모리_객체_동기화(memory_object_synchronize)를 전송한다. 이들 플랙중의 하나는 비동기 플랙이다. 설정할 때, 고객은 단지 보조 저장 장치에 큐된 페이지를 갖는데만 흥미를 가지게 된다. 그렇지 않다면, 고객은 실제로 보조 저장장치상에 존재하게 되는 페이지에 흥미를 가지게 된다. 관리자가 요구된 효과를 성취할 때, 관리자는 메모리_캐시_제어-메모리_객체_동기화_완료(memory_object_synchronize_completed)로서 응답한다. 고객은 그 시간에 vm_msync 호출로부터 복귀한다. 메모리_객체_동기화_완료에 지정된 영역은 대응하는 메모리_객체_동기화_메시지에 지정된 영역과 일치해야 한다. 비록, 커널이 동시에 중요한 다수의 동기화 요구를 가질 수 있지만, 이 동기화 요구는 결코 상호 겹치지는 않는다.
[중요 페이지(Precious Pages)]
기본 데이타 관리 프로토콜에서, 커널은 단지 물리적 메모리 캐시내에 있는 동안 변경된 페이지만을 메모리 관리자로 복귀시킨다. 퇴거될 때, 순수한 비 변경 페이지는 메모리 관리자가 복제본을 유지한다는 가정하에 무시된다. 보조 저장장치로서 디스크 화일을 사용하는 매핑된 화일 메모리 관리자 및 이 공간이 각 페이지를 위해 항상 보조 저장장치에 할당되는 예에 있어서, 상기 방법은 매우 적절한 방안이다. 그러나, 네트워크 공유 메모리 서버 혹은 다른 특정 서버와 같은 보조 저장장치로서 가상 메모리를 사용하는 관리자에 있어서, 상기 방안은 비효율적이다. 관리자 및 커널 모두 사용중에 페이지를 유지한다. 페이지가 커널로 전송될 때 페이지를 중요한 것(precious)으로 지정함으로써, 메모리 관리자는 복제본을 유지할 필요가 없다. 커널은 퇴거될 때 페이지 복귀를 수행한다. 페이지를 중요한 것으로 지정하는 이 능력은 메모리_객체_데이타 제공 호출에 대한 옵션으로 사용가능하다. 메모리 관리자는 데이타 제공 호출로부터 응답을 요구함으로써 이들 페이지의 수용을 통고받을 수 있다. 이 응답, 즉 응답_포트-메모리_객체_제공_완료는 페이지가 수용되었음을 나타낸다. 상기 응답은 제공된 페이지의 거부로 발생하는 모든 데이타 복귀 메시지를 따른다. 메모리_객체_데이타_복귀 메시지는 이 경우를 나타내는 플랙으로 변경된 페이지 및 중요 페이지들 모두를 복귀시킨다.
[직접 캐시 조작(Direct Cache Manipulation)]
종종, 메모리 관리자는 페이지를 플러시하거나 혹은 보호를 변화시킬 필요성을 갖는다. 이 동작은 메모리_캐시_제어- 메모리_객체_잠금_요구_호출로 수행된다. 이 호출은 동작 커널이 수행됨을 통보한다. 이 동작이 완료되었을 때, 커널은 메모리_객체_잠금_요구_호출을 사용하여 응답_포트- 메모리_객체_잠금_완료로서 응답한다.
메모리_객체_잠금_요구의 주 목적은 분산 메모리 서버 혹은 트랜잭션 보호 메모리(transaction protected memory)와 같은, 페이지에 대한 액세스를 설정하고 폐지하는 것을 포함하는 메모리 관리 프로토콜을 지원하는 것이다. 스레드가 메모리_객체_데이타_제공 혹은 메모리_객체_데이타_사용불가능으로서 허용 세트에 의해 일반적으로 허용되지 않은 방법으로 페이지 액세스를 시도한다면, 커널은 메모리 관리자에게 추상_메모리_객체- 메모리_객체_데이타_해제(memory_object_data_unlock)로서 메시지를 전송할 것이다. 메모리 관리자가 이 요구를 승낙한다면, 메모리_객체_잠금_요구로서 응답하여 새로운 할당 허용을 지정할 것이다. 단일 고객에 대해서, 메모리 관리자는 메모리_객체_잠금_요구로서 커널이 영역을 플러시하게 함으로써 요구를 거절할 수 있으며, 커널이 데이타를 재인출할 때, 메모리 관리자는 메모리_객체_데이타_에러로서 응답할 수 있다.
메모리_객체_잠금_요구 시퀀스는 또한 메모리 관리자의 초기에서 시작될 수 있다. fsync 와 같은 동작동안 관리자가 페이지의 가장 최근의 복제본을 요구할 때 호출은 커널이 모든 변경된 혹은 중요한 페이지를 관리자로 복귀시키도록 요구할 수 있고, 또한 커널이 기록 허용을 폐지하도록 요구할 수 있다. 메모리 관리자는 또한 커널이 상기 페이지를 메모리 캐시로부터 모두 플러시하도록 요구할 수 있다.
[가상 복제 최적화(Virtual Copy Optimization)]
아래에 메모리 영역이 논리적으로 복제되는 마이크로커널 시스템(115)의 3 가지 상황이 개시된다.
메모리 영역이 VM_계승_복제(VM_INHERIT_COPY) 계승 속성을 가질 때 및 새로운 태스크가 이 태스크로부터 생성될 때.
vm_복제가 어드레스 공간의 일 부분을 이 공간의 다른 부분으로 복제할 때.
메모리 영역이 마이크로커널 메시지내의 가상 라인외 영역으로서 전송될 때. vm_판독 및 vm_기록 동작이 포함된다.
이들 환경을 빈번히 발생한다. 복제 계승 메모리는 사용되어 새로운 프로세스 생성을 위해 POSIX 포크 시멘틱스를 지원한다. 비록 정규 메시지 경우에서 드문 현상이지만, 라인외 메모리는 외부 메모리 관리자, 화일 시스템 특히 장치 인터페이스를 지원하는 데 있어서 중요하다. 이들 동작은 직접 공유대신에 논리적 복제본으로서 정의될 수 있다. 왜냐하면, 마이크로커널 가상 메모리는 가상 복제 최적화를 제공하기 때문이다. 이들 최적화로서, 메모리는 명백히 복제될 수 없다. 데이타가 단지 복제될 필요가 있을 때만, 메모리는 느리게 평가되는 방법(lazily evaluated way)으로 복제된다. 데이타 복제는 이하 개시되는 다양한 이유로 인해 지연될 수 있다.
일부 데이타는 실제로 참조되지 않는다.
어떠한 태스크도 일부 데이타를 변경할 수 없으며, 따라서, 태스크는 변경되지 않은 데이타의 동일한 메모리 이미지를 효과적으로 공유할 수 있다.
데이타 복제를 요구하는 태스크는 그의 매핑을 삭제하며, 이로 인해 커널이 복제본 이동을 고려하는 것을 허용하고, 이러한 동작은 페이지 복제본대신에 페이지 재매핑(페이지 스틸링(page stealing))으로 최적화될 수 있다. 연관된 가능성은 데이타의 수신기가 데이타를 조사하지 않고 데이타를 다시 복제하고, 그의 매핑을 삭제한다는 것이다.
한편, 이들 최적화는 순전히 내부적인 것이며, 따라서 본 명세서가 기술하는 마이크로커널 시멘틱스의 일부가 될 수는 없다. 그러나, 이들 최적화는 공지의 사실이다. 상기 최적화는 다수의 인터페이스 유틸리티 특히, 외부 메모리 관리자 인터페이스에서 절대필요한 부분이다.
커널이 라인외 데이타에 대한 가상 메모리 시스템을 사용한다는 사실을 다양한 커널 기본 요소를 허용하며, 이 기본 요소는 라인외 데이타를 복귀시킴으로써 리스트를 그렇게 복귀시킨다. 이러한 동작은 내부 vm_할당 동작에 의해 성취된다. 이들 최적화 유형은 인터페이스 규격(specification of the interface)의 중요한 부분이다. 가상 복제를 참조하는 것은 원 메모리 객체로부터 페이지가 획득되는 것을 야기할 수도 있으며, 이로 인해 객체의 메모리 관리자와 상호 작용할 수도 있다. 태스크를 참조하는 동작은 특히 메모리 관리자가 커널의 요구에 응답하지 못한다면 영향을 받을 것이다.
메모리 영역이 복제될 때, 커널은 새로운 추상 메모리 및 메모리 캐시 객체를 생성하여 가상적으로 복제된 페이지를 나타낸다. 새로운 메모리 캐시 객체(복제 목적지)는 실제적인 물리적 메모리 페이지를 구 메모리 캐시 객체(old memory cache object)(복제 소오스)와 공유할 수 있으며, 이들 페이지는 실제적으로 변경되지 않았다고 가정한다. 구 객체는 가상 복제에 의해 영향받지 않을 수도 있다. 동일한 추상 객체 및 동일한 연관 메모리 관리자와의 연관이 계속된다. 그들의 페이지는 그들 소유이며 적절하게 사용된다. 비록 새로운 메모리 객체가 구 메모리 객체의 복제된 영역내의 모든 페이지 가상 복제본을 수신하지만, 이 동작의 가시적인 메카닉스(mechanics)는 그렇게 간단하지 않다. 이 동작의 메카닉스는 이하 개시되는 바와 같이 구 메모리 객체에 대해 복제 전략의 값에 의해 제어되고, 객체가 초기화될 때 메모리_객체_설립에 의해 설정되거나 혹은 이후에 메모리_객체_변화_속성에 의해 설정된다.
전형적인 메모리 객체의 페이지는 태스크의 어드레스 공간으로 매핑될 때 및 상기 태스크에 의한 참조가 직접 메모리에 의해 조작될 때만 변경될 수 있다. 이러한 변경이 단지 하나의 호스트상에서만 발생한다면, 메모리 객체의 페이지에 대한 모든 변경은 상기 호스트상에서 발생할 수 있고, 커널이 자신의 메모리 캐시 객체를 보존함에 따라 커널에 대해 완전히 가시적으로 된다. 이러한 경우, 메모리 관리자는 메모리 객체의 복제 전략을 메모리_객체_복제_지연(MEMORY_OBJECT_COPY_DELAY), 즉 표준 기록상 복제 최적화(standard copy-on-write)에 설정한다. 새로운 메모리 객체는 디폴트 메모리 관리자에 의해 제어된 임시 객체로서 생성된다. 구 및 새로운 객체의 동작은 다음과 같다.
새로운 및 구 메모리 객체 모두는 일반적으로 메모리내의 페이지를 공유한다.
메모리 상주가 아닌 새로운 객체의 페이지가 참조되고 아래 개시되는 바와 같이 아직 푸시되지 않았다면, 메시지는 데이타에 대한 구 추상 메모리 객체로 전송된다. 이 요구는 메모리 관리자에 의해서 구 메모리 객체에 대한 참조를 식별할 수 없다. 인출된 페이지는 구 및 새로운 메모리 객체에 의해 공유된다.
구 객체의 페이지가 구 혹은 새로운 객체에 대한 참조 변경 시도(일반적으로 구 및 새로운 객체가 물리적 메모리 페이지를 공유하므로)에 의해 변경되면, 커널은 먼저 변경되지 않은 페이지의 값을 새로운 객체로 푸시하여, 새로운 객체가 상기 페이지의 원 데이타의 복제본을 보게된다.
푸시된 데이타는 디폴트 메모리 관리자에 의해 관리된다.
구 메모리 객체가 네트워크 공유 메모리 혹은 메모리 관리자에 의한 직접 액세스와 같은 단일 호스트상의 커널에 대해 가시적이지 않은 방법으로 변경될 수 있다면, 이와 다른 복제 전략이 필요하게 된다. 이를 알아보기 위해 아래 개시되는 시나리오를 고려하자.
가상 복제가 요구된다. 그러나, 영역의 일부 페이지는 복제하는 호스트상의 메모리에 존재하지 않는다.
일부 다른 호스트상에 존재하는 영역의 페이지는 변경된다.
복제하는 호스트상의 새로운(복제) 메모리 객체는 페이지에 대한 요구를 발생한다. 이 객체는 가상 복제시에 페이지가 갖는 값이 아닌 새로운 값을 수신한다.
최적화를 금지하기 위해서, 메모리_객체_복제_넌(MEMORY_OBJECT_COPY_NONE) 전략이 제공된다. 메모리_객체_복제_넌 전략은 메모리 관리자가 자동화된 방법으로 정확한 시멘틱스를 구현할 수 없을 때 사용된다. 가상 복제시에, 커널은 디폴트 메모리 관리자 관리 임시 객체로서 새로운 메모리 객체를 구성한다. 새로운 메모리 객체의 내용은 이때 명시적으로 구 메모리 객체로부터 복제되며, 따라서 이 때 메모리 관리자로부터 모든 페이지를 요구한다.
메모리_객체_복제_넌 전략의 사용은 공격적인 복제가 수행되므로 역으로 메모리 관리의 성능에 영향을 끼칠 수 있다. 메모리 객체가 메모리 캐시를 무효화하는 방법으로 조작되지만, 메모리 관리자가 이들 조작이 발생할 때에 대한 완전한 지식과 제어를 갖는다면, 메모리 관리자는 메모리_객체_잠금_요구 호출에 대한 강제 복제 옵션의 도움으로 여전히 메모리_객체_복제_지연 전략을 사용할 수 있다. 이 옵션은 메모리 관리자에 의해 커널의 캐시를 무효화하려고 할 때 사용될 수 있다. 이 옵션은 또한 커널이 공격적으로 모든 지연된 메모리 객체의 지정된 영역 복제본을 평가하도록 야기한다.
[디폴트 메모리 관리자(Default Memory Manager)]
디폴트 메모리 관리자는 익명 메모리(vm_allocate, copy memory등)에 대한 보조 저장장치를 제공한다. 이 관리자는 실패하지 않는 마지막 방법의 관리자이다. 어떠한 메모리 관리자도 상기 관리자에 대한 페이징을 제공하지 않으며, 상기 관리자는 메모리로 완전히 와이어되고, 상기 관리자로 전송된 모든 메모리는 와이어된다. 이 메모리 관리자는 자신의 메모리를 신속히 처리해야 하고, 보조 저장장치로 페이지 아웃될 때 상기 메모리를 무시해야 한다. 왜냐하면, 상기 메모리는 효과적으로 와이어되기 때문이다. 호스트에 대한 디폴트 메모리 관리자는 호스트_제어- vm_설정_디폴트_메모리_관리자에 의해 설정/질의된다.
디폴트 메모리 관리자에 보조되는 메모리는 다양한 방법으로 생성될 수 있다. 이들 생성은 직접적으로 디폴트 메모리 관리자를 포함하지는 않는다. 커널은 명시적으로 새로운 디폴트 메모리 객체에 관해 디폴트 메모리 관리자에게 통보해야 한다. 이 동작은 디폴트_페이저-메모리_객체_생성으로 수행된다. 특권 태스크는 메모리 객체를 생성하여 디폴트_페이저-디폴트_페이저_객체_생성으로 디폴트 페이저에 의해 관리될 수 있다.
디폴트 메모리 관리자는 커널에 의해 생성되어 가상 복제 영역을 나타내는 임시 메모리 객체에 대한 보조 저장장치를 제공한다. 이들 임시 객체는 그들에게 적용된 부가적인 동작을 갖는다. 원 객체로부터의 페이지가 상기 임시 객체로 푸시될 때, 푸시된 데이타는 추상_메모리_객체-메모리_객체_데이타_초기화(abstract_memory_object_initialize)로서 디폴트 메모리 관리자로 제공된다. 부가적인 기본 요소의 이유는 커널이 복제본상으로 푸시하는 페이지의 범위를 완전히 트랙하지 못하기 때문이다. 복제 페이지가 페이지 아웃된다면, 뒤이은 원 객체의 변경은 변경된 원 페이지를 다시 푸시하게 한다. 디폴트 메모리 관리자가 페이지에 대한 하나 이상의 푸시 메시지(메모리_객체_데이타_초기화)를 수신하는 것은 가능하다. 관리자는 상기 메시지의 첫 부분을 제외하고는 모두 무시한다. 메모리_객체_데이타_초기화는 단지 페이지가 복제본상으로 푸시될 때 호출된다. 복제본의 페이지가 스스로 변경된다면, 변경된 페이지는 메모리_객체_데이타_복귀로서 관리자로 전송된다.
디폴트 메모리 관리자는 관리자로 푸시된적이 없는 복제본 페이지에 대한 질의를 받을 수 있다. 아직 존재하지 않는 페이지에 대한 관리자의 응답은 메모리_객체_데이타_사용불가능을 호출하는 것이다. 0 페이지를 생성하는 대신에, 이 호출은 원 객체로부터 적절한 페이지를 복제한다. 이러한 복제는 어떠한 초기화 메시지도 보이지 않기 때문에 원 페이지가 변경되지 않았다는 사실을 따른다.
[파트 B 본 발명의 상세한 설명]
본 발명은 마이크로커널 설계 및 마이크로커널 구조에 대한 메모리 관리 방법에 관한 것이다. 이 방법은 특별 객체와 같이 메모리내의 마이크로커널에 의해 정의된 탬플릿 영역을 특징지운다. 마이크로커널은 스레드, 태스크, IPC 포트 공간, 예외 공간 및 가상 어드레스 공간 매핑을 나타내는 커널의 태스크 가상 어드레스 공간내의 데이타 구조를 포함한다. 스레드를 나타내는 데이타 구조는 스레드가 예외 상태를 포착하는 것을 가능하게 하고 스케쥴링을 제공하는 정보 및 우선 순위 정보를 저장한다. 태스크를 나타내는 데이타 구조는 이 태스크가 실행되는 동안 스레드를 사용가능하게 하는 자원을 서술한다. IPC 포트 공간을 나타내는 데이타 구조는 태스크의 변형을 포트하는 포트 명칭을 서술한다. 예외 공간을 나타내는 데이타 구조는 태스크내에서 예외가 제어되는 방법을 서술한다. 가상 어드레스 공간 매핑을 나타내는 데이타 구조는 마이크로커널 시스템(115)의 메모리 관리 장치를 프로그래밍하는 데이타를 서술하고 보존한다. 마이크로커널(120)은 또한 머신-의존 PMAP 층을 관리하는 데이타 구조를 포함한다. 이 데이타 구조는 태스크의 가상 어드레스를 물리적 어드레스로 변환하는 머신-의존 방법으로 나타나는 데이타를 보존할 것이다. 마이크로커널에 의해 관리되는 PMAP 층은 물리적 메모리 프레임 데이타를 보존하여 페이지 아웃 환경의 경우 일반적으로 페이지 프레임을 서술하는 모든 PMAP들을 금지하게 한다.
메모리 관리 방법에 있어서, 마이크로커널(120)이 호스트 멀티 프로세서(100)의 메모리(102)로 로딩된 후, 상기 방법은 제3도에 도시된 바와 같이 메모리내에 태스크 컨테이너를 생성함으로써 시작한다. 태스크는 태스크 컨테이너로서 간주된다. 왜냐하면, 태스크는 태스크의 스레드가 동작할 수 있는 가상 메모리 공간 정의, 이들 스레드에 사용가능한 데이타의 정의 혹은 표기 및 태스크의 스레드가 시스템내의 다른 스레드와 통신할 수 있게 하는 통신 포트의 표현과 같은 태스크와 연관된 스레드에 사용될 수 있는 자원을 나타내기 때문이다. 메모리 관리 방법은 마이크로커널(120)에서 탬플릿 영역(200, 200' 및 200)을 형성함으로써 시작한다. 제7a도에 도시된 바와 같이, 탬플릿 영역 R0(200)는 중첩가능한 탬플릿 영역이며, 중첩가능한 영역은 제2탬플릿 영역R1(200')이다. 탬플릿 영역 R1(200')은 리프 노드 탬플릿 영역(leaf node template region)이며, 이 영역은 연속적 포인터들을 통해 제7a도의 캐시 객체(202)와 같은 객체를 가리킨다. 탬플릿 영역 R1(200')은 또한 다른 리프 노드 탬플릿 영역 R2(200)을 가리키며, 이 영역 R2는 연속적 포인터들을 통해 캐시 객체(202)내의 다른 데이타 페이지를 가리킨다. 이하 개시되는 내용으로 더욱 명백해지겠지만, 탬플릿 영역 R1(200')은 리프 노드 탬플릿 영역으로 고려된다. 왜냐하면, 이 영역은 자신의 영역에 포함된 다른 탬플릿 영역을 가리키지 않기 때문이다. 그러나, 탬플릿 영역 R0(200)은 중첩가능 영역으로 고려된다. 왜냐하면, 영역 R1 및 R2 모두 상기 중첩 영역내에 포함되기 때문이다. 상기 중첩 영역내에 포함된다는 것은 영역 R1의 가상 어드레스 공간이 탬플릿 영역 R0 의 가상 어드레스 공간내에 있다는 것을 뜻한다. 유사하게, 탬플릿 영역 R0의 가상 어드레스 공간은 탬플릿 영역 R0 의 가상 어드레스 공간내에 포함된다. 그러나, 탬플릿 영역 R1 및 탬플릿 영역 R2 의 가상 어드레스 공간은 별개이며, 그 이유는 탬플릿 영역 R1 은 리프 노드 탬플릿 영역이기 때문이다.
마이크로커널(120)은 마이크로커널 공간내에 PMAP 테이블(204)을 구성하여, 태스크의 가상 어드레스를 물리적 어드레스로 변환하는 머신-의존 방법으로 나타나는 데이타를 보존한다. 탬플릿 영역 R0 는 어드레스 공간 AD(R0)의 서술을 포함하는 마이크로커널(120)내의 데이타 구조이다. 이 어드레스 공간은 스레드가 탬플릿 영역 R0 에 의해 정의된 태스크를 위해 동작할 수 있는 어드레스 공간이다. 어드레스 공간은 16 비트 어드레스를 위해서는 충분한 64 K 바이트 가상 메모리 어드레스 세그먼트일 수 있거나 혹은 이 어드레스 공간은 32 비트 어드레스를 위한 4 기가바이트 가상 어드레스 공간 세그먼트일 수 있다. 탬플릿 영역 R0 에 의해 정의된 가상 어드레스 공간의 세그먼트는 스레드가 탬플릿 영역 R0 에 의해 정의된 태스크를 위해 동작할 수 있는 영역이 될 것이다. 또한, PMP(204)에 대한 포인터가 제7a도의 탬플릿 영역 R0 에 포함된다. 예를 들면, 포인터는 마이크로커널(120)의 마이크로커널 어드레스 공간내의 PMP(204)의 시작 어드레스를 식별한다. 탬플릿 영역 R0 을 정의하는 부가적인 데이타 구조는 탬플릿 영역 R0 과 연관된 태스크를 서술하는데 사용될 탬플릿 영역과 연결(chain)되어 다음 탬플릿 영역 R1 의 목적지를 포함한다. 상기 연결의 말단부(tail)는 R2 로 지정되어, 탬플릿 영역 R0, R1 및 R2 의 연결에서 마지막 탬플릿 영역의 신속한 식별을 가능하게 한다. 유사하게, 제7a도의 탬플릿 영역 R1 은 어드레스 공간 AD(R0)의 일부인 어드레스 공간 AD(R1) 의 서술을 포함한다. 또한, 탬플릿 영역 R1 은 PMAP, PT(R1)에 대한 포인터를 포함하며, 이 포인터는 가상 어드레스 변환 값 가상 어드레스(V0) 를 가리킨다. PMAP(204)의 이 가상 어드레스 변환 값은 라인(206)을 통해 포인터의 가상 어드레스 값을 물리적 어드레스로 변환하며, 이 물리적 어드레스는 라인(208)을 통해 메모리(102)내의 객체로 출력된다. 제7a도에 도시된 바와 같이, 가상 어드레스(V0) 변환 값은 캐시 객체(202)내의 데이타 페이지 D0 를 가리킨다. 탬플릿 영역 R1 은 또한 연결내의 다음 탬플릿 영역 R2 의 목적지 및 연결내의 이전 탬플릿 영역 R0 를 포함한다. 탬플릿 영역 R1 은 또한 캐시 객체(202)에 대한 가상 어드레스에서 캐시 객체(202)에 대한 분할 포인터를 포함하며, 또한 캐시 객체(202)에서의 데이타 페이지 D0 에 대한 오프 셋 값을 포함한다.
제7a도의 탬플릿 영역 R2는 어드레스 공간 AD(R0)의 일부인 어드레스 공간 AD(R2)의 서술을 포함한다. 탬플릿 영역 R2는 또한 PMAP, PT(R2)에 대한 포인터를 포함하며, 이들의 가상 어드레스 값은 가상 어드레스 변환 가상 ADDR V(1) 에서 라인(206)을 통해 PMAP(204)으로 인가된다. 이 가상 어드레스 변환의 결과 물리적 어드레스가 발생하며, 이 물리적 어드레스는 인스트럭션 D1 에서 라인(208)을 통해 캐시 객체(202)로 출력된다. 탬플릿 영역(R2)은 또한 연결내의 이전의 탬플릿 영역 R1 의 목적지를 포함한다. 탬플릿 영역 R2 는 또한 캐시 객체(202)의 가상 어드레스에 대한 포인터 및 인스트럭션 페이지 D1 에 대한 캐시 객체(202)에서의 오프 셋 값을 갖는다.
마이크로커널 어드레스 공간(120)에서의 각 탬플릿 영역은 대응하는 태스크 컨테이너를 정의하는 속성 세트를 갖는다. 속성은 가상 메모리 어드레스 공간, 데이타 객체 자원 및 통신 포트와 같은 스레드에 의한 사용을 위해 태스크에 사용가능한 자원을 지정할 수 있다. 마이크로커널은 제7b도에 도시된 바와 같이 메모리(102)내에 태스크를 형성할 수 있다. 마이크로커널(120)은 탬플릿 영역(200, 200' 및 200)에 의해 지정된 속성을 태스크(210)로 매핑함으로써 메모리(102)내에 태스크(210)를 형성할 수 있다. 마이크로커널(120)은 탬플릿 영역 R0 의 가상 어드레스 공간 AD(R0)에 기초하는 태스크에 대한 가상 어드레스 공간을 정의한다. 이후에, 마이크로커널(120)이 가상 메모리 동작을 수행할 때, 탬플릿 영역 R0에서의 포인터 값(205), 탬플릿 영역 R1에서의 포인터(205') 및 탬플릿 영역 R2에서의 포인터(205)를 조작함으로써 상기 동작을 수행한다. 마이크로커널(120)은 태스크(210)상에서 가상 메모리 동작을 수행하는 대신 탬플릿 영역 R0, R1 및 R2상에서 가상 메모리 동작을 수행하므로, 상기 동작의 효과는 포인터(212)에 의해 태스크에 명시된다.
마이크로커널(120)은 탬플릿 R0로부터 크기 속성 및 태스크(210)의 시작 가상 어드레스(starting virtual address)를 사용함으로써 가상 어드레스에서 태스크(210)를 나타내는 데이타 구조를 정의한다. 마이크로커널(120)은 태스크(210)에 대한 가상 어드레스 공간을 정의하며, 이 공간에서 탬플릿 영역 R0 로부터의 속성을 사용하여 태스크의 스레드가 그들의 동작을 수행할 수 있게 된다. 마이크로커널은 또한 태스크 T(A)와 같은 태스크(210)에 대한 태스크 명칭을 정의한다. 마이크로커널(120)은 또한 태스크(210)에 대한 메모리(102)에 포트 명칭 공간을 형성하여 상기 태스크의 스레드와 시스템의 다른 스레드사이의 통신 채널로서 사용한다. 마이크로커널(120)은 탬플릿 영역 R0로부터의 속성 세트를 사용하여 태스크(210)의 포트 명칭 공간에 대한 액세스 권리를 정의한다. 마이크로커널은 이 후 태스크(210)의 메모리(102)에 스레드 객체를 형성할 수 있으며, 스레드는 이에 의해 태스크의 가상 어드레스 공간으로부터 인스트럭션을 인출할 수 있게 된다.
본 발명에 따라, 마이크로커널(120)은 탬플릿 영역 R0를 가리키는 태스크(210)의 제1포인터(212)를 정의한다. 탬플릿 영역 R0내에, 직접적으로 혹은 간접적으로 PMAP 매핑 테이블(204)를 가리키는 다수의 제2포인터가 존재한다. 제7b도에 도시된 바와 같이, 포인터(205)는 PMAP(205)을 가리킨다. 탬플릿 영역 R1은 자신의 포인터(205')가 PMAP(204)에서의 가상 어드레스 변환 값을 가리키게 됨에 따라 탬플릿 영역 R0의 어드레스 공간에 포함된다. 가상 어드레스 변환 값 V0 은 이후 포인터(205')의 가상 어드레스 값을 캐시 객체(202)에서의 데이타 D0 에 대한 물리적 어드레스로 변환시킨다. 유사하게, 탬플릿 영역 R0 의 어드레스 공간내에 포함된 탬플릿 영역 R2 내의 포인터(205)는 PMAP(204)내의 가상 어드레스 변환 값 V1을 가리킨다. 가상 어드레스 변환 값 V1은 포인터(205)의 가상 어드레스 값을 캐시 객체(202)내의 인스트럭션 페이지 D1 의 물리적 어드레스로 변환시킨다.
종종, 태스크의 데이타 자원에서 변화를 수행하는 것이 바람직할 수 도 있다. 이러한 변화는 탬플릿 영역 R0, R1 및 R2에서의 제2포인터(205, 205' 및 205)에 의해 나타나는 가상 어드레스 값을 각기 변화시킴으로써 성취된다. 변화된 제2포인터는 필요에 따라 PMAP(204)에서의 상이한 변환 값을 가리킬 수 있다. 그러나, 본 발명에 따라, 태스크(210) 그자체의 내용에 대해서는 변화가 불필요하다. 캐시 객체내의 데이타와 같은 태스크 자원은 탬플릿 영역내의 제2포인터(205, 205' 및 205)를 통해 태스크에 의해 어드레스된다.
제7c도에 도시된 바와 같이 마이크로커널이 탬플릿 영역으로부터 다수의 태스크를 갖는다면, 이후 탬플릿 영역 R0, R1 및 R2 의 제2포인터(205, 205' 및 205)를 변화시킴으로써 제7c도의 다수의 태스크(210 및 210')를 사용할 수 있는 자원에서 광범위한 변화가 발생할 것이다. 이러한 변화의 원인은 태스크(210 및 210')가 각기 동일한 탬플릿 영역 R0(200)를 가리키는 포인터(212 및 212')를 갖기 때문이다. 태스크(210 및 210')에 의해 어드레스된 데이타 페이지 D0 및 D1은 태스크(210 및 210')의 각각의 내용을 변화시키는 대신에, 탬플릿 영역 R0, R1 및 R2 에서의 제2포인터(205, 205' 및 205)에 대한 단일 변화로서 변화될 수 있다.
이러한 방법으로, 단일 탬플릿 영역 R0 및 이 영역의 포함된 탬플릿 영역 R1 및 R2는 동시에 다중 태스크(210, 210')으로 매핑될 수 있다. 각 태스크(210 및 210')는 탬플릿 영역 R0, R1 및 R2에 대해 이루어진 모든 변화를 인식한다. 이러한 동작은 동일한 탬플릿 영역 R0(200)에 의해 발생된 태스크(210 및 210')의 특성 공유를 허용한다. 탬플릿 영역 R0, R1 및 R2는 모든 가상 메모리 동작이 직접 수행되는 객체이다. 종래에는, MACH 마이크로커널에 있어서, 태스크만이 가상 메모리 동작이 직접 수행되는 객체이었다. 본 발명에 따르면, 가상 메모리 동작을 이 동작이 효과를 발휘하는 탬플릿 영역상에서 직접 수행함으로써, 가상 메모리 동작의 공유는 다수의 태스크상에서 더욱 쉽게 성취할 수 있게 되었다.
탬플릿 영역은 특별한 객체이므로, 단일 탬플릿 영역은 다수의 태스크로 동시에 매핑될 수 있다. 탬플릿 영역이 다수의 태스크로 매핑될 때, 각 태스크는 탬플릿 영역에 대해 이루어지는 모든 변화를 인식한다. 메모리 내용의 변화 혹은 내부 탬플릿 영역의 부가 혹은 제거는 매핑된 원 탬플릿 영역의 태스크에 의해 인식될 수 있다. 이러한 인식은 이전에 사용할 수 없었던 혹은 단지 근사(approximate)되었던 시멘틱스의 공유를 가능하게 한다. 즉, 탬플릿 영역은 메모리 내용이 공유되는 것뿐 아니라, 메모리 매핑 그 자체의 공유도 허용한다. 따라서, (메모리 내용의 변화 혹은 탬플릿 영역에 의해 매핑된 영역의 변화의 결과로서)탬플릿 영역에 대한 변화는 탬플릿 영역이 매핑된 모든 태스크에 의해 인식될 수 있다. 이와달리, 탬플릿 영역이 없는 것은 각 태스크/메모리 관계를 감시하기를 요구하는 것이며, 또한 태스크의 대응하는 메모리 영역의 변화에 의해 영향받는 각 태스크의 변화를 필요로 하는 것이다. 탬플릿 영역이 결핍된 구현에 대한 명시적 단점은 특정한 메모리 영역에 대해 매핑된 태스크의 수가 증가함으로써 상응하게 증가하는 변화에 의해 영향을 받는 영역을 갱신하는데 소요되는 시간이다.
예를 들면, 탬플릿 영역을 사용하여, 모든 라이브러리가 동일 탬플릿 영역에 위치되고 이 영역이 관심 태스크에 의해 매핑된다면, 이후 탬플릿 영역에 대한 새로운 라이브러리의 매핑-인(mapping-in)이 관심 태스크의 수에 관계없이 예측가능한 시간(amount of time)을 취하게 될 것이다. 더욱이, 잠재적으로 복잡한 잠금 방안을 사용함이 없는 매핑 정보의 변환은 매핑된 영역을 갖는 태스크에 대해서는 극미하게(atomic) 나타날 수 있다.
탬플릿 영역은 VM 동작 즉, 가상 메모리 동작이 직접적으로 발생하는 객체이다. 종래에는, 태스크가 가상 메모리 동작이 직접적으로 수행되는 객체이었다. 본 발명에 따라 가상 메모리 동작을 그 효과가 발생하는 탬플릿 영역에 제공함으로써 가상 메모리 동작의 공유를 성취하기가 한결 용이해 질 것이다. 왜냐하면, 변화가 각 태스크내의 영역 매핑에 대해 이루어지는 것이 아니고 영역에 대해 이루어 지기 때문이다. 이는 본 발명의 중요한 특질이다. 탬플릿 영역은 객체이다. 탬플릿 영역은 속성, 상태의 일부를 포함하며, 태스크의 어드레스 공간에는 존재하지 않는다. 태스크의 어드레스 공간에 존재하는 것은 탬플릿 영역의 매핑이다. 탬플릿 영역의 매핑이 태스크의 어드레스 공간에 존재하므로, 매핑은 태스크의 어드레스 공간 어디에서나 나타날 수 있으며, 상이한 태스크는 제8a도에 도시된 바와 같이 태스크의 각각의 어드레스 공간내의 상이한 어드레스에서 매핑된 동일한 탬플릿 영역을 공유할 수 있다. 태스크 A는 어드레스 hex4000 에서 매핑된 탬플릿 영역을 가질 수 있지만, 태스크 B 는 어드레스 hex800F000 에서 매핑된 동일한 탬플릿 영역을 가질 수 있다. 제8b도에 도시된 바와 같이, 단일 태스크의 어드레스에서 한번이상 매핑된 동일한 탬플릿 영역을 갖는 것이 또한 가능하다.
태스크의 어드레스 자체는 태스크가 생성될 때 제공되는 탬플릿 영역에 의해 정의된다. 따라서, 태스크의 어드레스 공간으로 매핑된 모든 탬플릿 영역은 실제적으로 다른 탬플릿 영역으로 매핑된다. 따라서, 마이크로커널에 대한 VM-map 호출은 태스크 포트를 취하지 않으며, 새로운 탬플릿 영역이 다른 탬플릿 영역으로 매핑되어야 하는 위치에 대해 단지 탬플릿 영역 포트만을 취한다. 이는 탬플릿 영역은 모든 가상 메모리 동작이 수행되는 엔티티라는 개념에 일치하게 된다. 태스크 및 탬플릿 영역사이의 연결은 태스크가 생성될 때 설정된다. 이러한 방법으로 태스크의 어드레스 공간을 관리함으로써, 태스크가 생성될 때 매핑 설정을 사전정의하는 것이 매우 용이하게 된다. 또한, 어드레스 공간의 상이한 크기를 갖는 태스크를 포함하는 것이 비교적 용이하게 된다. 어드레스 공간의 상이한 크기는 기본 탬플릿 영역(basic template region) 의 작용이며 이후에 제15도와 연계되어 서술되고 설명된다. 간단히 말해서, 기본 탬플릿 영역은 태스크의 어드레스가능한 메모리 범위를 정의하는 엔티티이다. 태스크와 연관된 기본 탬플릿 영역은 설정되어(혹은 변화되어) 기본 탬플릿 영역이 임의의 크기로 될 수 있다. 예를 들면, 상이한 크기의 기본 탬플릿 영역의 좀 더 유용한 구현에서는 32비트와 64 비트가 혼합된 시스템을 동시에 지원할 수 있다. 또한, 상이한 크기의 탬플릿 영역은 소정의 이유로 인해 태스크의 어드레스 범위가 제한되는 환경에서 사용될 수 있다.
본 발명의 실시예에 따르면, 탬플릿 영역은 중첩될 수 있다. 그러나, 이 탬플릿 영역은 매우 특정한 방법으로 중첩될 수 있다. 두 탬플릿 영역이 중첩된다면, 탬플릿 영역의 하나는 완전히 다른 탬플릿 영역을 커버해야 한다. 제9도에 있어서, 탬플릿 영역 R1 이 탬플릿 영역 R2 와 중첩된다면, 제9도의 좌측 도면 부분은 교정될 것이고 제9도의 우측 도면 부분은 교정되지 않을 것이다. 탬플릿 영역 R1 과 탬플릿 영역 R2 가 바뀌어진다 해도 결과는 상기와 동일하다.(이 영역의 순서는 중첩된다고 고려되며 다른 영역은 두 상이한 매핑 동작에 의해 결정된다.) 제10도에 도시된 바와 같이 탬플릿 영역이 중첩되는 부분이 R0 이면 제9도에서의 우측 도면은 여전히 교정되지 않을 것이다. 탬플릿 영역이 다른 탬플릿 영역에 위치하게 될 부가적인 제한이 존재한다. 예를 들면, 탬플릿 영역은 둘러싸인 탬플릿 영역의 동일한 범위에서 다른 탬플릿 영역이 나타남을 차단하는 것을 나타내는 속성을 가질 수 있다. 일반적으로, 탬플릿 영역은 둘러싸인 탬플릿 영역에 관계없이 서로 중첩할 수 있다. 제9도에 있어서, R1 의 둘러싸인 탬플릿 영역은 R2 혹은 R0 가 될 수 있다. 그러나, R1 및 R2 가 모두 메모리에 포함된다고 하면 이는 문제점을 야기시킬 수 있다. 이러한 문제점은 탬플릿 영역이 다른 탬플릿 영역의 홀들로 매핑되는 것을 허용함으로써 저지될 수 있다. 즉, 하나의 탬플릿 영역은 다른 탬플릿 영역에 의해 이미 매핑된 영역으로 매핑될 수 없다. 따라서 제9도에서, R1은 단지 R2에 의해 둘러싸여질 수 있다. R1이 R0에 의해 둘러싸여질 가능성은 존재하지 않는데, 왜냐하면 R1 및 R2 모두 R0 에서 동일한 범위를 점유하기 때문이다.
탬플릿 영역을 사용할 때, 익명 메모리를 할당하는 방법은 존재하지 않는다. 상기 할당은 제10도에 도시된 바와 같이 메모리 객체를 영역으로 할당함으로써 수행된다. 모든 메모리는 메모리 객체에 의해 나타나기 때문에, 탬플릿 영역에 메모리를 나타내기 위해서는 메모리 객체는 탬플릿 영역으로 매핑되어야 한다. 종래에는, 메모리 할당은 실제적으로 익명 메모리 객체의 일 부분을 매핑하는 특별한 경우이었다. 탬플릿 영역에서는 익명 메모리 객체의 개념이 존재하지 않는다. 각 메모리 객체는 매핑되기 위해 식별되어야 한다.
알 수 있는 바와 같이, 탬플릿 영역은 매우 순환적이다. 순환은 내내 물리적 페이지로 이어진다고 생각하는 것이 편리하다. 물리적 페이지는 고정된 크기 탬플릿 영역으로 간주된다. 이 물리적 페이지는 이러한 방법으로 수행되어야 하는 구현을 포함하지는 않는다. 개념적인 관점으로 물리적 페이지를 탬플릿 영역의 가장 낮은 세트로 생각하는 것이 편리하다. 단일 탬플릿 영역은 하나 이상의 탬플릿 영역으로 매핑될 수 있으므로, 하나 이상의 정규(normal) 영역으로 매핑되는 물리적 페이지를 갖는 것이 가능하다. 이러한 물리적 페이지를 가짐으로써, 상이한 탬플릿 영역이 동일한 물리적 메모리를 액세스하는 것이 허용되지만, 이들 물리적 페이지와 연관된 상이한 속성을 가지게 된다. 명백히, 상이한 탬플릿 영역이 상충되는 속성을 가진다면 물리적 페이지의 속성이 설정되는 방법에 대한 규칙이 존재해야 한다. 예를 들면, 하나의 탬플릿은 페이지가 캐시불가능하다는 것을 나타낼 수도 있으며, 반면에 다른 탬플릿은 페이지가 캐시될 수 있다는 것을 나타낼 수 있다. 또한 반대의 경우도 가능하다. 페이지 테이블은 물리적으로 비연속적인 페이지(discontinuous pages)를 허용하여 가상적으로 인접하는 것으로 나타나는 것을 허용한다. 중첩하는 탬플릿 영역에서도 동일한 동작이 수행될 수 있다. 제11도에서, R0는 두개의 다른 영역 R1, R2를 포함하지만 이들은 R0내에서 인접하지는 않는다. 동일한 응용에서, 상기 환경은 정보의 조작을 어렵게 할 수 도 있다. 왜냐하면, 상기의 비인접(discontinuity)은 알려져야 하고 어드레스되어야 하기 때문이다. 새로운 탬플릿 영역 R3 은 R1, R2를 충분히 포함할 정도로 크게 생성될 수 있다. R1 및 R2는 R3로 매핑되고 이러한 방법으로 이들은 서로 인접할 수 있다. 응용은 이후 R3를 사용하여 R0 에서 나타난 비인접에 대해 어드레스 하지 않게 된다.
본 발명의 실시예에 따르면, 탬플릿 영역에는 두 상이한 부류가 존재한다. 탬플릿 영역의 제1유형은 중첩가능한 탬플릿 영역으로, 다른 탬플릿 영역을 포함할 수 있다. 이 유형은 상술한 순환을 허용한다. 그러나 이 유형은 실제로 메모리를 포함할 수는 없다. 왜냐하면, 이 유형은 모든 메모리(가상 메모리)가 메모리 객체에 의해 나타나기 때문이다. 메모리 객체는 탬플릿 영역보다는 상이한 엔티티이다. 따라서, 메모리 객체의 일부를 매핑하는 제2유형 탬플릿 영역이 존재하게 된다. 이 유형은 리프 노드(leaf) 영역으로 간주된다. 제12도는 탬플릿 영역의 상이한 유형의 예 및 메모리 객체가 이들 예에 연관되는 방법을 도시한다. 메모리 객체인 리프 노드 영역이 매핑되는 메모리 객체의 일부분의 크기와 동일하여야 한다는 사실을 유의해야 한다. 즉, 탬플릿 영역으로 매핑되는 메모리 객체를 갖지 않는 탬플릿 영역 부분은 존재하지 않게 된다. 제13도는 영역으로 메모리 객체를 매핑하는 부정확한 예를 도시한다. MO1을 탬플릿 영역 R3 으로 매핑하는 것은 타당하지 않다. 왜냐하면, R3은 다른 탬플릿 영역을 포함하기 때문이다. MO2를 R2로 매핑하는 것도 역시 타당하지 않다. 왜냐하면 R2는 매핑되는 MO2의 부분보다 크기 때문이다.
탬플릿 영역은 탬플릿 영역에 의해 포함된 메모리가 처리되는 방법을 나타내는 그들과 연관된 상이한 속성을 갖는다. 아래에 속성 식별이 개시되며, 이 속성 식별은 그들 개개의 의미 및 각 속성을 둘러싸는 일부 시멘틱스를 서술한다.
1. 메모리가 탬플릿 영역으로 할당될 때 반드시 보조 저장장치를 할당한다. 메모리가 탬플릿 영역으로 할당되지 않으면, 보조 저장장치는 천천히 할당된다.
2. 수퍼바이저 - 프로세서가 수퍼바이저 상태를 실행할 때만 탬플릿 영역이 액세스가능하다는 것을 나타냄.
3. 특권 - 물리적 메모리가 희소할 때 보존된 풀로부터 페이지를 할당할 수 있다.
4. 메모리가 할당되고 탬플릿 영역에 위치할 때, 메모리를 나타내는 페이지들은 물리적으로 인접해야 한다.
5. 메모리가 할당되고 탬플릿 영역에 위치할 때, 메모리를 나타내는 페이지는 지시된 물리적 어드레스 범위에 존재해야 한다.
6. 탬플릿 영역내의 페이지는 메모리로 와이어된다. 탬플릿 영역으로의 임의의 새로운 할당도 또한 와이어된다. 이 속성이 설정되지 않으면, 탬플릿 영역내의 페이지는 명칭 메모리로부터 퇴거될 수 있다.
7. 프로세서 캐시 속성
8. 액세스 동작
9. 액세스 권리
10. 결합성(Coherency) 및 NORMA
탬플릿 영역은 제14도에 도시된 바와 같이 다수의 다른 구성요소와 상호작용한다. 각 구성요소에 대한 서술은 아래 장에서 개시된다.
다양한 가상 메모리 구성요소는 페이지, 메모리 객체, 탬플릿 영역, 캐시, PMAP 및 메모리 관리 장치이다.
아래의 관찰은 본 발명에 따르는 방법으로 구성되는 가상 메모리 시스템에 대해 이루어진다.
1. 물리적 페이지는 적어도 하나의 메모리 객체이다. 이 물리적 페이지는 메모리 객체가 메모리 를 나타내는 데 사용되는 엔티티이므로 발생한다. 공유는 페이지를 포함하는 메모리 객체를 공유하거나 혹은 메모리 객체를 포함하는 탬플릿 영역을 공유함으로써 성취된다.
2. 메모리 객체는 이 객체를 매핑하는 매 탬플릿 영역에 대해 인식해야 한다.
3. 탬플릿 영역은 탬플릿 영역을 포함하는 매 PMAP 범위에 대해 인식해야 한다.
상기 동작으로 인해 물리적 페이지의 공유를 인식하는데 필요한 메모리의 양이 상당히 감소된다. 종래에는, 이전의 구현이 페이지가 포함된 모든 PMAP 리스트를 페이지 마다 포함하였다. 상기 구현은 바람직하지 않은 순환을 PMAP 코드로 끌어들였다. 왜냐하면, PMAP 코드는 페이지를 포함하는 PMAP 리스트를 구성하고 보존하기 위해 메모리를 동적으로 할당할 수 있어야 하기 때문이다.
그러나, 본 발명에 따르면, PMAP 은 자신의 데이타 구조를 보존하기 위해 동적인 메모리 할당을 가지지 않는다. 공유는 탬플릿 영역 레벨에서 수행되므로, PMAP 리스트는 상당히 감소될 수 있다. 태스크사이에 많은 양의 공유를 갖는 시스템에서 상기 동작은 상당한 절약을 가져오게 된다. 예를 들면, 10 개의 페이지 탬플릿 영역을 공유하는 10 개의 태스크는 90 개의 리스트 구성요소를 절약할 수 있다. 즉, 탬플릿 영역이 없는 100 개의 리스트 구성요소(각 10 개의 구성요소 리스트를 갖는 10 페이지)는 탬플릿 영역을 갖는 10 개의 리스트 구성요소(10 개의 구성요소 리스트를 갖는 하나의 영역)에 상응한다.
매핑을 나타내는 탬플릿 영역으로 인해, 탬플릿 영역은 하드웨어 데이타 구조로 간주될 수 있다. 많은 하드웨어 구현은 둘 혹은 그 이상의 데이타 구조 레벨을 사용한다. 따라서, 전체 제2레벨 데이타 구조에 민감한 구현을 사용함으로써, 매핑된 탬플릿 영역을 갖는 태스크는 잘 알려진 데이타 구조에 의해 나타난 하드웨어 데이타 구조를 재사용할 수 있다. 예를 들면, 인텔 사의 386/486 및 펜티엄 프로세서에서 페이지 테이블 구조는 두 레벨 깊이를 갖는다. 제2레벨은 4 메가바이트 경계상에 4 메가바이트 길이인 메모리 영역을 나타낸다. 하나의 프로세서의 탬플릿 영역 구현은 메모리 영역이 생성될 때 이 영역이 4메가바이트(혹은 일부는 다중 4메가바이트)임을 탐지할 수 있으며, 하나의 태스크 이상이 상기 영역을 매핑할 때 이를 확인할 수 있고, 새로운 하드웨어 데이타 구조가 생성될 필요가 없게 될 것이다. 비공유 하드웨어 데이타 구조에 대해서도 상기 구현은 효율적일 수 있다. 왜냐하면, 탬플릿 영역은 다른 하드웨어 데이타 구조에 대한 매핑 가이드로서 작용하기 때문이다. 따라서, 다른 하드웨어 데이타 구조 매핑은 원래의 매핑된 하드웨어 데이타 구조로부터 단지 약간의 유형으로 변화될 수 있으며(혹은 전혀 변하지 않을 수도 있다), 이로 인해 성능 향상을 가져오는 차후의 데이타 구조의 단순 생성이 허용된다.
또한, 본 발명은 페이지가 페이지 인(page in) 될 때, PMAP 엔트리의 효율적인 구현을 허용한다. 이로 인해, 페이지 오류가 상당히 감소할 수 있다. 페이지가 메모리내에 존재하게 되면, 오류는 상기 메모리상에서 발생하지 않을 것이다.
탬플릿 영역 및 태스크는 모두 특별 마이크로커널 객체이다. 즉, 이들은 서로 독립적으로 간주될 수 있다. 그러나, 탬플릿 영역이 태스크의 어드레스 공간을 정의한다. 태스크의 어드레스 공간 즉, 기본 탬플릿 영역은 태스크가 생성될 때 정의된다.
태스크는 기본적으로 두 탬플릿 영역을 인식한다. 하나의 탬플릿 영역은 다른 하나의 탬플릿 영역에 의해 포함되지만, 태스크는 내부 탬플릿 영역에 대해 알 필요가 있으므로, 태스크는 이를 인식하게 된다. 두 탬플릿 영역은 기본 탬플릿 영역 및 사용자 탬플릿 영역이다. 기본 탬플릿 영역은 태스크의 전체 어드레스 공간을 서술한다. 사용자 탬플릿 영역은 일반적으로 기본 탬플릿 영역 내부에 위치하고 특별한 특권없이 태스크의 사용자 부분에 의해 조작되는 어드레스 공간의 일부분을 서술한다(즉 태스크 포트만을 요구한다). 이들은 탬플릿 영역이므로, 태스크 및 시스템의 정확한 동작에 필요한 다른 탬플릿 영역을 포함할 수 있다. 제15도에서는, R0는 기본 탬플릿 영역이다. R0는 기본 탬플릿 영역에 특정한 다른 탬플릿 영역 R3를 포함하며, R0는 사용자 탬플릿 영역 R1을 포함한다. R1은 다른 탬플릿 영역 R2를 포함한다. 태스크내의 스레드는 탬플릿 영역내의 임의의 내용을 액세스할 수 있으나, 태스크는 단지 탬플릿 영역 R1 및 R2 만을 조작할 수 있다는 사실을 유의해야 한다.
태스크가 사용자 탬플릿 영역을 가질 필요는 없다. 이러한 경우, 태스크는 자신의 어드레스 공간을 조작할 수 없으며, 이를 대신한 처리를 수행하기 위해서는 다른 동작에 의존해야 한다. 이로 인해 태스크를 갖는 운영 체제 퍼스낼리티는 태스크의 어드레스 맵이 임의로 변화하는 것을 저지할 수 있다(즉, 어드레스 맵은 운영 체제 퍼스낼리티에 의존한다).
제15도를 다시 참조하면, 태스크는 두 포인터를 갖는 것으로 도시된다. 제1포인터는 태스크의 전체 어드레스 공간(태스크가 액세스 할 수 있는 모든 것)을 서술하는 베이스 영역에 대한 것이다. 제2포인터는 사용자 영역(사용자 프로그램이 영역의 견지에서 조작될 수 있는 것)에 관한 것이다. 사용자 프로그램으로 액세스 가능한 태스크 혹은 베이스 영역의 내부에 탬플릿 영역이 존재할 수 있다는 사실을 유의해야 하며, 상기 영역은 조작할 수 없을 뿐 아니라, 비 특권 코드에 의해 조작될 수 없다. 또 하나의 유의사항은 제15도에서 R0-R3 의 4개의 영역이 존재한다는 사실이다. 태스크의 전체 어드레스 공간을 서술하는 베이스 영역은 R0 이다. 현재 전형적으로 이 영역은 머신 구조만큼 클 것이며 태스크의 특별한 유형을 허용할 것이다. 그래서, 예를 들면, 32 비트 구조상에서 베이스 영역은 4기가바이트 범위를 서술할 것이다. 이는 베이스 영역이 4기가바이트 정보를 포함한다는 것을 말하는 것은 아니다. 오히려 태스크는 4기가바이트의 정보를 액세스할 수 도 있다. 사용자 영역은 R1에 의해 서술된다. R1은 태스크내의 비특권코드를 허용하여 R1내부의 영역을 조작하고, 영역을 생성하며, 새로운 영역(들)을 R1으로/으로부터 매핑/매핑 해제(map/unmap) 한다. 그러나, R1은 R3상에서 어떠한 동작도 수행할 수 없다. 예를 들면, R1은 R3의 내용을 액세스할 수도 있지만, R1은 R3을 특별히 영역 그 자체로서 인식하지 못할 수도 있다. 또한, R1 및 R3는 R0 의 존재나 혹은 그의 내용을 인식하지 못한다. 그래서, 태스크가 그들의 공간에 대해 인식할 수 있는 유일한 영역은 사용자 영역에 의해 지정된 영역 및 R1 및 R2와 같은 사용자 영역내에 포함된 영역이다. 하나의 시나리오에서, 태스크 생성 환경에서 사용자 영역은 존재하지 않을 수도 있으며, 여기서 태스크는 자신의 임의의 매핑 정보를 변화시키지 않을 것이다. 태스크는 일부 다른 서버와 같은 일부 다른 에이전트에 의존하여 조작을 수행한다. 운영 체제사이에서 상기 동작이 바람직한 환경은 자신의 어드레스 공간을 조작하는 응용 프로그램이 금지되어야 한다는 것이다.
다른 시나리오에서, 커널 그 자체에 대해 예를 들면, 사용자 영역 및 베이스 영역 모두 동일한 영역을 가리킨다. 이로인해, 커널 태스크는 일부가 아닌 자신의 모든 어드레스 공간을 조작할 수 있다.
영역이 수퍼바이저 상태로 수출될 때, 탬플릿 영역 개념으로 다양한 동작이 간결화 될 수 있다. 먼저, 수퍼바이저 탬플릿 상태로 새로운 코드가 로딩될 수 있다. 다음으로, 수퍼바이저 모드에서 동작하는 코드의 일부는 쉽게 페이지가능하게 될 수 있다. 이들 어떠한 특성도 일반적 탬플릿 영역 자원에서 요구되는 인터페이스보다 부가된 어떠한 인터페이스도 요구하지 않는다.
사용자 및 수퍼바이저 액세스 상태사이에서 액세스 부분을 유지하는 것이 중요하다. 이 액세스의 유지는 프로세서가 수퍼바이저 상태에 있을 때만 탬플릿 영역이 액세스가능한 것을 나타내는 속성을 보존함으로써 성취된다. 사용자 태스크가 수퍼바이저 영역의 존재를 인식할 수는 있지만, 이 영역의 내용을 액세스할 수는 없다. 일반적으로, 수퍼바이저 탬플릿 영역은 탬플릿 영역 그들 자체의 조작을 금지하기 위해 기본 탬플릿 영역에 존재하게 될 것이다.
동작하는 시스템은 전형적으로 비교적 작은 수의 수퍼바이저 탬플릿 영역을 갖는다. 이 시스템은 두 가능한 범주로 나누어 진다. 탬플릿 영역의 하나의 세트는 개개의 태스크에 지정되어 커널 인터페이스 라이브러리를 제공할 수 있는 능력을 가지게 된다. 이로 인해 다수의 커널 호출을 생성하는 페날티를 부과하지 않고 각기 태스크가 커널에 대해 특정화된 인터페이스를 제공하는 잠재력을 가지게 된다. 이러한 동작은 제16도에 도시된다.
제16도는 대부분의 환경에서 보호되는 커널 혹은 소정의 수퍼바이저 엔티티의 일 부분이 존재하지만, 태스크의 어드레스 공간으로는 매핑되지 않음을 도시한다. 상기 동작은 탬플릿 영역에서 태스크의 어드레스 공간에서 나타나는 커널 부분을 매핑함으로써 탬플릿 영역으로 성취된다. 상기 부분은 베이스 영역으로 매핑되므로 사용자는 이 부분을 조작할 수는 없다. 전형적으로, 사용자/수퍼바이저 변이가 발생하는 방법으로 인해, 수퍼바이저의 일부 부분은 태스크의 어드레스 공간에 존재하도록 요구되지만, 사용자 혹은 응용 프로그램에 의해 액세스가능하지 않도록 보호된다. 또한, 이러한 방안으로, 공유 커널 영역을 가지는 것뿐 아니라, 인터페이스 라이브러리로서 상이한 라이브러리를 매핑함으로써 응용 커널 인터페이스를 태스크 기반(task basis)마다 사용자 요구에 맞게 변형하는 것이 가능하다. 인터페이스 라이브러리는 또한 베이스 영역에 서 나타나며, 응용 코드에 의해 조작되지 않는 방법으로 보호되며, 제16도의 R5 및 R6 도에 도시된다. 공유 커널은 제16도 도면의 양쪽에서 R3 으로 나타난다.
마이크로커널 그 자체는 커널 태스크라 일컬어지는 태스크이며, 다른 태스크와 유사하게 기본 탬플릿 영역을 가질 것이다. 모두는 아니지만, 마이크로커널의 태스크 기본 탬플릿 영역에 포함된 대부분의 탬플릿 영역은 모두 수퍼바이저 탬플릿 영역이 될 것이다. 이 기본 탬플릿 영역은 다른 태스크의 기본 탬플릿 영역에 포함되어 커널 작용을 액세스할 수 있게 될 것이다. 그러나, 다른 것들과는 상이하게 태스크의 사용자 탬플릿 영역은 사용자의 기본 탬플릿 영역과 동일하다. 커널의 탬플릿 영역은 먼저 제16도에 도시된다. 더 상세한 예가 제17도에 도시된다. 제17도는 커널 부분을 도시한다. 이 커널 부분은 어떠한 탬플릿 영역을 나타냄으로써 페이지가능하게 되며, 상기 탬플릿 영역은 이 영역들이 와이어되지 않았다는 것을 나타내는 속성을 가질 수 있다. 커널의 작용은 새로운 탬플릿 영역을 커널의 탬플릿 영역의 하나로 매핑함으로써 확장될 수 있다.
제17도에서, 마이크로커널 그 자체는 태스크이므로, 탬플릿 영역은 커널 태스크 그 자체를 조직하는 데 사용된다. 커널 태스크는 베이스 및 사용자 영역 포인터를 가지며 이 영역들 모두는 제17도의 동일한 영역 R0 를 가리킨다. 따라서, 커널 태스크는 자신의 전체 어드레스 공간을 조작할 수 있는 특권을 가지게 된다. 커널 태스크의 맵에서 두 주요한 서브 영역은 R1, R3로 도시된다. R3은 와이어되게 하는 속성을 가지며, 따라서 결코 메모리로부터 퇴거되지 않는다. 그러나, 영역 R1에 포함되지만 부재될 수도 있는 커널 부분이 존재하게 될 것이며, 이 부분은 상기 영역이 페이지되게 허용하는 속성을 갖는다. 따라서, 커널에서 페이지가능하게 되는 코드는 페이지가능한 속성 세트를 갖는 탬플릿 영역으로 위치될 수도 있다. 페이지가능하지 않은 코드는 페이지가능한 속성 세트 없이도 탬플릿 영역으로 위치될 수 있다. 이로 인해, 단순히 새로운 영역을 적절한 와이어된 영역 혹은 적절한 페이지가능 영역으로 매핑함으로써 새로운 코드를 커널로 로딩하는 것이 매우 용이하게 된다.
이하 탬플릿 영역에서의 매핑의 예가 개시된다. 프로그램은 개방동안 화일 서버를 야기할 수 있다. 화일 서버는 화일의 크기를 결정할 수 있으며, 화일을 포함하기에 충분히 크게 가상 메모리 공간을 나타내는 탬플릿 영역을 생성할 수 있다. 예를 들면, 화일이 700,000 바이트이면, 화일 서버는 700,000 바이트 가상 메모리 공간을 나타내는 탬플릿 영역을 생성할 수 있다. 화일 서버는 또한 화일을 나타내는 데 사용되는 메모리 객체를 생성할 수 있다. 메모리 객체는 잠재적으로 허용을 감소시키는 화일을 나타내며, 따라서 고객이 판독 전용을 위해 화일 개방을 갖는지 혹은 판독-기록을 위해 화일 개방을 갖는지에 관계없이 동일한 메모리 객체가 된다. 실시예에서는 두 고객이 존재한다. 한 고객은 판독 전용으로서 화일을 개방하는 것을 결정하고 다른 고객은 판독-기록으로서 화일을 개방하는 것을 결정한다. 메모리 객체가 실제적인 화일의 내용을 나타내므로 하나의 메모리 객체가 존재하게 된다. 또한 두 탬플릿 영역이 존재한다. 하나의 탬플릿 영역은 화일의 판독 전용 매핑을 포함할 것이고, 다른 탬플릿 영역은 객체가 기록되는 것을 가능하게 할 것이다.
각 탬플릿 영역은 데이타의 매핑을 나타낸다. 제2탬플릿 영역은 예를 들면, 비록 양 영역뒤의 데이타가 동일하고 동일한 것을 보장하더라도, 객체가 기록가능할 뿐만 아니라 판독가능하도록 하는 속성을 가질 것이다. 데이타를 가지고 수행되는 작용은 어느 탬플릿 영역이 액세스되느냐에 따라 다르다. 탬플릿 영역이 없는 구현에서, 메모리는 적어도 하나의 태스크에 대한 매핑없이 조작될 수는 없다. 탬플릿 영역에서, 직접 태스크/메모리 관계의 요구를 정지시킴으로써, 메모리는 조작되기 위해 태스크로 매핑될 필요는 없다. 또한, 직접 태스크/메모리 관계가 깨어졌으므로, 탬플릿 영역에 의해 매핑된 메모리 영역은 탬플릿 영역이 매핑된 어드레스 공간보다 더 클 수도 있다. 이로 인해, 탬플릿 영역 크기상에 제한을 가지거나 혹은 임의로 탬플릿 영역을 분리할 필요는 없게되며, 따라서 상응하는 태스크의 제한에 따라 탬플릿 영역이 매핑될 수 있다. 제1탬플릿 영역은 객체내의 데이타에 대한 판독 전용 허용을 갖는다. 제2탬플릿 영역은 메모리 객체내의 데이타에 대한 판독 기록 허용을 갖는다. 개개의 허용에 대응하는 화일을 포함하는 데이타는 메모리 객체 내부에 존재한다. 화일 서버의 역할은 두가지(two-fold)이다. 제1의 역할은 화일 및 화일을 나타내는 메모리 객체의 매핑을 나타내는 탬플릿 영역사이의 연결을 설정하는 것이다. 포인터 정보는 메모리 객체 페이지의 위치를 식별하는 제1탬플릿 영역으로 풋된다. 따라서, 동일한 포인터 정보가 메모리 객체 페이지의 가상 어드레스 공간에서의 위치를 식별하는 제2탬플릿 영역으로 풋된다. 상기 두 탬플릿 영역의 차이점은 제1탬플릿 영역은 객체내에서 단지 데이타를 판독하는 허용만 가지며, 제2탬플릿 영역은 데이타를 기록하고 판독하는 허용 모두를 가진다는 것이다.
탬플릿 영역의 장점 하나는 동일한 객체에 대해 상이한 속성을 가지는 능력이다. 또한, 영역이 중첩하므로, 탬플릿 영역은 단지 메모리 객체뿐만 아니라 다른 탬플릿 영역도 가리킬 수 있다. 따라서, 메모리의 탬플릿 맵이 구성될 수 있다. 이로인해, 탬플릿 영역에 의해 서술된 정보를 액세스하기 위해, 하드웨어 매핑을 설립하는 포인터 정보가 합리적으로 잘 구성된 세트가 필요하게 되며, 이 세트는 존재하는 데이타를 액세스할 것이다. 예를 들면, 인텔 구성 머신상에서, 이전에 채워진 일부 테이블 혹은 페이지 테이블의 부분이 존재하게 된다. 실제로 탬플릿 영역에 대한 어드레스 공간 매핑이 요구된다면, 페이지 테이블 데이타 구조를 완전히 생성하는 것보다 페이지 테이블 데이타 구조의 일부분을 가리키는 것이 더 간단할 것이다.
이하 개시되는 테이블 1-14 는 태스크 및 탬플릿 영역의 생성과 동작에 연관되어 사용되는 커널 호출을 서술한다. 커널 호출은 탬플릿 영역의 생성 및 동작과 연관되어 사용되며, 객체 지향 사용자 프로그램에서 지정될 수 있다. 객체 지향 프로그램은 두 주요한 부분 즉, 객체 정의 부분 및 인스트럭션 스트림 부분으로 나누어진다. 사용자 프로그램의 객체 정의 부분은 객체 정의 테이블을 포함하여 인스트럭션 스트림에서 인스트럭션과 연관된 프로그램 객체를 정의할 수 있다. 사용자는 마이크로커널 어드레스 공간에서 탬플릿 영역을 사용하기 위해 커널 호출을 사용할 것이며, 메모리(102)에서 태스크를 발생하여 프로그램에 대한 사용자 의도 목적을 수행할 것이다. 사용자는 그의 프로그램에 테이블 1-14 에서 서술된 커널 호출을 포함하여 탬플릿 영역과 이들이 정의하는 태스크를 생성하고 조작할 것이다. 테이블 1-5 에서 도시한 커널 호출은 태스크가 탬플릿 영역 개념을 활용하는 것을 허용한다. 이들 커널 호출은 마이크로커널(120), 퍼스낼리티 뉴트럴 서비스 모듈 혹은 지배적인 혹은 대체적인 퍼스낼리티 서버(150) 혹은 응용 프로그램(180)에 의해 발생될 수 있다. 탬플릿 영역의 조작에 대한 하이 레벨 작용은 테이블 1-14 에 서술된 기본 요소의 동작의 결합에 의해 생성될 수 있다. 테이블 1-14 에서 서술된 태스크 동작 및 탬플릿 영역 동작은 아래와 같다.
테이블 1) : 태스크_생성(task_create): 태스크의 생성 및 명명
테이블 2) : 태스크_설정_기본_영역(task_set_base_region): 테스크의 베이스 영역 설정
테이블 3) : 태스크_획득_기본_영역(task_get_base_region): 태스크의 베이스 영역 획득
테이블 4) : 태스크_설정_사용자_영역(task_set_user_region): 태스크의 사용자 영역 설정
테이블 5) : 태스크_획득_사용자_영역(task_get_user_region): 태스크의 사용자 영역 획득
테이블 6) : 영역_생성_중첩가능(region_create_nestable): 다른 탬플릿 영역이 포함할 수 있는 탬플릿 영역 설정
테이블 7) : 영역_생성_중첩가능(region_create_nestable): 메모리 객체를 참조하는 탬플릿 영역 생성
테이블 8) : 영역_맵_into(region_map_into): 더 작은 탬플릿 영역을 더 큰 탬플릿 영역으로 매핑
테이블 9) : 영역_설정_속성(region_set_attribute): 탬플릿 영역의 속성 설정
테이블 10) : 영역_획득_속성(region_get_attribute): 탬플릿 영역의 속성 획득
테이블 11) : 영역_객체_부착(region_object_attach): 메모리 객체를 리프 노드 탬플릿 영역에 부착
테이블 12) : 영역_복제(region_copy): 하나의 탬플릿 영역을 다른 탬플릿 영역으로 복제
테이블 13) : 영역_획득_물리적_어드레스(region_get_phys_addrs): 탬플릿 영역을 중첩하는 물리적 페이지의 리스트 획득
테이블 14) : 영역_속성_t : 상이한 영역 속성을 정의
테이블 1-14 를 참조하면 본 발명에 따르는 태스크 동작 및 탬플릿 영역 동작을 수행하는 데 필요한 커널 호출의 예에 대한 더욱 상세한 서술이 제공될 것이다.
[테이블 1.]
[태스크_생성(task_create)]
작용(Function)-테스크 생성 및 명명
[개요(synopis)]
커널_복귀_t(kern_return_t)
태스크_생성(태스크_t 부모_태스크, 영역_t 사용자_영역, 영역_t 사용자_영역, vm_offset_t 사용자_시작_오프셋, 불린_t 복제_기본, 태스크_t 자식_태스크);
[서술(DESCRIPTION)]
이 테이블은 영역의 개념이 소개될 때 현재 작용 태스크_생성이 변화할 수 있는 방법의 예를 도시한다. 태스크_생성 작용은 부모_태스크(parent_task)로부터 새로운 태스크를 생성하며, 새로운 태스크를 자식_태스크(child_task)의 이름으로 복귀시킨다. 자식_태스크의 어드레스 공간은 부모_태스크 및 제공된 사용자_영역의 베이스 영역에 기초하여 설립된다. 자식 태스크의 사용자_영역은 오프셋 즉, 사용자_시작_오프셋에서 자신의 베이스 영역으로 매핑된다. 자식 태스크는 초기에는 스레드를 포함하지 않는다. 자식 태스크는 부모 태스크의 토큰을 계승한다. 자식 태스크는 태스크 생성시에 생성되거나 복제되는 이하 개시되는 특별한 포트를 수신한다.
[태스크-셀프 포트(task-self port)] 이 포트에 의해서 커널은 새로운 자식 태스크를 인식하고 이 태스크가 조작되도록 허용한다. 자식 태스크는 이 포트에 대한 전송 권리를 유지한다. 포트 명칭은 또한 후출 태스크상으로 복귀된다. [부트스트랩 포트(bootstrap port)] 자식이 필요로 하는 임의의 시스템 서비스 포트의 복구를 요구하는 메시지를 전송할 수 있는 포트.
자식 태스크는 부모 태스크로부터 이 포트에 대한 전송 권리를 계승한다. 태스크는 태스크_설정_특별_포트를 사용하여 이 포트를 변경시킬 수 있다.
[호스트-셀프 포트(host-self port)] 이 포트에 의해 자식 태스크는 호스트에 대한 정보를 요구한다. 자식 태스크는 부모 태스크로부터 이 포트에 대한 전송 권리를 계승한다.
[베이스 영역 포트] 자식 태스크의 베이스 영역을 서술하는 포트. 이 포트에 의해 명명된 영역은 부모 태스크의 베이스 영역의 복제본 혹은 부모 태스크의 베이스 영역에 대한 참조본이다. 부모 영역의 복제본은 각각의 태스크에 대해 사설적인 기본 영역에 대한 임의의 변화를 포함한다. 즉, 상기 복제본은 부모의 베이스 영역과는 다른 영역이지만, 부모 태스크로서 (사용자 영역을 제외하고)동일한 크기, 속성 및 매핑된 영역을 갖는다. 자식 베이스 영역이 부모의 베이스 영역에 대한 참조본이라면, 베이스 영역에 대해 발생하는 임의의 변화는 양태스크에 대해 가시적이 될 것이다. 상기 임의의 변화는 또한 베이스 영역으로 매핑되는 태스크에 대한 사용자 영역에 대해서도 발생한다. 따라서, 사용자 영역은 상이한 시작 오프셋에서 존재해야 한다. 양 태스크에 대한 사용자 영역에서의 특별한 경우는 동일한 영역에 대해서이며, 이러한 경우 사용자 영역은 동일한 시작 영역에 존재할 수 있다. 이 포트는 태스크_획득_베이스_영역을 통해서 액세스 가능하다.
[사용자 영역 포트] 자식 태스크의 사용자 영역을 서술하는 포트. 이 포트에 의해 명명된 영역은 사용자_영역에 의해 서술된 영역이다. 자식 및 부모사이의 사용자 영역사이에 존재하는 유일한 관계는 호출자에 의해 결정된다. 이 포트는 태스크_획득_사용자_영역을 통해서 액세스가능하다.
[파라메터(PARAMETERS)]
부모_태스크(parent_task)
[태스크포트에서] 자식 태스크의 포트 권리를 인출하는 태스크 및 베이스 영역에 대한 포트.
사용자_영역(user_region)
[영역 포트에서] 태스크의 사용자 어드레스 공간을 서술하는데 사용될 영역에 대한 포트
사용자_시작_오프셋(user_starting_offset)
[vm 오프셋에서] 사용자 영역이 태스크의 베이스 영역으로 위치되는 오프셋.
복제_기본(copy_base)
[불린(boolean)에서] 자식 태스크에 대한 베이스 영역이 부모 베이스 영역에 대한 복제본인지 혹은 부모 기본 영역에 대한 부가적인 참조본인지 나타내는 영역.
자식_태스크(child_task)
[태스크 포트에 대한 포인터 외부에서] 새로운 태스크에 대한 커널 할당 포트 명칭
[복귀 값(RETURN VALUE)]
[테이블 2]
태스크_세트_기본_영역(task_set_base_region)
작용-태스크의 베이스 영역을 설정
개요(synopis)
커널_복귀_t(kern_return_t)
태스크_설정-베이스_영역(태스크_t 태스크, mach_포트_t 호스트_priv_포트, 영역_t 영역);
[서술(DESCRIPTION)]
태스크_설정_영역 작용은 자신의 어드레스 공간 서술로 고려되는 태스크 영역을 설정한다. 태스크가 임의의 방법으로 자신의 비사용자 영역을 조작한다면 상기 영역에 대한 액세스가 요구된다. 이 액세스는 태스크가 자신의 베이스 영역상에서 인식할 수 있는 것의 내용을 각 태스크 기반상에서 수행하는 데 사용된다.
태스크의 베이스 영역은 일반적으로 수퍼바이저 속성을 갖는 영역을 포함하므로, 태스크 베이스 영역의 조작은 시스템 동작 및 보안상에서 암시(implication)를 가질 수 있다. 왜냐하면, 커널이 태스크의 베이스 영역으로 매핑된 영역에 포함되기 때문이며, 이는 호스트 특권 포트에 대한 액세스를 요구하는 특권 작용이다.
[파라메터(PARAMETERS)]
태스크(task)
[태스크 포트에서] 태스크의 베이스 영역이 요구되는 상기 태스크에 대한 포트.
호스트_priv_포트
[호스트 특권 포트에서] 호스트 특권 포트에 대한 포트.
영역(region)
[영역 포트에서] 태스크의 전체 어드레스 공간을 나타내는 영역을 위한 포트.
[복귀 값(RETURN VALUE)]
[테이블 3]
태스크_획득_기본_영역(task_get_base_region)
작용-태스크의 베이스 영역 획득
개요(synopis)
커널_복귀_t(kern_return_t)
태스크_획득_기본_영역(태스크_t 태스크, mach_포트_t 호스트_priv_포트, 영역_t *영역);
[서술(DESCRIPTION)]
태스크_획득_영역 작용은 자신의 어드레스 공간 서술로 고려되는 태스크 영역을 설정한다. 태스크가 임의의 방법으로 자신의 비사용자 영역을 조작한다면 상기 영역에 대한 액세스가 요구된다. 이 액세스는 태스크가 자신의 베이스 영역상에서 인식할 수 있는 것의 내용을 각 태스크 기반상에서 수행하는 데 사용된다.
태스크의 베이스 영역은 일반적으로 수퍼바이저 속성을 갖는 영역을 포함하므로, 태스크 베이스 영역의 조작은 시스템 동작 및 보안상에서 암시(implication)를 가질 수 있다. 왜냐하면, 커널이 태스크의 베이스 영역으로 매핑된 영역에 포함되기 때문이며, 이는 호스트 특권 포트에 대한 액세스를 요구하는 특권 작용이다.
[파라메터(PARAMETERS)]
태스크
[태스크 포트에서] 태스크의 베이스 영역이 요구되는 상기 태스크에 대한 포트.
호스트_priv_포트
[호스트 특권 포트에서] 호스트 특권 포트에 대한 포트.
영역(region)
[영역 포트에 대한 포인터의 외부에서] 태스크의 전체 어드레스 공간을 나타내는 영역에 대한 포트.
[복귀 값(RETURN VALUE)]
[테이블 4]
태스크_설정_사용자_영역(task_set_user_region)
작용-태스크의 사용자 영역 설정
개요(synopis)
커널_복귀_t(kern_return_t)
태스크_설정_사용자_영역(태스크_t 태스크, 영역_t 영역)
[서술(DESCRIPTION)]
태스크_설정_사용자_영역 작용은 태스크의 조작이 허용되는 영역에서 태스크를 가리킨다. 상기 영역은 호출이 발생하기 전에 태스크의 베이스 영역으로 이미 매핑되어진다.
[파라메터(PARAMETERS)]
태스크
[태스크 포트에서] 태스크의 사용자 영역이 변화되는 상기 태스크에 대한 포트
[영역 포트에서] 태스크의 사용자 조작가능한 어드레스 공간을 나타내는 영역에 대한 포트
[복귀 값(RETURN VALUE)]
[테이블 5]
태스크_획득_사용자_영역(task_get_user_region)
작용-태스크의 사용자 영역 획득
개요(synopis)
커널_복귀_t(kern_return_t)
태스크_획득_사용자_영역(태스크_t 태스크, 영역_t*영역);
[서술(DESCRIPTION)]
태스크_획득_사용자_영역 작용은 태스크의 태스크 어드레스 공간의 사용자 조작가능한 영역을 서술하는 포트를 복귀시킨다. 태스크가 임의의 방법으로 자신의 어드레스 공간을 조작한다면 상기 영역에 대한 액세스가 요구된다.
[파라메터(PARAMETERS)]
태스크
[태스크 포트에서] 태스크의 사용자 영역이 요구되는 상기 태스크에 대한 포트 영역
[영역 포트에 대한 포인터의 외부에서] 태스크의 사용자 조작가능한 어드레스 공간을 나타내는 영역에 대한 포트
[복귀 값(RETURN VALUE)]
[테이블 6]
영역_생성_중첩가능(region_create_nestable)
작용-다른 영역을 포함할 수 있는 영역 생성
개요(synopis)
커널_복귀_t(kern_return_t)
영역_생성_중첩가능(mach_포트_t 부모_영역, vm_크기_t 영역_크기, mach_포트_t *자식_영역);
[서술(DESCRIPTION)]
새로운 영역은 부모 영역으로부터 생성된다. 부모 영역은 새로이 생성된 영역에 제한 조건을 부과하는 데 사용된다. 자신의 부모 영역보다 더 큰 자식 영역은 생성될 수 없다. 자식 영역은 또한 부모 영역의 속성을 계승한다. 일단 생성되면, 자식 영역은 다른 중첩가능한 영역으로 매핑될 수 있다. 상기 자식 영역은 초기에는 임의의 다른 영역으로 매핑되지 않는다. 새로이 생성된 영역은 다른 영역을 포함할 수 있는 영역이다. 메모리 객체는 중첩가능한 영역으로 직접적으로 매핑될 수는 없다.
[파라메터(PARAMETERS)]
부모_영역
[영역 포트에서] 새로운 영역으로부터 부모 영역에 대한 참조가 생성될 것이다. 새로운 영역은 허용 혹은 크기의 견지에서 부모에 의해 서술된 것을 초과할 수는 없다.
영역_크기
[vm 크기에서] 새로운 영역이 가지는 크기.
자식_영역
[영역 포트에 대한 포인터의 외부에서] 새로이 생성된 영역의 명칭.
[복귀 값(RETURN VALUE)]
비_영역(NOT_A_REGION)
부모_영역은 시스템에 알려진 영역이 아니다.
불량_크기(BAD_SIZE)
새로운 영역에 대해 지정된 영역_크기는 부모_영역의 크기보다 더 크다.
[테이블 7]
영역_생성_리프 노드(region_create_leaf)
작용-메모리 객체를 참조하는 영역 생성
개요(synopis)
커널_복귀_t(kern_return_t)
영역_생성_리프 노드(mach_포트_t 부모_영역, vm_크기_t 영역_크기, mach_포트_t *새로운_영역);
[서술(DESCRIPTION)]
새로운 영역은 부모 영역으로부터 생성된다. 부모 영역은 새로이 생성된 영역에 제한 조건을 부과하는 데 사용된다. 자신의 부모 영역보다 더 큰 자식 영역은 생성될 수 없다. 자식 영역은 또한 부모 영역의 속성을 계승한다. 일단 생성되면, 자식 영역은 다른 중첩가능한 영역으로 매핑될 수 있다. 상기 자식 영역은 초기에는 임의의 다른 영여긍로 매핑되지 않는다. 새로이 생성된 영역은 메모리 객체 혹은 메모리 객체의 일부분은 중첩가능한 영역으로 매핑하는데 사용될 것이다. 리프 노드 영역은 메모리 객체의 일부분을 서술하는 데 사용된다. 이 영역은 단지 하나의 메모리 객체만을 서술할 것이며, 다른 영역을 포함할 수는 없다.
[파라메터(PARAMETERS)]
부모_영역
[영역 포트에서] 새로운 영역으로부터 부모 영역에 대한 참조가 생성될 것이다. 새로운 영역은 허용 혹은 크기의 견지에서 부모에 의해 서술된 것을 초과할 수는 없다.
영역_크기
[vm 크기에서] 새로운 영역이 가지는 크기.
자식_영역
[영역 포트에 대한 포인터의 외부에서] 새로이 생성된 영역의 명칭.
[복귀 값(RETURN VALUE)]
비_영역(NOT_A_REGION)
부모_영역은 시스템에 알려진 영역이 아니다.
불량_크기(BAD_SIZE)
새로운 영역에 대해 지정된 영역_크기는 부모_영역의 크기보다 더 크다.
[테이블 8]
영역_맵_into(region_map_into)
작용-더 작은 영역을 더 큰 영역으로 매핑
개요(synopis)
커널_복귀_t(kern_return_t)
영역_맵_into(mach_포트_t into_영역, vm_오프셋_t *into_영역_오프셋, mach_포트_t from_영역, 영역_배치_t 배치);
[서술(DESCRIPTION)]
영역_맵_into 의 작용은 작은 영역을 취하여 이 영역을 더 큰 영역의 일부분으로 매핑한다. into_영역_오프셋이 from_영역이 into_영역으로 해석되는 방법을 나타내는 배치(placement)에 의해 지정된 다양한 옵션이 존재한다.
[파라메터(PARAMETERS)]
into_영역
[영역 포트에서] 더 작은 영역이 매핑되는 더 큰 영역을 지정한다.
into_영역_오프셋
[vm 오프셋에 대한 포인터에서/외부에서] 입력시 into_영역으로 매핑되는 from_영역의 위치에 대한 검사를 시작하는 장소로부터 시작 오프셋을 지정한다. 출력시 from_영역이 매핑되는 into_영역에서의 오프셋을 포함한다.
from_영역
[영역 포트에서] 큰 영역으로 매핑되는 작은 영역을 지정한다.
배치(placement)
[영역 배치에서] into_영역에서 from_영역의 위치가 선택되는 방법을 지정한다.
[복귀 값(RETURN VALUE)]
비_영역(NOT_A_REGION)
from_영역 혹은 into_영역은 시스템에 알려진 영역이 아니다. into_영역이 리프 노드 영역이면 이 에러가 또한 발생한다.
불량_크기(BAD_SIZE)
into_영역_오프셋은 into_영역의 크기보다 더 크다.
from_영역 + into_영역_오프셋이 into_영역의 크기보다 클 때 이 에러가 발생한다.
[테이블 9]
영역_설정_속성(region_set_attributes)
작용-영역의 속성 설정
개요(synopis)
커널_복귀_t(kern_return_t)
영역_설정_속성(mach_포트_t 영역, 영역_속성_t 속성, 영역_속성_마스크_t 속성_마스크);
[서술(DESCRIPTION)]
영역_설정_속성 작용은 영역의 절대 속성을 정의한다. 영역의 효과적인 속성은 영역이 매핑되는 영역(들)에 의해 결정된다. 영역은 하나 혹은 그 이상의 영역으로 매핑될 수 있으므로, 하나 혹은 그 이상의 효과적인 속성 세트를 가질 수 있다. 이 작용은 임의의 특권 속성을 설정할 수 없다.
[파라메터(PARAMETERS)]
영역
[영역 포트에서] 영역의 속성이 설정되는 영역
속성
[영역 속성에서] 영역에 할당되는 속성
속성_마스크
[영역 속성 마스크에서] 속성이 변화되는 것을 나타냄
[복귀 값(RETURN VALUE)]
비_영역(NOT_A_REGION)
이 영역은 시스템에 알려진 영역이 아니다.
불량_크기(BAD_SIZE)
지정된 속성의 하나 혹은 그 이상이 설정될 수는 없다. 이러한 현상은 특권 속성이 이 작용과 함께 설정을 시도할 때 발생한다.
[테이블 10]
영역_획득_속성(region_get_attributes)
작용-영역의 속성 획득
개요(synopis)
커널_복귀_t(kern_return_t)
영역_획득_속성(mach_포트_t 영역, 영역_속성_t *속성);
[서술(DESCRIPTION)]
영역_획득_속성은 지정된 영역의 속성을 복귀시킬 것이다. 이 작용은 또한 영역을 위해 설정된 속성을 복귀시킬 것이다. 영역은 이 영역을 위해 설정된 속성에 기초한 효과적인 속성을 갖는다. 영역은 하나 이상의 영역에 포함될 수 있기 때문에, 효과적인 하나 이상의 속성 세트를 가질 수 있다.
[파라메터(PARAMETERS)]
영역
[영역 포트에서] 자신의 영역이 복귀되는 영역
속성
[영역 속성에 대한 포인터의 외부에서] 지정된 영역 속성
[복귀 값(RETURN VALUE)]
비_영역(NOT_A_REGION)
이 영역은 시스템에 알려진 영역이 아니다.
[테이블 11]
영역_객체_부착(region_object_attach)
작용-리프 노드에 메모리 객체 부착
개요(synopis)
커널_복귀_t(kern_return_t)
영역_객체_부착(mach_포트_t 영역, mach_포트-t 영역_객체, vm_오프셋_t 메모리_객체_오프셋);
[서술(DESCRIPTION)]
영역_객체_부착 작용은 영역으로 지시된 오프셋에서 시작하는 메모리 객체와 관련한다. 이 작용은 영역 및 실제적인 저장 장치사이에 최종적으로 연결을 설정한다. 상기 저장 장치는 메모리 객체의 내용에 의해 나타난다.
(영역_객체_부착해제가 수행되더라도) 일단 한 영역이 부착되면 이 영역은 다시 부착될 수 없다는 일부 논쟁이 존재한다. 이들 논쟁의 한 주장은 상기 동작은 메모리 객체에 대한 액세스를 제한할 것이고, 메모리 객체의 어떠한 부분의 임의 태스크 매핑을 허용하지 않을 것이라는 것이다. 또 다른 주장은 일반적으로 영역으로부터 메모리 객체를 획득할 수 있는 방법이 존재하지 않으므로, 부착(원래의 부착을 포함한)은 단지 여하튼 모든 메모리 객체를 액세스하는 태스크에 의해 행해질 수 있다는 것이다. 한 영역이 수차례에 걸쳐 부착되고 부착해제되는 것을 허용함으로써, 영역은 메모리 객체에 대한 제어 윈도우로서 동작한다. 이 윈도우는 메모리 객체에 대해 인식하는 신뢰 에이전트에 의해 이동될 수 있다. 비 신뢰 엔티티는 단지 리프 노드 영역에 대한 액세스만 수행할 것이다.
[파라메터(PARAMETERS)]
영역
[영역 포트에서] 메모리 객체가 부착될 리프 노드 영역 메모리_객체
[메모리 객체 포트에서] 제공된 리프 노드 영역에 부착될 메모리 객체 메모리_객체_오프셋
[vm 오프셋에서] 제공된 리프 노드 영역에서 매핑될 메모리 객체내에서의 시작 오프셋
[복귀 값(RETURN VALUE)]
비_영역(NOT_A_REGION)
이 영역은 시스템에 알려져 있지 않다. 이 에러는 또한 영역이 단말 노드 영역이 아닐 경우 발생할 것이다.
불량_크기(BAD_SIZE)
메모리_객체_오프셋은 메모리_객체의 크기보다 크다. 이 에러는 또한 영역의 크기 + 메모리_객체_오프셋이 메모리_객체의 크기보다 클때 발생한다.
[테이블 12]
영역_복제(region_copy)
작용-한 영역의 내용을 다른 영역으로 복제
개요(synopis)
커널_복귀_t(kern_return_t)
영역_복제(mach_포트_t from_영역, vm_오프셋_t from_영역_오프셋, mach_포트_t to_영역, vm_오프셋_t to_영역_오프셋, vm_크기_t 복제_양);
[서술(DESCRIPTION)]
영역_복제 작용은 from_영역으로부터 to_영역으로 정보를 복제할 것이다. 복제의 규칙은 from_영역 및 to_영역 모두 복제 영역에 대해 이들을 지원하는 메모리 객체를 가져야 한다는 것이다. 복제 영역을 지원하는 메모리 객체가 단일 메모리 객체일 필요는 없다. 단지 지원되지 않은 홀 만이 존재하지 않으면 된다. 복제는 이러한 방법으로 수행되어 영역_복제가 복귀될 때 모든 데이타는 to_영역으로 복제되어야 한다. from_영역 혹은 to_영역이 복제를 수행하기를 요구하는 태스크로 매핑될 필요는 없다.
[파라메터(PARAMETERS)]
frm_영역
[영역 포트에서] 자신으로부터 데이타가 복제되는 영역
from_영역_오프셋
[vm 오프셋에서] 복제가 시작되는 from_영역에서 오프셋 시작
to_영역
[영역 포트에서]데이타가 복제될 영역
to_영역_오프셋
[vm 오프셋에서] 제1데이타가 위치되는 to_영역에서 오프셋 시작
복제_양(copy_amount)
[vm 크기에서] from_영역에서 복제되어 한 영역으로 위치되는 바이트의 수
[복귀 값(RETURN VALUE)]
비_영역(NOT_A_REGION)
from_영역 혹은 to_영역은 시스템에 알려진 영역이 아니다.
불량_오프셋
from_영역_오프셋은 from_영역의 크기보다 크다. to_영역_오프셋은 to_영역의 크기보다 크다. from_영역_오프셋 + 복제_양은 from_영역의 크기보다 크다. to_영역_오프셋 + 복제_양은 to_영역의 크기보다 크다.
비_데이타(NO_DATA)
from_영역 혹은 to_영역의 일부분이 비 데이타(즉 근원적인 메모리 객체가 존재하지 않음)의 복제에 의해 커버될 때 이 에러는 복귀될 것이다.
[테이블 13]
영역_획득_물리적_어드레스(region_get_phys_addrs)
작용-영역을 구성하는 물리적 페이지의 리스트 획득
개요(synopis)
커널_복귀_t(kern_return_t)
영역_획득_물리적_어드레스(mach_포트_t 영역, 물리적_어드레스_t *물리적_어드레스_리스트, int *물리적_어드레스_리스트);
[서술(DESCRIPTION)]
영역_획득_물리적 어드레스 작용은 영역에 포함된 모든 페이지의 물리적 페이지 어드레스의 어레이를 복귀시킬 것이다. 의미있는 정보를 복귀시키기위한 영역_획득_물리적_어드레스의 작용을 위해서 영역은 영역_와이어_이동(REGION_WIRE_TRAMSLATION)이 사실인(즉 영역이 와이어되고 영역의 물리적 어드레스가 고정된) 이러한 방법으로 효과적인 속성 영역을 가져야 한다. 필요에 따라 물리적 어드레스를 성취하기 위해 영역_획득_물리적_어드레스는 영역에 포함된 모든 영역을 순환적으로 검사해야 할 것이라는 것을 유의해야 한다.
[파라메터(PARAMETERS)]
영역
[영역포트에서] 자신의 물리적 페이지 어드레스가 복귀되는 영역
물리적_어드레스_리스트
[물리적 어드레스의 동적인 어레이에 대한 포인터의 외부에서] 지시된 영역을 나타내는 물리적 페이지 리스트
물리적_어드레스_리스트_카운트
[스칼라에 대한 포인터에서/외부에서] 지정된 영역에 포함된 물리적 페이지의 수
[복귀 값(RETURN VALUE)]
비_영역(NOT_A_REGION)
이 영역은 시스템에 알려진 영역이 아니다.
비_고정(NOT_FIXED)
영역이 와이어되지 않으므로 페이지는 고정된 물리적 어드레스이고, 따라서 물리적 어드레스의 복귀는 포인트가 없게 된다.
[테이블 14]
영역_속성_t(region_attr_t)
구조-상이한 영역 속성 정의
개요(synopis)
구조 영역_속성
유형정의(typedef) 구조 영역_속성 영역_속성_t
[서술(DESCRIPTION)]
영역_속성_t 구조는 영역_획득_속성, 영역_설정_속성 및 영역_설정_특권_속성 작용에 의해 영역에 대해 설정되고 검색될 수 있는 모든 속성을 포함한다. 영역_속성_t 의 각 필드는 개개의 속성을 나타낸다. 각 속성은 아래에 개시되며, 각 속성이 특권적이고 계승 규칙이 존재한다면 속성이 의미하는 것에 대한 서술을 가질 것이다.
[항목(fields)]
[액세스(access)]
이 속성은 영역에 대해 허용된 액세스 허용을 나타낸다.
이 속성은 비특권 속성이다. 이 속성의 유효값은 둘러싸인 영역으로 전파된다. 이 속성의 유효값은 둘러싸인 영역으로부터 이 속성의 유효값을 취하고 영역의 속성에 포함된 논리 및 작용을 수행하여 결정될 수 있다.
[캐시_속성(cache_attr)]
이 속성은 영역의 캐시 속성을 나타낸다. 캐시 속성은 하드웨어 캐싱 특성을 나타낸다. 이것은 특권 속성이며, I/O 와이어 특권을 요구한다. 이 속성의 유효값은 내부 영역으로 전파된다. 이 속성에 대한 유효값은 세트의 특정 세트에 대한 최소 캐시능력에 의해 결정된다. 즉 유효값은 메모리 객체의 동일한 영역을 매핑하는 모든 영역에 의해 결정된다.
[무시가능(discardable)]
이 속성은 영역이 무시가능하다는 것을 나타낸다. 이로 인해 영역_무시 작용은 이 영역에 대해 발생할 수 있다. 이 속성은 비특권 속성이다. 이 속성의 유효값은 둘러싸인 영역으로 전파된다. 이 속성의 유효값은 둘러싸인 영역으로부터 이 속성의 유효값을 취하고 포함된 영역의 속성으로 논리 및 작용을 수행함으로써 결정된다. 예를 들면, 둘러싸인 영역이 무시가능하다고 둘러싸인 영역이 존재하지 않는다며 영역_무시는 둘러싸인 영역으로 발생하지 않는다.
[보조_열망(eager_backing)]
이 속성은 메모리 객체가 리프 노드 영역에 부착되었을 때 할당되는 보조 저장 장치를 나타낸다. 이는 비특권 속성이다. 이 속성의 유효값은 내부 영역으로 전파된다. 즉, 보조_열망에 대해 둘러싸인 영역이 설정된다면, 이 영역에 포함된 모든 영역은 보조_열망_세트를 가진 것처럼 처리될 것이다.
[페이징_힌트(paging_hint)]
이 속성은 지시된 영역에 대한 커널 페이징 조언을 제공한다. 이 속성은 비특권 속성이다. 이 속성의 유효값은 속성이 설정될 때 내부 영역으로 전파된다.
[특권(priviliged)]
이 속성은 이 영역에 대한 요구를 만족시키기 위해 저장된 페이지 풀로부터 할당될 수 있는 메모리를 나타낸다. 이 속성은 특권 속성이며, 호스트 제어 포트를 요구한다. 이 속성의 유효값은 속성 세트로서 둘러싸인 영역에 의해 포함된 내부 영역으로 전파된다.
[물리적_인접(physically_contiguous)]
이 속성은 물리적으로 인접해야하는 영역에 의해 포함된 메모리를 나타낸다. 이 속성은 특권 속성으로 I/O 와이어 제어 포트를 요구한다. 이 속성의 유효값은 이 속성 세트로서 둘러싸인 영역에 의해 포함된 내부 영역으로 전파된다.
[수퍼바이저(supervisor)]
이 속성은 설정되면 수퍼바이저 영역이고 설정되지 않으면 사용자 영역인 영역을 나타낸다. 이 속성은 특권 속성으로 호스트 특권 포트를 요구한다. 이 속성은 둘러싸인 영역으로부터 내부 영역으로 전파한다.
[vm_동작(vm_behaviotr)]
이 속성은 지시된 영역에 대한 기대되는 액서스 패턴의 힌트를 커널에게 제공한다. 이 속성은 비특권 속성이다. 이 속성의 유효값은 속성이 설정될 때 내부 영역으로 전파된다.
[와이어_속성(wire_attr)]
이 속성은 영역의 페이지가능성을 나타낸다. 이 속성은 I/O 와이어 제어 포트를 요구하는 특권 속성이다. 이 속성의 유효값은 둘러싸인 영역에 의해 포함된 내부 영역으로 전파된다.
[계승(inheritance)]
이 속성은 영역에 대한 계승을 나타낸다. 이 속성은 기본 요소 영역 동작(primitive region operations)에 의해 사용되는 것이 아니라 영역 작용의 상단에 생성된 고 레벨 작용에 사용될 수도 있는 정보를 제공할 수 있다.
이상 본 발명이 바람직한 실시예에 따라 구체적으로 설명되었지만, 본 발명은 상기 실시예에 한정되는 것은 아니며, 그 사상 및 범주를 이탈하지 않는 범위내에서 여러 가지로 변경 가능함은 물론이다.

Claims (48)

  1. 마이크로커널 구조 데이타 프로세싱 시스템(a microkernel architecture data processing system)의 메모리 관리 방법에 있어서, 데이타 프로세싱 시스템의 메모리에 마이크로커널을 로딩(loading)하여 상기 메모리에 태스크 컨테이너(task containers)를 생성하는 단계와; 상기 메모리내에 특별 객체(a special object)로서 탬플릿 영역(a template region)을 상기 마이크로커널에 의해 형성하는 단계로서, 상기 탬플릿 영역은 가상 어드레스 공간(a virtual address space)을 정의하는 속성 세트(a set of attributes)를 가지며, 또한 메모리 객체(a memory object)에 대한 탬플릿 포인터(a template pointer)를 가지는 상기 탬플릿 영역 형성 단계와; 상기 속성 세트 및 상기 탬플릿 영역에 대한 태스크 포인터를 가지는 태스크 컨테이너(a task container)를 상기 탬플릿 영역을 상기 태스크 컨테이너로 매핑함으로써, 상기 메모리내에서 상기 마이크로커널에 의해 형성하는 단계로서, 상기 탬플릿 포인터 및 상기 태스크 포인터는 상기 태스크 컨테이너 및 상기 메모리 객체 사이에서 제1관계(a first relationship)를 설정하는 상기 태스크 컨테이너 형성 단계와; 상기 탬플릿 영역상에 가상 메모리 동작을 설정하여 상기 메모리 객체에 대한 상기 탬플릿 포인터를 변경하므로써, 이로 인해 상기 태스크 컨테이너 및 상기 메모리 객체 사이에 제2관계(a second relationship)를 설정하는 단계를 포함하는 메모리 관리 방법.
  2. 제1항에 있어서, 상기 메모리 객체는 상기 메모리내의 가상 어드레스(virtual addresses)를 물리적 어드레스(physical addresses)로의 맵(map)이며, 제1메모리 객체에 대한 제1어드레스 번역(a first address translation) 및 제2메모리 객체에 대한 제2어드레스 번역(a second address translation)을 포함하고, 상기 방법은; 상기 탬플릿 포인터가 상기 메모리 동작에 앞서서 상기 제1어드레스 번역을 가리키고, 상기 태스크 컨테이너 및 상기 제1메모리 객체 사이에서 상기 제1관계를 설정하는 단계와; 상기 탬플릿 포인터가 상기 메모리 동작이후에 상기 제2어드레스 번역을 가리키고, 상기 태스크 컨테이너 및 상기 제2메모리 객체 사이에서 상기 제2관계를 설정하는 단계를 더 포함하는 메모리 관리 방법.
  3. 제1항에 있어서, 상기 메모리 객체는 제2탬플릿 영역(a second template region)이며, 상기 방법은; 상기 탬플릿 포인터가 상기 메모리 동작에 앞서서 상기 제2탬플릿을 가리키고, 상기 태스크 컨테이너 및 상기 제2탬플릿 사이에서 상기 제1관계를 설정하는 단계와; 상기 탬플릿 포인터가 상기 메모리 동작이후에 제3탬플릿 영역(a third template region)을 가리키고, 상기 제2관계를 설정하는 단계를 더 포함하는 메모리 관리방법.
  4. 제1항에 있어서, 상기 메모리내에 태스크 컨테이너를 형성하는 상기 단계는, 통신 채널(a communication channel)로서 사용하기 위해, 상기 태스크 컨테이너의 포트 명칭 공간(a port name space)을 상기 메모리내에 상기 마이크로커널에 의해 형성하는 단계와; 상기 탬플릿 영역의 상기 속성 세트를 사용하여, 상기 태스크 컨테이너의 상기 포트 명칭 공간에 대한 액세스 권리(access rights)를 상기 마이크로커널에 의해 정의하는 단계를 더 포함하는 메모리 관리방법.
  5. 제1항에 있어서, 상기 메모리내에 태스크 컨테이너를 형성하는 상기 단계는; 상기 태스크 컨테이너의 상기 어드레스 공간으로 부터 인스트럭션(instruction)을 인출(fetching)하기 위해, 상기 마이크로커널로서 상기 태스크 컨테이너의 스레드 객체(a thread object)를 상기 메모리내에 상기 마이크로커널에 의해 형성하는 단계를 더 포함하는 메모리 관리 방법.
  6. 제1항에 있어서, 상기 탬플릿 영역은 베이스 영역(a base region) 및 사용자 영역(a user region)을 포함하고, 상기 메모리내에 탬플릿 영역을 형성하는 상기 단계는: 상기 메모리내에 특별 객체로서 탬플릿 베이스 영역을 상기 마이크로커널에 의해 형성하되, 상기 탬플릿 영역은 기본 속성 세트(a set of base attributes)를 갖는 상기 탬플릿 베이스 영역 형성 단계와; 상기 메모리내에 특별 객체로서 탬플릿 사용자 영역(a template user region)을 상기 마이크로커널에 의해 형성하되, 상기 탬플릿 사용자 영역은 사용자 속성 세트(a set of user attributes)를 갖는 상기 탬플릿 사용자 영역 형성 단계를 더 포함하고, 상기 메모리내에 태스크 컨테이너를 형성하는 상기 단계는: 기본 가상 어드레스 공간(a base virtual address space) 및 상기 기본 속성 세트와 상기 탬플릿 베이스 영역에 대한 태스크 기본 포인터(a task base pointer)를 갖는 태스크 기본 컨테이너를, 상기 탬플릿 베이스 영역을 상기 태스크 기본 컨테이너로 매핑함으로써, 상기 메모리내에서 상기 마이크로커널에 의해 형성하는 단계와; 사용자 가상 어드레스 공간(a user virtual address space) 및 상기 사용자 속성 세트와 상기 탬플릿 사용자 영역에 대한 태스크 사용자 포인터를 갖는 상기 태스크 사용자 컨테이너를 상기 탬플릿 사용자 영역을 상기 태스크 사용자 컨테이너로 매핑함으로써, 상기 메모리내에서 상기 마이크로커널에 의해 형성하는 단계와; 상기 탬플릿 베이스 영역상에서 가상 메모리 동작(virtual memory operations)을 수행하되, 상기 가상 메모리 동작은 상기 태스크 기본 포인터에 의해 상기 태스크 기본 컨테이너에서 효과를 갖는 상기 가상 메모리 동작 수행 단계를 더 포함하는 메모리 관리 방법.
  7. 제6항에 있어서, 상기 탬플릿 사용자 영역상에서 가상 메모리 동작을 수행하되 상기 가상 메모리 동작은 상기 태스크 사용자 포인터에 의해 상기 태스크 사용자 컨테이너에서 효과를 갖는 단계를 더 포함하는 메모리 관리 방법.
  8. 제6항에 있어서, 상기 메모리내에 태스크 기본 컨테이너를 형성하는 상기 단계는, 통신 채널로서 사용하기 위해, 상기 태스크 기본 컨테이너의 포트 명칭 공간을 상기 메모리내에서 상기 마이크로커널에 의해 형성하는 단계와; 상기 탬플릿 베이스 영역의 상기 기본 속성 세트를 사용하여, 상기 태스크 기본 컨테이너의 상기 포트 명칭 공간에 대한 액세스 권리를 상기 마이크로커널에 의해 정의하는 단계를 더 포함하는 메모리 관리 방법.
  9. 제6항에 있어서, 상기 메모리내에 태스크 기본 컨테이너를 형성하는 상기 단계는, 상기 태스크 기본 컨테이너의 상기 어드레스 공간으로 부터 인스트럭션을 인출하기 위해, 상기 태스크 기본 컨테이너의 스레드 객체를 상기 메모리내에 상기 마이크로커널에 의해 스레드 객체를 형성하는 단계를 더 포함하는 메모리 관리 방법.
  10. 마이크로커널 구조 데이타 프로세싱 시스템의 메모리 관리 방법에 있어서, 데이타 프로세싱 시스템의 메모리로 마이크로커널을 로딩하여 상기 메모리내에 태스크 컨테이너를 생성하는 단계와, 상기 메모리내에 특별 객체로서 탬플릿 베이스 영역을 상기 마이크로커널에 의해 형성하되, 상기 탬플릿 베이스 영역은 제1크기 및 제1속성 세트를 갖는 상기 탬플릿 베이스 영역 형성 단계와; 상기 제1크기 및 상기 제1속성 세트를 갖는 태스크 기본 컨테이너를 상기 탬플릿 베이스 영역을 상기 태스크 기본 컨테이너로 매핑함으로써, 상기 메모리내에서 상기 마이크로커널에 의해 형성하는 단계와; 상기 메모리내에 특별 객체로서 탬플릿 사용자 영역을 상기 마이크로커널에 의해 형성하되, 상기 탬플릿 사용자 영역은 제2크기 및 제2속성 세트를 갖는 상기 탬플릿 사용자 영역 형성 단계와; 상기 제2크기 및 상기 제2속성 세트를 갖는 태스크 사용자 컨테이너를 상기 태스크 기본 컨테이너내의 한 위치(a location)에서 상기 탬플릿 사용자 영역을 상기 태스크 사용자 컨테이너로 매핑함으로써, 상기 메모리내의 상기 태스크 기본 컨테이너내에서 상기 마이크로커널에 의해 형성하는 단계와; 상기 탬플릿 베이스 영역상에서 가상 메모리 동작을 수행하되, 상기 가상 메모리 동작은 상기 매핑에 의해 상기 태스크 기본 컨테이너에서 효과를 갖는 단계를 포함하는 메모리 관리 방법.
  11. 마이크로커널 구조 데이타 프로세싱 시스템(a microkernel architecture processing system)에서, 상기 메모리내의 데이타 프로세싱 시스템 메모리내에서 태스크 컨테이너를 생성하는 상기 메모리내의 마이크로커널과; 상기 메모리내의 특별 객체인 탬플릿 영역으로서, 가상 어드레스 공간을 정의하는 속성 세트 및 메모리 객체에 대한 탬플릿 포인터를 갖는 상기 탬플릿 영역과; 상기 탬플릿 영역을 자신으로 매핑함으로써 형성되며, 상기 속성 세트 및 상기 탬플릿 영역에 대한 태스크 포인터를 갖는 상기 메모리내의 태스크 컨테이너이로되, 상기 탬플릿 포인터 및 상기 태스크 포인터는 상기 태스크 컨테이너 및 상기 메모리 객체 사이에서 제1관계를 설정하는 상기 태스크 컨테이너와; 상기 탬플릿 영역상에 가상 메모리 동작을 수행하여 상기 메모리 객체에 대한 상기 탬플릿 포인터를 변경하므로써 상기 태스크 컨테이너 및 상기 메모리 객체 사이에 제2관계를 설정하는 수단을 포함하는 마이크로커널 구조 데이타 프로세싱 시스템.
  12. 제11항에 있어서, 상기 메모리 객체는 상기 메모리에서 가상 어드레스의 물리적 어드레스로의 맵이며, 제1메모리 객체에 대한 제1어드레스 번역 및 제2메모리 객체에 대한 제2어드레스 번역을 포함하고; 상기 탬플릿 포인터는 상기 메모리 동작에 앞서서 상기 제1어드레스 번역을 가리키고, 상기 태스크 컨테이너 및 상기 제1메모리 객체 사이에 상기 제1관계를 설정하며; 상기 탬플릿 포인터는 상기 메모리 동작이후에 상기 제2어드레스 번역을 가리키고, 상기 태스크 컨테이너 및 상기 제2메모리 객체 사이에 상기 제2관계를 설정하는 마이크로커널 구조 데이타 프로세싱 시스템.
  13. 제11항에 있어서, 상기 메모리 객체는 제2탬플릿 영역이고, 상기 탬플릿 포인터는 상기 메모리 동작에 앞서서 상기 제2탬플릿을 가리키고, 상기 태스크 컨테이너 및 상기 제2탬플릿 사이에 상기 제1관계를 설정하며; 상기 탬플릿 포인터는 상기 메모리 동작이후에 제3탬플릿 영역을 가리키고, 상기 제2관계를 설정하는 마이크로커널 구조 데이타 프로세싱 시스템.
  14. 제11항에 있어서, 상기 메모리내의 상기 태스크 컨테이너는, 상기 태스크 컨테이너에 대한 상기 메모리내의 포트 명칭 공간으로서, 상기 탬플릿 영역의 상기 속성 세트를 사용하여 정의된 상기 태스크 컨테이너의 상기 포트 명칭 공간에 대한 액세스 권리를 갖는, 통신 채널로서 사용하기 위한 포트 명칭 공간을 더 포함하는 마이크로커널 구조 데이타 프로세싱 시스템.
  15. 제11항에 있어서, 상기 메모리내의 상기 태스크 컨테이너는, 상기 태스크 컨테이너의 상기 어드레스 공간으로 부터 인스트럭션을 인출하기 위해, 상기 태스크 컨테이너에 대한 상기 메모리내의 스레드 객체를 더 포함하는 마이크로커널 구조 데이타 시스템.
  16. 마이크로커널 구조 데이타 프로세싱 시스템에서 선택된 운영 체제 퍼스낼리티 프로그램(a selected operating system personality program)을 실행하는 방법에 있어서, 데이타 프로세싱 시스템의 메모리로 마이크로커널을 로딩하여 상기 메모리에서 태스크 컨테이너를 생성하는 단계와; 상기 선택된 운영 체제 퍼스낼리티 프로그램으로부터 상기 마이크로커널로 호출을 전송하여 상기 메모리내에 특별 객체로서 탬플릿 영역을 형성하는 단계로서, 상기 탬플릿 영역은 가상 어드레스 공간을 정의하는 속성 세트 및 메모리 객체에 대한 탬플릿 포인터를 갖는 상기 탬플릿 영역 형성 단계와; 상기 속성 세트 및 상기 탬플릿 영역에 대한 태스크 포인터를 갖는 태스크 컨테이너를 상기 탬플릿 영역을 상기 태스크 컨테이너로 매핑함으로써, 상기 메모리내에 상기 마이크로커널에 의해 형성하되, 상기 탬플릿 포인터 및 상기 태스크 포인터는 상기 태스크 컨테이너 및 상기 메모리 객체 사이에서 제1관계를 설정하는 상기 태스크 컨테이너 형성 단계와; 상기 탬플릿 영역상에서 가상 메모리 동작을 수행하여 상기 메모리 객체에 대한 상기 탬플릿 포인터를 변경하므로써, 상기 태스크 컨테이너 및 상기 메모리 객체 사이에 제2관계를 설정하는 단계를 포함하는 운영체제 퍼스낼리티 시스템 동작 방법.
  17. 제16항에 있어서, 상기 메모리 객체는 상기 메모리에서의 가상 어드레스의 물리적 어드레스로의 맵이며, 제1메모리 객체에 대한 제1어드레스 번역 및 제2메모리 객체에 대한 제2어드레스 번역을 포함하고, 상기 방법은; 상기 탬플릿 포인터가 상기 메모리 동작에 앞서서 상기 제1어드레스 번역을 가리키고, 상기 태스크 컨테이너 및 상기 제1메모리 객체 사이에서 상기 제1관계를 설정하는 단계와; 상기 탬플릿 포인터가 상기 메모리 동작이후에 상기 제2어드레스 번역을 가리키고, 상기 태스크 컨테이너 및 상기 제2메모리 객체 사이에서 상기 제2관계를 설정하는 단계를 더 포함하는 운영체제 퍼스낼리티 시스템 동작 방법.
  18. 제16항에 있어서, 상기 메모리 객체는 제2탬플릿 영역이고, 상기 방법은, 상기 탬플릿 포인터가 상기 메모리 동작에 앞서서 상기 제2탬플릿을 가리키고, 상기 태스크 컨테이너 및 상기 제2탬플릿 사이에서 상기 제1관계를 설정하는 단계와; 상기 탬플릿 포인터가 상기 메모리 동작이후에 제3탬플릿 영역을 가리키고, 상기 제2관계를 설정하는 단계를 더 포함하는 운영체제 퍼스낼리티 시스템 동작 방법.
  19. 제16항에 있어서, 테스크 컨테이너를 형성하는 상기 단계는, 상기 선택된 운영 체제 퍼스낼리티 프로그램으로 부터 상기 마이크로커널로 제2호출을 전송하여 상기 속성 세트 및 상기 탬플릿 영역에 대한 태스크 포인터를 갖는 태스크 컨테이너를 상기 탬플릿 영역을 상기 태스크 컨테이너로 매핑함으로써, 상기 메모리내에 형성하는 단계를 더 포함하는 운영체제 퍼스낼리티 시스템 동작 방법.
  20. 마이크로커널 구조 데이타 프로세싱 시스템에서, 데이타 프로세싱 시스템 메모리에서 태스크 컨테이너를 생성하는 마이크로커널과; 상기 메모리내의 특별 객체로서 탬플릿 영역을 형성하기 위해 상기 마이크로커널로 호출을 전송하는 상기 데이타 프로세싱 시스템의 상기 메모리내의 선택된 운영 체제 퍼스낼리티 프로그램과; 상기 호출에 응답하여 형성된 상기 메모리내의 탬플릿 영역으로서, 가상 어드레스 공간을 정의하는 속성 세트 및 메모리 객체에 대한 탬플릿 포인터를 갖는 상기 탬플릿 영역과; 상기 탬플릿 영역을 자신으로 매핑함으로써 형성된, 상기 속성 세트 및 상기 탬플릿 영역에 대한 태스크 포인터를 갖는 상기 메모리내의 태스크 컨테이너이로되; 상기 탬플릿 포인터 및 상기 태스크 포인터는 상기 태스크 컨테이너 및 상기 메모리 객체 사이에 제1관계를 설정하는 상기 태스크 컨테이너와; 상기 탬플릿 영역상에서 가상 메모리 동작을 수행하여, 상기 메모리 객체에 대한 상기 탬플릿 포인터를 변경하므로써, 상기 태스크 컨테이너 및 상기 메모리 객체사이에 제2관계를 설정하는 수단을 포함하는 마이크로커널 구조 데이타 프로세싱 시스템.
  21. 마이크로커널 구조 데이타 프로세싱 시스템의 퍼스낼리티 뉴트럴 서비스 프로그램(a personality-neutral service program)을 실행하는 방법에 있어서, 데이타 프로세싱 시스템의 메모리로 마이크로커널을 로딩하여 상기 메모리내에 태스크 컨테이너를 생성하는 단계와; 상기 데이타 프로세싱 시스템의 상기 메모리로 퍼스낼리티 뉴트럴 서비스 프로그램을 로딩하는 단계와; 상기 퍼스낼리티 뉴트럴 서비스 프로그램으로 부터 상기 마이크로커널로 호출을 전송하여 상기 메모리내의 특별 객체로서 탬플릿 영역을 형성하는 단계로서, 상기 탬플릿 영역은 가상 어드레스 공간을 정의하는 속성 세트 및 메모리 객체에 대한 탬플릿 포인터를 갖는 상기 탬플릿 영역 형성 단계와; 상기 속성 세트 및 상기 탬플릿 영역에 대한 태스크 포인터를 갖는 태스크 컨테이너를 형성하고 상기 탬플릿 영역을 상기 태스크 컨테이너로 매핑함으로써, 상기 메모리내에 상기 마이크로커널에 의해 형성하되, 상기 탬플릿 포인터 및 상기 태스크 포인터가 상기 태스크 컨테이너 및 상기 메모리 객체 사이에서 제1관계를 설정하는 상기 태스크 컨테이너 형성 단계와; 상기 탬플릿 영역상에서 가상 메모리 동작을 수행하여 상기 메모리 객체에 대한 상기 탬플릿 영역을 변경시키므로써 상기 태스크 컨테이너 및 상기 메모리 객체 사이에 제2관계를 설정하는 단계를 포함하는 퍼스낼리티 뉴트럴 서비스 프로그램 실행 방법.
  22. 제21항에 있어서, 상기 메모리 객체는 상기 메모리에서의 가상 어드레스의 물리적 어드레스의 맵이며, 제1메모리 객체에 대한 제1어드레스 번역 및 제2메모리 객체에 대한 제2어드레스 번역을 포함하고, 상기 방법은; 상기 탬플릿 포인터가 상기 메모리 동작에 앞서서 상기 제1어드레스 번역을 가리키고, 상기 태스크 컨테이너 및 상기 제1메모리 객체 사이에서 상기 제1관계를 설정하는 단계와; 상기 탬플릿 포인터가 상기 메모리 동작이후에 상기 제2어드레스 번역을 가리키고, 상기 태스크 컨테이너 및 상기 제2메모리 객체 사이에서 상기 제2관계를 설정하는 단계를 더 포함하는 퍼스낼리티 뉴트럴 서비스 프로그램 실행 방법.
  23. 제21항에 있어서, 상기 메모리 객체는 제2탬플릿 영역이고, 상기 방법은, 상기 탬플릿 포인터가 상기 메모리 동작에 앞서서 상기 제2탬플릿을 가리키고, 상기 태스크 컨테이너 및 상기 제2탬플릿 사이에 상기 제1관계를 설정하는 단계와; 상기 탬플릿 포인터가 상기 메모리 동작이후에 제3탬플릿 영역을 가리키고, 상기 제2관계를 설정하는 단계를 더 포함하는 퍼스낼리티 뉴트럴 서비스 프로그램 실행 방법.
  24. 제21항에 있어서, 태스크 컨테이너를 형성하는 상기 단계는, 상기 퍼스낼리티 뉴트럴 서비스 프로그램으로 부터 상기 마이크로커널로 제2호출을 전송하여 상기 속성 세트 및 상기 탬플릿 영역에 대한 태스크 포인터를 갖는 태스크 컨테이너를 상기 탬플릿 영역을 상기 태스크 컨테이너로 매핑함으로써, 상기 메모리내에 형성하는 단계를 더 포함하는 퍼스낼리티 뉴트럴 서비스 프로그램 실행 방법.
  25. 마이크로커널 구조 데이타 프로세싱 시스템에 있어서, 데이타 프로세싱 시스템 메모리내에 태스크 컨테이너를 생성하는 상기 메모리내의 마이크로커널과; 상기 메모리내에 특별 객체로서 탬플릿 영역을 형성하기 위해 상기 마이크로커널로 호출을 전송하는 상기 데이타 프로세싱 시스템의 상기 메모리내의 퍼스낼리티 뉴트럴 서비스 프로그램과; 상기 호출에 응답하여 형성된 상기 메모리내의 탬플릿 영역으로서, 가상 어드레스 공간을 정의하는 속성 세트 및 메모리 객체에 대한 탬플릿 포인터를 갖는 상기 탬플릿 영역과; 상기 탬플릿 영역을 자신으로 매핑함으로써 형성된, 상기 속성 세트 및 상기 탬플릿 영역에 대한 태스크 포인터를 갖는 상기 메모리내의 태스크 컨테이너로서 상기 탬플릿 포인터 및 상기 태스크 포인터는 상기 태스크 컨테이너 및 상기 메모리 객체 사이에서 제1관계를 설정하는 상기 태스크 컨테이너와; 상기 탬플릿 영역상에서 가상 메모리 동작을 수행하여 상기 메모리 객체에 대한 상기 탬플릿 포인터를 변경하므로써 상기 태스크 컨테이너 및 상기 메모리 객체 사이에서 제2관계를 설정하는 수단을 포함하는 마이크로커널 구조 데이타 프로세싱 시스템.
  26. 마이크로커널 구조 데이타 프로세싱 시스템에서 응용 프로그램을 실행하는 방법에 있어서, 데이타 프로세싱 시스템의 메모리로 마이크로커널을 로딩하여 상기 메모리에 태스크 컨테이너를 생성하는 단계와; 상기 데이타 프로세싱 시스템의 상기 메모리로 응용 프로그램을 로딩하는 단계와; 상기 응용 프로그램으로 부터 상기 마이크로커널로 호출을 전송하여 상기 메모리내에 특별 객체로서 탬플릿 영역을 형성하는 단계로서 상기 탬플릿 영역은 가상 어드레스 공간을 정의하는 속성 세트 및 메모리 객체에 대한 탬플릿 포인터를 갖는 상기 탬플릿 영역 형성 단계와; 상기 속성 세트 및 상기 탬플릿 영역에 대한 태스크 포인터를 갖는 태스크 컨테이너를 상기 탬플릿 영역을 상기 태스크 컨테이너로 매핑함으로써, 상기 메모리내에 상기 마이크로커널에 의해 형성하는 단계로서, 상기 탬플릿 포인터 및 상기 태스크 포인터가 상기 태스크 컨테이너 및 상기 메모리 객체 사이에서 제1관계를 설정하는 상기 태스크 컨테이너 형성 단계와; 상기 탬플릿 영역상에서 가상 메모리 동작을 수행하여 상기 메모리 객체에 대한 상기 탬플릿 영역을 변경시키므로써, 상기 태스크 컨테이너 및 상기 메모리 객체 사이에 제2관계를 설정하는 단계를 포함하는 응용 프로그램 실행 방법.
  27. 제26항에 있어서, 상기 메모리 객체는 상기 메모리에서의 가상 어드레스의 물리적 어드레스로의 맵이며, 제1메모리 객체에 대한 제1어드레스 번역 및 제2메모리 객체에 대한 제2어드레스 번역을 포함하고, 상기 방법은; 상기 탬플릿 포인터가 상기 메모리 동작에 앞서서 상기 제1어드레스 번역을 가리키고, 상기 태스크 컨테이너 및 상기 제1메모리 객체 사이에서 상기 제1관계를 설정하는 단계와; 상기 탬플릿 포인터가 상기 메모리 동작이후에 상기 제2어드레스 번역을 가리키고, 상기 태스크 컨테이너 및 상기 제2메모리 객체 사이에서 상기 제2관계를 설정하는 단계를 더 포함하는 응용 프로그램 실행 방법.
  28. 제26항에 있어서, 상기 메모리 객체는 제2탬플릿 영역이고, 상기 방법은, 상기 탬플릿 포인터가 상기 메모리 동작에 앞서서 상기 제2탬플릿을 가리키고, 상기 태스크 컨테이너 및 상기 제2탬플릿 사이에서 상기 제1관계를 설정하는 단계와; 상기 탬플릿 포인터가 상기 메모리 동작이후에 제3탬플릿 영역을 가리키고, 상기 제2관계를 설정하는 단계를 더 포함하는 응용 프로그램 실행 방법.
  29. 제26항에 있어서, 태스트 컨테이너를 형성하는 상기 단계는, 상기 응용 프로그램으로 부터 상기 마이크로커널로 제2호출을 전송하여 상기 속성 세트 및 상기 탬플릿 영역에 대한 태스크 포인터를 갖는 태스크 컨테이너를 상기 탬플릿 영역을 상기 태스크 컨테이너로 매핑함으로써, 상기 메모리내에 형성하는 단계를 더 포함하는 응용 프로그램 동작 방법.
  30. 마이크로커널 구조 데이타 프로세싱 시스템에 있어서, 데이타 프로세싱 시스템 메모리내에 태스크 컨테이너를 생성하는 상기 메모리내의 마이크로커널과; 상기 메모리내에 특별 객체로서 탬플릿 영역을 형성하기 위해 상기 마이크로커널로 호출을 전송하는, 상기 데이타 프로세싱 시스템의 상기 메모리내의 응용 프로그램과; 상기 호출에 응답하여 형성된 상기 메모리내의 탬플릿 영역으로서, 가상 어드레스 공간을 정의하는 속성 세트 및 메모리 객체에 대한 탬플릿 포인터를 갖는 상기 탬플릿 영역과; 상기 탬플릿 영역을 자신으로 매핑함으로써 형성된, 상기 속성 세트 및 상기 탬플릿 영역에 대한 태스크 포인터를 갖는 상기 메모리내의 태스크 컨테이너로서 상기 탬플릿 포인터 및 상기 태스크 포인터가 상기 태스크 컨테이너 및 상기 메모리 객체 사이에서 제1관계를 설정하는 상기 태스크 컨테이너와; 상기 탬플릿 영역상에서 가상 메모리 동작을 수행하여 상기 메모리 객체에 대한 상기 탬플릿 포인터를 변경하므로써 상기 태스크 컨테이너 및 상기 메모리 객체 사이에 제2관계를 설정하는 수단을 포함하는 마이크로커널 구조 데이타 프로세싱 시스템.
  31. 마이크로커널 구조 데이타 프로세싱 시스템에 있어서, 프로그램된 인스트럭션(programmed instructions)을 저장하는 보조 저장 수단(an auxiliary storage means)과; 상기 보조 저장 수단에 접속되어 캐시 객체(cache object)를 저장하는 메모리 수단(a memory means)으로서 상기 보조 저장 수단은 상기 프로그램된 인스트럭션을 상기 캐시 객체로 페이징(paging)하는 상기 메모리 수단과; 상기 메모리 수단내의 탬플릿 영역으로서, 상기 탬플릿 영역은 가상 어드레스 공간을 정의하는 속성 세트 및 상기 캐시 객체에 대한 탬플릿 포인터를 갖는 상기 탬플릿 영역과; 상기 메모리 수단내에서 태스크를 생성하는 상기 메모리 수단내의 마이크로커널 수단과; 상기 탬플릿 영역을 자신으로 매핑하는 상기 마이크로커널 수단에 의해서 형성된 상기 속성 세트 및 상기 탬플릿 영역에 대한 태스크 포인터를 갖는 상기 메모리내의 태스크로서 상기 탬플릿 포인터 및 상기 태스크 포인터가 상기 태스크 및 상기 캐시 객체 사이에서 제1관계를 설정하는 상기 태스크와; 상기 프로그램된 인스트럭션을 수행하기 위해 상기 메모리 수단에 접속된 프로세서 수단과; 상기 프로세서 수단에서의 실행을 위해 상기 제1관계를 사용하여 상기 캐시 객체로 부터 상기 프로그램된 인스트럭션을 인출하는, 상기 태스크와 연관된 상기 메모리 수단내의 스레드 객체와; 상기 탬플릿 영역상에서 가상 메모리 동작을 수행하여 상기 캐시 객체에 대한 상기 탬플릿 포인터를 변경하므로써 상기 태스크와 상기 캐시 객체사이의 관계를 변경하는 수단을 포함하는 마이크로커널 구조 데이타 프로세싱 시스템.
  32. 제31항에 있어서, 상기 메모리 수단에서의 가상 어드레스의 물리적 어드레스로의 맵(map)으로서, 상기 탬플릿 포인터에 의해 가리켜지고, 상기 캐시 객체에 대한 제1어드레스 번역 및 제2메모리 객체에 대한 제2어드레스 번역을 포함하는 상기 맵을 더 포함하고; 상기 탬플릿 포인터는 상기 메모리 동작에 앞서서 상기 제1어드레스 번역을 가리키고, 상기 태스크 및 상기 캐시 객체 사이에서 상기 제1관계를 설정하며; 상기 탬플릿 포인터는 상기 메모리 동작이후에 상기 제2어드레스 번역을 가리키고, 상기 태스크 및 상기 제2메모리 객체 사이에서 상기 제2관계를 설정하는 마이크로커널 구조 데이타 프로세싱 시스템.
  33. 제31항에 있어서, 상기 메모리 수단내에 특별 객체로서 상기 탬플릿 영역을 형성하기 위해 상기 마이크로커널 수단으로 호출을 전송하는, 상기 메모리 수단내의 운영 체제 퍼스낼리티 프로그램 수단을 더 포함하는 마이크로커널 구조 데이타 프로세싱 시스템.
  34. 제33항에 있어서, 상기 메모리 수단내의 상기 운영 체제 퍼스낼리티 프로그램은 상기 메모리 수단내에 상기 태스크를 형성하기 위해 상기 마이크로커널 수단으로 호출을 전송하는 마이크로커널 구조 데이타 프로세싱 시스템.
  35. 제31항에 있어서, 상기 메모리 수단내에 특별 객체로서 상기 탬플릿 영역을 형성하기 위해 상기 마이크로커널 수단으로 호출을 전송하는, 상기 메모리 수단내의 퍼스낼리티 뉴트럴 서비스 프로그램 수단을 더 포함하는 마이크로커널 구조 데이타 프로세싱 시스템.
  36. 제35항에 있어서, 상기 메모리 수단내의 상기 퍼스낼리티 뉴트럴 서비스 프로그램 수단은, 상기 메모리 수단내에 상기 태스크를 형성하기 위해 상기 마이크로커널 수단으로 호출을 전송하는 마이크로커널 구조 데이타 프로세싱 시스템.
  37. 제31항에 있어서, 상기 메모리 수단내에 특별 객체로서 상기 탬플릿 영역을 형성하기 위해 상기 마이크로커널 수단으로 호출을 전송하는 상기 메모리 수단내의 응용 프로그램 수단을 더 포함하는 마이크로커널 구조 데이타 프로세싱 시스템.
  38. 제37항에 있어서, 상기 메모리내의 상기 응용 프로그램 수단은, 상기 메모리 수단내에 상기 태스크를 형성하기 위해 상기 마이크로커널 수단으로 호출을 전송하는 마이크로커널 구조 데이타 프로세싱 시스템.
  39. 마이크로커널 구조 데이타 프로세싱 시스템에 있어서, 프로그램된 인스트럭션을 포함하는 캐시 객체를 저장하는 메모리 수단과; 속성 세트 및 상기 캐시 객체에 대한 탬플릿 포인터를 갖는 상기 메모리 수단내의 탬플릿 영역과; 상기 탬플릿 영역을 하나의 태스크로 매핑함으로써 상기 메모리내에 태스크들을 생성하는, 상기 메모리내의 마이크로커널 수단과; 상기 속성 세트 및 상기 탬플릿 영역 대한 태스크 포인터를 갖는, 상기 마이크로커널에 의해 형성된 상기 메모리 수단내의 태스크로서, 상기 탬플릿 포인터 및 상기 태스크 포인터가 상기 태스크 및 상기 캐시 객체 사이에 제1관계를 설정하는 상기 태스크와; 상기 프로그램된 인스트럭션을 수행하는, 상기 메모리 수단에 접속된 프로세서 수단과; 상기 프로세서 수단에서의 실행을 위해, 상기 제1관계를 사용하여 상기 캐시 객체로부터 상기 프로그램된 인스트럭션을 인출하는, 상기 태스크와 연관된 상기 메모리 수단내의 스레드를 포함하는 마이크로커널 구조 데이타 프로세싱 시스템.
  40. 제39항에 있어서, 상기 메모리 수단내의 특별 객체로서 상기 탬플릿 영역을 형성하기 위해 상기 마이크로커널 수단으로 호출을 전송하는 상기 메모리 수단내의 운영 체제 퍼스낼리티 프로그램을 더 포함하는 마이크로커널 구조 데이타 프로세싱 시스템.
  41. 제39항에 있어서, 상기 메모리 수단에서 상기 태스크를 형성하기 위해 상기 마이크로커널 수단으로 호출을 전송하는, 상기 메모리 수단내의 운영 체제 퍼스낼리티 프로그램 수단을 더 포함하는 마이크로커널 구조 데이타 프로세싱 시스템.
  42. 제39항에 있어서, 상기 메모리 수단내에 특별 객체로서 상기 탬플릿 영역을 형성하기 위해 상기 마이크로커널 수단으로 호출을 전송하는 상기 메모리 수단내의 퍼스낼리티 뉴트럴 서비스 프로그램을 더 포함하는 마이크로커널 구조 데이타 프로세싱 시스템.
  43. 제39항에 있어서, 상기 메모리 수단내에 상기 태스크를 형성하기 위해, 상기 마이크로커널 수단으로 호출을 전송하는 상기 메모리 수단내의 퍼스낼리티 뉴트럴 서비스 프로그램을 더 포함하는 마이크로커널 구조 데이타 프로세싱 시스템.
  44. 제39항에 있어서, 상기 메모리 수단내에 특별 객체로서 상기 탬플릿 영역을 형성하기 위해 상기 마이크로커널 수단으로 호출을 전송하는, 상기 메모리 수단내의 응용 프로그램 수단을 더 포함하는 마이크로커널 구조 데이타 프로세싱 시스템.
  45. 제39항에 있어서, 상기 메모리 수단내에 상기 태스크를 형성하기 위해 상기 마이크로커널 수단으로 호출을 전송하는, 상기 메모리 수단내의 응용 프로그램 수단을 더 포함하는 마이크로커널 구조 데이타 프로세싱 시스템.
  46. 마이크로커널 구조 데이타 프로세싱 시스템에서, 프로그램된 인스트럭션을 저장하는 보조 저장 수단과; 보조 저장 수단에 접속되어 캐시 객체를 저장하는 메모리 수단으로서, 상기 보조 저장 수단은 상기 프로그램된 인스트럭션을 상기 캐시 객체로 페이징하는 상기 메모리 수단과; 속성 세트 및 상기 캐시 객체에 대한 탬플릿 포인터를 갖는, 상기 메모리 수단내의 탬플릿 영역과; 상기 탬플릿 영역을 하나의 태스크로 매핑함으로써 상기 메모리 수단내에 태스크들을 생성하는, 상기 메모리 수단내의 마이크로커널 수단과; 상기 속성 세트 및 상기 탬플릿 영역에 대한 태스크 포인터를 갖는, 상기 마이크로커널 수단에 의해 형성된 상기 메모리 수단내의 태스크로서 상기 탬플릿 포인터 및 상기 태스크 포인터가 상기 태스크 및 상기 캐시 객체사이의 제1관계를 설정하는 상기 태스크와; 상기 메모리 수단에 접속되어 상기 프로그램된 인스트럭션을 수행하는 프로세서 수단과; 상기 프로세서 수단에서의 실행을 위해, 상기 제1관계를 사용하여 상기 캐시 객체로 부터 상기 프로그램된 인스트럭션을 인출하는, 상기 태스크와 연관된 상기 메모리 수단내의 스레드를 포함하는 마이크로커널 구조 데이타 프로세싱 시스템.
  47. 마이크로커널 데이타 구조 프로세싱 시스템에서, 프로그램된 인스트럭션을 저장하는 보조 저장 수단과; 보조 저장 수단에 접속되어 캐시 객체를 저장하는 메모리 수단으로서, 상기 보조 저장 수단은 상기 프로그램된 인스트럭션을 상기 캐시 객체로 페이징하는 상기 메모리 수단과; 제1탬플릿 포인터 및 상기 캐시 객체에 대한 제2탬플릿 포인터를 갖는 상기 메모리 수단내의 탬플릿 영역과; 상기 탬플릿 영역을 하나의 태스크로 매핑함으로써 상기 메모리 수단내에 태스크들을 생성하는, 상기 메모리 수단내의 마이크로커널 수단과; 상기 속성 세트 및 상기 탬플릿 영역에 대한 제1태스크 포인터를 갖는, 상기 마이크로커널 수단에 의해 형성된 상기 메모리 수단내의 제1태스크로서; 상기 제1탬플릿 포인터 및 상기 제1태스크 포인터가 상기 제1태스크와 상기 캐시 객체 사이에서 제1관계를 설정하는 상기 제1태스크와; 상기 프로그램된 인스트럭션을 수행하기 위해, 상기 메모리 수단에 접속된 제1프로세서 수단과; 상기 제1프로세서 수단에서의 실행을 위해, 상기 제1관계를 사용하여 상기 캐시 객체로 부터 상기 프로그램된 인스트럭션을 인출하는, 상기 제1태스크와 연관된 상기 메모리 수단내의 제1스레드와; 상기 속성 세트 및 상기 탬플릿 영역에 대한 제2태스크 포인터를 갖는, 상기 마이크로커널 수단에 의해 형성된 상기 메모리 수단내의 제2태스크로서, 상기 제2탬플릿 포인터 및 상기 제2태스크 포인터가 상기 제2태스크 및 상기 캐시 객체 사이에서 제2관계를 설정하는 상기 제2태스크와; 상기 프로그램된 인스트럭션을 수행하기 위해, 상기 메모리 수단에 접속된 제2프로세서 수단과; 상기 제2프로세서 수단에서의 실행을 위해, 상기 제2관계를 사용하여 상기 캐시 객체로 부터 상기 프로그램된 인스트럭션을 인출하는, 상기 제2태스크와 연관된 상기 메모리 수단내의 제2스레드를 포함하는 마이크로커널 구조 데이타 프로세싱 시스템.
  48. 마이크로커널 구조 데이타 프로세싱 시스템에서, 프로그램된 인스트럭션을 저장하는 보조 저장 수단과; 보조 저장 수단에 접속되어 캐시 객체를 저장하는 메모리 수단으로서, 상기 보조 저장 수단은 상기 프로그램된 인스트럭션을 상기 캐시 객체로 페이징하는 상기 메모리 수단과; 속성 세트 및 상기 캐시 객체에 대한 탬플릿 포인터를 갖는 상기 메모리 수단내의 탬플릿 영역과; 상기 탬플릿 영역을 하나의 태스크로 매핑함으로써 상기 메모리 수단내에 태스크들을 생성하는, 상기 메모리 수단내의 마이크로커널 수단과; 상기 속성 세트 및 상기 탬플릿 영역에 대한 제1태스크 포인터를 갖는, 상기 마이크로커널 수단에 의해 형성된 상기 메모리 수단내의 제1태스크로서, 상기 제1탬플릿 포인터 및 상기 제1태스크 포인터가 상기 제1태스크 및 상기 캐시 객체 사이에서 관계를 설정하는 상기 제1태스크와; 상기 프로그램된 인스트럭션을 수행하기 위해, 상기 메모리 수단에 접속된 제1프로세서 수단과; 상기 제1프로세서 수단에서의 실행을 위해, 상기 관계를 사용하여 상기 캐시 객체로 부터 상기 프로그램된 인스트럭션을 인출하는, 상기 제1태스크와 연관된 상기 메모리 수단내의 제1스레드와; 상기 속성 세트 및 상기 탬플릿 영역에 대한 제2태스크 포인터를 갖는, 상기 마이크로커널 수단에 의해 형성된 상기 메모리 수단내의 제2태스크로서; 상기 제2탬플릿 포인터 및 상기 제2태스크 포인터가 상기 제2태스크 및 상기 캐시 객체 사이에서 상기 관계를 설정하는 상기 제2태스크와; 상기 프로그램된 인스트럭션을 수행하기 위해, 상기 메모리 수단에 접속된 제2프로세서 수단과; 상기 제2프로세서 수단에서의 실행을 위해, 상기 관계를 사용하여 상기 캐시 객체로 부터 상기 프로그램된 인스트럭션을 인출하는, 상기 제2태스크와 연관된 상기 메모리 수단내의 제2스레드를 포함하는 마이크로커널 구조 데이타 프로세싱 시스템.
KR1019950016773A 1994-06-22 1995-06-21 메모리 관리 방법, 마이크로커널 구조 데이타 프로세싱 시스템, 운영 체제 퍼스낼리티 시스템 동작 방법, 퍼스낼리티 뉴트럴 서비스 프로그램 실행 방법 및 응용 프로그램 실행방법 KR0170565B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US08/263,710 1994-06-22
US08/263,710 US5729710A (en) 1994-06-22 1994-06-22 Method and apparatus for management of mapped and unmapped regions of memory in a microkernel data processing system
US8/263,710 1994-06-22

Publications (2)

Publication Number Publication Date
KR960001993A KR960001993A (ko) 1996-01-26
KR0170565B1 true KR0170565B1 (ko) 1999-03-30

Family

ID=23002937

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1019950016773A KR0170565B1 (ko) 1994-06-22 1995-06-21 메모리 관리 방법, 마이크로커널 구조 데이타 프로세싱 시스템, 운영 체제 퍼스낼리티 시스템 동작 방법, 퍼스낼리티 뉴트럴 서비스 프로그램 실행 방법 및 응용 프로그램 실행방법

Country Status (6)

Country Link
US (1) US5729710A (ko)
EP (1) EP0693728A1 (ko)
JP (1) JP3570525B2 (ko)
KR (1) KR0170565B1 (ko)
BR (1) BR9502801A (ko)
CA (1) CA2147529A1 (ko)

Families Citing this family (99)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5875487A (en) * 1995-06-07 1999-02-23 International Business Machines Corporation System and method for providing efficient shared memory in a virtual memory system
US6023711A (en) * 1995-06-08 2000-02-08 International Business Machines Corporation System and method for flexible file encapsulation through latent levels of isolation
US5829013A (en) * 1995-12-26 1998-10-27 Intel Corporation Memory manager to allow non-volatile memory to be used to supplement main memory
US6064811A (en) * 1996-06-17 2000-05-16 Network Associates, Inc. Computer memory conservation system
JPH1049381A (ja) * 1996-07-04 1998-02-20 Internatl Business Mach Corp <Ibm> 複数のデータ処理要求の処理方法及び処理システム、プログラムの実行方法及びシステム
US6434663B1 (en) * 1996-09-06 2002-08-13 Intel Corporation Disk block allocation optimization methodology with accommodation for file system cluster size greater than operating system memory page size
US6681239B1 (en) * 1996-12-23 2004-01-20 International Business Machines Corporation Computer system having shared address space among multiple virtual address spaces
US5913230A (en) * 1997-01-07 1999-06-15 Richardson; John J. Object and method for providing efficient multi-user access to shared operating system kernal code using instancing
WO1998043193A2 (en) * 1997-03-21 1998-10-01 University Of Maryland Spawn-join instruction set architecture for providing explicit multithreading
US5951706A (en) * 1997-06-30 1999-09-14 International Business Machines Corporation Method of independent simultaneous queueing of message descriptors
US6003066A (en) * 1997-08-14 1999-12-14 International Business Machines Corporation System for distributing a plurality of threads associated with a process initiating by one data processing station among data processing stations
US5931919A (en) * 1997-11-07 1999-08-03 Xerox Corporation State-based object transition control and attribute-based locking
US6173248B1 (en) * 1998-02-09 2001-01-09 Hewlett-Packard Company Method and apparatus for handling masked exceptions in an instruction interpreter
US6219770B1 (en) * 1998-03-23 2001-04-17 Compaq Computer Corporation Method and apparatus for managing copy on write operations in a virtual memory
US6223186B1 (en) * 1998-05-04 2001-04-24 Incyte Pharmaceuticals, Inc. System and method for a precompiled database for biomolecular sequence information
US6470436B1 (en) 1998-12-01 2002-10-22 Fast-Chip, Inc. Eliminating memory fragmentation and garbage collection from the process of managing dynamically allocated memory
CA2322950A1 (en) * 1999-01-06 2000-07-13 Koninklijke Philips Electronics N.V. Arrangement for executing program code with reduced memory requirements
US6594671B1 (en) * 1999-06-14 2003-07-15 International Business Machines Corporation Separating privileged functions from non-privileged functions in a server instance
US6549996B1 (en) * 1999-07-02 2003-04-15 Oracle Corporation Scalable multiple address space server
EP1667027A1 (en) 1999-09-07 2006-06-07 Intel Corporation Dynamic memory caching
EP1222546A1 (en) * 1999-09-07 2002-07-17 Fast-Chip Incorporated Dynamic memory caching
US7140015B1 (en) * 1999-09-29 2006-11-21 Network Appliance, Inc. Microkernel for real time applications
US6345351B1 (en) * 1999-11-12 2002-02-05 Telefonaktiebolaget Lm Ericsson(Publ) Maintenance of speculative state of parallel executed jobs in an information processing system
AU2004202666B2 (en) * 1999-11-19 2007-03-22 General Dynamics C4 Systems, Inc. A method of allocating memory and performing a remote procedure call
US6772416B1 (en) * 1999-11-19 2004-08-03 General Dynamics Decision Systems, Inc. Separation kernel with memory allocation, remote procedure call and exception handling mechanisms
US6772212B1 (en) * 2000-03-08 2004-08-03 Phatnoise, Inc. Audio/Visual server
US7490166B2 (en) 2000-05-26 2009-02-10 Citrix Systems, Inc. Remote control of a client's off-screen surface
US20020016878A1 (en) * 2000-07-26 2002-02-07 Flores Jose L. Technique for guaranteeing the availability of per thread storage in a distributed computing environment
US7073173B1 (en) * 2000-12-04 2006-07-04 Microsoft Corporation Code and thread differential addressing via multiplex page maps
ATE480822T1 (de) * 2001-02-13 2010-09-15 Candera Inc Failover-verarbeitung in einem speicherungssystem
US7065755B2 (en) * 2001-03-15 2006-06-20 Sun Microsystems, Inc. Method and apparatus for removing class initialization barriers from shared compiled methods
US7089561B2 (en) * 2001-06-01 2006-08-08 Microsoft Corporation Methods and systems for creating and communicating with computer processes
US6671786B2 (en) * 2001-06-07 2003-12-30 Microsoft Corporation System and method for mirroring memory with restricted access to main physical mirrored memory
US7318238B2 (en) * 2002-01-14 2008-01-08 Microsoft Corporation Security settings for markup language elements
US7058786B1 (en) * 2002-01-17 2006-06-06 Hewlett-Packard Development Company Operating system data communication method and system
JP4777651B2 (ja) * 2002-08-23 2011-09-21 イグジット−キューブ,インク. コンピュータシステム及びデータ保存方法
US7155571B2 (en) * 2002-09-30 2006-12-26 International Business Machines Corporation N-source in-kernel cache for high performance in computer operating systems
US7085909B2 (en) * 2003-04-29 2006-08-01 International Business Machines Corporation Method, system and computer program product for implementing copy-on-write of a file
US20040268139A1 (en) * 2003-06-25 2004-12-30 Microsoft Corporation Systems and methods for declarative client input security screening
US7650601B2 (en) * 2003-12-04 2010-01-19 International Business Machines Corporation Operating system kernel-assisted, self-balanced, access-protected library framework in a run-to-completion multi-processor environment
GB2412761C (en) * 2004-04-02 2011-01-05 Nokia Corp Improvements in or relating to an operating system for a computing device
US20050251804A1 (en) * 2004-05-04 2005-11-10 International Business Machines Corporation Method, data processing system, and computer program product for detecting shared resource usage violations
US7249238B2 (en) 2004-06-15 2007-07-24 International Business Machines Corporation Memory tracking with preservation of alignment semantics
US7562359B1 (en) * 2004-08-26 2009-07-14 Wind River Systems, Inc. User process object code installer
US7831642B1 (en) * 2004-09-30 2010-11-09 Symantec Operating Corporation Page cache management for a shared file
US7793293B2 (en) * 2004-11-01 2010-09-07 Hewlett-Packard Development Company, L.P. Per processor set scheduling
US8214461B1 (en) * 2004-11-23 2012-07-03 Hewlett-Packard Development Company, L.P. Method of processing request by server computer system
US7613671B2 (en) * 2005-02-15 2009-11-03 Fair Isaac Corporation Approach for re-using business rules
US8219823B2 (en) * 2005-03-04 2012-07-10 Carter Ernst B System for and method of managing access to a system using combinations of user information
US8171169B2 (en) * 2005-03-14 2012-05-01 Citrix Systems, Inc. Method and apparatus for updating a graphical display in a distributed processing environment
US8423673B2 (en) 2005-03-14 2013-04-16 Citrix Systems, Inc. Method and apparatus for updating a graphical display in a distributed processing environment using compression
US7519636B2 (en) * 2005-03-30 2009-04-14 Sap Ag Key sequenced clustered I/O in a database management system
US7454477B2 (en) * 2005-05-16 2008-11-18 Microsoft Corporation Zero-copy transfer of memory between address spaces
US8078740B2 (en) * 2005-06-03 2011-12-13 Microsoft Corporation Running internet applications with low rights
US7698510B2 (en) * 2005-06-22 2010-04-13 Hewlett-Packard Development Company, L.P. Systems and methods for identifying and registering a range of virtual memory
US7793299B2 (en) * 2005-08-30 2010-09-07 International Business Machines Corporation System and method for scheduling tasks for execution
US7516291B2 (en) * 2005-11-21 2009-04-07 Red Hat, Inc. Cooperative mechanism for efficient application memory allocation
US7734842B2 (en) * 2006-03-28 2010-06-08 International Business Machines Corporation Computer-implemented method, apparatus, and computer program product for managing DMA write page faults using a pool of substitute pages
US8868930B2 (en) 2006-05-31 2014-10-21 International Business Machines Corporation Systems and methods for transformation of logical data objects for storage
JP5431148B2 (ja) 2006-05-31 2014-03-05 インターナショナル・ビジネス・マシーンズ・コーポレーション ストレージ用論理データオブジェクトの変換方法およびシステム
US8185737B2 (en) * 2006-06-23 2012-05-22 Microsoft Corporation Communication across domains
US20080046724A1 (en) * 2006-07-25 2008-02-21 General Dynamics C4 System, Inc. Method for governing interaction between code within a code base
US20080066183A1 (en) * 2006-09-12 2008-03-13 George Madathilparambil George Master device for manually enabling and disabling read and write protection to parts of a storage disk or disks for users
US8443341B2 (en) * 2006-11-09 2013-05-14 Rogue Wave Software, Inc. System for and method of capturing application characteristics data from a computer system and modeling target system
US7805403B2 (en) 2007-01-07 2010-09-28 Apple Inc. Synchronization methods and systems
US7870277B2 (en) * 2007-03-12 2011-01-11 Citrix Systems, Inc. Systems and methods for using object oriented expressions to configure application security policies
US8631147B2 (en) 2007-03-12 2014-01-14 Citrix Systems, Inc. Systems and methods for configuring policy bank invocations
US7865589B2 (en) 2007-03-12 2011-01-04 Citrix Systems, Inc. Systems and methods for providing structured policy expressions to represent unstructured data in a network appliance
US7853679B2 (en) * 2007-03-12 2010-12-14 Citrix Systems, Inc. Systems and methods for configuring handling of undefined policy events
US8490148B2 (en) 2007-03-12 2013-07-16 Citrix Systems, Inc Systems and methods for managing application security profiles
US7853678B2 (en) 2007-03-12 2010-12-14 Citrix Systems, Inc. Systems and methods for configuring flow control of policy expressions
US7926035B2 (en) * 2007-04-24 2011-04-12 Microsoft Corporation Testing multi-thread software using prioritized context switch limits
WO2008132761A2 (en) 2007-04-26 2008-11-06 Hewlett-Packard Development Company L.P. Method and system for managing heap across process replication
US10019570B2 (en) * 2007-06-14 2018-07-10 Microsoft Technology Licensing, Llc Protection and communication abstractions for web browsers
US20090158299A1 (en) * 2007-10-31 2009-06-18 Carter Ernst B System for and method of uniform synchronization between multiple kernels running on single computer systems with multiple CPUs installed
WO2010030996A1 (en) * 2008-09-15 2010-03-18 Virsto Software Storage management system for virtual machines
US8073674B2 (en) * 2008-09-23 2011-12-06 Oracle America, Inc. SCSI device emulation in user space facilitating storage virtualization
KR101003102B1 (ko) * 2008-09-24 2010-12-21 한국전자통신연구원 멀티 프로세싱 유닛에 대한 메모리 매핑방법, 및 장치
US9442810B2 (en) 2009-07-31 2016-09-13 Paypal, Inc. Cloud computing: unified management console for services and resources in a data center
US8353019B2 (en) * 2010-03-26 2013-01-08 Canon Kabushiki Kaisha Security token destined for multiple or group of service providers
US9112769B1 (en) * 2010-12-27 2015-08-18 Amazon Technologies, Inc. Programatically provisioning virtual networks
US9342348B2 (en) * 2012-01-23 2016-05-17 Brocade Communications Systems, Inc. Transparent high availability for stateful services
US8935475B2 (en) * 2012-03-30 2015-01-13 Ati Technologies Ulc Cache management for memory operations
US9519887B2 (en) * 2014-12-16 2016-12-13 Bank Of America Corporation Self-service data importing
US10225361B2 (en) 2016-06-29 2019-03-05 International Business Machines Corporation Content management in caching services
US11126740B2 (en) * 2016-11-04 2021-09-21 Microsoft Technology Licensing, Llc Storage isolation for containers
US10423478B2 (en) * 2017-08-29 2019-09-24 Red Hat, Inc. Security enhanced out of process user space handling of hardware events
US10437735B2 (en) 2017-12-13 2019-10-08 Red Hat, Inc. Process isolation for out of process page fault handling
CN109086221B (zh) * 2018-07-20 2021-10-29 郑州云海信息技术有限公司 一种增加存储设备内存容量的方法及系统
US20200065013A1 (en) * 2018-08-21 2020-02-27 International Business Machines Corporation Selective memory page initialization
US10997083B2 (en) * 2018-09-04 2021-05-04 Arm Limited Parallel page table entry access when performing address translations
US11741196B2 (en) 2018-11-15 2023-08-29 The Research Foundation For The State University Of New York Detecting and preventing exploits of software vulnerability using instruction tags
US11113128B1 (en) 2019-09-06 2021-09-07 Facebook Technologies, Llc Circular queue for microkernel operating system
US11314566B1 (en) * 2019-09-06 2022-04-26 Facebook Technologies, Llc. Inter-process communication for microkernel operating system
US10795739B1 (en) * 2019-09-06 2020-10-06 Facebook Technologies, Llc Port configuration for microkernel operating system
CN112182580B (zh) * 2019-09-19 2024-04-09 中国科学院信息工程研究所 一种基于处理器芯片的内存漏洞检测方法及电子装置
US10990439B1 (en) * 2019-09-26 2021-04-27 Facebook Technologies, Llc Tracing task execution across services in microkernel-based operating systems
CN112799799A (zh) * 2020-12-29 2021-05-14 杭州涂鸦信息技术有限公司 数据消费方法及装置
CN116136826A (zh) * 2021-11-17 2023-05-19 华为技术有限公司 内存访问方法、芯片、电子设备及计算机可读存储介质

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
DE331900C (de) * 1921-01-17 Moll Werke Akt Ges Schmiedeeiserner Gliederheizkoerper mit Schraubnippelverbindungen und Abstandshuelsen zwischen den Gliedern
GB416768A (en) * 1932-12-29 1934-09-20 Konrad Zilcken Improvements in and relating to socks and stockings
US4945480A (en) * 1988-02-10 1990-07-31 International Business Machines Corporation Data domain switching on program address space switching and return
DE69032418T2 (de) * 1989-09-08 1999-02-25 Digital Equipment Corp Privatspeicher für Fäden in einem multifaden digitalen Datenverarbeitungssystem
US5428729A (en) * 1991-12-20 1995-06-27 International Business Machines Corporation System and method for computer aided software engineering

Also Published As

Publication number Publication date
BR9502801A (pt) 1997-08-05
JP3570525B2 (ja) 2004-09-29
US5729710A (en) 1998-03-17
EP0693728A1 (en) 1996-01-24
JPH0816412A (ja) 1996-01-19
KR960001993A (ko) 1996-01-26
CA2147529A1 (en) 1995-12-23

Similar Documents

Publication Publication Date Title
KR0170565B1 (ko) 메모리 관리 방법, 마이크로커널 구조 데이타 프로세싱 시스템, 운영 체제 퍼스낼리티 시스템 동작 방법, 퍼스낼리티 뉴트럴 서비스 프로그램 실행 방법 및 응용 프로그램 실행방법
US5771383A (en) Shared memory support method and apparatus for a microkernel data processing system
Accetta et al. Mach: A new kernel foundation for UNIX development
US9497264B2 (en) Apparatus, method and system for aggregating computing resources
Young et al. The duality of memory and communication in the implementation of a multiprocessor operating system
Loepere Mach 3 kernel principles
US5226143A (en) Multiprocessor system includes operating system for notifying only those cache managers who are holders of shared locks on a designated page by global lock manager
US5946711A (en) System for locking data in a shared cache
Russo An object-oriented operating system
US5842226A (en) Virtual memory management for a microkernel system with multiple operating systems
US7490214B2 (en) Relocating data from a source page to a target page by marking transaction table entries valid or invalid based on mappings to virtual pages in kernel virtual memory address space
US7827374B2 (en) Relocating page tables
Chapman et al. vNUMA: A Virtual Shared-Memory Multiprocessor.
Khalidi et al. The Spring virtual memory system
JP2986073B2 (ja) プロセス間通信方法並びにプロセス間通信用のサブシステムおよびシステム
Wilkinson et al. Angel: A proposed multiprocessor operating system kernel
Bryant et al. Operating system support for parallel programming on RP3
Loepere OSF Mach Final Draft Kernel Principles
Edler et al. Memory management in Symunix II: A design for large-scale shared memory multiprocessors
Bryant et al. An Introduction to Mach 3.0's XMM Subsystem
Leblanc et al. The elmwood multiprocessor operating system
Gurevich The M-Machine operating system
Draves et al. The Rialto virtual memory system
Chapman vNUMA: Virtual shared-memory multiprocessors
Shukla Operating System

Legal Events

Date Code Title Description
A201 Request for examination
E701 Decision to grant or registration of patent right
GRNT Written decision to grant
FPAY Annual fee payment

Payment date: 20030808

Year of fee payment: 6

LAPS Lapse due to unpaid annual fee