· KLDP.org · KLDP.net · KLDP Wiki · KLDP BBS ·
Docbook Sgml/Kernel Analysis-HOWTO

Kernel Analysis-HOWTO

Kernel Analysis-HOWTO

Roberto Arcomano

           
        

김남형

           
        

고친 과정
고침 0.72003-03-26


1. 서문


1.1. 서문

이 문서에서는 리눅스 커널을 구성하는 각 부분을 정의하고 그 부분을 수행하는 주된 함수와 자료 구조, 그리고 이들이 어떻게 동작하는지 (how the "wheel spins") 를 설명하려고 한다. 이 문서의 최신 버전은 http://www.bertolinux.com 에서 찾아볼 수 있다. 이 문서에 대한 개선점이나 제안 사항이 있다면 당신의 아이디어를 다음의 메일 주소를 통해 보내주기 바란다: . 이 문서에 사용된 코드들은 이 HOWTO 문서가 쓰여지고 있는 시점에서 최신 안정 버전인 리눅스 커널 버전 2.4.x 를 참조하였다.


1.2. 저작권 정보

Copyright (C) 2000,2001,2002 Roberto Arcomano. Copyright (C) 2003 김남형 (한국어판). 본 문서는 여러분이 자유 소프트웨어 재단(Free Software Foundation)에서 발행한 GNU 라이브러리 일반 공개 사용권(GNU Library General Public License)의 규정(즉 사용권 2판이나 혹은 여러분의 선택에 따라 더 이후의 사용권)을 준수하는 한 재유포하거나 수정할 수 있는 자유 문서이다. 본 문서는 이것이 유용하게 사용되기를 바라는 마음으로 배포하는 것이지만, 그에 대한 어떠한 보증도 하지 않는다: 상업적인 용도나 특정한 목적에 맞게 사용 했을때 의무적으로 따라 붙는 보증도 없다. 더 자세한 내용은 GNU 라이브러리 일반 대중 사용권 (GPL) 에 대해 보기 바란다. GNU GPL 의 복사본은 여기 에서 얻을 수 있다.


1.3. 번역에 관하여

당신이 이 문서를 번역하는 것은 자유이다. 하지만 그전에 다음과 같은 사항들을 참고해야 할 필요가 있다:

  1. 당신이 번역해서 올리고자 하는 LDP 에 이미 이 문서의 번역본이 있는지 체크한다.

  2. 절을 유지한다. (, , , 을 포함)

참고: TXT 파일이나 HTML 파일을 직접 번역해서는 안되고 LYX 파일을 수정해야 한다. 그래야만 이를 이용해 다른 파일 형식 (TXT, HTML, RIFF 등) 으로 변환할 수 있다. "LyX" 프로그램을 사용하기 위해서 http://www.lyx.org 에서 다운로드 받을 수 있다.

번역을 위해서 나에게 질문을 할 필요는 없다. 그저 당신의 번역물에 관해 (당신이 원한다면) 내가 알 수 있게만 해주면 된다.

당신의 번역에 감사한다!


1.4. 감사의 글

이 문서를 빨리 올려주고 발표해 준 The Linux Documentation Project 에 감사한다.

Klaas de Waal 의 제안에 감사한다.


2. 사용된 문법


2.1. 함수의 문법

함수에 대해서 설명할 때는 다음과 같은 형태로 표기한다:

	   "함수 이름 [ 파일 위치 . 확장자 ]"
	  

예를 들어:

예 1.

"schedule [ kernel/sched.c ]"

라는 표현이 있을 때 이것은 우리가 지금

예 2.

"schedule"

이라는 함수에 관해서 설명하고 있음을 나타내며, 이 함수는

예 3.

[ kernel/sched.c ]

라는 파일에서 찾아볼 수 있음을 뜻한다.

참고: 여기서는 시작 디렉토리가 /usr/src/linux 라고 가정하고 있는 것이다.


2.2. 들여쓰기

소스 코드 안에서의 들여쓰기에는 3개의 공백문자가 사용되었다.


2.3. 함수간 호출 분석 (InterCalling Analysis)


2.3.1. 개요

이 문서에서는 커널 함수들의 호출 관계를 표현하기 위해 (들여쓰기의 방식으로) "함수간 호출 분석 (InterCalling Analysis : ICA)" 을 사용한다.

예를 들어 sleep_on 이라는 함수를 함수간 호출 분석을 통해 표현하면 아래와 같다:

		  
|sleep_on
|init_waitqueue_entry      --
|__add_wait_queue            |   enqueuing request  
   |list_add                 |
      |__list_add          -- 
   |schedule              ---     waiting for request to be executed
      |__remove_wait_queue --   
      |list_del              |   dequeuing request
         |__list_del       -- 
 
                          sleep_on ICA
        

들여쓰기로 표현된 함수간 호출 분석 뒤에는 함수의 위치가 나온다:

  • sleep_on [kernel/sched.c]

  • init_waitqueue_entry [include/linux/wait.h]

  • __add_wait_queue

  • list_add [include/linux/list.h]

  • __list_add

  • schedule [kernel/sched.c]

  • __remove_wait_queue [include/linux/wait.h]

  • list_del [include/linux/list.h]

  • __list_del

참고: 함수의 위치가 바로 앞에 표시한 함수의 위치와 같은 경우에는 명시하지 않았다.


2.3.2. 세부사항

함수간 호출 분석에서 다음과 같은 형태가 있을 것이다:

function1 -> function2
		

이것은 function1 은 다른 함수를 가리키는 일반적인 포인터라는 것을 뜻한다. 위의 경우에서 function1function2 를 가리킨다.

또 다음과 같은 형태에서는:

function:
		

function 은 함수가 아님을 뜻한다. 이것은 레이블이다 (일반적으로 어셈블러 레이블일 것이다).

이 문서에서는 많은 절에서 C 코드의 형태나 슈도-코드 의 형태로 표현하였다. 실제의 소스 파일에는 이것들이 어셈블러 코드나 구조화 되지 않은 코드의 형태로 들어있을 수도 있다. 이러한 차이점은 학습을 위한 것이다.


2.3.3. 함수간 호출 분석의 장점

함수간 호출 분석 (ICA) 를 사용하는데 있어서 다음과 같은 많은 장점들이 있다:

  • 커널 함수를 호출하였을 때 어떤 일이 일어나는 가를 전체적으로 알 수 있다.

  • 함수의 뒤에 함수의 위치가 나오므로, 함수간 호출 분석을 하나의 함수의 레퍼런스 로도 사용할 수 있다.

  • 함수간 호출 분석은 sleep/awake 메카니즘에서 유용하다. 이를 이용해 프로세스가 sleep 되기 전에 어떤 일을 하는지와 (스케줄 이후에) wake up 이후에 무슨 일을 할 것인지를 볼 수 있다.


2.3.4. 함수간 호출 분석의 단점

함수간 호출 분석 (ICA) 를 사용하는데 있어서 다음과 같은 단점들이 있다:

  • 모든 이론적인 모델에 있어서, 실제 소스코드와 특정한 조건들과 같은 자세한 사항들을 제외하고 단순화 시켰다.

  • 스택의 상태, 데이타의 값 등을 표현하기 위해서는 추가적인 표현이 추가되어야 한다.


3. 기초적인 내용


3.1. 커널이란 무엇인가?

커널이란 컴퓨터 시스템의 핵심(core) 부분을 말한다. 즉, 컴퓨터의 자원들을 사용자가 공유할 수 있도록 해주는 소프트웨어 이다.

커널은 (그래픽을 이용한 관리 프로그램도 포함할 수 있는) 운영체제의 주요 소프트웨어라고 생각할 수 있을 것이다.

예를 들어, (다른 Unix 기반의 운영체제와 같이) 리눅스에서는 X 윈도우 환경은 커널에 속해있지 않다. 왜냐하면 X 윈도우 환경은 오직 그래픽 연산 만을 관리하기 때문이다. (비디오 카드 장치에 접근하기 위해서 사용자 모드의 I/O 를 사용한다.)

대조적으로 윈도우즈 환경 (Win9x, WinME, WinNT, Win2K, WinXP 등) 에서는 커널과 그래픽 환경이 혼합되어 있다.


3.2. 사용자 모드와 커널 모드


3.2.1. 개요

(컴퓨터가 방 한개를 차지할 만큼의 크기였던) 예전에는 사용자들이 응용 프로그램을 실행시키는 것도 무척 힘든 일이었고, 때때로 응용 프로그램이 컴퓨터를 망가뜨리기도 하였다.


3.2.2. 동작 모드

위와 같이 응용 프로그램이 시스템을 망가뜨리는 것을 방지하기 위해, 이후의 운영체제들은 2 가지의 다른 동작 모드를 갖도록 디자인되었다.

  1. 커널 모드: 중요한 자료구조나 직접적인 하드웨어 접근 (I/O 혹은 memory mapped), 직접적인 메모리 접근, IRQ, DMA 등의 처리

  2. 사용자 모드: 사용자가 응용 프로그램을 실행할 수 있음




sponsored by andamiro
sponsored by cdnetworks
sponsored by HP

Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2012-12-30 05:26:46
Processing time 0.0230 sec