I/O Hardware
- OS는 수많은 I/O 하드웨어를 지원하기 위해 규격화된 명령을 내림
- 공통적 개념
- Port: I/O 디바이스의 관문
- Bus: 데이터가 전송되는 통로
- Controller: I/O 디바이스 안에 있는 제어하는 자체 CPU
- I/O에 명령을 내림; 디바이스의 controller 내 register에 명령어를 써줌
- I/O port
- Status register: 디바이스의 상태를 나타냄, busy bit/error bit
- Control register: 명령어를 써줌
- Data-in register: 디바이스가 데이터를 읽어서 임시로 저장하는 곳
- Data-out register: OS가 데이터를 써주기 위해 있는 공간
- Polling
- status register 값이 busy bit이면 명령을 내리면 안됨
- bit checking하는 기본적 방식이 polling임
- Busy-wait 함; ready니? 아니네 기다릴게 -> ready니 아니네 기다릴게 -> ...
- CPU 자원 낭비긴 한데 I/O 디바이스가 빠르면 조금만 기다려도 됨
- 근데 I/O 디바이스가 느리면? 자원 낭비 너무 -> Interrupt
- Interrupt
- I/O 디바이스가 자기가 ready 상태가 되면 알려주는 거
- Interrupt 종류
- Nonmaskable: 너무 중요해서 disable시킬 수 없는 인터럽트
- Maskable: disable시킬 수 있는 인터럽트
- Interrupt 종류를 파악해서 handler를 호출, handler가 있는 메모리의 번지를 알아야 함
- Interrupt vector: handler의 위치 정보 저장
- interrupt 매커니즘은 exception과 동일
- Kernel I/O 구조
- Application I/O Interface = 시스템콜
- 애플리케이션은 I/O 디바이스에 직접 접근 X
- I/O system call을 해서 os한테 시킴
- 위에서는 일관된 시스템콜 호출, 디바이스 드라이버가 알아서 처리해줌
- 디바이스가 명확하게 다른 경우
- Character-stream디바이스냐 block 디바이스냐; I/O 단위에 따라
- Sequential냐 random-access
- Sharable/dedicated
- operation 속도
- read-write, read-only, write only
- Block devices에 제공되는 시스템콜: read, write, seek
- Character devices에 제공되는 시스템콜: get, put
- 키보드나 마우스처럼 사용자의 액션에 의해 생성되는 경우
- Blocking / Nonblocking I/O
- Blocking: I/O 해줘 요청하고 기다림, process가 waiting상태로 감
- Nonblocking: I/O 요청하고 나서 진행된 만큼만 가지고 바로 return
- Asynchronous: I/O 요청해놓고 다른 일 함
- Kernel I/O subsystem = kernel이 가진 기능들
- Scheduling: request를 어떤 순서로 디바이스에 요청할 건지
- Buffering: 디바이스 간 데이터 transfer하는 과정에 중간 단계 저장 장치
- Caching: 실제 원본 데이터의 복사본이 저장되는 곳
- Spooling: 디바이스에 보내는 output 데이터를 임시로 저장하는 곳
- output 디바이스가 무척 느려서 데이터를 다 못 받을 때 ex> 프린터
- Error Handling: I/O 과정에서 에러가 났을 때 처리해주는 과정
- Kernel Data Structures: 많은 종류의 자료 구조 유지, 관리
- I/O 성능
- context switch와 data copy를 최소화해야 함
- interrupt를 줄이자
- 웬만하면 DMA를 사용해라
- CPU, memory, bus, I/O 성능이 balance를 맞추도록 해라
OS 드디어 완강
'운영체제' 카테고리의 다른 글
[운영체제] Mass Storage Structure (2차 저장 장치) (0) | 2024.06.06 |
---|---|
[운영체제] File System (0) | 2024.05.29 |
[운영체제] Virtual Memory(2) (0) | 2024.05.13 |
[운영체제] Virtual Memory (1) (0) | 2024.05.06 |
[운영체제] Memory Management (2) (0) | 2024.03.24 |