강좌
클라우드/리눅스에 관한 강좌입니다.
리눅스 분류

리눅스커널 이야기

작성자 정보

  • 관리자 작성
  • 작성일

컨텐츠 정보

본문

리눅스커널 이야기

 

1. 리눅스 커널 개론

 

우리는 앞에서 리눅스의 역사에 대하여 알아보았다. 그 속에서 리눅스 커널의 탄생과 발전과정에 대해서 설명하였다.

 이번에는 리눅스커널이 어떻게 구성되어 있는가를 가장 일반적인 관점에서 살펴볼 것이다.

 

 미리 말하자면 리눅스의 물리적인 구성요소들에 대해서는 이 책의 커널컴파일편에서 배우게 될 것이다.

 

 여기서 언급하는 리눅스커널에 대한 얘기는 커널의 기능적인면을 그 대상으로 한다.

 

 

 

먼저, 리눅스의 커널(Kernel)에 대한 설명을 하기전에 앞서 운영체제(OS : Operating System)에 대한 얘기를 먼저 언급해야 할 것 같다. 우리가 흔히 얘기하고, 듣고, 접했던 운영체제의 종류에는 어떤 것들이 있을까?

 

LINUX, FreeBSD, AIX, UNIX, Solaris, MS-DOS, Windows3.1, Windows95 / 98 / NT / 2000 / 2003 / XP / Vista/Windows7

 

위와같이 운영체제의 종류에는 많은 것들이 있다.

 흔히 운영체제(OS)가 뭐냐고 물으면 사람이 컴퓨터를 사용할 수 있도록 하는 프로그램이라고 표현한다.

 

 틀린 표현은 아니다.

 또한 맞는 말이다.

 

 하지만 필자가 여기서 운영체제에 대한 얘기를 꺼낸 의도는 이런 추상적인 결론을 얻자는 것은 결코 아니다.

 앞서 내린 운영체제의 정의보다 조금 더 구체적인 표현을 해보자면 운영체제란 사람이 사용하는 응용소프트웨어가 컴퓨터의 하드웨어를 사용할 수 있도록 하기위한 시스템프로그램이다.

 

라고 표현할 수 있다.

  이 또한 맞는 표현이다.

 

 그리고 운영체제에 대한 정의를 내리려면 이정도는 표현해 주는 것이 조금은 구체적인 표현이 될 것이다.

 

 

 

컴퓨터 내부에 장착되어 있는 하드웨어(Hardware)는 기계에 불과하며, 사람이 사용하는 응용프로그램(, Word, Excel, game)이 제대로 작동되기 위해서는 이런 하드웨어를 사용해야하고 또한 설치되어야하며, 사용하는 사람과의 인터페이스 또한 필요하다. 그리고 컴퓨터가 부팅되면서 ROM-BIOS에서 제어권을 넘겨받아 컴퓨터의 입력, 출력등 모든 제어를 담당하게 된다. 그리고 무엇보다 중요한 것은 메모리상에서 실행되고 있는 프로세스들을 제어하고 관리한다는 것이다.

 

 운영체제를 단순히 한 문장으로 표현하자면 어렵지만 대부분 위와 같은 일들을 한다.

 

 이러한 운영체제를 다음과 같은 5부분으로 나눌 수 있다.

 

 

【커널(Kernel)모든 운영체제에 있다.

 항상메모리에 상주한다.

 

 장치들을 관리한다.

 


【쉘(Shell)커널과 사용자, 커널과 어플리케이션들과의 대화수단이 되는 프로그램
【파일시스템(File System)
데이터 및 장치관리의 객체가 되는 파일시스템 구조체

【시스템소프트웨어(System Software)커널외에 시스템 자원관리를 위한 소프트웨어

【어플리케이션(Application)apache, mysql, vsftpd등과 같은 수많은 응용소프트웨어들

 

위의 5가지를 다음과 같이 분류해 보기로 하자.

 

[가장좁은 의미의 운영체제]      : 커널

[보편적인 의미의 운영체제]     : 커널++파일시스템

[가장넓은 의미의 운영체제]     : 커널++파일시스템+시스템소프트웨어+어플리케이션

 

하지만 운영체제가 제대로 운영되려면 위의 요소들 가운데 커널과 쉘, 그리고 파일시스템은 갖추고있어야 한다.

 

 보다시피 운영체제의 가장 핵심적인 부분을 차지하는 것은 커널이다.

 

 우리는 리눅스에서 이러한 커널을 리눅스커널(linux kernel)”이라고 부른다. 이제 리눅스커널에 대해서 좀 더 자세히 알아보도록 하자.

 

리눅스커널이라는 것은 앞에서도 많은 얘기를 하였지만 컴퓨터의 가장 기본적인 각 장치들을 관리하고 제어하기 위한 소프트웨어이다.

 

 컴퓨터가 부팅되면서 GRUB과 같은 부트로더에 의해서 메모리로 로딩되어 컴퓨터가 꺼질 때까지 항상 메모리에 상주해서 컴퓨터의 각 장치들을 관리하고 제어하는 역할과 사용자들과 의사소통을 지속적으로 하게된다.

 

즉 리누즈토발즈가 개발해서 발표한 리눅스는 레드햇리눅스나 SULINUX와 같은 리눅스배포판형태 개념의 리눅스가 아니라 그속에 들어 있는 Kernel부분만을 의미하는 것이다.

 

 운영되고있는 리눅스시스템에서 커널이 어디에 존재하고 있는가?라고 묻는다면 필자는 /proc파일시스템이 바로 커널이 존재하고 있는 곳이다라고 말해야 한다.

 

 /proc에 들어가 보면 알겠지만 그 속에는 커널이라는 이름으로 온전히 존재하는 뭔가는 없다. 다만, 메모리에 어떤 것들이 실행되고 있는가를 우리 눈으로 확인할 수 있는 곳이 /proc 이기 때문에 그렇게 말한 것이다.

 

 또 다른 표현으로 리눅스커널의 모양을 직접 보게해달라고 한다면 필자는 다음과 같이 ls를 해보라고 말한다.

 

 

 

[root@sulinux /]#ls -l /usr/src/kernels/

합계 8

drwxr-xr-x 18 root root 4096  2  9 18:00 2.6.18-92.SUL2.fd-i686

[root@sulinux /]#

[root@sulinux /]#ls -l /usr/src/kernels/2.6.18-92.SUL2.fd-i686/

합계 808

-rw-r--r--  1 root root  48119  1 22 16:38 Makefile

-rw-r--r--  1 root root 165964  1 22 16:38 Module.kabi

-rw-r--r--  1 root root 339350  1 22 16:38 Module.symvers

drwxr-xr-x 26 root root   4096  2  9 18:00 arch

drwxr-xr-x  2 root root   4096  2  9 18:00 block

drwxr-xr-x  4 root root   4096  2  9 18:00 crypto

drwxr-xr-x 63 root root   4096  2  9 18:00 drivers

drwxr-xr-x 64 root root   4096  2  9 18:00 fs

drwxr-xr-x 19 root root   4096  2  9 18:00 include

drwxr-xr-x  2 root root   4096  2  9 18:00 init

drwxr-xr-x  2 root root   4096  2  9 18:00 ipc

-rw-r--r--  1 root root  56690  1 22 16:37 kabi_whitelist

drwxr-xr-x  5 root root   4096  2  9 18:00 kernel

drwxr-xr-x  5 root root   4096  2  9 18:00 lib

drwxr-xr-x  2 root root   4096  2  9 18:00 mm

drwxr-xr-x 41 root root   4096  2  9 18:00 net

drwxr-xr-x 10 root root   4096  2  9 18:00 scripts

drwxr-xr-x  4 root root   4096  2  9 18:00 security

drwxr-xr-x 18 root root   4096  2  9 18:00 sound

-rw-r--r--  1 root root  46172  1 22 16:38 symsets-2.6.18-92.SUL2.fd.tar.gz

drwxr-xr-x  2 root root   4096  2  9 18:00 usr

[root@sulinux /]#

 

위의 디렉토리에 존재하는 리눅스커널은 컴파일했던 소스이며 현재 사용되고 있는 것은 아니다.

 그리고 다음은 현재 메모리에 어떤 커널이 불리워져 있는가를 판단할 수 있는 GRUB부트로더의 설정파일이다.

 

 일단 보도록 하자.

 

[root@sulinux ~]#cat /boot/grub/grub.conf

default=0

timeout=5

splashimage=(hd0,0)/grub/splash.xpm.gz

hiddenmenu

password --md5 $1$w/FxeJ6H$EjTg1ecIOxYb4HOj1UBpR1

title SULinux Server 2.0 (2.6.27-92.SUL2.fd)

        root (hd0,0)

        kernel /vmlinuz-2.6.27-92.SUL2.fd ro root=LABEL=/ rhgb quiet vga=771

        initrd /initrd-2.6.27-92.SUL2.fd.img

[root@sulinux ~]#

 

위의 진하게 표시된 kernel이라는 행에 정의되어 있는 리눅스커널이 바로 부팅되면서 부트로더인 GRUB에 의해 불리워져서 현재까지 메모리상에서 상주하면서 실행되어 있는 리눅스커널이다.

 

 물론 이런 커널의 종류가 2개이상도 가능하지만 한번 실행에 하나의 리눅스커널만 불리워진다. 일단, 리눅스시스템상에서 우리 눈으로 확인할 수 있는 리눅스커널은 이정도하면 된 것 같다. 그렇다면 이러한 커널의 버전과 표현방식에 대해서 알아보도록 하자.

 

앞서 설명하였지만 커널의 주역할이라고 한다면 당연히 프로세스(Process)와 하드웨어 장치(자원)관리, 그리고 각 프로세스들 이 사용하는 장치들을 통제하는 제어관리 및 입출력 제어관리라고 할 수 있다.

 또한 커널자체 또는 각 프로세스들이 하드웨어 장치(device)사용을 가능케하는 궁극적인 주체가 바로 커널(kernel)이다.

 

 이제 이러한 리눅스커널의 버전에 대해서 알아보자. 리눅스커널의 정식 배포는 다음과 같은 형식으로 kernel.org라는 곳에서 배포된다. 다음은 kernel.org의 웹사이트이다.

 

 

 

 

 

 

 

 

http://www.kernel.org 메인페이지

0876c17eede4bcd98dfbe3557d7d5433_1661492140_727.png

 

 

http://www.kernel.org kernel소스 다운로드페이지

0876c17eede4bcd98dfbe3557d7d5433_1661492118_8828.png
 

 

리눅스커널을 공식배포하는 kernel.org 즉 위의 예에서도 알 수 있듯이 리눅스커널을 표현하는 가장 공식적인 방법은 다음과 같다.

 

) linux-2.6.30.tar.gz

2  : 맨앞 버전숫자. 커널의 주버전

6  : 중간 버전숫자. 커널의 부버전

30 : 세번째 버전 숫자. 커널의 패치레벨

 

 

2. 주버전

 

커널의 주된 버전을 의미하며 커널의 기능상 획기적이거나 커다란 변화가 있을 경우에 증가하게 된다. 앞서 설명하였듯이 1991년에 0.02버전이 처음 공개되었고 1994년에 1.0버전, 1996년에 2.0버전이 각각 공개되었다.

 

 결국 주버전은 아주 획기적인 변화가 없다면 좀 처럼 올리지 않는다.

 

 

3. 부버전

 

리눅스커널의 비교적 작은 변화(기능의 업그레이드 및 추가등)가 있을 경우에 증가시켜서 발표한다.

 

 1999년에 2.2버전, 2001년에 2.4버전, 그리고 2003년에 2.6버전이 각각 공개되어 2009년까지 2.6버전이 그대로 사용되고 있다.

 이와 같이 부버전의 숫자가 짝수이면 안정버전의 커널을 의미하는 것이고, 반면 부버전이 홀수이면 개발버전임을 의미한다.

 

 실제로 서비스를 위해서 사용하는 리눅스커널은 모두 부버전이 짝수인 안정버전들이다.

 

 당연히 리눅스배포판에 들어있는 커널 또한 부버전이 짝수인 안정버전이다.

 

 참고로 개발버전은 안정버전이 되기전에 개발자 및 테스터들이 검증하고 있는 버전을 의미한다.

 

 특별한 문제점이 발견되지 않고 일정시간이 지나면 개발버전을 한단계(1)올림하여 안정버전으로 발표한다.

 

 따라서 개발자나 테스터들은 안정버전 이전에 먼저 사용해보고자 한다면 개발버전을 다운받아서 사용해보면 된다. 하지만 개발버전 커널로 직접 서비스하는 것은 자제하는 것이 좋다.

 

 

4. 패치레벨

 

커널의 안정버전과 개발버전에 관계없이 배포된 커널의 해당버전에 대한 수정이 있었을 경우에 증가하게 된다. 2.6.29버전의 커널은 2.6이라는 커널이 29번째 수정되어 재배포(발표)되었다는 의미이다.

 

 앞의 그림에서 알 수 있듯이 kernel.org를 보면 알겠지만 커널버전이 2.6.30이라는 것은 2.6버전 커널이 발표된 이후에 작고큰 수정작업으로 인하여 30번 재배포하였음을 의미한다.

 

 이와 같이 패치레벨이라는 것은 릴리즈버전이라고도 하며 동일레벨의 커널을 몇번 재배포하였는가를 나타내는 번호라고 할 수 있다.

 

 

리눅스커널에 대해 설명하면서 한가지 당부하고 싶은 것은 단순한 사용자라면 몰라도 리눅스시스템을 관리하는 시스템관리자라면 본인이 관리하고 있는 리눅스의 커널버전과 배포판 버전은 정확하게 알고 있어야하고, 또한 확인할 수 있어야 한다는 것이다.

 

 

 

, 그럼 리눅스커널에 대해 설명하였다.

 이제 리눅스커널과 쉘의 역할구분에 대해서 좀 더 알아보도록 하자.

 

사용자(User)가 리눅스를 사용할 때에는 쉘(Shell)을 통하여 명령어를 주고 받으면서 사용한다.

 

 그렇다면 이러한 쉘은 리눅스시스템에서 도대체 어디에 존재하는 것이며 어떻게 우리 눈으로 확인해 볼 수 있을까? 참 곤란하고 힘겨운 질문이다.

 

 하지만 필자는 보여줄 수 있다.

 다음 예를 보라. 아래 보이는 프롬프트가 바로 쉘에게 명령어를 입력하는 명령어 입력창이다.

 

 그리고 “ls -l”은 사용자가 쉘을 통하여 커널에게 명령어를 입력하고 있는 것이다.

 

 

 

[root@sulinux ~]#

[root@sulinux ~]#ls -l

 

그리고 다음 예를 또 보도록 하자.

 

[root@sulinux ~]#ls -l /bin/bash

-rwxr-xr-x 1 root root 735004  7  9  2008 /bin/bash

[root@sulinux ~]#

 

위의 /bin/bash라는 것이 리눅스에서 가장 대표적으로 사용되고 있는 배쉬쉘(/bin/bash)이다.

 

 물론 리눅스에서 사용할 수 있는 쉘의 종류에는 이외에도 여러가지가 있다.

 즉 위와같이 사용자가 명령어를 입력하기만을 기다리는 이녀석이 쉘(Shell)이다.

 

 사용자가 입력한 명령어와 입력내용은 Shell이란 녀석이 Kernel에 전달하면 Kernel은 이를 받아들여 결과를 만들어 낸 후에 Shell에게 되돌려주게 되고 Shell은 다시 이 결과를 사람이 알 수 있는 형태로 만들어 출력하게 된다. 이를 간단히 정리하면 다음과 같다.

 

- 명령어 입력     : 사용자 --(문자)--> ---(2진수)--> 커널

- 명령어 수행 결과 : 커널 --(2진수)---> ---(문자)--> 사용자

 

이에 대한 예를들기 위하여 ls 라는 명령어를 사용자가 입력하여 그 결과를 사용자의 눈으로 확인하기 까지의 과정을 간략하게 설명해보자.

 

ls라는 명령어를 사용자가 문자형태로 쉘에게 전달한다.

 

 
② 쉘은 ls라는 명령어를 받아 들여서 바이너리(2진수)형태로 변환하여 커널에게 전달한다.

 

 즉 쉘은 커널(Kernel)이 인식할 수 있도록 binary형태로 만들어서 커널(Kernel)에게 사용자에게서 받은 명령어를 전달한다.

 

 

③ 커널은 binary형태로 전달된 명령어를 실행하여 그 결과를 만들어낸다. 그 결과 역시 binary형태로 된 결과값이다.

 

 그리고 이 결과를 쉘에게 전달한다.

 

 

④ 쉘은 Kernel로부터 전달 받은 binary결과값을 사용자가 알아볼 수 있는 문자형태로 콘솔(Console, 대부분 모니터를 의미함)로 출력한다.

 

 
⑤ 쉘이 문자형태로된 결과를 사용자는 확인하고 필요할 경우에 또 다른 명령어를 쉘에게 전달하여 위의 과정을 반복한다.

 

 

간단하지만 ls의 명령실행 절차에서  Kernel Shell의 역할분담에 대한 설명이 들어 있다.

 Kernel Shell에 대한 이해를 조금은 하였으리라 생각한다.

 

 이상으로 리눅스커널에 대한 얘기를 마무리하도록 하자. 물론, 리눅스커널에 대한 수없이 많은 언급과 설명이 계속될 것이다.

 

 리눅스를 배운다는 것은 리눅스라는 운영체제를 배운다는 의미도 되고, 리눅스커널을 다루는 방법을 배운다는 의미도 되기 때문이다.

 


관련자료

댓글 0
등록된 댓글이 없습니다.

공지사항


뉴스광장


  • 현재 회원수 :  60,043 명
  • 현재 강좌수 :  35,853 개
  • 현재 접속자 :  79 명