MADE FOR ALL

블로그 이미지

MSNU

12. 입출력 시스템(I/O Systems)

시리즈/OS 2014. 8. 12. 22:04






















12. 입출력 시스템(I/O Systems)


12.1 개요(Overview)


▶ 입출력 부시스템(I/O subsystem): 다양한 입출력 장치들의 다양한 제어를 위한 시스템

ex) 하드디스크, 마우스, CD-ROM 쥬크 박스 등


▶ 입출력 장치 기술의 경향

- 입출력 장치의 다양화

- 소프트웨어와 하드웨어간 인터페이스의 표준화

→ 장치 구동기(device driver): 일관된 장치 접근 인터페이스를 제공


12.2 입출력 하드웨어(I/O Hardware)


▶ 장치의 종류

- 저장장치: 디스크, 테이프

- 전송장치: 네트워크 카드, 모뎀

- 사용자 인터페이스 장치: 스크린, 키보드, 마우스


▶ 장치와 컴퓨터 시스템간의 통신

- 포트(port): 연결점

- 버스(bus): 여러 장치들이 공용하는 와이어 집합

  ex) 데이지 체인(daisy chain): 장치 A - 장치 B - 장치 C


▶ 버스: [그림 12.1] 전형적인 PC 버스 구조

- PCI 버스: 프로세서-메모리 부시스템과 고속 장치의 연결

- 확장 버스: 저속 장치의 연결 ex) 키보드, 병렬포트, 직렬포트

- SCSI 버스: 고속 디스크들의 연결


▶ 제어기(controller): 포트, 버스, 장치의 작동

- 단일 칩(chip)으로 구현: ex) 직렬 포트 제어기

- 회로 기판으로 구현: ex) SCSI 제어기

- 장치에 내장된 제어기: ex) 디스크 구동기에 부착된 기판


▶ 프로세서와 제어기의 통신

- 제어기마다 레지스터 집합을 사용

- 입출력 명령어에 의한 수행

① 버스 선의 트리거링에 의한 통신 장치 선택

② 메모리 대응 입출력(memory-mapped I/O)에 의한 통신

  → 장치 제어 레지스터들이 프로세서의 주소 공간으로 대응

ex) 그래픽 제어기: 스크린의 내용을 저장하기 위한 그래픽 메모리 사용

  (장점) 신속한 입출력

  (단점) 프로그래밍 오류에 의한 훼손 가능 - 보호된 메모리 방식으로 해결

- 입출력 포트: [그림 12.2] 호환성 PC에서 장치 입출력 포트의 위치

→ 4개의 레지스터로 구성

① status 레지스터: 장치의 상태

  ex) 판독 가능 여부, 에러 유발 여부 등

② control 레지스터: 장치 모드의 변경

  ex) 전이중(full-duplex) 혹은 반이중(half-duplex) 통신의 선택, 패리티 검사, 워드 길이 선택, 

      전송 속도 선택 등

③ data-in 레지스터: 입력용 자료 레지스터

④ data-out 레지스터: 출력용 자료 레지스터


12.2.1 폴링(Polling)


▶ 핸드셰이킹(handshaking): 호스트와 제어기 사이의 교류를 위한 프로토콜

- 제어기는 status 레지스터의 busy 비트를 통해 상태를 지정함

① 명령을 수행중인 상태: busy=1

② 명령 수행을 완료하고 다음 명령을 기다리는 상태: busy=0

- 호스트는 command 레지스터의 command-ready 비트를 사용

① 제어기에게 명령을 한 상태: command-ready=1

② 제어기가 명령 수행을 완료한 상태: command-ready=0

(예) 출력: 

① 호스트는 클리어 될 때까지 busy 비트를 반복적으로 판독

② 호스트는 command 레지스터의 write 비트를 설정하고 data-out 레지스터에 한 바이트를 씀 

③ 호스트는 command-ready 비트를 설정

④ 제어기가 command-ready 비트가 설정되었음을 알아차리면 busy 비트를 설정

⑤ 제어기는 command 레지스터를 판독하여 명령이 write임을 파악하고, data-out 레지스터를 판독하여 해당 바이트를 가져와 장치에 출력함

⑥ 제어기는 command-ready 비트를 클리어하고, 입출력 성공을 알리기 위해서는 status 레지스터의 error 비트를 클리어하며, busy 비트를 클리어함


▶ 폴링(polling)/사용중 대기(busy-waiting): 위 과정 ①에서 발생

→ 중앙처리장치의 비효율성 초래: 제어기가 중앙처리장치에 통보하는 인터럽트 방식이 효과적


12.2.2 인터럽트(Interrupts)


▶ 인터럽트 방식의 입출력: [그림 12.3] 인터럽트 구동 입출력 사이클

- 중앙처리장치는 매 명령어 수행 직후에 인터럽트 요청 라인(interrupt request line)을 검사하여 제어기에 의해 보내져온 인터럽트가 있는지 검사

- 중앙처리장치가 인터럽트 신호를 감지하면 현재 상태를 저장하고 인터럽트 핸들러 루틴(interrupt handler routine)으로 이동

- 인터럽트 핸들러는 인터럽트를 분석하고 해당 처리를 수행한 후, return from interrupt 명령을 수행하여 인터럽트 전의 상태로 복귀


▶ 세련된 인터럽트 핸들링 방법

- 중요한 처리 중에는 인터럽트 처리를 미룰 수 있는 방법 필요

- 모든 장치를 폴링하지 않고 인터럽트를 일으킨 장치를 인터럽트 핸들러에게 통지하는 방법 필요

- 인터럽트의 우선 순위에 따라 긴급성을 조절하는 다계층 인터럽트 필요


▶ 두 인터럽트 라인의 경우

- 마스크 불가 인터럽트 라인(nonmaskable interrupt line): 긴급한 에러 발생시

- 마스크 가능 인터럽트 라인(maskable interrupt line): 일반적인 인터럽트 발생시

  → 단, 인터럽트 걸려서는 안 되는 명령어 수행 시, 중앙처리장치에 의해 해제될 수 있음


▶ 특정 인터럽트 핸들러의 선택

- 인터럽트 번호: 인터럽트 벡터(interrupt vector)의 변위로 사용

→ 인터럽트 핸들러 주소를 파악

- 인터럽트 체이닝(chaining): 인터럽트 벡터의 용량보다 장치 수가 많은 경우에 사용하는 기법

→ 인터럽트 벡터의 각 원소들이 인터럽트 핸들러 리스트의 헤드를 가리키게 하고, 해당 리스트를 탐색하게 하는 방법


▶ (예) [그림 12.4] 인텔 펜티엄 프로세서의 인터럽트 벡터 테이블

- 0-31: 마스크 불가 → 다양한 에러용

- 32-255: 마스크 가능 → 장치 생성 인터럽트용


▶ 인터럽트 우선 순위 단계(interrupt priority levels)

→ 높은 우선 순위의 인터럽트가 낮은 우선 순위의 인터럽트 수행을 선점


▶ 다양한 인터럽트 메커니즘

- 일반적인 용도

① 부팅 시: 하드웨어 버스를 조사하여 존재하는 장치를 파악하고 인터럽트 벡터 내에 적절한 인터럽트 핸들러를 설치함

② 입출력 시: 출력 완료, 입력 자료의 유효 또는 오류

③ 예외 발생 시: ex) 0으로 나누기, 부적절한 주소 접근, 사용자 모드에서의 부적절한 명령 시도

- 하드웨어 메커니즘의 적절한 사용: ex) 페이지 부재 인터럽트

- 시스템 호출의 수행: 응용 프로그램이 커널 서비스를 호출하기 위한 함수 호출

- 커널 안에서의 제어 흐름 관리: ex) 디스크 판독

- 스레드 커널 구조: 백그라운드 처리에 대한 인터럽트 핸들링


12.2.3 직접 메모리 접근(Direct Memory Access)


▶ 프로그램된 입출력(Programmed I/O; PIO): 상태 비트를 감시하고 한번에 1 워드(바이트)씩 제어기 레지스터에 옮기는 것

→ 디스크와 같이 많은 전송을 하는 경우, 범용의 중앙처리장치가 담당하는 것은 비효율적이고, 직접 메모리 접근 제어기라 불리는 별도의 처리기가 담당하는 것이 바람직


▶ 직접 메모리 접근(Direct Memory Access; DMA)

- DMA 전송을 초기화하기 위해, 호스트는 DMA 명령 블록을 기억장치에 씀

                 (전송 소스의 포인터, 전송 목적지의 포인터, 전송 바이트 수의 카운터를 포함)

- CPU는 이 명령 블록의 주소를 DMA 제어기에 기록하고 다른 작업을 계속함

- DMA 제어기는 직접 메모리 버스를 운영하여 한 워드씩 전송함


▶ DMA 제어기와 장치 제어기간의 핸드셰이킹

→ DMA-request와 DMA-acknowledge의 두 와이어를 통해 수행

- 장치 제어기는 한 워드의 자료가 메모리로 전송 가능할 때 DMA-request에 신호를 보냄

- DMA 제어기는 이 신호를 받으면, 메모리 버스를 점유하고 메모리 주소 와이어에 원하는 주소를 위치시키며 DMA-acknowledge에 신호를 보냄

- 이 신호를 받은 장치 제어기는 한 워드 자료를 메모리로 전송하고 DMA-request 신호를 해제함

- 전송이 완료되면, DMA 제어기는 CPU에 인터럽트를 검

[그림 12.5] 직접 메모리 접근 전송의 단계


▶ 직접 가상 메모리 접근(Direct Virtual Memory Access; DVMA)

→ 중앙처리장치의 간섭과 주기억장치 사용 없이 두개의 메모리 대응 장치(memory-mapped device) 사이에서의 전송이 가능


12.3 응용 입출력 인터페이스(Application I/O Interface)


▶ 개념: 다양한 입출력 장치를 규격화되고 일관된 방식으로 취급하기 위한 기법과 인터페이스를 구성하는 방법


▶ 접근 방법: 추상화, 캡슐화, 계층화

- 입출력 장치들을 일반적인 종류로 추상화

- 일반적인 종류 각각은 인터페이스라는 규격화된 함수 집합으로 접근

→ 차이점은 장치 구동기로 캡슐화됨

- 소프트웨어 계층화: [그림 12.6] 커널의 입출력 구조

→ 입출력 부시스템을 하드웨어와 독립적으로 만들 수 있음

  (장점) 

  ① 운영체제 개발자: 개발 작업이 단순화 됨

  ② 하드웨어 제조업자: 범용 운영체제 맞는 장치 제어기를 만듦으로써 즉시 사용가능 함


▶ 장치의 다양성: [그림 12.7] 입출력 장치의 특성

→ p.444-445 참조


▶ escape 또는 back-door 시스템 호출: 임의의 명령어를 응용에서 장치 구동기로 투명하게 전달하는 방법

ex) UNIX의 ioctl 시스템 호출: 3 인수

- 파일 디스크립터(descriptor)

- 명령어 선택을 위한 정수

- 임의의 자료구조를 가리키는 포인터


12.3.1 블록과 문자 장치(Block and Character Device)


▶ 블록 장치 인터페이스를 통한 장치 접근: ex) 디스크 구동기

→ read, write, seek 명령


▶ 메모리 대응(memory mapped) 파일 접근: 블록 장치 구동기의 최상위 계층에 해당

→ 주기억장치 상의 바이트 배열을 통해 저장장소로의 접근을 제공


▶ 문자 스트림 인터페이스를 통한 장치 접근: ex) 키보드, 마우스, 모뎀

- 한 문자의 입출력 가능

- 버퍼링과 편집 서비스에 의한 동시의 라인 접근(line-at-a-time access) 제공 가능


12.3.2 네트워크 장치(Network Devices)


▶ 네트워크 입출력 인터페이스: ‘네트워크 소켓(socket) 인터페이스’

ex) UNIX 또는 Windows NT

→ 소켓 인터페이스에서의 시스템 호출은,

- 응용이 소켓을 생성하게 하고,

- 지역 소켓을 원격 주소에 연결하고,

- 어떤 원격 응용이 지역 소켓으로 플러그되는지 알아보고,

- 연결을 통해 패킷을 주고받도록 함

* select 호출: 어느 소켓이 수신될 패킷을 기다리고 있는지, 어느 소켓이 전송될 패킷을 저장할 공간을 가지고 있는지를 리턴 받음


12.3.3 클록과 타이머(Clocks and Timers)


▶ 세 가지 함수 제공

- 현재 시간 제공

- 경과 시간 제공

- T시간에 X 트리거 동작을 발생하는 타이머 지정

→ 시스템 호출이 표준화되어 있지 않음


12.3.4 블로킹과 논블로킹 입출력(Blocking and Nonblocking I/O)


▶ 블로킹 시스템 호출: 응용의 실행이 지연됨

- 시스템 호출 시, 응용은 실행(준비) 큐에서 대기 큐로 이동

- 시스템 호출의 수행 후 응용은 다시 실행 큐로 이동


▶ 논블로킹 시스템 호출: 응용의 실행이 계속됨

ex) 처리중이거나 스크린에 자료를 표시하는 중에 키보드나 마우스의 입력을 받는 인터페이스

    디스크를 판독하면서 동시에 압축을 풀고 디스플레이하는 비디오 응용

→ 구현: 1) 다중 스레드 응용, 2) 비동기적 시스템 호출


12.4 커널 입출력 부시스템(Kernel I/O Subsystem)


12.4.1 스케줄링(Scheduling)


▶ 입출력 스케줄링: 장치 큐의 스케줄링에 의한 요청 재배치 → 13.2절 참조

(목적) 

- 전반적인 시스템 성능 향상

- 프로세스간의 장비 접근을 공평하게 공유

- 입출력 완료까지의 평균 대기 시간 감소

ex) 디스크 헤드가 시작부분에 위치하는 경우, 

  (장치 큐) 응용 1-끝 부분 블록 요청, 응용 2-시작 부분 블록 요청, 응용 3-중간 부분 블록 요청

    → 재배치: 응용 2, 응용 3, 응용 1 


12.4.2 버퍼링(Buffering)


▶ 버퍼: 두 장치 사이 혹은 응용과 장치 사이에 자료 전송을 위한 임시 저장 공간


▶ 버퍼링의 필요성

- 생산자와 소비자 사이의 자료 흐름 속도의 불일치에 대처하기 위함

ex) 파일 전송: 하드디스크 ↔ 모뎀

→ 이중 버퍼링(double buffering)에 의한 비간섭화(decoupling): 

   모뎀이 한 버퍼를 채우는 동안 이미 채워진 버퍼를 디스크에 기록하는 방법

[그림 12.8] Sun Enterprise 6000 장치 전송률

- 서로 다른 자료 전송 크기를 가지고 있는 장치들을 적응시키기 위함

ex) 메시지의 분할(fragmentation)과 재결합(reassembly)에 의한 네트워크 전송

→ 송신측에서 메시지를 패킷(packet) 단위로 분할하여 전송하고 수신측에서 재결합 함

- 응용의 입출력을 위한 “복사 의미론(copy semantics)”을 지원하기 위함

ex) 응용이 버퍼에 대한 포인터와 출력할 바이트 수를 가지고 write 시스템 호출을 한 시점과 동일한 버전의 자료를 디스크에서 보장하는 것

→ write 시스템 호출 시, 응용 버퍼에서 커널 버퍼로 자료를 복사하고 실제 출력은 커널 버퍼로부터 이루어짐


12.4.3 캐싱(Caching)


▶ 캐시(cache): 자료의 복사본을 가지고 있는 빠른 메모리 영역 → 접근 속도가 효율적


▶ 버퍼와 캐시의 차이점

- 버퍼: 현재 복사본을 저장

- 캐시: 다른 곳에 저장된 자료의 복사본을 보다 빠른 기억장소에 저장

→ 동일한 기억장치 영역이 버퍼와 캐시 모두를 위해 사용 가능


12.4.4 스풀링(Spooling) 및 장치 예약(Device Reservation)


▶ 스풀(spool): 중첩되는 자료 스트림을 수용할 수 없는 장치를 위한 출력 버퍼 ex) 프린터

→ 스풀링 시스템이 프린터로 가는 모든 출력을 가로채어 디스크에 파일로 보관하고 하나씩 출력


▶ 배타적인 장치 접근으로 스풀링을 대신할 수 있음

→ 유휴 장치의 할당(allocate) 및 사용 후 해제(deallocate)


12.4.5 에러 처리(Error Handling)


▶ 보호 메모리(protected memory): 하드웨어 및 응용의 에러에 의한 접근에 대처 가능

→ 미미한 에러에 의해 전반적인 시스템 고장이 유발되는 것을 방지


▶ 일시적인 고장에 대한 대처 방안: 

ex) 디스크 read 실패시 read를 재시도, 망의 send 에러시 resend 시도


12.4.6 커널 자료 구조(Kernel Data Structure)


▶ 커널은 입출력 구성 요소의 사용에 대한 상태 정보를 유지해야 함: ex) 개방 파일 테이블

- UNIX: 사용자 파일, 장치 자체, 프로세스의 주소 공간 등의 다양한 객체에 대한 파일 시스템 접근을 제공 → 단일 구조체 내에 은닉함: [그림 12.9] UNIX 입출력 커널 구조

- Windows NT: 입출력을 위한 메시지 전달 방법을 사용

  → 메시지의 출력이나 입력을 위한 버퍼를 가짐


▶ 입출력 부시스템의 서비스: p.455-456의 내용


12.5 입출력 요청의 하드웨어 작업 변환(Transforming I/O Requests to Hardware Operations)


▶ 블록킹 판독 요청의 일반적인 모습: [그림 12.10] 입출력 요청의 전 사이클 → p.458-459의 1-10


12.6 성능(Performance)


▶ 원거리에 있는 컴퓨터간의 로그인의 예: [그림 12.11] 컴퓨터간 통신과 비용


▶ 입출력의 효율성 증대를 위한 원칙: p.461-462의 내용


▶ 입출력 기능 구현의 위치: p.462-463의 내용 → 응용, 커널, 하드웨어






'시리즈 > OS' 카테고리의 다른 글

제3의 저장장치 구조(Tertiary Storage Structure)  (0) 2014.08.20
13.1 디스크 구조(Disk Structure) - 보조저장장치 구조(Secondary Storage Structures)  (0) 2014.08.15
11.1 파일 시스템 구조(File-System Structure)  (0) 2014.08.08
10. 파일 시스템 인터페이스(File System Interface)  (0) 2014.08.07
가상 기억장치(Virtual Memory)  (0) 2014.07.27
Posted by MSNU






favicon

MADE FOR ALL

  • 태그
  • 링크 추가
  • 방명록

관리자 메뉴

  • 관리자 모드
  • 글쓰기
  • 분류 전체보기 (609)
    • 러시아어 (16)
    • myPPT (414)
    • 시리즈 (166)
      • OS (14)
      • 회계 (57)
      • 경제 (22)

카테고리

PC화면 보기 티스토리 Daum

티스토리툴바