1. Introduce
랜카드 : 네트워크 통신
사운드 카드 : 소리 데이터 처리
Instruction Set Architecture(ISA) ; 명령어 집합구조
전체적인 컴퓨터 구조 중에서 특히 CPU 가 사용하는 명령어와 관련된 설계
Intel x86-64 architecture 가 가장 널리 사용
개요
- Computer Architecture ; 컴퓨터 구조
- Instruction Set Architecture, ISA) ; 명령어 집합 구조
- General Register ; 범용 레지스터
- Segment Register ; 세그먼트 레지스터
- Flag Register ; 플래그 레지스터
- Instruction Pointer Register, IP) ; 명령어 포인터 레지스터
2. Computer Architecture and ISA
Computer Architecture
Computer Architecture (컴퓨터 구조)?
컴퓨터가 효율적으로 작동할 수 있도록 하드웨어 및 소프트웨어의 기능을 고안하고, 이들을 구성하는 방법
기능 구조에 대한 설계
컴퓨터가 연산을 효율적으로 하기 위해 어떤 기능들이 컴퓨터에 필요한지 고민하고, 설계하는 분야
-> 폰 노이만, 하버드, 수정된 하버드 구조가 있다
CPU 의 명령어에 대한 설계 : ISA
CPU 가 처리해야하는 명령어를 설계하는 분야
-> ARM, MIPS, AVR, Intel x86/ x86-64
CPU 의 하드웨어적 설계 : Micro Architecture
정의된 명령어 집합을 효율적으로 처리할 수 있도록, CPU 의 회로설계
폰 노이만 구조
Central Processing Unit, CPU ; 중앙처리장치
프로그램의 연산을 처리하고 시스템을 관리하는 컴퓨터의 두뇌
프로세스의 코드를 불러오고, 실행하고, 결과를 저장하는 일련의 과정이 일어나는 곳
- ALU (Arithmetic Logic Unit)
산술논리장치
- Control Unit
제어장치
- Register
CPU 에 필요한 데이터를 저장
memory ; 기억장치
- 주기억장치
프로그램 실행 과정에서 필요한 데이터들을 임시로 저장하기 위해서 사용
RAM (Random Access Memory)
- 보조기억장치
데이터를 장기간 보관 (운영체제, 프로그램 등)
HDD (Hard Dist Drive)
SSD (Solid State Drive)
bus ; 버스
컴퓨터 부품과 부품사이 or 컴퓨터와 컴퓨터 사이 신호전송 통로
- Data Bus
데이터 이동
- Adress Bus
주소지정
- Control Bus
읽기 / 쓰기 제어
- 랜선/ 데이터 전송 소프트웨어/ 프로토콜 ...
register 의 존재 이유
CPU 의 연산속도 >>> 기억장치와의 데이터 교환속도
=> 병목현상 발생
즉, 교환속도를 획기적으로 단축하기 위해 "register", "Cache" 라는 저장장치가 CPU 내에 있는것!
ISA (Instruction Set Architecture)
CPU 가 해석하는 명령어의 집합
ISA 의 다양성
모든 컴퓨터가 동일한 수준의 연산 능력을 요구하지 않으며, 컴퓨팅 환경도 다양하기 때문
3. x86-64 Architecture
x64 Architecture == Intel 의 64bit CPU Architecture
Intel 의 32bit CPU Architecture 인 IA-32 를 64bit 환경에서 사용할 수 있도록 확장
대다수의 개인용 컴퓨터들은 Intel 의 x64 CPU 를 사용
n bit Architecture
n: CPU 가 한번에 처리할 수 있는 데이터의 크기
(n == WORD)
WORD : CPU 가 이해할 수 있는 데이터의 단위
WORD 가 크면 CPU 가 제공할 수 있는 가상메모리의 크기도 크기 때문에 소프트웨어의 최고 성능을 낼 수 있다.
x86-64 Architecture: Register
CPU 가 데이터를 빠르게 저장하고 사용할 때 사용하는 저장소
산술 연산에 필요한 데이터를 저장하거나 주소를 저장하고 참고하는 등의 용도로 사용
General Register ; 범용 레지스터
- rax (accumulator register)
함수의 반환값
- rbx (base register)
.
- rcx (counter register)
반복문의 반복 횟수, 각종 연산의 시행 횟수
- rdx (data register)
.
- rsi (source index)
데이터를 옮길 때 원본을 가리키는 포인터
- rdi (destination index)
데이터를 옮길 때 목적지를 가리키는 포인터
Segment Register ; 세그먼트 레지스터
6가지 레지스터 존재 / 크기는 각 16bit
- cs
code memory 영역 가리킬 때
- ss
stack memory 영역 가리킬 때
- ds
data memory 영역 가리킬 때
- es
- fs
- gs
es, fs, gs 는 범용적인 용도
IP (Instruction Pointer Register) ; 명령어 포인터 레지스터
CPU 가 어느 부분의 코드를 실행할 지 가리키기 위함
x64 Architecture 의 명령어 레지스터는 rip (크기 : 8byte)
Flag Register
프로세서의 현재 상태저장
x64 Architecture 의 플래그 레지스터는 RFLAGS (크기 : 64bit)
- CF (Carry Flag)
부호 없는 수의 연산 결과가 비트의 범위를 넘을 경우 설정된다
- ZF (Zero Flag)
연산의 결과 == 0 일 때
- SF (Sign Flag)
연산의 결과 == 음수
- OF (Overflow Flag)
부호 있는 수의 연산 결과가 비트의 범위를 넘을 경우 설정된다
레지스터 호환