-
[운영체제 만들기] VBR프로젝트/운영체제 만들기 2023. 3. 26. 23:09
글의 참고
- 주 참고 글
- VBR이 0x7C00으로 로드되는 이유 및 MBR이 0x600으로 이사가는 이유
- https://forum.osdev.org/viewtopic.php?f=1&t=34274
- 보조 참고 글(`주 참고 글`을 이해하기 위한 참고한 글)
글의 전제
- 내가 글을 쓰다가 궁금한 점은 파란색 볼드체로 표현했다. 나도 모르기 때문에 나중에 알아봐야 할 내용이라는 뜻이다.
- 밑줄로 작성된 글은 좀 더 긴 설명이 필요해서 친 것이다. 그러므로, 밑 줄 처친 글이 이해가 안간다면 링크를 따라서 관련 내용을 공부하자.
- `글의 참조`에서 빨간색 볼드체로 체크된 링크는 이 글을 작성하면 가장 많이 참조한 링크다.
글의 내용
1. Q & A
- Q) VBR은 뭐냐?
: 부팅 절차는 아래와 같다.
1. ROM에서 BIOS가 실행된다. -> 근데 애는 CPU가 실행되는건가? 즉, Power-on후에 CPU가 알아서 ROM을 읽어서 BIOS를 실행하는건가?
2. BIOS는 디스크들(USB, HDD, CD-ROM, Floppy 등)중에서 MBR(각 디스크들에 0번지, 즉, 맨 앞에 있음)을 찾는다. MBR은 512-byte고, 이때는 맨 마지막 2바이트(0x55, 0xAA)만 읽는다(물론, 내 추측임). 이 맨 마지막 2바이트를 `부트 시그니처`라고 한다. 각 디스크 MBR의 맨 마지막 2-byte가 `0x55, 0xAA`가 아니면 다른 디스크를 검사한다.이 때 까지는 아직 RAM을 한 번도 읽지 않음.
3. BIOS가 부팅 가능한 디스크를 찾았으면(즉, MBR의 부트 시그니처 디스크를 찾았으면), 해당 MBR을 RAM의 0x7C00에 옮긴다. 그리고 실행된다. 이제부터 CPU가 RAM의 0x7C00을 실행하는 것이다.4. 이제 디스크에서 RAM에 옮겨진(0x7C00로 옮겨진) MBR의 내용을 실행한다. 여기서 MBR내의 작성된 Partition table 정보를 읽는다. MBR의 Partition Table에는 기본적으로 4개의 파티션을 확인하게 되는데, 여기서 파티션이 부팅이 가능한 파티션인지 확인한다.5. 부팅 가능한 파티션을 찾았으면, 그 파티션(부팅 가능한 파팃녀)의 첫 번째 섹터(512-byte)를 RAM에 로드한다. 그리고 그 첫번째 섹터를 실행한다. 이 부팅 가능한 파티션의 첫 번째 섹터를 VBR(Volume Boot Record)이라고 한다. 재미있는 건 이 VBR도 0x7C00도 로드한다.그렇면 MBR은? MBR은 VBR을 0x7C00에 로드하기전에 0x600로 이사를 한다. 6. VBR은 첫 번째 3바이트에 적힌 부분으로 점프를 하는데, 그 점프하는 주소에 2 stage bootloader(second bootlodaer)가 있다.
- Q) VBR은 어디로 로드되나?
- MBR이 자기 자신이 있던 0x7C00에 VBR을 로드한다. 이 글을 참고하자.
- Q) MBR vs VBR ?
- MBR : 부팅 가능한 `디스크(USB, HDD, CD-ROM, Floppy 등)` 의 첫 번째 섹터(512-byte)를 의미.- VBR : 부팅 가능한 `파티션`의 첫 번째 섹터(512-byte)를 의미.- 즉, MBR은 부팅 `디스크`에 존재하는 프로그램이고, VBR은 부팅 `파티션`에 존재하는 프로그램이다. BIOS/MBR 관련 부팅 과정을 이해하고 있으면 MBR과 VBR의 차이를 알 수 있다.
The boot process is in a chain. BIOS loads MBR, MBR loads VBR, and VBR loads boot program of OS.
'프로젝트 > 운영체제 만들기' 카테고리의 다른 글
[운영체제 만들기] Exception (0) 2023.05.25 [운영체제 만들기] 에러 사항 (0) 2023.05.24 [운영체제 만들기] 문자열 - 라이브러리 (0) 2023.05.18 [운영체제 만들기] 코딩 컨벤션 (0) 2023.05.16 [운영체제 만들기] MBR (0) 2023.03.26