Post

[Pintos 10주차 키워드] user mode & kernel mode

User mode(유저 모드)와 Kernel mode(커널 모드)

User mode

  • User(사용자)가 접근할 수 있는 영역을 제한적으로 두고, 프로그램의 자원에 함부로 접근하지 못하도록 하는 모드
  • 하드웨어에 직접 접근 불가능
  • 코드를 작성하고, 프로세스 실행 가능
  • 유저 애플리케이션 코드가 실행

Kernel mode

  • 모든 자원(드라이버, 메모리, CPU 등)에 직접 접근 가능
  • 모든 CPU 명령 실행 가능
  • 하드웨어와 관련된 작업을 직접 수행


커널에서는 중요한 자원을 관리하기 때문에
사용자가 그 중요한 자원에 쉽게 접근하지 못하도록 보호하기 위해 2가지로 나누었다.

시스템에 중요한 영향을 미치는 연산은 커널 모드에서만 실행되도록 함으로써 하드웨어 보안 유지한다.
프로세스가 실행되는 동안 user modekernel mode를 반복적으로 전환된다.
user application은 시스템 서비스를 호출할 때 user mode에서 kernel mode로 전환한다.


user mode와 kernel mode의 전환

프로세스가 실행되는 동안에 프로세스는 수없이 user modekernel mode를 번갈아가며 실행이 된다.

  • user modekernel mode
    프로그램 실행 중에 interrupt(인터럽트)가 발생하거나 system call(시스템 콜)을 호출하게 되면
    커널 모드로 전환됨
  • kernel modeuser mode
    • 커널이 interruptsystem call을 직접 처리 (즉 CPU에서 커널 코드가 실행됨)
    • 처리가 완료되면 중단됐던 프로그램의 CPU 상태를 복원함

Q. 왜 user mode와 kernel mode가 나누어져 있을까요?

사용자 프로그램이 임의로 시스템 자원(메모리, 디스크 등)을 건드리지 못하게 하기 위해서다.
또 하나의 앱이 시스템 전체를 망가뜨리지 못하게 하기 위해서다.


그럼 이제 인터럽트와 시스템 콜에 대해서 알아보자!

인터럽트 (Interrupt)

  • 인터럽트는 언제든지 발생할 수 있다.
    • 인터럽트가 발생하면 CPU에서 즉각적으로 인터럽트 처리를 위해 커널 코드를 커널 모드에서 실행한다.
  • 입출력 하드웨어(키보드 등)나 예외상황이 발생하여 처리가 필요할 경우에 CPU에게 알려 처리할 수 있도록 한다.
  • 시스템에서 발생한 다양한 종류의 이벤트 또는 그런 이벤트를 알리는 메커니즘을 의미한다.
  • 입출력 하드웨어(키보드, 마우스 등)로 인한 인터럽트, 0으로 나누는 산술 연산에서의 인터럽트, 시간이 다 됐을때(timer 관련), 잘못된 메모리 공간에 접근을 시도할 때 발생함
    • 하드웨어 인터럽트 : I/O 디바이스에서 발생하는 인터럽트
    • 소프트웨어 인터럽트(trap) : 0으로 나누는 산술 연산, 잘못된 메모리 공간에 접근을 시도하는 경우에 발생하는 인터럽트

하드웨어 인터럽트는 하드웨어가 발생시키는 것이고,
소프트웨어 인터럽트는 프로그램 level에서 발생하는 인터럽트이다.

인터럽트 처리 과정

  1. 인터럽트 요청
  2. 프로세스 실행 중단 (실행 중이던 명령까지만 수행한다)
  3. PCB(Process Control Block)에 현재 프로세스 상태 저장, PC(Program Counter)에 다음 실행할 명령 주소 저장
  4. 인터럽트 벡터를 읽고 인터럽트 처리 루틴 실행 (인터럽트 처리)
  5. 처리 완료되면 저장해뒀던 프로세스 상태를 복구
  6. 인터럽트 해제 및 중단된 프로세스 다시 실행


시스템 콜 (System Call)

운영체제(OS)는 다양한 서비스를 수행하기 위해 하드웨어를 직접적으로 관리한다.
응용프로그램은 OS가 제공하는 인터페이스를 통해서만 자원을 사용가능하다.
OS가 제공하는 인터페이스를 시스템 콜이라 한다.

따라서 프로그램이 운영체제의 커널이 제공하는 서비스를 이용하고 싶을 때, 시스템 콜을 통해 실행한다.

시스템 콜 종류

  • 프로세스/스레드 관련
  • 파일 I/O 관련
  • 소켓
  • 장치 (ex: 키보드에서 입력받기)
  • 프로세스 통신

시스템 콜 & 인터럽트 예제 : 파일 읽기(Read)

인터럽트와 시스템 콜 예제


참고한 블로그 주소와 유튜브 영상

© sihyun. Some rights reserved.