ROM, RAM 또는 다른 곳에 부트 로더가 어디에 저장되어 있습니까?


30

위키 백과 항목에 따르면, 부트 로더는 ROM (주 메모리 (RAM)의 일부, 그렇지 않습니까?)에 저장된 작은 프로그램으로 읽히고 지울 수는 없습니다. 나는 약간 의아해합니다. 이것은 우리가 구매하는 모든 RAM에 기본적으로 부트 로더가 설치되어 있다는 것을 의미합니까? 또한 부트 로더가 포함 된 하드 드라이브에는 일반적으로 MBR (Master Boot Record)이라는 영역이 있다고하는 책을 읽었습니다.

그렇다면이 부트 로더는 정확히 어디에 있습니까? 다른 운영 체제가 다른 위치에 부트 로더를 저장합니까?

답변:


43

ROM은 RAM과는 별개의 칩입니다. 내용물을 유지하기 위해 전원이 필요하지 않으며 원래 어떤 방법으로도 수정할 수 없었지만 공장에서 유선으로 연결되었습니다. 나중에 PROM 또는 프로그램 가능 읽기 전용 메모리가 실제 ROM을 대체했습니다. 이 칩은 공장에서 비워졌으며 칩의 비트를 태워서 상태를 변경하는 특수 절차를 사용하여 한 번만 쓸 수 있습니다. 그런 다음 EPROM 또는 Eraseable Programmable Memory로 대체되었습니다. 이 칩에는 작은 창이 있으며 자외선을 비추면 지워져 다시 프로그래밍 할 수 있습니다. 그런 다음 EEPROM 또는 전기적으로 소거 가능한 프로그램 가능 메모리로 교체되었습니다. 이 칩들은 재 프로그래밍 할 수 있도록 특별한 소프트웨어 절차를 가지고 있습니다.

마더 보드에는 펌웨어를 보유한 ROM 칩 유형이 있습니다. PC 용어로는 일반적으로 BIOS 또는 기본 입력 출력 시스템이라고하지만 요즘에는 EFI 펌웨어로 교체되고 있습니다. 이것은 전원을 켤 때 CPU가 처음 실행을 시작하는 소프트웨어입니다. 모든 펌웨어는 하드웨어 초기화를 수행하고 일반적으로 일부 진단 출력을 제공하며 사용자가 하드웨어를 구성한 다음 부트 로더를 찾아서로드하여 OS를 찾아서로드합니다.

PC BIOS를 사용하면 부팅하기로 결정한 디스크에서 첫 번째 섹터 (일반적으로 첫 번째로 감지 된 디스크)를로드하고 실행합니다. 일반적으로 마스터 부트 레코드라고하는 하드 디스크의 첫 번째 섹터는 디스크의 파티션 위치를 나열하는 DOS 파티션 테이블을 포함하며 부트 로더를위한 공간을 남겨 둡니다. 우분투는 GRUB 부트 로더를 사용하는데, 이는 MBR에로드하고 실행하기에 충분한 코드를 배치 /boot/grub/core.img합니다. 일반적으로이 파일의 사본은 MBR 다음의 섹터에 있지만 첫 번째 파티션 이전 /boot/grub/core.img에 있습니다. MBR에서 사용 가능한 매우 제한된 공간에서 위치를 찾는 것이 너무 어렵 기 때문에 실제로는 MBR이로드 하는 것입니다. .

grub 코어 이미지에는 기본 grub 코드와 /boot/grub추가 모듈을로드 할 수 있도록 액세스하는 데 필요한 모든 모듈 및 부팅 할 수있는 운영 체제 및 찾을 수있는 위치를 설명하는 grub 구성 파일이 포함되어 있습니다.

Intel Mac에서 사용되며 최신 PC 마더 보드에서 BIOS를 대체 ​​할 수있는 EFI 펌웨어에는 부트 로더 파일이 들어있는 전용 파티션이 필요하며, 펌웨어는 파일을 찾아로드하거나 실행하는 대신 파일을 찾아로드 할 수있을 정도로 똑똑합니다. 디스크의 첫 번째 섹터에 있습니다.


글렌 브룩 쉬어 (Glenn Brookshear)의 컴퓨터 과학 에서 발췌 한 단락 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)이있다. 메인 메모리는 RAM과 ROM의 두 부분으로 구성됩니다. 나는 단지 소위 부트 로더가 메인 메모리의 ROM 부분에 설치되어 있는지 알고 싶다 ... @Sergey
xczzhh

@ xczzhh-yes BIOS가 ROM에 저장되어 파티션에있는 부트 로더를 감지합니다. OS를 설치하면 BIOS에서 엔트리 유형의 플래그를 생성하여 해당 BOOTLOADER를 감지합니다.
atenz

1
@xczzhh, 아닙니다. 부트 로더는 하드 드라이브 나 다른 디스크에 있습니다. OS와 함께 설치됩니다. 마더 보드 제조업체에서 업데이트를 다운로드하여 설치하지 않으면 ROM이 변경되지 않습니다.
psusi

EFI는 EFI 애플리케이션은 부하에게 NVRAM에서 EFI 응용 프로그램 instead.It 사용
Suici 도가

@SuiciDoga, 아니오, EFI 응용 프로그램 (기본적으로 몇 가지 펌웨어 업그레이드 유틸리티 및 부트 로더로 제한됨)은 하드 디스크의 EFI 시스템 파티션에 저장됩니다. NVRAM은 EFI가 부팅 순서와 같은 일부 구성 변수를 저장하는 위치입니다.
psusi

23

ROM이 메인 메모리에 없습니다 :

ROM은 메인 메모리의 일부가 아닙니다. 별도의 칩으로, 대부분 더 큰 IC에 내장되어 있습니다. 예를 들어, PC는 여러 개의 ROM으로 구성 될 수 있습니다. 그것들은 당신의 마더 보드에 내장되어 있습니다.

일반적으로 :

  • ROM은 메모리 크기가 매우 작습니다. 이러한 메모리는 비 휘발성이므로 ROM에 저장된 프로그램은 전원을 껐을 때 지워지지 않습니다.
  • ROM은 영구적 인 프로그램을 저장하는 데 사용되며 하드웨어가 올바르게 수행하는 데 매우 중요합니다.
  • ROM의 전형적인 예는 BIOS 칩입니다. 매우 낮은 수준의 부팅 및 초기화 하드웨어 프로그램이 저장되는 위치

당신은 저자가 "ROM은 메인 메모리의 일부입니다"라고 쓴 기사를 읽었다 고 언급했습니다. 일반적으로 Main Memory 는 RAM과 같이 휘발성 인 종류의 메모리를 나타내 므로 혼동 됩니다. 그러나 그렇습니다 . PC의 전체 메모리 공간에 Main Memory 용어를 사용하면 ROM이 해당 메모리 공간의 일부입니다. 일반적으로 주 메모리는 종류의 메모리를 ROM으로 제외합니다 .

Bootloader는 어디에 저장되어 있습니까?

최신 시스템은 2 단계 부팅 로딩을 사용합니다. 첫 번째 단계에서 작은 프로그램은 하드 디스크의 섹터 (부트 섹터라고 함)에서로드됩니다. 이 작은 프로그램은 부트로 더라고하는 디스크의 어느 위치에서 프로그램을로드합니다. 마지막으로 부트 로더가 OS를로드합니다.

우분투 시스템에서 프로세스는 다음과 같습니다.

  1. PC를 켜면 BIOS (ROM에 저장된)가 자동으로 실행되고 PC 하드웨어의 다양한 부분이 초기화됩니다. 그런 다음 정의 된 첫 번째 부팅 장치 (일반적으로 하드 디스크)에서 특정 섹터를 확인합니다. 이 섹터는 부트 섹터이며 크기는 512 바이트입니다.

  2. 부트 섹터의 프로그램은 메모리에로드됩니다 (1 단계). 이 작은 프로그램에는 다음에 메모리에로드 할 프로그램과 해당 프로그램이 디스크 또는 부팅 장치에있는 위치에 대한 정보가 있습니다. 해당 프로그램을로드합니다. 우분투에서는입니다 /boot/grub/core.img.

  3. 2 단계에서 OS-Loader GRUB는 커널과 초기 램 디스크를 메모리에로드하고 커널에 대한 핸드 오버 제어를 통해 Ubuntu를로드합니다. 그런 다음 커널이 실행되고 디스플레이 관리자, Gui 등과 같은 필요한 모든 프로그램이로드됩니다.

따라서 부트 로더는 ROM이나 RAM에 저장되어 있지 않으며 실제로 하드 디스크 (또는 부팅 가능한 CDROM, USB 드라이브 등의 다른 부팅 장치)에 저장되어 있으며 512 바이트 크기의 하드 디스크로 종종 부트 섹터 라고합니다 . 그리고이 부트 로더는 하드 디스크 (예 : /boot/grub/폴더) 에도 상주하는 OS 로더 (우분투에서는 grub)를 로드하며, 작업은 OS (우분투)를로드하는 것입니다.

테스트로 하드 디스크 (및 다른 모든 부팅 장치)를 제거하고 부팅을 시도하십시오. BIOS 단계로 올라갈 수 있지만 그 단계 후에는 부팅 할 수 없습니다. BIOS는 아마도 " No Boot device Found "또는 " No Operating System found "또는 이와 유사한 것으로 말할 것입니다.

이 답변이 도움이 되길 바랍니다.


자세한 내용을 보려면 다음 링크를 방문하십시오.

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

2
ROM은 현재 약 10 년 동안 RAM보다 빠르지 않았습니다. 사실, 최신 BIOS가하는 첫 번째 작업 중 하나는 RAM이 훨씬 빠르기 때문에 자체를 RAM에 복사하는 것입니다.
David Schwartz

1
@DavidSchwartz, 이제 10 년이 넘었습니다. 90 년대 중반에 사용했던 모든 PC BIOS에는 속도를 위해 RAM에 바이오스를 섀도 잉하는 옵션이있었습니다.
psusi

@Anwar, 메인 메모리 연결이 끊어졌습니다 .
Matt

15

x86 호환 프로세서는 항상 소위 "실제"모드에서 시작합니다. 16 비트 모드는 1MB의 주소 지정 가능 메모리를 사용할 수 있습니다. 해당 주소 공간에서 프로그램에 대해 640K를 사용할 수 있으며 위의 주소는 다른 장치에 매핑 됩니다.

예를 들어, 0xA000 : 0x0000부터 시작하는 주소는 비디오 RAM에 매핑되므로 실제로 데이터를 쓰면 화면에 픽셀을 표시하는 비디오 어댑터의 메모리에 데이터를 쓰게됩니다.

마찬가지로 BIOS ROM은 0xF000 : 0000부터 시작하므로 전원을 켤 때 CPU는 해당 사전 정의 된 주소에서 시작하여 명령을 하나씩 실행하기 시작합니다. BIOS ROM에는 "전원 자체 테스트"또는 POST를 수행하여 시작되는 초기 프로그램이 포함되어 있습니다. Wikipedia에서 :

BIOS 소프트웨어는 PC에 내장되어 있으며 전원이 켜질 때 ( '부트 펌웨어') PC가 실행하는 첫 번째 코드입니다. PC가 시작될 때 BIOS의 첫 번째 작업은 CPU, RAM, 비디오 디스플레이 카드, 키보드 및 마우스, 하드 디스크 드라이브, 광학 디스크 드라이브 및 시스템과 같은 시스템 장치를 초기화하고 식별하는 POST (power-on self-test)입니다. 다른 하드웨어. 그런 다음 BIOS는 하드 디스크 나 CD / DVD와 같은 주변 장치 ( '부팅 장치'로 지정)에있는 부트 로더 소프트웨어를 찾아서 해당 소프트웨어를로드 및 실행하여 PC를 제어합니다. 2 이 프로세스를 부팅 또는 부팅이라고하며 부트 스트랩의 줄임말입니다.

BIOS 펌웨어는 디스크에서 메모리로 첫 번째 섹터를 읽고 제어를 작은 프로그램으로 전달합니다.이 프로그램은 다시 특정 주소에 있습니다. MBR의 부트 로더 후 직접 OS로드를 개시 할 수있다 (MS-DOS 등의 경우와) 또는 단일 디스크 섹터의 경계에 한정되는 것은 아니다 "번째 스테이지"로드.

다단계 접근 방식을 사용하는 부트 로더는 운영 체제를로드 할 디스크 또는 파티션 중에서 선택할 수있는 텍스트 또는 그래픽 인터페이스로 상당히 복잡 할 수 있습니다.

따라서 Uri가 제안한 것처럼 Windows 부트 로더와 GRUB이 공존 할 수 있는지 여부에 관심이 있다면 실제 MBR은 단일 1 단계 부트 로더 만 포함 할 수 있습니다 (전체 섹터는 512 바이트에 불과합니다). 부트 로더의 두 번째 단계는 다른 파티션에서 운영 체제를 "체인로드"할 수 있습니다. Windows 부트 로더는 Windows 만 인식하고로드 할 수있는 반면 GRUB은 Linux를로드하거나 파티션 중 하나의 볼륨 부트 레코드 에 저장된 다른 부트 로더로 제어를 전달 하여 Windows 또는 다른 OS를 부트 할 수 있습니다. 후자의 프로세스를 체인 로딩이라고합니다.

Windows가 설치된 컴퓨터에 Ubuntu를 설치하면 GRUB이 MBR에 설치되고 Ubuntu와 Windows를 모두 부팅 할 수 있습니다.

그러나 Ubuntu를 설치 한 후 Windows를 설치하면 GRUB이 Windows 부트 로더로 바뀌므로 GRUB을 다시 설치해야 Ubuntu를 다시 부팅 할 수 있습니다.


Windows 부트 로더와 GRUB이 함께 존재할 수 있는지 여부를 알고 싶다고 생각합니다. UEFI, GPT 디스크는 MBR을 사용하지 않습니다.
Uri Herrera

BIOS ROM은 F000 : 세그먼트에 있으며 1MB 미만입니다. 640k는 실제 모드 OS 및 프로그램에서 사용할 수있는 A000 : 아래의 세그먼트에 있습니다.
psusi

@psusi : 네 말이 맞아, 나는 그 부분을 다시 표현했다
Sergey

응답 해주셔서 감사합니다. 운영 체제를 부팅하는 데 여러 개의 부트 로더 (BIOS 내에 있고 다른 하나는 MBR에 있습니까)가 있습니까? 그것은 나에게 새로운 ... :)
xczzhh 5

@xczzhh 글쎄, BIOS의 코드는 "부트 로더"라고 불리는 것이 아니라 디스크에 저장된 코드입니다. 나는 이것을 명확히하기 위해 대답을 업데이트했다.
Sergey

4

ROM에있는 부트 로더와 MBR에있는 부트 로더 사이의 충돌은 아마도 부트 로더 가 코드를로드하는 데 최소한의 코드를 사용하여 컴퓨터가 유용한 것을 수행하도록하는 코드를 작성하는 데 기인 할 수 있습니다. 다단계 부팅 상태.

따라서 시작 상태는 프로그래밍 가능한 장치 인 컴퓨터가 있어야하지만 소프트웨어가로드되어 있지 않으므로 실행할 소프트웨어를로드하는 방법을 모릅니다. (따라서 부트 스트랩에서 부팅 을 시작하십시오 ).

역사적 으로이 문제에 대한 몇 가지 다른 해결책이 있었지만 요즘 우리는 ROM의 코드 (대부분 EEPROM 일 가능성이 높습니다)로 시작합니다.이 코드는 다른 장치를보고 그것을 찾을 때까지 차례로 시도하기에 충분합니다. 부팅 가능.

(따라서 OS 설치 프로그램 디스크를 하드 드라이브에 넣고 다른 방법으로 BIOS를 넣으면 많은 시스템이 CD 또는 DVD로 부팅하는 것입니다. BIOS [ROM의 코드, 우리가 이야기하는 코드 및 기타 낮은 시작하기 시작하는 수준의 항목]은 CD / DVD 드라이브를 먼저 찾은 다음 하드 드라이브가없는 경우 하드 드라이브를 찾도록 설정되어 있으며, 수동으로 요청하지 않는 한 트위 커는 종종 CD / DVD 드라이브를 무시하도록 설정합니다. 드라이브에 남아있는 부팅 할 수없는 디스크를 회전시키는 데 시간을 낭비하지 않습니다).

ROM에이 코드가되고 때때로 불리는 부트 로더 .

어떤 드라이브를보아야하는지 알고 나면 기본 파티션에 대한 정보가 들어있는 MBR을 살펴 봅니다. 나중에 / 또는 / boot 또는 C : / (Windows 시스템에서)를 보지 못한 경우 디스크의 어떤 부분이 어떤 파티션인지 알고, 각 파티션이 어떻게 마운트되었는지는 신경 쓰지 않습니까? -실행할 추가 명령이있는 코드 (우연히 이것은 Windows와 같은 일부 OS가 기본 파티션에만 설치할 수 있고 해당 파티션의 세부 정보가 MBR에 있으며 부트 로더가 읽은 유일한 파티션 정보이며 EBR을로드하지 않는 이유를 설명합니다 해당 파티션이 아직 존재하지 않는 경우 논리 파티션에 대해 학습하십시오.

실행 코드 것이되고 또한 불리는 부트 로더 . 우리가 이것과 다음에 오는 것을 구별 할 때는 기본 부트 로더 라고합니다 (자체 BIOS를 만들지 않으면 제어 할 때 ROM 비트를 무시합니다).

이 코드는 약 400 바이트에 불과하므로 크기가 매우 작으므로 실제 작업을 수행하려면 더 많은 코드를로드 하므로이 제약 조건을 처리 할 필요가 없으므로 더 커질 수 있습니다.

이 코드는,되고 또한 A와 알려진 부트 로더 . 우리가 이것과 이전에 나온 것을 구별하려고 할 때이를 보조 부트 로더 라고합니다 .

이 코드는 아마도 프로세스의 마지막 단계 일 수 있습니다. OS가 하나뿐이거나 시스템의 모든 OS가 호환 가능한 부트 로더를 사용하는 경우 (예 : GRUB를 사용하는 두 개의 Linux 설치, 마지막으로 업데이트 된 GRUB 중 어느 것이 든 부팅 할 수 있음) 커널에 메뉴 (원하는 경우)로드를 표시하고 운영 체제를 제어합니다.

해당 부트 로더와 호환되지 않는 OS를 사용하는 경우 체인로드 될 수 있습니다. 예를 들어, 동일한 머신에 Windows와 Linux가있는 경우, Windows를로드하기위한 GRUB 옵션은 실제로 Windows 설치에 대해서만 알고있는 다른 부트 로더를로드하여 전달합니다. 이 과정에서 3 차 단계 였지만 여전히 2 차 부트 로더 라고 불립니다. 다른 2 차 부트 로더가 실행되기 전에이를 알거나 신경 쓰지 않기 때문입니다. 다른 유형의 보조 부트 로더를 사용하는 Linux 설치의 경우에도 마찬가지입니다.

대부분 리눅스와 관련 하여 부트 로더 에 관해 이야기 할 때 , 일반적으로 ROM 코드를 의미하지는 않습니다 (ROM은 Linux의 일부가 아니거나 Linux를 설치하여 변경됨). 우리가 update-grub할 때 우리는 보조 부트 로더를 바꾸고 있는데, 이것은 보통 특정 설치의 / boot에 있습니다. 우리가 install-grub할 때 / boot가 어디에 있는지 (아마도 소프트웨어 RAID가 시작될 때) 알 수있는 충분한 코드를 가지고 MBR의 기본 부트 로더를 변경하고로드 될 때 자체적으로 실행됩니다. .

따라서 요약하면 ROM이 별도이기 때문에 ROM이 주 메모리의 일부라고 말했을 때 잘못되었습니다. (실제로 RAMROM에 반의어로 간주됩니다.). 부트 로더와 MBR에 프로세스의 두 단계가 있고 때로는 그 이름으로 호출되기 때문에 둘 다 정확했습니다. 그리고 "다른 OS는 다른 장소에 부트 로더를 저장합니까?" 호환되지 않는 보조 부트 로더는 다른 부트 로더를 숨기거나 (Linux를 설치 한 후 Windows를 설치하는 경우) 체인로드를 요청한 경우 (그 상황을 해결하거나 Windows 후에 Linux를 설치하는 경우) 다른 OS를로드하기 때문에 "주로"입니다 호환 가능한 경우 보조 부트 로더를 공유 할 수 있습니다 (동일한 유형의 보조 부트 로더를 사용하는 다른 Linux를 설치 한 후 Linux를 설치하면 다른 Linux를 볼 수 있음 (때때로 소프트웨어 RAID가 혼동을 일으키고 체인 로딩이 필요함).

* 프로그램 적으로 ROM과 RAM을 모두 사용하는 날에는 달라졌습니다. 예를 들어 ZX Spectrum에서 ROM은 16kiB이고 BASIC 인터프리터를 포함하고 48kiB 또는 128KiB (paged) 또는 RAM에 무언가를로드하기위한 시작점을 제공합니다 (이 경우 기본적으로 부팅 됨) BASIC 인터프리터를 사용한 다음 테이프를 사용하여 부팅하는 경우) BASIC 인터프리터에는 RAM의 프로그램이 사용할 수있는 기능이 많이 있습니다 (컴퓨터에 알려진 위치에 이미 trig 함수가있는 경우 trig 함수를 작성하는 이유) 특히 자신의 모든 코드를 실행하기 위해 48kiB 만있는 경우). 이 ROM은 RAM과 동일한 방식으로 다른 주소에서 볼 수 있습니다. 이 경우 ROM은 RAM과 마찬가지로 주 메모리의 일부이지만 쓰기가 불가능합니다.


0

최소한의 작업 예제를 만들고 에뮬레이터에서 실행하여 이러한 개념을 이해하십시오.

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

단일 hlt명령 을 수행하는 매우 간단한 "부트 로더"입니다 . 자세한 정보는 https://stackoverflow.com/a/32483545/895245

그런 다음 다음을 사용하여 실제 하드웨어에서 실행할 수 있습니다.

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

컴퓨터의 USB를 연결하고 부팅합니다.

이렇게하면 부트 로더가 USB 나 하드 디스크와 같은 영구 저장 디스크에있는 것이 분명해집니다.

ROM에있는 것은 펌웨어 (또는 덜 정확한 BIOS) 라는 부트 로더를 시작하는 코드입니다 .


0

옛날에는 부트 프로그램이 전신 기계 나 천공 카드 매체에서 사용하는 것과 유사한 천공 테이프에있었습니다 ( '더 이상 둘 다 볼 수는 없습니다'). 프로세스는 초기 프로그램로드의 약자로 IPL이라고 불렀습니다. 종이 테이프 나 카드 리더를 사용할 수없는 경우 전면 패널의 콘솔을 통해 이진 IPL 코드를 프로세서에 직접 입력해야하는 경우가 있습니다. 아휴!

요즈음 IPL 코드는 pROM에 상주하여 실행되면 원하는 운영 체제를로드 (부팅)하도록 조정 된 보조 부트 로더를 실행합니다. 2 차 로더는 IPL 코드에 알려 지거나 주소를 지정할 수있는 설정 부분의 모든 매체에있을 수 있습니다.


-1

부트 로더는 일반적으로 마스터 드라이브 레코드라고하는 하드 드라이브의 첫 번째 섹터에 있습니다.

건배

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.