2010년 3월 10일 수요일

커널-읽고지우자-



kernel은 단지 하나의 layer이며 추상화개념이다?
그럴듯하게 보이시죠?
엄밀한 의미에서 kernel은 process입니다.
여러 OS에서 process의 개념이 매우 미묘하게 차이가 나기도 하지만,
학계에서 일반적으로 정의 내리는 process는 program의 instance라는것,
그리고 하나 이상의 archtecture state로 이루어진 context(thread)가있고,
별도의 address space를 가진다는것입니다.
이게 일반적인 process의 정의입니다.

약간 논외로 process와 thread를 구분하는 가장 중요한 기준은 별도의 address space의 유무이고
이 기준에 의해 process가 될지 thread가 될지 결정되죠.
그럼 kernel은 무엇인가?
linux를 예를들면 linux kernel 역시 프로그램으로 이루어져 있고, swapper로 대변되는 idle thread와
기타 여러일들을 수행하는 kernel thread들로 이루어져 있죠.
kernel의 thread들은 각자의 context를 가지고 있으며 swapper의 주소공간을 공유하죠.
kernel은 프로그램이고, 일반 process와는 별도의 주소 공간을 가지며 여러 thread로 이루어져 있습니다.
때문에 kernel은 일반적인 process의 정의와 부합하며
그런 의미에서 process라 할수 있고 실제로 그렇게 정의내립니다.
많은 RTOS들이 multi-thread model을 띄고 있는데 엄밀한 의미에서 one-process, multi-thread model이라
부르는것도 바로 이 때문입니다.
============== 인용 ==========================
그래서 현재의 리눅스는 cpu가 8개라고 할지라도 커널은 이중 cpu 1개에서만 작동하면
(동시에 2개의 cpu에서 작동하지 않는 다는 의미입니다.)
=============================================
대부분의 SMP architecutre에서 OS들은 모두 여러 CPU에서 동작합니다.
대표적으로 linux, windows가 그렇고, 거의 모든 SMP를 지원하는 OS가 그러하다고 보시면 되겠네요.
OS model도 processor의 구조가 AMP이냐 SMP이냐 혹은 heterogeneous하냐, homogeneous하냐에 따라
여러 model로 나뉠수 있는데 말씀하신 구조는 그중 한 model 뿐입니다.
말씀하신 OS model의 대표적인 case가 IBM cell architecture에 포팅되어 있는 linux 같은 mdel일것 같네요.
IBM cell은 AMP구조에 heterogeneous해서 PPU라고 하는 main processor에만 OS가 올라가죠.
물론 이건 IBM이 취하고 있는 일반적인 model의 경우이고, 어떻게 구성하냐에 따라 같은 cell이라할지라도
여러 OS model로 구성하는게 가능하죠.
============== 인용 ==========================
최근 마이크로 커널이라는 개념이 도입이 됐는데, 위의 문제 (cpu 1개에서만 커널이 작동하는)를 해결하기 위한 것으로 기존을 커널을
좀 더 작은 단위로 쪼갠 후 가장 중요한 core 만 기존 커널과 동일한 레벨에서 작동하고 나머지 부분은 user level 수준으로 낮추어 병렬로 작동하도록 하는 것인데요.
user level 파트는 복수의 cpu에서 병렬로 작동이 가능하게 됩니다.
=============================================
micro kernel은 아주 오래전에 나온 개념이고, 도입된지도 한참이 넘었습니다.
대표적인 case가 L4, QNX, symbian등이 이에 해당하죠.
micro kernel과 monolithic kernel의 가장 큰 차이점은 OS의 각 sub system이 kernel의 code에 포함되는가
아니면 별도의 process 또는 thread로 존재하며 kernel core와 통신하며 service를 제공해주는가에 따라 분류가 나뉘어집니다.
여기까지는 말씀하신 내용과 동일하고,,,,
micro kernel의 각 sub system이 process 혹은 thread level로 동작한다고해서
monolithic kernel에 비해 multi-processor에서 parallel processing이 더 잘되는건 아닙니다.
왜냐하면 multi-processor에서 동작하는 대부분의 monolithic kernel들 역시 여러 processor에
분산되어 kernel의 각 부분을 parallel하게 처리하기 때문이죠.
그 대표적인 case가 linux입니다.
============== 인용 ==========================
이런 구조는 단일 CPU 시스템에서는 오히려 성능 저하를 불러일으키지만 멀티 CPU에서는 성능 향상이 있으며, 커널 core의 기능을 줄이므로서 커널의 안정성이 증가합니다.
=============================================
micro-kernel 구조는 uni-processor 뿐만 아니라 multi-processor에서도
core와 sub system간의 통신 overhead가 발생하기 때문에 성능 저하를 가져오게 됩니다.
multi-process model의 특성상 여러 process는 하나의 자원에 대해 경쟁하게 되며
이를 해결할 방법은 lock과 자원할당 순서를 통할수 밖에 없습니다.
때문에 micro-kernel의 각 sub system이 process로 존재해서 multi-processor에 분산하기
좋은 구조를 가지고 있을지라도 multi-process model을 사용하는한
process간 경쟁에 의해 overhead가 발생하는것은 어쩔수 없습니다.
여기에 kernel core와 sub system간의 통신 overhead가 더해지기
때문에 monolithic kernel보다 성능이 떨어질수 밖에 없습니다.
그렇지만 각 sub system은 여러 processor에 parallel processing이 잘되지 않냐고 하신다면...
컴퓨터를 사용하는 목적은 application을 사용하기 위한것으로써 user가 원하는 일을
효율적으로 처리하기 위한것이 목적이고, OS의 목적은 남아도는 processor 자원을
보다 효율적으로 사용하기 위한것으로써 결국 컴퓨터와 OS를 사용하는 목적은
application을 사용하기 위한 목적이지 OS의 sub system을 돌리기 위한것이 아니기 때문에
그런 의미에서 micro-kernel이 parallel processing이 잘된다고 말하기는 어려울것 같네요.
오히려 monolithic kernel 구조에서의 parallel processing이 더 application의 수행에
충실하지 않을까 쉽네요.
그럼 micro-kernel은 단점만있나? 아뇨. 말씀하신바대로 kernel의 안정성이 향상되고, 설계 모델이 깔끔하죠.
하지만 overhead는 어쩔수 없죠.
(사실 저는 설계 모델이 깔끔한지는 그다지 잘모르겠네요. monolithic kernel의 설계가 지저분하다고 지금껏 생각해본적이 없기 때문에.)
============== 인용 ==========================
그래서 ms-windows vista의 경우 그래픽 드라이버등을 변경하더라도 리붓없이 변경이 가능하다고 하던데, 그래서 재 짐작으로 vista 가 마이크로 커널의 개념을 사용한게 아닌가 짐작해 봅니다. (이부분을 다른 고수님이 첨언해 주시면 감사하겠습니다.)
=============================================
그래픽 드라이브 변경은 윈도우즈 xp도, linux도 재부팅 없이 변경 가능합니다.
그건 micro-kernel의 특화된 기능이 아닙니다. 나원 쌍팔년도에 사시는분도 아니시고....
이런 이야기는 win98 이후로 처음듣네요.

댓글 없음:

댓글 쓰기