Trang chủ » làm thế nào để » Tại sao CPU x86 chỉ sử dụng hai trong số bốn vòng Nhẫn Nhẫn?

    Tại sao CPU x86 chỉ sử dụng hai trong số bốn vòng Nhẫn Nhẫn?

    Khi tìm hiểu thêm về cách các hệ điều hành và phần cứng chúng chạy trong công việc và tương tác với nhau, bạn có thể ngạc nhiên khi thấy những gì có vẻ là kỳ quặc hoặc sử dụng kém tài nguyên của Cameron xảy ra. Tại sao vậy? Bài hỏi và trả lời của SuperUser hôm nay có câu trả lời cho câu hỏi của người đọc tò mò.

    Phiên hỏi và trả lời hôm nay đến với chúng tôi nhờ sự hỗ trợ của SuperUser - một phân ngành của Stack Exchange, một nhóm các trang web Hỏi & Đáp do cộng đồng điều khiển.

    Hình ảnh lịch sự của Lemsipmatt (Flickr).

    Câu hỏi

    Trình đọc siêu người dùng AdHominem muốn biết tại sao CPU x86 chỉ sử dụng hai trong bốn vòng:

    Hệ thống x86 dựa trên Linux và Windows chỉ sử dụng Nhẫn 0 cho chế độ kernel và Vòng 3 cho chế độ người dùng. Tại sao các bộ xử lý thậm chí phân biệt bốn vòng khác nhau nếu tất cả cuối cùng chỉ sử dụng hai trong số chúng? Điều này đã thay đổi với kiến ​​trúc AMD64?

    Tại sao CPU x86 chỉ sử dụng hai trong số bốn vòng?

    Câu trả lời

    Người đóng góp cho SuperUser Jamie Hanrahan có câu trả lời cho chúng tôi:

    Có hai lý do chính.

    Đầu tiên là, mặc dù các CPU x86 có bốn vòng bảo vệ bộ nhớ, nhưng độ chi tiết của bảo vệ được cung cấp do đó chỉ ở mức trên mỗi phân đoạn. Nghĩa là, mỗi phân đoạn có thể được đặt thành một vòng cụ thể (cấp đặc quyền) cùng với các biện pháp bảo vệ khác như vô hiệu hóa ghi. Nhưng không có nhiều mô tả phân khúc có sẵn. Hầu hết các hệ điều hành đều muốn có mức độ chi tiết bảo vệ bộ nhớ tốt hơn nhiều, giống như đối với các trang riêng lẻ.

    Vì vậy, nhập trang bảo vệ dựa trên bảng. Hầu hết, nếu không phải là tất cả, các hệ điều hành x86 hiện đại ít nhiều bỏ qua cơ chế phân đoạn (càng nhiều càng tốt) và dựa vào sự bảo vệ có sẵn từ các bit thứ tự thấp trong các mục trong bảng trang. Một trong số đó được gọi là bit bit đặc quyền của Wap. Bit này kiểm soát xem bộ xử lý có phải thuộc một trong các cấp độ đặc quyền của Wap để truy cập trang hay không. Các cấp độ đặc quyền của thành phố là PL 0, 1 và 2. Nhưng nó chỉ là một bit, vì vậy ở cấp độ bảo vệ từng trang, số lượng các chế độ điều khiển có sẵn như liên quan đến bảo vệ bộ nhớ chỉ là hai: Một trang có thể truy cập được từ chế độ không đặc quyền, hoặc không. Do đó, chỉ cần hai vòng. Để có bốn vòng có thể có cho mỗi trang, họ sẽ phải có hai bit bảo vệ trong mỗi mục nhập bảng trang để mã hóa một trong bốn số vòng có thể (giống như mô tả phân đoạn). Tuy nhiên, họ không.

    Lý do khác là mong muốn cho tính di động của hệ điều hành. Nó không chỉ là về x86; Unix đã dạy chúng tôi rằng một hệ điều hành có thể tương đối di động đối với nhiều kiến ​​trúc bộ xử lý và đó là một điều tốt. Và một số bộ xử lý chỉ hỗ trợ hai vòng. Do không phụ thuộc vào nhiều vòng trong kiến ​​trúc, những người triển khai hệ điều hành đã làm cho các hệ điều hành trở nên linh hoạt hơn.

    Có một lý do thứ ba dành riêng cho phát triển Windows NT. Các nhà thiết kế của NT (David Cutler và nhóm của anh ấy, người mà Microsoft thuê từ DEC Western Region Labs) đã có nhiều kinh nghiệm trước đây về VMS; thực tế, Cutler và một vài người khác là một trong những nhà thiết kế ban đầu của VMS. Và bộ xử lý VAX mà VMS được thiết kế có bốn vòng (VMS sử dụng bốn vòng).

    Nhưng các thành phần chạy trong VMS Nhẫn 1 và 2 (Dịch vụ quản lý hồ sơ và CLI, tương ứng) bị loại khỏi thiết kế NT. Vòng 2 trong VMS không thực sự là về bảo mật hệ điều hành, mà là bảo vệ môi trường CLI của người dùng từ chương trình này sang chương trình tiếp theo và Windows không có khái niệm đó; CLI chạy như một quy trình thông thường. Đối với VMS Vòng 1, mã RMS trong Vòng 1 phải gọi vào Nhẫn 0 khá thường xuyên, và chuyển tiếp vòng là đắt tiền. Hóa ra là hiệu quả hơn nhiều khi chỉ đi đến Nhẫn 0 và được thực hiện với nó hơn là có rất nhiều Nhẫn 0 chuyển tiếp trong Vòng 1 mã (một lần nữa, không phải NT có bất cứ thứ gì như RMS không).

    Về lý do tại sao x86 triển khai bốn vòng trong khi các hệ điều hành không sử dụng chúng, bạn đang nói về các hệ điều hành có thiết kế gần đây hơn x86. Rất nhiều tính năng lập trình hệ thống của x86 đã được thiết kế từ lâu trước khi các hạt nhân Unix hoặc ish thực sự được triển khai trên nó và họ không thực sự biết hệ điều hành sẽ sử dụng cái gì. Mãi cho đến khi chúng tôi phân trang trên x86, chúng tôi mới có thể triển khai các nhân giống như Unix-ish hoặc VMS thực sự.

    Các hệ điều hành x86 hiện đại không chỉ bỏ qua việc phân đoạn (chúng chỉ thiết lập các phân đoạn C, D và S với địa chỉ cơ sở là 0 và kích thước 4 GB; đôi khi các phân đoạn F và G được sử dụng để trỏ đến các cấu trúc dữ liệu của hệ điều hành chính ), họ cũng bỏ qua phần lớn những thứ như phân đoạn trạng thái nhiệm vụ của Cameron. Cơ chế TSS được thiết kế rõ ràng để chuyển đổi ngữ cảnh luồng, nhưng hóa ra nó có quá nhiều tác dụng phụ, vì vậy các hệ điều hành x86 hiện đại thực hiện nó bằng tay bằng tay. Lần duy nhất x86 NT thay đổi tác vụ phần cứng là đối với một số điều kiện thực sự đặc biệt, như ngoại lệ lỗi kép.

    Về kiến ​​trúc x64, rất nhiều tính năng không được sử dụng này đã bị bỏ qua. Đối với tín dụng của họ, AMD thực sự đã nói chuyện với các nhóm nhân hệ điều hành và hỏi họ cần gì từ x86, họ không cần hay không muốn gì và họ muốn thêm gì. Các phân đoạn trên x64 chỉ tồn tại ở dạng có thể được gọi là hình thức tiền đình, chuyển đổi trạng thái tác vụ không tồn tại, v.v. và các hệ điều hành tiếp tục sử dụng chỉ hai vòng.


    Có một cái gì đó để thêm vào lời giải thích? Tắt âm thanh trong các ý kiến. Bạn muốn đọc thêm câu trả lời từ những người dùng Stack Exchange am hiểu công nghệ khác? Kiểm tra chủ đề thảo luận đầy đủ ở đây.