จะเกิดอะไรขึ้นในขั้นตอนการบูต Mac OS X
เคยสงสัยไหมว่าเกิดอะไรขึ้นระหว่างการบู๊ตและกระบวนการเริ่มต้นของ Mac OS X? ด้วย Mac OS X มันซับซ้อนกว่าที่เคยเป็นมาเล็กน้อย และยุคของ Classic Mac OS (ระบบ 9, 8, 7, 6) ก็หายไปนาน ซึ่งการเฝ้าดู Mac ของเราบูตเครื่องด้วยชุดส่วนขยายและแผงควบคุม เราสามารถระบุได้ด้วยไอคอนเพียงอย่างเดียว จากนั้นไปสำรวจในโฟลเดอร์ส่วนขยายเพื่อปรับสิ่งที่กำลังโหลดและเกิดขึ้นในการบูตเครื่อง Mac ได้อย่างง่ายดายวันนี้ด้วย Unix ที่สนับสนุน Mac OS X ผู้ใช้จำนวนมากไม่ทราบว่าเกิดอะไรขึ้นเบื้องหลัง
แล้วจะเกิดอะไรขึ้นระหว่างกระบวนการบูต Mac OS X? คุณสามารถดูดีขึ้นได้เสมอโดยการบูทเครื่อง Mac ในโหมด Verbose แต่นั่นไม่จำเป็นต้องอธิบายสิ่งที่คุณเห็นทั้งหมด โชคดีที่มีคำอธิบายที่ยอดเยี่ยมผ่านเซกเมนต์ที่ KernelThread ซึ่งแสดงรายการลำดับของเหตุการณ์การบู๊ต Mac OS X อย่างละเอียดตั้งแต่ต้นจนจบ มันค่อนข้างถี่ถ้วนและควรค่าแก่การอ่าน อ่านซ้ำด้านล่างสำหรับผู้ใช้ Mac ที่อยากรู้อยากเห็น
ote: ตามที่ผู้อ่านชี้ให้เห็น PPC ใช้ OF (Openfirmware) i386 ใช้ EFI (Extensible Firmware Interface)
แล้วจะเกิดอะไรขึ้นระหว่างกระบวนการบูต Mac OS X? คุณเปิดเครื่อง Mac และนี่คือสิ่งที่เกิดขึ้น:
- เปิดเครื่องแล้ว
- OF หรือโค้ด EFI จะถูกดำเนินการ
- ข้อมูลฮาร์ดแวร์ถูกรวบรวมและเตรียมใช้งานฮาร์ดแวร์
- บางสิ่ง (โดยปกติคือ OS แต่รวมถึงสิ่งต่างๆ เช่น การทดสอบฮาร์ดแวร์ของ Apple เป็นต้น) ถูกเลือกให้บู๊ต ผู้ใช้อาจได้รับแจ้งให้เลือกสิ่งที่จะบูต
- Control ส่งผ่านไปยัง
/System/Library/CoreServices/BootX ตัวโหลดการบูต BootX โหลดเคอร์เนลและดึง OS badges ด้วยถ้ามี
- BootX พยายามโหลดรายการไดรเวอร์อุปกรณ์ที่แคชไว้ก่อนหน้านี้ (สร้าง/อัปเดตโดย
/usr/sbin/kextcache
) แคชดังกล่าวเป็นประเภทmkext
และมีพจนานุกรมข้อมูลและไฟล์ไบนารีสำหรับส่วนขยายเคอร์เนลหลายรายการ โปรดทราบว่าหากแคช mkext เสียหายหรือหายไป BootX จะมองหาส่วนขยายที่จำเป็นในสถานการณ์ปัจจุบันใน/System/Library/Extensions
(ตามที่กำหนดโดย ค่าของคุณสมบัติOSBundleRequired
ในไฟล์Info.plist ของบันเดิลส่วนขยาย
- The
init รูทีนของเคอร์เนลถูกดำเนินการ มีการกำหนดอุปกรณ์รูทของระบบการบู๊ต ณ จุดนี้ Firmware ไม่สามารถเข้าถึงได้อีกต่อไป
- โครงสร้างข้อมูลต่างๆ ของ Mach/BSD เริ่มต้นโดยเคอร์เนล
- ชุด I/O ถูกเตรียมใช้งานแล้ว
- เคอร์เนลเริ่มต้น
/sbin/mach_init
ดีมอนการตั้งชื่อบริการ Mach (bootstrap)mach_init รักษาการแมประหว่างชื่อบริการและพอร์ต Mach ที่ให้การเข้าถึงบริการเหล่านั้น
จากนี้ไป การเริ่มต้นจะกลายเป็นระดับผู้ใช้:
mach_init
เริ่ม/sbin/init
BSD แบบดั้งเดิม กระบวนการเริ่มต้น init กำหนด runlevel และรัน/etc/rc.boot ซึ่งตั้งค่าเครื่องให้เพียงพอสำหรับการรันแบบ single-user
ระหว่างดำเนินการ rc.boot
และอื่น ๆ rc
แหล่งที่มาของสคริปต์ /etc/rc.common
เชลล์สคริปต์ที่มีฟังก์ชันยูทิลิตี้ เช่น
CheckForNetwork() (ตรวจสอบว่าเครือข่ายใช้งานได้หรือไม่),
GetPID (), purgedir() (ลบเนื้อหาไดเร็กทอรีเท่านั้น ไม่ลบโครงสร้าง) ฯลฯ
rc.boot
ระบุประเภทของการบูต (ผู้ใช้หลายคน, ปลอดภัย, ซีดีรอม, เครือข่าย ฯลฯ ) ในกรณีของการบูตเครือข่าย (ตัวแปรsysctl
kern.netboot
จะถูกตั้งค่าเป็น1
ซึ่งในกรณีนี้) มันรัน/etc/rc.netboot
ด้วยเครื่องหมายstartอาร์กิวเมนต์
/etc/rc.netboot
จัดการกับลักษณะต่างๆ ของการบูทเครือข่าย ตัวอย่างเช่น จะดำเนินการเชื่อมต่อเครือข่ายและ (ถ้ามี) ภายในเครื่อง นอกจากนี้ยังเรียก /usr/bin/nbst เพื่อเชื่อมโยงไฟล์เงากับดิสก์อิมเมจที่ใช้เป็นอุปกรณ์รูทแนวคิดคือการเปลี่ยนเส้นทางการเขียนไปยังไฟล์เงา ซึ่งหวังว่าจะอยู่ในที่จัดเก็บในเครื่อง
rc.boot
พิจารณาว่าจำเป็นต้องมีการตรวจสอบความสอดคล้องกันของระบบไฟล์หรือไม่ บูทแบบผู้ใช้คนเดียวและซีดีรอมไม่รัน fsck SafeBoot เรียกใช้ fsck เสมอrc.boot จัดการสถานะการส่งคืนของ fsck เช่นกัน
- ถ้า
rc.boot
ออกสำเร็จ/etc/rc
สคริปต์เริ่มต้นผู้ใช้หลายคนจะถูกเรียกใช้ หากบูตจากซีดีรอม สคริปต์จะสลับไปที่/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
มีการตั้งค่าตัวแปร (เช่น จำนวนสูงสุดของ vnodes, System V IPC เป็นต้น) หากมี/etc/sysctl.conf
(บวก/etc/sysctl-macosxserver.conf
บน Mac OS X Server) จะถูกอ่านและsysctl ตั้งค่าตัวแปรที่อยู่ในนั้น
syslogd เริ่มทำงานแล้ว
- ไฟล์สัญลักษณ์ Mach ถูกสร้างขึ้น
/etc/rc
เริ่มkextd กระบวนการภูต ที่โหลดส่วนขยายเคอร์เนลตามความต้องการจากกระบวนการเคอร์เนลหรือไคลเอนต์
/usr/libexec/register_mach_bootstrap_servers
ทำงานเพื่อโหลดบริการต่างๆ ที่ใช้ Mach bootstrap ที่มีอยู่ใน/ etc/mach_init.d
portmap
และnetinfo เริ่มทำงานแล้ว
- หาก
/System/Library/Extensions.mkext
เก่ากว่า/System/Library/Extensions
,/etc/rc ลบ mkext ที่มีอยู่และสร้างใหม่ นอกจากนี้ยังสร้างหนึ่งถ้าไม่มี
/etc/rc
เริ่ม/usr/sbin/updateภูตที่ล้างแคชระบบไฟล์ภายในไปยังดิสก์บ่อยๆ
/etc/rc
เริ่มระบบหน่วยความจำเสมือน/private/var/vm
ถูกตั้งค่าเป็นไดเร็กทอรี swap/sbin/dynamic_pager เริ่มต้นด้วยอาร์กิวเมนต์ที่เหมาะสม (เทมเพลตพาธชื่อไฟล์ swap, ขนาดของไฟล์ swap ที่สร้างขึ้น, ทริกเกอร์การแจ้งเตือนน้ำสูงและต่ำที่ระบุว่าเมื่อใดควรสร้าง swap เพิ่มเติม ไฟล์หรือลบที่มีอยู่).
/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 เป็นรูทเพื่อให้โปรแกรมพิมพ์การดีบักและข้อมูลการพึ่งพา (โดยไม่ต้องรันอะไรเลย)
CoreGraphics
รายการเริ่มต้นเริ่มต้น Apple Type Services daemon (ATSServer
) เช่นเดียวกับ Window Server (WindowServer).
จากนั้น Mac ของคุณก็จะบู๊ต!
คุณสามารถดูกิจกรรมเล็กๆ น้อยๆ นี้ได้ด้วยตัวคุณเองด้วยโหมด Verbose (ซึ่งคุณสามารถบูตเข้าสู่โหมด Verbose ต่อการบูต 1 ครั้ง หรือคุณสามารถตั้งค่าให้ Mac บูตในโหมด Verbose เสมอ หากคุณต้องการดูตลอดเวลา การบูตสไตล์ยูนิกซ์) แต่นี่เป็นคำอธิบายที่ค่อนข้างละเอียด
Apple ยังมีเอกสารบางส่วนเกี่ยวกับขั้นตอนการบู๊ตเครื่อง Mac ที่ไลบรารี documentaiton ของนักพัฒนาซอฟต์แวร์ที่นี่
โปรดทราบว่า URL เดิมที่ให้ข้อมูลข้างต้นไม่ได้ใช้งานอีกต่อไป ดังนั้นโพสต์ดังกล่าวจึงถูกรวมไว้ด้านบนเพื่อส่งต่อผ่านแคช แหล่งที่มาดั้งเดิมคือเธรดบน KernelThread ที่ URL ต่อไปนี้: http://www.kernelthread.com/mac/osx/arch_startup.html ซึ่งขณะนี้ออฟไลน์อยู่และไม่เปลี่ยนเส้นทางไปยังตำแหน่งใหม่
หากคุณมีเกร็ดเล็กเกร็ดน้อยหรือส่วนเพิ่มเติมอื่น ๆ เพื่อเพิ่มลำดับการบู๊ต Mac OS X ให้แบ่งปันความคิดเห็น!