Điều gì xảy ra trong quá trình khởi động Mac OS X?

Anonim

Bạn đã bao giờ tự hỏi điều gì xảy ra trong quá trình khởi động và khởi động Mac OS X chưa? Với Mac OS X, mọi thứ phức tạp hơn một chút so với trước đây và đã qua lâu rồi cái thời của Mac OS cổ điển (Hệ thống 9, 8, 7, 6), nơi xem máy Mac của chúng ta khởi động với một loạt tiện ích mở rộng và bảng điều khiển. chúng tôi luôn có thể xác định chỉ bằng biểu tượng của chúng, sau đó tìm kiếm trong thư mục Tiện ích mở rộng để dễ dàng điều chỉnh những gì đang tải và xảy ra khi khởi động máy Mac.Ngày nay với nền tảng Unix của Mac OS X, nhiều người dùng hoàn toàn không biết điều gì đang diễn ra đằng sau hậu trường.

Vậy chính xác điều gì xảy ra trong quá trình khởi động Mac OS X? Bạn luôn có thể có giao diện đẹp hơn bằng cách khởi động máy Mac ở Chế độ Verbose, nhưng điều đó không nhất thiết phải giải thích tất cả những gì bạn thấy. May mắn thay, một lời giải thích tuyệt vời có sẵn thông qua phân đoạn tại KernelThread, liệt kê cẩn thận chuỗi sự kiện khởi động Mac OS X, từ đầu đến cuối. Nó khá kỹ lưỡng và đáng để đọc, được lặp lại bên dưới dành cho những người dùng Mac ham học hỏi.

lưu ý: Như một độc giả đã chỉ ra, PPC sử dụng OF (Phần sụn mở), i386 sử dụng EFI (Giao diện phần sụn mở rộng)

Vậy điều gì xảy ra trong quá trình khởi động Mac OS X? Bạn bật máy Mac của mình và đây là điều sẽ xảy ra:

  • Đã bật nguồn.
  • OF hoặc mã EFI được thực thi.
  • Thông tin phần cứng được thu thập và khởi tạo phần cứng.
  • Thứ gì đó (thường là HĐH, nhưng cũng có những thứ như Kiểm tra phần cứng của Apple, v.v.) được chọn để khởi động. Người dùng có thể được nhắc chọn thứ sẽ khởi động.
  • Control chuyển đến /System/Library/CoreServices/BootX, bộ tải khởi động. BootX tải hạt nhân và cũng vẽ huy hiệu hệ điều hành, nếu có.
  • BootX cố tải danh sách trình điều khiển thiết bị đã lưu trong bộ nhớ đệm trước đó (được tạo/cập nhật bởi /usr/sbin/kextcache). Bộ đệm như vậy thuộc loại mkext và chứa các từ điển thông tin và tệp nhị phân cho nhiều phần mở rộng kernel. Lưu ý rằng nếu bộ nhớ cache mkext bị hỏng hoặc bị thiếu, BootX sẽ tìm trong /System/Library/Extensions để tìm các tiện ích mở rộng cần thiết trong tình huống hiện tại (như được xác định bởi giá trị của thuộc tính OSBundleRequired trong tệp Info.plist tệp của gói tiện ích mở rộng.
  • Quá trình init thường trình của kernel được thực thi. Thiết bị gốc của hệ thống khởi động được xác định. Tại thời điểm này, Firmware không thể truy cập được nữa.
  • Các cấu trúc dữ liệu Mach/BSD khác nhau được hạt nhân khởi tạo.
  • Bộ công cụ I/O được khởi chạy.
  • Nhân khởi động /sbin/mach_init, daemon đặt tên dịch vụ Mach (bootstrap). mach_init duy trì ánh xạ giữa tên dịch vụ và cổng Mach cung cấp quyền truy cập vào các dịch vụ đó.

Từ đây trở đi, quá trình khởi động trở thành cấp độ người dùng:

  • mach_init bắt đầu /sbin/init, BSD truyền thống quá trình khởi tạo. init xác định mức chạy và chạy /etc/rc.boot, thiết lập máy đủ để chạy một người dùng.

Trong quá trình thực thi, rc.bootrc mã nguồn /etc/rc.common , tập lệnh shell chứa các chức năng tiện ích, chẳng hạn như CheckForNetwork() (kiểm tra xem mạng có hoạt động không), GetPID (), purgedir() (chỉ xóa nội dung thư mục, không xóa cấu trúc), v.v.

  • rc.boot chỉ ra loại khởi động (Nhiều người dùng, An toàn, CD-ROM, Mạng, v.v.). Trong trường hợp khởi động mạng (sysctl biến kern.netboot sẽ được đặt thành1 trong trường hợp nào), nó sẽ chạy /etc/rc.netboot với dấu start đối số.

/etc/rc.netboot xử lý các khía cạnh khác nhau của việc khởi động qua mạng. Ví dụ, nó thực hiện kết nối mạng và (nếu có) cục bộ. Nó cũng gọi /usr/bin/nbst để liên kết tệp bóng với ảnh đĩa được sử dụng làm thiết bị gốc.Ý tưởng là chuyển hướng ghi vào tệp bóng, hy vọng tệp này nằm trên bộ nhớ cục bộ.

  • rc.boot cho biết liệu có cần kiểm tra tính nhất quán của hệ thống tệp hay không. Khởi động một người dùng và CD-ROM không chạy fsck. SafeBoot luôn chạy fsck. rc.boot cũng xử lý trạng thái trả về của fsck.
  • Nếu rc.boot thoát thành công, /etc/rc , tập lệnh khởi động nhiều người dùng sẽ được chạy. Nếu khởi động từ CD-ROM, tập lệnh sẽ chuyển sang /etc/rc.cdrom (cài đặt). (cài đặt).
  • /etc/rc gắn hệ thống tệp cục bộ (HFS+, HFS, UFS, /dev/ fd, /.vol), đảm bảo rằng thư mục /private/var/tmp tồn tại và chạy /etc/rc.installer_cleanup, nếu có (do trình cài đặt để lại trước khi khởi động lại).
  • /etc/rc.cleanup được chạy. Nó “dọn dẹp” một số thư mục/tệp cụ thể của Unix và Mac.
  • BootCache được bắt đầu.
  • Various sysctl biến được đặt (chẳng hạn như đối với số lượng vnodes tối đa, Hệ thống V IPC, v.v.). Nếu /etc/sysctl.conf tồn tại (cộng với /etc/sysctl-macosxserver.conf trên Mac OS X Server), nó được đọc và sysctl các biến chứa trong đó được thiết lập.
  • syslogd được bắt đầu.
  • Tệp biểu tượng Mach được tạo.
  • /etc/rc bắt đầu kextd, quy trình daemon tải phần mở rộng hạt nhân theo yêu cầu từ các tiến trình máy khách hoặc hạt nhân.
  • /usr/libexec/register_mach_bootstrap_servers được chạy để tải các dịch vụ dựa trên Mach bootstrap khác nhau có trong / etc/mach_init.d
  • portmapnetinfo được bắt đầu.
  • If /System/Library/Extensions.mkext cũ hơn /System/Library/Extensions , /etc/rc xóa mkext hiện có và tạo mkext mới. Nó cũng tạo một cái nếu cái đó không tồn tại.
  • /etc/rc bắt đầu /usr/sbin/update , trình nền thường xuyên xóa các bộ nhớ cache của hệ thống tệp nội bộ vào đĩa.
  • /etc/rc khởi động hệ thống bộ nhớ ảo. /private/var/vm được thiết lập làm thư mục trao đổi. /sbin/dynamic_pager được bắt đầu bằng các đối số thích hợp (mẫu đường dẫn tên tệp hoán đổi, kích thước của tệp hoán đổi được tạo, kích hoạt cảnh báo mực nước cao và thấp chỉ định thời điểm tạo thêm hoán đổi các tệp hoặc xóa các tệp hiện có).
  • /etc/rc bắt đầu /usr/libexec/fix_prebindingđể sửa các tệp nhị phân liên kết trước không chính xác.
  • /etc/rc thực thi /etc/rc.cleanupđể dọn dẹp và đặt lại tệp và thiết bị.
  • /etc/rc cuối cùng cũng khởi chạy /sbin/SystemStarter để xử lý các mục khởi động từ các vị trí như /System/Library/StartupItems/Library/StartupItems StartupItem là một chương trình, thường là tập lệnh shell, có tên khớp với tên thư mục. Thư mục chứa tệp danh sách thuộc tính chứa các cặp khóa-giá trị như Description, Provides, Requires, OrderPreference, thông báo bắt đầu/dừng, v.v. Bạn có thể chạy SystemStarter -n -D với quyền root để chương trình in thông tin gỡ lỗi và phụ thuộc (mà không thực sự chạy bất cứ thứ gì).
  • Mục khởi động CoreGraphics khởi động daemon Apple Type Services (ATSServer ) cũng như Máy chủ cửa sổ (WindowServer).

Và sau đó máy Mac của bạn được khởi động!

Bạn có thể tự mình xem một chút hoạt động này với Chế độ chi tiết (bạn có thể khởi động vào Chế độ chi tiết mỗi lần khởi động hoặc thậm chí bạn có thể đặt máy Mac luôn khởi động ở Chế độ chi tiết nếu bạn muốn luôn nhìn thấy khởi động kiểu unix), nhưng đây là một lời giải thích khá kỹ lưỡng.

Apple cũng có sẵn một số tài liệu về quy trình khởi động máy Mac tại thư viện tài liệu dành cho nhà phát triển của họ tại đây.

Lưu ý URL ban đầu cung cấp thông tin trên không còn hoạt động, do đó, bài đăng đó đã được đưa vào ở trên cho hậu thế qua bộ đệm. Nguồn gốc là một chuỗi trên KernelThread tại url sau: http://www.kernelthread.com/mac/osx/arch_startup.html hiện đang ngoại tuyến và không chuyển hướng đến một vị trí mới.

Nếu bạn có bất kỳ thông tin hay bổ sung nào khác để thêm vào trình tự khởi động của Mac OS X, hãy chia sẻ trong phần nhận xét!

Điều gì xảy ra trong quá trình khởi động Mac OS X?