폰 노이만 아키텍쳐

  • EDVAC 컴퓨터에 대한 보고서에서 처음으로 등장 아키텍쳐

  • 폰 노이만 아키텍쳐 컴퓨터의 구성 요소
    • ALU와 프로세서 레지스터를 지닌 CPU
    • 명령어 레지스터와 PC를 가진 제어 유닛
    • 데이터와 명령어를 저장하는 주기억장치
    • 큰 용량의 외부 보조기억장치
    • I/O 메커니즘
  • 폰 노이만 아키텍쳐는 점차 '프로그램 내장식 컴퓨터(stored-program computer)' 라는 단어로 진화
    • Instruction fetch와 Data operation이 동시에 일어나지 않아야 함
    • 그 둘은 같은 System bus를 공유하기 때문
    • 이러한 특성으로 인해 폰 노이만 병목 현상이 발생되어, 종종 성능 저하 발생
  • 폰 노이만 아키텍쳐와 하버드 아키텍쳐의 가장 큰 차이는 Main memory가 아닌 캐시 아키텍쳐에 적용됨(분산 캐시 구조)

폰 노이만 병목 현상

  • 프로그램 메모리와 데이터 메모리를 공유하는 시스템 버스는 폰 노이만 병목 현상을 야기함
    • CPU와 메모리 사이의 제한된 데이터 전송률로 인해 발생
  • 하나의 버스는 프로그램 메모리, 데이터 메모리 중 하나의 메모리에만 접근 가능하기 때문에, throughput이 CPU의 작업 속도에 한참 미치지 못함
  • 특히, 적은 CPU 사용에 많은 양의 데이터를 필요로 할 때 그 성능 저하가 극에 달하게 됨

병목 현상 완화 방안

  1. CPU와 Main memory 사이에 cache 설치
  2. 분리된 캐시 혹은 명렁어와 데이터에 분산된 접근을 사용(so-called Modified Harvard architecture)
  3. 분기 예측 알고리즘과 로직을 사용
  4. 메모리 접근 횟수를 줄이기 위해 제한된 수의 CPU 스택 혹은 다른 on-chip Local memory를 사용


'Software Convergence > Computer Architecture' 카테고리의 다른 글

기억장치  (0) 2018.09.08
CPU의 구조와 기능  (0) 2018.09.08
시스템 버스, I/O 및 인터럽트  (0) 2018.09.07

기억장치

  • 모든 컴퓨터시스템들은 프로그램과 데이터를 저장하기 위한 장치로서 주기억 장치보조저장장치를 가지고 있음
  • 기억장치는 CPU가 직접 액세스할 수 있는 내부 기억장치와 장치 제어기를 통하여 액세스할 수 있는 외부 기억장치로 구성

1. 기억장치의 분류와 특성

  • CPU가 어떤 정보를 기억장치에 쓰거나 기억장치로부터 읽는 동작을 액세스한다고 말함
  • 기억장치의 액세스 유형
    1. 순차적 액세스: 기억장치에 저장된 정보들을 처음부터 순서대로 액세스. 정보가 저장된 위치에 따라 액세스 시간이 달라짐
    2. 직접 액세스: 읽기/쓰기 장치를 정보가 위치한 근처로 직접 이동시킨 다음에, 순차적 검색으로 최종 위치에 도달하여 액세스 하는 방식
    3. 임의 액세스: 기억 장소들이 임의로 선택될 수 있으며, 기억장치 내의 어떤 위치든 동일한 액세스 시간이 걸리는 방식
    4. 연관 액세스: 각 기억 장소에 포함된 key값의 검색을 통하여 액세스할 위치를 찾아내는 방식
  • 기억장치 시스템을 설계하는 데 있어 고려해야 할 주요 특성은 용량액세스 속도
  • 기억장치에서 용량을 나타내는 단위는 바이트(byte) 혹은 단어(word)
  • 전송 단위: CPU가 한 번의 기억장치 액세스에 의해 읽거나 쓸 수 있는 비트 수
    • 외부 기억장치에서는 데이터가 단어보다 훨씬 큰 단위로 전송되기도 하는데, 그 단위를 블록이라 부름
  • 주소지정 단위: 하나의 주소에 의해 액세스되는 비트들의 그룹
  • 액세스 속도와 관련된 파라미터
    • 액세스 시간: 주소와 읽기/쓰기 신호가 기억장치에 도착한 순간부터 데이터가 저장되거나 읽혀지는 동작이 완료될 때 까지의 시간
    • 기억장치 사이클 시간: 액세스 시간과 데이터 복원 시간을 합한 시간
    • 데이터 전송률: 기억장치로부터 초당 읽혀지거나 쓰여질 수 있는 비트 수
      • (1/액세스 시간) X (한 번에 읽혀지는 데이터 바이트의 수)
  • 휘발성 기억장치: 전력공급이 중단되면 저장된 내요이 사라지는 기억장치
  • 비휘발성 기억장치: 전력공급이 중단되어도 저장된 내용이 그대로 유지되는 기억장치

2. 계층적 기억장치시스템

  • 기억장치들은 유형에 따라 기능, 속도, 용량 및 가격이 매우 다양
  • 컴퓨터시스템에서는 여러 유형의 기억장치들을 계층적으로 구성하여 설치함으로써, 평균 기억장치 액세스 속도를 높이면서 가격대비 성능비도 적절히 유지되도록 하는 계층적 기억장치시스템을 구성함

2-1. 필요성 및 효과

  • 액세스 속도가 높아질수록, 비트당 가격도 높아짐
  • 용량이 커질수록 비트당 가격은 낮아짐
  • 용량이 커질수록 액세스 속도는 낮아짐
  • 지역성의 원리: CPU가 기억장치의 한정된 몇몇 영역들을 집중적으로 액세스하면서 작업을 수행한다는 원리
  • 지역성의 원리로 인해 계층적 기억장치시스템의 효율이 극대화되게 됨

2-2. 기억장치 계층

  • 상위 기억장치 계층으로 올라갈수록...
    • 비트당 가격이 높아지고,
    • 용량이 감소하며,
    • 액세스 시간은 짧아지고,
    • CPU에 의한 액세스 빈도는 높아짐
  • 내부 기억장치: CPU 레지스터 - 캐시 - 주기억장치
  • 외부 기억장치(by. 장치 제어기): 디스크 캐시 - 디스크 - 자기 테이프 및 CD-ROM
    • 주로 프로그램 파일들과 데이터 파일들이 저장되며, 바이트나 단어 단위가 아닌 블록이나 레코드 단위로 액세스 가능
  • 하위 계층으로 내려갈수록 용량이 더 커지고 비트당 가격은 떨어지는 반면에, 지역성의 원리로 인하여 액세스 빈도가 더 낮아짐

3. 캐시 메모리

  • CPU와 주기억장치의 속도 차이를 보완하기 위하여 그 사이에 설치하는 반도체 기억장치
  • CPU가 원하는 데이터가 이미 캐시에 적재되어 있는 상태가 캐시 적중(cache hit)
  • CPU가 원하는 데이터가 캐시에 없는 상태는 캐시 미스(cache miss)
  • 캐시 적중률: H = 캐시에 적중되는 횟수 / 전체기억장치 액세스 횟수
    • 캐시 미스율 = 1 - H
  • 평균 기억장치 액세스 시간, Ta = H x Tc + (1-H) x Tm
    • Tc: 캐시 액세스 시간
    • Tm: 주기억장치 액세스 시간
  • 지역성의 종류
    • 시간적 지역성: 최근에 액세스된 프로그램 코드나 데이터가 가까운 미래에 다시 액세스될 가능성이 높아지는 특성
    • 공간적 지역성: 기억장치 내에 서로 인접하여 저장되어 있는 데이터들이 연속적으로 액세스될 가능성이 높아지는 특성
    • 순차적 지역성: 분기가 발생하지 않는 한, 명령어들은 기억장치에 저장된 순서대로 인출되어 실행됨
  • 캐시 설계의 공통적 목표
    • 캐시 적중률의 극대화
    • 캐시 액세스 시간의 최소화
    • 캐시 실패에 따른 지연시간의 최소화
    • 주기억장치와 캐시간의 데이터 일관성 유지 및 그에 따른 오버헤드 최소화

3-1. 캐시 용량

  • 캐시의 용량이 커질수록 적중률이 높아짐
  • 그러나 비용도 같은 비율로 상승하기 때문에 캐시의 용량은 비용과의 상호조정을 통하여 적절히 결정해야 함

3-2. 인출 방식

  • 요구 인출: 캐시 미스가 발생한 경우 CPU가 필요한 정보만 캐시로 인출해오는 방식
  • 선인출: CPU가 필요한 정보 외에도 그와 인접해 있는 정보들을 함께 캐시로 인출해오는 방식
    • 주기억장치를 액세스할 때 함께 인출되는 정보들의 그룹을 블록이라 부름
  • 캐시 라인: 주기억장치로부터 캐시로 인출되는 단위인 한 블록이 적재되는 캐시 내 공간
    • 캐시의 각 라인은 여러 개의 블록들에 의해 공유됨
    • 태그: 캐시 라인을 공유하는 블록들 중에서 어느 것이 적재되어 있는지를 가리키는 비트들

3-3. 사상 방식

  • 주기억장치 블록이 어느 캐시 라인에 적재될 수 있는지를 결정해주는 알고리즘
  • 캐시 적중률에 많은 영향을 미치는 주요 설계 요소

1) 직접 사상
  • 주기억장치 블록이 지정된 어느 한 라인에만 적재될 수 있는 사상 방식
  • 주기억장치의 블록 j가 적재될 수 있는 캐시 라인의 번호 i는 modulo 함수에 의해 결정
    • i = j % m(캐시 라인의 수)
  • 캐시의 각 라인에는 태그와 데이터 블록이 함께 저장되며, 캐시 적중 여부는 주소의 태그 비트들과 라인에 저장된 태그 비트들을 비교함으로써 결정됨

2) 완전-연관 사상
  • 주기억장치 블록이 캐시의 어느 라인으로든 적재될 수 있는 사상 방식
  • 주기억장치 블록이 캐시의 어떤 레인에든 적재될 수 있으므로, 캐시 적중 여부를 검사할 때 캐시의 모든 라인들의 태귿르과 주기억장치 주소의 태그 필드 내용을 비교하여 일치하는 것이 있는 지 확인해야 함
    • 많은 수행시간이 걸릴 것이므로, 연관 기억장치 등을 이용하여 비교 동작이 병렬로 신속히 이루어질 수 있도록 구성해야 함
  • 완전-연관 사상에서는 새로운 블록이 캐시로 적재될 때 라인의 선택이 자유롭기 때문에, 프로그램 세그먼트나 데이터 배열 전체가 캐시로 적재될 수 있음
    • 이 경우 만약 지역성이 높다면 적중률이 매우 높아질 것
  • 그러나 모든 태그들을 병렬로 검사하기 위하여 복잡하고 비용이 높은 하드웨어를 포함해야 한다는 단점 때문에 실제로 거의 사용되지 않음

3) 세트-연관 사상
  • 주기억장치 블록이 지정된 어느 한 세트로만 적재될 수 있으며, 각 세트는 두 개 이상의 라인들로 구성된 사상 방식
  • 캐시는 v개의 세트들로 나누어지며, 각 세트는 k개의 라인들로 구성
  • 주기억장치 블록이 적재될 수 있는 캐시 세트의 번호 i = j mod v
  • 세트당 라인이 k개씩 있으면 k-way 세트-연관 사상
  • 세트-연관 사상에서 세트의 수가 캐시 라인의 수가 같고(v=m), 세트 내 라인의 수 k=1이라면, 이 방식은 직접 사상과 같아짐
  • 세트의 수 v=1이고, 세트 내 라인 수가 캐시의 전체 라인 수와 같다면(k=m), 완전-연관 사상에 해당
  • 2-way 세트-연관 사상이 가장 보편적으로 사용되고 있는 세트-연관 조직
    • 직접 사상보다 적중률이 훨씬 높음

3-4. 교체 알고리즘

  • 캐시 미스가 발생하여 새로운 블록이 주기억장치로부터 캐시로 올라왔을 때, 그 블록이 적재될 수 있는 라인들이 이미 다른 블록들로 채워져 있다면, 그 블록들 중의 하나는 교체되어야 함
  • LRU(Least Recently Used) 알고리즘: 세트 라인에 적재되어 있는 블록들 중에서 최근의 사용 빈도가 가장 낮은 블록을 선택하여 교체하는 방식
  • FIFO(First in First Out) 알고리즘: 캐시에 적재된 지 가장 오래된 블록을 교체하는 방식
  • LFU(Least Frequently Used) 알고리즘: 캐시에 적재된 이래 사용된 빈도가 가장 낮은 블록을 교체하는 방식
  • Random: 후보 라인들 중에서 한 라인을 임의로 선택하는 방식

3-5. 쓰기 정책

  • 캐시에 적재되어 있는 데이터는 주기억장치에 있는 데이터의 복사본에 불과
  • 따라서 캐시 데이터가 변경되면, 주기억장치에 있는 해당 데이터도 갱신하여 같은 값을 가지고 있도록 해야 함
  • But, 캐시에서 데이터가 변경될 때마다 주기억장치에도 그 값을 갱신하면 기억장치 쓰기 시간이 그 만큼 더 길어짐
  • 캐시의 라인을 교체할 때마다 해당 데이터가 캐시에 적재되어 있는 동안 '수정된'적이 있는 지를 확인
    • 수정된 적이 없다면, 그 데이터가 포함된 라인에 다른 블록 즉시 적재 가능
    • 수정된 적이 있다면, 수정된 데이터가 포함된 라인의 내용을 주기억장치의 해당 블록에 저장한 다음 새로운 블록을 적재
  • 이와 같이 캐시에 적재된 데이터를 새로운 값으로 변경할 때 주기억장치에 갱신하는 시기와 방법을 결정하는 것이 쓰기 정책
    • write-through: 캐시에 쓰기 동작을 수행할 때 주기억장치에도 동시에 이루어지는 방식
      • 주기억장치의 내용들은 항상 유효하지만, 쓰기 동작에 걸리는 시간이 길어짐
    • write-back: 쓰기 동작이 캐시까지만 이루어지는 방식
      • 기억장치에 대한 쓰기 동작의 횟수가 최소화되고 쓰기 시간이 짧아짐
      • 그러나, 새로운 블록 적재 때 라인 데이터가 수정된 경우 주기억장치 갱신에 추가적 시간이 소요됨
      • 또한 캐시에서 수정된 내용이 갱신될 때까지 주기억장치의 해당 블록이 무효 상태에 있게 됨
      • 데이터 불일치 문제: 주기억장치에 저장된 데이터와 캐시들에 적재된 복사본이 서로 다른 값을 가지는 현상

3-6. 다중 캐시

1) 온-칩 캐시와 계층적 캐시
  • 온-칩 캐시: CPU 칩 내부에 포함되어 있는 캐시
  • 인출할 명령어나 데이터가 온-칩 캐시에 있다면 액세스 시간이 더 짧아져서 전체 시스템의 성능 향상에 도움이 됨

  • 계층적 캐시: 여러 레벨의 캐시들을 계층적으로 설치한 구조
    • L2가 L1의 슈퍼-세트
  • L1과 L2에서는 서로 다른 사상 알고리즘과 교체 알고리즘 및 쓰기 정책이 사용되는 경우가 많음
    • 따라서 이러한 계층적 캐시 시스템에서는 데이터 일관성 유지가 더 복잡해짐

2) 분리 캐시
  • 최근에는 온-칩 캐시를 명령어만 저장하는 명령어 캐시와 데이터만 저장하는 데이터 캐시로 분리시켜 용도를 구분
  • 명령어 실행 파이프라인에서 명령어 인출 단계와 오퍼랜드 인출 단계 간에 캐시에 대한 충돌 현상 제거 가능


'Software Convergence > Computer Architecture' 카테고리의 다른 글

폰 노이만 아키텍쳐  (0) 2018.09.09
CPU의 구조와 기능  (0) 2018.09.08
시스템 버스, I/O 및 인터럽트  (0) 2018.09.07

CPU의 구조와 기능

  • CPU는 기억장치에 저장되어 있는 프로그램 코드인 명령어들을 실행하며 '프로그램 수행'이라는 컴퓨터의 기본 기능을 수행
    1. 명령어 인출: 기억장치로부터 명령어를 읽어옴
    2. 명령어 해독: 수행해야 할 동작을 결정하기 위하여 명령어를 해독
    3. 데이터 인출: 명령어 실행을 위하여 데이터가 필요한 경우에는 기억장치 or I/O 장치로부터 그 데이터를 읽어옴
    4. 데이터 처리: 데이터에 대한 산술 or 논리 연산을 수행
    5. 데이터 저장: 수행한 결과를 저장
  • 위 동작들 중 1, 2번 동작은 모든 명령어들에 대하여 공통적으로 수행되지만, 3-5번 동작은 명령어에 따라 필요한 경우에만 수행

1. CPU의 기본 구조

  • CPU의 구성 요소
    • 산술논리연산잔치(ALU): 각종 산술 연산들과 논리 연산들을 수행하는 회로들로 이루어진 하드웨어 모듈
    • 레지스터 세트: CPU 내부에 위치한 기억장치로서, 액세스 속도가 컴퓨터의 기억장치들 중에서 가장 빠름. 그러나 내부 회로가 복잡하여 비교적 큰 공간을 차지하기 때문에, 많은 수의 레지스터들을 CPU의 내부에 포함시키기는 어려워 특수 목적용 레지스터들과 적은 수의 일반 목적용 레지스터들만 포함
    • 제어 유닛: 프로그램 코드를 해석하고, 그것을 실행하기 위한 제어 신호들을 순차적으로 발생하는 하드웨어 모듈
      • 명령어 실행에 필요한 각종 정보들의 전송 통로와 방향을 지정해주고, CPU 내부 요소들과 시스템 구성 요소들의 동작 시간도 결정
      • CPU가 제공하는 명령어들의 수가 많아질 수록 제어 유닛의 내부 회로는 더 복잡해짐
        • 복잡도를 줄이기 위해 제어 유닛의 동작을 SW로 처리해주는 방법이 마이크로프로그래밍
        • 그러나 이 방법을 이용하면 명령어 실행 시간이 길어짐
        • 따라서 최근에는 명령어의 수를 가능한 줄이고 명령어 형식을 단순화함으로써, HW만으로 명령어를 실행할 수 있도록 하는 RISC(Reduced Instruction Set Computer) 설계 개념도 많이 사용되고 있음
  • CPU 내부 버스
    • ALU와 레지스터들 간의 데이터 이동을 위한 데이터 선들과 주소 선들, 그리고 제어 유닛으로부터 발생되는 제어 신호들을 전송하는 선들로 구성
    • 외부의 시스템 버스와 직접 연결되지 않으며, 반드시 버퍼 레지스터나 인터페이스 회로를 통하여 시스템 버스와 접속

2. 명령어 실행

  • CPU가 한 개의 명령어를 실행하는 데 필요한 전체 과정이 명령어 사이클
    • 명령어 사이클은 CPU가 기억장치로부터 명령어를 읽어 오는 명령어 인출 단계와 (인출 사이클)
    • 인출된 명령어를 실행하는 명령어 실행 단계로 이루어짐 (실행 사이클)
  • 명령어 사이클은 CPU가 프로그램 실행을 시작한 순간부터 전원을 끄거나 회복 불가능한 오류가 발생하여 중단될 때 까지 반복 수행
  • 명령어 실행을 위해 기본적으로 필요한 CPU 내부 레지스터
    • 프로그램 카운터(PC): 다음에 인출될 명령어의 주소를 가지고 있는 레지스터
    • 누산기(AC): 데이터를 일시적으로 저장하는 레지스터. CPU가 한 번에 처리할 수 있는 데이터의 비트 수와 크기가 같음
    • 명령어 레지스터(IR): 가장 최근에 인출된 명령어가 저장되어 있는 레지스터
    • 기억장치 주소 레지스터(MAR): 프로그램 카운터에 저장된 명령어 주소가 시스템 주소 버스로 출력되기 전에 일시적으로 저장되는 주소 레지스터
    • 기억장치 버퍼 레지스터(MBR): 기억장치에 저장될 데이터 혹은 이미 읽어온 데이터가 일시적으로 저장되는 버퍼 레지스터

2-1. 인출 사이클

  • CPU는 각 명령어 사이클의 시작 단계에서 PC가 가리키는 기억장치의 위치로부터 명령어를 인출
  • 그런 다음 CPU는 PC의 내용을 1씩 증가시킴으로써 명령어들을 기억장치에 저장되어 있는 순서대로 읽어올 수 있도록 해줌
  • 인출 사이클에서 수행되는 동작의 마이크로 연산(CPU 클록의 각 주기 동안 수행되는 기본적 동작)
    • t0: MAR <- PC // 현재 PC 내용을 CPU 내부 버스를 통하여 MAR로 보냄
    • t1: MBR <- M[MAR], PC <- PC + 1 // 그 주소가 지정하는 기억장치 위치로부터 읽혀진 명령어가 데이터 버스를 통하여 MBR로 적재 + PC 증가
    • t2: IR <- MBR // MBR에 저장되어 있는 명령어 코드가 명령어 레지스터인 IR로 이동
    • cf. t0, t1, t2는 CPU 클록의 각 주기를 가리킴
  • 명령어 인출에는 세 개의 CPU 클록 주기만큼의 시간이 걸림
    • CPU의 클록 주파수가 1GHz라면 클록 주기가 1ns이므로, 인출 사이클은 3ns

2-2. 실행 사이클

  • 인출된 명령어를 CPU가 해독하고, 그 결과에 따라 필요한 연산 수행
  • CPU 수행 연산
    1. 데이터 이동: CPU와 기억장치 간 혹은 CPU와 I/O 장치 간 데이터 이동
      • ex) LOAD addr
      • t0: MAR <- IR(addr)
      • t1: MBR <- M[MAR]
      • t2: AC <- MBR
    2. 데이터 처리: 데이터에 대하여 산술 or 논리 연산 수행
      • ex) ADD addr
      • t0: MAR <- IR(addr)
      • t1: MBR <- M[MAR]
      • t2: AC <- AC + MBR
    3. 데이터 저장: 연산결과 데이터 혹은 입력장치로부터 읽어들인 데이터 기억장치에 저장
      • ex) STA addr
      • t0: MAR <- IR(addr)
      • t1: MBR <- AC
      • t2: M[MAR] <- MBR
    4. 프로그램 제어: 프로그램의 실행 순서 결정
      • ex) JUMP addr
      • t0: PC <- IR(addr)

2-3. 인터럽트 사이클

  • CPU로 하여금 현재 진행 중인 프로그램 처리를 중단하고 다른 프로그램을 처리하도록 요구하는 메커니즘으로서, CPU와 외부장치들 간의 상호작용을 위하여 필요한 기능
  • 인터럽트 서비스 루틴(ISR): 인터럽트 요구를 처리해주기 위해 수행하는 프로그램 루틴
  • 인터럽트 사이클: 인터럽트 요구가 들어왔는지 검사하고, 그 처리에 필요한 동작들을 수행하는 과정
    1. 인터럽트 요구 신호 검사
    2. t0: MBR <- PC // 현재 PC 내용을 스택에 저장(인터럽트 처리 완료 후, 복귀 위함)
    3. t1: MAR <- SP, PC <- ISR의 시작 주소 // PC에 해당 ISP의 시작 주소를 적재
    4. t2: M[MAR] <- MBR, SP <- SP - 1 // 원래 PC의 내용을 스택에 저장 후, SP 감소
  • 프로그램에 따라 **인터럽트 가능 상태(EI)**와 **인터럽트 불가능 상태(DI)**가 있음
  • 인터럽트 사이클로 인해 AC에 저장된 값이 바뀔 수 있기 때문에, 인터럽트 서비스 루틴의 시작 단계에서 레지스터들의 내용을 스택에 저장하였다가, 루틴의 마지막 단계에서 복원시켜주는 절차가 필요함
  • 다중 인터럽트의 처리 방법
      1. CPU가 ISR을 처리하고 있는 도중에는 새로운 인터럽트 요구가 들어오더라도 인터럽트 사이클을 수행하지 않도록 하는 것
      • 이전 루틴을 처리하는 동안 CPU는 DI 상태. 루틴 처리하는 동안 발생한 인터럽트 요구는 대기 상태로 남아 있다가, CPU가 EI 상태로 바뀐 후에 인식됨
      1. 인터럽트 요구들 간에 우선순위를 정하고, 우선순위에 따라 수행 여부 판단
      • 스택에는 원래의 주프로그램으로 복귀하기 위한 주소뿐 아니라, 첫 번째 ISR으로 복귀하는데 사용될 주소도 저장되어야 함

2-4. 간접 사이클

  • 실행 사이클에서 사용될 데이터의 실제 주소를 기억장치로부터 읽어오는 과정
    • t0: MAR <- IR(addr)
    • t1: MBR <- M[MAR]
    • t2: IR(addr) <- MBR
  • 간접 사이클은 항상 수행되는 것이 아니며, 명령어 내의 특정 비트(ex: I 비트)가 1로 세트된 경우에만 수행

3. 명령어 파이프라이닝

  • 명령어를 실행하는데 사용되는 하드웨어를 독립적인 단계로 분할하고, 그들로 하여금 동시에 서로 다른 명령어들을 처리하도록 함으로써 CPU의 성능을 높여주는 기술
  • 분할되는 단계의 수가 많아질수록 처리 속도가 높아짐

3-1. 2단계 명령어 파이프라인

  • 명령어를 실행하는 하드웨어를 인출 단계실행 단계라는 두 개의 파이프라인 단계로 분리 구성
  • 명령어 선인출: 다음에 실핼될 명령어를 미리 인출하는 동작
  • 많은 수의 명령어들을 실행시키는 경우에 얻을 수 있는 최대 속도 향상은 파이프라인 단계의 수와 같은 2배에 접근하게 됨
  • 그러나, 실제로는 실행 단계가 인출 단계보다 더 긴 수행 시간을 보이기 때문에 2배만큼 빨리지지는 못함

3-2. 4단계 명령어 파이프라인

  • 파이프라인 단계들의 처리 시간이 동일하지 않음으로 인하여 발생하는 효율 저하를 방지하는 방법
  • 파이프라인을 명령어 인출(IF) - 명령어 해독(ID) - 오퍼랜드 인출(OF) - 실행(EX)의 4단계로 구성
  • 파이프라이닝을 이용하여 얻을 수 있는 속도 향상의 관계식
    • T = k + (N - 1)
    • 파이프라인 단계의 수 k, 실행할 명령어들의 수 N
    • 첫 번째 명령어를 실행하는 데 k 주기가 걸리고, 나머지 (N-1)개의 명령어들은 각각 한 주기씩만 소요
    • 파이프라이닝을 사용하지 않을 경우, k x N 주기를 소모
  • k-단계 파이프라이닝의 문제
      1. 모든 명령어가 k 단계를 거치지는 않음
      • 어떤 명령어는 실행 과정에서 오퍼랜드의 인출이 필요 없을 수도
      1. 파이프라인 클록은 처리 시간이 가장 오래 걸리는 단계를 기준으로 정해짐 -> 쓸데없는 대기 시간 있을 수 있음
      1. 기억장치 충돌의 문제가 있을 수 있음
      • IF 단계와 OF 단계는 모두 기억장치를 액세스하는데 이 때 기억장치 충돌의 문제 발생
      1. 조건 분기 명령어가 실행된다면, 미리 인출되어 파이프라인에서 처리하고 있던 명령어들이 무효화될 수 있음
  • 슈퍼파이프라이닝: 2번 문제의 해결을 위해 명령어 파이프라인의 단계들을 더욱 잘게 분할하여 처리 속도를 높여주는 기술
    • 최근에는 대부분의 프로세스들이 10 단계 이상의 단계들로 분할된 명령어 파이프라인 구조를 사용
  • 3번 문제의 보완을 위해 IF 단계와 OF 단계가 직접 액세스하는 CPU 내부 캐시를 명령어 캐시와 데이터 캐시로 분리시키는 방법이 사용됨
  • 조건 문기로 인한 성능 저하를 최소화시키기 위한 해결책
    • 분기 예측: 분기가 일어날 것인지를 예측하고, 그에 따라 어느 경로의 명령어를 인출할 지를 결정하는 확률적 방법. 최근 분기 결과들을 저장하여 두는 분기 역사 표를 참조하여 예측하는 방법이 가장 널리 사용
    • 분기 목적지 선인출: 조건 분기가 인식되면, 분기 명령어의 다음 명령어뿐 아니라, 조건이 만족될 경우에 분기하게 될 목적지의 명령어도 함께 인출하는 방법. 이 방법의 사용을 위해서는 분기 목적지 명령어를 별도로 저장해둘 수 있는 기억 장소가 추가되어야 함
    • 루프 버퍼: 파이프라인의 명령어 인출 단계에 포함되어 있는 작은 고속 기억장치로 가장 최근에 인출된 일정 개수의 명령어들이 순서대로 저장됨
    • 지연 분기: 분기 명령어의 위치를 적절히 조정하여 원래보다 나중에 실행되도록 재배치함으로써, 성능 저하를 최소화하는 방법
  • 조건 분기 명령어에서 사용하는 조건들은 CPU 내부의 상태 레지스터에 저장
    • 상태 레지스터: 연산처리 결과 및 시스템 상태를 가리키는 비트들을 저장하는 레지스터

3-3. 슈퍼스칼라

  • CPU 내에 여러 개의 명령어 파이프라인들을 두어, 동시에 그 수만큼의 명령어들을 실행할 수 있도록 한 구조
  • 슈퍼스칼라 프로세서에서 유의할 점으로는 동시에 처리할 명령어들이 서로 간에 영향을 받지 않고 독립적으로 실행될 수 있어야 한다는 것
    • 두 명령어 사이에 데이터 의존성이 존재하지 않아야 함!
    • 명령어들 간 데이터 의존성이 존재하면 파이프라인들의 일부 단계들이 idle 상태에 들어가 속도 향상을 저해
  • m-way 슈퍼스칼라 프로세서가 N개의 명령어들을 실행하는 데 걸리는 전체 시간
    • T(m) = k + N-m/m
    • 처음 m개의 명령어들을 실행하는 k 주기 소요 + 매 주기마다 m개씩의 명령어들이 동시에 실행 완료

3-4. 듀얼 코어 및 멀티 코어

  • 멀티 코어 프로세서: CPU 코어 여러 개를 하나의 칩에 넣은 것
  • 멀티 코어에서는 각 CPU 코어가 슈퍼스칼라의 명령어 파이프라인에 비하여 독립성이 더 높음
    • 별도의 하드웨어 모듈로, 시스템 버스 인터페이스와 내부 캐시만 공유
    • 따라서 각 CPU 코어는 프로그램 실행을 독립적으로 수행하며, 필요한 경우에만 공유 캐시를 통해 정보 교환
  • 독립적인 처리가 가능한 단위로 분할된 태스크 프로그램들이 CPU 코어들에 의해 동시에 처리됨
    • 이와 같은 동시처리 기술을 멀티 태스킹 혹은 멀티 스레딩이라 부름
    • CPU 코어가 많을수록 그 수만큼의 태스크 프로그램들을 동시에 처리할 수 있게 됨


'Software Convergence > Computer Architecture' 카테고리의 다른 글

폰 노이만 아키텍쳐  (0) 2018.09.09
기억장치  (0) 2018.09.08
시스템 버스, I/O 및 인터럽트  (0) 2018.09.07

시스템 버스, I/O 및 인터럽트

1. 시스템 버스

1-1. 시스템 버스의 조직

  • 시스템 버스에 접속되는 모든 요소들은 버스를 통하여 상호간에 정보를 교환하고, 동작 시간을 조정하기 위한 클록 신호 전송
  • 시스템 버스를 구성하는 선들의 수는 한 번에 전송하는 데이터 비트들의 수가 기억장치 비트들의 수 및 제어 신호들의 수에 따라 결정
  • 데이터 버스: 시스템 요소들 사이에 데이터를 전송하는 데 사용되는 선들의 집합
    • CPU가 8비트씩 읽어오면 8개의 선, 32비트씩 읽어오면 32개의 선이 필요
    • 데이터는 CPU-기억장치, CPU-I/O장치 및 기억장치-I/O 장치 사이에 양방향으로 전송되기 때문에, 데이터 버스는 양방향 전송을 지원해야 함
  • 주소 버스: CPU가 기억장치나 I/O 장치에 액세스할 때 주소 비트들을 전송하는 데 사용되는 선들의 집합
    • 주소는 CPU에 의해서만 발생되기 때문에 단방향 전송 기능만 있으면 됨
    • 주소 버스의 폭은 CPU가 주소 지정할 수 있는 전체 기억장치 용량을 결정
  • 제어 버스: 제어 신호들을 전송하기 위한 선들의 집합
    • ex) 기억장치 쓰기/읽기 신호, I/O 쓰기/읽기 신호
  • 버스 마스터: 시스템 버스 사용의 주체가 되는 요소
    • 일반적인 컴퓨터 시스템에서는 CPU와 I/O 제어기 등이 버스 마스터
    • 동기식 버스 시스템에서는 기억장치 모듈도 버스 마스터가 될 수 있음
  • 두개 이상의 마스터들이 동시에 버스를 사용하고자 할 때는 순서대로 사용하도록 버스 중재를 해주어야 함
  • 중재 버스의 종류
    • 버스 요구 신호: 버스 마스터가 버스 사용을 원하고 있음
    • 버스 승인 신호: 버스 사용을 요구한 마스터에게 사용을 허가
    • 버스 사용 중 신호: 현재 어떤 마스터가 버스를 사용하고 있는 중
  • CPU와 I/O 장치 간의 비동기적 동작을 지원하는 인터럽트 메커니즘을 위한 제어 신호
    • 인터럽트 요구 신호
    • 인터럽트 확인 신호
  • 버스 대역폭: 버스를 통하여 단위시간 당 전송할 수 있는 데이터량으로서, 단위는 초당 바이트 수로 나타냄

1-2. 시스템 버스의 기본 동작

  • 버스 상의 모든 동작들은 쓰기 동작과 읽기 동작으로 구분
  • 동기식 버스: 모든 버스 동작들이 발생하는 시간이 공통의 버스 클록을 기준으로 결정되는 버스
    • 인터페이스 회로가 간단하는 장점
    • 버스 클록의 주기가 가장 오래 걸리는 버스 동작의 소요 시간을 기준으로 정해져야 하기 때문에, 클록 주기보다 짧은 시간이 걸리는 버스 동작의 경우 동작이 완료된 후에도 기다려야 한다는 단점
  • 비동기식 버스: 버스 동작들의 발생 시간이 다른 버스 동작의 발생 여부에 따라 결정되는 버스
    • 동기식 버스에서와 같이 낭비되는 시간이 없다는 장점
    • 연속적 동작들을 처리하기 위한 인터페이스 회로가 복잡해지는 단점

2. 버스 중재

  • 버스 경합이 발생한 경우 버스 마스터들 중에서 한 개씩 선택하여 순서대로 버스를 사용할 수 있게 해주는 행위
  • 버스는 Fair하게 배분되어야 하며, 배분으로 인한 Starvation 현상이 없어야 함

2-1. 병렬 중재 방식

각 버스 마스터가 독립적인 버스요구 신호를 버스 중재기로 보내며, 별도의 버스 승인 신호를 받는 방식

1) 중앙집중식 고정-우선순위 방식
  • 각 버스 마스터에 지정된 우선순위가 변하지 않는 고정-우선순위 방식과 우선순위가 계속 변하는 가변-우선순위 방식이 존재
  • 각 버스 마스터는 자신의 버스 요구(BREQ)선을 가지며, 이들은 모두 하나의 버스 중재기로 접속
  • 버스 중재기는 한 개 이상의 버스 요구 신호를 받아서, 그 중 우선순위가 가장 높은 마스터의 버스 승인(BGNT) 신호
  • BBUSY 신호는 어떤 버스 마스터가 버슬르 사용하고 있는 중이라는 것을 의미
  • 각 마스터에 대한 BGNT 신호는 더 높은 우선순위를 가진 마스터가 버스 요구를 발생하지 않은 상태에서 BREQ를 1로 세트했을 때만 활성화 가능

2) 분산식 고정-우선순위 방식
  • 모든 버스 마스터들이 중재기를 한 개씩 가지고 있음
  • 자신보다 더 높은 우선순위를 가진 버스 마스터들의 버스 요구 신호들을 입력으로 받아 검사하고, 그들 중 어느 것도 버스 사용 요구를 하지 않은 경우에만 자신의 버스 승인 신호를 셋
  • 분산식 중재 방식은 중앙집중식에 비하여 중재 회로가 간단하기 때문에 동작 속도가 더 빠르다는 장점
  • 그러나, 고장을 일으킨 중재기를 찾아내기가 힘들며, 한 중재기의 고장이 전체 시스템에 동작에 영향을 줄 수도 있다는 단점 존재

3) 가변 우선순위 방식
  • 버스 중재기가 시스템의 상태 또는 조건에 따라 각 버스 마스터들의 우선순위를 계속 바꾸어 줌
  • 중재 회로는 더 복잡해지지만, 버스 마스터들이 버스를 균등하게 사용할 수 있게 됨
  • 최상위 우선순위를 가진 마스터가 버스를 독점하거나, 최하위 우선순위를 가진 마스터가 오랫동안 버스를 사용하지 못하는 기근 현상의 방지를 위한 방식
  • 가변 우선순위 알고리즘
    • 회전 우선순위
        1. 중재 동작이 끝날 때마다 모든 마스터들의 우선순위가 낮아지고, 가장 우선순위가 낮았던 마스터가 최상위 우선순위를 가지는 방법
        1. 버스 사용 승인을 받은 마스터는 최하위 우선순위를 가지며, 바로 다음에 위치한 마스터가 최상위 우선순위를 가지도록 하는 방법
    • 임의 우선순위: 각 중재 동작이 끝날 때마다 마스터들의 우선순위가 난수 발생기에 의해 임의로 정해지는 방식
    • 동등 우선순위: 모든 마스터들이 동등한 우선순위를 가지는 방식
    • 최소-최근 사용: 최근 가장 오랫동안 버스를 사용하지 않은 버스 마스터에게 최상위 우선순위를 할당하는 방식

2-2. 직렬 중재 방식

버스요구 신호와 버스승인 신호가 하나씩 있으며, 각 신호 선이 모든 버스 마스터들 간에 직렬로 접속되는 방식

1) 중앙집중식 직렬 중재 방식

  • 하나의 중재 신호선에 의해 모든 버스 마스터들이 직렬로 연결되어 데이지 체인형태를 이룸
  • 마스터들의 우선순위는 버스 중재기를 시작점으로 하여 승인 신호 선이 연결된 순서대로 정해짐(중재기에 가까운 것이 높은 우선순위)
  • 어떤 마스터도 버스를 사용하지 않을 때만 버스 중재기가 승인 신호를 발생하도록 설계해야 함
    1. BBUSY 신호가 해제될 때 까지는 버스 마스터들이 요구 신호를 보낼 수 없거나,
    2. 버스 요구 신호는 항상 발생시킬 수 있지만, 승인 신호를 받은 후에도 BBUSY 신호가 해제될 때까지는 버스를 사용할 수 없도록 함

2) 분산식 직렬 중재 방식

  • 데이지-체인 버스 승인 신호(DBGNT) 선이 버스 중재기들을 순환형으로 접속한 형태로 구성
  • 버스 사용권을 부여받은 마스터가 버스 사용을 시작하는 순간에 DBGNT 신호를 세트하여 자신의 바로 우측 마스터의 중재기로 보내줌
  • 신호를 받은 중재기의 마스터가 버스 사용을 신청한 상태였으면 BGNT 신호를 발생시켜 마스터에게 보내며, 버스 요구를 하지 않은 상태라면 다음 중재기로 넘겨줌
  • 각 마스터의 우선순위가 계속 변한다는 특징
    • 즉, 어떤 마스터가 버스 사용 승인을 받으면 그 마스터는 다음 중재 동작에서는 최하위 우선순위를 가지게 되고, 그 마스터의 바로 우측에 위치한 마스터가 최상위 우선순위를 가지게 됨
  • 이 방식은 분산식이지만, 어떤 한 중재기에 결함이 발생하면 DBGNT 신호를 통과시킬 수 없기에 전체 동작이 중단될 수 있음

2-3. 폴링 방식

버스 중재기가 각 마스터들이 버스 사용을 원하는지를 주기적으로 검사하여 버스 승인 여부를 결정

1) 하드웨어 폴링 방식
  • 중재기 내의 고정된 하드웨어를 이용한 주기적 검사를 통해 중재 기능을 수행하는 방식
  • N개의 마스터를 가진 시스템에는 N개의 폴링 선 혹은 2진 코드화된 폴링 주소를 사용할 시 logN개의 폴링 선 필요
  • 각 마스터들의 우선순위는 중재기가 마스터를 검사하는 순서에 의해 결정됨

2) 소프트웨어 폴링 방식
  • 하드웨어 폴링 방식과 동일하게 구성
  • 그러나 중재 동작이 고정된 하드웨어에 의해 이루어지는 것이 아니라 프로세서의 의해 조정되는 방식
    • 하드웨어 방식에 비하여 속도가 더 느리지만, 융통성이 높다는 장점
  • 중재 프로세서는 다음에 폴링할 마스터의 주소를 기억할 수 있고, 필요에 따라 폴링 순서를 변경할 수도 있음
  • 만약 어떤 버스 마스터에 결함이 발생한다면, 그 마스터를 폴링 순서에서 제외하여 시스템 결함 허용도를 높일 수 있음

3. 인터럽트를 이용한 I/O

프로그램을 이용한 I/O 방식은 CPU가 I/O 동작에 계속 관여해야 하기 때문에 CPU 시간의 낭비를 초래

  • 인터럽트 메커니즘을 이용하여 CPU와 I/O 장치간 상호작용을 처리하는 인터럽트-구동 I/O 방식을 통해 해결 가능
    1. CPU가 I/O 제어기에 명령을 보냄. 그 후, CPU는 다른 작업 수행
    2. 제어기는 I/O 명령을 이용하여 I/O 장치를 제어
    3. I/O 장치가 명령 수행을 완료하면, 제어기는 CPU로 인터럽트 신호를 보냄
    4. CPU는 인터럽트 신호를 받는 즉시 원래의 프로그램으로 돌아와서 다음 작업을 계속함

3-1. 다중 인터럽트 방식

  • 각 I/O 제어기와 CPU 상에 별도의 인터럽트 요구 신호선과 인터럽트 확인 신호선이 한 개씩 존재
  • 두 개 이상의 I/O 장치들이 동시에 인터럽트 요구 신호를 보내는 경우, 각 I/O 장치에 대하여 우선순위를 정하고, 더 높은 우선순위를 가진 장치의 인터럽트 요구부터 확인 신호를 보내고 서비스
  • 각 I/O 장치가 별도의 인터럽트 선을 가지고 있기 때문에 CPU가 인터럽트를 요구한 장치를 쉽게 찾아낼 수 있다는 장점

3-2. 데이지-체인 방식

  • 모든 I/O 제어기들은 한 개의 인터럽트 요구 신호 선을 공유
  • 인터럽트 확인 신호는 첫 번째 I/O 제어기로 보내짐
    • 만약 그 제어기가 인터럽트를 요구한 상태라면, 즉시 데이터 버스를 통해 자신의 ID(인터럽트 벡터)를 CPU에 보냄
    • 인터럽트를 요구한 상태가 아니라면, 그 제어기는 확인 신호를 다음 제어기로 통과시킴
  • 간단한 하드웨어 구성이지만, 많은 수의 I/O 장치들이 접속된 시스템에서는 기근 현상 초래할 가능성 있음

3-3. 소프트웨어 폴링 방식

  • 한 개의 TEST I/O 선이 CPU와 모든 제어기들 사이에 연결
  • TEST I/O 신호는 각 제어지 내 인터럽트 플래그의 상태를 확인
  • 데이지-체인 방식과 같은 방식으로 작동하지만 소프트웨어가 그 역할을 수행하는 것이 차이

4. DMA를 이용한 I/O

인터럽트-구동 I/O 방식 역시 기억장치와 I/O 장치간 데이터 이동에 CPU가 직접 개입해야 하며, 이동되는 데이터들이 반드시 CPU를 경유해야 하는 문제 존재

  • DMA(Direct Memory Access)란 CPU의 개입 없이 I/O 장치와 기억장치 사이에 데이터 전송을 수행하는 메커니즘
  • CPU는 DMA 제어기로 다음과 같은 정보들이 포함된 명령어를 보냄
    • I/O 장치의 주소
    • 연산 지정자
    • 데이터가 읽혀지거나 쓰여질 주기억장치 영역의 시작 주소
    • 전송될 데이터 단어들의 개수
  • CPU는 I/O 동작을 DMA 제어기에게 맡기고, 모든 데이터 전송 동작이 완료될 때까지 전혀 개입하지 않음
  • CPU와 DMA는 시스템 버스를 공유: DMA가 시스템 버스를 통해 주기억장치에 접근하기 때문
    • DMA 제어기는 가능한 한 CPU의 정상적 동작을 방해하지 않으며 시스템 버스를 사용
    • 이로 인해 DMA를 사이클 스틸링이라고도 부름
    • 그러나 큰 데이터 블록 전송의 경우 스틸한 사이클만 사용하기에는 턱없이 부족
      • 일반적으로 DMA 제어기가 시스템 버스 사용(BUS REQ)을 요구하면, CPU는 현재 사이클이 끝나는 즉시 사용 허가(BUS GRANT)를 해줌

  • DMA 제어기의 내부 구조
    • I/O 장치의 주소를 저장하는 '주소 레지스터'
    • 데이터 버퍼 역할을 하는 '데이터 레지스터'
    • 전솔될 데이터 수를 저장하는 '카운터 레지스터'
    • 각종 제어 신호들을 발생하거나 받아들이기 위한 '제어 회로'
  • 시스템 버스에 주기억장치, I/O 제어기가 모두 달려있는 경우, 데이터 x 2번만큼 시스템 버스를 사용 -> 비효율
  • DMA 제어기 아래에 I/O 제어기를 두자 !
    • 시스템 버스는 데이터 x 1번 만큼만 사용하면 됨
    • 그러나, 각 DMA 제어기에 직접 접속할 수 있는 I/O 제어기의 수가 제한되어 여러 DMA 제어기들을 두어야 할 수도 있음
  • DMA 제어기를 시스템 버스와 I/O 버스 사이에 위치시키고, I/O버스를 통해 I/O 장치를 제어하자!
    • I/O 장치들은 종류와 속도가 다양하고 제어 방법도 복잡하기 때문에, 간단한 구조를 가진 DMA제어기로 지원하는 데 한계 존재
    • 디스크 쓰기/읽기의 경우 데이터 블록의 크기가 512byte 이상이기 때문에 그 데이터들을 임시 저장하기 위한 내부 기억 장치 필요

  • I/O 장치들의 동작을 제어하며 DMA 동작도 제어하는 프로세서인 I/O 프로세서(IOP)의 사용

    • I/O 제어 프로그램을 수행할 수 있는 프로세서
    • 데이터 블록을 임시 저장할 수 있는 용량의 지역 기억장치
    • 시스템 버스 인터페이스 및 버스 마스터 회로
    • I/O 버스 인터페이스 및 중재 회로로 구성


'Software Convergence > Computer Architecture' 카테고리의 다른 글

폰 노이만 아키텍쳐  (0) 2018.09.09
기억장치  (0) 2018.09.08
CPU의 구조와 기능  (0) 2018.09.08

+ Recent posts