리눅스가 왜 모 놀리 식 커널이라고 불리는가?
나는 리눅스가 모 놀리 식 커널이라는 것을 읽었다. 모 놀리 식 커널은 완전한 커널 코드를 컴파일하여 실행 파일로 연결하는 것을 의미합니까?
리눅스가 모듈을 지원할 수 있다면 왜 모든 서브 시스템을 모듈로 나누고 필요할 때로드합니까? 이 경우 커널은 모든 모듈을 처음에로드 할 필요가 없으며 모듈의 함수 색인을 유지하고 필요할 때로드 할 수 있습니다.
모 놀리 식 커널은 핵심 기능 (스케줄링, 메모리 할당 등)뿐만 아니라 모든 서비스 (파일 시스템, VFS, 장치 드라이버 등)가 동일한 공간을 공유하는 긴밀한 그룹 인 커널입니다. 이것은 마이크로 커널과 직접적으로 반대된다 .
마이크로 커널은 핵심 기능이 시스템 서비스 및 장치 드라이버 (기본적으로 시스템 서비스 일뿐)와 분리되는 접근 방식을 선호합니다. 예를 들어 VFS (가상 파일 시스템)와 블록 장치 파일 시스템 (예 : minixfs)은 IPC를 사용하여 커널, 다른 서비스 및 사용자 프로세스와 통신하기 위해 커널 공간 외부에서 실행되는 별도의 프로세스입니다. 즉, Linux 의 모듈 인 경우 격리 된 프로세스를 나타내는 마이크로 커널 의 서비스 입니다.
모듈 식 커널 이라는 용어를 모 놀리 식 이외의 것으로 혼동하지 마십시오 . 일부 모 놀리 식 커널은 모듈 형 (예 : Linux)으로 컴파일 될 수 있습니다. 중요한 것은 모듈이 핵심 기능 (커널 공간)을 처리하는 동일한 공간에 삽입되고 실행되는 것입니다.
마이크로 커널의 장점은 실패한 서비스를 쉽게 다시 시작할 수 있다는 것입니다. 예를 들어 루트 파일 시스템이 중단되면 커널이 중지되지 않습니다. 그러나 이것은 매우 중요한 버그를 숨길 수 있기 때문에 단점으로 볼 수도 있습니다 (또는 문제가 지속적으로 해결되는 것처럼 보임). 일단 배포 된 후에는 편리하게 수정할 수없는 시나리오에서 큰 이점으로 여겨집니다.
마이크로 커널의 단점은 비동기 IPC 메시징이 특히 fibrils 가 구현 된 경우 디버깅하기가 매우 어려워 질 수 있다는 것 입니다. 또한 FS / 쓰기 문제를 추적한다는 것은 사용자 공간 프로세스, 블록 장치 서비스, VFS 서비스, 파일 시스템 서비스 및 PCI 서비스 (아마도)를 검사하는 것을 의미합니다. 당신이 그것에 빈 내용이 있으면, IPC 서비스를 볼 때입니다. 이것은 모 놀리 식 커널에서 종종 더 쉽습니다. GNU Hurd 는 이러한 디버깅 문제 ( reference )로 어려움을 겪고 있습니다 . 복잡한 메시지 대기열을 처리 할 때 검사 점에 들어 가지 않을 것입니다. 마이크로 커널은 희미한 마음을위한 것이 아닙니다.
작동하고 안정적인 커널의 최단 경로는 모 놀리 식 접근법입니다. 두 가지 방법 모두 POSIX 인터페이스를 제공 할 수 있습니다. 여기서 커널 디자인은 특정 디자인에서 실행할 코드를 작성하려는 사람에게는 거의 관심이되지 않습니다.
프로덕션에서는 Linux (단일)를 사용합니다. 그러나 커널 개발에 대한 대부분의 학습, 해킹 또는 땜질은 마이크로 커널, 특히 HelenOS에 들어갑니다 .
편집하다
매우 긴 대답을 통해 이것을 얻었을 경우 아마도 ' 커널 디자인에 관한 위대한 Torvalds-Tanenbaum 토론 '을 읽는 것이 재미있을 것입니다 . 2013 년에 책을 읽은 후 20 년이 넘는 책을 읽는 것이 더 재미있었습니다. 가장 재미있는 부분은 마지막 메시지 중 하나에서 Linus의 서명이었습니다.
Linus "my first, and hopefully last flamefest" Torvalds
분명히, x86이 곧 폐기 될 것이라는 Tanenbaum의 예측보다 더 이상 실현되지 않았습니다.
NB :
"Minix"라고 말하면 Minix 3을 암시하지 않습니다. 또한 HURD를 언급 할 때 (대부분) Mach 마이크로 커널을 참조합니다. 다른 사람들의 최근 연구를 버리려는 의도는 아닙니다.
모 놀리 식 커널은 전체 운영 체제가 커널 모드에서 실행됨을 의미합니다 (즉, 하드웨어에서 높은 권한을 가짐). 즉, OS의 어떤 부분도 사용자 모드 (더 낮은 권한)로 실행되지 않습니다. OS 위에있는 응용 프로그램 만 사용자 모드에서 실행됩니다.
Windows와 같은 비모 놀리 식 커널 운영 체제에서는 OS 자체의 대부분이 사용자 모드에서 실행됩니다.
두 경우 모두 OS는 모듈 식일 수 있습니다.
에서 위키 백과 :
모 놀리 식 커널은 전체 운영 체제가 커널 공간에서 단독으로 감독자 모드로 작동하는 커널 아키텍처입니다. 다른 아키텍처와 달리 모 놀리 식 커널은 프로세스 관리, 동시성 및 메모리 관리 자체 및 하나 이상의 모든 운영 체제 서비스를 구현하기위한 기본 또는 시스템 호출 세트와 함께 컴퓨터 하드웨어에 대한 고급 가상 인터페이스 만 정의합니다. 모듈로서의 장치 드라이버.
반면에 최신 버전의 Windows는 하이브리드 커널을 사용합니다 .
하이브리드 커널은 컴퓨터 운영 체제에서 사용되는 마이크로 커널과 모 놀리 식 커널 아키텍처의 측면을 결합한 커널 아키텍처입니다. 이 범주는 모 놀리 식 커널과 유사하기 때문에 논쟁의 여지가 있습니다. 이 용어는 일부 사람들이 단순한 마케팅으로 기각했습니다. 전통적인 커널 범주는 모 놀리 식 커널과 마이크로 커널 (나노 커널과 엑소 커널이 더 극단적 인 마이크로 커널 버전으로 표시됨)입니다.
; tl-dr-아니요, Linux는 항상 단일체입니다.
Linux 모듈 은 어떤 의미에서 모듈 식 을 의미 할 수 있습니다 . 다른 사람들이 지적했듯이 모 놀리 식은 일반적으로 마이크로 커널 대 모 놀리 식 커널을 나타냅니다 . 전통적인 마이크로 커널 에는 이러한 기능 만 있습니다.
- 스케줄링
- 메모리 관리
- 프로세스 간 통신
메인 커널 에는 하드웨어 드라이버 , 프로토콜 스택 , 파일 시스템 , 일시 중지 / 재개 , 클럭 관리 등이 없습니다. 이러한 작업은 모든 사용자 작업 과 동일 하지만 MMU / 스케줄러를 통해 다른 권한을 가질 수 있습니다.
- 마이크로 커널은 미래입니다
- x86은 죽고 RISC 아키텍처는 시장을 지배 할 것입니다
- (5 년 후) 모든 사람이 무료 GNU OS를 실행합니다
PC와 서버 프로그래머들은 웃을지도 모르지만 2 ~ 3 명은 확실히 존재하는 대다수의 휴대 전화에 해당된다. BlackBerry QNX가 성공했다면 모든 계정에서 Tanenbaum이 적합 할 것입니다.
Also, many L1-hypervisors have a micro-kernel underneath. This is because a hyper-visor usually doesn't do much beside context switch.
Apparently three predicts the success of Linux. ;-)
An argument for microkernels is that all of the monolithic sub-systems need to synchronize multiple values at one time. In order to do this, they must use locks and will suffer from Amdahl's law when extended to parallel architectures. The counter is that microkernels result in lots of IPC messages.
A major development is the use of lock-free programming to avoid contention in a monolithic kernel. This avoids the locking in a monolithic kernel while also reducing IPC overhead. Recently all CPUs have been extending their ISA to include better primitives for lock-free algorithms. So Linux will probably remain a monolithic kernel for some time.
'Monolithic' in this context does not refer to there being a single large executable, and as you say, there Linux supports the dynamic loading of kernel modules at runtime. When talking about kernels, 'monolithic' means that the entire operating system runs in 'privileged' or 'supervisor' mode, as opposed to other types of operating systems that use a type of kernel such as a 'microkernel', where only a minimal set of functionality runs in privileged mode, and most of the operating system runs in user space.
Proponents of microkernels say that this is better because smaller code means less bugs, and bugs running in supervisor mode can cause much greater problems than in user space code (such as a greater chance of having security vulnerabilities or total system crashes in the form of a 'kernel panic'). Some microkernels are sufficiently minimal that they can be 'formally verified', which means you can mathematically prove that the kernel is 'correct' according to a specification. L4 is a good example of this.
Monolithic kernel is a single large processes running entirely in a single address space. It is a single static binary file. All kernel services exist and execute in kernel address space. The kernel can invoke functions directly. The examples of monolithic kernel based OSs are Linux, Unix.
I think this post will help you more to understand the concept.
http://learnlinuxconcepts.blogspot.in/2014/03/what-are-monolithic-and-micro-kernels.html
참고URL : https://stackoverflow.com/questions/1806585/why-is-linux-called-a-monolithic-kernel
'Programing' 카테고리의 다른 글
csproj 파일에서“Service Include”란 무엇입니까? (0) | 2020.05.13 |
---|---|
HTTP 상태 코드 200 (캐시)과 상태 코드 304의 차이점은 무엇입니까? (0) | 2020.05.13 |
git-파일이 추가 된 커밋 찾기 (0) | 2020.05.13 |
302와 307 리디렉션의 차이점은 무엇입니까? (0) | 2020.05.13 |
pandas DataFrame에서 column의 값이 최대 인 행 찾기 (0) | 2020.05.13 |