본문 바로가기
관리자

Computer Science/Introduction

혼자 공부하는 컴퓨터구조 + 운영체제: 2. CPU 처리, 메모리, 보조기억장치

728x90
반응형

혼자 공부하는 컴퓨터구조 + 운영체제 - 강민철 지음의 요약본이다.

 

 


 

5. CPU 성능 향상 기법

 

코어와 스레드

 

- 코어(Core)는 명령어를 실행하는 부품으로 ALU, 제어장치, 레지스터들이 포함된 부품을 말한다. 과거에 비해 오늘날의 CPU는 멀티 코어 CPU(멀티코어 프로세서)로 구성된다.

 

- 명령어를 처리하는 흐름의 단위를 스레드(thread) 라고 한다. 기존에는  1개의 코어가 1개의 명령어를 처리하는 1스레드였으나, 하나의 코어로 여러 명령어를 동시에 처리하는 CPU를 멀티스레드 프로세서 또는 멀티스레드 CPU라고 한다. 이러한 설명을 하드웨어적 스레드라고 한다.

- 메모리의 각 부분에서 여러 프로그램을 동시에 실행하는 것을 소프트웨어적 멀티스레드라고 한다.

- 메모리 입장에서는 2코어 4스레드라도, 마치 4개의 단일 프로세서가 동시에 실행되는 것처럼 보이기 때문에 하드웨어 스레드를 논리 프로세서(logical processor)라고 부르기도 한다. 실제 Windows -> 작업 관리자 -> 성능 탭에서 논리 프로세서라는 항목은 하드웨어 스레드를 의미한다.

 

 

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

 

명령어 파이프라이닝(instruction pipelining)

동시에 여러 개의 명령어를 거쳐 실행하는 기법이다. 명령어 처리 과정은 1. 명령어 인출(Instruction Fetch), 2. 명령어 해석(Instruction Decode), 3. 명령어 실행(Execute Instruction), 4. 결과 저장(Write Back)의 네 단계로 구성되며 같은 단계가 겹치지만 않는다면 CPU는 각 단계를 동시에 실행할 수 있다.

 

- 파이프라이닝을 통한 성능 향상 실패 상황

  • 데이터 위험(Data hazard): 현재 명령어의 계산 결과를 다음 명령어에서 참조할 때는 파이프라인을 병렬적으로 구성할 수 없다.
  • 제어 위험(Control hazard): 보통 메모리 주소의 10번, 11번, ... 에 있는 명령어들을 순차적으로 실행하는데 프로그램 카운터가 갑자기 JUMP되어 다른 메모리 주소의 명령어를 실행하게 된다면 원래 파이프라인에 의해 병렬적으로 실행됐어야할 후속 명령어들은 실행이 안될 수 있다.
  • 구조적 위험(structural hazard, =자원 위험(resource hazard)): 명령어들이 병렬적으로 실행되면서 같은 ALU, 레지스터 등의 CPU 부품을 사용하려고 할 때 발생한다.

슈퍼 스칼라(superscalar)

파이프라인을 여러 개 두어 프로그램의 성능을 향상시키는 구조이다. 슈퍼 스칼라 구조로 명령어 처리가 가능한 CPU를 슈퍼스칼라 프로세서, 슈퍼스칼라 CPU라고 한다.

 

비순차적 명령어 처리 기법(OoOE, Out of Order Execution)

각 M으로 표현된 메모리 주소에 우변의 데이터를 저장하는 로직을 생각해보자

1, M(100) <- 1
2, M(101) <- 2
3, M(102) <- M(100) + M(101)
4, M(150) <- 1
5, M(151) <- 2

3번줄 항목은 데이터 위험에 해당하는 부분으로 반드시 1, 2번째 줄의 코드가 실행된 다음 실행돼야한다. 위 파이프라인의 그림으로 상상해보면 2번줄의 '인출-해석-실행-저장' 과정이 모두 끝나고 나서야 3번줄이 실행되는 것이다. 이렇게 되면 이와 상관없는 4, 5번째 줄의 코드도 실행순서가 뒤로 밀리게 된다. 여기서 3번 라인을 맨 뒤로 배치하면 구조가 개선되어 파이프라인을 연속적으로 구성할 수 있다. 이렇게 지정된 실행 순서를 순차적으로 실행하지 않고 효율적으로 파이프라인을 구성하는 것을 비순차적 명령어 처리 기법이라고 한다.

 

슈퍼 스칼라, 비순차적 명령어 처리 기법은 데이터간에 의존성이 없는지, 순서를 바꿔 실행할 수 있는 명령어들은 어떤 것인지 판단할 수 있어야 하기에 구현 난이도가 상대적으로 높다.

 

 

 

ISA : CISC와 RISC

파이프라인을 잘 구성하기 위해서는 명령어가 잘 구성되어 있어야 한다. CPU에서 사용하는 명령어집합, 명령어 구조를 ISA(Instruction Set Architecture)라고 한다.

 

ISA는 제조사마다 다르다. 인텔 CPU는 x86, x86-64 라는 이름으로 지어져서 거기에 맞는 ISA로 구성된다. 애플의 CPU는 ARM이라는 이름으로 만들어져서 그에 맞는 ISA로 명령어들을 해석하고 처리한다. 같은 소스코드로 만들어진 프로그램이라 할지라도 어떤 타입의 ISA를 사용하느냐에 따라 거기에 맞는 어셈블리어 코드는 다르다.

 

source code -> 컴파일러(gcc 11.2) -> x86, ARM 변환 예시

 

다양한 ISA 중 가장 많이 사용되는 형태는 CISC(Complex Instruction Set Computer), RISC(Reduced Instruction Set Computer)가 있다.

 

CISC: 다양하고 강력한 기능의 명령어 집합을 사용하기 때문에 가변 길이 명령어를 사용한다.

+ 적은 수의 명령어로 기능 개발. 메모리 공간 적게 차지

- 명령어의 크기와 실행 시간이 일정하지 않아 파이프라인 구성에 불리

. 대표적인 프로세서는 intel의 x86

 

RISC: CISC에 비해 명령어 수가 적고 되도록 1클럭 내외로 실행되는 고정 길이 명령어들로 구성

+ 파이프라이닝 최적화

- 코드가 길고, 레지스터를 활용하기 때문에 레지스터가 더 많이 필요함

. 대표적인 프로세서는 애플의 ARM

 

 


 

6. 메모리와 캐시 메모리

 

RAM의 특징과 종류

  • DRAM(Dynamic RAM): 데이터 소멸을 막기 위해 주기적으로 데이터 재활성화 필요. 소비전력이 낮고, 저렴하고, 집적도가 높아서 가장 많이 사용함
  • SRAM(Static RAM): 데이터의 재활성화 필요 X, 속도도 DRAM보다 빠름. 소비전력이 높고, 비싸고, 집적도가 낮아서 캐시 메모리에 사용함
  • SDRAM(Synchronous Dynamic RAM): 클럭 신호와 동기화가 가능한 발전된 형태의 DRAM
  • DDR SDRAM(Double Data Rate SDRAM): 대역폭(data rate)을 넓혀 속도를 빠르게 만든 SDRAM. 대역폭이 넓을수록 한 클럭당 데이터를 주고 받는 양이 배가 된다. DDR2 SDRAM은 DDR SDRAM보다 대역폭이 두 배 넓다. DDR3 = 2 * DDR2, DDR4 = 2 * DDR3 등 대역폭이 2배씩 증가하는 형태로 제작되고 있다.

 

 

메모리의 주소 공간

주소에는 논리 주소물리 주소가 있다.

논리 주소: 실행 중인 프로그램에 부여된 0번지부터 시작되는 주소

물리 주소: 정보가 실제로 저장된 하드웨어상의 주소

 

 

 

메모리 관리 장치(MMU, Memory Management Unit)

두 실행 중인 프로그램 A, B가 각 논리주소가 0~A, 0~B 번지로, 논리 주소가 1000~1000+A, 3000~3000+B에 저장되어있다고 가정. 각 프로그램마다 '0번지에 데이터를 저장하라' 라고 명령하는 것은 MMU에 의해 프로그램 A는 0 + 1000, 프로그램 B는 0 + 3000의 실제 물리 주소에 데이터를 저장하게 된다. 이 때 각 프로그램의 시작위치인 1000, 3000 등의 주소 정보는 베이스 레지스터에 저장된다.

 

 

 

메모리 보호, 한계 레지스터(limit register)

베이스 레지스터와 비슷한 원리로 다른 프로그램의 물리 주소의 데이터를 보호하기 위해 설정하는 것이 한계 레지스터의 값이다. 위 그림에서 워드 프로세서에서 물리 주소 2500 번지의 데이터를 삭제하라는 명령어를 내린다면, 워드 프로세서의 물리주소 한계는 1999번 이므로 예외처리를 할 수 있도록 1999번지 정보를 한계 레지스터에 저장한다. 

 

 

 

캐시 메모리

 

저장장치 계층구조

속도 향상을 위해 캐시 메모리를 사용하며, 이는 CPU와 메모리 사이 중간에 위치한 SRAM이다.

 

 

 

분리형 캐시(split cache)

코어와 가장 가까운 캐시 메모리를 L1 캐시, 그 다음을 L2, L3, ...로 부른다. 보통 분리형 캐시형태로 많이 사용한다. L1I 캐시는 명령어만 저장, L1D 캐시는 데이터만을 저장하여 접근 속도를 더 향상시킨다.

 

 

 

참조 지역성 원리(locality of reference, principle of reference)

캐시 메모리에 저장할 데이터를 예측하는 원리 중 하나이다. 다음 두 가지 명제에 기반한다

  1. 시간 지역성(temporal locality): CPU는 최근에 접근했던 메모리 공간에 다시 접근하려는 경향이 있다.
  2. 공간 지역성(spatial locality): CPU는 접근한 메모리 공간 근처를 접근하려는 경향이 있다.

ex1) 보통 프로그램에서 선언된 변수(반복문에서 반복 인덱스 변수 i = 2 등) 에는 다시 접근하려는 경향이 있을 것이다.

ex2) 메모장 프로그램에서 저장 기능, 입력 기능, 출력 기능에 해당하는 정보는 메모리의 물리 주소에서 근처에 저장되는 경향이 있을 것이다.

 

 

캐시 히트, 캐시 미스, 캐시 적중률

  • 캐시 히트: 캐시 메모리 내 데이터가 CPU에서 활용되는 경우
  • 캐시 미스: 캐시 메모리 내 데이터가 CPU에서 활용되지 않는 경우
  • 캐시 적중률: 캐시 히트 횟수 / (캐시 히트 횟수 + 캐시 미스 횟수)

 

 


 

7.  보조 기억 장치

 

하드 디스크

 

 

disk에 데이터가 N, S극의 자기장을 이용하여 저장된다. 다른말로 플래터(platter)라고 한다.

spindle이 회전하며 데이터가 있는 위치로 디스크 ARM의 헤드가 위치하도록 한다.

 

https://education.sakshi.com/en/cseit/study-material/operating-system/mass-storage-structure-44711

 

다층 구조로 되어있어 여러 플래터에 여러 개의 arm이 동시에 데이터를 읽고 쓸 수 있다.

sector, track, cylinder 등 연속된 정보를 기록한다. 보통 cylinder 내에 연속 데이터를 기록하여 최단 시간 내 데이터에 접근할 수 있도록 데이터를 저장한다.

 

https://pages.cs.wisc.edu/~powerjg/cs354-fall15/Handouts/arulraj/ppt/CS354Lecture24.pdf

 

seek time은 헤더가 플래터 지름 반경으로 움직이는 시간, rotational latency는 스핀들이 회전하는 시간, transfer time은 하드 디스크와 코어간 데이터 전송 시간을 의미한다.

 

대략적인 상대적 시간을 아래에 표시했다. 다른 시간들에 비해 하드 디스크에서 소모되는 시간이 꽤나 크다.

L1 캐시 참조 시간 0.5ns(나노초)
L2 캐시 참조 시간 5ns
메모리 참조 시간 7ns
메모리에서 1MB를 읽는 시간 250,000ns
하드 디스크 탐색 시간(seek time) 10,000,000ns
하드 디스크에서 1MB 읽는 시간(순차적읽기) 30,000,000ns
한 패킷(네트워크)이 캘리포니아<>네덜란드간 왕복하는 시간 150,000,000ns

 

링크의 영상 6분 50초 경을 보면, 실제로 하드디스크가 동작하는 모습을 볼 수 있다.

https://www.youtube.com/watch?v=p-JJp-oLx58

 

 

 

플래시 메모리(flash memory)

 

하드 디스크의 기계적, 자기적 방식과 다르게 반도체의 전기적 특성을 이용하여 데이터를 저장한다. ROM, USB 메모리, SD 카드, SSD가 모두 플래시 메모리를 기반으로 한다.

 

구조

https://flashdba.com/2014/06/20/understanding-flash-blocks-pages-and-program-erases/

 

가장 기본적인 구조는 Cell이다. Cell이 모여서 Page, Page가 모인것을 Block이라하고 그 이상부터 Plane, Die라고 부른다.

 

읽기/쓰기는 페이지 단위로 이루어지고, 삭제는 블록 단위로 이루어진다. 플래시 메모리의 가장 큰 특징이다.

 

 

 

플래시 메모리 페이지의 3가지 상태와 가비지 컬렉션

 

  • Free: 페이지가 비어있는 상태
  • Valid: 페이지에 유효한 데이터가 저장되어있는 상태
  • Invalid: 필요없는 데이터가 저장되어있는 상태

 

플래시 메모리는 데이터의 수정이 불가하고 삭제만 가능하다. 필요없는 Invalid 상태의 페이지가 있으면 가비지 컬렉션이 작동한다.

 

 

ref)트렌센드 코리아: 가비지 컬렉션의 작동원리

https://kr.transcend-info.com/embedded/technology/garbage-collection

Block A에서 a, b, c가 담긴 페이지 정보들을 삭제하면 Block A는 읽기, 쓰기 등 접근이 불가한 상태가 된다.

-> a, b, c는 invalid 상태이며 Block 단위로 삭제만 가능하므로 Block A는 삭제되지는 않았음

 

다른 정보를 저장할 때, Block A에 남아있는 d~i까지의 페이지 정보를 시스템이 읽어와서 다른(Block B)에 저장한다. 이후 invalid 데이터가 포함된 Block A를 삭제해버리는 것이 가비지 컬렉션의 기본 작동 방식이다.

 

 

 

 

 

플래시 메모리와 Cell의 타입

 

  • SLC(Single Level Cell): 한 셀당 1 비트를 저장할 수 있는 플래시 메모리이다.
  • MLC: 한 셀당 2비트 저장
  • TLC: 한 셀당 3비트 저장
  • QLC: 한 셀당 4비트 저장

-> 타입에 따라 메모리의 수명, 속도, 가격에 큰 차이가 있다.

 

 

셀당 bit가 낮을수록 수많은 데이터의 쓰기/읽기 반복이 필요하며 고성능의 빠른 저장이 필요한 경우에 사용된다.

구분 SLC MLC TLC
셀당 bit 1bit 2bit 3bit
수명 길다 보통 짧다
읽기/쓰기 속도 빠르다 보통 느리다
용량 대비 가격 높다 보통 낮다

 

플래시 메모리는 NAND 타입과 NOR 타입이 있다. 보통 대용량 저장 장치로 많이 쓰이는 타입은 NAND 타입이다.

 

 

 

 

RAID(Redundant Array of Independent Disks)

 

위에서 배운 하드 디스크나 플래시 메모리와 같은 물리적인 보조 기억 장치를 어떻게 구성할 것인가에 대한 방법론이다. 4TB의 하드디스크 1개를 사용할 수도 있으나, 1TB 하드디스크 4개를 사용할 수도 있다. 구성 방법에 따라 RAID 0 ~ RAID 6, RAID 10, RAID 50, Nested RAID등으로 나뉜다.

 

RAID 0

여러 저장 장치에 데이터를 단순 분산 저장한다. 하나의 저장 장치에 데이터를 저장하는 것에 비해 이론상으로는 저장 장치의 개수의 배수만큼 읽고 쓰는 속도가 빨라진다.

 

 

 

 

 

RAID 1

오류 상황을 대비해서 데이터의 복구를 위해 복사본을 만든다. 복사본만큼 비용이 증가한다.

 

 

 

 

RAID 4

완전한 복사본을 만드는 대신 오류를 검출하고 복구하기 위한 정보를 저장한다. 이 '오류를 검출하고 복구하기 위한 정보'를 패리티 비트(parity bit)라 한다.

 

 

*원래 패리티 비트는 오류 검출용으로만 사용하고 데이터의 복구용으로는 사용하지 않으나, RAID에서의 패리티 비트 개념은 복구까지 가능한 개념을 말한다.

 

 

 

 

RAID 5

패리티 비트 정보를 저장하는 장치에 병목 현상이 없도록 패리티 비트 정보 저장도 각 저장 장치에 분산하여 저장하는 방식이다.

 

 

 

 

 

728x90
반응형