CS/OS

커널 Kernel

YongE 2025. 6. 4. 16:10

커널?


이 한 달 동안 배웠던 부분은 장기기억으로 넘기고, 부족한 부분은 채우기 위해서 공부하고 있다. 이번엔 운영체제의 중요 요소인 커널에 대해서 기록하려고 한다.

운영체제의 핵심 요소

커널은 운영체제의 가장 핵심적인 부분으로, 컴퓨터 시스템의 모든 것을 완전히 제어하는 컴퓨터 프로그램이다. 하드웨어와 소프트웨어 구성 요소 간의 상호작용을 관리하고, 항상 메모리(RAM)에 상주하면서 운영체제 코드의 일부분 역할을 한다. 커널은 운영체제를 구성하는 가장 중요한 부분으로, 어떻게 구성하느냐에 따라 컴퓨터 전체의 성능이 달라진다.

커널의 메모리 보호

커널의 핵심 코드는 응용 소프트웨어나 운영체제의 다른 중요하지 않은 부분들로부터 접근이 차단된 별도의 메모리 영역에 로드된다. 이 영역을 _커널 영역_이라고 부른다. 이러한 보호된 커널 공간에서 프로세스 실행, 하드 디스크 같은 하드웨어 장치 관리, 인터럽트 처리 등의 작업을 수행한다.

이중 모드


이중 모드는 CPU가 명령어를 실행하는 모드를 사용자 모드커널 모드로 나눈 것이다.

그렇다면 왜 이렇게 나눈 것일까? 사용자 모드와 커널 모드를 분리하여 민감한 시스템 리소스를 무단 접근이나 악성 소프트웨어로부터 보호해야 하다. 또한
사용자 모드 프로세스에서 오류가 발생하거나 충돌해도 커널 모드나 다른 프로세스에 영향을 주지 않는다. 게다가 커널 모드를 통해 운영체제가 시스템 리소스를 효율적으로 관리하고 메모리를 할당하며 프로세스를 스케줄링할 수 있다!

사용자 모드

사용자 모드는 일반적인 사용자 수준 응용프로그램과 프로세스가 실행되는 모드다. 이 모드에서는 다음과 같은 특징을 가진다.

  • 시스템 리소스와 명령어에 직접 접근할 수 있는 권한이 제한된다.
  • 보안과 안정성을 위해 사용자 수준 코드가 특정 권한 있는 작업을 직접 수행할 수 없다.

워드 프로세서, 웹 브라우저, 게임 등 최종 사용자가 상호작용하는 소프트웨어들이 해당된다.

커널 모드

커널 모드는 운영체제의 커널 코드가 실행되며 하드웨어에 대한 무제한 접근 권한을 가진다. 권한 있는 명령어를 실행할 수 있다.
다시 말해, CPU는 커널 모드에서 운영체제가 제공하는 서비스가 필요한 요청을 처리할 수 있다.

시스템 콜


내가 사용하고 있는 특정 프로그램이 저장 장치에 데이터를 저장하거나 입출력을 해야 하는 경우가 있을 것이다. 그런데 실행 중인 모든 프로그램은 사용자 모드에서 동작한다. 게다가 앞선 작업들은 운영체제의 개입이 필요한 작업이다.

그렇다면 커널 모드에서 동작할 필요가 있다. 운영체제에게 요청을 보내서 CPU가 커널 모드로 동작하도록 해야 한다.

다시 말하자면, 응용프로그램이 운영체제에게 나 SSD에 데이터를 저장해야 하는데 도와줘~"라고 부탁한다.
그럼 운영체제는 곧바로 CPU가 커널 모드로 명령어를 실행하도록 하여 데이터를 SSD에 저장한다. 그리고 CPU는 다시 응용 프로그램으로 돌아가 사용자 모드에서 실행을 계속한다.

운영체제 서비스를 제공받기 위해 보내는 요청을 시스템 콜이라고 한다.

시스템 콜 동작 과정

시스템 콜의 동작 과정은 다음과 같다.

  1. 시스템 콜 요청 응용프로그램이 해당 함수를 호출하여 시스템 콜을 요청한다.
  2. 커널 공간으로 컨텍스트 전환 소프트웨어 인터럽트나 특별한 명령어를 사용하여 사용자 모드에서 커널 모드로 전환한다.
  3. 시스템 콜 식별 시스템이 인덱스를 사용하여 시스템 콜을 식별하고 해당 커널 함수의 주소를 찾는다.
  4. 커널 함수 실행 시스템 콜에 해당하는 커널 함수가 실행된다.
  5. 반환값 준비 커널 함수가 작업을 완료한 후 사용자 응용프로그램을 위한 반환값이나 결과를 준비한다.
  6. 사용자 공간으로 컨텍스트 전환 실행 컨텍스트가 커널 모드에서 사용자 모드로 다시 전환된다.
  7. 응용프로그램 재개 응용프로그램이 시스템 콜의 결과나 효과와 함께 중단된 지점부터 실행을 재개한다.

단순화한 시스템 콜 다이어그램

운영체제(+커널)은 왜 배워야 할까?


운영체제는 시스템 자원과 응용 프로그램의 상호작용을 관리하는 소프트웨어다. 우리가 사용하는 모든 프로그램, 예를 들어, 워드 프로세서, 게임, 웹 브라우저 등은 운영체제과 소통하며 실행된다. 운영체제에 대해 이해하고 있다면 컴퓨터와 프로그램이 동작하는 과정을 더욱 깊은 이해를 도모할 수 있다. 이어서 서비스를 개발하는 중에 발생한 문제의 근본적인 원인을 찾아내 해결할 수 있다.

요약하자면 운영체제를 알고 이해한다면 더 전문적인 엔지니어에 한 걸음 가까워질 수 있다. 이제는 에러 로그만 봐도 대강 어떤 문제인지 알 수 있지만 여전히 내가 겪어본 적 없는 저레벨 수준의 문제를 마주한다면 곧바로 해결할 수 있다고 자신할 순 없다. 그래서 더더욱 겸손한 자세로 배워나가고자 한다.

반응형