PatchworkOS  da8a090
A non-POSIX operating system.
Loading...
Searching...
No Matches
process.c File Reference
#include <errno.h>
#include <kernel/sched/process.h>
#include <kernel/cpu/cpu.h>
#include <kernel/cpu/gdt.h>
#include <kernel/fs/file.h>
#include <kernel/fs/path.h>
#include <kernel/fs/sysfs.h>
#include <kernel/fs/vfs.h>
#include <kernel/log/log.h>
#include <kernel/log/panic.h>
#include <kernel/mem/vmm.h>
#include <kernel/sched/sys_time.h>
#include <kernel/sched/thread.h>
#include <kernel/sched/timer.h>
#include <kernel/sched/wait.h>
#include <kernel/sync/lock.h>
#include <kernel/sync/rwlock.h>
#include <kernel/fs/ctl.h>
#include <assert.h>
#include <stdatomic.h>
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/io.h>
#include <sys/list.h>
#include <sys/math.h>
#include <sys/proc.h>
Include dependency graph for process.c:

Go to the source code of this file.

Functions

static _Atomic (pid_t)
 
static uint64_t process_prio_read (file_t *file, void *buffer, uint64_t count, uint64_t *offset)
 
static uint64_t process_prio_write (file_t *file, const void *buffer, uint64_t count, uint64_t *offset)
 
static uint64_t process_cwd_read (file_t *file, void *buffer, uint64_t count, uint64_t *offset)
 
static uint64_t process_cwd_write (file_t *file, const void *buffer, uint64_t count, uint64_t *offset)
 
static uint64_t process_cmdline_read (file_t *file, void *buffer, uint64_t count, uint64_t *offset)
 
static uint64_t process_note_write (file_t *file, const void *buffer, uint64_t count, uint64_t *offset)
 
static uint64_t process_wait_read (file_t *file, void *buffer, uint64_t count, uint64_t *offset)
 
static wait_queue_tprocess_wait_poll (file_t *file, poll_events_t *revents)
 
static uint64_t process_stat_read (file_t *file, void *buffer, uint64_t count, uint64_t *offset)
 
static uint64_t process_ctl_close (file_t *file, uint64_t argc, const char **argv)
 
static uint64_t process_ctl_dup2 (file_t *file, uint64_t argc, const char **argv)
 
static uint64_t process_ctl_start (file_t *file, uint64_t argc, const char **argv)
 
static uint64_t process_ctl_kill (file_t *file, uint64_t argc, const char **argv)
 
 CTL_STANDARD_OPS_DEFINE (ctlOps, { {"close", process_ctl_close, 2, 3}, {"dup2", process_ctl_dup2, 3, 3}, {"start", process_ctl_start, 1, 1}, {"kill", process_ctl_kill, 1, 1}, {0} })
 
static uint64_t process_env_write (file_t *file, const void *buffer, uint64_t count, uint64_t *offset)
 
static uint64_t process_env_create (inode_t *dir, dentry_t *target, mode_t mode)
 
static uint64_t process_env_remove (inode_t *parent, dentry_t *target, mode_t mode)
 
static void process_env_cleanup (inode_t *inode)
 
static void process_cleanup (inode_t *inode)
 
static void process_free (process_t *process)
 
static uint64_t process_dir_init (process_t *process)
 
process_tprocess_new (priority_t priority)
 Allocates and initializes a new process.
 
void process_kill (process_t *process, int32_t status)
 Kills a process.
 
uint64_t process_copy_env (process_t *dest, process_t *src)
 Copies the environment variables from one process to another.
 
uint64_t process_set_cmdline (process_t *process, char **argv, uint64_t argc)
 Sets the command line arguments for a process.
 
bool process_has_thread (process_t *process, tid_t tid)
 Checks if a process has a thread with the specified thread ID.
 
process_tprocess_get_kernel (void)
 Gets the kernel process.
 
void process_procfs_init (void)
 Initializes the /proc directory.
 
static void process_reaper (void *arg)
 
void process_reaper_init (void)
 Initializes the process reaper.
 
 SYSCALL_DEFINE (SYS_GETPID, pid_t)
 

Variables

static process_tkernelProcess = NULL
 
static file_ops_t prioOps
 
static file_ops_t cwdOps
 
static file_ops_t cmdlineOps
 
static file_ops_t noteOps
 
static file_ops_t waitOps
 
static file_ops_t statOps
 
static file_ops_t envFileOps
 
static inode_ops_t envInodeOps
 
static inode_ops_t inodeOps
 

Function Documentation

◆ _Atomic()

static _Atomic ( pid_t  )
staticnew

Definition at line 33 of file process.c.

◆ process_prio_read()

static uint64_t process_prio_read ( file_t file,
void *  buffer,
uint64_t  count,
uint64_t offset 
)
static

Definition at line 61 of file process.c.

Here is the call graph for this function:

◆ process_prio_write()

static uint64_t process_prio_write ( file_t file,
const void *  buffer,
uint64_t  count,
uint64_t offset 
)
static

Definition at line 76 of file process.c.

Here is the call graph for this function:

◆ process_cwd_read()

static uint64_t process_cwd_read ( file_t file,
void *  buffer,
uint64_t  count,
uint64_t offset 
)
static

Definition at line 117 of file process.c.

Here is the call graph for this function:

◆ process_cwd_write()

static uint64_t process_cwd_write ( file_t file,
const void *  buffer,
uint64_t  count,
uint64_t offset 
)
static

Definition at line 138 of file process.c.

Here is the call graph for this function:

◆ process_cmdline_read()

static uint64_t process_cmdline_read ( file_t file,
void *  buffer,
uint64_t  count,
uint64_t offset 
)
static

Definition at line 187 of file process.c.

◆ process_note_write()

static uint64_t process_note_write ( file_t file,
const void *  buffer,
uint64_t  count,
uint64_t offset 
)
static

Definition at line 207 of file process.c.

Here is the call graph for this function:

◆ process_wait_read()

static uint64_t process_wait_read ( file_t file,
void *  buffer,
uint64_t  count,
uint64_t offset 
)
static

Definition at line 243 of file process.c.

Here is the call graph for this function:

◆ process_wait_poll()

static wait_queue_t * process_wait_poll ( file_t file,
poll_events_t revents 
)
static

Definition at line 263 of file process.c.

◆ process_stat_read()

static uint64_t process_stat_read ( file_t file,
void *  buffer,
uint64_t  count,
uint64_t offset 
)
static

Definition at line 285 of file process.c.

Here is the call graph for this function:

◆ process_ctl_close()

static uint64_t process_ctl_close ( file_t file,
uint64_t  argc,
const char **  argv 
)
static

Definition at line 320 of file process.c.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ process_ctl_dup2()

static uint64_t process_ctl_dup2 ( file_t file,
uint64_t  argc,
const char **  argv 
)
static

Definition at line 373 of file process.c.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ process_ctl_start()

static uint64_t process_ctl_start ( file_t file,
uint64_t  argc,
const char **  argv 
)
static

Definition at line 409 of file process.c.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ process_ctl_kill()

static uint64_t process_ctl_kill ( file_t file,
uint64_t  argc,
const char **  argv 
)
static

Definition at line 431 of file process.c.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ CTL_STANDARD_OPS_DEFINE()

CTL_STANDARD_OPS_DEFINE ( ctlOps  ,
{ {"close", process_ctl_close, 2, 3}, {"dup2", process_ctl_dup2, 3, 3}, {"start", process_ctl_start, 1, 1}, {"kill", process_ctl_kill, 1, 1}, {0} }   
)

Definition at line 452 of file process.c.

Here is the call graph for this function:

◆ process_env_write()

static uint64_t process_env_write ( file_t file,
const void *  buffer,
uint64_t  count,
uint64_t offset 
)
static

Definition at line 472 of file process.c.

Here is the call graph for this function:

◆ process_env_create()

static uint64_t process_env_create ( inode_t dir,
dentry_t target,
mode_t  mode 
)
static

Definition at line 508 of file process.c.

Here is the call graph for this function:

◆ process_env_remove()

static uint64_t process_env_remove ( inode_t parent,
dentry_t target,
mode_t  mode 
)
static

Definition at line 541 of file process.c.

Here is the call graph for this function:

◆ process_env_cleanup()

static void process_env_cleanup ( inode_t inode)
static

Definition at line 562 of file process.c.

Here is the call graph for this function:

◆ process_cleanup()

static void process_cleanup ( inode_t inode)
static

Definition at line 572 of file process.c.

◆ process_free()

static void process_free ( process_t process)
static

Definition at line 582 of file process.c.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ process_dir_init()

static uint64_t process_dir_init ( process_t process)
static

Definition at line 615 of file process.c.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ process_reaper()

static void process_reaper ( void *  arg)
static

Definition at line 982 of file process.c.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ SYSCALL_DEFINE()

SYSCALL_DEFINE ( SYS_GETPID  ,
pid_t   
)

Definition at line 1040 of file process.c.

Here is the call graph for this function:

Variable Documentation

◆ kernelProcess

process_t* kernelProcess = NULL
static

Definition at line 31 of file process.c.

◆ prioOps

file_ops_t prioOps
static
Initial value:
= {
}
static uint64_t process_prio_write(file_t *file, const void *buffer, uint64_t count, uint64_t *offset)
Definition process.c:76
static uint64_t process_prio_read(file_t *file, void *buffer, uint64_t count, uint64_t *offset)
Definition process.c:61

Definition at line 112 of file process.c.

◆ cwdOps

file_ops_t cwdOps
static
Initial value:
= {
}
static uint64_t process_cwd_read(file_t *file, void *buffer, uint64_t count, uint64_t *offset)
Definition process.c:117
static uint64_t process_cwd_write(file_t *file, const void *buffer, uint64_t count, uint64_t *offset)
Definition process.c:138

Definition at line 182 of file process.c.

◆ cmdlineOps

file_ops_t cmdlineOps
static
Initial value:
= {
}
static uint64_t process_cmdline_read(file_t *file, void *buffer, uint64_t count, uint64_t *offset)
Definition process.c:187

Definition at line 203 of file process.c.

◆ noteOps

file_ops_t noteOps
static
Initial value:
= {
}
static uint64_t process_note_write(file_t *file, const void *buffer, uint64_t count, uint64_t *offset)
Definition process.c:207

Definition at line 239 of file process.c.

◆ waitOps

file_ops_t waitOps
static
Initial value:
= {
}
static wait_queue_t * process_wait_poll(file_t *file, poll_events_t *revents)
Definition process.c:263
static uint64_t process_wait_read(file_t *file, void *buffer, uint64_t count, uint64_t *offset)
Definition process.c:243

Definition at line 280 of file process.c.

◆ statOps

file_ops_t statOps
static
Initial value:
= {
}
static uint64_t process_stat_read(file_t *file, void *buffer, uint64_t count, uint64_t *offset)
Definition process.c:285

Definition at line 316 of file process.c.

◆ envFileOps

file_ops_t envFileOps
static
Initial value:
= {
.read = process_env_read,
}
uint64_t file_generic_seek(file_t *file, int64_t offset, seek_origin_t origin)
Helper function for basic seeking.
Definition file.c:92
static uint64_t process_env_write(file_t *file, const void *buffer, uint64_t count, uint64_t *offset)
Definition process.c:472

Definition at line 492 of file process.c.

◆ envInodeOps

inode_ops_t envInodeOps
static
Initial value:
= {
.create = process_env_create,
.remove = process_env_remove,
.cleanup = process_env_cleanup,
}
static uint64_t process_env_create(inode_t *dir, dentry_t *target, mode_t mode)
Definition process.c:508
static void process_env_cleanup(inode_t *inode)
Definition process.c:562
static uint64_t process_env_remove(inode_t *parent, dentry_t *target, mode_t mode)
Definition process.c:541

Definition at line 502 of file process.c.

◆ inodeOps

inode_ops_t inodeOps
static
Initial value:
= {
.cleanup = process_cleanup,
}
static void process_cleanup(inode_t *inode)
Definition process.c:572

Definition at line 578 of file process.c.