티스토리 뷰
커널이란?
커널이란? 커널은 컴퓨터 운영체제의 필수적인 기반입니다. 이것은 OS의 다른 모든 부분에 기본적인 서비스를 제공하는 핵심입니다. OS와 기본 컴퓨터 하드웨어 간의 주요 계층으로 프로세스 및 메모리 관리, 파일 시스템, 디바이스 제어 및 네트워킹 등의 작업을 지원합니다. 통상의 시스템 기동 시에 컴퓨터의 기본적인 입출력 시스템이 하드웨어의 부트스트랩 또는 초기화를 완료합니다. 그런 다음 부트 로더를 실행하여 하드 드라이브 등의 저장 장치에서 보호된 메모리 공간으로 커널을 로드합니다. 커널이 컴퓨터 메모리에 로드되면 BIOS는 제어를 커널로 이관합니다. 그런 다음 다른 OS 컴포넌트를 로드하여 시스템 기동을 완료하고 사용자가 데스크톱 또는 기타 사용자 인터페이스를 통해 제어를 사용할 수 있도록 합니다. 커널이 손상되었거나 정상적으로 로드할 수 없는 경우 컴퓨터를 완전히 시작할 수 없습니다. 하드웨어 손상을 수정하거나 OS 커널을 정상 버전으로 복원하려면 서비스가 필요합니다. 이러한 커널의 목적은 무엇일까요? 대체로 OS 커널은 세 가지 주요 작업을 수행합니다. 첫번째 작업은 사용자 및 응용 프로그램이 컴퓨터와 상호 작용하는 데 필요한 인터페이스를 제공하고 두번째 작업은 애플리케이션을 기동해 관리합니다. 그리고 기본 시스템 하드웨어 디바이스를 관리합니다. 보다 세밀한 관점에서 이들 3개의 커널 기능을 실현하기 위해서는 다음과 같은 컴퓨터 태스크가 필요합니다. 스케줄링과 관리는 커널 운영의 핵심입니다. 컴퓨터 하드웨어는 한 번에 한 가지 일만 할 수 있습니다. 그러나 컴퓨터의 OS 컴포넌트와 애플리케이션은 컴퓨터가 호스트해야 하는 수십, 수백 개의 프로세스를 생성할 수 있습니다. 모든 프로세스가 메모리 주소나 CPU 명령 파이프라인과 같은 컴퓨터의 하드웨어를 동시에 사용하는 것은 불가능합니다. 커널은 이러한 프로세스의 중앙 관리자입니다. 어떤 하드웨어 리소스를 사용할 수 있고 어떤 프로세스가 이를 필요로 하는지 알고 있습니다. 그런 다음 각 프로세스에 이러한 리소스를 사용하기 위한 시간을 할당합니다. 커널은 컴퓨터 동작에 매우 중요하며 시스템 메모리 내에서 세심한 보호가 필요합니다. 로딩되는 커널 공간은 보호된 메모리 영역입니다. 이 보호된 메모리 공간에 의해 다른 애플리케이션과 데이터가 커널을 덮어쓰거나 손상시키지 않고 성능 문제, 불안정성 또는 기타 부정적인 결과를 초래하지 않습니다. 대신에 애플리케이션은 일반적으로 사용 가능한 사용자 메모리 공간에서 로드되고 실행됩니다. 커널은 종종 사용자 명령과 상호 작용하는 OS의 가장 바깥쪽 부분인 셸과 대조됩니다. 커널과 셸은 IBM 메인프레임 및 마이크로소프트 윈도우즈 시스템보다 유닉스 OS에서 더 자주 사용되는 용어입니다. 커널은 컴퓨터 회로 기판 내의 칩에 저장되어 있는 독립된 프로그램인 BIOS와 혼동해서는 안 됩니다. 다음으로 디바이스 드라이버에 대해서 살펴보겠습니다. 커널 동작의 중요한 부분은 물리 컴퓨터 내부 및 외부의 하드웨어 디바이스와의 통신입니다. 그러나 존재하는 모든 가능한 장치와 상호 작용할 수 있는 OS를 작성하는 것은 비현실적입니다. 대신에 커널은 디바이스 드라이버의 기능에 의존해 프린터나 그래픽 어댑터등의 특수한 디바이스의 커널 서포트를 추가합니다. 시스템에 OS를 설치하면 시스템 내에서 탐지된 특정 장치에 대한 장치 드라이버가 추가됩니다. 이것에 의해서 존재하는 디바이스를 서포트할 수 있는 컴포넌트만으로 OS 의 인스톨을 특정의 시스템에 맞추어 커스터마이즈 할 수 있습니다. 새로운 디바이스 또는 그 이상의 디바이스가 기존의 디바이스를 대체하면 디바이스 드라이버가 갱신 또는 교환됩니다. 디바이스 드라이버는 커널 또는 사용자로 분류됩니다. 커널 모드 디바이스 드라이버는 OS와 함께 로드되는 범용 드라이버입니다. 이러한 드라이버는 CPU나 메인보드 디바이스 드라이버 등 주요 하드웨어 디바이스의 소규모 카테고리에 적합합니다. 사용자 모드 디바이스 드라이버에는 애프터마켓용 애드혹드라이버, 프린터, 그래픽 어댑터, 마우스, 고급 사운드 시스템 및 기타 플러그 앤 플레이 디바이스 등 사용자 추가 디바이스에 사용되는 일련의 애드혹드라이버가 포함됩니다. OS에는 커널을 구성하는 코드가 필요합니다. 따라서 커널 코드는 일반적으로 컴퓨터 스토리지 내의 보호된 영역에 로드되어 OS의 사용 빈도가 낮은 부분과 겹쳐지지 않습니다. 이러한 커널의 종류에 대해서 알아보겠습니다. 커널은 모노리식, 마이크로커널 및 하이브리드의 3가지 아키텍처로 나뉩니다. 이러한 타입의 주된 차이는 서포트되고 있는 주소 공간의 수입니다. 먼저 마이크로커널은 사용자 프로세스와 서비스와 커널 서비스를 서로 다른 주소 공간에 위임합니다. 그리고 모노리식 커널은 동일한 주소 공간에 서비스를 구현합니다. 다음으로 마이크로소프트 윈도우즈 NT 및 애플 XNU 커널과 같은 하이브리드 커널은 마이크로커널 및 모노리식 커널 아키텍처의 동작과 이점을 결합하려고 합니다. 전체적으로 이러한 커널 구현은 단점을 제시합니다. 관리자는 마이크로커널을 사용하여 보다 많은 소스 코드를 유연하게 사용할 수 있습니다. 또는 모노리식 커널을 사용하여 커스터마이즈 옵션을 사용하지 않고 보안을 강화할 수 있습니다. 세 가지 커널 유형 간의 특정 차이점은 다음과 같습니다. 먼저 마이크로커넬입니다. 마이크로커넬은 커널 주소 공간에 모든 서비스를 제공합니다. 마이크로커널은 통신 프로토콜을 위해 데이터 패킷, 신호 및 함수를 올바른 프로세스로 전송하는 메시지 전달을 사용합니다. 또한, microkernel은 모노리식 커널보다 뛰어난 유연성을 제공합니다. 새로운 서비스를 추가하기 위해 관리자는 마이크로커널의 사용자 주소 공간을 변경합니다. 마이크로커넬은 고립된 특성 때문에 모노리식 커널보다 안전합니다. 주소 공간 내의 1개의 서비스에 장애가 발생해도 영향을 받지 않습니다. 두번째로 모노리식 커널입니다. 모노리식 커널은 동일한 주소 공간에 커널과 사용자 서비스를 모두 수용하기 때문에 마이크로커널보다 큽니다. 모노리식 커널은 마이크로커널보다 빠른 시스템 콜 통신 프로토콜을 사용하여 하드웨어와 소프트웨어 간의 프로세스를 실행합니다. 마이크로커넬보다 유연성이 떨어지고 작업도 더 많이 필요합니다. 관리자는 새로운 서비스를 지원하기 위해 커널 전체를 재구성해야 합니다. 서비스에 장애가 발생하면 시스템 전체가 셧다운되기 때문에 모노리식 커널은 마이크로커널보다 시스템에 더 큰 보안 위험을 초래합니다. 또한, 모노리식 커널은 마이크로커널만큼 많은 소스 코드를 필요로 하지 않으므로 버그에 대한 영향을 덜 받고 디버깅을 덜 필요로 합니다. 리눅스 커널은 지속적으로 성장하고 있는 단일 커널로 2018년에는 2천만 줄의 코드를 가지고 있었습니다. 기본 수준에서 다양한 하위 시스템으로 계층화됩니다.이러한 주요 그룹에는 시스템 호출 인터페이스, 프로세스 관리, 네트워크 스택, 메모리 관리, 가상 파일 시스템 및 디바이스 드라이버가 포함됩니다. 관리자는 리눅스 커널을 OS에 이식하여 라이브 업데이트를 실행할 수 있습니다. 이러한 기능은 리눅스가 오픈 소스라는 사실과 함께 실시간 유지보수가 필요한 서버 시스템 및 환경에 더욱 적합합니다. 세번째로 하이브리드 커널입니다. 애플은 1996년에 마하와 버클리 소프트웨어 배포 커널의 하이브리드로서 XNU OS 커널을 개발하여 오브젝티브 C 애플리케이션 프로그래밍 인터페이스 또는 API와 페어링하였습니다. 모노리식 커널과 마이크로커널의 조합이기 때문에 모듈성이 향상되어 OS의 일부가 메모리를 보호합니다. 마지막으로 커널의 역사와 개발에 대해서 알아보겠습니다. 커널 이전에 개발자들은 하드웨어와 소프트웨어 간의 상호작용을 완료하기 위해 OS에 의존하지 않고 프로세서에 직접 작업을 코드화했습니다. 커널을 사용하여 메시지를 전달하는 OS를 처음 만든 것은 1969년 RC 4000 멀티프로그래밍 시스템을 사용한 것입니다. 프로그래머 Per Brinch Hansen은 기존 OS를 새로운 하드웨어와 호환되도록 변환하는 것이 아니라 핵을 만들고 OS를 구축하는 것이 더 쉽다는 것을 발견했습니다. 이 커널에는 통신 및 지원 시스템을 용이하게 하기 위한 모든 소스 코드가 포함되어 있어 CPU에서 직접 프로그래밍할 필요가 없습니다. RC 4000 이후, Bell Labs의 연구자는 유닉스에 관한 연구를 개시해 OS의 개발과 커널의 개발과 통합을 근본적으로 변화시켰습니다. 유닉스의 목표는 시스템 유틸리티가 멀티태스킹을 시도하지 않고 특정 작업을 잘 수행하는 작은 유틸리티를 만드는 것이었습니다. 사용자의 관점에서 보면 단순한 툴을 조합한 셸 스크립트를 간단하게 작성할 수 있습니다. 유닉스의 도입이 증가함에 따라 시장에는 BSD, NeXTSTEP, 리눅스 등 유닉스와 유사한 다양한 컴퓨터 OS가 등장하기 시작했습니다. Unix의 구조는 OS를 필요로 하지 않는 시분할 시스템에 의존하는 것이 아니라 소프트웨어를 재사용하고 일관된 하드웨어를 갖춘 OS 위에 커널을 구축하는 것이 더 쉽다는 생각을 영속화시켰습니다. 유닉스는 OS를 보다 개별적인 시스템에 도입했지만 Carnegie Mellon의 연구진은 커널 기술을 확장했습니다. 1985년부터 1994년까지 마하 커널에 대한 작업을 확장했습니다. BSD와 달리 마하 커널은 OS에 의존하지 않고 여러 프로세서 아키텍처를 지원합니다. 연구진은 기존 BSD 소프트웨어와 바이너리 호환성을 갖추어 즉각적인 사용과 지속적인 실험을 가능하게 했습니다. 마하 커널의 원래 목표는 유닉스의 더 깨끗한 버전과 Carnegie Mellon의 Accent 프로세서 간 통신 커널의 더 이식 가능한 버전이 되는 것이었습니다. 시간이 지남에 따라 커널은 포트나 IPC 기반 프로그램 등의 새로운 기능을 도입하여 최종적으로 마이크로커널로 진화했습니다. 마하 커널 직후인 1986년 암스테르담의 Vrije Universityit 개발자 Andrew Tanenbaum은 교육 및 연구용으로 mini Unix를 출시했습니다. 이 배포판에는 마이크로커널 기반 구조, 멀티태스킹, 보호 모드, 확장 메모리 지원 및 American National Standards Institute C 컴파일러가 포함되어 있습니다. 커널 기술의 다음 큰 발전은 1992년 리눅스 커널의 출시와 함께 이루어졌습니다. 설립자 Linus Torvalds는 취미로 개발했지만 그는 여전히 일반 공중 라이선스로 커널을 라이선스하여 오픈 소스로 만들었습니다. 그것은 176,250줄의 코드로 처음 공개되었죠. 대부분의 OS와 그 커널은 유닉스로 추적할 수 있지만 다음과 같은 한 가지 특이점이 있습니다. DOS와 IBM 호환 PC의 인기에 힘입어 마이크로소프트는 NT 커널을 개발하고 DOS를 기반으로 운영 체제를 구축했습니다. 그렇기 때문에 윈도우즈 용 명령어는 유닉스 기반 시스템과 다릅니다. 이렇게 커널의 역사와 종류에 대해서 알아봤습니다.