혼자 공부하는 컴퓨터 구조+운영체제 (2)

Erdos·2024년 7월 8일
0

감상

목록 보기
30/42
post-thumbnail

저자 github

2주차

  • Chapter 04 ~ 05
  • 기본숙제: p. 125의 확인 문제 2번, p. 155의 확인 문제 4번 풀고 인증하기
  • 추가숙제: Ch.05(05-1) 코어와 스레드, 멀티 코어와 멀티 스레드의 개념을 정리하기

04 CPU의 작동원리


4-1 ALU와 제어장치

ALU

  • 컴퓨터 내부에서 수행되는 대부분의 계산 수행
  • ALU 내부: 여러 계산을 위한 회로들이 있다. 가산기, 보수기, 시프터, 오버플로우 검출기 등
  • flag
    • 1주차) 2의 보수에서 등장. 컴퓨터가 이해하기 위한 부가 정보
    • ALU는 연산 결과에 대한 추가적인 상태 정보를 내보내야 할 때가 있다.
      이 때의 정보가 flag.
    • CPU가 프로그램을 실행하는 도중 반드시 기억해야 하는 참고 정보
    • 플래그 레지스터(EFLAGS)에 저장된다.
    • 참고용 블로그: https://blog.naver.com/sol9501/70087721730
플래그 종류사용 예시
부호 플래그부호 플래그가 1이면 계산 결과는 음수,
0이면 양수를 의미.
제로 플래그제로 플래그가 1이면 연산 결과는 0,
0인 경우는 0이 아님을 의미한다.
캐리 플래그캐리 플래그가 1일 경우 올림수나 빌림수가 발생한 경우,
0이면 발생하지 않았음을 의미한다.
오버플로우 플래그연산 결과가 연산 결과를 담은 레지스터보다 큰 상황이 발생하면 1,
0이면 발생하지 않았음을 의미한다.
인터럽트 플래그인터럽트가 가능하면 1, 불가능하다면 0
슈퍼바이저 플래그커널 모드로 실행중이면 1,
사용자 모드로 실행 중이면 0.

제어장치

  • 1주차) 제어 신호를 보내고, 명령어를 해석하는 장치

  • 제어 장치가 받아들이는 정보

  1. 클럭 신호
    • clock: 컴퓨터가 모든 부품을 일사분란하게 움직일 수 있게 하는 시간 단위 🤔
  2. 해석해야 할 명령어
    • 명령어 레지스터로부터 명령어를 받아들이고 해석한 뒤, 제어 신호를 발생시켜 컴퓨터 부품들에 수행해야 할 내용을 알려준다.(그림참고)
  3. 플래그 레지스터 속 플래그 값
  4. 시스템 버스, 그 중에서도 제어 신호

4-2 레지스터

CPU마다 이름, 크기, 종료가 매우 다양함. 책에 소개된 것은 많은 CPU가 공통으로 포함하고 있는 레지스터들이다.

반드시 알아야 할 레지스터

  1. 프로그램 카운터(PC:Program Counter):
    명령어 포인터(IP:Instruction Pointer)라고도 부르는 CPU도 있음.
    메모리에서 읽어 들일 명령어의 주소 저장

  2. 명령어 레지스터(IR:Instruction Register):
    방금 메모리에서 읽어 들인 명령어(해석할 명령어)를 저장하는 레지스터

  3. 메모리 주소 레지스터(MAR:Memory Address Register):
    메모리에 주소를 저장하는 레지스터

  4. 메모리 버퍼 레지스터(MBR:Memory Buffer Register):
    메모리와 주고받을 값을 저장하는 레지스터
    MDR(Memory Data Register)이라고 부르기도 함

  5. 플래그 레지스터: 연산 결과 or CPU 상태에 대한 부가 정보 저장

  6. 범용 레지스터(general purpose register): 데이터와 주소 모두 저장

  7. 스택 포인터: 스택 최상단의 위치를 저장

  8. 베이스 레지스터(base-register addressing mode):
    오퍼랜드와 베이스 레지스터의 값을 더하여 유효 주소를 얻는 방식

특정 레지스터를 이용한 주소 지정 방식

🤔 3-2 명령어 구조를 대충 넘기면 안 되었다!(정리 완료)

  • 이해가 어려워서 diaw.io로 따라 그리기

스택 주소 지정 방식

  • 스택과 스택 포인터를 이용한 주소 지정 방식
  • 스택 포인터: 스택의 꼭대기를 가리키는 레지스터
  • 스택 영역: 메모리 안에 스택처럼 사용할 영영역이 저장되어 있음

변위 주소 지정 방식(displacement addressing mode)

  • 오퍼랜드 필드의 값(변위)과 특정 레지스터의 값을 더하여 유효 주소를 얻어내는 주소 지정 방식

1. 상대 주소 지정 방식(relative addressing mode)

							사실 {실행할 명령어 -1} 번지는 밖에 썼어야 했는데..;
2. 베이스 레지스터 주소 지정 방식(base-register addressing mode)

좀 더 알아보기- x86과 ARM 레지스터

4-3 명령어 사이클과 인터럽트

명령어 사이클(instruction cycle)

  • 하나의 명령어를 처리하는 정형화된 흐름(주기)
  • 인출 사이클(fetch cycle): 메모리의 명령어를 CPU로 가지고 오는 단계
  • 실행 사이클(execution cycle): CPU에서 가져온 명령어를 실행하는 단계
  • 간접 사이클(indirect cycle): 간접 주소 지정 방식과 같이 메모리 접근이 더 필요한 경우

인터럽트(interrupt)

CPU 작업을 방해하는 신호

1.동기 인터럽트(synchronous interrupts)

  • CPU에 의해 발생하는 인터럽트
  • 예외(exception)라고도 부름

2.비동기 인터럽트(asynchronous interrupts)

  • 주로 입출력 장치에 의해 발생하는 인터럽트

  • 하드웨어 인터럽트

  • 하드웨어 인터럽트 처리 순서
    1) 입출력 장치가 CPU에 인터럽트 요청신호를 보냄(지금 끼어들어도 되나요? 물어봄)
    2) CPU가 인터럽트 요청을 확인. 인터럽트 플래그를 통해 받아들일 수 있는지 여부 확인
    3) 인터럽트를 받아 들일 수 있다면 CPU는 지금까지의 작업 백업
    4) CPU는 인터럽트 벡터를 참조하여 인터럽트 서비스 루틴 실행
    5) 인터럽트 서비스 루틴 실행이 끝나면 백업해 둔 작업을 복구하여 실행 재개

  • 인터럽트 서비스 루틴(ISR: Interrupt Service Routine): 인터럽트 핸들러라고도 부른다. 어떤 인터럽트가 발생했을 때, 해당 인터럽트를 어떻게 처리하고 작동해야 할지에 대한 정보로 이루어진 프로그램.

  • 인터럽트 벡터: 인터럽트 서비스 루틴을 식별하기 위한 정보. CPU는 하드웨어 인터럽트 요청을 보낸 대상으로부터 데이터 버스를 통해 인터럽트 벡터를 전달받는다.

  • CPU가 인터럽트를 처리한다 : 인터럽트 서비스 루틴을 실행하고, 본래 수행하던 작업으로 다시 돌아온다.

05 CPU 성능 향상 기법


5-1 빠른 CPU를 위한 설계 기법

개념: 클럭, 코어, 스레드
빠른 CPU를 만드는 설계 기법: 멀티 코어, 멀티스레드

클럭

  • 클럭 속도(Hz)
    - 1GHz = 10910^9Hz
  • 클럭 속도가 높은 CPU가 일반적으로 성능이 좋다.
  • 고성능을 요하는 순간에는 순간적으로 클럭 속도를 높이고(발열) 그렇지 않을 때는 낮추기도 함.
  • overclocking: 최대 클럭 속도를 강제로 끌어올리는 것
    - 성능을 올리는 데는 한계가 있다.

코어와 멀티코어

코어(core): CPU 내에서 명령어를 실행하는 부품. (여러개)

멀티코어(multi-core) CPU/processor: 코어가 여러 개

  • 코어 수가 12개 = dodeca-core
  • 코어 수가 지나치게 많아도 성능에는 크게 영향이 없다.
  • 코어마다 처리할 명령어들이 얼마나 적절하게 분배하느냐가 연산속도의 관건이다.

스레드와 멀티스레드

스레드(thread)

  • 실행 흐름의 단위

1.하드웨어적 스레드: 하나의 코어가 동시에 처리하는 명령어 단위

  • multithread process CPU/processor: 하나의 코어로 여러 명령어를 처리하는 CPU
  • hyper-threading: 인텔의 multithread 기술
  • logical processor라고 부르기도 함.

2.소프트웨어적 스레드: thread(computing), 하나의 프로그램에서 독립적으로 실행되는 단위

  • 운영체제에서 공부

5-2 명령어 병렬 처리 기법

CPU를 한시도 쉬지 않고 작동시키는 명령어 병렬 처리 기법

명령어 파이프라인

  1. 일반적인 과정
    1) Insctuction Fetch 명령어 인출
    2) Instruction Decode 명령어 해석
    3) Execute Instruction 명령어 실행
    4) Write Back 결과 저장

  2. 명령어 파이프라인/파이프라이닝

  • 동시에 여러 개의 명령어를 겹쳐 실행하는 기법
  • 파이프라인 위험: 높은 성능을 가져오기는 하지만, 특정 상황에서 성능 향상에 실패하는 경우
  • 데이터 위험, 제어 위험, 구조적 위험

    1) 데이터 위험: 명령어 간 '데이터 의존성'에 의해 발생. 데이터 의존적인 두 명령어를 무작정 동시에 실행하려고 하면 파이프라인이 제대로 작동하지 않는다.

    2) 제어 위험: 주로 분기 등으로 '프로그램 카운터의 갑작스러운 변화'에 의해 발생. 프로그램 카운터는 보통 현재 실행 중인 명령어 다음 주소로 갱신되는데, 프로그램 카운터 값에 갑작스러운 변화가 생기면 명령어 파이프라인의 처리 중이었던 명령어들이 쓸모 없게 된다.
    - 분기 예측(branch prediction): 제어 위험을 방지하기 위해 사용하는 기술

    3) 구조적 위험(자원 위험): 명령어들을 겹쳐 실행하는 과정에서 서로 다른 명령어가 동시에 ALU, 레지스터 등 같은 CPU 부품을 사용하려고 할 때 발생.

슈퍼스칼라(superscalar)

  • CPU 내부에 여러 개의 명령어 파이프라인을 포함한 구조

  • CPU 속도를 향상시키기 위한 과거의 방법 중 하나

  • 슈퍼스칼라 프로세서, 슈퍼스칼라 CPU: 매 클럭 주기마다 동시에 여러 명령어를 인출할 수도, 실행할 수 있음

    • 이론적으로는 파이프라인 개수에 비례하여 프로그램 처리 속도가 빨라짐(반드시는 아님)
    • 파이프라인 위험을 방지하기 위해 고도로 설계되어야 함

비순차적 명령어 처리

  • OoOE: Out-of-order-execution
  • 오늘날 CPU 성능 향상에 크게 기여한 기법, 대부분의 CPU가 차용하는 기법
  • 비순차적 명령어 처리 기법: 순차적으로만 실행하지 않고, 순서를 바꿔 실행해도 무방한 명령어부터 먼저 실행. 명령어 파이프라인이 멈추는 것을 방지하는 기법
    - 어떤 명령어와 데이터 의존성을 가지고 있는지, 순서를 바꿔 실행할 수 있는지를 판단할 수 있어야 함.

5-3 CISC와 RISC

CPU 언어인 ISA란 무엇인가
현대 CPU의 주요 설계 방식인 CISC와 RISC의 정이와 차이점

명령어 집합(instruction set)

  • 명령어 집합 구조(ISA:Instruction Set Architecture)
  • CPU가 이해할 수 있는 명령어들의 모음
  • CPU마다 ISA가 다를 수 있다.
  • 똑같은 프로그램임에도 CPU가 이해하고 실행할 수 있는 명령어가 달라 어셈블리어도 달라진다.
  • 하드웨어가 소프트웨어를 어떻게 이해할지에 대한 약속
  • ISA가 다르면 ➡️ 제어장치가 명령어를 해석하는 방식, 사용되는 레지스터의 종류와 개수, 메모리 관리 방법 등이 함께 달라진다.

CISC와 RISC

CISC
Complex Instruction Set Computer
RISC
Reduced Instruction Set Computer
복잡하고 다양한 명령어(장점) 단순하고 적은 명령어
가변 길이 명령어(규격화 x)고정 길이 명령어(규격화)
다양한 주소 지정 방식적은 주소 지정 방식
(장점) 프로그램을 이루는 명령어 수가 적다
메모리 절약
(단점) 프로그램을 이루는 명령어 수가 많다
여러 클럭에 걸쳐 명령어 수행1클럭 내외로 명령어 수행
(단점) 자주 사용하는 명령어만 쓰인다.
(장점) load-store 구조: 메모리에 직접 접근하는 명령어를
load, store로 제한(단순화, 최소화)
(단점) 파이프라이닝이 어렵다
CPU의 성장 한계
(장점) 파이프라이닝이 쉽다
(예) x86(32bit), x86-64(예) ARM

숙제


1. 기본숙제: p. 125의 확인 문제 2번

  • 플래그 레지스터: 연산 결과 혹은 CPU 상태에 대한 부가 정보를 저장하는 레지스터
  • 프로그램 카운터: 메모리에서 가져올 명령어의 주소를 저장하는 레지스터
  • 범용 레지스터: 데이터와 주소를 모두 저장할 수 있는 레지스터
  • 명령어 레지스터: 해석할 명령어를 저장하는 레지스터

2. 기본숙제: p. 155의 확인 문제 4번

답: 코어

3. 추가숙제: Ch.05(05-1) 코어와 스레드, 멀티 코어와 멀티 스레드의 개념을 정리하기

  • 코어: 명령어를 실행할 수 있는 하드웨어 부품
  • 스레드: 실행 흐름의 단위
  • 멀티 코어: 명령어를 실행할 수 있는 하드웨어 부품이 CPU 안에 2개 이쌍 있는 CPU
  • 멀티 스레드: 하나의 코어로 여러개의 명령어를 동시에 실행할 수 있는 CPU(논리 프로세스)

추가 공부

CPU는 어떻게 작동할까? ⭐⭐⭐⭐⭐


🦖 이렇게 길게 작성하고 싶지 않았다. 모르는 게 너무 많다.... 우웩

🦖 내 컴퓨터의 작업관리자로 CPU, 코어, 스레드, 논리 프로세서 등을 살펴보는 게 흥미로웠다.
캐시, GPU 관련된 것은 추후에...

🦖 레지스터(register)가 사실 레지스트리(registry)인가?? 했다가 전혀 다른 것이구나 알게 되었다. (책의 목차만 보았을 때 그랬음.. 하하)
참고 블로그: https://kyundev.tistory.com/34

  • 레지스트리: 윈도우 전반에 사용되는 설정 및 운영에 필요한 정보들을 담고 있는 데이터베이스
profile
수학을 사랑하는 애독자📚 Stop dreaming. Start living. - 'The Secret Life of Walter Mitty'

0개의 댓글