SlideShare ist ein Scribd-Unternehmen logo
1 von 25
Downloaden Sie, um offline zu lesen
Ubuntu Booting Sequence
박진호
2012. 7. 28
Booting의 어원
● 영어의 장화(Boot)에서 어원을 찾을 수 있다.
● 밖으로 나가려면 먼저 장화를 신어야 한다는 뜻
● 컴퓨터를 처음 동작 시킬 때 수행되는 일련의 과정을
일컬음
전원 인가
● 컴퓨터의 전원스위치 ON 으로
올립니다.
- 시스템에 전원 공급
- 메인보드의 ROM-BIOS에 있는 BIOS프로
그램 실행.
● BIOS프로그램은 전원공급과 함께 메모리의 특정번
지에 자동 로딩
● CPU는 전원공급과 함께 특정번지의 BIOS 프로그
램을 실행
BIOS 실행
● 컴퓨터자체 진단
- CPU, MEMORY, 그래픽 카드, USB 등 각
종 장치들의 이상 유무 검사
– 각종 장치들의 초기화 수행
● 부팅 매체 검색과 부트로더 실행
- 진단과정 완료후, 부팅매체 ( 하드디스크,
CD-ROM, USB, 이더넷)에서 부트로더
( GRUB, LILO)를 로딩
MBR( Master Boot Record)
● 부팅 매체의 0번 섹터를 지칭
● 리눅스 설치시 Grub 설정에서
MBR에 자신을 위한 로더를 기록
하여 부트로더가 실행 되게 함
메모리에 부트로더 로딩
● MBR( Master Boot Record)에
서 부트로더를 읽어 메모리로 적
재
● 부트로더로 제어권을 넘김
● 부트로더 ( GRUB ) 실행
– /etc/grub.d
부트로더 ( GRUB ) 실행
● GRUB 실행 시
/boot/grub/grub.
conf 설정 파일을
읽고, 어떤 부팅메
뉴(커널)로 부팅을
할 것인가를 결정
● GRUB은 커널
(kernel)이미지를
로딩
● 시스템 제어권을 커
널에 넘김
Kernel의 로딩 과정
● 압축 된 커널의 압축을 해제
● 해제된 커널로 점프
● 기본 하드웨어 설정 및 환경 설정
● 인터럽트 및 메모리 스케줄러 등등 실행
● 파일 시스템 마운트
● 최초의 사용자 공간 프로그램 시작(init)
● 만약 init을 찾지 못하면 부팅 시 패닉 발생
Kernel 에서 init 호출 과정
● init/main.c 파일
– asmlinkage void __init start_kernel(void)
– static noinline void __init_refok rest_init(void)
– static int __init kernel_init(void * unused)
– static noinline int init_post(void)
{
...(중간생략)...
run_init_process("/sbin/init");
run_init_process("/etc/init");
run_init_process("/bin/init");
run_init_process("/bin/sh");
panic("No init found. Try passing init= option to kernel. "
"See Linux Documentation/init.txt for guidance.");
}
System-V init ( old )
● 이후의 과정들은 모두 init프로세스의 실행내용들
임.
● /etc/inittab파일의 실행내용
– 로그인 프롬프트가 나오기 까지의 실행 내용
System-V init ( old )
● /etc/inittab파일의 내용 ( Debian )
id:2:initdefault:
si::sysinit:/etc/init.d/rcS
l0:0:wait:/etc/init.d/rc 0
l1:1:wait:/etc/init.d/rc 1
l2:2:wait:/etc/init.d/rc 2
l3:3:wait:/etc/init.d/rc 3
l4:4:wait:/etc/init.d/rc 4
l5:5:wait:/etc/init.d/rc 5
l6:6:wait:/etc/init.d/rc 6
ca:12345:ctrlaltdel:/sbin/shutdown -t1 -a -r now
pf::powerfail:/etc/init.d/powerfail start
pn::powerfailnow:/etc/init.d/powerfail now
pr:12345:powerokwait:/etc/init.d/powerfail stop
1:2345:respawn:/sbin/getty 38400tty1
2:23:respawn:/sbin/getty 38400 tty2
3:23:respawn:/sbin/getty 38400 tty3
4:23:respawn:/sbin/getty 38400 tty4
5:23:respawn:/sbin/getty 38400 tty5
6:23:respawn:/sbin/getty 38400 tty6
System-V init ( old )
● inittab 파일은 시스템이 가동될 때 일반적인 운영
방법의 처리에 대한 것을 설명하고 있는 파일
● init 프로세스는 runlevel을 구별하여 사용
– runlevel은 시스템의 부팅과 종료에 사용
– runlevel 값은 0에서 6 까지
● inittab 파일안의 내용 형식
– id:runlevels:action:process
● ‘#’로 시작하는 문장은 주석 처리
System V ( Old )
● id : 2 : initdefault
– 디폴트 runlevel 2로 설정
● si : : sysinit : /etc/init.d/rcS
– 시스템을 부팅시 init에게 /etc/init.d/rcS을 실행
– /etc/init.d/rcS 파일은 시스템 초기화 처리 스크립트
System V ( Old )
● 10 : 0 : wait : /etc/init.d/rc 0
● 11 : 1 : wait : /etc/init.d/rc 1
● 12 : 2 : wait : /etc/init.d/rc 2
● 13 : 3 : wait : /etc/init.d/rc 3
● 14 : 4 : wait : /etc/init.d/rc 4
● 15 : 5 : wait : /etc/init.d/rc 5
● 16 : 6 : wait : /etc/init.d/rc 6
System V ( Old )
● rc 는 다목적 시동 스크립트
– 각 실행 레벨에 알맞은 스크립트를 실행
– action 필드는 wait
● command를 실행하고, 종료할 때까지 기다림.
● 각 실행 레벨의 스크립트는 /etc/rcN.d에 위치
– 여기서 N은 시작할 실행 레벨 번호임
● 실행 레벨 2라면 /etc/rc2.d의 스크립트를 사용
– 디렉토리들안의 파일은 K로 시작하는 서비스를 죽이는 스크립트이며, S로 시
작하는 스크립트는 서비스를 시작할 때 사용하는 스크립트
– 디렉토리들안의 파일이름중 숫자는 서로의 실행 순서를 맞추려는 것으로 낮
은 번호의 스크립트는 높은 번호의 스크립트보다 먼저 실행됨.
● 같은 서비스를 서로 다른 실행 레벨에서 시작하고 중지하기 때문에 같
은 스크립트를 여러 곳에 복사하는 것보다 심볼릭 링크를 사용
System V ( Old )
● ca : 12345 : ctrlaltdel : /sbin/shutdown -t1
-a -r now
– 이 항목은 콘솔에서 Ctrl-Alt-Del 을 눌렀을 때 실행
– 이 키조합을 누르면 보통 시스템은 재부팅하는 인터럽
트가 발생
– 리눅스에서는 이 인터럽트를 받아 init에게 보내고 init
은 ctrlaltdel의 action 필드에 있는 항목을 실행
– 여기서는 /sbin/shutdown -t1 -a -r now로 안전한
시스템 재부팅 수
System V ( Old )
● 1: 2345 : respawn : /sbin/getty 38400 tty1
● 2: 23 : respawn : /sbin/getty 38400 tty2
● 3: 23 : respawn : /sbin/getty 38400 tty3
● 4: 23 : respawn : /sbin/getty 38400 tty4
● 5: 23 : respawn : /sbin/getty 38400 tty5
● 6: 23 : respawn : /sbin/getty 38400 tty6
System V ( Old )
● 6개의 가상 콘솔을 /sbin/getty에서 실행하는 항목
– getty 프로그램은 터미널의 로그인을 받아준다.
– getty 명령은 터미널 장치를 열고 터미널 드라이버에 다양
한 매개변수를 설정하고 /bin/login을 실행
– getty는 'baud rate'과 '장치'의 두 개의 인수
● getty 항목의 action 필드는 respawn
– 해당 명령이 죽으면 init이 다시 명령을 실행
– 사용자가 로그아웃 할 때마다 getty 프로세스가 종료됨
– 이에 따라 getty 프로세스를 다시 실행시켜 로그인을 준비
Upstart init ( current )
● Upstart init은 부팅하는 동안의 작업 및 서비스를
시작하고, 셧다운 하는 동안 작업 및 서비스를 멈
출수 있으며, 또한 시스템이 운영되고 있는 동안
에 작업 및 서비스를 감독 가능
● 이것은 원래 우분투 배포판을 위하여 개발 하였지
만, 오래된 System-V 및 모든 리눅스 배포판의
init을 대체 하여 적용하기에 적합함
● Upstart init은 이벤트 기반 으로 동작 되며, 서비
스의 시작과 중지는 이벤트들의 통신에 기반
Upstart init ( current )
● Upstart init
– 우분투에서 개발한 System-V init을 대체하는 init daemon
프로그램
– 우분투 6.10부터 도입됨.
– 12.04 버전은 기본으로 Upstart init을 사용
– System-V 와의 호환성을 위하여 /etc/init.d 디렉토리가 존재
● /etc/init/rc.conf 파일에서 System-V의 rc 명령을 이용하여 스크립
트들을 실행 시키도록 되어 있음.
– /etc/init 디렉토리에 실행 할 서비스를 텍스트 파일 만듬
● 파일명은 서비스명.conf 형식이며, 이 파일에 실행 권한을 줄 필요가
없다.
Upstart ( Current )
● /etc/init.d
– 전통적인 System V 버전의 init 과 호환 하는 스크립트 위치
● # service cups stop
cups stop/waiting
# service cups start
cups start/running, process 10750
# service cups restart
cups stop/waiting
cups start/running, process 10776
Upstart ( Current )
● DESCRIPTION
– Upstart init(8) 데몬은 /etc/init/ 디렉토리에 있는 파
일로 부터 작업 구성을 읽고, inotify(7)을 사용하여 이
러한 파일에 대한 향후 변화를 감시.
– D-버스는 권한이 없는 사용자가 Upstart D-버스의 메
소드의 호출을 허가 하도록 설정되어 있으며, Upstat
는 사용자의 작업을 관리할 수 있습니다.
Upstart ( Current )
● DESCRIPTION
– Upstart는 환경 파일이 위치한 디렉토리에 있는 파일은 두
가지 형태의 .conf 혹은 .override 의 접미사로 되어 있어야
인식 할 수 있습니다.
● .conf ( 접미사 )
– 작업을 위해 호출되는 중요한 설정 파일
● .override ( 접미사 )
– .conf 파일과 같은 이름이며 접미사만 다른 설정 파일로서, 기존 작업을 대
치하여 수정된 작업을 수행 할 수 있도록 하기 위한 파일
– 로딩은 두가지 형태로 로딩
● 하나의 설정 파일 ( .conf )
● 하나의 설정 파일 ( .conf ) 과 하나의 재정의된 (.override) 파일
– 설정 파일은 일반 텍스트 파일 이며, 실행 파일은 아님
Upstart ( Current )
● rc-sysinit 작업을 위한 "start on" 조건
– start on filesystem and net-device-up IFACE=lo
– 위의 조건이 만족 하면, Upstart는 rc-sysinit 작업 시작
– rc-sysinit 작업은 런레벨 이동 작업을 위해서 다음과 같은 telinit 명령어를 호출
– telinit 2
● telinit 명령은 다음과 같은 runlevel 이벤트 발생
– runlevel RUNLEVEL=2 PREVLEVEL=N
● runlevel 이벤트는 많은 다른 Upstart 작업의 시작을 발생
– 기존의 SystemV INIT 시스템의 /etc/init/rc.conf를 포함하여 시작
– /etc/init/rc 2 에 의하여 /etc/rc2.d 디렉토리에 링크된 시작 스크립트들을 실행
● 최종적으로 /etc/init/tty1.conf 에 의하여 /sbin/getty를 실행
감사 합니다.

Weitere ähnliche Inhalte

Was ist angesagt?

Puppet과 자동화된 시스템 관리
Puppet과 자동화된 시스템 관리Puppet과 자동화된 시스템 관리
Puppet과 자동화된 시스템 관리Keon Ahn
 
[Nomad connection]docker seminar 15.10.08
[Nomad connection]docker seminar 15.10.08[Nomad connection]docker seminar 15.10.08
[Nomad connection]docker seminar 15.10.08Nomad Connection, Inc.
 
라즈베리 파이에 휴봇 설치하기
라즈베리 파이에 휴봇 설치하기라즈베리 파이에 휴봇 설치하기
라즈베리 파이에 휴봇 설치하기Luis P
 
Docker로 서버 개발 편하게 하기
Docker로 서버 개발 편하게 하기Docker로 서버 개발 편하게 하기
Docker로 서버 개발 편하게 하기Dronix
 
Deploying flask with nginx & uWSGI
Deploying flask with nginx & uWSGIDeploying flask with nginx & uWSGI
Deploying flask with nginx & uWSGI정주 김
 
Git 과 GitHub 를 이용한 버전관리와 협업 - 3주차 - 코드 기여하기/기여받기, 이슈 처리하기, 지속적 통합
Git 과 GitHub 를 이용한 버전관리와 협업 - 3주차 - 코드 기여하기/기여받기, 이슈 처리하기, 지속적 통합Git 과 GitHub 를 이용한 버전관리와 협업 - 3주차 - 코드 기여하기/기여받기, 이슈 처리하기, 지속적 통합
Git 과 GitHub 를 이용한 버전관리와 협업 - 3주차 - 코드 기여하기/기여받기, 이슈 처리하기, 지속적 통합Youngbin Han
 
강좌 02 ARM 펌웨어 개발 환경 개요
강좌 02 ARM 펌웨어 개발 환경 개요강좌 02 ARM 펌웨어 개발 환경 개요
강좌 02 ARM 펌웨어 개발 환경 개요chcbaram
 
CoreOS를 이용한 Docker 관리툴 소개
CoreOS를 이용한 Docker 관리툴 소개CoreOS를 이용한 Docker 관리툴 소개
CoreOS를 이용한 Docker 관리툴 소개충섭 김
 
High performance networking in chrome
High performance networking in chromeHigh performance networking in chrome
High performance networking in chromeJi Hun Kim
 
Linux in Visual Studio
Linux in Visual StudioLinux in Visual Studio
Linux in Visual StudioHeecheol Yang
 
docker_quick_start
docker_quick_startdocker_quick_start
docker_quick_startSukjin Yun
 
강좌 03 개발환경 구축
강좌 03 개발환경 구축강좌 03 개발환경 구축
강좌 03 개발환경 구축chcbaram
 
OpenStack DevStack Install - 2부 (Multi-nodes)
OpenStack DevStack Install - 2부 (Multi-nodes)OpenStack DevStack Install - 2부 (Multi-nodes)
OpenStack DevStack Install - 2부 (Multi-nodes)Ian Choi
 
가장 빨리 만나는 Docker 출간 후기
가장 빨리 만나는 Docker 출간 후기가장 빨리 만나는 Docker 출간 후기
가장 빨리 만나는 Docker 출간 후기pyrasis
 
Docker 사용가이드 public v0.1
Docker 사용가이드 public v0.1Docker 사용가이드 public v0.1
Docker 사용가이드 public v0.1Steve Shim
 
Docker.소개.30 m
Docker.소개.30 mDocker.소개.30 m
Docker.소개.30 mWonchang Song
 
Envoy 를 이용한 코드 배포 자동화
Envoy 를 이용한 코드 배포 자동화Envoy 를 이용한 코드 배포 자동화
Envoy 를 이용한 코드 배포 자동화Juwon Kim
 

Was ist angesagt? (20)

Puppet과 자동화된 시스템 관리
Puppet과 자동화된 시스템 관리Puppet과 자동화된 시스템 관리
Puppet과 자동화된 시스템 관리
 
[Nomad connection]docker seminar 15.10.08
[Nomad connection]docker seminar 15.10.08[Nomad connection]docker seminar 15.10.08
[Nomad connection]docker seminar 15.10.08
 
Ninja
NinjaNinja
Ninja
 
라즈베리 파이에 휴봇 설치하기
라즈베리 파이에 휴봇 설치하기라즈베리 파이에 휴봇 설치하기
라즈베리 파이에 휴봇 설치하기
 
Docker로 서버 개발 편하게 하기
Docker로 서버 개발 편하게 하기Docker로 서버 개발 편하게 하기
Docker로 서버 개발 편하게 하기
 
RZDESK-Docker hackday
RZDESK-Docker hackdayRZDESK-Docker hackday
RZDESK-Docker hackday
 
Deploying flask with nginx & uWSGI
Deploying flask with nginx & uWSGIDeploying flask with nginx & uWSGI
Deploying flask with nginx & uWSGI
 
Git 과 GitHub 를 이용한 버전관리와 협업 - 3주차 - 코드 기여하기/기여받기, 이슈 처리하기, 지속적 통합
Git 과 GitHub 를 이용한 버전관리와 협업 - 3주차 - 코드 기여하기/기여받기, 이슈 처리하기, 지속적 통합Git 과 GitHub 를 이용한 버전관리와 협업 - 3주차 - 코드 기여하기/기여받기, 이슈 처리하기, 지속적 통합
Git 과 GitHub 를 이용한 버전관리와 협업 - 3주차 - 코드 기여하기/기여받기, 이슈 처리하기, 지속적 통합
 
강좌 02 ARM 펌웨어 개발 환경 개요
강좌 02 ARM 펌웨어 개발 환경 개요강좌 02 ARM 펌웨어 개발 환경 개요
강좌 02 ARM 펌웨어 개발 환경 개요
 
CoreOS를 이용한 Docker 관리툴 소개
CoreOS를 이용한 Docker 관리툴 소개CoreOS를 이용한 Docker 관리툴 소개
CoreOS를 이용한 Docker 관리툴 소개
 
High performance networking in chrome
High performance networking in chromeHigh performance networking in chrome
High performance networking in chrome
 
Linux in Visual Studio
Linux in Visual StudioLinux in Visual Studio
Linux in Visual Studio
 
docker_quick_start
docker_quick_startdocker_quick_start
docker_quick_start
 
강좌 03 개발환경 구축
강좌 03 개발환경 구축강좌 03 개발환경 구축
강좌 03 개발환경 구축
 
kt-cloud
kt-cloudkt-cloud
kt-cloud
 
OpenStack DevStack Install - 2부 (Multi-nodes)
OpenStack DevStack Install - 2부 (Multi-nodes)OpenStack DevStack Install - 2부 (Multi-nodes)
OpenStack DevStack Install - 2부 (Multi-nodes)
 
가장 빨리 만나는 Docker 출간 후기
가장 빨리 만나는 Docker 출간 후기가장 빨리 만나는 Docker 출간 후기
가장 빨리 만나는 Docker 출간 후기
 
Docker 사용가이드 public v0.1
Docker 사용가이드 public v0.1Docker 사용가이드 public v0.1
Docker 사용가이드 public v0.1
 
Docker.소개.30 m
Docker.소개.30 mDocker.소개.30 m
Docker.소개.30 m
 
Envoy 를 이용한 코드 배포 자동화
Envoy 를 이용한 코드 배포 자동화Envoy 를 이용한 코드 배포 자동화
Envoy 를 이용한 코드 배포 자동화
 

Ähnlich wie 박진호 - 우분투 부팅 과정에 대한 이야기 (2012Y07M28D)

Linux Kernel Boot Process , SOSCON 2015, By Mario Cho
Linux Kernel Boot Process , SOSCON 2015, By Mario ChoLinux Kernel Boot Process , SOSCON 2015, By Mario Cho
Linux Kernel Boot Process , SOSCON 2015, By Mario ChoMario Cho
 
[오픈소스컨설팅]레드햇계열리눅스7 운영자가이드 - 기초편
[오픈소스컨설팅]레드햇계열리눅스7 운영자가이드 - 기초편[오픈소스컨설팅]레드햇계열리눅스7 운영자가이드 - 기초편
[오픈소스컨설팅]레드햇계열리눅스7 운영자가이드 - 기초편Ji-Woong Choi
 
Linux Performan tuning Part I
Linux Performan tuning Part ILinux Performan tuning Part I
Linux Performan tuning Part Isprdd
 
[오픈소스컨설팅]About RHEL7 systemd
[오픈소스컨설팅]About RHEL7 systemd[오픈소스컨설팅]About RHEL7 systemd
[오픈소스컨설팅]About RHEL7 systemdJi-Woong Choi
 
20170713 tech day_7th_pxe 부팅-김주한
20170713 tech day_7th_pxe 부팅-김주한20170713 tech day_7th_pxe 부팅-김주한
20170713 tech day_7th_pxe 부팅-김주한ymtech
 
(130907) #fitalk generating volatility linux profile
(130907) #fitalk   generating volatility linux profile(130907) #fitalk   generating volatility linux profile
(130907) #fitalk generating volatility linux profileINSIGHT FORENSIC
 
망고210 android fastboot nand write 방법
망고210 android fastboot nand write 방법망고210 android fastboot nand write 방법
망고210 android fastboot nand write 방법종인 전
 
강분도 - 나만의 우분투 배포판 만들기 (2011Y06M25D)
강분도 - 나만의 우분투 배포판 만들기 (2011Y06M25D)강분도 - 나만의 우분투 배포판 만들기 (2011Y06M25D)
강분도 - 나만의 우분투 배포판 만들기 (2011Y06M25D)Ubuntu Korea Community
 
망고100 보드로 놀아보자 5
망고100 보드로 놀아보자 5망고100 보드로 놀아보자 5
망고100 보드로 놀아보자 5종인 전
 
도커 없이 컨테이너 만들기 2편
도커 없이 컨테이너 만들기 2편도커 없이 컨테이너 만들기 2편
도커 없이 컨테이너 만들기 2편Sam Kim
 
Nginx basic configurations
Nginx basic configurationsNginx basic configurations
Nginx basic configurationsJohn Kim
 
[231]나는서버를썰터이니너는개발만하여라 양지욱
[231]나는서버를썰터이니너는개발만하여라 양지욱[231]나는서버를썰터이니너는개발만하여라 양지욱
[231]나는서버를썰터이니너는개발만하여라 양지욱NAVER D2
 
Android+init+process
Android+init+processAndroid+init+process
Android+init+processHong Jae Kwon
 
Apache Tomcat ( 아파치 톰캣 ) 설치 가이드
Apache Tomcat ( 아파치 톰캣 ) 설치 가이드Apache Tomcat ( 아파치 톰캣 ) 설치 가이드
Apache Tomcat ( 아파치 톰캣 ) 설치 가이드Opennaru, inc.
 
07 스레드스케줄링,우선순위,그리고선호도
07 스레드스케줄링,우선순위,그리고선호도07 스레드스케줄링,우선순위,그리고선호도
07 스레드스케줄링,우선순위,그리고선호도ssuser3fb17c
 
안드로이드 플랫폼 설명
안드로이드 플랫폼 설명안드로이드 플랫폼 설명
안드로이드 플랫폼 설명Peter YoungSik Yun
 
20141029 하둡2.5와 hive설치 및 예제
20141029 하둡2.5와 hive설치 및 예제20141029 하둡2.5와 hive설치 및 예제
20141029 하둡2.5와 hive설치 및 예제Tae Young Lee
 

Ähnlich wie 박진호 - 우분투 부팅 과정에 대한 이야기 (2012Y07M28D) (20)

Linux Kernel Boot Process , SOSCON 2015, By Mario Cho
Linux Kernel Boot Process , SOSCON 2015, By Mario ChoLinux Kernel Boot Process , SOSCON 2015, By Mario Cho
Linux Kernel Boot Process , SOSCON 2015, By Mario Cho
 
[오픈소스컨설팅]레드햇계열리눅스7 운영자가이드 - 기초편
[오픈소스컨설팅]레드햇계열리눅스7 운영자가이드 - 기초편[오픈소스컨설팅]레드햇계열리눅스7 운영자가이드 - 기초편
[오픈소스컨설팅]레드햇계열리눅스7 운영자가이드 - 기초편
 
Systemd explained
Systemd explainedSystemd explained
Systemd explained
 
Linux Performan tuning Part I
Linux Performan tuning Part ILinux Performan tuning Part I
Linux Performan tuning Part I
 
Init to systemd
Init to systemdInit to systemd
Init to systemd
 
[오픈소스컨설팅]About RHEL7 systemd
[오픈소스컨설팅]About RHEL7 systemd[오픈소스컨설팅]About RHEL7 systemd
[오픈소스컨설팅]About RHEL7 systemd
 
20170713 tech day_7th_pxe 부팅-김주한
20170713 tech day_7th_pxe 부팅-김주한20170713 tech day_7th_pxe 부팅-김주한
20170713 tech day_7th_pxe 부팅-김주한
 
(130907) #fitalk generating volatility linux profile
(130907) #fitalk   generating volatility linux profile(130907) #fitalk   generating volatility linux profile
(130907) #fitalk generating volatility linux profile
 
망고210 android fastboot nand write 방법
망고210 android fastboot nand write 방법망고210 android fastboot nand write 방법
망고210 android fastboot nand write 방법
 
강분도 - 나만의 우분투 배포판 만들기 (2011Y06M25D)
강분도 - 나만의 우분투 배포판 만들기 (2011Y06M25D)강분도 - 나만의 우분투 배포판 만들기 (2011Y06M25D)
강분도 - 나만의 우분투 배포판 만들기 (2011Y06M25D)
 
망고100 보드로 놀아보자 5
망고100 보드로 놀아보자 5망고100 보드로 놀아보자 5
망고100 보드로 놀아보자 5
 
도커 없이 컨테이너 만들기 2편
도커 없이 컨테이너 만들기 2편도커 없이 컨테이너 만들기 2편
도커 없이 컨테이너 만들기 2편
 
Nginx basic configurations
Nginx basic configurationsNginx basic configurations
Nginx basic configurations
 
[231]나는서버를썰터이니너는개발만하여라 양지욱
[231]나는서버를썰터이니너는개발만하여라 양지욱[231]나는서버를썰터이니너는개발만하여라 양지욱
[231]나는서버를썰터이니너는개발만하여라 양지욱
 
Android+init+process
Android+init+processAndroid+init+process
Android+init+process
 
Apache Tomcat ( 아파치 톰캣 ) 설치 가이드
Apache Tomcat ( 아파치 톰캣 ) 설치 가이드Apache Tomcat ( 아파치 톰캣 ) 설치 가이드
Apache Tomcat ( 아파치 톰캣 ) 설치 가이드
 
07 스레드스케줄링,우선순위,그리고선호도
07 스레드스케줄링,우선순위,그리고선호도07 스레드스케줄링,우선순위,그리고선호도
07 스레드스케줄링,우선순위,그리고선호도
 
안드로이드 플랫폼 설명
안드로이드 플랫폼 설명안드로이드 플랫폼 설명
안드로이드 플랫폼 설명
 
Linux+정리
Linux+정리Linux+정리
Linux+정리
 
20141029 하둡2.5와 hive설치 및 예제
20141029 하둡2.5와 hive설치 및 예제20141029 하둡2.5와 hive설치 및 예제
20141029 하둡2.5와 hive설치 및 예제
 

Mehr von Ubuntu Korea Community

권총 사격하러 우분투 써밋 참가한 썰.txt
 권총 사격하러 우분투 써밋 참가한 썰.txt  권총 사격하러 우분투 써밋 참가한 썰.txt
권총 사격하러 우분투 써밋 참가한 썰.txt Ubuntu Korea Community
 
머신러닝/딥러닝 개발자/연구자에게 필요한 개발/연구 환경
머신러닝/딥러닝 개발자/연구자에게 필요한 개발/연구 환경머신러닝/딥러닝 개발자/연구자에게 필요한 개발/연구 환경
머신러닝/딥러닝 개발자/연구자에게 필요한 개발/연구 환경Ubuntu Korea Community
 
우분투한국커뮤니티 2022년 활동 정리
우분투한국커뮤니티 2022년 활동 정리우분투한국커뮤니티 2022년 활동 정리
우분투한국커뮤니티 2022년 활동 정리Ubuntu Korea Community
 
우분투한국커뮤니티 2022년 신년회
우분투한국커뮤니티 2022년 신년회우분투한국커뮤니티 2022년 신년회
우분투한국커뮤니티 2022년 신년회Ubuntu Korea Community
 
Memory Attack - The Memory Attack Techniques
Memory Attack - The Memory Attack TechniquesMemory Attack - The Memory Attack Techniques
Memory Attack - The Memory Attack TechniquesUbuntu Korea Community
 
Python을 이용한 Linux Desktop Application
Python을 이용한 Linux Desktop ApplicationPython을 이용한 Linux Desktop Application
Python을 이용한 Linux Desktop ApplicationUbuntu Korea Community
 
케라스와 함께하는 재밌는 딥러닝 활용 사례들
케라스와 함께하는 재밌는 딥러닝 활용 사례들케라스와 함께하는 재밌는 딥러닝 활용 사례들
케라스와 함께하는 재밌는 딥러닝 활용 사례들Ubuntu Korea Community
 
딥러닝 세계에 입문하기 위반 분투
딥러닝 세계에 입문하기 위반 분투딥러닝 세계에 입문하기 위반 분투
딥러닝 세계에 입문하기 위반 분투Ubuntu Korea Community
 
9월 서울지역 세미나 GPG 키사이닝 파티
9월 서울지역 세미나 GPG 키사이닝 파티9월 서울지역 세미나 GPG 키사이닝 파티
9월 서울지역 세미나 GPG 키사이닝 파티Ubuntu Korea Community
 
우분투한국커뮤니티 2018년도 상반기 활동 보고
우분투한국커뮤니티 2018년도 상반기 활동 보고우분투한국커뮤니티 2018년도 상반기 활동 보고
우분투한국커뮤니티 2018년도 상반기 활동 보고Ubuntu Korea Community
 
새로운 Libhanjp 라이브러리 구조
새로운 Libhanjp 라이브러리 구조새로운 Libhanjp 라이브러리 구조
새로운 Libhanjp 라이브러리 구조Ubuntu Korea Community
 
스타트업에서 하드웨어 개발 프로세스 도입하기
스타트업에서 하드웨어 개발 프로세스 도입하기스타트업에서 하드웨어 개발 프로세스 도입하기
스타트업에서 하드웨어 개발 프로세스 도입하기Ubuntu Korea Community
 

Mehr von Ubuntu Korea Community (20)

권총 사격하러 우분투 써밋 참가한 썰.txt
 권총 사격하러 우분투 써밋 참가한 썰.txt  권총 사격하러 우분투 써밋 참가한 썰.txt
권총 사격하러 우분투 써밋 참가한 썰.txt
 
머신러닝/딥러닝 개발자/연구자에게 필요한 개발/연구 환경
머신러닝/딥러닝 개발자/연구자에게 필요한 개발/연구 환경머신러닝/딥러닝 개발자/연구자에게 필요한 개발/연구 환경
머신러닝/딥러닝 개발자/연구자에게 필요한 개발/연구 환경
 
우분투한국커뮤니티 2022년 활동 정리
우분투한국커뮤니티 2022년 활동 정리우분투한국커뮤니티 2022년 활동 정리
우분투한국커뮤니티 2022년 활동 정리
 
우분투한국커뮤니티 2022년 신년회
우분투한국커뮤니티 2022년 신년회우분투한국커뮤니티 2022년 신년회
우분투한국커뮤니티 2022년 신년회
 
Ubuntu Korea at FOSSASIA Summit 2022
Ubuntu Korea at FOSSASIA Summit 2022Ubuntu Korea at FOSSASIA Summit 2022
Ubuntu Korea at FOSSASIA Summit 2022
 
Overview of the Flatpak
Overview of the FlatpakOverview of the Flatpak
Overview of the Flatpak
 
Usage of the MQTT
Usage of the MQTTUsage of the MQTT
Usage of the MQTT
 
Open Source and the License
Open Source and the LicenseOpen Source and the License
Open Source and the License
 
Memory Attack - The Memory Attack Techniques
Memory Attack - The Memory Attack TechniquesMemory Attack - The Memory Attack Techniques
Memory Attack - The Memory Attack Techniques
 
Python을 이용한 Linux Desktop Application
Python을 이용한 Linux Desktop ApplicationPython을 이용한 Linux Desktop Application
Python을 이용한 Linux Desktop Application
 
나의 우분투 이야기
나의 우분투 이야기나의 우분투 이야기
나의 우분투 이야기
 
Malware Dataset & Ubuntu
Malware Dataset & UbuntuMalware Dataset & Ubuntu
Malware Dataset & Ubuntu
 
케라스와 함께하는 재밌는 딥러닝 활용 사례들
케라스와 함께하는 재밌는 딥러닝 활용 사례들케라스와 함께하는 재밌는 딥러닝 활용 사례들
케라스와 함께하는 재밌는 딥러닝 활용 사례들
 
딥러닝 세계에 입문하기 위반 분투
딥러닝 세계에 입문하기 위반 분투딥러닝 세계에 입문하기 위반 분투
딥러닝 세계에 입문하기 위반 분투
 
9월 서울지역 세미나 GPG 키사이닝 파티
9월 서울지역 세미나 GPG 키사이닝 파티9월 서울지역 세미나 GPG 키사이닝 파티
9월 서울지역 세미나 GPG 키사이닝 파티
 
우분투한국커뮤니티 2018년도 상반기 활동 보고
우분투한국커뮤니티 2018년도 상반기 활동 보고우분투한국커뮤니티 2018년도 상반기 활동 보고
우분투한국커뮤니티 2018년도 상반기 활동 보고
 
새로운 Libhanjp 라이브러리 구조
새로운 Libhanjp 라이브러리 구조새로운 Libhanjp 라이브러리 구조
새로운 Libhanjp 라이브러리 구조
 
스타트업에서 하드웨어 개발 프로세스 도입하기
스타트업에서 하드웨어 개발 프로세스 도입하기스타트업에서 하드웨어 개발 프로세스 도입하기
스타트업에서 하드웨어 개발 프로세스 도입하기
 
기계들의 소셜 미디어, MQTT
기계들의 소셜 미디어, MQTT기계들의 소셜 미디어, MQTT
기계들의 소셜 미디어, MQTT
 
모바일에 딥러닝 심기
모바일에 딥러닝 심기모바일에 딥러닝 심기
모바일에 딥러닝 심기
 

박진호 - 우분투 부팅 과정에 대한 이야기 (2012Y07M28D)

  • 2. Booting의 어원 ● 영어의 장화(Boot)에서 어원을 찾을 수 있다. ● 밖으로 나가려면 먼저 장화를 신어야 한다는 뜻 ● 컴퓨터를 처음 동작 시킬 때 수행되는 일련의 과정을 일컬음
  • 3. 전원 인가 ● 컴퓨터의 전원스위치 ON 으로 올립니다. - 시스템에 전원 공급 - 메인보드의 ROM-BIOS에 있는 BIOS프로 그램 실행. ● BIOS프로그램은 전원공급과 함께 메모리의 특정번 지에 자동 로딩 ● CPU는 전원공급과 함께 특정번지의 BIOS 프로그 램을 실행
  • 4. BIOS 실행 ● 컴퓨터자체 진단 - CPU, MEMORY, 그래픽 카드, USB 등 각 종 장치들의 이상 유무 검사 – 각종 장치들의 초기화 수행 ● 부팅 매체 검색과 부트로더 실행 - 진단과정 완료후, 부팅매체 ( 하드디스크, CD-ROM, USB, 이더넷)에서 부트로더 ( GRUB, LILO)를 로딩
  • 5. MBR( Master Boot Record) ● 부팅 매체의 0번 섹터를 지칭 ● 리눅스 설치시 Grub 설정에서 MBR에 자신을 위한 로더를 기록 하여 부트로더가 실행 되게 함
  • 6. 메모리에 부트로더 로딩 ● MBR( Master Boot Record)에 서 부트로더를 읽어 메모리로 적 재 ● 부트로더로 제어권을 넘김 ● 부트로더 ( GRUB ) 실행 – /etc/grub.d
  • 7. 부트로더 ( GRUB ) 실행 ● GRUB 실행 시 /boot/grub/grub. conf 설정 파일을 읽고, 어떤 부팅메 뉴(커널)로 부팅을 할 것인가를 결정 ● GRUB은 커널 (kernel)이미지를 로딩 ● 시스템 제어권을 커 널에 넘김
  • 8. Kernel의 로딩 과정 ● 압축 된 커널의 압축을 해제 ● 해제된 커널로 점프 ● 기본 하드웨어 설정 및 환경 설정 ● 인터럽트 및 메모리 스케줄러 등등 실행 ● 파일 시스템 마운트 ● 최초의 사용자 공간 프로그램 시작(init) ● 만약 init을 찾지 못하면 부팅 시 패닉 발생
  • 9. Kernel 에서 init 호출 과정 ● init/main.c 파일 – asmlinkage void __init start_kernel(void) – static noinline void __init_refok rest_init(void) – static int __init kernel_init(void * unused) – static noinline int init_post(void) { ...(중간생략)... run_init_process("/sbin/init"); run_init_process("/etc/init"); run_init_process("/bin/init"); run_init_process("/bin/sh"); panic("No init found. Try passing init= option to kernel. " "See Linux Documentation/init.txt for guidance."); }
  • 10. System-V init ( old ) ● 이후의 과정들은 모두 init프로세스의 실행내용들 임. ● /etc/inittab파일의 실행내용 – 로그인 프롬프트가 나오기 까지의 실행 내용
  • 11. System-V init ( old ) ● /etc/inittab파일의 내용 ( Debian ) id:2:initdefault: si::sysinit:/etc/init.d/rcS l0:0:wait:/etc/init.d/rc 0 l1:1:wait:/etc/init.d/rc 1 l2:2:wait:/etc/init.d/rc 2 l3:3:wait:/etc/init.d/rc 3 l4:4:wait:/etc/init.d/rc 4 l5:5:wait:/etc/init.d/rc 5 l6:6:wait:/etc/init.d/rc 6 ca:12345:ctrlaltdel:/sbin/shutdown -t1 -a -r now pf::powerfail:/etc/init.d/powerfail start pn::powerfailnow:/etc/init.d/powerfail now pr:12345:powerokwait:/etc/init.d/powerfail stop 1:2345:respawn:/sbin/getty 38400tty1 2:23:respawn:/sbin/getty 38400 tty2 3:23:respawn:/sbin/getty 38400 tty3 4:23:respawn:/sbin/getty 38400 tty4 5:23:respawn:/sbin/getty 38400 tty5 6:23:respawn:/sbin/getty 38400 tty6
  • 12. System-V init ( old ) ● inittab 파일은 시스템이 가동될 때 일반적인 운영 방법의 처리에 대한 것을 설명하고 있는 파일 ● init 프로세스는 runlevel을 구별하여 사용 – runlevel은 시스템의 부팅과 종료에 사용 – runlevel 값은 0에서 6 까지 ● inittab 파일안의 내용 형식 – id:runlevels:action:process ● ‘#’로 시작하는 문장은 주석 처리
  • 13. System V ( Old ) ● id : 2 : initdefault – 디폴트 runlevel 2로 설정 ● si : : sysinit : /etc/init.d/rcS – 시스템을 부팅시 init에게 /etc/init.d/rcS을 실행 – /etc/init.d/rcS 파일은 시스템 초기화 처리 스크립트
  • 14. System V ( Old ) ● 10 : 0 : wait : /etc/init.d/rc 0 ● 11 : 1 : wait : /etc/init.d/rc 1 ● 12 : 2 : wait : /etc/init.d/rc 2 ● 13 : 3 : wait : /etc/init.d/rc 3 ● 14 : 4 : wait : /etc/init.d/rc 4 ● 15 : 5 : wait : /etc/init.d/rc 5 ● 16 : 6 : wait : /etc/init.d/rc 6
  • 15. System V ( Old ) ● rc 는 다목적 시동 스크립트 – 각 실행 레벨에 알맞은 스크립트를 실행 – action 필드는 wait ● command를 실행하고, 종료할 때까지 기다림. ● 각 실행 레벨의 스크립트는 /etc/rcN.d에 위치 – 여기서 N은 시작할 실행 레벨 번호임 ● 실행 레벨 2라면 /etc/rc2.d의 스크립트를 사용 – 디렉토리들안의 파일은 K로 시작하는 서비스를 죽이는 스크립트이며, S로 시 작하는 스크립트는 서비스를 시작할 때 사용하는 스크립트 – 디렉토리들안의 파일이름중 숫자는 서로의 실행 순서를 맞추려는 것으로 낮 은 번호의 스크립트는 높은 번호의 스크립트보다 먼저 실행됨. ● 같은 서비스를 서로 다른 실행 레벨에서 시작하고 중지하기 때문에 같 은 스크립트를 여러 곳에 복사하는 것보다 심볼릭 링크를 사용
  • 16. System V ( Old ) ● ca : 12345 : ctrlaltdel : /sbin/shutdown -t1 -a -r now – 이 항목은 콘솔에서 Ctrl-Alt-Del 을 눌렀을 때 실행 – 이 키조합을 누르면 보통 시스템은 재부팅하는 인터럽 트가 발생 – 리눅스에서는 이 인터럽트를 받아 init에게 보내고 init 은 ctrlaltdel의 action 필드에 있는 항목을 실행 – 여기서는 /sbin/shutdown -t1 -a -r now로 안전한 시스템 재부팅 수
  • 17. System V ( Old ) ● 1: 2345 : respawn : /sbin/getty 38400 tty1 ● 2: 23 : respawn : /sbin/getty 38400 tty2 ● 3: 23 : respawn : /sbin/getty 38400 tty3 ● 4: 23 : respawn : /sbin/getty 38400 tty4 ● 5: 23 : respawn : /sbin/getty 38400 tty5 ● 6: 23 : respawn : /sbin/getty 38400 tty6
  • 18. System V ( Old ) ● 6개의 가상 콘솔을 /sbin/getty에서 실행하는 항목 – getty 프로그램은 터미널의 로그인을 받아준다. – getty 명령은 터미널 장치를 열고 터미널 드라이버에 다양 한 매개변수를 설정하고 /bin/login을 실행 – getty는 'baud rate'과 '장치'의 두 개의 인수 ● getty 항목의 action 필드는 respawn – 해당 명령이 죽으면 init이 다시 명령을 실행 – 사용자가 로그아웃 할 때마다 getty 프로세스가 종료됨 – 이에 따라 getty 프로세스를 다시 실행시켜 로그인을 준비
  • 19. Upstart init ( current ) ● Upstart init은 부팅하는 동안의 작업 및 서비스를 시작하고, 셧다운 하는 동안 작업 및 서비스를 멈 출수 있으며, 또한 시스템이 운영되고 있는 동안 에 작업 및 서비스를 감독 가능 ● 이것은 원래 우분투 배포판을 위하여 개발 하였지 만, 오래된 System-V 및 모든 리눅스 배포판의 init을 대체 하여 적용하기에 적합함 ● Upstart init은 이벤트 기반 으로 동작 되며, 서비 스의 시작과 중지는 이벤트들의 통신에 기반
  • 20. Upstart init ( current ) ● Upstart init – 우분투에서 개발한 System-V init을 대체하는 init daemon 프로그램 – 우분투 6.10부터 도입됨. – 12.04 버전은 기본으로 Upstart init을 사용 – System-V 와의 호환성을 위하여 /etc/init.d 디렉토리가 존재 ● /etc/init/rc.conf 파일에서 System-V의 rc 명령을 이용하여 스크립 트들을 실행 시키도록 되어 있음. – /etc/init 디렉토리에 실행 할 서비스를 텍스트 파일 만듬 ● 파일명은 서비스명.conf 형식이며, 이 파일에 실행 권한을 줄 필요가 없다.
  • 21. Upstart ( Current ) ● /etc/init.d – 전통적인 System V 버전의 init 과 호환 하는 스크립트 위치 ● # service cups stop cups stop/waiting # service cups start cups start/running, process 10750 # service cups restart cups stop/waiting cups start/running, process 10776
  • 22. Upstart ( Current ) ● DESCRIPTION – Upstart init(8) 데몬은 /etc/init/ 디렉토리에 있는 파 일로 부터 작업 구성을 읽고, inotify(7)을 사용하여 이 러한 파일에 대한 향후 변화를 감시. – D-버스는 권한이 없는 사용자가 Upstart D-버스의 메 소드의 호출을 허가 하도록 설정되어 있으며, Upstat 는 사용자의 작업을 관리할 수 있습니다.
  • 23. Upstart ( Current ) ● DESCRIPTION – Upstart는 환경 파일이 위치한 디렉토리에 있는 파일은 두 가지 형태의 .conf 혹은 .override 의 접미사로 되어 있어야 인식 할 수 있습니다. ● .conf ( 접미사 ) – 작업을 위해 호출되는 중요한 설정 파일 ● .override ( 접미사 ) – .conf 파일과 같은 이름이며 접미사만 다른 설정 파일로서, 기존 작업을 대 치하여 수정된 작업을 수행 할 수 있도록 하기 위한 파일 – 로딩은 두가지 형태로 로딩 ● 하나의 설정 파일 ( .conf ) ● 하나의 설정 파일 ( .conf ) 과 하나의 재정의된 (.override) 파일 – 설정 파일은 일반 텍스트 파일 이며, 실행 파일은 아님
  • 24. Upstart ( Current ) ● rc-sysinit 작업을 위한 "start on" 조건 – start on filesystem and net-device-up IFACE=lo – 위의 조건이 만족 하면, Upstart는 rc-sysinit 작업 시작 – rc-sysinit 작업은 런레벨 이동 작업을 위해서 다음과 같은 telinit 명령어를 호출 – telinit 2 ● telinit 명령은 다음과 같은 runlevel 이벤트 발생 – runlevel RUNLEVEL=2 PREVLEVEL=N ● runlevel 이벤트는 많은 다른 Upstart 작업의 시작을 발생 – 기존의 SystemV INIT 시스템의 /etc/init/rc.conf를 포함하여 시작 – /etc/init/rc 2 에 의하여 /etc/rc2.d 디렉토리에 링크된 시작 스크립트들을 실행 ● 최종적으로 /etc/init/tty1.conf 에 의하여 /sbin/getty를 실행