Mac OS X 부팅 과정에서 어떤 일이 발생합니까?
Mac OS X 부팅 및 시작 프로세스 중에 어떤 일이 발생하는지 궁금한 적이 있습니까? Mac OS X에서는 예전보다 조금 더 복잡해졌습니다. Classic Mac OS(System 9, 8, 7, 6)의 시대는 오래 전에 지나갔습니다. 우리는 항상 아이콘만으로 식별할 수 있었고 Extensions 폴더를 탐색하여 Mac 부팅 시 로드되고 발생하는 항목을 쉽게 조정할 수 있습니다.오늘날 Mac OS X의 Unix 기반으로 인해 많은 사용자는 배후에서 무슨 일이 일어나고 있는지 전혀 알지 못합니다.
그래서 Mac OS X 부팅 프로세스 중에 정확히 어떤 일이 발생합니까? Verbose 모드에서 Mac을 부팅하면 항상 더 나은 모습을 얻을 수 있지만 이것이 보이는 모든 것을 설명하지는 않습니다. 다행스럽게도 처음부터 끝까지 Mac OS X 부팅 이벤트의 순서를 주의 깊게 나열한 KernelThread의 세그먼트를 통해 훌륭한 설명을 얻을 수 있습니다. 호기심 많은 Mac 사용자를 위해 아래에서 반복되는 상당히 철저하고 읽을 가치가 있습니다.
참고: 독자가 지적했듯이 PPC는 OF(Openfirmware)를 사용하고 i386은 EFI(Extensible Firmware Interface)를 사용합니다.
그래서 Mac OS X 부팅 프로세스 중에 어떤 일이 발생합니까? Mac을 켜면 다음과 같이 됩니다.
- 전원이 켜집니다.
- OF 또는 EFI 코드가 실행됩니다.
- 하드웨어 정보를 수집하고 하드웨어를 초기화합니다.
- 어떤 것(일반적으로 OS이지만 Apple Hardware Test 등과 같은 것)이 부팅하도록 선택됩니다. 부팅할 항목을 선택하라는 메시지가 표시될 수 있습니다.
- Control은 부트 로더인
/System/Library/CoreServices/BootX에 전달됩니다. BootX는 커널을 로드하고 OS 배지(있는 경우)도 그립니다.
- BootX는 이전에 캐시된 장치 드라이버 목록(
/usr/sbin/kextcache
에 의해 생성/업데이트됨)을 로드하려고 시도합니다. 이러한 캐시는mkext
유형이며 여러 커널 확장에 대한 정보 사전 및 이진 파일을 포함합니다. mkext 캐시가 손상되었거나 누락된 경우 BootX는/System/Library/Extensions
에서 현재 시나리오에 필요한 확장을 찾습니다( 확장 번들의Info.plist
파일에 있는OSBundleRequired 속성 값.
- The
init 커널의 루틴이 실행됩니다. 부팅 시스템의 루트 장치가 결정됩니다. 이 시점에서 펌웨어는 더 이상 접근할 수 없습니다.
- 다양한 Mach/BSD 데이터 구조는 커널에 의해 초기화됩니다.
- I/O 키트가 초기화됩니다.
- 커널이
/sbin/mach_init
, Mach 서비스 이름 지정(부트스트랩) 데몬을 시작합니다.mach_init 서비스 이름과 해당 서비스에 대한 액세스를 제공하는 Mach 포트 간의 매핑을 유지 관리합니다.
여기서 시작은 사용자 레벨이 됩니다.
mach_init
시작/sbin/init
, 전통적인 BSD 초기화 과정. init는 런레벨을 결정하고/etc/rc.boot을 실행하여 단일 사용자를 실행하기에 충분한 시스템을 설정합니다.
실행하는 동안 rc.boot
및 기타 rc
스크립트 소스 /etc/rc.common
,
CheckForNetwork()(네트워크가 작동하는지 확인),
GetPID와 같은 유틸리티 기능을 포함하는 셸 스크립트 (), purgedir()(구조가 아닌 디렉토리 내용만 삭제) 등
rc.boot
부팅 유형(다중 사용자, 안전, CD-ROM, 네트워크 등)을 파악합니다. 네트워크 부팅의 경우(sysctl
변수kern.netboot
는 로 설정됩니다.1
어떤 경우)/etc/rc.netboot
시작 인수.
/etc/rc.netboot
네트워크 부팅의 다양한 측면을 처리합니다. 예를 들어 네트워크 및 (있는 경우) 로컬 마운트를 수행합니다. 또한 /usr/bin/nbst를 호출하여 섀도우 파일을 루트 장치로 사용 중인 디스크 이미지와 연결합니다.아이디어는 로컬 저장소에 있는 섀도우 파일로 쓰기를 리디렉션하는 것입니다.
rc.boot
파일 시스템 일관성 검사가 필요한지 파악합니다. 단일 사용자 및 CD-ROM 부트는 fsck를 실행하지 않습니다. SafeBoot는 항상 fsck를 실행합니다.rc.boot fsck의 반환 상태도 처리합니다.
- If
rc.boot
가 성공적으로 종료되면/etc/rc
, 다중 사용자 시작 스크립트가 실행됩니다. CD-ROM에서 부팅하는 경우 스크립트는/etc/rc.cdrom(설치).로 전환됩니다.
/etc/rc
로컬 파일 시스템 마운트(HFS+, HFS, UFS,/dev/ fd
,/.vol
), 디렉토리/private/var/tmp
가 존재하고/etc/rc.installer_cleanup이 있는 경우 실행합니다(재부팅 전에 설치 프로그램이 남음).
/etc/rc.cleanup이 실행됩니다. 여러 Unix 및 Mac 특정 디렉토리/파일을 "정리"합니다.
- BootCache가 시작되었습니다.
- Various
sysctl
변수가 설정됩니다(예: 최대 vnode 수, 시스템 V IPC 등)./etc/sysctl.conf
가 존재하는 경우(더하기/etc/sysctl-macosxserver.conf
Mac OS X Server의 경우) 읽혀지고 그 안에 포함된sysctl 변수가 설정됩니다.
syslogd이 시작되었습니다.
- 마하 기호 파일이 생성됩니다.
/etc/rc
시작kextd, 데몬 프로세스 커널 또는 클라이언트 프로세스에서 필요에 따라 커널 확장을 로드합니다.
/usr/libexec/register_mach_bootstrap_servers
는/에 포함된 다양한 Mach 부트스트랩 기반 서비스를 로드하기 위해 실행됩니다. etc/mach_init.d
portmap
및netinfo이 시작됩니다.
- If
/System/Library/Extensions.mkext
이/System/Library/Extensions보다 오래된 경우
,/etc/rc 기존 mkext를 삭제하고 새로 생성합니다. 존재하지 않는 경우에도 생성합니다.
/etc/rc
시작/usr/sbin/update , 내부 파일 시스템 캐시를 디스크로 자주 플러시하는 데몬입니다.
/etc/rc
는 가상 메모리 시스템을 시작합니다./private/var/vm
스왑 디렉토리로 설정됩니다./sbin/dynamic_pager는 적절한 인수(스왑 파일 이름 경로 템플릿, 생성된 스왑 파일의 크기, 추가 스왑 생성 시기를 지정하는 고수위 및 저수위 경고 트리거)로 시작됩니다. 파일을 삭제하거나 기존 파일을 삭제).
/etc/rc
시작/usr/libexec/fix_prebinding프리바운드 바이너리를 잘못 수정합니다.
/etc/rc
실행/etc/rc.cleanup파일 및 장치를 정리하고 재설정합니다.
/etc/rc
드디어 시작/sbin/SystemStarter
/System/Library/StartupItems
및/Library/StartupItems
같은 위치에서 시작 항목을 처리하기 위해 StartupItem은 이름이 폴더 이름과 일치하는 프로그램, 일반적으로 셸 스크립트입니다. 폴더에는Description
,Provides
,Requires
,OrderPreference
, 메시지 시작/중지 등.을 실행할 수 있습니다. SystemStarter -n -D 루트로 프로그램이 디버깅 및 종속성 정보를 인쇄하도록 합니다(실제로 아무것도 실행하지 않음).
- The
CoreGraphics
시작 항목은 Apple Type Services 데몬을 시작합니다(ATSServer
)뿐만 아니라 윈도우 서버(WindowServer).
그러면 Mac이 부팅됩니다!
자세한 정보 표시 모드(부팅할 때마다 자세한 정보 표시 모드로 부팅할 수 있음)를 사용하여 이 활동의 일부를 직접 볼 수 있습니다. 유닉스 스타일 부트), 그러나 이것은 꽤 철저한 설명입니다.
Apple은 여기의 개발자 문서 라이브러리에서 Mac 부팅 프로세스에 대한 몇 가지 문서를 제공합니다.
위 정보를 제공하는 원래 URL은 더 이상 활성화되지 않으므로 해당 게시물은 캐시를 통해 후손을 위해 위에 포함되었습니다. 원래 소스는 다음 URL에 있는 KernelThread의 스레드였습니다: http://www.kernelthread.com/mac/osx/arch_startup.html 현재 오프라인 상태이며 새 위치로 리디렉션되지 않습니다.
Mac OS X 부팅 순서에 추가할 정보나 기타 추가 사항이 있는 경우 의견을 공유하십시오!