이중 모드 (Dual mode)
보통 한 컴퓨터를 여러 사람이 동시에 사용하는 환경이거나, 혹은 한 사람이 여러 개의 프로그램을 동시에 사용하는 환경이 주어진다.
이 경우는 한 사람의 고의, 혹은 실수가 프로그램의 전체에 영향을 줄 수 있다.
만약, STOP, HALT, RESET 명령어와 같은 것을 사용하는 경우 치명적이다.
참고 : STOP 명령을 내린다면, 과연 어떤 일이 일어날까?
STOP 명령어가 든 프로그램이 메인 메모리에 올라가게 되고, 그 프로그램을 CPU가 읽어오게 된다.
그러면 그 CPU가 중지된다. 중지된 CPU를 깨우려면 (서버) 컴퓨터를 껏다 키는 방법 밖에는 없다.
따라서 일반 유저는 그러한 치명적 명령을 사용할 수 없도록 만들기로 했다.
그렇게 하기 위한 해결책으로, 모드를 2가지로 나누었다. 하나는 사용자 모드, 하나는 관리자 모드이다.
CPU가 OS에 있는 명령을 실행할 적에는 관리자모드에서 동작하도록 하고, 일반 유저의 메모리 영역에 있는 내용을 읽어왔을 경우는 그것이 사용자 모드에 있도록 한다.
참고) 관리자 모드 = 시스템 모드 = 모니터 모드 = 특권 모드
또 어떤 명령이 관리자 모드에서 가능할까? : 특권명령
- STOP, HALT, SET_TIMER, SET_HW
OS가 동작할 적에는 시스템 모드에서 동작한다.
그렇다면 컴퓨터 이중 모드는 어떻게 구현할까?
Register (Bit들의 모음)에 이중모드를 나타내는 비트를 추가한다.
만약 비트 값이 1이면 모니터 모드, 0이면 사용자 모드를 의미한다.
전원을 켜면 OS부팅 시작. 이 때는 비트 값이 1로 모니터 모드이다.
부팅이 끝난 후 우리가 마우스를 사용해서 게임 프로그램 아이콘을 더블클릭하면
OS가 프로그램을 메모리로 올려주고, CPU 레지스터에 비트를 0으로 바꿔서 사용자 모드로 전환.
게임을 하던 도중 현재까지의 스코어를 하드디스크에 저장하고 싶다면?
게임, 즉 user program이 직접 하드디스크에 접근할 수는 없다. 게임 프로그램이 OS에 부탁해서
software interrupt가 일어나고 OS 속 ISR 코드로 점프! 이때 다시 비트가 1로 바껴 모니터 모드가 된다.
OS 실행, 하드웨어/소프트웨어 인터럽트 발생 -> 관리자 모드
사용자 프로그램 실행, OS 서비스 끝 -> 사용자 모드
레지스터에 모드를 나타내는 플래그(flag), 비트? -- 이 과정 추후 추가해서 정리 (그림도 추가)
하나의 프로그램이 실행될 적에 여러 모드 전환되면서 동작하는 과정도 정리 -- 추후 추가해서 정리 (그림도 추가하기)
(비트가 바뀌고, 유저모드/시스템 모드 전환되고, 인터럽트 발생하는 등등의 과정임)
잘못된 시도를 하는 경우, 비트(플래그)를 통해 보호하는 과정도 정리
대부분 우리가 아는 CPU는 모두 이중모드를 지원한다
하드웨어 보호 : 입출력장치 보호, 메모리 보호, cpu 보호
입출력장치 보호
프린터 관련 예시. (첫번쨰 줄은 A 꺼를 찍고 두번째 줄은 B꺼를 찍는 경우 -- 보호가 안되었을 경우의 예시)
대용량 하드디스크 관련. (컴퓨터 사용자 중 다른애가 타인의 중요정보에 접근하지 못하도록!)
in/out 이라는 입출력 제어 명령 아무나 내리지 못하도록. (특권명령어로 지정), 대신 app의 부탁을 받은 OS가 명령을 내려줌.
유저모드에서 out 명령 내리면 -> 내부 인터럽트 실행 -> -> -- 과정 정리
SW 명령 인터럽트 (inter 명령 실행해도 같은 동작)
애플리케이션은 직접 하드웨어에 접근할 수없다 - 무조건 OS를 거쳐서. OS가 올바른 명령인지 판단하고 올바르지 않은 명령이면 거부함.
만약에 사용자가 입출력 명령을 직접 내렸을 경우에는 previleged instruction violation(특권 명령 침범)이라고 함.
메모리 보호
메모리 안에서 user1, user2, user3 프로그램들이 돌 때, 다른 유저 영역에 접근하지 않도록
(우연히 또는 고의로, 다른 사용자정보/ 프로그램에 대한 해킹, 운영체제 해킹)
어떤 해결법이 있을까?
1. Address 버스를 잘라버린다?
다른 사람 영역에 못들어간다 -- 안됨
2. 500~2천번지(임의의) 주소면 address 버스에서 문지기가 통과시켜주고, 아니면 통과안시켜준다.
base~ limit 사이의 번지가 아니면 interrupt 발생, 그 결과 잘못된 번지를 읽어오려고 한 프로그램을 정지시킨다.
-- segment violation (영역 침범)
문지기 : MMU (메모리 관리장치), base랑 limit 값은 OS에서 설정됨
CPU 보호
while(n = 1)
{
// ...
}
잘못된 프로그램이 들어간 경우에 (ex. 무한루프), 계속 user1의 프로그램만 실행되고 다른 사용자의 프로그램 실행이 불가
-> CPU 시간 독점
따라서, 이를 예방하기 위해, CPU 타이머를 두고 해당 시간이 지나면 인터럽트를 발생시킴. ISR에서 cpu시간이 다른 유저에게 골고루가는지 아니면 한사람에만 묶여있는지 판단. 후자라면, cpu가 강제로 다른 사용자의 유저프로그램으로 넘어가도록 전환시킴
참고 링크
https://yumyumlog.tistory.com/m/5?category=905121
2. 이중모드 (Dual Mode)
*kocw.net에 올라온 경성대학교 양희재 교수님의 운영체제 수업을 정리하는 글입니다. OS의 아주아주 기초적인 내용을 정리합니다. 아직 부정확하고 부족한 부분이 만습니다. 잘못된 부분이 있다
yumyumlog.tistory.com
[운영체제(OS)] 3. 이중모드와 보호
현재 컴퓨터 환경은 여러 사람이 동시에 한 컴퓨터를 사용하는 경우가 많다.(서버 컴퓨터) 그리고 그 외에도 하나의 컴퓨터 내에서 여러 프로그램을 수행하는 것이 일반적이다. 이 때 특정 컴퓨
velog.io
'IT > 학과 공부' 카테고리의 다른 글
[KOCW] 운영체제 3차시 - 프로세스 관리 (0) | 2021.11.08 |
---|---|
[KOCW] 운영체제 3차시 - 운영체제 서비스 (0) | 2021.11.08 |
[KOCW] 운영체제 2차시 - 고등운영체제, 인터럽트 기반 운영체제 (0) | 2021.10.27 |
[KOCW] 운영체제 2차시 - 운영체제 역사 (0) | 2021.10.27 |
[KOCW] 운영체제 2차시 - 운영체제 서론 (0) | 2021.10.26 |