Mon 14 Oct 23:06:38 CEST 2024
This commit is contained in:
parent
1055ac73cc
commit
5925b2af52
86
kernel/process.h
Normal file
86
kernel/process.h
Normal file
|
@ -0,0 +1,86 @@
|
|||
/*
|
||||
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
|
Loading…
Reference in New Issue
Block a user