X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;ds=sidebyside;f=model.h;h=86e0b1e7b05a8174a05d8a3f28dc7132432962d5;hb=0cb167b8fb332e4d9726badd0aa58e943bb4b459;hp=e6dc06ddd97c2aef7d7c7dd17ae71854162ffb5e;hpb=5e4a7d161cba81152ddcf295ee72fbb25ba3afaa;p=model-checker.git diff --git a/model.h b/model.h index e6dc06d..86e0b1e 100644 --- a/model.h +++ b/model.h @@ -23,15 +23,19 @@ class NodeStack; class CycleGraph; class Promise; +/** + * Model checker parameter structure. Holds run-time configuration options for + * the model checker. + */ +struct model_params { +}; + /** @brief The central structure for model-checking */ class ModelChecker { public: - ModelChecker(); + ModelChecker(struct model_params params); ~ModelChecker(); - /** The scheduler to use: tracks the running/ready Threads */ - Scheduler *scheduler; - /** Stores the context for the main model-checking system thread (call * once) * @param ctxt The system context structure @@ -42,7 +46,10 @@ public: ucontext_t * get_system_context(void) { return system_context; } void check_current_action(void); - void print_summary(void); + + /** Prints an execution summary with trace information. */ + void print_summary(); + Thread * schedule_next_thread(); int add_thread(Thread *t); @@ -53,18 +60,29 @@ public: int get_num_threads(); modelclock_t get_next_seq_num(); + /** @return The currently executing Thread. */ + Thread * get_current_thread() { return scheduler->get_current_thread(); } + int switch_to_master(ModelAction *act); ClockVector * get_cv(thread_id_t tid); bool next_execution(); bool isfeasible(); + bool isfinalfeasible(); void check_promises(ClockVector *old_cv, ClockVector * merge_cv); + void finish_execution(); + MEMALLOC private: + /** The scheduler to use: tracks the running/ready Threads */ + Scheduler *scheduler; + int next_thread_id; modelclock_t used_sequence_numbers; int num_executions; + const model_params params; + /** * Stores the ModelAction for the current thread action. Call this * immediately before switching from user- to system-context to pass @@ -73,11 +91,15 @@ private: */ void set_current_action(ModelAction *act) { current_action = act; } + bool take_step(); + ModelAction * get_last_conflict(ModelAction *act); void set_backtracking(ModelAction *act); thread_id_t get_next_replay_thread(); ModelAction * get_next_backtrack(); void reset_to_initial_state(); + void resolve_promises(ModelAction *curr); + void compute_promises(ModelAction *curr); void add_action_to_lists(ModelAction *act); ModelAction * get_last_action(thread_id_t tid); @@ -85,9 +107,10 @@ private: ModelAction * get_last_seq_cst(const void *location); void build_reads_from_past(ModelAction *curr); ModelAction * process_rmw(ModelAction * curr); + void post_r_modification_order(ModelAction * curr, const ModelAction *rf); void r_modification_order(ModelAction * curr, const ModelAction *rf); void w_modification_order(ModelAction * curr); - + ModelAction *current_action; ModelAction *diverge; thread_id_t nextThread;