Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 이득우언리얼
- 표창던지기
- Unity
- 3차원배열
- python
- C++
- 배열문제
- 가변배열
- 공부
- swipe
- 다중상속
- 화살표 메서드
- 화살표 함수
- 비주얼스튜디오
- 게임만들기
- IMGUI
- 파이썬
- 렌더몽키
- 유니티
- 언리얼
- 화살피하기
- 셰이더
- c#
- rendermonkey
- 그림자 효과
- 이득우
- visualstudio2022
- c++class
- uidesign
- premake5
Archives
- Today
- Total
신입 개발자 공부 과정
CS 컴퓨터 공학 지식 - CPU 본문
- CPU의 구성 요소
- CPU 핵심 구성 요소 세 가지
- ALU(산술논리연산장치) - 연산을 수행하는 장치(계산을 담당하는 회로)
- 레지스터로부터 피연산자(연산의 대상)을 받아들임
- 제어 장치로부터 제어 신호(연산할 작업)를 받아들임
- 연산의 결과를 레지스터, 플래그 레지스터에 저장
- 제어장치 - 명령어를 해석하고 제어 신호를 내보내는 장치
- 레지스터
- 레지스터 종류
- 프로그램 카운터 - (중요) 메모리에서 가져올 명령어 주소 (메모리에서 읽어들일 주소)
- 프로그램 카운터는 일반적으로 1씩 증가되며 메모리의 프로그램이 순차적으로 증가된다.
- 명령어 레지스터 - 해석할 명령어 (메모리에서 읽어들인 주소)
- 메모리 주소 레지스터 - 메모리의 주소 (읽어들일 주소 값)
- 메모리 버퍼 레지스터 - 메모리와 주고받을 명령어와 데이터
- 플래그 레지스터 - 연산 결과에 대한 부가 정보 저장
- 범용 레지스터 - 범용적으로 사용 가능한 레지스터 (여러 개 있음)
- 스택 포인터 - 스택 주소 지정 방식에서 사용되는, '스택의 꼭대기'를 가리키는 레지스터
- 베이스 레지스터 - 변위 주소 지정 방식에서 사용되는, '떨어진 거리'를 가리키는 레지스터
- 프로그램 카운터 - (중요) 메모리에서 가져올 명령어 주소 (메모리에서 읽어들일 주소)
- 클럭 - 시간 단위
- 레지스터 종류
- ALU(산술논리연산장치) - 연산을 수행하는 장치(계산을 담당하는 회로)
- 변위 주소 지정 방식
- 오퍼랜드 필드의 값을 변위 삼아, 특정 레지스터 값을 더해 유효 주소를 얻는 주소 지정 방식
- 상대 주소 지정
- 오퍼랜드 + 프로그램 카운터 == 유효 주소
- 베이스 레지스터 주소 지정
- 오퍼랜드 + 베이스 레지스터(기준 주소) == 유효 주소
- 상대 주소 지정
- 오퍼랜드 필드의 값을 변위 삼아, 특정 레지스터 값을 더해 유효 주소를 얻는 주소 지정 방식
- CPU 핵심 구성 요소 세 가지
- 명령어 사이클과 인터럽트
- 명령어 사이클 = CPU가 메모리에 있는 명령어를 갖고와서 실행 할 때에는 일정한 주기를 반복하면서 실행하게 된다.
- 1. 메모리에서 명령어를 가져오고(인출)
- 2. 가져온 명령어를 실행
- 반복
- 인터럽트 = 그 흐름을 끊어 내는 것
- 1.입출력장치는 CPU에게 인터럽트 요청 신호를 보냄
- 2.CPU는 실행 사이클 이후 인출 전 인터럽트 여부 확인
- 3.CPU는 인터럽트 요청 확인 후, 인터럽트 플래그를 통해 인터럽트 수용 여부 확인
- 4.인터럽트가 가능하다면 지금까지의 작업 백업
- 5.인터럽트 벡터를 참고하여 인터럽트 서비스 루틴(인터럽트 핸들러 실행)
- 6.인터럽트 서비스 루틴 실행 후 백업한 작업 복구, 실행 재개
- 명령어 사이클 = CPU가 메모리에 있는 명령어를 갖고와서 실행 할 때에는 일정한 주기를 반복하면서 실행하게 된다.
- 멀티 코어와 멀티 프로세서
- 빠른 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 |