본문 바로가기

SWUFORCE/Inflearn

[인프런 스터디] 2주차 - 부팅과 데이터 저장/전송 & 부팅 절차

부팅 절차

1. 전원 버튼 누름
  - 컴퓨터 전원 버튼 누르기
  - 전원공급기는(Power Supply)는 외부 전압을 낮고 안정적인 전압으로 변환하여 공급
  - 메인보드의 클록 발생기는 전압이 전달되면 주기적으로 클록* 발생 → 클록 주기에 따라 컴퓨터 시스템 동작

 

* 클록 신호: 디지털 회로에서 0(Low)과 1(High) 상태가 일정한 주기로 반복되는 구형파(Sqaure Wave) 형태의 전기 신호 

 

 

 

2. ROM BIOS* 로드
  - 클록 CPU로 전달
  - CPU는 메인보드의 ROM BIOS를 메모리에 로드 후, ROM BIOS 실행

 

* ROM BIOS: 운영 체제 및 프로그램에 런타임 서비스를 제공하고 부팅 프로세스 중에 하드웨어 초기화를 수행하는 데 사용되는 펌웨어 유형

 

 

 

3. POST 작업 전 기본 테스트
  - ROM BIOS의 부트 프로그램 실행
  - 테스트 결과가 ROM BIOS에 저장된 값과 일치하면 POST 작업 수행

 

 

 

4. POST 단계 (Cont'd)

  1. 시스템 버스 테스트
    • 시스템 버스가 정상적으로 동작하는지 확인하기 위해 시스템 버스에 특정 시그널 보냄
    • 테스트가 이상 없다면 다음 단계
  2. RTC(Real-Time Clock)/NVRAM* 테스트
    • RTC는 시스템의 전기적 신호를 동기화하기 위한 클럭
  3. 시스템 비디오 구성 요소(비디오 메모리 등) 테스트
    • 과정이 완료되면 표준 출력을 이용해 부팅 과정 출력 확인 가능
  4. RAM 테스트
  5. 키보드 테스트
  6. 드라이브 테스트
    • 시스템에 연결된 모든 드라이브(플로피, CD, 하드디스크 등)에 신호를 보내 정상적인지 테스트
  7. POST 결과 검사
    • POST 결과가 RTC/NVRAM에 저장된 구성 값과 일치하는지 검사
  8. 추가적인 BIOS(SCSI**, VGA*** 등) 로드
    • 추가적인 BIOS가 있을 경우, 해당 BIOS를 RAM으로 로드

* RTC(Real-Time Clock)/NVRAM(Non-Volatile RAM): 전자 기기에서 전원이 꺼져도 시간 정보와 설정 데이터를 유지하기 위해 사용되는 핵심 부품

** SCSI(Small Computer System Interface): 컴퓨터와 주변기기를 연결하고 데이터를 빠르게 전송하기 위한 고속 직렬/병렬 표준 인터페이스

*** VGA(Video Graphics Array): 1987년 IBM이 도입한 아날로그 방식의 영상 표시 규격, 컴퓨터와 모니터/프로젝터를 연결해 화면을 출력하는 인터페이스(D-Sub)를 뜻함

 

 

 

5. MBR(Master Boot Record) 로드
  - 컴퓨터 하드 디스크나 SSD의 맨 앞부분에 위치한 특수 시동 섹터
  - BIOS가 가장 먼저 찾아 읽는 영역으로 OS가 어디에 있고, 어떻게 부팅해야 하는지에 대한 정보를 담고 있음
  - MBR 역할

  • 파티션 테이블에서 부팅 가능한 파티션 검색
  • 부팅 가능한 파티션 O, 해당 파티션의 VBR(Volume Boot Record)로 점프
  • 부팅 가능한 파티션 X, 오류 메시지 출력

MBR 로드

 

 

 

6. VBR(Volume Boot Record) 로드
  - 하드 디스크나 USB 등의 파티션 맨 앞부분에 위치하여, 해당 볼륨의 파일 시스템 정보와 OS 부팅에 필요한 부트 코드(부트 섹터)를 담고 있는 핵심 영역
  - MBR을 통해 부팅 가능한 볼륨 찾으면 해당 볼륨의 첫 번째 섹터 로드
  - VBR의 역할

  • 부트 로더를 메모리에 로드 (윈도우의 경우 NTLDR*)
  • 부트 로더는 커널(NTOSKRNL**)과 관련 컴포넌트를 로드
  • 운영체제 부팅

* NTLDR(NT 로더): 윈도우 NT 계열 운영 체제를 위한 시동 로더

** NTOSKRNL: 윈도우 NT 운영 체제 커널, karnel image라고도 알려져 있으며 하드웨어 가상화나 프로세스 그리고 메모리 관리 같은 다양한 시스템 서비스 관리함으로써 시스템의 기본적인 부분이 됨

VBR 로드

 

MBR이 컴퓨터를 켤 때 하드 디스크 전체를 인식한다면, VBR은 특정 파티션 안으로 진입하여 OS를 시동하는 역할을 함

 

 

 


 

 

 

데이터 저장

자기 디스크

  • 자기장의 자화 반전을 이용해 기록
  • S N (또는 N → S) : 0
  • N S (또는 S N) : 1

 

 

 

 

플래시 메모리

  • 플로팅 게이트 트랜지스터로 구성된 각 셀에 데이터 저장
     플로팅 게이트가 전자를 가지고 있을 때는 전류 흐르지 X (반대의 경우 흐름)

 

 

 

광학디스크

  • 폴리카보네이트* 색소층에 레이저 이용해 기록

* 폴리카보네이트(PolyCarbonate, PC): 탄산염을 중합하여 만든 열가소성 플라스틱 중합체, 렉산이라고도 불리며 IT 제품의 외장재나 미디어 광저장매체 소재의 원료에 폭넓게 사용되는 고기능성 플라스틱

 

 

 


 

 

 

데이터 전송

유선

  1. 송신자 A가 수신자 B에게 이메일을 보내면 이 데이터가 이진수 형태로 만들어짐
  2. 데이터를 패킷으로 나누고 NIC(네트워크 카드)가 이를 디지털 신호(펄스 형태)로 변환
  3. 디지털 신호를 아날로그 신호(파형)로 바꾸는 모뎀 변환을 통해 전송 가능하게 함
  4. 아날로그 신호가 LAN → WAN → LAN을 거쳐 목적지로 이동
  5. 모뎀 변환을 통해 아날로그 → 디지털로 바꾸고, NIC가 데이터 재조합
  6. 쪼개졌던 패킷들이 합쳐져 원래의 데이터(이메일 등)로 복원됨

유선 데이터 전송 과정

 

 

 

 

무선

  • 무선 신호(주파수)를 이용한다는 것 제외, 유선 방식과 동일

 

  • 주파수 확보, 대역폭 중
  • AM vs FM
    • AM 방송
      - 530 ~ 1,600 KHz 주파수 대역을 채널 간격 10 KHz의 108개 채널로 분할한 방송
      - 사용 주파수: 중파(MF)
      - 대역폭: 9 KHz

    • FM 방송
      - 88 ~ 108 MHz 주파수 대역을 20
      - 사용 주파수: 초단파
      - 대역폭: 200 KHz

 

 

 


 

 

 

[부팅 절차]

공통된 부팅 절차 - 위에 언급된 부팅 절차와 동일

부팅 절차

 

 

 


 

 

 

DOS 부팅 절차

 - VBR 로드 이후 (VBR 부트 프로그램부터)

 

 

 

 

1. IO.SYS 실행
  → IO.SYS: MS-DOS 및 윈도우 운영체제에서 부팅 시 하드웨어 입출력을 담당하는 핵심 시스템 파일
  - 루드 디렉터리에 존재하는 IO.SYS를 메모리에 로드한 후 실행
  - IO.SYS의 서브루틴인 SYSINT는 MSDOS.SYS 파일을 읽어 자신과 읽은 내용을 메모리에 복사

 

 

 

2. MSDOS.SYS 실행
  - SYSINT는 MSDOS.SYS를 실행시킴
  - MSDOS.SYS는 기본 장치 드라이버를 초기화시키고 시스템 장치들의 상태 점검
  - 기본적인 DOS 실행 환경을 설정 및 DOS 파일시스템 수행

 

 

 

3. COMMAND.COM 실행
  - SYSINT는 CONFIG.SYS 읽어 관련 내용 수행 (하드웨어 장치 드라이버/확장 메모리 관리자를 메모리에 로딩)
  - SHELL 상태가 이미 존재한다면 수행, 존재하지 않는다면 기본 매개변수를 가지는 기본 쉘(COMMAND.COM) 실행
  - COMMAND.COM은 기존 SYSINT 메모리 영역에 덮어써지므로 SYSINT는 종료됨

 

 

 

4. AUTOEXEC.BAT 수행
  - AUTOEXEC.BAT(배치파일)가 존재한다면 COMMAND.COM에 의해 수행됨
  - 경로 설정, 사운드카드 설정, 기타 환경변수 설정 등 부가적인 설정
  - 만약 AUTOEXEC.BAT 없다면, COMMAND.COM은 DATE, TIME 명령어 실행
  - 이후 카피라이트 메시지 출력

 

 

 

5. 깜빡이는 DOS 프롬프트 확인 가능

 

 

 


 

 

 

Window NT/2000/XP 부팅 절차

 - VBR 로드 이후

 

 

 

 

1. NTLDR
  - VBR 2번째 섹터의 NTLDR (NT Loader)의 위치 정보를 읽어 NTLDR 로드
  - 파일 시스템 초기화하고 BOOT.INI 파일 읽어 부트 초기화 설정 및 부트 메뉴(F8) 설정
  - 듀얼 부팅일 경우 BOOTSECT.DOS 수행
  - SCSI 드라이버에 추가 파일 (NTBOOTDD.SYS) 있다면 수행

 

 

 

2. NTDETECT

  - NTLDR은 하드웨어 탐지를 위해 NTDETECT.COM 로드

  - NTDETECT.COM은 현재 설치된 하드웨어 구성요소들 정보 수집하여 HEKY_LOCAL_MACHIN\HARDWARE(메모리)에 저장
  - (하나 이상의 프로필이 존재할 경우) 현재 하드웨어와 프로필이 동일한지 확인 후 수행

 

 

 

3. NTOSKRNL
  - 하드웨어 구성 선택 완료되면 NTLDR에 의해 NTOSKRNL.EXE (NT OS Karnel) 로드
  - 커널, Hardware Abstraction Layer(HAL.DLL), 시스템 레지스트리, 드라이버, TCP/IP 등 로드
  - Phase 0 : 커널 (Microkarnel, Executive subsystem) 자체 초기화
  - Phase 1 : 메모리 관리자, 프로세스 관리자, I/O 관리자 등 초기화
  - 이 단계에서 그래픽 모드로 전환, 로딩 상태바 표시

 

 

 

4. SMSS

  - 기본적인 초기화 완료되면 Session Manager (SMSS.EXE) 로드
  - Win32 subsystem(WIN32K.SYS) 환경 준비, 추가 레지스트리 및 시스템 설정 적용

 

 

 

5. WINLOGON
  - WINLOGON.EXE 파일 로드 → Local Security Authority (LSASS.EXE) → 로그인 화면
  - 성공적으로 로그인할 경우 현재 상태를 HEKY_LOCAL_MACHINE\SYSTEM\LastKnownGoodRecovery로 갱신
  - 로그인을 수행하면 Plug and Play에 의해 새로운 하드웨어 검사, DRIVER.CAB 에서 드라이버 마운트

 

 

 


 

 

 

Windows VIsta/7 부팅 절차

 - VBR 로드 이후

 

 

 

 

1. BOOT MANAGER
  - NT Boot Sector의 BOOTMGR.EXE 위치 정보(system32, system32/boot)를 기반으로 로드
  - 자신의 체크섬 계산 후 0x400000에 매핑, 32비트 BmMain() 함수 수행
  - 하이버네이션(Hibernation) 시, WINRESUME.EXE 실행
  - BCD(Boot Configuration Data, boot.ini를 대신)로부터 기본 부팅 정보 읽음
  - 64비트 시스템이라면 CPU를 64비트 모드로 전환

 

 

 

2. WINLOAD
  - Boot Manager에 의해 부트 로더인 WINLOAD.EXE 로드 (NTLDR과 유사)

  - 부트 로더에 의해 NTOSKRNL.EXE, HAL.DLL, 부트 드라이버, 시스템 레지스트리 등이 로드

 

 

 

3. NTOSKRNL
  - OslArchTransferToKernel을 사용하여 커널로 제어 전환
  - NTOSKRNL.EXE를 2단계의 시스템 초기화

  • Phase 0 : 커널 자체를 초기화 → HallInitializeBios 호출 →  디스플레이 드라이버 초기화 →  디버거 시작 →  KillInitializeKernel 호출
  • Phase 1 : Phase1InitializationDiscard →  HallInitSystem →  ObInitSystem →  ASLR set →  PsInitialiSystemProcess 호출 →  StartFirstUserProcess

  - 이 단계에서 그래픽 모드로 전환, 로딩 상태바 표시

 

 

 

4. SMSS
  - 기본적인 초기화가 완료되면 Session Manager (SMSS.EXE) 로드
  - 추가적인 레지스트리, Win32 subsystem(WIN32K.SYS)를 수행하기 위한 환경 구성 정보 로드

 

 

 

5. WINLOGON
  - SMSS.EXE에 의해 WINLOGON.EXE 실행
  - 사용자 세션 프로세스 생성, 서비스 및 장치 드라이버 로드
  - Local Security Authority Subsystem(LSASS.EXE) 로드

 

 

 


 

 

 

리눅스 부팅 절차

 - VBR 로드 이후 (VBR 부트 로더부터)

 

1. BOOT LOADER

  - Linux Loader(LILO)와 Grand Unified Bootloader(GRUB) 부트 로더 존재 ← 현재는 GRUB이 대세
  - /etc/grub.conf 또는 /boot/grub/grub.conf에서 부팅 설정 관리
  - 초기 부트 메뉴 표시 후, 리눅스 커널 및 초기 RAM 디스크 로드
  - 주 역할이 커널 로드라 커널 로드라고도 불림

 

 

 

2. kernel & initrd LOAD
  - 부트 로더가 커널 이미지와 initrd 이미지 로드

 

 

 

3. BSS(Block Started by Symbol) & Decompress
  - 커널 이미지 앞 부분의 초기 하드웨어 점검 수행
  - 기본 환경 설정 및 BSS 초기화
  - 실제 커널 데이터 압축 해제

 

 

 

4. PID 0 swapper process
  - 프로세스 ID 0 번인 swapper 프로세스 실행, 페이지 테이블을 초기화하여 메모리 페이징 수행
  - CPU 유형 및 FPU(Floating-Point Unit) 검사

 

 

 

5. PID 1 init process
  - 사용자 공간 프로세스로 기본적인 사용자 환경 구성
  - /etc/inittab 의 환경 설정 파일의 부팅 레벨에 따라 사용자 환경 구성