한 컴퓨터를 여러 사람이 동시에 사용하는 환경
또는
한 사람이 여러 프로그램을 동시에 사용하는 환경
공유한다는 특성 덕분에 한 사용자의 고의 또는 실수가 전체 환경에 영향을 끼친다는 단점이 있다. (HALT, STOP, RESET 등)
따라서 전체 환경에 치명적인 영향을 끼칠 수 있는 STOP 등의 명령은 사용자 모드 (User Mode)에서 사용할 수 없고 관리자 모드 (Supervisor Mode)에서만 사용할 수 있다.
이렇게 사용 가능한 명령에 따라 모드를 나눠놓은 환경을 이중 모드 (Dual Mode)라고 한다.
관리자 모드는 시스템 모드 (System Mode), 모니터 모드 (Monitor Mode), 특권 모드 (Priviliged Mode) 등으로도 부를 수 있다.
관리자 모드에서만 사용할 수 있는 명령을 특권 명령 (Privileged Instructions)이라고 한다.
이중 모드는 현재 어떤 모드가 켜져있는지를 나타내는 플래그 (Flag)의 변경에 따라 전환된다. 플래그는 레지스터에 위치해있으며, 실행되는 프로그램의 유형 또는 사용자의 동작에 따라 사용자 모드와 관리자 모드가 번갈아가며 실행된다.
일반적으로 메모리에 프로그램이 적재되면 사용자 모드로 설정된다.
키보드, 마우스, 프린터 사용 등의 인터럽트가 발생하면 ISR 처리를 위해 관리자 모드로 전환되고 처리가 끝나면 다시 사용자 모드로 전환된다.
또한 예를 들어 게임을 실행했다고 해보자.
게임은 사용자 모드 상에서 실행된다.
게임의 세이브 파일을 HDD에 저장하려고 하면 인터럽트가 발생하고 관리자 모드로 변경되어 세이브 파일을 저장한다.
저장이 끝나면 다시 사용자 모드로 복귀하여 게임이 마저 실행된다.
이중 모드의 목적 중 하나는 하드웨어의 보호이다.
로 분류할 수 있다.
프린트 출력 목록을 지워버린다던지, HDD에 있는 다른 사람의 파일을 읽고 쓰려고 한다던지 등 사용자의 잘못된 입출력 명령에 대응한다.
또는 여러개의 입출력 장치의 사용으로 인한 혼선을 방지한다.
입출력 명령을 특권 명령으로 설정해놓는다. 따라서 입출력 명령을 실행하면 관리자 모드로 전환되어 운영체제에 요청하고, 운영체제가 입출력 명령을 실행한다. 모든 과정을 마친 후 다시 사용자 모드로 복귀한다.
운영체제가 입출력 명령의 순서를 조절하고 올바른 요청이 아니라면 운영체제가 명령을 거부한다.
만일 관리자 모드로 전환하지 않고 사용자 모드에서 입출력 명령을 직접 내릴 경우 운영체제가 명령을 거부하는데, 이를 Privileged Instruction Violation이라고 한다.
메모리에는 다른 여러 사용자의 어플리케이션이 동시에 존재한다.
메모리 보호는 우연히 또는 고의로 다른 사용자의 메모리 또는 운영체제 영역의 메모리에 접근하거나, 해킹을 시도하는 경우 등에 대응한다.
다음과 같이 CPU와 메모리 사이에 MMU (Memory Management Unit)를 둬서 문지기의 역할을 맡긴다.
메모리에 적재되어있는 여러 프로세스는 각각 시작 주소 (Base) ~ 끝 주소(Limit)를 갖고 있다. CPU는 이 주소값 범위 이내에서 메모리 영역에 접근한다.
만일 현재 참조하고있는 메모리 주소 범위를 벗어나는 영역에 접근하려고 하면 MMU 상에서 거부되는데 이를 Segment Violation이라고 한다.
예를 들어, 사용자가 참조하고자 하는 영역의 주소가 1000 ~ 2000 이라고 하자.
사용자가 사용하는 중에는 운영체제가 특권 명령을 통해 해당 주소 범위를 MMU에 설정하게 된다. 즉, MMU의 Base는 1000, Limit은 2000이 된다.
MMU는 이 범위 안에서 들어오는 요청 만을 통과시킨다.
범위 밖에서의 요청이 들어오면 인터럽트가 발생하고, CPU는 알맞은 ISR로 이동하여 해당 프로그램을 강제로 종료시킨다. (Segment Violation)
사용자가 실수 또는 고의로 CPU 시간을 독점한다면 다른 사용자의 프로그램 실행이 불가능하다. 독점의 대표적인 경우는 무한 반복이다.
이를 해결하는 방법은 타이머를 두는 방식이 있다.
타이머를 두고 일정 시간이 경과되면 타이머 인터럽트를 발생시키고, CPU는 알맞은 ISR로 이동하여 다른 프로그램으로 강제 전환시키게 된다.
이렇게 각 프로그램의 CPU 점유 시간을 적절하게 분배하여 CPU를 보호할 수 있다.