운영체제는 사용될 환경, 자원 등에 의해 다르게 디자인됩니다. 일반 사용자들이 많이 사용하는 윈도우, 개발자들이 많은 기능을 사용하기 위하여 리눅스 등 사용자에 따라 바뀌기도 합니다.
디자인의 목적 : 보통 관점에 따라 2가지로 분류합니다.
- 사용자 입장 : 사용하기 편함, 배우기 쉬움, 빠른 속도, 신뢰성 등
- 시스템 입장 : 적용하기 쉬움, 호환성, 유지보수, 유연성, 장애 복구 능력 등
목적은 운영체제를 설계하기 나름이므로 환경, 자원 등에 맞춰 적절하게 맞추도록 합니다.
디자인 시 사용하는 2가지 용어가 있습니다.
- Mechanisms : 수행하는 방법
- Policy : 수행에 의해 나오는 결과
이렇게 2가지로 나누는 이유는 매커니즘을 통해 결과를 만들어 내는 구조는 잘 변하지 않지만 만들어 내는 결과물은 버전을 업데이트할 시 새로운 기능이 나오거나 삭제되므로 나누어 둡니다. 보통 Policy가 변할 때 메커니즘을 함께 변경해야 하는 경우 좋지 못한 변경으로 볼 수 있습니다.
운영체제를 구현할 시 언어를 선택해야 합니다. 운영체제 또한 하나의 큰 소프트웨어이며 다른 프로그램들과 마찬가지로 컴퓨터 언어로 구현되었습니다. 컴퓨터 언어를 크게 2가지로 분류할 수 있습니다.
- 어셈블리 언어(low-level) : 기계어와 1:1 대응이 되는 언어이며 단순한 명령어가 간단한 기능만을 수행하는 언어입니다. 따라서 컴파일 등 작업이 필요 없으므로 빠른 속도를 가지지만 간단한 기능을 구현하더라도 엄청난 수의 코드를 작성해야 합니다. 코드가 길어지면 개발자 입장에서는 버그를 잡기 어려워지며 구현하기 어려워집니다.
- 고급언어(high-level) : 자바, c, c++ 같은 언어이며 사람이 이해하기 쉽게 작성된 프로그래밍 언어입니다. 컴파일, 인터 프리팅 등 작업이 필요해 어셈블리 언어에 비해 속도는 느리지만 작성하기 쉽고 오류를 잡기 편하며 가장 큰 장점으로 유지보수, 수정, 추가/삭제 등 매우 간편합니다.
다음은 운영체제 구조를 살펴보도록 하겠습니다.
커널
운영체제에서 핵심이 되는 프로그램을 커널이라고 합니다. 커널은 컴퓨터 시스템의 모든 기능, 자원, 구성 등을 완전히 통제하며 운영체제의 다른 프로그램, 사용자가 만든 응용 프로그램에게 서비스를 전달해 주는 프로그램입니다. 지난 시간에 시스템 콜 호출 시 사용자 모드에서 커널 모드로 전환할 때 커널이 이 커널을 말하는 것입니다.
크게 3가지 기능을 합니다.
- 자원 관리 : 한정된 컴퓨터 자원(메모리, 디스크, CPU 사이클 등)을 효율적으로 관리 해 여러 프로그램들이 원활하게 작동할 수 있도록 합니다.
- 추상화 : 사용자나 사용자 프로그램들이 각기 다른 환경에서 동작할 수 있도록 합니다. 하드디스크, 메모리, CPU/GPU 등 하드웨어는 같은 종류더라도 만든 회사에 따라 구조와 동작 방식이 다를 수 있습니다. 이러한 다른 접근 방식을 일관성 있게 만들어 주는 인터페이스 역할을 합니다. 보통 장치 드라이버를 이용해 인터페이스가 구성됩니다.
- 보안 : 컴퓨터 하드웨어, 장치와 응용 소프트웨어의 프로세스 사이에서 문제를 해결해 컴퓨터 전체의 보안을 책임집니다.
초창기의 컴퓨터에서 운영체제에서 커널은 필수적인 것이 아니었습니다. 초기 프로그램은 하드웨어 추상화나 운영 체제의 지원을 받지 않고도 컴퓨터만으로 명령을 실행될 수 있었습니다. 이는 운영체제가 관리해야 하는 하드웨어의 수가 많지 않았고, 수행 명령 역시 단순했기 때문입니다. 하지만 복잡하고 많은 명령을 수행하는 환경으로 이동하면서 메모리를 초기화하기 위해 컴퓨터의 전원을 다시 켜야 했고, 이 같은 문제를 해결하기 위해 메모리 등 자원관리를 할 수 있는 커널이 등장하게 됐습니다.
단일 구조, 단일 커널 운영체제
운영체제 초기의 형태로 운영체제 서비스를 모두 커널과 함께 메모리에 올려 두고 함께 동작을 합니다. 그리고 서비스를 활용할 수 있도록 시스템 콜을 이용해 동작하게 됩니다.
예시로 MS - DOS와 window NT 가 단일 커널 운영체제입니다.
- 장점 : 대부분의 기능이 같은 위치에 존재하고 통신을 하기 때문에 속도가 빠르며 효율적입니다.
- 단점 : 커널 하나의 크기가 너무 크기 때문에 하나의 기능이 다른 기능에 영향을 많이 미치게 되고 이로 인해 버그에 취약하고 보안성이 떨어집니다. 또한 유지보수, 수정과 기능 추가 삭제가 어려워집니다.
계층 구조 운영체제
운영체제가 여러 개의 계층으로 분리되어 설계된 구조를 말합니다.
0번째 층이 하드웨어이며 최고층인 n 층이 사용자가 보는 운영체제인 사용자 인터페이스 환경입니다.
각 계층마다 추상화가 이루어지며 데이터와 명령어를 주고받으며 통신을 하게 됩니다. 보통 상위 계층에서 인터페이스를 정의하고 하위계층에서 정의된 명령어를 가져다가 사용합니다.
- 장점 : 단일 커널에 비하여 각 계층으로 분리되어 커널 하나의 크기가 줄었으며, 이로 인해 유지보수, 수정이 편하고 추상화로 인해 버그에 덜 취약해졌습니다.
- 단점 : 명확하게 계층 단위로 구분하기 어렵고 간단한 기능마저 계층을 구분하면서 까지 기능을 분류하게 되어 성능 측면에서 좋지 못합니다.
마이크로 커널 운영체제
단일구조와 계층 구조에서 한 개의 커널을 사용하는 운영체제의 문제점을 보안하기 위하여 탄생한 구조입니다. 커널의 기능들이 각각 모듈화가 되어 커널 위에 올려지며 커널의 기능이 많이 줄어들게 되었습니다.
프로세스 간 통신을 위한 IPC, 가상 메모리, CPU 스케쥴링 등 핵심만을 커널에 두고 파일, 장치 드라이버 등은 모두 모듈화 하였습니다. 즉 커널에는 최소 기능만을 포함시켜 크기를 줄이고 기타 기능은 사용자 모드로 옮겨 수행을 하게 되었습니다.
- 장점 : 커널이 가벼워지고 설계하기 편하며 기능별로 구분이 잘 되어 버그에 덜 치명적이며 모듈화 덕분에 이식성이 좋습니다.
- 단점 : 사용자 공간으로 올라온 모듈은 통신을 위해 커널 모드로 진입을 한번 더 해야 하므로 통신량이 늘어 성능이 떨어집니다.
운영체제 설계에 따라 마이크로 커널과 단일 커널을 합쳐 설계를 하는 하이브리드 커널도 있습니다. 하이브리드 커널의 경우 구조가 더 복잡해지지만 모듈화의 장점과 동시에 통신 오버헤드를 줄일 수 있도록 통신이 자주 일어나는 부분을 하나의 커널로 둡니다. 이처럼 사용할 환경과 자원, 내부 기능 등을 고려하여 맞춰 설계하는 것이 중요합니다.
'스터디 > 운영체제' 카테고리의 다른 글
[운영체제] Scheduling (0) | 2021.01.22 |
---|---|
[운영체제] Context Switch (0) | 2021.01.16 |
[운영체제] 프로세스 (0) | 2021.01.09 |
[운영체제] 시스템 콜과 인터럽트 (5) | 2021.01.04 |
[운영체제] Intro (0) | 2021.01.02 |