유저/커널모드

Onni·2022년 1월 24일
0

📌 필요성

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

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

  • 커널 모드 : 운영체제가 CPU의 제어권을 가지고 운영 체제 코드를 실행하는 모드로서 이 모드에서는 모든 종류의 명령을 다 실행할 수 있다

  • 유저 모드 : 일반 사용자 프로그램이 실행되며 제한적인 명령만을 수행할 수 있다. 시스템에 중요한 영향을 미치는 연산은 커널 모드에서만 실행 가능하도록 함으로써 하드웨어의 보안을 유지할 수 있다.

📌 구조


커널모드와 유저모드의 구조는 위와 같다. 사용자가 직접적으로 하드웨어 장치를 제어한다면 큰 문제 발생할 수 있기 때문에 사용자 애플리케이션은 System Call 을 통해 직접적인 하드웨어 요청이나 중요한 시스템 요청을 한다.

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

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

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

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

📌 특징

✔ 유저모드

  • 사용자 애플리케이션의 코드가 실행 됨.
  • 시스템 데이터에 제한된 접근만이 허용, 하드웨어 직접 접근 불가.
  • 시스템 서비스 호출 시 유저모드에서 커널모드로 잠시 전환됨.
  • 스레드는 자신만의 유저모드 스택을 가짐.

✔ 커널모드

  • 모든 시스템 메모리에 접근할 수 있고 모든 CPU명령 실행 가능.
  • 운영체제 코드나 디바이스 드라이버 같은 커널모드 코드를 실행한다.

🧩 Reference

profile
꿈꿈

0개의 댓글