Xung đột giữa những gì bạn nói về bộ tải khởi động trong ROM và nó nằm trong MBR có lẽ là do bộ tải khởi động được sử dụng cho bất kỳ mã nào tìm ra cách tối thiểu để tải mã để làm cho máy tính làm điều gì đó hữu ích, bao gồm cả trạng thái trong một khởi động nhiều giai đoạn.
Vì vậy, trạng thái khởi đầu là có một máy tính, là một thiết bị có thể lập trình, nhưng không biết cách tải phần mềm để chạy vì nó không có bất kỳ phần mềm nào được tải. (Và do đó khởi động từ tự kéo lên từ bootstraps của nó ).
Trong lịch sử, có một vài giải pháp khác nhau cho vấn đề này, nhưng ngày nay chúng ta bắt đầu với một số mã trong ROM (chủ yếu là EEPROM), đủ để khiến nó nhìn vào các thiết bị khác nhau và thử lần lượt cho đến khi tìm thấy một thiết bị khác khả năng khởi động.
(Đây là lý do tại sao nhiều hệ thống sẽ khởi động CD hoặc DVD nếu bạn đặt đĩa cài đặt hệ điều hành vào và từ ổ cứng, BIOS [mã trên ROM, bao gồm cả mã chúng ta đang nói đến và một số mức thấp khác -level thứ bắt đầu mọi thứ] được thiết lập để xem ổ đĩa CD / DVD trước, sau đó vào ổ cứng nếu không tìm thấy gì, tweaker thường đặt nó để bỏ qua ổ đĩa CD / DVD trừ khi được yêu cầu thủ công không lãng phí thời gian để quay đĩa không thể khởi động trong ổ đĩa).
Mã này trong ROM đôi khi được gọi là bộ nạp khởi động .
Khi nó biết ổ đĩa nào cần xem, nó sẽ xem MBR, chứa thông tin về các phần chính - làm thế nào bạn có thể nhìn vào / hoặc / boot hoặc C: / (trên hệ thống Windows) nếu bạn thậm chí không biết phần nào của đĩa là phân vùng nào, đừng bận tâm làm thế nào mỗi phân vùng được gắn kết? - và một số mã với các hướng dẫn thêm để thực hiện. (Ngẫu nhiên, điều này giải thích tại sao một số HĐH - như Windows - chỉ có thể được cài đặt trên phân vùng chính, chi tiết của các phân vùng đó nằm trong MBR và đó là thông tin phân vùng duy nhất mà bộ tải khởi động của chúng đã đọc và nó không tải EBR tìm hiểu về các phân vùng hợp lý, khi có liên quan đến các phân vùng đó thậm chí chưa tồn tại).
Mã thực thi đó, còn được gọi là bộ nạp khởi động . Khi chúng tôi quan tâm để phân biệt giữa cái này và cái tiếp theo, nó được gọi là bộ tải khởi động chính (vì trừ khi chúng tôi tự tạo BIOS, chúng tôi bỏ qua bit ROM nằm ngoài tầm kiểm soát của chúng tôi).
Mã đó sẽ rất nhỏ vì chỉ có khoảng 400 byte để phù hợp với nó, vì vậy để làm bất cứ điều gì thực sự, nó sẽ tải thêm một số mã, có thể lớn hơn vì nó không phải đối phó với ràng buộc này.
Mã này, còn được gọi là bộ nạp khởi động . Khi chúng ta quan tâm để phân biệt giữa cái này và cái trước, nó được gọi là bộ tải khởi động thứ cấp .
Mã đó có lẽ có thể là giai đoạn cuối cùng trong quy trình. Nếu bạn chỉ có một HĐH hoặc nếu tất cả các HĐH trên hệ thống của bạn sử dụng các trình tải khởi động tương thích (ví dụ: hai cài đặt Linux đều sử dụng GRUB, thì bất kỳ GRUB nào được cập nhật lần cuối đều có thể cung cấp để khởi động vào một trong hai) trình bày các menu (nếu muốn) tải trong kernel và vượt qua sự kiểm soát trên hệ điều hành.
Trong trường hợp bạn có một HĐH không tương thích với bộ tải khởi động đó, thì nó có thể tải chuỗi. Ví dụ: nếu bạn có Windows và Linux trên cùng một máy, tùy chọn GRUB để tải Windows trên thực tế sẽ tải một bộ tải khởi động khác chỉ biết về (các) cài đặt Windows và chuyển qua nó. Mặc dù đây là giai đoạn thứ ba trong quy trình, nó vẫn được gọi là bộ tải khởi động thứ cấp , bởi vì nó không biết và cũng không quan tâm rằng có một bộ tải khởi động thứ cấp khác đang chạy trước nó. Đây cũng là trường hợp với bản cài đặt Linux sử dụng một loại bộ tải khởi động thứ cấp khác.
Hầu hết khi chúng ta nói về bộ tải khởi động về Linux, chúng ta thường không có nghĩa là mã ROM (nó không phải là một phần của Linux, hoặc thay đổi bằng cách cài đặt Linux). Khi chúng tôi thực hiện update-grub
thay đổi bộ tải khởi động thứ cấp, thường là trong / boot của một cài đặt cụ thể. Khi chúng install-grub
tôi thay đổi nó và cũng là bộ tải khởi động chính trong MBR để nó có đủ mã để biết / boot ở đâu (có thể bắt đầu RAID phần mềm khi nó đi) và sẽ tải và thực thi khi nó được thực thi .
Vì vậy, tóm lại, bạn đã không chính xác khi bạn nói ROM là một phần của bộ nhớ chính * vì nó tách biệt. (Thật vậy, RAM được coi là đồng nghĩa với ROM). Bạn đã đúng cả khi nói rằng có một bộ tải khởi động ở đó và trong MBR, bởi vì chúng là hai bước của quy trình và cả hai đôi khi được gọi bằng tên đó. Và câu trả lời cho "Hệ điều hành khác nhau có lưu trữ bộ tải khởi động của họ ở những nơi khác nhau không?" là "phần lớn", bởi vì nếu bộ tải khởi động thứ cấp không tương thích của bạn sẽ ẩn bộ tải khởi động khác (nếu bạn cài đặt Windows sau khi cài đặt Linux) hoặc tải chuỗi vào cái khác nếu được yêu cầu (nếu bạn khắc phục tình huống đó hoặc cài đặt Linux sau Windows), nhưng là HĐH có thể chia sẻ bộ tải khởi động thứ cấp nếu chúng tương thích (nếu bạn cài đặt Linux sau một Linux khác sử dụng cùng loại bộ tải khởi động thứ cấp và nó có thể thấy Linux khác [đôi khi RAID phần mềm nhầm lẫn mọi thứ và khiến cho việc tải chuỗi trở nên cần thiết).
* Trong những ngày mà người ta sẽ lập trình sử dụng cả ROM và RAM thì điều này lại khác. Ví dụ, trên Phổ ZX, ROM sẽ là 16kiB và bao gồm trình thông dịch BASIC, cũng như cung cấp cho bạn điểm bắt đầu để tải một cái gì đó vào 48kiB hoặc 128KiB (phân trang) hoặc RAM, (trong trường hợp đó, về cơ bản, nó sẽ khởi động vào trình thông dịch BASIC và sau đó sử dụng để khởi động vào băng trên băng), có một loạt các chức năng từ trình thông dịch BASIC mà các chương trình trong RAM có thể sử dụng (tại sao lại viết hàm trig khi máy tính đã có một vị trí đã biết ? đặc biệt là khi bạn chỉ có 48kiB cho tất cả mã của riêng bạn để chạy). ROM này cũng có thể nhìn thấy giống như RAM, chỉ ở các địa chỉ khác nhau. Trong trường hợp như vậy, ROM cũng là một phần của bộ nhớ chính như RAM, nhưng không thể ghi được.
A small portion of a computer's main memory where the CPU expects to find its initial program is constructed from special nonvolatile memory cells. Such memory is known as read-only memory(ROM)
Theo ông. Bộ nhớ chính được tạo thành từ hai phần, RAM và ROM. Tôi chỉ muốn biết liệu cái gọi là bootloader có được cài đặt trên phần ROM của bộ nhớ chính không ... @Sergey