# 모노리틱 커널
- 구성 : 커널이 사용자와 같은 주소공간에 위치
- 주소 공간을 (커널코드 + 사용자) 나눠서 사용
- 특징 : 여러 개의 주소 공간들이 있는데, 이때 각 주소공간에
위치하는 커널 코드들은 물리적으로 동일하다
> 주소공간 매핑을 이용하기 때문
- 장점 :
- 여러 개의 주소 공간에서, 각각의 주소 공간 내에는
어플리케이션 + 커널 코드 두 개가 동시에 존재
> 시스템 콜 할 때 오버헤드가 적다
( 시스템 콜 = 사용자가 커널 레벨에 어떤 요청을 하는 것 )
- 여러 개의 주소 공간 각각에 커널 코드들이 분산됐는데, 주소공간 매핑을 통해
모든 커널들은 서로 연결되어 있다
> 각 커널들간의 데이터 전달 시, 오버헤드가 적다
- 단점 :
- 하나의 커널 코드가 여러 개의 주소 공간들에 분포되어 있기에,
모든 어플리케이션들과도 연결된 것과 마찬가지다
> 만약, 커널 코드를 조금이라도 바꾸면, 연결된 모든 어플리케이션들이
영향을 받는다
> 따라서, 유지 보수가 매우 힘들다
# 마이크로 커널
- 구성 : 마이크로 커널 + 모듈화된 커널 서비스들
- 모듈화된 커널 서비스 = "서버" 또는 "커널 서버"
> 이 모듈들은 독립된 주소공간에 배치됨
- 마이크로 커널은 위의 서버들끼리 통신하도록 해주는 IPC 역할을 수행
> 어플리케이션 레벨의 서비스 콜 같은 간단한 명령을 전달해줌
- 장점 :
- 커널 서버들이 따로 구현됨
> 독립적인 개발, 유지, 보수 가능
> 모노리틱보다 안전함
- 그러나 실제로는 더 위험함.
모노리틱보다 시스템 콜을 하는 횟수가 더 많기에,
해킹의 위협이 더 많다
> 간단한 시작, 종료 가능
- 단점 :
- IPC 의 속도가 느림
> 서버들간의 통신, context switching 이 필수적이기 때문
# 하이퍼바이저 커널
- 구성 :
- 하나의 하드웨어에 여러개의 OS 가 존재
> 하이퍼바이저 레이어 덕분
- 각각의 OS 에는 여러개의 어플리케이션 + 커널 존재
- 콜 종류 :
1) 시스템 콜 : 앞서 했던 것과 동일. 어플리케이션에서 커널 레벨로 통신
2) 하이퍼바이저 콜 : 커널 레벨에서 하이퍼바이저 레벨로 통신
- 가상화 장점
1) Consolidation : 하드웨어를 쪼개서 쓰지 않아도 된다
- 하드웨어 사용 계획이 편하다 : 내가 미리 계산해서 가상화를 시키기 때문
- 하드웨어 비용 감소 : 예전에는 1개의 OS 에 1 개의 하드웨어 할당해야 했음
> 하나의 어플리케이션에 사용되는 CPU 를 다른 어플리케이션에도 할당 가능
2) Decoupling :
- 하드웨어와 OS 를 분리시켜준다
> 개발할 때, 서로의 연관성을 덜 고려한 채 개발하기 편하다
3) Isolation :
- 각각의 OS 들은 서로 독립적으로 움직인다
- 하이퍼바이저
- 특징 :
1) 위치 : OS 와 HW 사이
2) HW(CPU, 메모리) 접근 : 하이퍼바이저에게 할당 받은 자원만 수행
3) 각각의 OS : 서로 다른 가상머신 위에서 작동 + 서로의 존재 모름
- 장점 : ISA 제공 (실제 컴퓨터가 제공하는 것과 다른 명령어)
> 다른 HW 환경에서 컴파일 된 것도 실행 가능
- 단점 :
1) 메모리 차지를 너무 많이 한다
2) 1대 1 의 SW-HW 방식보다 성능 떨어짐
> 해결 방안 : 컨테이너
- 하이퍼바이저 업그레이드 버전
1) KVM :
- 하이퍼바이저를 아예 어떤 OS 로 두고 진행한다
- isolation 이 철저
-> 여러개의 OS 를 설치할때마다 패키지들을 모두 설치하므로, 무겁다
2) 컨테이너 :
- 구조 :
- 마찬가지로, 하이퍼바이저를 어떤 OS 로 두고 실행
- 컨테이너 엔진을 도입
- 특징 :
- 각각의 컨테이너들이 루트/라이브러리 공유
> 각각의 컨테이너들의 통신이 가능
> 배포가 쉽다
'운영체제' 카테고리의 다른 글
커널별 인터럽트 처리 (0) | 2020.04.26 |
---|---|
DMA 와 메모리 (0) | 2020.04.26 |
선점형/비선점형 스케쥴링 방식 (0) | 2020.04.26 |
인터럽트 (0) | 2020.04.26 |