한 컴퓨터를 여러 사람이 동시에 사용하는 환경에서 사용자의 실수 또는 고의적인 피해는 컴퓨터와 프로그램에 전체적으로 악영향을 끼친다. 이러한 피해를 줄이고자 이중모드를 사용한다.
이중모드는 사용자(user) 모드와 관리자(supervisor) 모드로 나뉜다.
(관리자 모드 = 시스템 모드 = 모니터 모드 = 커널 모드 = 특권 모드)
관리자 모드에서만 사용가능한 명령을 특권 명령(Privileged Instruction)이라 하며 특권 명령으로는 STOP, HALT, RESET, SET_TIMER와 같은 명령어들이 존재한다.
CPU 내부에 있는 레지스터(register)에는 플레그(flag)라 하는 상태를 나타내주는 bit가 존재한다. 이러한 bit를 활용하여 이중모드를 구분한다.
사용자 모드일때는 bit의 값이 1
관리자 모드일때는 bit의 값이 0
1: 게임 화면에서 저장 버튼 클릭 (사용자 모드, bit = 1)
2~3: 저장 버튼 클릭 시 발생하는 인터럽트를 처리 (관리자 모드, bit = 0)
4: 처리 완료 후 게임으로 복귀 (사용자 모드, bit = 1)
운영체제가 보호해야 할 운영체제는 크게 입출력장치 보호, 메모리 보호, CPU 보호로 나뉜다.
입출력장치 보호는 사용자의 잘못된 정보를 입력(In)/출력(Out)하는 명령을 막는 것을 말한다. (입출력은 관리자 모드로 정의된다)
메모리 보호는 다른 사용자의 메모리에 또는 운영체제 영역의 메모리 영역에 침범하려는 상황을 막는 것을 말한다.
사용자는 자신에게 할당받은 독립적인 메모리공간을 가지며, 해당 공간에만 접근해야 한다. (다른 프로세스의 간섭을 받지 않고 정상적인 작업을 진행할 수 있다) 이러한 이유 때문에 MMU는 사용자에게 일정 주소 영역을 설정해준다. 만약 다른 사용자가 맞지 않는 주소를 가지고 전급하게 된다면 trap을 발생시켜 메모리를 보호한다.
(MMU 설정은 특권 명령을 사용해야 하며 운영체제만 바꿀 수 있다)
운영체제는 사용자들(프로세스들)이 고르게 CPU를 사용할 수 있도록 보장해주어야 한다. 만약 한 사용자가 실수 또는 고의로 CPU를 독점(무한 루프 등...)할 경우 다른 사용자는 CPU를 사용할 수 없기 때문에 Timer를 설정하여 독점하는 상황을 피할 수 있도록 한다.
Timer를 설정한 뒤 사용자(프로세스)가 CPU를 할당받은 시간이 일정 구간을 넘어가게 되면 Timer가 인터럽트를 발생시킨다. 인터럽트를 받은 운영체제는 해당 사용자(프로세스)를 확인하고 다른 프로그램으로 강제 전환할지 판단한다.