Tôi đang tìm kiếm các nguyên tắc cơ bản để lưu trữ trạng thái của chương trình thực thi vào đĩa và đưa nó trở lại. Trong thiết kế hiện tại mà chúng ta có, mỗi đối tượng (là một thingy mức C với các danh sách con trỏ hàm, loại định hướng đối tượng được tạo ở mức độ thấp - và có những lý do rất tốt để làm theo cách này) sẽ là được gọi để xuất trạng thái rõ ràng của nó sang định dạng có thể ghi và có thể chỉnh sửa. Thuộc tính quan trọng để thực hiện công việc này là tất cả các trạng thái liên quan đến một đối tượng thực sự được đóng gói trong các cấu trúc dữ liệu đối tượng.Serialization của các đối tượng: không có trạng thái thread có thể được tham gia, phải không?
Có các giải pháp khác mà bạn làm việc với các đối tượng đang hoạt động, trong đó có một chuỗi cấp người dùng được đính kèm với một số đối tượng. Và do đó, bộ đếm chương trình, nội dung đăng ký và nội dung ngăn xếp đột nhiên trở thành một phần của trạng thái chương trình. Theo như tôi có thể thấy, không có cách nào tốt để serialize những thứ như vậy vào đĩa tại một điểm tùy ý trong thời gian. Các chủ đề phải đi công viên mình trong một số trạng thái đặc biệt mà không có gì được đại diện bởi bộ đếm chương trình et al, và do đó về cơ bản "lưu" trạng thái máy trạng thái thực thi của chúng cho trạng thái đối tượng rõ ràng.
Tôi đã xem xét một loạt các thư viện tuần tự hóa và theo như tôi có thể nói đây là một thuộc tính chung.
Câu hỏi cốt lõi là: Hoặc thực sự không phải vậy? Có lưu/khôi phục lại các giải pháp trên mạng có thể bao gồm trạng thái luồng, về mặt mã nguồn của một chuỗi đang thực thi không?
Lưu ý rằng lưu toàn bộ trạng thái hệ thống trong máy ảo không được tính, điều đó không thực sự tuần tự hóa trạng thái, mà chỉ đóng băng máy và di chuyển nó. Đó là một giải pháp rõ ràng, nhưng một chút nặng nề hầu hết thời gian.
Một số câu hỏi làm rõ rằng tôi không đủ rõ ràng trong việc giải thích ý tưởng về cách chúng tôi làm việc. Chúng tôi đang làm việc trên một hệ thống mô phỏng, với các quy tắc rất nghiêm ngặt cho mã chạy bên trong nó được phép được viết. Đặc biệt, chúng ta tạo ra một sự phân chia hoàn toàn giữa việc xây dựng đối tượng và trạng thái đối tượng. Các con trỏ hàm giao diện được tạo lại mỗi lần bạn thiết lập hệ thống và không phải là một phần của trạng thái. Nhà nước chỉ bao gồm các "thuộc tính" được chỉ định cụ thể mà mỗi hàm có một hàm get/set được định nghĩa để chuyển đổi giữa biểu diễn thời gian chạy nội bộ và biểu diễn lưu trữ. Đối với con trỏ giữa các đối tượng, tất cả chúng đều được chuyển đổi thành tên. Vì vậy, trong thiết kế của chúng tôi, một đối tượng có thể xuất hiện như thế này trong bộ nhớ:
Object foo {
value1: 0xff00ff00;
value2: 0x00ffeedd;
next_guy_in_chain: bar;
}
Object bar {
next_guy_in_chain: null;
}
Danh sách liên kết không bao giờ thực sự có mặt trong cấu trúc mô phỏng, mỗi đối tượng đại diện cho một đơn vị phần cứng.
Vấn đề là một số người muốn làm điều này, nhưng cũng có chủ đề như một cách để mã hành vi. "Hành vi" ở đây thực sự là đột biến của trạng thái của các đơn vị mô phỏng. Về cơ bản, thiết kế chúng tôi đã nói rằng tất cả những thay đổi như vậy phải được thực hiện trong các hoạt động hoàn chỉnh nguyên tử được gọi, thực hiện công việc của họ và quay trở lại. Tất cả các trạng thái được lưu trữ trong các đối tượng. Bạn có một mô hình phản ứng, hoặc nó có thể được gọi là "chạy đến hoàn thành", hoặc "sự kiện điều khiển".
Cách suy nghĩ khác về việc này là để các đối tượng có chuỗi hoạt động hoạt động trên chúng, nằm trong vòng lặp vĩnh cửu giống như các luồng Unix cổ điển và không bao giờ chấm dứt. Đây là trường hợp mà tôi đang cố gắng để xem nếu nó có thể được lưu trữ hợp lý vào đĩa, nhưng nó không có vẻ như đó là khả thi mà không interposing một VM bên dưới.
Cập nhật, tháng 10 năm 2009: Một giấy liên quan đến điều này đã được xuất bản tại hội nghị FDL năm 2009, xem this paper về điểm kiểm tra và SystemC.
Vâng, các chủ đề ở đây là những thứ trong cái gọi là SystemC, về cơ bản hợp tác không ưu tiên luồng bằng cách sử dụng quickthreads hoặc Windows sợi. Trong một chuỗi hệ điều hành duy nhất. – jakobengblom2