|
@@ -52,6 +52,8 @@
|
|
|
#include <kern/fcntl.h>
|
|
|
#include <list.h>
|
|
|
#include <limits.h>
|
|
|
+#include <kern/errno.h>
|
|
|
+
|
|
|
typedef struct list list;
|
|
|
typedef struct procs procs;
|
|
|
|
|
@@ -59,7 +61,7 @@ typedef struct procs procs;
|
|
|
struct proc * kproc;
|
|
|
|
|
|
// The process array
|
|
|
-procs * procs;
|
|
|
+procs * processes;
|
|
|
|
|
|
// The lock for the above array
|
|
|
struct lock * proclock;
|
|
@@ -127,32 +129,32 @@ static struct proc * proc_create(const char * name)
|
|
|
return proc;
|
|
|
}
|
|
|
|
|
|
-static procs * create_procs(void)
|
|
|
+/*static procs * create_procs(void)
|
|
|
{
|
|
|
procs * temp = kmalloc(sizeof procs);
|
|
|
if (!(temp)) panic("Could not create process list!\n");
|
|
|
temp->lastpid = PID_MIN - 1;
|
|
|
return temp;
|
|
|
-}
|
|
|
+}*/
|
|
|
|
|
|
-proc * getChild(struct proc * p, int pid)
|
|
|
+struct proc * getChild(struct proc * p, int pid)
|
|
|
{
|
|
|
int result = listearch(p->kids, pid);
|
|
|
|
|
|
if (!(result)) return NULL;
|
|
|
- return procs->pids[pid];
|
|
|
+ return processes->pids[pid];
|
|
|
}
|
|
|
|
|
|
int assignpid(struct proc * proc)
|
|
|
{
|
|
|
lock_acquire(proclock);
|
|
|
|
|
|
- for (int i = procs->lastpid + 1; i <= PID_MAX; i++)
|
|
|
+ for (int i = processes->lastpid + 1; i <= PID_MAX; i++)
|
|
|
{
|
|
|
- if (procs->pids[i] == 0)
|
|
|
+ if (processes->pids[i] == 0)
|
|
|
{
|
|
|
proc->pid = i;
|
|
|
- procs->lastpid = i;
|
|
|
+ processes->lastpid = i;
|
|
|
lock_release(proclock);
|
|
|
return i;
|
|
|
}
|
|
@@ -163,19 +165,22 @@ int assignpid(struct proc * proc)
|
|
|
continue;
|
|
|
}
|
|
|
|
|
|
- if (i == procs->lastpid)
|
|
|
+ if (i == processes->lastpid)
|
|
|
{
|
|
|
lock_release(proclock);
|
|
|
return ENPROC;
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+ return ENPROC;
|
|
|
}
|
|
|
|
|
|
-void delete_procs(procs * procs)
|
|
|
+/*
|
|
|
+static void delete_procs()
|
|
|
{
|
|
|
- kfree(procs->pids);
|
|
|
+ kfree(processes->pids);
|
|
|
lock_destroy(proclock);
|
|
|
-}
|
|
|
+}*/
|
|
|
|
|
|
/*
|
|
|
* Destroy a proc structure.
|
|
@@ -240,7 +245,7 @@ void proc_destroy(struct proc * proc)
|
|
|
spinlock_cleanup(&proc->p_lock);
|
|
|
|
|
|
lock_acquire(proclock);
|
|
|
- procs->pids[proc->pid] = 0; // update available PIDs
|
|
|
+ processes->pids[proc->pid] = 0; // update available PIDs
|
|
|
lock_release(proclock);
|
|
|
kfree(proc->p_name);
|
|
|
kfree(proc);
|
|
@@ -288,6 +293,12 @@ void proc_bootstrap(void)
|
|
|
panic("could not create no_proc_sem semaphore\n");
|
|
|
}
|
|
|
#endif // UW
|
|
|
+
|
|
|
+ int processesLen = PID_MAX - PID_MIN + 1;
|
|
|
+ for (int i = 0; i < processesLen; i++)
|
|
|
+ {
|
|
|
+ processes->pids[i] = 0;
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
/*
|
|
@@ -352,7 +363,7 @@ struct proc * proc_create_runprogram(const char * name)
|
|
|
are created using a call to proc_create_runprogram */
|
|
|
P(proc_count_mutex);
|
|
|
proc_count++;
|
|
|
- assignpid(struct proc * proc);
|
|
|
+ assignpid(proc);
|
|
|
V(proc_count_mutex);
|
|
|
#endif // UW
|
|
|
|