- 명령어의 실행

    1. 기본 명령어 형식
      명령어 형식은 연산코드와 오퍼랜드로 나뉜다. 연산 코드(operation code)는 CPU가 수행할 연산을 지정하고, 오퍼랜드(operand)는 명령어 실행에 필요한 데이터가 저장된 주소를 지정한다. 

      연산코드 : 수행할 연산 지정
      오퍼랜드 : 명령어 실행에 필요한 데이터 저장된 주소 지정

    2. 명령어 사이클
      CPU가 한 개의 명령어를 실행하는데 필요한 전체 처리 과정을 명령어 사이클이라고 한다. 명령어 사이클은 명령어 인출 사이클과 명령어 실행 사이클로 나뉜다. 

      1. 명령어 인출 사이클
        CPU가 주기억장치로부터 명령어를 읽어오는 단계이다. 이 단계가 앞서서 말한 CPU의 기능에서 명령어 인출 해당한다.

      2. 명령어 실행 사이클
        명령어를 실행하는 단계이다. 이 단계에서 명령어 코드를 해독(decode)하고, 그 결과에 따라서 데이터를 인출, 처리, 저장을(를) 필요에 따라 실행한다. 이 단게에서 명령어 해독과 함께 명령어에 따른 데이터를 어떻게 할 것인지 결정하는 것이다.

    3. 간접 사이클
      인출한 명령어의 주소 필드 내용을 이용해 메모리에서 데이터의 실제 주소를 인출하고, 명령어 레지스터의 주소 필드에 저장한다. 

    4. 인터럽트 사이클
      프로그램 실행 중에 CPU의 현재 처리 순서를 중단시키고 다른 동작을 수행하도록 하는 것이다. 

      개인적으로 명령어 실행 부분에서 인터럽트 사이클이 중요하다고 생각하는데, 이후에 나오는 문맥교환(Context Switching) 그리고 오버헤드(Overhead)와 연관이 있다고 생각하기 때문이다.

      인터럽트 사이클은 인터럽트 요구가 들어오면, CPU는 원래의 프로그램  수행을 중단하고, 복귀할 주소 등의 상태정보를 저장한다. 여기서 상태정보를 PCB(Process Control Block, 프로세스 디스크립터)에 저장하는 것으로 알고있다. 


      이후 인터럽트 백터를 찾아서 요구된 인터럽트 서비스 루틴을 다시 수행한다. 인터럽트는 보통 다중 프로그래밍에서 사용한다. 다중 프로그래밍 환경이랑 메모리에 여러 프로그램을 위치시켜놓고 CPU에서 동시에 여러 프로그램을 실행하는 것처럼 처리하는 시스템을 의미한다.

      다중 프로그래밍 시스템 vs 다중 처리 시스템이 매번 헷갈린다. 

      - 다중 프로그래밍 시스템 : 하나의 CPU, 여러 프로그램 실행 ( Context Switching 이 잦음 )
      - 다중 처리 시스템 : 여러 개의 CPU, 동시에 작업을 처리

    5. 인터럽트 처리
      인터럽트 요구가 들어왔을 때, CPU는 어떤 장치가 인터럽트를 요구했는지 확인하여 해당 인터럽트 서비스 루틴이 위치한 인터럽트 백터를 찾아, 인터럽트 서비스 루틴으로 분기하여 인터럽트 서비스 작업을 수행

      여기서 분기는 CPU 레지스터 세트에서 프로그램 카운터(PC)가 명령어가 실행될 목적지 주소로 갱신됨을 의미한다.

      (1) 현재 명령어 실행을 끝낸 즉시, 다음에 실행할 명령어의 주소(PC : Program Counter 의 내용)를 Stack에 저장한다. 
      (2) 인터럽트 서비스 루틴을 호출하기 위하여 그 루틴을 시작 주소 PC에 적재한다.

[ 인터럽트 사이클 ]

 

Posted by doubler
,