[운영체제] 3주차 IO Structure and Interrupts (1)
Modern Computer Systems
- Consists of CPUs, Main Memory, other devices
- Connected by a bus to access Main Memory
- CPU and devices(controllers) execute simultaneosly and compete for shared memory
- Memory controller unit(MMU) ensures these orders
Basic Understanding
- OS(image) is stored in HDD(SSD)
- When power is off, MM is empty(volatile) => so, when power is on, CPU can do nothing
- Thus, to start computer, OS image must be loaded into MM
Bootstrap program
- 하드웨어 제조사에서 개발
- First program to run when power is on
- Stored in Boot-ROM
- Initializes computer system hardware (OS가 초기화 하지 않는 이유? 하드웨어는 제조사별로 다양하기 때문에 OS가 일괄적으로 초기화 불가능)
- Loads OS from HDD(SSD) to first location of MM (addr = 0 or predefined)
What does CPU do?
- Fetch Instr.=> Decode => Fetch Data => Execute => Store
Fetch Instrunction
AR <- PC & IR <- M[AR] & PC++
OS Booting
- CPU simply fetch, decode, execute, store each line of OS image
- Activates scheduler(=swapper)(pid=0), first process init()(pid=1)
- Waits for interrupts to occur
- Hardware interrupts: signals CPU by bus
- Software interrupts: signals by sys calls(traps)
- Modern OSs are interrupt-driven
- Why interrupts necessary? : OS가 효율적으로 작동하기 위해
- When interrupts necessary? : CPU가 요청한 operation을 I/O controller가 다 끝냈을 때
Memory Mapped I/O
Case1: CPU가 Memory Mapped I/O를 직접 수행
키보드를 예시로 들면,
키보드 컨트롤 레지스터로 보내기 위해 AC에 1을 저장
AC로부터 키보드 컨트롤 레지스터에게 1을 보냄 (CPU가 키보드에게 유저로부터 character를 받기 시작한다고 말해주는 것)
CPU가 키보드 컨트롤 레지스터로부터 내용을 읽어들임
MSB=1이면, 유저가 입력한 character가 데이터 레지스터로 입력되고 데이터 레지스터로부터 데이터를 읽어들임
MSB=0이면, 유저로부터 입력받은 character가 없음
Device contorllers
- CPU로부터 명령을 받아 IO를 수행하고 상태를 유지
- IO logic, Buffer(data register), status register로 구성
- device controller의 operation이 끝나면 status register를 1로 세팅해 IO의 완료를 알림(interrupt)
I/O의 종류
Synchronous I/O
- Control is returned to user process only at completion of I/O
- 한 번에 한 개의 인터럽트밖에 수행하지 못 함
Asynchronous I/O
- 현대 OS에 쓰임
- Control is returned to another user process without waiting completion of I/O that it requested.
- Multiple I/O may exist by multiple process(multiple interrupts may take place)
Interrupt servicing procedure
인터럽트 signal이 CPU에 도착
OS가 리턴 어드레스를 저장 (push(stk_ptr, PC))
CPU가 도착한 인터럽트 타입을 조사
3-1) Polling
- 모든 device는 서로 같은 signal을 보냄
- CPU가 모든 device를 조사
3-2) Vectored Interrupt
모든 인터럽트는 unique id가 부여(IRQ n)
device마다 서로 다른 signal을 보냄
signal이 도착하면 CPU는 인터럽트 벡터를 확인해 interrupt service routine(ISR)의 시작 주소를 얻음.
ISR 실행 (PC = some_address)
인터럽트 서비스가 끝나면 CPU는 다시 바로 전의 프로세스로 돌아감 (PC = pop(stk_ptr))
Multiple IO Management
- OS는 DST(Device-Status Table)라는 것을 유지
- 이 테이블 안에는 여러 device의 상태정보를 저장
- DST pointer 사용
DMA structure
CPU는 MM<-> Buffer in device controller간 데이터를 이동시키기엔 너무 아까움
MM은 CPU가 주로 쓴다
MM은 1 word씩 전송하므로 다른 장치들이 MM을 사용할 경우, CPU의 동작에 큰 영향
DMA controller는 CPU를 쓰지 않고 직접 MM과 Buffer에 접근해 데이터를 전송
CPU가 메모리를 쓰지 않을때 Cycle Stealing해 메모리에 접근하고 접근이 완료됐을 때 interrupt를 일으켜 작업완료를 알림
Disk Read operation summary
1-유저 CPU가 유저 프로세스 a를 실행하는 도중 IO instruction을 보면 IO가 일어남
컨텍스트 스위치가 일어남
2-커널 CPU가 device controller에 있는 레지스터를 로드하기 위해 OS 프로세스 A를 실행시킴
3-커널 CPU가 DST(device-status table)을 조정하기 위해 OS 프로세스 B를 실행시킴
컨텍스트 스위치가 일어남
4-유저 CPU가 새로운 유저 프로세스 b를 실행시켰다고 하면
5-디바이스 device controller가 레지스터를 decode하고 어떤 명령이 필요한지 인식
6-디바이스 device controller가 512 바이트를 디스크에서 local buffer로 이동
7-디바이스 device controller가 CPU에게 인터럽트 시그널을 보냄
8-유저 CPU는 유저 프로세스 b가 인터럽트된 것을 인식
컨텍스트 스위치가 일어남
9-커널 CPU가 어떤 인터럽트인지 조사하기 위해 OS 프로세스 C를 실행시킴
10-커널 CPU가 ISR(interrupt service routine)를 실행하기 위해 OS 프로세스 D를 실행시킴
ISR이 끝나면 DMA가 실행됌
컨텍스트 스위치가 일어남
11-유저 CPU는 8번에서 인터럽트된 유저 프로세스 b를 다시 실행시킴
DMA는 CPU와 무관하게 실행되고 있다가 512 바이트가 controller buffer에서 MM으로 옮겨지면 CPU에게 인터럽트 시그널을 보냄
12-유저 CPU는 유저 프로세스 b가 인터럽트된 것을 인식
컨텍스트 스위치가 일어남
13-커널 CPU가 DST를 조사하기위해 OS 프로세스 E를 실행시킴
14-커널 CPU는 8번에서 인터럽트된 유저 프로세스 b를 다시 실행하기 위해 OS 프로세스 F를 실행함
컨텍스트 스위치가 일어남
15-유저 CPU가 유저 프로세스 b를 다시 실행시킴