호우동의 개발일지

Today :

운영체제 빌딩과 부팅

  • 일반적인 운영체제 → 다양한 주변장치 구성을 가진 모든 종류의 컴퓨터에서 실행되도록 설계

운영체제 생성

  • 운영체제 생성 절차
    1. 운영체제 소스 코드 작성
    2. 운영체제가 실행될 시스템의 운영체제 구성
    3. 운영체제 컴파일
    4. 운영체제 설치
    5. 컴퓨터와 새 운영체제 부팅

시스템 빌드

  • 시스템 관리자가 운영체제 소스 코드의 사본을 수정한 뒤, 운영체제가 완전히 컴파일된다.
  • 컴파일 시, 각 데이터는 구성 파일에 설명된 시스템에 맞는 운영체제의 출력-오브젝트 버전을 생성
  • 상세한 조정을 할 수 없는 수준에서 시스템 설명을 통해 기존 라이브러리에서
    사전 컴파일된 오브젝트 모듈을 선택 가능
    • 모듈들이 서로 링크되어 새로운 운영체제 생성
      → 지원되는 I/O 장치 드라이버를 포함한 라이브러리에서 필요한 것만 선택 가능

    • 장점
      • 필요한 것만 운영체제에 링크해서, 시스템 생성 속도가 빠름(시스템이 다시 컴파일되지 않음)

    • 단점
      • 지나치게 일반적일 수 있음
      • 다른 하드웨어 구성을 지원하지 않을 수 있음

    • 채택 예 : 임베디드 시스템

  • 완전히 모듈 방식으로 시스템 구성 가능
    • 여기서 선택은 컴파일 또는 링크 시간이 아닌 실행 시간에 발생
      → 시스템 생성은 매개변수의 설정만 하면 됨

    • 채택 예 : 데스크톱, 모바일 장치를 지원하는 최신 운영체제

시스템 부트

  • 시스템 부팅 : 커널을 적재하여 컴퓨터를 시작하는 과정
    • 운영체제가 생성된 후에 새 운영체제를 사용할 수 있어야 하기 때문에 필요

  • 시스템 부팅 과정
    1. 부트스트랩 프로그램 or 부트 로더라고 불리는 작은 코드가 커널의 위치를 찾는다.
    2. 커널이 메모리에 적재되고 시작된다.
    3. 커널은 하드웨어를 초기화한다.
    4. 루트 파일 시스템이 마운트 된다. → 이 시점이 시스템이 실행 중이라고 말할 수 있음

  • 다단계 부팅 과정에서 컴퓨터 전원을 켜면 비휘발성 펌웨어에 있는 BIOS가 실행
    • BIOS는 소형 부트 로더
      • 역할 : 디스크의 정해진 위치에 있는 2번째 부트로더(부트 블록)를 적재하는 작업만 함.
        • 부트 블록에 저장된 프로그램은 전체 운영체제를 메모리에 적재하고 시작하기에 충분히 정교

      • 간단한 코드로서 디스크의 주소와 부트스트랩 프로그램 나머지의 길이만 알고 있다.
        ← 간단한 코드인 이유 : 하나의 디스크 블록에 저장되어야 하기 때문에

    • 최신에는 BIOS 기반 부팅 과정을 UEFI 대체
      • UEFI 장점
        • 64비트 시스템과 큰 디스크를 더 잘 지원
        • 하나의 완전한 부팅 관리자이므로, BIOS 부팅 과정보다 빠르다.

  • 부트스트랩 프로그램(부트로더)이 하는 일
    • 커널 프로그램이 포함된 파일을 메모리에 적재
    • 커널 프로그램이 포함된 파일을 진단하여 메모리와 CPU를 점검하고 시스템 상태 확인
      • 부트스트랩은 시스템의 모든 측면을 초기화할 수 있다
        • 시스템의 모든 측면 → CPU 레지스터에서 장치 컨트롤러 및 메인 메모리 등

  • 대부분의 운영체제의 부트 로더는 하드웨어 문제 진단, 손상된 파일 시스템 복구 및 운영체재 재설치 등
    복구 모드와 단일 사용자 모드로 부팅할 수 있는 기능을 제공

 


운영체제 디버깅

  • 디버깅 : 하드웨어와 소프트웨어에서의 시스템 오류를 발견하고 수정하는 행위
  • 성능 문제는 버그로 간주됨 → 성능 조정도 디버깅에 포함
    • 성능 조정 : 시스템 처리 중에 발생하는 병목 현상을 제거하여 성능을 향상하는 것
      • 병목 현상 : 전체 시스템의 성능이나 용량이 하나의 구성 요소로 인해 제한을 받는 현상

장애 분석

  • 프로세스가 실패했을 때 운영체제 행동
    1. 시스템 관리자 또는 사용자에게 경고하기 위해, 오류 정보를 로그 파일에 기록
    2. 프로세스가 사용하던 메모리를 캡처한 코어 덤프를 취하고, 차후 분석을 위해 파일로 저장
  • 실행 중인 프로그램과 코어 덤프는 디버거에 의해 검사 될 수 있으며,
    이는 장애 발생 시 프로그래머가 프로세스의 코드와 메모리를 분석할 수 있도록 한다.

  • 커널 장애 → 크래시(crash)
    • 오류 정보가 로그 파일에 저장되고 파일에 저장되고 메모리의 상태가 크래시덤프에 저장
    • 커널 장애 발생 시에는 조금 다른 기법 사용할 수도 있음
      ← 커널 장애는 재부팅 전에 커널의 상태를 파일 시스템에 저장하려는 시도를 위험하게 하기 때문에

      1. 커널의 메모리 상태를 이 용도를 위해 비어 있는 디스크의 특정 부분에 저장
      2. 커널이 장애가 발생하면 메모리 내용 또는 커널이 소유한 부분만이라도 해당 디스크에 저장
      3. 시스템이 재부팅되면 프로세스는 해당 영역으로부터 데이터를 수집하고 크래시 덤프 파일을 기록

성능 관찰 및 조정

  • 병목 지점을 발견함으로써 시스템 성능을 감시할 수 있다.
    → 시스템 동작을 측정하고 표시할 수 있는 방법을 가지고 있어야 함
    → 관찰 제공 특징 2가지 존재 → 1. 프로세스별 2. 시스템 전체

  • 카운터
    • 운영체제는 카운터를 통해 시스템 활동을 추적
      • 시스템 활동 : 시스템 콜 횟수, 네트워크 장치, 디스크에 수행된 작업 수 등
    • 커널에서 유지 관리하는 특정 통계의 현재 값에 간단히 얻을 수 있음

  • 추적
    • 시스템 콜과 관련된 단계와 같은 특정 이벤트에 대한 데이터 수집