본문 바로가기
전공/시스템 프로그래밍

[시스템 프로그래밍 3- 4] 64-Bit x86-64 Processors

by 뜨거운 개발자 2023. 3. 20.

64-Bit x86-64 Processors

이렇게 네이밍을 했지만, 사실 x86 프로세스를 32비트로 확장한 것이다.

만든 곳은 amd라서 x86을 만든 곳은 인텔이지만 amd가 만들어서 이름이 amd64라고 불린다.

Intel 64 and AMD64 processor (x64) 패밀리 라는 이름으로 불린다.

사실상 amd 64 또는 x86-64 , x64 등으로 불린다.

이 녀석은 32비트를 64비트로 확장한 것을 의미한다.

특징

  • Backward-compatible: 기존의 명령어와 32비트 x86에서 동작하던 명령어들이 모두 그대로 x86-64에서도 동작을 한다.
    • 우리 수업에서는 컴퓨터에서는 32비트를 기준으로 공부를 할 꺼긴 해요 그러니까 딸딸 외우진 마세용
  • 레지스터가 64비트이다.
  • 그 이야기는 데이터 버스가 64비트라는 것이고, 주소버스 역시 64비트이다. 이론적으로는 주소 공간은 2^64이 된다.
    • 2^30 : G(기가)
    • 2^40 : T(테라)
    • 2^50 : P(페타)
    • 2^60 : E (엑사) : 사실 사용도 거의 안되는 단위
    • 따라서 최대로 나타낼 수 있는 범위는 16 Exabyte가 된다.
    • 다만 실제로는 이만큼 다 쓰지도 못한다.
    • 따라서 실제로 원칙상 다 쓸 수 있긴 한데, 그래서 실제로는 48 bit만큼만을 실제로 사용하고 있다. - 이건 요즘 나오는 칩이 그렇다는 것이지 모든 칩이 그렇다는 것도 아니며 앞으로 나오는 칩은 전부 다 사용할 수도 있을 것이다. (현재 메모리의 최대값은 256Tra)
  • 32비트 x86프로세서에서는 general-purpose registers가 8개였는데 64비트가 되면서 16개를 사용하고 있다.
  • 따라서 그래서 우리는 256Tra짜리 램을 사용할 수 있다.

IA-64(Itanium)

인텔에서 만든 또 다른 64비트 프로세스 아키텍쳐이다.

즉 지금 사용하는 프로세서랑 완전 다른 프로세서이다.

안타깝게도, 기존과의 호환성을 버리고 만들었는데, 그것이 이 칩을 많이 안 사용하는 계기가 됐다.

또한 성능역시 그렇게 좋지 않아서 인텔이 만든 64비트 프로세스는 많이 안 팔렸다.

그래서 이런 실패를 겪고 있는데 여기서 amd에서 발 빠르게 64비트 호환 아키텍쳐를 만들어서 amd64가 나오게 된 것이다.

AMD 64의 실행 모드(64-Bit Operation Modes)

우리는 x86-64bit와 intel64, amd64 ,x64를 모두 명명만 다를 뿐 다 같은 cpu입니다. 혼돈하지 말고 그냥 같다고 생각하시면 됩니다.

1. Compatibility Mode(호환성 모드)

기존의 16-bit and 32-bit 에서 사용했던 어플들이 재컴파일 필요 없이 사용가능한 모드

2. 64-Bit Mode

64비트 모드를 사용하면 기존에 사용했던 프로그램들은 역시 실행이 안된다.

특징

  • 64비트의 선형 주소공간을 사용한다.
  • 기본적으로 마이크로소프트 윈도우가 64비트로 동작을 한다.
  • 64비트모드가 가지고 있는 32비트 모드의 명령어 이외에도 가지고있는 고유한 명령어들을 사용할 수 있다.
  • 16-bit real mode or virtual-8086 mode를 지원하지 않는다.
    • 역시나 외울필요 없어요

64비트 모드의 실행환경

주소공간

메모리 주소공간은 최대 64비트의 크기를 사용할 수 있지만, 오직 48비트만 현재 사용하고 있다.(이걸로도 충분한 크기)

레지스터 측면에서 32비트 프로세서와 가장 중요한 차이점

  • 32비트에는 8개의 범용레지스터가 있었지만 64비트에서는 16개의 레지스터 사용한다.
  • 8개의 80바트 플로팅포인트 레지스터가 존재한다.
  • 64-bit status flags register named RFLAGS(플래그 비트가 64비트로 확장되었다.)
  • A 64-bit instruction pointer named RIP(이것도 확장되었다.)
  • 그 외에도 멀티미디어를 지원하는 레지스터 사용됨.
    • 8개의 64-bit MMX registers
    • 16개의 128-bit XMM registers (32-bit mode 에선 , you have only 8 of these)

그 아래 슬라이드 레지스터 내용들은 스윽 넘기셨다. (시험은 64비트는 아마 안 나올 것 같지만 ppt에 있는 내용이니 정리해보겠다.)

범용 레지스터

  • 산술, 데이터 이동, 데이터 반복을 수행하는 명령의 기본 피연산자
  • 범용 레지스터는 8비트, 16비트, 32비트 또는 64비트 피연산자(특수 접두사 포함)에 액세스할 수 있습니다.
    • 기본 피연산자 크기는 32비트입니다.
    • 8개의 범용 레지스터가 있습니다.
  • 각 명령에 REX(레지스터 확장) 접두사 추가하기 
    • 피연산자의 길이는 64비트일 수 있습니다.
    • 총 16개의 범용 레지스터를 사용할 수 있습니다.
    • 32비트 모드와 동일한 모든 레지스터와 8개의 번호가 매겨진 레지스터(R8~R15)가 있습니다.

  • 64비트 모드에서는 단일 명령이 AH, BH, CH, DH와 같은 상위 바이트 레지스터와 새 바이트 레지스터 중 하나(예: DIL)의 하위 바이트에 동시에 액세스할 수 없습니다.
  • 64비트 모드에서 32비트 EFLAGS 레지스터는 64비트 RFLAGS 레지스터로 대체됩니다.
    • 두 레지스터는 동일한 하위 32비트를 공유하며, 상위 32비트의 RFLAGS는 사용되지 않습니다.
    • 상태 플래그는 32비트 모드와 64비트 모드에서 동일합니다.

 

728x90