클럭
컴퓨터와 디지털 장치에서 중요한 개념으로, 일정한 시간 간격으로 발생하는 신호나 규칙적인 신호를 의미합니다. 클럭은 시스템의 동작을 조율하고 동기화하는 데 사용되며, 컴퓨터의 모든 작업은 클럭 신호에 의해 동작하빈다.
주파수라고 하는 클럭은 초당 발생하는 클럭 사이클의 수를 의미합니다. 하지만 클럭의 속도가 빠를수록 작업을 빠르게 처리할 수 있지만, 그만큼 전력 소비와 발열도 증가하게 됩니다.
코어와 멀티코어
코어는 CPU의 주요한 연산 처리 단위입니다. 하나의 코어는 하나의 명령어 집합을 처리할 수 있으며, CPU가 동시에 수행할 수 있는 명령어 개수를 나타냅니다. 코어의 개수가 많을수록 CPU는 동시에 더 많으 작업을 처리할 수 있으며, 다중 프로세스나 스레드를 효율적으로 실행할 수 있습니다. 일반적으로 데스크톱 컴퓨터나 노트북에서는 2개 이상의 코어가 포함된 CPU가 많이 사용됩니다.
멀티코어는 하나의 CPU칩 안에 여러 개의 코어가 내장되어 있는 형태를 말합니다. 이렇게 코어 CPU를 사용하면 더 많은 작업을 동시에 수행하 수 있습니다. 멀티코어의 CPU는 여러 프로세스나 스레드를 병렬로 처리하는 능력이 뛰어나므로, 멀티태스킹과 병렬 작업에 적합합니다. 이러한 이점 때문에 멀티코어 CPU가 데스크톱, 노트북, 서버, 모바일장치 등 다양한 컴퓨터 기기에서 많이 사용됩니다.
스레드
스레드에는 CPU에서 사용되는 하드웨어적 스레드가 있고 프로그램에서 사용되는 소프트웨어적 스레드가 있습니다.
먼저 하드웨어적 스레드에 대해 알아보겠습니다.
하드웨어적 스레드
하퍼스레딩 또는 시뮬트레딩이라고 불리며, 하나의 물리적인 코어에서 논리적인 스레드들을 동시에 실행하는 기술을 말합니다. 이 기술은 멀티코어 CPU에서 활용되며, 단일 코어에서 여러 개의 하드웨어적 스레드를 동시에 실행하여 CPU 자원의 이용 효율성을 높입니다.
예를 들어보면 하나의 코어에 하드웨어적 스레드를 두 개 사용한다면, CPU는 두 개의 스레드를 번갈아가며 실행합니다. 이 때, 하나의 스레드가 실행하는 동안 다른 스레드의 작업은 캐시에 보관되어 대기하고 있을 수 있습니다.
2코어 4스레드 CPU는 실행하는 부품을 두 개 포함하고 한번에 네 개의 명령어를 처리할 수 있는 CPU를 의미합니다.
소프트웨어적 스레드
운영체제 또는 프로그래밍 언어의 스레드 라이브러리를 이용하여 구현된 스레드를 말합니다. 소프트웨어적 스레드는 하나의 물리적인 코어에서 논리적인 스레드들을 다중화하거나, 멀티코어 CPU에서 여러 코어를 사용하여 동시에 실행됩니다.
소프트웨어적 스레드는 프로세스 내에서 실행되며, 하나의 프로세스는 여러 개의 스레드를 가질 수 있습니다.
멀티 스레딩이라고 불리는 소프트웨어적 스레드를 사용하면, 하나의 프로세스 내에서 동시에 여러 작업을 수행할 수 있습니다.
멀티 스레드
하나의 프로세스 내에서 여러 개의 스레드가 동시에 실해되는 프로그래밍 모델을 말합니다. 이때, 여러 스레드들은 같은 프로스세스의 주소 공간을 공유하며, 각가의 스레드는 독립적으로 실행될 수 있습니다.
주요 특징
1. 공유 메모리 : 하나의 프로세스 내에서 동작하는 스레드들은 같은 주소 공간을 공유합니다. 이로 인해 스레드 간의 데이터를 공유하는 통신하는 것이 간단해집니다.
2. 동시성 : 멀티 스레드를 사용하면 여러 스레드가 동시에 실행될 수 있습니다.
3. 경량 스레드 : 멀티 스레드는 프로세스와 달리 스레드의 생성과 전환에 추가 오버헤드가 적습니다.
4. 동기화 : 멀티 스레드에서는 공유 데이터의 동시 접근으로 인해 문제가 발생할 수 있습니다. 이를 해결하기 위해 스레드 간의 동기화가 필요합니다.
명령어 파이프라인
1. 명령어 검출 : 메모리에서 다음 실행할 명령어를 가져오는 단계
2. 명령어 디코딩 : 가져온 명령어를 해석하고 실행에 필요한 정보를 추출하는 단계
3. 실행 : 명령어를 실행하는 단계. ALU를 사용하여 산술 연산이나 논리 연산을 수행
4. 메모리 접근 : 데이터를 메모리에서 읽거나 쓰는 단계
5. 결과 기록 : 실행한 명령어의 결과를 레지스터나 메모리에 기록하는 단계
여기서 중요한 점은 같은 단계가 겹치지만 않는다면 CPU는 각 단계를 동시에 실행할 수 있습니다.
파이프라인 위험
파이프라인 위험 에는 데이터 위험 제어위험 구조적 위험이 있습니다. 하나씩 알아보겠습니다.
데이터 위험은 의존성으로 발생하는 위험을 말합니다. 데이터 의존성은 한 명령어가 이전 명령어로부터 발생하는 결과 데이터를 사용하는 경우를 의미합니다. 데이터 의존성으로 인해 파이프라인의 효율성이 저하되거나 오류가 발생할 수 있습니다.
제어 위험은 명령어 실행 흐름을 제어하는 데 있어서 발생하는 문제를 의미 합니다. 제어 위험은 분기 명령어와 같이 프로그램의 실행 흐름을 변경하는 명령어들로 인해 파이프라인 내에서 오류가 발생하거나 효휼성 저하되는 현상을 말합니다.
구조적 위험은 명령어들을 겹쳐 실행하는 과정에서 서로 다른 명령어가 동시에 ALU, 레지스터 등 같은 CPU 부품을 사용하려고 할 때 발생합니다.
CISC&RISC
컴퓨터 아키텍처에서 사용되는 두가지 주요한 설계 철학을 나타내는 용어입니다.
CISC
CISC아키텍처는 많고 복잡한 명령어 세트를 가지고 있습니다.
단일 명령어에 많은 기능을 포함하고 잇어서 명령어의 길이가 길고, 다양한 주소지정 방식과 복잡한 명령어 형식을 지원합니다.
명령어 하나로 여러 개의 기본 연산을 수행할 수 있어서 메모리 접근 횟수를 줄이고, 복잡한 연산을 지원하여 프로그래머가 더 적은 양의 명령어로 복잡한 작업을 수행할 수 있습니다.
RISC
RISC아키텍처는 간단하고 작은 크기의 명령어 세트를 가지고 있습니다.
간결하고 일관된 명령어 형식을 사용하며, 기본적인 연산들을 빠르게 처리하는 데에 초점을 맞추고 있습니다.
단일 사이클에 명령어를 실행할 수 있도록 설계되어 복잡한 명령어를 간단한 기본 명령어들로 분리합니다.
메모리 접근 횟수가 증가할 수 있지만, 하드웨어의 병렬성을 적극적으로 활요하여 빠른 명령어 실행이 가능합니다.
대표적으로는 ARM,MIPS,RISC-V등이 있습니다.
대부분의 프로세서에서는 CISC와 RISC를 결합한 혼합형 아키텍처를 사용하여 CISC의 유연성과 RISC의 간결함을 모두 활용하고 있습니다.
'컴퓨터구조' 카테고리의 다른 글
메모리& 캐쉬메모리 (0) | 2023.08.16 |
---|---|
명령어 사이클과 인터럽트 (0) | 2023.08.16 |
ALU와 제어장치 (0) | 2023.08.16 |