/* 테스트 1 버전 - 성능 최적화 적용 */ 마무: 부트로더 부트스트랩

블로그 소개


*여러분들의 따듯한 댓글은 5%, 팔로우는 10% 블로그 포스팅 속도와 퀄리티를 높여줍니다.*

프로필

팔로우 해주시면 포스트할 때 큰 힘이 됩니다!!! 사실 저도 이 팔로우가 무슨 기능이 있는지는 모르겠습니다만, 팔로우 수가 늘면 '날 응원해주는 사람들이 있구나' 생각이 들어서 큰 힘이 됩니다.

팔로어

다른 페이지로 이동


리눅스 독학 페이지 운영체제 독학 페이지 네트워크 독학 페이지 시스템 해킹 하드웨어 독학 페이지 프로그래밍 독학 페이지 보안 페이지

오스 페이지 다이어트 정보 페이지 게임 정보 페이지 인생 꿀팁


****사진을 클릭하시면 페이지로 이동할 수 있습니다!****

<===***===↓↓↓You can use translate using chrome ↓↓↓===***===>

레이블이 부트로더 부트스트랩인 게시물을 표시합니다. 모든 게시물 표시
레이블이 부트로더 부트스트랩인 게시물을 표시합니다. 모든 게시물 표시

2020년 4월 29일 수요일

부트로더 부트스트랩, 부팅 과정, 펌웨어, BIOS, POST, MBR 자세히!

안녕하세요~ 마무입니다. 오늘은 "부팅이란"과 "ROM이란", "펌웨어란", "BIOS란", "POST란", "MBR이란", "부트로더 부트스트랩", "boot order priorities"에 대해서 포스트를 할 겁니다.


--목차--

1. 컴퓨터 부팅 과정을 그림으로 

2. 부팅과정의 용어들 설명 
i) ROM(Read Only Memory) 
ii) 펌웨어(firmware)란 
iii) BIOS(Basic Input/Output System)란
iv) POST(Power On Self Test)란
v) 부팅매체 선택과 Boot order Priorities
vi) MBR(Mater Boot Record)이란
vii) 부트로더(bootloader)란
viii) 부트스트랩(Bootstrap)란
--------

여기서 못 찾은 정보는
리눅스 독학 페이지 : https://mamu2830.blogspot.com/p/blog-page_13.html
운영체제 독학 페이지 : https://mamu2830.blogspot.com/p/blog-page_14.html
유용한 컴퓨터 정보 페이지 : https://mamu2830.blogspot.com/p/blog-page_50.html

에서 찾아보세요!




1. 컴퓨터 부팅 과정


자 제일 먼저 리눅스든 윈도우든 상관없는 공통적인 보통 PC(Personal Computer)의 부팅과정전체적으로 한번 그림으로 보신다음, 목차 "2"에서 각 용어들을 설명해드리겠습니다.

그림을 한번 쭈욱 보신다음, 2의 설명을 읽으시고 다시 이 그림으로 돌아와 보시면
머릿속에 착착 정보가 저장되실 겁니다!!


부팅과정 1단계 : 컴퓨터의 전원버튼을 누르면 메인보드에 전력이 들어오며, 메인보드에 부착된 장치들에게 전력이 공급됩니다.




부팅과정 2단계:

"CPU"가 "ROM(Read-Only Memory)"에 저장된 "펌웨어(Firmware)"인 "BIOS(Basic Input/Output System)"를 실행시킵니다.




부팅과정 3단계 : 

실행된 "BIOS""POST(Power On Self Test)"라는 주변 하드웨어 체크를 합니다. 




부팅과정 4단계 :

"부팅매체"를 선택하고 부팅매체의 "MBR"에 저장된 부팅정보를 읽어오는 "부트스트랩(Bootstrap)"을 실행합니다.





부팅과정 5단계 :


"부트스트랩(BootStrap)"과정으로 RAM에 "부트로더(Bootloader)"가 올라가고,
"부트로더"는 디스크에 있는 OS(커널) 코드를 복사해 메모리에 붙여서 OS를 실행합니다.






부팅 과정 6단계 :

성공적으로 OS가 부팅이 됐습니다.





자 여기까지가 보통 컴퓨터들의 공통된 부팅 과정이였습니다.

이제 각각에서 사용된 용어들에 대해서 설명을 하겠습니다.



2. 부팅과정의 용어들 설명 




i)ROM(Read Only Memory)이란 


"ROM(Read-Only Memory)"란 메인보드(마더보드)에 부착돼 있는, 이름 그대로 오직 
읽기(Read)만 가능한 메모리를 말합니다. 또한 전력 공급이 끊겨도 저장된 데이터가 사라지지 않죠



(출처 : http://www.ilovepcbang.com/news/articleView.html?idxno=15724)

"ROM" 위에 표시한 것처럼 생겼습니다.
뭔가 하얀 다리가 달린 검은색 벌레처럼? 생겼죠(ROM이 벌레라니! 사과해!)

위 사진을 보시면 "M_BIOS"와 "B_BIOS"가 있죠? "M_BIOS" "Main BIOS"로 저희들이 실질적으로 사용하는 BIOS가 저장된 "ROM"이고, "B_BIOS"란 "Backup BIOS"로 "메인 BIOS가 저장된 ROM"이 맛탱이가 갔을 때  백업하기 위해 존재하는 ROM입니다.

그에 반해 기존의 저희가 말하는 "메모리"란




보통 이렇게 생긴 "RAM(Random Acess Memory)"를 말하는 것으로 이 "RAM"은 자유롭게 아무곳이든 메모리 공간에 데이터를 올리고, 지우고(Read and write)가 가능하지만, 전력공급이 끊기면 데이터가 모두 사라지는 휘발성 메모리입니다.

컴퓨터의 연산을 담당하는 "CPU"가 데이터를 연산하려면 작업공간인 "메모리"가 필요합니다만, "RAM"전원이 꺼지면 데이터가 싹다 사라져서 아무것도 없잖습니까?

그래서 전원이 꺼져도 데이터가 남아있는 메모리인 "ROM"에 부팅에 필요한 프로그램들을 저장하는 겁니다.

이처럼 저희들이 주로 메모리(Memory)라고 부르던 것이, 사실 "ROM"과 "RAM"이 둘다 칭하는 말이기 때문에, 앞으론 메모리라 표현하기 보단 "RAM"또는 "RAM 메모리" 또는 "ROM" 이렇게 정확히 구분해 표현하는 게 더 좋은 습관입니다.




ii) 펌웨어(firmware)란 


"펌웨어(Firmware)"란 소프트웨어, 하드웨어과 같은 맥락으로 만들어진 단어입니다.

유저의 마음대로 언제든지 바꾸며 유동적(soft)으로 사용가능한 프로그램 제품(ware)이란 뜻으로 "소프트웨어(Software)"라고 하는 것처럼

한번 만들어 놓으면 바꿀 수 없게 고정된(Firm) 프로그램 제품(ware)라는 뜻으로, "유저 마음대로 변경이 불가능한 프로그램"을 "펌웨어(firmware)"라고 합니다.

이렇게 유저 마음대로 변경이 불가능한 프로그램인 "펌웨어"에는 대표적으로 "BIOS"
있습니다.

그리고 보통 이런 "펌웨어"들은 주로 "ROM"과 같은 비휘발성(전력이 끊겨도 데이터가 사라지지 않는)메모리에 저장해 사용합니다.




iii) BIOS(Basic Input/Output System)란 


"BIOS(Basic Input/Output System)"는 하드웨어, 그리니까 실제 컴퓨터 부품과 장치들의
입력(Input)과 출력(Output)을 조절하는 소프트웨어입니다.

그래서 실제로 운영체제가 컴퓨터 하드웨어의 입출력을 컨트롤 하고 싶을 땐 펌웨어인 BIOS를 통해서 컨트롤하는 것입니다.

간단히 보면 컴퓨터부품(Hardware) <-> BIOS(펌웨어) <-> 운영체제(OS)이런 구조라고 할 수 있죠!





iv) POST(Power On Self Test)란 


"POST(Power On Self Test)""BIOS"가 컴퓨터를 킬 때(Power on) 문제가 있나 
자가검사(Self Test)를 하는 것을 말합니다.

한 10년 전 정도 윈도우 XP를 사용하던 시절, 다들 컴퓨터를 킬 때 -삡- 소리와 함께




이런 화면이 뜨셨던 걸 보신 적이 있으실 겁니다.

이 화면이 바로 "ROM"에 저장된 "BIOS""POST(Power On Self Test)"하는 과정입니다.
컴퓨터의 각 하드웨어들이 문제 없이 잘 작동되나 테스트 하는 과정이였던 것이죠.

참고로 요즘 "UEFI BIOS"를 사용하는 컴퓨터들은 이 POST 과정이 보이지 않는 경우가
있습니다.




v) 부팅매체 선택과 Boot order priorities 


"BIOS"는 POST과정이 끝난면 부팅 매체를 선택하는데요,
"부팅매체(Booting media)"란 부팅(booting, 운영체제를 메모리에 올리는 행위)를 
하게 해주는 매체(수단) 의미합니다.

여기서 "부팅 매체"란 것은 말 그대로 부팅매체가 될 수 있는 것들로 "USB, 하드디스크, SSD 같은 것들"을 말하는 겁니다.

"BIOS"는 부팅매체를 찾을 때 보통




이렇게 설정된 "BOOT ORDER Priorities(부팅 우선 순위 순서)"에 따라서
부팅 매체를 찾습니다. 

위 사진의 경우, "Boot Option #1"은 "USB Hard Disk"라고 되어 있죠? 저건
컴퓨터가 켜질 때 제일 먼저 USB가 꽂혀있나 확인하고, "USB"내에 부팅 관련 데이터가 있을 시 그 부팅 데이터를 먼저 읽겠다는 겁니다.

그래서 만약 "USB"에 운영체제 설치 프로그램이나 포맷 프로그램 같은 것이 있다면USB내 프로그램을 먼저 읽는 것이죠.

이렇게 "USB"가 기존 디스크보다 더 우선순위가 높아야지, 여러분들의 컴퓨터가 안 켜지는 불상사가 발생했을 때 USB를 이용해 포맷을 할 수 있습니다.

그다음 "Boot Option #2"엔 "Hard DIsk:windows Boo..."라고 뜨는데 저게 바로 자신의 컴퓨터에서 사용중인 부팅 데이터와 운영체제가 들어있는 디스크죠.

여기까지 부팅 매체를 선택했으면, 그 부팅 매체에 있는 "MBR"의 정보를 읽습니다.




vi) MBR(Mater Boot Record)이란 


모든 기억장치(USB, 디스크 등)는 첫 번째 섹터(512바이트)에 "MBR(Master Boot Record)"란 영역을 갖고 있습니다. 

"MBR"이란 기억 공간 첫 번째 섹터(512바이트)에는 "리눅스 마운트" 포스터에서 파티션을 만들 때 나온 "Primary partition(주 파티션)"에 대한 정보 4개를 기록할 수 있는 64바이트 공간 디스크에 있는 운영체제(커널) 코드를 복사해서 메모리 올려주는 "부트 로더(Boot loader)"가 저장되어 있습니다.

현재 저희 삶에서 컴퓨터를 사용하는 것의 시작은 "운영체제"를 메모리에 올리는 것과 마찬가지죠? 왜냐면 운영체제 없이 컴퓨터를 사용하는 건 거의 불가능에 가까우니까 말이죠.

그래서 이렇게 중요한 "운영체제를 메모리에 올리는 것"을 뭔갈 시작하려면 신발부터 신어야 한다는 뉘앙스로 부츠 신발할 때의 "부트(Boot)"라고 하게 되었고

"부트를 하는 과정""부팅(Booting)"이라고 하게 됐습니다.




vii) 부트로더(Bootloader)란 


"부트로더(Bootloader)" "부트(운영체제)""로더(메모리에 올려주는 놈)"이란 뜻으로
"Bootloader"라고 불리는 프로그램입니다.

당연히 운영체제를 메모리에 올려야 하는 것이니 매우 중요한 프로그램으로, 모든 운영체제들이 각각 자기들만의 부트로더를 기본적으로 가지고 있습니다.

그래서 저희들이 윈도우든 리눅스든 맥OS든 운영체제를 깔면 자동으로 부트로더도 깔리기에 그 존재를 몰랐던 것이죠.

참고로 저희 리눅스에서는 "GRUB2"라는 부트로더를 사용합니다만 이 GRUB2는 나중에 차차 설명해드리겠습니다.




viii) 부트스트랩(Bootstrap)이란 


원래 "부트스트랩(Bootstrap)"이란



(출처 : http://skyvington.blogspot.com/2008/05/boot-story.html)

이걸 말합니다. 바로 부츠(Boot)를 신을 때 도와주는 줄이죠.

위와 같은 맥락으로, "부트스트랩(Bootstrap)" 또는 "부트스트랩 로더(Bootstrap loader)"
운영체제를 키는 부팅과정을 도와주는 "BIOS"나 "ROM"에 들어있는 "코드"입니다.

부팅과정을 도와준다는 점에서 "부트로더"랑 상당히 헷갈리는데요, 이렇게 생각하시면 됩니다.




위 그림처럼 "BIOS"가 디스크의 "MBR의 정보"를 읽고, "MBR의 부트로더를 메모리에 
올리는 과정"처럼 운영체제를 키는(부팅)과정을 도와주니 "부트스트랩(Bootstrap)"이고.

직접적으로 "운영체제를 메모리에 올리는(부팅)건 "loader(짐을 싣는 자)"가 하니
"부트로더(Bootloader)"라고 말이죠.




자 여기까지 끝나면 이후에 각 어떤 부트로더냐, 어떤 운영체제냐에 따라서 하는 행위가
달라집니다.

저희는 지금 리눅스 독학 포스트를 하고 있으니, 다음에는 리눅스의 부트로더인 "GRUB2"와
첫 번째 프로세스인 "init(initialization)"에 대해서 알아보겠습니다!

도움이 되셨다면 좋아요, 팔로우 클릭!! 따뜻한 댓글을 달아주시면 큰 도움이 됩니다!!

그럼 다음에 더 좋은 퀄리티 포스트로 찾아뵐게요!