리눅스 부팅 과정
컴퓨터 공부를 하면 할수록 예전에 배웠던 컴퓨터의 구조와 동작과정이 항상 궁금했다. 학교 수업시간엔 솔직히 암기식으로 공부해서 머가 먼지 잘 몰랐는데 지금와서 후회하고있다.. 그때 잘해 놓을껄..
어쨋든 ! 리눅스를 자주 사용하면서 예를 그냥 아무 생각 없이 쳤던 ls 명령어가 어떻게 실행되며 어떤 원리로 해당 명령이 실행될까? 저건 어떤 원리로 실행되는 거지? 윈도우랑 무슨 차이지? 부팅과정은 어떻게 되지?? 이런 궁금증이 계속 생겨났다. 따라서 오늘은 부팅과정 부터 공부한 내용을 정리해보고자 한다. (틀린 내용이 있으면 말해주세요..)
왼쪽 그림의 사람이 의자에 안자서 컴퓨터를 키면 오른쪽 사진과 같은 화면이 모니터에 띄워지게 된다.
그럼 이제 우리는 카톡을 하고 인터넷을 하고 공부를 하거나 쇼핑을 하거나 등등 여러가지 일을 하게 된다.
우리는 컴퓨터의 동작따위는 신경쓰지 않은채 그냥 사용을 하지만 이제 내부적으로 어떠한 원리를 통해서 사용자의 눈앞에 화면이 띄워지는가를 알아보겠다.
우선 전체적인 과정은 다음과 같다.
리눅스 전체 부팅 과정
전체 동작 흐름
각각의 과정에 대해서는 뒤에서 설명하겠고 지금은 그냥 흐름만 보자. 사용자가 컴퓨터의 버튼을 누르면 먼저 바이오스화면이 뜨게 된다. 이해하기 쉽게 버튼 누르면 검은 화면에 막 머시기~~~ 뜨는걸 말한다.
거기서 슈슈슉 글자가 막 나오게 되는데 이러한 과정은 현재 해당 컴퓨터의 시스템을 확인하고 디스크에 있는 Master Boot Record에 있는 코드를 메모리로 로딩을 하고 수행을 시킨다.
그럼 그 MBR은 실제 부트로더를 로딩을 하게 되고 그 부트로더가 커널의 이미지를 메모리상에 가져온다. 그리고 그 커널이 또 수행할 여러가지 프로그램들과 드라이버들을 Inital Ram disk라고 하는 이미지를 가지고 Ram상에 가상으로 디스크를 만든다.
그렇게 되면 기본적으로 시스템이 동작하게 된다. 이 동작하는 과정에서 제일 먼저 하는 일이 바로 /sbin/init 이라는 프로세스가 동작한다.
이 프로세스는 모든 프로세스들의 조상 프로세스라고 생각하면 된다. 이 조상 프로세스를 기준으로해서 기타 수행에 필요한 프로세스들이 동작하게 된다.
이러한 준비 과정이 끝나게 되면 최종적으로 사용자가 사용할수 있는 화면에 딱 보여지게 된다. 위의 설명은 전체적으로 간략한 내용이고 실제로는 매우 복잡한 과정이 수행된다.
이제 이러한 과정을 단계 별로 좀더 상세하게 설명하겠다.
1단계 : ROM에 탑재된 BIOS가 키보드/스크린 등의 부팅에 필요한 하드웨어 초기화
첫번째 단계는 ROM에 탑재된 BIOS가 키보드나 스크린의 부팅에 필요에 필요한 하드웨어의 각 장치들을 인식하고 초기화 하는 단계이다.
이 과정에서 시스템에 장착된 CPU, RAM, DISK 등과 같은 하드웨어 장치들을 하나씩 인식하고 이상유무를 체크하게 된다. 그리고 시리얼 장치, 마우스 장치, 사운드 장치, USB 장치 SATA 장치 이더넷 카드 등이 BIOS에 의해 인식되고 사용을 하기위한 초기화가 수행된다.
2단계 : 하드디스크 Master Boot Record(MBS)에서 부트로더를 로드해서 실행
하드디스크 섹터
위의 1단계가 수행되고 바이오스는 그다음으로 하드디스크의 첫번째 섹터(초록섹 부분)에 위치한 Master Boot Record를 램으로 로드를 하게 된다.
Master Boot Record란 운영체제가 어디에 어떻게 위치해 있는지를 식별하여 컴퓨터의 주기억장치에 적재될 수 있도록 하기 위한 정보가 담겨져있다. 또한 설치된 OS를 실행시키는 부트로더가 포함되어 있다.
만약 중요한 정보가 담긴 MBR 레코드 부분을 해커가 랜섬웨어를 감염시켜 암호화를 시켜버리면, 컴퓨터의 부팅과정에서 문제가 생길수 있다.
3단계 : 부트로더는 커널과 Initial RAM Disk를 메모리에 로드
2단계 후에 MBR에 포함되어 있는 부트로더가 램 상에 올라가서 수행을 하게 된다. 여기서 부트로더란 운영체제의 커널이 디스크의 어디에 있는지 알고 있으며 그것을 메모리로 불러오는 역할을 하는 장치 라고 보면 된다.
쉽게 말하자면 해당 MBR에서 식별한 운영체제의 실질적인 수행을 하는 역할이 바로 부트로더이다.
리눅스에서 가장 많이 사용하는 부트로더로는 GRUB가 있는데 처음 리눅스가 개발 될 당시 사용하던 LILO라는 부트로더에서 단점을 보안하여 개발된 것이 바로 GRUB이다.
정리를 하자면 부트로더는 커널을 램으로 로딩을 하고 Inital Ram disk를 메모리상에 가상적으로 만든다.
4단계 : - init RAM Disk는 메모리상의 가상의 디스크로 initramfs를 갖는다.
- initramfs는 커널이 초기에 동작하기 위한 기본 드라이버 프로그램들을 가지고 있다.
init RAM Disk는 메모리상의 가상의 디스크로써 initramfs이란 파일 시스템을 가지고 있다. 이 파일 시스템에는 커널이 초기에 동작할때 필요한 드라이버나 프로그램, 바이너리 파일 등을 가지고 있다.
즉 부트로더가 커널 이미지를 로딩하면 로딩된 그 커널이 프로그램이나 드라이버를 RAM상에 가상의 디스크형태로 만들어 넣게 된다.
5단계 : 커널의 초기화가 끝나면, /sbin/init 프로그램이 동작하여, 기본 서비스(시간설정, 네트워크 설정 등)를 동작시킨다.
이렇게 커널이 initramfs 파일시스템을 이용하여 초기화 과정을 끝마치면 커널은 이제 수행의 권한을 /sbin/init 프로세스에게 넘겨주게 된다. 이 프로세스는 여러가지 기본 서비스들을 동작시키게 한다. (시간이나 네트워크 웹 서버 등등)
init 명령이 시작되면 이는 시스템에서 자동으로 시작하는 모든 프로세스의 부모가 된다.
먼저 init 명령은 /etc/rc.d/에 있는 스크립트들을 실행하여 패스 설정, 파일 시스템 확인, 시스템 초기화 등에 필요한 동작을 실행한다.
이러한 조상 프로세스인 init으로 인하 자식 프로세스들 , /etc 밑에 있는 수행에 필요한 프로세스들이 실행되고 모든 동작이 끝나게 되면 드디어 로그인 창이 뜸으로써 부팅과정이 끝나게 된다.
'보안 > Linux' 카테고리의 다른 글
리눅스 특수권한이란? (0) | 2019.03.22 |
---|---|
리눅스 권한이란? (0) | 2019.03.22 |
xcz 17번 문제 (0) | 2019.02.23 |
모스신호 wav 파일 생성하기 (0) | 2019.02.23 |
network recovery (0) | 2019.02.17 |