2012-03-17 38 views
5

Trong C, mỗi byte là địa chỉ riêng. Giả sử một số nguyên (có sử dụng 4 byte) có địa chỉ 0xaddr (là 32 bit, giả sử rằng chúng ta có bộ xử lý 32 bit với bus địa chỉ 32 bit và bus dữ liệu 32 bit) và giả sử giá trị của số nguyên là 0x12345678. Bây giờ nếu tôi lấy giá trị này từ bộ nhớ, bộ vi xử lý làm như thế nào? Bộ xử lý có đặt 0xaddr (địa chỉ 32 bit) trên các dòng địa chỉ và sau đó tìm nạp dữ liệu 8 bit nói 0x12. Và sau đó bộ xử lý sẽ tăng tốc độ 0xaddr+1 trên các dòng địa chỉ và sau đó tìm nạp dữ liệu 8 bit khác 0x34 và cứ tiếp tục cho 4 byte của một số nguyên? Hay bộ xử lý chỉ cần đặt 0xaddr và đọc 4 byte cùng một lúc, do đó sử dụng bus dữ liệu 32 bit đầy đủ của nó?Dữ liệu từ RAM được tìm nạp như thế nào?

+0

Điều đó tùy thuộc. Bạn đang nói về bộ vi xử lý chính xác nào? IIRC 8086 có bus dữ liệu 16 bit. Nhiều mô hình mới hơn (Pentium trở lên) có FSB 64bit. – harold

+0

@harold: bạn có thể plz cho tôi biết sự khác biệt của nó đối với các bộ xử lý khác nhau không. tôi yêu cầu nói chung và không cụ thể cho bất kỳ bộ vi xử lý nào. làm thế nào nó sẽ được thực hiện nói fo 8086 trong đó có 16 bit dữ liệu xe buýt, và làm thế nào cho 32 bit dữ liệu xe buýt và cho 64? cảm ơn – mezda

+0

nó phức tạp hơn nhiều so với một bus dữ liệu đơn giản, cũng có bộ nhớ cache –

Trả lời

5

This is a well known article bởi thư viện GNU C dẫn mô tả quyền truy cập bộ nhớ (đặc biệt là trong các hệ thống PC hiện tại x86).Nó đi sâu vào chi tiết hơn bạn có thể cần.

Toàn bộ bài viết được trải rộng trên nhiều khu vực:

  1. Introduction
  2. CPU Caches
  3. Virtual Memory
  4. NUMA Support
  5. Programmers
  6. More Programmers
  7. Performance Tools
  8. Future
  9. Appendices

một điều tôi muốn thêm vào câu trả lời của gbulmer là trong nhiều hệ thống nhận được một dòng dữ liệu nhanh hơn bạn mong chờ từ nhận được một lời nào. nói cách khác, chọn nơi bạn muốn đọc từ một thời gian, nhưng bạn đã chọn từ đó, đọc từ điểm đó, và sau đó là 32 hoặc 64 hoặc bit bất kỳ, và sau đó ... nhanh hơn chuyển sang một số nơi không được kết nối và đọc một giá trị khác.

và những gì thống trị lập trình hiện đại không phải là hành vi tìm nạp từ bộ nhớ trên bo mạch chủ, nhưng liệu dữ liệu có trong bộ nhớ cache cpu hay không.

4

Nếu bạn tìm kiếm trên web cho "Kiến trúc máy tính", bạn có thể nhận được một số câu trả lời cho câu hỏi của mình.

Đối với câu hỏi cụ thể của bạn, máy tính 32 bit, với dữ liệu 32 bit và bus địa chỉ, trong trường hợp đơn giản, không có phần cứng gây khó hiểu. Nó sẽ đọc 32 bit từ bộ nhớ rộng 32 bit.

Đây là loại phần cứng tồn tại từ cuối những năm 1970 như minicompters (ví dụ DEC VAX) và vẫn tồn tại dưới dạng bộ vi xử lý (x86, ARM, Cortex-A8, MIPS32) và bên trong một số vi điều khiển (ví dụ ARM, Cortex- M3, PIC32, v.v.).

Trường hợp đơn giản nhất: Bus địa chỉ là tập hợp các tín hiệu (dây) mang tín hiệu địa chỉ đến bộ nhớ, cộng thêm một vài tín hiệu để giao tiếp xem bộ nhớ có được 'đọc từ' hay 'ghi' hay không hướng) và liệu tín hiệu trên dây địa chỉ và hướng dữ liệu có hợp lệ hay không. Trong trường hợp ví dụ của bạn, có thể có 32 dây để mang mẫu bit của địa chỉ.

Bus dữ liệu là bộ dây thứ hai liên lạc giá trị đến và từ bộ nhớ. Bộ nhớ có thể khẳng định một tín hiệu để nói rằng dữ liệu là hợp lệ, nhưng nó chỉ có thể đủ nhanh để mọi thứ 'hoạt động'.

Khi bộ xử lý đặt địa chỉ trên tín hiệu địa chỉ, nó muốn đọc từ bộ nhớ (hướng dữ liệu là 'đọc'), bộ nhớ sẽ lấy giá trị được lưu trữ tại địa chỉ đó và đặt nó vào tín hiệu bus dữ liệu. Bộ xử lý (sau khi sự chậm trễ và tín hiệu phù hợp) sẽ lấy mẫu các dây cáp dữ liệu, và đó là giá trị mà nó sử dụng.

Bộ xử lý có thể đọc toàn bộ 32 bit và trích xuất byte (nếu đó là tất cả yêu cầu) bên trong hoặc bus địa chỉ bên ngoài có thể cung cấp thêm tín hiệu để hệ thống bộ nhớ ngoài có thể được xây dựng để cung cấp byte thích hợp , giá trị byte kép hoặc byte bốn. Trong nhiều năm, các phiên bản kiến ​​trúc bộ vi xử lý ARM chỉ có thể đọc toàn bộ 32 bit và các phần nhỏ hơn, e, g, một byte, được trích xuất trong nội bộ.

Bạn có thể xem ví dụ về loại tín hiệu được đặt tại http://www.cpu-world.com/info/Pinouts/68000.html Chip đó chỉ có bus địa chỉ 24 bit và bus dữ liệu 16 bit. Có hai tín hiệu (UDS và LDS) báo hiệu tín hiệu dữ liệu trên đang được sử dụng, tín hiệu dữ liệu thấp hơn hoặc cả hai.

Tôi tìm thấy giải thích hợp lý chi tiết tại research.cs.tamu.edu/prism/lectures/mbsd/mbsd_l15.pdf Tôi thấy rằng bằng cách tìm kiếm "68000 chu kỳ bus bộ nhớ".

Bạn có thể tìm kiếm MIPS, ARM hoặc x86 một cách hữu ích để xem chu kỳ xe buýt của họ.

Các vấn đề liên quan