본문 바로가기
Study/컴퓨터 구조

컴퓨터 구조 - 명령어를 효과적으로 실행하기 위한 기법

by Jamie Lim 2020. 5. 23.

1. 주소 지정 방식

  - 주소 : 주기억자치에서 데이터가 저장된 위치

  - 주소 지정 방식 : 주소를 지정하는 방식

  - 유효 주소 : 데이터가 저장된 기억장치의 실제 주소

 

 

  1) 직접 주소 지정 방식

EA = A

(유효 주소 = 기억장치 주소)

  - 가장 일반적인 개념의 간단한 주소 방식

  - 오퍼랜드 필드의 내용이 유효 주소가 되는 방식

  - 얻은 데이터의 기억장치 주소를 가리킨다

 

  - 장점

    · 데이터 인출을 위해 오퍼랜드에 저장된 해당 주소의 기억 장치에 한번만 액세스

    · 명령어 형식이 간단함

 

  - 단점

    · 연산 코드를 제외하고 남은 비트들이 주소 비트로 사용되기 때문에 지정할 수 있는 기억장소의 수가 제한됨

    · 많은 수의 주소를 지정할 수 없음

 

  2) 간접 주소 지정 방식

EA = (A)

(유효 주소 = 기억 장치 A번지의 내용)

* (A)A에 간접적으로 접근한다는 의미 / A의 값이 실제 주소

 

  - 오퍼랜드 필드의 내용이 유효 주소의 주소가 되는 방식

 

  - 동작 방식

   · 두번의 기억장치 액세스가 필요함

   · 1번째는 유효 주소의 주소 값을 읽기 위해 액세스 함 (A -> 주소)

   · 2번째는 실제 유효 주소에 액세스하여 실질적인 데이터를 얻는 것 (주소 -> 데이터)

 

  - 장점

    · 최대 기억장치 용량 : CPU가 한번에 액세스할 수 있는 단어의 길이에 의해 결정됨

      N워드 -> 2 N승의 주소 공간을 활용할 수 있음

    · 기억장치의 구조 변경 등을 통해 확장 가능

    · 명령어의 주소 필드 길이가 짧고 제한되어 있어도 긴 주소에 접근이 가능함

 

  - 단점

    · 실행 사이클동안 두 번의 기억장치 액세스가 필요함

    · 직접 주소 지정 방식보다 속도가 느림

    · 명령어 형식에서도 주소지정 방식을 표시하는 간접 비트 필드가 필요함

      I = 0 : 직접 주소 지정 방식

      I = 1 : 간접 주소 지정 방식

 

  3) 레지스터 주소 지정 방식

EA = R

(유효 주소 = 레지스터 번호)

 

  - 연산에 사용할 데이터가 레지스터에 저장되어 있는 방식

  - 오퍼랜드 부분이 레지스터 번호를 나타내며, 유효 주소는 레지스터 번호

 

  - 장점

    · 비트 수가 적어도 되며, 데이터 인출을 위해 기억 장치에 액세스할 필요가 없음

 

  - 단점

    · 데이터를 저장할 수 있는 공간이 CPU 내부의 레지스터로 제한됨

      -> 메모리 구조 중 비싸고 공간은 적음

 

4) 레지스터 간접 주소 지정 방식

EA = (R)

(유효 주소 = 레지스터에 저장된 내용)

 

  - 오퍼랜드 필드가 레지스터 번호를 나타내며, 해당 레지스터에 저장된 내용이 유효 주소

  - 레지스터의 길이에 따라 주소 지정 영역이 결정됨

  - 레지스터의 길이는 16bit이고 주소 지정 영역은 216승 비트(64K바이트)

 

  - 장점

    · 많은 주소 공간을 활용할 수 있음

 

  - 단점

    · 간접 주소 방식보다는 메모리 참조가 적게 일어나지만 여분의 메모리 참조가 필요함

      -> 메모리 참조는 2번에서 1번으로 바뀌었지만 레지스터를 참조가 필요

 

5) 변위 주소 지정방식

EA = (R) + A

(유효 주소 = R이 가리키는 레지스터의 내용 + 변위 값 A)

 

  - 훨씬 많은 곳에 데이터를 저장할 수 있음

  - 직접 주소 지정 방식과 레지스터 간접 주소 지정 방식을 조합한 방식

  - 오퍼랜드의 두 필드의 조합으로 유효 주소가 생성됨

    * 오퍼랜드 : 레지스터 번호필드와 변위 값 필드로 구성됨

 

 

  사용하는 레지스터에 따른 종류

 

    (1) 상대 주소 지정 방식

EA = (PC) + A

(유효 주소 = 프로그램 카운터의 내용 + 기억장치 주소)

 

      - 프로그램 카운터 사용 (PC)

      - 주로 분기 명령어에서 사용

 

    (2) 인덱스 주소 지정 방식

EA = (IX) + A

(유효 주소 = 인덱스 레지스터의 내용 + 기억 장치 주소)

 

      - 인덱스 레지스터를 사용 (IX)

        * 인덱스 레지스터 : 인덱스 값을 저장하는 특수 레지스터

      - 인덱스 레지스터의 내용과 변위 A를 더하여 유효 주소를 결정

 

      - 명령어가 실행될 때마다, 인덱스 레지스터의 내용이 자동적으로 증가 혹은 감소

      - 명령어가 실행되면 다음 두 연산이 연속적으로 수행됨

         EA = (IX) + A, IX <- IX + 1

 

    (3) 베이스 레지스터 주소 지정 방식

EA = (BR) + A

(유효 주소 = 베이스 레지스터의 내용 + 기억장치 주소)

 

      - 베이스 레지스터를 사용함 (BR)

      - 베이스 레지스터의 내용과 변위 A를 더해 유효 주소를 결정함

 

<이미지> https://m.blog.naver.com/PostView.nhn?blogId=k97b1114&logNo=140157844146&proxyReferer=https:%2F%2Fwww.google.com%2F

 


2. 파이프 라인

  - 하나의 명령어가 실행되는 도중에 다른 명령어 실행을 시작하는 방법으로 동시에 여러 개의 명령어를 실행하는 기법

  - 하나의 명령어를 여러 단계로 나누어서 처리할 수 있기 때문에 처리 속도를 향상시킬 수 있음

 

  1) 2단계 명령어 파이프 라인

    - 명령어를 실행하는 하드웨어를 인출 단계와 실행 단계라는 두 개의 독립적인 파이프 라인 모듈로 분리해 수행하는 방법

  

    - 인출 단계

      · 인출만 하는 하드웨어 (한번에 하나의 명령만 실행 가능)

 

    - 실행 단계

      · 실행만 하는 하드웨어 (한번에 하나만 명령어만 실행 가능

 

    - 클록 주기 : 클록이 다시 1이 되기까지 걸리는 시간

        * 클록 : 초 같은 개념으로 컴퓨터에서 일어나는 이벤트의 타이밍을 맞추기 위한 전자 신호

                  CPU는 클록이 1이 될 때마다 연산을 수행함

 

    - 하나의 명령어를 수행할 때 실행은 인출을 하기 전에 할 수 없다

    - 명령어1의 실행을 함과 통시에 하나의 라인에서 명령어2의 인출을 동시에 할 수 있다

       -> 인출 단계와 실행 단계가 서로 독립적으로 분리되어 있어 서로 다른 명령어를 동시에 수행할 수 있음

 

  2) 4단계 명령어 파이프 라인

    - 명령어 인출, 명령어 해독, 오퍼랜드 인출, 명령어 실행의 4단계로 구성

  

    - 명령어 인출 단계 (IF)

      · 명령어를 기억장치에서 인출하는 과정

      · 프로그램 카운터에서 제시된 기억 장치 주소에 근거해 명령어를 인출하여 명령어 레지스터로 이동시킨다

 

    - 명령어 해독 단계 (ID)

      · 명령어 해독기를 이용하여 첫 번째 단계에서 인출된 명령어를 해석

 

    - 오퍼랜드 인출 단계 (OF)

      · 기억 장치에서 오퍼랜드를 인출하는 단계

      · 오퍼랜드는 피연산자 부분으로 연산에 사용될 변수나 데이터를 지칭함

 

    - 실행 단계 (EX)

      · 명령어에서 지정된 연산을 수행하는 단계

 

  3) 6단계 명령어 파이프 라인

     - 명령어 인출, 명령어 해독, 오퍼랜드 계산, 오퍼랜드 인출, 명령어 실행, 오퍼랜드 저장의 6단계로 구성

   - 4단계와 똑 같은 구성에 두 단계가 추가됨

   - 명령어 인출 단계 (FI, Fetch Instruction)

 

   - 명령어 해독 단계 (DI, Decode Instruction)

 

   - 오퍼랜드 계산 단계 (CO, Calculate Operand)

     · 간접 주소 또는 변위 주소 지정방식 -> 유효 주소를 찾는 계산이 필요

     · 주소로 해석한 것을 연산을 통해 유효 주소를 도출할

 

   - 오퍼랜드 인출 단계 (FO, Fetch Operand)

 

   - 명령어 실행 단계 (EI, Execute Instruction)

 

   - 오퍼랜드 저장 단계 (WO, Write Operand)

     · 연산된 결과인 오퍼랜드를 저장하는 단계

 

4) 명령어 실행 시간 계산

  - k : 파이프라인의 단계 수

  - N : 실행할 명령어들의 수

  - 각 파이프라인의 단계 : 한 클록 주기씩 소요

  - T : 파이프라인을 적용했을 때, N개의 명령어를 실행하는데 소요되는 시간

 

T = k + (N – 1)

 

  - T’ : 파이프라인을 적용하지 않았을 때, N개의 명령어를 실행하는데 소요되는 시간

T’ = k * N

 


3. 인터럽트

  - CPU가 현재 실행 중인 프로그램의 처리를 강제적을 중단시키고 특정 주소에 위치한 프로그램을 수행하는 것

    -> 다른 프로그램을 실행시킴

 

  - 동작원리

    · 인터럽트 서비스 루틴 : 인터럽트를 처리하기 위해 실행되는 프로그램 루틴

    · 인터럽트가 시작되면 현재 실행 중인 프로그램의 중요 데이터는 주기억장치에 저장되고 실행 중이 프로그램은 중단됨

    · 중단된 프로그램은, ISR이 처리하는 프로그램이 종료된 후에 실행

 - 인터럽트가 발생하면 함수 호출처럼 다른 주 프로그램 중에 인터럽트 서비스 루틴을 호출에 서비스들을 처리하고 다시 프로그램으로 복귀한다.

 

1) 인터럽트의 발생 원인과 종류

   (1) 기계 착오 인터럽트

      - 프로그램을 실행하는 도중 갑작스런 정전이나 컴퓨터 자체 내에서 기계적인 문제로 인해 발생하는 인터럽트

         -> EX. 비상 전원키로 강제 종료가 되지 않도록 함

 

   (2) 슈퍼바이저 호출 인터럽트

      - 슈퍼바이저 호출(SVC) 명령어를 사용해 운영체제에 서비스를 요청할 때 발생하는 인터럽트

         -> EX. Sudo 명령어

 

   (3) 외부 인터럽트

      - 오퍼레이터나 타이머에 의한 의도적으로 프로그램이 중단된 경우에 발생하는 인터럽트

         -> 작업 관리키로 강제 종료

 

    (4) 입출력 인터럽트

      - 입출력의 종료나 오류에 의해 CPU의 기능이 요청되는 경우 발생하는 인터럽트

         -> I/O 제어기에 의한 프린터 출력, 키보드 입력

 

    (5) 프로그램 검사 인터럽트

       - 프로그램 실행 중 보호된 기억 공간 내에 접근하거나 불접적인 명령 수행과 같은 프로그램의 문제로 인해 발생하는 인터럽트

        -> 오버플로우, 0에 의한 나누기

 

    (6) 재시작 인터럽트

      - 오퍼레이터 및 다른 프로세서에 의해 재시작 명령이 도착하였을 때 발생하는 인터럽트

 

  2) 인터럽트 처리 인터럽트 사이클

      - 인터럽트 발생을 처리하기 위한 사이클

      - CPU가 인터럽트 요구의 존재 여부를 검사하는 과정

      - 인터럽트 발생이 없는 경우 ->다른 명령어를 인출하는 사이클 수행

      - 인터럽트 요구가 대기 중인 경우

        (1) 인터럽트 사이클에 의해서 현재 프로그램의 실행을 중단하고 프로그램 상태를 저장

        (2) 프로그램 카운터를 인터럽트 처리 루틴의 시작 주소로 설정하고 인터럽트를 처리함

 

  3) 다중 인터럽트 처리

    - 인터럽트 서비스 루틴을 수행하는 동안 또 다른 인터럽트가 발생하는 것

 

 

    처리 방식에 따른 종류

 

      1) 순차적인 다중 인터럽트 처리

        - 인터럽트 서비스 루틴을 처리하고 있는 도중에 새로운 인터럽트 처리요구가 들어오더라도 CPU가 새로운 인터럽트 싸이클을 수행하지 않음

        - 나중에 발생한 인터럽트는 대기상태에서 현재의 인터럽트에 대한 처리가 종료된 후 발생한 순서대로 처리됨

  X 인터럽트 서비스 루틴의 처리가 종료된 다음 Y 인터럽트 서비스 루틴을 처리함

 

      2) 우선순위 다중 인터럽트 처리

        - 인터럽트의 우선순위를 정함

        - 우선순위가 낮은 인터럽트가 처리되고 있는 동안 우선순위가 더 높은 인터럽트가 들어오면 현재의 인터럽트 서비스 루틴의 수행을 중단하고 새로운 인터럽트를 처리함

     

만약 인터럽트 서비스 루틴 YX보다 우선순위가 높다면 X를 처리하고 있더라도 잠시 중단하고 Y를 처리함

 

 

 


4. 퀴즈

 

Q1) 간접 주소 지정 방식에 대한 설명으로 틀린 것을 고르시오. (        )

 (1) 주소 지정 방식을 표시하는 간접 비트는 1이다

 (2) 오퍼랜드 필드의 내용이 유효 주소의 주소가 된다

 (3) 데이터 인출을 위해 오퍼랜드에 저장된 해당 주소의 기억장치에 한 번 엑세스 해야 된다

 (4) 직접 주소 지정 방식보다 속도가 느리다

 

Q2) 다음 사진에 해당하는 주소 지정 방식의 유효 주소는?   (                )

 

Q3) 상대 주소 지정방식을 사용할 때 500번에 저장된 JUMP 명령어가 인출되고 A의 값이 -30인 경우 분기 목적지 주소는 몇 번지인가?   (        )

 

Q4) 파이프 라인에 대한 설명으로 틀린 것을 고르시오.  (        )

 (1) 하나의 명령어를 여러 단계로 나눠 처리해 처리 속도를 향상시킨다.

 (2) 파이프라인은 병렬 처리 방식이다.

 (3) 하나의 명령어가 실행되는 도중 다른 명령어를 실행을 시작해 동시 여러 명령어를 실행하는 기법이다

 (4) 파이프 라인을 이용하면 하나의 단계에서 2개 이상의 명령어를 실행할 수 있다.

 

Q5) 4단계 명령어 파이프 라인의 단계 순서는  (       ->        ->        ->         )

     (a) 명령어 해독 단계        (b) 실행 단계       (c) 명령어 인출 단계       (d)오퍼랜드 인출 단계

 

Q6) 6단계 파이프 라인을 이용해 10개의 명령어를 실행했다. 이때 명령어를 실행하는데 소요되는 시간은?

 

Q7) 인터럽트는 CPU가 현재 실행 중인 프로그램의 처리가 끝난 뒤 특정 주소에 위치한 프로그램을 수행하는 것이다.  ( O / X )

 

Q8) 오버플로우나 0에 의한 나누기로 발생하는 인터럽트는?  (                       )

 

Q9) CPU가 인터럽트 요구의 존재 여부를 검사하는 과정을 뭐라고 하는가?  (                )

 

Q10) 다중 인터럽트 처리에 대한 설명으로 틀린 것을 고르시오.  (       )

 (1) 순차적인 다중 인터럽트 처리와 우선순위 다중 인터럽트 처리로 구분할 수 있다.

 (2) 순차적인 다중 인터럽트 처리는 발생한 순서대로 처리한다.

 (3) 우선순위 다중 인터럽트 처리에서 우선순위가 높은 인터럽트 서비스 루틴 처리 요구가 들어오면 현재 진행 중인 인터럽트가 끝나자 마자 처리한다.

 (4) 순차적인 다중 인터럽트 처리는 인터럽트 서비스 루틴을 처리하는 도중 새로운 인터럽트 처리 요구가 들어와도 CPU가 새로운 인터럽트 사이클을 수행하지 않는다.

 

 

정답

더보기

A1) (3)

(3)은 간접 주소 지정 방식의 설명이 아닌 직접 주소 지정 방식에 대한 설명이다.

나머지 보기는 모두 간접 주소 지정 방식의 설명이다.

 

A2) R이 가리키는 레지스터의 내용 + 변위 값 A

다음 사진은 변위 주소 지정 방식 중 베이스 레지스터 주소 지정 방식이다. 그렇기에 유효 주소는 R이 가리키는 베이스 레지스터의 내용과 변위 값 A를 합친 결과이다.

 

A3) 471

프로그램 카운터를 레지스터로 사용하는 상대 주소 지정방식의 유효 주소는 프로그램 카운터 내용 + 기억장치 주소이다. 그렇기 때문에 500번지에서 JUMP 명령어가 인출되면 PC내용은 501이 되고 이때, A의 값은 -30이므로 501 – 30이되어 471번지인 것을 알 수 있다.

 

A4) (4)

파이프 라인은 하나의 명령어가 실행되는 도중 다른 명령어를 시작하는 방법으로 하나의 파이프에서 여러 명령어를 실행시킬 수 있다. 하지만 하나의 단계에서는 항상 한 개의 명령어만 실행이 가능하다. 그렇기 때문에 다음 단계를 실행하고 있을 때 새로운 명령어가 시작될 수 있다는 것을 의미하므로 한 단계에서 2개 이상의 명령어를 실행할 수 있다는 말은 틀렸다.

 

A5) c -> a -> d -> b

4단계 명령어 파이프 라인의 순서는 명령어 인출 단계 -> 명령어 해독 단계 -> 오퍼랜드 인출 단계 -> 실행 단계로 구성되어 있다.

 

A6) 15 μs

실행 소요시간(T) = (파이프 라인의 단계 수) + (명령어개수 – 1)이므로 T = 6 + (10 – 1) = 15 (μs)이다.

 

A7) X

인터럽트는 CPU가 현재 실행 중인 프로그램의 처리를 강제적으로 중단시키고, 특정 주소에 위치한 프로그램을 수행하는 것이다.

 

A8) 프로그램 검사 인터럽트

프로그램 검사 인터럽트는 오브플로우, 0에 의한 나누기 같이 프로그램 실행 중 보호된 기억 공간 내에 접근하거나 불법적인 명령 수행과 같은 프로그램의 문제로 인해 발생하는 인터럽트이다.

 

A9) 인터럽트 사이클

인터럽트 사이클은 인터럽트 발생을 처리하기 우한 사이클로 CPU가 인터럽트 요구의 존재 여부를 검사하는 과정이다.

 

A10) (3)

우선순위 다중 인터럽트 처리 방식은 인터럽트의 우선순위를 정하고 만약 우선순위가 낮은 인터럽트가 처리되는 도중 우선순위가 높은 인터럽트가 들어오면 현재 처리 중인 인터럽트가 끝나자 마자 처리하는 것이 아니라 현재 인터럽트 수행을 중단하고 우선순위가 높은 인터럽트부터 처리한다.

댓글