운영체제와 사용자 프로그램은 하드웨어, 소프트웨어 자원을 공유함에 따라 올바른 실행 보장을 위해 유저와 커널 모드로 구분할 수 있습니다.
보통 유저 모드에서 프로세스를 동작하고, 특정 상황(예외처리 등)의 경우 시스템콜에 의한 TRAP을 통해 커널 모드에서 처리한 후에 유저 모드로 전환되어 프로세스 과정을 마칩니다.
사용자 모드 (User Mode)
- 보호 모드라고도 함.
- 하드웨어를 직접 제어할 수 있는 CPU 명령어를 사용하지 못함.
- 응용 프로그램이 해당 모드로 동작합니다.
커널 모드 (Kernel Mode)
- 수퍼바이저 모드, 시스템 모드, 특권 모드 라고도 함.
- 하드웨어를 직접 제어할 수 있는 CPU 명령어를 사용 가능.
- 운영체제가 해당 모드로 동작합니다.
모드 구분 방법
커널 모드인지 사용자 모드인지는 모드 비트(mode bit)의 값에 따라 결정됩니다.
모드 비트가 1일 경우 사용자 모드이고, 0일 경우에는 커널 모드에서 실행 중입니다. 따라서 CPU는 보안 관련 명령을 수행하기 전에는 모드 비트가 0인지 먼저 확인을 거칩니다.
이를 지원하도록 현재 모드를 나타내기 위한, 모든 비트를 컴퓨터 하드웨어(CPU)에 추가합니다.
→ 사용자 모드 (1), 커널 모드 (0)
모드 구분 이유
시스템 보호를 위해 개념적으로 영역(공간)이 분리되어 실행됩니다.
- 사용자 공간: 메모리 일부, 안전한 CPU 작업 일부, 하드웨어 일부 등 제한적
- 커널 공간: 커널만이 접근할 수 있는 메모리 및 하드웨어 모든 영역
→ 해당 내용은 밑에서 더욱 자세하게 다룹니다.
특권 명령
- 일부 CPU 명령들을 특권 명령으로 지정하고 커널 모드에서만 실행되도록 함.
만약, 사용자 모드에서 특권 명령을 시도하면, CPU는 운영체제에 트랩을 걸게됩니다. - 사용자 모드에서 커널 모드로의 제어권이 전환되는 수단은 인터럽트, 트랩, 시스템콜 등이 있다.
예시: 커널 모드로의 전환, halt 명령, I/O 제어, 타이머 관리, 인터럽트 관리 등
Windows 에서는 다음과 같이 유저와 커널 모드가 나누어져 있습니다.
모드별로 구분하는 이유는 무엇일까?
사용자 프로그램의 잘못된 수행으로 다른 프로그램이나 운영체제에 피해가 가지 않도록 하기 위한 보호 장치로 볼 수 있습니다. (약간 윈도우의 안전 모드 부팅 같은 느낌.)
먼저 각 모드의 특징을 간략히 생각해보겠습니다.
커널 모드에서는 커널이 실행되므로 하드웨어 자원에 직접 액세스할 수 있습니다.
반면, 사용자 모드에서는 프로그램이 실행되고 하드웨어 자원이 액세스 할 수 없습니다.
이렇게 모드별로 구분하면, 사용자 프로세스에서 하드웨어에 접근하여 잘못된 명령어를 실행하여 시스템 전체가 다운되거나 치명적인 오류가 발생하는 것을 막을 수 있습니다. 이를 통해 운영 체제는 보안적으로 안전한 환경을 제공하고, 악의적인 프로그램의 공격에 대해 대응할 수 있습니다.
[예시]
메모리 보호를 예시로 들어보겠습니다.
만약, 커널이 아닌 사용자 프로그램이 메모리에 직접 접근이 가능하다면 악의적인 프로그램이 다른 프로그램의 메모리 공간에 접근하여 중요한 정보를 탈취할 수 있습니다.
→ 그러므로 커널만이 메모리 접근을 가능하게 함으로써 사용자 프로그램이 메모리, CPU와 같은 운영 체제의 핵삼 부분에 칩입하는 것을 방지할 수 있습니다.
사용자 모드에서 커널 모드로 진입 방법
CSAPP 8장을 봤다면 해당 내용을 이해하기 쉽습니다. 예외처리 부분을 잘 알면 좋습니다.
- Exception (예외) 발생
사용자 프로세스가 잘못된 명령어를 실행하거나 0으로 나누기 등 오류가 발생하면, CPU는 해당 예외를 처리하기 위해 커널 모드로 진입합니다. → 이때 CPU는 EOF(예외처리)를 위한 인스트럭션을 실행하여, 프로세스는 사용자 모드에서 커널 모드로 전환이 이뤄집니다. - 인터럽트 발생
인터럽트에는 다양한 종류가 있습니다. 흐름에 대해 대강 설명하도록 하겠습니다.
운영체제에는 인터럽트를 처리하기 위한 인터럽트 핸들러 함수가 등록되어 있고, 인터럽트가 발생하면 해당 핸들러를 실행하여 처리합니다. 과정은 다음과 같습니다.
- 인터럽트 발생 시 CPU는 인터럽트 핸들러를 실행합니다.
- 인터럽트 핸들러 실행이 끝나면, CPU는 인터럽트 핸들러를 실행합니다.
- 인터럽트 핸들러 실행이 끝나면 CPU는 중단되었던 작업을 다시 이어서 실행합니다.
인터럽트
인터럽트는 컴퓨터 시스템에서 발생하는 이벤트 중 하나로, CPU가 현재 실행 중인 작업을 중단하고 해당 이벤트를 처리하기 위해 운영 체제 내부의 인터럽트 핸들러 함수를 실행하는 것을 말합니다. 일반적으로 하드웨어에서 발생하는 이벤트이다. [ex) 마우스 클릭, 키보드 입력, 디스크 I/O 완료 등]
자세한 내용은 해당 블로그를 참고해주세요. https://blockdmask.tistory.com/69
[참고자료]
http://www.ktword.co.kr/test/view/view.php?no=6402
'크래프톤 정글(PintOS WEEK 9 ~ 14)' 카테고리의 다른 글
PintOS Project2: User Programs (Args) (0) | 2025.05.21 |
---|---|
WEEK 10 PintOS TIL(5월20일 화요일) (1) | 2025.05.21 |
WEEK 10 PintOS TIL(5월19일 월요일) (0) | 2025.05.20 |
WEEK 10 PintOS TIL(5월17일 토요일 ~ 5월 18일 일요일) (0) | 2025.05.19 |
WEEK 10 PintOS TIL(5월16일 금요일) (0) | 2025.05.17 |