-
운영체제 설계 및 구현시스템/운영체제 2020. 5. 25. 14:07
설계 목표
시스템을 설계할 때 첫번째로 해야할 것은 목표(Goal)와 명세(Specification)를 정의하는 것이다. 시스템 설계는 하드웨어 종류와 시스템 유형의 선택에 영향을 받는다. 무엇을 목적(목표)으로 어떻게 시스템을 만들 것인지를 구상해야 한다. 일단 운영체제를 만들 때 '사용자 목적'과 '시스템 목적'에 따라서 나뉜다.
운영체제를 사용자 목적으로 만들어질 때는 운영체제는 사용하기 쉽고 편리하며, 배우기 쉽고, 믿을 수 있고, 안전하고, 신손해야 한다. 하지만 이런 부분은 너무 추상적이고 구체적으로 합의된 부분이 없기 때문에, 시스템 설계에 있어서 고려하기에는 유용하지 않다.
운영체제를 시스템 목적으로 만들어질 때는 설계, 구현, 유지 보수가 쉬워야 하며, 적으성, 신뢰성, 무오류, 효율성을 가져야 한다. 이것도 사용자 목적과 마찬가지로 추상적이여서 설계를 하는데 유용하지는 않다. 하지만 시스템 설계자는 위의 조건들을 충족하는 방향으로 운영체제를 설계하려고 노력해야 한다. 이러한 목적을 달성하기 위해 몇 가지 원칙들이 생겨났는데, 그 중 하나가 Mechanism과 Policy다.
메커니즘과 정책
메커니즘은 "어떤 일을 어떻게 할 것인가를 결정"하는 것이고 정책은 "무엇을 할 것인가"를 결정한다. 예를 들어, "타이머 구조는 CPU 보호를 보장"하기 위한 '메커니즘'이지만 "특정 사용자를 위해 타이머를 얼마나 오랫동안 설정할 지를 결정하는 것"은 '정책'이다. 즉 정책은 방향을 설정하고 메커니즘은 그 방향을 어떻게 할 것인지를 정의한다.
정책과 메커니즘의 분리는 매우 중요한 원칙이다. 정책 변경의 유연성을 최대한 보장하기 위해 정책은 메커니즘으로부터 분리해야 한다.
또한 정책 결정은 모든 자원 할당 문제에 있어서 주요하다. 자원의 할당 여부를 결정할 필요가 있을 때마다 정책을 결정해야 한다. 질문이 무엇(what)이 아니라 어떻게(how)일 때마다, 반드시 결정되어야 하는 것은 메커니즘이다.
구현
운영체제가 설계되었으면 그것은 구현되어야 한다. 운영체제는 전통적으로는 Assembly 언어로 작성되었지만, 이제는 거의 대부분 운영체제가 C나 C++로 작성이 된다. 왜냐하면 고급언로 작성 하는 장점이 크기 때문이다. 코드를 빨리 작성할 수 있고, 더욱 간결하고, 이해하기 쉽고, 디버그하기도 쉽다. 또한 저급언어(하드웨어에 가까운 언어)로 작성된 것보다 훨씬 이식성이 좋다.(다른 하드웨어로 옮기기가 좋다.) 예를 들어 어셈블리언어로 작성된 MS-DOS는 Intel x86 시스템에서 돌아가지만 C언어로 작성된 리눅스는 Intel x86, Sun SPARC와 IBM PowerPC 등 다수의 다른 CPU에서 사용이 가능하다.
마지막으로 운영체제의 주요 성능 향상은 우수한 어셈블리어 코드보다는 좋은 자료 구조와 알고리즘의 결과일 가능성이 크다.