2 meinOS - A unix-like x86 microkernel operating system
3 Copyright (C) 2008 Janosch Gräf <janosch.graef@gmx.net>
5 This program is free software: you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published by
7 the Free Software Foundation, either version 3 of the License, or
8 (at your option) any later version.
10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details.
15 You should have received a copy of the GNU General Public License
16 along with this program. If not, see <http://www.gnu.org/licenses/>.
23 typedef struct proc_S proc_t
;
25 #include <sys/types.h>
33 #define NICE2TICKS(nice) 1 /*(50-((nice)+20))*/
35 struct proc_registers
{
55 /// @todo do check for system instead for root-uid/gid
56 /// @todo move uid/gid to var
80 struct proc_registers registers
;
83 addrspace_t
*addrspace
;
94 /// Whether process sleeps
100 /// If process is defunc
109 /// Is VM8086 process
120 /// VM8086 segment registers
121 struct vm86_segmentregs vm86_segregs
;
125 llist_t proc_running
;
126 llist_t proc_sleeping
;
128 proc_t
*proc_current
;
131 proc_t
*proc_create(char *name
,uid_t uid
,gid_t gid
,proc_t
*parent
,int system
,int running
);
132 int proc_destroy(proc_t
*proc
);
133 proc_t
*proc_find(pid_t pid
);
134 int proc_sleep(proc_t
*proc
);
135 int proc_wake(proc_t
*proc
);
138 pid_t
proc_getparent(pid_t pid
);
139 pid_t
proc_getchild(pid_t pid
,size_t i
);
140 uid_t
proc_getuid(int idmask
);
141 void proc_setuid(int idmask
,uid_t uid
);
142 gid_t
proc_getgid(int idmask
);
143 void proc_setgid(int idmask
,gid_t gid
);
144 ssize_t
proc_getname(pid_t pid
,char *buf
,size_t maxlen
);
145 int proc_setname(pid_t pid
,const char *name
);
146 pid_t
proc_getpidbyname(const char *name
);
147 int proc_getvar(pid_t pid
);
148 void proc_setvar(pid_t pid
,int var
);
149 pid_t
proc_waitpid(pid_t pid
,int *stat_loc
,int options
);
150 void proc_exit(int ret
);
152 void proc_continue();
154 void proc_call(proc_t
*proc
,void *func
,size_t numparams
,...);
155 void proc_push(proc_t
*proc
,int val
);
156 int proc_pop(proc_t
*proc
);
158 pid_t
proc_create_syscall(char *name
,uid_t uid
,gid_t gid
,pid_t parent_pid
);
159 int proc_destroy_syscall(pid_t proc_pid
);
160 void *proc_memmap(pid_t proc_pid
,void *virt
,void *phys
,int writable
,int swappable
,int cow
);
161 int proc_memunmap(pid_t proc_pid
,void *virt
);
162 int proc_memfree(pid_t proc_pid
,void *virt
);
163 void *proc_memget(pid_t proc_pid
,void *virt
,int *exists
,int *writable
,int *swappable
,int *cow
);
164 size_t proc_mempagelist(pid_t proc_pid
,void **list
,size_t n
);
165 int proc_memalloc(pid_t proc_pid
,void *virt
,int writable
,int swappable
);
166 int proc_system(pid_t proc_pid
,int system
);
167 int proc_jump(pid_t proc_pid
,void *dest
);
168 int *proc_createstack(pid_t proc_pid
);
169 int *proc_getstack(pid_t proc_pid
);
170 int proc_setstack(pid_t proc_pid
,int *stack
);