부트로더는 소프트웨어를 공부하다가 조금 H/W에 가깝게 하게 되거나 OS를 공부하다보면 한번씩 보게 된다.
그렇다면 부트로더가 하는 일은 무엇일까?
일단 컴퓨터의 구조부터 알아보자. 먼저 H/W가 있고 그 위에 H/W를 관리하는 Device Driver가 존재한다. 그리고 그 위에 운영체제가 있다. 그리고 그 운영체제에서 응용 프로그램들이 실행된다. 운영체제가 응용프로그램이 실행되는 동안에 Device Driver와 연결시켜 주어서 응용프로그래머들은 H/W에 대한 지식이 없이도 쉽게 운영체제 아랫단을 다룰 수 있는 것이다. 이것이 운영체제가 필요한 이유이다. 만약 운영체제가 없다면 프로그래머들은 실제 응용프로그램을 만드는 시간보다 이런 잡다한(삼성, HP, 캐논, 등의 동작을 관장하는 Device Deriver와 인터페이스) 것을 만드는 곳에 시간을 다 허비하게 될 것이다.
다시 원점으로 돌아가서, 처음부터 컴퓨터를 만든다고 치자.
우린 먼저 하드웨어를 만들 것이다.(CPU, Memory, Hard drive, Mother board 등등)
그리고 또 뭘 만들어야 하나?
방금 이야기 했듯이 운영체제를 만들어야 한다. 우리는 실력이 엄청 좋아서 운영체제도 뚝딱 만들었다고 치자.
그런데 이 운영체제는 여러 프로그래밍 언어로 만들 수 있다. 아주 프로그래밍의 고수라면 어셈블리어로 운영체제를 만들 수 있겠지만, 이런 초고수가 얼마나 될까?
따라서 대부분의 사람들은 C언어로 운영체제를 만든다. Unix/Linux가 대표적인 C로 만들어진 운영체제이다.
자 이제 그럼 컴퓨터를 만들어 보자.
먼저 대충 하드웨어를 조립한다. Mother board에 CPU도 붙이고, 메모리도 붙이고, 하드 드라이브도 붙이고, 파워도 붙이고 등등...
자 이제 하드웨어적으로는 잘 된 것 같다.
앗...그런데... 하드웨어를 제어하는 것은 Device Driver(DD)라고 하지 않았나?
그리고 이 DD를 우리가 쉽게 이용할 수 있게 해주는게 운영체제라고 하지 않았나?
자~ 그럼 어떻게 운영체제와 DD를 하드웨어에서 돌아가게 할 수 있나?
걍 하드 드라이브에 운영체제와 DD를 때려 넣어놓으면 되는가?
위대한 폰 노이만 아저씨가 주구장창 주창했듯이, 우리는 하드 드라이브에 있는 운영체제나 DD를 사용하기 위해서는 이놈들을 메모리로 들어오게끔 꼬셔야(?)한다.
그런데 이상하지 않는가?
하드웨어는 걍 단순히 전기가 통하면 어떤 회로에 따라서 작동을 하는 기능뿐인데, 어떻게 이놈들을 메모리로 꼬셔올까?
여기서 우리에 귀염둥이 부트로더가 등장한다.
그럼 여기서 또 질문?
메모리의 어디에 이 부트로더가 있는지 어떻게 아냐?
여기서는 우리의 고마운 하드웨어가 도와준다.
컴퓨터를 처음 키면 Bios 어쩌고 저쩌고가 나온다. 이놈은 꽤나 고집스러운 놈이라, 항상 일정한 메모리 주소(RAM이 아니라 ROM이다. /혹은 하드드라이브의 일정 영역)를 읽어와서 거기에 있는 프로그램을 실행시킨다.(물론 다른 일도 좀 한다... ^^;)
즉 어떤 Bios가 난 메모리/혹은 하드드라이브(RAM이 아니라 ROM이다.)의 0x7D00에(하드드라이브의 경우 MBR) 있는 프로그램만 메모리로 꼬셔서 실행시켜 라고 마구마구 우기는 것이다.
그럼 여기서 뭔가 번뜩이지 않는가?
그렇다 우리는 바로 그 주소에다가(혹은 하드드라이브 영역에다가) 부트로더를 넣어두면 된다. ㅎㅎㅎ
이 부트로더가 하는 일은 메모리 주소체게(스택이나 힙)를 잡고, 하드웨어 초기화(I/O Setting), 운영체제를 메모리로 꼬시고 등등의 일을 수행한다.
자 그럼 다 된거 아닌가?
즉 하드웨어 구동 -> Bios가 특정 메모리 주소에 있는 프로그램을 실행 시킨다.(물론 그 프로그램은 부트로더가 되겠지) -> 부트로더가 여러 잡다한 일을 한 후 운영체제와 DD등등을 메모리로 꼬셔와서 운영체제를 실행시킨다. -> 운영체제가 열라 돌아간다. -> 게으른 응용프로그래머가 먹고 살기 위해서 프로그램을 짠다. -> 소비자가 울며 겨자먹기 식으로 프로그램을 사용한다.
이런 싸이클(자전거의 싸이클이 아니다.)이 생기는 것이다. 컴퓨터를 켜면.... ^^;
출처 : http://egloos.zum.com/shadowxx/v/2333450
'하드웨어' 카테고리의 다른 글
Tri-state (3상 상태) 란?? (0) | 2016.08.19 |
---|---|
Impedance(임피던스)란? (0) | 2016.08.19 |
래치와 플립 플롭 (0) | 2015.05.31 |
Sink current, Source current (0) | 2015.05.31 |
ROM BIOS 란? (1) | 2013.10.23 |