Chapter 04 CPU와 작동 원리
04-1 ALU(Arithmetic Logic Unit)와 제어장치(Control Unit)
- ALU는 레지스터로부터 피연산자를 받아들이고, 제어장치로부터 제어 신호를 받아들입니다.
- ALU는 연산 결과와 플래그를 내보냅니다.
- 제어장치는 클럭, 현재 수행할 명령어, 플래그, 제어 신호를 받아들입니다.
- 제어장치는 CPU 내부와 외부로 제어 신호를 내보냅니다.
** 4장 ALU와 제어장치(105쪽)에서 "CPU가 메모리에 접근하는 속도는 레지스터에 접근하는 속도보다 훨씬 느립니다. ALU가 연산할 때마다 결과를 메모리에 저장한다면 당연하게도 CPU는 메모리에 자주 접근하게 되고, 이는 CPU가 프로그램 실행 속도를 늦출 수 있습니다. 그래서 ALU의 결괏값을 메모리가 아닌 레지스터에 우선 저장하는 겁니다."라는 부분이 있는데, 이는 마치 ALU가 결괏값을 속도 때문에 레지스터에 저장하는 말처럼 들리지만, 개인적으로는 ALU가 RAM과 직접 데이터나 신호를 주고 받을 수 없어서 레지스터에 저장하는 게 적절한 설명이 아닐까 싶습니다.
ALU는 CPU의 제어장치(CU, Control Unit)과 데이터 버스를 통해서 램(RAM)과 데이터 전송을 진행한다고 합니다. 물론, 레지스터에 결괏값을 저장하는 게, 제어장치와 데이터 버스를 통해 램에 저장하는 것보다 속도가 빠른 건 맞다고 생각합니다.
참고로, 초기 컴퓨터 아키텍처가 발전할 때, 레지스터가 RAM 메모리보다 먼저 포함됐었다는 얘기가 있습니다.
** 플래그 레지스터(Flag register)에 저장되는 플래그에 대한 설명도 컴퓨터의 구조를 이해하는 데 도움이 될만할 것 같은데, 요약 부분에는 없어서 참고로 기록해 둡니다.
- 부호 플래그: 연산한 결과의 부호를 나타낸다.
- 제로 플래그: 연산 결과가 0인지 여부를 나타낸다. (0으로 나눌 수 없는 오류를 방지하기 위한 조치가 아닌가 추측됩니다.)
- 캐리 플래그: 연산 결과 올림수나 빌림수가 발생했는지를 나타낸다.
- 오버플로우 플래그: 연산 결과가 연산 결과를 담을 레지스터보다 큰 상황을 오버플로우(Overflow)라고 하는데, 이 오버플로우가 발생했는지 나타낸다고 합니다.
- 인터럽트 플래그: 인터럽트가 가능한지를 0과 1로 나타내며, 1인 경우에는 인터럽트가 가능하고, 0인 경우에는 인터럽트가 불가능하다고 합니다. 하드웨어 인터럽트가 가능할 때와 불가능할 때(요청 무시)가 이 플래그를 통해 판단되는 것 같습니다.
- 슈퍼바이저 플래그: 커널 모드(Kernel mode)와 사용자 모드(User mode) 중 어떤 모드로 실행 중인지 나타낸다고 합니다.
** 이 책을 읽어 보니 ALU가 산술 논리 연산을 하는 중요한 장치이긴 하지만, 컴퓨터나 CPU의 동작을 이해할 때는 제어장치가 어떤 역할을 하는지 이해하는 게 초심자에게는 꽤 중요할 거라는 생각이 듭니다. 예전에 읽었던 책에서 제어장치를 간단하게 다룬 건지 아니면 읽어봐도 무슨 소리인지 몰라서 그냥 대충 넘어간 건지는 기억나지 않습니다. ㅋㅋㅋ
제어장치(Control Unit)이 데이터 주고 받는 장치와 순서(순차)를 떠올려 보면 이 챕터를 이해하는 데 좋을 것 같습니다.
그래서 111쪽 3번 문제도 참고로 기록해 봅니다. 정답은 책 뒷부분에..
04-2 레지스터(Register)
- 프로그램 카운터(PC, Program Counter)는 메모리에서 가져올 명령어의 주소, 명령어 레지스터는 해석할 명령어를 저장합니다.
- 메모리 주소 레지스터(MAR, Memory Address Register)는 메모리의 주소, 메모리 버퍼 레지스터는 메모리와 주고 받을 데이터를 저장합니다.
- 범용 레지스터(GR, General Purpose Register)는 데이터와 주소를 모두 저장하고, 플래그 레지스터는 연산 결과 혹은 CPU 상태에 대한 부가 정보를 저장합니다.
- 스택 포인터(SP, Stack Pointer)는 스택 최상단의 위치를 저장합니다.
- 베이스 레지스터(BR, Base Register)에 저장된 주소는 기준 주소로서의 역할을 합니다.
04-3 명령어 사이클과 인터럽트
- 명령어 사이클은 하나의 명령어가 처리되는 주기로, 인출(Fetch), 실행(Execute), 간접 인터럽트 사이클(Indirect Cycle)로 구성되어 있습니다.
- 인터럽트는 CPU의 정상적인 작업을 방해하는 신호입니다.
- 인터럽트의 종류에는 예외(Exception)와 하드웨어 인터럽트(Hardware interrupt)가 있습니다.
- 인터럽트 서비스 루틴은 인터럽트를 처리하기 위한 동작들로 이루어진 프로그램입니다.
** 명령어 사이클은 인출(Fetch), 해석(Decode), 실행(Execute) 순서로 진행되는 것 같고, 작업에 따라 메모리 접근(Memory Access)이나 결괏값을 저장하는 과정이 들어갈 수도 있는 것 같으나, 갈수록 사이클을 단순화하는 방향으로 나아가고 있다고 하는 것 같습니다.
** 동기 인터럽트(Synchronous interrupt)를 프로그램이 발생시키는 소프트웨어 인터럽트(Software interrupt)로, 비동기 인터럽트(Asynchronous interrupt)를 하드웨어 인터럽트(Hardware interrupt)로 보는 의견도 있는 것 같습니다. 이 책에서는 "동기 인터럽트"라는 용어 대신 "예외"라는 용어로 사용한다고 하네요. 옛날 기억과 조금 다른 것 같아 찾아보니 예외는 동기 인터럽트의 하위 집합(?)으로 보는 게 일반적인 것 같은데, 초심자 분들을 위한 서적임을 감안해서 대체한 것 같습니다.
Chapter 05 CPU 성능 향상 기법
05-1 빠른 CPU를 위한 설계 기법
- 클럭 속도가 높은 CPU는 빠르게 작동합니다.
- 코어란 CPU 내에서 명령어를 실행하는 부품입니다.
- 멀티코어 프로세서란 여러 개의 코어를 포함하는 CPU를 말합니다.
- 스레드에는 하드웨어적 스레드와 소프트웨어적 스레드가 있습니다.
- 멀티스레드 프로세서란 하나의 코어로 여러 개의 명령어를 동시에 실행할 수 있는 CPU를 말합니다.
05-2 명령어 병렬 처리 기법
- 명령어 파이프라이닝은 동시에 여러 개의 명령어를 겹쳐 실행하는 기법입니다.
- 슈퍼스칼라는 여러 개의 명령어 파이프라인을 두는 기법입니다.
- 비순차적 명령어 처리 기법은 파이프라인의 중단을 방지하기 위해 명령어를 순차적으로 처리하지 않는 기법입니다.
05-3 CISC(Complex Instruction Set Computer)와 RISC(Reduced Instruction Set Computer)
- ISA(Instruction Set Architecture)는 CPU의 언어이자 하드웨어가 소프트웨어를 어떻게 이해할지에 대한 약속입니다.
- CISC는 복잡하고 다양한 종류의 가변 길이 명령어 집합을 활용합니다.
- RISC는 단순하고 적은 종류의 고정 길이 명령어 집합을 활용합니다.
[기본 숙제]
125쪽 2번 문제.
2. 설명에 맞는 레지스터를 보기에서 찾아 빈칸()을 채워 보세요.
보기: 프로그램 카운터, 명령어 레지스터, 플래그 레지스터, 범용 레지스터
- ① (플래그 레지스터): 연산 결과 혹은 CPU 상태에 대한 부가 정보를 저장하는 레지스터
- ② (프로그램 카운터): 메모리에서 가져올 명령어의 주소를 저장하는 레지스터
- ③ (범용 레지스터): 데이터와 주소를 모두 저장할 수 있는 레지스터
- ④ (명령어 레지스터): 해석할 명령어를 저장하는 레지스터
155쪽 4번 문제.
4. 다음 그림은 멀티코어 CPU를 간략하게 도식화한 그림입니다. 빈칸에 알맞은 용어를 써 넣으세요.
-> 코어(Core)
[추가 숙제]
Ch.05(05-1). 코어(Core)와 스레드(Thread), 멀티 코어(Multi Core)와 멀티 스레드(Multi Thread)의 개념을 정리하기
코어(Core): 프로세서(Processor) 안에서 독립적이고 물리적인 처리 유닛.(하드웨어 안의 부품)
코어가 여러 개 있는 프로세서는 멀티 코어 프로세서.
스레드(Thread): 프로세스(Process) 실행하는 가장 작은 실행 경로로, 코드의 실행 경로라고 합니다. 각 스레드는 프로세스 안에서 메모리를 서로 공유할 수 있습니다.
스레드를 동시에 여러 개 운용 할 수 있으면 멀티 스레드(Multi thread)
코어도 프로세서 안에서 메모리 영역을 공유할 수 있지만 여러 과정이 필요하고(통신일 듯), 스레드는 별도의 과정 없이 직접적으로 공유된 메모리를 다룰 수 있습니다. 요즘 보통의 컴퓨터 구성은 당연히 멀티 스레드, 멀티 코어 구조이고, 이 둘은 성능 향상과 효율적인 작업 처리를 목표로 하는 기술입니다.
** 컴퓨터 구조를 이해할 때 필수인 CPU에 대해 다루는 4장과 5장을 읽었는데, 옛날 어렴풋한 기억과 책 내용을 맞춰 보고, 갱신(?)했습니다. 같은 주제의 책도 몇 개 정도 다른 시기에 읽어보는 게 좋은 이유는 머리 속에 남아있는 내용이 제대로 된 건지 살펴보며 다시 짜맞출 수 있기 때문입니다.
클럭(Clock) 신호의 역할을 컴퓨터 부품들을 타이밍에 맞춰 일사불란하게 움직여 속도를 높이거나 줄이는 역할이라고 했는데, 타이밍을 맞추는 이유가 속도를 높이는 이유보다 중요한 것 같습니다.
** 최신 데스크톱 PC용 인텔 CPU에서는 하이퍼쓰레딩을 넣지 않는 추세라고 하네요.
하이퍼쓰레딩이란
하이퍼쓰레딩(동시 멀티쓰레딩이라고도 함)은 매우 간단한 개념이다. 각 프로세서 코어는 하나의 명령어 쓰레드를 실행하도록 설계되었지만, 하이퍼쓰레딩은 단일 프로세서 코어 내부에 두 번째 ‘가상’ 프로세서를 생성한다. 하이퍼쓰레딩을 사용하면 개별 프로세서 코어가 항상 두 개의 코어 중 하나 이상에서 명령을 실행해 항상 작동 상태를 유지한다. CPU 코어가 유용한 작업을 수행할 수 있을 때 유휴 상태로 방치되는 것은 마니아들이 원치 않는 일이다.
문제는 두 번째 코어가 ‘진정한’ 두 번째 물리적 코어가 아닌 가상 코어라는 점이다. 이로 인해 리소스 경합과 추가 오버헤드가 발생할 수 있으며, 게임 중 하이퍼쓰레딩을 켜둘지 말지에 대한 문제는 수년 동안 논쟁의 대상이 되어 왔다.
...
홀록은 “사실 몇 가지가 복합적으로 작용한 결과”라고 말했다. 첫째, 하이퍼쓰레딩을 제품에 포함하지 않음으로써 실제로 전력 소비를 절약할 수 있다는 것을 알았고, 하이퍼쓰레딩을 포함하지 않아도 멀티코어 성능에서 약 15%, 20% 정도 앞서고 있다는 것을 알 수 있다. 따라서 효율성을 높이면서도 전체 컴퓨팅 성능에서 목표를 달성할 수 있었다는 의견이다.
...
출처: 하이퍼쓰레딩 없는 인텔 애로우 레이크, 전력 효율 극대화와 성능 향상 달성할까. - By mark_hachman. ITWORLD.
'컴퓨터책' 카테고리의 다른 글
[혼공컴운] 6주차_컴퓨터 구조+운영체제 14장~15장 & 책리뷰 (0) | 2025.01.19 |
---|---|
[혼공컴운] 5주차_컴퓨터 구조+운영체제 12장~13장 (0) | 2025.01.19 |
[혼공컴운] 4주차_컴퓨터 구조+운영체제 09장~11장 (0) | 2025.01.19 |
[혼공컴운] 3주차_컴퓨터 구조+운영체제 06장 ~ 08장 (0) | 2025.01.18 |
[혼공컴운] 1주차_컴퓨터 구조+운영체제 01장 ~ 03장 (0) | 2025.01.12 |