운영체제 빌딩과 부팅
- 일반적인 운영체제 → 다양한 주변장치 구성을 가진 모든 종류의 컴퓨터에서 실행되도록 설계
운영체제 생성
- 운영체제 생성 절차
- 운영체제 소스 코드 작성
- 운영체제가 실행될 시스템의 운영체제 구성
- 운영체제 컴파일
- 운영체제 설치
- 컴퓨터와 새 운영체제 부팅
- 운영체제 소스 코드 작성
시스템 빌드
- 시스템 관리자가 운영체제 소스 코드의 사본을 수정한 뒤, 운영체제가 완전히 컴파일된다.
- 컴파일 시, 각 데이터는 구성 파일에 설명된 시스템에 맞는 운영체제의 출력-오브젝트 버전을 생성
- 상세한 조정을 할 수 없는 수준에서 시스템 설명을 통해 기존 라이브러리에서
사전 컴파일된 오브젝트 모듈을 선택 가능- 모듈들이 서로 링크되어 새로운 운영체제 생성
→ 지원되는 I/O 장치 드라이버를 포함한 라이브러리에서 필요한 것만 선택 가능 - 장점
- 필요한 것만 운영체제에 링크해서, 시스템 생성 속도가 빠름(시스템이 다시 컴파일되지 않음)
- 필요한 것만 운영체제에 링크해서, 시스템 생성 속도가 빠름(시스템이 다시 컴파일되지 않음)
- 단점
- 지나치게 일반적일 수 있음
- 다른 하드웨어 구성을 지원하지 않을 수 있음
- 채택 예 : 임베디드 시스템
- 모듈들이 서로 링크되어 새로운 운영체제 생성
- 완전히 모듈 방식으로 시스템 구성 가능
- 여기서 선택은 컴파일 또는 링크 시간이 아닌 실행 시간에 발생
→ 시스템 생성은 매개변수의 설정만 하면 됨 - 채택 예 : 데스크톱, 모바일 장치를 지원하는 최신 운영체제
- 여기서 선택은 컴파일 또는 링크 시간이 아닌 실행 시간에 발생
시스템 부트
시스템 부팅
: 커널을 적재하여 컴퓨터를 시작하는 과정- 운영체제가 생성된 후에 새 운영체제를 사용할 수 있어야 하기 때문에 필요
- 운영체제가 생성된 후에 새 운영체제를 사용할 수 있어야 하기 때문에 필요
- 시스템 부팅 과정
- 부트스트랩 프로그램 or 부트 로더라고 불리는 작은 코드가 커널의 위치를 찾는다.
- 커널이 메모리에 적재되고 시작된다.
- 커널은 하드웨어를 초기화한다.
- 루트 파일 시스템이 마운트 된다. → 이 시점이 시스템이 실행 중이라고 말할 수 있음
- 다단계 부팅 과정에서 컴퓨터 전원을 켜면 비휘발성 펌웨어에 있는 BIOS가 실행
- BIOS는 소형 부트 로더
- 역할 : 디스크의 정해진 위치에 있는 2번째 부트로더(부트 블록)를 적재하는 작업만 함.
- 부트 블록에 저장된 프로그램은 전체 운영체제를 메모리에 적재하고 시작하기에 충분히 정교
- 부트 블록에 저장된 프로그램은 전체 운영체제를 메모리에 적재하고 시작하기에 충분히 정교
- 간단한 코드로서 디스크의 주소와 부트스트랩 프로그램 나머지의 길이만 알고 있다.
← 간단한 코드인 이유 : 하나의 디스크 블록에 저장되어야 하기 때문에
- 역할 : 디스크의 정해진 위치에 있는 2번째 부트로더(부트 블록)를 적재하는 작업만 함.
- 최신에는 BIOS 기반 부팅 과정을 UEFI 대체
- UEFI 장점
- 64비트 시스템과 큰 디스크를 더 잘 지원
- 하나의 완전한 부팅 관리자이므로, BIOS 부팅 과정보다 빠르다.
- UEFI 장점
- BIOS는 소형 부트 로더
- 부트스트랩 프로그램(부트로더)이 하는 일
- 커널 프로그램이 포함된 파일을 메모리에 적재
- 커널 프로그램이 포함된 파일을 진단하여 메모리와 CPU를 점검하고 시스템 상태 확인
- 부트스트랩은 시스템의 모든 측면을 초기화할 수 있다
- 시스템의 모든 측면 → CPU 레지스터에서 장치 컨트롤러 및 메인 메모리 등
- 시스템의 모든 측면 → CPU 레지스터에서 장치 컨트롤러 및 메인 메모리 등
- 부트스트랩은 시스템의 모든 측면을 초기화할 수 있다
- 대부분의 운영체제의 부트 로더는 하드웨어 문제 진단, 손상된 파일 시스템 복구 및 운영체재 재설치 등
복구 모드와 단일 사용자 모드로 부팅할 수 있는 기능을 제공
운영체제 디버깅
디버깅
: 하드웨어와 소프트웨어에서의 시스템 오류를 발견하고 수정하는 행위- 성능 문제는 버그로 간주됨 → 성능 조정도 디버깅에 포함
성능 조정
: 시스템 처리 중에 발생하는 병목 현상을 제거하여 성능을 향상하는 것- 병목 현상 : 전체 시스템의 성능이나 용량이 하나의 구성 요소로 인해 제한을 받는 현상
장애 분석
- 프로세스가 실패했을 때 운영체제 행동
- 시스템 관리자 또는 사용자에게 경고하기 위해, 오류 정보를 로그 파일에 기록
- 프로세스가 사용하던 메모리를 캡처한 코어 덤프를 취하고, 차후 분석을 위해 파일로 저장
- 실행 중인 프로그램과 코어 덤프는 디버거에 의해 검사 될 수 있으며,
이는 장애 발생 시 프로그래머가 프로세스의 코드와 메모리를 분석할 수 있도록 한다. - 커널 장애 → 크래시(crash)
- 오류 정보가 로그 파일에 저장되고 파일에 저장되고 메모리의 상태가 크래시덤프에 저장
- 커널 장애 발생 시에는 조금 다른 기법 사용할 수도 있음
← 커널 장애는 재부팅 전에 커널의 상태를 파일 시스템에 저장하려는 시도를 위험하게 하기 때문에
- 커널의 메모리 상태를 이 용도를 위해 비어 있는 디스크의 특정 부분에 저장
- 커널이 장애가 발생하면 메모리 내용 또는 커널이 소유한 부분만이라도 해당 디스크에 저장
- 시스템이 재부팅되면 프로세스는 해당 영역으로부터 데이터를 수집하고 크래시 덤프 파일을 기록
성능 관찰 및 조정
- 병목 지점을 발견함으로써 시스템 성능을 감시할 수 있다.
→ 시스템 동작을 측정하고 표시할 수 있는 방법을 가지고 있어야 함
→ 관찰 제공 특징 2가지 존재 → 1. 프로세스별 2. 시스템 전체 카운터
- 운영체제는 카운터를 통해 시스템 활동을 추적
- 시스템 활동 : 시스템 콜 횟수, 네트워크 장치, 디스크에 수행된 작업 수 등
- 커널에서 유지 관리하는 특정 통계의 현재 값에 간단히 얻을 수 있음
- 운영체제는 카운터를 통해 시스템 활동을 추적
추적
- 시스템 콜과 관련된 단계와 같은 특정 이벤트에 대한 데이터 수집