[운영체제] 커널 모드, 사용자 모드 (feat. Mode bit)

이민선(Jasmine)·2023년 4월 17일
0

[CS] 운영체제

목록 보기
1/8
post-thumbnail

본격적으로 운영체제 포스팅 시작!!
오늘은 커널 모드와 사용자 모드에 대해 공부해볼 것이다.

1. 커널 모드 vs 사용자 모드

커널 모드(Kernel Mode)와 사용자 모드(User Mode)는 CPU가 실행하는 2가지 실행 모드이다. CPU에게 주어진 실행 권한에 따라서 구분한다.

커널 모드

운영 체제의 핵심 부분인 커널이 실행되는 모드로, CPU에게 가장 높은 실행 권한을 부여하는 모드이다. 커널이 하드웨어 자원에 직접 접근이 가능하고, 다양한 하드웨어 자원을 직접 관리할 수 있다. 따라서 운영체제의 핵심 기능(프로세스 관리, 파일 시스템, 메모리 관리 등)을 수행할 수 있으며, 모든 종류의 명령을 다 실행할 수 있다. 보안을 해칠 수 있는 중요한 명령어는 커널 모드에서만 수행 가능한 '특권 명령'으로 규정되어 있다.

엄격한 관리자 커널의 MBTI는 ESTJ일 것이다. 하드웨어 자원 관리는 나에게 맡겨! 하하하!

사용자 모드

애플리케이션 등 사용자 프로그램이 실행되는 모드로, CPU에게 가장 낮은 실행 권한을 부여하는 모드이다. 프로그램은 (커널과 달리) 하드웨어 자원에 직접 접근이 불가능하다. 자원 관리는 운영 체제가 해주는 거라구~! 사용자 모드에서는 제한적인 명령만을 수행할 수 있다.

그렇다면 이렇게 커널 모드였다가 사용자 모드였다가 왔다갔다 하도록 구분되는 이유가 뭘까?

2. 커널 모드, 사용자 모드로 왜 구분되나요?

사용자 프로그램의 잘못된 수행으로 다른 프로그램이나 운영체제에 피해가 가지 않도록 하기 위한 일종의 보호 장치로 볼 수 있다.

커널 모드에서는 커널이 실행되므로 하드웨어 자원에 직접 액세스 할 수 있지만, 사용자 모드에서는 프로그램이 실행되고 이들은 하드웨어 자원에 직접 액세스 할 수 없다. 이를 통해 사용자 프로세스에서 하드웨어에 접근하여 잘못된 명령어를 실행하여 시스템 전체가 다운되거나 치명적인 오류가 발생하는 것을 막을 수 있다. 이를 통해 운영 체제는 보안적으로 안전한 환경을 제공하고, 악의적인 프로그램의 공격에 대해 대응력을 높일 수 있다.

메모리 보호로 예를 들어보자. 만약 커널이 아닌 사용자 프로그램이 메모리에 직접 접근이 가능하다면...? 악의적인 사용자 프로그램이 다른 프로그램의 메모리 공간에 접근하여 중요한 정보를 탈취할 수도 있다.

따라서 커널만이 메모리에 접근 가능하게 함으로써 사용자 프로그램이 메모리와 같은 운영 체제의 핵심 부분에 침입하는 것을 방지할 수 있다.

커널 모드인지 사용자 모드인지는 모드 비트(mode bit)의 값에 따라 결정된다. 모드 비트가 0일 경우 커널 모드이고, 1일 경우에는 사용자 모드에서 실행 중이다. 따라서 CPU는 보안 관련 명령을 수행하기 전에는 모드 비트가 0인지 먼저 확인을 거친다.

프로세스가 수행되는 동안 커널 모드와 유저 모드 사이에서 계속 왔다갔다 하면서 실행된다.
사용자 모드에서 실행되고 있다가 커널 모드로 진입하는, 즉 CPU 실행 권한이 운영 체제에게로 넘어가는 케이스는 크게 2가지이다.

3. 사용자 모드에서 커널 모드로 진입하는 2가지 케이스

1. Exception 발생

사용자 프로세스가 잘못된 명령어를 실행하거나 0으로 나누기 등 오류가 발생하면, CPU는 해당 예외를 처리하기 위해 커널 모드로 진입한다. 이 때 CPU는 예외 처리를 위한 인스트럭션을 실행하며, 이 과정에서 프로세스의 사용자 모드에서 커널 모드로의 전환이 이루어진다.

2. 인터럽트 발생

인터럽트가 무엇인지 먼저 살펴보자.

  • 인터럽트
    컴퓨터 시스템에서 발생하는 이벤트 중 하나로, CPU가 현재 실행 중인 작업을 중단하고 해당 이벤트를 처리하기 위해 운영 체제 내부의 인터럽트 핸들러 함수를 실행하는 것을 말한다. 일반적으로 하드웨어에서 발생하는 이벤트이다.
    ex) 마우스 클릭, 키보드 입력, 디스크 I/O 완료 등

인터럽트에는 다양한 종류가 있는데, 인터럽트는 다음 포스팅에서 좀 더 자세히 다뤄볼 것이다. 여기에서는 인터럽트가 발생하면 사용자 모드에서 커널 모드로 진입한다는 사실에 좀 더 집중해보자.

운영 체제에는 인터럽트를 처리하기 위한 인터럽트 핸들러 함수가 등록 되어 있으며, 인터럽트가 발생하면 해당 핸들러를 실행하여 처리한다. 인터럽트 발생 시 CPU는 인터럽트 핸들러를 실행하며, 인터럽트 핸들러 실행이 끝나면 CPU는 중단되었던 작업을 다시 이어서 실행한다.

참고:
https://core.ewha.ac.kr/publicview/C0101020170313151303541331
https://kosaf04pyh.tistory.com/196

profile
기록에 진심인 개발자 🌿

0개의 댓글