Quá trình kernel có cần lưu một cái gì đó khi chuyển sang chế độ người dùng không? [đóng cửa]


6

Theo giáo sư của tôi,

"trong khi chuyển từ chế độ người dùng sang chế độ kernel, trạng thái của quá trình người dùng phải được lưu hoàn toàn. Nhưng khi chuyển từ chế độ kernel sang chế độ người dùng, không có gì phải lưu, vì quá trình kernel không có gì để lưu."

Anh ấy có đúng không? Quá trình kernel không có gì để lưu?


Câu hỏi hay, nhưng tôi không biết đây có phải là trang tốt nhất không. tôi nghĩ lập trình viên.stackexchange.com có thể giúp bạn có một câu trả lời tốt hơn Bạn có thể gắn cờ câu hỏi của mình cho người điều hành và anh ta có thể chuyển câu hỏi đến đó cho bạn.
Scott Chamberlain

Nên có trên StackOverflow.
Mehrdad

Có phải anh ấy đang nói về một HĐH cụ thể không? Tôi nghĩ rằng điều này phụ thuộc vào hệ điều hành ... người ta có thể viết một hệ điều hành cần lưu một số thứ, tôi nghĩ vậy.
Mehrdad

1
Câu hỏi này không liên quan gì đến lập trình và do đó, đề xuất di chuyển sang Lập trình viên và Stack Overflow không phải là cách đúng đắn để giải quyết câu hỏi này; nó nằm nhiều hơn với máy tính và có các phần bên trong, tôi sẽ không nói nó thuộc chủ đề trên Super User và nó có cảm giác gần giống như cs.stackexchange.com hoặc là cstheory.stackexchange.com . Nhưng tốt, hãy xem cộng đồng quyết định làm gì với nó ...
Tom Wijsman

Đó là khoa học máy tính nhiều hơn bất cứ điều gì khác, bỏ phiếu để đóng không cung cấp trang beta như một tùy chọn.
Tog

Câu trả lời:


5

Điều này được hiểu rõ hơn nếu chúng tôi mổ xẻ câu chuyện của bạn và cố gắng sử dụng thuật ngữ tốt hơn:

  • trong khi chuyển từ chế độ người dùng sang chế độ kernel

    Đây cũng được gọi là một công tắc chế độ.

    Khi nào điều này xảy ra? Điều này xảy ra khi một kernel công Việt Hằng ngày được gọi là; ví dụ, điều này có thể xảy ra khi nó được gọi từ chế độ người dùng thông qua độ cao hoặc thông qua ngắt phần cứng.

    Như vậy là gì công Việt Hằng ngày ? Đó là một đoạn mã xử lý cuộc gọi / ngắt.

  • trạng thái của quá trình người dùng phải được lưu hoàn toàn.

    Chính xác, vì kernel sẽ chạy kernel công Việt Hằng ngày chúng ta cần tạm thời lưu trạng thái của quá trình người dùng đang chạy.

  • Nhưng khi chuyển từ chế độ kernel sang chế độ người dùng, không có gì phải lưu

    Không có gì để cứu vì chúng tôi đã gọi công Việt Hằng ngày trong đó có làm xong thực thi, không còn trạng thái trong quá trình kernel kể từ khi công Việt Hằng ngày không còn chạy

    Thay vào đó, trạng thái của quá trình người dùng cần được tải lại để tiếp tục thực thi quy trình người dùng.

Vì vậy, chúng tôi có hai điều khác nhau ở đây:

  • một quá trình người dùng , cần tiếp tục thực hiện trên một công tắc chế độ, để trạng thái của nó được lưu trữ.

  • một thói quen hạt nhân , được thực hiện trên một công tắc chế độ, vì vậy trạng thái của nó được xử lý.

Như để trả lời câu hỏi của bạn " Quá trình kernel không có gì để lưu? "; thực sự không có một tiến trình kernel nào đang chạy, nó chỉ là một shim chứa bộ nhớ kernel, các thói quen và một số phép thuật khác.


1
Chuyển đổi giữa chế độ kernel và chế độ người dùng được gọi là "chuyển đổi chế độ". "Chuyển đổi bối cảnh" đang thay đổi từ quá trình này sang quá trình khác. Mọi người thường sử dụng "chuyển đổi ngữ cảnh" khi họ đề cập đến một thay đổi trong chế độ, nhưng điều này không chính xác.
Patrick Seymour

@PatrickS.: Bạn đã sai khi bạn nói rằng điều này không đúng, bối cảnh nhiệm vụ có mối quan hệ tương đương với trạng thái quá trình. Điều gì xảy ra khi bạn "chuyển đổi ngữ cảnh" là bạn tải hoặc lưu bối cảnh (và do đó là trạng thái quá trình), đó chính xác là những gì xảy ra khi bạn thực hiện "chuyển đổi chế độ". Do đó, câu lệnh "chuyển đổi ngữ cảnh xảy ra khi bộ xử lý thực hiện chuyển đổi chế độ" mà tôi đã mở rộng hơn nữa ở cuối câu trả lời của mình là đúng.
Tom Wijsman

Xin lỗi, nhưng tôi không sai. Chuyển đổi chế độ đang thay đổi chế độ. Chuyển đổi bối cảnh đang thay đổi quá trình. Nếu thay đổi trong chế độ không yêu cầu thay đổi trong quá trình được thực thi, thì không cần chuyển đổi ngữ cảnh.
Patrick Seymour

@PatrickS.: Chuyển đổi bối cảnh đang thay đổi bối cảnh, không phải quá trình; chuyển đổi quá trình đầy đủ là không liên quan.
Tom Wijsman

Thay đổi bối cảnh để ....?
Patrick Seymour

1

Tôi không bao giờ thích thuật ngữ kernel kernel, nhưng đó chỉ là vấn đề cá nhân của tôi. Tôi tin rằng câu trả lời là tất cả các quy trình đều là các quy trình của người dùng tại cơ sở của họ và quy trình kernel kernel, chỉ được kích hoạt khi một điểm nhập kernel được gọi từ chế độ người dùng. (Tôi nghi ngờ rằng giáo sư của bạn có thể nói rằng tôi đã nói chính xác điều đó, nhưng tôi tin rằng tôi đã đủ gần để cung cấp cho bạn một ý tưởng chính xác về mối quan hệ.)

Nó giống như những gì xảy ra trong một chương trình thông thường: Nếu bạn có một chức năng hypot và nó gọi sqrt, hệ thống phải lưu hypot Biến cục bộ của s và điểm trả về (con trỏ chương trình / con trỏ lệnh từ đó sqrt được gọi là). Nhưng khi sqrt trả lại và hypot sơ yếu lý lịch sqrt Khung stack stack có thể bị loại bỏ.


1

Điều này nghe có vẻ như trong bối cảnh của đa nhiệm ưu tiên .

HĐH / kernel luôn chạy, vì vậy không có gì để lưu. Các chương trình khác cũng đang chạy (trên hệ điều hành), nhưng mỗi chương trình lần lượt nhận được một phần của giây. Khi mỗi chương trình đến lượt, ngăn xếp cho chương trình đó cần được tải để xử lý có thể xảy ra, sau đó trạng thái của tất cả các thanh ghi cần được lưu lại vào RAM từ bộ xử lý để chương trình tiếp theo có thể tải.


Không, hệ điều hành / kernel không "luôn luôn chạy". Cũng không phải là các chương trình khác (chủ đề). Hầu hết các chủ đề dành phần lớn thời gian chờ đợi của họ. Khi họ chờ đợi, họ không chạy. Hầu hết HĐH / kernel là một loạt các thường trình được gọi từ mã ứng dụng - khi cuộc gọi như vậy không được thực hiện, các thường trình đó không "chạy". Một số HĐH / kernel được chạy để đáp ứng với các ngắt, nhưng một khi ngắt được xử lý, thói quen dịch vụ ngắt cũng không chạy.
Jamie Hanrahan

1

Giáo sư đúng một phần.

Dữ liệu đang được lưu khi chuyển từ chế độ người dùng sang chế độ kernel là trạng thái của CPU , không phải là quá trình. Chế độ người dùng và chế độ kernel là liên quan đến CPU, không liên quan đến quá trình. Khi kernel thực hiện một số chức năng thay mặt cho người dùng, trạng thái của CPU sẽ được lưu trước đó. Đó là, trạng thái của CPU khi nó đang thực thi mã chế độ người dùng. Sau đó, kernel thực hiện hành động của nó dựa trên yêu cầu của mã chế độ người dùng. Cuối cùng, kernel khôi phục trạng thái của CPU trở lại trạng thái đã lưu trước đó. Nhân có thể đưa CPU trở lại chế độ người dùng, tùy thuộc vào nhân được đề cập.

Quá trình kernel không có gì để lưu, vì nó không chạy trước. Nó (quá trình kernel) thực hiện một công việc thay mặt cho quá trình chế độ người dùng, và sau đó nó được hoàn thành. CPU có thể trở về chế độ người dùng, liên quan đến kernel.

Các thành phần hệ điều hành thường chạy trong chế độ kernel, còn được gọi là Ring 0 trên bộ xử lý x86. Chế độ người dùng chứa các ứng dụng và đôi khi được gọi là Vòng 3.

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.