proc.c File Reference

Simple cooperative multitasking scheduler. More...

#include "proc_p.h"
#include "proc.h"
#include "cfg/cfg_proc.h"
#include <cfg/log.h>
#include "cfg/cfg_monitor.h"
#include <cfg/macros.h>
#include <cfg/module.h>
#include <cfg/depend.h>
#include <cpu/irq.h>
#include <cpu/types.h>
#include <cpu/attr.h>
#include <cpu/frame.h>
#include <string.h>

Go to the source code of this file.

Functions

void proc_init (void)
 Initialize the process subsystem (kernel).
struct Process * proc_new_with_name (UNUSED_ARG(const char *, name), void(*entry)(void), iptr_t data, size_t stack_size, cpu_stack_t *stack_base)
 Create a new process, starting at the provided entry point.
const char * proc_name (struct Process *proc)
 Return the name of the specified process.
const char * proc_currentName (void)
 Return the name of the currently running process.
void proc_rename (struct Process *proc, const char *name)
 Rename a process.
void proc_setPri (struct Process *proc, int pri)
 Change the scheduling priority of a process.
void proc_entry (void)
 Entry point for all the processes.
void proc_exit (void)
 Terminate the current process.
void proc_schedule (void)
 Call the scheduler and eventually replace the current running process.

Variables

REGISTER List proc_ready_list
 Track ready processes.
REGISTER Process * current_process
 Track running processes.
static struct Process main_process
 The main process (the one that executes main()).

Detailed Description

Simple cooperative multitasking scheduler.

Author:
Bernie Innocenti <bernie@codewiz.org>
Stefano Fedrigo <aleph@develer.com>

Definition in file proc.c.


Function Documentation

void proc_exit ( void   ) 

Terminate the current process.

Terminate the execution of the current process.

Definition at line 398 of file proc.c.

void proc_init ( void   ) 

Initialize the process subsystem (kernel).

It must be called before using any process related function.

Definition at line 122 of file proc.c.

const char* proc_name ( struct Process *  proc  ) 

Return the name of the specified process.

NULL is a legal argument and will return the name "<NULL>".

Definition at line 313 of file proc.c.

struct Process* proc_new_with_name ( UNUSED_ARG(const char *, name)  ,
void(*)(void)  entry,
iptr_t  data,
size_t  stack_size,
cpu_stack_t *  stack_base 
) [read]

Create a new process, starting at the provided entry point.

Note:
The function
 proc_new(entry, data, stacksize, stack)
is a more convenient way to create a process, as you don't have to specify the name.
Returns:
Process structure of new created process if successful, NULL otherwise.

Definition at line 205 of file proc.c.

void proc_setPri ( struct Process *  proc,
int  pri 
)

Change the scheduling priority of a process.

Process piorities are signed ints, whereas a larger integer value means higher scheduling priority. The default priority for new processes is 0. The idle process runs with the lowest possible priority: INT_MIN.

A process with a higher priority always preempts lower priority processes. Processes of equal priority share the CPU time according to a simple round-robin policy.

As a general rule to maximize responsiveness, compute-bound processes should be assigned negative priorities and tight, interactive processes should be assigned positive priorities.

To avoid interfering with system background activities such as input processing, application processes should remain within the range -10 and +10.

Definition at line 360 of file proc.c.


Variable Documentation

REGISTER Process* current_process

Track running processes.

Definition at line 78 of file proc.c.

struct Process main_process [static]

The main process (the one that executes main()).

Definition at line 81 of file proc.c.

Track ready processes.

Access to this list must be performed with interrupts disabled

Definition at line 71 of file proc.c.