SimpleOS

LXR

Navigation



Site hébergé par : enix

The LXR Cross Referencer for SOS

source navigation ]
diff markup ]
identifier search ]
general search ]
 
 
Article:1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 6.5 ] [ 7 ] [ 7.5 ] [ 8 ] [ 9 ] [ 9.5 ]

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 ]