CPU는 사용자 모드와 커널 모드, 둘 중 하나로 설정된다.
응용프로그램 코드는 사용자 모드에서 실행되며, 커널 코드는 커널 모드에서 실행된다.
이 말은 운영체제가 응용프로그램을 실행시킬 때는 사용자 모드로 설정되고, 응용프로그램이 커널 함수를 실행시키기 위해 시스템 호출을 하면 그 때 커널모드로 전환되며 커널 코드가 실행된다.
사용자 모드인지 커널 모드인지 구별하는 방법은 CPU에 내장되어 있는 모드 레지스터를 통해서 알 수 있다.
사용자 모드
사용자 모드일 때, 응용프로그램은 메모리 안에 존재하는 사용자 영역에 액세스 할 수 있으며 커널 영역에 접근 시
시스템 예외가 발생하고 응용프로그램을 종료시킨다.
커널 모드
커널 모드일 때, CPU는 모든 메모리 공간을 액세스할 수 있으며 특권 명령을 실행할 수 있다.
그리고 어떤 하드웨어든 접근과 제어가 가능하다.
이런 기능들이 가능하여 커널 모드는 특권 모드 혹은 감독자 모드라고 불린다.
사용자 모드에서 커널 모드로 전환되는 경우는 어떤 것들이 있을까?
1. 시스템 호출
2. 인터럽트 발생
Case 1)
CPU는 응용프로그램을 실행하기 위해서 사용자 모드로 설정되어 있다.
바로 응용프로그램에서 직접적으로 하드웨어로 접근 할 수 없으며, 이렇게 하는 이유는 응용프로그램 코드를 신뢰할 수 없기 때문이다.
커널 코드를 직접 작성하거나 수정을 못하게하고 커널 자원을 사용하는 시스템 호출 방법을 사용한다.
시스템 호출시, CPU는 사용자 모드에서 커널 모드로 전환되며 커널 영역에 접근할 수 있게 된다.
Case 2)
인터럽트는 하드웨어 장치가 CPU에게 물리적 신호를 보내는 것이다.
CPU가 인터럽트를 받게되면, CPU는 인터럽트의 요청을 처리하는 코드(인터럽트 서비스 루틴)를 실행한다.
해당 코드는 디바이스 드라이버, 커널 코드 내에 작성된다.
예를 들자면
1. 응용프로그램이 실행 중에 있다.
2. 사용자가 키를 입력한다.
3. CPU에게 인터럽트 신호가 전달되고 사용자 모드에서 커널 모드로 전환된다.
4. 키보드 인터럽트 서비스 루틴이라는 코드를 실행한다.(해당 코드는 커널 영역에 있는 디바이스 드라이버, 커널 코드가 있기 때문에 커널 모드로 전환되어야함.)
요약)
1. CPU는 2가지 모드, 사용자 모드와 커널 모드가 존재한다.
2. 사용자 모드에서 커널 모드로 전환의 경우는 시스템 호출과 인터럽트 발생이다.
'CS지식' 카테고리의 다른 글
[CS]운영체제 (1) | 2022.12.30 |
---|---|
프로세스 제어 블록(PCB)란? (0) | 2022.10.12 |
하드웨어 인터럽트란? (0) | 2022.10.04 |
시스템 호출이란? (0) | 2022.10.04 |