PatchworkOS
Loading...
Searching...
No Matches
process.c File Reference
#include <kernel/proc/process.h>
#include <kernel/cpu/cpu.h>
#include <kernel/cpu/smp.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/thread.h>
#include <kernel/sched/timer.h>
#include <kernel/sched/wait.h>
#include <kernel/sync/lock.h>
#include <kernel/sync/rwlock.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>

Go to the source code of this file.

Functions

static _Atomic (pid_t)
 
static process_tprocess_file_get_process (file_t *file)
 
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_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 void process_inode_cleanup (inode_t *inode)
 
static uint64_t process_dir_init (process_t *process, const char *name)
 
static void process_free (process_t *process)
 
static uint64_t process_init (process_t *process, process_t *parent, const char **argv, const path_t *cwd, priority_t priority)
 
process_tprocess_new (process_t *parent, const char **argv, const path_t *cwd, priority_t priority)
 Allocates and initializes a new process.
 
void process_kill (process_t *process, uint64_t status)
 Kills a process.
 
bool process_is_child (process_t *process, pid_t parentId)
 Checks if a process is a child of another process.
 
void process_procfs_init (void)
 Initializes the /proc directory.
 
process_tprocess_get_kernel (void)
 Gets the kernel process.
 
 SYSCALL_DEFINE (SYS_GETPID, pid_t)
 

Variables

static process_t kernelProcess
 
static bool kernelProcessInitalized = false
 
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 inode_ops_t inodeOps
 

Function Documentation

◆ _Atomic()

static _Atomic ( pid_t  )
staticnew

Definition at line 31 of file process.c.

◆ process_cmdline_read()

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

◆ process_cwd_read()

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

◆ process_dir_init()

◆ process_file_get_process()

◆ process_free()

◆ process_init()

◆ process_inode_cleanup()

static void process_inode_cleanup ( inode_t inode)
static

Definition at line 271 of file process.c.

References DEREF, and inode_t::private.

◆ process_note_write()

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

◆ process_prio_read()

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

Definition at line 91 of file process.c.

References atomic_load, buffer, BUFFER_READ, count, ERR, file, MAX_NAME, NULL, process_file_get_process(), and snprintf().

◆ process_prio_write()

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

◆ process_wait_poll()

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

◆ process_wait_read()

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

◆ SYSCALL_DEFINE()

SYSCALL_DEFINE ( SYS_GETPID  ,
pid_t   
)

Definition at line 609 of file process.c.

References process_t::id, and sched_process().

Variable Documentation

◆ 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:176

Definition at line 189 of file process.c.

Referenced by process_dir_init().

◆ 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:147

Definition at line 172 of file process.c.

Referenced by process_dir_init().

◆ inodeOps

inode_ops_t inodeOps
static
Initial value:
= {
}
static void process_inode_cleanup(inode_t *inode)
Definition process.c:271

Definition at line 277 of file process.c.

Referenced by process_dir_init().

◆ kernelProcess

◆ kernelProcessInitalized

bool kernelProcessInitalized = false
static

Definition at line 29 of file process.c.

Referenced by process_get_kernel(), and process_procfs_init().

◆ 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:193

Definition at line 225 of file process.c.

Referenced by process_dir_init().

◆ 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:106
static uint64_t process_prio_read(file_t *file, void *buffer, uint64_t count, uint64_t *offset)
Definition process.c:91

Definition at line 142 of file process.c.

Referenced by process_dir_init().

◆ 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:249
static uint64_t process_wait_read(file_t *file, void *buffer, uint64_t count, uint64_t *offset)
Definition process.c:229

Definition at line 266 of file process.c.

Referenced by process_dir_init().