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?
Trả lời
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:
- Introduction
- CPU Caches
- Virtual Memory
- NUMA Support
- Programmers
- More Programmers
- Performance Tools
- Future
- 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.
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ọ.
- 1. Lẫn lộn khi tìm nạp dữ liệu từ JSON
- 2. Tìm nạp JPA dữ liệu mùa xuân
- 3. Thuộc tính được tìm nạp trong Dữ liệu chính
- 4. Kết hợp tìm nạp dữ liệu lõi
- 5. Liên tục tìm nạp dữ liệu từ cơ sở dữ liệu bằng cách sử dụng Java
- 6. Tìm nạp dữ liệu từ cơ sở dữ liệu MySQL tới danh sách thả xuống html
- 7. Cách xác định khi nào dữ liệu jQuery được tạo và được nạp với dữ liệu
- 8. Backbone.js Tìm nạp dữ liệu phức tạp hơn và sử dụng như một bộ sưu tập
- 9. Tìm nạp nền dữ liệu chính qua NSPrivateQueueConcurrencyType mới
- 10. Tìm nạp dữ liệu cốt lõi cực kỳ chậm
- 11. Tìm nạp hoặc gửi dữ liệu từ biểu mẫu bằng cách sử dụng knockout.js
- 12. JDBC với siêu dữ liệu chậm Spring tìm nạp Oracle
- 13. MySQL không tìm nạp dữ liệu chính xác? (PHP)
- 14. Mối quan hệ kho dữ liệu cốt lõi với các thuộc tính được tìm nạp
- 15. Bộ định tuyến đường trục: chờ dữ liệu được tìm nạp trước tiên
- 16. Tôi có thể sử dụng dữ liệu được đăng từ ajax trong bình như thế nào?
- 17. Cách tìm nạp Siêu dữ liệu từ kênh radio shoutcast cho Windowsphone?
- 18. Thuật toán tìm nạp theo lô của Hibernate hoạt động như thế nào?
- 19. Làm cách nào để tìm nạp dữ liệu từ URL, sử dụng xcode 4.3.1 với Tham chiếu lớp NSJSONSerialization
- 20. Dữ liệu bất biến "đốt cháy" RAM trong D?
- 21. Làm cách nào tôi có thể tìm nạp các kiểu dữ liệu chính xác từ MySQL với PDO?
- 22. Làm thế nào để bạn xử lý các luồng riêng biệt tìm nạp dữ liệu trong iOS?
- 23. Sắp xếp dữ liệu lớn hơn kích thước RAM
- 24. Nạp dữ liệu vào cơ sở dữ liệu từ ứng dụng Android qua dịch vụ web
- 25. Các biến toàn cục được trình nạp elf khởi tạo như thế nào
- 26. Chuyển dữ liệu từ trang ASP.NET tới các điều khiển người dùng ASCX được nạp động
- 27. Cách tìm nạp các giá trị khác biệt trong Dữ liệu chính?
- 28. Làm thế nào để tải 1 triệu hồ sơ từ cơ sở dữ liệu nhanh chóng?
- 29. Bảo vệ dữ liệu iOS hoạt động như thế nào
- 30. Redis hoạt động như thế nào khi RAM bắt đầu lấp đầy?
Đ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
@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
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 –