2010-04-26 25 views
34

Tôi đọc báo cáo kết quả sau:Tại sao Linux không sử dụng chuyển đổi ngữ cảnh phần cứng thông qua TSS?

Kiến trúc x86 bao gồm một loại phân khúc cụ thể gọi Task Nhà nước Segment (TSS), để lưu trữ phần cứng ngữ cảnh. Mặc dù Linux không sử dụng các công tắc ngữ cảnh phần cứng , tuy nhiên, đó là dù sao cũng buộc phải thiết lập TSS cho mỗi CPU riêng biệt trong hệ thống.

tôi tự hỏi:

  • Tại sao không phải Linux sử dụng sự hỗ trợ phần cứng cho chuyển đổi bối cảnh?
  • Phương pháp tiếp cận phần cứng có nhanh hơn nhiều so với cách tiếp cận phần mềm không?
  • Có HĐH nào tận dụng lợi thế của công tắc ngữ cảnh phần cứng không? Cửa sổ có sử dụng nó không?

Cuối cùng và luôn như vậy, cảm ơn sự kiên nhẫn và trả lời của bạn.

----------- Thêm --------------

http://wiki.osdev.org/Context_Switching có một số lời giải thích.

Mọi người bối rối như tôi có thể xem qua. 8 ^)

+1

Tôi có thể đã thề rằng tôi chỉ đang đọc diễn đàn OSDev và đọc phần này;) – Earlz

Trả lời

37

TSS x86 rất chậm đối với đa nhiệm phần cứng và hầu như không có lợi ích gì khi so sánh với chuyển đổi tác vụ phần mềm. (Trong thực tế, tôi nghĩ rằng nó làm theo cách thủ công đánh bại TSS rất nhiều lần)

TSS được biết đến là khó chịu và tẻ nhạt khi làm việc và không di động, thậm chí đến x86-64. Linux nhằm mục đích làm việc trên nhiều kiến ​​trúc để họ có thể chọn sử dụng chuyển đổi nhiệm vụ phần mềm vì nó có thể được viết theo cách độc lập của máy. Ngoài ra, phần mềm chuyển đổi nhiệm vụ cung cấp nhiều quyền lực hơn những gì có thể được thực hiện và nói chung là dễ dàng hơn để thiết lập hơn TSS.

Tôi tin rằng Windows 3.1 đã sử dụng TSS, nhưng ít nhất hạt nhân NT> 5 thì không. Tôi không biết bất kỳ hệ điều hành giống Unix nào sử dụng TSS.

Lưu ý rằng TSS là bắt buộc. Điều mà hệ điều hành làm mặc dù là tạo ra một mục nhập TSS duy nhất (cho mỗi bộ xử lý) và mỗi khi họ cần phải chuyển đổi nhiệm vụ, họ chỉ cần thay đổi TSS đơn này. Và cũng có các trường duy nhất được sử dụng trong TSS bằng cách chuyển đổi nhiệm vụ phần mềm là ESP0SS0. Điều này được sử dụng để có được để vòng 0 từ vòng 3 mã cho ngắt. Nếu không có TSS, sẽ không có ngăn xếp Ring 0 được biết đến, tất nhiên sẽ dẫn đến GPF và cuối cùng là lỗi ba.

+0

Cảm ơn Earlz. Tôi đánh dấu câu trả lời của bạn là câu trả lời. Cũng nhờ những người khác. : D – smwikipedia

+2

TSS dựa trên chuyển đổi cung cấp phần cứng cấp quản lý nhà nước (đọc: bảo mật) mà một phần mềm chuyển đổi không. TSS và hệ thống đặc quyền được giới thiệu với IA trong những năm 80, cả hai đều đóng một vai trò trong việc bảo vệ các quá trình từ nhau. Vì vậy, để tóm tắt, "Một số hệ điều hành không sử dụng chuyển đổi nhiệm vụ dựa trên phần cứng vì chúng thích hiệu năng và tính di động hơn bảo mật". Có vẻ như hợp pháp. –

+1

Như một sang một bên, NT sử dụng một mô hình luồng M: N, không giống như 'các hệ thống khác' không có mối quan hệ 1: 1 giữa chủ đề phần cứng và phần mềm, điều này giải quyết nhiều hơn là "vấn đề hiệu năng chuyển đổi nhiệm vụ". Không phải tất cả các hệ thống đều có thể thực hiện một mô hình M: N (do sự liên kết chặt chẽ của các phần cứng với một CPU và quy trình cụ thể) và thay vào đó phải chịu các hình phạt về hiệu suất khi cố gắng làm như vậy (vì các hệ thống như vậy thiếu phần cứng thích hợp => cơ chế báo hiệu chế độ người dùng cũng không gắn kết chuỗi thực thi gốc.) –

6

Linux không sử dụng mô hình bộ nhớ phân đoạn, do đó tính năng phân đoạn cụ thể này không được sử dụng.

x86 CPU có nhiều loại hỗ trợ phần cứng khác nhau để chuyển ngữ cảnh, vì vậy sự khác biệt không phải là phần cứng so với phần mềm, nhưng nhiều hơn thế nào hệ điều hành sử dụng các tính năng phần cứng khác nhau có sẵn. Nó không phải là cần thiết để sử dụng tất cả.

Linux rất hiệu quả tập trung mà bạn có thể đặt cược rằng ai đó đã lược tả mọi tùy chọn có thể và các tùy chọn hiện được sử dụng là thỏa hiệp tốt nhất hiện có.

+0

Cảm ơn bạn Andrew. Bạn có thể cho tôi biết phần cứng nào khác hỗ trợ cho việc chuyển đổi ngữ cảnh CPU x86 cung cấp không? Tôi chỉ nghe về TSS. – smwikipedia

+0

Hầu hết các tính năng MMU chỉ có ý nghĩa trong một môi trường đa luồng, ví dụ. Có vẻ như tôi đã không hoàn toàn đúng: CPU buộc Linux sử dụng TSS cho thanh ghi ESP, mặc dù không có trường nào khác được sử dụng. Tôi đoán phần chuyển đổi nhiệm vụ phần mềm ở đây có con trỏ tới hầu hết những gì bạn cần: http://wiki.osdev.org/Task_State_Segment –

+0

Xây dựng dựa trên nhận xét cuối cùng của Andrew: TSS là bắt buộc đối với những thứ như chuyển đổi ring3 -> ring0 nó lấy giá trị ESP0. Điều này ngăn chặn hạt nhân bằng cách sử dụng ngăn xếp ring3 khi vào ring0 - một tính năng bảo mật. Linux sử dụng một TSS cho mỗi CPU cho quá trình chuyển đổi này. –

17

Linux được sử dụng để chuyển đổi dựa trên HW, trong khung thời gian trước 1,3 giây. Tôi tin rằng chuyển đổi ngữ cảnh dựa trên sw hóa ra nhanh hơn và linh hoạt hơn.

Một lý do khác có thể đã giảm thiểu mã dành riêng cho kiến ​​trúc. Cổng đầu tiên của Linux với kiến ​​trúc không phải là x86 là Alpha. Alpha không có TSS, vì vậy nhiều mã hơn có thể được chia sẻ nếu tất cả các vòm sử dụng chuyển đổi SW. (Chỉ cần đoán thôi.) Thật không may là các thay đổi hạt nhân trong giai đoạn hạt nhân 1.2-1.3 không được bảo toàn tốt, vì vậy tôi không thể cụ thể hơn.

+0

Cảm ơn Andy vì thông tin lịch sử. : D – smwikipedia

3

@Andy - Hạt nhân cuối cùng với Chuyển đổi tác vụ phần cứng là 2.1.108.

+1

Bị bỏ phiếu vì phải là bình luận (đối với câu trả lời của Andys), không phải là câu trả lời của riêng mình. – amn

Các vấn đề liên quan