Written by coh at home
[혼공컴운] 2주차 본문
4장 CPU작동원리
4-1 ALU & 제어유닛
- Review
CPU = ALU + 제어유닛 + 레지스터 명령어를 읽어들이고 해석하고 실행하는 장치.
ALU : 연산수행
제어유닛 : 명령어 해석, 제어신호
레지스터 : 저장공간
- ALU
- Input : 연산자(제어신호), 피연산자(레지스터)
- Output : 연산결과(레지스터), 플레그(레지스터)
- Flag :오버플로우, 제로, 부호, 캐리
- 제어유닛 : 명령어 해석, 제어신호 발생
- Input : 클럭, 플레그, 명령어, 제어신호 ← 제어버스
- Output : 제어신호
- CPU내부 : ALU 연산, 레지스터(명령어, 데이터)
- CPU외부 → 제어버스: 메모리, 입출력장치(보조기억장치 etc)
4-2 레지스터
- 8가지 레지스터
프로그램 카운터 : 다음 읽을 명령어 주소 저장.
명령어 레지스터 : 읽어온 명령어 저장
메모리 주소 레지스터 : 프로그램 카운터의 값을 저장하여 제어 신호와 함께 해당 주소의 값을 메모리 버퍼 레지스터에 저장한다.
메모리 버퍼 레지스터 : 읽어들인 값(명령어, 데이터) 저장. 명령어 레지스터에 값을 복사함.
범용 레지스터 : 데이터, 주소 모두 저장 가능. 그럼 메모리 주소 레지스터, 메모리 버퍼 레지스터가 왜 필요하냐 싶다. 전자는 주소버스로 내보낼 주소만, 후자는 데이터 버스로 주고 받을 데이터만 저장한다.
플래그 레지스터 : ALU 연산 이후 플레그 값 저장.
스택 레지스터 : 메모리 스택 영역의 쌓인 스택의 최상단 주소 지정.
베이스 레지스터 : 기준 주소.
4-3 명령어 사이클과 인터럽트
명령어 사이클: 인출 + 실행 + 간접 + 인터럽트로 구성. 주로 인출과 실행 주기 속에서 간접과 인터럽트가 호출된다.
- 인터럽트 : CPU의 동작을 방해하는 신호.
동기 인터럽트 (CPU), 비동기 인터럽트 (입출력 장치)가 존재한다.
- 동기 인터럽트
CPU에서 명령어를 처리할 때 발생. 예외라고도 불린다.
- 비동기 인터럽트
입출력 장치에서 발생. 마우스나 키보드 입력 처리는 비동기적으로 처리해야 자원낭비가 적음.
- 비동기 인터럽트의 처리 과정
인터럽트 신호 발생 → 다음 명령어 인출 전 인터럽트 체크 → 인터럽트 플레그 체크 → 벡업(스택) → 인터럽트 서비스(인터럽트 벡터) → 다시 수행
- 인터럽트 시그널
- 인터럽트 플레그 : 무시 여부 설정. 단, 더 긴박한 작업 정전이나 고장은 무시 불가.
- 인터럽트 벡터 : 인터럽트 서비스의 메모리 시작주소를 알려줌.
- 인터럽트 서비스 : 메모리에 올라가 있음. 해당 인터럽트를 처리해주는 프로그램.
인터럽트 서비스를 수행하면 CPU의 레지스터의 데이터가 변하므로 벡업을 스택 영역에 하게 된다.
- 동기 인터럽트
- 폴트(fault) : 인터럽트가 발생한 라인부터 다시 명령어 사이클 - 하드디스크에 필요한 데이터 가져와야할 때
- 트랩(trap) : 인터럽트 발생 이후 라인부터 다시 명령어 사이클 - 디버깅
- 중단(abort) : 프로그램 정지해야하는 중대한 문제.
- 소프트웨어 인터럽트 : 시스템콜(signal함수)
5장 CPU성능 향상 기법
5-1 빠른 CPU설계기법
빠른 클럭 → 과열문제 → 멀티코어 → 역할 분배 또는 적은 연산일 경우 → 스레드(하드웨어, 소프트웨어) → 멀티스레드 프로세서(하드웨어 스레드)를 여러 개 레지스터를 사용하여 구현.
코어 : 명령어를 처리하는 부품
하드웨어 스레드 : 코어에서 명령어를 처리하는 단위
소프트웨어 스레드 : 프로그램에서 독립적 실행의 단위
멀티코어 : CPU내 여러 개 코어
멀티스레드 프로세서 : 하나의 코어가 여러 개의 명령어를 동시 실행할 수 있는 CPU
5-2 명령어 병렬 처리
명령어 파이프라인
동시에 여러 개의 명령어를 겹쳐 처리하는 기법 각 파이프라인별(인출, 해석, 실행, 저장) 하드웨어적인 회로가 구성되어 있다. 따라서 클럭이 동작할 때마다 단계가 넘어가게 된다.
- 파이프라인 위험 : 파이프라인이 기대한 결과가 안 나오는 경우
- 데이터 위험 : 데이터 의존도가 생기는 경우.
- 제어 위험 : 분기로 프로그램카운터의 값이 변경되는 경우
- 구조적 위험 : 레지스터, ALU 등 하드웨어 자원을 동시 접근하는 경우.
슈퍼 스칼라
여러 개의 명령어 파이프라인을 포함한 구조. 단, 파이프라인 위험을 잘 관리해야한다.
비순차적명령어 처리
대부분의 CPU가 사용하는 기법. 데이터 의존성이 없는 명령어를 먼저 처리하는 기법.
5-3 CISC, RISC
ISA
CPU가 이해할 수 있는 명령어들의 모음. 각 CPU마다 명령어의 기본 구조의 차이가 있다. 각 CPU별로 설치파일, 실행파일이 다른 것이 바로 이것 때문!!
CISC (Complex Instruction Set Computer)
대표적 예시 : x86, x86-64
가변길이 명령어
메모리 절약 가능
복잡한 명령어 제공 → 단, 그렇기에 명령어 파이프라인에 큰 걸림돌
실제로 자주 쓰이는 명령어만 사용
RISC
명령어의 종류가 적다.
1클럭 내외로 실행되는 명령어 지향. → 고정길이 명령어
레지스터 적극 활용하여 범용 레지스터 갯수가 많다.
주소 지정방식이 CISC보다 적다.
파이프라인을 이용하기 쉽다.
숙제
p. 125의 확인 문제 2번 - 답: (순서대로) 플레그 레지스터, 프로그램 카운터, 범용 레지스터, 명령어 레지스터
p. 155의 확인 문제 4번 - 답: 코어
'Etc > 도서' 카테고리의 다른 글
[혼공컴운] 4주차 (0) | 2024.08.02 |
---|---|
[혼공컴운] 3주차 (3) | 2024.07.21 |
[혼공컴운]1주차 정리 (0) | 2024.07.07 |
[부트캠프 QA] (0) | 2024.06.23 |
[한권으로 배우는 도커 & 쿠버네티스] (0) | 2024.05.18 |