#5. 컴퓨터 구조 및 운영체제

Maengkkong·2023년 12월 7일
1

스터디

목록 보기
5/14

클럭

  1. 컴퓨터 부품들은 클럭 신호에 맞춰 움직인다.
  2. cpu는 '명령어 사이클'이라는 정해진 흐름에 맞춰 명령어들을 실행

클럭 속도가 빠르면 부품들도 더 빠르게 작동된다.
클럭 속도가 높아지면 cpu 명령어 사이클 또한 빠르게 반복한다.
cpu 속도 = 클럭 속도라고 봐도 무방하다.
다만, 클럭 속도가 높으면 발열 문제가 생긴다.
클럭 속도만으로 cpu 성능을 올리는데는 한계가 있다.

  • 클럭 속도 = 헤르츠(Hz)단위
    : 1초에 클럭이 몇 번 반복되는지 나타냄
    : 1초 = 1Hz

클럭 속도는 일정하지 않다.
1. 기본 클럭 속도(Base)
2. 최대 클럭 속도(Max)
: cpu가 고성능 > 클럭 속도를 높인다. 아닐 경우, 클럭 속도를 낮출 수 있다.
: 최대 클럭 속도를 강제로 끌어올리는 기법 또는 그 이상을 끌어올리는 기법을 오버클럭킹(Overclocking)


코어와 멀티코어

클럭 속도를 높이는 방법 외에 cpu의 성능을 높이는 방법
1. cpu 코어 및 스레드 수 늘리기

core = 명령어를 실행하는 부품
cpu = 명령어를 실행하는 부품 > 명령어를 실행하는 부품을 여러 개 포함하는 부품으로 확장
ex)

  • 8core = 8개의 명령어 실행 부품
  • cpu > core1,(> ALU, 제어장치, register 포함) / core2(> ALU, 제어장치, register 포함)

멀티코어(multi-core) = 코어가 여러개 있는 cpu or 멀티코어프로세서
: 멀티코어 > 단일코어보다 처리 속도가 더 빠르다.
: 클럭 속도 2.4GHz 단일코어 cpu < 클럭 속도 1.9GHz 멀티코어 cpu

<단일코어>
싱글 코어(single-core) : 1core
<멀티코어>
듀얼 코어(dual-core) : 2core
트리플코어(triple-core) : 3core
쿼드코어(quad-core) : 4core
헥사코어(hexa-core) : 6core
옥타코어(octa-core) : 8core
데카코어(deca-core) : 10core
도데카코어(dodeca-core) : 12core

  • 코어마다 처리할 명령어들을 얼마나 적절하게 분배하느냐에 따라 연산 속도가 달라진다.

스레드와 멀티스레드

스레드(thread) : 실행 흐름의 단위

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

  • 하나의 코어로 여러 명령어를 동시에 처리하는 cpu = 멀티스레드 프로세서 또는 멀티스레드 cpu

    ex)
    CPU 8core 16thread
    : 명령어를 처리하는 부품이 8개이며, 한번에 16개의 명령어를 처리
    = 코어 하나당 2개의 하드웨어 스레드를 처리

  • 하이퍼스레딩(typer-threading)
    : 인텔의 멀티스레드 기술

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

: 프로그램 실행에서 스레드는 단일 또는 동시에 실행될 수 있다.

ex)
1. 사용자로부터 입력받은 내용을 화면에 보여 주는 기능
2. 사용자가 입력한 내용이 맞춤법에 맞는지 검사하는 기능
= 이 기능들을 실행하는 스레드를 만들어 동시에 실행 가능

멀티스레드 프로세서

멀티스레드 프로세서는 레지스터를 사용하면 동시에 명령어를 수행할 수 있다.

하나의 코어로 여러 명령어를 동시에 처리하려면 레지스터 세트를 가지고 있으면 된다.
**

* 레지스터 세트(register set)
: 하나의 명령어를 실행하기 위해 꼭 필요한 레지스터
: 프로그램 카운터, 스택 포인터, 메모리 버퍼 레지스터, 메모리 주소 레지스터

레지스터 세트가 하나인 CPU > 한 개의 명령어 처리를 위한 정보를 기억
레지스터 세트가 두 개인 CPU > 두 개의 명령어 처리를 위한 정보를 기억

cpu내 ALU와 제어장치가 레지스터 세트에 저장된 명령어를 해석하고 실행한다면 두 개의 명령어가 동시에 실행

  • 하드웨어 스레드(=논리 프로세서)는 한번에 하나의 명령어를 처리하는 CPU다.
    ex) 2core 4thread일 경우 > 프로그램 입장에서, 한번에 명령어를 처리하는 cpu가 4개가 있는 것 같이 보인다.

명령어 병렬 처리 기법(ILP : Instruction-Level Parallelism)

1. 명령어 파이프라인(instruction pipeline)(단일)

<순서>

  • 명령어 인출(Instruction Fetch)
  • 명령어 해석(Instructino Decode)
  • 명령어 실행(Execute Instruction)
  • 결과 저장(Write Back)

CPU는 각 단계를 동시에 실행할 수 있다.
cpu는 한 명령어를 '인출'하는 동안, 다른 명령어를 '실행'할 수 있고,
명령어가 '실행'되는 동안 연산결과를 '저장'할 수 있다.

1-1.명령어 파이프라이닝(instruction pipelining)
: 명령어들을 명령어 파이프라인에 넣고 동시에 처리하는 기법(단일)

1-2. 파이프라인 위험(pipeline hazard)
: 파이프라이닝은 높은 성능을 가져오지만, 특정 상황에서는 성능 향상에 실패하는 경우가 있다. 이러한 경우를 파이프라인 위험이라고 한다.

    1. 데이터 위험
    1. 제어 위험
    1. 구조적 위험

1. 데이터 위험(data hazard)
: 명령어 간 데이터 의존성에 의해 발생
ex)
명령어 1 : R1 = R2 + R3
명령어 2 : R4 = R1 + R5
명령어 2는 1의 데이터에 의존적이다.

2. 제어위험(control hazard)
: 프로그램 카운터의 갑작스러운 변화에 의해 발생
: 프로그램 카운터에 의해 현재 실행 중인 명령어 다음 주소로 갱신되는데, 프로그램 실행 흐름이 바뀌어 프로그램 카운터에 갑작스러운 변화가 생긴다면 명령어 파이프라인에 미리 가지고 와서 처리 중이었던 명령어들은 아무 쓸모가 없어진다. 이를 제어 위험이라고 한다.

이를 위해 사용하는 기술 중 하나가 분기 예측(hranch prediction)이다.

  • 분기 예측
    : 프로그램이 어디로 분기할지 미리 예측한 후 그 주소를 인출하는 기술

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


2. 슈퍼스칼라(superscalar)
: cpu 내부에 여러 개의 파이프라인을 포함한 구조

슈퍼스칼라 프로세서 & 슈퍼스칼라 cpu : 슈퍼스칼라 구조로 명령어 처리가 가능한 cpu

슈퍼스칼라 프로세서는 클럭 주기마다 동시에 여러 명령어를 인출, 실행할 수 있기 때문에 멀티스레드 프로세서는 슈퍼스칼라 구조이다.

이론적으로 슈퍼 스칼라 프로세서는 파이프라인의 개수에 비례하여 프로그램의 처리 속도가 빨라지지만 반드시 비례하여 빨라지지는 않는다. 또한 여러 개의 파이프라인을 이용하면 데이터 위험, 제어 위험, 자원 위험을 피하기 어렵다.


3. 비순차적 명령어 처리(OoOE : Out-of-order execution)

합법적 새치기 즉, 순차적으로 실행하지 않는 기법이다.

비순차적 명령어 처리는 순차적으로 처리하다보면, 예상치 못한 상황에 명령어 파이프라인은 멈춰버리기 때문에 명령어를 순차적으로만 실행하지 않고 순서를 바꿔 실행해도 무방한 명령어를 먼저 실행하여 명령어 파이프라인이 멈추는 것을 방지하는 기법이다.


CISC & RISC

CPU가 이해할 수 있는 명령어들의 모음들을
명령어 집합(Instruction set)
명령어 집합 구조(ISA : Instruction Set Architecture)
라고 한다.

  • ISA = CPU의 언어이다.
  • ISA = CPU를 비롯한 하드웨어가 소프트웨어를 어떻게 이해할지에 대한 약속

CPU마다 ISA가 다를 수 있다. = 컴퓨터마다 이해할 수 있는 명령어가 다르다. 명령어가 다르면 어셈블리어도 다르다.

명령어 집합 구조라고 하는 이유는 cpu가 어떤 명령어를 이해하는지에 따라 컴퓨터 구조 및 설계 방식이 달라지기 때문이다.

CISC (Complex Instruction Set Computer)

복잡하고 다양한 명령어들을 활용하는 cpu 설계 방식

CISC는 다양하고 강력한 기능의 명령어 집합을 활용하기 때문에 명령어의 형태와 크기가 다양한 가변 길이 명령어를 활용
= 상대적으로 적은 수의 명령어(컴파일된 프로그램의 크기가 작다)로도 프로그램을 실행할 수 있다는 의미이다.

  • 장점 : 메모리 공간을 절약
  • 단점 : 활용 명령어가 복잡하고 다양한 기능을 제공하여 명령어의 크기와 실행되기까지 시간이 일정하지 않다. 이는 명령어 하나를 실행하는 데 여러 클럭 주기가 필요하다는 말이다.

CISC는 명령어 파이프라인을 구현하는 것이 효율적이지 않다.
CISC의 활용 명령어는 명령어 수행시간이 길고 가지각색이기에 파이프라인이 효율적으로 명령어를 처리할 수 없다.
파이프라인은 cpu에 중요한 핵심 기술이기에 CISC의 아주 큰 단점이다.

RISC (Reduce Instruction Set Computer)

RISC는 CISC에 비해 명령어 종류가 적다.
CISC와 달리 짧고 규격화된 명령어이다.
1 클럭 내외로 실행되는 명령어를 지향한다.
즉, RISC는 고정 길이 명령어를 활용한다는 것이다.

RISC는 메모리에 직접 접근하는 명령어를 load, store 두 개이다.(load-store구조)
= 메모리 접근을 단순화 및 최소화를 추구

  • CISC보다 주소 지정 방식의 종류가 적은 경우가 많다.

RISC는 메모리 접근을 단순화, 최소화 대신 레지스터를 적극적으로 활용
CISC보다 레지스터 이용 연산이 많다.
범용 레지스터 개수도 더 많다.
사용 가능한 명령어 개수가 CISC보다 적기 때문에 RISC는 CISC보다 많은 명령으로 프로그램을 작동한다.


CISC
1. 복잡하고 다양한 명령어
2. 가변 길이 명령어
3. 다양한 주소 지정 방식
4. 프로그램을 이루는 명령어의수가 적음
5. 여러 클럭에 걸쳐 명령어 수행
6. 파이프라이닝하기 어려움

RISC
1. 단순하고 적은 명령어
2. 고정 길이 명령어
3. 적은 주소 지정 방식
4. 프로그램을 이루는 명령어의 수가 많음
5. 1클럭 내외로 명령어 수행
6. 파이프라이닝하기 쉬움


혼자 공부하는 컴퓨터구조 + 운영체제
05. 데이터 (144p - 175p)

0개의 댓글