5-1. 빠른 CPU를 위한 설계 기법
클럭
클럭 속도가 높아지면 CPU는 명령어 사이클을 더 빠르게 반복. 클럭 속도가 높은 CPU는 일반적으로 성능이 좋다.
클럭 속도는 헤르츠 단위로 측정. 하지만 클럭 속도를 무작정 높이면 발열 문제가 심각.
코어와 멀티코어
클럭 속도를 높이는 방법 외에 CPU의 성능을 높이는 방법에는 CPU의 코어와 스레드 수를 늘리는 방법이 있다.
코어 : 명령어를 실행하는 부품,
CPU : 명령어를 실행하는 부품에서 명령어를 실행하는 부품을 여러 개 포함하는 부품으로 확장.코어를 여러 개 포함하고 있는 CPU를 멀티코어 CPU 또는 멀티코어 프로세서라고 부른다.
- CPU의 연산 속도가 꼭 코어 수에 비례하여 증가하지는 않는다.
스레드와 멀티스레드
스레드 : 실행 흐름의 단위

하드웨어적 스레드
스레드를 하드웨어적으로 정의하면 하나의 코어가 동시에 처리하는 명령어 단위를 말한다.
- 1코어 1스레드 CPU -> 여러 스레드를 지원하는 CPU는 하나의 코어로도 여러 개의 명령어를 동시에 실행할 수 있다.
- 하나의 코어로 여러 명령어를 동시에 처리하는 CPU를 멀티스레드 프로세서 또는 멀티스레드 CPU라고 한다.
- 하이퍼스레딩 : 인텔의 멀티스레드 기술
소프트웨어적 스레드
하나의 프로그램에서 독립적으로 실행된느 단위
멀티스레드 프로세서
소프트웨어적으로 정의되 스레드 -> 스레드
CPU에 사용되는 스레드 -> 하드웨어 스레드
--------------------------------------------------------------
- 멀티 스레드 프로세서를 실제로 설계하는 일은 매우 복잡하지만, 가장 큰 핵심은 레지스터.
- 하나의 명령어를 처리하기 위해꼭 필요한 레지스터를 여러 개 가지고 있으면 된다. .
- 2코어 4스레드 CPU는 한 번에 네 개 의 명령어를 처리할 수 있는데, 프로그램 입장에서 봤을 땐 한 번에 하나의 명령어를 처리하는 CPU가 네 개 있는 것 처럼 보인다.
- 코어 : 명령어를 실행할 수 있는 하드웨어
- 부품스레드 : 명령어를 실행하는 단위
- 멀티코어 프로세서 : 명령어를 실행할 수 있는 하드웨어 부품이 CPU 안 에 두 개 이상 있는 CPU
- 멀티스레드 프로세서 : 하나의 코어로 여러 개의 명령어를 동시에 실행할 수 있는 CPU
필수 문제
4. 다음 그림은 멀티코어 CPU를 간단하게 도식화한 그림입니다. 빈 칸에 알맞은 용어를 써 넣으세요.

5-2. 명령어 병렬 처리 기법
- 명령어 파이프라인 : 하나의 명령어가 처리되는 전체 과정을 비슷한 시간 간격으로 나누어 보아야한다. 명령어 처리 과정을 클럭 단위로 나누면 다음과 같다. 같은 단계가 겹치지만 않는다면 CPU는 각 단계를 동시해 실행할 수 있다. 공장 생산 라인과 같이 명령어들을 명령어 파이프라인에 넣고 동시에 처리하는 기법을 명령어 파이프라이닝 이라고 한다.
- 명령어 인출
- 명령어 해석
- 명령어 실행
- 결과 저장
파이프 라이닝이 높은 성능을 가져 오기는 하지만, 특정 상황에서는 성능 향상에 실패하는 경우도 있는데 이러한 상황 을 파이프라인 위험이라고 한다.

데이터 위험
데이터 위험은 명령어 간 '데이터 의존성'에 의해 발생한다. 데이터 의존적인 두 명령어를 무작정 동시에 실행하려고 하 면 파이프라인이 제대로 작동하지 않는다.
제어 위험
주로 분기 등으로 인한 '프로그램 카운터의 갑작스러운 변화'에 의해 발생한다. 프로그램 실행 흐름이 바뀌어 명령어가 실행되면서 프로그램 카운터 값에 갑잡스러운 변화가 생간다면 명령어 파이프라인에 미리 가지고 와서 처리 중이었던 명령어들은 아무 쓸모도 없어진다. 이를 위해 분기 에측이라는 기술을 사용한다. 프로그램이 어디로 분기할 지 미리 예 측한 후 그 주소를 인출한다.
구조적 위험
명령어들을 겹쳐 실행한느 과정에서 서로 다른 명령어가 동시에 ALU, 레지스터 등과 같은 CPU 부품을 사용하려고 할 때 발생.
- 슈퍼스칼라 : CPU 내부에 여러 개의 명령어 파이프라인을 포함한 구조. 슈퍼스칼라 구조로 명령어 처리가 가능한 CPU를 슈퍼스칼라 프로세서 또는 슈퍼스칼라 CPU라고 한다.
- 비순차적 명령어처리 : 명령어들을 순차적으로 실행하지 않는 기법. 명령어를 순차적으로만 실행하지 않고 순서를 바꿔 실행해도 무방한 명령어를 먼저 실행하여 명령어 파이프라인이 멈추는 것을 방지하는 기법.
5-3. CISC와 RISC
명령어 집합
명령어 집합 : CPU가 이해할 수 있는 명령어들의 모음.(ISA)
CPU마다 ISA가 다를 수 있다. ISA가 다르면 CPU가 이해할 수 있는 명령어도 어셈블리어도 달라진다. ISA가 다르면 그에 따라 제어장치가 명령어를 해석하는 방식, 사용되는 레지스터의 종류와 개수, 메모리 관리 방법 등 많은 것이 달라진다.
CISC
복잡하고 다양한 명령어들을 활용하는 CPU설계방식. ex) x86, x86-64
다양하고 강력한 기능의 명령어 집합을 활용하기 때문에 명령어의 형태와 크기가 다양한 가변 길이 명령어를 활용. -> 상대적으로 적은 수의 명령어로도 프로그램을 실행할 수 있다.
하지만, 활용하는 명령어가 워낙 복잡하고 다양한 기능을 제공하는 탓에 명령어의 크기와 실행되기까지의 시간이 일정하지 않다. 복잡한 명령어 때문에 명령어 하나를 실행하는 데에 여러 클럭 주기를 필요로 한다.
정리하면, CISC 명령어 집합은 복잡하고 다양한 기능을 제공하기에 적은 수의 명령으로 프로그램을 동작시키고 메모리를 절약할 수 있지만, 명령어의 규격화가 어려워 파이프라이닝이 어렵다.
RISC
CISC 한계가 준 교훈
1. 빠른 처리를 위해 명령어 파이프라인을 십분 활용해야 한다. 원활한 파이프라이닝을 위해 '명령어 길이와 수행 시간이 짧고 규격화' 되어 있어야 한다.
2. 어차피 자주 쓰이는 명령어만 줄곧 사용된다. 복잡한 기능을 지원하는 명령어를 추가하기보다는 '자주 쓰이는 기본적인 명령어를 작고 빠르게 만드는 것'이 중요.
RISC는 CISC에 비해 명령어의 종류가 적다. CISC와는 달리 짧고 규격화된 명령어, 되도록 1클럭 내외로 실행되는 명령어를 지향. 고정 길이 명령어를 활용한다.
RISC는 메모리에 직접 접근하는 명령어를 load, store 두 개로 제한할 만큼 메모리 접근을 단순화하고 최소화를 추구한다.
그대신, 레지스터를 적극적으로 활용한다.
정리하자면
CISC | RISC |
복잡하고 다양한 명령어 | 단순하고 적은 명령어 |
가변 길이 명령어 | 고정 길이 명령어 |
다양한 주소 지정 방식 | 적은 주소 지정 방식 |
프로그램을 이루는 명령어의 수가 적음 | 프로그램을 이루는 명령어의 수가 많음 |
여러 클럭에 걸쳐 명령어 수행 | 1클럭 내외로 명령어 수행 |
파이프라이닝하기 어려움 | 파이프라이닝하기 쉬움 |
'CS공부🖥️ > 운영체제' 카테고리의 다른 글
혼공 컴+운 chapter7. 보조기억장치 (1) | 2025.01.22 |
---|---|
혼공 컴+운 chapter6. 메모리와 캐시 메모리 (0) | 2025.01.21 |
혼공 컴+운 chapter.04 CPU의 작동원리 (0) | 2025.01.15 |
혼공 컴+운 chapter3. 명령어 (0) | 2025.01.08 |
혼공 컴+운 chapter2. 데이터 (0) | 2025.01.07 |