[영상후기]CPU는 어떻게 작동할까?

박철현·2023년 4월 27일
0

영상후기

목록 보기
110/160

movie

  • 트랜지스터 PNP 또는 NPN 형태의 반도체가 들어있음 -> 가운데 도선에 특정 전압을 걸어주면 전류가 흐름

  • 논리회로 XOR : AND, NOT, OR 게이트의 조합으로 만듬

AB출력
거짓
거짓
거짓
거짓거짓거짓
  • 두수의 합 : 올림수와 합 발생 -> 올림수 / 합 각각을 나눠 논리회로 구축
    -> 간단한 덧셈 게이트 만들 수 있음

  • CPU에는 산술 논리 장치(Arithmetic Logic Unit)이 있음
    -> 산술 : 더하기 빼기 등 산수 계산 역할
    -> 논리장치 : AND나 OR같은 논리 연산 역할

  • cpu에는 수십억개의 트랜지스터가 들어가 있음
    -> Mosfet이라 불리는 트랜지스터가 들어가 있음(미세먼지 보다 훨씬 작음)
    -> N형 반도체와 P형 반도체가 있음
    -> 가운데 전압을 걸어주면 On/ 그렇지 않으면 Off

  • CPU는 RAM과 소통

  • 사용자가 프로그램 실행 -> 데이터는 램으로 이동 -> CPU는 그 데이터를 가져옴
    -> CPU-RAM도 속도차이가 나기 떄문에 CPU 내부나 근처에 캐시메모리를 만들어 데이터를 저장(캐시메모리는 RAM에 비해 용량이 작기 떄문에 중요하다고 판단되는 데이터만 저장해서 사용)

  • 캐시메모리는 L1 ~ L3로 단계를 나누어 사용
    -> L1 캐시 : CPU가 가장 먼저 접근하는 메모리, 속도가 가장 빠르지만 용량은 작음
    -> L3 캐시 : 용량이 큰 대신에 속도는 느림

  • CPU는 L1캐시에 데이터 요청 -> 없으면 L2 -> 없으면 L3 -> 없으면 RAM에 있는 데이터를 읽음

  • 컴퓨터 기억장치는 하드, 램, 캐시, 레지스터

  • 레지스터 : CPU 내부에서 데이터를 일시저장 장치(속도가 가장 빠른 메모리)

    • Program Count : 다음번에 수행할 메모리의 주소가 들어있음
    • 메모리 주소 레지스터 : 프로그램카운터에서 주소를 넘겨받은 후 주소를 찾아가 데이터를 가져오는 역할
    • 메모리 버퍼 레지스터 : 메모리 주소 레지스터가 가져온 데이터나 명령들을 일시적 저장
    • 명령어 레지스터 : 메모리 버퍼 레지스터에 저장된 내용 중 명령어 저장
    • 누산기 레지스터 : 메모리 버퍼 레지스터에 저장된 내용 중 연산에 사용될 데이터 저장
      -> 연산의 결과값이나 중간 값을 일시적으로 저장
      -> 최종 결과는 메모리 버퍼 레지스터를 통해 메모리로 전송
    • 제어장치 : 명령어 레지스터에 있는 명령어를 받아 해석하고 해석된 명령을 실행할 시스템에 지시를 보내줌
    • ALU : 산술 논리 연산 실행
  • 고급 언어 -> 컴파일(어셈블리어 변환) -> 기계어 변환(0, 1구성)

  • 기계어 : 명렁어 6비트 + 데이터 10비트 프로세서가 한번에 처리할 수 있는 값 16비트
    -> RAM은 8bit씩 저장되어 2줄로 저장됨
    -> RAM에서 2줄이 하나의 명령어가 처리할 수 있는 하나의 언어
    -> 32bit의 경우 4줄 / 64bit는 8줄이 됨

  • 전체 과정 : LOAD[10], ADD[11], STORE[12]

    LOAD[10]
    프로그램카운터 메모리 주소 -> 메모리 주소 레지스터 전달 ->
    해당 데이터를 가져와 메모리 버퍼 레지스터에 저장(인출 : 메모리의 데이터를 CPU로 가져오는 과정)
    -> 가져온 값이 명령어 인 경우 명령어 레지스터로 이동 -> 프로그램카운터 +2가 됨(영상에서는 16bit - 다음에 수행할 메모리는 전에 수행한 주소보다 2칸 아래이기에 / 32비트는 4가 더해짐)
    -> 명령어 레지스터에 저장된 명령은 제어장치로 이동되어 해석(해석)
    -> (LOAD[10] 명령어 예시) 메모리 주소 레지스터에 10 입력
    -> 10번지의 데이터를 읽어와서 메모리 버퍼 레지스터에 저장
    -> 이제 저장된 값은 명령어가 아닌 값이기 때문에 누산기 레지스터에 저장

    ADD[11]
    -> 프로그램카운터 저장된 주소 가져옴
    -> 메모리 주소 레지스터에 다음 주소가 들어옴
    -> 주소에 있는 정보가 메모리 버퍼 레지스터에 들어옴
    -> 명령어 임을 확인하고 명령어 레지스터로 이동
    -> 프로그램카운터 2가 더해짐
    -> 명령어 제어장치 이동하여 해석
    -> 더하기 명령어를 실행하기 위해 누산기 레지스터에 있는 값을 산술레지스터로 전달
    -> 메모리 주소 레지스터에 11번지 주소 입력
    -> 11번지의 데이터를 메모리 버퍼 레지스터에 저장
    -> 해당 값은 명령어가 아닌 데이터로 누산기 레지스터에 입력
    -> 그 값은 산술 논리장치에서 처리되고(산술 논리장치에서 계산되는 과정 : 실행), 결과값은 다시 누산기 레지스터 저장
    -> 위 모든 과정은 제어장치에 의해 컨트롤 됨

    STORE[12]
    -> 프로그램카운터 주소 읽어옴
    -> 메모리 주소 레지스터에서 데이터를 가져옴
    -> 명령어이기 때문에 명령어 레지스터로 이동되고, 프로그램카운터에 2가 더해짐
    -> 저장하라는 명령어가 제어장치에서 해석되고
    -> 12번지 메모리에 계산된 값을 저장하기 위해서 메모리 주소 레지스터에 12를 저장
    -> 누산기 레지스터에 저장된 값은 메모리 버퍼 레지스터를 통해 12번지 메모리에 저장하면 프로그램 완료

  • CPU : 데이터 인출 -> 해석 -> 실행 -> 저장의 과정을 거침
    -> CPU는 각 단계들 조차 세분화해서 사용(분리된 각각의 프로세스를 스레드라 함)
    -> 코어 하나에 여러 스레드 실행하면 속도 빨라짐 (코어 많을수혹 속도 증가)

profile
비슷한 어려움을 겪는 누군가에게 도움이 되길

0개의 댓글

관련 채용 정보