Önyükleyici nerede depolanıyor - ROM, RAM veya başka bir yerde?


30

Wikipedia girişine göre, bir bootloader ROM'da depolanan (ana belleğin bir kısmı (RAM) değil mi?) Sadece okunabilen ve silinemeyen küçük bir programdır. Burada biraz şaşırdım. Bu, satın aldığımız her RAM'in varsayılan olarak kurulu bir önyükleyici olduğu anlamına mı geliyor? Ayrıca, genellikle sabit diskte bir bootloader içeren MBR (Master Boot Record) adı verilen bir alan olduğunu söyleyen bir kitaptan okudum ...

Peki bu bootloader tam olarak nerede bulunuyor? Farklı İşletim Sistemleri önyükleyicilerini farklı yerlerde depolar mı?

Yanıtlar:


43

ROM, RAM'den ayrı bir yongadır. İçeriğini elinde tutabilmek için güç gerektirmez ve başlangıçta hiçbir şekilde değiştirilemez, ancak fabrikadan bağlanır. Daha sonra PROM veya Programlanabilir Salt Okunur Bellek gerçek ROM'un yerini aldı. Bu yongalar fabrikadan boşaldı ve bir keresinde, yonganın bitlerini yakan, durumlarının değişmesine neden olan özel bir prosedür kullanılarak yazılabilir. Bu daha sonra EPROM veya Silinebilir Programlanabilir Bellek ile değiştirildi. Bu yongaların üzerinde küçük bir pencere vardı ve üzerlerine ultraviyole ışık tuttuysanız, tekrar programlanmalarını sağlayan silinebilir. Bunlar daha sonra EEPROM veya Elektrikle Silinebilir Programlanabilir Bellek ile değiştirildi. Bu yongalar, yeniden programlanabilmeleri için onları silmek için özel bir yazılım prosedürüne sahiptir.

Anakartta, günümüzde EFI ürün yazılımı ile değiştirilmesine rağmen, PC parlance olarak genellikle BIOS veya Temel Giriş Çıkış Sistemi olarak adlandırılan ürün yazılımını tutan bir tür ROM yongası vardır. Bu, CPU'nun ilk açılışta çalışmaya başladığı yazılımdır. Tüm donanım yazılımı donanımın başlatılmasını gerçekleştirir, tipik olarak bazı tanılama çıktıları sağlar ve kullanıcının donanımı yapılandırması için bir yol sağlar, ardından sırayla işletim sistemini konumlandıran ve yükleyen önyükleme yükleyicisini bulur ve yükler.

PC BIOS ile, genellikle ilk tespit edilen ilk sabit disk olan, önyüklemeye karar verdiği diskten ilk kesimi yükler ve yürütür. Kurallara göre, Ana Önyükleme Kaydı adı verilen bir sabit diskin ilk kesimi, diskteki bölümlerin konumlarını listeleyen bir DOS bölüm tablosu içerir ve önyükleyici için biraz yer bırakır. Ubuntu, MBR'ye yüklemek ve yürütmek için yeterince kod yerleştiren GRUB önyükleyici kullanıyor /boot/grub/core.img. Normalde bu dosyanın bir kopyası MBR’yi izleyen sektörlere, ancak ilk bölümden önce yerleştirilir ve MBR’de /boot/grub/core.imgbulunan sınırlı bir alanda yerini bulmak çok zor olduğundan, MBR’nin yükleyeceği gerçektir. .

Grub çekirdek görüntüsü, temel grub kodunu, ayrıca /boot/grubek modüller yükleyebilmesi için erişmek için gereken tüm modülleri ve hangi işletim sistemlerinin önyüklenebileceğini ve nerede bulunabileceğini tanımlayan grub config dosyasını içerir.

Intel Mac'lerde kullanılan ve en yeni PC anakartlarındaki BIOS'un yerine kullanılabilir olarak kullanılan EFI ürün yazılımı, önyükleyici dosyalarını tutan özel bir bölüm gerektirir ve bu ürün yazılımı bu dosyaları bulmak ve sadece ne olursa olsun yüklemek ve çalıştırmak yerine bir tane yüklemek için yeterince akıllıdır. diskin ilk sektöründe.


İşte Glenn Brookshear'ın Bilgisayar Bilimi'nden 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) kendisine Genel Bakış'dan alınan bir paragraf . Ana hafıza, RAM ve ROM olmak üzere iki parçadan oluşur. Ben sadece sözde bootloader ana belleğin ROM kısmında ... @Sergey yüklü olup olmadığını bilmek istiyorum
xczzhh

@xczzhh - evet BIOS, Partitions içerisinde bulunan Bootloader'ı algılayan ROM'da saklanır. Herhangi bir işletim sistemi kurduktan sonra, ilgili BOOTLOADER'ı tespit etmek için BIOS'ta bir giriş tipi bayrağı oluşturur.
atenz

1
@ xczzhh, hayır, önyükleyici, sabit sürücüde veya başka bir diskte. İşletim sistemi ile birlikte yüklenir. Anakart üreticinizden bir güncelleme indirip kurmazsanız, ROM hiçbir zaman değişmez.
psusi

EFI bunun yerine EFI uygulamalarını kullanıyor. EFI uygulamasını
NVRAM'a yüklüyor

@SuiciDoga, hayır, EFI uygulamaları (temel olarak birkaç ürün yazılımı yükseltme yardımcı programı ve önyükleme yükleyicisi ile sınırlıdır) sabit diskin EFI sistem bölümünde saklanır. NVRAM, EFI'nin önyükleme sırası gibi bazı yapılandırma değişkenlerini sakladığı yerdir.
psusi

23

ROM, Ana bellekte değil:

ROM, Ana belleğin bir parçası değil. Ayrı bir çip olup çoğu zaman daha büyük bir IC'de yerleşiktir. Daha fazla örnek, PC'niz birkaç ROM'dan oluşabilir. Bunlar ana kartınıza yerleştirilmiş.

Genellikle:

  • ROM, bellek boyutunda çok küçük. Bu bellek geçici değildir, yani ROM’da depolanan program, güç kapatıldığında silinmez.
  • ROM, donanımınızın doğru şekilde çalışması için çok önemli olan kalıcı programları depolamak için kullanılır.
  • Tipik bir ROM örneği BIOS yongasıdır. Çok düşük seviyedeki önyükleme ve donanım başlatma programının saklandığı yer

Sizden bahsettiniz, yazarın "ROM, Ana belleğin bir parçası" demiştir. Bu kafa karıştırıcıdır, çünkü tipik olarak Ana Bellek , RAM gibi geçici olan türlerin belleğini ifade eder. Ancak evet, bir PC'nin tüm bellek alanı için Ana Bellek terimini kullanıyorsanız , ROM bu bellek alanının bir parçasıdır. Genelde Ana Hafızanın ROM olarak tür hafızasını hariç tuttuğunu unutmamalısınız .

Bootloader nerede saklanır:

Modern sistem iki aşamalı önyükleme yüklemesi kullanıyor. İlk adımda, sabit disk sektöründen (önyükleme sektörü olarak adlandırılır) küçük bir program yüklenir. Bu küçük program sırayla, önyükleyici adı verilen diskteki bir yerden bir program yükler. Sonunda bootloader işletim sistemini yükler.

Ubuntu sistemi açısından, süreç aşağıdaki gibidir:

  1. Bilgisayarınızı açtıktan sonra, BIOS (ROM'da depolanan) otomatik olarak çalışır ve PC donanımının çeşitli bölümlerini başlatır. Ardından, tanımlanan ilk Önyükleme aygıtında (genellikle Sabit disk) belirli bir sektörü denetler. Bu sektör, 512 bayt boyutundaki önyükleme sektörüdür.

  2. Önyükleme sektöründeki program belleğe yüklenir (1. aşama). Bu küçük program, hangi programların bir sonraki belleğe yüklenmesi gerektiğini ve bu programın Disk veya Önyükleme aygıtında bulunduğu bilgiyi içerir. Bu programı yüklüyor. Ubuntu'da öyle /boot/grub/core.img.

  3. 2. aşamada, OS-Loader, GRUB, çekirdeği ve ilk ram diskini belleğe yükleyerek Ubuntu'yu yükler ve çekirdeğe teslim kontrolü. Daha sonra çekirdek çalışır ve ekran yöneticisi, Gui vb. Gerekli tüm programları yükler.

Yani, açıkça söyleyebiliriz ki, önyükleyici, ne ROM'da ne de RAM'de, aslında Sabit diskte (ya da önyüklenebilir CDROM, USB sürücüler vb. Gibi diğer Önyükleme aygıtlarında) depolanır; boyutu 512 bayt olan ve genellikle önyükleme sektörü olarak anılan sabit disk . Ve bu önyükleyici, aynı zamanda sabit diskte (yani /boot/grub/klasörde) bulunan işletim sistemi yükleyiciyi (Ubuntu'da, grubudur) yükler ve görevi de işletim sistemini (Ubuntu) yüklemektir.

Test olarak, Sabit diski çıkarın (ve diğer tüm önyükleme aygıtlarını) ve önyüklemeyi deneyin. BIOS adımına gidebilirsiniz, ancak bu adımdan sonra hiçbir şey önyükleyemezsiniz. Büyük olasılıkla BIOS " Önyükleme aygıtı bulunamadı " veya " İşletim Sistemi bulunamadı " ya da benzer bir şey söyleyecektir.

Umarım bu cevap yardımcı olur.


Daha fazla bilgi için bu bağlantıları ziyaret etmek isteyebilirsiniz:

  1. http://en.wikipedia.org/wiki/Read-only_memory
  2. http://en.wikipedia.org/wiki/Random-access_memory

2
ROM, on yıldan beri RAM'den daha hızlı olmamıştır. Aslında, modern bir BIOS'un ilk yaptığı şeylerden biri RAM'e kopyalamaktır çünkü RAM çok daha hızlıdır.
David Schwartz

1
@DavidSchwartz, Şimdi on yıldan fazla oldu. 90'lı yılların ortalarında kullandığım her PC BIOS'unun hızları RAM'deki bioları gölgelendirme seçeneği vardı.
psusi

@Anwar, Ana Belleğe bağlantı öldü.
Matt

15

X86 uyumlu bir işlemci her zaman 1 megabayt adreslenebilir belleğe sahip 16 bit mod olan "gerçek" modda başlar. Bu adres alanından, 640K, programlar ve yukarıda belirtilen adresleri farklı cihazlara eşlenmiş halde bulabilirsiniz.

Örneğin, 0xA000: 0x0000'den başlayan adresler video RAM'le eşlenir, bu nedenle veri yazmak, gerçekte ekran üzerinde pikselleri görüntüleyen video bağdaştırıcısının belleğine veri yazar.

Benzer şekilde, BIOS ROM, 0xF000: 0000'den başlar, böylece CPU açıldığında, önceden tanımlanmış olan adresten başlayarak talimatları tek tek yürütmeye başlar. BIOS ROM, "açılışta kendini sınama" veya POST gerçekleştirerek başlayan başlangıç ​​programını içerir. Wikipedia'dan:

BIOS yazılımı PC'de yerleşiktir ve çalıştırıldığında PC tarafından çalıştırılan ilk koddur ('boot firmware'). PC başlatıldığında, BIOS için ilk iş, CPU, RAM, video ekran kartı, klavye ve fare, sabit disk sürücüsü, optik disk sürücüsü ve benzeri sistem aygıtlarını başlatan ve tanımlayan açılıştaki öz sınamadır. diğer donanım Ardından BIOS, sabit disk veya CD / DVD gibi çevresel bir aygıtta ('önyükleme aygıtı' olarak adlandırılır) tutulan önyükleyici yazılımını bulur ve bilgisayarın kontrolünü sağlayarak bu yazılımı yükler ve çalıştırır. 2 Bu işlem, önyükleme için kısa olan önyükleme veya önyükleme olarak bilinir.

BIOS ürün yazılımı, ilk sektörü diskten belleğe okumak ve kontrolün yine belirli bir adreste bulunan küçük bir programa geçirilmesinden sorumludur. MBR bootloaderlı işletim sistemini doğrudan yükleme başlayabilir (MS-DOS olduğu) ya da tek bir disk sektörü sınırları ile sınırlı değildir "ikinci aşama", yük.

Çok aşamalı yaklaşımı kullanan önyükleyiciler, kullanıcının hangi disk veya bölümden bir işletim sistemi yükleyeceğini seçmesini sağlayan metin veya grafik arabirimi ile oldukça karmaşık olabilir.

Bu nedenle, eğer Uri'nin önerdiği gibi, Windows önyükleyici ve GRUB'un birlikte var olup olamayacağını merak ediyorsanız, cevap şu: gerçek MBR yalnızca tek bir ilk aşama önyükleyici içerebilir (hadi, tüm sektör yalnızca 512 bayttır) Ancak, bir önyükleyicinin ikinci aşaması, işletim sistemlerini farklı bölümlerden "zincir yükü" olabilir. Windows önyükleyici yalnızca Windows'u tanıyabilir ve yükleyebilir, GRUB ise Linux veya diğer işletim sistemlerini önyüklemeye izin veren bölümlerden birinin birim önyükleme kaydında depolanan başka bir önyükleyiciye Linux yükleyebilir veya denetimi aktarabilir . İkinci işleme zincir yükleme denir.

Ubuntu'yu Windows yüklü bir bilgisayara yüklediğinizde, GRUB MBR'ye yüklenecek ve hem Ubuntu hem de Windows'u açabileceksiniz.

Ancak, Ubuntu'dan sonra Windows kurulursa, GRUB, Windows önyükleyici ile değiştirilecektir ve Ubuntu'yu tekrar önyükleyebilmek için GRUB'u yeniden kurmanız gerekecektir.


Sanırım Windows bootloader ve GRUB'un birlikte var olup olamayacağını bilmek istiyor. UEFI, GPT diskleri MBR kullanmaz, bu onları nasıl etkiler?
Uri Herrera

BIOS ROM, 1 MB'ın hemen altındaki F000: segmentinde bulunur. 640k, gerçek işletim sistemi işletim sistemi ve kullanılacak programlar için mevcut olan A000: altındaki segmentlerdendir.
psusi

@ psusi: haklısın, o kısmı tekrar ifade ettim
Sergey

Cevap için teşekkür ederim. Bir işletim sistemini önyüklemek için birden fazla önyükleyici (BIOS'ta biri MBR'da mı?) Olduğunu mu demek istiyorsunuz? Benim için yeni ... :)
xczzhh

@xczzhh Tamam, BIOS'taki kodun adı “bootloader” değil, diskte depolanan. Bunu netleştirmek için cevabımı güncelledim.
Sergey

4

Ön yükleyici ROM olmak ve MBR olmak hakkında söylediklerine arasındaki çatışma nedeniyle belki de bootloader bilgisayar dahil her işe yarar bir şey, yetinmek kodunda yüke minimum nasıl çalışır herhangi bir kod için kullanılan çok aşamalı önyüklemede durumu belirtin.

Bu nedenle başlangıç ​​durumu, programlanabilir bir cihaz olan ancak yüklü olan herhangi bir yazılımı olmadığı için çalışacak yazılımı nasıl yükleyeceğini bilmeyen bir bilgisayara sahip olmaktır. (Ve böylece önyükleme , kendisini önyükleme noktalarından yukarı çeker ).

Tarihsel olarak, bu soruna birkaç farklı çözüm vardı, ancak bugünlerde ROM'da bazı kodlarla başlıyoruz (büyük olasılıkla kesinlikle EEPROM); önyüklenebilir.

(Bu nedenle, bir işletim sistemi yükleyici diskini başka bir sabit sürücüye takıp çıkarmazsanız, BIOS [ROM'daki kod, bahsettiğimiz kod da dahil olmak üzere kod ve diğer bir kısmı düşük şeyleri başlatan seviyeli şeyler] ilk önce CD / DVD sürücüsüne, ardından bir şey bulamazsa sabit sürücüye bakacak şekilde ayarlanmış, tweakers genellikle manuel olarak istenmedikçe CD / DVD sürücüsünü yoksaymaya ayarlanmış sürücüde bırakılan önyüklenebilir olmayan bir diski döndürerek zaman kaybetmez).

ROM'daki bu koda bazen bir bootloader denir .

Hangi sürücüye bakacağını bildiğinde, birincil bölümler hakkında bilgi içeren MBR'ye bakacaktır - daha sonra / veya / boot veya C: / 'ye (Windows sisteminde) nasıl bakabildiniz? Hangi bölümün hangi disk disk olduğunu biliyor musunuz, her bölümün nasıl monte edildiğini aldırmayın. - ve yürütmek için daha fazla talimat içeren bazı kodlar. (Bu arada, bu neden bazı işletim sistemlerinde - Windows gibi - sadece bir birincil bölüme kurulabildiğini, bu bölümlerin ayrıntılarının MBR’de olduğunu ve önyükleyicilerinin okudukları tek bölüm bilgisinin EBR’yi yüklemediğini açıklıyor. mantıksal bölümler hakkında bilgi edinin;

Bu çalıştırılabilir kod, aynı zamanda bir bootloader olarak da adlandırılır . Bunu ve sonra gelenleri ayırt etmeye özen gösterdiğimizde buna birincil önyükleyici denir (çünkü kendi BIOS'umuzu yapmadığımız sürece ROM'umuzu kontrolümüzün dışında bırakıyoruz).

Bu kod, sığması için yalnızca 400 bayt olduğu için çok küçük olacaktır, bu yüzden gerçek olan her şeyi yapmak için, bu kısıtlama ile uğraşmak zorunda olmadığından daha büyük olabilecek daha fazla kod yükleyecektir.

Bu kod, aynı zamanda bir bootloader olarak da bilinir . Bunu ve daha önce gelenleri ayırt etmeye özen gösterdiğimizde, buna ikincil önyükleyici denir .

Bu kod belki de süreçteki son aşama olabilir. Yalnızca bir işletim sisteminiz varsa veya sisteminizdeki tüm işletim sistemlerinde uyumlu önyükleme yükleyicileri kullanılıyorsa (örneğin, her ikisinin de GRUB kullandığı iki Linux kurulumu var, bu yüzden en son güncellenen hangisi hangisine önyükleme olanağı sunabilir) menüleri (istenirse) bir çekirdek içinde yükler sunar ve işletim sistemi üzerindeki kontrolünü geçer.

Bu önyükleyiciyle uyumlu olmayan bir işletim sisteminizin olması durumunda, zincir yükü olabilir. Örneğin, aynı makinede Windows ve Linux kullanıyorsanız, Windows'u yüklemek için GRUB seçeneği aslında yalnızca Windows kurulumlarını bilen başka bir önyükleyici yükler ve ona geçer. Bu süreçte üçüncül bir aşama olsa da, hala ikincil bir önyükleyici yükleyici olarak adlandırılıyor , çünkü ondan önce çalışan başka bir ikincil önyükleyici olduğunu bilmiyor ve umursamıyor. Bu, farklı türde bir ikincil önyükleyici kullanan bir Linux kurulumunda da geçerlidir.

Çoğunlukla Linux açısından bootloader hakkında konuştuğumuzda , genellikle ROM kodunu kastetmiyoruz (Linux'un bir parçası değil veya Linux yükleyerek değiştirilir). Bunu yaptığımızda update-grub, genellikle belirli bir kurulumun / önyüklemesi olan ikincil önyükleyici değiştiriyoruz. Bunu yaptığımızda install-grubonu ve MBR'deki birincil önyükleyiciyi değiştiriyoruz, böylece / boot'ın nerede olduğunu (belki de bir RAID yazılımını başlatarak) bilmek için yeterli koda sahip olacak ve onu çalıştığında yükleyecek ve çalıştıracaktır. .

Yani, özet olarak, ROM'un ana belleğin bir parçası olduğunu söylerken hatalıydınız * çünkü ayrıdır. (Gerçekten de, RAM ROM için çok zengin olarak alınır). Hem orada hem de MBR'de bir bootloader olduğunu söylemede haklıydınız, çünkü işlemin iki adımıdır ve her ikisi de bazen bu adla adlandırılır. Ve "Farklı işletim sistemleri önyükleyicilerini farklı yerlerde depolar mı?" "çoğunlukla" çünkü uyumsuz ikincil önyükleyiciler, ya diğer önyükleyicileri gizler (eğer Linux kurduktan sonra Windows'u yüklerseniz) ya da istenirse diğerine zincir yükünü yüklerler (eğer bu durumu düzeltirseniz veya Windows'tan sonra Linux yüklerseniz) uyumlu olduklarında ikincil bir önyükleyiciyi paylaşabilirler (aynı ikincil önyükleyici türünü kullanan başka bir Linux'un ardından Linux yüklerseniz ve diğer Linux'u görebilir (bazen RAID yazılımı işleri karıştırır ve zincirleme işlemini gerekli kılar).

* Programın hem ROM hem de RAM'den faydalanacağı günlerde, bu farklıydı. Örneğin, bir ZX Spektrumunda, ROM 16kiB olacaktır ve bir BASIC yorumlayıcısı içerecektir, böylece size 48kiB veya 128KiB (disk belleği) veya RAM'e bir şey yüklemek için başlangıç ​​noktasını (bu durumda, esas olarak bu BASIC tercümanı ve bunu kasette bulunanlara önyüklemek için kullanarak), BASIC tercümanından RAM'deki programların kullanabileceği birçok fonksiyon vardı (bilgisayar zaten bilinen bir pozisyondayken neden bir trig fonksiyonu yazmalı? ? Özellikle tüm kodları çalıştırmak için sadece 48kiB kullandığınızda). Bu ROM, RAM ile aynı şekilde, sadece farklı adreslerde görüldü. Böyle bir durumda ROM, RAM kadar ana belleğin bir parçasıydı ancak yazılabilir değildi.


0

Asgari bir çalışma örneği yapın ve bu kavramları anlamak için bir emülatör üzerinde çalıştırın:

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

Bu tek bir hlttalimat veren süper basit bir "bootloader" . Daha fazla bilgi için: https://stackoverflow.com/a/32483545/895245

Daha sonra ile gerçek donanımda çalıştırabilirsiniz:

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

ve USB'yi bilgisayarınıza takma ve önyükleme.

Bunu yaptığınızda, önyükleyicinin USB veya sabit diskler gibi kalıcı bir depolama diskinde yaşayan bir şey olduğu anlaşılıyor.

ROM'da yaşayan, bizim için önyükleyiciyi başlatan, firmware (veya daha az kesin olarak BIOS) denilen koddur .


0

Eski günlerde, önyükleme programı telgraf makineleri veya delikli kart ortamı tarafından kullanılanlara benzer delikli bir kağıt kaset üzerinde duruyordu ('ikisini de artık görmüyoruz). bu süreç IPL olarak adlandırılır, Başlangıç ​​Program Yükü için kısadır. Bazen bir kağıt kaseti veya kart okuyucusu mevcut değilse, ikili IPL kodunu doğrudan ön paneldeki bir konsol aracılığıyla işlemciye girmeniz gerekebilir. vay!

Günümüzde IPL kodu, sırayla çalıştırıldığında ve istenen işletim sistemini yüklemek (önyüklemek) için uyarlanmış ikincil önyükleyicileri yürüten pROM'larda bulunur. ikincil yükleyici, IPL kodu ile bilinen veya adreslenebilen kurulumun herhangi bir kısmında herhangi bir ortamda olabilir.


-1

Önyükleme genellikle sabit sürücünün ilk bölümünde, genellikle Ana Önyükleme Kaydı olarak adlandırılır.

Şerefe

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.