|
[ source navigation ] [ diff markup ] [ identifier search ] [ general search ] |
|||
|
001 /* Copyright (C) 2005 David Decotigny 002 003 This program is free software; you can redistribute it and/or 004 modify it under the terms of the GNU General Public License 005 as published by the Free Software Foundation; either version 2 006 of the License, or (at your option) any later version. 007 008 This program is distributed in the hope that it will be useful, 009 but WITHOUT ANY WARRANTY; without even the implied warranty of 010 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 011 GNU General Public License for more details. 012 013 You should have received a copy of the GNU General Public License 014 along with this program; if not, write to the Free Software 015 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, 016 USA. 017 */ 018 #ifndef _SOS_PROCESS_H_ 019 #define _SOS_PROCESS_H_ 020 021 /** 022 * @file process.h 023 * 024 * SOS Definition of a process and associated management API. A 025 * process is basically the collection of all the resources requested 026 * by a user program. The threads are one of these resources, the 027 * mm_context is one other example of such resources. In SOS, a 028 * "process" is mainly a resource manager, a container. It does not 029 * provide much advanced functionality apart from a reference counter. 030 * 031 * Only the user threads belong to a process. The kernel 032 * threads don't because the resources they hold are held by the whole 033 * kernel, thus by ALL the threads (kernel AND user): the notion of 034 * "process" doesn't have any meaning for them because they don't own 035 * any proper resource (apart from their stack). 036 */ 037 038 #include <sos/errno.h> 039 040 041 /** 042 * The definition of an SOS process is opaque. @see process.c 043 */ 044 struct sos_process; 045 046 #include <sos/thread.h> 047 048 049 /** 050 * Default size of a user stack (8 MB) 051 */ 052 #define SOS_DEFAULT_USER_STACK_SIZE (8 << 20) 053 054 055 /** 056 * Initialization of the process subsystem 057 */ 058 sos_ret_t sos_process_subsystem_setup(); 059 060 061 /** 062 * Initialize a new process and return a reference to it. This 063 * means that: 064 * - A new mm_context has been initialized 065 * - No threads belong to this process yet 066 * - If do_copy_current_process is FALSE: 067 * - Nothing is mapped in user space 068 * - No other resource is used 069 * - If do_copy_current_process is TRUE: 070 * - Same user mapping as in current thread's process 071 * - Same other resources used as for current thread's processs 072 * 073 * @return NULL on error (not enough memory) 074 */ 075 struct sos_process *sos_process_create(const char *name, 076 sos_bool_t do_copy_current_process); 077 078 079 /** 080 * Signal we're using another reference to a process. 081 */ 082 sos_ret_t sos_process_ref(struct sos_process *proc); 083 084 085 /** 086 * Release the reference to a process. If nobody holds a reference to 087 * it and if the process does not have any thread anymore, the process 088 * is destroyed. 089 * 090 * @return -SOS_EBUSY when the process is still referenced afterwards 091 */ 092 sos_ret_t sos_process_unref(struct sos_process *proc); 093 094 095 /** 096 * Return the number of threads currently registered in the process 097 */ 098 sos_count_t sos_process_get_nb_threads(const struct sos_process *proc); 099 100 101 /** 102 * Retrieve the address of the MMU configuration description 103 * 104 * @return NULL on error 105 */ 106 struct sos_mm_context * 107 sos_process_get_mm_context(const struct sos_process *proc); 108 109 110 /** 111 * Retrieve the address space for the process 112 * 113 * @return NULL on error 114 */ 115 struct sos_umem_vmm_as * 116 sos_process_get_address_space(const struct sos_process *proc); 117 118 119 /* *************************************************** 120 * Restricted functions 121 */ 122 123 124 /** 125 * Change the name of the process 126 */ 127 sos_ret_t sos_process_set_name(struct sos_process * proc, 128 const char * new_name); 129 130 131 /** 132 * Attach the given thread to the process 133 * 134 * @note This function is called internally by thread.c . The thread 135 * is assumed to be in the "CREATED" state, ie one cannot attach a 136 * thread to some other process once it has been created. 137 */ 138 sos_ret_t sos_process_register_thread(struct sos_process *in_proc, 139 struct sos_thread *thr); 140 141 142 /** 143 * Remove the given thread from the given process threads' list. When 144 * the process becomes empty (ie does not contain any thread anymore 145 * and is not referenced by anybody), all its resources are released. 146 * 147 * @note This function is called internally by thread.c . The thread 148 * is assumed to be in the "ZOMBIE" state. 149 */ 150 sos_ret_t sos_process_unregister_thread(struct sos_thread *thr); 151 152 153 /** 154 * Replace the address space of the process by another one 155 * 156 * @note The previous address space (if any) is deleted ! 157 */ 158 sos_ret_t sos_process_set_address_space(struct sos_process *proc, 159 struct sos_umem_vmm_as *new_as); 160 161 #endif /* _SOS_PROCESS_H_ */
[ source navigation ] | [ diff markup ] | [ identifier search ] | [ general search ] |