I/O Device Controller
다양한 입출력 장치를 제어하기 위한 인터페이스
3개의 시스템 버스를 통해 동작하며 각각의 레지스터를 가지고 있다.
1. Status Register : 현재 디바이스의 사용 가능 여부
2. Control Register : 수행 할 제어 정보 저장
3. Data Register : 장치로 넘겨줄, 넘겨 받을 정보 저장
복잡한 장치들은 여러개의 control, status 레지스터들을 가지고 있다.
입출력 장치들은 주소를 가지고 있으며
1. Port-mapped I/O
2. Memory-mapped I/O
두 가지 주소 방식이 있으며 같이 쓰일 수 있다.
Port-mapped I/O
Main-memory로 부터 독립된 주소 공간이 필요
장치제어를 위한 추가적인 명령어가 필요
x86 구조에서는in,out명령어 사용
Memory-mapped I/O
메인 메모리에 I/O 주소를 위한 공간 할당
기존의 명령어(load, store)로 제어 가능
I/O Control
입출력 제어 방법
1. Programmed I/O (PIO)
2. Interrupt I/O
3. DMA I/O
4. Channel I/O
Programmed I/O(Polling)
입출력 장치가 I/O request를 하면
Cpu는 장치가 준비 될 때 까지 Loop를 돌며 확인
(준비 + 수행)시간까지 Cpu Cycle을 사용하기 때문에 비효율적이다.(다른작업 불가능)Interrupt I/O
Cpu는 작업을 하다가 I/O 장치의 Interrupt를 캐치하여
입출력 작업으로 문맥전환을 하여 처리한다.
장치의 준비시간을 기다릴 필요가 없으며 Interrupt를 캐치하면 handling해주면 된다.
PIO와 같이 쓰일 수 있으며 I/O 발생률이 높은 경우에 사용한다.DMA(Direct Memory Access)
대용량 데이터 처리에 효과적인 방법
DMA Controller가 시스템 버스 사용을
요청한 후 Source, Destination, Number of Byte를 받아 직접 입출력을 진행한다.
Cpu는 한번의 인터럽트(완료 신호)만 처리하면 된다.
Cpu가 할 일을 DMA Controller가 대신하기에
효율적이다
Week06 - Announcement
배열과 포인터의 관계
1. 선언한 배열의 이름은 배열의 첫번째 주소가 된다.
2. 배열의 이름은 포인터 타입이 되며 포인터 처럼 사용할 수 있다.
3. 배열의 이름으로 인덱싱 하는 것은 포인터의 주소연산으로 치환될 수 있다.
2차원 배열로의 확장