본문 바로가기

코드^학습/메모한 지식

리눅스 커널 심층분석 0x004

1_ 리눅스 커널의 개요

◆ 리눅스 커널과 전통적인 유닉스 커널

 읽을거리에 나타난 대로 리눅스 커널은 유닉스와 같은 모노리딕 커널 방식을 채택하고 있다. 그러나 둘은 같지 않고 다르다. 책에서는 차이점을 정리하고 있다.

- 리눅스는 커널 모듈을 동적으로 로드할 수 있다. 리눅스 커널 역시 모노리딕 방식이지만 필요에 따라 커널 코드를 로드하거나 언로드할 수 있다.

- 리눅스는 대칭형 멀티프로세싱(SMP)를 지원한다 몇몇 상용 유닉스 시스템이 SMP를 지원하기는 하지만 대부분의 전통적인 유닉스 시스템들은 그렇지 않다.

- 리눅스 커널은 선점형(preemtive) 방식이다. 전통적인 유닉스와는 달리, 리눅스 커널은 커널에서 실행되는 작업을 중단시킬 수 있다. 상용 유닉스 시스템들 중에서는 Solaris와 IRIX가 선점형 커널이다.

- 리눅스는 스레드를 지원하기 위한 독특한 구조를 채택하였다. 즉, 스레드와 일반적인 프로세스간의 차이를 두지 않는다. 커널에게는 모두 동일한 프로세스로 보이지만, 몇 개의 프로세스는 자원을 공유할 수 있도록 되어 있다.

- 리눅스 디바이스 클래스들과 핫플러그 지원 이벤트들 그리고 유저 공간 디바이스 파일 시스템(sysfs)에 대하여 객체 지향 디바이스 모델을 제공한다.

- 리눅스는 STREAMS와 같이 별로 잘 구현되어 있지 않거나 더 이상 사용되지 않는 유닉스 표준들은 무시했다.


※읽을거리 – 모노리딕 커널과 마이크로 커널

 커널에는 크게 두 가지 종류가 있다.(exo커널이라는 것도 있다는데 이건 실용화되지 못했다.) 모노리딕 커널과 마이크로 커널이다. 간단히 설명하면 모노리딕 커널은 커널에 필요한 기능을 하나의 프로세스에 포함하여 만든 커널이고 마이크로 커널은 최소한의 기능만을 담은 프로세스가 있고 나머지 기능들을 모듈화하여 프로세스가 메시지를 전달하여 호출하거나 직접 호출하는 방식을 채택한 커널이다.


 커널이 작업을 처리하는 속도만으로 친다면 모노리딕 커널은 마이크로 커널에 비해서 우수하다. 모노리딕 커널은 필요한 대부분의 기능들이 하나의 프로세스 내부에 존재하기 때문이다. (과거의) 마이크로 커널은 메시지를 보내서 필요한 기능을 수행하는 방식(IPC:interprocess communication)이었기 때문에 프로세스 자체는 가볍지만 속도가 느렸다. 여기까지만 보면 마이크로 커널은 별로 쓸모없어 보일지 모르지만 꼭 그렇지만은 않다. 현대의 마이크로커널 기반 시스템들은 필요한 서비스(service)들을 커널공간에 배치하여 컨텍스트 스위칭을 방지하고 잠재적으로 모노리딕 커널과 같이 직접 호출과 같은 효과를 얻을 수 있다.


 리눅스는 유닉스에서 파생된 OS니 만큼 모노리딕 커널을 채택하고 있었다. 그러나 모노리딕 커널의 전통적인 방식만 쓰는게 아니라 마이크로 커널의 장점을 받아들여 커널 선점, 커널 스레드 등을 사용하고 커널 모듈이라는 바이너리들을 커널에 동적으로 로드할 수 있는 기능을 포함한다.


커널 선점? - 커널이 사용하는 방식인 듯한데...

본문에서는 간단한 설명이... 그래서 링크를 하나 남겨봅니다. 초반엔 매우 간단히 정의한 몇몇 댓글이 있습니다. 그러나 더 밑으로 내려가면 엄청난 댓글전쟁이 있습니다. 참고해보세요.

다만 읽을 때 감정이입은 하지 않는 것을 추천합니다. 물론 감정이입이 안 하는 건 불가능하겠지만 그래도 객관적인 자세로 보려는 노력이 없다면 엄청난 흥분상태에 돌입하는 것을 느낄 수 있습니다ㄷㄷㄷ

[출처:https://kldp.org/node/55621]

파이팅