본문 바로가기
Operating System

Computer System Overview (2)

by mangstory 2021. 4. 3.

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와 완전히 동일

illegal opcode, illegal address, divide by zero가 exception을 일으키는 원인

명령어를 수행이 끝나고 처리되는 interrupt와 달리 exception은 명령어 수행을 다 끝내기 전에 exception 발생하면 즉시 명령어 처리를 중단하고 exception을 처리하러 간다.

 

<Interrupt vs Exception>

여기서 인터럽트는 클락에 비동기적, exception은 동기적이라는 말이 헷갈렸는데,

인터럽트는 수행중인 명령어 처리 후 인터럽트가 처리되고, exception은 명령어 수행 중 예외 발생하면 즉시 예외를 처리해준다는 점에서 clock에 비동기, 동기로 설명된 듯하다.


Multiple Interrupts

다중 인터럽트 처리 방법에는 순차적 인터럽트 프로세싱중첩 인터럽트 프로세싱이 있다.

  1. 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