Loading the catalog…
Loading the catalog…
컴퓨터 구조 12 — I/O(Input/Output)란 무엇인가 ※ 업로드한 Chapter 5에서는 I/O 시스템, Interrupt, DMA 등을 별도의 주제로 다루지 않는다. 자료에서 Input/Output은 FPGA의 IOE(Input/Output Element) 가 외부와 연결되는 요소라는 정도로만 등장한다. 따라서 이번 글은 지금까지 공부한 CPU, Memory, Bus와 연결하기 위해 일반적인 컴퓨터 구조의 I/O 기본 이론 을 기준으로 정리한다. 1. I/O란? 지금까지 컴퓨터 내부의 핵심 구조를 공부했다. CPU ↕ Memory 그리고 이 구성요소들이 Bus 를 통해 정보를 주고받는다고 배웠다. 하지만 컴퓨터는 CPU와 Memory만으로 구성되지 않는다. 컴퓨터는 외부에서 데이터를 받아들이고 결과를 외부로 내보내야 한다. 이러한 동작을 I/O(Input/Output, 입출력) 라고 한다. Input → 외부에서 컴퓨터로 Data가 들어옴 Output → 컴퓨터에서 외부로 Data가 나감 전체적으로 보면 다음과 같다. 외부 ↕ I/O ↕ Computer 2. I/O는 왜 필요한가? CPU는 데이터를 처리할 수 있고 Memory는 데이터를 저장할 수 있다. 하지만 외부와 정보를 주고받을 방법이 없다면 컴퓨터가 처리할 데이터를 받아오거나 처리 결과를 전달할 수 없다. 따라서 컴퓨터에는 외부 장치와 통신하기 위한 구조가 필요하다. 외부 장치 ↓ Input ↓ Computer ↓ Processing ↓ Output ↓ 외부 장치 I/O는 컴퓨터 내부와 외부를 연결하는 역할을 한다. 3. Input과 Output I/O는 크게 두 방향으로 나눌 수 있다. I/O ├── Input └── Output Input Input(입력) 은 외부의 정보가 컴퓨터 내부로 들어오는 것이다. 외부 ↓ Data ↓ Computer Output Output(출력) 은 컴퓨터가 처리한 정보가 외부로 전달되는 것이다. Computer ↓ Data ↓ 외부 따라서 I/O의 핵심은 데이터가 컴퓨터 내부와 외부 사이를 이동하는 것 이다. 4. I/O Device 컴퓨터와 데이터를 주고받는 장치를 I/O Device(입출력 장치) 라고 한다. 전체 구조는 다음과 같이 볼 수 있다. Computer │ ├── CPU ├── Memory └── I/O Device I/O Device는 종류와 동작 방식이 매우 다양하다. 중요한 것은 각각의 장치를 외우는 것이 아니라 다음 관계를 이해하는 것이다. CPU / Memory ↕ I/O System ↕ 외부 장치 즉 I/O Device는 컴퓨터가 외부와 정보를 주고받을 수 있도록 한다. 5. CPU가 I/O 장치를 직접 제어할까? CPU와 I/O Device는 동작 특성이 다르다. CPU → 매우 빠르게 명령어 처리 I/O Device → 장치마다 동작 방식과 속도가 다름 따라서 CPU가 각 장치의 세부적인 동작을 모두 직접 처리하는 방식은 비효율적이다. 그래서 일반적으로 CPU와 실제 I/O Device 사이에 장치를 관리하는 하드웨어가 존재한다. 이를 I/O Controller(입출력 제어기) 라고 한다. CPU ↕ I/O Controller ↕ I/O Device 6. I/O Controller I/O Controller 는 CPU와 I/O Device 사이에서 통신을 관리하는 장치이다. 기본적인 역할은 다음과 같다. CPU ↓ I/O 명령 ↓ I/O Controller ↓ 실제 Device 제어 반대로 장치에서 들어온 데이터도 Controller를 통해 CPU나 Memory 쪽으로 전달될 수 있다. I/O Device ↓ I/O Controller ↓ CPU / Memory 따라서 I/O Controller는 CPU ↕ I/O Device 사이의 중간 연결 역할을 한다. 7. CPU, Memory, I/O의 연결 앞에서 Bus를 공부하면서 다음 세 가지를 배웠다. Data Bus Address Bus Control Bus I/O 역시 컴퓨터 시스템의 통신 구조를 통해 CPU 및 Memory와 연결된다. 큰 그림을 보면 다음과 같다. CPU ↕ Bus ↙ ↘ Memory I/O Controller ↕ I/O Device 따라서 Bus는 단순히 CPU와 Memory만 연결하는 것이 아니라 시스템의 여러 구성요소가 통신할 수 있도록 한다. 8. CPU는 I/O의 완료를 어떻게 알까? CPU가 I/O 작업을 요청했다고 생각해보자. CPU ↓ I/O 작업 요청 ↓ I/O Device 작업 문제는 I/O Device가 CPU보다 느릴 수 있다는 것이다. CPU가 장치의 작업이 끝날 때까지 계속 기다리면 CPU 시간을 효율적으로 사용하기 어렵다. 이 문제를 처리하는 대표적인 방식에는 다음과 같은 것들이 있다. I/O 처리 방식 ├── Programmed I/O ├── Interrupt └── DMA 현재 단계에서는 각각의 기본 원리만 이해하면 된다. 9. Programmed I/O Programmed I/O 는 CPU가 I/O 장치의 상태를 직접 확인하면서 작업을 처리하는 방식이다. 쉽게 표현하면 다음과 같다. CPU ↓ I/O 작업 요청 ↓ 장치 상태 확인 ↓ 아직 완료되지 않음 ↓ 다시 확인 ↓ ... ↓ 작업 완료 CPU가 장치의 상태를 반복해서 확인하는 방식을 Polling(폴링) 이라고 한다. Polling → CPU가 장치 상태를 반복해서 확인 구조가 단순하지만 문제가 있다. CPU ↓ 계속 상태 확인 ↓ 기다리는 데 CPU 시간 사용 즉 CPU가 다른 작업을 수행할 수 있는 시간을 I/O 장치를 기다리는 데 사용할 수 있다. 10. Interrupt 이 문제를 줄일 수 있는 중요한 개념이 Interrupt(인터럽트) 이다. Interrupt 방식에서는 CPU가 장치의 상태를 계속 확인하지 않는다. CPU ↓ I/O 작업 요청 ↓ CPU는 다른 작업 수행 I/O 작업이 끝나거나 CPU의 처리가 필요한 상황이 발생하면 장치 측에서 CPU에게 신호를 보낸다. I/O Device ↓ 작업 완료 ↓ Interrupt 발생 ↓ CPU 즉 Interrupt는 CPU야, 처리해야 할 일이 생겼어. 라는 것을 알려주는 신호라고 이해하면 된다. 11. Polling과 Interrupt의 차이 둘의 가장 중요한 차이는 누가 상태를 확인하느냐 이다. 방식 기본 원리 Polling CPU가 장치 상태를 계속 확인 Interrupt 장치가 필요할 때 CPU에게 알림 흐름으로 비교하면 다음과 같다. Polling CPU ↓ 완료됐나? ↓ 아니오 ↓ 다시 확인 ↓ 완료됐나? Interrupt CPU ↓ I/O 요청 ↓ 다른 작업 수행 I/O Device ↓ 작업 완료 ↓ Interrupt ↓ CPU 따라서 Interrupt를 사용하면 CPU가 장치 상태만 계속 확인할 필요가 줄어든다. 12. Interrupt가 발생하면? Interrupt가 발생하면 CPU는 현재 실행 흐름에서 I/O와 관련된 처리를 해야 한다. 개념적으로 보면 다음과 같다. CPU ↓ 현재 프로그램 실행 ↓ Interrupt 발생 ↓ 현재 실행 상태 보존 ↓ Interrupt 처리 ↓ 원래 실행하던 작업으로 복귀 현재 단계에서는 Interrupt 처리의 세부적인 레지스터나 운영체제 동작까지 들어갈 필요는 없다. 핵심은 다음과 같다. Interrupt → 외부 또는 내부 사건이 발생했음을 CPU에게 알림 13. DMA가 필요한 이유 I/O 장치와 Memory 사이에서 많은 양의 데이터를 이동한다고 생각해보자. CPU가 모든 데이터를 하나씩 직접 옮긴다면 CPU가 데이터 이동에 계속 관여해야 한다. I/O Device ↓ CPU ↓ Memory 이렇게 되면 CPU가 실제 명령어 처리보다 데이터 이동 작업에 많은 시간을 사용할 수 있다. 이를 줄이기 위한 방식이 DMA(Direct Memory Access) 이다. 14. DMA란? DMA(Direct Memory Access) 는 I/O 장치와 Memory 사이의 데이터 전송에서 CPU의 지속적인 개입을 줄이는 방식이다. 기본적인 구조를 보면 다음과 같다. CPU ↓ DMA 작업 설정 I/O Device ↔ DMA Controller ↔ Memory 즉 데이터 전송이 이루어지는 동안 CPU가 모든 데이터 이동을 직접 처리할 필요가 없다. CPU → 전송에 필요한 정보 설정 DMA → 실제 데이터 전송 담당 그리고 전송이 끝나면 CPU에게 완료 사실을 알릴 수 있다. DMA 작업 완료 ↓ Interrupt ↓ CPU 15. Programmed I/O와 DMA의 차이 개념적으로 비교하면 다음과 같다. Programmed I/O I/O Device ↕ CPU ↕ Memory CPU가 데이터 이동 과정에 적극적으로 관여한다. 반면 DMA는 다음과 같다. CPU ↓ 전송 설정 I/O Device ↔ DMA ↔ Memory CPU가 데이터 하나하나를 직접 이동시키는 부담을 줄일 수 있다. 16. 세 가지 I/O 처리 방식을 연결하면 I/O를 처리하는 기본적인 발전 방향을 개념적으로 보면 다음과 같이 이해할 수 있다. Programmed I/O ↓ CPU가 장치를 직접 확인하고 처리 Interrupt ↓ 장치가 필요할 때 CPU에게 알림 DMA ↓ 대량 데이터 이동에서 CPU 개입 감소 현재는 어떤 방식이 무조건 가장 좋다고 외우는 것이 아니라 각각 CPU가 얼마나 직접 관여하는가 를 이해하면 된다. 17. Interrupt와 DMA의 관계 Interrupt와 DMA는 서로 완전히 별개의 개념으로만 볼 필요는 없다. DMA를 통해 데이터 전송이 이루어진 뒤 완료 사실을 Interrupt로 CPU에게 알릴 수 있다. CPU ↓ DMA 전송 설정 ↓ DMA가 Data 이동 ↓ 전송 완료 ↓ Interrupt ↓ CPU 이렇게 여러 하드웨어 기능이 함께 동작할 수 있다. 18. I/O와 Memory의 관계 I/O를 통해 들어온 데이터는 결국 CPU가 처리하거나 Memory에 저장할 수 있다. I/O Device ↓ I/O Controller ↓ Memory ↓ CPU 반대로 Memory에 있는 데이터를 외부 장치로 보낼 수도 있다. CPU / Memory ↓ I/O Controller ↓ I/O Device 따라서 I/O는 CPU만의 개념이 아니라 Memory와도 밀접하게 연결된다. 19. 지금까지 배운 컴퓨터 전체 구조 이제 처음에 배웠던 컴퓨터의 기본 구성요소를 훨씬 구체적으로 연결할 수 있다. Computer CPU ┌──────────┼──────────┐ │ │ │ Control Unit Register ALU │ ↓ Bus ┌────┴─────┐ ↓ ↓ Memory I/O Controller ↓ I/O Device Memory 쪽에는 지금까지 배운 계층 구조가 존재한다. CPU ↓ Register ↓ Cache ↓ Main Memory ↓ Storage 그리고 외부와의 통신은 다음과 같이 연결된다. CPU / Memory ↓ Bus ↓ I/O Controller ↓ I/O Device ↓ External World 반드시 기억할 것 I/O(Input/Output) 는 컴퓨터와 외부 사이에서 데이터를 주고받는 것이다. Input → 외부에서 Computer로 Data Output → Computer에서 외부로 Data CPU와 I/O Device 사이에는 일반적으로 I/O Controller가 존재한다. CPU ↕ I/O Controller ↕ I/O Device I/O 처리의 대표적인 개념은 다음과 같다. Programmed I/O → CPU가 장치 상태를 직접 확인 Interrupt → 장치가 필요할 때 CPU에게 알림 DMA → I/O와 Memory 사이의 Data 전송에서 CPU 개입 감소 Polling과 Interrupt의 차이도 중요하다. Polling → CPU가 계속 확인 Interrupt → 장치가 CPU에게 알림 DMA의 핵심은 다음과 같다. CPU → 전송 설정 DMA → 실제 Data 전송 전송 완료 ↓ CPU에 알림 전체 구조는 다음과 같이 연결된다. CPU ↕ Bus ↙ ↘ Memory I/O Controller ↕ I/O Device 현재 단계에서 가장 중요한 것은 다음 한 줄이다. I/O는 컴퓨터가 외부 장치와 데이터를 주고받는 구조이며, Interrupt와 DMA 등을 이용해 CPU의 I/O 처리 부담을 줄일 수 있다. 다음 공부 다음에는 컴퓨터 구조 13 — Pipelining(파이프라이닝)이란 무엇인가 를 공부한다. 지금까지는 CPU가 명령어 하나를 다음 과정으로 처리한다고 배웠다. Fetch ↓ Decode ↓ Execute 다음부터는 CPU가 여러 명령어의 처리 단계를 겹쳐서 진행하여 처리량을 높이는 방법 을 공부한다. 다음 내용: Pipelining이란 무엇인가 ↓ 왜 Pipelining이 필요한가 ↓ Instruction을 단계로 나누는 이유 ↓ 여러 Instruction을 겹쳐 처리 ↓ Latency와 Throughput ↓ Pipeline Stage ↓ Pipeline이 성능을 높이는 원리 Pipelining을 공부한 뒤에는 이어서 Hazard 를 공부한다. 13. Pipelining ↓ 14. Hazard ↓ 15. 병렬 처리 기초
What RADAR observed and classified to build this opportunity. It is what the source published, not a verification that the offer is still active.
# 컴퓨터 구조 12 — I/O(Input/Output)란 무엇인가. 컴퓨터 구조 12 — I/O(Input/Output)란 무엇인가 ※ 업로드한 Chapter 5에서는 I/O 시스템, Interrupt, DMA 등을 별도의 주제로 다루지 않는다. 자료에서 Input/Output은 FPGA의 IOE(Input/Output Element) 가 외부와 연결되는 요소라는 정도로만 등장한다. 따라서 이번 글은 지금까지 공부한 CPU, Memory, Bus와 연결하기 위해 일반적인 컴퓨터 구조의 I/O 기본 이론 을 기준으로 정리한다. 1. I/O란? 지금까지 컴퓨터 내부의 핵심 구조를 공부했다. CPU ↕ Memory 그리고 이 구성요소들이 Bus 를 통해 정보를 주고받는다고 배웠다. 하지만 컴퓨터는 CPU와…
Open source