본문 바로가기
Computer Science

운영체제의 부팅

by PROGRAMMER_황금돼지코 2023. 3. 26.
반응형

컴퓨터를 켜서 윈도우 운영체제를 부팅하고 사용이 끝나면 운영체제를 종료하는 것은 대부분의 사람이 경험한 적이 있을 것이다. 그러나 시스템의 부팅과 종료는 운영체제의 핵심 프로그램만 시작하거나 종료하는 것이 아니다. 여러 가지 서비스나 프로세스를 함께 시작하거나 종료하는 것이다. 리눅스 부팅도 이와 같이 이루어지며 이를 부트스트래핑(bootstrapping)이라고 한다.

PC에 설치된 운영체제를 부팅하려면 '부트 프로그램"이 필요하다. 이 프로그램을 부트 로더(boot loader) 또는 부트스트랩 로더라고 하는데 하드디스크로부터 운영체제를 메모리로 적재시키는 프로그램이다.

먼저 컴퓨터의 전원을 켜면 프로세서가 ROM에 저장되어 있는 BIOS 프로그램을 찾아 실행시킨다(BIOS 기반의 인텔 x86 시스템을 사용한다고 가정한다). 대개 이것은 첫 번째 프라이머리 하드디스크에서 첫 트랙의 첫 번째 섹터(부트 섹터라 하며 대개 512바이트)에 해당하는 MBR(Master Boot Record)에 설치된 부트로더를 메모리에 올려 실행시킨다. 부트 로더는 컴퓨터가 시작될 때 수행되는 첫 번째 프로그램으로 운영체제를 메모리에 적재하여 실행시키며, 운영체제에 시스템의 제어를 넘겨주는 일을 수행하는 아주 작은 기계어 프로그램이다.

전통적 부트 로더는 MBR에 함께 존재하는 파티션 테이블의 정보를 이용하여 부팅 가능한 파티션을 찾고 운영체제 커널을 찾아 로드하고 실행시킨다. 커널이란 운영체제의 가장 기본이며 핵심이 되는 프로그램이다. 파티션 테이블에는 파티션별로 다음과 같은 정보가 저장된다.

- 파티션의 시작과 끝을 나타내는 주소: 파티션의 크기와 위치를 알 수 있다.
- 파티션이 부팅 가능한가에 관한 정보
- 파티션 타입: 두 자리 16진수로 표현되며 운영체제, 파일 시스템의 종류나 개발 회사 등을 나타낸다

 

리눅스의 부팅

서버용 리눅스를 사용하는 경우, 시스템 점검이 필요하지 않은 한 종료를 할 필요가 없기 때문에 윈도우 시스템과는 달리 부팅이 자주 일어나지 않는다. 과거에는 LILO(Linux Loader)가 널리 사용되었지만, 최근 배포판에서는 GNU의 GRUB 2(GRand Unified Bootloader)가 대부분 사용된다. GRUB는 그래픽 인터페이스를 제공하며 멀티 부팅이 가능한 컴퓨터에서 하나의 운영체제를 선택할 수 있도록 해준다. MBR에 있는 부트 로더는 필요할 때 GRUB를 찾아 실행시킨다.

 

리눅스 시스템의 전형적인 부팅 절차는 시스템마다 약간의 차이가 있을 수 있지만, 간단히 요약하면 다음과 같다.

① 머신 BIOS 또는 부트 펌웨어가 부트 로더를 로드하고 실행시킨다.
② 부트 로더가 디스크에서 커널 이미지를 찾아 메모리에 로드하고 시작시킨다.
③ 커널이 디바이스를 찾고 디바이스 드라이버를 로드한다.
④ 커널이 루트(/) 파일 시스템을 마운트한다.
⑤ 커널은 /sbin/init 프로그램을 시작시키고 제어를 넘긴다.
⑥ /sbin/init 프로그램은 시스템 초기화 작업을 실행시킨다.
⑦ 사용자가 로그인을 수행할 수 있도록 화면이 등장한다.

 

커널의 로딩과 실행

GRUB가 메모리에 적재되어 실행되면 설치된 여러 운영체제 중 하나를 사용자가 선택할 수 있게 하는 화면이 제시된다. 사용자는 위/아래 화살표와 인 터키를 사용하여 부팅시키려는 운영체제를 선택할 수 있다. 선택을 하지 않으 면 기본으로 설정된 운영체제가 선택된다. CRUB는 커널 실행을 위한 옵션 설 정을 위해 설정파일로 /00V/gtub/grub.conf을 사용한다.

커널 자체도 프로그램이므로 GRUB가 커널을 메모리에 적재해야 커널이 실행된다. GRUB는 커널 이미지(커널의 실행 파일)의 위치를 알고 있어 스스 로 커널 이미지를 찾아 메모리에 적재한다. 여기까지가 바로 부트 로더의 역할이다. 리눅스의 경우 커널 이미지의 파일 이름은 대개 /boot vmlinuz-< kernel-version> 이거나 이와 유사하다(vm은 가상 메모리의 지원을, 2는 압 축을 의미한다).

앞의 과정을 통해 커널이 메모리에 로드되면 커널이 실행된다. 대부분의 리 눅스 시스템은 압축된 커널 이미지를 사용하며, 압축된 커널 이미지는 메모리 에 로드된 다음에 스스로 압축을 푼다. 그다음에 커널 내부에 설치된 기능들 과 현재 시스템에 설치된 하드웨어를 하나씩 인식하고 점검하는 과정이 나타 난다. 컴퓨터 메모리, 프로세서, V/O 장비, 저장 장치 등 부착된 여러 하드웨어 를 점검하고 초기화한다. 그리고 루트(1 파일 시스템을 읽기 전용으로 마운트 한다, 이어서 ihit 프로그램에 의해 초기화 스크립트가 실행되며 이때 디스크 를 검사하는 과정이 있다. 앞서 루트 파일 시스템을 읽기 전용으로 마운트하 는 이유는 안전한 상태에서 디스크 검사를 하기 위해서이다. 검사 후 이상이 없으면 쓰기 가능 형태로 다시 마운트한다.
이제 커널은 메모리에 로드되었고 임무 수행이 가능한 상태이다.하지만 아 직까지 사용자 로그인의 처리나 서버 데몬(daemon) 프로그램 등의 사용자 환 경이 준비되어 있지 않다. 프린팅 서비스나 로그인 서비스와 같이 리눅스 시 스템이 지속적으로 제공해야 하는 서비스는 일반적으로 데몬 프로세스로 구 현되어 있다. 따라서 커널은 각 데몬 프로세스를 하나의 서비스로 관리하기 위해 초기화 데몬(또는 초기화 시스템이라 함)을 수행한다.

 

반응형

'Computer Science' 카테고리의 다른 글

순차접근 저장장치  (0) 2023.03.26
입출력 처리 유형  (0) 2023.03.26
데이터베이스 관리 시스템(DBMS)의 개요 및 목적  (0) 2023.03.26
가상 메모리  (0) 2023.03.26
데몬  (0) 2023.03.26

댓글