목차
운영체제의 생성
- 운영체제 소스 코드를 작성한다.(혹은 소스 코드를 불러온다.)
- 운영체제의 실행을 위한 운영체제를 구성한다.
- 운영체제를 컴파일한다.
- 운영체제를 설치한다.
- 컴퓨터를 부팅한다.
닭과 계란은 하지 못하는 운영체제의 실행을 위한 운영체제를 구성한 후에 이러한 운영체제를 완전히 컴파일 하고 설치된 시스템에 맞는 데이터 선언이나 변수 등을 재 생성하는 과정을 거친다 (시스템 빌드)
또한 목적에 맞는 운영체제 빌드도 생각해볼수 있는데
생성된 시스템의 크기나 일반성이나 하드웨어 구성이 변경 될 시에 변경이 쉽게 되는 정도에 따라서 나뉠 수 있다.
임베디드 시스템의 경우에는 목적에 맞추어서 운영체제등이 설치되기 때문에 비교적 시스템의 크기가 작고 하드웨어 구성이 컴퓨터 처럼 쉽게 변경되지 않는다. 따라서 모든 I/O장치의 장치 드라이버를 포함한 라이브러리에서 필요한 구성만 선택하여 운영체제에 링크한다.
장점: 시스템 성능 속도가 빠르고 가볍다.
단점: 생성 시스템은 지나치게 일반적이고 다른 하드웨어 구성을 지원하지 않을수 있다.
최근의 데스크톱 컴퓨터나 모바일 장치를 지원하는 운영체제의 경우에는 모듈방식으로 시스템을 구성하여서 적재 가능 커널 모듈같은 기술을 이용하여 시스템의 동적 변경을 위한 모듈 방식을 지원할 수 있다.이런 경우에는 단순히 시스템을 구성을 설명하는 매개변수의 설정만 하고 나머지는 모듈로 기능을 수행하게 한다.
장점 : 여러가지 하드웨어를 모듈 방식을 통하여 지원한다.
단점 : 시스템 생성 속도가 느릴 수 있다.
시스템 부팅 원리 및 종류
운영체제를 형성 한 후에는 하드웨어가 이를 이용할 방법을 알아야 한다.
시스템 부팅은 커널을 적재하여 컴퓨터를 시작하는 과정 인데 하드웨어가 커널의 위치나 적재하는 방법을 어떻게 알까?
- 부트 스트랩 프로그램(부트로더)라는 코드가 커널의 위치를 찾는다.
- 커널이 메모리에 적재되고 시작된다.
- 커널은 하드웨어를 초기화한다.
- 부트 파일 시스템이 마운트한다.
BIOS 라고 불리는 비휘발성 펌웨어에 있는 소형 부트로더가 더 큰 크기의 부트 블록이라고 하는 디스크의 정해진 크기에(C드라이브에 윈도우를 설치하면 사용이 불가한 공간=부트블록을 비롯해 운영체제의 공간)접근하여 두번째 부트로드를 적재한다.
최근의 많은 프로그램들은 BIOS 대신 UEFI (Unified Extensible Fimware Interface)를 이용하고 있다. 특징으로는
- BIOS보다 64비트 시스템이나 용량이 큰 디스크를 더 잘 지원한다.
- 완전한 부팅 관리자로 BIOS 보다 속도가 빠르다.
시스템 부팅 과정
그럼 이러한 부트스트랩 프로그램으로부터 부팅을 시작하는 과정은
- 커널 프로그램이 포함된 파일을 메모리에 적재
- 진단을 실시(CPU의 상태, 장치 검색 등 시스템 상태를 확인함)
- 부팅 과정을 계속 실시함 (진단 통과 시에)
- 시스템의 모든 측면을 초기화함(CPU 레지스터, 장치 컨트롤러, 메인 메모리)
- 운영체제를 찾고 루트 파일 시스템을 메모리에 마운트 시킨다.
-----여기까지의 부팅은 완료되었고 이후에
- 운영체제에 들어온 첫번째 프로세스를 실행하고 그 이후에 인터럽트가 발생하면서 쭉 CPU가 작업을 처리하게 된다.
GRUB; for UNIX와 Android의 경우
GRUB는 공개 소스인 부트스트랩 프로그램인데
시스템 부트 매개변수는 GRUB의 구성파일에 설정 되어있고 GRUB의 실행시 적재된다. 윈도우 와는 달리 부팅 당시에 커널 매개변수를 수정하거나 다른 커널을 선택하는것이 가능하다.
안드로이드는 LK라는 작은 커널이라고 불리는 커널이 부트로더 역할이 된다.
또한 linux의 경우에는 initramfs라는 임시 RAM 파일 시스템을 생성하고 이 시스템에 실제의 루트파일 지원을 위한 드라이버와 커널 모듈이 저장 되어있는데 필요한 자원들이 모두 적재되면 이를 삭제한다. 하지만 Android 는 initramfs를 장치 루트파일 시스템으로 유지한다.
'CS > Operating System' 카테고리의 다른 글
프로세스 :: 메모리 배치 및 프로세스 제어 블록(PCB) (0) | 2022.08.05 |
---|---|
운영체제 구조 :: 성능관찰(카운터, 추적) (0) | 2022.08.04 |
운영체제 구조 :: 기술 구조 (2) | 2022.08.02 |
운영체제 구조 :: ABI란? 안정적인 ABI (0) | 2022.07.30 |
운영체제 구조 :: System call(시스템 콜)과 API/ABI (0) | 2022.07.29 |