Các ứng dụng có bị xóa khỏi RAM khi chúng bị đóng không?


2

Tôi đã nhận thấy rằng khi bạn mở một chương trình, đóng nó lại, sau đó mở lại, nó dường như mở nhanh hơn rất nhiều lần thứ hai.

Đây có phải là vì lần thứ hai nó đã có RAM?

Nói cách khác, tôi giả sử khi chương trình đóng lại, không gian bộ nhớ được đánh dấu là không sử dụng. Nếu chương trình đó được mở lại trước khi không gian bộ nhớ cũ được sử dụng, nó có phải tải lại toàn bộ chương trình từ đĩa không?


1
Đây là sự khác biệt giữa bộ nhớ miễn phí và không hoạt động. Cả hai đều có thể đi thuyền khi cần, nhưng cái sau đã chứa dữ liệu có thể được sử dụng lại.
Daniel Beck

1
Bạn sẽ nhận được câu trả lời mơ hồ và len lỏi vì bạn đã hỏi một câu hỏi mơ hồ và len lỏi. Câu trả lời cho câu hỏi này phụ thuộc vào hệ điều hành, nhưng bạn chưa chỉ định một hệ điều hành. Hành vi trên một Unix cũ với các chương trình "văn bản dính" khác với hành vi trên Windows NT, khác với hành vi trên Linux, khác với hành vi trên BSD và MacOS, khác với hành vi trên Solaris - bởi vì các kiến ​​trúc quản lý bộ nhớ đệm và bộ nhớ của chúng đều tinh tế, hoặc thậm chí thô sơ, khác biệt với nhau.
JdeBP

@JdeBP Điểm công bằng. Tôi đoán rằng tôi đang tìm kiếm câu trả lời của OS 101, hoặc ít nhất là một số ý tưởng mà tôi chưa xem xét, như bộ nhớ đệm được đề cập dưới đây.
Trưởng khoa

Câu trả lời:


1

Nói chung, khi một ứng dụng đóng / kết thúc bộ lưu trữ, nó sẽ được giải phóng ngay lập tức và nếu bạn khởi động lại ứng dụng, nó sẽ được tải từ đĩa trước, vào bộ lưu trữ "mới".

Ngoại lệ lớn nhất là trên một số "điện thoại thông minh", đôi khi khi bạn "kết thúc" một ứng dụng, nó không thực sự kết thúc ngay lập tức mà chỉ đơn giản là "làm nền" trong một khoảng thời gian với giả định rằng bạn có thể khởi động lại vào gần Tương lai. Nhưng nếu bạn không sử dụng ứng dụng trong một khoảng thời gian thì cuối cùng nó cũng bị hệ điều hành và bộ nhớ thu hồi. (Theo như tôi biết thì chương trình này không được sử dụng trên các máy tính thông thường của Microsoft hoặc Apple, chỉ có điện thoại.)

Một ngoại lệ khác, kỹ thuật hơn một chút, là mặc dù chương trình đã kết thúc và bộ nhớ được giải phóng, hình ảnh đĩa của chương trình (hoặc ít nhất là một phần của nó) vẫn có thể tồn tại trong "bộ đệm" và có thể dễ dàng truy cập hơn lần thứ hai hơn lần đầu Đây có thể là nguyên nhân cho những gì bạn nhận thấy khi khởi động nhanh hơn lần thứ hai.

Có một lý do khác, đơn giản hơn cho việc khởi động nhanh hơn, mặc dù. Khi bạn kết thúc một ứng dụng và sau đó khởi động lại ngay lập tức, đó là "lỗ hổng" tiện lợi trong bộ lưu trữ phù hợp chính xác với chương trình của bạn. Nếu bạn khởi động nó sau, sau khi chạy những thứ khác, HĐH phải tìm kiếm bộ nhớ khả dụng và điều này thường có nghĩa là nó phải "loại bỏ" dữ liệu khác trong RAM, một quá trình tốn thời gian.


3
"Nói chung, khi một ứng dụng đóng / kết thúc bộ lưu trữ, nó chiếm dụng sẽ được giải phóng ngay lập tức và nếu bạn khởi động lại ứng dụng, nó sẽ được tải từ đĩa trước, vào bộ nhớ" mới ". Điều này là không đúng đối với bất kỳ hệ thống hiện đại nào sử dụng ánh xạ bộ nhớ để tải các tệp nhị phân một cách lười biếng.
billc.cn

Về cơ bản, đó sẽ là "bộ nhớ đệm" của dữ liệu đĩa. Nhưng lưu ý rằng việc tải thực tế của văn bản chương trình là một phần nhỏ trong việc chuẩn bị một chương trình để thực hiện. Liên kết nó với RTE và chuẩn bị các vùng dữ liệu là phần lớn hơn.
Daniel R Hicks

(Nhưng bạn nói đúng - Tôi đã quên mất tính năng cụ thể đó.)
Daniel R Hicks

@DanH Điều bạn đang nói là hoàn toàn sai đối với bất kỳ hệ điều hành hiện đại nào. Và đó rõ ràng là một cách ngu ngốc để làm mọi thứ. Khi một chương trình tải, bạn sẽ có hai bản sao của chương trình, một bản đang chạy và một bản nằm trong bộ đệm đĩa - một sự lãng phí bộ nhớ hoàn toàn vô nghĩa. Trên các hệ điều hành hiện đại, không có bộ đệm đĩa riêng, hầu hết bộ nhớ vật lý là bộ đệm trang.
David Schwartz

Chỉ để cười, tôi đã mở Firefox, mà không làm gì khác ngoài việc để nó vào trang chủ của nó (Google). firefox.exe là 925K, nhưng kích thước ảo của nó là 269.000K và bộ hoạt động của nó là 84.000K. Vì vậy, văn bản chương trình thực tế là một phần rất nhỏ trong yêu cầu lưu trữ tổng thể. Tương tự đối với Solataire: exe - 859K, kích thước ảo 183.000K, bộ làm việc 47.000K.
Daniel R Hicks

4

Nó không được sử dụng hoặc không sử dụng khi chương trình mở hơn khi chương trình được đóng. Bộ nhớ được sử dụng nếu nó chứa thông tin hữu ích. Nó chứa thông tin hữu ích cả khi chương trình đang chạy và khi chương trình không còn chạy.

Trên thực tế, hầu hết các hệ điều hành thậm chí không xem xét liệu chương trình có chạy hay không. Tại sao phải giữ một cái gì đó trong bộ nhớ nếu nó không được truy cập chỉ vì một chương trình đang chạy? Và tại sao loại bỏ thứ gì đó khỏi bộ nhớ chỉ vì không có chương trình nào đang chạy ngay lúc đó đang sử dụng nó?

Hệ điều hành đi bằng cách truy cập dữ liệu. Tất nhiên, bộ nhớ chứa dữ liệu không bao giờ có thể được truy cập được coi là miễn phí.

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.