전공/운영체제

I/O systems

러비코스믹 2025. 6. 5. 08:57

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

 

 

 

 

interrupt vector

여러 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

USB Device Controller

 

 

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) 디스크에서 파일 읽기

  1. Process) 파일 요청
    → read("data.txt") 같은 시스템 콜을 호출함.
  2. OS: 파일 이름 -> 디바이스 및 블록 위치로 변환 (파일 시스템)
    → 파일 이름 → inode → 블록 번호 → 물리 주소 변환 (디바이스에 맞는 형태로).
  3. I/O 요청을 커널이 I/O 서브시스템에 전달
    → 디바이스 드라이버 -> 디스크 컨트롤러에 명령 전달.
  4. Process) I/O 완료까지 wait (block)
    → Disk I/O: slow -> 해당 프로세스는 wait queue -> CPU는 다른 작업 실행.
  5. 디스크 컨트롤러가 실제로 데이터를 디스크에서 읽어서 커널 버퍼로 이동
    → DMA 등을 사용하여 메인 메모리(커널 버퍼) 로 전송.
  6. I/O 완료 인터럽트 발생 → OS가 대기 중인 프로세스를 깨움
    → 인터럽트 핸들러가 실행되어, 기다리던 프로세스를 ready 상태로 전환.
  7. 운영체제가 버퍼에서 프로세스 메모리로 데이터 복사
    → 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