Computer Science/[ OS ]

[ OS ] 20. 저장장치와 입출력 - I/O

kim.svadoz 2021. 6. 5. 16:44
728x90
반응형

I/O

Two Main Jobs of Compter

  1. I/O (대부분이므로 굉장히 중요하다)

    ex. web browsing, file editing, youtube, games, ...

  2. computing

I/O Type

  1. polling(busy-waiting)
    • reading the status register repeatedliy until the busy bit becomes clear.
  2. interrupt
    • CPU has a wire called the interrupt-request line
    • if CPU detects an interrupt, ISR로 점프해서 인터럽트를 처리한다.
    • ISR의 주소는 interrupt vector table에 정의되어 있다.
  3. DMA (Direct Memory Access)
    • used to avoid prograamed I/O (one bytes at a time)
    • 큰 데이터 전송을 처리할 때 유용하다

I/O Model

  • Blocking (블록킹)
    • 애플리케이션 실행 시 운영체제 대기 큐에 들어가면서 요청에 대한 system call이 완료된 후에 응답을 보낸다.
  • Non Blocking (논블록킹)
    • 애플리케이션 실행 시 운영체제 대기 큐에 들어가지 않고, 실행 여부와 관계없이 바로 응답을 보낸다. 바로 응답하기 힘든 경우, 에러를 반환하는데 정상데이터를 받을 때까지 계속해서 요청을 다시 보낸다.
  • Synchronous (동기)
    • 시스템콜을 기다린다.
    • (notify를 사용자 프로세스가 담당) 시스템의 반환을 기다리는 동안 대기 큐에 머무는 것이 필수는 아니다. (블로킹은 필수로 머물러야함)
  • Asynchronous (비동기)
    • 시스템콜을 기다리지 않는다.
    • (notify를 커널이 담당) 요청에 대해 처리완료 여부에 관련없이 응답하고 다음코드를 돌린다.
    • 이후에 운영체제에서 처리완료여부를 알려주고 응답한다.

CPU와 입출력 기기에 접속하는 방법은 크게 두 가지가 있다.

Memory Mapped I/OI/O Mapped I/O이다.

Memory Mapped I/O

  • 메모리와 I/O가 하나의 연속된 address 영역에 할당된다. 즉, I/O가 차지하는 만큼 메모리 용량은 감소한다.
  • CPU 입장에서는 메모리와 I/O가 동일한 외부기기로 간주되므로, 이들을 액세스 하기 위해 같은 신호(read, write)를 사용한다.
  • 소프트웨어적으로도 메모리에대한 액세스 or I/O에 대한 데이터 입출력이 동일한 것으로 간주된다.
  • Load나 Store 명령에 의해 수행된다.
  • 위 방식의 가장 큰 장점은 포트 입출력 구현 시, 복잡성이 사라지기 때문에 CPU 내부적으로 로직이 덜 필요하다.
  • 이는 저렴하고, 빠르면서 쉬운 CPU를 만들기에 충분하다.
  • 이 점이 RISC가 추구하는 바이다.(임베디드 시스템 구현시 장점으로 적용됨)
  • 그러나, 주소와 데이터 버스를 많이 사용하게 되어, 메인 메모리에 접근하는 것보다 매핑된 장치에 접근하는 것이 더 느리다.
  • 사용시 I/O영역 변수는 volatile 타입으로 선언해야 한다. (컴파일러의 최적화 방지)
  • I/O영역은 Non-cacheable로 설정해야 한다.(캐시메모리로 접근할 경우, 변경된 내용은 가져올 수 없을 수도 있다.)
  • 종합적으로 MMIO는 오픈소스 하드웨어를 갖다 쓰되, 내부 레지스터를 직접 건드려서 쓰는 것을 의미한다.

I/O Mapped I/O

  • 메모리와 I/O가 별개의 어드레스 영역에 할당되는 것을 의미한다. 따라서 I/O를 사용하더라도 메모리의 용량은 감소하지 않는다.
  • CPU 입장에서는 메모리와 I/O를 구분해야 하므로 이들을 액세스하기 위해서 RD, WR 신호 외에 추가적으로 I/O에 접근하기 위한 신호가 필요.
  • 소프트웨어적으로도 메모리에 대한 데이터의 액세스와 I/O에 대한 데이터의 입출력이 서로 다른 것으로 간주된다.
  • 그래서 메모리에 대한 액세스는 Load / Store에 의해 수행되고, I/O 입출력은 Input이나 Output 명령에 의해 수행된다.
  • 주로 Intel 계열의 프로세서에 사용된다.(x86)
  • 가장 큰 장점은 Addressing 능력이 제한된 CPU를 사용할 때 발휘된다.
  • I/O 접근을 메모리 접근과 분리하기 때문에 메모리용으로 주소영역 전체를 사용할 수 있다.
  • 또한, 어셈블리어상에서 소스를 볼 때 입출력 수행 루틴을 알아보기 쉽다.
  • ARM Processor는 임베디드 시스템상의 프로세서로, RISC구조이며, MMIO(Memory Mapped I/O) 방식을 취하고 있다.
  • ARM 어셈블러나 c로 작성할 때, 실제로 메모리 주소를 포인터로 잡아서 값에 접근하는 모습을 볼 수 있다.
  • 특히, 어셈블러상에서 in/out과 같은 I/O port 접근 명령어가 따로 존재하지 않고, 일반 메모리에 대한 접근인 id/st 명령어를 사용한다.

RISC ?

Reduced Instruction Set Computer

CPU 명령어의 갯수를 줄여 하드웨어 CISC보다 구조를 조금 더 간단하게 만드는 방식.

728x90
반응형