12 #define NUM_MAX_PCB_NAME 20
13 #define NUM_MAX_PROCESS 16
14 #define NUM_MAX_CHILD 5
15 #define NUM_MAX_CHILD_THREADS 5
16 #define NUM_MAX_TASK (1 + NUM_MAX_CHILD + NUM_MAX_CHILD_THREADS) * NUM_MAX_PROCESS
17 #define NUM_MAX_LOCK 16
18 #define NUM_MAX_MBOX 16
20 #define WNOHANG 0x00000001
21 #define WUNTRACED 0x00000002
22 #define WSTOPPED WUNTRACED
23 #define WEXITED 0x00000004
24 #define WCONTINUED 0x00000008
25 #define WNOWAIT 0x01000000
27 #define __WNOTHREAD 0x20000000
28 #define __WALL 0x40000000
29 #define __WCLONE 0x80000000
31 #define PRIO_MIN (-20)
34 #define PRIO_PROCESS 0
41 #define CSIGNAL 0x000000ff
42 #define CLONE_VM 0x00000100
43 #define CLONE_FS 0x00000200
44 #define CLONE_FILES 0x00000400
45 #define CLONE_SIGHAND 0x00000800
46 #define CLONE_PIDFD 0x00001000
47 #define CLONE_PTRACE 0x00002000
48 #define CLONE_VFORK 0x00004000
49 #define CLONE_PARENT 0x00008000
50 #define CLONE_THREAD 0x00010000
51 #define CLONE_NEWNS 0x00020000
52 #define CLONE_SYSVSEM 0x00040000
53 #define CLONE_SETTLS 0x00080000
54 #define CLONE_PARENT_SETTID 0x00100000
55 #define CLONE_CHILD_CLEARTID 0x00200000
56 #define CLONE_DETACHED 0x00400000
57 #define CLONE_UNTRACED 0x00800000
58 #define CLONE_CHILD_SETTID 0x01000000
59 #define CLONE_NEWCGROUP 0x02000000
60 #define CLONE_NEWUTS 0x04000000
61 #define CLONE_NEWIPC 0x08000000
62 #define CLONE_NEWUSER 0x10000000
63 #define CLONE_NEWPID 0x20000000
64 #define CLONE_NEWNET 0x40000000
65 #define CLONE_IO 0x80000000
218 long sys_exec(
const char *file_name,
const char *argv[],
const char *envp[]);
219 long sys_execve(
const char *file_name,
const char *argv[],
const char *envp[]);
220 long sys_clone(
unsigned long flags,
void *stack,
pid_t *parent_tid,
void *tls,
pid_t *child_tid);
enum enqueue_way enqueue_way_t
enum task_type task_type_t
#define NUM_MAX_PROCESS
Definition: pcb.h:13
task_status
Definition: pcb.h:74
@ TASK_BLOCKED
Definition: pcb.h:75
@ TASK_EXITED
Definition: pcb.h:78
@ TASK_RUNNING
Definition: pcb.h:76
@ TASK_READY
Definition: pcb.h:77
void k_pcb_unblock(list_head *, list_head *, unblock_way_t way)
Definition: pcb.c:325
long sys_sched_getaffinity(pid_t pid, unsigned int len, uint8_t *user_mask_ptr)
Definition: pcb.c:364
const ptr_t pid0_stack2
Definition: pcb.c:25
void switch_to(pcb_t *prev, pcb_t *next)
void k_pcb_wakeup(void *chan)
Definition: pcb.c:733
long sys_setpriority(int which, int who, int niceval)
Definition: pcb.c:135
enum dequeue_way dequeue_way_t
long sys_getpid(void)
[SYSCALL] getpid: get current task process id
Definition: pcb.c:711
enum unblock_way unblock_way_t
long k_pcb_getpid(void)
Definition: pcb.c:702
long sys_sched_setaffinity(pid_t pid, unsigned int len, const uint8_t *user_mask_ptr)
Definition: pcb.c:350
void k_pcb_sleep(void *chan, spin_lock_t *lk)
Definition: pcb.c:724
void(* void_task)()
Definition: pcb.h:67
enum task_status task_status_t
long sys_spawn(const char *file_name)
Definition: pcb.c:404
long sys_wait4(pid_t pid, int *stat_addr, int options, rusage_t *ru)
Definition: pcb.c:508
pcb_t *volatile current_running1
Definition: pcb.c:16
enqueue_way
Definition: pcb.h:88
@ ENQUEUE_TIMER_LIST
Definition: pcb.h:90
@ ENQUEUE_LIST
Definition: pcb.h:89
long sys_exec(const char *file_name, const char *argv[], const char *envp[])
Definition: pcb.c:634
long sys_process_show()
Definition: pcb.c:550
long sys_getpriority(int which, int who)
Definition: pcb.c:164
pcb_t *volatile *volatile current_running
Definition: pcb.c:17
pcb_t pid0_pcb2
Definition: pcb.c:27
pcb_t *volatile current_running0
Definition: pcb.c:15
long sys_nanosleep(nanotime_val_t *rqtp, nanotime_val_t *rmtp)
Definition: pcb.c:263
pid_t freepid[NUM_MAX_TASK]
Definition: pcb.c:29
long sys_fork(void)
Definition: pcb.c:412
unblock_way
Definition: pcb.h:98
@ UNBLOCK_TO_LIST_BACK
Definition: pcb.h:100
@ UNBLOCK_ONLY
Definition: pcb.h:101
@ UNBLOCK_TO_LIST_STRATEGY
Definition: pcb.h:102
@ UNBLOCK_TO_LIST_FRONT
Definition: pcb.h:99
dequeue_way
Definition: pcb.h:93
@ DEQUEUE_LIST
Definition: pcb.h:94
@ DEQUEUE_LIST_STRATEGY
Definition: pcb.h:95
#define NUM_MAX_PCB_NAME
Definition: pcb.h:12
#define NUM_MAX_TASK
Definition: pcb.h:16
long sys_sched_yield(void)
Definition: pcb.c:316
long sys_exit(int error_code)
Definition: pcb.c:491
pcb_t pid0_pcb
Definition: pcb.c:26
long k_pcb_scheduler(void)
Definition: pcb.c:290
long sys_getppid(void)
[SYSCALL] getppid: get parent of current task pid
Definition: pcb.c:720
long sys_kill(pid_t pid)
Definition: pcb.c:479
task_type
Definition: pcb.h:81
@ KERNEL_PROCESS
Definition: pcb.h:82
@ USER_PROCESS
Definition: pcb.h:84
@ KERNEL_THREAD
Definition: pcb.h:83
@ USER_THREAD
Definition: pcb.h:85
#define NUM_MAX_CHILD_THREADS
Definition: pcb.h:15
const ptr_t pid0_stack
Definition: pcb.c:24
#define NUM_MAX_CHILD
Definition: pcb.h:14
void k_pcb_block(list_head *, list_head *queue, enqueue_way_t way)
Definition: pcb.c:320
long sys_execve(const char *file_name, const char *argv[], const char *envp[])
Definition: pcb.c:638
#define NUM_MAX_LOCK
Definition: pcb.h:17
void k_pcb_init()
Definition: pcb.c:123
long sys_clone(unsigned long flags, void *stack, pid_t *parent_tid, void *tls, pid_t *child_tid)
Definition: pcb.c:698
int cursor_y
Definition: pcb.h:164
__kernel_clock_t dead_child_utime
Definition: pcb.h:183
__kernel_timeval_t stime_last
Definition: pcb.h:179
pid_t child_pids[NUM_MAX_CHILD]
Definition: pcb.h:149
reg_t user_sp
Definition: pcb.h:131
list_node_t list
Definition: pcb.h:134
__kernel_timeval_t utime_last
Definition: pcb.h:180
pid_t pid
Definition: pcb.h:144
pid_t father_pid
Definition: pcb.h:148
int thread_ids[NUM_MAX_CHILD_THREADS]
Definition: pcb.h:153
int cursor_x
Definition: pcb.h:163
pid_t tid
Definition: pcb.h:146
reg_t kernel_sp
Definition: pcb.h:130
uint64_t pgdir
Definition: pcb.h:170
int child_num
Definition: pcb.h:150
int * child_stat_addrs[NUM_MAX_CHILD]
Definition: pcb.h:151
task_type_t type
Definition: pcb.h:156
int threadsum
Definition: pcb.h:152
pcbtimer_t timer
Definition: pcb.h:181
prior_t priority
Definition: pcb.h:166
regs_context_t * save_context
Definition: pcb.h:136
ELF_info_t elf
Definition: pcb.h:140
int lock_ids[NUM_MAX_LOCK]
Definition: pcb.h:173
char name[NUM_MAX_PCB_NAME]
Definition: pcb.h:143
switchto_context_t * switch_context
Definition: pcb.h:137
task_status_t status
Definition: pcb.h:159
pid_t fpid
Definition: pcb.h:145
uint8_t core_mask[CPU_SET_SIZE]
Definition: pcb.h:168
int locksum
Definition: pcb.h:172
bool in_use
Definition: pcb.h:139
pcb_mbox_t * mbox
Definition: pcb.h:176
int exit_status
Definition: pcb.h:160
uint32_t * clear_ctid
Definition: pcb.h:147
void * chan
Definition: pcb.h:174
__kernel_clock_t dead_child_stime
Definition: pcb.h:182
rusage_t resources
Definition: pcb.h:185
long priority
Definition: pcb.h:70
uint64_t last_sched_time
Definition: pcb.h:71
__kernel_long_t ru_nivcsw
Definition: pcb.h:121
__kernel_long_t ru_nvcsw
Definition: pcb.h:120
__kernel_long_t ru_inblock
Definition: pcb.h:115
__kernel_timeval_t ru_utime
Definition: pcb.h:106
__kernel_long_t ru_idrss
Definition: pcb.h:110
__kernel_long_t ru_nswap
Definition: pcb.h:114
__kernel_long_t ru_isrss
Definition: pcb.h:111
__kernel_long_t ru_minflt
Definition: pcb.h:112
__kernel_long_t ru_msgsnd
Definition: pcb.h:117
__kernel_long_t ru_msgrcv
Definition: pcb.h:118
__kernel_long_t ru_majflt
Definition: pcb.h:113
__kernel_long_t ru_ixrss
Definition: pcb.h:109
__kernel_timeval_t ru_stime
Definition: pcb.h:107
__kernel_long_t ru_oublock
Definition: pcb.h:116
__kernel_long_t ru_nsignals
Definition: pcb.h:119
__kernel_long_t ru_maxrss
Definition: pcb.h:108
#define __kernel_timeval_t
Definition: time.h:14
int pid_t
Definition: types.h:42
uint64_t ptr_t
Definition: types.h:44
__kernel_long_t __kernel_clock_t
Definition: types.h:150
uint64_t reg_t
Definition: types.h:43
long __kernel_long_t
Definition: types.h:79