BOOTING LÀ CỨNG
Khởi động ... tốt ... nó thực sự là phần khó nhất. Mỗi khi máy tính khởi động, về cơ bản nó sẽ gặp lại. Nó làm quen với các bộ phận khác nhau của nó, và với mỗi bộ phận, nó đáp ứng khả năng của nó. Nhưng nó phải tự kéo mình lên bằng bootstraps của chính nó, có thể nói, từ hình vuông mỗi lần.
Khi thiết kế một quy trình khởi động, mẹo là đưa máy lên theo từng giai đoạn. Khởi động của bạn phải nhanh và đáng tin cậy, và nó phải là cả hai thứ trong một môi trường hoàn toàn không biết mỗi lần . Tôi thậm chí sẽ không tham gia vào một cuộc trò chuyện ở chế độ Thực / Được bảo vệ (điều này không có nghĩa là tôi thậm chí có thể) , nhưng có rất nhiều điều đang diễn ra khi khởi động. Khi máy tính đồng hóa các thành phần khác nhau của nó mỗi lần nó làm như vậy trong các bước tốt nghiệp. Có lẽ điều quan trọng nhất trong số này là việc chuyển từ thực thi mã trên tàu sang thực thi mã trên đĩa, hay nói cách khác - thực thi kernel. Đây là khi phần sụn (bề ngoài) đầu hàng hệ điều hành.
Nhiều năm trước đây không phải là quá nhiều trường hợp. Nó từng là BIOS thực sự là vào / ra cơ bản - các chương trình thông thường sẽ thực hiện các cuộc gọi đến phần sụn cho những việc như vẽ màn hình và truy cập đĩa. Chúng được gọi là ngắt - những chiếc mũ cũ có thể nhớ chúng tốt nhất cho sự hồi hộp mà chúng thường thấy khi gán IRQ cho ma trận điểm mới hoặc USR.
INT13H
Đây là chuỗi chức năng 13H gián đoạn ( hoặc INT
lắp ráp ) mà BIOS cung cấp dưới dạng dịch vụ để truy cập đĩa. Chúng thậm chí còn được sử dụng ngày nay cho các hệ thống BIOS trong quá trình khởi động để thực hiện bước nhảy từ phần sụn sang đĩa.
Một hệ thống BIOS sẽ kiểm tra một vài byte đầu tiên của mỗi đĩa mà nó tìm thấy và tìm kiếm một mẫu mà nó nhận ra là Bản ghi khởi động chính ( hoặcMBR
) . Đây là một tiêu chuẩn thực tế hàng thập kỷ và bao gồm một chút nhị phân thô, có thể thực hiện được ghi vào đầu đĩa. MBR đánh dấu đĩa BIOS là khả năng khởi động. Nó sẽ ngừng kiểm tra khi tìm thấy một cái, và thực tế một cái là tất cả những gì bạn có được mà không cần một vài mánh khóe thông minh. Khi tìm thấy nó, nó ánh xạ nó vào bộ nhớ và thực thi nó (ở chế độ Real, nhưng tôi vẫn không đến đó) .
MBR được thực thi gần như chắc chắn không phải là hạt nhân hệ thống của bạn - 512 byte (cho hoặc nhận) sẽ khá vô dụng trong bộ phận đó. Đây có lẽ là một bộ tải khởi động - một chương trình được thiết kế đặc biệt để khắc phục một trong nhiều hạn chế về địa chỉ của BIOS - cụ thể là nó hoàn toàn không hiểu bất kỳ loại hệ thống tệp nào.
Khi bộ nạp khởi động đọc trong kernel thực tế và thực thi nó trong bộ nhớ (vì tất cả chúng ta đều cầu nguyện mọi lúc) , nó có thể sẽ làm như vậy bằng cách yêu cầu BIOS thông qua một INT13H
cuộc gọi ngắt. Và nếu không - nhiều bộ tải khởi động fancier sẽ gắn kết các hệ thống tệp theo nghĩa thông thường và thực thi mã theo cách khác - thì rất ít khả năng bộ tải khởi động đã trở nên lạ mắt mà không cần một INT13H
hoặc hai. Thông thường các bộ tải khởi động phải tự tải chuỗi - hoặc các giai đoạn khác nhau - vì 512 byte được phân bổ đầu tiên chúng không phù hợp với ngay cả nhu cầu của chúng.
GÀ VÀ TRỨNG
Tất cả điều này là một cách thảo luận về đĩa, tôi biết, nhưng đến thời điểm này, rõ ràng vấn đề chính - người ta có thể gọi nó là loại gà và trứng - đang truy cập vào đĩa có chứa các hướng dẫn chương trình về cách truy cập đĩa . Chìa khóa của vấn đề này là phần sụn - và tiếp tục theo những cách rất khác nhau ngay cả trên các hệ thống EFI - và, yếu nhất hay không, phần sụn là liên kết quan trọng nhất trong chuỗi khởi động.
Bạn thấy, một khi kernel thực thi và tất cả vô số thói quen truy cập và kiểm soát phần cứng của nó, tất cả các vấn đề này sẽ biến mất (hoặc, ít nhất, thay đổi phần nào) , bởi vì các hệ điều hành hiện đại kiểm soát hoàn toàn hệ thống, nhưng cho đến khi họ thực hiện các giới hạn của hệ thống chỉ kéo dài cho đến khi phần sụn sẽ cho phép. Điều này nói lên nhiều điều - BIOS đã không thay đổi nhiều kể từ 8086. Cuộc INT13H
gọi là bản gốc 8086. Vâng, đã có (vô số) tiện ích mở rộng và tất nhiên là hack, nhưng đổi mới ...?
TỐT HƠN VÀ TỐT HƠN
Hầu hết các thay đổi đối với BIOS chỉ là băng bó tốt nhất. Nó từng là một đĩa cứng phải được ánh xạ vật lý - các khía cạnh khác nhau và cụ thể của hình học của nó được đề cập khi dữ liệu được lưu trữ vào nó hoặc lấy ra từ nó. Cuối cùng, đĩa cứng thông thường đã phát triển đến kích thước cấm điều này. Ngay cả bản đồ trừu tượng cũng có quá nhiều thông tin để BIOS xử lý. Vì nó chỉ có thể hoạt động ở Chế độ thực, BIOS bị giới hạn ở mức 1 MB cho mỗi thanh ghi bộ nhớ. Vuốt bản đồ hình trụ lớn hơn bất kỳ, hoặc làm cho bất kỳ một trong các thuộc tính nào của nó lớn hơn có thể được xử lý trong rất nhiều bit và BIOS bị mất theo nghĩa đen - vượt ra khỏi giới hạn.
Rào cản này đã được đáp ứng và phá vỡ nhiều lần. Mỗi lần bản đồ được trừu tượng hóa và mã hóa theo một số cách mới hơn, thông minh hơn và kém chính xác hơn. Và vì vậy, ngày nay, BIOS không thể lập bản đồ chính xác cho một ổ đĩa. Địa chỉ khối logic là tiêu chuẩn thực tế hiện nay, mặc dù một số bản dịch Xi lanh / Đầu / Ngành (hoặc CHS) vẫn cần thiết. Những gì phần sụn chính đã mất về độ chính xác / trách nhiệm, các phần mở rộng như vậy đã được trừu tượng hóa và thêm vào các trách nhiệm phần sụn đĩa để lấp đầy các khoảng trống.
Đây là trò chơi mèo vờn chuột được tham chiếu trong câu hỏi của bạn. Khi BIOS không hiểu được đĩa vượt quá một điểm nhất định do kích thước tuyệt đối của nó, thì bất kỳ dữ liệu nào bạn có thể muốn lấy lại cho bạn khi khởi động - chẳng hạn như bộ tải khởi động hoặc kernel - có lẽ tốt hơn không nên nằm ngoài điểm đó. Đây là nơi /boot
đến từ.
CÓ THỂ THỰC SỰ TỐT HƠN
Ngày nay, những điều như vậy, rất may, không liên quan đến sự sụp đổ của BIOS. Đã 30 năm sắp tới, nhưng nó đã được thay thế phần lớn trong vài năm qua theo tiêu chuẩn UEFI (hoặc EFI 2.0) . UEFI cung cấp một mount từ phút thứ nhất, nó khởi tạo ở Chế độ bảo vệ, nó kết hợp bộ tải khởi động riêng, nó cung cấp lưu trữ biến bộ nhớ flash liên tục khởi động lại, nó sẽ được xử lý một số zetabyte hoặc bất cứ thứ gì trên mỗi đĩa ... và nhiều khác Nó là xa hoàn hảo, nhưng nó là một cải tiến lớn so với người tiền nhiệm của nó.
Ngay cả các đối số cho bộ tải khởi động chuyên dụng liên quan đến mã hóa ổ đĩa hoặc hệ thống tệp lớp cũng không thay đổi khi bạn cho rằng tất cả những điều này phải được xử lý bởi nhân hệ điều hành, và nếu bạn được cung cấp một mount khi khởi động, bạn sẽ luôn rõ ràng bắn để thực thi nó (đặc biệt là xem xét rằng hạt nhân Linux, trong cấu hình mặc định của nó, là một thực thi EFI của riêng nó) .
Và do đó, một /boot
phân vùng riêng biệt có lẽ không quá quan tâm đến bạn và nếu bạn đang sử dụng hệ thống EFI, thì có lẽ bạn đã có một tương tự trong phân vùng hệ thống EFI, vì đó là một yêu cầu để khởi động chế độ EFI.