87 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			87 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /*
 | |
| Copyright (C) 2015-2019 The University of Notre Dame
 | |
| This software is distributed under the GNU General Public License.
 | |
| See the file LICENSE for details.
 | |
| */
 | |
| 
 | |
| #ifndef PROCESS_H
 | |
| #define PROCESS_H
 | |
| 
 | |
| #include "kernel/types.h"
 | |
| #include "kernel/stats.h"
 | |
| #include "list.h"
 | |
| #include "pagetable.h"
 | |
| #include "kobject.h"
 | |
| #include "x86.h"
 | |
| #include "fs.h"
 | |
| 
 | |
| #define PROCESS_STATE_CRADLE  0
 | |
| #define PROCESS_STATE_READY   1
 | |
| #define PROCESS_STATE_RUNNING 2
 | |
| #define PROCESS_STATE_BLOCKED 3
 | |
| #define PROCESS_STATE_GRAVE   4
 | |
| 
 | |
| #define PROCESS_MAX_OBJECTS 32
 | |
| #define PROCESS_MAX_PID 1024
 | |
| 
 | |
| #define PROCESS_EXIT_NORMAL   0
 | |
| #define PROCESS_EXIT_KILLED   1
 | |
| 
 | |
| struct process {
 | |
| 	struct list_node node;
 | |
| 	int state;
 | |
| 	int exitcode;
 | |
| 	int exitreason;
 | |
| 	struct pagetable *pagetable;
 | |
| 	char *kstack;
 | |
| 	char *kstack_top;
 | |
| 	char *kstack_ptr;
 | |
| 	struct kobject *ktable[PROCESS_MAX_OBJECTS];
 | |
| 	struct process_stats stats;
 | |
| 	uint32_t pid;
 | |
| 	uint32_t ppid;
 | |
| 	uint32_t vm_data_size;
 | |
| 	uint32_t vm_stack_size;
 | |
| 	uint32_t waiting_for_child_pid;
 | |
| };
 | |
| 
 | |
| void process_init();
 | |
| 
 | |
| struct process *process_create();
 | |
| void process_delete(struct process *p);
 | |
| void process_launch(struct process *p);
 | |
| void process_pass_arguments(struct process *p, int argc, char **argv);
 | |
| void process_inherit(struct process *parent, struct process *child);
 | |
| void process_selective_inherit(struct process *parent, struct process *child, int * fds, int fd_len);
 | |
| 
 | |
| void process_stack_reset(struct process *p, unsigned size);
 | |
| void process_kstack_reset(struct process *p, unsigned entry_point);
 | |
| void process_kstack_copy(struct process *parent, struct process *child);
 | |
| 
 | |
| int process_data_size_set(struct process *p, unsigned size);
 | |
| int process_stack_size_set(struct process *p, unsigned size);
 | |
| 
 | |
| int process_available_fd(struct process *p);
 | |
| int process_object_max(struct process *p);
 | |
| 
 | |
| void process_yield();
 | |
| void process_preempt();
 | |
| void process_exit(int code);
 | |
| void process_dump(struct process *p);
 | |
| 
 | |
| void process_wait(struct list *q);
 | |
| void process_wakeup(struct list *q);
 | |
| void process_wakeup_parent(struct list *q);
 | |
| void process_wakeup_all(struct list *q);
 | |
| void process_reap_all();
 | |
| 
 | |
| int process_kill(uint32_t pid);
 | |
| int process_wait_child(uint32_t pid, struct process_info *info, int timeout);
 | |
| int process_reap(uint32_t pid);
 | |
| 
 | |
| int process_stats(int pid, struct process_stats *stat);
 | |
| 
 | |
| extern struct process *current;
 | |
| 
 | |
| #endif
 |