티스토리 뷰

OS

OS - programmed I/O, Interrupted I/O, DMA I/O

perseverance 2024. 8. 16. 17:31

1. programmed I/O

programmed I/O란무엇일까? 대단한말 같지만 말 그대로다 프로그래밍된 I/O라는 말이다. 

CPU가 I/O 장치에 일을 시킬때 해당 장치의 Device Controller에게 일을 시킨다. 이때 CPU가 Device Controller에 존재하는 register 값을 읽고 씀으로써 I/O가 이루어진다. 

예시는 다음과 같다.

1) CPU는 상태 레지스터를 주기적으로 읽어보며 하드 디스크의 준비 여부를 확인 

2) 하드 디스크가 준비되었다면 CPU는 백업할 메모리의 정보를 데이터 레지스터에 쓰기

programmed I/O에서는 Device Controller의 작업 상태를 확인하기위해 주기적으로 register값을 확인한다. 이렇게 주기적으로 확인하는 방식을 다른말로 폴링이라고도 한다. 

그리고 I/O 장치가 입출력을 할때동안 CPU는 다른일을 하지 못한다. 

 

2. Interrupted I/O

인터럽트(interrupt)란, (주로 입/출력)하드웨어 장치의 처리, 혹은 예외 상황의 처리가 필요할때 CPU에게 알려 이를 처리할 수 있도록 하는 일종의 신호이다. 인터럽트는 여러 목적으로 사용될 수 있으며, 운영 체제와 하드웨어 간의 상호작용에 핵심적인 역할을 한다.

 

2.1 인터럽트 종류

  1. 하드웨어 인터럽트: 하드웨어 장치가 일으키는 인터럽트를 하드웨어 인터럽트라고 부른다.
  2. 소프트웨어 인터럽트: 소프트웨어 인터럽트는 명령 실행으로 인터럽트가 일어나는 것을 말한다.

2.2 하드웨어 인터럽트 순서

  1. 입출력 장치는 CPU에 인터럽트 요청 신호를 보낸다.
  2. CPU는 실행 사이클이 끝나고 명령어 인출하기 전 항상 인터럽트 여부를 확인한다.
  3. CPU는 인터럽트 요청을 확인하고 인터럽트 플래그를 통해 현재 인터럽트를 받아들일 수 있는지 여부를 확인한다.
  4. 인터럽트를 받아들일 수 있다면 CPU는 지금까지의 작업을 백업한다.
  5. CPU는 인터럽트 벡터를 참조하여 인터럽트 서비스 루틴(ISR)을 실행한다.
  6. 인터럽트 서비스 루틴 실행이 끝나면 4에서 백업해 둔 작업을 복구하여 실행을 재개한다.

2.3 폴링 방식과의 차이점은?

폴링은 주기적으로 장치 controller의 레지터값을 확인해서 완료 여부를 CPU가 확인하지만 인터럽트기반의 I/O는 그럴 필요없이 장치 controller가 준비가 완료되었거나 작업이 끝났다면 인터럽트를 통해 CPU에게 알려준다. 즉 레지스터 값을 주기적으로 CPU가 보지 않고 인터럽트가 오면 알 수 있으니 더 효율적이다.

그럼 인터럽트가 동시에 실행되면 어떻게 될까, 또한 지금 인터럽트로 ISR이 실행중일때 인터럽트가 오면 어떻게 될까?

  • 우선순위가 높은 인터럽트를 실행함
  • 즉, 지금 ISR이 실행중이라도 막들어온 인터럽트가 우선순위가 높다면 해당 인터럽트 서비스 루틴 실행
  • 이때 PIC라는 하드웨어를 이용
  • PIC는 여러 장치 컨트롤러에 연결이 돼서 장치 컨트롤러의 하드웨어 인터롭트들의 우선순위를 판단을 한 다음에 CPU한테 그많은 인트로브 중에서 어떤걸 실행해야 하는지 알려준다.

3. DMA I/O

DMA는 CPU를 대신하여 입출력 장치와 메모리 간의 데이터 전송을 직접 처리하는 기능을 수행하는 장치이다. CPU가 데이터를 직접 전송하지 않고 DMA가 이를 대신함으로써, CPU는 더 중요한 작업을 처리할 수 있다.

 

DMA가 왜 필요할까?

Programmed I/O와 interrupt I/O 방식의 공통점은 입출력 장치와 메모리 간의 데이터 이동은 CPU가 주도하고 이동하는 데이터도 반드시 CPU를 거친다.

근데 CPU는 입출력 장치와 메모리 사이에서 전송되는 모든 데이터가 반드시 다 CPU로 거쳐야 된다면 가뜩이나 바쁜 CPU는 입출력 장치를 위한 연산 때문에 시간을 뺏길 수밖에 없다

가령 하드디스크 백업 같이 대용량의 대이터를 이동해야 되는 입출력작업이 있다고 가정을 한다면 이럴 경우에는 당연히 CPU의 부담이 더 커질 수밖에 없다

이러한 문제를 해결하기 위해 등장한 기능이 DMA이다.

 

DMA 입출력 과정

  1. CPU는 DMA 컨트롤러에 입출력 작업을 명령
  2. DMA 컨트롤러는 CPU 대신 장치 컨트롤러와 상호작용하며 입출력 작업을 수행
  3. 입출력 작업이 끝나면 DMA 컨트롤러는 인터럽트를 통해 CPU에 작업이 끝났음을 알림

'OS' 카테고리의 다른 글

OS - 동기식 I/O와 비동기식 I/O  (0) 2024.08.16
OS - 커널과 이중모드, 시스템 콜  (0) 2024.08.16
OS - 운영체제 기술의 발전  (0) 2024.08.16
OS - 운영체제란?  (0) 2024.08.16
[OS] 프로세스 주소 공간  (0) 2024.05.13
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/10   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
글 보관함