Là giết một quá trình vẫn được coi là xấu cho quản lý bộ nhớ?


18

Vì vậy, tôi đang có một cuộc thảo luận nhỏ với sếp của tôi về quản lý bộ nhớ.

Tôi đã được bảo rằng giết một quá trình không cho phép nó giải phóng bộ nhớ. Đó vẫn là trường hợp, hoặc là những năm trước đây?

Chúng ta đang nói cả Windows và OS X ở đây.


4
Câu hỏi hợp lệ; bỏ phiếu để mở lại. OP đã yêu cầu thông tin cụ thể về hành vi của HĐH (2 HĐH trong trường hợp này), chứ không phải suy đoán hay tranh luận.
JRobert

Wow, không bao giờ nghĩ rằng câu hỏi này sẽ nhận được nhiều sự chú ý nhanh đến vậy .. :) Nhưng vâng, về cơ bản nó là một câu hỏi "có / không, bởi vì ..".
Jeff

Câu trả lời:


7

Đã lâu rồi tôi mới học được thứ này, nhưng rồi đây.

Khi một hệ điều hành khởi chạy một tiến trình, nó sẽ gán các trang đó từ bảng bộ nhớ ảo. Hệ điều hành chịu trách nhiệm duy trì bản đồ từ bảng bộ nhớ ảo sang bộ nhớ thực hoặc đến không gian trao đổi trên đĩa. Khi một tiến trình bị giết, HĐH sẽ không ngừng cung cấp cho chu kỳ CPU. Nó thực hiện một vài mục dọn dẹp, một trong số đó là đánh dấu tất cả các trang bộ nhớ của nó là miễn phí. Điều này cho phép chúng được sử dụng lại bởi các ứng dụng khác. HĐH có thể cũng sẽ dọn sạch mọi tài nguyên xử lý mà quá trình có, tự động đóng các tệp, kết nối mạng, đường ống xử lý, v.v. Quá trình này hoàn toàn nằm dưới sự kiểm soát của HĐH và các bước này sẽ được thực hiện cho dù quá trình có chết như thế nào.

Hãy nhớ tất cả những điều này áp dụng cho các quy trình hệ điều hành. Nếu bạn có một số loại máy ảo và nó đang chạy nhiều quy trình ảo cùng một lúc, thì VM có trách nhiệm quyết định cách phân bổ và phân bổ cho chúng. Tuy nhiên, từ HĐH, nó vẫn giống như một quá trình. Vì vậy, trong trường hợp này, nếu bạn có một VM chạy nhiều tiến trình và bạn giết một trong số chúng trong VM, thì có lẽ bạn sẽ không lấy lại được bộ nhớ trong HĐH máy chủ. Nhưng bạn sẽ lấy lại được trong VM. Tuy nhiên, nếu bạn giết VM trong hệ điều hành, thì HĐH sẽ giết VM (gián tiếp giết chết các tiến trình của VM) và lấy lại tất cả bộ nhớ (sẽ không cần phải đi qua trình thu gom rác, miễn phí () , xóa, hoặc bất cứ điều gì khác).

Đầu cơ cao:

Nếu .NET chạy như một máy ảo có nhiều ứng dụng .NET trên cùng một VM, thì .NET có thể giữ bộ nhớ chưa phải là GCd, cho đến khi nó chạy GC và Windows sẽ nghĩ rằng .NET là sử dụng nhiều hơn nó thực sự là. (Và nếu MS thực sự lắt léo, Windows có thể nói .NET với GC trong các tình huống bộ nhớ chặt chẽ, nhưng hầu như không có lý do gì vì đó là không gian trao đổi đĩa dành cho.)

Nếu .NET hoạt động theo cách đó, thì HĐH vẫn sẽ coi đó là một quá trình cho các mục đích của HĐH, chịu trách nhiệm quyết định nên giữ gì và vứt bỏ cái gì, và thông thường không phải là vấn đề của Windows để nói về một quy trình mà nó cần để bắt đầu giải phóng bộ nhớ. Tại thời điểm đó, có thể hình dung rằng MS sẽ xây dựng một API đặc biệt chỉ dành cho .NET để các quy trình .NET trông giống như các quy trình của Windows, ngoại trừ chúng không phải là lý do tại sao mọi người có thể nghĩ rằng bộ nhớ quy trình không bị xử lý. Nó là, thực sự; chỉ là bạn đang nhìn sai quy trình.

Tôi không biết đủ về .NET để nói rằng nó thực sự hoạt động theo cách đó; Java VM chắc chắn không.

Kết thúc đầu cơ.

EDIT: Liên quan đến việc giết chết một quá trình có hại cho quản lý bộ nhớ, điều đó đòi hỏi nhiều quá trình phân bổ ra khỏi cùng một nhóm (tức là chúng giống như các luồng hơn các tiến trình thực) và để bộ nhớ không được giải phóng sau quá trình bị giết Điều đó gần như sẽ đòi hỏi một hệ thống đa nhiệm hợp tác, bởi vì bộ nhớ ảo và đa nhiệm ưu tiên, theo hiểu biết của tôi, thường được triển khai cùng nhau (VM giúp có thể cách ly các tiến trình với nhau và giữ cho chúng không dậm chân vào bộ nhớ của nhau). Có bộ nhớ ảo khiến việc dọn dẹp sau một quá trình ở cấp độ hệ điều hành trở nên tầm thường; bạn chỉ cần di chuyển tất cả các trang từ nhóm quy trình sang nhóm miễn phí.


Câu trả lời xuất sắc; vẫn đăng của tôi như bạn chỉ là một vài giây phía trước. :)
Simon Richter

8

Không có vấn đề trong kinh nghiệm của tôi, giết đi.

Ví dụ: nếu bạn có 4 GB RAM, 3 GB trong số đó được sử dụng bởi một trò chơi và bạn giết quá trình trò chơi, bạn có thể khởi động lại trò chơi mà không gặp vấn đề gì và nó sẽ có lại 3 GB RAM.


đồng ý, có vẻ đúng là nó sẽ không thể "dọn dẹp", nhưng tôi chưa thấy đó là một vấn đề như Sirex đã nêu. Trong NT, các quy trình này được cho là tách biệt, nhưng ngay cả khi quay lại win98, nó dường như không phải là một vấn đề. Nếu bạn có thể giết nó, hầu hết nó sẽ biến mất. Về mặt logic, người ta sẽ cố gắng và khiến hệ thống đóng nó lại, hoặc đóng nó thật mạnh trước, sau đó buộc nó thực sự bị giết như là cơ hội cuối cùng được trao cho nó.
Psycogeek

8

Các hệ điều hành được liệt kê trong thẻ câu hỏi (Windows và OS X) thực hiện bộ nhớ ảo , trong đó mỗi quy trình được cung cấp không gian địa chỉ riêng, sau đó được HĐH ánh xạ vào bộ nhớ vật lý. Các bảng ánh xạ này được sử dụng để dọn dẹp phân bổ bộ nhớ khi một quá trình kết thúc, do đó bộ nhớ được giải phóng hoàn toàn. Các trang vật lý có thể được chia sẻ giữa nhiều quy trình, trong trường hợp đó chúng được giải phóng khi không còn người dùng.

Thông thường, các tài nguyên khác như xử lý tệp được cung cấp cho các quy trình ở dạng khả năng , trong đó quy trình nhận xử lý tài nguyên và thao tác với nó thông qua các chức năng truy cập được xác định rõ. HĐH giữ ánh xạ bảng từ giá trị xử lý đến đối tượng trong nhân cung cấp hàm; một lần nữa, bảng này có thể được sử dụng để dọn dẹp khi một quá trình kết thúc.

Có những tài nguyên đặc biệt tồn tại trong quá trình tạo ra chúng, ví dụ, có thể tạo các phân bổ bộ nhớ chia sẻ được đặt tên liên tục có thể được sử dụng trong giao tiếp giữa các quá trình. Chúng hiếm khi được sử dụng, chính xác bởi vì HĐH không thể xác định liệu chúng có còn được yêu cầu hay không.

Trong các hệ điều hành khác, đôi khi không có sự phân tách quá trình rõ ràng; điều này đặt gánh nặng dọn dẹp lên các ứng dụng riêng lẻ.

Buộc đóng một quy trình sẽ chấm dứt quá trình mà không cho nó bất kỳ cơ hội nào để làm sạch; nếu HĐH có một danh sách đầy đủ tất cả các tài nguyên, thì điều này không có tác dụng phụ.


5

Đó là trở lại trong ngày trước khi quản lý bộ nhớ được thực hiện rộng rãi. Ngày nay, bộ nhớ duy nhất mà bạn có thể bỏ lỡ là bộ nhớ được sử dụng bởi các trình điều khiển và mô-đun hạt nhân vẫn chưa được xử lý hoặc được lưu trữ, nhưng đó thực sự là đậu phộ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.