Mac OS X 의 부팅 순서 #3 - launchd

블라블라 2007. 10. 10. 01:20 Posted by 지민아빠

이 글을 읽기전에 먼저 아래의 두개의 글을 읽고 PC의 BIOS 와 인탤맥의 EFI 펌웨어가 다르다는 것을 참고 하시면 좀 더 도움이 될 것 같다.

2007/10/09 - Mac OS X 의 부팅 순서 #2 - EFI
2007/10/08 - Mac OS X 의 부팅 순서 #1 - BIOS, APM

일단 펌웨어와 부트로더를 통해서 커널이 로딩되고 launchd 가 로딩 된다는데 까지는 위에서 언급 했다.

그 이후는 궁금했던 영역에서 벗어나는 관계로 살펴보지 않을 것이다. 그럼 Mac OS X 의 커널 과 유저랜드가 어떻게 생겼는지 좀 살펴 보면 대충 부팅 과정을 살펴 보는 것은 마무리가 될 것 같다.

다행이 이 부분은 요즘들어 많은 사람들이 iPhone 해킹에 관심을 가지면서 참고 할 만한 자료가 좀 있다.


사용자 삽입 이미지
이하는 iPhone OS X Architecture: the BSD Unix Userland글의 번역에서 관심 영역에 필요한 부분을 발췌해 아주 약간 재구성한 내용이다.

The Mac OS X Structure.

OS X 계열의 Kernel 은 모두 Mach Kernel 을 사용 한다. (Apple TV, iPhone, Mac OS X 전부 동일) 여기에는 Kernel Extension 이라는게 들어가게 된다. (참고로 iPhone에 사용된 두가지 종류의 kext는 USB 입력 과 VPN 이란다.) Mac OS X 의 맨 밑단에는 Kernel 이 있고 그 위에는 Mac OS X의 BSD 유닉스 환경이 놓여 있다. 커널 바깥쪽에서 돌아가는 프로세스는, 유닉스에서 유저랜드(userland)에서 돌아간다고 말한다. 맥에서 BSD 유닉스 유저랜드는 보통 데스크톱 사용자가 볼 수 없다. (콘솔을 띄워서만 볼 수 있다.)


The Mac OS X boot step.

일단 EFI 부트로더가 디스크로부터 커널을 읽어들여 RAM으로 불러들이면, 그 후, 커널은 kext를 읽고 BSD 유닉스 유저랜드를 설정한다. 평상시 부팅 과정에는 다중 사용자 환경도 여기에 포함되며, 로그인 창을 띄우게 된다. 특정 사용자가 로그인하면 맥 데스크톱 환경이 설정된다. 이 설정은 디렉토리 안에 저장된 사용자 설정에 따른다.


launchd

표준형 유닉스 배포폰과 맥에서 /bin은 머신 레벨 유닉스 애플리케이션(바이너리)이 있는 곳이다. 터미널셸인 bash나 파일복사인 cp, 파일 삭제인 rm 등이 들어있다. 여기에 launchd 명령을 내리는 launchctl 도 들어있다.

유닉스에서의 세 개의 도메인

  • 머신 레벨 소프트웨어: 모든 사용자용으로 설치
  • 시스템 레벨 소프트웨어: 시스템의 중요 기능 관련
  • 사용자 레벨 소프트웨어: 특정 사용자만으로 설치


표준형 유닉스 배포폰과 맥에서 /sbin은 시스템 레벨 유닉스 애플리케이션(시스템 바이너리)이 있는 곳이다. 디스크 확인용인 fsck와 네트워크 파이어월인 ipfw, 라우팅인 route, 디스크 파일시스템은 mount, 그리고 맥오에스텐 상의 launchd (프로세서 론쳐)가 들어 있다.  kextload 도 여기 들어 있다.


launchd는 여러 가지 유닉스 프로세스를 교체하기 위해 애플이 만들어낸 메커니즘이다. 그 대상은 다음과 같다.

  • 실행시, 혹은 사용자 로그인 시에 프로세스 시작
  • 일정에 따른 프로세스 시작
  • 경로 지정의 파일 변화에 따른 프로세스 시작
  • 리퀘스트의 요구에 따른 프로세스 시작
  • 로깅 레벨과 론치 아규먼트(argument)의 지정
  • 론치 환경 변수의 지정과 작업 디렉토리 프로세스
  • 리소스 제한과 권한 지정
launchd가 처음 소개된 것은 맥오에스텐 타이거이지만, crin이나 init, rc, scripts, inet, xinet, at, watchdog과 같은 기존 유닉스 프로세스도 계속 남아 있다. 그런데 레퍼드에서는 launchd만 남을 예정이다. 애플의 최신 레퍼드 OS 기술에 기반한 아이폰도 launchd만 사용한다.


애플은 또한 다른 유닉스 배포폰들이 쓰게 하기 위해, launchd를 공개하였다. 물론 리눅스 사용자들은 계속 원래 방식을 쓰는 것으로 보인다.
[launchd in Depth - AFP548]
[Leopard Wishlist: Launch Control]


부팅 과정에서 launchd 는

  1. /etc/rc 실행하고,
  2. /System/Library/LaunchAgents/Library/LaunchDaemons 부분을 실행 하고,
  3. login window를 시작 시킨다.

사용자 삽입 이미지

이 글은 스프링노트에서 작성되었습니다.

'블라블라' 카테고리의 다른 글

페라리로 우주까지 갈 수 있을까?  (8) 2008.08.12
Mac OS X 의 부팅 순서 #2 - EFI  (0) 2007.10.09
Mac OS X 의 부팅 순서 #1 - BIOS, APM  (0) 2007.10.08
,

Mac OS X 의 부팅 순서 #2 - EFI

블라블라 2007. 10. 9. 19:34 Posted by 지민아빠

전번 글에서 BIOSAPM에 관해서 잠깐 언급 했었는데 이번에는 EFI 에 관해서 잠깐 언급을 하려고 한다.


Open Firmware

기존의 PowerPC 기반의 매킨토시에서는 Open Firmware라는 펌웨어를 사용했다.

이는 SUN에서 개발된 '하드웨어 독립적인' 펌웨어 인데, PowerPC 기반 Apple Macintosh , Sun Microsystems SPARC 기반 웤스테이션 및 서버, OLPC (100달러 노트북으로 유명) 데스크탑 에서 쓰인다. PowerPC 기반 Apple Macintosh에서 부팅순서는 간단히 아래와 같다.


  1. Open Firmware activates, does its thing to the hardware, and then loads BootX.
  2. BootX loads the kernel, spins the pinwheel cursor, and loads any needed kernel extensions (kexts), and then the kernel loads launchd.

출처: wikipedia

(참고로 Open Firmware 기반 부팅은 자세히 알고 싶으면 Booting Mac OS X 글을 참고)


Extensible Firmware Interface

인탤맥 에서는 EFI-compliant 펌웨어 를 사용한다. EFI는 인텔에서 PC에서도 Open Firmware 와 같은 기술을 제공하고자 만들어서 Itanium 에 장착된 기술이다.

Itanium 자체는 완전 망했지만 EFI 는 인탤기반 맥에서 채택되어 성공을 위하여 열심히 파닥파닥 날개짓을 하고 있다. (USB 도 사장될 위기에서 맥에서 채택된 이후 화려하게 떠오른 것과 비교되는 장면 이다. 참고로 M$와 하드웨어 업체는 인텔의 EFI 권고를 거절 했다. 현재는 64bit Windows Vista 에서 EFI 를 지원한다고 한다.) 2006년 1월 출시된 인탤맥 시스템 에서 부터 EFI가 사용 되었으며, 2006년 4월에 Boot Camp 가 나오면서 legacy BIOS를 지원하는 EFI 구현으로 펌웨어가 업데이트 되었다.


EFI 호환 펌웨어는 대략 아래 그림처럼 동작한다.

사용자 삽입 이미지

출처: wikipedia.org

여기서 OS의 Boot Loader는 EFI Application 에 해당한다. GUID Partition Table (GPT)가 관계가 있다. (귀차니즘으로 생략)


Intel based Macintosh boot step

인탤맥에서의 EFI 펌웨어의 동작은 PowerPC 기반 Apple Macintosh에서 부팅순서와거의비슷하다. 다만  Open Firmware 대신 EFI 가 사용되고 BootX 대신 boot.efi 가 사용된다.

  1. 펌웨어가 로딩되고,
  2. boot.efi 가 로딩 된 후에
  3. kernel 이 로딩되고,
  4. kernel 이 launchd 를 로딩 한다.


Mac OS X의 kernel 및 launchd 를 설명 하려면 Mac OS X 의 구조에 대하여 설명 하여야 한다. 이것들은 다음편에 살펴 보도록 하겠다.

2007/10/08 - Mac OS X 의 부팅 순서 #1

이 글은 스프링노트에서 작성되었습니다.

,

Mac OS X 의 부팅 순서 #1 - BIOS, APM

블라블라 2007. 10. 8. 19:27 Posted by 지민아빠

정확히는 인탤맥의 부팅 과정에 대해서 궁금해서 조사를 해 보았습니다. 일부 내용은 Imaging MacBooks: Understanding MBR, APM, & GPT 을 읽어보고 이해가 안가는 부분을 따로 찾아 본 내용을 보충해서 변경 했고, 일부 내용은 번역글을 그대로 인용했습니다.


Intel x86 PC Boot Step.
흔히 주변에서 보는 일반적 PC에는 거의 전부다 BIOS(펌웨어)라는 놈이 설치되어있다.

이 (IBM-PC 호환기종에 탑재된) BIOS라는 놈은

  1. 기본적인 (키보드,마우스,HDD 등의)하드웨어를 시작한 다음
  2. (기본설정 또는 사용자가 설정 한) Boot 순서 대로 부팅장치를 찾는다.
  3. 그 다음은 MBR 차례가 된다. MBR 은 활성 플래그를 알고 있는 4개의 Primary partition을 스캔하고, 파티션의 Volume Boot Record를 실행한다.
  4. MBR 또는 Volume Boot Record 에 걸쳐서 실행되는 Second Stage boot loader 의 영역은 NTLDR, LILO, GRUB 등의 Boot Loader가 담당하게 된다.


M$는 초기 파티션 4개의 제약을 극복하기 위하여 Extended MBR을 사용한다. 이것이 바로 윈도우에서 보이는 "논리 디스크 파티션"이라 불리는 놈을 이해하는 방법이다. 부팅이 불가능 하고 DOS에서 접근이 불가하다.


APM (Apple Partition Map)

애플은 하드웨어와 소프트웨어가 통일되어 있기 때문에 IBM-PC 호환기종의 PC 들을 신경 쓸 필요가 없다. 그래서 맥을 부팅시키기 위한 좀더 기능적인 APM 이란걸 만들었다. 맥에서는 Primary partition이나 Extended partition 의 개념이 없고, 시작 디스크로 선택된 파티션으로 부팅이 시작 되게 된다.


아래는 Imaging MacBooks: Understanding MBR, APM, & GPT 글의 내용을 번역 한 내용을 MBR과 APM, GPT라는 글에서 보고 인용, 맥에서 시동 디스크로 선택된 파티션으로 부팅하는 비교설명 이다.

  • T Firewire Target Mode로 부팅시킨다. 이경우 맥의 드라이브를 외장 파이어와이어 드라이브처럼 인식시킬 수 있다. PC는 이 기능을 할 수 없다.
  • C 머신을 외장 광드라이브에서 부팅시킬 수 있다. PC에서 이렇게 하려면, BIOS를 따로 설정해서 CD로부터 부팅할 수 있도록 한 다음, 시작 키를 눌러야 한다.
  • Option 운영체제가 있는, 즉 부팅 가능한 디바이스를 찾아서 선택 목록으로 나타낸다. PC는 역시 이 기능을 할 수 없다.
  • PR+Option+Apple PR-RAM을 소거하여 첫 번째로 발견하는 드라이브로 부팅시킨다. PC는 소거할 것이 없다.

애플의 ATM 조합인 Open Firmware와 PR-RAM은 PC가 수상하게시리 계속 갖지 못하고 있는 혁신적인 기능을 매우 많이 제공해 줘왔다. 이에 따라 인텔은 BIOS를 대체하고 맥과 같은 기능을 PC에 제공하기 위해 EFI라는 아키텍쳐를 새로이 디자인한다.

(영문 내용이 원문 인지는 확실 한 것 같은데, 어디가 처음 번역한 곳이고 어디가 펌한 내용인지는 출처 표기가 불분명 해서 잘 모르겠습니다.)


이 글은 스프링노트에서 작성되었습니다.

'블라블라' 카테고리의 다른 글

페라리로 우주까지 갈 수 있을까?  (8) 2008.08.12
Mac OS X 의 부팅 순서 #3 - launchd  (0) 2007.10.10
Mac OS X 의 부팅 순서 #2 - EFI  (0) 2007.10.09
,
BLOG main image
지민아빠의 해처리

카테고리

분류 전체보기 (68)
블라블라 (16)
정보검색 (15)
우주전쟁 (37)

최근에 올라온 글

지민아빠의 해처리

지민아빠's Blog is powered by Tattertools
Copyright by 지민아빠 [ http://www.ringblog.com ]. All rights reserved.

Tattertools DesignMyself!
지민아빠's Blog is powered by Textcube. Designed by Qwer999.