[OS 자작 입문] 0장. OS 를 개인이 만들 수 있을까?

문연수·2022년 11월 4일
0

OS 자작입문

목록 보기
1/1

1. OS 를 만드는 방법

"OS 를 만든다." 는 크게 두 가지로 나뉜다. 기존 OS(예를 들어 Linux) 를 개조하거나, 전체를 직접 만들거나.

 OS 를 만드는 데는 요령이 있다. 그것은 처음부터 완벽히 만들려고 하지 않는 것 이다. 따라서 처음에는 장난감처럼 보이는 것을 만들고 점차 진짜에 가깝게 구현하는 방식이 좋다.

2. 도대체 OS란 뭘까?

OS 구조와 원리 에서는 이하와 같이 설명한다:

 다양한 OS를 비교해 본 바 이 기능이 공통점이라고 말할 수 있는 것을 발견할 수는 없었다. 결국 각각의 작가가 '이것이 OS 다.' 라고 주장할 때 주변의 사람들도 '음 그런 건가?' 라고 생각하면 어떠한 소프트웨어도 OS다.

그러나 이렇게 단순하게 생각하긴 어렵고 실제 OS 는 크게 다음의 측면을 보인다:

  1. 애플리케이션에 대응하는 인터페이스로써의 측면
  2. 계산자원 분배자로써의 측면
  3. 사람과 대면하는 인터페이스로써의 측면

- 1. 애플리케이션에 대응하는 인터페이스의 측면

 OS 가 제공하는 단순화된 인터페이스를 사용하면 애플리케이션은 쉽게 주변기기를 사용할 수 있게 된다. 또한 애플리케이션으로부터 주변기기의 세부사항을 숨김으로써 다른(동종의) 주변기기를 똑같은 인터페이스로 사용할 수 있다.

이처럼 세부사항을 숨기고 간단한 인터페이스를 제공하는 것을 추상화 (Abstraction) 라고 한다.

- 2. 계산자원 분배자로써의 측면

 계산자원이라는 것은 CPU 가 가진 계산 능력, 메모리 기억, 스토리지의 읽기 쓰기, NIC 의 송수신 등 애플리케이션 처리에 필요한 모든 자원(리소스)을 뜻한다. 이런 자원은 유한하기 때문에 하나의 애플리케이션이 독점해 버리면 다른 애플리케이션을 실행할 수 없다. (운영체제에서 이를 기아 상태라고 부름)

복잡한 애플리케이션이나 OS 를 병행해서 동작시키기 위해 적당하게 계산 자원을 분배하는 것이 OS 의 역할이다.

- 3. 사람과 대면하는 인터페이스의 측면

 PC를 사용할 때 각 애플리케이션에 통일화된 메뉴가 있으면 조작하기 쉬울 것이다. 어떤 애플리케이션에도 동일하게 보이는 외형의 메인 메뉴가 있어서 '파일' 메뉴를 클릭하면 '저장' 또는 '다른 이름으로 저장' 을 선택하는 방식이 좋은 사례다.

이처럼 애플리케이션 전반에 걸쳐 공통으로 인터페이스를 제공하는 것도 OS 의 역할이다.

3. OS 자작 절차

 이 책에서 만들려는 것은 OS 그 자체라서 다른 OS 에 의존하지 않고 동작하는 특수한 프로그램을 만들어야 한다. 다음의 순서에 따라 만들어 갈 것이다:

  1. 개발용 PC 에서 OS 소스코드를 작성하고 컴파일한다.
  2. 생성된 실행 파일을 USB 메모리에 복사한다.
  3. 테스트용 PC 에 USB 를 연결하고 전원을 넣어 실행한다.

- 개발환경

책에서 소개하는 개발환경은 이하와 같다:

  1. 테스트용 PC: GPD MicroPC
  2. 개발용 PC 운영체제: Linux (Ubuntu), WSL (Windows Subsystem for Linux)
  3. USB 장치: 고장이 나도 괜찮은, 용량이 작아도 무방한 값싼 USB 메모리.
  4. 텍스트 에디터: Vim (역시 근본)
  5. 에뮬레이터: QEMU
  6. 컴파일러: Clang(+LLVM), GCC

4. OS 자작의 즐거움

 OS 자작에 정답은 없다. 독자는 절대 헤매는 것을 두려워하지 말고 다른 길로 걸어가 보길 바란다. 이 책에서 다루지 않은 기능을 구현해 보라. 이 책의 흐름을 그대로 재현하는 것만으로도 OS나 저수준 계층에 대해 나름대로의 지식을 얻을 수 있다고 생각하지만 다른 길을 모색하는 것은 더욱 더 깊이가 있는 경험을 얻을 수 있다.

 책의 내용을 깊게 이해하고 싶다면 사경(寫經)을 추천한다. 사경이란 원래 불교의 경전을 베껴 쓰는 것을 말하는데, 이 책에서 말하는 사경은 샘플코드를 복사하지 않고 자신이 입력하는 것을 의미한다.

 사경의 경우 시간이 오래 걸리지만 세부사항을 이해하면서 코드를 읽을 수 있다는 이점이 있기 때문에 더 깊게 이해할 수 있다.

5. OS 자작의 구성

1 장. 구체적으로 OS의 자작을 진행
2 ~ 3 장. 부트로더(boot loader) 를 제작
4 ~ 5 장. 도형이나 문자를 화면에 표시하는 것을 목표로 OS 작성
6 ~ 7 장. 마우스 기능의 추가 (with 인터럽트)
8 장. 메모리 관리 구조 제작
9 ~ 10 장. 윈도우 시스템 구현
11 장. 타이머 기능 구현
12 장. 키보드의 문자 입력 기능 구현
13 ~ 14 장. 멀티 태스킹 구현
15 ~ 16 장. 터미널과 명령어를 구현
17 장. 파일 시스템의 구현
18 ~ 20 장. 애플리케이션을 만들 수 있는 환경 구축
21 ~ 23 장. 시스템 콜 설계 및 구현
24 장. 터미널의 복수 구동 기능 구현
25 ~ 26 장. 애플리케이션이 파일을 읽고 쓰는 구조 설계
27 장. 애플리케이션을 위한 메모리 시스템 구축
28 장. 일본어 표시
29 장. 애플리케이션 간의 통신(파이프)
30 장. 텍스트 뷰어, 이미지 뷰어 구현


목차만 봐도 다루는 내용이 엄청나게 방대하다. 벌써부터 떨리기 시작했다.

출처

[책] 0부터 시작하는 OS 자작입문, 우치다 코타 지음, 박주항 옮김, 에이콘 출판사

profile
2000.11.30

2개의 댓글

comment-user-thumbnail
2022년 11월 18일

저도 이책 사놨는데 아직 1페이지도 안펴봤어요~

1개의 답글