TIL : CS - CPU

hihyeon_cho·2022년 11월 11일
1

TIL

목록 보기
10/101

CPU

왜 싱글코어에서 멀티코어로 바뀌었을까

  • 싱글코어는 극한의 처리량을 할 수 있었다.
    하지만 무어의법칙으로 성능도 지속적으로 증가하는데,
    발열 등의 문제로 인해 성능 향상에 본질적으로 한계가 있어
    이 문제들을 멀티플하게 만들어 해결하기 위해 멀티코어로 바뀌게 됨.

  • 멀티코어는 멀티하게(여러 개의) state를 저장할 수 있다.

  • 무어의 법칙 ?: 1년마다 코어세스의 성능이 2배씩 증가하는 것

CPU는 어떻게 생겼을까?

  • 컴퓨터를 이루는 3대장 : CPU / Memory / Disk

  • CPU는 n개의 코어(n개의 register)로 이루어져 있음. 이런 state를 n개 가질 수 있다.

  • CPU의 구성
    • ALU( Arithmetic Logic Unit / 산술논리연산 ) : 연산처리하는 역할

    • CU( Control Unit / 제어장치 ) : real 뇌와 같은 역할. 어떤 연산을 실행하도록 제어

    • Register( 레지스터 / 저장장치 ) : 업무로 나뉨
      • 범용 ( general - purpose )
        • EAX(Extended Accumulator Register): 산술, 논리연산 레지스터
        • ECX(Extended Counter Register): 반복명령어 시 반복카운터로 사용되는 레지스터
      • 특수용 ( special - purpose )
        : PC( 프로그램 카운터 ) 레지스터
        • 프로그램 카운터 ?
          : 레지스터 중 하나로, 명령어 포인터라고도 함. 명령어를 얼마나 처리했는지 알아야하는데, 이걸 관리하는게 프로그램카운터!

    • 캐시
      : CPU가 여러번 데이터에 접근을 할 때, 메인메모리에 접근하는데 공간적으로 거리가 멀어서 시간소요가 큼.
      그래서 빈번하게 쓰이고, 가장 최근 쓰인 데이터를 모아놓고 기억하는 곳. 데이터에 접근할 때 걸리는 시간을 줄이기 위해 캐싱해서 쓰겠다고 판단하여 갖고있다가, 빼거나 삭제하거나 다시 넣기도함.
      - Cache Coherence( 캐시 일관성 )
      : 공유메모리 시스템에서 각 클라이언트가 가진 로컬 캐시 간의 일관성을 의미

  • 프로그램이 실행되는 과정
    : CU가 프로그램 실행 접수받음 - CU가 명령어를 fetch( 명령어의 머신코드를 불러옴 ) - decode (해석) - 명령어를 보고 ALU를 통해 데이터처리, 계산혹은 해독 - 그 메모리를 프로그램에 전달 - 결과적으로 메모리가 변화됨.

CPU와 프로그래머는 어떻게 통신하는가?

  • 프로그래머가 직점 어셈블리어로 짤 수도 있다.( CPU 설계자에 따라 다름 )

    • 어셈블리어 ?
      : CPU가 읽어서 실행할 수 있는 0과 1로 이루어진 명령어의 조합

  • 어셈블리어로 코드를 짜기엔 어렵기 때문에 컴파일러(C, C++, Java 등..)으로 컴파일 기계어로 번역을 시킨다.
    • ISA ( Instruction set architecture / 명령어 집합 구조 )
      • CISC ( Complex Instruction Set Computer / 복잡 명령어 집합 컴퓨터 )
      • RISC ( Reduced Instruction Set Computer / 축소 명령어 집합 컴퓨터 ) -> 요즘 쓰는 ISA, 간단해서 명령어개수도 적고 조금 더 효율적으로 명령할 수 있게 한다. 요즘 대세 !

명령어 수행

: 하나하나의 라인이 수행 되면서 메모리와 레지스터를 계속 변화시킴.
명령어를 수행하며 메모리와 레지스타가 계속 변화해가면서 모니터와 디스크에 영향을 끼침.

  • 수행 순서
    • CU가 명령어를 fetch를 함

    • 다른 명령어 수행중에 미리 fetch하는 걸 prefetch라고 함. ( 최적화 테크닉 )
      => 수행타임이 줄어들어 효율이 높아지고, 속도가 올라간다.

    • 디코딩, opcode( operation code)사용
    • RISC( 1사이클 안에 명령어를 처리할 수 있게 명령어를 나눔 ) or
      EISC( 시간이 좀 걸려서 전체적으로 성능이 저하될 수 있음 )
    • 디코딩 : opcode에 대해 알면 해독이 가능함.
      opcode명령어와 operand명령어가 있음.
      • operand ?
        • operand는 즉시값(immediate value)이 될 수도 있고, 레지스터나 메모리가 될 수도 있다.
        • 이친구들을 fetch를 하는데, 가져온 다음에 실행(execution)을 한다 = ALU(산술논리연산)를 쓴다.
        • operand에 반영을 해 ! ( = write back )
        • 위와같은 과정을 거쳐서 수행이 된다. ( 매커니즘으로 이루어진다. )

오늘 처음으로 CS에 대해서 공부했다...
아직은 컴퓨터의 구조도, 컴퓨터용어도 몰라서 다른 사람들이 쉽다고 이해한 부분도 살짝은 어려운 느낌이 있었지만, 그래도 정리하니까 무슨 말인지는 이해한 것 같다.
주말을 이용해서 컴퓨터구조도 한 번 봐보고, 알고리즘도 복습해서 이해해보는 시간을 가져봐야겠다! 주말에도 해피코딩..!!😂💖
profile
코딩은 짜릿해 늘 새로워 ✨

0개의 댓글