중앙처리장치 - 마이크로 명령 - 입출력과 인터럽트

패스트캠퍼스에서 컴퓨터 구조 강의 를 듣고 스스로 공부한 내용을 정리하고 있습니다.

입출력의 구성

컴퓨터는 기본적으로 사용자와 통신을 하기 위해서 외부장치를 갖추어야 한다. 외부장치로는 다음과 같은 것들을 말할 수 있다.

  • 입력장치 : 메모리로 데이터와 명령어를 읽어들임

  • 출력장치 : 컴퓨터의 계산 결과를 사용자에게 표시

오늘은 이 중에서도 키보드와 프린터와 같은 단말장치 위주로 이야기를 해보도록 하자.

입출력의 전반적인 흐름

만약에 내가 키보드를 통해서 워드에 문서를 작성하고 이를 프린터로 출력하는 과정을 따라가본다고 가정해보자.

  1. 사용자는 키보드를 통해서 저장하고 싶은 데이터들을 컴퓨터로 전송한다.

  2. Transfer Interface 를 통과하여 입력된 데이터들은 모두 인풋 레지스터인 INPR 에 쌓인다.

    1. 이때 인풋 제어 플립플롭인 FGI 는 일종의 신호등 역할을 하는데,

    2. 0일때는 입력데이터들이 쌓일 수 있고,

    3. 1일 경우에는 잠깐 그 흐름을 막고 쌓인 데이터들을 처리기관인 인 AC 로 보낸다.

    4. AC 로 보낸 뒤에는 다시 0으로 그 값이 바뀐다.

  3. INPR 로부터 데이터를 전해받은 AC 는 데이터를 처리한 뒤, 아웃풋 레지스터인 OUTR로 그 결과값을 보낸다.

    1. 이때도 아웃풋 제어 플립플롭인 FGO 값이 0일 경우에 그 결과값을 받을 수 있고,

    2. OUTR 이 꽉차서 내보내야할 때에는 FGO 값이 1로 바뀌게 된다.

  4. OUTR 에서 내보내진 값은 Receiver Interface 를 거쳐서 사용자가 보고 있는 화면이나 프린터 등 출력장치를 통해 사용자에게 도달한다.

전문 용어들이 들어가서 다소 어려워보일 수 있겠지만, 결국은 데이터를 일정량 만큼 저장해서 처리하고, 그 결과값도 일정량만큼 저장했다가 사용자에게 내보낸다는 것이다.

제어전송방법의 문제점 & 인터럽트 IEN

이렇게 플래그를 사용해서 통신하는 방법을 프로그램 제어전송(controlled transfer)이라고 하는데, 이 방법은 프로세스와 입출력장치 사이에 속도차이가 너무 커서 매우 비효율적이다.

보통 컴퓨터의 프로세스 처리 속도는 10 마이크로 세컨드 정도인데, 입출력장치의 처리속도는 1초에 10문자를 쓴다는 가정하에 1문자당 100,000 마이크로 세컨드가 소요된다. 결국 데이터의 처리 자체는 10 마이크로 초만에 될 수 있음에도 불구하고 입출력시에 플래그를 체크하는 제어전송 방식을 사용하게 되면 입출력시에 각각 5,000번의 플래그 체크를 하게 되면서 사용자로부터 입력받고, 그 결과값을 출력하는데 컴퓨터 프로세스의 처리 속도보다 10,000배는 더 많은 시간이 소요된다는 것이다.

이를 해결하기 위해 등장한 것이 바로 인터럽트 인에이블 플립플롭(interrupt enable flip-flop, IEN) 개념이다. IEN을 사용하게 되면, 아래와 같이 프로세스가 진행된다.

  • 컴퓨터는 프로그램 제어 전송 대신에 외부 장치가 전송준비가 되었을때, 신호를 전달받고

  • 프로그램 실행 도중에 플래그를 체크하지 않는다.

  • 일단 IEN 플래그가 세팅되면 컴퓨터는 당시에 실행중이던 프로그램을 즉각 중단하고,

  • 플래그의 세트정보를 받아들여서 입출력을 실행한다.

  • 입출력이 마무리되면 원래의 프로그램으로 바로 돌아간다.

그림을 보면서 좀 더 자세히 이해를 해보자.

  1. 컴퓨터의 프로세스가 진행중일때는 프로그램을 실행하고 있을 것이다.

  2. 이때 외부장치에서 전송준비가 완료되면 IEN 은 인터럽트가 가능하다는 의미로 1로 바뀌게 되고,

  3. 데이터 전송이 시작되거나 데이터 처리가 완료되어 출력 준비가 완료되면 FGI 나 FGO 플래그가 1로 바뀌가 된다.

  4. 이때, R=1 로 바뀌어 인터럽트 사이클이 시작된다.

  5. 우선 인터럽스 사이클이 시작되면, Program Counter 인 PC 는 실행중이던 값을 메모리의 제일 첫번째 공간인 0번지에 저장을 한다.

  6. 그리고 1번지에 있는 내용을 가져와 PC에 저장한다. 위의 그림에서 1번지에는 0 BUN 1120 으로 되어있으므로 1120 번지로 이동하면 된다.

  7. 이때, 중간에 다른 인터럽이 발생하지 않도록 인터럽 플래그 IEN 을 0으로, R = 0 으로 세팅해둔다.

  8. 1120번지에서 입출력 프로그램을 실행 하고 나면 PC는 1 BUN 0 을 마주하게 된다.

  9. 그에 따라 PC는 다시 0번지로 이동하게 되고 0번지에는 아까 실행중이었던 256번이 저장되어있으므로 256번으로 이동하게 된다.

  10. IEN이 다시 1로 바뀌면서 PC는 다시 256번 프로그램을 이어서 실행한다.

복잡해보이지만 하나하나 그림과 화살표를 따라가서 이해하다보면 기존 프로그램과 입출력 프로그램이 어떤 방식으로 실행되고 서로 교차하는지 충분히 이해할 수 있다.

Last updated