디바이스 관리

지섭·2023년 8월 7일

입출력 장치(I/O 디바이스)는 왜 필요?

  • 입출력 장치 없이는 컴퓨터는 무용지물
    - 키보드, 모니터 없이 본체만 있다면?
    - 프로세서는 디바이스와 반드시 연결되어야

P: 입출력 장치 종류 매우 많음, 특성도 다양

  • 종류별, 특성별로 어떻게 연결?

  • 어떻게 동일한(비슷한) 인터페이스 보여줄 수 있을까?

  • 입출력 장치 구분:

    - 데이터 세분성(granularity) : 바이트/블록
    	- 사용하는 디바이스 기본 단위가 바이트인지 블록인지?
        
    - 접근 방식(Access Pattern)
    	- 순차 접근(Sequential), 임의 접근(Random)
        
    - 전송 방식(Transfer Mechanism)
    	- Programmed IO, DMA(직접 메모리 접근)

입출력 시스템의 목표: 다양한 장치에 대해 동일한(Uniform) 인터페이스 제공

  • 프로세서와 디바이스 간 소통방식?
    - CPU는 HW 컨트롤러와 소통
    - HW도 읽고 쓰기 위한 레지스터, 메모리 가지고 있음

    • 연결이 아무리 복잡하더라도, 프로세서는 레지스터를 두 가지 방식으로 접근:
      - I/O 명령:
      - In: IO에서 읽어옴, Out: IO에 작성
      - Memory mapped I/O: 명령을 불러오고(load), 저장(store)
      - 레지스터, 메모리(HW 내)가 물리적 주소 공간에 보임
      - load, store로 I/O 수행
  • Programmed IO vs. DMA
    Programmed IO: 각 바이트가 in/out 또는 load/store를 통해 전송

  • Direct Memory Access(DMA): HW 컨트롤러에게 메모리 직접 접근하게 함

  • OS는 언제 I/O 동작이 끝났는지, 에러 발생했는지 알아야:

  • I/O 인터럽트, 폴링(Polling)
    - 인터럽트: I/O 디바이스가 서비스 필요할 때 인터럽트 발생

    	- 폴링: OS가 주기적으로 디바이스 상태 레지스터 확인
    	![](https://velog.velcdn.com/images/alfred/post/25e2fde4-f27e-4569-b2f1-7de56d1a314d/image.jpg)
  • 디바이스 드라이버
    - 디바이스 HW와 직접 통신하는 커널의 디바이스 특화(device specific) 코드

    • 보통 두 부분으로 나뉨
      • 시스템 콜을 처리하는 top half(open(), close(), read(), write() 등 처리, I/O 발생시 스레드 sleep), 인터럽트 루틴으로 동작하는 bottom half(I/O 종료 시 스레드 깨움)
  • 하드웨어 버퍼링

    - 속도 다른 디바이스 간의 데이터 전송에 사용
    - 데이터 크기가 다를 때(ex. 큰 데이터를 작게 분할 -> 버퍼에서 다시 합쳐서 전송)
    - 시스템 콜 호출 당시의 데이터 저장

  • (하드)디스크 탐색 시간 최적화

  • 용어 정리
    - Transfer Time: 디스크 표면에서 메모리로 비트를 복사하는데 드는 시간
    - Disk Latency Time: R/W 헤드가 적절한 섹터에 도착할 때까지 걸리는 시간
    - Disk Seek Time: 목표 트랙/실린더 도착할 때까지 R/W 헤드가 움직이는 시간
    - Access Time = Seek + Latency + Transfer

Seek Time 최적화 알고리즘

예시: 0~99번까지 트랙, 헤드는 75번 트랙에 있고, 요청이 23, 87, 36, 93, 66 순으로 발생

- FCFS: 요청 발생 순서대로 처리
	- 52+64+51+57+27=251
    
- SSTF: 현재 헤드 위치에서 가장 가까운 요청부터 처리
	- 11+21+6+57+13=107
    
- Scan: 밖(or 안) 한 방향으로 계속 탐색 -> 이후 반대 방향으로 탐색
	- 12+6+6+33+30+13=100
    
- Look: 가장 바깥의 요청까지 탐색 -> 가장 안쪽 요청까지 탐색
	- 12+6+27+30+13=87
    
- Circular Scan: Scan인데 한 방향 탐색 후 home(여기서는 0번)으로 돌아옴
	- 12+6+6+home(99)+23+13+30=189
    
- Circular Look: Scan인데 한 방향 탐색 후 home으로 돌아옴
	- 12+6+home(93)+23+13+30=177
  • 네트워크 드라이버 ( 통신 과목 듣고 추가해야 )
    - ex) UART 통신, 모뎀

References:
1. 강순주 교수님 OS PPT 13
2. Operating System Concepts_10ed. Abraham-Silberschatz
3. https://stackoverflow.com/questions/3215878/what-are-in-out-instructions-in-x86-used-for: IN/OUT 명령
4. https://www.javatpoint.com/buffering-in-operating-system : 하드웨어 버퍼
5. https://www.cs.uic.edu/~jbell/CourseNotes/OperatingSystems/13_IOSystems.html: PC 버스 구조

profile
시작보다 중요한 건 지속이다

0개의 댓글