2012-02-10 14 views
8

Tôi hy vọng câu hỏi này được diễn đạt đủ để người khác hiểu.Không gian địa chỉ I/O được ánh xạ tới các thiết bị như thế nào?

Tôi hiểu rằng bộ nhớ chính (RAM) và I/O được điều khiển bằng cổng I/O, nó có không gian địa chỉ riêng mà chỉ dẫn như IN, OUT sử dụng.

Nếu một người viết chương trình lắp ráp chế độ thực, liệu nhà phát triển có tài liệu cần thiết cho biết địa chỉ nào có phạm vi địa chỉ cụ thể trên bo mạch chủ nằm trong dải địa chỉ nào không? Giả sử khe PCIe là địa chỉ X, Máy in Y.

Địa chỉ có phải là một dải địa chỉ tiêu chuẩn tùy thuộc vào loại Bus không?

Tôi có thể đọc gì để hiểu điều này tốt hơn? Hy vọng ai đó có thể giúp đỡ. Cảm ơn.

~ chỉnh sửa

Đề cập đến các hệ thống PC.

+0

Bạn có bất cứ nền tảng cụ thể trong tâm trí? –

+1

Câu trả lời hoàn toàn khác với một PC hàng hóa nơi phần mềm được dự kiến ​​sẽ hoạt động trong nhiều cấu hình khác nhau so với câu trả lời cho một PC nhúng nơi phần mềm chỉ hỗ trợ cấu hình cố định. Bạn cần thu hẹp câu hỏi của mình. –

+0

Xin lỗi. Tôi đang đề cập đến một PC. –

Trả lời

13

Trên máy tính x86, bios thường quản lý phân bổ không gian địa chỉ phẳng/vật lý và mọi thứ sử dụng một số vị trí trong không gian đó. Vì vậy, BIOS sẽ "liệt kê" các thiết bị pcie bằng cách đi ra trên mỗi khe cắm pcie để xem có ai ở đó không. Có các thanh ghi cấu hình tiêu chuẩn mà một thiết bị pcie phải có một số trong đó cho thấy bao nhiêu không gian địa chỉ và loại (I/O dựa hoặc bộ nhớ ánh xạ). các bios cố gắng làm cho mọi người hạnh phúc và cung cấp cho họ những gì họ muốn. Windows hoặc linux sẽ không remap các thiết bị hoặc địa chỉ này, chúng lấy những gì được cung cấp cho chúng bởi bios. không phải mọi hệ thống máy tính đều hoạt động theo cách đó nhưng tiếc là đây là cách hoạt động của PC.

Vì vậy, nếu bạn muốn nhận được vào các loại hạt và bu lông, có được cuốn sách này http://www.mindshare.com/shop/?c=b&section=0A6B150A Tôi nghĩ rằng có một liên kết tải về cho nó nếu bạn google "kiến trúc hệ thống pci"

nếu bạn chạy linux sau đó tìm nguồn cho lspci, có một số thư viện và ví dụ mà bạn có thể tách ra và tự mình kiểm tra thiết bị nào trong hệ thống của bạn và địa chỉ cơ sở và phạm vi bộ nhớ của chúng là gì. Nhiều khả năng bạn sẽ chỉ muốn làm những gì hệ điều hành khác làm và đọc các bộ điều khiển máy chủ pcie để xem những gì đã được phân bổ ở đâu, và cung cấp thông tin đó cho phần mềm chạy trên hệ thống đó. Bạn có thể khởi động một lần và máy in nhận địa chỉ 0xE0000000 và lần tiếp theo 0xDB000000, cung cấp cơ chế cho môi trường của bạn cung cấp địa chỉ hoặc trừu tượng hóa địa chỉ đó trong không gian địa chỉ môi trường và mã của bạn quản lý bản dịch/địa chỉ thực cho thiết bị.

Tôi giả sử bằng cách sử dụng thuật ngữ chế độ thực bạn đang nói về một số hương vị của hệ thống x86, và đó có lẽ là một PC có hương vị nào đó. Có thể là một mac. Không chắc chắn chính xác làm thế nào một mac hiện nó, không biết đủ về điều tra của họ. phần cứng có khả năng vẫn là bộ vi xử lý intel với cầu bắc và nam, sau đó là một số cầu nối pcie hoặc chip intel pcie khác, cuối cùng kết thúc bằng một số thiết bị pcie được hàn lên bảng (chip video, v.v.) hoặc khe cắm pcie để cắm thẻ. Nếu bạn chạy Linux và sử dụng lspci và nhìn vào số nhà cung cấp và phần, bạn có thể tìm thấy hầu hết các tài liệu hướng dẫn/datasheets cho các thiết bị intel (vendor ID 8086) tại trang web intel, và bạn có thể sử dụng lspci và các chương trình anh chị em của nó để kiểm tra điều khiển và đăng ký trạng thái trong các bộ điều khiển pcie, một lần nữa nếu bạn quan tâm đến việc đào sâu hơn vào điều này, tôi không chắc chắn về sự quan tâm thực sự của bạn là gì.

Địa chỉ không phải là chuẩn, cũng không cố định, mỗi bios là tùy chỉnh cho mô hình bo mạch chủ, phạm vi địa chỉ cho không gian pcie thường là một gig hoặc ít hơn toàn bộ bộ xử lý, nhưng cửa sổ đó đang thay đổi di chuyển đến 64 bit và cần thêm không gian (di chuyển chậm).vị trí của cửa sổ pcie đó phụ thuộc vào phần cứng (xem datasheets mà tôi đã đề cập cho các thiết bị intel khác nhau, hoặc qua hoặc nvidia hoặc bất cứ ai nếu nó là hệ thống amd) nếu bios được cấu hình để chạy ở chế độ 32 bit, cửa sổ pcie cho tất cả các thiết bị pcie có thể là một nơi nào đó giữa 2 buổi biểu diễn nhưng tất nhiên dưới nhãn hiệu 4 gig, nhưng điều đó không có nghĩa là tất cả các hệ thống này sử dụng dấu 3 gig. cho 64 bit, tôi nghĩ rằng họ có xu hướng được gần đầu là tốt, nhưng từ bo mạch chủ để ban mẹ nó thay đổi. Sau đó, khi nói đến việc liệt kê bus, nó là cả hai bo mạch chủ cụ thể và máy tính cá nhân cụ thể, một số thiết bị được gắn/hàn vào bo mạch chủ và được liệt kê theo cùng thứ tự mỗi lần, nhưng thẻ bạn cắm vào các khe, phải trả lời máy chủ và đôi khi được liệt kê dựa trên câu trả lời đầu tiên, bạn có thể khởi động 20 lần và xem cùng một bố cục, khởi động thêm một lần nữa và hai thẻ có thể hoán đổi vị trí vì thứ tự chúng được liệt kê thay đổi. Vì vậy, ngay cả khi nó xuất hiện thẻ video của bạn luôn ở cùng một vị trí, không hardcode số đó bất cứ nơi nào, luôn quét xe buýt pcie hoặc bảng hoặc thực hiện cuộc gọi thư viện để tìm ra những gì là ở đâu. nó có lẽ sẽ không di chuyển một khi bạn tìm thấy một cái gì đó cho đến khi bạn khởi động lại và thử lại vì vậy bạn không cần phải tiếp tục quét để tìm nơi mà một cái gì đó là mỗi khi bạn muốn truy cập nó.

có, nếu bạn nâng cấp hoặc hạ cấp bios của bạn, bios chỉ là phần mềm, đôi khi thay đổi bios phải làm với điều tra pcie (không phải là không phổ biến, nói rằng một card video phổ biến không hoạt động tốt trên bo mạch chủ họ đặt một mod vào phần mềm bios để thay đổi thiết lập lại hoặc bất cứ điều gì để cung cấp cho thẻ đó một cơ hội tốt hơn tại nơi làm việc) và có thể thay đổi điều tra cho toàn bộ hệ thống.

+0

Cảm ơn! Điều đó giúp ích rất nhiều. –

+0

Câu trả lời này là tốt, nhưng nó không bao gồm một chi tiết quan trọng: BIOS chính xác truyền thông cổng I/O ánh xạ tới CPU như thế nào? –

0

Nếu một người viết một chương trình lắp ráp chế độ thực

ISRs là những gì bạn có thể sau (Interrupt Service thói quen).
;

Đây là danh sách các địa chỉ xử lý ngắt được lưu trữ trong phân đoạn bộ nhớ đầu tiên. (đoạn 0000). Mỗi số ngắt có một địa chỉ xử lý 4 byte, phân đoạn và bù đắp, đến mà một chương trình sẽ chi nhánh khi ngắt được gọi.

Địa chỉ có thể được tìm thấy bằng cách nhân số ngắt bằng 4, đó là giá trị bù trừ tại đó địa chỉ của trình xử lý được lưu trữ.

Vị trí ISR có thể được định nghĩa là 0000: ax * 4, ngắt DOS có số chung 21h. Vì vậy, chỉ cần tải rìu với điều đó (hoặc al)

Có một danh sách các hệ điều hành DOS ngắt đây ... đó là khá lớn ...

http://www.ctyme.com/intr/int-21.htm