Đã được một lúc kể từ khi điều này được hỏi, nhưng tôi ghét những câu hỏi mồ côi :)
Trước tiên, hãy đơn giản hóa quá mức một nền tảng x86 hiện đại và giả vờ nó có 32 bit không gian địa chỉ từ 0x00000000 đến 0xFFFFFFFF. Chúng tôi sẽ bỏ qua tất cả các khu vực đặc biệt / dành riêng, các lỗ TOLUD (trên cùng của các lỗ DRAM có thể sử dụng thấp hơn, theo cách nói của Intel), v.v. Chúng tôi sẽ gọi bản đồ bộ nhớ hệ thống này .
Thứ hai, PCI Express mở rộng PCI. Từ quan điểm phần mềm, chúng rất, rất giống nhau.
Tôi sẽ nhảy đến cái thứ 3 của bạn - không gian cấu hình - đầu tiên. Bất kỳ địa chỉ nào trỏ đến không gian cấu hình đều được phân bổ từ bản đồ bộ nhớ hệ thống . Một thiết bị PCI có không gian cấu hình 256 byte - điều này được mở rộng lên 4KB cho PCI express. Không gian 4KB này tiêu thụ địa chỉ bộ nhớ từ bản đồ bộ nhớ hệ thống, nhưng các giá trị / bit / nội dung thực tế thường được thực hiện trong các thanh ghi trên thiết bị ngoại vi. Chẳng hạn, khi bạn đọc ID nhà cung cấp hoặc ID thiết bị, thiết bị ngoại vi đích sẽ trả về dữ liệu mặc dù địa chỉ bộ nhớ đang được sử dụng là từ bản đồ bộ nhớ hệ thống.
Bạn đã nói rằng đây là "được phân bổ vào RAM" - không đúng sự thật, các bit / phần tử trạng thái thực tế nằm trong thiết bị ngoại vi. Tuy nhiên, chúng được ánh xạ vào bản đồ bộ nhớ hệ thống. Tiếp theo, bạn hỏi liệu đó có phải là một bộ thanh ghi chung trên tất cả các thiết bị PCIe không - có và không. Cách thức hoạt động của không gian cấu hình PCI, có một con trỏ ở cuối mỗi phần cho biết liệu có nhiều "nội dung" cần đọc hay không. Có một mức tối thiểu mà tất cả các thiết bị PCIe phải thực hiện, và sau đó các thiết bị tiên tiến hơn có thể thực hiện nhiều hơn. Về việc nó hữu ích như thế nào đối với hoạt động chức năng, tốt, nó bắt buộc và được sử dụng nhiều. :)
Bây giờ, câu hỏi của bạn về BAR (thanh ghi địa chỉ cơ sở) là một không gian tốt để phân tách thành không gian bộ nhớ và không gian I / O. Là một phần trung tâm x86, đặc điểm kỹ thuật cho phép đặc điểm kỹ thuật của kích thước BAR, ngoài loại. Điều này cho phép một thiết bị yêu cầu một BAR ánh xạ bộ nhớ thông thường hoặc một BAR không gian IO, ăn một số không gian 4K của I / O mà máy x86 có. Bạn sẽ nhận thấy rằng trên các máy PowerPC, các thanh không gian I / O là vô dụng.
Một BAR về cơ bản là cách của thiết bị để báo cho chủ nhà biết nó cần bao nhiêu bộ nhớ và loại nào (đã thảo luận ở trên). Nếu tôi yêu cầu nói 1MB dung lượng ánh xạ bộ nhớ, BIOS có thể gán cho tôi địa chỉ 0x10000000 đến 0x10100000. Điều này không tiêu tốn RAM vật lý, chỉ là không gian địa chỉ (bạn có thấy tại sao hệ thống 32 bit gặp sự cố với thẻ mở rộng như GPU cao cấp có GB RAM không?). Bây giờ, một bộ nhớ ghi / đọc để nói 0x10000004 sẽ được gửi đến thiết bị PCI Express và đó có thể là một thanh ghi rộng byte kết nối với đèn LED. Vì vậy, nếu tôi ghi 0xFF vào địa chỉ bộ nhớ vật lý 0x10000004, nó sẽ bật 8 đèn LED. Đây là tiền đề cơ bản của I / O được ánh xạ bộ nhớ .
Không gian I / O hoạt động tương tự, ngoại trừ nó hoạt động trong một không gian bộ nhớ riêng, không gian I / O x86. Địa chỉ 0x3F8 (COM1) tồn tại cả trong không gian I / O và không gian bộ nhớ và là hai thứ khác nhau.
Câu hỏi cuối cùng của bạn, tin nhắn đề cập đến một loại cơ chế ngắt mới, viết tắt là tin nhắn bị gián đoạn hoặc MSI. Các thiết bị PCI kế thừa có bốn chân ngắt, INTA, INTB, INTC, INTD. Chúng thường bị xáo trộn giữa các vị trí như INTA đã chuyển sang INTA trên Slot 0, sau đó là INTB trên Slot 1, sau đó INTC trên Slot 2, INTD trên Slot 3, sau đó quay lại INTA trên Slot 4. Lý do cho điều này là vì hầu hết PCI các thiết bị chỉ triển khai INTA và bằng cách làm mờ nó, có ba thiết bị, mỗi thiết bị sẽ kết thúc với tín hiệu ngắt riêng của chúng đến bộ điều khiển ngắt. MSI chỉ đơn giản là một cách báo hiệu ngắt bằng cách sử dụng lớp giao thức PCI Express và tổ hợp gốc PCIe (máy chủ) đảm nhiệm việc ngắt CPU.
Câu trả lời này có thể là quá muộn để giúp bạn, nhưng có lẽ nó sẽ giúp một số Googler / Binger trong tương lai.
Cuối cùng, tôi khuyên bạn nên đọc cuốn sách này từ Intel để có phần giới thiệu chi tiết, tốt về PCIe trước khi bạn tiến xa hơn. Một tài liệu tham khảo khác sẽ là Trình điều khiển thiết bị Linux, một ebook trực tuyến từ LWN .