Là bảng trang đi bộ được lưu trữ?


12

Trên bộ vi xử lý có quản lý TLB phần cứng (giả sử Intel x86-64) nếu xảy ra lỗi TLB và bộ xử lý đang đi qua bảng trang, những bộ nhớ (ngoài chip) này có đi qua hệ thống phân cấp bộ đệm (L1, L2, v.v.) )?


Không có gì để làm với thiết kế điện tử. Câu hỏi sẽ được đóng lại.
Leon Heller

8
Đó là hỏi làm thế nào một con chip cụ thể hoạt động, vì vậy tôi nghĩ đó là về chủ đề.
Olin Lathrop

5
@OlinLathrop: Tôi đồng ý: Tôi nghĩ các chi tiết cấp thấp của một mạch tích hợp là theo chủ đề.
davidcary

Tôi phải đồng ý, nếu không có gì khác, gỡ lỗi chức năng của bộ xử lý của chúng tôi là một bước quan trọng để có được một hệ thống xác định rõ ràng được thiết kế. Điều này đang tiến gần hơn đến một trong những ranh giới của chúng ta, nhưng dường như bên trong mạnh mẽ.
Kortuk

Câu trả lời:


8

Có, theo như tôi có thể nói, trên các bộ xử lý Intel x86-64, khi xảy ra lỗi TLB và bộ xử lý đang đi trên bảng trang, các truy cập bộ nhớ ngoài chip đó sẽ đi qua hệ thống phân cấp bộ đệm.

Tôi vẫn còn hơi mơ hồ về một vài chi tiết và tôi hy vọng một số câu trả lời khác sẽ điền vào chúng - không có hướng dẫn sử dụng Intel hay AMD mô tả trang đi bộ chi tiết không? Hiểu biết của tôi là:

  • Địa chỉ ảo trong một số thanh ghi địa chỉ trước tiên được chuyển sang TLB nhanh để được chuyển đổi thành địa chỉ vật lý - địa chỉ trong PC được chuyển đến L1 ITLB, địa chỉ trong bất kỳ thanh ghi nào khác được chuyển đến L1 DTLB .
  • Nếu lần tra cứu đầu tiên đó bị bỏ lỡ, sẽ có một mức độ TLB chậm hơn, lớn hơn được thử. (Đây có phải là TLB L2 được chia thành ITLB và DTLB không, hay nó là bộ đệm TLB hợp nhất? Có các mức TLB tiếp theo - L3? L4?)
  • Nếu quá trình tra cứu TLB hoàn toàn thất bại và trình đi bộ VHPT x86 và x86-64 bị vô hiệu hóa, CPU sẽ báo hiệu lỗi TLB, bị chặn bởi nhân hệ điều hành. Sự hiểu biết của tôi là thực tế tất cả các CPU không phải x86 đều làm điều tương tự - xử lý các lỗi TLB hoàn toàn trong phần mềm. Nếu được bật, bộ xử lý x86 và x86-64 có trình đi bộ bảng VHPT hỗ trợ phần cứng xử lý một số bước tiếp theo. (Các chip x86 và x86-64 có một bit hoàn toàn vô hiệu hóa VHPT hay có nhiều bit có thể kích hoạt VHPT cho một số phạm vi địa chỉ và vô hiệu hóa VHPT cho các dải địa chỉ khác không? Các bit đó nằm ở đâu?)
  • nếu việc tra cứu TLB hoàn toàn thất bại, địa chỉ ảo gốc (có thể là chế độ người dùng) được chuyển đổi thành V2, địa chỉ ảo của mục nhập bảng trang PTE chứa số trang vật lý cho V1.
  • Do V2 lại là một địa chỉ ảo, CPU đi qua bản dịch địa chỉ ảo thành vật lý thông thường, ngoại trừ nó bỏ qua L1 và chuyển sang L2.
  • Phần cứng tìm kiếm địa chỉ ảo V2 trong TLB song song với việc tìm nạp PTE đó từ bộ đệm L2 (hầu như được lập chỉ mục).
  • Vì V2 không phải là địa chỉ của một lệnh, nên nó không đi qua bộ đệm của lệnh L1; và vì V2 không phải là địa chỉ của dữ liệu người dùng thông thường, nên nó không đi qua bộ đệm dữ liệu L1. V2 được đưa vào ban đầu vào bộ đệm hợp nhất L2 (một lệnh hợp nhất + dữ liệu + bộ đệm PTE). Xem "ví dụ phân cấp bộ đệm" .
  • Nếu bộ đệm L2 (hoặc L3 hoặc bất kỳ bộ đệm gần như được lập chỉ mục nào khác) chứa PTE, thì VHPT tìm nạp PTE từ bộ nhớ đệm và cài đặt PTE cho V1 trong TLB và địa chỉ vật lý trong PTE đó được sử dụng để dịch địa chỉ ảo gốc V1 vào địa chỉ RAM vật lý, cuối cùng lấy dữ liệu hoặc hướng dẫn đó hoàn toàn bằng phần cứng mà không cần bất kỳ sự trợ giúp nào từ HĐH.
  • Nếu tất cả các cấp của bộ đệm hầu như được lập chỉ mục đều thất bại, nhưng việc tìm kiếm TLB thứ hai này thành công với V2, thì VHPT sẽ lấy PTE từ bộ đệm được lập chỉ mục vật lý hoặc từ bộ nhớ chính, cài đặt PTE cho V1 trong TLB và địa chỉ vật lý trong đó PTE được sử dụng để dịch địa chỉ ảo gốc V1 thành địa chỉ RAM vật lý, cuối cùng lấy dữ liệu hoặc hướng dẫn đó hoàn toàn bằng phần cứng mà không cần bất kỳ sự trợ giúp nào từ HĐH.
  • Nếu quá trình tra cứu TLB thứ hai này không thành công, máy đi bộ VHPT phần cứng sẽ bỏ qua FAULT TRANSLATION FAULT.
  • Khi xảy ra lỗi FAPT TRANSLATION FAULT, CPU sẽ bẫy hệ điều hành. Hệ điều hành phải tìm ra những gì đã sai và sửa chữa mọi thứ:
  • (a) có lẽ trang chứa V2 hiện được hoán đổi ra đĩa, do đó HĐH đọc nó vào RAM và khởi động lại lệnh không thành công, hoặc
  • (b) có lẽ một chương trình lỗi đang cố đọc hoặc ghi hoặc thực thi một số vị trí không hợp lệ và HĐH chấm dứt quá trình, hoặc
  • (c) một loạt các thủ thuật khác mà người viết hệ điều hành thực hiện để sử dụng cơ chế này để bẫy các loại quyền truy cập khác nhau - tải trang chứa V1 có thể bị tráo đổi ra đĩa; các bẫy khác nhau được sử dụng để gỡ lỗi các chương trình mới; để mô phỏng "W ^ X" trên các CPU không hỗ trợ trực tiếp; để hỗ trợ sao chép trên văn bản; Vân vân.

Sơ đồ trên trang 2 của Thomas W. Barr, Alan L. Cox, Scott Rixner. "Bộ đệm dịch: Bỏ qua, không đi bộ (Bảng trang)" vẽ một đường giữa "Các mục được lưu trữ bởi bộ đệm MMU" và "các mục được lưu trữ bởi bộ đệm dữ liệu L2". (Đây có thể là một bài viết hữu ích cho những người thiết kế CPU mới , hoàn toàn thuộc chủ đề cho "Thiết kế điện tử").

Stephane Eranian và David Mosberger. "Bộ nhớ ảo trong hạt nhân Linux IA-64" và Ulrich Drepper. "Điều mà mọi lập trình viên nên biết về bộ nhớ" (Đây có thể là một bài viết hữu ích cho những người viết các hệ điều hành liên quan đến bảng trang IA-64, một chút lạc đề đối với ED - có lẽ là Stack Overflow với "hoạt động- thẻ hệ thống " hoặc thẻ " osdev " hoặc wiki OSDev.org sẽ là nơi tốt hơn cho chủ đề đó).

Bảng A-10 trên trang 533 của Intel. "Hướng dẫn dành cho nhà phát triển phần mềm kiến ​​trúc Intel® 64 và IA-32" "PAGE_WALKS.CYCLES ... có thể gợi ý xem hầu hết các trang đi bộ có được thỏa mãn bởi bộ đệm hay gây ra lỗi bộ nhớ cache L2 hay không."


Tôi thích câu trả lời, nhưng tôi có lẽ là một trong số nhiều người không có chuyên môn cần thiết để cảm thấy thoải mái khi đưa ra những gì có lẽ là một upvote xứng đáng. Khi các chuyên gia khác xác minh, tôi sẽ cung cấp cho đại diện mà bạn đã kiếm được.
Kortuk

Tôi không tin điều này là chính xác. Bullet 1 + 2 về tra cứu TLB là AFAICT chính xác, nhưng 3 thì không. Bảng trang đi trên x86 (hoặc x86-64) không được xử lý trong phần mềm (áp dụng ngoại lệ, xem sau) nhưng trong phần cứng. Tức là khi CPU xác định nó không thể giải quyết địa chỉ bằng TLB, nó sẽ tự đi theo các bảng trang bắt đầu từ bảng được chỉ ra bởi thanh ghi CR3. Chỉ khi độ phân giải này không thành công, nó mới gọi trình xử lý lỗi trang của CPU. Ngoại lệ là các phần mở rộng ảo hóa trong đó ở một số chế độ, trình ảo hóa sẽ giải quyết lỗi trang xảy ra trong máy khách.
Morty

Tôi không nghĩ x86 có cách cập nhật TLB phần mềm. Các ISA cho phép xử lý TLB mềm có các hướng dẫn đặc biệt cho SW để sửa đổi các mục TLB, nhưng tôi không nghĩ x86 có điều đó, ngoài invlpgviệc vô hiệu hóa bất kỳ bộ nhớ cache TLB nào cho một addr đức cụ thể. Nếu lối đi trang CTNH không tìm thấy mục nhập cho địa chỉ ảo đó hoặc quyền của mục nhập không cho phép truy cập, bạn sẽ có #PFngoại lệ. HĐH xử lý việc đó bằng cách cập nhật bảng trang (có thể sau khi phân trang dữ liệu từ đĩa hoặc thực hiện sao chép khi ghi), sau đó tiếp tục lại để tải / lưu trữ bị lỗi sẽ chạy lại và việc chuyển trang CTNH sẽ thành công.
Peter Cordes


4

Tôi có xu hướng đồng ý rằng cái này thuộc về stackexchange, không phải là stackexchange, nhưng vì đây là:

@davidcary là chính xác.

Một số lịch sử:

Việc đi bộ bảng trang Intel x86 KHÔNG được lưu trong bộ nhớ cache cho đến P5, còn gọi là Pentium. Chính xác hơn, truy cập bộ nhớ của bảng trang không được lưu vào bộ đệm, bỏ qua bộ đệm. Vì hầu hết các máy tính đến thời điểm đó đều được ghi lại, chúng nhận được các giá trị phù hợp với bộ đệm. Nhưng họ không rình mò bộ nhớ cache.

P6, còn gọi là Pentium Pro và AFAIK, tất cả các lần đi bộ trang của bộ xử lý tiếp theo đều được phép truy cập bộ đệm và sử dụng giá trị được lấy từ bộ đệm. Vì vậy, họ đã làm việc với bộ đệm ghi lại. (Tất nhiên bạn có thể đặt các bảng trang trong bộ nhớ không thể quản lý, được xác định, ví dụ bởi MTRR. Nhưng đó là một mất hiệu suất lớn, mặc dù nó có thể hữu ích để gỡ lỗi các hệ điều hành.)

Nhân tiện, "truy cập bộ nhớ đi bộ bảng trang này có thể truy cập vào bộ đệm dữ liệu" tách biệt với "các mục trong bảng trang có thể được lưu trữ (được lưu trong bộ đệm) trong Bộ đệm tìm kiếm TLB Ttranslation)." Trên một số máy, TLB được gọi là "Bộ đệm dịch".

Một vấn đề khác có liên quan là các nút bên trong của các bảng trang có thể được lưu trong bộ dữ liệu giống như TLB hơn, ví dụ: bộ đệm PDE.

Một điểm khác biệt chính: bộ đệm dữ liệu được kết hợp và theo dõi. Nhưng bộ nhớ cache TLB và PDE không được rình mò, tức là không mạch lạc. Điểm mấu chốt là, vì các bảng trang có thể được lưu trong bộ đệm TLB và bộ đệm PDE không kết hợp, v.v., phần mềm phải xóa một cách rõ ràng các mục riêng lẻ hoặc nhóm hàng loạt (như toàn bộ TLB), khi các mục trong bảng trang có thể đã được như vậy lưu trữ được thay đổi. Ít nhất là khi thay đổi theo cách "nguy hiểm", đi từ RW-> R-> I hoặc thay đổi địa chỉ.

Tôi nghĩ thật công bằng khi nói rằng mỗi khi một loại bộ nhớ đệm giống như TLB không kết hợp mới được thêm vào, một số HĐH đã bị hỏng, bởi vì nó đã giả định rằng điều này không được thực hiện.


Một comp mới . vòm. đề nghị se bắt đầu chỉ "3 tháng trước". Tôi nghĩ rằng có một cái trước đó không bao giờ được đưa ra khỏi khu vực51 (không đủ người theo dõi?).
Paul A. Clayton
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.