最近、コンテキストを使ったタスク管理を実装するために頭を悩ませています。コードはここにあります。
このプロジェクトの他のすべてと同様、これもマジエロ教授のコンテンツのもう 1 つの「タスク」でした。
タスク管理システムは、システム コンテキストを使用して実装されました。 1 つのタスクを明示的に別のタスクに移動するまで実行することで、協調タスクを管理します。
task_t 構造: タスクを表し、実行コンテキスト、識別子 (ID)、およびタスクの二重リンク キューの構築を容易にするポインターを格納します。
typedef struct task_t { struct task_t *prev, *next; // ponteiros para usar em filas int id; // identificador da tarefa ucontext_t context; // contexto armazenado da tarefa short status; // pronta, rodando, suspensa, ... // ... (outros campos serão adicionados mais tarde) } task_t;
初期化: ppos_init() 関数は、プログラムのメイン コンテキストを構成するために呼び出されます。これにより、システムが複数のタスクを管理できるようになります。
タスク作成: 新しいタスクは task_init() で作成されます。ここで、新しいタスク内で実行される関数と引数を渡します。これらのタスクには新しいコンテキストとスタックが与えられ、タスク ID が更新されます。
コンテキスト切り替え: task_switch() 関数を使用すると、現在のコンテキストを指定したタスクのコンテキストと交換して、タスク間を切り替えることができます。
タスク終了: タスクは実行を終了し、task_exit() を使用してメイン コンテキストに戻ることができます。
以上が日 - タスク管理 (オペレーティング システム)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。