운영체제 12 IO Systems

milkbottle·2022년 12월 9일
0

OS

목록 보기
12/15

I/O Systems

I/O Operation

I/O request via I/O instruction

  • Direct I/O
    운영체제의 버퍼로 접근하지 않고 직접적으로 I/O와 소통하는 방식

  • Memory-mapped I/O
    메모리의 일부 버퍼에 I/O와 매핑된 공간을 참조해서 I/O와 소통하는 방식

  • I/O Controller로 CPU 대신 I/O 장치를 제어

I/O method

  • Programmed I/O

    • I/O요청을 CPU가 일일히 다해주는 방식
    • CPU의 오버헤드가 커지기 때문에 키보드, 마우스 입력처럼 단순한 연산만 처리
  • Interrupt
    I/O 작업이 끝났음을 CPU에게 알림

  • DMA(Direct Memory Access)
    대량의 데이터를 전송할 때 계속 Interrupt거는 것이 아니라, DMA Controller가 이를 대신 수행하고 마지막에 Interrupt를 걸어주는 방식

I/O 작업이 끝났음을 아는 방법
1. I/O 작업이 끝난 후 Interrupt를 걸어 운영체제에게 알림
2. CPU가 I/O에게 일정시간마다 "다했어?"라고 Polling으로 물어보는 방식

Direct vs Memory Mapped

  • 컴퓨터 시스템마다 I/O 디바이스, 메모리 주소체계가 다름
  • 크게 Direct I/O와 Memory Mapped I/O로 나뉨

Direct I/O

  • memory와 I/O장치 전용의 instruction을 따로 설계
  • 장점: 메모리 접근 없이 CPU에서 I/O로 바로 접근 가능
  • 단점: CPU에서 I/O 장치와의 소통을 위해 핀을 더 많이 만들어야하고 설계가 복잡해짐
  • 컴퓨터 시스템으로 비유하자면 CISC

Memory Mapped I/O

  • Memory와 I/O 주소를 통합해 사용
  • 그래서 instruction또한 메모리, I/O 디바이스 둘다 통합됨
  • 장점: CPU구조가 간단해지고 핀수도 작아짐
  • 단점: 메모리 특정영역에 I/O디바이스와의 소통을 위한 버퍼를 더 사용
  • 컴퓨터 시스템으로 비유하자면 RISC

I/O Process

Kernel I/O Structure

  • Kernel: 운영체제

  • Kernel I/O subsystem: 운영체제 기능 중 I/O를 관리하는 커널들

  • Device Driver: 회사별로 다른 device의 상세사항을 기술한 소프트웨어
    ex) intel, amd cpu 드라이버

  • Device Controller: CPU 대신 Device를 관리 및 수행하는 하드웨어

  • I/O Device: 키보드, 마우스, usb 등 다양한 I/O device

Life Cycle of an I/O Request

  1. I/O 요청 후 system call 발생으로 kernel모드로 진입

  2. kernel I/O subsystem: I/O 드라이버 및 컨트롤러가 정의되어 있는지 판단있다면 I/O로 바로접근하고 없다면 하위단계인 device driver에게 요청

  3. device driver: controller에게 요청한 I/O명령을 수행시킴

  4. device controller: I/O에서 명령을 수행시키고 결과가 나왔다면 interrupt발생

  5. interrupt handler: 프로세스 상태를 저장하고 driver에게 전달

  6. device driver: I/O 요청과정을 다했는지 판단하고 다했다면 I/O subsystem에게 결과값을 전달

  7. kernel I/O subsystem: I/O 요청에 대한 결과 값을 system call로 return 하고 user mode로 돌아옴

Intercomputer Communications


키보드로 채팅해서 다른 컴퓨터로 전송하는 과정

  1. 키보드로 문자열 입력 → interrupt occured

  2. interrupt handler: 프로세스 상태를 저장 후 채팅을 보내는 process로 context swtich

  3. network adapter로 키보드로 받은 문자열을 전송 하고 system call로 다보냈다고 return

  4. 받을 컴퓨터는 보낸 컴퓨터의 network adapter에서 온 문자열을 수신 → interrupt occured

  5. interrupt handler: 프로세스 ᄉᆞᆼ태를 저장 후 채팅을 보여주도록 출력 process로 context swtich

Device Functionality Progression

  • I/O 장치의 기능구현을 어디에 구현할지에 따라 특징이 달라짐

  • application code → kernel code → device-driver code → device-controller code → device code

  • 왼쪽일수록 high level로 속도와 추상화 ↓, 유연성(수정하거나 개발자가 관리하는 난이도) ↑

  • 오른쪽일수록 low level로 속도와 추상화가 ↑, 유연성(수정하거나 개발자가 관리하는 난이도) ↓

Goals of I/O Software

  • Device independence
    기능을 충실히 구현해서 I/O Device 끼리 독립적이어야함

  • Uniform naming
    코드 재사용성을 고려하는 등 통합을 잘해야함

  • Error handling
    Hardware에 에러난 경우에 대한 처리를 잘해줘야함

  • Buffering
    버퍼에 저장을 효율적으로 해야함

  • Sharable vs. dedicated devices
    나만 쓰게 할 건지, 공유해서 쓸 건지 등의 기능을 구현해야함

Buffering

(a) Unbufferd
Device의 정보가 User process로 바로 전송

(b) Bufferd in user space
Device의 정보가 프로세스의 버퍼에 저장됨

(c) Bufferd in the kernel space
Device의 정보가 커널에 저장. user process가 이를 한 번 더 가져옴.

(d) Double buffering in the kernel
기존의 커널 버퍼에 있던 값을 쓰다가 다 땡겨와지면 보여줌

(a), (d)방식은 거의 안쓰고, (c)방식을 자주 씀

Error Handling

  • interrupt controller가 따로 존재해서 interrupt 발생시 그 순간의 프로세스 상태나 에러코드를 저장

  • 에러나서 취소된 행동을 성공할때까지 몇 번 더 반복

  • 에러 무시

  • 에러를 발새생시킨 process kill

  • 아예 시스템을 종료시켜버림

  • I/O Device, 시스템의 경우에 따라 잘 선택해 운용

Spooling

  • 프린터에 많이 쓰는 방법

  • 데이터는 크고 I/O 처리가 느린 상황에서 사용
    → 데이터가 크므로 기존의 buffering방식에서 커널의 버퍼를 사용하게 되면 버퍼가 낭비임

  • 커널의 버퍼가 아닌 secondary storage(HDD, SSD)에 파일형태로 버퍼링

0개의 댓글

관련 채용 정보