삽질의 현장/- 리눅스

[Surro] :: 1. 리눅스 커널의 이해

shovelman 2013. 10. 29. 23:32

* 커널이란?

 

- 운영체제의 핵심 부분.

: DRAM(동적 RAM)에 상주하여 시스템의 구동에 필요한 환경설정과 수행되는 프로그램을 스케줄링하는

  소프트웨어.

+스케줄링 : 컴퓨터 시스템을 구성하고 있는 주기억장치, 입출력장치, 처리시간등의 시스템 자원을 언제 배분할 것인가를 결정하는 프로그램 기능.

- 시스템 자원 관리.

- 모든 시스템이 원할하게 작동할 수 있도록 제어하는 소프트웨어.

 

* 커널의 세부 기능

 

- Task 관리 (Task Management) : 물리적인 자원을 task라는 추상적인 자원으로써 제공해줌.

> task의 생성, 실행, 스케줄링, 프로세스간 통신등의 서비스를 제공.

 

+ Task : 컴퓨터 상에서 하나의 작업.

+ Process : 컴퓨터 상에서 하나의 작업을 이루는 과정.

+ Thread : 프로세스를 이루는 하나 하나의 개별 작업.

 

- 메모리 관리 (Memory Management) : 메모리를 세그먼트나 페이지라는 개념으로 제공해줌.

> 물리 메모리 관리, 가상메모리 관리 그리고 이들을 위한 세그멘테이션, 페이징, 페이지 부재 결함 처리등의 서비스를 제공.

 

- 파일 시스템 관리 (File System Management) : 디스크를 파일이라는 개념으로 제공해줌.

> 파일의 생성, 접근 제어, inode관리, 디렉토리 관리, 수퍼 블록 관리등의 서비스를 제공.

 

- 디바이스 관리 (Device Management) : 각종 장치를 디바이스 드라이버를 통해 일관되게 접속하도록 해줌.

> 디스크 터미널, CD, 네트워크 카드 등과 같은 주변 장치를 구동하는 드라이버들로 구성.

 

- 네트워크 관리 (Network Management) : 네트워크 장치를 소켓이라는 개념으로 제공해줌.

> 소켓 인터페이스, TCP/IP 같은 통신 프로토콜 등의 서비스를 제공함.

 

* 리눅스 커널의 구성

 

<간략화된 리눅스 커널의 구성>

 

- 응용 프로그램 : 사용자 모드에서 구동되는 프로그램.

- 시스템 콜 인터페이스 : 응용 프로그램에게 커널의 서비스를 제공하는 인터페이스.

   사용자가 커널 수준의 기능이나 모듈을 사용하기 위해서는 반드시 시스템 호출 ( 시스템 콜)을 이용하여야 한다.

- 커널 : 프로세스 관리, 메모리 관리, IPC, 파일 시스템, 네트워킹, 디바이스 드라이버 등.

- 하드웨어 : CPU, RAM, HDD, FDD, 네트워크 장치, 기타 여러 주변 장치.

 

 

<세부적인 리눅스 커널의 구성>

 

 

* 사용자 모드와 커널 모드

: 리눅스 커널은 프로그램을 실행할 때 커널모드사용자 모드에서 실행한다.

- 커널모드에서의 프로그램 : 직접적인 하드웨어 요청이나 중요한 시스템 요청을 할 때 사용되는 모드.

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

 

+ 리눅스 커널에서의 프로그램 수행과정.

-사용자 모드

1. 프로그램 실행

2. 하드웨어 장치 사용 요청

 

3. 커널에게 제어권을 넘김

-커널 모드

4. 하드웨어 장치 사용

 

5. 하드웨어 장치 사용 완료

6. 사용자 모드로 제어권을 다시 넘김

 

-사용자 모드

7. 다음 명령어 실행

 

* 리눅스 커널 소스

: 일반적으로 /usr/src/linux 디랙터리에 존재.

 

- 하부 디렉터리가 커널의 어떤 내용을 담고 있는가?

 

- document : 커널에 관계된 문서들이 있다. / 커널 프로그래머를 위한 기술적인 문서 파일들을 포함한다.

 

- arch : 아키텍처에 관련된 코드가 들어있다. / 포팅할 수 있는 각 프로세서 아키텍처에 의존적인 기능들이 구현 되어있다.

> 리눅스 커널 기능 중 하드웨어 종속적인 부분들이 구현된 디렉토리.

+ 포팅 : 실행가능한 프로그램이 원래 설계된 바와 다른 컴퓨터 환경에서 동작할 수 있도록 하는 과정.

 

- fs : 파일 시스템에 관한 소스토드들이 존재한다.

> 리눅스에서 지원하는 다양한 파일시스템 예)open(), read(),write()등의 시스템 호출이 구현된 디렉터리.

 

- init : 커널이 실행되기위한 모든 코드. / 커널이 시작하는데 필요한 함수들을 포함한다.

> 커널 메인 시작 함수가 구현된 디렉터리.

 

- ipc : 전통적 프로세스간의 통신. / 프로세스간 통신을 위한 함수들을 포함한다

> 리눅스 커널이 지원하는 프로세스간 통신 기능이 구현된 디렉터리이다.

.

- kernel : 커널의 핵심 코드, 시스템콜, 스케줄러. / 커널의 주요 시스템 호출과 기능들이 구현되어 있다.

>task 관리자가 구현된 디렉터리. task의 생성과 소멸, 프로그램의 실행, 스케줄링, 시그널 처리등의 기능이 구현되어있다.

 

- lib : 커널 라이브러리 함수. / 보조함수들과 스트링 관련, 압축 관련 함수들이 구현되어 있다.

 

- mm : 메모리 관리. / 메모리 관련 소스들이 있다.

> 메모리 관리자가 구현된 디렉터리. 물리 메모리, 가상 메모리, 테스크 마다 할당되는 메모리 객체 관리등의 기능이 구현되어 있다.

 

- net : 많은 종류의 network 프로토콜 지원. / 통신과 관련된 프로토콜 등이 구현되어 있다.

> 리눅스 커널이 지원하는 프로세스간 통신기능이 구현된 디렉터리이다.

 

 

<참조 : ESDP 표준교재>