정보공간_1

[Linux] Linux 커널을 공부하기에 앞서서... 본문

IT 놀이터/IT Storehouse

[Linux] Linux 커널을 공부하기에 앞서서...

알 수 없는 사용자 2011. 5. 16. 23:05

많은 분들이 커널 공부하는 방법에 대해서 물어보고 ... 저 또한 생각해 봤습니다...

하지만 모든 공부가 그러하듯 쉽고 빠른 방법은 없는 것 같습니다.

더구나 리눅스 커널 이라는 복잡한 덩어리를 이해하려면 많은 지식과 경험이 필요하죠.

그저 오랜 시간동안 여러 자료를 읽고 소스를 분석하고 머리 속에 체계화 시키는 과정을 겪어야 합니다.

그럼 지금부터 리눅스 커널에 대해서 맛보기로 잠깐 보도록 하겠습니다.


1. 들어가기 전에...

공부를 시작하기 전에 먼저 자신이 관심이 어디에 있는지 , 또 무엇을 알고 싶은지 먼저 정해야 합니다.

전체적으로 동작하는 방법을 알고 싶을 뿐이라면 하드웨어 적인 내용을 볼 필요는 없을 것이고,
파일 시스템의 실제 구현에 관심이 없다면 EXT2 파일 시스템의 내부 구조 같은 것을 볼 필요가 없을 것입니다. 다시 말해 자신이 관심있는 분야에 더 힘을 줘서 공부하는 게 가장 중요하다 말할 수 있습니다.

먼저 리눅스 커널을 공부하기에 앞서 다음과 같은 선행 지식이 필요합니다.

1. UNIX 시스템에 대한 이해
2. 운영체제에 대한 이해
3. C언어 에 대한 기본적인 지식
4. 자료 구조
5. 약간의 하드웨어적인 지식 ^^

2. 리눅스 커널 전반에 대한 이해

다음으로 리눅스 커널 전반에 대해서 파악을 해야 합니다. 리눅스 커널을 구성하고 있는 주요 구성 요소들과 각각의 역할, 그리고 이의 핵심적인 개념들을 이해해야 합니다. 여기서 특별히 하드웨어에 대한 내용은 살펴볼 필요가 없습니다.

○ Memory Management
○ Process Management
○ Filesystem
○ Networking
○ I/O system / Device Driver
○ Interprocess Communication
○ Interrupt, Exception (H/W)
○ ETC ... ...

이 중에서 가장 중요하게  이해해야 하는 것은 커널의 가장 핵심인 메모리 관리, 프로세스 관리 입니다. 이 부분이 중요하것은 말 할 필요도 없고, 또한 어렵기도 가장 어렵습니다. 나머지 부분은 관심있으신 분들만 보셔도 무방할 것입니다.

그럼 각각의 구성 요소들의 대한 기본적인 개념에 대해서만 진짜 ~~ 간략히 짚어 보도록 하겠습니다.

우선 메모리관리에서 가장 중요한 것은 가상 메모리의 개념, 페이징의 개념, 메모리관리 메커니즘, 메모리 할당과  해제, 하드웨어 캐시에 대한 이해 이렇게 나눠서 생각해 볼 수 있습니다.

가상 메모리 개념에서는 가상메모리의 개념과 목적 , 물리적인 메모리와 가상 메모리의 구별, 주소 공간에 대한 이해를 해야 하고 페이징의 개념에서는  페이징의 목적과 구현 방법, 물리적인 페이지와 가상 메모리의 페이지의 구별에 대한 이해가 필요합니다.
메모리 관리 메커니즘으로는 메모리 매핑, 요구 페이징 , 쓰기와 복사, 스와핑, 공유 메모리, 접근권한에 대해 이해 해야 하고 메모리 할당과 헤제 에서는 RAM의 페이지 들을 관리하는 방법, page 단위할당과 헤제 방법, 슬랩 할당자에 대한 이해, 메모리가 부족할 때 처리하는 방법에대한 이해가 필요하고, 마지막으로 하드웨어 캐시에 대한 이해가 필요합니다.

다음으로 프로세스 관리에 있어서는 프로세스의 개념과 상태에 대한 이해, 멀티태스킹의 구현, 프로세스의 생성과 소면 , 프로세스와 가상 메모리의 관계에 대한 이해가 필요하죠.

특히 멀티 태스킹의 구현에 있어서 선점형 멀티 태스킹에 이해, 스케줄링에 대한 이해, 스케줄링 알고리즘, 문맥전환의 이해와 프로세스 생성과 소멸에서 fork, exec, clone, exit는 반드시 이해하고 넘어가야 될 중요한 부분이라 생각 됩니다.

그리고 마지막으로 제가 가장 중요하게 생각하는 부분은 리눅스 초기화 과정입니다. 그 부분에 대해서도 제가 언급할 기회가 있으리라 생각합니다. 모든 시스템이 그러하듯 리눅스에 있어서도 초기화 과정이 가장 중요하고 리눅스 코드를 분석하는데 있어서 가장 첫걸음이라 생각이 듭니다.

또한 리눅스 커널이 모바일 장비에 올라가기 시작하면서 Power management에 관한 관심도 높아지고 있고, USB를 이용한 Device Driver에 대한 관심도 높아지고 있습니다.

3. 이번 글을 마치면서

첫 포스팅을 하면서 어떻게 써야 할 지 망설였는데 ... 친구와 대화 하듯 쓰니 벌써 하고 싶은 말을 다하고 말았네요. 리눅스 커널은 정말 방대한 양을 다루고 있습니다. 처음 부터 다 이해하기를 생각하기 보다는 장기적인 안목으로 천천히 정복해 나가면 어느덧 리눅스 커널을 이해할 수 있을 거라 생각 합니다.

읽어 주셔서 감사하고 다음주에 뵙겠습니다. ^^