Di mana bootloader disimpan - dalam ROM, RAM, atau di tempat lain?

30

Menurut entri wikipedia, bootloader adalah program kecil yang disimpan dalam ROM (bagian dari memori utama (RAM), bukan ??) yang hanya dapat dibaca dan tidak dihapus. Saya agak bingung di sini. Apakah ini berarti bahwa setiap RAM yang kita beli memiliki bootloader yang terinstal secara default? Dan juga, saya membaca dari sebuah buku yang mengatakan bahwa biasanya ada area yang disebut MBR (Master Boot Record) pada hard drive yang mencakup bootloader ...

Jadi di mana tepatnya bootloader ini berada? Apakah Sistem Operasi yang berbeda menyimpan bootloader mereka di tempat yang berbeda?

xczzhh
sumber

Jawaban:

43

ROM adalah chip yang terpisah dari RAM. Itu tidak memerlukan daya untuk mempertahankan isinya, dan awalnya tidak dapat dimodifikasi dengan cara apa pun, tetapi datang dengan kabel dari pabrik. Nanti PROM, atau Memori Hanya Baca yang Dapat Diprogram menggantikan ROM yang sebenarnya. Chip-chip ini kosong dari pabrik, dan dapat ditulis menggunakan prosedur khusus yang pada dasarnya membakar bit-chip yang menyebabkan keadaan mereka berubah. Ini kemudian diganti dengan EPROM, atau Eraseable Programmable Memory. Chip ini memiliki sedikit jendela pada mereka dan jika Anda menyinari sinar ultraviolet ke dalamnya, dapat dihapus, memungkinkan mereka untuk diprogram lagi. Ini kemudian diganti dengan EEPROM, atau Memory yang Dapat Diprogram Secara Listrik. Chip ini memiliki prosedur perangkat lunak khusus untuk menghapusnya sehingga dapat diprogram ulang.

Motherboard memiliki beberapa jenis chip ROM yang memegang firmware, yang dalam bahasa PC biasanya disebut BIOS, atau Basic Input Output System, meskipun saat ini sedang diganti dengan firmware EFI. Ini adalah perangkat lunak yang CPU pertama mulai jalankan pada power on. Semua firmware melakukan inisialisasi perangkat keras, biasanya menyediakan beberapa keluaran diagnostik, dan menyediakan cara bagi pengguna untuk mengonfigurasi perangkat keras, kemudian mencari dan memuat boot loader, yang pada gilirannya menemukan dan memuat OS.

Dengan PC BIOS, ia hanya memuat dan mengeksekusi sektor pertama dari disk yang diputuskan untuk boot, yang biasanya merupakan hard disk pertama yang terdeteksi. Dengan konvensi, sektor pertama hard disk, yang disebut Master Boot Record, berisi tabel partisi DOS yang mencantumkan lokasi partisi pada disk, dan dan meninggalkan ruang untuk boot loader. Ubuntu menggunakan boot loader GRUB, yang menempatkan cukup kode di MBR untuk dimuat dan dieksekusi /boot/grub/core.img. Biasanya salinan file ini ditempatkan di sektor-sektor berikut MBR, tetapi sebelum partisi pertama, dan itulah sebenarnya yang dimuat MBR, karena menemukan lokasi /boot/grub/core.imgterlalu sulit untuk dilakukan dengan benar di ruang yang sangat terbatas yang tersedia di MBR .

Gambar inti grub berisi kode grub dasar, ditambah modul apa saja yang diperlukan untuk mengakses /boot/grubsehingga dapat memuat modul tambahan di sana, dan file konfigurasi grub yang menjelaskan sistem operasi apa yang dapat di-boot, dan di mana mereka dapat ditemukan.

Firmware EFI yang digunakan pada Intel Mac dan menjadi tersedia sebagai pengganti BIOS pada motherboard PC terbaru membutuhkan partisi khusus yang menampung file-file boot loader, dan firmware tersebut cukup cerdas untuk menemukan file-file tersebut dan memuatnya, bukan hanya memuat dan mengeksekusi apa pun. berada di sektor pertama disk.

psusi
sumber
Ini adalah paragraf yang dikutip dari Ilmu Komputer Glenn Brookshear , Sebuah TinjauanA 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) Menurutnya. Memori utama terdiri dari dua bagian, RAM dan ROM. Saya hanya ingin tahu apakah bootloader yang disebut itu diinstal pada bagian ROM dari memori utama ... @Sergey
xczzhh
@xczzhh - ya BIOS disimpan dalam ROM, yang mendeteksi kehadiran Bootloader di Partisi. Saat memasang OS apa pun, itu menciptakan semacam entri flag di BIOS untuk mendeteksi BOOTLOADER masing-masing.
atenz
1
@xczzhh, tidak, boot loader ada di hard drive atau disk lain. Itu diinstal bersama dengan OS. Kecuali Anda mengunduh dan menginstal pembaruan dari pembuat motherboard Anda, ROM tidak pernah berubah.
psusi
EFI menggunakan aplikasi EFI sebagai gantinya. Ini memuat aplikasi EFI dalam NVRAM
Suici Doga
@SuiciDoga, tidak, aplikasi EFI (yang pada dasarnya terbatas pada beberapa utilitas peningkatan firmware dan boot loader) disimpan di partisi sistem EFI pada hard disk. NVRAM adalah tempat EFI menyimpan beberapa variabel konfigurasi, seperti urutan boot.
psusi
23

ROM tidak ada dalam memori Utama:

ROM bukan bagian dari memori Utama. Ini adalah chip terpisah, yang sebagian besar merupakan built-in di IC yang lebih besar. Contoh lainnya, PC Anda dapat terdiri dari beberapa ROM. Itu dibangun di papan ibumu.

Umumnya:

  • ROM berukuran sangat kecil. Memori ini non-volatile, dalam arti, program yang disimpan dalam ROM tidak terhapus dengan daya dimatikan.
  • ROM digunakan untuk menyimpan program permanen, yang sangat penting bagi perangkat keras Anda untuk melakukan dengan benar.
  • Contoh khas ROM adalah chip BIOS. Di mana program boot tingkat rendah dan menginisialisasi perangkat keras disimpan

Anda menyebutkan bahwa, Anda membaca sebuah artikel di mana penulis berkata, "ROM adalah bagian dari memori Utama". Ini membingungkan, karena biasanya Memori Utama mengacu pada jenis memori yang volatile, seperti RAM. Tapi ya, Jika Anda menggunakan istilah Memori Utama untuk seluruh ruang memori PC, maka ROM adalah bagian dari ruang memori itu. Anda harus mencatat bahwa, umumnya Memori Utama tidak termasuk jenis memori sebagai ROM .

Di mana Bootloader disimpan:

Sistem modern menggunakan dua tahap boot loading. Pada langkah pertama, sebuah program kecil dimuat dari suatu sektor (lebih sering disebut sektor boot) dari Hard disk. Program kecil ini pada gilirannya memuat program dari suatu tempat di disk, yang disebut bootloader. Dan akhirnya bootloader memuat OS.

Dalam hal sistem Ubuntu, prosesnya adalah sebagai berikut:

  1. Setelah Anda menyalakan PC Anda, BIOS (yang disimpan dalam ROM) secara otomatis menjalankan dan menginisialisasi berbagai bagian perangkat keras PC. Kemudian memeriksa sektor tertentu di perangkat Boot pertama yang ditentukan (biasanya Hard disk). Sektor ini adalah sektor boot, yang berukuran 512 byte.

  2. Program di sektor boot dimuat dalam memori (tahap 1). Program kecil ini memiliki informasi program mana yang harus dimuat ke memori berikutnya dan di mana program itu berada di perangkat Disk atau Boot. Itu memuat program itu. Di Ubuntu, itu /boot/grub/core.img.

  3. Pada tahap ke-2, OS-Loader, GRUB, memuat Ubuntu dengan memuat kernel dan disk ram awal ke dalam memori dan kontrol serah terima ke kernel. Kemudian kernel berjalan dan memuat semua program yang diperlukan seperti display manager, Gui dll.

Jadi, kita dapat dengan jelas mengatakan, bahwa bootloader tidak disimpan dalam ROM, atau dalam RAM, Ini sebenarnya disimpan di Hard disk (atau perangkat Boot lain, seperti bootable CDROM, drive USB dll), tepatnya berbicara sektor pertama dari hard disk, yang berukuran 512 byte dan sering disebut sebagai sektor boot . Dan bootloader ini memuat OS-loader (di Ubuntu, itu adalah grub) yang juga berada di hard disk ( /boot/grub/folder), dan tugasnya memuat OS (katakanlah, Ubuntu).

Sebagai tes, Lepaskan hard disk (dan semua perangkat boot lainnya) dan coba boot. Anda dapat naik ke langkah BIOS, tetapi setelah langkah itu, Anda tidak dapat mem-boot apa pun. Kemungkinan besar BIOS akan berkata, " Tidak ditemukan perangkat Boot " atau " Tidak ditemukan Sistem Operasi " atau yang serupa.

Semoga jawaban ini akan membantu.


Untuk informasi lebih lanjut, Anda mungkin ingin mengunjungi tautan ini:

  1. http://en.wikipedia.org/wiki/Read-only_memory
  2. http://en.wikipedia.org/wiki/Random-access_memory
Anwar
sumber
2
ROM belum lebih cepat dari RAM selama sekitar satu dekade sekarang. Faktanya, salah satu hal pertama yang dilakukan BIOS modern adalah menyalin dirinya sendiri ke dalam RAM karena RAM jauh lebih cepat.
David Schwartz
1
@ Davidvidchwartz, Sudah lebih dari satu dekade sekarang. Setiap PC BIOS yang saya gunakan pada pertengahan 90-an memiliki opsi untuk membayangi bios dalam RAM untuk kecepatan.
psusi
@Anwar, tautan ke Memori Utama sudah mati.
The Matt
15

Prosesor yang kompatibel x86 selalu dimulai dalam apa yang disebut mode "nyata", yang merupakan mode 16-bit dengan 1 megabyte memori yang dapat dialamatkan tersedia. Dari ruang alamat itu, 640K tersedia untuk program, dan alamat di atas yang dipetakan ke perangkat yang berbeda.

Misalnya, alamat mulai dari 0xA000: 0x0000 dipetakan ke RAM video, jadi, menulis data di sana akan benar-benar menulis data ke memori adaptor video yang menampilkan piksel pada layar.

Demikian pula, ROM BIOS dimulai dari 0xF000: 0000 sehingga CPU, ketika dinyalakan, cukup mulai menjalankan instruksi satu per satu mulai dari alamat yang ditentukan sebelumnya. BIOS ROM berisi program awal yang dimulai dengan melakukan "power-on self test", atau POST. Dari Wikipedia:

Perangkat lunak BIOS dibangun ke dalam PC, dan merupakan kode pertama yang dijalankan oleh PC saat dinyalakan ('boot firmware'). Ketika PC dinyalakan, pekerjaan pertama untuk BIOS adalah uji daya sendiri, yang menginisialisasi dan mengidentifikasi perangkat sistem seperti CPU, RAM, kartu tampilan video, keyboard dan mouse, drive hard disk, drive disk optik dan perangkat keras lainnya. BIOS kemudian menempatkan perangkat lunak boot loader yang dipegang pada perangkat periferal (ditetapkan sebagai 'perangkat boot'), seperti hard disk atau CD / DVD, dan memuat serta menjalankan perangkat lunak itu, memberikannya kendali atas PC. 2 Proses ini dikenal sebagai booting, atau booting, yang merupakan kependekan dari bootstrap.

Firmware BIOS bertanggung jawab untuk membaca sektor pertama dari disk ke dalam memori dan meneruskan kontrol ke program kecil yang, sekali lagi, terletak di alamat tertentu di sana. The MBR bootloader kemudian dapat mulai loading OS langsung (seperti halnya dengan MS-DOS) atau memuat "tahap kedua", yang tidak terbatas pada batas-batas sektor disk tunggal.

Bootloader yang menggunakan pendekatan multi-tahap bisa sangat kompleks dengan teks atau antarmuka grafis yang memungkinkan pengguna untuk memilih dari mana disk atau partisi memuat sistem operasi.

Jadi jika, seperti yang disarankan Uri, Anda tertarik apakah bootloader Windows dan GRUB dapat bersama-sama ada, jawabannya adalah: MBR yang sebenarnya hanya dapat berisi bootloader tahap pertama (ayolah, seluruh sektor hanya 512 byte) , tetapi tahap kedua dari bootloader mungkin dapat "rantai-memuat" sistem operasi dari partisi yang berbeda. Bootloader Windows hanya mampu mengenali dan memuat Windows, sementara GRUB mampu memuat Linux atau meneruskan kontrol ke bootloader lain yang tersimpan dalam rekaman boot volume dari salah satu partisi, yang memungkinkan untuk mem-boot Windows atau OS lainnya. Proses terakhir disebut pemuatan rantai.

Ketika Anda menginstal Ubuntu pada komputer yang memiliki Windows di dalamnya, GRUB akan diinstal ke MBR dan Anda akan dapat mem-boot Ubuntu dan Windows.

Namun, jika Windows diinstal setelah Ubuntu, GRUB akan diganti dengan Windows bootloader dan Anda harus menginstal ulang GRUB untuk dapat mem-boot kembali Ubuntu.

Sergey
sumber
Saya kira dia ingin tahu apakah bootloader Windows dan GRUB dapat bersama-sama ada, atau tidak. UEFI, disk GPT tidak menggunakan MBR bagaimana pengaruhnya?
Uri Herrera
ROM BIOS terletak di segmen F000: yang tepat di bawah 1 MB. 640k berasal dari segmen di bawah A000 :, yang tersedia untuk OS mode nyata dan program yang akan digunakan.
psusi
@psusi: Anda benar, saya ulang kata bagian itu
Sergey
Terima kasih atas jawabannya. Apakah maksud Anda ada beberapa bootloader (satu di dalam BIOS, dan satu lagi di MBR?) Yang terlibat untuk mem-boot sistem operasi? Ini baru bagi saya ... :)
xczzhh
@ xczzhh Baiklah, ok, kode di BIOS tidak disebut "bootloader", yang disimpan di disk. Saya memperbarui jawaban saya untuk memperjelas ini.
Sergey
4

Konflik antara apa yang Anda katakan tentang bootloader yang berada dalam ROM dan sedang dalam MBR mungkin disebabkan oleh bootloader yang digunakan untuk kode apa pun yang mengetahui cara melakukan minimum memuat kode untuk membuat komputer melakukan sesuatu yang bermanfaat, termasuk masing-masing status dalam boot multi-tahap.

Jadi, kondisi awalnya adalah memiliki komputer, yang merupakan perangkat yang dapat diprogram, tetapi tidak tahu cara memuat perangkat lunak untuk dijalankan karena tidak ada perangkat lunak yang dimuat. (Dan karenanya boot dari tarik sendiri ke atas dari bootstraps-nya ).

Secara historis, ada beberapa solusi berbeda untuk masalah ini, tetapi hari ini kita mulai dengan beberapa kode dalam ROM (kemungkinan besar hanya EEPROM), yang cukup untuk membuatnya melihat perangkat yang berbeda dan mencobanya secara bergantian sampai menemukan satu yang bootable.

(Inilah sebabnya mengapa banyak sistem akan mem-boot CD atau DVD jika Anda memasukkan disk pemasang OS ke dalam dan dari hard-drive sebaliknya, BIOS [kode pada ROM, termasuk kode yang sedang kita bicarakan dan beberapa lainnya rendah -level stuff yang memulai semuanya] diatur untuk melihat drive CD / DVD terlebih dahulu, kemudian pada hard-drive jika tidak menemukan apa-apa, tweaker sering mengaturnya untuk mengabaikan drive CD / DVD kecuali diminta secara manual sehingga tidak membuang waktu memutar disk yang tidak dapat di-boot yang tertinggal di drive).

Kode ini dalam ROM kadang - kadang disebut bootloader .

Ketika ia tahu drive apa yang harus dilihat, maka ia akan melihat MBR, yang berisi informasi tentang partisi primer - bagaimana nanti Anda bisa melihat / atau / boot atau C: / (pada sistem Windows) jika Anda bahkan tidak tahu bagian mana dari disk itu, partisi mana, tidak peduli bagaimana setiap partisi dipasang? - dan beberapa kode dengan instruksi lebih lanjut untuk dieksekusi. (Kebetulan, ini menjelaskan mengapa beberapa OS - seperti Windows - hanya dapat diinstal pada partisi primer, detail partisi tersebut ada di MBR dan itulah satu-satunya informasi partisi yang telah dibaca oleh bootloader mereka, dan tidak memuat EBR ke belajar tentang partisi logis, sejauh menyangkut partisi itu bahkan belum ada).

Kode yang dapat dieksekusi itu, juga disebut bootloader . Ketika kita ingin membedakan antara ini dan apa yang terjadi selanjutnya, itu disebut boot loader utama (karena kecuali kita membuat BIOS kita sendiri, kita mengabaikan bit ROM sebagai di luar kendali kita).

Kode itu akan menjadi sangat kecil karena hanya ada sekitar 400 byte untuk menyesuaikan, sehingga untuk melakukan sesuatu yang nyata, itu akan memuat beberapa kode lagi, yang bisa lebih besar karena tidak harus berurusan dengan kendala ini.

Kode ini, juga dikenal sebagai bootloader . Ketika kami ingin membedakan antara ini dan apa yang datang sebelumnya, itu disebut boot loader sekunder .

Kode itu mungkin bisa menjadi tahap terakhir dalam proses. Itu akan terjadi jika Anda hanya memiliki satu OS, atau jika semua OS di sistem Anda menggunakan boot-loader yang kompatibel (mis. Dua instalasi Linux yang keduanya menggunakan GRUB, sehingga GRUB mana pun yang diperbarui terakhir dapat menawarkan untuk mem-boot ke salah satu dari mereka) lalu menyajikan menu (jika diinginkan) dimuat dalam kernel, dan melewati kendali atas sistem operasi.

Dalam kasus di mana Anda memiliki OS yang tidak kompatibel dengan bootloader itu, itu mungkin berantai. Misalnya, jika Anda memiliki Windows dan Linux di mesin yang sama, opsi GRUB untuk memuat Windows sebenarnya akan memuat bootloader lain yang hanya tahu tentang instalasi Windows, dan meneruskannya. Meskipun ini adalah tahap tersier dalam proses, itu masih disebut boot loader sekunder , karena tidak tahu atau peduli bahwa ada boot loader sekunder lain yang berjalan sebelum itu. Ini juga akan menjadi kasus dengan instalasi Linux yang menggunakan berbagai jenis bootloader sekunder.

Sebagian besar ketika kita berbicara tentang bootloader dalam hal Linux, umumnya kita tidak bermaksud kode ROM (itu bukan bagian dari Linux, atau diubah dengan menginstal Linux). Ketika kami melakukannya, update-grubkami mengubah bootloader sekunder, yang biasanya di / boot dari instalasi tertentu. Ketika kita lakukan install-grubkita mengubahnya dan juga bootloader utama di MBR sehingga memiliki cukup kode untuk mengetahui di mana / boot (mungkin memulai RAID perangkat lunak saat berjalan) dan akan memuat dan mengeksekusi ketika itu, itu sendiri dieksekusi .

Jadi, secara ringkas Anda salah ketika Anda mengatakan ROM adalah bagian dari memori utama * karena terpisah. (Memang, RAM diambil sebagai antonim untuk ROM). Anda benar mengatakan bahwa ada bootloader di sana dan di MBR, karena mereka dua langkah dari proses dan keduanya kadang-kadang disebut dengan nama itu. Dan jawaban untuk "Apakah OS yang berbeda menyimpan bootloader mereka di tempat yang berbeda?" "sebagian besar", karena jika Anda bootloader sekunder yang tidak kompatibel akan menyembunyikan bootloader lain (jika Anda menginstal Windows setelah menginstal Linux) atau chainload ke yang lain jika diminta (jika Anda memperbaiki situasi itu, atau menginstal Linux setelah Windows), tetapi sebuah OS dapat berbagi bootloader sekunder jika kompatibel (jika Anda menginstal Linux setelah Linux lain yang menggunakan jenis boot loader sekunder yang sama, dan itu dapat melihat Linux lainnya [terkadang perangkat lunak RAID membingungkan hal-hal dan membuat pemuatan rantai diperlukan).

* Pada hari-hari di mana seseorang secara terprogram akan menggunakan ROM dan RAM ini berbeda. Sebagai contoh, pada ZX Spectrum, ROM akan berukuran 16kiB dan menyertakan penerjemah BASIC, sehingga memberi Anda titik awal untuk memuat sesuatu ke dalam 48kiB atau 128KiB (paged) atau RAM, (dalam hal ini, pada dasarnya boot ke penerjemah BASIC dan kemudian menggunakannya untuk mem-boot apa yang ada di kaset), ada sejumlah fungsi dari penerjemah BASIC yang dapat digunakan oleh program dalam RAM (mengapa menulis fungsi trigonometri ketika komputer sudah memiliki satu di posisi yang dikenal) terutama ketika Anda hanya menjalankan 48kiB untuk menjalankan semua kode Anda sendiri). ROM ini juga terlihat dengan cara yang sama seperti RAM, hanya di alamat yang berbeda. Dalam kasus seperti itu ROM adalah bagian dari memori utama seperti RAM, tetapi tidak dapat ditulis.

Jon Hanna
sumber
0

Buat contoh kerja minimal dan jalankan di emulator untuk memahami konsep-konsep tersebut:

printf '\364%509s\125\252' > main.img
qemu-system-x86_64 -hda main.img

Ini adalah "bootloader" super sederhana yang melakukan hltinstruksi tunggal . Info lebih lanjut di: https://stackoverflow.com/a/32483545/895245

Anda kemudian dapat menjalankannya di perangkat keras nyata dengan:

sudo dd if=main.img of=/dev/sdX

dan mencolokkan USB di komputer Anda, dan boot dari sana.

Ketika Anda melakukan ini, menjadi jelas bahwa bootloader adalah sesuatu yang hidup pada disk penyimpanan permanen seperti USB atau hard disk.

Apa yang hidup pada ROM adalah kode yang menjalankan bootloader untuk kita, yang disebut firmware (atau kurang tepatnya BIOS).

Ciro Santilli 新疆 改造 中心 法轮功 六四 事件
sumber
0

Di masa lalu, program boot berada pada selotip kertas yang mirip dengan yang digunakan oleh mesin telegraf atau media kartu berlubang ('jangan melihat keduanya lagi). proses yang dulu disebut IPL, kependekan dari Initial Program Load. Kadang-kadang jika pita kertas atau pembaca kartu tidak tersedia, perlu memasukkan kode IPL biner langsung ke prosesor melalui konsol di panel depan. Wah!

Saat ini kode IPL berada di pROMs yang ketika dieksekusi pada gilirannya memuat dan mengeksekusi loader boot sekunder yang dirancang untuk memuat (bootup) sistem operasi yang diinginkan. loader sekunder dapat berada pada media apa pun pada bagian mana pun dari pengaturan yang diketahui atau dapat dialamatkan oleh kode IPL.

Loi
sumber
-1

Boot loader biasanya berada di sektor pertama hard drive, biasanya disebut Master Boot Record.

Tepuk tangan

j0N45
sumber