본문 바로가기

운영체제

1장. I/O Techniques. I/O 작업의 방식

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는 마지막에 인터럽트를 걸어서 잘 실행됐는지 확인한다고 했는데 마지막에 에러처리를 하는 것인가?