I/O HW장치 : Disk , 키보드/ 마우스.../ 전송장치 (LAN card..)

port : connect
bus : daisy chain (직렬) : PCI,SAS / 병렬
controller(Host adapter) : CPU와 device 사이에서 명령 수신 -> 장치제어
I/O 제어
CPU) 제어 regi, 상태regi, data regi -> 레지스터를 통해 장치제어
ㄴ 주소지정
ㄴ포트 매핑 (isolated I/O) : 별도 주소공간
ㄴ메모리 매핑 (memory-mapped I/O): 장치 레지스터가 메모리 공간에 포함
I/O 동작
Polling
1. busy bit 확인(주기적) -> 0이면 사용
2. 명령/데이터 전송
3. readbit 설정 // 읽도록 regi 설정
4. controller -> busybit 1 -> 작업수행
5. 마친후 busy,error bit 0
>> 단순 <> 주기적 상태확인, 끝날때까지 wait -> CPU 자원낭비
>>>
Interrupt : 끝났을때 알려줌
// Context switching : start ,end시 두번
• HW Interrupt → Timer, I/O 완료 등
• SW Interrupt → trap (system call 등)
• Maskable Interrupt
ㄴ CPU) 무시/연기 O 인터럽트
ㄴ 다른 인터럽트에 의해 지연 가능
• Non-maskable Interrupt (NMI)
ㄴCPU) 무조건 즉시 처리해야 하는 High Priority interrupt // RTOS

여러 Devices의 interrupt -> 어디서 발생했는지 알려줌
ㄴ interrupt -> handler 까지의 이동 속도 fast

• CPU <-> interrupt controller
~= like Thread: I/O controller에 넘기고 signal 오면 처리
• CPU-IRQ(interrupt-request) line 으로 interrupt 신호 전송
ㄴ ISR(Interrupt handler) 핸들러 실행
>>
[1] Device 인터럽트 발생 → IRQ signal
[2] Interrupt Controller -> 인터럽트 수신
[3] 인터럽트 -> CPU로 전달 -> 우선순위 확인→ C/S // 현재 Context 저장
[4] Interrupt Vector Table 확인
→ 어떤 장치가 인터럽트 발생시켰는지 구분
→ 해당 장치의 ISR 주소로 점프
[5] ISR 실행
[6] ISR 종료 → C/S : 저장했던 Context 복원
[7] 원래 실행하던 코드로 복귀
// now multi-CPU : interrupt 여러개 발생 -> OS) priority / 자주사용
exception: 내부(동기) <> interrupt :외부(비동기)
• Fault → 복구 O // Page Fault
• Trap → 의도된 호출 //System Call
• Abort → 복구 X, terminate // HW 오류
DMA (Direct Memory Access) // physical
> Fast I/O , CPU 부하↓
// DVMA : virtual 로 저장
ㄴ OS) 가상 주소 영역을 DMA 장치에 mapping
ㄴ 장치-> 직접 가상 주소 사용해 접근

// CPU 개입 X
OS -> DMA controller
ㄴ DMA command : ~에 ~해라 (주소,RW mode, byte, Bus) 설정
① CPU → Device Driver 호출 // 일종의 process
- CPU) 파일 시스템으로 I/O 요청
- OS) 해당 장치의 Device Driver 호출
- ex) "드라이브 2번에서 1MB를 읽어와서 RAM에 저장해줘"
② Device Driver → Device Controller 제어
- Driver) 장치 제어 레지스터에 설정
→ "어떤 위치에서부터 데이터를 얼마나 읽을지" 전달
→ 실제 전송 작업을 DMA에 맡김
③ Device Controller → DMA Controller에 명령
- Device Controller)
→ DMA Controller에게 아래 내용을 담은 DMA 명령(DMA command)을 보냄
- 물리 메모리 주소
- 전송 바이트 수
- R/W 모드 (read 또는 write)
- 버스 ID 등
④ DMA Controller → 실제 데이터 전송 수행
- DMA Controller는 버스를 통해
→ 장치 ↔ 메모리 간 직접 전송
→ CPU는 개입하지 않음 (Bus가 DMA에 잠시 점유됨)
⑤ DMA 완료 후 → CPU에 Interrupt
- 데이터 전송이 끝나면
→ DMA가 CPU에게 인터럽트를 발생시켜 완료 알림 - CPU -> 해당 데이터를 사용O
APP I/O interface



I/O device 별로 generic 하게 구분
-> 같은 유형의 다른 device -> 값만 바꿔주면 끝
Block/Non
1. Blocking : I/O 끝날때까지 process wait -> 성능↓
<> 2 . NonBlocking : I/O 시작 -> buf -> return
ㄴ 원할때 바로바로 return : API : select(), read()
3. Asynchronous : I/O 시작 -> 대기x
ㄴ I/O 서브시스템 -> 모두 종료시 CPU에게 signal

(a) CPU) Blocking : request -> kernel 단에서 종료될때 까지 wait
(b) CPU) NonBlocking:바로바로 중간에 return
Kernel I/O
scheduling : 공평히/ gueue
buffering : A <- buff -> B
ㄴDevice A,B 와의 속도/데이터크기/엔디안 등을 맞추기위함
double_buffering : User -> kernel -> I/O
ㄴ User) Kernel 에다가 I/O 할거 던져놓고 다른일 할 수 있음
Caching : 빠른 device는 data를 잠깐 보유 // by copy
spooling : output 을 잠깐 가지고있음
ㄴ ex) 프린트기기 여러개 출력버튼 누르고 창 닫아도 출력됨
Device Reservation : Device 독점사용 by sistem call // Deadlock 조심
To I/O protection : I/O 명령어들은 privileged mode 에서 정의/사용

ㄴ User -> system call 로 접근
I/O 요청 발생 HW operation
ㄴ Disk의 File to Process
>>>>>

예제) read("data.txt") // system call
I/O 요청 처리 과정 (ex) 디스크에서 파일 읽기
- Process) 파일 요청
→ read("data.txt") 같은 시스템 콜을 호출함. - OS: 파일 이름 -> 디바이스 및 블록 위치로 변환 (파일 시스템)
→ 파일 이름 → inode → 블록 번호 → 물리 주소 변환 (디바이스에 맞는 형태로). - I/O 요청을 커널이 I/O 서브시스템에 전달
→ 디바이스 드라이버 -> 디스크 컨트롤러에 명령 전달. - Process) I/O 완료까지 wait (block)
→ Disk I/O: slow -> 해당 프로세스는 wait queue -> CPU는 다른 작업 실행. - 디스크 컨트롤러가 실제로 데이터를 디스크에서 읽어서 커널 버퍼로 이동
→ DMA 등을 사용하여 메인 메모리(커널 버퍼) 로 전송. - I/O 완료 인터럽트 발생 → OS가 대기 중인 프로세스를 깨움
→ 인터럽트 핸들러가 실행되어, 기다리던 프로세스를 ready 상태로 전환. - 운영체제가 버퍼에서 프로세스 메모리로 데이터 복사
→ read() 호출한 프로세스의 사용자 공간 버퍼로 복사.
// 디스크 컨트롤러: 디스크 하드웨어를 제어하는 하드웨어
// 디바이스 드라이버: OS에서 디바이스 컨트롤러와 소통하는 소프트웨어
// DMA (Direct Memory Access): CPU 개입 없이 메모리로 데이터 전송

ex) KakaoTalk
I/O Performance 향상을위해..
C/S,copy 횟수↓ / 한번에 전달 많이/ DMA,BUS,I/O system 의 균형있는 good 성능
+ User Process -> Demon
ㄴ 사용자 직접제어X -> Background에서 작업
'전공 > 운영체제' 카테고리의 다른 글
| File system -2 (1) | 2025.06.07 |
|---|---|
| File system (1) | 2025.06.07 |
| Virtual memory-2 (0) | 2025.05.23 |
| 가상메모리 (0) | 2025.05.15 |
| 메모리-4 (0) | 2025.05.11 |