Kernel(커널)

운영체제는 프로그램 중에서도 매우 큰 규모를 가진 프로그램이다.(리눅스의 소스 코드는 1천만 줄 이상) 운영체제는 여러 기능을 제공해주지만, 가장 핵심 되는 기능인 자원 접근 및 조작, 자원 보호, 자원 할당 등의 기능을 담당하는데, 이러한 기능을 담당하는 프로그램이 커널이다.

이중 모드와 시스템 호출

위에 서술했듯이 커널의 중요한 역할 중 하나는 자원 접근 및 조작인데, 이러한 기능은 응용 프로그램의 자원 접근을 대행하는 역할을 하게 된다. 대행 역할은 위해 이중 모드(dual mode)로써 구현되는데, 이중 모드는 커널 모드와 사용자 모드로 구분된다.

  • 사용자 모드(user mode): 운영체제 서비스를 제공받을 수 없는 실행 모드(커널 영역 코드를 실행할 수 없음)

    • 일반적인 응용 프로그램은 기본적으로 사용자 모드로 실행

    • 입출력 명령어와 같은 하드웨어 자원 접근 명령어는 사용자 모드에서 실행할 수 없음

  • 커널 모드(kernel mode): 운영체제 서비스를 제공받을 수 있는 실행 모드

    • 운영체제는 커널 모드로 실행되기 때문에 자원에 접근 가능

사용자 모드로 실행되는 프로그램이 자원에 접근하는 운영체제 서비스를 제공받기 위해선 운영체제에 요청을 보내 커널 모드로 전환되어야 한다. 이 요청을 시스템 호출(system call)이라고 하며, 시스템 호출은 일종의 소프트웨어적인 인터럽트다.

시스템 호출 작동 예시(응용 프로그램이 하드 디스크에 데이터를 쓰는 상황)

  1. 응용 프로그램이 사용 중이므로 사용자 모드로 실행 중인 상태

  2. 자원에 접근하기 위해 커널 모드로 전환하기 위해 시스템 호출

  3. 커널 모드로 전환

  4. 운영체제 내의 하드 디스크 데이터 저장 코드를 실행하여 하드 디스크에 접근

  5. 하드 디스크 데이터 저장 코드 실행 완료

  6. 커널 모드에서 사용자 모드로 전환

사용자 응용 프로그램은 실행 과정에서 운영체제 서비스들을 매우 빈번하게 사용하기 때문에 시스템 호출을 발생 시키면서 사용자/커널 모드 전환을 반복하게 된다.

참고자료

Last updated