운영체제 구성 및 부팅
운영체제 구성 및 부팅
1단계: 운영체제는 실행 전 구성되어야 한다
운영체제는 사용하기 전에 반드시 **구축(build)**되고 **부팅(boot)**되어야 한다.
운영체제 코드는 소스 상태로 존재하며,
컴파일 후 바이너리로 구성되어,
해당 하드웨어에서 실행될 수 있는 형태로 변환된다.
2단계: 운영체제 생성 (Operating-System Generation)
운영체제는 보통 여러 하드웨어 플랫폼에서 동작하도록 설계된다.
하지만 실제 시스템에는 정해진 장치와 구성만 존재함
따라서 운영체제는 설치 전에, 특정 하드웨어 환경에 맞게 구성(configure) 되어야 한다
이 과정을 시스템 생성(SYSGEN, System Generation)이라 부른다.
SYSGEN 과정에서는 다음 질문에 대한 답이 필요함:
CPU의 종류는?
메모리 크기는?
디스크 유형은?
터미널 장치, 프린터, 기타 장치는 어떤 것이 있는가?
→ 이 정보는 구성 파일에 저장되며, 해당 파일을 기반으로 커널이 생성됨
생성 결과: 부팅 가능한 운영체제 이미지
생성 결과물은 디스크 또는 기타 저장매체에 기록됨
사용자가 시스템을 부팅하면, 이 커널 이미지가 로드되어 실행됨
3단계: 시스템 부팅 (System Boot)
운영체제를 메모리에 적재하는 과정을 부팅이라 한다. 이 때 사용되는 소프트웨어는 부트스트랩 프로그램(bootstrap program)이다.
부트스트랩 프로그램의 역할
하드웨어에 내장됨 (ROM 또는 EEPROM에 저장됨)
시스템 전원이 켜지면 가장 먼저 실행됨
다음 작업 수행:
하드웨어 초기화
디바이스 상태 확인
부트 디바이스로부터 운영체제 로드
부트 로더의 동작 방식
부트 디바이스의 첫 번째 블록(부트 블록 또는 MBR) 읽기
그 블록에 있는 부트 로더 코드 실행
커널 이미지를 메모리로 로드
제어를 커널의 진입점(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