기본 미션
p. 125의 확인 문제 2번, p. 155의 확인 문제 4번 풀고 인증하기
선택 미션
Ch.05(05-1) 코어와 스레드, 멀티 코어와 멀티 스레드의 개념을 정리하기
Chapter 0️⃣4️⃣
CPU의 작동 원리
1) ALU와 제어장치
CPU: ALU(계산 담당) + 제어장치(명령어를 읽어들이고 해석) + 레지스터(작은 임시 저장 장치) [Chpater 01]
ALU
➡️입력 정보: 피연산자(from 레지스터) + 제어신호(from 제어장치)
🔄️연산 수행...(산술 연산, 논리 연산)
⬅️출력 정보: 특정 숫자, 문자, 메모리 주소(to 레지스터) + 플래그[Chapter 02](to 플래그 레지스터)
∵ 메모리 접근 속도: 레지스터 >>> CPU
플래그: 연산에 대한 추가적인 정보
플래그 종류 | 의미 | 사용 예시 |
부호 플래그 | 연산한 결과의 부호 | 부호 플래그 1: 음수 부호 플래그 0: 양수 |
제로 플래그 | 연산 결과 0 여부 | 제로 플래그 1: 0 제로 플래그 0: 0 X |
캐리 플래그 | 연산 결과 올림수/빌림수 발생 여부 | 캐리 플래그 1: 올림수/빌림수 발생 캐리 플래그 0: 올림수/빌림수 발생 X |
오버플로우 플래그 | 오버플로우가 발생했는지 여부 | 오버플로우 플래그 1: 오버플로우 발생 오버플로우 플래그 0: 오버플로우 발생 X |
인터럽트 플래그 | 인터럽트 가능 여부 [Chapter 04] | 인터럽트 플래그 1: 인터럽트 가능 인터럽트 플래그 0: 인터럽트 불가능 |
슈퍼바이저 플래그 | 커널 모드/사용자모드 여부 [Chapter 09] | 슈퍼바이저 플래그 1: 커널 모드 슈퍼바이저 플래그 0: 사용자 모드 |
제어장치 [그림 참조]
➡️ 입력 정보
1. 클럭 신호 (= 컴퓨터 부품의 시간 단위)
2. 해석해야할 명령어
해석할 명령어(명령어 레지스터) 받아들이고 해석 ➡️ 제어신호 발생(컴퓨터 부품 수행 내용)
3. 플래그 레지스터 속 플래그 값
4. 제어 버스로 전달된 제어 신호 (= 외부로부터 전달된 제어 신호)
⬅️ 출력 정보
-CPU 외부 전달 제어 신호(= 제어버스로 송출)
- 메모리 전달: 메모리에 저장된 값 읽기 or 새로운 값 쓰기
-입출력 장치 전달: 입출력 장치의 값 읽기 or 새로운 값 쓰기
-CPU 내부 전달 제어 신호
-ALU 전달: 수행할 연산 지시
-레지스터 전달: 레지스터 간에 데이터 이동 or 레스터에 저장된 명령어 해석
2) 레지스터
레지스터 종류
-프로그램 카운터(= 명령어 포인터): 메모리에서 읽어들일 명령어의 주소 저장, 상대 주소 지정 방식에 사용됨
-명령어 레지스터: 방금 메모리에서 읽어들인 명령어 저장(= 해석할 명령어)
-메모리 주소 레지스터: 메모리 주소 저장(주소 버스 사용)
-메모리 버퍼 레지스터(= 메모리 데이터 레지스터): 메모리에 쓰고 싶은 값 or 메모리로부터 전달받은 값(데이터 버스 사용)
-범용 레지스터: 주소 + 데이터 모두 저장
-플래그 레지스터: 연산 결과 + CPU 상태에 대한 부가적인 정보 저장
-스택 포인터: 스택 주소 지정 방식에 사용됨
-베이스 레지스터: 베이스 레지스터 주소 지정 방식에 사용됨
ℹ️ 스택 주소 지정 방식
스택 포인터: 스택의 꼭대기(마지막으로 저장한 값의 위치) = 스택의 어디까지 채워져있는지 표시
스택: 메모리 內 스택 영역에 존재
ℹ️ 변위 주소 지정 방식
오퍼랜드 필드 값(변위) + 특정 레지스터 값 = 유효 주소
명령어: 연산 코드 + 레지스터 + 오퍼랜드
- 상대 주소 지정 방식: 오퍼랜드 필드 값(변위) + 프로그램 카운터 값 = 유효주소
- 베이스 레지스터 주소 지정 방식: 오퍼랜드 필드 값(=기준 주소로부터 떨어진 거리) + 베이스 레지스터 값(=기준 주소) = 유효주소
❓기본 미션
Q. 설명에 맞는 레지스터를 보기에서 찾아 빈칸을 채워 보세요.
( ): 연산 결과 혹은 CPU 상태에 대한 부가 정보를 저장하는 레지스터
( ): 메모리에서 가져올 명령어의 주소를 저장하는 레지스터
( ): 데이터와 주소를 모두 저장할 수 있는 레지스터
( ): 해석할 명령어를 저장하는 레지스터
A. 플래그 레지스터, 프로그램 카운터, 범용 레지스터, 명령어 레지스터
3) 명령어 사이클과 인터럽트
명령어 사이클: 하나의 명령어를 처리하는 정형화된 흐름 (인출 사이클 🔄️ 실행 사이클)
⤵️인출 사이클: 메모리 內 명령어 ➡️ CPU
(➕ 간접 사이클: 메모리 접근시 필요 e.g. 간접 주소 지정 방식)
(➕ 인터럽트 사이클: 인터럽트가 발생한 경우)
⤴️ 실행 사이클: 명령어 실행(명령어 레지스터에 담긴 값 해석, 제어 신호 발생)
인터럽트: CPU의 작업을 방해하는 신호
- 동기 인터럽트(= 예외): CPU가 예상치 못한 상황에 마주쳤을 때 e.g. 프로그래밍상의 오류
- 폴트: 예외 처리 ➡️ 예외가 발생한 명령어부터 실행 재개
- 트랩: 예외 처리 ➡️ 예외가 발생한 다음 명령어부터 실행 재개 e.g. 디버깅
- 중단: 심각한 오류를 발견했을 때 발생하는 예외
- 소프트웨어 인터럽트: 시스템 호출이 발생했을 때 [Chapter 09]
- 비동기 인터럽트(= 하드웨어 인터럽트): 입출력장치에 의해 발생
- 막을 수 있는 인터럽트
- 막을 수 없는 인터럽트
1. 입출력장치: 인터럽트 요청 신호 ➡️ CPU
2. CPU: 실행 사이클 뒤 인터럽트 여부 확인
3. CPU: 인터럽트 요청 확인, 인터럽트 수신 가능 여부 확인(인터럽트 플래그)
4. CPU: if 인터럽트 수신 가능) 지금까지의 작업 백업
5. CPU: 인터럽트 벡터 참조 ➡️ 인터럽트 서비스 루틴 실행
6. 인터럽트 서비스 루틴 실행 완료 ➡️ 백업해둔 작업 복구 ➡️ 실행 재개
인터럽트 요청 신호: CPU에 인터럽트 요청
인터럽트 플래그: CPU: 중요한 작업 처리 중 ➡️ 인터럽트 플래그 1, 인터럽트 플래그 0 ➡️ 인터럽트 처리
[플래그 종류 참조]
❗ 막을 수 없는 인터럽트: 인터럽트 플래그가 1이더라도 처리해야 함 e.g. 정전, 하드웨어 고장
인터럽트 서비스 루틴 (= 인터럽트 핸들러): 인터럽트를 처리하기 위한 프로그램
인터럽트 벡터: 인터럽트 서비스 루틴을 식별하기 위한 정보 ➡️ 인터럽트 서비스 루틴의 시작 주소 판별 가능
Chapter 0️⃣5️⃣
CPU 성능 향상 기법
1) 빠른 CPU를 위한 설계 기법
클럭 속도: 헤르츠(Hz) 단위, 유연하게 속도 조절(일정한 속도 X)
클럭 속도 ⬆️ ➡️ CPU: 명령어 사이클 더 빠르게 반복
코어: 전통적인 CPU(명령어를 실행하는 부품)
➡️ 멀티코어 CPU(= 멀티코어 프로세서): 코어를 여러 개 포함하고 있는 CPU (연산 속도와 반드시 비례하지 않음)
스레드
-하드웨어적 스레드(= 논리 프로세서): 하나의 코어가 동시에 처리하는 명령어 단위 (8코어 16스레드 = 스레드 2개/코어)
➡️ 멀티 스레드 프로세서(= 멀티스레드 CPU, 하이퍼스레딩)
: 하나의 코어로 여러 명령어를 동시에 처리하는 CPU
하나의 명령어를 처리하기 위해 꼭 필요한 레지스터(레지스터 세트) 여러개 필요
-소프트웨어적 스레드: 하나의 프로그램에서 독립적으로 실행되는 단위
*️⃣ 1코어 1스레드 CPU가 여러 스레드로 만들어진 프로그램을 실행할 수 있다.
❓ 기본 미션
Q. 다음 그림은 멀티코어 CPU를 간략하게 도식화한 그림입니다. 빈칸에 알맞은 용어를 써 넣으세요.
A. 코어
❗ 선택 미션
Q. Ch.05(05-1) 코어와 스레드, 멀티 코어와 멀티 스레드의 개념을 정리하기
A.
코어: 명령어를 실행하는 부품
스레드: 하나의 코어가 동시에 처리하는 명령어 단위
멀티 코어: 코어를 여러 개 포함하고 있는 CPU
멀티 스레드: 하나의 코어로 여러 명령어를 동시에 처리하는 CPU
2) 명령어 병렬 처리 기법
명령어 파이프 라이닝: 명령어 인출 ➡️ 명령어 해석 ➡️ 명령어 실행 ➡️ 결과 저장
CPU: 같은 단계가 겹치치 않으면 각 단계 동시 실행 가능
❗ 데이터 위험: 데이터 의존적인 두 명령어를 동시에 실행하려고할 때 발생
❗ 제어 위험: 프로그램 카운터의 갑작스러운 변화 ➡️ 미리 처리 중이던 명령어들 소용 X
➡️ 분기 예측: 프로그램이 어디로 분기할지 미리 예측한 후 그 주소를 인출
❗ 구조적 위험(= 자원 위험): 서로 다른 명령어가 동시에 CPU 부품(ALU, 레지스터)을 사용하려고 할 때 발생
슈퍼스칼라: CPU 내부에 여러 개의 명령어 파이프라인 포함
➡️ 슈퍼스칼라 프로세서(= 슈퍼스칼라 CPU)
❗ 데이터 위험, 제어 위험, 자원 위험 가능성 ⬆️
비순차적 명령어 처리(= OoOE)
순서를 바꿔도 무방한 명령어를 먼저 실행 ➡️ 명령어 파이프라인이 멈추는 것을 방지
3) CISC와 RISC
명령어 집합(= 명령어 집합 구조, ISA): CPU가 이해할 수 있는 명령어들의 모음 ➡️ CPU마다 ISA가 다를 수 있음 ➡️ ISA가 다르면 명령어를 해석하는 방식, 레지스터의 종류와 개수, 메모리 관리 방법이 달라짐 ➡️ CPU 하드웨어 설계에 영향
명령어 병렬 처리 기법을 도입하기 유리한 ISA
- CISC: 다양하고 강력한 기능의 명령어 집합 활용 ➡️ 가변 길이 명령어 활용 (= 적은 수의 명령어로 프로그램 실행) ➡️ 메모리 공간 절약
❗ 명령어의 크기 & 실행까지 시간 가변적
❗ 복잡한 명령어 ➡️ 명령어 실행 시 여러 클럭 주기 필요
⬇️
-RISC
✔️ 명령어의 종류 ⬇️ (load, store) ➡️ CISC보다 명령어 ⬆️
✔️ 짧고 규격화된 명령어 ➡️ 1클럽 내외로 실행 (고정 길이 명령어)
메모리 접근 단순화, 최소화 ➡️ 레지스터 적극적으로 활용 ➡️ 범용 레지스터 개수 ⬆️
CISC | RISC |
복잡하고 다양한 명령어 | 단순하고 적은 명령어 |
가변 길이 명령어 | 고정 길이 명령어 |
다양한 주소 지정 방식 | 적은 주소 지정 방식 |
프로그램을 이루는 명령어의 수 ⬇️ | 프로그램을 이루는 명령어의 수 ⬆️ |
여러 클럭에 걸쳐 명령어 수행 | 1클럭 내외로 명령어 수행 |
파이프라이닝하기 어려움 | 파이프라이닝하기 쉬움 |
학습 후기:노예 비유법 짤이 점점 이해가 된다...!
'Computer Science > Computer Architecture, Operating System' 카테고리의 다른 글
[혼공컴운] 4주차_Chapter 09~11 (1) | 2024.02.09 |
---|---|
[혼공컴운] 3주차_Chapter 06~08 (0) | 2024.01.21 |
[혼공컴운] 1주차_Chapter 01~03 (1) | 2024.01.07 |