Chủ đề bối cảnh chuyển đổi Vs. quá trình chuyển đổi bối cảnh


Câu trả lời:


204

Sự khác biệt chính giữa công tắc luồng và công tắc quy trình là trong quá trình chuyển đổi luồng, không gian bộ nhớ ảo vẫn giữ nguyên, trong khi nó không trong quá trình chuyển đổi quy trình. Cả hai loại đều liên quan đến việc điều khiển bàn giao cho nhân hệ điều hành để thực hiện chuyển đổi ngữ cảnh. Quá trình chuyển đổi vào và ra khỏi nhân hệ điều hành cùng với chi phí chuyển đổi các thanh ghi là chi phí cố định lớn nhất để thực hiện chuyển đổi ngữ cảnh.

Một chi phí mờ hơn là một chuyển đổi ngữ cảnh gây rối với các cơ chế bộ đệm bộ xử lý. Về cơ bản, khi bạn chuyển đổi ngữ cảnh, tất cả các địa chỉ bộ nhớ mà bộ xử lý "ghi nhớ" trong bộ đệm của nó thực sự trở nên vô dụng. Một điểm khác biệt lớn ở đây là khi bạn thay đổi không gian bộ nhớ ảo, Bộ đệm dịch thuật tìm kiếm (TLB) của bộ xử lý hoặc tương đương sẽ bị xóa khiến bộ nhớ truy cập đắt hơn trong một thời gian. Điều này không xảy ra trong một chuyển đổi chủ đề.


8
Đây là tất cả giả định rằng TLB và bộ đệm không lưu trữ pid cho mỗi mục.
kịch tính

2
IMHO @dramzy đã đúng, HĐH có thể hỗ trợ Chuyển đổi bối cảnh nhanh chóng được đề cập ngắn gọn ở đây: youtu.be/3akTtCu_F_k?t=46m8s (xem từ đầu để biết thêm về Bộ nhớ ảo, bảng trang và TLB).
piotrwest

@piotrwest Có bất kỳ hệ điều hành chính nào hỗ trợ Chuyển đổi bối cảnh nhanh không?
tối đa

2
@dramzy Ý bạn là hệ điều hành hay phần cứng có thể lưu trữ pid? Là này có liên quan?
tối đa

Trong tâm trí tôi chỉ có chuyển đổi luồng (không chắc chắn) trên Linux, vì vậy HĐH Linux sẽ kiểm tra xem luồng tiếp theo được chạy có lưu pid với luồng đang chạy sẽ được lên lịch không?
roachsinai

16

Quá trình chuyển đổi ngữ cảnh liên quan đến việc chuyển đổi không gian địa chỉ bộ nhớ. Điều này bao gồm địa chỉ bộ nhớ, ánh xạ, bảng trang và tài nguyên hạt nhân một hoạt động tương đối tốn kém. Trên một số kiến ​​trúc, nó thậm chí còn có nghĩa là xóa các bộ xử lý khác nhau không thể chia sẻ trên các không gian địa chỉ. Ví dụ, x86 phải xóa TLB và một số bộ xử lý ARM phải xóa toàn bộ bộ đệm L1!

Chuyển đổi luồng là chuyển đổi ngữ cảnh từ luồng này sang luồng khác trong cùng một quy trình (chuyển từ luồng này sang luồng qua các tiến trình chỉ là chuyển đổi quy trình). Trạng thái bộ xử lý chuyển đổi (như bộ đếm chương trình và nội dung đăng ký) nói chung rất hiệu quả.


13

Trước hết, hệ điều hành mang luồng đi trong chế độ kernel nếu nó chưa có, bởi vì chuyển đổi luồng chỉ có thể được thực hiện giữa các luồng, chạy trong chế độ kernel. Sau đó, bộ lập lịch được gọi để đưa ra quyết định về luồng sẽ được thực hiện chuyển đổi. Sau khi quyết định được đưa ra, kernel lưu một phần bối cảnh luồng được đặt trong CPU (các thanh ghi CPU) vào vị trí dành riêng trong bộ nhớ (thường xuyên nằm trên đỉnh của ngăn xếp kernel của luồng đi). Sau đó, kernel thực hiện chuyển đổi từ ngăn xếp kernel của luồng đi sang stack kernel của luồng đến. Sau đó, kernel tải bối cảnh được lưu trữ trước đó của luồng đến từ bộ nhớ vào các thanh ghi CPU. Và cuối cùng trả điều khiển trở lại chế độ người dùng, nhưng trong chế độ người dùng của luồng mới. Trong trường hợp khi HĐH xác định rằng luồng đến chạy trongmột quá trình khác , kernel thực hiện một bước bổ sung: thiết lập không gian địa chỉ ảo hoạt động mới.

Chi phí chính trong cả hai kịch bản có liên quan đến ô nhiễm bộ đệm. Trong hầu hết các trường hợp, tập làm việc được sử dụng bởi luồng đi sẽ khác biệt đáng kể với tập làm việc được sử dụng bởi luồng đến. Kết quả là, luồng đến sẽ bắt đầu vòng đời của nó với các lỗi bộ nhớ cache, do đó xóa dữ liệu cũ và vô dụng từ bộ nhớ cache và tải dữ liệu mới từ bộ nhớ. Điều tương tự cũng đúng với TLB (Bộ đệm dịch thuật tìm kiếm trên CPU). Trong trường hợp thiết lập lại không gian địa chỉ ảo (các luồng chạy trong các quy trình khác nhau), hình phạt thậm chí còn tồi tệ hơn, bởi vì việc thiết lập lại không gian địa chỉ ảo dẫn đến việc xóa toàn bộ TLB, thậm chínếu chủ đề mới thực sự cần tải chỉ vài mục mới. Kết quả là, luồng mới sẽ bắt đầu lượng tử thời gian của nó với rất nhiều lần bỏ lỡ TLB và việc đi bộ trang thường xuyên. Chi phí trực tiếp của chuyển đổi luồng cũng không đáng kể (từ ~ 250 và lên đến ~ 1500-2000 chu kỳ) và phụ thuộc vào độ phức tạp của CPU, trạng thái của cả luồng và bộ thanh ghi mà chúng thực sự sử dụng.

PS: Bài đăng hay về chi phí chuyển đổi ngữ cảnh: http://blog.tsunanet.net/2010/11/how-long-does-it-take-to-make-context.html


3
  • chuyển đổi quy trình: đó là quá trình chuyển đổi giữa hai bộ nhớ cư trú của quá trình trong môi trường đa chương trình;
  • chuyển ngữ cảnh: đó là bối cảnh thay đổi từ chương trình thực thi sang thói quen dịch vụ ngắt (ISR).

2

Trong Chuyển đổi bối cảnh luồng, không gian bộ nhớ ảo vẫn giữ nguyên trong khi nó không nằm trong trường hợp của Chuyển đổi bối cảnh quy trình. Ngoài ra, Process Context Switch đắt hơn so với Thread Context Switch.


0

Tôi nghĩ rằng sự khác biệt chính là khi gọi switch_mm()mà xử lý mô tả bộ nhớ của nhiệm vụ cũ và mới. Trong trường hợp của các luồng, không gian địa chỉ bộ nhớ ảo không thay đổi (các luồng chia sẻ bộ nhớ ảo), do đó rất ít phải thực hiện và do đó ít tốn kém hơn.


0

Mặc dù chuyển đổi ngữ cảnh luồng cần thay đổi bối cảnh thực thi (thanh ghi, con trỏ ngăn xếp, bộ đếm chương trình), chúng không cần thay đổi không gian địa chỉ như các chuyển đổi bối cảnh quy trình thực hiện. Có thêm chi phí khi bạn chuyển đổi không gian địa chỉ, truy cập nhiều bộ nhớ hơn (phân trang, phân đoạn, v.v.) và bạn phải xóa TLB khi vào hoặc thoát một quy trình mới ...


-1

Nói tóm lại, công tắc ngữ cảnh luồng không gán một bộ nhớ và pid hoàn toàn mới, nó sử dụng giống như cha mẹ vì nó đang chạy trong cùng một tiến trình. Một tiến trình sinh ra một tiến trình mới và do đó gán mem và pid mới.

Có một sự nới lỏng hơn cho nó. Họ đã viết sách về nó.

Về chi phí, chuyển đổi ngữ cảnh quy trình >>>> luồng khi bạn phải đặt lại tất cả các bộ đếm ngăn xếp, v.v.


-1

Giả sử rằng CPU mà HĐH chạy đã có một số Thiết bị có Độ trễ Cao được đính kèm,

Thật hợp lý khi chạy một luồng khác của Không gian địa chỉ của Quá trình, trong khi thiết bị có độ trễ cao phản hồi lại.

Nhưng, nếu Thiết bị có Độ trễ Cao đáp ứng nhanh hơn thời gian cần thiết để thiết lập bảng + dịch các bộ nhớ Ảo sang Vật lý cho một Quy trình MỚI, thì có thể nghi ngờ liệu một công tắc có cần thiết hay không.

Ngoài ra, bộ đệm HOT (dữ liệu cần thiết để chạy tiến trình / luồng có thể truy cập trong thời gian ngắn hơn) là lựa chọn tốt hơn.

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.