본문으로 건너뛰기

Input-And-Output

1. CPU는 어떻게 입출력 작업을 처리할까?​

  • CPU 내부에 레지스터가 있는 것과 마찬가지로 장치에도 자체적은 레지스터인 장치 레지스터가 있습니다.

2. 장치 레지스터​

  • 데이터를 저장하는 레지스터
  • 제어 정보와 상태 정보를 저장하는 레지스터

3. 입출력 기계 명령어​

  • 전문적으로 장치 레지스터를 읽고 쓰는 특정한 기계 명령어를 설계할 수 있습니다.
  • 이 기계 명령어를 input and output instruction이라고 합니다.
  • x86의 IN과 OUT 기계 명령어가 이에 해당합니다.
  • 어떤 장치 레지스터를 읽고 써야하는지는 장치마다 고유한 주소가 부여되어 입출력 명령어에 장치 주소를 지정합니다.
  • 이것으로 CPU가 입출력 명령어를 실행하면 하드웨어 회로가 어떤 장치 레지스터를 읽고 써야 하는지 알 수 있습니다.

4. 메모리 사상 입출력​

  • CPU 입장에서 생각해보면 메모리 역시 하나의 외부 장치로 간주할 수 있다.
  • 메모리를 읽고 쓰는 축소 명령어 집합의 LOAD와 STORE 명령어 등 특정 명령어가 있다.
  • 그렇다면 메모리를 읽고 쓰는 것처럼 장치 레지스터도 읽고 쓸수 있지 않을까?
  • LOAD와 STROE 명령어만으로 메모리를 읽고 쓰는 것인지 장치 레지스터를 읽고 쓰는 것인지 구분할 수 없다
  • LOAD와 STORE 명령어가 전달하는 것은 메모리 주소 공간이다.
  • 주소 공간은 실제 메모리 주소는 서로 다른 개념이다.
  • 그렇기 때문에 주소 공간의 일부분을 장치에 할당할 수 있습니다.
  • 이렇게 주소 공간의 이룹분을 장치에 할당하여 메모리를 읽고 쓰는 것처럼 장치를 제어하는 방법이 메모리 사상 입출력입니다.
  • 메모리 사상 입출력을 채용하고 키보드의 레지스터가 주소 공간 0xfe00에 사상되어 있다면 CPU가 키보드를 읽는 기계 명령어는 아래와 같다.
    • Load R1 0xfe00

5. 사용자가 언제 키보드를 입력했는지 어떻게 알지?​

  • 이제 키보드의 데이터를 어떻게 읽는지 알았습니다.
  • 문제는 사용자가 언제 키보드를 누를지 확실하지 않다는 것

5.1 폴링: 계속 검사하기​

START
Load R1 0xFE00
BLZ START
Load R1 0xFE01
BL ORTER_TASK
  • BLZ: 이전 명령어 결과가 0이면 지정된 위치로 점프합니다.
  • BL: 지정된 위치로 무조건 점프합니다.
  • 상태 레지스터는 주소 공간 0xFE00에 사상되어 있습니다.
  • 데이터를 저장하는 레지스터는 0xFE01에 사상되어 있습니다.
  • 위 코드는 매우 간단합니다.
    • Load R1 0xFE00: 현재 키보드 상태를 읽습니다.
    • BLZ: 현재 키보드 상태 레지스터 값이 0(키보드를 누르지 않았다면)이면 시작 위치로 점프화여 키보드 상태를 다시 확인합니다.
    • Load R1 0xFE01: 누군가 키보드를 누른다면 상태 레지스터 값이 1이 되므로 Load R1 0xFE01 명령어가 실행되어 키보드의 데이터가 R0 레지스터에 저장됩니다.
    • BL ORTER_TASK: 이후 아무 조건없이 ORTER_TASK로 점프합니다.
  • 위 입출력 방식은 폴링
    • cpu 불필요하게 순환 대기
    • 어떻게 개선?
    • 본질적으로 폴링은 동기식 이를 개선하기 위해선 동기를 비동기로 바꾸는 것

6. 인터럽트​

7. 디스크가 입출력 처리할 때 CPU가 하는 일은 무엇일까?​

  • 디스크가 입출력 요청을 추리하는 전체 과전에서 왜 CPU 개입이 필요하지 않을까요?
  • 이를 이해하려면 장치 제어기, 직접 메모리 접근, 인터럽트의 관계를 알아야합니다.

7.1 장치 제어기​

  • 기계 장치(emchanical device)
    • 헤드, 실린더, 트랙
  • 장치 제어기(device controller)
    • 눈으로 보고 만질 수 있는 기계 부분을 제외한 나머지 부분은 전자 부분입니다.
    • 전자 부분은 전자 제품으로 구성 이를 장치 제어기
    • 프로세서와 펌웨어를 갖추고 있다.
    • CPU 도움 없이도 복잡한 작업 수행 가능
    • 자신만의 버퍼나 레지스터도 갖추고 있다.
    • 장치 제어기와 장치 드라이버는 다르다. 장치 드라이버는 운영체제에 속한 코드
    • 장치 제어기는 장치 드라이버에서 명령을 받아 외부 장치를 제어하는 하드웨어에 속함
    • 장치 제어기는 운영 체제에 해당하는 장치 드라이버와 외부 장치를 연결하는 다리에 해당 장체 제어기가 더 복잡해지는 것은 CPU를 해방 시키기 위한 것

7.2 직접 메모리 접근(direct memory acsses)​

  • DMA의 목적은 CPU 개입 없이 장치와 메모리 사이에 직접 데이터를 전송하는 것