이 글을 읽기전에 먼저 아래의 두개의 글을 읽고 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 해킹에 관심을 가지면서 참고 할 만한 자료가 좀 있다.
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를 공개하였다. 물론 리눅스 사용자들은 계속 원래 방식을 쓰는 것으로 보인다.
[launchd in Depth - AFP548]
[Leopard Wishlist: Launch Control]
부팅 과정에서 launchd 는
/etc/rc 실행하고,
/System/Library/LaunchAgents
와/Library/LaunchDaemons
부분을 실행 하고,- 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 |