http://www.kocw.net/home/search/kemView.do?kemId=978503
이중 모드
사람의 고의 혹은 실수로 하나의 프로그램이 컴퓨터 전체에 치명적인 영향을 끼치지 못하도록 모드를 두 가지로 나눈 것을 이중 모드라고 한다. 레지스터에 모드를 나타내는 플래그를 통해 사용자/관리자 모드를 구분하며(monitor bit 0/1), 관리자 모드일 때만 특권 명령(privileged instructions)을 내릴 수 있도록 한다. 운영 체제 서비스 실행 중에는 관리자 모드이며 사용자 프로그램 실행 중에는 사용자 모드이다. 즉, Interrupt가 발생하여 ISR을 실행할 때는 관리자 모드이며 다시 복귀할 때는 사용자 모드가 되는 것이다.
** 특권 명령(privileged instructions)
STOP, HALT, RESET, SET_TIMER, SET_HW .... 등 시스템 전체에 영향을 끼치는 치명적인 명령들을 뜻한다. 이 중 STOP 명령은 컴퓨터의 동작 중단을 의미하며 다시 작동하기 위해서는 재부팅을 해야 한다. 어느 프로그램이든 STOP 명령을 내릴 수 있다면 아래 그림처럼 수강 신청 서버에 여러 접속자(o1, o2, o3, o4, ...)가 접속해 있을 때 o2라는 접속자가 STOP(process 정지) 명령을 내리면 다른 모든 사용자는 수강 신청 서버에서 어떤 일도 하지 못하게 된다. 이처럼 STOP과 같이 치명적인 영향을 끼칠 수 있는 명령(특권 명령)은 아무나 쓸 수 없게 해야 한다. 이것이 이중 모드가 있는 이유다.
** monitor bit가 0인데 user program에서 STOP 명령을 내리면 어떻게 될까?
: STOP을 읽으면 내부 Interrupt가 발생하고 CPU는 CPU의 monitor bit가 1인지 0인지 확인한다. 1이라면 해당 명령을 실행하지만 0이라면 OS에 있는 monitor bit가 0인데 user program에서 STOP 명령을 내렸을 때 작동하는 ISR을 동작하여 해당 명령을 내린 user program을 강제 종료한다.
이중 모드 흐름 예시
1. 부팅
- OS가 하드디스크에서 main memory로 올라감
- 올라가는 도중에는 전부 monitor bit가 1로 되어 있음 (관리자 모드)
2. 바탕화면
- OS가 대기 모드 일 때 monitor bit는 0이 되어 있음 (사용자 모드)
3. 더블 클릭으로 한글 파일 오픈
- HW interrupt 발생
- ISR 진행하기 전에 monitor bit를 1로 바꿈 (관리자 모드가 됨)
- ISR 완료하고 복귀하기 전에 monitor bit를 0으로 바꿈 (사용자 모드가 됨)
4. 한글 파일 저장
- interrupt 발생
- ISR 진행하기 전에 monitor bit를 1로 바꿈 (관리자 모드가 됨)
- ISR 완료하고 복귀하기 전에 monitor bit를 0으로 바꿈 (사용자 모드가 됨)
=> OS의 ISR 실행 전 관리자 모드가 되고 user program 복귀 전 다시 사용자 모드가 된다.
하드웨어 보호
하드웨어 보호는 입출력 장치 보호(input/output device protection), 메모리 보호(memory protection), CPU 보호(CPU protection) 세 가지로 나누어진다. 입출력 장치 보호는 사용자의 잘못된 입출력 명령으로부터 컴퓨터를 보호하는 역할을 하며 메모리 보호는 다른 사용자 메모리 혹은 운영체제 메모리에 접근하는 것을 막는 역할을 하고 CPU 보호는 한 사용자가 실수 혹은 고의로 CPU 시간을 독점하는 등의 행동을 저지하는 역할을 한다. 이 세 가지 보호를 통해 다중 유저 시스템이나 다중 프로그래밍 시스템에서 문제없이 안정적으로 컴퓨터가 잘 돌아갈 수 있는 기틀을 마련한다. 이중 모드든 하드웨어 보호든 다 OS가 제공하는 것이다. OS는 하는 일이 매~우 많다.
입출력 장치 보호
사용자의 잘못된 입출력 명령으로부터 시스템을 보호한다. (e.g., 프린트 혼선, 프린트 리셋, 다른 사람의 파일 읽고 쓰기) 입출력 명령을 특권 명령으로 하면 입출력이 필요할 때마다 OS에게 Interrupt를 걸어 요청을 보내야 하고 OS는 상황을 판단하여 잘못된 입출력 명령이라면 거부하는 방식으로 입출력 장치 보호를 할 수 있다. 따라서 입출력 장치 보호는 입출력 명령을 특권 명령으로 설정해 놓으면 된다. 참고로 사용자가 직접 입출력 명령을 내릴 경우 이를 두고 privileged insturction violation이라 한다.
메모리 보호
다른 사용자의 메모리 혹은 운영 체제 메모리로의 접근을 막는다. (e.g. 우연/고의로 다른 사용자 정보/프로그램에 대한 해킹, OS 해킹) 메모리 보호를 하는 방법은 MMU를 두어 다른 메모리 영역으로의 침범을 막는 것이 있다. MMU를 기준으로 메모리 보호를 하므로 MMU 설정은 당연히 특권 명령이다.
** MMU 만들기
CPU가 Address Bus를 통해 몇 번지부터 몇 번지까지의 Data를 요청하면 요청받은 위치에 있는 값들이 Data Bus를 통해 CPU로 전달된다. 이 방식은 요청받은 주소에 있는 정보를 모두 넘겨주는 것이므로 메모리 보호를 할 수 없다. 예를 들어 UP1이 UP2 위치에 있는 Data에 접근하더라도 아무 문제가 발생하지 않는다.
모든 Address Bus를 잘라버리면 당연히 요청받지 않은 Data를 넘겨줄 순 없으니까 메모리 보호는 되겠지만 UP1이 실행되는 동안은 자신의 메모리 범위에 있는 값들을 CPU에 넘겨줄 수 있어야 하는데, 이렇게 하면 CPU에 전달해야 할 나의 데이터까지도 전달해주지 못한다.
중간에 문지기(MMU)를 두고 user program1 실행 중 500~1000 사이 주소에 해당되는 값을 요청받으면 해당 요청을 통과시키고 500 미만 혹은 1000 초과의 주소를 Interrupt를 발생시키도록 한다. 이러면 user program은 자신이 속한 메모리 값만 CPU에게 전달할 수 있으므로 메모리 보호를 함과 동시에 CPU에게 자신의 데이터를 전달해 줄 수도 있다.
** 문지기(MMU)의 구조
문지기는 resistor로 구성되어 있다. base와 limit이 있으며 base~limit에 해당되는 주소는 통과시키고, base미만 혹은 limit 초과하는 주소는 CPU로 interrupt를 보내도록 한다. interrupt를 받은 CPU는 하던 일을 즉시 중지하고 OS 안에 있는 알맞은 ISR를 호출한다. 보통 해당 ISR은 잘못된 번지를 읽으려 한 프로그램을 강제로 종료한다. 문지기를 MMU(Memory Management Unit)라 하며 MMU가 Interrupt를 발생시키도록 하는 잘못된 접근을 'segment violation(영역 침범)'이라 한다.
CPU 보호
한 사용자가 실수 혹은 고의로 CPU 시간을 독점하는 것을 막는다. (e.g. while(True)) Timer를 두어 일정 시간 경과 시 타이머 인터럽트를 하여 다른 프로그램으로 강제 전환하면 독점을 막을 수 있다. 예를 들어, OS는 CPU 시간이 다른 모든 프로그램한테 골고루 분배되고 있는지 아니면 어느 한 프로그램에만 집중되고 있는지를 ISR에서 체크하도록 하고 오랜 시간이 지났는데도 한 프로그램에 CPU가 묶여있다면 CPU로 하여금 강제로 다음 프로그램을 실행하도록 조정하는 것이다.
'운영체제' 카테고리의 다른 글
운영체제 기본 6 - 프로세스 관리 (0) | 2023.01.19 |
---|---|
운영체제 기본 5 - 운영체제 서비스 (0) | 2023.01.19 |
운영체제 기본 3 - 인터럽트 기반 운영체제 (0) | 2023.01.19 |
운영체제 기본 2 - 컴퓨터의 역사 (0) | 2023.01.19 |
운영체제 기본 1 - 운영체제 서론 (0) | 2023.01.19 |