I/O Technique에는 세가지 방식이 있다.

1. Programmed I/O : I/O작업을 하는 동안 CPU가 아무것도 안하고 노는 방식
2. Interrupt-Driven I/O :
1. I/O 디바이스에게 작업하라고 지시하고 CPU는 프로그램 실행
2. I/O작업이 끝나면 인터럽트가 발생해 핸들러가 나타나 잘 종료되었는지 확인하는 방식
1번과 2번의 경우에는 I/O 모듈의 버퍼 -> CPU -> 메인메모리 와 같이 중간에 CPU가 개입되어 있다.
3. Direct Memory Access (DMA) : I/O 모듈에서 바로 메인메모리로 액세스 할 수 있는 방식.
CPU는 가장 처음과 마지막에만 개입한다.
처음 : 명령 분석 후 DMA모듈에게 데이터 이동을 지시
마지막 : 인터럽트 처리
DMA모듈에게 데이터 이동을 지시한다. 이 때 DMA모듈에는 4가지 정보가 필요하다.
- 1. 읽을건지 쓸건지
- 2. I/O 디바이스의 주소 어디로 데이터를 보낼지
- 3. 메모리의 시작주소 : 메모리 어디에 있는 데이터를 처리할지.
- 4. 읽고 쓸 데이터 word 길이
I/O작업이 무사히 다 끝나면 DMA모듈이 인터럽트를 건다. 마지막에 CPU가 OS를 실행시켜서 인터럽트 처리를 한다.
단, DMA 모듈이 버스를 이용할 때 CPU도 해당 버스를 이용해야 한다면 속도가 느려질 수 있다.
Q. 100번지에 정수 100개 데이터를 옮기려고 했다. 그런데 150번지가 다른 사람의 공간이어서 program interrupt 발생하여
CPU가 OS의 인터럽트 서비스 루틴을 실행하여 화면에 segmantation fault를 출력했다고 하자.
이 경우에 즉, 만약 OS가 읽기쓰기 작업을 할 때 잘못되었다면, I/O 인터럽트가 150번지에 갔을 때 바로 발생하는 것인가? 아니면 I/O는 마지막에 인터럽트를 걸어서 잘 실행됐는지 확인한다고 했는데 마지막에 에러처리를 하는 것인가?
'운영체제' 카테고리의 다른 글
| 3장. 프로세스와 프로세스 상태모델, Dispatcher (2) | 2024.03.17 |
|---|---|
| 2장. OS overview 운영체제의 역사 (1) | 2024.03.17 |
| 1장. Memory Hierarchy 메모리 계층 구조 (0) | 2024.03.12 |
| 1장. 명령어 사이클 with Interrupt (0) | 2024.03.09 |
| 1장. Interrupt 인터럽트, 인터럽트가 있는 프로그램의 흐름 (0) | 2024.03.09 |