운영체제

시작하기전에

OS 개발을 위한 지식

하드웨어 지식
OS 개발시 32비트에서 64비트로 전환하는 작업 등을 위해 컴퓨터구조에 관한 지식이 필요하다. 하지만 하드웨어와 함께 제공되는 스펙 문서엔 예제 코드까지 포함 되있으므로 큰 문제없이 디바이스 드라이버를 구현할 수 있다.
본인은 컴퓨터구조와 원리 2.0-한빛미디어‘CODE 찰스펫졸드 저를 참고하였다.

어셈블리어
어셈블리어는 프로세서와 1:1대응하고 OS에 대한 제약이 없는 언어로서 어셈블리어를 이해하는 것은 프로세서를 이해하는 것과 같다.c언어로 작성할 수 없는 부분인 부팅, 프로세서에 동작모드 설정, 멀티태스킹 일부분, 시스템 콜, cpu 레지스터를 건드려야 할 경우 등 일부분만 직접 어셈블러로 작성한다.

C언어
운영체제의 코드 대부분은 C언어로 작성된다. 하지만 우리가 일반적으로 사용하는 C언어의 함수들은 기존 OS가 제공하는 기능들을 전제로 만들어져있으므로 리눅스C와 윈도우 C가 따로 존재한다. 그러므로 새로 만들 OS에서는 그 OS에 맞게 입출력 함수부터 필요한 함수들을 하나씩 만들어야한다.
그리고 여러 언어들 중 C언어를 사용하는 이유는 C언어가 그나마 OS의 지원을 전제로한 기능이 적으면서 어셈블리어 다음으로 기계와 밀접히 연관되있기 때문이다. (예를 들면 메모리주소를 직접 이용할 수 있다). 만약 C언어보다 크기가 큰 C++을 사용한다면 new/delete등 기본적으로 C++에서 중요하다고 여겨지는 기능들 역시 기존 OS의 지원을 바탕으로 만들어져있으므로 사용할 수 없게 되어 굳이 쓸 이유가 없어진다.

운영체제 이론
초기단계에서는 거의 필요가 없었으나 메모리관리, 동기화, 파일시스템 등 운영체제의 기본적인 모습을 갖추기 위해 코드의 이해와 더불어 운영체제에 대한 지식이 필요했다. 본인은 운영체제(한빛미디어)‘’operating system concepts 8th’을 참고하였다.

컴파일러, 링커, 도구 사용법
크게 GCC, NASM, 코드 에디터, QEMU 네가지를 사용할 것이며 이는 다음 장에서 익히도록 한다.

댓글

댓글 본문
작성자
비밀번호
버전 관리
잘살겠습니다
현재 버전
선택 버전
graphittie 자세히 보기