[운영체제-양희재 교수님]4강 이중모드, 하드웨어 보호
이중모드(Dual mode)
- 요즘의 일반적인 환경
- 한 컴퓨터를 여러 사람이 동시에 사용
- 예) 서버 컴퓨터
- 한 사람이 여러 프로그램을 동시에 사용
- 한 컴퓨터를 여러 사람이 동시에 사용
- 문제점
- 고의 또는 실수가 발생하면 여러 사람이 사용 중인 컴퓨터 또는 한 사람이 사용 중인 여러 프로그램 전체에 영향을 미칠 수 있다.
- STOP, HALT, RESET 등의 명령어가 이러한 문제를 발생시킬 수 있다.
- 문제 해결
- 사용자(user) 모드와 관리자(supervisor) 모드를 분리해 사용자 프로그램이 치명적 명령(STOP, HALT, RESET 등)을 사용할 수 없도록 함
- 이를 이중 모드(dual mode) 또는 관리자 모드 또는 시스템(사용자의 반대) 모드 또는 모니터(감시자) 모드 또는 특권(priviliged) 모드라 한다.
- 특권 명령 (privileged instructions)
- 관리자 모드에서만 내릴 수 있는 명령
- 예) STOP, HALT, RESET, SET_TIMER, SET_HW 등
- 사용자 모드에서 특권 명령을 내리면 OS는 현재의 모드를 확인 → 사용자 모드임을 확인 → 내부 인터럽트 발생 → OS 내부의 ISR를 실행 → 해당 프로그램 강제 종료
이중모드는 어떻게 구현하는가
- CPU 안의 레지스터(비트의 모음)는 여러 상태를 저장하고 있음 ⇒ 플래그(flag)
- 그렇다면 이중모드를 나타내는 비트를 레지스터에 할당하자.
- OS 서비스 → 관리자 모드
- 사용자 프로그램 → 사용자 모드
- 일반적인 프로그램의 실행
- 프로그램을 메모리에 적재
- 사용자 모드로 프로그램 실행
- 사용자 프로그램이 소프트웨어 인터럽트를 발생시키면 이중모드 비트가 바뀌고 관리자모드로 들어간다.
- ISR을 실행한 뒤 종료되면 다시 이중모드 비트를 바꾸고 사용자 모드로 돌입
- 반복
하드웨어 보호
- 일반적으로 다중 프로그래밍 시스템에서 보호해야 할 세 가지
- 입출력장치
- 메모리
- CPU
- 한 서버 컴퓨터를 여러 사람이 공유하는 상황을 가정했을 때, 한 사람의 실수 또는 잘못이 서버 컴퓨터에 영향을 미쳐 다른 모든 사람이 피해를 입으면 안되므로 하드웨어를 보호해야 한다.
입출력장치 보호(Input/output device protection)
- 문제 상황 예) 서버 컴퓨터의 대용량 디스크에 개인 정보가 들어있는 경우 다른 사용자가 이에 접근을 시도하는 경우 등
- 해결 방법) 입출력 명령(IN, OUT)을 특권 명령으로 바꿈
- 사용자 모드에서 입출력 명령을 내리는 경우(Privileged instruction violation) ⇒ CPU가 관리자 모드로 바꾼 뒤 OS의 ISR 실행 ⇒ 사용자 모드가 특권 명령을 내린 것을 감지하고 강제 종료
- OS는 ISR 초기에 정당한 요청을 받은 것인지 확인하고, 그렇지 않은 경우 거부
- 사용자 프로그램이 입출력을 하고 싶은 경우 ⇒ OS에 부탁(소프트웨어 인터럽트) ⇒ OS가 대신 이를 처리하고 다시 사용자 모드로 전환
- 즉 입출력은 OS만 할 수 있다.
메모리 보호(Memory protection)
- 문제 상황 예) user 1 사용자 프로그램이 메인 메모리의 user 2 사용자 프로그램 영역 또는 OS 영역에 접근하는 경우 등
- 해결 방법) Memory Management Unit(MMU)
- CPU는 address bus를 통해 메모리의 어느 부분을 읽을지 정할 수 있고, 메모리는 data bus를 통해 CPU에 데이터를 보낸다.
- 따라서 address bus를 자르면 사용자 프로그램이 다른 영역에 접근하지 못할 것이다.
- 하지만 자기 영역에도 접근할 수 없다.
- 그러므로 address bus를 자르지 말고, 문지기(MMU)를 둔다.
- 문지기는 사용자 프로그램이 할당된 메모리 영역에만 접근하도록 관리한다.
- Memory Management Unit(MMU)의 역할
- MMU는 base와 limit을 저장하고 있어서 base와 limit 사이의 메모리 주소를 읽을 때만 통과시킨다.
- base와 limit은 OS가 설정하며, 설정을 위한 명령은 특권 명령
- base와 limit 사이를 벗어나는 메모리를 읽으려고 시도할 경우 CPU에 인터럽트 신호 전송 → 인터럽트 신호를 받은 CPU는 하던 일을 중지하고 OS 내의 ISR를 실행 → 잘못된 번지를 읽으려고 시도(Segment violation)한 프로그램을 강제 종료
- MMU는 base와 limit을 저장하고 있어서 base와 limit 사이의 메모리 주소를 읽을 때만 통과시킨다.
CPU 보호(CPU protection)
- 문제 상황 예) 사용자의 실수 또는 고의로 CPU를 독점하는 경우 다른 사용자 프로그램이 CPU를 사용할 수 없음
- 예) 무한 루프
- 해결 방법) 타이머 사용
- 타이머는 일정 주기로 CPU에 신호를 내보냄
- 타이머를 사용해 일정 주기마다 인터럽트를 발생 → OS의 ISR에서 CPU 시간이 모든 프로세스에 골고루 할당되는지, 한 프로세스가 독점 중인지 확인 → 만약 한 프로그램이 독점 중이라면 다른 프로그램으로 강제 전환
This post is licensed under CC BY 4.0 by the author.