2009-12-06 14 views
5

Bạn có thể biết rất nhiều chương trình, ví dụ như một số chương trình bẻ khóa mật khẩu, chúng tôi có thể dừng chúng khi chúng đang chạy và khi chúng tôi chạy lại chương trình (có hoặc không nhập cùng một đầu vào), chúng sẽ có thể tiếp tục nơi họ đã rời đi. Tôi tự hỏi loại kỹ thuật nào đang sử dụng?Làm cách nào để lưu tiến trình của chương trình và tiếp tục sau?

[Chỉnh sửa] Tôi đang viết chương trình chủ yếu dựa trên các hàm đệ quy. Trong sự hiểu biết của tôi, tôi nghĩ rằng nó là vô cùng khó khăn để lưu các tiểu bang như vậy trong chương trình của tôi. Có kỹ thuật nào không, bằng cách nào đó, lưu nội dung ngăn xếp, các cuộc gọi chức năng và dữ liệu liên quan đến chương trình của tôi, và sau đó khi nó được khởi động lại, nó có thể chạy như thể nó chưa bị dừng? Đây chỉ là một số khái niệm tôi có trong tâm trí của tôi, vì vậy hãy tha thứ cho tôi nếu nó không có ý nghĩa ...

Trả lời

2

Nó sẽ là khác nhau cho mỗi chương trình. Đối với một cái gì đó đơn giản như, nói, một cracker mật khẩu bạo lực tất cả những gì thực sự cần phải được lưu là mật khẩu cuối cùng đã cố gắng. Đối với các ứng dụng khác, bạn có thể cần phải lưu trữ một số điểm dữ liệu, nhưng đó thực sự là tất cả những điều đó: lưu và tải lượng thông tin tối thiểu cần thiết để xây dựng lại vị trí của bạn.

Một kỹ thuật phổ biến khác là lưu hình ảnh của toàn bộ trạng thái chương trình. Nếu bạn đã từng chơi với trình mô phỏng bảng điều khiển trò chơi có khả năng lưu trạng thái thì đây là cách chúng thực hiện. Một kỹ thuật tương tự tồn tại trong Python với tẩy. Nếu môi trường đủ ổn định (ví dụ: không có con trỏ khác nhau), bạn chỉ cần sao chép toàn bộ trạng thái bộ nhớ ứng dụng vào một tệp nhị phân. Khi bạn muốn tiếp tục, bạn sao chép nó trở lại vào bộ nhớ và bắt đầu chạy lại. Điều này mang lại cho bạn gần phục hồi trạng thái hoàn hảo, nhưng có hay không nó là tất cả có thể là môi trường cao/phụ thuộc vào ngôn ngữ. (Ví dụ: hầu hết các ứng dụng C++ không thể thực hiện việc này nếu không có sự trợ giúp từ hệ điều hành hoặc nếu chúng được xây dựng RẤT cẩn thận với điều này trong đầu.)

+0

Ồ, điều này rất có nhiều thông tin. Tôi sẽ xem xét cẩn thận nó. Cám ơn rất nhiều. : D – wakandan

1

Để đạt được điều này, bạn cần phải liên tục lưu trạng thái (nghĩa là bạn đang ở đâu trong tính toán). Bằng cách này, nếu bạn làm gián đoạn probram, khi nó khởi động lại, nó sẽ biết nó đang ở giữa tính toán, và nó ở đâu trong phép tính đó. Bạn cũng có thể muốn tính toán chính trong một chuỗi riêng biệt từ giao diện người dùng - theo cách này bạn có thể trả lời các yêu cầu "đóng/ngắt" từ giao diện người dùng của bạn và xử lý chúng một cách thích hợp bằng cách dừng/tạm dừng luồng.

+0

Cảm ơn sự giúp đỡ của bạn: D – wakandan

2

Sử dụng Persistence.

Tính bền bỉ là một cơ chế mà qua đó tuổi thọ của đối tượng vượt quá thời gian thực thi của chương trình.

Lưu trữ trạng thái của các đối tượng liên quan đến quá trình trên ổ đĩa cứng cục bộ bằng cách sử dụng serialization.

+0

Tôi sẽ dành cho tôi một khoảng thời gian để hiểu những gì bạn nói ở đây: D. Cám ơn rất nhiều. Tôi sẽ đào nó ngay bây giờ. – wakandan

+0

Tôi đã bị bắt lập trình và quên rằng tôi phải đính kèm một liên kết. Xin lỗi vì điều đó. – Tebo

0

Đối với linux, có một dự án có tên CRIU, hỗ trợ quá trình lưu và tiếp tục. Nó khá giống như ngủ đông và nối lại hệ điều hành, nhưng độ chi tiết được chia nhỏ thành các quá trình. Nó cũng hỗ trợ công nghệ container, đặc biệt là Docker. Tham khảo http://criu.org/ để biết thêm thông tin.