컴퓨터환경은 여러 사람이 동시에 한 컴퓨터를 사용하는 경우가 많다. 그리고 하나의 컴퓨터 내에서 여러 프로그램을 수행하는 것이 일반적이다. 이 때 특정 컴퓨터나 프로그램에서 잘못된 동작으로 인해 다른 프로그램이 영향을 받는다면 이는 매우 위험하다. 이를 위해 이중모드라는 것이 나왔다.
이중모드는 아래와 같이 모드를 둘로 나누는 것이다.
- 사용자 모드
- 관리자 모드
관리자 모드에서는 특권명령이라는 것을 사용할 수 있다. 사용자 모드에서 특권 명령을 사용하려고 하면 CPU에서 내부 Interrupt를 발생시켜 해당 명령어를 요청한 프로그램을 강제로 종료시킨다.
- 어플리케이션 실행 중 모드 변화
- 컴퓨터 부팅 -> 관리자 모드
- 어플리케이션 실행과정 -> 관리자모드
- 어플리케이션 실행중 -> 사용자 모드
- Interrupt 발생 후 처리 과정 -> 관리자 모드
- Interrupt 처리 후 -> 사용자 모드
사용자가 하드웨어의 자원에 접근하는 것은 위험하다. 이런 경우에는 모두 관리자 모드로 운영체제에서 처리하도록 한다.
- Interrupt 발생 후 처리과정
- 하드웨어 Interrupt 발생 후 CPU로 Interrupt 신호 요청(사용자 모드)
- CPU에서 모드 플래그를 관리자모드값으로 설정
- 해당 Interrupt의 ISR으로 이동
- Interrupt 처리
- Interrupt 처리 완료 후 CPU의 모드 플래그를 다시 사용자 모드 값으로 설정
사용자 어플리케이션에서 입출력을 사용하려면 운영체제를 통해서 수행해야한다. 여러 프로그램이 동시에 Software Interrupt를 이용하여 입출력을 사용하려고 하면 운영체제 내부에서 순서를 정하여 혼선을 막는다.
- 여러 입출력 장치의 사용으로 인한 혼선
- 사용자가 자신의 데이터가 아닌 다른 사용자의 데이터에 입출력을 하는 일을 방지
어플리케이션이 자신의 메모리 영역이 아닌 운영체제나 다른 어플리케이션의 메모리 영역에 침범을 막는다.
- address bus 중간에 설치된 MMU 하드웨어 칩의 두 개의 레지스트러르 통해 해당 프로그램의 주소 범위를 저장한다.
- 저장한 범위 내의 주소값만 통과 시키고 범위 밖의 주소값이 MMU에 들어오면 Interrupt를 발생시켜 CPU에 신호를 준다.
- CPU는 그에 맞는 ISR로 이동하여 해당 프로그램을 강제로 종료시킨다.
하나의 프로그램이 CPU를 독점하게 되는 것을 방지하기 위해 Timer를 두어 일정 시가니 지나면 Timer Interrupt를 발생 시켜 각 프로그램의 CPU 점유 시간을 측정하여 분배되도록 조정한다.