전공 공부한거 끄적이는 곳

[운영체제] 인터럽트와 DMA

앜지 2023. 3. 12. 20:36

인터럽트 신호는 하나에 하나의 작업을 하는 cpu가 현재 작업중인 프로세스를 일시중지 시키고 다른 프로세스를 시키는 신호이다. 

하드웨어에서,그리고 소프트웨어가 내는 신호 두가지로 나눠지는데

-하드웨어:주로 I/O 장치에서 일어나는데, CPU는 I/O와 동시에 기능이 가능하기 때문에 키보드가 입력을 완전하게 받았다면 그것을 메인 메모리에 저장을 해야하기 때문에 메모리에 공간을 할당을 해달라고 cpu에 인터럽트 신호를 주고 그러면 cpu는 인터럽트를 받아서 그 작업을 실행한 후 본래 자기가 실행하고 있던 프로세스로 돌아온다.

-소프트웨어: 이것은 주로 트랩(Trap),혹은 예외신호(exception)이라고 하는데 트랩은 프로그램 안에서 의도적으로 다른 프로세스를 호출하는 용도로 쓰이고  예외는 정말로 오버플로우같은 오류가 발생했을때 사용된다.

이런 인터럽트를 cpu가 받았을때 정확하게 처리하기 위해 인터럽트를 쓸려면 인터럽트 벡터(interrupt vector)를 사용한다.

인터럽트 벡터는 이 인터럽트의 주소,cpu가 처리해야할 작업을 내용을 알려준다.

I/O에서의 인터럽트 신호

이런식으로 cpu는 인터럽트가 발생하면 다른 프로세스를 한 후 원래 프로세스로 돌아온다.

 

그러면 이제 기본적인 컴퓨터의 구조에 대해 이야기를 해보자

현재에 존재하는 컴퓨터의 아주 기본적인 구조는 우리의 천재 폰노이만 아저씨가 만든 컴퓨터의 구조를 따르는데

진짜 천잰듯,, 이걸 어캐 맨땅에서 만들었노

I/O장치는 CPU와 버스로 연결되어서 CPU가 Main Memory건 Cache건 접근을 한다.

이제 다룰 DMA는 (Direct Memory Access)의 약어로 직접 메모리에 접근을 한다는 거다.

CPU는 이미 메모리와 연결되어있거든. 입출력 장치가 직접 메모리에 접근을 한다는 거지.

원래대로라면 입력이나 출력장치에서 메모리에 접근을 하려면 cpu에 이러저러한 것을 메모리에 넣거나 제거하고 싶다고 건의를 하면 cpu가 이 작업을 시행해야 하는데 이거를 다 일일이 cpu한테 시키자니 효율이 엄청나게 떨어지는거임.

그래서 등장한게 DMA인데

그대로 입출력 장치에서 direct memory access를 하여 cpu를 거치지 않고 바로 메모리에 작업을 하게 한다.

물론 완전히 cpu가 모르게 하지는 않고 dma controller가 존재한다. 입출력 장치가 메모리에 접근을 할때마다 cpu에게 알린다