X86-64

Bách khoa toàn thư mở Wikipedia
Buớc tưới chuyển hướng Bước tới tìm kiếm
Opteron, CPU đầu tiên giới thiệu x86-64 vào năm 2003
Bộ năm tập của x86-64 Architecture Programmer's Guide, được AMD xuất bản và phân phối vào năm 2002

x86-64 (còn gọi là x64, x86_64, AMD64Intel64) là phiên bản mở rộng 64bit của tập lệnh x86. Nó giới thiệu hai chế độ hoạt động mới, chế độ 64 bit và chế độ tương thích, cùng với chế độ phân trang 4 cấp độ mới. Với chế độ 64 bit và chế độ phân trang mới, nó hỗ trợ bộ nhớ ảo và bộ nhớ vật lý lớn hơn rất nhiều so với các phiên bản trước 32 bit, cho phép các chương trình lưu trữ lượng dữ liệu lớn hơn trong bộ nhớ. x86-64 cũng mở rộng các thanh ghi mục đích chung thành 64 bit, cũng như mở rộng số lượng của chúng từ 8 (một số trong đó có chức năng giới hạn hoặc cố định, ví dụ như để quản lý ngăn xếp) thành 16 (hoàn toàn chung) và cung cấp nhiều cải tiến khác. Các thao tác dấu phẩy động được hỗ trợ thông qua các nhóm lệnh giống như SSE2 bắt buộc và các thanh ghi kiểu x87/MMX thường không được sử dụng (nhưng vẫn khả dụng ngay cả ở chế độ 64 bit); thay vào đó, một bộ gồm 32 thanh ghi vector, mỗi thanh 128 bit, được sử dụng (Mỗi thanh có thể lưu một hoặc hai số kép hoặc một đến bốn số đơn hoặc các định dạng số nguyên khác nhau.) Trong chế độ 64 bit, các nhóm lệnh được sửa đổi để hỗ trợ toán hạng 64 bit và chế độ địa chỉ 64 bit. Chế độ tương thích cho phép các ứng dụng người dùng 1632 bit chạy cùng tồn tại không thay đổi với các ứng dụng 64 bit nếu hệ điều hành 64 bit hỗ trợ chúng.[1][note 1] Vì các tập lệnh x86 16 bit và 32 bit đầy đủ vẫn được triển khai trong phần cứng mà không có bất kỳ mô phỏng can thiệp nào, các tệp thực thi cũ này có thể chạy với ít hoặc không có hình phạt hiệu năng,[3] trong khi các ứng dụng mới hơn hoặc được sửa đổi có thể tận dụng các tính năng mới của thiết kế bộ xử lý để đạt được cải tiến hiệu suất. Ngoài ra, bộ xử lý hỗ trợ x86-64 vẫn bật ở chế độ thực để tương thích ngược hoàn toàn

Thông số ban đầu, được tạo bởi AMD và phát hành năm 2000, ã được AMD, IntelVIA triển khai. Bộ xử lý AMD K8 là bản đầu tiên thực hiện nó. Đây là sự bổ sung đáng kể đầu tiên cho kiến trúc x86 được thiết kế bởi một công ty khác ngoài Intel. Intel đã buộc phải tuân theo và giới thiệu một họ NetBurst đã được sửa đổi, tương thích với phần mềm với đặc điểm kỹ thuật của AMD. VIA Technologies giới thiệu x86-64 trong kiến trúc VIA Isaiah của họ, với VIA Nano.

Kiến trúc x86-64 khác với kiến trúc Intel Itanium (trước đây là IA-64), không tương thích ở cấp độ tập lệnh gốc với kiến trúc x86. Các hệ điều hành và ứng dụng được viết cho cái này không thể chạy trên cái kia.

AMD64[sửa | sửa mã nguồn]

Lịch sử[sửa | sửa mã nguồn]

AMD64 được tạo ra để thay thế cho kiến trúc IA-64 hoàn toàn khác, được thiết kế bởi Intel và Hewlett Packard. Được công bố lần đầu vào năm 1999 [4] trong khi thông số kỹ thuật đầy đủ có sẵn vào tháng 8 năm 2000,[5] kiến trúc AMD64 được AMD định vị ngay từ đầu như một cách tiến hóa để thêm khả năng tính toán 64 bit vào kiến trúc x86 hiện tại, trái ngược với cách tiếp cận của Intel là tạo ra một cách hoàn toàn kiến trúc 64 bit mới với IA-64.

Bộ xử lý dựa trên AMD64 đầu tiên, Opteron, được phát hành vào tháng 4 năm 2003.

Triển khai[sửa | sửa mã nguồn]

Các bộ xử lý của AMD triển khai kiến ​​trúc AMD64 bao gồm Opteron, Athlon 64, Athlon 64 X2, Athlon 64 FX, Athlon II (theo sau bởi "X2", "X3", hay "X4" để chỉ số lượng lõi và các mẫu XLT), Turion 64, Turion 64 X2, Sempron ("Palermo" E6 và tất cả các model "Manila" ), Phenom (theo sau bởi "X3" hay "X4" để chỉ số lượng lõi), Phenom II (theo sau bởi "X2", "X3", "X4" hay "X6" để chỉ số lượng lõi), FX, Fusion/APURyzen/Epyc.

Đặc điểm kiến ​​trúc[sửa | sửa mã nguồn]

Đặc điểm xác định chính của AMD64 là sự sẵn có của các thanh ghi bộ xử lý đa năng 64 bit (ví dụ, rax và rbx), các phép toán số học và logic số nguyên 64 bit và các địa chỉ ảo 64 bit. Các nhà thiết kế đã nắm lấy cơ hội để thực hiện các cải tiến khác là tốt. Một số thay đổi quan trọng nhất được mô tả dưới đây.

Khả năng tính toán 64-bit
Tất cả các thanh ghi GPR được mở rộng từ 32 bits lên 64 bits, và tất cả các hoạt động số học và logic, hoạt động bộ nhớ vào thanh ghi và thanh ghi vào bộ nhớ, v.v., giờ đây có thể hoạt động trực tiếp trên các số nguyên 64 bit. Push và pop trên ngăn xếp mặc định thành các bước 8 byte và con trỏ rộng 8 byte.
Đăng ký bổ sung
Ngoài việc tăng kích thước của các thanh ghi GPR, số lượng các thanh ghi GPR tăng từ 8 ( eax, ecx, edx, ebx, esp, ebp, esi, edi) trong x86 lên 16 ( rax, rcx, rdx, rbx, rsp, rbp, rsi, rdi, r8, r9, r10, r11, r12, r13, r14, r15). Do đó, có thể giữ nhiều biến cục bộ hơn trong các thanh ghi thay vì trên ngăn xếp và để cho các thanh ghi giữ các hằng số truy cập thường xuyên; các đối số cho chương trình nhỏ và nhanh cũng có thể được truyền vào các thanh ghi ở mức độ lớn hơn. AMD64 vẫn có ít thanh ghi hơn so với nhiều bộ lệnh RISC (e.g. PA-RISCMIPS có 32 GPR; Alpha, ARM 64-bit, và SPARC có 31) hoặc các máy tương tự VLIW như IA-64 (có 128 thanh ghi). Tuy nhiên, việc triển khai AMD64 có thể có nhiều thanh ghi bên trong hơn số lượng thanh ghi kiến ​​trúc được hiển thị bởi tập lệnh. Ví dụ, lõi AMD Zen có 168 số nguyên 64 bit và 160 thanh ghi vật lý điểm nổi vector 128 bit.
Thanh ghi bổ sung XMM (SSE)
Tương tự, số lượng thanh ghi 128-bit XMM(được dùng cho nhóm lệnh Streaming SIMD) cũng được tăng từ 8 lên 16.
Ngăn xếp thanh ghi x87 FPU truyền thống không được bao gồm trong phần mở rộng thanh ghi kích thước file ở chế độ 64 bit, so với các thanh ghi XMM được sử dụng bởi SSE2, đã được mở rộng. Ngăn xếp thanh ghi x87 không phải là một tệp đăng ký đơn giản mặc dù nó cho phép truy cập trực tiếp vào các thanh ghi riêng lẻ bằng các hoạt động trao đổi chi phí thấp.
Không gian địa chỉ ảo lớn hơn
Kiến trúc AMD64 định nghĩa định dạng địa chỉ ảo 64 bit, trong đó 48 bit thứ tự thấp được sử dụng trong các triển khai hiện tại.[1](tr120) Điều này cho phép nâng không gian địa chỉ ảo lên tối đa 256 TB (248 byte). Định nghĩa kiến ​​trúc cho phép giới hạn này được nâng lên trong các triển khai trong tương lai tới 64 bit đầy đủ,[1](tr2)(tr3)(tr13)(tr117)(tr120) mở rộng không gian địa chỉ ảo lên 16 EB (264 byte). Điều này được so sánh với chỉ 4 GB (232 byte) của x86.[6]Điều này có nghĩa là các file rất lớn có thể được vận hành bằng cách ánh xạ toàn bộ tệp vào không gian địa chỉ của quy trình (thường nhanh hơn nhiều so với làm việc với các lệnh đọc/ghi file), thay vì phải ánh xạ các vùng của file vào và ra không gian địa chỉ.
Không gian địa chỉ vật lý lớn hơn
Việc triển khai ban đầu của kiến ​​trúc AMD64 đã triển khai các địa chỉ vật lý 40 bit và do đó có thể quản lý tới 1 TB (240 byte) RAM.[1](tr24) Các triển khai hiện tại của kiến ​​trúc AMD64 (bắt đầu từ kiến ​​trúc vi mô AMD 10h) mở rộng điều này lên 48 bit địa chỉ vật lý[7] và do đó có thể quản lý tối đa 256 TB RAM. Kiến trúc cho phép mở rộng tới 52 bit trong tương lai [1](tr24)[8] (bị giới hạn bởi định dạng mục nhập bảng trang);[1](tr131) điều này sẽ cho phép quản lý tối đa 4 PB RAM. Để so sánh, bộ xử lý 32 bit x86 bị ​​giới hạn ở 64 GB RAM ở chế độ Physical Address Extension (PAE),[9] hay 4 GB RAM khi không ở chế độ PAE.[1](tr4)
Không gian địa chỉ vật lý lớn hơn trong chế độ cũ
Khi hoạt động ở chế độ cũ, kiến trúc AMD64 hỗ trợ chế độ Physical Address Extension (PAE), giống như hầu hết các bộ xử lý x86 hiện tại, nhưng AMD64 mở rộng PAE từ 36 bit đến giới hạn kiến trúc là 52 bit địa chỉ vật lý. Do đó, bất kỳ triển khai nào cũng cho phép giới hạn địa chỉ vật lý giống như trong long mode.[1](tr24)
Con trỏ lệnh truy cập dữ liệu tương đối
Các lệnh bây giờ có thể tham chiếu dữ liệu liên quan đến con trỏ lệnh (thanh ghi RIP). Điều này làm cho mã độc lập vị trí, như thường được sử dụng trong các thư viện dùng chung và mã được tải vào thời gian chạy, hiệu quả hơn.
SSE instructions
The original AMD64 architecture adopted Intel's SSE and SSE2 as core instructions. These instruction sets provide a vector supplement to the scalar x87 FPU, for the single-precision and double-precision data types. SSE2 also offers integer vector operations, for data types ranging from 8bit to 64bit precision. This makes the vector capabilities of the architecture on par with those of the most advanced x86 processors of its time. These instructions can also be used in 32-bit mode. The proliferation of 64-bit processors has made these vector capabilities ubiquitous in home computers, allowing the improvement of the standards of 32-bit applications. The 32-bit edition of Windows 8, for example, requires the presence of SSE2 instructions.[10] SSE3 instructions and later Streaming SIMD Extensions instruction sets are not standard features of the architecture.
No-Execute bit
No-Execute bit hay NX bit (bit 63 của bảng phân mục trang) allows the operating system to specify which pages of virtual address space can contain executable code and which cannot. An attempt to execute code from a page tagged "no execute" will result in a memory access violation, similar to an attempt to write to a read-only page. This should make it more difficult for malicious code to take control of the system via "buffer overrun" or "unchecked buffer" attacks. A similar feature has been available on x86 processors since the 80286 as an attribute of segment descriptors; however, this works only on an entire segment at a time. Segmented addressing has long been considered an obsolete mode of operation, and all current PC operating systems in effect bypass it, setting all segments to a base address of zero and (in their 32 bit implementation) a size of 4 GB. AMD was the first x86-family vendor to implement no-execute in linear addressing mode. The feature is also available in legacy mode on AMD64 processors, and recent Intel x86 processors, when PAE is used.
Removal of older features
A few "system programming" features of the x86 architecture were either unused or underused in modern operating systems and are either not available on AMD64 in long (64-bit and compatibility) mode, or exist only in limited form. These include segmented addressing (although the FS and GS segments are retained in vestigial form for use as extra base pointers to operating system structures),[1](tr70) the task state switch mechanism, and virtual 8086 mode. These features remain fully implemented in "legacy mode", allowing these processors to run 32-bit and 16-bit operating systems without modifications. Some instructions that proved to be rarely useful are not supported in 64-bit mode, including saving/restoring of segment registers on the stack, saving/restoring of all registers (PUSHA/POPA), decimal arithmetic, BOUND and INTO instructions, and "far" jumps and calls with immediate operands.

Xem thêm[sửa | sửa mã nguồn]

Tham khảo[sửa | sửa mã nguồn]

  1. ^ a ă â b c d đ e ê AMD Corporation (tháng 12 năm 2016). “Volume 2: System Programming” (PDF). AMD64 Architecture Programmer's Manual. AMD Corporation. Truy cập ngày 25 tháng 3 năm 2017. 
  2. ^ Raymond Chen (31 tháng 10 năm 2013). “If there is no 16-bit emulation layer in 64-bit Windows, how come certain 16-bit installers are allowed to run?”. 
  3. ^ IBM Corporation (6 tháng 9 năm 2007). “IBM WebSphere Application Server 64-bit Performance Demystified” (PDF). tr. 14. Truy cập ngày 9 tháng 4 năm 2010. Figures 5, 6 and 7 also show the 32-bit version of WAS runs applications at full native hardware performance on the POWER and x86-64 platforms. Unlike some 64-bit processor architectures, the POWER and x86-64 hardware does not emulate 32-bit mode. Therefore applications that do not benefit from 64-bit features can run with full performance on the 32-bit version of WebSphere running on the above mentioned 64-bit platforms. 
  4. ^ “AMD Discloses New Technologies At Microporcessor Forum” (Thông cáo báo chí). AMD. 5 tháng 10 năm 1999. Bản gốc lưu trữ ngày 8 tháng 3 năm 2012. Truy cập ngày 9 tháng 11 năm 2010. 
  5. ^ “AMD Releases x86-64 Architectural Specification; Enables Market Driven Migration to 64-Bit Computing” (Thông cáo báo chí). AMD. 10 tháng 8 năm 2000. Bản gốc lưu trữ ngày 8 tháng 3 năm 2012. Truy cập ngày 9 tháng 11 năm 2010. 
  6. ^ “Intel 64 and IA-32 Architectures Software Developer’s Manual, Volume 3A: System Programming Guide, Part 1” (PDF). tr. 4–10. Truy cập ngày 29 tháng 5 năm 2010. 
  7. ^ “BIOS and Kernel Developer’s Guide (BKDG) For AMD Family 10h Processors” (PDF). tr. 24. Truy cập ngày 27 tháng 2 năm 2016. Physical address space increased to 48 bits. 
  8. ^ “Myth and facts about 64-bit Linux” (PDF). 2 tháng 3 năm 2008. tr. 7. Bản gốc (PDF) lưu trữ ngày 10 tháng 10 năm 2010. Truy cập ngày 30 tháng 5 năm 2010. Physical address space increased to 48 bits  Đã bỏ qua tham số không rõ |df= (trợ giúp)
  9. ^ Shanley, Tom (1998). Pentium Pro and Pentium II System Architecture. PC System Architecture Series . Addison-Wesley. tr. 445. ISBN 0-201-30973-4. 
  10. ^ Microsoft Corporation. “What is PAE, NX, and SSE2 and why does my PC need to support them to run Windows 8 ?”. Truy cập ngày 19 tháng 3 năm 2013. 

Liên kết ngoài[sửa | sửa mã nguồn]


Lỗi chú thích: Đã tìm thấy thẻ <ref> với tên nhóm “note”, nhưng không tìm thấy thẻ tương ứng <references group="note"/> tương ứng, hoặc thẻ đóng </ref> bị thiếu