개요

운영체제는 응용 프로그램과 하드웨어 간의 상호작용을 관리하고, 리소스를 효율적으로 활용하기 위한 다양한 작업을 한다. 

이 작업에 대한 방식을 두 가지(유저 모드와 커널 모드)로 나누어, 컴퓨터 자원을 안정적으로 보호한다.

이 두 가지 작업 모드에 대해서 알아보자.

 

 


Kernel이란

커널은 OS의 핵심이되는 프로그램으로, 시스템의 모든 것(하드웨어의 동작, 메모리, CPU 등)을 제어한다.

프로세스 간 통신과 System Call을 이용하여, 하드웨어 리소스에 접근하여 수행되는 응용 프로그램과 데이터 처리 사이의 중간다리 역할을 한다. 커널에는 모든 활성 프로세스를 추적하는 프로세스 테이블이 있어, 이들을 관리한다.

 

커널은 OS가 로드되면 메모리에 먼저 로드되고, OS가 종료될 때까지 메모리에 남아있다.

 

Monolithic Kernel의 종류에는 Unix, Linux, Open VMS 등이 있다.


User Mode와 Kernel Mode 

 

 

프로세스가 실행되는 동안 프로세스는 계속 유저 모드와 커널 모드를 왔다갔다 하면서 실행된다.

 

예를 들어 다음과 같은 작업이 있다.

  • 유저 모드에서 실행되고 있는 어플리케이션은 시스템 콜/인터럽트/라이브함수 등을 통해 I/O 요청을 한다.
  • 이는 컴퓨터 자원에 접근이 필요한 작업이므로, 인터럽트를 걸게되고 커널모드로 전환된다.
  • 장치 드라이버에서 I/O 장치에서 수행한 값을 커널에 return하고, 커널은 해당 값을 애플리케이션으로 리턴한다.
  • 커널 작업을 마친 후, OS는 해당 작업을 다시 유저 모드로 전환한다.

 

 

 


User Mode와 Kernel Mode 비교

  Kernel Mode User Mode
자원에 대한 접근 직접적으로 시스템 자원에 접근 가능하다 프로세스는 직접적으로 시스템 자원에 접근하지 못한다. 만약 자원에 접근하려면 System Call을 통해 커널 모드로 전환해야 한다.
가상 공간 모든 프로세스는 하나의 가상 공간을 공유한다. 모든 프로세스는 개별적인 가상 공간을 갖는다.
알려진 이름 privileged mode, system mode restricted mode, slave mode
실행 방법 커널모드 코드가 실행 유저 애플리케이션 코드가 실행

 

 

  • 유저 모드에서는 시스템 자원(파일 시스템, I/O 관리, 메모리/CPU 관리 등)이나 커널 프로그램에 직접적으로 접근이 불가능하다. 이 자원에 접근하려면 System Call을 통해 커널 모드로 변경해야 한다.
  • 우리가 보통 코드를 짜고 간단한 프로그램을 돌릴 때, 

 

 

 

sebinChu