728x90
컴퓨터 구조와 명령어 집합 구조
컴퓨터 구조
- 컴퓨터가 효율적으로 작동할 수 있도록 HW 및 SW의 기능을 고안하고, 이들을 구성하는 방법을 말함
- 컴퓨터의 기능 구조에 대한 설계, 명령어 집합 구조, 마이크로 아키텍처, 기타 하드웨어 및 컴퓨팅 방법에 대한 설계 등 포함
- ‘컴퓨터의 기능 구조에 대한 설계’ : 컴퓨터가 연산을 효율적으로 하기 위해 어떤 기능들이 컴퓨터에 필요한지 고민하고 설계하는 분야
- 폰노이만 구조, 하버드 구조, 수정된 하버드 구조
- 명령어 집합 구조 : CPU의 명령어에 대한 설계 → CPU가 처리해야하는 명령어를 설계하는 분야
- ARM, MIPS, AVR, 인텔 X86 및 x86-64
- 마이크로 아키텍처 : CPU의 하드웨어적 설계 → 정의된 명령어 집합을 효율적으로 처리할 수 있도록, CPU의 회로를 설계하는 분야
- 컴퓨터 구조의 세부 분야
- 기능 구조의 설계
- 폰 노이만 구조
- 하버드 구조
- 수정된 하버드 구조
- 명령어 집합구조
- x86, x86-64
- ARM
- MIPS
- AVR
- 마이크로 아키텍처
- 캐시 설계
- 파이프라이닝
- 슈퍼 스칼라
- 분기 예측
- 비 순차적 명령어 처리
- 하드웨어 및 컴퓨팅 방법론
- 직접 메모리 접근
- 기능 구조의 설계
폰 노이만 구조
- 🧠 중앙처리장치
- 시스템을 관리하는 컴퓨터의 두뇌
- 프로세스의 코드를 불러오고, 실행하고, 결과를 저장하는 일련의 모든 과정이 CPU에서 일어남
- 산술/논리 연산을 처리하는 산술논리 장치 + CPU를 제어하는 제어장치 + 데이터를 저장하는 레지스터로 구성
- 💾 기억장치
- 컴퓨터가 동작하는데 필요한 여러 데이터를 저장하기 위해 사용
- 용도에 따라 주기억장치와 보조기억장치로 분류
- 주기억 장치 : 프로그램 실행과정에서 필요한 데이터들을 임시로 저장하기 위해 사용
→ RAM(Random-Access Memory) - 보조기억장치 : 운영체제, 프로그램 등과 같은 데이터를 장기간 보관하고자 할 때 사용
- → HDD(Hard Disk Drive), SSD(Solid State Drive)
- 주기억 장치 : 프로그램 실행과정에서 필요한 데이터들을 임시로 저장하기 위해 사용
- 🚌 버스
- 컴퓨터 부품과 부품 사이 또는 컴퓨터와 컴퓨터 사이에 신호를 전송하는 통로
- 종류
- 데이터 버스 : 데이터가 이동
- 주소 버스 : 주소를 지정
- 제어 버스 : 읽기/쓰기를 제어
- 이외에도 랜선이나 데이터 전송 소프트웨어, 프로토콜 등도 버스라고 불림
명령어 집합 구조(ISA, Instruction Set Architecture)
- CPU가 해석하는 명령어의 집합
- 종류 : IA-32, x86-64(x64), MIPS, AVR 등
- x86-64 : 고성능 프로세서를 설계하기 위해 사용
- 많은 전력 소모하고 발열 심함
- 데스크톱, 랩톱에 적합
- ARM, MIPS, AVR
- 전력소모와 발열이 적음
- 공유기, 인공지능 스피커 등 임베디드 기기 및 스마트폰에서 사용
- x86-64 : 고성능 프로세서를 설계하기 위해 사용
- → 다양한 ISA가 개발되고 사용되는 이유 : 모든 컴퓨터가 동일한 수준의 연산 능력을 요구하지 않으며 컴퓨팅 환경도 다양함
x86-64 아키텍처
x86-64 아키텍처
- 인텔의 64비트 CPU 아키텍처
- 인텔의 32비트 CPU 아키텍처인 IA-32를 64비트 환경에서 사용할 수 있도록 확장한 것
- 대다수의 개인용 컴퓨터들이 사용
n 비트 아키텍쳐
- n : CPU가 한번에 처리할 수 있는 데이터의 크기
- = WORD : CPU가 이해할 수 있는 단위라는 의미
WORD가 크면 유리한 점
- 현대의 PC는 대부분 64를 사용 → 32는 CPU가 제공하는 가상메모리의 크기가 작기 떄문
- 32비트 아키텍처에서는 4GB가 최대로 제공 가능한 가상 메모리의 크기
- 6비트 아키텍처에서는 이론상 16엑사바이트(1.6천만TB)의 가상 메모리를 제공 가능
x86-64 아키텍처: 레지스터
- CPU가 데이터를 빠르게 저장하고 사용할 때 이용하는 보관소
- 산술 연산에 필요한 데이터를 저장하거나 주소를 저장하고 참조하는 등 다양한 용도로 사용
- 종류
- 범용 레지스터
- 주용도는 있으나, 그 외의 다양한 용도로 사용될 수 있는 레지스터
- x86-64에서 각각의 범용 레지스터는 8바이트를 저장할 수 있음
이름 주용도 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) 스택의 바닥을 기리키는 포인터 - <범용 레지스터의 주용도>
- 세그먼트 레지스터
- x64 아키텍처 : cs, ss, ds, es, fs, gs 총 6가지 존재, 각 레지스터의 크기는 16비트
- x64로 아키텍처가 확장되면서 용도에 큰 변화가 생긴 레지스터
- x64에서 cs, ds, ss 레지스터는 코드 영역과 데이터, 스택 메모리 영역을 가리킬 때 사용되고, 나머지 레지스터는 운영체제 별로 용도를 결정할 수 있도록 범용적인 용도로 제작
- 명령어 포인터 레지스터
- CPU가 어느 부분의 코드를 실행할지 가리킴
- x64 아키텍처 : rip, 크기는 8바이트
-
- 프로세서의 현재 상태를 저장
- x64 아키텍처 : RFLAGS, 64비트 크기 → 실제로는 20여개 비트만 사용
- 깃발을 올리고, 내리는 행위를 통해 CPU의 현재 상태를 표현
- <플래그 레지스터의 종류>
플래그 의미 CF(Carry Flag) 부호 없는 수의 연산 결과가 비트의 범위를 넘을 경우 설정 됨 ZF(Zero Flag) 연산의 결과가 0일 경우 설정됨 SF(Sign Flag) 연산의 결과가 음수일 경우 설정됨 OF(Overflow Flag) 부호 있는 수의 연산 결과가 비트 범위를 넘을 경우 설정
- 범용 레지스터
요약
- 범용 레지스터 : 주 용도는 있으나, 그 외의 용도로도 자유롭게 사용할 수 있는 레지스터
- rax, rbx, rcx, rdx, rsi, rdi, rsp, rbp, r8-15
- 세그먼트 레지스터 : 과거에는 메모리 세그멘테이션이나, 가용 메모리 공간의 확장을 위해 사용됐으나, 현재는 주로 메모리 보호를 위해 사용되는 레지스터
- cs, ss, ds, es, fs, gs
- 플래그 레지스터 : CPU의 상태를 저장하는 레지스터
- 명령어 포인터 레지스터 : CPU가 실행해야할 코드를 가리키는 레지스터
- rip
728x90
'study > 보안' 카테고리의 다른 글
x86 어셈블리 언어 - 주요 명령어 정리 (2) (0) | 2023.09.08 |
---|---|
x86 어셈블리 명령어(1) 리뷰 퀴즈 (0) | 2023.09.08 |
x64 어셈블리 언어 - 주요 명령어 정리 (1) (0) | 2023.09.08 |
윈도우 메모리 구조 (0) | 2023.09.07 |
정적분석 vs 동적분석 (0) | 2023.09.07 |