[OS] I/O System

메르센고수·2024년 6월 12일
0

Computer Science

목록 보기
11/11
post-thumbnail

마지막 Posting이다. 지금까지 운영체제에 대해 내 나름대로 이해한 내용을 적어보았는데, Windows, MacOS, Linux를 만든 사람은 정말 신이 아닐까 싶다. 아직도 이해안 된 부분도 존재하고 더 깊게 들어가지 않은 부분도 존재하기 때문에 배워야할 내용이 산더미 인 것 같다. 그럼에도 글로 정리하면서 운영체제를 다루고 이해했다는 점에서 뿌듯함을 느낀다.

I/O Hardware

Port

: Serial port 같이 I/O device의 관문을 의미한다.

Register

I/O port의 경우 4개의 register가 존재한다.

  1. Status register
    : Device의 상태를 나타내며 host가 읽을 수 있는 bit들을 갖고 있다. (Busy bit, error bit)
  2. Control register
    : 명령을 시작하거나 device의 mode를 변경하기 위해 host가 작성할 수 있다.
  3. Data-in register
    : Input을 넣기 위해 host가 읽을 수 있는 register
  4. Data-out register
    : Output을 보내기 위해 host가 쓸 수 있는 register

Bus

: I/O device를 제어하는 자체 CPU

Controller

Polling

: OS가 status register를 읽으면서 명령의 수신 여부를 주기적으로 확인하는 과정을 의미한다.

Polling을 하는 동안은 다른 process에게 CPU를 양도하지 않고 하드웨어 장치가 동작을 완료할 떄까지 계속 while loop를 돌면서 하드웨어의 상태를 체크하기 때문에 busy waiting 문제가 발생한다. 또한 하드웨어의 속도는 매우 느리기 때문에 CPU를 양도하지 않고 하드웨어의 상태를 확인하는 과정은 CPU 자원을 낭비하기 때문에 Interrupt가 더 효율적인 방법이 될 수도 있다.

Interrupts

CPU 하드웨어는 interrupt-request line이라는 wire를 갖고 있다. 이는 fetch-execute-interrupt-request line check의 과정으로 진행되는데 만약 interrupt signal을 받게 된다면 CPU가 상태를 저장한 뒤 interrupt handler rountine으로 jump를 해서 interrupt를 처리한다.

Two interrupt-request lines

  • Nonmaskable : 회복 불가능한 memory error 같은 event를 위해 존재한다. 여기서 회복 불가능한 memory error의 경우 휘발성 memory에 전원을 끊었을 때 data가 전부 날아가는 경우 같은 상황을 의미한다.
  • Maskable : Device controller에 의해 사용되며 critical instruction sequence 이전에 CPU에 의해 전원이 꺼진다.

Block and Character Devices

Block devices

include disk drives

  • read, write, seek 같은 명령어를 사용한다.
  • DB System 같은 Raw I/O 또는 file-system access가 존재한다.
  • Memory-mapped file access가 가능하다 (file 자체를 memory에 mapping 하는 방법)
    Memory-mapped file access의 경우 Virtual Memory posting을 참고하길 바란다.

Character devices

include keyboard, mouse, serial ports

  • get, put 같은 명령어를 사용한다.
  • 즉각적으로 input data를 만들어내는 keyboard나 mouse 같은 device들에 적합하다
  • printer, audio board 같은 output device들에 적합하다

Blocking and Nonblocking I/O

Blocking I/O

  • I/O가 끝날때까지 suspend 상태로 있는다
  • Application은 run queue에서 wait queue로 이동한다
  • 사용과 이해가 쉽다

Non-blocking I/O

  • I/O가 가능한 빨리 return을 호출한다.
  • Wait 상태로 전환하지 않고, 돌아올 때까지 진행된 결과만 갖고 돌아온다.

Asynchronous I/O

  • I/O가 실행하는 동안에도 process는 작동한다
  • 사용하기 힘들다

Kernel I/O Subsystem

Scheduling

: Hard disk에 명령을 내리는 순서 결정

Buffering

Buffer

: 두 data processing 주체 사이에서 data를 transfer 하는 과정에서 중간 단계로 임시 저장하는 device

  • Device 간에 transfer를 진행하는 동안에 memory에 임시로 data를 저장한다.
  • Speed mismatch로 인한 data 손실을 방지한다.
  • Size mismatch를 대처한다.
  • copy semantics을 유지하기 위함
    • "The version of the data written to disk is guaranteed to be the version of at the time of the application system call, independet of any subsequent changes in the application's buffer"
  • Application의 control을 돌려받기 전에 application의 data를 kernel buffer로 복사한다. 이 때 disk write의 경우 application buffer가 아닌 kernel buffer에서 진행된다.

Caching

: Data의 복제본을 갖고 있는 속도가 빠른 memory 영역

Spooling

: Printer 같이 device 자체가 매우 느린 경우 device에 보내는 output data를 임시로 저장한다.

Printer ... serve only one request at a time

Error Handling

  • OS는 read failure, device unavailable, transient write failure 같은 문제들을 복구한다.
  • I/O request가 실패할 때 error number나 code를 return한다.
  • System error log가 problem report에 대한 정보를 갖고 있다.

Kernel Data Structures

  • Open file table, network connection, character device state 같은 상태 정보를 갖고 있다.

Performance

I/O는 system 성능에서 중요한 요소이다.

  • Device driver, kernel I/O code를 실행하기 위한 CPU의 demand
  • Interrupt에 의한 context switch
  • Data copying
  • Network Traffic

I/O 성능 향상

  • Context switch 횟수 줄이기
  • Data 복제 횟수 줄이기
  • Large transfer, polling을 이용한 interrupt 줄이기
  • DMA 사용
  • 최고의 throughput을 위한 CPU, memory, bus, I/O의 균형


---------------------------------------끝----------------------------------------

profile
블로그 이전했습니다 (https://phj6724.tistory.com/)

0개의 댓글