본문 바로가기

CS 공부/[강의] 혼공 컴퓨터구조 + 운영체제

[11/1] 다양한 입출력 방법 1 - 프로그램 입출력

https://www.youtube.com/watch?v=RRgGVu8OCP4&list=PLVsNizTWUw7FCS83JhC1vflK8OcLRG0Hl&index=23

 

 

 

 

 

 

 

들어가며

입출력 장치가 어떻게 컴퓨터 내부와 정보를 주고받는지,

3가지 방법에 대해 알아보자.

 

 

 

🫱 이 3가지 입출력 방식은 컴퓨터 공학에서 주요하게 다뤄지는 아주 기본적인 입출력 방식이다.

 


 

 

프로그램 입출력

프로그램 속 명령어로 입출력 장치를 제어하는 방법

입출력 명령어로써 장치 컨트롤러와 상호작용하는 방법

→  정확히 말하면 입출력 장치에 연결된 장치 컨트롤러를 프로그램속 명령어로 제어하는 방법

 

 


장치컨트롤러가 프로그램 입출력을 바탕으로 어떻게 동작할까?

하드디스크 컨트롤러에 특정 레지스터에다가 입출력 명령어로 입출력 작업을 수행하는 것이 프로그램 입출력이다.

프로그램 입출력 방식은 CPU가 장치 컨트롤러의 레지스터 값을 읽고 씀으로써 이뤄진다.

 

예시메모리에 저장된 정보를 하드디스크에 백업하는 과정을 생각해보자.

 

 

 

메모리에 저장된 정보를 하드디스크에 백업한다 

➡️ 하드디스크에 새로운 정보, 다시말해 메모리에 저장된 정보를 '쓰기'를 하는 작업을 한다.

 

 

 


❶  CPU는 하드디스크 컨트롤러의 제어레지스터에 쓰기 명령을 내보낸다.

      제어레지스터는 입출력 장치가 수행할 동작(제어동작)을 저장하기 때문.


 

 

❷  하드디스크 컨트롤러는 제어레지스터를 보고 하드디스크의 상태를 확인한다. 

하드디스크가 쓰기작업을 할 수 있는 상태라면 상태레지스터에 준비완료라고 표시한다.


 

 

❸-❶ CPU는 상태 레지스터를 주기적으로 읽어보며 하드디스크의 준비여부를 확인 (준비됐는지 확인하고!)

❸-❷ 하드디스크가 준비됐다면 백업할 메모리의 정보를 데이터 레지스터에 쓴다.

          (백업할 메모리 정보 == 쓰기작업을 할 정보)

 

 

 

 


 

 

 

많은 입출력 장치들의 정보를 규격화 하기 어려운 문제가 있다고 했다.

그런데 CPU가 장치컨트롤러의 레지스터들(입출력장치의 주소)를 인식하고, 알 수 있을까?

 

 

 

 

즉, 이런 명령어들은 어떻게 명령어로 표현되고 어떻게 메모리에 저장될까?

 

 

 


 

 

CPU가 인식할 수 있는 방법 :  2가지가 있다

프로그램 입출력 방식은 CPU가 장치컨트롤러의 레지스터 값을 읽고 씀으로써 이뤄지는데,

CPU가 장치컨트롤러의 레지스터 값을 알기위한 방법으로써 2가지 방식이 있다는 것이다.

 

  • 메모리 맵 입출력
  • 고립형 입출력

 

 


 

 

 

 

✅ 메모리 맵 입출력

 

프린터 상태를 읽어들이기 위해선 그냥 517번지를 읽어라, 라는 명령어로 프린터의 상태를 읽을 수 있다. 또 다르게 하드디스크에 a를 쓰기 위해서는 518번지에 'a'를 써라, 라는 명령어를 내리면 된다. 또 이 명령어들을 보면 메모리 접근명령어와 입출력장치 접근 명령어가 똑같이 생겼음을 알 수 있다. 이것의 이유는 마치 동일한 주소공간 처럼 간주하는 메모리 맵 입출력 방식 때문이다. 그래서 굳이 별도의 입출력 명령어가 필요하지 않은 방식이다. 그래서 메모리를 읽고 쓰는 것과 동일하게 장치컨트롤러의 레지스터에 값을 읽고 쓸수 있는 것이다.  

 

 

메모리에 접근하기 위한 주소공간과,
입출력 장치에 접근하기 위한 주소공간을 하나의 주소공간으로 간주하는 방법

예를들어 어떤 컴퓨터는 1024개의 주소를 표현할 수 있다고 가정했을때,
메모리 맵 입출력 방식을 사용하면, 1024개의 주소공간을 전부 메모리에 접근하기 위해,
메모리 주소를 표현하기 위해 사용하지 않는다.
위의 그림처럼 주소공간을 나눠서 관리하게 된다.

즉, 메모리에 접근하기 위한 주소공간과 입출력 장치에 접근하기 위한 공간을 하나로 간주 ! 

 

 

 

 

 

 

 

 

 

✅ 고립형 입출력

메모리 읽기/쓰기선 뿐만 아니라 입출력 장치 읽기/쓰기 선이 별도로 존재한다. 만약 CPU가 메모리 읽기쓰기 선이 활성화되는 명령어를 실행하면 메모리에 접근하도록 하면되고, 입출력 장치 읽기/쓰기(입출력 전용명령어)선이 활성화 되는 명령어를 실행하면 입출력 장치에 접근하도록 한다.

 

 

메모리를 위한 주소공간과 입출력장치를 위한 주소공간을 분리하는 방법!

예를들어 어떤 컴퓨터는 1024개의 주소를 표현할 수 있다고 가정했을때,
앞선 예시와 달리 1024개를 메모리를 위해서도 사용할 수 있고 입출력 장치를 위해서도 사용할 수 있따.
이것은 입출력 전용명령어를 사용하여 조작이 가능하다.

 

 

 

 

 

 


 

 

 

메모리 맵 입출력 방식은 주소공간을 하나로 간주하기에

메모리 접근 명령어와 입출력장치 접근 명령어가 같다.

 

고립형 입출력 방식은 아예 별도의 주소공간으로 간주하기 때문에,

메모리에 접근하려면 메모리 읽기/쓰기선을 활성화 시키는 명령어를 실행해야하고,

입출력장치에 접근하려면 입출력 읽기/쓰기선을 활성화 시키는 입출력전용명령어를 사용해야한다.