리눅스에서 네트워크 서비스들을 만지다가 운영체제의 근본에 대해 호기심이 생겨 공부한 내용을 적는다.
내가 개인적으로 알고싶었던 것은 네트워크 시점이 어느 시점에 시작되는가였다.
1. 운영체제는 어떻게 시작되고 어떻게 관리될까??
컴퓨터라는 하드웨어는 CPU, RAM, HDD 등의 각각의 하드웨어들이 메인보드 위에서 상호작용하여 이루어진다.
근데 이게 어떻게 돌아가길래 저기서 지금 우리가 보는 홈페이지를 띄우고 마우스와 키보드 입력 등의 많은 일들을
자연스럽게 할 수 있을까??
컴퓨터에서 OS가 고장나거나, 설치하지 않으면 검은 화면만 띄우는 녀석밖에 되지 않는다.
이 말은 다시 생각해보면 OS를 기반으로 많은 일들이 가능해지게 된다는 말이 된다.
이렇게 보면 OS는 우리가 아는 프로그램(소프트웨어)과 하드웨어 사이에서 어떤 역할을 하는 것은 확실하다.
OS가 무슨 역할을 하고 어디서부터 시작되길래 이런 순서가 가능해질까??
개인적으로 리눅스를 알고싶으므로 리눅스에 대해서 공부해보았다.
컴퓨터 부팅 순서
위의 이미지들은 대략적으로 리눅스가 부팅되는 과정을 보여준다.
이미지를 보며 개념을 잡아가보면서 개인적으로 공부한 내용을 더 적어본다.
1. 전원 공급
말그대로 전기가 통하면서 메인보드에 있는 BIOS 프로그램을 자동으로 불러오고 실행한다.
이 때, BIOS란 Basic Input Output System의 약자로,
하드웨어간 입출력을 담당하는 low level의 소프트웨어와 드라이버로 이루어진 펌웨어를 의미한다.
이 때, POST(Power On Self test) 라고 하여 하드웨어들과 통신하며 장치 이상 유무를 체크한다.
2. BIOS 부팅
BIOS 에서 지정한 부팅순서에 따라 드라이브 순서대로 부팅이 이루어진다.
실제로 USB를 가지고 운영체제를 설치할 때 BIOS에서 부팅 순서를 설치하는 과정을 이해해보면 BIOS 부팅까지는 운영체제와 무관하다.
운영체제 없이도 BIOS는 실행되니 말이다.
컴퓨터는 드라이브를 읽어들일 때, 첫번째 섹터인 부트 섹터를 읽어들이는데 이를 MBR(Master Boot Record)라고 부른다.
(컴퓨터 관리에서 보면 있었던 드라이브 파티션이 여러개인 이유가 이거였다.)
3. 부트로더 과정 (GRUB)
리눅스의 경우는 GRUB(GRand Unified Bootloader) 이 MBR에 저장되어 있다.
부트로더를 읽어들이면, BIOS를 종료하고 시스템의 제어 권한을 GRUB에 넘긴다.
GRUB는 /boot/grub/grub.conf 파일에 적힌대로 순서대로 실행하여
커널 이미지를 불러들이고 시스템 제어 권한을 커널에게 넘긴다.
커널 이미지는 압축되어 있는 상태여서, PID 0번인 Swapper라는 프로그램을 통해 압축이 해제되고
여러 하드웨어를 체크하고 초기화하여 화면에 보여주는데,
dmesg 명령어로 하드웨어 상태를 확인할 수 있다.
커널이 적재된 이후, 루트 파일 시스템이 마운트된다.
이 말이 뭐냐면, 리눅스가 설치된 파티션을 루트(root), 기반으로 삼아 읽기 모드로 파일을 읽기 시작한다는 의미이다.
4. Init 과정 실행
PID 0번 다음으로 1번에 있는 /sbin/init 을 실행하게 되고, /sbin/init은
리눅스에서 로그인 화면이 나오기 전까지의 과정은 /sbin/init에 의한 과정이다.
/etc/inittab 에 정의된 순서대로 시스템을 초기화시키는데,
이 때 중요한 것은, init 과정은 sysV 와 Systemd로 구분된다.
sysV
sysV 1단계는 /etc/inittab에 적힌 초기 구성파일을 읽어오는데, 이 때 실행레벨이라는 것이 존재하여 레벨에 따라 실행파일이 바뀐다.
sysV 2단계는 구성파일에 적힌대로 실행레벨에 따라 서비스를 실행하기 전에, /etc/init.d/rc에 적힌 명령어를 실행한다.
(파일시스템 점검, 네트워크 활성화, 메모리 초기화 등)
sysV 3단계는 /etc/init.d 와 /etc/init.d/rc[0~6].d 에 적힌 서비스를 실행한다.
대표적으로는 cron, sshd, lpd 등이 있다.
OS마다인지 버전마다인지 차이가 폴더의 차이가 조금 있는거 같은데, 대충 비슷한 경로로 파악하면 될 것 같다.
이 때 스크립트를 더 자세히 보면, S로 시작하는 키워드는 시작하는 프로세스, K는 죽여야되는 프로세스,
그 뒤의 숫자는 실행되는 순서를 의미한다.
# cd /etc/rc5.d
# ls
K01dnsmasq@ K50tux@ S09isdn@ S26lvm2-monitor@
K02avahi-dnsconfd@ K69rpcsvcgssd@ S10network@ S28autofs@
K02NetworkManager@ K73ypbind@ S11auditd@ S50hplip@
K02oddjobd@ K74ipmi@ S12restorecond@ S55sshd@
K03yum-updatesd@ K74nscd@ S12syslog@ S56cups@
K05conman@ K74ntpd@ S13cpuspeed@ S56rawdevices@
K05innd@ K80kdump@ S13irqbalance@ S56xinetd@
K05saslauthd@ K85mdmpd@ S13iscsi@ S57vmware-tools-thinprint@
K05wdaemon@ K87multipathd@ S13portmap@ S60vsftpd@
K10dc_server@ K87named@ S14nfslock@ S80sendmail@
K10psacct@ K88wpa_supplicant@ S15mdmonitor@ S85gpm@
K12dc_client@ K89dund@ S18rpcidmapd@ S90crond@
K15httpd@ K89netplugd@ S19rpcgssd@ S90xfs@
K20nfs@ K89pand@ S20hypervkvpd@ S95anacron@
K20rwhod@ K89rdisc@ S22messagebus@ S95atd@
K24irda@ K91capi@ S23setroubleshoot@ S96readahead_later@
K25squid@ S03vmware-tools@ S25bluetooth@ S98avahi-daemon@
K30spamassassin@ S04readahead_early@ S25netfs@ S99firstboot@
K35dovecot@ S05kudzu@ S25pcscd@ S99local@
K35smb@ S07iscsid@ S26acpid@ S99smartd@
K35vncserver@ S08ip6tables@ S26apmd@
K35winbind@ S08iptables@ S26haldaemon@
K50netconsole@ S08mcstrans@ S26hidd@
systemd
개인적으로 알고 싶었던 내용이 여깄었다.
흔히 부팅시에 /etc/systemd/system/{service_name}.service 로 서비스를 등록하여 부팅시마다 실행되도록 하는데,
이 부분에서 실행되는 것이였다.
service를 등록할 때 Target 유닛을 사용하여 부팅, 서비스관리, 동기화 프로세스를 진행한다.
결론 - TIL(Today I Learned)
OS는 하드웨어와 우리가 사용하는 소프트웨어 사이에서 많은 일을 한다고 하는데, 그 과정이 어떻게 이루어지는지 알지 못했었다.
오늘 공부를 통해 전원이 공급된 순간부터 OS가 하드웨어로부터 어떻게 시작되고,
어떻게 뻗어나가 서비스를 시작하여 소프트웨어 사이와 하드웨어 사이를 어떻게 조율하는지 대략적으로 배울 수 있었다.
참고 및 출처
https://yonlog.tistory.com/m/59
https://damduc.tistory.com/152
https://itragdoll.tistory.com/3
https://cishome.tistory.com/37
'Computer Science > OS' 카테고리의 다른 글
[Linux] 반응형 쉘 스크립트에 자동 입력 (0) | 2022.02.08 |
---|---|
리눅스 특정 시간 이후 파일 압축하기 (0) | 2021.09.29 |
리눅스 tar 파일 zip으로 변경 (0) | 2021.09.29 |
Error: Connection activation failed: (7) Secrets were required, but not provided. (0) | 2021.09.08 |
[Linux] 터미널 환경에서 google drive 파일 다운받기 (0) | 2021.03.09 |