애플은 왜 인텔 대신 ARM을 선택했나 ?

 

ARM 아키텍처에 대해 알아보자

 

 

 

Compilation: 우리가 쓴 코드를 CPU와 가장 가까운 언어로 변환해야함

즉, 프로세서가 쉽게 0과 1로 바꿀 수 있는 언어

 

컴파일을 하고 난 언어를 어셈블리 언어라 부른다.

 

 

어셈블리 언어
  • 프로그래밍을 실행하고자 하는 스텝들을 기계에게 하나하나 설명을 한다
  • 3가지 명령어가 있는데
    • Load : 메모리에 공간을 예약
    • Put  : 해당 메모리 주소에 숫자를 넣음
    • Add : 메모리 주소의 내부에 값을 추가

 

 

하지만 A 프로세서를 쓰는 기계에서 컴파일 하여 다른 인텔이나 AMD를 쓰는 다른 유저의 경우 해당 코드를 돌릴 수 없다.

 

왜냐면 각기 다른 구조를 가진 인텔, AMD 프로세서들은 각기 다른 ISA(Instruction Set Architecture)를 가지고 있기 때문

 

 

ISA 는 프로세서가 실행할 수 있는 지원되는 명령 또는 커맨트 집합을 뜻한다.

 

따라서 인텔 또는 ARM 프로세서가 코드를 실행할 수 있도록 하려면 해당 C 코드를 다시 컴파일하여 해당 프로세서의 명령을 따르는 어셈블리 코드를 만들어야 한다.

 

 

C 코드

 

인텔 프로세서에서 실행할 C 코드를 컴파일 하려면 다음과 같은 어셈블리 코드를 얻을 수 있음

 

ARM 구조 프로세서로 컴파일 하면 (M1 맥북 프로세서) 다음과 같은 어셈블리 코드를 얻을 수 있음

 

 

mov와 add 같은 명령어를 공유하지만 대부분의 명령은 다르게 보인다.

 

가장 큰 차이점은 '구조'

 

X86 프로세서 패밀리의 경우 CISC(Complex Instruction Set Computing) 구조를 사용하고 

ARM 프로세서는 RISC(Reduced Instruction Set Computing) 구조를 사용한다.

 

프로세서는 실행할 수 있는 일정량의 '지시사항' 또는 '명령'을 이해할 수 있다.

이런 명령은 해당 칩의 디자이너에 따라 결정된다.

 

 

RISC(Reduced Instruction Set Computing)

프로세서가 많은 작업을 수행해서는 안된다.

기본 작업을 빠르게 수행하는 것이 중요한 개념, 일종의 타협

 

 

CISC(Complex Instruction Set Computing)

CISC 프로세서는 RISC 프로세서보다 지시사항이 많다.

-> CISC 프로세서에 있는 명령어가 RISC에 없을 수도 있다.

 

RISC에 있는 경우, 

CISC 명령으로 1번 해야하는 일을 RISC에서는 수동으로 n번 사용하게 된다

 

CISC 복잡한 작업을 수행할 수 있지만 시간이 좀 걸릴 수 있다.

RISC에게 여러개의 명령을 전달해서 덕분에 빠르게 수행이 가능하겠다.

 

하지만 현재는 컴파일러가 있으니 이러한 고민을 하지 않아도 된다.

 

 


 

 

기억해야할 것은 옛날에 손으로 어셈블리 코드를 쓰던 시절이 있었다.

전체 시스템이 어셈블리 언어로 작성되곤 했다.

 

코딩을 적게 쓰고 싶은 사람들,, 

따라서 그 당시에는 CISC를 사용하는게 더 편했다.

RAM 메모리가 풍족하지도 않았고 RISC에 없는 수많은 명령들이 있으니까

 

프로그램을 실행하려면 그 프로그램이 RAM 메모리에 복사되어야 프로그램이 실행되었다.

즉, 규모가 큰 프로그램의 경우 실행하려면 더 많은 RAM 메모리가 필요했다.

 

RAM 메모리가 부족하던 시절에는 개발자를 도울 명령어들이 많으니 CISC 프로세서를 선택하는건 당연한 일이었다.

하지만 이젠 컴파일러도 있고 RAM 메모리도 많다.

 

요즘 가장 신경쓰이는 건 배터리 수명이다.

프로세서 수행할 것이 복잡할 수록 에너지 요구량도 높아진다.

 

 

 

ARM 즉, RISC 프로세서가 모바일 기기용으로 각광받은 이유이다

모바일, IoT 기기들이 RISC 를 사용한다.

 

ARM 프로세서는 엄청나게 에너지 효율성이 높다

RISC 프로세서는 CISC처럼 기능이 많지 않기 때문에 필요한 트랜지스터가 적고 가격도 싸고 차지하는 크기도 작다.

 

 

하지만 CISC와 RISC의 경계가 요즘은 희미해졌다. 

ARM은 여러 명령어를 추가하여 CISC 기능도 가지고 있다.

 

CISC를 쓰는 이유? 레거시 때문이다.

X86에서 ARM 프로세서 전환이 쉬운게 아니다.

M1 유저가 일부 프로그램 실행에 어려움을 겪고 있다.

해당 프로그램을 X86에서 ARM으로 변환해야하니까.

 

 

ARM은 IP를 라이선스 하고 있어서 다른회사들이 ARM에 돈을 내고 가져와서 그들에게 맞춤형으로 칩을 생산할 수 있다

이것이 지금 애플이 하고 있는 것이며 맥북용으로 맞춤 생산하고 있다.

더 빠른 스피드, 길어진 배터리 수명을 갖게되고 인텔에 기대지 않아도 된다.

 

 

 

현재 아마존도 그렇게 하고 있다.

 

최근 홍보하는 Gravition 서버는 맞춤형 ARM 프로세서에서 돌아간다.

기존보다 10-20% 더 싸고 인텔 혹은 AMD 서버보다 40퍼  더 빠르다.

아마존은 어디를 최적화해야하는지 알고 ARM를 가져와서 맞춤형으로 개선하는 중이다.

 

 

MS도 마찬가지로 서비스 PC를 위해 ARM 기반의 SoC를 만들고 있다.

 

 

 


노마드코더 채널의 영상을 참고하여 정리하였음을 밝힙니다.

출처: https://www.youtube.com/watch?v=G-fJJ-OHLDw 

 

세계 최대 NFT 마켓 오픈씨(Opensea)에서 해킹이 발생하였음.

 

 

 

오픈씨는 직접적으로 인터페이스만 제공한다. 

유저가 NFT 를 판매한다는 보여지는 것만 '보여줄 뿐' 실제로 NFT를 갖고 있지 않다. 

 

오픈씨는 거래도 직접적으로 이루어지지 않을 뿐더러 누군가 NFT를 사려할 때 오픈씨는 이더리움 블록체인 코드*를 호출하여 계좌 간 NFT 이체를 실행한다.

 

(*코드 - 스마트 컨트랙: 오픈 소스, 코드가 컨펌되고 난 후의 절차가 서명 이후 어떤 일들이 일어나는지 자세히 적혀있음)

 

 

 

 

해당 코드가 오픈씨에 의하여 호출되었을 때 거래를 직접 유저가 승인해야 한다. 

 

즉, 오픈씨는 직접적으로 하는 것이 없다.

 

 

 

 

해킹 이슈:

 

1) 유저가 NFT를 소유하고 있고

2) 유저는 오픈씨 웹사이트처럼 생긴 것은 다 신뢰하고

3) 유저는 그들이 서명하는 스마트 컨트랙을 읽지 않는다는 점을 해커가 이용했음

 

 

 

오픈씨가 보낸 정식 이메일처럼 fake 웹사이트에서 NFT 거래를 하라고 fake 이메일을 보냈음

 

fake 웹사이트는 코드를 호출했고 그 코드는 이체를 하는 것처럼 보였으며 유저는 해당 트랜잭션을 서명했음

 

정상적인 거래는 이뤄지지 않았고 해커는 그들의 서명을 저장하여, 저장한 서명을 토대로 유저들의 코드를 따로 호출하여 피해자 -> 해커의 지갑으로 NFT를 이체하였음.

 

NFT를 판매하여 판 금액을 많은 해커들이 돈을 숨기기 위해 사용하는 Tornado Cash로 보내버림.

이 곳은 트랜잭션을 몽땅 섞어 버린다. 

 

총 1,115 이더를 해당 사이트로 보냈음

 

 

 

NFT 플랫폼은 생긴지 얼마 안된 산업이라 이러한 이슈에 대해 핸들링하기에는 기술적으로 많이 부족하다.

신생 플랫폼 사용에는 항상 주의를 기울여야한다는 교훈.. 

 

 

 

 

 

노마드코더 채널의 영상을 참고하여 정리하였음을 밝힙니다.

출처: https://www.youtube.com/watch?v=hCYorQXrFck 

 

 

컴파일(compile)

고급 프로그래밍언어에 쓰여진 프로그램으로 소스코드에서의 오브젝트로 변환 되는것

오브젝트코드

컴파일러에 의해 생성된 코드
명령어 실행을 위해서는 기계어(machine language)로,  저레벨(low-level) 언어로 쓰여져여만 하드웨어 제어가 가능

 

저레벨언어 (low-level language)

기계어(machine language)또는 어셈블리어(assembly language)를 의미한다. 저레벨언어는 고레벨언어(high-level programming languages)보다 하드웨어와 더 밀접한 언어

고레벨언어(high-level programming language)

고레벨 언어는 기계어보다 좀 더 인간의 언어에 가까워 저레벨언어보다 읽기 쉬우며 읽기 뿐만아니라 쓰기, 유지보수에도 용이함

프로그램을 생산하기 수월하지만 이를 기계어로 변환하기 위해 인터프리터나 컴파일러가 필수적으로 요구됨

컴파일러

즉, 컴파일러는 고레벨 언어를 저레벨언어로 변경하기 위해 필요한 장치또는 도구

 

 

  컴파일러 언어 인터프리터 언어
공통점 사람이 이해할 수 있는 고급언어로 작성된 소스 코드를 기계가 이해할 수 있는 기계어로 번역한 후 프로그램을 실행함
차이점 사람이 고급 언어 작성을 하면 해당 고급 언어를 한번에 번역함

줄 단위로 번역을 하는 인터프리터에 비해 번역 시간이 오래 걸림

반면, 한 번 번역을 하면 실행 파일이 생성이 되어 다음에 실행을 할 때 기존에 생성되었던 실행 파일을 실행하기 때문에 인터프리터에 비해 실행 시간이 빠른 편


플랫폼(하드웨어)에 종속적인 특징
줄 단위로 번역을 진행하기 때문에 한 번에 번역하는 컴파일러에 비해 번역 시간이 빠르다.

번역 시 실행 파일을 생성하지 않기 때문에 매번 실행할 시마다 같은 번역을 진행해야 한다.

컴파일러 사용 언어들에 비해 실행 속도가 느린 편

모든 플랫폼(하드웨어)에 종속되지 않는 특징

각 하드웨어의 환경에 맞게 변환을 하기 때문에 다른 하드웨어에서도 작동이 가능
종류 JAVA, C, C++, C# 등 Javascript, Python, Ruby 등

 

자바는 컴파일러와 인터프리터 모두 사용한다. 

 

 

 

 

참조 https://blog.naver.com/ehcibear314/221228096291

며칠 전 구글이 크롬 '제로데이 취약점'에 대한 보안 수정 프로그램을 발표했다.

다른 브라우저들도 영향을 받고 있고 이슈가 꽤나 심각한 상황이라 한다.

 

 

[제로데이 취약점]이란 한번도 본 적 없는 보안 취약점을 의미한다.

아무도 해당 보안 취약점에 대해 몰랐고 이를 고칠 시간이 0일 이라는 뜻.

 

 

취약점 추적 플랫폼인 Qualys에 따르면 이번 발견 취약점을 이용해 공격하면 시스템에 완벽한 손상을 시킬 수 있다.

해당 컴퓨터에 대한 완벽한 통제권 장악이 가능하다.

 

 

이번 보안이슈는 크롬 자체에 문제가 있는 것이 아니라 Chrominum의 V8 JavaScript Engine 에 문제가 있다.

  - V8 엔진: JS를 실행하기 위해 Chrominum이 사용하는 엔진

 

해당 취약점을 트리거하기 위해 공격자는 악의적인 JS 코드를 실행하는 것이 가능하다.

 

 

 

구체적으로 이 V8 엔진에 문제가 생겨 Chrominum 코어 기반으로 만들어진 오픈소스 브라우저는 모두 문제가 생길 수 있으므로

해당 이슈 확인 시 업데이트를 즉시 할 것!

 

(Firefox, Safari를 사용하는 경우 현재 걱정할 필요 없다고 한다)

 

 

https://www.bleepingcomputer.com/news/security/emergency-google-chrome-update-fixes-zero-day-used-in-attacks/

 

Emergency Google Chrome update fixes zero-day used in attacks

Google has released Chrome 99.0.4844.84 for Windows, Mac, and Linux users to address a high-severity zero-day bug exploited in the wild.

www.bleepingcomputer.com

 

 

노마드코더 채널의 영상을 참고하여 정리하였음을 밝힙니다.

출처: https://www.youtube.com/watch?v=j-q2T9eUPHQ&t=3s 

 

+ Recent posts