티스토리 뷰
Booting Sequence
컴퓨터를 부팅할 때 일어나는 일은 다음과 같습니다:
- 전원 인가: 컴퓨터의 전원을 켜면, 전기 신호가 메인보드(마더보드)로 전달됩니다. 이 신호는 부팅 프로세스를 시작하기 위한 초기 신호입니다.
- 기본 입력/출력 시스템 (BIOS) 실행: 컴퓨터의 메인보드에는 BIOS 칩이 있습니다. 전원이 켜지면, BIOS가 실행됩니다. BIOS는 컴퓨터의 하드웨어와 상호작용하며 부팅 프로세스를 관리합니다.
- POST (Power-On Self Test): BIOS가 실행되면, 주요 하드웨어 구성 요소(메모리, 그래픽 카드, 프로세서 등)가 정상적으로 작동하는지 확인하는 POST가 수행됩니다. 이 단계에서 오류가 발견되면 오류 메시지를 출력하고 부팅이 중단됩니다.
- 부트로더 로드: POST가 성공적으로 완료되면, BIOS는 부트로더(Bootloader)를 메모리에 로드합니다. 부트로더는 운영 체제가 설치된 디스크 또는 파티션을 찾아 운영 체제의 부트 프로세스를 시작합니다.
- 운영 체제 로드: 부트로더는 운영 체제의 커널(코어 부분)을 메모리에 로드합니다. 이때, 운영 체제는 일반적으로 하드 디스크 또는 SSD에서 로드됩니다.
- 초기화 및 설정: 운영 체제가 메모리에 로드되면, 운영 체제는 하드웨어와 드라이버를 초기화하고 설정합니다. 이 단계에서 사용자의 설정과 운영 체제의 기본 설정이 로드됩니다.
- 사용자 로그인: 운영 체제가 초기화되고 설정되면, 사용자가 로그인하라는 메시지가 나타납니다. 사용자는 자신의 계정으로 로그인하고, 필요한 프로그램과 서비스를 시작할 수 있습니다.
이렇게 컴퓨터를 부팅하는 과정에서 메모리는 여러 단계에서 사용되며, 부트로더, 운영 체제, 드라이버, 그리고 실행되는 프로그램들이 메모리에 로드되어 작동하게 됩니다.
부트로더 로드
위의 과정 중 4번, 메모리에 운영 체제가 로드되는 과정에 대해 조금 더 자세히 설명드리겠습니다.
4-1. 부트 섹터 (Boot Sector) 로드: 부트로더는 대부분 하드 디스크의 첫 번째 섹터인 부트 섹터에 위치하며, 이 부트 섹터는 일반적으로 512바이트 크기입니다. 부트로더는 BIOS에 의해 이 부트 섹터를 물리적인 주소에서 메모리의 적절한 위치로 로드합니다. 이 때, 부트 섹터는 하드 디스크의 기본적인 파일 시스템에 따라 저장되어 있습니다.
4-2. 부트로더 실행: 부트 섹터에 있는 부트로더 코드가 메모리로 로드되면, 이 코드가 실행되어 운영 체제의 부트 프로세스를 진행합니다. 부트로더는 메모리에 추가적인 부트로더 코드를 로드하거나 운영 체제의 커널 파일을 찾아서 메모리로 복사하는 역할을 수행합니다.
4-3. 운영 체제 커널 로드: 부트로더는 운영 체제의 커널 파일을 하드 디스크나 다른 저장 장치에서 찾아와서 메모리에 로드합니다. 커널 파일은 일반적으로 여러 섹터로 구성되어 있으며, 부트로더는 이러한 섹터들을 순차적으로 읽어와 메모리에 복사합니다.
4-4. 메모리 주소 설정: 운영 체제의 커널을 메모리로 로드할 때, 부트로더는 메모리의 특정 위치에 커널을 복사합니다. 이 때, 커널을 로드할 메모리 주소를 정하고, 해당 주소에 커널 코드를 카피하는 것입니다. 로드된 커널은 실행을 준비하기 위해 초기화되고 설정됩니다.
4-5. 제어권 이전: 운영 체제의 커널이 메모리에 로드되고 초기화되면, 부트로더는 제어권을 운영 체제의 커널로 이전합니다. 제어권이 이전되면, 운영 체제가 실제로 실행되기 시작하며 사용자 인터페이스를 통해 사용자와 상호작용할 수 있습니다.
이렇게 부트로더는 하드 디스크의 부트 섹터에서 시작하여, 운영 체제의 커널을 찾아 메모리로 로드하는 일련의 과정을 거치게 됩니다. 이후에는 메모리에 로드된 운영 체제가 실행되며 컴퓨터의 모든 동작을 관리하고 제어합니다.
정확히 어느 메모리 번지에서 운영 체제가 동작하는지를 일반적으로 알기는 어렵습니다. 이는 컴퓨터의 아키텍처, 운영 체제의 종류, 부트로더의 구현 방식 등에 따라 다양하기 때문입니다.
메모리 번지에 대한 주소 할당은 운영 체제와 하드웨어 사이의 복잡한 상호작용으로 이루어집니다. 일반적으로 운영 체제는 하드웨어를 추상화하고, 프로세스 간 충돌을 방지하기 위해 메모리를 가상 주소 공간으로 관리합니다. 가상 주소는 실제 물리적 메모리 주소와 매핑되어야 하며, 이러한 매핑은 메모리 관리 유닛(MMU)에 의해 수행됩니다.
또한, 32비트와 64비트 아키텍처 간에도 주소 할당 방식과 메모리 매핑이 다를 수 있습니다. 64비트 아키텍처는 더 큰 주소 공간을 가지고 있으며, 보다 복잡한 메모리 관리 방식을 사용합니다.
또한, 운영 체제의 로드 주소는 부트로더에서 결정될 수 있으며, 이는 부트로더의 구현에 따라 다릅니다. 부트로더는 주로 하드 디스크의 첫 번째 섹터(부트 섹터)에서 시작하지만, 이후 추가적인 코드를 로드하거나 커널을 다른 위치에 로드할 수도 있습니다.
따라서, 특정 시스템에서 운영 체제가 메모리의 정확한 어드레스에서 동작하는 것을 일반적으로 알 수는 없습니다. 이는 컴퓨터 시스템의 구성에 따라 다르며, 하드웨어 및 소프트웨어의 구성과 설정에 따라서도 다를 수 있습니다.
'IT' 카테고리의 다른 글
[컴퓨터 아키텍쳐] 엔디언(Endian) (0) | 2023.07.19 |
---|
- Total
- Today
- Yesterday
- 러스트 입문
- DP
- 인터뷰
- ProblemSolving
- 속초 맛집
- Problem Solving
- 러스트
- algorithm
- 맛집
- C++
- 코딩인터뷰
- 반드시 알아야 할 자료구조
- Medium
- PS
- Interview
- rust
- LeetCode
- 트리
- 리트코드
- 내돈내산
- 자료구조
- coding interview
- 기술면접
- 솔직후기
- 러스트 배우기
- 러스트 기초
- 알고리즘
- 속초
- interview question
- Tree
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |