신입 개발자 공부 과정

CS 컴퓨터 공학 지식 - CPU 본문

컴퓨터 공학

CS 컴퓨터 공학 지식 - CPU

Lewisjkim 2024. 1. 4. 19:44
  • CPU의 구성 요소
    • CPU 핵심 구성 요소 세 가지
      • ALU(산술논리연산장치) - 연산을 수행하는 장치(계산을 담당하는 회로)
        • 레지스터로부터 피연산자(연산의 대상)을 받아들임
        • 제어 장치로부터 제어 신호(연산할 작업)를 받아들임
        • 연산의 결과를 레지스터, 플래그 레지스터에 저장
      • 제어장치 - 명령어를 해석하고 제어 신호를 내보내는 장치
      • 레지스터
        • 레지스터 종류
          • 프로그램 카운터 - (중요) 메모리에서 가져올 명령어 주소 (메모리에서 읽어들일 주소)
            • 프로그램 카운터는 일반적으로 1씩 증가되며 메모리의 프로그램이 순차적으로 증가된다.
          • 명령어 레지스터 - 해석할 명령어 (메모리에서 읽어들인 주소)
          • 메모리 주소 레지스터 - 메모리의 주소 (읽어들일 주소 값)
          • 메모리 버퍼 레지스터 - 메모리와 주고받을 명령어와 데이터
          • 플래그 레지스터 - 연산 결과에 대한 부가 정보 저장
          • 범용 레지스터 - 범용적으로 사용 가능한 레지스터 (여러 개 있음)
          • 스택 포인터 - 스택 주소 지정 방식에서 사용되는, '스택의 꼭대기'를 가리키는 레지스터
          • 베이스 레지스터 - 변위 주소 지정 방식에서 사용되는, '떨어진 거리'를 가리키는 레지스터
        • 클럭 - 시간 단위
    • 변위 주소 지정 방식
      • 오퍼랜드 필드의 값을 변위 삼아, 특정 레지스터 값을 더해 유효 주소를 얻는 주소 지정 방식
        • 상대 주소 지정
          • 오퍼랜드 + 프로그램 카운터 == 유효 주소
        • 베이스 레지스터 주소 지정
          • 오퍼랜드 + 베이스 레지스터(기준 주소) == 유효 주소
  • 명령어 사이클과 인터럽트
    • 명령어 사이클 = CPU가 메모리에 있는 명령어를 갖고와서 실행 할 때에는 일정한 주기를 반복하면서 실행하게 된다.
      • 1. 메모리에서 명령어를 가져오고(인출)
      • 2. 가져온 명령어를 실행
      • 반복
    • 인터럽트 = 그 흐름을 끊어 내는 것
      • 1.입출력장치는 CPU에게 인터럽트 요청 신호를 보냄
      • 2.CPU는 실행 사이클 이후 인출 전 인터럽트 여부 확인
      • 3.CPU는 인터럽트 요청 확인 후, 인터럽트 플래그를 통해 인터럽트 수용 여부 확인
      • 4.인터럽트가 가능하다면 지금까지의 작업 백업
      • 5.인터럽트 벡터를 참고하여 인터럽트 서비스 루틴(인터럽트 핸들러 실행)
      • 6.인터럽트 서비스 루틴 실행 후 백업한 작업 복구, 실행 재개
  • 멀티 코어와 멀티 프로세서
    • 빠른 CPU를 위한 하드웨어적 설계
    • 컴퓨터 부품은 클럭 신호에 맞춰 일사 분락하게 움직인다
    • CPU는 클럭 신호에 따라 명령어 사이클에 맞춰 명령어들을 실행한다
    • 클럭 속도가 높은 CPU는? 일반적으로 성능이 좋다
    • CPU 오버클럭킹
      • 임의로 클럭 속도를 끌어올리는 기술(게임 성능 향상 등에 사용)
      • 부팅 시 BIOS에서 설정 가능
    • 클럭과 발열의 관계
      • 클럭 수를 높이면 성능이 비례하여 상승하지 않는다! 클럭 수가 높아질 수록 발열 문제가 심각해지기 때문
    • 클럭 수를 높이는 방법 이외에 성능을 높이는 방법?
      • 코어 수 늘리기->멀티 코어 프로세서
        • 코어 = 명령어를 인출하고, 해석하고, 실행하는 CPU내 부품
      • Thread 수 늘리기 -> 멀티 스레드 프로세서
        • 하드웨어적 스레드 = 하나의 코어가 동시에 처리하는 명령어 단위(지금은 이거)
        • 소프트웨어적 스레드 = 하나의 프로그램을 독립적으로 실행하는 단위
        • 쓰레드와 멀티쓰레드
          • 메모리 + 메모리에 저장된 프로그램 입장에서 하드웨어 스레드와 코어를 구분할 수 있나?
          • 정답 = 각 하드웨어를 마치 하나의 단일 스레드/코어 프로세서로 인식
          • 이런 점에서 하드웨어 스레드를 논리 프로세서라고 부르기도 함
  • 명령어 병렬 처리 - 파이프라이닝
    • 하나의 명령어가 처리되는 과정을 비슷한 시간 간격으로 나누면?
      • 명령어 인출
      • 명령어 해석
      • 명령어 실행
      • 명령어 저장
      • * 위 단계들은 서로 겹치지만 않는다면 한꺼번에 실행할 수 있다
    • 명령어 파이프라인이 실패하는 경우 = 파이프라인 위험 or 해저드
      • 데이터 위험 - 명령어 간 의존성에 의해 발생
        • 데이터가 쓰여진 직후 그 데이터를 읽어들이는 경우(RAW)Read After Write
        • 데이터를 쓴 직후 그 데이터에 새 내용을 쓰는 경우(WAW)
        • 데이터를 읽어들인 직후 그 데이터에 새 내용을 쓰는 경우(WAR)
      • 제어 위험 - 프로그램 카운터의 갑작스러운 변화에 의해 발생(분기)
      • 구조적 위험 - 서로 다른 명령어가 같은 자원을 사용하려 할 경우 발생
    • 파이프라이닝의 발전 = 슈퍼스칼라
      • 다수의 명령어 파이프라인을 두는 방식
      • 여러 명령어 동시 인출/해석/실행/저장이 가능한 CPU
  • 비순차적 명령어 처리
    • 명령어 파이프라인의 성능을 더 높일 수 있는 처리 방법
    • 순서를 바꾸어 실행해도 프로그램 실행에 없는 명령어 순서를 바꿈으로서 파이프라이닝의 성능을 높이는 기능
    •  

 

 

 

 

'컴퓨터 공학' 카테고리의 다른 글

CS 컴퓨터 공학 지식 - 명령어  (1) 2024.01.04
CS 컴퓨터 공학 지식 - 컴퓨터 구조  (1) 2024.01.04