X-Git-Url: https://scm.lunaixsky.com/lunaix-os.git/blobdiff_plain/b26d3165c52589d1f8de37bf0df27ad96f460f47..78cd005fac540973751b5a108c37a715bc64b5a2:/lunaix-os/includes/lunaix/process.h?ds=sidebyside diff --git a/lunaix-os/includes/lunaix/process.h b/lunaix-os/includes/lunaix/process.h index c3ac9a5..552ac4f 100644 --- a/lunaix-os/includes/lunaix/process.h +++ b/lunaix-os/includes/lunaix/process.h @@ -1,16 +1,17 @@ #ifndef __LUNAIX_PROCESS_H #define __LUNAIX_PROCESS_H -#include #include #include #include +#include #include #include #include #include #include #include +#include // 虽然内核不是进程,但为了区分,这里使用Pid=-1来指代内核。这主要是方便物理页所有权检查。 #define KERNEL_PID -1 @@ -110,26 +111,32 @@ struct proc_info struct v_fdtable* fdtable; struct v_dnode* cwd; pid_t pgid; + + struct iopoll pollctx; }; extern volatile struct proc_info* __current; +#define resume_process(proc) (proc)->state = PS_READY +#define pause_process(proc) (proc)->state = PS_PAUSED +#define block_process(proc) (proc)->state = PS_BLOCKED + static inline void block_current() { - __current->state = PS_BLOCKED; + block_process(__current); } static inline void pause_current() { - __current->state = PS_PAUSED; + pause_process(__current); } static inline void resume_current() { - __current->state = PS_RUNNING; + resume_process(__current); } /** @@ -198,6 +205,14 @@ proc_clear_signal(struct proc_info* proc); // enable interrupt upon transfer #define TRANSFER_IE 1 +/** + * @brief Setup process initial context, used to initiate first switch + * + * @param proc + * @param stop + * @param target + * @param flags + */ void proc_init_transfer(struct proc_info* proc, ptr_t stop, ptr_t target, int flags);