운영체제 : 유저모드와 커널모드

운영체제는 왜 모드를 두 개로 분리하는지?

시스템 보안 강화

  • 응용 프로그램이 운영체제의 중요한 부분을 수정하거나 접근 할 수 없도록 보호한다.
  • 악의적인 프로그램이 시스템 자원을 남용하는 것을 방지한다.

 

시스템 안정성 확보

  • 사용자 프로그램의 오류가 전체 시스템에 영향을 주지 않도록 한다.
  • 각 프로그램은 독립적인 공간에서 실행되어 다른 프로그램에 영향을 주지 않는다.

 

자원 관리 효율성

  • 운영체제가 모든 하드웨어 자원을 중앙에서 관리하고 조정 할 수 있게 한다.
  • 여러 프로그램이 제한된 자원을 효율적으로 공유 할 수 있게 한다.
    • 비록 자원이 무한하다고 할지언정 효율적 공유는 의미가 있다.

 

추상화 제공

  • 사용자는 복잡한 하드웨어 구조를 이해하지 않고도 시스템 자원을 이용 할 수 있다.
  • 프로그래머는 운영체제가 제공하는 시스템 콜과 같은 인터페이스를 통해 하드웨어에 접근 할 수 있다.

 

 

 

유저 모드

  • 일반 응용 프로그램이 실행되는 모드이다. 하드웨어와 시스템 자원에 직접 접근 불가하다.
  • 시스템 자원이 필요할경우 반드시 시스템 콜을 통해 커널 모드로 전환해야한다.
  • 각 응용 프로그램은 독립적인 가상 주소 공간을 갖는다.
  • 하나의 프로그램이 충돌해도 다른 프로그램이나 운영체제는 영향을 받지 않는다.

 

커널 모드

  • 운영체제의 핵심 부분이 실행되는 모드이다.
  • 모든 시스템 메모리와 하드웨어 자원에 직접 접근 할 수 있다.
  • 모든 CPU 명령어를 사용 할 수 있다.
  • 커널 모드에서 실행되는 모든 코드는 단일 가상 주소 공간을 공유한다.
  • 커널 모드에서 오류가 발생하면 운영체제 전체가 충돌 할 수 있다.

 

모드 전환 과정

유저 모드와 커널 모드 간의 전환은 다음과 같이 이루어 질 수 있다.

  1. 프로그램이 유저 모드에서 실행 중에 시스템 콜, 인터럽트, 라이브러리 함수 등의 호출로 인해 커널 모드로 전환된다.
  2. 커널 모드로 전환되면, 운영체제는 프로그램의 현재 CPU 상태를 저장한다.
  3. 커널 모드에서 필요한 작업을 수행한 후, 저장해둔 CPU 상태를 복원한다.
  4. 처리가 완료되면, 다시 유저 모드로 돌아가 프로그램 실행을 계속 진행한다.