Chapter 12. I/O Systems

송승윤·6일 전

운영체제 정리

목록 보기
8/10

I/O Systems

I/O Hardware

하드웨어 친구들은 신호를 보내서 시스템이랑 소통함

Port : 장치 연결 지점
Bus : PCI or PCIe bus, Expansion bus, 디스크를 위한 Serial-Attached SCSI (SAS)
Controller : Host adapter로써 port, bus, device를 작동시킴

Device에는 일반적으로 장치 레지스터에서 데이터를 읽는 special register가 있음
종류는 data-in, data-out, status, control 일케됨

Device는 주소도 가지고 있는데 얘네는 밑에 있는 두 친구들이 씀

Port-mapped I/O 장치 레지스터에 해당하는 I/O 포트를 나타내는 직접적인 I/O 명령어를 사용함
Memory-mapped I/O 각 장치 레지스터에 메모리 주소를 매핑하고 해당 주소를 사용하여 레지스터에 접근함

Polling

I/O 한 바이트를 전송할 때마다 아래 절차를 반복함

  1. 상태 레지스터에서 0까지 바쁜 비트 읽기(polling 또는 busy waiting)
  2. 호스트 read or write bit를 세팅하고 write면 데이터를 data-out register에 복사
  3. 호스트가 command-ready bit를 설정함
  4. 컨트롤러가 busy bit을 설정하고 전송 시행
  5. 컨트롤러는 전송이 완료되면 busy bit, error bit, command-ready bit을 지움

Interrupt

CPU는 모든 명령을 시행하고 interrupt-request line을 감지함
이때, interrupt가 감지되면 CPU는 메모리 안의 고정 주소에서 interrupt handler routine으로 이동함

interrupt request line은 두개가 있음
Nonmaskable interrupt, 복구할 수 없는 메모리오류
Maskable interrupt 서비스 요청을 위해 device controller에 의해 사용

interrupt vector는 interrupt를 옳은 handler로 보냄
handler의 메모리 주소를 포함함
여러 디바이스가 동일한 인터럽트 번호에 있는 경우 인터럽트 체인
OS는 부팅 시 해당 interrupt handler를 설치

밑에 있는건 idtr register가 가르키는 IDT(Interrupt Descriptor Table)를 포함한 interrupt handling 과정

interrupt 동작은 exceptions에도 쓰임

Page fault -> memory access error
System call -> trap to trigger kernel

Direct Memory Access

CPU를 우회해 I/O device와 memory 간에 데이터를 직접 전송하는 방식

large data movement를 하기 위해서 프로그래밍된 I/O(한 번에 한 바이트씩)를 피하는 데 사용됨
DMA 컨트롤러 필요

Kernel I/O Structure

I/O system call은 일반 클래스에서 장치 동작을 캡슐화함
device driver layer는 커널에서 I/O controller 간의 차이를 감춤

Block and Character Devices

Block device에는 disk drive가 포함됨
명령어에는 read, write, seek
Raw I/O, direct I/O 또는 file system access

Character에는 키보드, 마우스, 직렬 포트가 포함됨
명령어에는 get, put

Clocks and Timers

얘네들은 current time, elapesed time, 특정 시간 작업 트리거를 위한 timer 기능을 제공함

타이밍, 주기적 interrupt를 위한 programmable interval timer도 있음

Nonblocking and Asynchronous I/O

Blocking 입출력이 완료될 때까지 프로세스가 일시 중단
Nonblocking 가능한 많은 I/O 호출이 반환
Asynchronous - I/O가 시행되는 동안 프로세스 실행

I/O Request Life Cycle

I/O 요청의 사이클은 대충 이러함

0개의 댓글