จะเกิดอะไรขึ้นในขั้นตอนการบูต Mac OS X

Anonim

เคยสงสัยไหมว่าเกิดอะไรขึ้นระหว่างการบู๊ตและกระบวนการเริ่มต้นของ 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 ให้แบ่งปันความคิดเห็น!

จะเกิดอะไรขึ้นในขั้นตอนการบูต Mac OS X