computer structure(1): memory

이현빈·2023년 5월 23일
0

CE blog

목록 보기
18/21

Memory (기억장치)

컴퓨터는 어찌보면 입력된 데이터들을 처리하고 그 결과를 출력하는 장치라고 볼 수 있다.

데이터 처리는 데이터 등에 해당하는 여러 bit를 조작해야만 하며 이들을 저장할 장소가 필연적으로 요구된다.

컴퓨터에서 bit들을 저장하는 장소를 memory (기억장치)라고 부른다.

Memory Location and Address

memory에 대한 접근은 address를 통해 이루어진다.

  • address가 다르면 memory내의 위치가 다르다.

  • Memory의 각 1 byte별로 address를 할당하는 Byte oriented addressing이 사용된다.

위 그림에서 집들은 1byte의 같은 크기를 가지는 각각의 memory location을 의미한다.

  • 각각의 집(memory location)에는 byte address가 할당되어 있다.

  • 64bit computer의 경우 이런 memory location이 264(=n)2^{64}(=n)개 존재할 수 있다.

  • Memory Lane = Memory bus, City Center = CPU
    Memory의 address를 지정할 때 byte들을 2개, 4개, 또는 8개를 묶어서 지정하는게 일반적이다. 현재의 64bit computer에서는 8개의 byte를 묶어서 한번에 지정한다.

Memory Address and OS

64bit computer인지 32bit computer인지는 실제로는 CPU 내의 memory(기억장치)인 register의 크기로 결정된다.

64bit computer는 CPU 내의 register의 크기가 64bit이다.

memory에 저장된 값을 CPU가 접근하기 위해서 cpu내 register에 address가 저장되므로 몇 비트 컴퓨터이냐에 따라가며 memory의 한계가 결정된다.

  • 16bit computer는 memory address를 2162^{16}가지로 지정 가능하다. 이는 2bytes로 address를 지정함을 의미한다. (16bit를 word라고 자주 부름)

  • 32bit computer는 memory address를 2322^{32}가지로 지정 가능하다. 이는 4bytes로 address를 지정함을 의미한다. (32bit를 long word라고 자주 부름)

  • 64bit computer는 memory address를 2642^{64}가지로 지정 가능하다. 이는 8byte로 address를 지정함을 의미한다.

64bit computer의 경우 2642^{64} bits에 해당하는 address를 가질 수 있으나 실제 memory addressing에는 전체 64bit 중 하위 48bit만 사용한다.

  • C언어에서의 pointer variable (포인터 변수)의 크기(자료형의 크기)를 보면 해당 memory address가 어느정도 크기인지를 알 수 있다.

  • 64bit computer가 제대로 동작하려면 HW 측면 외에도 SW 적으로도 64bit가 지원되어야 한다.

  • 무엇보다 OS부터 64bit OS를 설치해야 한다.

Nonaligned Access

32bit Computer의 경우 Memory에서 32bit word 단위로 읽어들일 때 4개의 byte가 묶여서 읽어들여진다.

하지만 4개의 byte가 address 순서에 따라 묶어져서 처리되므로, 아래 그림처럼 5,6,7,8의 byte address는 하나의 word로 묶어 처리할 수 없기 때문에 2번의 access가 필요하게 된다.

  • 참고로 일반적으로 int type으로 수치 데이터를 다루는 것이 가장 빠르다.

  • 하지만 실수형 데이터(real number)를 다룰 때는 double이나 float 중 에서 골라야 한다. (정수형보다는 느림.) : 라이브러리에서 기본으로 지정된 것을 사용하는게 가장 좋다.

price/performance ratio and Access time

register

  • 속도는 최고이나 가장 비싸고 많은 데이터 저장이 어렵다. CPU 내부에 위치. ALU등이 바로 사용하는 작은 크기의 데이터를 담고 있다. (flip-flop으로 구성됨)

SRAM (Cache)

register보단 느리나 충분한 속도를 가진다. register보단 동일 가격에 보다 많은 데이터를 저장할 수 있다. CPU 내부에 위치한다. (register보다는 거리가 멀리 있으며 거리순에 따라 l1, l2, l3 등으로 나뉨
)

DRAM

주기억장치로 많이 사용된다. SRAM보다는 느리지만 가성비는 보다 낫다. 보통 RAM이라고 하면 DRAM을 가르킨다.

HDD

보조기억장치의 대표격으로 속도는 매우 느리지만 같은 비용에 매우 많은 데이터를 저장 가능하다.

SSD

HDD를 대신하는 보조기억장치로 떠오르고 있다. HDD보다 빠른 ACCESS를 보이나 비용이 아직은 HDD보다 높다.

  • capacitance (용량)은 아래로 갈수록 커진다.

  • throughout은 단위시간당 처리량(속도)로 위로 갈수록 커진다.

Byte Ordering : Little Endian and Big Endian

Jonathan Swift의 걸리버 여행기의 소인국에서 삶은 달걀을 깰 때 상대적으로 둥근 쪽(big end)과 날카로운 쪽(little end) 중 어느 쪽으로 깨는지에 따라 big endian과 little endian으로 나뉘어 대립하는 것에 유래되었다.

Little Endian

Intel CPU에서 사용된다.

word의 Most Significant Byte(MSB, 상위바이트)가 가장 높은 주소(뒤쪽주소)에 저장된다.

Little endian에서 MSB는 그림으로 표기시 가장 오른쪽에 위치한다.

Example

0x12345678을 8bit(=1byte)의 memory word가 4개를 붙여 만든 32bit 크기의 Word에 little endian으로 저장한다면 다음과 같음.

memory address0x80010x80020x80030x8003
value (hex)0x78 (LSB)0x560x340x12 (MSB)
value (bin)0111 10000101 01100011 01000001 0010
  • 1byte 내에서는 순서가 바뀌지 않는 점을 유의할 것

Big Endian

Motorola CPU (주로 unix가 설치된 RISC 시스템의 CPU)에서 사용된다.

Word의 Most Significant Bytes(MSB, 상위바이트)는 가장 낮은 주소(시작주소)에 저장된다.

Network Byte Ordering으로 네트워크에서 전송시 표준으로 사용된다.

Example

0x12345678을 8bit의 memory word가 4개를 붙여 만든 32bit 크기의 Word에 big endian으로 저장한다면 다음과 같음

memory address0x80010x80020x80030x8003
value (hex)0x12 (MSB)0x340x560x78 (LSB)
value (bin)0001 00100011 01000101 01100111 1000

Term : nuxi syndrome

16bit Word를 사용하던 시절의 일화이다.

UNIX OS를 PDP-11에서 IBM Series/1 컴퓨터로 porting할 때 byte ordering에 문제가 발생한 사건에서 유래된 용어이다.

byte ordering과 관련된 문제를 가르키는 용어

해당 사건은 영문은 한 글자가 1byte로 unix 를 출력하는 프로그램이 byte ordering이 잘못되어 nuxi 라고 출력한 것이다. (word가 2byte라 두 글자가 한 워드임.)

Note

MSB는 보통 Most Significant Byte 보다 Most Significant Bit로 더 많이 사용된다.

이 글에서는 바이트 단위로 표시하려고 전자를 취한다.

Input and Output

현재의 컴퓨터들은 memory와 I/O Device를 같은 bus로 연결 하여 정보를 주고 받는다.

Bus

컴퓨터 내에서 CPU(중앙 처리 장치)가 Primary memory (주기억장치) 및 I/O device (입출력 장치) 들과 정보를 전송하는데 사용하는 전기적 공통 선로이다.

컴퓨터 내에서 데이터(address포함) 전송은 bus를 통해 이루어진다.

  • 구조에 따른 분류 (← 현대 컴퓨터는 이 둘이 합쳐진 구조)
    System Bus : CPU와 Memory 연결 (Data line, Address line, Control line)
    I/O Bus : Memory와 다른 I/O device(or Peripherals) 연결

  • 신호의 기능에 따른 분류

    • Data Bus : CPU가 메모리나 I/O 기기에 데이터 송출 또는 읽어들일때 데이터를 전송.

    • Address Bus : CPU가 메모리나 I/O 기기의 주소 지정.

    • Control Bus : CPU가 데이터 전송 시 제어 관련 신호나 자신의 상태 정보를 알리는데 이용

  • Internal Bus(내부버스)

    • CPU 내에서 register들 연결하는 bus만을 가르키는 경우도 있으나 최근엔 memory나 video card 등의 기본적으로 내장된 component간의 통신을 지원하는 bus를 가르키는 경우가 보다 많다.
  • External Bus

    • 외부버스, CPU와 Peripherals간의 데이터 전송을 하는 bus를 가르킨다.
    • Expansions (확장버스, 다른 기능을 지원하는 장치를 연결할 때 많이 사용됨.)
    • slot 형태 (or port)라 “확장슬롯“이라고도 불린다.

External Bus의 종류

ISA (Industry Standard Architecture)

초기 확장 버스 방식이며 매우 높은 호환성을 가지나 매우 느린 속도이다.

현재 거의 사용되지 않는다.

1981 (PC/XT Bus, 8bit ISA), 1984 (PC/AT Bus, 16bit ISA)

EISA (Extended ISA)

ISA보다 향상된 기능이지만 역시 현재 거의 사용되지 않는다.

VESA (Video Electronics Standard Association)

486컴퓨터에서 사용되며 당시에는 데이터 전송 속도가 개선된 버스였으나 현재는 거의 사용되지 않는다.

PCI로 대체되었다.

PCI (Peripheral Component Interconnect)

현재 널리 쓰이는 PCI-E의 이전 (old) 버스. 하지만 PCI-E와 호환성이 없다.

plug-and-play 기능을 지원하고 bridge회로를 통해 높은 호환성을 보인다.

AGP (Advanced Graphics Port)

GPU카드 전용버스 (2000년대에 일반적으로 그래픽카드가 부착되던 port이며 현재는 PCI-E가 그 자리를 물려받음).

그래픽카드만 장착이 가능하다 (속도도 PCI-E보다 느림)

Intel이 제안했고 그래픽카드를 위한 높은 속도와 대용량 데이터 전송 능력을 보였으며 4가지의 속도 모드로 8x (AGP 3.0) 가 가장 빠른 형태이다.

AGP 1x (1997) : 66MHz Clock, 32bit/clk = 266MB/s 를 기준으로 몇 배의 속도인지를 나타낸다.

PCI-E (PCI Express)

2023 년 현재 그래픽카드 등의 고속의 데이터 전송이 요구되는 외부장치를 장착하는 port. 16x (8GB/sec)까지의 양방향 고속 데이터 전송이 가능함.

1 lane (x1) 이 기본 단위

  • x는 lane을 가르키며, x 뒤에 숫자를 표기하여 몇 개의 lane이 할당되었는지를 의미한다.

PCI 의 한계를 극복하고자 개발이 되었으나 개발 당시 가장 높은 전송대역폭을 자랑하면서 그래픽카드를 위한 포트로 많이 사용되게 된다.

PCIe 버전1레인(x1)2레인(x2)4레인(x4)8레인(x8)16레인(x16)
1.0250 MB/s500 MB/s1 GB/s2 GB/s4 GB/s
2.0500 MB/s1 GB/s2 GB/s4 GB/s8 GB/s
3.0984.6 MB/s1.97 GB/s3.94 GB/s7.88 GB/s15.75 GB/s
4.01.969 GB/s3.94 GB/s7.88 GB/s15.75 GB/s31.51 GB/s
5.03.938 GB/s7.88 GB/s15.75 GB/s31.51 GB/s63.20 GB/s
  • PCI-E 는 full duplex 이므로 실제 데이터 대역폭은 위의 숫자에서 2를 곱하면 됨.

USB

이후에 다룬다.


reference
1. https://wisetrue.tistory.com/m/173
2. mkdocs

0개의 댓글