2013-04-08 36 views
7

Trước hết, hãy sử dụng một hệ thống xử lý đơn lẻ với nhiều quy trình chạy song song giả. Khi một quá trình kích hoạt một lỗi trang, điều này sẽ buộc CPU ngừng thực hiện tất cả các chương trình cho đến khi trang được nạp từ đĩa?Các quy trình khác có thể chạy trong khi phân trang bộ nhớ không?

Nếu có, điều này có thay đổi trên hệ thống đa lõi hoặc đa bộ xử lý hoặc các quy trình khác có tiếp tục đọc và ghi vào bộ nhớ trong khi lỗi trang được xử lý không?

Cảm ơn!

+0

Đây là câu hỏi phụ thuộc rất hệ điều hành. Vui lòng chỉ định hệ điều hành và phiên bản bạn đang nói đến. – Gray

+0

Tôi đã có Linux trong tâm trí, nhưng nếu nó hoạt động khác nhau trên các hệ điều hành, tôi sẽ được quan tâm để nghe về sự khác biệt. – drpepper

+0

@Gray: Về mặt lý thuyết, có lẽ, nhưng khả năng này có từ giữa thế kỷ trước. Ví dụ. IBM OS/360. – MSalters

Trả lời

6

Đầu tiên, lập lịch biểu không hoạt động đối với quy trình nhưng đối với chuỗi. Một lỗi trang chỉ tạm dừng luồng phát sinh lỗi (trên Linux và Windows). Các chủ đề là descheduled và CPU là miễn phí để làm công việc khác.

Ở cấp độ phần cứng giao diện hệ điều hành, không có IO đồng bộ. Nó không tồn tại (ít nhất là với phần cứng hiện đại). Hệ điều hành không nằm trong vòng xoay chặt chờ phần cứng báo hiệu hoàn thành IO. Thay vào đó, luồng được rút gọn cho đến khi IO hoàn thành (hoặc tay cầm chờ đợi tương ứng trở thành tín hiệu).

+3

Mô hình hệ điều hành của bạn là đúng đối với các đĩa cứng hiện đại sử dụng DMA. Nhưng về mặt lịch sử, IDE đã sử dụng PIO, I/O được lập trình yêu cầu sự chú ý của hệ điều hành vĩnh viễn cho đến khi IO hoàn thành. Và ở cấp độ phần cứng, có thực sự là không có ** không đồng bộ ** IO anyway. Có một bộ điều khiển bus DMA hoặc PIC-e thực hiện tất cả IO đồng bộ, và nó sẽ báo cáo việc hoàn thành không đồng bộ với CPU. Vẫn là một lợi ích vì đó là một bộ điều khiển chuyên dụng đơn giản được gắn lên, không phải toàn bộ CPU. – MSalters

+0

Điểm tốt. Tôi đã làm một số rewording để làm sắc nét câu trả lời. – usr

1

Vâng, đây không phải là vấn đề gì cả. Không ai trong tâm trí của họ thiết kế một hệ điều hành đa tiến trình mà không thể chạy nhiều tiến trình, cũng như họ sẽ không tự ý chặn tiến trình A vì B đang đợi trên một đĩa I/O.

+0

Bạn có chắc về điều này? Tôi biết rằng như một vài năm trở lại một lựa chọn trên đĩa IO sẽ _always_ nói rằng nó đã sẵn sàng. Điều đó hàm ý với tôi rằng hạt nhân Linux có thể không có khả năng lên lịch một yêu cầu IO đĩa trong nền. Hoặc có thể nó sẽ làm việc với SSA nhưng không phải với SATA. – Gray

+0

Tìm kiếm I/O dẫn tôi đến các bài viết của Wikipedia về I/O và DMA không đồng bộ, xác nhận những gì bạn mô tả. – drpepper

+0

@Gray: Vậy? Hạt nhân Linux giữ một danh sách các quy trình _runnable_. Việc phát hành I/O đĩa có thể mất một tiến trình trong danh sách đó, nhưng câu hỏi ngụ ý rằng toàn bộ danh sách quy trình chạy được xóa. Điều đó hoàn toàn vô nghĩa. Async I/O và DMA không có gì để làm với điều này. Một quá trình thậm chí có thể chờ đợi một người nào đó để chèn một đĩa CD-ROM, mà không có ảnh hưởng đến các quá trình khác. Chỉ cần suy nghĩ về 'crond', điều đó cũng không bị dừng lại trên mọi I/O. – MSalters