운영체제가 두 개의 독룁된 모드로 동작하는 것을 의미합니다. CPU 내부의 레지스터의 모드 비트(Mode Bit)가 0이면 커널 모드, 1이면 사용자 모드입니다.
인터럽트 또는 트랩이 발생할 때마다 하드웨어는 모드 비트를 0으로 바꾸고 커널 모드로 전환됩니다.
커널 모드에서만 내릴 수 있는 명령이 특권 명령(Privileged Instruction)이라고 합니다. 사용자 모드에서 특권 명령을 사용하면 CPU에서 내부 인터럽트를 발생시켜 해당 명령어를 요청한 프로그램을 강제로 종료시킵니다.
시스템에 악영향을 끼칠 수 있는 일부 명령을 사용자 모드에서 사용 가능하다면 시스템에 손상을 미칠 수도 있습니다.
이중 모드는 운영체제의 기능 중에서 보호에 해당됩니다. 운영체제에서 보호할 대상은 입출력 장치, 메모리, CPU가 있습니다.
여러 입출력 장치의 사용으로 인한 혼선, 다른 사용자의 데이터의 접근하는 등의 문제가 발생할 수 있습니다.
이 때 입출력 명령을 특권 명령으로 설정합니다. 사용자가 입출력을 사용하기 위해서는 운영체제를 통해서 수행해야 한다는 의미입니다.
특권 명령인 IN/OUT을 사용자 프로그램이 직접 수행하려고 하면 운영체제는 Privileged instruction violation을 발생시켜 프로그램을 종료시킵니다.
사용자 프로그램이 주어진 메모리 영역을 넘어서는 것을 허용하게 되면 다른 프로그램의 메모리 영역을 침범해서 읽고 쓰는 것이 가능해집니다.
운영체제에서는 CPU와 메인 메모리 사이에 MMU(Memory Management Unit)를 두어 다른 메모리 영역을 침범하는 프로그램이 있는지 감시하게 합니다.
MMU는 프로그램이 자신의 메모리 영역을 넘어서는 곳을 요청하면 내부 인터럽트를 발생시켜 CPU에 신호를 줍니다. 그러면 CPU는 해당 프로그램 종료시킵니다. 이와 같은 잘못된 메모리 접근을 Segment violation이라고 합니다.
사용자 프로그램이 실수 또는 고의로 CPU를 독점하는 것을 방지해야 합니다. 다른 프로그램이 수행될 수 없기 때문이죠.
대표적인 예가 무한 반복입니다.
while(true)
{
// ..
}
위의 코드가 while문 내에 반복을 끝낼 조건이 없다면 무한으로 반복이 됩니다.
운영체제는 Timer를 두어 일정 시간이 지나면 타이머 인터럽트를 발생시킵니다.