Kim Seon Deok
[OS] Interrupt, Dual mode, HW Protection 본문
인터럽트
현대 운영체제는 인터럽트 기반 시스템이다.
전원이 켜지면 ROM에서 Post프로그램을 읽어 부트로더를 실행하고 하드디스크에 있는 os를 메인메모리의 RAM으로 로드해 os가 resident상태가 되면 다른 프로그램을 기다리도록 만든다.
하드웨어 인터럽트
마우스가 cpu의 인터럽트 선에 전기신호를 보냄 → cpu는 하던 일을 중지하고 os 안에 들어있는 mouse interrupt service routine으로 jump → 특정 프로그램을 더블클릭하면 그 프로그램을 하드디스크에서 메인메모리로 가져옴
os안에는 여러 개의 프로그램이 들어있다. 키보드나 마우스 등의 하드웨어를 작동시키면 인터럽트가 발생하는데, 인터럽트가 걸렸을 때 service routine이 동작한다. 인터럽트가 끝나면 cpu는 다시 대기한다.
소프트웨어 인터럽트
hwp 프로그램이 하드디스크를 읽으려면 소프트웨어 인터럽트를 건다. → hwp프로그램에서 os의 interrupt service routine으로 jump → os의 해당 코드가 실행되면서 하드디스크에있는 hwp를 메인메모리로 읽어옴 → 실행이 끝나면 hwp프로그램으로 돌아옴
하드웨어 인터럽트
인터럽트 결과 os 내의 특정 코드 실행(ISR) → ISR 종료 후 다시 대기상태로 복귀
소프트웨어 인터럽트
유저 프로그램이 실행되면서 소프트웨어 인터럽트(SWI) 발생 → os 내 특정 코드 실행(ISR) → ISR 종료 후 다시 유저프로그램으로복귀
하드디스크 안에 있는 프로그램을 읽거나 쓰거나 하는 코드는 중복되지 않게 하기 위해 일반 유저 프로그램이 아닌 os에 존재한다. → ISR은 os 안에 있고 os 안의 코드는 인터럽트에 의해 실행된다. → 현대 os는 인터럽트 기반 시스템!
인터럽트 기반 운영체제
운영체제는 평소에 대기상태이다.
HW인터럽트에 의해 OR SW인터럽트에 의해 OR Internal interrupt에 의해 os 내 코드 ISR이 실행된다.
ISR이 종료되면 원래의 대기상태 또는 유저 프로그램으로 복귀한다.
이중모드(Dual mode)
한 컴퓨터를 여러 사람이 동시에 사용하는 환경이다. ex) 수강신청 : 서버1 학생 여러 명
이 때 사용자 모드와 관리자 모드(=시스템 모드, 모니터 모드, 특권 모드)가 있다.
cpu는 control unit, ALU, 레지스터로 구성된다. cpu의 레지스터 내 1비트를 할당해 이중모드를 구현할 수 있다.
이 1비트를 모니터 비트라 한다.
1. 전원 on → 부팅
2. os 메인메모리로 올림. 이 때 모니터 비트 = 1 → 관리자 모드. 모든 명령을 다 내릴 수 있다.
3. game을 메인메모리로 올림. 이 때 모니터 비트 = 0 → 사용자모드
4. game score를 하드디스크에 저장하기 위해 os로 SWI를 걸어 os로 점프. 이때 모니터 비트 = 1 로 바꾸고 인터럽트 실행 → 관리자 모드
모니터 비트 값이 바뀌면서 관리자 모드와 사용자 모드를 왔다갔다 함!
대부분의 cpu는 이중모드이다.
monitor bit = 1 → os mode
monitor bit = 0 → user mode
특권 명령(privileged instructions)
유저모드는 내릴 수 없고 관리자만 내릴 수 있는 모드
STOP : cpu 중지
RESET : 전체 시스템 초기화
이중모드는 보호와 관련 있다. 이중모드를 통해서 서버컴퓨터, 유저 컴퓨터가 안전하게 보호받을 수 있다.
privileged instruction violation
유저프로그램이 고의로 stop 명령어를 내리면 cpu는 모니터비트가 0임을 확인한다. 그러면 cpu는 잘못된 명령이라 인식하고 내부적으로 인터럽트가 발생했다 생각해 os의 ISR로 점프해 유저 프로그램을 강제 종료시킨다.
즉, 유저 컴퓨터는 서버 컴퓨터를 컨트롤 할 수 없다.
유저프로그램이 굳이 privileged 명령어를 사용하려면 os에 SWI를 걸어 부탁해주어야한다. 그러면 os 의 ISR이 정당한 요청인지 판단한 후 cpu가 하던 일을 중지시키고 privileged 명령을 수행한다. 부탁한 수행이 모두 끝나면 유저 프로그램으로 복귀한다.
os 서비스 실행될 때 → 관리자 모드
유저 프로그램 실행될 때 → 사용자 모드
HW/SW인터럽트 발생하면 → 관리자 모드
os 서비스 끝나면 → 사용자 모드
하드웨어 보호
1. 입출력 장치 보호(Input/Output device protection)
2. 메모리 보호(Memory protection)
3. CPU 보호(CPU protection)
입출력 장치 보호
입출력장치는 아무나 볼 수 없도록 보호되어야 한다. → 입출력 명령을 특권명령으로 하면 된다. → 일반 유저는 명령을 내릴 수 없음
IN : 입력장치로부터 정보를 받아들임
OUT : 출력장치에 명령을 내림
privileged instruction violation
유저프로그램이 굳이 입출력을 하려면 운영체제에게 요청하고 관리자 모드로 전환한다 → (올바른 요청이 아니면 운영체제가 거부)운영체제가 입출력을 대신한다.→ 마친 후 다시 유저 모드로 복귀
올바른 요청이 아니면 운영체제가 거부
메모리 보호
다른 사용자 메모리 또는 운영체제 영역 메모리 접근
Segment violation
다른 사용자 / 운영체제 영역 메모리 접근 시도
일반 유저 프로그램이 os나 다른 프로그램으로 들어가지 못하게 하려면
1.address bus를 자른다. → 하지만 이렇게 되면 자기 영역에도 접근하지 못하게 되므로 효율적인 방법이 아니다.
2. MMU(memory management unit)을 address bus에 추가 → user program1에 해당하는 address만 통과시킴(base~limit)
→ address가 해당범위가 아니면 MMU가 cpu에 인터럽트 신호를 보냄 → cpu 하던 일 중지하고 os 내부 ISR로 점프 → 잘못된 번지를 읽으려던 유저 프로그램 강제 종료
MMU : 특정 유저 프로그램이 다른 유저 프로그램을 침범하지 못하게 한다. base~limit 사이의 주소만 통과시킨다.
이 때 base, limit값은 os가 설정한다.
CPU 보호
한 사용자가 실수 / 고의로 cpu 시간을 독점해 다른 사용자의 프로그램 실행이 불가능 할 때
100ms마다 cpu에 인터럽트를 걺 → cpu os 의 ISR로 점프 → ISR은 cpu 시간이 어느 한 프로그램에 치우치지 않았는지 골고르 분배되었는지 확인 → p1이 만약 무한루프를 돌아 cpu를 독점한다면 p1을 강제 종료하고 p2로 넘어가게 한다.
Timer를 두어 일정 시간 경과 시 타이머를 인터럽트 시킨다.
cpu 시간이 어느 한 프로그램에 독점되지 않도록 한다.
인터럽트 > 운영체제 > 다른프로그램으로 강제 전환
'운영체제' 카테고리의 다른 글
[OS] Classical Synchronization Problems (2) | 2022.11.29 |
---|---|
[OS] Thread, Process Synchronization, Semaphore (0) | 2022.11.27 |
[OS] Process Management, CPU scheduling (0) | 2022.11.23 |
[OS] OS service (0) | 2022.11.23 |
[OS] Introduction (0) | 2022.11.23 |