2010-06-26 39 views
5

câu hỏi là khi nào một hoạt động tải/lưu trữ 64bit được coi là nguyên tử.nguyên tử trong 32/64 bit

  • nếu tôi có bộ xử lý 64 bit, nhưng tôi đang sử dụng hệ điều hành 32 bit. Tôi sẽ có 64bit atomicity?
  • nếu tôi đang sử dụng hệ điều hành 64 bit nhưng chạy một ứng dụng 32 bit (sử dụng WoW64), tôi sẽ có 64bit atomicity?

Trả lời

4

Ứng dụng phải chạy trên hệ điều hành 64 bit và ở chế độ 64 bit nguyên bản để có được những ưu điểm của x64, không ngạc nhiên. Nếu bạn đang chạy trong chế độ 32 bit, hoặc trên một hệ điều hành 32bit (với một ứng dụng 32bit), bạn sẽ nhận được 32bit nguyên tử. Nếu bạn đang chạy chế độ 64 bit trên một hệ điều hành 64bit trên một CPU 64bit, bạn sẽ nhận được 64bit nguyên tử. Tất cả các thành phần trong chuỗi (ứng dụng, hệ điều hành, CPU) phải chạy 64bit để có được 64bit.

+1

Tôi không hiểu cách hệ điều hành có thể ngăn ứng dụng sử dụng truy cập 64 bit. Đây có phải là một cái gì đó cụ thể cho kiến ​​trúc x86? Liệu nó có một số "chế độ 32bit" cụ thể bị ép buộc bởi hệ điều hành? Ít nhất là DSP series 64x của TI tôi hiện đang làm việc với không có những hạn chế như vậy. – PauliL

+0

Hệ điều hành chỉ có thể phát hành mã microcode ở độ rộng bit riêng của nó và không thể thực hiện ánh xạ bộ nhớ ảo với không gian địa chỉ lớn hơn. Nó không thể cho một hệ điều hành máy tính để bàn 32bit để chạy một chương trình 64bit. Khi CPU x64 phát hiện một hệ điều hành 32 bit, nó chạy trong một chế độ mô phỏng quá, mà sẽ hành động như nó là 32bit. – Puppy

+0

DeadMG: Theo tôi hiểu, việc bật chế độ dài không có nghĩa là hướng dẫn phải 64 bit tính từ thời điểm đó trở đi. Ví dụ: http://wiki.osdev.org/Long_Mode#How_do_I_enable_Long_Mode_.3F Tôi đoán đó là một phần của cách 32 bit Mac OS X quản lý để giữ hạt nhân 32 bit trong khi có khả năng chạy các ứng dụng 64 bit. Tôi đoán CPU không phát hiện được hệ điều hành - chúng phải được thiết lập rõ ràng để vào một chế độ cụ thể. –

3

Nó chỉ là bit "32/64" của ứng dụng quan trọng - tức là tải 64 bit/cửa hàng của bạn là nguyên tử ở cấp độ lắp ráp.
Bạn cần một ứng dụng 64 bit để có được điều đó "miễn phí". *
Đối với ứng dụng 64 bit, bạn cần một CPU 64 bit và một hệ điều hành có thể thực thi nó.
Hệ điều hành có thể là bất cứ điều gì, miễn là nó có thể bắt đầu quá trình 64 bit trên CPU 64 bit.

nếu tôi có bộ xử lý 64 bit, nhưng tôi đang sử dụng hệ điều hành 32 bit. Tôi sẽ có 64bit atomicity?

32 bit Windows, Linux: Bạn không thể chạy các ứng dụng 64 bit trên 32 bit Windows hoặc Linux, ngay cả trên CPU 64 bit.
32 bit Mac OS X: Nếu ứng dụng của bạn là ứng dụng 64 bit, thì có.

nếu tôi đang sử dụng hệ điều hành 64 bit nhưng chạy ứng dụng 32 bit (sử dụng WoW64), tôi sẽ có 64bit atomicity?

No. Tải và lưu trữ ở mức mã máy vẫn sẽ là 32 bit và lưu trữ nếu bạn đang chạy ứng dụng 32 bit.

* Bạn có thể đọc 64 bit nguyên tử/ghi trên CPU 32 bit với trình biên dịch nội tại nếu có và/hoặc trực tiếp assembly.

3

Không theo mặc định! Nhưng một số hướng dẫn SSE dưới sự hỗ trợ x86 64bit và 128bit tải nguyên tử/cửa hàng, tất nhiên trước tiên bạn phải đảm bảo bộ nhớ. Xem ví dụ:

procedure Move64(var Source, Destination); 
//Move 8 bytes atomicly from Source 8-byte aligned to Destination! 
asm 
    movq xmm0, qword [Source] 
    movq qword [Destination], xmm0 
end; 

procedure Move64(newData: pointer; newReference: cardinal; var Destination); overload; 
//Move 8 bytes atomically into 8-byte Destination! 
asm 
    movd xmm0, eax 
    movd xmm1, edx 
    punpckldq xmm0, xmm1 
    movq qword [Destination], xmm0 
end; 

procedure Move128(var Source, Destination); 
//Move 16 bytes atomicly from Source to 16-byte aligned to Destination! 
asm 
    movdqa xmm0, dqword [Source] 
    movdqa dqword [Destination], xmm0 
end; 
Các vấn đề liên quan