2016년 3월 13일 일요일

interrupt 와 multiprogramming


1.Computer System Overview(16. 3. 9.)

4) interrupt

주 목적: cpu를 놀게 하지 말자!(cpu에 비해 I/O devices는 너무 느려서 device controller I/O comand를 수행하는 동안 cpu는 놀게 된다. 그냥 다음 instruction들을 수행 할 수는 없다. I/O device Data write의 성공을 보장할 수 없기 때문에, 반드시 후처리가 필요하다. cpu device controller I/O comand를 수행하는 동안 다른 일을 하다가, 끝나면 후처리를 하라고 알려주는 역할이 바로 interrupt)
interrupt the normal sequencing of the processor
하드웨어는 system bus를 통해, 소프트웨어는 system call을 통해 interrupt 발생시킴.

5) interrupt handler(ISR-interrupt Service Routine)

- interrupt 에 대응하여 특정 기능을 처리하는 기계어 코드 루틴.
각각의 I/O device마다 특정한 interrupt handler들이 존재하며, interrupt 발생시 interrupt vector를 사용하여 구별한다.
kernal의 일부분으로 memory fixed되어 저장된다.

6) interrupt cycle

1. instruction execution(fetch+execution)
2-1. interrupts disabled – 다음 instruction execution 계속 수행, 발생한 interrupt는 큐에 저장(IRQ)
2-2. interrupts enabled interrupt 발생시 interrupt handler initiate.
-   instruction 수행 후 마다 interrupt 발생 여부 확인 함.
-  disabled이여도, non-maskable interrupt가 존재(이를 위한 line 별도 존재)

7) interrupt processing

1. 현재 진행 중인 instruction을 완료한다.
2-1. CPU의 특수레지스터 중, interrupt mask 비트를 보고 mask 되면 무시 한다.
2-2. 아니라면, PC PSW control stack에 저장한다.
3. interrupt handler의 시작주소를 PC load한다.
(interrupt vector를 읽고, ISR의 주소값을 얻어 JUMP한다)
4. 현재 진행중인 프로그램의 register control stack에 저장한다.
5. interrupt handler를 수행한다.
6. register를 복원한다.
7. PSW PC를 복원한다.

- 1~3 Hardware, 4~7 Software에서 처리함.
- Control stack을 위한 stack pointer(top) cpu내에 존재

7) multiple interrupt
interrupt 수행도중 interrupt가 또 오면?
- 정책에 따라 결과가 다르다. 해당 interrupt 중단하고 새로운 interrupt 시작할 수도 있고, interrupt를 끝내고 시작할 수도 있다.

+] I/O
device controller는 특정 유형의 장치들을 담당하며, 지역 버퍼 저장 장치와 특수 목적용 레지스터 집합을 가진다. device controller는 자신이 제어하는 장치와 지역 버퍼간의 자료 전송을 담당한다. 운영체제는 장치 드라이버를 사용해 device controller를 관리한다.(장치 드라이버는 device controller의 레지스터에 명령 적재, device controller는 레지스터의 내용에 따라 장치로부터 지역버퍼로 자료전송)

8] multiprogramming
- interrupts를 사용해도 cpu가 항상 효율적으로 사용되는 것은 아니다.
ex) write 연산이 끝나지 않았는데, write를 또 해야할 때 cpu는 이전의 write 연산이 끝나고, interrupt가 오기를 기다려야 한다. (앞 뒤 I/O 간의 의존성 때문 - 하드디스크도 하나의 컴퓨터로, 속도를 높이기 위해 처리순서를 바꾸는 경우도 있다. 데이터가 덮어 써질 가능성이 존재한다.)
- 앞의 작업과 뒤의 작업이 전혀 상관관계가 없다면 문제 해결 가능
-> cpu가 동시에 여러 개의 프로그램을 수행 (multiprogramming 등장)

- 상대적인 우선순위 및 I/O 대기시간을 고려하여 순서가 결정됨. (CPU scheduling)
- interrupt handler 완료 후, 아무 프로그램으로나 돌아갈 수 있음.

+] multiprogramming, time sharing
multiprogramming은 여러 가지 시스템 자원을 효율적으로 이용할 수 있는 환경을 제공하지만, 사용자가 컴퓨터 시스템과 상호작용 할 수 있도록 하지는 않음.
이를 가능 하게 한 것이 time sharing(시분할, multi-tasking)
시분할 시스템은 multiprogramming의 논리적 확장으로, cpu가 다수의 작업을 서로 교대로 수행하지만, 매우 빈번하게 교대가 일어나기 때문에 사용자들은 각자 자기의 프로그램과 상호작용 할 수 있다. 또한, 시분할 시스템을 이용하면 동시에 많은 사용자가 하나의 컴퓨터를 공유할 수 있다.(시스템이 사용자 간에 매우 빠르게 전환되기 때문에, 각 사용자는 자신이 컴퓨터를 전용한다고 느낌)

multiprogramming, time sharing에서는 여러 작업이 메모리에 동시에 유지되어야 한다. 주 메모리는 모든 작업을 저장하기에는 너무 작기 때문에, 시스템에 들어온 모든 작업들은 디스크에 존재하는 작업 풀(job pool)에 보관된다. 이 작업들 중 메모리에 보관할 작업을 선택하는 것을 작업 스케줄링(Job scheduling)이라 한다.

메모리에 여러 프로그램이 동시에 있을 때, 이 중 실행할 작업을 고르는 것을 cpu 스케줄링(cpu scheduling)이라고 한다.


댓글 없음:

댓글 쓰기