ROM to odrębny układ od pamięci RAM. Nie wymaga zasilania, aby zachować swoją zawartość, i pierwotnie nie mógł być modyfikowany w żaden sposób, ale został dostarczony fabrycznie. Później PROM lub programowalna pamięć tylko do odczytu zastąpiła prawdziwą pamięć ROM. Te czipy zostały fabrycznie puste i można je było zapisać raz przy użyciu specjalnej procedury, która zasadniczo wypaliła bity układu, powodując zmianę ich stanu. Zostało to następnie zastąpione przez EPROM lub Eraseable Programmable Memory. Te czipy miały małe okienko, a jeśli podświetliłeś je ultrafioletem, można je było usunąć, umożliwiając ich ponowne zaprogramowanie. Zostały one następnie zastąpione EEPROM lub pamięcią programowalną elektrycznie kasowalną. Te układy mają specjalną procedurę programową, aby je usunąć, aby można je było przeprogramować.
Płyta główna ma jakiś układ ROM, który przechowuje oprogramowanie układowe, które w języku PC nazywa się zwykle BIOS lub Basic Input Output System, choć obecnie jest zastępowane oprogramowaniem układowym EFI. Jest to oprogramowanie, które procesor zaczyna od uruchomienia po włączeniu zasilania. Całe oprogramowanie układowe wykonuje inicjalizację sprzętu, zazwyczaj zapewnia dane wyjściowe diagnostyczne i umożliwia użytkownikowi konfigurację sprzętu, a następnie lokalizuje i ładuje moduł ładujący, który z kolei lokalizuje i ładuje system operacyjny.
W systemie BIOS komputera po prostu ładuje się i wykonuje pierwszy sektor z dysku, z którego zdecyduje się uruchomić komputer, który zwykle jest pierwszym wykrytym dyskiem twardym. Zgodnie z konwencją pierwszy sektor dysku twardego, zwany głównym rekordem rozruchowym, zawiera tablicę partycji DOS z listą lokalizacji partycji na dysku i pozostawia miejsce dla modułu ładującego. Ubuntu używa modułu ładującego GRUB, który umieszcza wystarczającą ilość kodu w MBR, aby załadować i wykonać /boot/grub/core.img
. Zwykle kopia tego pliku jest umieszczana w sektorach następujących po MBR, ale przed pierwszą partycją, i to właśnie ładuje MBR, ponieważ znalezienie lokalizacji /boot/grub/core.img
jest zbyt trudne do prawidłowego wykonania w bardzo ograniczonej przestrzeni dostępnej w MBR .
Obraz rdzenia grub zawiera podstawowy kod grub, plus wszystkie moduły potrzebne do uzyskania dostępu, /boot/grub
aby mógł tam załadować dodatkowe moduły, a także plik konfiguracyjny grub, który opisuje, jakie systemy operacyjne można uruchomić i gdzie można je znaleźć.
Oprogramowanie układowe EFI używane na komputerach Mac z procesorami Intel i staje się dostępne jako zamiennik systemu BIOS na najnowszych płytach głównych do komputerów PC, wymaga dedykowanej partycji przechowującej pliki modułu ładującego rozruch, a oprogramowanie układowe jest wystarczająco inteligentne, aby znaleźć te pliki i załadować jeden zamiast ładować i wykonywać cokolwiek znajduje się w pierwszym sektorze dysku.
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)
Według niego. Główna pamięć składa się z dwóch części: RAM i ROM. Chcę tylko wiedzieć, czy tak zwany bootloader jest zainstalowany w części ROM pamięci głównej ... @SergeyROM nie znajduje się w pamięci głównej:
ROM nie jest częścią pamięci głównej. Jest to osobny układ, który przez większość czasu jest wbudowany w większy układ scalony. Więcej przykładów: Twój komputer może składać się z kilku ROM. Te są wbudowane w twoją płytę główną.
Ogólnie:
Wspomniałeś o tym, czytasz artykuł, w którym autor powiedział: „ROM jest częścią pamięci głównej”. Jest to mylące, ponieważ zazwyczaj pamięć główna odnosi się do pamięci rodzajów lotnych, takich jak RAM. Ale tak, jeśli użyjesz terminu Pamięć główna dla całej przestrzeni pamięci komputera, to pamięć ROM jest częścią tego miejsca. Należy zauważyć, że ogólnie pamięć główna wyklucza pamięć rodzajów jako ROM .
Gdzie jest przechowywany Bootloader:
Nowoczesny system wykorzystuje dwustopniowy rozruch. W pierwszym kroku mały program jest ładowany z sektora (zwanego częściej sektorem rozruchowym) dysku twardego. Ten mały program z kolei ładuje program z jakiegoś miejsca na dysku, który nazywa się bootloaderem. I w końcu bootloader ładuje system operacyjny.
W przypadku systemu Ubuntu proces wygląda następująco:
Po włączeniu komputera system BIOS (zapisany w pamięci ROM) automatycznie uruchamia się i inicjuje różne części sprzętu komputerowego. Następnie sprawdza określony sektor w zdefiniowanym pierwszym urządzeniu rozruchowym (zazwyczaj na dysku twardym). Ten sektor jest sektorem rozruchowym o rozmiarze 512 bajtów.
Program w sektorze rozruchowym jest ładowany do pamięci (1. etap). Ten mały program zawiera informacje, które programy powinny następnie załadować do pamięci i gdzie ten program znajduje się na dysku lub urządzeniu rozruchowym. Ładuje ten program. W Ubuntu tak jest
/boot/grub/core.img
.W drugim etapie program ładujący system operacyjny, GRUB, ładuje Ubuntu, ładując jądro i początkowy dysk RAM do pamięci i przekazując kontrolę do jądra. Następnie jądro uruchamia się i ładuje wszystkie niezbędne programy, takie jak menedżer wyświetlania, GUI itp.
Możemy więc wyraźnie powiedzieć, że program ładujący nie jest ani przechowywany w pamięci ROM, ani w pamięci RAM, w rzeczywistości jest przechowywany na dysku twardym (lub innym urządzeniu rozruchowym, takim jak rozruchowy CDROM, napędy USB itp.), Mówiąc dokładnie o pierwszym sektorze dysk twardy, który ma rozmiar 512 bajtów i często nazywany sektorem rozruchowym . I ten program ładujący ładuje moduł ładujący system operacyjny (w Ubuntu jest to grub), który również znajduje się na dysku twardym (tj.
/boot/grub/
Folderze), a jego zadaniem jest ładowanie systemu operacyjnego (powiedzmy Ubuntu).W ramach testu usuń dysk twardy (i wszystkie inne urządzenia rozruchowe) i spróbuj uruchomić komputer. Możesz przejść do kroku BIOS, ale po tym kroku nie możesz nic uruchomić. Najprawdopodobniej BIOS powie: „ Nie znaleziono urządzenia rozruchowego ” lub „ Nie znaleziono systemu operacyjnego ” lub coś podobnego.
Mam nadzieję, że ta odpowiedź pomoże.
Aby uzyskać więcej informacji, możesz odwiedzić te linki:
źródło
Procesor kompatybilny z x86 zawsze uruchamia się w tak zwanym trybie „rzeczywistym”, który jest trybem 16-bitowym z dostępnym 1 megabajtem pamięci adresowalnej. Z tej przestrzeni adresowej dostępnych jest 640 KB dla programów, a powyższe adresy są mapowane na różne urządzenia.
Na przykład adresy zaczynające się od 0xA000: 0x0000 są odwzorowywane na RAM wideo, więc zapisywanie danych faktycznie zapisywałoby dane do pamięci karty wideo wyświetlającej piksele na ekranie.
Podobnie BIOS ROM zaczyna się od 0xF000: 0000, więc procesor po włączeniu po prostu zaczyna wykonywać instrukcje jeden po drugim, zaczynając od tego wstępnie zdefiniowanego adresu. BIOS ROM zawiera program początkowy, który rozpoczyna się od wykonania „autotestu po włączeniu” lub testu POST. Z Wikipedii:
Oprogramowanie układowe systemu BIOS odpowiada za odczytanie pierwszego sektora z dysku do pamięci i przekazanie sterowania do małego programu, który ponownie znajduje się pod określonym adresem. Program ładujący MBR może następnie rozpocząć ładowanie systemu operacyjnego bezpośrednio (jak miało to miejsce w przypadku MS-DOS) lub załadować „drugi etap”, który nie jest ograniczony do sektora jednego dysku.
Programy ładujące, które wykorzystują podejście wieloetapowe, mogą być dość złożone z interfejsem tekstowym lub graficznym, który pozwala użytkownikowi wybrać, z którego dysku lub partycji załadować system operacyjny.
Jeśli więc, jak sugeruje Uri, jesteś zainteresowany tym, czy moduł ładujący systemu Windows i GRUB mogą istnieć razem, odpowiedź brzmi: rzeczywisty MBR może zawierać tylko jeden moduł ładujący pierwszego etapu (daj spokój, cały sektor ma tylko 512 bajtów) , ale drugi etap programu ładującego może „ładować łańcuchowo” systemy operacyjne z różnych partycji. Program ładujący Windows jest w stanie rozpoznać i załadować system Windows, podczas gdy GRUB jest w stanie załadować Linuksa lub przekazać kontrolę innemu programowi ładującemu przechowywanemu w rekordzie rozruchu woluminu jednej z partycji, co pozwala na uruchomienie systemu Windows lub innego systemu operacyjnego. Ten ostatni proces nazywa się ładowaniem łańcuchowym.
Kiedy zainstalujesz Ubuntu na komputerze z Windows, GRUB zostanie zainstalowany w MBR i będziesz mógł uruchomić zarówno Ubuntu, jak i Windows.
Jeśli jednak system Windows zostanie zainstalowany po Ubuntu, GRUB zostanie zastąpiony bootloaderem Windows i będziesz musiał ponownie zainstalować GRUB, aby móc ponownie uruchomić Ubuntu.
źródło
Konflikt między tym, co mówisz o tym, że bootloader znajduje się w ROM-ie a MBR, może być spowodowane tym, że bootloader jest używany do każdego kodu, który sprawdza, jak zrobić minimum załadowania kodu, aby komputer zrobił coś użytecznego, w tym każdego stan w rozruchu wielostopniowym.
Tak więc stanem początkowym jest posiadanie komputera, który jest urządzeniem programowalnym, ale nie wie, jak załadować oprogramowanie do uruchomienia, ponieważ nie ma załadowanego żadnego oprogramowania. (I stąd boot z wyciągania się z pasków startowych ).
Historycznie istniało kilka różnych rozwiązań tego problemu, ale obecnie zaczynamy od kodu w ROM (najczęściej prawdopodobnie EEPROM), który wystarczy, aby spojrzeć na różne urządzenia i wypróbować je kolejno, aż znajdzie takie, które bootowalny.
(Dlatego wiele systemów uruchomi się z dysku CD lub DVD, jeśli włożysz dysk instalatora systemu operacyjnego z dysku twardego, inaczej BIOS [kod na ROM, w tym kod, o którym mówimy, i inne niskie -poziom, od którego zaczynają się rzeczy] ustawiono najpierw na napęd CD / DVD, a następnie na dysk twardy, jeśli niczego nie znajdzie, tweaker często ustawia go tak, aby ignorował napęd CD / DVD, chyba że zostanie o to ręcznie poproszony nie marnuje czasu na uruchamianie dysku, który nie został uruchomiony w napędzie).
Ten kod w pamięci ROM jest czasem nazywany programem ładującym .
Gdy wie, na jakim dysku należy spojrzeć, spojrzy na MBR, który zawiera informacje o podstawowych partycjach - jak możesz później spojrzeć na / lub / boot lub C: / (w systemie Windows), jeśli nawet nie wiesz, która część dysku była partycją, nie wspominając o tym, jak każda partycja została zamontowana? - i trochę kodu z dalszymi instrukcjami do wykonania. (Nawiasem mówiąc, wyjaśnia to, dlaczego niektóre systemy operacyjne - na przykład Windows - można zainstalować tylko na partycji podstawowej, szczegóły tych partycji znajdują się w MBR i to jedyne informacje o partycjach, które odczytał ich bootloader, i nie ładuje EBR do dowiedzieć się o partycjach logicznych, jeśli chodzi o te partycje nawet jeszcze nie istnieją).
Ten kod wykonywalny jest również nazywany programem ładującym . Kiedy chcemy rozróżnić to od tego, co nastąpi później, nazywa się to podstawowym programem ładującym (ponieważ chyba, że tworzymy własny BIOS, ignorujemy bit ROM, ponieważ jest poza naszą kontrolą).
Ten kod będzie bardzo mały, ponieważ zmieści się w nim tylko około 400 bajtów, więc aby zrobić cokolwiek prawdziwego, załaduje trochę więcej kodu, który może być większy, ponieważ nie musi radzić sobie z tym ograniczeniem.
Ten kod jest również znany jako bootloader . Kiedy chcemy rozróżnić to od tego, co było wcześniej, nazywa się to drugim programem ładującym .
Ten kod może być prawdopodobnie ostatnim etapem tego procesu. Byłoby tak, jeśli masz tylko jeden system operacyjny lub jeśli wszystkie systemy w twoim systemie korzystają ze zgodnych programów ładujących (np. Dwie instalacje Linuksa, które używają GRUB, więc którykolwiek GRUB został zaktualizowany jako ostatni, może zaoferować uruchomienie dowolnego z nich) przedstawia menu (w razie potrzeby) obciążenia w jądrze i przekazuje kontrolę nad systemem operacyjnym.
W przypadku systemu operacyjnego, który nie jest zgodny z tym programem ładującym, może on zostać obciążony łańcuchem. Np. Jeśli masz Windows i Linux na tym samym komputerze, opcja GRUB do ładowania systemu Windows w rzeczywistości załaduje kolejny program ładujący, który wie tylko o instalacji systemu Windows, i przekaże go. Chociaż był to trzeci etap procesu, nadal jest nazywany dodatkowym programem ładującym , ponieważ ani nie wie, ani nie obchodzi go, że działał przed nim drugi program ładujący. Tak byłoby również w przypadku instalacji Linuksa, która korzystała z innego typu dodatkowego programu ładującego.
Przeważnie, gdy mówimy o bootloaderze w kontekście Linuksa, generalnie nie mamy na myśli kodu ROM (nie jest on częścią Linuksa ani nie został zmieniony przez instalację Linuksa). Kiedy to robimy
update-grub
, zmieniamy dodatkowy program ładujący, który zazwyczaj znajduje się w / boot konkretnej instalacji. Kiedy to robimyinstall-grub
, zmieniamy go, a także główny program ładujący w MBR, aby miał wystarczającą ilość kodu, aby wiedzieć, gdzie jest / boot (być może uruchamianie programowej macierzy RAID w miarę upływu czasu) i ładuje i wykonuje to, gdy sam się uruchomi .Podsumowując, pomyliłeś się, mówiąc, że ROM jest częścią pamięci głównej *, ponieważ jest osobny. (Rzeczywiście, pamięć RAM jest traktowana jako antonimiczna dla ROM). Miałeś rację zarówno mówiąc, że tam był bootloader, jak i w MBR, ponieważ są to dwa etapy procesu i oba są czasami wywoływane pod tą nazwą. I odpowiedź na pytanie „Czy różne systemy operacyjne przechowują swoje programy ładujące w różnych miejscach?” jest „głównie”, ponieważ jeśli niekompatybilne dodatkowe programy ładujące ukryją inne programy ładujące (jeśli instalujesz system Windows po zainstalowaniu Linuksa) lub zostaną załadowane do drugiego programu ładującego na żądanie (jeśli naprawisz tę sytuację lub zainstalujesz system Linux po systemie Windows), ale system operacyjny może współużytkować dodatkowy program ładujący, jeśli są one kompatybilne (jeśli instalujesz Linuksa po innym systemie Linux, który używa tego samego typu dodatkowego programu ładującego, i widzi inny system Linux [czasami oprogramowanie RAID dezorientuje i powoduje konieczność ładowania łańcucha).
* W dniach, w których można programowo korzystać zarówno z pamięci ROM, jak i pamięci RAM, było inaczej. Na przykład na ZX Spectrum ROM miałby 16 kB i zawierałby interpreter języka BASIC, a także dawałby punkt wyjścia do załadowania czegoś do 48 kB lub 128 kiB (stronicowany) lub pamięci RAM (w takim przypadku zasadniczo uruchamia się ten interpreter BASIC, a następnie użycie go do rozruchu na taśmie), z interpretera BASIC można było korzystać z wielu funkcji, z których mogłyby korzystać programy w pamięci RAM (po co pisać funkcję trygonometryczną, skoro komputer ma już taką pozycję w znanej pozycji ? szczególnie, gdy masz tylko 48 kB na uruchomienie całego kodu). Ta pamięć ROM była również widoczna w taki sam sposób jak pamięć RAM, tylko pod różnymi adresami. W takim przypadku pamięć ROM była tak samo częścią pamięci głównej, jak pamięć RAM, ale nie była zapisywalna.
źródło
Zrób minimalny działający przykład i uruchom go na emulatorze, aby zrozumieć te pojęcia:
Jest to bardzo prosty „bootloader”, który wykonuje pojedynczą
hlt
instrukcję. Więcej informacji na: https://stackoverflow.com/a/32483545/895245Następnie możesz uruchomić go na prawdziwym sprzęcie za pomocą:
i podłączanie USB do komputera i uruchamianie z niego.
Gdy to zrobisz, staje się jasne, że bootloader to coś, co żyje na stałym dysku pamięci, takim jak USB lub dyski twarde.
To, co żyje w pamięci ROM, to kod, który uruchamia dla nas bootloader, nazywany oprogramowaniem układowym (lub mniej precyzyjnie BIOS).
źródło
W dawnych czasach program rozruchowy znajdował się na dziurkowanej taśmie papierowej podobnej do tej używanej przez maszyny telegraficzne lub nośniki z dziurkowanymi kartami („nie widzę już ich obu). proces ten nazywał się IPL, skrót od Initial Program Load. Czasami, jeśli nie jest dostępna taśma papierowa lub czytnik kart, trzeba wprowadzić binarny kod IPL bezpośrednio do procesora za pomocą konsoli na panelu przednim. uff!
Obecnie kod IPL znajduje się w pROM-ach, które po uruchomieniu ładują i wykonują dowolne dodatkowe programy ładujące dostosowane do ładowania (uruchamiania) pożądanego systemu operacyjnego. dodatkowy moduł ładujący może znajdować się na dowolnym nośniku w dowolnej części konfiguracji znanej lub adresowalnej przez kod IPL.
źródło
Program ładujący zwykle znajduje się w pierwszym sektorze dysku twardego, zwykle nazywanym głównym rekordem rozruchowym.
Twoje zdrowie
źródło