리눅스 시스템의 부팅 과정
바이오스 단계
- PC의 전원 스위치를 켜서 부팅하면 제일 먼저 바이오스(BOIS, basic input/output system) 가 동작
- 바이오스는 PC에 장착된 기본적인 하드웨어(키보드,디스크 등)의 상태를 확인한 후 부팅 장치를 선택하여 부팅디스크의 첫 섹터에서 512 바이트를 로딩
- 512 바이트가 마스터 부트 레코드(master boot record, MBR): 2차 부팅 프로그램(부트 로더) 의 위치에 저장
부트 로더 단계
바이오스 단계에서 MBR은 부트로더를 찾아 메모리에 로딩
부트 로더는 여러 운영체제 중에서 부팅할 운영체제를 선택할 수 있도록 메뉴를 제공
- 부트 로더는 리눅스 커널을 메모리에 로딩
- 리눅스 커널은 /boot 디렉터리 아래에
- vmlinuz-버전명 의 형태로 제공
- 리눅스의 대표적인 부트 로더
- GRUB 와 LILO
커널 초기화 단계
- 커널은 가장 먼저 시스템에 연결된 메모리, 디스크, 키보드, 마우스 등 장치들을 검사
- 장치 검사 등 기본적인 초기화 과정이 끝나면 커널은 fork를 사용하지 않고 생성되는 프로세스와 스레드 생성
- 이 프로세스들은 메모리 관리 같은 커널의 여러가지 동작을 수행
- 이들 프로세스는 일반적인 프로세스와 구분되도록 대괄호([])로 표시하며 주로 PID 번호가 낮게 배정된다.
init 실행 단계
- init 실행 단계에 이르면 리눅스가 본격적으로 동작하기 시작
- 기본적으로 메시지가 보이지 않도록 하고 대신에 부트 스플래시(boot splash)라고 하는 이미지를 출력
- 부트 스플래시 화면이 진행 중일 때 ctrl + D 키를 누르면
- 메시지가 출력되는 화면으로 전환
부팅 후 메시지 확인
부팅 시 출력된 메시지는 dmesg 명령이나 more /var/log/boot.log 명령으로 확인 가능.
1번 프로세스
- 전통적으로 유닉스에서는 init 프로세스가 처음 생성된 프로세스로서 PID가 1번
로그인 프롬프트 출력
- 마지막으로 그래픽 로그인 시스템인
- GDM(GNOME display manager)을 동작시키고,
- 로그인 프롬프트 출력함.(서버링)
init 프로세스
- init 프로세스는 PID가 1번인 프로세스로 모든 프로세스의 조상 역활
- 우분투는 자체적으로 개발한 upstart를 init대신 사용하는데, 다만 기존의 유닉스 및 리눅스 환경과의 호환을 위해 실행 파일 이름은 init를 유지
- init의 동작 방식이 바뀜에 따라 전통적으로 init 프로세스와 관련된 설정 파일이었던 /etc/inittab 파일은 이제 우분투에서 사라졌다.
.init 프로세스와 스크립트 파일
- 기존의 init와 새로운 upstart는 모두 프로세스를 실행하거나 종료하기 위해 스크립트 파일을 사용
- /etc/init 디렉터리와 /etc/init.d 디렉터리에 같은 서비스에 대한 파일이 있다면 /etc/init 디렉터리의 스크립트 파일이 우선적으로 적용
upstart가 사용하는 작업 파일
upstart와 관련된 스크립트 파일은 /etc/init 디렉터리에 작업명.cinf 파일로 작성한다.
기존 init 프로세스
init 프로세스가 실행하는 스크립트 파일은 /etc/init.d 디렉터리에 위치한다.
upstart 스크립트를 시작하고 정지하기 (systemctl)
- initctl [start|stop|restart|reload|status] 작업명
- sudo [start|stop|restart|reload|status]작업명
start, stop, restart, reload, status 명령은 모두 initctl 명령에 대한 심벌릭 링크 이다.
upstart 스크립트 시작하고 정지하기
sudo ufw status : 작업 상태 보기
systemctl [start|stop|restart|reload|status]
init 스크립트 시작하고 정지하기
sudo service 스크립트명 [start|stop|restart|status]
/etc/init.d/스크립트명 [start|stop|restart|status]
서비스 상태 보기 : service 스크립트 status
init 프로세스와 런레벨
- init 프로세스에서 사용하던 런레벨(Run Level)의 개념에 대한 이해 필요.
- init는 시스템의 단계를 일곱 개로 정의하여 구분하고 각 단계에 따라 셸 스크립트를 실행 하는데, 이 단계들을 런 레벨이라고 함
- 기존 유닉스나 페도라와 달리 우분투의 런레벨은 기본 런레벨이 2번이다
유닉스의 런레벨 | ||
런레벨 | 의미 | 관련 스크립트의 위치 |
0 | 시스템 종료 | /etc/rc0.d |
1,S,s | 단일 사용자 모드 | etc/rc1.d |
2 | 다중 사용자 모드(NFS를 실행하지 않음) | etc/rc2.d |
3 | 다중 사용자 모드(NFS 포함) | etc/rc3.d |
4 | 사용하지 않음(예비 번호) | etc/rc4.d |
5 | 시스템 종료(페라는 GUI 모드로 부팅) | etc/rc5.d |
6 | 시스템 재시작 | etc/rc6.d |
우분투의 런레벨 | ||
런레벨 | 의미 | 관련 스크립트의 위치 |
0 | 시스템 종료 | /etc/rc0.d |
1,S,s | 단일 사용자 모드 | /etc/rc1.d, /etc/rcS.d |
2 | 그래피컬 다중 사용자 모드 + 네트워킹(기본 값) | /etc/rc2.d |
3 | 런레벨 2와 동일 | /etc/rc3.d |
4 | /etc/rc4.d | |
5 | /etc/rc5.d | |
6 | 시스템 재시작 | /etc/rc6.d |
init 프로세스와 런 레벨
런레벨 3, 4, 5번이 2번과 같으므로, rc2.d 디렉터리와 rc3.d, rc4.d, rc5.d 디렉터리의 내용이 모두 같음.
런레벨 별로 실행하는 스크립트 파일은 /etc/init.d 디렉터리에 있는 파일에 대한 심벌릭 링크 이다
런레벨 변경하기
- init는 1번 프로세스의 이름이기도 하지만 init 프로세스의 런레벨을 바꾸는 명령어로도 사용
- init을 명령으로 실행하면 실제로는 /sbin/telinit가 실행
- init로 런레벨을 변경하기 위해서는 바꾸려는 런레벨을 숫자로 지정한다.
기본 런레벨 지정하기
- 우분투에서 기본 런레벨은 /etc/init/rc-sysinit.conf 파일의 DEFAULT_RUNLEVEL 변수에 지정
현재 런레벨 확인하기 : reunlevel 명령
리눅스를 종료하는 방법
- sutdown 명령을 사용한다.
- halt 명령을 사용한다.
- poweroff 명령을 사용한다.
- 런레벨을 0이나 6으로 전환한다.
- revoot 명령을 사용한다.
- 전원을 끈다 -> 최후의 수단
shutdown 명령 사용하기
리눅스 시스템을 가장 정상적으로 종료하는 방법
shutdown 명령으로 시스템 즉시 종료하기
-h 옵션과 함께 현재 시간으로 지정
shoutdown 한다는 메시지 보내고 종료하기
- 시스템을 종료할 때 shutdown 명령으로 메시지를 보낼 수 있음
- 사용자들이 메시지를 받고 정리할 시간이 필요하므로 시간을 now로 지정하면 안 되고 특정 시간을 지정
- 예 : 2분 후에 종료한다는 메시지 발송
shutdown 명령으로 시스템 재시작하기 : -r 옵션 사용
shutdown 명령 취소하기 : -c 옵션
앞의 3분 후 재시작 명령을 취소할 경우 메시지 출력
shutdown 메시지만 보내기 : -k 옵션
Write [user] message -> CTRL + C
런레벨 변경하기
런레벨을 0으로 바꾸면 시스템이 종료
재시작 하려면 런레벨을 6으로 변경
기타 시스템 종료 명령
- 시스템을 종료하거나 재시작을 위해 사용할 수 있는 명령 : halt, pweroff, reboot
- halt 와 poweroff는 reboot명령의 심벌릭 링크
- halt, reboot, pweroff 명령은 /var/log/wtmp 파일에 시스템 종료 기록을 남기고 시스템을 종료하거나 재시작
- 사용할 수 있는 옵션
- -w : 실질적으로 재시작하거나 종료하지는 않지만 wtmp 파일에 기록을 남긴다
- -f : 강제로 명령을 실행하며 shoutdown을 호출하지 않는다
- -p : 시스템 전원을 끈다.
데몬 프로세스
데몬(daemon)
- 리눅스의 백그라운드에서 동작하면서 특정한 서비스를 제공하는 프로세스
- 리눅스 시스템에서 동작하는 각종 서비스를 제공하는 프로세스들이 바로 데몬
데몬의 동작 방식
- 독자형(standalone)
- 시스템의 백그라운드에서 서비스별로 항상 동작
- 자주 호출되는 데몬이 아니라면 시스템의 자원을 낭비할 우려
- 수퍼 데몬에 의한 동작 방식
- 평소에는 수퍼 데몬만 동작하다가 서비스 요청이 오면 수퍼 데몬이 해당 데몬을 동작시킴
- 독자형보다는 서비스에 응답하는 데 시간이 약간 더 걸릴 수 있지만 자원을 효율적으로 사용한다는 장점이 있다.
수퍼 데몬
- 유닉스에서 수퍼 데몬의 이름은 inetd
- 페도라에서는 보안 기능이 포함된 xinetd를 사용
데몬의 조상 : init과 커널 스레드 데몬
init 데몬 (systemd)
- 대부분의 프로세스의 조상 프로세스 이다.
- pstree 명령으로 확인
커널 스레드 데몬
- 커널의 일부분을 프로세스처럼 관리하는 데몬
- ps 명령으로 확인했을 때 대괄호([ ])로 둘러싸여 있는 프로세스들
- 예전에는 대부분 k로 시작했으나 요즘은 이를 반드시 준수하지 않음
- 커널 데몬은 대부분 입출력이나 메모리 관리, 디스크 동기화 등을 수행하며 대체로 PID가 낮은 번호로 할당
- 커널 데몬을 동작시키는 조상 데몬은 커널 스레드 데몬(kthreadd): PID 2번
주요 데몬
GRUB의 개요
- GRand Unified Bootloader 의 약자로, 리눅스의 전통적인 부트 로더인 LILO의 단점을 보완하여 GNU 프로젝트의 일환으로 개발
- GRUB는 LILO에 비해 다음과 같은 장점을 가지고 있음
- LILO는 리눅스에만 사용이 가능하지만 GRUB는 윈도에서도 사용할 수 있다.
- LILO에 비해 설정과 사용이 편리하다.
- 부팅 시에 명령을 사용하여 수정이 가능하다.
- 멀티 부팅 기능을 지원한다.
- GRUB의 가장 최신 버전은 GRUB2로 우분투에서 기본 부트 로더로 사용중이다.
GRUB2 관련 디렉터리와 파일
/boot/grub2/brub.cfg 파일: 기존의 menu.lst 파일을 대체하는 기본 설정 파일
/etc/grub.d 디렉터리 : GRUB 스크립트를 가지고 있으며 GRUB의 명령이 실행될 때 순서대로 읽혀 grub,cfg 파일이 생성
/etc/default/grub 파일 : GRUB 메뉴 설정 내용이 저장됨.
'대학교 코딩공부 > 운영체제 실습' 카테고리의 다른 글
13주차 패키지 관리 (0) | 2022.11.23 |
---|---|
12주차 파일시스템과 디스크관리 (0) | 2022.11.17 |
운영체제 실습 프로세스 ( fork, exc 함수 ) (0) | 2022.11.05 |
운영체제 실습 9주차 프로세스 (0) | 2022.10.26 |
운영체제 실습 9주차 리눅스 마스터 2급 시험문제 풀이2020년6월13일 (0) | 2022.10.25 |