728x90
CS
이것이 컴퓨터 과학이다.
CPU 성능
- 클럭이란 컴퓨터의 부품을 일사불란하게 움직일 수 있게 하는 시간의 단위이다. 클럭속도는 헤르츠 단위로 측정되는데, 이는 클럭이 1초에 몇 번 반복되는지를 나타낸다. 이런 점에서 클럭 속도는 CPU의 속도 단위로 간주되기도 한다.
- 코어란 CPU내에서 명령어를 읽어들이고, 해석하고, 실행하는 부품을 의미한다
- 스레드란 하드웨어적인 스레드와 소프트웨어적인 스레드로 나누어 기억하면 좋다. 하드웨어 스레드는 하나의 코어가 동시에 처리하는 명령어의 단위를 의미한다. 같은 의미로 하나의 코어로 여러 명령어를 동시에 처리하는 CPU를 멀티스레드 프로세서, 혹은 멀티스레드 CPU라고 한다. 하드웨어 스레드를 논리 프로세서 라고 부르기도 한다.
- 소프트웨어 스레드란 하나의 프로그램에서 독립적으로 실행되는 단위를 의미한다.
- 병렬성은 작업을 물리적으로 동시에 처리하는 성질이다. 같은 시점에 여러 작업을 동시에 처리할 수 있을 것이다.
- 동시성은 동시에 작업을 처리하는 것처럼 보이는 성질을 의미한다. 여러 작업이 동시에 처리되는 것처럼 보일 수 있지만, 물리적으로 같은 시점에 여러 작업이 동시에 처리되고 있는 것은 아니다.
- 하드웨어 스레드는 병렬성을 구현하기 위한 물리적인 실행단위에 가깝고, 소프트웨어 스레드는 동시성을 구현하기 위한 논리적인 실행단위에 가깝다.
파이프라이닝을 통한 명령어 병렬 처리
- 명령어 병렬 처리 기법은 여러 명령어를 동시에 처리하여 CPU를 한시도 쉬지 않고 작동시킴으로써 CPU의 성능을 높이는 기법을 의미한다.
- 과정
- 명령어 인출
- 명령어 해석
- 명령어 실행
- 결과 저장
- 여기서 중요한 점은 같은 단계가 겹치지만 않는다면 CPU가 각각의 단계를 동시에 실행할 수 있다는 점이다. 이처럼 공장의 생산 라인과 같이 명령어들을 명령어 파이프라인에 넣고 동시에 처리하는 기법을 명령어 파이프라이닝이라고 한다.
- 파이프라이닝이 실패하여 성능 향상이 이루어지지 않는 상황은 파이프라인 위험이라고 부르며, 데이터 위험과 제어 위험, 구조적 위험으로 구분할 수 있다. 데이터 위험은 명령어 간의 데이터 의존성에 의해 발생한다. 제어 위험은 프로그램 카운터의 갑작스러운 변화에 의해 발생한다. 프로그램 실행의 흐름이 바뀌어 명령어가 실행되면서 프로그램 카운터 값에 갑작스러운 변화가 생기면 미리 인출하거나 해석중인 명령어들은 쓸모가 없어진다 이가 제어 위험이다.
- 구조적 위험은 명령어들을 겹쳐 실행하는 과정에서 서로 다른 명령어가 동시에 ALU, 레지스터같은 CPU 부품을 사용하려고 할 때 발생한다. 구조적 위험은 자원 위험이라고도 부른다.
RAM
- RAM은 임의 접근 메모리의 약자로, 여기서 임의 접근이란 저장된 요소에 순차적으로 접근할 필요 없이 임의의 위치에 곧장 접근 가능한 방식을 의미한다. 그래서 직접 접근이라고도 부른다. 임의 접근과 반대되는 개념으로는 순차접근이 있다. 순차 접근은 이름 그대로 특정 위치에 저장된 요소에 접근하기 위해 처음부터 순차적으로 접근하는 방식이다.
메모리에 바이트를 밀어 넣는 순서 - 빅엔디안과 리틀 엔디안
- 바이트를 어떤 순서로 저장하는지에 따라 빅엔디안과 리틀 엔디안으로 나뉜다. 빅엔디안은 낮은 번지의 주소에 상위 바이트부터 저장하는 방식을 말한다.
- 리틀 엔디안은 낮은 번지의 주소에 하위바이트부터 저장하는 방식을 말한다.
캐시메모리
- 캐시 메모리는 CPU의 연산 속도와 메모리 접근 속도의 차이를 줄이기 위해 탄생한 저장장치로, CPU와 메모리 사이에 위치한 SRAM 기반의 저장장치이다.
- 컴퓨터 내부에는 여러 종류의 캐시 메모리가 있다. 코어와 가까운 캐시 메모리를 L1 캐시, 그 다음 L2 캐시, L3 캐시라고 부른다. 일반적으로 L1, L2캐시는 코어 내부에 L3는 코어 외부에 위치해있다. 코어와 가장 가까운 L1 캐시는 명령어만을 저장하는 L1I캐시와 데이터만을 저장하는 L2D 캐시로 구분하기도 하며 이러한 유형의 캐시 메모리를 분리형 캐시라고 한다.
- 캐시 메모리가 예측하여 저장한 데이터가 CPU에 의해 실제로 사용되는 경우를 캐시히트라고 하며 반대로 자주 사용할 것으로 예측하여 캐시 메모리에 저장했지만 틀린 예측으로 인해 CPU가 메모리로 부터 필요한 데이터를 직접 가져와야 하는 경우를 캐시 미스라고 한다.
- 캐시가 히트되는 비율을 캐시적중률이라고 한다.
- 캐시 메모리는 참조 지역성의 원리라는 특정한 원칙에 따라 메모리로 부터 가져올 데이터를 결정한다.
- 시간 지역성
- CPU는 최근에 접근했던 메모리 공간에 다시 접근하려는 경향이 있다.
- 공간 지역성
- CPU는 접근한 메모리 근처에 접근하려는 경향이 있다.
- 시간 지역성을 가장 잘보이는 사례는 프로그래밍 언어의 변수이다. 일반적으로 변수에 저장된 값은 한 번만 사용되지 않고, 프로그램이 실행되는 동안 여러번 사용된다. 이렇게 최근에 접근했던 메모리 공간에 다시 접근하려는 경향을 시간 지역성이라고 한다.
- 접근한 메모리 공간의 근처에 접근하려는 경향인 공간지역성은 단적으로 배열이 보여준다.
- 시간 지역성
캐시 메모리의 쓰기 정책
- 즉시 쓰기(Write-Through)
- 메모리를 항상 최신 상태로 유지하여 캐시 메모리와 메모리 간의 일관성이 깨지는 상황 방지, 데이터를 쓸 때마다 메모리를 참조해야 하므로 버스의 사용시간과 쓰기 시간이 늘어난다.
- 지연 스기(Write-Back)
- 캐시 메모리에만 값을 써두었다가 추후 수정된 데이터를 한 번에 반영한다. 메모리 접근 횟수를 줄일 수 있어 즉시 쓰기 방식에 비해 속도는 더 빠르지만, 메모리와 캐시 메모리간의 일관성이 깨질 수 있다.
보조기억장치
- RAID는 데이터의 안정성 혹은 성능을 확보하기 위해 여러 개의 독립적인 보조기억장치를 마치 하나의 보조기억장치처럼 사용하는 기술이다. RAID를 구성하는 방법에는 여러가지가 있으며, RAID 레벨이라고 표현한다.
- RAID0
- 데이터를 여러 보조기억장치에 단순하게 나누어 저장하는 구성 방식이다. 줄무늬처럼 분산되어 저장된 데이터를 스트라입이라고 하고, 이렇게 분산하여 저장하는 동작을 스트라이핑이라고 한다.
- RAID1
- 완전한 복사본을 만들어 저장하는 구성 방식이다. 그래서 미러링이라고도 부른다. RAID1은 복구가 간단하고 안정성이 높다. 원본과 복사본을 써야하기 때문에 RAID0보다 쓰기 속도가 느려진다. 복사본이 저장된 크기만큼 사용 가능한 용량이 적어진다는 단점도 있다.
- RAID4
- 패리티 정보를 저장하는 디스크를 따로 두는 구성방식이다. 패리티란 오류를 검출할 수 있는 정보이다. 단점은 패리티를 저장하는 장치에 병목 현상이 발생한다는 점이다.
- RAID5
- 패리티를 분산하여 저장하는 구성방식이다. RAID4의 단점인 병목 현상을 보완할 수 있다.
- RAID6
- 기본적으로 구성은 RAID5와 같지만 서로 다른 2개의 패리티를 두는 구성방식이다 오류를 검출하고 복구할 수 있는 수단이 2개이다. 따라서 안정성이 높다.
입출력 장치
- 장치드라이버는 장치 컨트롤러의 동작을 알고, 장치 컨트롤러가 컴퓨터 내부와 정보를 주고 받을 수 있도록 하는 프로그램이다.
- 프로그램 입출력은 프로그램 속 명령어로 입출력 작업을 수행하는 방법이다. 입출력 명령어를 실행함으로써 장치 컨트롤러와 상호 작용한다.
- 다중 인터럽트를 처리하기 위해서는 프로그래머블 인터럽트 컨트롤러라는 하드웨어를 사용한다. PIC는 여러 장치 컨트롤러에 연결되어 있어 장치 컨트롤러에서 보낸 하드웨어 인터럽트 요청들의 우선순위를 판별한 뒤, CPU에게 지금 처리해야 할 하드웨어 인터럽트가 무엇인지를 알려주는 장치이다.
DMA 입출력
- 프로그램 기반의 입출력과 인터럽트 기반의 입출력에 공통점이 있다면 CPU가 입출력 장치와 메모리간의 데이터 이동을 주도해야 하며, 이동하는 데이터들도 반드시 CPU를 거친다는 점이다.
- DMA는 이름 그대로 직접 메모리에 접근할 수 있는 입출력 기능을 말한다 DMA 입출력을 위해서는 시스템 버스에 연결된 DMA 컨트롤러라는 하드웨어가 필요하다. DMA 컨트롤러는 시스템 버스에 연결되고, 입출력 장치들의 장치 컨트롤러들은 입출력 버스라는 입출력 장치 컨트롤러의 전용 버스와 연결된다.
RDBMS / NOSQL
1. 데이터 모델
- RDBMS
- 데이터를 표 형태(테이블)로 저장한다. 테이블 간에는 명확한 관계(키와 외래 키 등)가 있으며, 구조화된 스키마를 따라야 한다. SQL을 사용하여 데이터를 관리한다.
- NOSQL
- 데이터 모델링에 유연성을 제공한다. 관계형 데이터베이스처럼 고정된 스키마가 없고 여러 가지 데이터 저장 방식을 지원한다.
2. 스키마
- RDBMS
- 고정된 스키마를 가지고 있다. 데이터가 정규화되어 있고, 스키마를 미리 정의해야 한다. 데이터는 테이블의 각 열에 맞춰 엄격하게 구조화되어야 한다.
- NOSQL
- 동적 스키마 또는 스키마가 없을 수 있다. 데이터 구조가 각 레코드마다 다를 수 있어, 유연하게 데이터 형태를 변경할 수 있다.
3. 확장성
- RDBMS
- 수직 확장에 더 적합하다. 더 큰 서버로 교체하거나 하드웨어 성능을 높여 처리 능력을 향상시키는 방식이다. 수평 확장이 어려운 편이다
- NOSQL
- 수평 확장에 더 유리하다 서버를 추가함으로써 시스템의 용량과 성능을 증가시킬 수 있다. 대량의 데이터를 분산 처리하는데 적합하다.
4. 데이터 일관성
- RDBMS
- ACID 특성을 보장한다. 트랜잭션의 일관성을 유지하고 중요한 금융, 회계와 같은 시스템에서 사용된다.
- NOSQL
- CAP 이론에 따라 설계되었다. 대부분 BASE 접근 방식을 따른다. 일관성보다는 가용성이나 파티셔닝에 초점을 맞춘다.
728x90
'Study > TIL(Today I Learned)' 카테고리의 다른 글
24.11.15 Unity (2) | 2024.11.15 |
---|---|
24.11.14 CS (0) | 2024.11.14 |
24.11.12 CS, C++ (3) | 2024.11.12 |
24.11.11 CS (0) | 2024.11.11 |
24.11.07 CS, VV (2) | 2024.11.08 |