입출력 서브 시스템(I/O Subsystem) 개요(Overview) 컴퓨터의 2 가지 주요 기능 ① I/O ② 처리(processing) 커널의 I/O Subsystem: I/O 장치 및 그 제어 기법의 다양성 해결 device drivers로 캡슐화(encapsulation)하여 일관된 I/O 서브 시스템 제공 I/O 하드웨어(I/O Hardware) ~ Bus : 와이어 들의 모임: p.403(F12.1) dasy chain: A는 B로, B는 C로 연결 PCI(Peripheral Component Interconnect) bus Expansion bus: 느린 장치들 연결 SCSI(Small Computer Systems Interface) bus: 작은 컴퓨터(a host adaptor) 제어기(controller) port, bus, device들을 동작시키는 전자회로들의 모임 데이터와 제어 신호를 위한 레지스터들로 구성됨 2000 운영체제
I/O 하드웨어(I/O Hardware) ~ 자체 지원 제어기(built-in controller) disk drive에 붙어 있는 circuit board이 자체 지원 disk controller임 SCSI, IDE(Integrated Device Electronics)등의 bus에 연결되기 위한 디스크 쪽의 프로토콜을 구현 microcode와 processor 가짐:bad-sector mapping, prefetching, buffering, caching 위해 프로세서와 제어기 사이의 처리: p403(F12.1) 프로세서는 제어기의 레지스터에 비트 패턴(bit pattern)을 read/write하여 제어기와 통신 ① I/O 명령으로 ② memory-mapped I/O로 PC 호환기종들은 ①, ② 모두 지원 (예) graphics controller: I/O port(3D0-3DF) + memory-mapped region for screen I/O port 레지스터들 status: 호스트가 read, 명령 수행 완료, 바이트 데이터 준비됨, 장치 오류 등 control: 호스트가 write, 명령 수행 시작, 모드 변경 (full/half duplex, parity checking, 7 또는 8 bits wordlength, speed 등) data-in: host가 read, input data-out: host가 write, output 2000 운영체제
I/O 하드웨어(I/O Hardware) ~ 폴링(Polling) handshaking: 호스트와 제어기 사이의 간단한 상호작용 프로토콜 생산자-소비자 관계조정 위해 busy bit과 ready bit 이용 handshaking 절차: 각 바이트마다 다음 반복 ① 호스트는 busy bit가 clear될 때까지 busy bit 계속 조사 = 폴링 또는 바쁜 대기(busy waiting) ② 호스트는command register에 write bit를 설정하고 data-out register에 한 바이트를 write ③ 호스트는 command-ready bit를 설정 ④ 제어기는 command-ready bit가 설정되었음을 아는 즉시 busy bit를 설정 ⑤ 제어기는 command register를 읽어 장치에 출력 ⑥ 제어기는 command-ready bit, status register의 error bit, busy bit를 모두 clear 폴링의 구현: 3 CPU-명령 사이클로 충분하므로 간단하고 효율적 ① 장치 제어기의 status register 읽기 ② status bit 추출위해 Logical-AND(AND masking) ③ 추출한 status bit가 zero가 아니면 branch 그러나 계속 폴링을 해 보아도 장치가 사용가능하지 않은 경우 CPU를 낭비하게 되어 비효율적이므로 대신 interrupt라는 h/w 기법을 이용하여 제어기가 CPU에 I/O 완료를 알리도록 하는 것이 더 효율적임 2000 운영체제
I/O 하드웨어(I/O Hardware) ~ 인터럽트(Interrupts) 인터럽트 절차: p407(F12.3) ① CPU는 매 명령 수행 후 "interrupt request line"을 조사 ② 만일 제어기로부터의 signal이 탐지되면 현 상태를 저장 ③ 메모리의 고정 위치에 있는 interrupt handler의 위치로 jump ④ 인터럽트 원인 파악 ⑤ 인터럽트 처리 ⑥ 인터럽트로부터 복귀 과거의 interrupt 기법은 I/O 완료와 같은 비동기적(asynchronous) 사건(event)을 처리하기만 하면 되었으나 현대의 interrupt 기법은 아래와 같은 세련된 기능들을 요구함 ① 임계구역(critical section) 처리 동안 interrupt 처리를 지연시킴 ② 장치를 일일이 폴링하지 않고도 해당 interrupt handler를 효율적으로 찾아감 ③ 다중레벨 인터럽트(multilevel intterupts) ①의 해법: 두 개의 인터럽트 요구 라인(interrupt request lines) nonmaskable interrupt: error 상황의 인터럽트 maskable interrupt: 장치 제어기가 이용하는 인터럽트들 임계구역 실행 전에 turn off 될 수 있음 p408(F12.4) 0-32: nonmaskable 32-255: maskable 2000 운영체제
I/O 하드웨어(I/O Hardware) ~ ②의 해법: 벡터 인터럽트(vectored interrupt) 특정 interrupt가 보낸 주소값은 각 interrupt-handling 루틴의 기억장소 내의 주소를 담고 있는 interrupt vector table의 offset으로 이용되므로 폴링 필요 없음 ③의 해법: 인터럽트 우선순위 레벨(interrupt priority level) 우선순위 레벨에 따라 우선 순위가 낮은 인터럽트를 선점함으로써 CPU로 하여금 모든 인터럽트를 masking 하지 않고서도 우선순위가 낮은 인터럽트를 지연시킴 인터럽트로 처리하는 경우들 입출력 인터럽트(I/O interrupts) 예외(exceptions): error 상황 가상기억장치 페이징(virtual memory paging):page fault exception 시스템 호출(system calls): trap(software interrupt)이며 낮은 우선순위 가짐 커널안의 흐름제어: 높은 우선순위 스레드와 낮은 우선순위의 스레드 사이의 제어 현대의 OS는 다음을 이용 interrupts: 비동기적 사건을 처리하며 supervisor-mode로의 trap하기 위해 interrupt priorities: 중요한 작업이 우선적으로 수행되게 하려고 2000 운영체제
Interrupt-drive I/O Cycle 2000 운영체제
I/O 하드웨어(I/O Hardware) ~ DMA(Direct Memory Access) PIO(Programmed I/O) 는 제어기의 레지스터에 한순간에 한 바이트씩 전송 DMA 전송: DMA 제어기(DMA controller) 이용 (예) PC의 bus-mastering I/O boards 호스트는 DMA command block의 주소를 DMA 제어기에 기록 DMA command block에는 근원지 주소(source pointer) 목적지 주소(destination pointer) 전송할 바이트 수 DMA는 메모리 버스에 주소를 설정하고 CPU의 참견없이 전송을 시작 DMA 제어기와 장치 제어기 사이의 handshaking DMA-request와 DMA-acknowledgement의 두 H/W wires 이용, p407(F12.5) ① 장치 제어기는 전송할 데이터가 준비되면 DMA-request wire에 signal 보냄 ② DMA 제어기는 메모리 버스를 확보한 후 memory address wires에 주소를 설정한 다음DMA-acknowledge wire에 signal 보냄 ③ 장치 제어가는 DMA-Acknowledge signal을 받은 후 데이터를 메모리로 전송하고 나서 DMA-request signal을 제거함 ④ 전체 전송이 끝나면 DMA 제어기는 CPU에 I/O 완료 interrupt를 보냄 2000 운영체제
I/O 하드웨어(I/O Hardware) ~ Cycle stealing(DMA가 메모리 버스를 장악한 동안 CPU는 메모리 접근할 수 없고 단지 cache만 접근 가능)으로 CPU의 계산이 다소 느려지나 데이터 전송의 부담을 없애(offloading) 전체 시스템 성능은 향상됨 DMA: 물리주소 이용한 DMA DVMA(Direct Virtual Memory Access): 가상 주소 이용한 DMA (가상주소는 물리주소로 변환됨) Protected mode kernels: 직접 장치 제어기에 명령할 수 없음(일반적인 추세) 접근 위반으로부터 데이터 보호, crash 방지하나 OS은 H/W를 다룰 수 있는 하위 레벨 함수를 이용할 수 있게 하는 함수를 지원해야 함 Unprotected kernels: 직접 장치 제어기에 접근할 수 있음 커널과의 통신, 문맥교환, 커널 계층을 피할 수 있어서 좋은 성능을 얻을 수 있으나 보안과 안정성이 떨어짐) 2000 운영체제
I/O 하드웨어(I/O Hardware) OS의 I/O 관련된 주요 개념 버스 제어기 입출력 포트와 그 레지스터들 호스트와 제어기 사이의 handshaking 폴링 또는 인터럽트에 의한 handshaking 대량전송에서 DMA 제어기에게 I/O 부담을 떠넘김 OS는 응용 프로그램에게 편리하고 일관성 있는 I/O interface 제공해야 함 각 장치의 능력, 제어 비트, 호스트와의 상호작용 프로토콜이 매우 다양하므로 새 장치 추가되어도 OS 고치지 않을 수 있도록 해야 함 2000 운영체제
Six step process to perform DMA transfer 2000 운영체제