Câu hỏi Kiến trúc 16, 32 và 64-bit là gì?


Kiến trúc 16 bit, 32 bit và 64 bit có ý nghĩa gì trong trường hợp Bộ vi xử lý và / hoặc Hệ điều hành?

Trong trường hợp của bộ vi xử lý, nó có nghĩa là kích thước tối đa của General Purpose Registers hoặc kích thước của Integer hoặc số lượng Address-lines hoặc số Data Bus lines hay cái gì?

Chúng ta có ý gì khi nói "DOS is a 16-bit OS","Windows in a 32-bit OS", v.v ...?


23
2017-08-29 10:40


gốc




Các câu trả lời:


Câu trả lời ban đầu của tôi là dưới đây, nếu bạn muốn hiểu các ý kiến.

Câu trả lời mới

Như bạn nói, có nhiều biện pháp khác nhau. May mắn cho nhiều CPU rất nhiều các biện pháp là như nhau, vì vậy không có nhầm lẫn. Hãy xem xét một số dữ liệu (Xin lỗi cho tải lên hình ảnh, tôi không thể nhìn thấy một cách tốt để làm một bảng trong markdown). Table data

Như bạn có thể thấy, nhiều cột là ứng cử viên tốt. Tuy nhiên, tôi cho rằng kích thước của thanh ghi mục đích chung (màu xanh lá cây) là câu trả lời phổ biến nhất được hiểu.

Khi một bộ xử lý có kích thước rất khác nhau cho các thanh ghi khác nhau, nó sẽ thường được mô tả chi tiết hơn, ví dụ như Motorola 68k được mô tả như một chip 16 / 32bit.

Những người khác đã lập luận rằng nó là chiều rộng xe buýt hướng dẫn (màu vàng) mà cũng phù hợp trong bảng. Tuy nhiên, trong thế giới hiện nay của pipelining tôi sẽ cho rằng đây là một biện pháp ít có liên quan hơn đối với hầu hết các ứng dụng so với kích thước của các thanh ghi mục đích chung.


Câu trả lời gốc

Những người khác nhau có thể có nghĩa là những thứ khác nhau, bởi vì khi bạn nói có một số biện pháp. Vì vậy, ví dụ một người nào đó nói về việc giải quyết bộ nhớ có thể có nghĩa là một cái gì đó khác với một ai đó nói về số học số nguyên. Tuy nhiên, tôi sẽ cố gắng và xác định những gì tôi nghĩ là sự hiểu biết chung.

Lấy của tôi là cho một CPU nó có nghĩa là "Kích thước của thanh ghi điển hình được sử dụng cho các hoạt động tiêu chuẩn" hoặc "kích thước của bus dữ liệu" (hai là bình thường tương đương).

Tôi biện minh cho điều này với logic sau. Các Z80 có bộ tích lũy 8 bit và bộ dữ liệu 8 bit, trong khi có thanh ghi địa chỉ bộ nhớ 16 bit (IX, IY, SP, PC) và bus địa chỉ bộ nhớ 16 bit. Và Z80 được gọi là bộ vi xử lý 8bit. Điều này có nghĩa là mọi người thường phải có nghĩa là kích thước số học số nguyên chính, hoặc kích thước dữ liệu, không phải kích thước địa chỉ bộ nhớ.

Nó không phải là kích thước của hướng dẫn, như Z80 (một lần nữa) có 1,2 và 3 byte hướng dẫn, mặc dù tất nhiên các byte đa đã được đọc trong nhiều lần đọc. Theo một hướng khác, 8086 là bộ vi xử lý 16 bit và có thể đọc hướng dẫn 8 hoặc 16 bit. Vì vậy, tôi sẽ phải không đồng ý với các câu trả lời cho biết đó là kích thước chỉ dẫn.

Đối với các hệ điều hành, tôi sẽ định nghĩa nó là "mã được biên dịch để chạy trên một CPU có kích thước đó", do đó, một hệ điều hành 32 bit có mã được biên dịch để chạy trên CPU 32 bit (theo định nghĩa ở trên).


16
2017-08-29 10:46



Bạn có thể vui lòng xây dựng, bạn có ý nghĩa gì bởi "Ngôn ngữ là cẩu thả"? - anonymous
@ JMSA Tôi tin rằng Nick đang chỉ ra thực tế rằng các điều khoản 16 bit, 32 bit và 64 bit không rõ ràng. Ý nghĩa của chúng thay đổi đôi chút tùy thuộc vào những gì bạn mô tả. - JBirch
Nó không phải là các thuật ngữ không rõ ràng, đó là thiết kế bộ vi xử lý thực tế. Các chiều rộng khác nhau đều được tối ưu hóa riêng biệt và do đó chỉ liên quan một cách lỏng lẻo. Sự gia tăng của C đã "khuyến khích" các chiều rộng dữ liệu và địa chỉ là như nhau, nhưng nó không phải luôn luôn như vậy. Chiều rộng xe buýt thực tế thường hoàn toàn khác nhau. - hotpaw2
Số bit của CPU được mô tả khá chính xác tại Wikipedia, nó không phải là cẩu thả như bạn mô tả nó ... - polemon
Cảm ơn các ý kiến, hy vọng từ ngữ là tốt hơn bây giờ. - Nick Fortescue


CPU "là" bao nhiêu bit, có nghĩa là chiều dài từ lệnh của nó là bao nhiêu. Trên CPU 32 bit, độ dài từ của lệnh như vậy là 32 bit, có nghĩa là đây là chiều rộng mà CPU có thể xử lý dưới dạng hướng dẫn hoặc dữ liệu, thường dẫn đến một đường xe buýt có chiều rộng đó. Vì một lý do tương tự, các thanh ghi có kích thước của độ dài từ của CPU, nhưng bạn thường có các thanh ghi lớn hơn cho các mục đích khác nhau.

Lấy PDP-8 máy tính làm ví dụ. Đây là một máy tính 12 bit. Mỗi lệnh dài 12 bit. Để xử lý dữ liệu có cùng chiều rộng, bộ tích lũy cũng là 12 bit. Nhưng điều làm cho máy tính 12 bit trở thành một máy 12 bit, là chiều dài từ chỉ dẫn của nó. Nó có mười hai thiết bị chuyển mạch trên bảng điều khiển phía trước mà nó có thể được lập trình, hướng dẫn bằng cách hướng dẫn.

Đây là một ví dụ tốt để thoát ra khỏi tập trung bit 8/16/32.

Số bit cũng thường là kích thước của bus địa chỉ. Do đó, nó thường cho bộ nhớ địa chỉ tối đa.

Có một lời giải thích tốt về điều này tại Wikipedia:

Trong kiến ​​trúc máy tính, các số nguyên 32 bit, địa chỉ bộ nhớ hoặc các đơn vị dữ liệu khác là các số nguyên có tối đa 32 bit (4 octet). Ngoài ra, kiến ​​trúc CPU 32-bit và ALU là các kiến ​​trúc dựa trên các thanh ghi, các bus địa chỉ hoặc các bus dữ liệu có kích thước đó. 32-bit cũng là một thuật ngữ được đưa ra cho một thế hệ máy tính trong đó các bộ xử lý 32 bit là chuẩn.

Bây giờ chúng ta hãy nói về hệ điều hành.

Với OS-es, đây là cách ít bị ràng buộc với "bitty-ness" thực sự của CPU, nó thường phản ánh cách opcodes được lắp ráp (cho độ dài từ của CPU) và cách các thanh ghi được áp dụng (bạn không thể tải Giá trị 32 bit trong thanh ghi 16 bit) và cách bộ nhớ bị nén. Hãy nghĩ về nó như là một chương trình hoàn chỉnh, được biên soạn. Nó được lưu trữ dưới dạng các lệnh nhị phân và do đó phù hợp với chiều dài từ của CPU. Nhiệm vụ khôn ngoan, nó phải có khả năng giải quyết toàn bộ bộ nhớ, nếu không nó không thể quản lý bộ nhớ thích hợp.

Nhưng điều gì xảy ra với nó, liệu một chương trình là 32 hay 64 bit (một hệ điều hành về cơ bản là một chương trình ở đây), nó được lưu trữ như thế nào và các thanh ghi và bộ nhớ được giải quyết như thế nào. Tất cả trong tất cả, điều này áp dụng cho tất cả các loại chương trình, không chỉ OS-es. Đó là lý do tại sao bạn có các chương trình được biên dịch cho 32 bit hoặc 64 bit.


7
2017-08-29 11:23



Độ dài từ lệnh là một phần bên trong, đôi khi một lệnh có thể dài hơn bus mà CPU được kết nối với bộ nhớ chương trình (trong thiết kế von-Neumann, chỉ có một không gian địa chỉ cho cả bộ nhớ chương trình và bộ nhớ làm việc với ngăn xếp, v.v.) , bây giờ, đặc biệt là khi sử dụng pipelining rằng hướng dẫn có thể dài hơn dòng xe buýt của bạn. Bên trong, opcode đó có độ rộng nhất định. Hầu hết CPU sử dụng microcode để giải mã opcode đó, microcode này có thể xử lý một chiều rộng nhất định mà lệnh có thể có. Đó là chiều rộng từ hướng dẫn. - polemon
Tôi không nói về hướng dẫn microcode. Một lệnh CPU được giải mã bằng microcode. Bây giờ lệnh CPU này có độ dài (tối đa). Chiều dài này được xác định bởi thiết kế phần cứng của CPU và vi mã của nó. - polemon
"Tôi luôn nghĩ" bit "được gọi là chiều rộng của bus." Ví dụ truy cập: các máy Mac đầu tiên là m68000 (chắc chắn là chip 32 bit) nhưng chạy trên các bus chính 16bin. Phải mất hai chu kỳ để thực hiện tìm nạp toàn bộ chiều rộng hoặc lưu trữ, nhưng điều này là vô hình đối với lập trình viên (được trừu tượng hóa bởi kiến ​​trúc bộ nhớ cache) ngoại trừ về tốc độ truy cập bộ nhớ bền vững. - dmckee
@Marting: Có, nhưng hãy nhớ, opcode có thể dài hơn chiều rộng của dòng xe buýt! Nó là rất likley, rằng opcode + dữ liệu mất nhiều cylces để được đọc và sau đó giải mã. - polemon
@polemon Xin lỗi nếu tôi cực kỳ chậm nhưng tôi vẫn không hiểu ... afaik Pentium 4 là bộ xử lý 32 bit, nhưng chắc chắn có opcodes dài hơn 4 byte. Hoặc bạn có nghĩa là chỉ có kích thước opcode tối đa nội bộ, tức là sau khi nó đã được giải mã? Nếu vậy, làm điều đó kích thước được giải mã tối đa thực sự quan trọng với một lập trình viên? - Martin


Các định nghĩa là các thuật ngữ tiếp thị nhiều hơn các thuật ngữ kỹ thuật chính xác.

Trong thuật ngữ kỹ thuật mờ, chúng có liên quan nhiều hơn đến chiều rộng kiến ​​trúc có thể nhìn thấy hơn bất kỳ thanh ghi thực hiện thực tế hoặc chiều rộng bus nào. Ví dụ, 68008 được phân loại là CPU 32 bit, nhưng có thanh ghi 16 bit trong silicon và chỉ có bus dữ liệu 8 bit và bit địa chỉ 20 bit.


1
2017-08-29 10:56



6502 được phân loại là bộ vi xử lý 8 bit, nhưng có thanh ghi địa chỉ 16 bit, bus địa chỉ 16 bit và hướng dẫn 8, 16 và 24 bit. Kiến trúc MIPS có tùy chọn cho dữ liệu 64 bit và địa chỉ 32 bit hoặc 64 bit cho cả hai, nhưng triển khai ban đầu chỉ có các bus 32 bit. Tiếp thị thường ưa thích số lượng lớn nhất có thể, trừ khi nhắm mục tiêu thị trường nhúng chi phí cực thấp. - hotpaw2


http://en.wikipedia.org/wiki/64-bit#64-bit_data_models các mô hình dữ liệu có nghĩa là bitness cho ngôn ngữ.

Cụm từ "Hệ điều hành là x-bit" thường có nghĩa là hệ điều hành được viết cho chế độ cpu x-bit, tức là, Windows 64 bit sử dụng chế độ dài trên x86-64, trong đó thanh ghi là 64 bit và không gian địa chỉ là 64 bit lớn và có sự khác biệt khác biệt từ chế độ 32 bit, trong đó các thanh ghi thông thường là 32-bit và không gian địa chỉ rộng 32 bit. Trên x86, sự khác biệt chính giữa các chế độ 32 và 64 bit là sự hiện diện của phân đoạn trong 32-bit cho khả năng tương thích lịch sử.

Thông thường, hệ điều hành được viết với CPU bitness, x86-64 là một ví dụ đáng chú ý về khả năng tương thích ngược hàng thập kỷ - bạn có thể có mọi thứ từ chương trình chế độ thực 16 bit thông qua các chương trình chế độ bảo vệ 32 bit đến 64 bit chương trình chế độ.

Ngoài ra còn có nhiều cách khác nhau để ảo hóa, vì vậy chương trình của bạn có thể chạy như thể ở chế độ 32 bit, nhưng thực tế nó được thực thi bởi một lõi không phải là x86.


1
2017-08-30 22:19



Để bổ sung, nhiều kiến ​​trúc chỉ có một bit và do đó chỉ có các mô hình dữ liệu ngôn ngữ có ý nghĩa khi nói về bitness trên các kiến ​​trúc này. Các kiến ​​trúc khác, chẳng hạn như ARM, có 32 bit, nhưng có chế độ bổ sung, được gọi là Thumb / Thumb2 giúp tăng mật độ lệnh bằng cách mã hóa một số lệnh trong 16 bit thay vì 32. Chúng vẫn được coi là CPU và HĐH 32 bit chúng chạy thường là 32 bit. - berkus


Sự khác biệt đi xuống đến chiều rộng bit của một tập lệnh được chuyển đến một thanh ghi mục đích chung để vận hành. 16 bit có thể hoạt động trên 2 byte, 64 trên 8 byte lệnh mỗi lần. Bạn thường có thể tăng thông lượng của một bộ xử lý bằng cách thực hiện các lệnh dày đặc hơn cho mỗi chu kỳ đồng hồ.


1
2017-12-27 18:27



Cảm thấy điều này cần một lời giải thích ngắn thay vì dài 7, không chính xác. - htmldrum


Khi chúng ta nói về kiến ​​trúc 2 ^ n bit trong khoa học máy tính thì về cơ bản chúng ta đang nói về thanh ghi bộ nhớ, kích thước bus địa chỉ hoặc kích thước bus dữ liệu. Khái niệm cơ bản đằng sau thuật ngữ 2 ^ n bit là biểu thị rằng ở đây có 2 ^ n bit dữ liệu có thể được sử dụng để xử lý / truyền dữ liệu có kích thước 2 ^ n theo quy trình.


0
2017-08-29 10:54



Rất mờ !!!!! - anonymous
Kiến trúc không giới hạn ở 2 ^ n. Kiến trúc 18, 24 và 36 bit được sử dụng rộng rãi trong thời đại máy tính mini. - dmckee


Theo tôi biết, về mặt kỹ thuật, đó là chiều rộng của các con đường nguyên. Tôi đã nghe nói về 16bit chip có địa chỉ 32bit. Tuy nhiên, trên thực tế, nó là chiều rộng địa chỉ. sizeof (void *) là 16 bit trên chip 16bit, 32 bit trên 32 bit và 64 bit trên 64bit.

Điều này dẫn đến các vấn đề vì C và C ++ cho phép chuyển đổi giữa void * và các kiểu tích phân, và nó an toàn nếu kiểu tích phân đủ lớn (cùng kích thước với con trỏ). Điều này dẫn đến tất cả các loại nội dung không an toàn về mặt

void* p = something;
int i = (int)p;

Mà sẽ kinh hoàng sụp đổ và ghi trên mã 64bit (hoạt động trên 32bit) vì void * bây giờ là gấp đôi lớn như int.

Trong hầu hết các ngôn ngữ, bạn phải làm việc chăm chỉ để quan tâm đến chiều rộng của hệ thống bạn đang làm việc.


0
2017-08-29 10:44



"Nó sẽ khủng khiếp và ghi trên mã 64bit (chỉ hoạt động trên 16bit) vì void * bây giờ gấp hai lần int." Điều này áp dụng cho Windows 64 bit, nhưng không phải là x64-Linux, nơi sizeof (int) == 8. - kusma
Các trường hợp đặc biệt trong đó mã khủng khiếp thực sự có thể làm việc nên được bỏ qua, không được đăng. Ngoài ra, cố định 16bit đến 32bit. - Puppy