커널(kernel)

수연이
POCS
Published in
4 min readAug 26, 2019

운영체제의 핵심 부분으로서, 운영체제의 다른 부분 및 응용 프로그램 수행에 필요한 여러가지 서비스를 제공한다. ( 운영체제의 중요한 부분이다 )

애플리 케이션들과 하드웨어를 연결하는 인터페이스를 제공한다.

커널의 역할

  • 보안 : 커널은 컴퓨터 하드웨어와 프로세스의 보안을 책임진다.
  • 자원 관리 : 한정된 시스템 자원을 효율적으로 관리하여 프로그램의 실행을 원활하게 한다.

: 프로세서 관리, 프로세스 관리, 메모리 관리, 파일시스템 관리, 디바이스 제어, 네트워크 관리

  • 추상화 : 같은 종류의 부품에 대해 다양한 하드웨어를 설계할 수 있기 때문에 하드웨어에 직접 접근하는 것은 문제를 매우 복잡하게 만들 수 있다. 일반적으로 커널은 운영체제의 복잡한 내부를 감추고 깔끔하고 일관성 있는 인터페이스를 하드웨어에게 제공하기 위해 몇 가지 하드웨어 추상화(같은 종류의 장비에 대한 공통 명령어의 집합)들로 구현된다. 이 하드웨어 추상화는 프로그래머가 여러 장비에서 작동하는 프로그램을 개발하는 것을 돕는다. 하드웨어 추상화 계층(HAL)은 제조사의 장비 규격에 대한 특정한 명령어를 제공하는 소프트웨어 드라이버에 의지한다.

운영체제의 커널은 자원을 효율적으로 관리하기 위해서 CPU 스케줄링, 메모리 관리, 입출력 관리, 파일시스템 관리 등의 업무를 수행한다.

유저 모드 와 커널 모드

커널에서 중요한 자원을 관리하기 때문에, 사용자가 그 중요한 자원에 접근하지 못하도록 모드를 2가지로 나눔.

유저모드

  • 사용자(user)가 접근할 수 있는 영역을 제한적으로 두고, 프로그램의 자원에 함부로 침범하지 못하는 모드.
  • 사용자는 유저모드에서 코드를 작성하고, 프로그램을 실행할 수 있다.
  • 시스템 데이터에 제한된 접근만이 허용, 하드웨어 직접 접근 불가.

커널 모드

  • 모든 자원(드라이버,메모리,CPU등)에 접근, 명령을 할 수 있다.

사용자가 직접적으로 하드웨어 장치를 제어한다면 큰 문제가 발생할 수 있기 때문에 유저 애플리케이션은 system call을 통해 직접적인 하드웨어 요청이나 중요한 시스템 요청을 한다.

시스템 호출(system call)

운영체제의 커널이 제공하는 서비스에 대해, 응용 프로그램의 요청에 따라 커널에 접근하기 위한 인터페이스이다.

보통 C나 C++과 같은 고급 언어로 작성된 프로그램들은 직접 시스템 호출을 사용할 수 없기 때문에 고급 API를 통해 시스템 호출에 접근하게 하는 방법이다.

시스템 호출 과정

  1. 애플리 케이션 코드 실행

read(fd,buffer,n);

2. 라이브러리에서 CPU의 특정 레지스터 안에 read 시스템 호출을 뜻하는 호출 번호와 파라미터를 삽입한다.

3. sysenter 명령을 실행하면 CPU는 커널 모드로 바뀐다.

4. trap 발생

system_call_handler() 실행

5. 현재 CPU의 레지스터들을 커널 스택에 복사하고, CPU 의 특정 레지스터를 읽어 시스템 호출 번호를 알아낸다.

6. 시스템 호출 번호에 있는 커널 함수를 부른다.

sys_read();

7. 커널 함수가 해당하는 디스크를 작동시켜서 데이터를 읽어와서 buffer에 저장한다.

8. 커널 스택에 저장해둔 레지스터들을 CPU에 복귀 시킨다.

9. 커널모드를 빠져나감.

10. 버퍼에 있는 데이터를 읽는다.

출처

https://blockdmask.tistory.com/69#recentEntries

https://genesis8.tistory.com/241

--

--