명령어 사이클

원래벌레·2022년 3월 22일
1

컴퓨터구조

목록 보기
1/1

명령어 사이클이란 프로그램을 실행 하고 명령어 한 줄이 동작 할 때, 메모리와 CPU에서 일어나는 마이크로 연산을 보여준다.
명령어 사이클의 순서는 다음과 같다.
인출 사이클 → 간접 사이클 → 실행 사이클 → 인터럽트 사이클

🎨 인출 사이클

인출 사이클은 현재 PC에 있는 주소의 내용을 IR에 가져오게 한다. 내부의 구체적인 마이크로 연산은 다음과 같다.
1) PC(카운터)안에 있는 주소를 MAR로 보낸다. MAR은 기억장치에서 PC에서 받은 주소를 참조하여 해당 내용을 가져온다.
2) 받은 내용은 MBR(버퍼)를 통해 들어온다. 버퍼에 들어온 내용은 IR로 가져온다.
3) 다음 명령어를 실행하기 위해서 PC의 값을 1 증가시킨다.

🎨 간접 사이클

간접 사이클은 실행 사이클 전에 일어 난다. 인출 사이클을 통해 IR에 가져온 명령어는 (명령어 + 주소)로 이루어져 있다. 그렇기 때문에 IR에 들어있는 오퍼랜드를 참조하면 명령어가 인수로 가지는 데이터를 가져 올 수 있게 된다. 따라서 해당 주소를 MAR로 가져와 기억장치의 해당 주소를 MBR을 거쳐 IR의 오퍼랜드 부분에 넣어준다.

🎨 실행 사이클

실행 사이클은 IR의 있는 내용을 수행한다. opcode 부분의 명령어를 수행하기 위해서 오퍼랜드를 MAR로 보내어 기억장치에서 데이터를 가져온다. 데이터는 버퍼에 저장된다. 이 상태에서 옵코드 마다 각각의 마이크로연산은 차이가 있다.

  • ADD : MBR(버퍼)에 가져온 데이터와 AC에 있는 데이터를 더하고 더한 값을 AC에 저장한다.
  • LOAD : MBR(버퍼)에 있는 값을 AC에 덮어씌운다.
  • STA : 이건 앞에 설명한 버퍼에 먼저 저장이 안되어 있다. 먼저 IR에서 주소부분을 MAR로 가져와서 데이터를 저장 할 위치를 기억한다. 그리고 AC에 있는 값을 버퍼에 가져와 제어버스를 거쳐 기억장치에서 위에서 기억한 위치에 데이터를 덮어 씌운다.
  • JUMP : IR에 있는 주소를 PC에 덮어 씌운다.

🎨 인터럽트 사이클

인터럽트 사이클은 실행 사이클이 끝난 후 일어나는 사이클이다. 해당 사이클은 인터럽트 신호라는 것이 들어왔는지 아닌지를 판단하는 사이클이다. 해당 사이클이 들어와 있지 않다면 PC에 저장되어있는 주소를 인출하는 인출사이클을 시작으로 명령어의 사이클이 진행된다. 하지만, 인터럽트 신호가 들어 온 경우에는 인터럽트 사이클의 마이크로연산이 진행된다. 해당 사이클은 먼저 MBR(버퍼)에 현재 PC를 저장한다. 그리고 MAR에 SP(스택 포인터)를 넣고, PC에 ISR 주소를 넣어준다. 그 이후에 MAR을 통해 SP(스택 포인터)의 주소로 MBR에 있는 기존 PC 주소를 넣어준다. 그리고 스택포인터의 값을 -1 해주어 다음 인터럽트 신호가 발생 할 시에 PC 값을 넣을 위치로 설정 해준다.

🎨 스택 구조를 이용하는 이유

인터럽트 사이클은 장치 X를 위한 ISR X를 처리하는 도중에 우선 순위가 더 높은 장치 Y로부터 인터럽트 요구가 들어와서 먼저 처리되는 경우가 생길 수 있다. 이를 다중 인터럽트 라고 한다. 이러한 경우 전의 취소된 명령어보다 기존 ISR이 우선이었기 때문에 해당 ISR이 먼저 실행 되어야 한다. 이를 위해서 후입선출의 구조를 가진 stack 자료구조를 이용을 한다.

profile
학습한 내용을 담은 블로그 입니다.

0개의 댓글