2주차
- Chapter 04 ~ 05
- 기본숙제: p. 125의 확인 문제 2번, p. 155의 확인 문제 4번 풀고 인증하기
- 추가숙제: Ch.05(05-1) 코어와 스레드, 멀티 코어와 멀티 스레드의 개념을 정리하기
1주차) 2의 보수에서 등장. 컴퓨터가 이해하기 위한 부가 정보
플래그 종류 | 사용 예시 |
---|---|
부호 플래그 | 부호 플래그가 1이면 계산 결과는 음수, 0이면 양수를 의미. |
제로 플래그 | 제로 플래그가 1이면 연산 결과는 0, 0인 경우는 0이 아님을 의미한다. |
캐리 플래그 | 캐리 플래그가 1일 경우 올림수나 빌림수가 발생한 경우, 0이면 발생하지 않았음을 의미한다. |
오버플로우 플래그 | 연산 결과가 연산 결과를 담은 레지스터보다 큰 상황이 발생하면 1, 0이면 발생하지 않았음을 의미한다. |
인터럽트 플래그 | 인터럽트가 가능하면 1, 불가능하다면 0 |
슈퍼바이저 플래그 | 커널 모드로 실행중이면 1, 사용자 모드로 실행 중이면 0. |
1주차) 제어 신호를 보내고, 명령어를 해석하는 장치
제어 장치가 받아들이는 정보
CPU마다 이름, 크기, 종료가 매우 다양함. 책에 소개된 것은 많은 CPU가 공통으로 포함하고 있는 레지스터들이다.
프로그램 카운터(PC:Program Counter):
명령어 포인터(IP:Instruction Pointer)라고도 부르는 CPU도 있음.
메모리에서 읽어 들일 명령어의 주소 저장
명령어 레지스터(IR:Instruction Register):
방금 메모리에서 읽어 들인 명령어(해석할 명령어)를 저장하는 레지스터
메모리 주소 레지스터(MAR:Memory Address Register):
메모리에 주소를 저장하는 레지스터
메모리 버퍼 레지스터(MBR:Memory Buffer Register):
메모리와 주고받을 값을 저장하는 레지스터
MDR(Memory Data Register)이라고 부르기도 함
플래그 레지스터: 연산 결과 or CPU 상태에 대한 부가 정보 저장
범용 레지스터(general purpose register): 데이터와 주소 모두 저장
스택 포인터: 스택 최상단의 위치를 저장
베이스 레지스터(base-register addressing mode):
오퍼랜드와 베이스 레지스터의 값을 더하여 유효 주소를 얻는 방식
🤔 3-2 명령어 구조를 대충 넘기면 안 되었다!(정리 완료)
- 이해가 어려워서 diaw.io로 따라 그리기
사실 {실행할 명령어 -1} 번지는 밖에 썼어야 했는데..;
CPU 작업을 방해하는 신호
- excalidraw로 따라 그리기
1.동기 인터럽트(synchronous interrupts)
2.비동기 인터럽트(asynchronous interrupts)
주로 입출력 장치에 의해 발생하는 인터럽트
하드웨어 인터럽트
하드웨어 인터럽트 처리 순서
1) 입출력 장치가 CPU에 인터럽트 요청신호를 보냄(지금 끼어들어도 되나요? 물어봄)
2) CPU가 인터럽트 요청을 확인. 인터럽트 플래그를 통해 받아들일 수 있는지 여부 확인
3) 인터럽트를 받아 들일 수 있다면 CPU는 지금까지의 작업 백업
4) CPU는 인터럽트 벡터를 참조하여 인터럽트 서비스 루틴 실행
5) 인터럽트 서비스 루틴 실행이 끝나면 백업해 둔 작업을 복구하여 실행 재개
인터럽트 서비스 루틴(ISR: Interrupt Service Routine): 인터럽트 핸들러라고도 부른다. 어떤 인터럽트가 발생했을 때, 해당 인터럽트를 어떻게 처리하고 작동해야 할지에 대한 정보로 이루어진 프로그램.
인터럽트 벡터: 인터럽트 서비스 루틴을 식별하기 위한 정보. CPU는 하드웨어 인터럽트 요청을 보낸 대상으로부터 데이터 버스를 통해 인터럽트 벡터를 전달받는다.
CPU가 인터럽트를 처리한다
: 인터럽트 서비스 루틴을 실행하고, 본래 수행하던 작업으로 다시 돌아온다.
개념: 클럭, 코어, 스레드
빠른 CPU를 만드는 설계 기법: 멀티 코어, 멀티스레드
1.하드웨어적 스레드: 하나의 코어가 동시에 처리하는 명령어 단위
2.소프트웨어적 스레드: thread(computing), 하나의 프로그램에서 독립적으로 실행되는 단위
CPU를 한시도 쉬지 않고 작동시키는 명령어 병렬 처리 기법
일반적인 과정
1) Insctuction Fetch 명령어 인출
2) Instruction Decode 명령어 해석
3) Execute Instruction 명령어 실행
4) Write Back 결과 저장
명령어 파이프라인/파이프라이닝
CPU 내부에 여러 개의 명령어 파이프라인을 포함한 구조
CPU 속도를 향상시키기 위한 과거의 방법 중 하나
슈퍼스칼라 프로세서, 슈퍼스칼라 CPU: 매 클럭 주기마다 동시에 여러 명령어를 인출할 수도, 실행할 수 있음
CPU 언어인 ISA란 무엇인가
현대 CPU의 주요 설계 방식인 CISC와 RISC의 정이와 차이점
CISC Complex Instruction Set Computer | RISC Reduced Instruction Set Computer |
---|---|
복잡하고 다양한 명령어 | (장점) 단순하고 적은 명령어 |
가변 길이 명령어(규격화 x) | 고정 길이 명령어(규격화) |
다양한 주소 지정 방식 | 적은 주소 지정 방식 |
(장점) 프로그램을 이루는 명령어 수가 적다 메모리 절약 | (단점) 프로그램을 이루는 명령어 수가 많다 |
여러 클럭에 걸쳐 명령어 수행 | 1클럭 내외로 명령어 수행 |
(단점) 자주 사용하는 명령어만 쓰인다. | (장점) load-store 구조: 메모리에 직접 접근하는 명령어를 load, store로 제한(단순화, 최소화) |
(단점) 파이프라이닝이 어렵다 CPU의 성장 한계 | (장점) 파이프라이닝이 쉽다 |
(예) x86(32bit), x86-64 | (예) ARM |
답: 코어
CPU는 어떻게 작동할까? ⭐⭐⭐⭐⭐
🦖 이렇게 길게 작성하고 싶지 않았다. 모르는 게 너무 많다.... 우웩
🦖 내 컴퓨터의 작업관리자로 CPU, 코어, 스레드, 논리 프로세서 등을 살펴보는 게 흥미로웠다.
캐시, GPU 관련된 것은 추후에...
🦖 레지스터(register)가 사실 레지스트리(registry)인가?? 했다가 전혀 다른 것이구나 알게 되었다. (책의 목차만 보았을 때 그랬음.. 하하)
참고 블로그: https://kyundev.tistory.com/34
- 레지스트리: 윈도우 전반에 사용되는 설정 및 운영에 필요한 정보들을 담고 있는 데이터베이스