[혼공컴운] 2주차_복습은 필수(Ch 04 ~ 05)
![[혼공컴운] 2주차_복습은 필수(Ch 04 ~ 05)](/_next/image?url=https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1753020904117%2Fd3ce6790-2969-4fe7-91d2-5cdd19fe79ca.png&w=3840&q=75)
04-1) ALU와 제어장치
ALU : 계산기
받아들이는 정보
레지스터를 통해 피연산자
제어장치로부터 제어 신호
내보내는 정보
연산 수행 결과 : 데이터, 메모리 주소
⇒ 일시적으로 레지스터에 저장 : CPU가 레지스터에 접근하는 속도가 메모리에 접근하는
속도보다 훨씬 빠르기 때문.
플래그 : 연산 결과에 대한 추가적인 정보
부호 플래그 : 연산한 결과의 부호
- 부호 플래그가 1이다 ⇒ 음수다!
제로 플래그 : 연산 결과가 0인지 여부
- 제로 플래그가 1이다 ⇒ 0이다!
캐리 플래그 : 연산 결과 올림수나 빌림수가 발생했는지
오버플로우 플래그 : 오버플로우가 발생했는지
인터럽트 플래그 : 인터럽트가 가능한지
슈퍼바이저 플래그 : 커널모드, 사용자 모드로 실행 중인지
오버 플로우 : 연산 결과를 담을 레지스터보다 연산 결과가 더 큰 상황
제어장치 : 제어 신호 내보내고, 명령어 해석
받아들이는 정보
클럭 신호
- 클럭 : 컴퓨터의 모든 부품을 움직일 수 있게 하는 시간 단위
해석해야 할 명령어
- 명령어 레지스터
플래그 레지스터 속 플래그 값
시스템 버스 중 제어 버스로 전달된 제어 신호
내보내는 정보
CPU 외부 : 제어 버스로 제어 신호 내보내기
메모리에 전달
입출력장치에 전달
CPU 내부
ALU에 전달
레지스터에전달
04-2) 레지스터
프로그램 카운터 (=명령어 포인터) : 메모리에서 읽어 들일 명령어 주소
명령어 레지스터 : 해석할 명령어 저장 → 해석한 뒤 제어 신호 내보냄
메모리 주소 레지스터 : 메모리의 주소 저장
메모리 버퍼 레지스터(=메모리 데이터 레지스터) : 메모리와 주고받을 값(데이터와 명령어)
일반적으로 프로그램 카운터는 꾸준히 증가하며 프로그램을 차례대로 실행하지만 명령어 중 JUMP,CONDITIONAL JUMP, CALL, RET 와 같이 특정 메모리 주소로 실행 흐름을 이동하는 명령어가 실행되면 순차적으로 프로그램이 실행되지 않는다. ⇒ 이때 프로그램 카운터에는 변경된 주소가 저장
범용 레지스터 : 데이터와 주소를 모두 저장 가능
플래그 레지스터 : 연산 결과 또는 CPU 상태에 부가적인 정보 저장
스택 주소 지정 방식 : 스택과 스택 포인터를 이용한 주소 지정 방식
스택 포인터 : 스택의 꼭대기를 가리키는 레지스터 ( 스택에 마지막으로 저장한 값의 위치)
스택 영역 : 스택은 메모리 안에 있으며 스택처럼 사용하기로 양속된 영역.
변위 주소 지정 방식 : 오퍼랜드 필드의 값(변위) + 특정 레지스터의 값 ⇒ 유효 주소를 얻어냄.
상대 주소 지정 방식 : 오퍼랜드 프로그램 카운터의 값을 더하여
- ex) 오퍼랜드가 -3 이었다면 명령어로부터 3번째 이전
베이스 레지스터 주소 지정 방식 : 오퍼랜드와 베이스 레지스터의 값을 더하여
베이스 레지스터 : 주소
오퍼랜드 : 기준 주소로부터 떨어진 거리
- ex) 오퍼랜드가 40, 베이스 레지스터가 200 이면 200번지부터 40 떨어진 240
04-3) 명령어 사이클과 인터럽트
명령어 사이클 : 하나의 명령어를 처리하는 정형화된 흐름(일정한 주기가 반복, 실행)
인출 사이클: 명령어를 메모리에서 CPU로 가져오는 단계
실행 사이클: CPU가 가져온 명령어 실행하는 단계
간접 사이클 : 메모리 접근을 한 번 더 해야 하는 단계 (간접 주소 지정 방식)
인터럽트 : 이러한 흐름이 끊어지는 상황.
동기 인터럽트 : CPU에 의해 발생하는 인터럽트 (=예외)
비동기 인터럽트 : 입출력 장치에 의해 발생하는 인터럽트 (=하드웨어 인터럽트)
입출력 작업 중에도 CPU로 하여금 효율적으로 명령어를 처리할 수 있게 함.
인터럽트 요청 신호 : CPU에 물어보기
인터럽트 플래그 : 인터럽트를 받아들일지 ,무시할지 결정
인터럽트 서비스 루틴 = 인터럽트 핸들러 : 인터럽트를 처리하기 위한 프로그램
- 인터럽트 벡터 : 인터럽트 서비스 루틴을 식별하기 위한 정보
05-1) 빠른 CPU를 위한 설계 기법
클럭
- 클럭 속도 : 헤르츠(Hz) 단위로 측정 , 1초에 클럭이 몇 번 반복되는지
코어와 멀티코어
코어 : CPU 내에서 명령어를 실행하는 ‘하드웨어’ 부품
멀티 코어 : 여러개의 코어 , 멀티코어 CPU, 멀티코어 프로세서
스레드 : 명령어를 실행하는 단위
하드웨어적 스레드 : 하나의 코어가 동시에 처리하는 명령어 단위
멀티스레드 프로세서 = 멀티스레드 CPU : 하나의 코어로 여러 명령어 동시 처리
논리 프로세서
소프트웨어 적 스레드 : 하나의 프로그램에서 독립적으로 실행되는 단위
05-2) 명령어 병렬 처리 기법
명령어 병렬 처리 기법
명령어 파이프라이닝
같은 단계가 겹치지만 않는다면 CPU는 각 단계를 동시에 실행할 수 있음.
파이프 라인 위험 : 특정 상황에서 성능 향상에 실패
데이터 위험 : 데이터 의존성에 의해 발생
제어 위험 : 프로그램 카운터의 갑작스러운 변화에 의해 발생
구조적 위험 (= 자원 위험) : 서로 다른 명령어가 동시에 ALU, CPU 부품 사용할 때 발생
슈퍼스칼라 : CPU 내부에 여러 개의 명령어 파이프라인을 포함한 구조
슈퍼스칼라 프로세서 = 슈퍼스칼라 CPU
반드시 파이프라인 개수에 비례하여 빨라지지 않음
비순차적 명령어 처리(OoOE) : 명령어들을 순차적으로 실행하지 않는 기법
- 순서를 바꿔 실행해도 무방한 명령어를 먼저 실행하여 파이프라인이 멈추는 것을 방지
05-3) CISC와 RISC
ISA : 명령어 집합, 명령어 집합 구조
ISA는 일종의 CPU의 언어이다 왜?
제어장치가 명령어를 해석하는 방식
사용되는 레지스터의 종류의 개수
메모리 관리 방법
CPU 하드웨어 설계에 모두 영향!
CISC : 복잡한 명령어 집합을 활용하는 컴퓨터
가변 길이 명령어
적은 수의 명령어로 프로그램 동작 → 메모리 공간 절약
실행되기까지의 시간 일정하지 않음.
여러 클럭 주기 필요
RISC
고정 길이 명령어
명령어 규격화, 1클럭 내외로 실행
레지스터 적극 활용
기본 숙제
P 125의 2번
플래그 레지스터
프로그램 카운터
범용 레지스터
명령어 레지스터
P 155의 4번
- 코어
![[혼공컴운] 6주차_책 한 권을 끝내다니(Ch 14~ 15)](/_next/image?url=https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1755441066842%2F4d3a042e-e395-4e14-84c2-725aeabc56ed.png&w=3840&q=75)
![[혼공컴운] 5주차_끝이 보인다(Ch 12 ~ 13)](/_next/image?url=https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1754833767926%2F85ea771d-0416-409a-82d9-bcc62b92cf17.png&w=3840&q=75)
![[혼공컴운] 4주차_운영체제 시작(Ch 09 ~ 11)](/_next/image?url=https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1753626546414%2F943e9f66-8c81-4bac-83b6-5797bd83293c.png&w=3840&q=75)
![[혼공컴운] 3주차_컴퓨터 구조 끝(Ch 06 ~ 08)](/_next/image?url=https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1753020566648%2Fc2832934-e4d5-45c1-87c8-a1d5f27b2169.png&w=3840&q=75)