Memory
Memory Location and Address
- memory access는 address를 통해 이루어짐
- address가 다르면 memory 내 위치가 다름
- Memory의 1byte 별로 address를 할당하는 Byte oriented addressing이 사용됨.
- 위 그림에서 집은 1byte의 같은 크기를 가지는 각각의 memory location을 의미함.
- 각각의 memory location에는 byte address가 할당되어 있음.
- 64bit computer의 경우 이런 memory location이 264(=n)개 존재할 수 있음.
- Memory Lane = Memory Bus, City Center = CPU
- Memory address를 지정할 때는 일반적으로 byte들을 묶어서 지정함.
Memory Address and OS
- 64bit computer인지 32bit computer인지는 CPU 내의 register의 크기로 결정
- memory에 저장된 값을 CPU가 접근하기 위해서 CPU내 register에 address가 저장되므로 몇 bit computer이냐에 따라 가용 memory의 한계가 결정됨.
- 16bit computer는 memory address를 216가지로 지정 가능. 이는 2bytes로 address를 지정함을 의미
- 32bit computer는 memory address를 232가지로 지정 가능. 이는 4bytes로 address를 지정함을 의미
- 64bit computer는 memory address를 264가지로 지정 가능. 이는 8bytes로 address를 지정함을 의미
- 64bit computer의 경우, 264bytes에 해당하는 address를 가질 수 있으나 실제 memory addressing에는 전체 64bit 중 하위 48bit만 사용함.
- 64bit computer가 제대로 동작하기 위해서는 HW 측면 외에도 SW 적으로도 64bit가 지원되어야 함. 64bit OS를 설치해야 함.
Nonaligned Access
- 32bit computer의 경우 4개의 byte가 address 순서에 따라 묶여서 처리되기 때문에 위 그림의 5,6,7,8 byte address는 하나의 word로 묶어 처리할 수 없어 2번의 access가 필요함.
int
type으로 수치 데이터를 다루는 것이 가장 빠름
- 실수형 데이터(real number)를 다룰 때는
double
, float
중에서 골라야 함. => 라이브러리에서 기본으로 지정된 것을 사용하는 것이 좋음.
Register
- 속도는 매우 빠르지만 가장 비싸고 많은 데이터 저장이 어려움.
- CPU 내부에 위치하며 ALU 등이 바로 사용하는 작은 크기의 데이터를 담고 있음. (filp-flop으로 구성됨)
SRAM(Cache)
- register에 비해서는 느리지만 충분한 속도를 가짐
- register보단 동일한 가격에 보다 많은 데이터를 저장할 수 있음.
- CPU 내부에 위치 (register보다는 멀리 있음)
DRAM
- 주기억장치로 많이 사용됨.
- SRAM보다는 느리지만 가성비적인 측면에서는 보다 나음.
- 보통 RAM이라 하면 DRAM을 가리킴.
HDD
- 보조기억장치의 대표격으로 속도는 많이 느린편
- 같은 비용에 매우 많은 데이터 저장이 가능함
SSD
- HDD를 대신하는 보조기억장치로 떠오르는 추세
- HDD보다 빠른 access를 보이나 비용이 아직은 HDD보다 높음.
- 아래로 갈수록 capacitance(용량)이 커짐
throughout
은 단위시간당 처리량으로 위로 갈수록 커짐.
Byte Ordering
Little Endian
- Intel CPU에서 사용
- word의 MSB가 가장 높은 주소(뒤쪽 주소)에 저장됨.
- Little endian에서 MSB는 그림으로 표기 시 가장 오른쪽에 위치
Example
0x01020304
을 8bit의 memory word 4개를 붙여 만든 32bit 크기의 word에 little endian으로 저장할 경우,
- 첫 번째 address에 LSB에 0x04를 저장함.
- 1byte 내에서는 순서가 바뀌지 않음
Big Endian
- Motorola CPU에서 사용
- Word의 MSB는 가장 낮은 주소에 저장됨.
- Network Byte Ordering으로 네트워크에서 전송 시 표준으로 사용됨.
Example
0x01020304
을 8bit의 memory word 4개를 붙여 만든 32bit 크기의 word에 big endian으로 저장할 경우,
- 첫 번째 address에 MSB인 0x01을 저장함.
- 현재 computer는 memory와 I/O device를 같은 bus로 연결하여 정보를 주고 받음.
Bus
- CPU가 Primary memory 및 I/O device들과 정보를 전송하는데 사용하는 전기적 공통 선로
- computer에서 address를 포함한 데이터 전송은 bus를 통해 이루어짐.
구조에 따른 분류
System Bus
: CPU와 Memory 연결(Data line, Address line, Control line)
I/O Bus
: Memory와 다른 I/O device 연결
- 현대 computer는 위 둘이 합쳐진 구조임.
신호의 기능에 따른 분류
Data Bus
: CPU가 Memory나 I/O device에 데이터 송출 또는 읽어들일 때 데이터를 전송
Address Bus
: CPU가 Memory나 I/O device 주소 지정
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)
- 초기 확장 버스 방식
- 매우 높은 호환성. 그러나 매우 느린 속도
- 당연하게도 현재 거의 사용되지 않음
- EISA(Extended ISA)
- ISA보다 향상된 기능
- 하지만 이 역시도 현재 거의 사용되지 않음.
- VESA(Video Electronics Standard Association)
- 486 computer에서 사용됨.
- 데이터 전송 속도가 개선된 버스였으나 현재 거의 사용되지 않음.
PCI
로 대체됨
- PCI(Peripheral Component Interconnect)
- 현재 널리 쓰이는
PCI-E
의 이전 bus
- PCI-E와 호환성은 없음.
- plug and play 기능을 지원하고 bridge 회로를 통해 높은 호환성을 보임.
- AGP(Advanced Graphics Port)
- GPU카드 전용버스가 그 자리를 물려받음
- 그래픽 카드만 장착 가능
- PCI-E
- 현재 그래픽 카드 등의 고속의 데이터 전송이 요구되는 외부장치를 장착하는 port
- 16x(8GB/sec)까지 양방향 고속 데이터 전송이 가능함.
- PCI의 한계를 극복하고자 개발되었지만 개발 당시 가장 높은 전송대역폭을 자랑하며 그래픽 카드를 위한 port로 많이 사용되게 됨.
PCI-E ver | 1 lane(x1) | 2 lane(x2) | 4 lane(x4) | 8 lane(x8) | 16 lane(x16) |
---|
1.0 | 250MB/s | 500MB/s | 1GB/s | 2GB/s | 4GB/s |
2.0 | 500MB/s | 1GB/s | 2GB/s | 4GB/s | 8GB/s |
3.0 | 984.6MB/s | 1.97GB/s | 3.94GB/s | 7.88GB/s | 15.75GB/s |
4.0 | 1.969GB/s | 3.94GB/s | 7.88GB/s | 15.75GB/s | 31.51GB/s |
5.0 | 3.938GB/s | 7.88GB/s | 15.75GB/s | 31.51GB/s | 63.2GB/s |
- PCI-E는 full duplex(전이중 전송방식;데이터를 양방향으로 동시에 송수신)이므로 실제 데이터 대역폭은 위의 숫자에 2를 곱하면 됨.
References:
1) https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=techref&logNo=222246966805
2) https://softtone-someday.tistory.com/20
3) https://dsaint31.me/mkdocs_site/CE