Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

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

2,406 views

Published on

http://www.ubuntu-kr.org/viewtopic.php?f=2&t=22403

진행순서
- 행사 소개 및 인사
- 첫번째 이야기 : 커맨드라인 유틸리티 소개와 eBuntu와 함께하는 임베디드 개발 이야기 - drake_kr님
- 두번째 이야기 : Proxmox, 가상머신에 대한 추억 - Readytoact님
- 세번째 이야기 : 우분투 부팅 과정에 대한 이야기 - 박진호님
- 네번째 이야기 : 여성 개발자로 살아온 인생 - 전수현님
- 다섯번째 이야기 : 웹 접근성에 대한 이야기 - 조채연님

Published in: Software

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

  1. 1. Ubuntu Booting Sequence 박진호 2012. 7. 28
  2. 2. Booting의 어원 ● 영어의 장화(Boot)에서 어원을 찾을 수 있다. ● 밖으로 나가려면 먼저 장화를 신어야 한다는 뜻 ● 컴퓨터를 처음 동작 시킬 때 수행되는 일련의 과정을 일컬음
  3. 3. 전원 인가 ● 컴퓨터의 전원스위치 ON 으로 올립니다. - 시스템에 전원 공급 - 메인보드의 ROM-BIOS에 있는 BIOS프로 그램 실행. ● BIOS프로그램은 전원공급과 함께 메모리의 특정번 지에 자동 로딩 ● CPU는 전원공급과 함께 특정번지의 BIOS 프로그 램을 실행
  4. 4. BIOS 실행 ● 컴퓨터자체 진단 - CPU, MEMORY, 그래픽 카드, USB 등 각 종 장치들의 이상 유무 검사 – 각종 장치들의 초기화 수행 ● 부팅 매체 검색과 부트로더 실행 - 진단과정 완료후, 부팅매체 ( 하드디스크, CD-ROM, USB, 이더넷)에서 부트로더 ( GRUB, LILO)를 로딩
  5. 5. MBR( Master Boot Record) ● 부팅 매체의 0번 섹터를 지칭 ● 리눅스 설치시 Grub 설정에서 MBR에 자신을 위한 로더를 기록 하여 부트로더가 실행 되게 함
  6. 6. 메모리에 부트로더 로딩 ● MBR( Master Boot Record)에 서 부트로더를 읽어 메모리로 적 재 ● 부트로더로 제어권을 넘김 ● 부트로더 ( GRUB ) 실행 – /etc/grub.d
  7. 7. 부트로더 ( GRUB ) 실행 ● GRUB 실행 시 /boot/grub/grub. conf 설정 파일을 읽고, 어떤 부팅메 뉴(커널)로 부팅을 할 것인가를 결정 ● GRUB은 커널 (kernel)이미지를 로딩 ● 시스템 제어권을 커 널에 넘김
  8. 8. Kernel의 로딩 과정 ● 압축 된 커널의 압축을 해제 ● 해제된 커널로 점프 ● 기본 하드웨어 설정 및 환경 설정 ● 인터럽트 및 메모리 스케줄러 등등 실행 ● 파일 시스템 마운트 ● 최초의 사용자 공간 프로그램 시작(init) ● 만약 init을 찾지 못하면 부팅 시 패닉 발생
  9. 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. 10. System-V init ( old ) ● 이후의 과정들은 모두 init프로세스의 실행내용들 임. ● /etc/inittab파일의 실행내용 – 로그인 프롬프트가 나오기 까지의 실행 내용
  11. 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. 12. System-V init ( old ) ● inittab 파일은 시스템이 가동될 때 일반적인 운영 방법의 처리에 대한 것을 설명하고 있는 파일 ● init 프로세스는 runlevel을 구별하여 사용 – runlevel은 시스템의 부팅과 종료에 사용 – runlevel 값은 0에서 6 까지 ● inittab 파일안의 내용 형식 – id:runlevels:action:process ● ‘#’로 시작하는 문장은 주석 처리
  13. 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. 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. 15. System V ( Old ) ● rc 는 다목적 시동 스크립트 – 각 실행 레벨에 알맞은 스크립트를 실행 – action 필드는 wait ● command를 실행하고, 종료할 때까지 기다림. ● 각 실행 레벨의 스크립트는 /etc/rcN.d에 위치 – 여기서 N은 시작할 실행 레벨 번호임 ● 실행 레벨 2라면 /etc/rc2.d의 스크립트를 사용 – 디렉토리들안의 파일은 K로 시작하는 서비스를 죽이는 스크립트이며, S로 시 작하는 스크립트는 서비스를 시작할 때 사용하는 스크립트 – 디렉토리들안의 파일이름중 숫자는 서로의 실행 순서를 맞추려는 것으로 낮 은 번호의 스크립트는 높은 번호의 스크립트보다 먼저 실행됨. ● 같은 서비스를 서로 다른 실행 레벨에서 시작하고 중지하기 때문에 같 은 스크립트를 여러 곳에 복사하는 것보다 심볼릭 링크를 사용
  16. 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. 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. 18. System V ( Old ) ● 6개의 가상 콘솔을 /sbin/getty에서 실행하는 항목 – getty 프로그램은 터미널의 로그인을 받아준다. – getty 명령은 터미널 장치를 열고 터미널 드라이버에 다양 한 매개변수를 설정하고 /bin/login을 실행 – getty는 'baud rate'과 '장치'의 두 개의 인수 ● getty 항목의 action 필드는 respawn – 해당 명령이 죽으면 init이 다시 명령을 실행 – 사용자가 로그아웃 할 때마다 getty 프로세스가 종료됨 – 이에 따라 getty 프로세스를 다시 실행시켜 로그인을 준비
  19. 19. Upstart init ( current ) ● Upstart init은 부팅하는 동안의 작업 및 서비스를 시작하고, 셧다운 하는 동안 작업 및 서비스를 멈 출수 있으며, 또한 시스템이 운영되고 있는 동안 에 작업 및 서비스를 감독 가능 ● 이것은 원래 우분투 배포판을 위하여 개발 하였지 만, 오래된 System-V 및 모든 리눅스 배포판의 init을 대체 하여 적용하기에 적합함 ● Upstart init은 이벤트 기반 으로 동작 되며, 서비 스의 시작과 중지는 이벤트들의 통신에 기반
  20. 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. 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. 22. Upstart ( Current ) ● DESCRIPTION – Upstart init(8) 데몬은 /etc/init/ 디렉토리에 있는 파 일로 부터 작업 구성을 읽고, inotify(7)을 사용하여 이 러한 파일에 대한 향후 변화를 감시. – D-버스는 권한이 없는 사용자가 Upstart D-버스의 메 소드의 호출을 허가 하도록 설정되어 있으며, Upstat 는 사용자의 작업을 관리할 수 있습니다.
  23. 23. Upstart ( Current ) ● DESCRIPTION – Upstart는 환경 파일이 위치한 디렉토리에 있는 파일은 두 가지 형태의 .conf 혹은 .override 의 접미사로 되어 있어야 인식 할 수 있습니다. ● .conf ( 접미사 ) – 작업을 위해 호출되는 중요한 설정 파일 ● .override ( 접미사 ) – .conf 파일과 같은 이름이며 접미사만 다른 설정 파일로서, 기존 작업을 대 치하여 수정된 작업을 수행 할 수 있도록 하기 위한 파일 – 로딩은 두가지 형태로 로딩 ● 하나의 설정 파일 ( .conf ) ● 하나의 설정 파일 ( .conf ) 과 하나의 재정의된 (.override) 파일 – 설정 파일은 일반 텍스트 파일 이며, 실행 파일은 아님
  24. 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를 실행
  25. 25. 감사 합니다.

×