일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- Docker Compose
- revert
- 파이썬
- stash
- onicecandidate
- RTCP
- kurento
- kubernetes
- 6.6.0
- Docker
- 도커
- 자바스크립트
- 리눅스
- 7.0.0
- 기초
- Python
- 위코드
- 표준출력
- 쿠버네티스
- fastapi
- docstring
- corsmiddleware
- Dockerfile
- underscore
- 명령어
- 미니큐브
- minikube
- 독스트링
- JavaScript
- 표준에러
- Today
- Total
Devlog
x86과 arm에 대해서 본문
개발을 하다 보면 특정 소프트웨어나 라이브러리 등을 다운로드할 때 Window, Ubuntu, Mac OS와 같이 운영체제 별로 버전을 나누고, 또한 그 내부에서 x86, x86-64, arm과 같이 카테고리를 나누어 제공하는 걸 보았다. 이들을 CPU 아키텍처라고 한다는데 사실 이에 대해 잘 모르고 있었다. 이 둘은 어떤 차이점이 있는지 간단히 알아보도록 하자.
ISA(Instruction set architecture)
이 둘에 대한 차이를 알기 위해서는 먼저 ISA 개념에 대해 알아야 한다. ISA는 명령어 집합 구조로 CPU가 이해할 수 있는 기계어 명령어라고 한다. 기계어는 저급 언어로 수 많은 0과 1로 이루어진 이진화된 숫자의 집합이라고 할 수 있다.
실질적으로 컴퓨터는 이러한 기계어를 인식하여 주어진 명령을 수행하지만 사람이 이진수로 컴퓨터에 명령을 내리기 어려워 이를 대응시켜 만든 언어가 어셈블리어 이며, 여기서 좀 더 사람에 가까운 언어로서 만들어진 게 C, C++, C#, Java와 같은 고급 언어이다. 각 고급 언어들은 컴파일(Compile) 과정을 거쳐 어셈블리어, 기계어로 번역된다.
각 CPU는 각자 다른 ISA를 가지고 있어 이해하는 기계어가 다르기 때문에 소프트웨어를 다운받을 때 각 CPU별로 구분된 버전을 제공하는 것이다.
x86과 arm의 탄생과 특징
x86은 인텔(Intel)에서 최초 개발한 CPU로서 이들과 호환되는 ISA를 통칭하여 부르는 말이다.
기본적으로 x86은 CISC(Complex Instruction Set Computer)를 채택하였다. CISC은 보다 복잡한 명령어 집합을 가지는 CPU 아키텍처를 말한다. 명령어 자체가 복잡하기에 명령어를 해석하는데 시간이 오래 걸리며, 수많은 트랜지스터를 필요로 하였다. 하지만 명령어의 수가 더 적어지고, 단순하여 고급 언어가 존재하지 않아 손으로 어셈블리어로 개발을 하던 과거에는 큰 인기를 얻을 수 있었다.
그래서 탄생 이후 계속해서 성장해나가며 매우 성공적인 ISA가 되었으며, 경쟁사에서 다른 아키텍처를 사용한 프로세서들이 개발되었지만 x86의 상대가 되지못했다. 대표적으로 인텔과 AMD가 x86 아키텍처를 채택한 프로세스들을 내놓으며 x86의 독주가 계속된다.
그리고 이와 대적하는 arm에서 만든 arm 아키텍처가 있다. arm에서 만든 해당 CPU는 기본적으로 RISC(Reduced Instruction Set Computer)를 채택하였다. RISC는 CISC에 비해 복잡한 명령어의 개수를 줄임으로서 명령어의 해석시간이 짧았고, 트랜지스터의 개수가 적어 전력 소모가 상대적으로 적었다.
하지만 앞서 말했듯이 당시 과거에는 어셈블리어를 손으로 직접 코딩하던 시절이었기에 단순 명령어를 여러 번 써야 하는 arm 아키텍처보다 x86 아키텍처가 더 선호되었다.
arm의 반격
이렇게 CPU 시장을 독점하다싶이 하던 x86 아키텍처가 예상치 못한 변화를 맞기 시작했다. 그것은 스마트폰과 같은 모바일 기기들이 대세로 떠오르면서부터이다. 모바일 기기는 크기가 작기에 수용할 수 있는 배터리 용량에 한계가 있었고, 전력소모가 적은 CPU가 필요하게 되었다. 그래서 상대적으로 전력소모가 적은 arm 아키텍처의 CPU가 주목을 받게 되었다.
이뿐만 아니라 당시 x86 아키텍처의 CPU는 모든 설계부터 생산까지 인텔이 맡아서 하였으며 완제품을 판매해 왔다. 이에 비해 arm의 CPU는 생산된 완제품을 판매하는 것이 아닌 기본적인 구조의 라이선스를 판매하고, 해당 라이선스를 구매한 고객이 해당 뼈대에 본인들의 입맛에 맞게 커스텀하여 CPU를 생산하는 방식이었다. 그래서 당시 모바일 기기의 CPU를 생산하던 애플, 퀄컴 등의 기업에서 arm 기반의 CPU들을 생산하면서 점유율을 끌어올리기 시작하였고 사실상 모바일 기기는 거의 모두가 arm 프로세서를 이용한다.
그리고 각종 고급 언어들이 등장하며 컴파일이라는 개념이 생기면서 개발자가 더 이상 어셈블리어를 직접 쓸 필요가 없어졌고, 애플이 고효율성을 가진 arm기반의 M1칩을 발표하면서 소프트웨어를 생산하는 서버 부분에서도 x86을 위협하기 시작했다.
소프트웨어를 생산하던 서버 쪽에서의 점유율은 아직까지는 x86을 넘기기는 어려웠다. 왜냐하면 이미 과거부터 RISC기반으로 만들어 놓은 레거시를 arm으로 전환하는 것은 생각보다 그렇게 간단한 작업이 아니였고, 또 굳이 그러한 어려운 작업을 통해 arm으로 전환해야 할 만큼의 필요성이 없었기 때문이라 생각된다.
정리
이제까지 두 아키텍처의 역사와 차이점에 대해 아주 간단하게 알아보았다. 사실 제대로 알려면 좀 더 깊숙하게 알아야 하는게 사실이지만 주 업무가 프로그래머인 입장에서는 이 정도의 차이점만 알고 가도 큰 문제는 없을 것이라고 생각된다. 그리고 현재는 두 아키텍처가 서로의 장점을 배워가며 경계가 희미해지고 있다고 한다.
참조
https://ko.wikipedia.org/wiki/%EB%AA%85%EB%A0%B9%EC%96%B4_%EC%A7%91%ED%95%A9
https://www.youtube.com/watch?v=G-fJJ-OHLDw