<컴퓨터 구조(Computer Architecture)>
컴퓨터가 효율적으로 작동할 수 있도록 하드웨어 및 소프트웨어의 기능을 고안하고, 이들을 구성하는 방법.
컴퓨터 구조의 세부 분야 ✔️
|
<출처 : 드림핵>
<폰 노이만 구조>
컴퓨터의 세 가지 핵심 기능 : 연산, 제어, 저장
연산과 제어 : 중앙처리장치(Central Processing Unit, CPU), 저장 : 기억장치(memory), + 장시간에 데이터나 제어 신호를 교환할 수있도록 버스(bus)라는 전자 통로를 사용.
*중앙처리장치 🧠
CPU는 프로그램의 연산을 처리하고 시스템을 관리하는 컴퓨터의 두뇌.
- ALU(Arithemetic Logic Unit) : 산술/논리 연산을 처리하는 산술논리장치
- 제어장치(Control Unit) : CPU를 제어하는 제어장치
- 레지스터(Register) : CPU에 필요한 데이터를 저장하는 레지스터
*기억장치 💾
컴퓨터가 동작하는데 필요한 여러 데이터를 저장하기 위해 사용. 용도에 따라 주기억장치와 보조기억장치로 분류.
<주기억장치>
프로그램 실행과정에서 필요한 데이터들을 임시로 저장하기 위해 사용. ex) 램(RAM, Random-Accesss Memory)
<보조기억장치>
운영체제, 프로그램 등과 같은 데이터를 장기간 보관하고자 할 때 사용. ex) 하드 드라이브(HDD, Hard Disk Drive), SSD(Solid State Drive)
*버스 🚌
컴퓨터 부품과 부품 사이 또는 컴퓨터와 컴퓨터 사이에 신호를 전송하는 통로. ex) 데이터가 이동하는 데이터 버스, 주소를 지정하는 주소 버스, 읽기/쓰기를 제어하는 제어 버스 등이 있음.
<명령어 집합 구조(Instruction Set Architecture, ISA)>
CPU가 해석하는 명령어의 집합. 우리가 여기서 배울것은 x86-64 아키텍처
<x86-64 아키텍처>
현재 대다수 개인용 컴퓨터에 탑재되어 있는 아키텍처 기반.
여기서 '64비트 아키텍처', '32비트 아키텍처'에서 64와 32는 CPU가 한 번에 처리할 수 있는 데이터의 크기를 의미함. 컴퓨터 과학에서는 이를 CPU가 이해할 수 있는 데이터의 단위라는 의미. => "WORD"
현재의 PC에서는 대부분 64비트 아키텍처의 CPU를 사용하는데, 이는 32비트 아키텍처의 CPU가 제공할 수 있는 가상메모리의 크기가 작기 때문. 32비트 아키텍처는 4,294,967,296(=4기가 바이트)가 최대로 제공 가능한 가상메모리의 크기.
하지만 64비트 아키텍처는 이론상 16엑사 바이트까지 제공 가능.
<x86-64 아키텍처 : 레지스터>
레지스터는 CPU가 데이터를 빠르게 저장하고 사용할 때 이용하는 보관소이며, 산술 연산에 필요한 데이터를 저장하거나 주소를 저장하고 참조하는 등 다양한 용도로 사용됨.
- 범용 레지스터 🧺
주용도는 있으나, 그 외의 다양한 용도로 사용될 수 있는 레지스터.
이름 주용도
rax (accumulator register) | 함수의 반환 값 |
rbx (base register) | x64에서는 주된 용도 없음 |
rcx (counter register) | 반복문의 반복 횟수, 각종 연산의 시행 횟수 |
rdx (data register) | x64에서는 주된 용도 없음 |
rsi (source index) | 데이터를 옮길 때 원본을 가리키는 포인터 |
rdi (destination index) | 데이터를 옮길 때 목적지를 가리키는 포인터 |
rsp (stack pointer) | 사용중인 스택의 위치를 가리키는 포인터 |
rbp (stack base pointer) | 스택의 바닥을 가리키는 포인터 |
- 세그먼트 레지스터🗂️
코드 영역과 데이터, 스택 메모리 영역을 가리킬 때 사용되고, 나머지 레지스터는 운영체제 별로 용도를 결정할 수 있도록 범용적인 용도로 제작된 세그먼트 레지스터
- 명령어 포인터 레지스터👇
CPU가 어느 부분의 코드를 실행할지 가리키는 역할
- 플래그 레지스터🏳️🏴
프로세서의 현재 상태를 저장하고 있는 레지스터.
플래그 의미
CF(Carry Flag) | 부호 없는 수의 연산 결과가 비트의 범위를 넘을 경우 설정 됩니다. |
ZF(Zero Flag) | 연산의 결과가 0일 경우 설정 됩니다. |
SF(Sign Flag) | 연산의 결과가 음수일 경우 설정 됩니다. |
OF(Overflow Flag) | 부호 있는 수의 연산 결과가 비트 범위를 넘을 경우 설정 됩니다. |
플래그를 사용하는 간단한 예로, 3의 값을 갖는 a와 5의 값을 갖는 b가 있을 때, a에서 b를 빼는 연산을 하면, 연산의 결과가 음수이므로 SF가 설정됩니다. 그러면 CPU는 SF를 통해 a가 b보다 작았음을 알 수 있습니다.
#출처 : 드림핵