Keep going
운영체제 구조 본문
운영체제는 아주 큰 프로그램으로 개발할 때 정답은 없다.
운영체제는 시스템에 따라서 구조가 매우 다르다.
운영체제 개발할 때 좋은 방법
- 운영체제 개발 전 목표 세우기
- 사용자 측면에서 목표 - 사용하고 배우기 쉽고 안전하고 빠르면 좋음
- 시스템 운영에서 목표 - 구현, 설계, 유지 보수 쉽고 유연해서 쉽게 바꿀 수 있고 효율적이어야 함
- 목표 세우고 구현할 때 policy, mechanism 구별 하기
- 정책 - 무엇을 할 것인가 결정
- 방법 - 정책을 어떤 방법으로 구현할 것인가
- 정책이 정해지면 정책을 구현하는 방법은 다양하다. 정책, 방법론 구별 해놓으면 정책을 바꾸지않고 방법론을 바꾸는 것이 가능.
- software 공학에서 다양한 기법에 설계와 구현에 적용해야함. software engineering도 운영체제 개발하는 과정 중 어려움을 해결하기 위해 탄생
운영체제 구현
- 초기 어셈블리 언어 이용
- 시스템 개발을 위한 프로그래밍 언어(Algol, PL/1) 사용해서 개발되었음
- 현재는 C, C++
- 고급 언어로 구현했을 때 장점은 한 운영체제를 다른 기계에 이식할 때 편리
- 고급 언어로 운영체제 작성할 경우 어셈블리 언어보다 속도 느리다.
운영체제 구조
- Monolithic 구조 (한 덩어리 구조)
- Layered 구조 ( 계층적 구조)
- Microkernel 구조
MSDOS, UNIX → 구조 거의 없다. 기능이 한곳에 모여있는 한덩어리 구조
↓
계층적 , Microkernel 구조
MS DOS - Monolithic 구조
- window 나오기전 peronal 컴퓨터
- 돌아가는 하드웨어 자체가 제약된 하드웨어
- pc, 16비트 ~ 8비트, 메모리 64k 정도 가지고 있는 기계에서 돌아가도록 개발된 운영체제 → 메모리를 어떻게 잘 활용하느냐가 핵심
- 운영체제 자체가 모듈로 나눠져 있지 않고 하나의 덩어리로 모든 기능
- 계층으로 구성되었지만 사용자 프로그램을 하면 운영체제의 요청을 받아서 하드웨어를 접근할 수 있지만 운영체제를 건너띄고 바로 rom bios를 건드려서 하드웨어를 접근할 수 있게 만들어놓음
- layer 나눠져있지만 층을 엄격하게 나누지 않고 층을 by pass 할 수 있는 방법 제공
- 운영체제 단계(층), 기능들이 정확히 분리되지 않았다는 단점이 있다.
초기 UNIX - MONOLOTHIC 구조
- 2개의 layer로 구성
- system program - 응용 프로그램, 쉘
- 커널
- 커널 부분에 운영체제 기능 다 모여있어서 계층 구별 X, 모듈 구별 X → 한 덩어리 (monolithic) 구조
Layered Approach
- monolithic 구조 이후 운영체제 편리 개발하기 위해 추상화 계층 나누는게 편리하다고 생각한다
- 운영체제 구현할 때 layer로 나눔
- 바깥층은 그 아래에 있는 층 기능 사용해서 구현하는 방식하면 software 개발이 쉽고 모듈화 할 수 있다.
- layered approach를 취할 경우, 상위에 있는 layer는 하위에 있는 layer 기능 들을 이용해서 좀 더 복잡한 기능을 구현한다.
- 하나의 layer는 자기 자신이 필요한 자료들을 가지고 있고 위층 서비스 할 여러가지 함수들을 가지고 있는 객체라고 볼 수 있다.
- 계층적 접근 방법의 단점은 맨상위 계층에서 어떤 작업을 하기 위해 요청을 한다면 계층을 따라 밑으로 요청하고 또 밑으로 요청하는 것 같이 통신오버헤드가 많아져서 속도가 느리다.
- 구현이 쉽다는 장점이 있다. ex) 네트워크 프로그램, 웹 프로그램
MicroKernel
- 초기 유닉스(monolithic 구조) 비판, 새로운 구조 만들어 보자해서 나온 approach
- 1980 년대 중반 카네기 멜로 대학에서 제안한 방법, 이름은 마이크로 커널
- 기본 개념은 운영체제가 해야 되는 기능(시그널 처리, device 처리, 메모리 관리, 프로세스 관리)들 중 핵심 기능만 커널에 남기고 나머지 기능들을 사용자 공간으로 보내라는 개념, 커널의 사이즈를 줄이자
- 이런 정책에 의해 개발된 운영체제 - Mach
- 마이크로 커널은 모듈들 사이에 통신을 하는 기능만 가지고 있고 (interprocess communication) 프로세스 통신 하려면 주기억장치 관리, cpu 스케줄링 필요하므로 이런 최소한의 기능만 커널에 두고 나머지 파일관리, device 관리 하는 것들은 사용자 공간으로 내보내는 방법이 마이크로 커널 방법이다.
- 장점
- 새로운 기능 만들어 추가만 하면 됨, 커널 바꿀 필요 X
- 단점
- application 사이에 통신하려면 결국 마이크로 커널 통해서 통신 이뤄줘야 하기 때문에 통신 비용이 많이 든다. 속도가 느려진다.
- 마이크로 커널은 장점이 더 많아 많이 사용하는 approach
Module
- Operate 시스템 각 기능을 모듈로 나눠서 필요한 경우에 모듈을 dynamic 하게 커널에 집어 넣어서 link 하는 방법이다.
- 커널을 loadable kernel module 로 분해하고 그 모듈이 필요할 때 커널에다 집어넣어서 커널에 link 시키는 방법
- 각 모듈은 서로 분리된 기능 갖고 있는 하나의 덩어리
- 각 모듈은 다른 모듈과 통신위해서 메시지 서로 주고 받는 방식으로 통신한다.
- 모듈방법 특징은 필요할 때 커널에다 load 할 수 있다.
- ex) LIinux, Solaris
- 장점
- 모듈이 필요할 때마다 커널에 적재가 된다.
- 마이크로 커널과 다르게 모듈이 사용자 프로세스로 만들어진게 아니라 커널 공간의 일부(하나의 기능)로 들어간다.
- 모듈끼리 core 커널통해 통신하는게 아니라 직접 통신할 수 있다. 속도 개선
- 모듈이 필요할 때마다 커널에 적재가 된다.
Hybrid System
- 운영체제가 단 하나의 방법을 쓰는게 아니라, 여러가지 섞어서 운영체제 구현
- ex) Linux and Solaris, Mac os
Comments