|
nckernel
0.1
|
커널,. 운영체제라고 부르는 프로그램이다. 부트로더에서 메모리의 특정 위치에 적재된 프로그램은 부트로더에서 그 흐름을 받아 계속 실행된다. 하나의 프로그램인 만큼 우리는 커널 개발 도구를 선택할 수 있다. 파스칼이나 C++, C, ASM 등 머신 코드를 생성해내는 어떠한 개발 도구든지 사용이 가능하다.
물론, 도구들을 이용해 만들어낸 실행 코드를 직접 커널 이미지로 사용하기 위해서는 몇 가지 과정을 더 거쳐야 한다. 이는 가장 잘 알려진 언어인 C 언어에서도 같다. 어떠한 언어를 사용하던지 가장 기본이 되는 함수들은 이미 지원되고 있다. 예를 들어 Linux 에서는 대표적으로 glibc 가 있고, 윈도우에서는 MFC 가 있다. 이러한 라이브러리들을 커널에서 직접 사용할 수 잇으면 좋겠지만, 현실적으로 쉬운 일은 아니다. 일반적이라고 여겨왔던 라이브러리들 조차 지원되지 않는 정말 깡통 같은 컴퓨터를 바라보고 있다는 것을 잊어서는 안 된다.
필자는 리눅스에서 운영체제 개발을 시작했다. 그러므로 계속해서, 커널 이미지도 리눅스에서 작성할 것이다. 이를 위해 선택한 도구는 C 언어이다. C 언어를 이용해 커널을 생성하면 일반적인 실행 이미지를 얻을 수 있다. 하지만 우리가 원하는 것은 이러한 실행 이미지가 아니다. 그러므로 이 코드를 바로 실행할 수 있도록 변경해야 하는데, 여기서 필요한 도구가 ld (Linker Descriptor) 이다. 컴파일 후 생성된 실행 프로그램을 커널 이미지로 직접 사용할 수 없는 이유는 실행 이미지 형식이 있기 때문이다. 각각의 실행 파일에는 고유의 헤더와 몇 가지 추가적인 정보 및 구성 구조가 있다. 이는 부트로더에서 실행 코드로 바로 점프하기에는 부적합하다. 또한 실행 이미지들은 기존 운영체제의 로더에 의해 메모리로 적재되는 과정에서 재 배치등의 복잡한 과정을 거쳐야 한다. 이에 대해 궁금한 독자라면 한 예로 PE 포맷을 보기 바란다. 이 포맷은 윈도우에서의 실행 파일 형식의 한 종류이다.
Portable Executable File Format
또는 ELF 형식의 파일을 봐도 좋다.
Executable Linkable File Format
ld 는 목적 파일을 실행 파일로 바꿔주는 연결 도구이다. Linker 의 범주에 속하는 것이다. 목적 파일을 생성한 후 ld 를 이용해 우리가 필요로 하는 구조를 갖춘 커널 이미지를 만들 것이다.
1.8.4