본문 바로가기
Computer Science/Operating System

I/O Register, Device Driver

by Gofo 2021. 6. 20.

I/O Register

I/O device는 I/O bus들에 연결되어 통신을 수행한다.

I/O bus에는 ISA, PCI, EISA 등의 종류가 있다.

 

Local bus는 속도가 가장 빠른 bus 이다.

CPU와 memory가 빠른 속도로 접근해서 데이터를 가져올 수 있도록 연결되어있다.

 

High-speed I/O bus에는 고속으로 동작해야하는 I/O device가 연결되어있다.

Local bus와 high-speed는 interface로 연결되어있다.

High-speed I/O bus와 low-speed I/O bus는 bridge로 연결되어있다.

 

위쪽의 local bus와 interface를 north bridge, high-speed I/O bus와 그 아래쪽을 south bridge라고 한다.

 

 

I/O Device의 구성

I/O device는 기계적 요소인 device와 전자적 요소인 controller로 구성되어있다.

이는 bus에 연결되어 CPU와 연결된다.

 

Bus는 다음과 같이 구분된다.

  • address line : 주소값을 전달
  • data line : 실제 data를 전달
  • control line : interrupt, 전원인가 등 제어와 관련된 명령을 전달

 

I/O Register

I/O interface를 구성하는 가장 중요한 요소이다.

종류와 관계 없이 4가지 종류의 레지스터를 가진다.

  • status register : 현재 작업을 진행해도 되는지를 나타냄 (ready vs. busy)
  • contorl register : CPU에 전달할 명령어를 저장하고 있는 레지스터
  • data-in register : CPU가 I/O 장치에서 가져올 데이터를 저장하는 레지스터
  • data-out register : CPU가 I/O 장치로 내보낼 데이터를 저장하는 레지스터

 

CPU가 I/O register에 접근하는 방식은 2가지가 있다.

  • MMIO (Memory-Mapped IO)
    • memory address space 상에 I/O 레지스터를 mapping 한다.
      • 메모리의 특정 영역을 I/O를 접근하도록 설계해야 한다.
      • 영구적으로하거나 임시로 설정하도록 설계한다.
      • address를 decoding 하는 별도의 logic이 하드웨어적으로 설계되서 포함되어야 한다.
    • memory에 접근하는 명령어와 I/O device에 접근하는 명령어가 동일하다.
    • memory와 IO device가 data, address, contorl bus를 공유한다.
  • PMIO (Port Mapped IO)
    • I/O를 위한 address space와 memory를 위한 address space가 독립적으로 구분되어있다.
    • memory에 접근하는 명령어와 IO에 접근하는 명령어가 다르다.
      • CPU가 I/O status를 보고, control register를 통해서 read/write 요청을 I/O 장치에 전달한다.
      • register I/O instruction : in, out 등 (intel)
      • block I/O instruction : ins, outs 등 (intel)
    • data bus와 address bus는 메모리와 IO가 공유한다.
    • control bus는 메모리와 I/O가 독립적으로 가지고 있다.
      • 명령어 종류에 따라서 M/IO line이 high/low 상태로 바뀐다.

 


Device Driver

APIs

Device 유형에 상관 없이 제공하는 API는 다음과 같다.

Device 별로 제공한다.

  • open
  • close
  • read
  • write
  • ioctl

 

Device Driver에 접근 방식

chracter device와 block device는 device file을 통해서 device driver에 접근한다.

network device는 socket API를 통해서 device driver에 접근한다.

 

Device File

Device file에 포함되는 내용은 장치(운영체제)마다 다르다.

 

마우스는 마우스의 움직임을 character stream으로 포함한다.

hard disk는 접근 가능한 영역을 포함한다.

 

동일한 유형의 IO device는 동일한 유형의 device file을 갖고, 구분하기 위해 서로 다른 minor number를 배정한다.

 

Device Driver Structure

Block device는 대량의 데이터를 read/write 하기 때문에 시스템의 성능과 직결되어있다.

이를 위해서 한번 읽어온 block을 담아두는 buffer cache가 존재한다.

 

block device가 요청한 request들의 순서를 더 빠르게 하기 위해서 바꿔서 실행하기도 한다.

이를 위해서 request queue가 존재한다.

 

Data transfer

Device driver가 device와 데이터를 주고 받는 방법에는 두 가지가 있다.

  • polling (programmed I/O) : loop을 통해서 device의 상태를 확인한다.
  • interrupt (interrupt driven I/O) : device가 필요한 작업이 발생하면 CPU에 interrupt를 발생시킨다.

 

Linux Interrupt

Linux에서 interrupt handling은 2 level로 나뉜다.

  • top half (interrupt handler)
    • interrupt가 발생했을 때 바로 처리한다.
    • high priority function (PIC 등)
    • 도중에 다른 interrupt에 의해 중단되지 않도록 interrupt disalbe을 하고 실행시킨다.
  • bottom half
    • interrupt가 발생해도 나중에 CPU에 여유가 생기면 처리한다.
    • low priority function
    • interrupt를 enable 해놓은 상태에서 실행한다.

 

Read/Write Processing

  • blocking : data read/write가 불가능하면 기다린다.
  • non-blocking : data read/write가 불가능하면 즉시 return 한다.

 

 


DMA (Direct Memory Access)

원래 instruction을 처리해야 하는 CPU가 I/O 작업을 하면 굉장한 부담이 된다.

이를 위해서 I/O 작업을 처리하는 하드웨어를 추가한다.

이를 DMA라고 한다.

 

DMA를 사용하면 CPU는 instruction 처리에 집중 할 수 있기 때문에 성능이 좋아진다.

 

CPU는 DMA에게 데이터를 쓸 address를 제공한다.

이후의 작업은 모두 DMA가 처리한다.

처리가 끝나면 DMA는 CPU에게 신호를 보내서 작업이 끝났음을 알려준다.

 

Cycle Stealing

DMA가 memory와 IO를 연결하는 bus를 사용한다.

때문에 DMA가 bus를 사용할 때에는 CPU가 bus를 사용하지 못하게 된다.

 

따라서 CPU가 메모리에서 instruction과 data를 읽을 수 없게 된다.

다만, CPU에는 cache가 있기 때문에 실제로는 CPU가 bus를 거쳐서 instruction과 data를 가져올 확률이 높지는 않다.

 

 

'Computer Science > Operating System' 카테고리의 다른 글

File System, Directory  (0) 2021.06.21
File System, File  (0) 2021.06.20
I/O Devices  (0) 2021.06.20
성능에 미치는 요인들  (0) 2021.06.20
Memory Optimization  (0) 2021.06.20

댓글