: 사용자 프로그램의 잘못된 수행으로 다른 프로그램 및 운영체제에 피해가 가지 않도록 하기 위한 하드웨어적 보호 장치. (CPU가 참조)
1 (사용자 모드): 사용자 프로그램 수행. 제한된 접근. 일반 명령.
0 (모니터/커널/시스템 모드): OS 코드 수행. 메모리 접근, I/O device 접근 가능.
interrupt나 exception 발생 시, 하드웨어: mode bit -> 0
사용자 프로그램에게 CPU 넘기기 전, mode bit -> 1
- 특권 명령 (privileged instruction): 보안 목적. 커널 모드에서만 수행 가능
: 정해진 시간 경과 후 운영체제에게 제어권이 넘어가도록 interrupt 발생시킴.
매 클럭마다 1씩 감소 -> 0이 되면 timer interrupt
발생
time sharing 구현에 이용. 현재 시간 계산에도 사용
특정 프로그램의 CPU 독점 방지
: 해당 I/O 장치 유형을 관리하는 일종의 작은 CPU
- 제어 정보: status register, control register (I/O device에 명령)
- local buffer (일종의 data register): I/O device에 보낼 데이터 저장
I/O는 실제 device와 local buffer 사이에서 일어남
I/O가 끝날 경우 interrupt를 걸어 CPU에 그 사실을 알림
Device driver: OS 내에 설치되는 드라이버. OS 코드 중 각 장치별 처리 루틴. CPU가 실행하는 장치 수행 위해 필요한 코드 담고 있음. -> software
Device Controller: 각 장치 통제하는 작은 CPU -> hardware
: interrupt 당한 시점의 register
와 program counter(pc)
를 저장 후, CPU의 제어를 interrupt service routine으로 넘김
- hardware interrupt: 보통의 interrupt
ex) I/O 완료, RR time quantum 만료
- trap (software interrupt): exception(프로그램의 오류), system call(프로그램이 커널 함수 호출)
ex) divide by zero, I/O 요청
I/O를 위한 두 가지의 interrupt
1) I/O 요청 interrupt: trap
사용자 프로그램이 돌아가고 있는 CPU 자신이 machine instruction을 통해 interrupt 세팅을 하고, 그 instruction이 끝난 직후 interrupt가 들어와 있는 것을 보고 interrupt handler를 부르는 것
2) I/O 수행 완료 시그널 interrupt: hardware interrupt
CPU가 아닌 다른 하드웨어가 CPU에게 걸어오는 interrupt
현대 운영체제는 interrupt에 의해 구동된다
운영체제는 CPU를 사용할 일이 없고, interrupt가 들어올 때만 CPU가 운영체제에 넘어감. 평소에는 사용자가 사용.
- interrupt vector: interrupt의 처리 주소 가지고 있음
- interrupt service routine (ISR): interrupt 처리 커널 함수. 실제 interrupt 처리 코드
: 사용자 프로그램이 운영체제의 서비스를 받기 위해 커널 함수 호출.
사용자 프로그램이 운영체제 코드 직접 수행 불가. interrupt line setting -> cpu 제어권이 운영체제에 넘어감.
: DMA와 CPU 둘 다 memory access 가능
CPU의 중재 없이 DMA controller가 device의 buffer storage의 내용을 메모리에 block 단위로 직접 전송. (byte 단위 X, block 단위 전송 끝날 때마다 interrupt 발생)
CPU의 interrupt 감소. 빠른 I/O device 메모리에 가까운 속도로 처리. 효율적 사용.
: DMA와 CPU의 memory 동시 접근 방지. 접근 조율.
: I/O 요청 후 입출력 작업 완료 후에야 사용자 프로그램에 control이 넘어감
구현방법 1. I/O가 끝날 때까지 CPU 낭비시킴. 매 시점 하나의 I/O만 일어날 수 있음
구현방법 2. I/O가 완료될 때까지 해당 프로그램에게서 CPU를 빼앗음. I/O 처리를 기다리는 줄에 그 프로그램을 줄 세움. 다른 프로그램에게 CPU를 줌.
: I/O가 시작된 후 입출력 작업이 끝나기를 기다리지 않고 사용자 프로그램에 control이 넘어감
=> 두 경우 모두 I/O 완료는 interrupt
로 알려줌
위로 갈수록: speed ⬆️ cost ⬆️ volatility ⬆️ capacity ⬇️
Caching: copying information into faster storage system
Address space
- stack: dynamic allocation, stack data(local var...)
- data: global data(static)
- code: compile code
ex) A의 Address space에서 code가 0, data가 10, stack이 20의 address를 가지고, physical memory에서 A의 base address가 1000이라면, address translation의 결과는 10 + 1000 = 1010이다.
!! Process의 address + base address => 이 address로 메모리 접근
운영체제 - 반효경
http://www.kocw.net/home/cview.do?cid=3646706b4347ef09