[아키텍처(Architecture)]
아키텍처는 시스템의 물리적 또는 기능적 구조를 말한다. 즉, 서비스의 동작 원리를 나타내는 것. 이 포스트에서는 CPU/마이크로 아키텍처에 대해 다룬다.
아키텍처의 설계 과정에는 정책의 변화, 인력 문제 등의 내부 요인 뿐만 아니라 유저의 행동 경향, 소프트웨어의 동향 및 업데이트 현황 등 외부 요인까지 종합적으로 고려해 다양한 변수에 대응할 수 있도록 하는 것이 특징이다.
[마이크로 아키텍처(Micro Architecture)]
CPU 아키텍처는 핵심적으로 CPU 내에 탑제될 코어들의 위치 또는 캐시메모리 등의 구송요소 배치를 하기 위한 밑바탕이다. 즉, 납땜이 이루어지는 트랜지스터 간의 간격이나, 프로세서 내부의 각 트랜지스터 개수가 늘어나고 CPU 자체의 크기를 줄이는 등 포괄적인 설계 내용을 말하며, 이는 제조사에 따라 달리 정의된다.
그밖의 CPU(마이크로 프로세서)의 분류 기준
1) CISC or RISC 분류
2) 사용되는 용도와 시장에 따른 분류
3) 성능에 따른 분류
- 용어 정리
CISC(Complex Instruction Set Computer)
: 명령의 수가 많다(100-250)
: 다양한 주소지정 모드(Addressing Mode)가 있다(5-20)
: 명령어의 길이가 가변적이다
: 메모리에서 피연산자(Operand)를 조작하는 명령어들이 많다.
RISC(Reduced Instrutction Set Computer)
: 명령의 수가 적다(30-100)
: 주소지정모드가 적다
: 명령어 길이가 고정적이다(word)
: 메모리를 액세스하는 명령은 LOAD, STORE 뿐이다.
: 모든 피연산자는 CPU내의 레지스터에서 조작된다.
: 하나의 사이클에 하나의 명령어 실행이 가능하다.
[마이크로 아키텍처의 종류]
자료조사 중 알게된 사실인데, 아키텍처들은 모두 특허를 내는 방식으로 고유성을 지니는 모양이다.
x86과 m68k를 제외한 나머지는 모두 RISC 구현쳬들이다.
Intel
x86
- 32bit CPU, CISC
- 현재 PC 프로그램 대부분이 해당 아키텍처를 지원
- Windows, Linux, Mac OS, BigSur
x86_64(amd64)
- 64bit CPU, x86과 호환, RISC
- 실 제조사는 AMD이나 Intel과 협업하여 둘 다 사용
- Windows, Linux, Mac OS, BigSur
ARM
arm
- 32bit CPU, RISC
- x86과 구조가 달라 호환x
- Linux, Mac OS(Monterey~), Android, iOS, etc(공유기 및 IoT 기기),.
arm64(arm64/v8)
- 64bit CPU, 32bit arm과 호환, RISC
- Linux, Mac OS(Monterey~), Android, iOS, etc(공유기 및 IoT기기),.
ETC
PowerPC
- 32/64bit CPU, RISC
- AIM(Apple, IBM, 모토로라) 설계
- 슈퍼컴퓨터(+고성능 컴퓨팅 시스템), 게임 콘솔, 임베디드 시스템
MIPS
- 32/64bit CPU, RISC
- 실리콘 그래픽스
- 임베디드 시스템, 윈도우 CE장치, 시스코 시스템즈 라우터, 게임 콘솔(플스, 닌텐도 등)
SPARC
- 32/64bit CPU, RISC
- Sun Microsystems -> Oracle
- 대형 SMP서버, 워크스테이션, NeXTSTEP, 리눅스, FreeBSD, OpenBSD, NetBSD
Alpha
- 64bit CPU, RISC
- DEC가 MIPS 아키텍처를 기반으로 설계, 지금은 단종되었다.
- 32bit VAX 프로세서를 대체하기 위에 개발됨
m68k
- 16/32bit CPU, CISC
- Motorola 설계
- 매킨토시128k, Amiga, Atari ST, X68000, Sega Genesis/Mega Drive(1988)
위처럼 흔히 x86, amd64, arm로 거론 되는 것이 CPU 아키텍처의 이름이다. 각 소프트웨어는 실행되기 위해 실행 환경에 맞는 형태로 컴파일 되거나 동작 환경이 갖춰져야한다. 인터넷에 배포된 소프트웨어를 사용자가 내려받아 실행 환경에 맞게 컴파일하여 사용하기 번거롭기 때문에 최근에 와서는 온갖 라이브러리로 사전 컴파일 하여 배포하는 경우가 많다. 이때 사용되는 라이브러리는 특정 CPU 아키텍처에 맞게 사전 컴파일 되어있는데, 이는 다음과 같은 문제로 이어진다.
그중에 대표적인 arm과 x86에 대해 얘기해보자면, 예전에는 CPU 시장을 인텔이나 AMD가 점유하여 한가지 CPU 아키텍처(x86, x86_64)만 따르면 됐었지만, 현재 ARM 서버가 등장하면서 고려해야할 것이 많아졌다. 예를 들어, 모바일 앱의 경우 ARM 아키텍처를 따라 만들어진다. PC역시 M1 Mac을 제외한 대부분의 소프트웨어가 x86_64 아키텍처를 기반으로 만들어진다.
이러한 이유 때문에 모바일 앱이 PC에서 실행되지 않는 것이고, ARM 아키텍처를 따르는 M1 Mac 경우에만 iOS 용 모바일 앱이 에뮬레이터 없이 돌아가는 것이다. Windows에서 ARM 아키텍처를 지원할 버전을 개발 중이고, 베타 버전도 존재하나 이미 PC는 인텔, 핸드폰이나 기타 소형 기기는 ARM이라는 인식이 강하게 박힌 이상 실현 가능성은 없어보인다.
[참고자료]
https://velog.io/@480/이제는-개발자도-CPU-아키텍처를-구분해야-합니다
https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=shakey7&logNo=221427342275
https://ko.wikipedia.org/wiki/%EB%A7%88%EC%9D%B4%ED%81%AC%EB%A1%9C%ED%94%84%EB%A1%9C%EC%84%B8%EC%84%9C
https://ko.wikipedia.org/wiki/SPARC
https://ko.wikipedia.org/wiki/DEC_%EC%95%8C%ED%8C%8C
https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=blueyear77&logNo=13774069 (중요)
https://dad-rock.tistory.com/248
https://en.wikipedia.org/wiki/Motorola_68000
'System & Reversing > 필기' 카테고리의 다른 글
BOF(Buffer Overflow) 개요 및 동작 원리 (0) | 2023.03.16 |
---|---|
x86, x64 차이점 및 구분 (0) | 2023.03.16 |
gcc 컴파일러 (+ .so, .a, .o, .c, 비트 연산 내장 함수) (0) | 2023.03.10 |
dll 파일이란? (+ lib과의 차이점) (0) | 2023.03.10 |
어셈블리 핸드레이와 함수 프롤로그/에필로그(+ 스택 프레임) (0) | 2023.03.10 |