커널이란
커널은 운영체제 중 항상 메모리에 올라가 있는 운영체제의 핵심 부분으로써 하드웨어와 응용 프로그램 사이에서 인터페이스를 제공하는 역할을 하며 컴퓨터 자원들을 관리하는 역할을 한다. 즉, 커널은 인터페이스로써 응용 프로그램 수행에 필요한 여러가지 서비스를 제공하고, 여러가지 하드웨어(CPU, 메모리) 등의 리소스를 관리하는 역할을 한다.
다만 이러한 커널은 항상 컴퓨터 자원들을 바라만 보고 있기에 사용자와의 상호작용은 지원하지 않는다. 따라서 사용자와의 직접전인 상호작용을 위해 프로그램을 제공하게 되는데, 대표적으로 쉘(Shell)이라는 명령어 해석기등이 있다.
커널의 자원 관리
커널의 가장 큰 목표는 컴퓨터의 물리적(하드웨어) 자원과 추상화 자원을 관리 하는 것이다. 추상화란 물리적으로 하나뿐인 하드웨어를 여러 사용자들이 번갈아 사용할 수 있도록 마치 여러개처럼 보이게 하는 기술이다. 즉, 커널이 관리함에 따라 각 사용자들을 하나의 하드웨어를 독점하는 것처럼 느낄 수 있도록 한다. 커널이 추상화하여 관리하는 물리적 자원들과 이를 추상화한 자원을 칭하는 용어로는 대표적으로 CPU - Task or Process, 메모리 - Page or Segment, 디스크 - File, 네트워크 - Socket 등이 있다.
따라서 앞서 말한 자원 관리를 포함하여 커널은 다음과 같은 작업들을 수행한다.
- Task(Process) Management : 물리적 자원인 CPU를 추상적 자원인 Task로 제공
- Memory Management : 물리적 자원인 메모리를 추상적 자원인 Page 또는 Segement로 제공
- File System : 물리적 자원인 디스크를 추상적 자원인 File로 제공
- Network Managment : 물리적 자원인 네트워크 장치를 추상적 자원인 Socket으로 제공
- Device Driver Management : 각종 외부 장치에 대한 접근
- Interrupt Handling : 인터럽트 핸들러
- I/O Communication : 입출력 통신 관리
인터페이스로써의 커널
커널은 다양한 자원을 관리하는데 이는 사용자가 물리적인 하드웨어에 접근하고 사용할 수 있도록 매개하기 위해서이다. 즉, 인터페이스로써 사용자가 컴퓨터만의 언어와 규칙으로 하드웨어와 통신할 수 있도록 도와주는 역할을 한다.
앞서 말한 커널 구성요소들이 존재하는 공간을 Kernel Space라고 할 수 있다. Kernel Space 위에서는 사용자로 여겨지는 User Space가 있으며 여기에는 Task, Process들이 존재한다. 이 User Space와 Kernel Space 사이에는 보이지 않지만 System Call Interface가 있다. User Space의 Task 또는 Process들이 커널이 관리하는 자원에 접근해야할 필요가 있을때 System Call Interface를 통해 Kernel Space의 자원관리자에게 요청이 전달되는 방식이다. 그렇게 되면 커널은 사용자요청에 맞는 하드웨어에게 명령을 전달하고 작업을 수행하는 역할을 한다.
즉, 결론적으로 커널은 사용자가 System Call을 통해 컴퓨터 자원을 사용할 수 있게해주는 자원 관리자라고 할 수 있다.
커널과 운영체제
커널과 운영체제는 앞서 본것 처럼 차이점이 있다. 커널은 운영체제의 핵심 구성요소이고, 이러한 커널에 사용자 애플리케이션과 유틸리티가 추가되면 운영체제가 된다. 즉, 커널 + 애플리케이션, 유틸리티 = 운영체제 이다. 그러므로 운영체제는 커널 공간과 사용자 공간으로 나뉠 수 있다.
이때 리눅스 자체는 File System Utilites, Windowing Systems, Graphical System, Text Editors, Compilers등과 같은 사용자 애플리케이션을 포함하지 않고 핵심기능만 포함하기때문에 커널이라고 할 수 있다.
다만 이러한 리눅스를 기반으로 운영체제를 제공하는 회사들은 기본 리눅스 커널에 다양한 확장 애플리케이션을 추가하여 운영체제를 제공하고 있다. 대표적으로 Ubuntu, CentOS등이 있다.
커널의 유형
커널은 크게 모놀리식 커널(Monolithic Kernel), 마이크로 커널(MicroKernel)로 나뉜다.
모놀리식 커널
모놀리식 커널은 우리가 개념적으로 알고 있는 커널로써 애플리케이션을 제외한 모든 System 서비스들, 예를들면 VFS(Virtual File System), IPC(InterProcess Communication), File System등을 커널이 직접 처리하는 방식이다. 각 서비스들은 커널 내부의 여러 계층에서 관리된다. 모놀리식 커널은 사용자가 운영체제 서비스들을 System Call을 통해 사용할 수 있게 해준다.
모놀리식 커널은 커널이 많은 것을 관리하기 때문에 커널의 크기가 크고, 하나의 오류가 전체 시스템에 영향을 끼칠 수 있는 단점이 있다. 하지만 커널 내부에서 서비스들이 서로 시스템 자원을 공유하며 효율적으로 관리할 수 있고, 내부 서비스를 직접 커널이 수행하기에 빠른 처리속도를 가지는 장점이 있다.
초기 모놀리식 커널은 단일 모듈이었기에 내부 서비스의 추가, 수정에 있어서 커널 전체를 다시 컴파일 및 로딩이 필요했다. 다만 최신 모놀리식 커널은 여러개의 모듈로 구성되어있어서 커널의 추가, 수정이 수훨해졌다.
대표적인 모놀리식 커널에는 Unix, Embedded Linux, OSEK, WinMobile 등이 있다.
마이크로 커널
마이크로 커널은 기존의 모놀리식 커널에서 핵심 서비스(Process Management, Memory Management, Network Management 등)만을 남겨두고 나머지는 제외하여 가볍게 만든 커널이다. 기존의 모놀리식 커널이 가지고 있던 시스템 서비들(VFS, IPC, Device Driver 등)을 마이크로 커널에서는 개별적인 서버의 형태로 존재한다.
마이크로 커널은 최소화하고 핵심적임 서비스들만을 모아놓고 서버를 추가하는 방식의 구조여서 프로세스간 통신을 통해 대부분의 서비스가 수행된다. 따라서 메시지 전송에 따른 컨텍스트 스위칭이 많이 발생하고, 시스템 복잡도가 증가될수록 시스템 부하, 오버헤가 증가하는 단점이 있다. 다만 서버를 추가하는 방식이기에 커널을 변경하지 않고 간단히 기능을 추가, 수정 할수 있고, 프로세스가 각각의 서버영역에서 수행되때문에 하나의 서비스가 다운되어도 다른 서비스에까지도 영향을 끼치지 않는 장점이 있다.
가벼운 성질 때문에 임베디드 시스템등에 사용된다. 대표적인 마이크로 커널에는 MacOS, Winodws NT 등이 있다.
출처
https://selfish-developer.com/entry/%EB%AA%A8%EB%86%80%EB%A6%AC%EC%8B%9DMonolithic-kernel%EA%B3%BC-%EB%A7%88%EC%9D%B4%ED%81%AC%EB%A1%9CMicro-%EC%BB%A4%EB%84%90
https://medium.com/@vithushaaarabhi/exokernels-an-operating-system-architecture-for-application-level-resource-management-32d0daaeeab0
https://5equal0.tistory.com/entry/Linux-Kernel-%EC%BB%A4%EB%84%90%EC%9D%98-%EA%B0%9C%EB%85%90%EA%B3%BC-%EC%BB%A4%EB%84%90%EC%9D%98-%EA%B5%AC%EC%A1%B0
https://blog.naver.com/PostView.nhn?blogId=cjsksk3113&logNo=222238471338
http://itnovice1.blogspot.com/2019/08/blog-post_83.html
'Operating System' 카테고리의 다른 글
[Unix/Linux] Shell Script(쉘 스크립트)란 (1) | 2020.12.23 |
---|