on
운영체제 - 4
KOCW 운영체제 4강
양희재 교수님 강의를 듣고 쓴 글입니다.
Dual mode(이중 모드)
-
한 컴퓨터를 여러명이서 동시에 사용한다. Ex) 수강신청 서버 컴퓨터를 여러명이서 동시에 사용.
-
여러명이서 사용하는 상황에섯 한 사람의 고의/실수가 컴퓨터 전체에 영향을 미칠 수 있다.
→
STOP(CPU 중지 명령어)
와 같은 명령어는 치명적인데 이를 사용자가 쓰게 된다면 컴퓨터를 쓰는 다른 사용자들에게도 영향을 미치게 된다.
따라서 User program에서는 STOP과 같은 치명적인 명령어는 사용불가능하게 만들었다. → dual mode(이중 모드)
-
Dual mode : CPU가 동작하는 mode를 user/system 2가지로 나눔.
- user mode : 사용자가 컴퓨터 전체에 치명적인 영향을 주는 명령어를 못쓰게 하기 위해 생겼다.
- system mode : 관리자 모드. OS는 이 상태에서 명령을 내린다. Privileged mode, Supervisor mode, Moniter mode라고도 불린다.
-
Privileged Instruction(특권 명령어 : system mode일 때만 쓸 수 있다)
STOP, HALT, RESET, SET_TIMER, SET_HW…
Dual mode 구현 방법
CPU에 있는 register의 한 bit를 mode bit로 둬서 user/system mode를 구별하게 했다.
일반적인 프로그램의 실행 : program loading
- User mode인 상태.
- 사용자가 키보드, 마우스로 어떤 프로그램 실행시키려는 동작 수행.
- System mode상태가 됨. OS의 ISR 을 실행시켜서 HDD에 접근하기 위해.
- 다시 user mode.
- 모니터, HDD, 프린터와 같은 사용자가 원하는 동작을 수행.
- system mode. OS의 각각에 해당하는 ISR을 실행시키기 위함.
- 끝나면 다시 user mode.
예시 상황1 : Game 을 실행시키는 상황
- 바탕화면의 game을 클릭한다.
- game이 main memory에 load된다. → OS가 load해준다. 따라서 system mode에서 수행된 것이다.
- game이 main memory에 load됐으니깐 CPU는 game을 실행한다. → 2번 과정에서 OS가 game load해주고 다시 user mode로 바꿔준 상태였다.
예시 상황2 : 실행시킨 game의 score를 HDD에 저장하는 상황
중요한 것은 game이라는 user program이 직접 HDD에 접근해서 뭔가를 할 수가 없다는 것이다. 만약 이게 가능했다면, user program은 나의 컴퓨터에 있는 저장소에 다른 파일들에게도 접근이 가능하다는 것이기 때문이다. 따라서 이럴 땐 OS에게 부탁을 한다.
- game이 OS에게 저장해달라고 부탁을 한다. → system mode 1. S/W Interrupt. OS안에 ISR로 점프.
- 다시 user mode로 돌아와서 게임을 진행한다.
여기서 중요한 것은 game에서 요청을 하는 행위는 우리 같은 사용자들이 하는 것이다. 그리고 그 요청을 실제로 진행하는 행위는 OS같은 관리자들이 하는 것이다. 이 2가지 행위에 대해서 user mode, system mode로 나누는 것이다.
대부분의 CPU는 dual mode를 지원한다. 만약 user mode에서 STOP
과 같은 명령어가 쓰였다면, mode가 system mode인지 확인 후
1) CPU는 내부 Interrupt 발생으로 인식. 2) OS의 해당 ISR로 점프. 3) 해당 user program을 main memory에서 제거.(강제 종료)
결론 : user program은 HW resource를 쓰기 위해선 무조건 OS를 거쳐야 한다.
Hardware Protection
위 처럼 일반 사용자가 HW를 마음대로 사용하게 된다면 문제가 많이 발생한다.
Input/Output device protection
-
사용자의 잘못된 입출력 명령
-
다른 사람들의 입출력, 정보에 방해.
ex) 프린트 혼선, reset. 다른 사람의 파일 읽고 쓰기(HDD)
-
- 해결법
- 입출력 명령들을 privileged instruction으로 설정한다. IN / OUT
- 따라서 입출력을 하기 위해서는 OS에 요청을 해야한다. → system mode로 전환.
- OS가 해당 ISR로 점프해서 입출력 동작을 수행하면 다시 user mode로 전환.
만약 사용자가 IN/OUT 명령어를 직접 내렸을 경우, privileged instruction violation
이라고 한다. 이럴 때 OS는 해당 program을 강제종료 시킨다.
Memory protectioin
일반 user program이 우연 또는 고의로 main memory에 있는 다른 user program이나 OS의 코드를 침범하는 것으로 부터 보호.
User program1
이 OS와 다른 program에 침범하고 있는 그림이다. 특별한 명령이 없을 경우, 해당 program에서는 해당 영역만 접근해야 하므로 User program1
이 다른 영역에 접근하는 것을 막아야 한다.
-
해결법
MMU(Memory Management Unit)을 두어 다른 영역에 침범하는지 감시를 하게 했다. 다른 사용자 또는 OS영역에 접근하게 될 경우 → Segment violation
-
MMU :
base ~ limit
사이의 주소만 통과시켜 준다.base, limit
를 바꿔주는건 OS가 해준다.
User program1
이 실행될 때에는 해당 address의 범위내(addr 500~1000) 에서만 접근이 가능하게끔 MMU가 제어를 해준다. User program2
가 실행될 때에는 address 1000~2000 에만 접근이 가능하게끔 MMU가 제어를 해준다.
해당 program에 접근 안하고 다른 곳으로 접근하려고 할 때(Segment violation) MMU는 CPU에게 interrupt신호가 가게 한다. 그 후 CPU는 OS에게 해당 ISR로 점프하게 한 다음, 잘못된 주소로 가려고 했던 program을 강제 종료 시킨다.