[혼공컴운] 2주차 - Chapter04~05
Chapter04. CPU의 작동 원리
4-1 ALU와 제어장치
ALU
ALU는 계산 장치 이다.
ALU의 입력
- 계산을 위해선 피연산자와 수행할 연산이 필요하다.
- ALU는 레지스터를 통해 피연산자를 받아들이고, 제어 장치로부터 수행할 연산을 알려주는 제어 신호를 받아들인다.
ALU의 출력
연산 수행 결과는 특정 숫자, 문자, 메모리 주소가 될 수 있다.
결과값은 메모리에 저장되지 않고, 일시적으로 레지스터에 저장된다.
(CPU가 메모리에 접근하는 속도는 레지스터 접근 속도 보다 훨씬 느리기에, 레지스터에 우선 저장)
계산 결과와 함께 플래그를 내보낸다.
플래그
: 연산 결과에 대한 추가 적인 상태 정보, 플래그 레지스터에 저장
- 부호 플래그
- 연산한 결과의 부호를 나타냄
- 1이면 음수, 0이면 양수
- 제로 플래그
- 연산 결과가 0인지 여부를 나타냄
- 1이면 0, 0이면 연산 결과가 0이 아님
- 캐리 플래그
- 연산 결과 올림수나 빌림수가 발생했는지 여부
- 1이면 발생, 0이면 미발생
- 오버플로우 플래그
- 오버플로우 발생 여부 체크
- 1이면 발생, 0이면 미발생
- 인터럽트 플래그
- 인터럽트 가능 여부 체크
- 1이면 가능, 0이면 불가능
- 슈퍼바이저 플래그
- 커널모드 실행인지, 사용자 모드 실행 중인지 체크
- 1이면 커널 모드, 0이면 사용자 모드
제어 장치
: 제어 신호를 내보내고, 명령어를 해석하는 부품,
- 입력
- 제어장치는 클럭 신호를 받아들인다.
- 제어장치는 명령어 레지스터에서 해석해야 할 명령어를 받아들인다.
- 플래그 레지스터 속 플래그 값을 받아들인다.
- 제어 장치는 시스템 버스, 그 중에서 제어버스로 전달된 제어 신호를 받아들인다.
- 출력
- CPU 내부에 전달하는 제어 신호
- ALU 전달 제어신호
- 레지스터 제어 신호
- CPU 외부에 전달하는 제어 신호
- 메모리에 전달하는 제어신호
- 입출력 장치에 전달하는 제어신호
- CPU 내부에 전달하는 제어 신호
4-2 레지스터
- 프로그램 카운터(PC)
- 메모리에서 가져올 명령어의 주소 저장
- 명령어 포인터 라고도 부른다.
- 명령어 레지스터
- 메모리에서 읽어들인 명령어를 저장하는 레지스터
- 메모리 주소 레지스터
- 메모리의 주소를 저장하는 레지스터
- 메모리 버퍼 레지스터
- 메모리와 주고 받을 값(데이터와 명령어)을 저장하는 레지스터
- 범용 레지스터
- 다양하고 일반 적인 상황에서 자유롭게 사용가능한 레지스터
- 플래그 레지스터
- ALU 연산 결과에 따른 플래그를 저장
스택 주소 지정 방식
: 스택과 스택 포인터를 이용한 주소 지정 방식
- 스택 포인터: 스택의 꼭대기를 가리키는 레지스터
- 메모리안에 스택처럼 사용할 영역이 저장되어 있다. 이를 스택 영역 이라 부른다.
변위 주소 지정 방식
: 오퍼랜드 필드의 값과특정 레지스터의 값을 더하여 유효 주소를 얻어내는 주소 지정 방식
상대 주소 지정 방식
: 오퍼랜드와 프로그램 카운터의 값을 더하여 유효 주소를 얻어내는 방식베이스 레지스터 주소 지정 방식
: 오처랜드와 베이스 레지스터의 값을 더하여 유효 주소를 얻는 방식
4-3 명령어 사이클과 인터럽트
명령어 사이클
: 하나의 명령어를 처리하는 정형화된 흐름
- [ 인출 사이클 → 실행 사이클 ] : 이 한 주기 흐름의 반복
- 간접 사이클 : 오퍼랜드 필드가 간접 주소 지정 방식을 이용한 경우 명령어 실행을 위해 메모리에 한번 더 접근하는 단계
인터럽트
: CPU의 작업을 방해하는 신호.
- 동기 인터럽트 (= 예외)
- CPU에 의해 발생하는 인터럽트
- CPU가 실행하는 프로그래밍 상의 오류와 같은 예외적 상황이 발생한 경우
- 비동기 인터럽트 ( = 하드웨어 인터럽트)
- 막을 수 있는 인터럽트 : 주로 입출력 장치에 의해 발생
- 막을 수 없는 인터럽트 : 하드웨어 고장
- 인터럽트 서비스 루틴 (= 인터럽트 핸들러) : 인터럽트 처리를 위한 프로그램
- 인터럽트 벡터 : CPU가 수많은 인터럽트 서비스 루틴을 구별하기 위한 정보
- 인터럽트 서비스 루틴의 시작 주소 정보 확인 가능
- 인터럽트 벡터 : CPU가 수많은 인터럽트 서비스 루틴을 구별하기 위한 정보
Chapter05. CPU 성능 향상 기법
5-1 빠른 CPU를 위한 설계 기법
클럭
- 클럭 신호 높아지면, CPU 명령어 사이클이 빨라진다.
- HZ 단위로 측정
- 클럭 속도만으로 CPU 성능을 올리기엔 한계가 존재
코어와 멀티코어
- 코어 : 명령어를 실행하는 부품
→ CPU : 명령어를 실행하는 부품들을 여러개 포함하는 부품
스레드와 멀티 스레드
스레드 : 실행 흐름의 단위
하드웨어적 스레드
: 하나의 코어가 동시에 처리하는 명령어 단위
- 멀티 스레드 프로세서 (멀티 스레드 CPU)
: 하나의 코어로 명령어를 동시에 처리하는 CPU
- 멀티 스레드 프로세서 (멀티 스레드 CPU)
소프트웨어적 스레드
: 하나의 프로그램에서 독립적으로 실행되는 단위- 프로그램은 여러부분이 동시에 실행가능 하다.
멀티 스레드 프로세서
- 프로그램 카운터, 스택 포인터, 메모리 버퍼 레지스터, 메모리 주소 레지스터를 추가
- 프로그램 입장에선 스레드 여러개가 아닌, CPU가 여러개 있는 것 처럼 보인다.
5-2 명령어 병렬 처리 기법
: 명령어들을 동시에 처리하여 CPU들을 한시도 쉬지 않고 작동시키는 방법
명령어 파이프라인
: 같은 단계가 겹치지 않는다면, 각 단계를 동시에 실행할 수 있다.
파이프라인 위험
데이터 위험
: 데이터 의존성에 의해 발생제어 위험
: 분기 등으로 인한 프로그램 카운터의 갑작스러운 변화에 의해 발생
- 분기 예측 : 제어 위험을 보완하는 기술
구조적 위험 (= 자원 위험)
: 서로 다른 명령어가 동시에 같은 CPU부품에 접근하려 할 때 발생
슈퍼스칼라
- CPU 내부에 여러개의 명령어 파이프 라인을 포함한 구조
- 멀티슬드 프로세서 같은 경우 사용 가능
비순차적 명령어 처리
: 명령어를 순차적으로만 실행하지 않고, 순서를 바꿔 실행하여도 무방한 명령어를 먼저 실행하여 파이프라인이 멈추는 것을 방지하는 기법
5-3 CISC와 RISC
명령어 집합
ISA : CPU가 이해할 수 있는 명령어들의 모음.
- 서로 다른 CPU는 서로의 명령어를 이해할 수 없다.
- 명령어가 달라지면 어셈블리어도 달라진다.
- ISA가 달라지면, CPU가 이해할 수 있는 어셈블리어도 달라진다.
- 사용한 컴파일러에 따라서도 어셈블리어가 달라질 수 있다.
CISC (Complex Instruction Set Computer)
: 복잡한 명령어 집합을 활용하는 컴퓨터
- 다양한 가변길이 명령어 활용
- 주소 지정 방식도 다양
- 컴파일 된 프로그램의 크기가 작다.
- 명령어의 크기와 실행되기까지의 시간이 일정하지 않다.
- 하나의 명령어를 실행하는 데 여러 클럭 주기를 필요로 한다.
RISC (Reduct Instruction Set Computer)
- 고정 길이 명령어를 이용
- 명령어가 규격화 되어 있고, 하나의 명령어가 1클럭 내외로 실행된다.
- 메모리 접근을 단순화 하고, 최소화
- 주소 지정 방식 종류가 적다.
- 레지스터를 적극적으로 활용한다.
- CISC보다 많은 명령으로 프로그램을 작동시킨다.
기본 숙제
- p.125번의 2번
- 플래그 레지스터 : 연산 결과 혹은 CPU 상태에 대한 부가 정보를 저장하는 레지스터
- 프로그램 카운터 : 메모리에서 가져올 명령어의 주소를 저장하는 레지스터
- 범용 레지스터 : 데이터와 주소를 모두 저장할 수 있는 레지스터
- 명령어 레지스터 : 해석할 명령어를 저장하는 레지스터
- p.155번의 4번
answer : core