운영체제 구성 및 부팅

운영체제 구성 및 부팅

1단계: 운영체제는 실행 전 구성되어야 한다

운영체제는 사용하기 전에 반드시 **구축(build)**되고 **부팅(boot)**되어야 한다.

  • 운영체제 코드는 소스 상태로 존재하며,

  • 컴파일 후 바이너리로 구성되어,

  • 해당 하드웨어에서 실행될 수 있는 형태로 변환된다.

2단계: 운영체제 생성 (Operating-System Generation)

운영체제는 보통 여러 하드웨어 플랫폼에서 동작하도록 설계된다.

  • 하지만 실제 시스템에는 정해진 장치와 구성만 존재

  • 따라서 운영체제는 설치 전에, 특정 하드웨어 환경에 맞게 구성(configure) 되어야 한다

이 과정을 시스템 생성(SYSGEN, System Generation)이라 부른다.

SYSGEN 과정에서는 다음 질문에 대한 답이 필요함:

  • CPU의 종류는?

  • 메모리 크기는?

  • 디스크 유형은?

  • 터미널 장치, 프린터, 기타 장치는 어떤 것이 있는가?

→ 이 정보는 구성 파일에 저장되며, 해당 파일을 기반으로 커널이 생성됨

생성 결과: 부팅 가능한 운영체제 이미지

  • 생성 결과물은 디스크 또는 기타 저장매체에 기록됨

  • 사용자가 시스템을 부팅하면, 이 커널 이미지가 로드되어 실행됨

3단계: 시스템 부팅 (System Boot)

운영체제를 메모리에 적재하는 과정을 부팅이라 한다. 이 때 사용되는 소프트웨어는 부트스트랩 프로그램(bootstrap program)이다.

부트스트랩 프로그램의 역할

  • 하드웨어에 내장됨 (ROM 또는 EEPROM에 저장됨)

  • 시스템 전원이 켜지면 가장 먼저 실행됨

  • 다음 작업 수행:

    • 하드웨어 초기화

    • 디바이스 상태 확인

    • 부트 디바이스로부터 운영체제 로드

부트 로더의 동작 방식

  1. 부트 디바이스의 첫 번째 블록(부트 블록 또는 MBR) 읽기

  2. 그 블록에 있는 부트 로더 코드 실행

  3. 커널 이미지를 메모리로 로드

  4. 제어를 커널의 진입점(entry point)으로 전달

4단계: OS 부트 방식 구분

① 부트 블록 (Boot Block)

  • 부트 디스크의 첫 번째 블록

  • 부팅을 위해 미리 OS 이미지 주소, 파일 시스템 구조 등을 내포

  • 일부 운영체제는 OS 부트 로더를 파일 시스템 외부에 배치함

② 듀얼 부트 (Dual Boot)

  • 시스템에 두 개 이상의 운영체제를 설치

  • 부트 시점에 사용자가 원하는 운영체제를 선택 가능

  • 부트 로더가 이를 제어함 (예: GRUB)


운영체제 디버깅

1단계: 디버깅이 중요한 이유

운영체제는 복잡한 시스템이므로 버그 발생이 불가피하며, 이로 인해 예기치 않은 시스템 동작이나 **시스템 충돌(crash)**이 발생할 수 있음.

→ 따라서 운영체제 수준의 디버깅 기능이 필수적이다.

2단계: 커널 디버깅 지원

운영체제는 자체적으로 디버깅 도구를 내장하거나, 외부 디버거를 통해 커널 공간의 문제를 추적할 수 있도록 지원한다.

3단계: 시스템 로그(Log) 활용

디버깅은 종종 **운영체제 로그(log)**를 분석함으로써 수행된다.

  • 로그는 이벤트, 오류, 시스템 호출 기록 등으로 구성

운영체제는 심각한 오류 발생 시 로그에 기록하거나, **크래시 덤프(crash dump)**를 생성

4단계: 크래시 덤프 (Crash Dump)

시스템이 충돌했을 때, 메모리 상태를 저장한 덤프 파일을 생성하여 이후 디버깅에 활용 가능하게 함

  • 커널 디버깅 도구가 이 덤프 파일을 분석하여 원인을 역추적함

  • 일부 시스템에서는 자동으로 덤프를 분석하고 요약 보고서 생성 가능


5단계: 라이브 디버깅과 원격 디버깅

운영체제는 자체 디버깅 외에도 다른 시스템을 원격으로 디버깅하는 기능을 제공함:

  • 라이브 디버깅: 디버거가 동작 중인 시스템을 실시간으로 분석

  • 원격 디버깅: 대상 시스템과 호스트 디버깅 시스템이 분리되어, 네트워크로 연결

Last updated