Đa nhiệm hoạt động như thế nào


15

Tôi hoàn toàn không biết gì về hoạt động bên trong của một hệ điều hành, nhưng tôi ít nhiều có thể đoán được hành vi gần đúng của nhiều chức năng. Tuy nhiên, một điều mà tôi không thể tìm ra là đa nhiệm.

Về lý thuyết, hệ điều hành quản lý thời gian, theo CPU trong các khoảng thời gian nhỏ cho các chương trình khác nhau đang chạy. Nhưng không rõ làm thế nào điều này thực sự hoạt động.

Nói rằng hệ điều hành muốn bắt đầu chương trình của tôi. Mã máy được tải ở đâu đó trong RAM, bắt đầu từ một địa chỉ nhất định. Tôi đoán sau đó một bước nhảy nên được thực hiện đến địa chỉ đó, cho phép mã của tôi thực thi. Nhưng theo cách này, HĐH không thể lấy lại quyền kiểm soát cho đến khi tôi nhảy trở lại.

Về cơ bản, tôi có thể tưởng tượng chỉ hai cách để thực hiện công việc này, nhưng dường như không thực sự phù hợp:

  • Hệ điều hành có thể đọc các hướng dẫn máy tôi muốn thực hiện và mô phỏng chúng thay vì thực hiện chúng trực tiếp. Tôi cố tình mơ hồ, vì tôi không biết nó sẽ hoạt động như thế nào, nhưng có vẻ như nó sẽ làm chậm chương trình một cách đáng kể.

  • Ngoài ra, hệ điều hành có thể đợi cho đến khi tôi thực hiện cuộc gọi hệ thống. Trong khoảnh khắc đó, nó lấy lại quyền kiểm soát và có thể kiểm tra xem tôi đã chạy được bao lâu và thực hiện công việc vượt thời gian của nó. Điều này có thể hoạt động, nhưng có vẻ không đáng tin cậy, vì tôi có thể thực hiện một phép tính dài không liên quan đến các cuộc gọi hệ thống và treo mọi thứ trong một thời gian.

Vì vậy, có vẻ như cả cơ chế sẽ không hoạt động tốt. Đa nhiệm thực sự được thực hiện như thế nào?


Mặc dù dự đoán của bạn không chính xác, nhưng vấn đề bạn chỉ ra là, ừ, vâng: "Tôi có thể thực hiện một phép tính dài không liên quan đến các cuộc gọi hệ thống và treo mọi thứ trong một thời gian."
jhocking

Một từ khóa để tìm kiếm:interrupt
SK-logic

Có, nhưng ai là người khởi động sự gián đoạn? Nếu mã của tôi đang thực thi, HĐH không có cách nào để thực thi một INTlệnh. Một cái gì đó vẫn còn bí ẩn đối với tôi
Andrea

@Andrea, đồng hồ harware đang kích hoạt một ngắt. Chỉ đơn giản như vậy. vi.wikipedia.org/wiki/Scheduling_%28computing%29
SK-logic

Ok, bây giờ tôi thấy. Vì vậy, nếu tôi hiểu chính xác, đó là một tính năng dựa trên phần cứng, không phải là thứ mà người ta có thể thực hiện trong HĐH.
Andrea

Câu trả lời:


21

Hệ điều hành lập trình một bộ đếm thời gian để khởi động cứ sau vài micro giây (hoặc mili giây, tùy thuộc vào tốc độ hệ thống). Bộ hẹn giờ này làm tăng ngắt phần cứng, khiến CPU dừng mọi hoạt động hiện tại, đổ tất cả nội dung của nó vào ngăn xếp và xử lý thói quen ngắt được chỉ định bởi địa chỉ được cung cấp bởi bộ điều khiển ngắt. Thường trình này có thể kiểm tra ngăn xếp và các biến khác nhau để đưa ra quyết định mà quá trình chạy tiếp theo sẽ được đưa trở lại hoạt động. Nếu đó là cùng một quy trình, thói quen ngắt đơn giản trở lại. Nếu đó là một phần khác, các phần có liên quan của ngăn xếp sẽ được lưu và sau đó được thay thế bằng nội dung của một quy trình bị gián đoạn trước đó, vì vậy khi thói quen ngắt trở lại, quá trình đó tiếp tục. Khác với thực tế là một thời gian đã trôi qua,

Đây là (đối với CPU hiện đại) là phiên bản đơn giản RẤT RẤT của những gì xảy ra, nhưng nó giải thích nguyên tắc. Ngoài các ngắt được điều khiển bởi hệ điều hành này, còn có các ngắt gây ra bởi các sự kiện bên ngoài (chuột, bàn phím, cổng nối tiếp, cổng mạng, v.v.) đang xử lý các thói quen ngắt riêng biệt, thường được kết nối với các trình xử lý sự kiện.

Rất thường xuyên chuyển đổi quá trình / nhiệm vụ / bối cảnh cũng dựa trên sự sẵn có của các nguồn lực bên ngoài. Thông thường, một quy trình yêu cầu dữ liệu từ bộ lưu trữ (tức là không có trong RAM) sẽ đặt yêu cầu lên hàng đợi, đặt bộ xử lý sự kiện cho ngắt phần cứng cho biết rằng yêu cầu đã được phục vụ và sau đó từ bỏ quyền kiểm soát đối với bộ lập lịch tác vụ (vì không có điểm chờ đợi). Một lần nữa, một mô tả rất đơn giản về những gì thực sự diễn ra, nhưng nó sẽ phục vụ cho mục đích của câu trả lời này.


5

Nó thay đổi từ hệ thống để hệ thống.

Trong các hệ thống đa nhiệm không từ chối (như Oberon gốc hoặc Apple Macintosh gốc), hệ điều hành định kỳ "thăm dò" tất cả các tác vụ, cho chúng cơ hội để thực hiện công việc. Các nhiệm vụ dự kiến ​​sẽ chơi độc đáo với nhau. Nếu họ chỉ có một chút việc phải làm, họ sẽ làm điều đó và trở lại HĐH. Nếu một nhiệm vụ có một khối LỚN để thực hiện, dự kiến ​​sẽ chia nó thành từng mảnh nhỏ và làm việc một mảnh nhỏ mỗi khi nó được thăm dò.

Ngắt phần cứng (hoàn thành DMA ổ đĩa, ngắt cổng nối tiếp, những gì có bạn) gây ra các thói quen ngắt để chạy. Các thói quen ngắt này có thể lần lượt thông báo cho các nhiệm vụ công việc sẽ được thực hiện khi tác vụ tiếp theo chạy.

Trong các hệ thống đa nhiệm không từ chối, việc xảy ra hoặc không xảy ra gián đoạn không ảnh hưởng đến nhiệm vụ nào đang chạy sau khi kết thúc thường trình ngắt.

Trong các hệ thống đa nhiệm được ưu tiên, có thể một thói quen gián đoạn buộc phải thay đổi lịch trình. Trong một hệ thống đa nhiệm phòng ngừa vòng tròn truyền thống, một bộ đếm thời gian định kỳ làm chính xác điều đó. Đồng hồ bấm giờ ngắt, thói quen ngắt hẹn giờ thực hiện một số phép thuật đen để khiến lệnh quay trở lại từ ngắt trở về lịch trình ưu tiên của hệ điều hành, thay vì tác vụ đang chạy, đưa bộ xử lý ra khỏi tác vụ hiện tại và (POSSIBLY ) đưa nó cho một nhiệm vụ khác. Nếu không có tác vụ nào khác sẵn sàng để chạy vào thời điểm đó, tác vụ hiện tại sẽ lấy lại bộ xử lý, chỉ mất một thời gian.

Đa nhiệm ưu tiên có thể gây ra RẤT NHIỀU rắc rối. Tất cả những thứ gây phiền nhiễu đó về các trường hợp đột biến và các phần quan trọng cũng như những cái ôm chết người và các ưu tiên đảo ngược và ... hiển thị khi bộ xử lý bị lấy khỏi bạn mà không có cảnh báo. Bạn phải sử dụng tất cả những điều đó để nói với hệ điều hành rằng bạn đang ở giữa việc trộn nitroglycerin và mang bộ xử lý ra khỏi bạn ngay bây giờ có khả năng dẫn đến một lỗ ảo hút thuốc lớn ở giữa sàn phòng máy chủ.


Điều gì xấu có thể xảy ra nếu bộ xử lý được lấy đi từ bạn mà không có cảnh báo? Tôi đoán bạn sẽ nhận lại quyền kiểm soát bộ xử lý với cùng các giá trị trong các thanh ghi. Làm thế nào khác với chỉ giữ tính toán của bạn?
Andrea

@Andrea: Loại trừ lẫn nhau và các phần quan trọng là tất cả về việc không mất bộ xử lý tại thời điểm quan trọng. Nếu quy trình của bạn có một cái gì đó bị khóa và bạn mất bộ xử lý, thì cái gì đó sẽ bị khóa cho đến khi bạn lấy lại bộ xử lý. Điều này có thể gây ra vấn đề.
John R. Strohm

@Andrea Bạn sẽ có lại quyền kiểm soát bộ xử lý và một số quy trình khác có thể đã thay đổi bộ nhớ bạn sắp sử dụng.
dùng253751

4

Ngắt hẹn giờ có thể được tạo ra bởi phần cứng máy tính để làm gián đoạn CPU. Theo cách này, dựa trên thuật toán lập lịch được sử dụng bởi Hệ điều hành, HĐH có thể quyết định có nên tiếp tục thực hiện chương trình hiện tại hoặc chuyển đổi ngữ cảnh của bạn sang một thuật toán khác đã sẵn sàng để chạy hay không.

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.