본문 바로가기
computer science/운영체제

[운영체제] 커널 모드, 사용자 모드

by 박연호의 개발 블로그 2020. 2. 17.

이번 시간에는 커널 모드, 사용자 모드에 대해 공부해 보겠습니다.

 

우리가 흔히 사용하는 운영체제는 여러 프로그램이 동시에 실행될 수 있는 다중 프로그래밍 환경에서 동작합니다. 그러므로 각 프로그램들이 다른 프로그램의 실행을 방해하거나 프로그램 간에 서로 충돌을 일으키는 문제를 막기 위해 하드웨어에 대한 각종 보안 기법이 필요합니다.

 

하드웨어 적인 보안을 유지하기 위해 운영체제는 기본적으로 두가지 모드를 제공하는데 커널모드(kernel mode, system mode), 사용자 모드(user mode)가 이에 해당합니다.

 

커널 모드는 운영체제가 CPU의 제어권을 가지고 운영 체제 코드를 실행하는 모드로서, 이 모드에서는 모든 종류의 명령을 다 실행할 수 있습니다. 반면에 사용자 모드에서는 일반 사용자 프로그램이 실행되며 제한적인 명령만을 수행할 수 있습니다. 시스템에 중요한 영향을 미치는 연산은 커널 모드에서만 실행 가능하도록 함으로써 하드웨어의 보안을 유지하는 것입니다

 

커널 모드와 사용자 모드를 구분하기 위해 하드웨어 적으로 CPU 내부에 모드 비트(mode bit)를 사용합니다. 모드 비트가 0으로 세팅되어 있으면 커널 모드로서 모든 명령을 수행할 수 있고, 모드 비트가 1로 세팅되어 있으면 사용자 모드로서 제한된 명령만을 수행할 수 있습니다.

 

그렇기 때문에 CPU는 보안과 관련된 명령을 수행하기 전에는 항상 모드 비트는 조사해 모드 비트가 0으로 세팅된 경우에만 그 명령을 수행하게 됩니다.

 

프로세스는 두 모드중 하나의 모드만을 가지는 것이 아니라 실행되는 동안 수없이 유저모드와 커널모드를 반복하면서 실행됩니다. 

 

예를 들어 프로세스가 사용자 모드에서 작업을 수행하다 하드웨어 접근 등 보안에 필요한 중요한 명령을 수행해야 할 경우에는 시스템 콜(소프트웨어 인터럽트)을 통해 운영체제에게 서비스를 대신해 줄 것을 요청하게 됩니다. 그러면 CPU의 제어권은 다시 운영체제로 넘어가게 됩니다. 인터럽트가 발생할 때에는 모드 비트가 자동적으로 0으로 세팅되어 필요한 작업을 수행하고 요청된 작업이 끝나게 되면 모드 비트는 다시 1로 만들어 사용자 프로그램에게 CPU를 넘겨주게 됩니다.