본문 바로가기
et cetera/Computer Architecture, Operating System

[혼공컴운] 2주차_Chapter 04~05

by 양진주 2024. 1. 14.
기본 미션
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 상태에 대한 부가적인 정보 저장 

 

-스택 포인터: 스택 주소 지정 방식에 사용됨

 

-베이스 레지스터: 베이스 레지스터 주소 지정 방식에 사용됨

 

추가적인 주소 지정 방식

ℹ️ 스택 주소 지정 방식

스택 포인터: 스택의 꼭대기(마지막으로 저장한 값의 위치) = 스택의 어디까지 채워져있는지 표시 

스택: 메모리 內 스택 영역에 존재

 

ℹ️ 변위 주소 지정 방식

오퍼랜드 필드 값(변위) + 특정 레지스터 값 = 유효 주소 

명령어: 연산 코드 + 레지스터 + 오퍼랜드 

    - 상대 주소 지정 방식: 오퍼랜드 필드 값(변위) + 프로그램 카운터 값 = 유효주소

    - 베이스 레지스터 주소 지정 방식: 오퍼랜드 필드 값(=기준 주소로부터 떨어진 거리) + 베이스 레지스터 값(=기준 주소) = 유효주소 

 

➕ 실제 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클럭 내외로 명령어 수행
파이프라이닝하기 어려움 파이프라이닝하기 쉬움 

 

 


 

학습 후기:노예 비유법 짤이 점점 이해가 된다...!