🌞 커널의 종류
Monolothic kernal design ( 단일 구조 )
커널 안에 운영체제에 필요한 모듈들을 다 가지고 있음
Microkernal design
운영체제에서 필요한 모듈들이 유저단에서 가지고 있음
커널에서는 최소한의 시스템만 가지고 있음
모놀리식 커널 구조
운영체제의 모든 기능을 커널에 포함
초기에 생겨난 가장 보편적 형태
장점
-> 자원 사용의 효율성
단점
-> 커널 크기가 커지면 버그나 오류의 원인 파악 어려움
-> 기능 추가나 유지 보수 어려움
-> 한 부분에서 발생한 문제로 시스템 전체에 심각한 영향 ( 악성코드로 피해 입기 쉬움 )
-> ex) MS-DOS, 초기 Unix
운영체제가 점점 커지고 복잡해지면서 순수 단일 구조만으로는 다루기가 어려워진 문제를 해결
장점
-> 모듈화
-> 각 계층의 설계나 구현 단순
-> 각 계층의 거증과 오류 수정 용이 ( 위 아래층과 무관하게 수정되거나 교체될 수 있음 )
단점
-> 시스템 호출 한 번으로 서비스를 받는 단일 구조보다는 성능 낮음
(사용자 프로세스의 요청을 수행할 때 여러 계층을 거치느라 다수의 호출 발생)
-> 계층 나누기의 어려움
-> 각 계층은 하위 계층만 사용가능
-> 모든 함수간의 의존관계가 Directed Acyclic Graph(DAG)로 표현될 수 있어야 가능함
-> 가상메모리용 디스크의 디바이스 드라이버와 CPU 스케쥴러 간의 계층관계는?
(디스크의 디바이스와 CPU 스케쥴러는 서로 사용을 하는데, 하위 계층만 사용이 가능한데.. 이것을 어떤걸 상위 계층으로 잡아야 하는가..?)
순환의 문제가 발생 할 수 있음
커널은 최소 기능만 포함하고 나머지는 사용자 영역
커널 영역
-> 하드웨어 초기화, 메모리 관리(주소 공간 관리), 프로세스(스레드) 관리, 프로세스 간 통신,
프로세스 간 협력 동기화 등 기본 기능만
사용자 영역
-> 네트워크 시스템, 파일 시스템, 장치 관리 등 나머지 대부분의 운영체제 구성 요소
장점
-> 모듈화 정도 높음
-> 확장성 : 새로운 서비스는 커널의 변경이 필요 없이 사용자 공간에 추가
-> 이식성 : CPU용량이 작은 시스템에도 적용 가능
-> 보안성과 신뢰성이 높음 : 한 서버의 잘못된 수행이 서버와 커널에 영향 적음
-> 커널 내부의 지연이 적고 예측 가능하여 실시간 시스템에 활용
단점
-> IPC(프로세스간의 통신)이 빈번하여 성능 저하
커널과 서버들은 message passing으로 상호작용, 사용자 프로그램이 커널에 메시지를 전달하면, 커널은 해당 인터럽트(이벤트)를 처리하는 서버에게 메시지로 처리 요청
많은 현대 OS는 복합적인 구조이다. ( loadable kernel modules )로 구성
여러 서비스가 모듈화 되어 있따는 면에서 마이크로 커널 구조와 유사하지만 그 모듈들이 커널안에 속하고 message passing이 필요 없음. -> 필요시 커널 안으로 적재
커널이 모듈화되어 있다는 면에서 계층적 구조와 유사하지만 유연성이 높다.
정해진 Interface로 모듈 간 통신
여러 프로세스들이 상하관계를 가진것이 아닌 하나의 독단적인 모듈로서 존재를 한다.