Tại sao một hệ thống có thể trở nên không phản hồi?


12

Tôi vừa thực hiện dot(một chương trình để vẽ đồ thị có hướng) với một tệp đầu vào lớn đến mức không thể hiển thị trong một khoảng thời gian hợp lý.

Toàn bộ hệ thống của tôi đóng băng. Tôi hầu như không thể làm cho nó vào một bảng điều khiển văn bản có Ctrl+ Alt+ F1để giết dot, nhưng phải mất vài phút.

Tại sao hệ thống cho phép một cái gì đó như thế này? Tại sao nó cung cấp một chương trình không quan trọng như dot99% hệ thống và sử dụng 1% còn lại để duy trì phản hồi?


Câu trả lời:


15

Đó là cách GNU / Linux và các hệ thống đa nhiệm khác hoạt động, chúng chia sẻ bộ xử lý giữa các tiến trình đang chạy, dotsẽ không có 99%, nhưng 100% trong suốt 99% thời gian. Mỗi quá trình thống trị bộ xử lý trong một khoảng thời gian nhất định.

Điều này được xử lý bởi các trình lập lịch biểu (linux có một số trình lập lịch biểu, một số chỉ sử dụng chiến lược thông thường, một số cố gắng dành nhiều thời gian hơn cho giao diện người dùng, v.v.).

Bây giờ, trong trường hợp của bạn, vấn đề là - có lẽ - điều đó dotkhông tốn nhiều thời gian của bộ xử lý, nhưng rất nhiều bộ nhớ. Và khi một chương trình sử dụng quá nhiều bộ nhớ, có sự cố , đó chính xác là một quá trình làm cho hệ thống đóng băng, không phải vì dotlàm nhiều việc, mà vì kernel phải di chuyển các trang bộ nhớ qua lại giữa đĩa (phân vùng trao đổi) và bộ nhớ hệ thống.

Ngay cả khi dotchỉ chiếm 99% thời gian của CPU, rất có thể việc thay đổi thành một thiết bị đầu cuối văn bản sẽ gần như ngay lập tức, điều xảy ra là hạt nhân phải di chuyển dotcông cụ ra khỏi bộ nhớ để có thể đặt Xlại vào bộ nhớ để Xcó thể nhìn thấy các phím bạn chỉ cần nhấn và di chuyển đến thiết bị đầu cuối văn bản, sau đó kernel phải di chuyển Xra khỏi bộ nhớ dotvẫn đang chạy, và sau đó cũng di chuyển dotra ngoài để di chuyển các quá trình thiết bị đầu cuối văn bản (có thể chỉ là login?) trong bộ nhớ. (Nếu điều này có vẻ lộn xộn, thì không chỉ vì ví dụ lộn xộn - thực tế là điều này rất lộn xộn.)

Một ví dụ là nếu bạn đăng nhập vào thiết bị đầu cuối văn bản, bạn có thể chỉ cần nhấn phím, nhấn backspace và nó sẽ vui vẻ xảy ra trong thời gian thực, nhưng nếu bạn làm một việc đơn giản như chạy một công cụ nhỏ như thế ps, nó sẽ "đóng băng "Trong một thời gian vì nó phải giải phóng bộ nhớ ps(và nó cũng phải đợi trong hàng đợi I / O của đĩa, được sử dụng nhiều để di chuyển dữ liệu đến và từ bộ nhớ, cho đến khi có thể yêu cầu pstừ hệ thống tệp) .


Hừm, vì vậy cách để có trải nghiệm người dùng tốt hơn sẽ là chỉ định một số chương trình nhất định là " dính " và do đó ngăn không cho các chương trình đó bị tráo đổi.
Christoph Wurm

Stickiness đã không hoạt động như thế kể từ những năm 70 và ngữ nghĩa ban đầu của bit 'dính'. Tuy nhiên, bạn có thể khóa (các phần của) chương trình vào bộ nhớ để chúng không bị tráo đổi. Bộ nhớ chính là một thứ xa xỉ đắt tiền, vì vậy điều này không thể được thực hiện cho mọi thứ.
Alexios

@njsg, cảm ơn vì lời giải thích tốt. Một câu hỏi tiếp theo: Không có cách nào để ngăn chặn đập? Tôi hiểu rằng trao đổi làm cho việc sử dụng bộ nhớ hiệu quả hơn trên toàn bộ, nhưng nên có giới hạn. IMHO một quá trình thiết yếu như X không bao giờ được di chuyển ra khỏi bộ nhớ. Có cách nào để cấu hình một hệ thống giống như unix để các quy trình thiết yếu được bảo vệ khỏi bị di chuyển ra ngoài không? Trên máy chủ, một điều khác, nhưng trên máy tính để bàn, tôi muốn có một quá trình ngốn bộ nhớ hơn là để máy tính để bàn của tôi ngừng nói chuyện với tôi.
A. Donda
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.