Notice
Recent Posts
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
Archives
관리 메뉴

교대최소제곱법

[컴퓨터 시스템 part 1] CPU 본문

CS 기초/컴퓨터 구조

[컴퓨터 시스템 part 1] CPU

옐라크레 2023. 9. 8. 01:36

명령어 주소 지정 방식

  1. 직접 주소 지정
  2. 간접 주소 지정
  3. 레지스터 주소 지정
  4. 레지스터 간접 주소 지정
  • 스택 주소 지정
  • 변위 주소 지정 : 오퍼랜드 + 레지스터 값
    • 상대 주소 지정 : 오퍼랜드 + 프로그램 카운터
    • 베이스 레지스터 주소 지정 : 오퍼랜드 + 베이스 레지스터(기준 주소)

CPU의 내부 구성

ALU

ALU : 계산기 역할

플래그 : 연산 결과에 대한 부가 정보(ex 양수 음수)

 

제어장치

클럭 신호를 받는다 : 시간 단위(박자)

명령어 레지스터를 해석

제어 신호 : cpu 내부 외부에 출력

 

레지스터

레지스터 : 저장장치

메모리에서 데이터를 가져오는 순서

프로그램카운터 → 메모리 주소 레지스터 → 메모리 버퍼 레지스터 → 명령어 레지스터

*유효주소 : 연산에 사용할 데이터가 저장된 위치 → 명령어 주소 지정 방식

 

빠른 CPU란?

  1. 클럭을 빠르게 돌린다
  2. 코어, 스레드를 늘리는 것

클럭을 빠르게 돌린다

명령어 사이클 : 일정한 주기를 가지고 실행

인출 → 실행 → 인출 → 실행 …

간접 사이클 : 간접 주소 지정의 경우 사용

클럭을 빠르게 돌린다 = 사이클을 빠르게 돌린다

 

코어, 스레드를 늘린다

하드웨어적 스레드(논리 프로세서 = 스레드 개수) : 하나의 코어가 처리하는 명령어의 단위

멀티스레드 프로세스 → 레지스터 세트가 가장 중요

소프트웨어적 스레드 : 하나의 프로그램에서 독립적으로 실행되는 단위 → 메모리에서 한번에 두개를 읽어감

 

 

명령어 병렬 처리

명령어 파이프 라인 : 인출 → 해석 → 실행 → 저장 (명령어 사이클)

  • 파이프라인 위험 : 겹쳐서 실행 불가능한 경우
    단계가 겹치지만 않으면 동시에 실행이 가능
  • 데이터 위험 : 명령어끼리 순서(의존성)가 있는 경우
  • 제어 위험 : 프로그램 카운터가 바뀔 때
  • 구조 위험 : 서로 다른 명령어가 같은 부품을 활용하려고 할 때

비순차적 명령어 처리 : 합법적인 새치기 → 의존성이 없는 명령어의 순서를 빈 공간에 땡기는 것

why? 파이프라인의 중단을 막기 위해서 + 효율적으로 실행하기 위해

 

+인터럽트

예외(동기) : 실행할 수 없는 명령어

하드웨어 인터럽트(비동기) : 입출력 장치에 의해 발생(완료 알림과 비슷함) → 주기적으로 확인 안해도 됨

인터럽트 요청 신호, 플래그 → 지금 방해해도 되나요?

 

명령어 집합 구조 : cpu의 언어

CISC(complex) : x86, 86-64 이 쪽 → 복잡하고 다양한(가변길이) → 적은 수의 명령어로 가능

but 복잡하기 때문에 파이프라이닝에 불리 + 가변길이라 실행시간도 지멋대로임

하지만 실제로는 마이크로 명령어로 수행하기 때문에 성능도 나쁘지 않음

 

RISC(reduced) : 단순, 짧고 규격화된 명령어 → 그래서 양으로 때움