Interrupt Mechanism
CPU는 계속해서 명령어들을 처리한다. 처리 중 I/O device에서 data를 읽어들여야 하는 명령어가 나오면 DISK에 접근해야한다.
DISK의 Operation은 CPU에 비해 매우 느리다. CPU가 디스크 컨트롤러에게 작업을 요청하고 기다린다면 효율이 떨어진다.
작업을 요청하고 작업이 완료되는 동안 다른 작업을 실행할 수 있는 방법이 없을까?
디스크작업이 끝나면 끝났다고 비동기적으로 결과를 받을 수 있는 메커니즘이 'Interrupt mechanism'
- 프로세서가 디바이스를 기다리지 않는다.
- 프로세서의 낭비를 막는다.
- Interrupt 발생 시 interrupt handler를 통해 처리한다.
Instruction Cycle with Interrupts
이전 그림에서는 fetch, execute만 반복되었는데 interrupts mechanizm에서는 한단계가 더 추간된다.
Interrupt 발생 여부를 체크하고,
발생했다면 intterupt처리(비동기적), 발생하지 않았다면 기존 cycle을 반복한다.
various device와 CPU 사이에는 그림에는 없지만 PIC를 통해 연결되어있다.
명령어 처리중 interrupt가 발생되면 명령어 수행 후 interrupt 발생여부를 체크한다.
interrupt 발생 시
PC,PSW를 저장하고 (되돌아가기 위함)
PSW를 kernel mode와 INTR disable로 설정한다.
(interrupt는 커널모드에서 수행된다. 또한 INTR disable은 다른 인터럽트의 진입을 막기 위함이다.)
그 후 interrupt handler의 주소를 PC로 설정함에 따라 다음에 수행될 명령어는 interrupt 관련이라는 것을 암시한다.
interrupt 처리가 끝난 후에는 다시 PC,PSW값을 복구한다.
아래는 내가 짜 본 슈도코드(?)
While(1){
Fetch next instruction
execute instruction
if(interrupt ==1 from pic){
save pc, psw
pc <- interrupt handler’s address
psw <- (kernel mode, intr disable)
save remainder of process state information
ISR
Restore all
Restore old psw and pc
}
}
Interrupt and Exception
인터럽트의 종류는 크게 두가지로 나눌 수 있다.
1. Interrupt
H/W interrupt, 하드웨어 디바이스가 발생시킴. 페리페랄 디바이스에 의해 유발됨. 비동기적 인터럽트
2. Exception
S/W interrupt, CPU가 발생시킴. ‘divide by zero’ , ‘segmentation faults’ , ‘page faults’에 의해 유발됨. 동기적 인터럽트
명령어 수행 중 발생하면 불안정하게 끝난 상태에서 스스로 인터럽스 request 비트를 1로 바꾸고 처리한다.
처리과정은 interrupt와 완전히 동일
명령어를 수행이 끝나고 처리되는 interrupt와 달리 exception은 명령어 수행을 다 끝내기 전에 exception 발생하면 즉시 명령어 처리를 중단하고 exception을 처리하러 간다.
<Interrupt vs Exception>
여기서 인터럽트는 클락에 비동기적, exception은 동기적이라는 말이 헷갈렸는데,
인터럽트는 수행중인 명령어 처리 후 인터럽트가 처리되고, exception은 명령어 수행 중 예외 발생하면 즉시 예외를 처리해준다는 점에서 clock에 비동기, 동기로 설명된 듯하다.
Multiple Interrupts
다중 인터럽트 처리 방법에는 순차적 인터럽트 프로세싱과 중첩 인터럽트 프로세싱이 있다.
- Sequential Interrupt processing (순차적 인터럽트 처리)
- 인터럽트가 처리되는 동안 다른 인터럽트가 발생해도 현재 처리중인 인터럽트를 먼저 처리한다. 그동안 들어온 인터럽트는 pending/disable 해놓고 이전 인터럽트가 끝나면 다음 인터럽트를 처리한다.
- 프로세서는 처리중인 인터럽트 외의 인터럽트 리퀘스트 시그널을 무시한다.
- 시간긴급도가 있는 디바이스를 먼저 처리할 수 없는 단점이 있다.
2. Nedsted Interrupt processing (중첩 인터럽트 처리)
- 인터럽트 처리중에 우선순위 높은 다른 인터럽트가 들어오면 처리중이던 인터럽트는 stack안에 저장해놓고 우선순위 높은 인터럽트가 호출된다.
순차적 인터럽트 처리는 simple하다.
중첩인터럽트는 좀 더 요구사항이 많고 복잡하고 비용이 많이든다.
SMP(대칭적 다중 처리기)
- 다수의 CPU들은 memory와 I/O 디바이스를 공유하고 있다.
- 각각의 CPU는 동등한 level에서 동등한 기능을 제공한다. (master/slave 관계 x)
- 인터럽트가 들어오면 PIC가 전달해야하는데 APIC은 '누구한테 전달할지'에 대한 logic이 포함되어 있다.
- 그 logic에 따라 APIC이 CPU를 선택한다.
- Local APIC : SMP에서 각각의 CPU마다 있으며 timer interrupt와 관련이 있다. 모든 local APIC는 외부 APIC과 연결되어있다.
Cache
기억장치 설계시 속도, cost, size등을 고려해야 한다. 하지만 cost와 size는 trade-off 관계이다.
보다 싸고 속도가 느린 Main memory를 보완해 Cache와 같이 빠른 속도를 내는 illusion을 만드는 것이 목표이다.
그 근간은 시간적/지역적 집중화에 있다.
Temporal locality : 시간적 집중화
- 참조된 item은 빠른 시간내에 다시 참조될 가능성이 높다.
- Ex) for/while 루프에서의 변수
Spatial loacality : 지역적 집중화
- 참조된 itemt은 가까운 곳에서 다시 참조될 가능성이 높다.
- Ex) 배열변수
목표 : lower-level memory의 size와 cost를 가지며 high-level memory의 속도를 내는 illusion technology 인 ‘virtual memory’를 제공하는 것
Hit : 상위레벨(cache)에서 데이터가 발견되는 것(적중)
- Hit Rate : 상위레벨에 있을 확률
Miss : 하위레벨(main memory)에서 데이터가 발견되는 것(부재)
- Miss Rate : 1 - 상위레벨에 있을 확률
cache and main memory
Main memory에서 공간 하나하나를 word라고 표현한다.
k개의 word가 모여 1 block을 이루고 m개의 blocks이 모여 memory를 구성한다.
Block은 Cache의 line(block이 들어갈 수 있는 slot) 하나에 들어갈 수 있다.
그렇다면 어떤 block이 선택되는가?
앞서 이야기 한 지역적/시간적 집중화에 의해 선택된다.
Locality가 높은 block들이 각각의 line에 들어가면 필요한 데이터를 보다 빠르게 접근할 수 있다.
왜 빠르게 접근할 수 있는가?
-> 일단 cache는 memory bus 이용하지 않는다.
-> 그런 cache에 참조될 확률이 높은 데이터를 집어 넣었기에 보다 빠르게 접근할 수 있다.
Line의 집합은 set이다. 하나의 set을 만들 때의 식별자는 Tag이다.
결론적으로 cache의 목표는 참조될 확률이 높은 block을 line에 넣는 것이다.
* Cache의 추가적인 이점
- 프로세서에 의한 memory 대역폭이 줄어들고 I/O를 위한 메모리 대역폭이 늘어난다.(?)
- ISA를 바꿀 필요가 없다.
Cache의 구성 방식
크게 두가지 구성방식이 있다.
- Direct mapped Cache
- N-way Set Associative Caches
1. Direct Mapped Cache(직접 사상 방식)
- Block이 어느 line에 갈 지 미리 고정해놓는 방식
2. N-way Set Associative Caches
- N개의 라인을 하나의 set으로 공유하면서 block이 set을 공유하는 방식
- 캐시에 접근 시 하나의 set에 여러가지 라인이 있기 때문에 어느 라인을 선택할 지 비교해야함
Cache Read
Cache Write
1. Write-thorugh
- 데이터를 캐시와 메인 memory에 동시에 쓰는 방식으로 간단하지만 느리고 메모리 traffic을 증가시킨다.
- read할 때는 좋지만 write 할 때는 상위,하위 메모리 모두에 write 해야하는 단점이있다.
2. Write-back
- 데이터를 상위계층에 write하고 하위계층에는 적절한 때에 write하는 방식으로 빠르지만 복잡하고 일관성의 문제가 발생할 수 있다.
(복사본이 있을 때 한쪽에만 updated되었다면 일관성의 문제가 발생할 수 있기 때문에 dirty bit로 해결한다.)
I/O Communication Techniques
- 디바이스는 레지스터를 가지고있다.
- Device driver : 데이터를 읽고 쓰는 명령어를 갖는 프로그램(software)으로 레지스터를 통해 제어한다. I/O device의 이런 레지스터를 Port(포트)라고 한다.
디바이스의 주소공간 사용 방식에는 Port I/O, Memory-mapped I/O가 있다.
1) Port I/O
- I/O address가 별도로 존재
- 별도의 주소공간를 사용하기에 별도의 instruction set이 필요하다.
- 별도 할당된 버스를 사용하여 빠른 편이다.
2) Memory-mapped I/O
- 입출력과 메모리의 주소 공간을 분리하지 않고 하나의 메모리 공간에 취급하여 배치하는 방식
- 전체 메모리의 주소공간에 입출력 장치의 메모리나 레지스터를 메모리로 취급하여 전체 메모리의 일부분으로 특정영역에 할당하여 배치하는 방식
- 기존의 주소공간을 사용하기에 별도의 instruction set 없이 기존의 memory, address, instruction을 활용 가능하다.
<3가지 I/O 처리 방식>
1) Programmed I/O (Polling)
- 포트(상태,명령,데이터 레지스터)를 이용한 데이터 전송. 상태 bit가 완료될 때까지 프로세서가 I/O 모듈의 상태를 주기적으로 체크한다.
- 어떠한 작업이 단 한번의 폴링으로 끝날 정도로 빠른 하드웨어 장치라면 문맥교환이 일어나는 인터럽트보다는 폴링이 더 효율적
2) Interrupt-driven I/O
- CPU는 I/O 컨트롤러에 시작과 끝만 관여한다.
- 입/출력 인터페이스가 주변장치 상태값을 요청, 준비상태가 되면 인터럽트 신호가 구동되어 CPU에 I/O를 요청
- 느린 디바이스라면 인터럽트가 good
3) DMA
- block단위의 데이터를 옮길 때는 interrupt가 매우 값비싼 연산이라 비효율적일 수 있어서 이방식을 사용
* DMA(Direct Memory Access)
- CPU의 개입없이 I/O 컨트롤러가 memory buffer을 통해 직접 접근한다.
- 필요성 : 디스크같은 많은 데이터를 입/출력하는 장치를 위해 CPU가 매번 전송을 제어하는 방법의 비효율성.
- 직접 접근하기에 입출력 속도가 향상된다.
- CPU는 DMA에게 전송되어야할 block의 시작 주소, 사이즈를 넘겨주고 read or write 명령어를 보내면 DMA는 block을 옮기기 시작한다. Block을 모두 옮긴 후 DMA는 CPU에게 인터럽트를 발생시킨다.
[DMA 동작모드]
1) Block transfer mode
- I/O 디바이스(DMA)와 CPU가 대등한 관계에서 경쟁
2) Cycle stealing
- CPU가 버스를 이용하지 않을 때만, DMA가 bus를 이용하는 방식
- DMA 컨트롤러와 CPU가 동시에 Bus를 사용하고자 할 때 속도가 빠른 CPU가 속도가 느린 DMA에게 BUS 사용 우선순위를 주어 빠른 입출력이 가능하게 하는 방법
- System bus를 효율적으로 사용하는 방식
- DMA controller입장에서는 느려짐(cpu가 버스 사용안할때만 사용하니까)
'Operating System' 카테고리의 다른 글
Process Description andControl 2 (2) | 2021.04.13 |
---|---|
Process Description and control 1 (0) | 2021.04.11 |
User program and System Call (2) | 2021.04.11 |
Operating System (0) | 2021.04.10 |
Computer System Overview (1) (2) | 2021.04.02 |