Mach (커널)
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.
1. 개요
Mach는 1980년대 카네기 멜론 대학교에서 개발된 운영 체제 커널로, 멀티프로세서 환경 지원, 효율적인 메모리 관리, 프로세스 간 통신(IPC) 등을 목표로 했다. 4.2BSD 유닉스의 문제점을 해결하고 4.3BSD와의 호환성을 목표로 개발되었으며, Mach 1.0, 2.0, 3.0 버전을 거치며 발전했다. Mach는 마이크로커널 아키텍처를 채택하여, 운영 체제 코드를 사용자 공간으로 이동시켜 커널의 크기를 줄였다. Mach는 NeXTSTEP, OSF/1, macOS의 XNU 커널 등 다양한 운영 체제의 기반이 되었으며, 한국에서는 macOS와 iOS의 기반 기술로서 소프트웨어 개발 및 모바일 기술 발전에 간접적으로 기여했다.
더 읽어볼만한 페이지
- 카네기 멜런 대학교 - 앤드루 카네기
스코틀랜드 출신 미국 기업가 앤드루 카네기는 철강 산업에서 부를 축적하여 "철강왕"으로 불리며, 카네기 철강 회사를 설립하여 미국 철강 산업을 지배하고 막대한 재산을 교육 및 과학 발전에 기여했지만, 노동 착취와 독점적 사업 관행에 대한 비판과 부유층의 사회적 책임에 대한 철학은 논쟁의 대상이 되고 있다. - 카네기 멜런 대학교 - 로봇 명예의 전당
로봇 명예의 전당은 사회에 큰 영향을 미친 로봇들을 기념하기 위해 설립되었으며 영화, 산업, 과학 등 다양한 분야의 로봇들을 헌액하여 로봇 기술의 발전과 로봇이 인간 사회에 미치는 영향을 보여주는 상징적인 공간이다. - 마이크로커널 - QNX
QNX는 고든 벨과 댄 도지가 개발한 마이크로커널 기반의 실시간 운영 체제로, 산업용 기계 제어 분야에서 신뢰성을 인정받아 현재는 블랙베리가 소유하며 자동차 인포테인먼트 시스템, 자율 주행 시스템 등 다양한 임베디드 시스템에 활용되고, POSIX 표준 준수로 유닉스 계열 소프트웨어와 호환된다. - 마이크로커널 - 닌텐도 스위치 시스템 소프트웨어
닌텐도 스위치 시스템 소프트웨어는 Horizon이라는 코드명으로 불리는 닌텐도 스위치의 운영체제로, FreeBSD와 안드로이드 코드를 일부 사용하고 마이크로커널 아키텍처를 기반으로 하여 직관적인 인터페이스와 다양한 기능을 제공하며, 닌텐도는 지속적인 업데이트를 통해 시스템을 개선하고 있다.
Mach (커널) - [IT 관련 정보]에 관한 문서 | |
---|---|
기본 정보 | |
이름 | Mach 마하 |
종류 | 마이크로커널 |
개발자 | 리처드 라시드, 에이비 티베이니언 |
발표일 | 1985년 |
마지막 릴리스 버전 | 3.0 |
마지막 릴리스 날짜 | 1994년 |
지원 플랫폼 | IA-32, x86-64, MIPS, ARM32, Aarch64, m88k |
웹사이트 | The Mach Project |
역사 | |
개발 시작 | 1985년 |
특징 | |
통신 방식 | 'multiple asynchronously communication h''osts (다중 비동기 통신 호스트)' |
기타 | |
기반 운영체제 | 유닉스 계열 |
2. 역사
1980년대 중반, 미국 국방부 고등연구계획국(DARPA)은 실험용 멀티프로세서 컴퓨터용 OS 개발을 지원했다. 이 제안이 채택되어 1985년부터 카네기 멜론 대학교에서 Mach 프로젝트가 시작되었으며, 초기에는 슈퍼컴퓨터 워크벤치 프로젝트라고 불렸다.
당시 연구기관에서 주로 사용되던 4.2 BSD 유닉스는 가상 메모리, 멀티프로세서 머신에 대한 비효율적인 구조, 이식성이 좋지 않은 코드 등 여러 문제점을 안고 있었다. Mach는 이러한 문제점을 해결하고, 멀티프로세서 지원, 거대한 메모리 공간의 효율적 이용, 분산 시스템 지원, 고속 네트워크 투명 프로세스 간 통신(IPC) 지원, 이식성이 높은 구조, 그리고 4.3BSD와의 완전한 호환성을 목표로 개발되었다.
Mach는 처음에는 기존 4.2BSD 커널에 추가 코드를 직접 작성하여 호스팅하는 방식으로 개발되었다. 1986년까지 DEC VAX에서 실행될 수 있을 정도로 완성되었고, 이후 IBM RT PC 및 선 마이크로시스템즈의 68030 기반 워크스테이션용 버전이 출시되면서 이식성을 입증했다. 1987년에는 Encore Multimax 및 Sequent Balance 머신을 포함하여 다중 프로세서 시스템에서 실행할 수 있는 능력을 테스트했으며, 같은 해 릴리스 1과 다음 해 릴리스 2가 공개되었다.
초기 Mach 버전에는 커널에 4.3BSD의 대부분이 포함되어 있어, 실제로는 기반 UNIX보다 더 큰 커널을 생성했다(POE 서버). 그러나 UNIX 레이어를 사용자 공간으로 이동하여 쉽게 작업하고 대체할 수 있도록 하는 것이 목표였다.
1990년에 출시된 Mach 3는 여러 플랫폼으로 이식되어 상업 시장에서 상당한 관심을 불러일으켰다. 오픈 소프트웨어 재단(OSF)은 향후 버전의 OSF/1을 Mach 2.5에서 호스팅하고 Mach 3도 조사할 것이라고 발표하면서 가시성이 크게 높아졌다. Mach 2.5는 NeXTSTEP 시스템과 여러 상업용 다중 프로세서 공급업체에 선택되었다. Mach 3는 IBM의 Workplace OS를 포함하여 마이크로커널용 다른 운영 체제 부분을 이식하려는 여러 노력과 애플에서 클래식 Mac OS의 크로스 플랫폼 버전을 구축하려는 여러 노력으로 이어졌다. Mach 3.0 환경에서 DOS 응용 프로그램을 실행하는 지원은 이전의 클래식 Mac OS 및 MultiFinder를 Mach 2.5에서 실행하는 작업을 따라 연구자들에 의해 시연되었다.
Mach 커널 개발은 여러 주요 단계를 거쳤다. 1986년 Mach 1.0이 출시되어 연구 개발의 진척을 보고했다. 새로운 가상 메모리와 IPC가 구현되었지만, 태스크와 스레드는 아직 구현되지 않았다. 1988년에는 태스크와 스레드를 구현하고 몇 가지 개선 사항을 적용한 Mach 2.0이 출시되었다. 초기 NeXTSTEP의 커널로 사용되었다.
Mach는 오픈 소프트웨어 재단(OSF)이 향후 버전의 OSF/1을 Mach 2.5에서 호스팅하고 Mach 3도 조사할 것이라고 발표하면서 가시성이 크게 높아졌다. NFS가 구현된 Mach 2.5는 OSF/1 외에도 NeXTSTEP 시스템과 여러 상업용 다중 프로세서 공급업체에 선택되었다. 1989년에 출시된 Mach 3.0은 마이크로커널화되었으며, MkLinux의 커널로도 사용되었다. Mach 3.0은 macOS의 커널 ''XNU''에도 사용되고 있지만, 구현은 마이크로커널이 아니다.
초창기부터 4.3BSD UNIX와 호환되는 것으로 결정되었기 때문에, 4.3BSD의 커널소스 코드를 기반으로 수정을 가하여 구현했다. 실제로는 3.0부터가 마이크로커널이며, Mach 2.5까지는 마이크로커널이 아니다.
리처드 라시드 교수가 1991년에 마이크로소프트로 이적한 후에도 1994년까지 카네기 멜론 대학교에서 Mach 프로젝트는 계속되었다. 이후 Mach의 개발은 유타 대학교의 Mach 4 프로젝트, Free Software Foundation영어의 Hurd 프로젝트, 카네기 멜론 대학교의 ART 프로젝트 등으로 계승되었다. 유타 대학교는 Mach 4로 분산 환경을 고려한 스레드 및 메시지 개선, Linux 장치 드라이버 인터페이스 구현을 했다. GNU 프로젝트에서는 이 Mach 4를 기반으로 개량을 더하여, GNU Mach로 공개하고 있다. ART 프로젝트에서는 분산 실시간 OS 실현을 위해, 실시간 구동형 스케줄러 등을 Mach에 통합하여, Real-Time Mach영어로 공개되었다. 이러한 연구 개발은 Mach뿐만 아니라 BSD에도 피드백되어, 가상 메모리 시스템을 포함한 몇 가지 기능은 4.4BSD Lite에도 이용되고 있다.
2. 1. 개발 배경
1980년대 중반, 미국 국방부 고등연구계획국(DARPA)은 실험용 멀티프로세서 컴퓨터용 OS 개발을 지원했다. 이 제안이 채택되어 1985년부터 카네기 멜론 대학교에서 Mach 프로젝트가 시작되었으며, 초기에는 슈퍼컴퓨터 워크벤치 프로젝트라고 불렸다.당시 연구기관에서 주로 사용되던 4.2 BSD 유닉스는 가상 메모리, 멀티프로세서 머신에 대한 비효율적인 구조, 이식성이 좋지 않은 코드 등 여러 문제점을 안고 있었다. Mach는 이러한 문제점을 해결하고, 멀티프로세서 지원, 거대한 메모리 공간의 효율적 이용, 분산 시스템 지원, 고속 네트워크 투명 프로세스 간 통신(IPC) 지원, 이식성이 높은 구조, 그리고 4.3BSD와의 완전한 호환성을 목표로 개발되었다.
Mach는 처음에는 기존 4.2BSD 커널에 추가 코드를 직접 작성하여 호스팅하는 방식으로 개발되었다.[17] 1986년까지 DEC VAX에서 실행될 수 있을 정도로 완성되었고, 이후 IBM RT PC 및 선 마이크로시스템즈의 68030 기반 워크스테이션용 버전이 출시되면서 이식성을 입증했다.[17] 1987년에는 Encore Multimax 및 Sequent Balance 머신을 포함하여 다중 프로세서 시스템에서 실행할 수 있는 능력을 테스트했으며, 같은 해 릴리스 1과 다음 해 릴리스 2가 공개되었다.[17]
초기 Mach 버전에는 커널에 4.3BSD의 대부분이 포함되어 있어, 실제로는 기반 UNIX보다 더 큰 커널을 생성했다(POE 서버).[17] 그러나 UNIX 레이어를 사용자 공간으로 이동하여 쉽게 작업하고 대체할 수 있도록 하는 것이 목표였다.[17]
1990년에 출시된 Mach 3는 여러 플랫폼으로 이식되어 상업 시장에서 상당한 관심을 불러일으켰다.[17] 오픈 소프트웨어 재단(OSF)은 향후 버전의 OSF/1을 Mach 2.5에서 호스팅하고 Mach 3도 조사할 것이라고 발표하면서 가시성이 크게 높아졌다.[17] Mach 2.5는 NeXTSTEP 시스템과 여러 상업용 다중 프로세서 공급업체에 선택되었다.[17] Mach 3는 IBM의 Workplace OS를 포함하여 마이크로커널용 다른 운영 체제 부분을 이식하려는 여러 노력과 애플에서 클래식 Mac OS의 크로스 플랫폼 버전을 구축하려는 여러 노력으로 이어졌다.[17] Mach 3.0 환경에서 DOS 응용 프로그램을 실행하는 지원은 이전의 클래식 Mac OS 및 MultiFinder를 Mach 2.5에서 실행하는 작업을 따라 연구자들에 의해 시연되었다.[10]
2. 2. 주요 이정표
Mach 커널 개발은 여러 주요 단계를 거쳤다. 1986년 Mach 1.0이 출시되어 연구 개발의 진척을 보고했다. 새로운 가상 메모리와 IPC가 구현되었지만, 태스크와 스레드는 아직 구현되지 않았다. 1988년에는 태스크와 스레드를 구현하고 몇 가지 개선 사항을 적용한 Mach 2.0이 출시되었다. 초기 NeXTSTEP의 커널로 사용되었다.Mach는 오픈 소프트웨어 재단(OSF)이 향후 버전의 OSF/1을 Mach 2.5에서 호스팅하고 Mach 3도 조사할 것이라고 발표하면서 가시성이 크게 높아졌다.[17] NFS가 구현된 Mach 2.5는 OSF/1 외에도 NeXTSTEP 시스템과 여러 상업용 다중 프로세서 공급업체에 선택되었다. 1989년에 출시된 Mach 3.0은 마이크로커널화되었으며, MkLinux의 커널로도 사용되었다. Mach 3.0은 macOS의 커널 ''XNU''에도 사용되고 있지만, 구현은 마이크로커널이 아니다.
초창기부터 4.3BSD UNIX와 호환되는 것으로 결정되었기 때문에, 4.3BSD의 커널소스 코드를 기반으로 수정을 가하여 구현했다. 실제로는 3.0부터가 마이크로커널이며, Mach 2.5까지는 마이크로커널이 아니다.
리처드 라시드 교수가 1991년에 마이크로소프트로 이적한 후에도 1994년까지 카네기 멜론 대학교에서 Mach 프로젝트는 계속되었다. 이후 Mach의 개발은 유타 대학교의 Mach 4 프로젝트, Free Software Foundation영어의 Hurd 프로젝트, 카네기 멜론 대학교의 ART 프로젝트 등으로 계승되었다. 유타 대학교는 Mach 4로 분산 환경을 고려한 스레드 및 메시지 개선, Linux 장치 드라이버 인터페이스 구현을 했다. GNU 프로젝트에서는 이 Mach 4를 기반으로 개량을 더하여, GNU Mach로 공개하고 있다. ART 프로젝트에서는 분산 실시간 OS 실현을 위해, 실시간 구동형 스케줄러 등을 Mach에 통합하여, Real-Time Mach영어로 공개되었다. 이러한 연구 개발은 Mach뿐만 아니라 BSD에도 피드백되어, 가상 메모리 시스템을 포함한 몇 가지 기능은 4.4BSD Lite에도 이용되고 있다.
3. Mach의 기본 개념
Mach는 명확하게 정의된 UNIX 기반의 이식성이 뛰어난 Accent를 생산하려는 노력으로 시작되었다.[7][8] 그 결과 몇 가지 일반적인 개념이 간략하게 정리되었다.
- "태스크"는 실행할 "스레드"를 생성하는 시스템 리소스 집합이다.
- "스레드"는 태스크 컨텍스트 내에 존재하며 태스크의 리소스를 공유하는 단일 실행 단위이다.
- "포트"는 태스크 간 통신을 위한 보호된 메시지 큐이다. 태스크는 각 포트에 대한 전송 및 수신 권한(권한)을 소유한다.
- "메시지"는 유형이 지정된 데이터의 모음이며, 특정 태스크 또는 스레드가 아닌 포트로만 전송할 수 있다.
Mach는 Accent의 IPC 개념을 기반으로 개발되었지만, 시스템을 훨씬 더 UNIX와 유사하게 만들어 약간의 수정만으로 UNIX 프로그램을 실행할 수 있게 했다. 이를 위해 Mach는 양방향 IPC의 각 엔드포인트를 나타내는 포트를 도입했다. 포트는 UNIX의 파일과 같은 권한 개념을 가지고 있어 UNIX와 매우 유사한 보호 모델을 적용할 수 있었다. 또한 Mach는 사용자 공간 프로그램이 하드웨어 제어와 같은 작업을 처리할 수 있도록 운영 체제에만 부여되는 권한을 모든 프로그램이 처리할 수 있도록 했다.
Mach에서는 UNIX와 마찬가지로 운영 체제가 다시 주로 유틸리티 모음이 된다. UNIX와 마찬가지로 Mach는 하드웨어를 처리하기 위한 드라이버 개념을 유지한다. 따라서 현재 하드웨어에 대한 모든 드라이버를 마이크로커널에 포함해야 한다. 하드웨어 추상화 계층 또는 엑소커널을 기반으로 하는 다른 아키텍처는 드라이버를 마이크로커널 밖으로 이동할 수 있다.
UNIX와의 주요 차이점은 유틸리티가 파일을 처리하는 대신 모든 "태스크"를 처리할 수 있다는 것이다. 더 많은 운영 체제 코드가 커널에서 사용자 공간으로 이동하여 훨씬 더 작은 커널이 생성되었고 마이크로커널이라는 용어가 부상했다. 기존 시스템과 달리 Mach에서는 프로세스 또는 "태스크"가 여러 스레드로 구성될 수 있다. 이는 최신 시스템에서 일반적이지만 Mach는 이러한 방식으로 태스크와 스레드를 정의한 최초의 시스템이었습니다. 커널의 역할은 본질적으로 운영 체제에서 "유틸리티"를 실행하고 하드웨어에 대한 액세스를 제공하는 것으로 축소되었다.
포트의 존재와 IPC의 사용은 아마도 Mach와 기존 커널 간의 가장 근본적인 차이점일 것이다. UNIX에서 커널을 호출하는 것은 ''시스템 호출'' 또는 ''트랩''이라는 연산으로 구성된다. 프로그램은 라이브러리를 사용하여 데이터를 메모리의 잘 알려진 위치에 배치한 다음 ''오류''라는 오류 유형을 발생시킨다. 시스템이 처음 시작되면 커널은 모든 오류의 "처리자"로 설정된다. 따라서 프로그램이 오류를 발생시키면 커널이 제어권을 넘겨받아 전달된 정보를 검사한 다음 지침을 수행한다.
Mach에서는 이 역할을 위해 IPC 시스템을 사용했다. 시스템 기능을 호출하기 위해 프로그램은 커널에 포트에 대한 액세스를 요청한 다음 IPC 시스템을 사용하여 해당 포트로 메시지를 보낸다. 다른 시스템에서 시스템 기능 요청에 시스템 호출이 필요한 것처럼 메시지를 보내는 데 시스템 호출이 필요하지만, Mach에서는 메시지를 보내는 것이 커널이 하는 거의 모든 일입니다. 실제 요청 처리는 다른 프로그램에 달려 있다.
태스크가 이제 Mach가 메시지 처리 중에 정지 및 해제할 수 있는 여러 코드 스레드로 구성되므로 IPC 메커니즘을 사용한 메시지 전달을 통해 스레드 및 동시성 지원이 향상되었다. 이를 통해 시스템은 대부분의 Mach 메시지에서와 같이 공유 메모리를 직접 사용하거나 필요한 경우 메시지를 다른 프로세서로 복사하는 코드를 추가하여 여러 프로세서에 분산될 수 있습니다. 기존 커널에서는 이를 구현하기가 어렵습니다. 시스템은 서로 다른 프로그램이 서로 다른 프로세서에서 동일한 메모리 영역에 쓰려고 하지 않는지 확인해야 합니다. 그러나 Mach 포트를 사용하면 이 작업이 명확하게 정의되고 구현하기 쉬워 Mach 포트가 해당 시스템에서 first-class citizen이 되었습니다.
IPC 시스템은 초기에 성능 문제를 겪었으므로 성능을 향상시키기 위해 몇 가지 전략이 개발되었다. 이전 버전인 Accent와 마찬가지로 Mach는 메시지를 한 프로그램에서 다른 프로그램으로 물리적으로 전달하기 위해 단일 공유 메모리 메커니즘을 사용했습니다. 메시지를 물리적으로 복사하는 것은 너무 느릴 것이므로 Mach는 머신의 메모리 관리 장치 (MMU)에 의존하여 데이터를 한 프로그램에서 다른 프로그램으로 빠르게 매핑합니다. 데이터가 기록될 경우에만 "사본 쓰기"라는 프로세스를 거쳐 물리적으로 복사해야 합니다.
메시지는 또한 커널에 의해 유효성이 검사되어 시스템을 구성하는 많은 프로그램 중 하나가 충돌하는 불량 데이터를 방지했습니다. 포트는 의도적으로 UNIX 파일 시스템 개념을 모델링했습니다. 이를 통해 사용자는 기존 파일 시스템 탐색 개념을 사용하여 포트를 찾을 수 있으며 파일 시스템에서와 마찬가지로 권한을 할당할 수 있습니다.
이러한 시스템에서의 개발은 더 쉬울 것입니다. 작업 중인 코드는 기존 도구를 사용하여 빌드할 수 있는 기존 프로그램에 존재할 뿐만 아니라 동일한 도구를 사용하여 시작, 디버그 및 종료할 수도 있습니다. 모노커널을 사용하면 새 코드의 버그로 인해 전체 시스템이 다운되고 재부팅이 필요하지만 Mach에서는 프로그램만 다시 시작하면 됩니다. 또한 사용자는 필요에 따라 기능을 포함하거나 제외하도록 시스템을 맞춤화할 수 있습니다. 운영 체제는 단순히 프로그램 모음이므로 다른 프로그램과 마찬가지로 실행하거나 종료하여 부분을 추가하거나 제거할 수 있습니다.
; 태스크
Mach에서 태스크는 CPU 실행 시간(스레드)이나 메모리 객체, 주소 공간, 포트 등 시스템 리소스의 집합체이다.[7][8] 유닉스의 프로세스는 계산 처리와 그에 필요한 자원을 일체화하고 있는 반면, Mach는 계산 처리와 그 자원을 분리하는 동시에 독립적으로 제어할 수 있도록 했다.
; 스레드
스레드는 CPU의 처리 단위이며, 병렬로 동작할 수 있다.[7][8] 스레드는 반드시 하나의 태스크에 속하며, 그 태스크의 모든 자원에 접근할 수 있다. 태스크는 여러 개의 스레드를 가질 수도 있다. 자원의 보호는 태스크를 단위로 이루어지므로, UNIX 프로세스와 달리 메모리 공간 등의 자원과 직접 관련되지 않는다. 결과적으로 스레드의 생성이나 전환이 고속으로 이루어지며, 멀티프로세서에도 최적화된다.
; 포트
Mach는 초기 UNIX의 파이프 기능을 통합하여 포트라는 새로운 개념을 구현했다.[7][8] 포트는 태스크 간 통신을 위해 사용되는 보호된 메시지 큐이며, 데이터 전달을 위한 통신 채널이다. 구조화된 메시지 전달을 실현하고 네트워크를 넘어서는 통신을 추상화하며, 고속, 효율적인 메시지 송수신(out-of-line 데이터)을 가능하게 한다. 태스크는 각 포트에 대한 전송 및 수신 권한을 소유한다.
로체스터 대학교에서 개발된 알레프 커널은 포트 개념을 도입한 초기 시스템 중 하나이다. 알레프에서 포트는 본질적으로 공유 메모리 구현이었다. 커널은 메모리와 포트를 포함한 하드웨어 접근을 제공하고, 포트 시스템을 사용하는 기존 프로그램은 장치 드라이버부터 사용자 프로그램까지 모든 동작을 구현했다.
알레프는 데이터 제너럴 이클립스 미니컴퓨터에서 구현되었고, 이 기계는 프로그램 간 메모리 복사로 인해 성능 오버헤드가 컸다. 그러나 새로운 세대의 중앙 처리 장치(CPU)가 메모리 관리 장치(MMU)와 함께 출시되면서, 가상 메모리 시스템에서 제공하는 사본 시 쓰기(COW) 메커니즘을 사용하여 포트 개념에 대한 새로운 솔루션을 제공했다. 프로그램 간 데이터를 복사하는 대신, MMU에 동일한 메모리에 대한 접근을 제공하여 프로세스 간 통신(IPC) 시스템을 더 높은 성능으로 구현했다.
이 개념은 카네기 멜론 대학교에서 PERQ 워크스테이션에 알레프를 적용하고 사본 시 쓰기를 사용하여 구현되었다.
; 메시지
커널이 관리하는 IPC의 데이터 객체이다.[7][8] 메시지는 여러 개의 유형화된 데이터의 집합이다. 메시지는 특정 태스크 또는 스레드가 아닌 포트로만 전송할 수 있다. 커널에 의해 관리되며, 포트를 통해 프로세스 간의 통신에 사용된다.
; 메모리 객체
Mach는 가상 메모리 관리 기능을 커널 내부(내부 페이저)뿐만 아니라 사용자 레벨(외부 페이저)에도 개방하고 있다.[7][8] 페이저가 조작하는 메모리의 기본적인 추상 개념을 메모리 객체라고 한다. 4.3BSD에서는 실현할 수 없었던 copy-on-write나 map-on-reference와 같은 지연 평가 메커니즘이 구현되어, 효율적인 메모리 자원 이용이 가능하다.
이러한 Mach에서 탄생한 기본 개념은, 그 후의 UNIX뿐만 아니라, 수많은 OS에 막대한 영향을 미쳤다.
3. 1. 태스크 (Task)
Mach에서 태스크는 CPU 실행 시간(스레드)이나 메모리 객체, 주소 공간, 포트 등 시스템 리소스의 집합체이다.[23][24] 유닉스의 프로세스는 계산 처리와 그에 필요한 자원을 일체화하고 있는 반면, Mach는 계산 처리와 그 자원을 분리하는 동시에 독립적으로 제어할 수 있도록 했다.3. 2. 스레드 (Thread)
스레드는 CPU의 처리 단위이며, 병렬로 동작할 수 있다.[23] 스레드는 반드시 하나의 태스크에 속하며, 그 태스크의 모든 자원에 접근할 수 있다. 태스크는 여러 개의 스레드를 가질 수도 있다. 자원의 보호는 태스크를 단위로 이루어지므로, UNIX 프로세스와 달리 메모리 공간 등의 자원과 직접 관련되지 않는다. 결과적으로 스레드의 생성이나 전환이 고속으로 이루어지며, 멀티프로세서에도 최적화된다.[23]3. 3. 포트 (Port)
Mach는 초기 UNIX의 파이프 기능을 통합하여 포트라는 새로운 개념을 구현했다.[23] 포트는 태스크 간 통신을 위해 사용되는 보호된 메시지 큐이며, 데이터 전달을 위한 통신 채널이다. 구조화된 메시지 전달을 실현하고 네트워크를 넘어서는 통신을 추상화하며, 고속, 효율적인 메시지 송수신(out-of-line 데이터)을 가능하게 한다. 태스크는 각 포트에 대한 전송 및 수신 권한을 소유한다.로체스터 대학교에서 개발된 알레프 커널은 포트 개념을 도입한 초기 시스템 중 하나이다. 알레프에서 포트는 본질적으로 공유 메모리 구현이었다. 커널은 메모리와 포트를 포함한 하드웨어 접근을 제공하고, 포트 시스템을 사용하는 기존 프로그램은 장치 드라이버부터 사용자 프로그램까지 모든 동작을 구현했다.
알레프는 데이터 제너럴 이클립스 미니컴퓨터에서 구현되었고, 이 기계는 프로그램 간 메모리 복사로 인해 성능 오버헤드가 컸다. 그러나 새로운 세대의 중앙 처리 장치(CPU)가 메모리 관리 장치(MMU)와 함께 출시되면서, 가상 메모리 시스템에서 제공하는 사본 시 쓰기(COW) 메커니즘을 사용하여 포트 개념에 대한 새로운 솔루션을 제공했다. 프로그램 간 데이터를 복사하는 대신, MMU에 동일한 메모리에 대한 접근을 제공하여 프로세스 간 통신(IPC) 시스템을 더 높은 성능으로 구현했다.
이 개념은 카네기 멜론 대학교에서 PERQ 워크스테이션에 알레프를 적용하고 사본 시 쓰기를 사용하여 구현되었다.
3. 4. 메시지 (Message)
커널이 관리하는 IPC의 데이터 객체이다.[23] 메시지는 여러 개의 유형화된 데이터의 집합이다. 메시지는 특정 태스크 또는 스레드가 아닌 포트로만 전송할 수 있다. 커널에 의해 관리되며, 포트를 통해 프로세스 간의 통신에 사용된다.[23]3. 5. 메모리 객체 (Memory Object)
Mach는 가상 메모리 관리 기능을 커널 내부(내부 페이저)뿐만 아니라 사용자 레벨(외부 페이저)에도 개방하고 있다.[24] 페이저가 조작하는 메모리의 기본적인 추상 개념을 메모리 객체라고 한다. 4.3BSD에서는 실현할 수 없었던 copy-on-write나 map-on-reference와 같은 지연 평가 메커니즘이 구현되어,[24] 효율적인 메모리 자원 이용이 가능하다.4. 기술적 특징 및 영향
4. 1. 유닉스 파이프와의 관계
유닉스 파이프는 프로그램 간에 비구조적인 바이트 스트림으로 데이터를 이동할 수 있게 하는 추상화이다. 파이프를 사용하여 사용자는 여러 프로그램을 연결하여 작업을 완료하고, 여러 개의 연속적인 소규모 프로그램을 통해 데이터를 전달할 수 있다. 이는 전체 작업을 처리할 수 있는 단일의 대형 프로그램이 필요하거나, 리소스가 많이 들고 시간이 오래 걸리는 파일을 사용하여 데이터를 전달하는 당시의 일반적인 운영 체제와는 대조적이다.파이프는 기본 입출력 시스템을 기반으로 구축되었으며, 이 시스템은 드라이버가 작업을 완료하기를 기다리는 동안 주기적으로 "차단"될 것으로 예상되는 모델을 기반으로 한다. 예를 들어, 프린터 드라이버는 텍스트 한 줄을 라인 프린터로 보내고 프린터가 해당 줄의 인쇄를 완료할 때까지 아무것도 할 수 없을 수 있다. 이 경우 드라이버는 차단되었음을 나타내고, 운영 체제는 프린터가 더 많은 데이터를 받을 준비가 될 때까지 다른 프로그램이 실행되도록 허용한다. 파이프 시스템에서 제한된 리소스는 메모리였으며, 하나의 프로그램이 파이프에 할당된 메모리를 채우면 자연스럽게 차단되었다. 일반적으로 이로 인해 데이터를 소비하는 프로그램이 실행되어 파이프가 다시 비워지게 된다. 다음 프로그램이 사용하기 전에 전체 파일을 읽거나 써야 하는 파일과 달리, 파이프는 프로그래머의 개입 없이 여러 프로그램 간에 데이터를 조각별 방식으로 이동할 수 있도록 했다.
그러나 메모리 버퍼에 파이프를 구현하면 프로그램 간에 데이터를 복사해야 했으며, 이는 시간이 오래 걸리고 리소스가 많이 소모되는 작업이었다. 이로 인해 파이프 개념은 빠른 처리나 낮은 대기 시간이 필요한 작업, 예를 들어 대부분의 장치 드라이버에는 적합하지 않았다. 대신 운영 체제의 커널 및 대부분의 핵심 기능은 단일의 대형 프로그램으로 작성되었다. 컴퓨터 네트워크와 같은 새로운 기능이 운영 체제에 추가되면 커널의 크기와 복잡성도 증가했다.
Mach의 IPC 메커니즘은 이러한 유닉스 파이프의 개념을 확장한 것이다. Mach는 구조화된 메시지 전달과 네트워크 투명 통신을 지원한다.
4. 2. 성능 문제와 해결 노력
Mach는 초기 버전에 성능 문제가 있었으며, 특히 IPC 오버헤드가 큰 문제였다.[11][12] 1997년 하드웨어 벤치마크에서 Mach 3.0 기반 유닉스 단일 서버 구현은 기본 유닉스보다 약 50% 느린 것으로 나타났다.[11][12]성능 문제의 원인을 분석한 결과, IPC 자체보다는 커널이 메시지에 대해 실행하는 추가 작업(포트 권한 검사, 메시지 유효성 검사 등)이 주요 오버헤드의 원인으로 밝혀졌다.[13] 486DX-50에서 표준 유닉스 시스템 호출은 21μs가 걸린 반면, Mach IPC는 114μs가 걸렸는데, 이 중 18μs만이 하드웨어 관련이고 나머지는 커널의 추가 작업 시간이었다.[13] 아무것도 하지 않는 시스템 호출의 경우에도 BSD는 40μs, 사용자 공간 Mach 시스템은 500μs 미만이 소요되었다.
Mach가 처음 2.x 버전에서 사용되었을 때 성능은 기존 모놀리식 운영 체제보다 최대 25% 느렸다.[1] 하지만 다중 프로세서 지원과 쉬운 이식성을 제공했기 때문에 이 정도 성능 저하는 용인할 수 있다고 여겨졌다. Mach 3에서는 오버헤드가 더욱 커져 MIPS R3000에서 Ultrix와의 벤치마크 결과 일부 작업에서 최대 67%의 성능 저하가 나타났다.[14]
시스템 시간을 가져오는 작업은 사용자 공간 서버에 대한 IPC 호출을 포함하는데, 호출자는 커널로 트랩하여 컨텍스트 전환 및 메모리 매핑을 발생시킨다. 커널은 호출자의 접근 권한과 메시지 유효성을 확인하고, 사용자 공간 서버로 호출을 완료하기 위해 다시 컨텍스트 전환 및 메모리 매핑이 발생한다. 결과를 반환하기 위해 이 과정이 반복되어 총 4번의 컨텍스트 전환 및 메모리 매핑과 두 번의 메시지 확인이 추가된다. 이러한 오버헤드는 여러 서버를 거치는 복잡한 서비스에서 더욱 커진다.
물리적 메모리 부족 시 발생하는 페이징 문제도 성능 저하의 한 원인이었다. 기존 모놀리식 운영 체제에서는 커널의 어떤 부분이 다른 부분을 호출하는지 알 수 있어 페이저를 미세 조정할 수 있었지만, Mach에서는 커널이 운영 체제의 구성을 알 수 없어 불가능했다. Mach 3은 사용자 공간 페이저에 의존하려 했지만, IPC 비용으로 인해 효과가 없었다. 멀티프로세서 시스템에서 메모리 액세스 속도 증가율이 CPU 성능 증가율보다 훨씬 낮아 "캐시 미스" 발생 시 IPC 호출 속도가 느려지는 문제도 있었다.
이러한 문제점을 해결하기 위해 개발자들은 서버 간 호출이 없는 모듈로 코드를 격리하거나, 운영 체제 기능을 단일 서버에 배치하는 방법을 사용했다.[15] 또한 개발 편의를 위해 운영 체제 서버를 사용자 공간 또는 커널 공간에서 실행할 수 있도록 허용했다. 이를 통해 사용자 공간에서 개발 및 디버깅 후 커널 공간으로 이동하여 성능을 향상시킬 수 있었다. 이러한 방식을 ''공동 위치(colocation)''라고 하며, Lites, MkLinux, OSF/1, NeXTSTEP/OPENSTEP/macOS, Chorus 마이크로 커널 등에 사용되었다.
Mach 4에서는 프로그램 코드를 프로그램의 로컬 공간으로 마이그레이션하는 "셔틀" 개념을 도입하고, 내장된 공동 위치 프리미티브를 도입하는 등 보다 급진적인 개선을 시도했다.
1990년대 중반까지 마이크로 커널 시스템에 대한 연구는 정체되었지만, Mach 커널은 macOS 및 iOS의 XNU 하이브리드 커널(OSFMK 7.3)과 OSF/1에서 사용되었다.[16][17] XNU에서 파일 시스템, 네트워킹 스택, 프로세스 및 메모리 관리는 커널에서 구현되며, 사용자 모드에서는 시스템 호출을 통해 호출된다.[18][19]
추가 분석 결과, 실제 문제의 대부분은 커널이 포트 접근 권한을 확인하는 등의 작업 시간 때문으로 밝혀졌다.[6] 이는 휴대폰이나 로봇과 같은 단일 사용자 운영 체제에서는 불필요한 기능일 수 있으며, Mach의 선택적 운영 체제가 가치 있는 시스템 종류이다.
이러한 분석을 바탕으로 2세대 마이크로커널이 등장했는데, 이들은 시스템 복잡성을 더욱 줄이고 거의 모든 기능을 사용자 공간에 배치했다. L4 커널 (버전 2)은 7개의 시스템 호출만 포함하고 12k의 메모리를 사용하는 반면,[3] Mach 3는 약 140개의 함수를 포함하고 약 330k의 메모리를 사용한다.[3] 486DX-50에서 L4의 IPC 호출은 5μs로,[19] 유닉스 시스템 호출보다 빠르고 Mach보다 20배 이상 빠르다. L4는 권한 부여나 보안을 사용자 공간 프로그램에 맡겨 오버헤드를 조절할 수 있다.
공동 배치 모드에서 MkLinux와 사용자 공간에서 실행되는 L4 포트를 비교했을 때, L4는 Mach의 29%에 비해 약 5%–10%의 오버헤드를 추가했다.[12]
4. 3. Mach 기반 소프트웨어
Mach는 다양한 운영 체제의 기반이 되었다.[20]5. 한국에 미친 영향
5. 1. macOS와 iOS의 기반 기술
Mach는 애플의 macOS와 iOS, iPadOS, watchOS, tvOS 운영 체제의 핵심 구성 요소인 XNU 커널의 기반 기술이다.[20] macOS와 iOS는 한국에서 널리 사용되는 운영 체제이며, 특히 macOS는 한국의 많은 개발자들이 사용하는 개발 환경이고, iOS는 한국 스마트폰 시장에서 큰 점유율을 차지하고 있는 아이폰의 운영 체제이다. 따라서 Mach는 한국의 소프트웨어 개발 및 모바일 기술 발전에 간접적으로 기여했다고 볼 수 있다.5. 2. 오픈 소스 생태계 기여
5. 3. 기술 연구 및 개발 촉진
참조
[1]
dictionary
Mach: Define Mach at Dictionary.com
http://www.dictionar[...]
2016-12-12
[2]
웹사이트
CMU CS Project Mach Home Page
https://www.cs.cmu.e[...]
[3]
서적
The Design and Implementation of the 4.4 BSD Operating System
https://books.google[...]
Addison-Wesley
1996-04-30
[4]
뉴스
Adios Avie
http://blog.sfgate.c[...]
The Technology Chronicles
2006-03-27
[5]
웹사이트
Dario A. Giuse, PhD, MS, FACMI
https://www.amia.org[...]
[6]
웹사이트
A Technical History of Apple's Operating Systems
http://www.osxbook.c[...]
osxbook.com
2011-03-18
[7]
conference
Mach Threads and the Unix Kernel: The Battle for Control
http://repository.cm[...]
USENIX
[8]
conference
Mach: A New Kernel Foundation for UNIX Development
http://www.cs.ubc.ca[...]
USENIX
2015-04-04
[9]
문서
Appendix B
https://www.os-book.[...]
[10]
간행물
DOS as a Mach 3.0 Application
https://archive.org/[...]
Usenix Association
2024-01-19
[11]
웹사이트
Microkernel modularity with integrated kernel performance
http://www.cs.utah.e[...]
2019-02-19
[12]
conference
The performance of μ-kernel-based systems
http://os.inf.tu-dre[...]
1997-10
[13]
conference
Improving IPC by Kernel Design
[14]
간행물
The impact of operating system structure on memory system performance
[15]
웹사이트
A Brief Description of the POE server
https://www.cs.cmu.e[...]
1994-04-14
[16]
AV media
WWDC 2000 Session 106 - Mac OS X: Kernel
https://www.youtube.[...]
[17]
conference
A Trusted, Scalable, Real-Time Operating System Environment
https://pdfs.semanti[...]
[18]
웹사이트
Kernel Architecture Overview
https://developer.ap[...]
Apple Inc.
2015-03-03
[19]
웹사이트
Boundary Crossings
https://developer.ap[...]
Apple Inc.
2015-03-03
[20]
Citation
Mach Overview
https://developer.ap[...]
2013-02-26
[21]
문서
哲学者の[[エルンスト・マッハ]]と同じスペル Machであることから'''マッハ'''と呼ばれることもあるが、正式にはマークと呼ぶのが正しいとされる。
[22]
문서
Darwin Releases
http://www.opensourc[...]
[23]
문서
共有メモリ、4.2BSD以降でのSocket、SystemVでの msgrop() など
[24]
문서
メモリを要求された時点で確保するのではなく、使用された時点で確保する方式。メモリがコピーされた場合も、実際の動作としてはコピーではなく仮想記憶機構を利用して多重参照するだけとし、実際にコピーを行うのは、書き換えられた領域のみとなる。結果として必要最小限のメモリ確保、メモリコピーしか行われないというメリットを持つ
[25]
문서
Mach(1993)
[26]
웹인용
Unraveling the Mac OS X Microkernel Myth
http://www.roughlydr[...]
2012-03-05
본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.
문의하기 : help@durumis.com