CPU 작업과 I/O 작업은 어떻게 병행될 수 있는가 ?

다음 3개의 요인을 통해 CPU와 I/O 작업이 병행될 수 있음.



1. Interrupt

1.1 Device가 RAM에 요청된 데이터를 Load하는 작업이 끝나면

1.2 CPU에 Load작업이 완료되었다는 I/O Interrupt를 보냄.

1.3 CPU는 다시 RAM에 적재된 데이터를 통해 작업을 마저 수행할 수 있음.


2. DMA Controller

DMA를 지원하는 환경이라면

- DMA를 통해 CPU의 도움 없이 직접 RAM에 접근 가능하다.

- Device driver와 RAM이 직접 통신한다.


3. Device driver = 장치 드라이버

- OS와 Hardware 사이의 통신을 담당하는 소프트웨어.

- Hardware의 ROM에 내장된 Firmware를 구동한다.

- 제조사의 마이크로 프로세서에 
  하드웨어를 제어하는 명령들을 담은 firmware가 탑재되어 나오는데
  CPU의 도움 없이 device specific한 작업을 수행할 수 있음.




- 대형 운영체제들은 여러 겹의 Layer를 사용하는데
  Firmware들에 대응할 수 있게 추상화된 레이어라고 볼 수 있다.
















병행 작동 예





Device driver 상위 Layer에는 OS와 Application이 위치한다.

OS는 Kernel로서 RAM에 적재되어 돌아가고
Application 데이터도 RAM에 적재되고 RAM에서 해제된다.


애플리케이션 코드가 수행되다가 필요한 데이터가 I/O장치에 있을 때는
API를 통하여 시스템 콜을 통해 OS가 대신 데이터를 애플리케이션에 전달한다.


이해를 돕기 위해 I/O 장치에 P1(프로세스1)을 기입한 것이고
실제 I/O에서 프로세스를 수행하는 것이 아님 !


[그림 참고]

CPU가 작업 P1를 수행하다가
I/O 장치의 데이터가 필요해서 인출 작업을 I/O 영역에 맡긴다.

CPU는 대기하고 있는 것이 아니라
P2라는 다른 작업을 수행한다.

I/O장치는 P1과 관련된 데이터 인출 작업을 수행하고
인출 및 적재가 끝나면 CPU에 Interrupt를 통해 작업이 끝났음을 통지한다.

CPU는 P1 작업에 필요한 데이터가 적재됨을 확인하고
P1 작업을 마저 진행할 수 있다.






댓글

이 블로그의 인기 게시물

실무진 면접 경험으로 정리하는 백엔드 (1) : 에듀 테크 기업 면접

노마드코더 개발자북클럽 Clean code TIL 6 : 6장. 객체와 자료구조

백엔드 개발자가 Djnago fullstack 사이드 프로젝트를하며 ( html, css, vanillaJS 그리고 JS프레임워크 )