eliminate ptable. ptable.lock -> pid_lock.
This commit is contained in:
parent
4ce3a5fa21
commit
db72f3108f
|
@ -6,16 +6,15 @@
|
||||||
#include "proc.h"
|
#include "proc.h"
|
||||||
#include "defs.h"
|
#include "defs.h"
|
||||||
|
|
||||||
struct {
|
|
||||||
struct spinlock lock;
|
|
||||||
struct proc proc[NPROC];
|
struct proc proc[NPROC];
|
||||||
} ptable;
|
|
||||||
|
|
||||||
struct cpu cpus[NCPU];
|
struct cpu cpus[NCPU];
|
||||||
|
|
||||||
struct proc *initproc;
|
struct proc *initproc;
|
||||||
|
|
||||||
|
struct spinlock pid_lock;
|
||||||
int nextpid = 1;
|
int nextpid = 1;
|
||||||
|
|
||||||
extern void forkret(void);
|
extern void forkret(void);
|
||||||
|
|
||||||
// for returning out of the kernel
|
// for returning out of the kernel
|
||||||
|
@ -30,8 +29,8 @@ procinit(void)
|
||||||
{
|
{
|
||||||
struct proc *p;
|
struct proc *p;
|
||||||
|
|
||||||
initlock(&ptable.lock, "ptable");
|
initlock(&pid_lock, "nextpid");
|
||||||
for(p = ptable.proc; p < &ptable.proc[NPROC]; p++)
|
for(p = proc; p < &proc[NPROC]; p++)
|
||||||
initlock(&p->lock, "proc");
|
initlock(&p->lock, "proc");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -68,9 +67,9 @@ int
|
||||||
allocpid() {
|
allocpid() {
|
||||||
int pid;
|
int pid;
|
||||||
|
|
||||||
acquire(&ptable.lock);
|
acquire(&pid_lock);
|
||||||
pid = nextpid++;
|
pid = nextpid++;
|
||||||
release(&ptable.lock);
|
release(&pid_lock);
|
||||||
return pid;
|
return pid;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -85,7 +84,7 @@ allocproc(void)
|
||||||
{
|
{
|
||||||
struct proc *p;
|
struct proc *p;
|
||||||
|
|
||||||
for(p = ptable.proc; p < &ptable.proc[NPROC]; p++) {
|
for(p = proc; p < &proc[NPROC]; p++) {
|
||||||
acquire(&p->lock);
|
acquire(&p->lock);
|
||||||
if(p->state == UNUSED) {
|
if(p->state == UNUSED) {
|
||||||
goto found;
|
goto found;
|
||||||
|
@ -297,7 +296,7 @@ reparent(struct proc *p, struct proc *parent) {
|
||||||
struct proc *pp;
|
struct proc *pp;
|
||||||
int child_of_init = (p->parent == initproc);
|
int child_of_init = (p->parent == initproc);
|
||||||
|
|
||||||
for(pp = ptable.proc; pp < &ptable.proc[NPROC]; pp++){
|
for(pp = proc; pp < &proc[NPROC]; pp++){
|
||||||
if (pp != p && pp != parent) {
|
if (pp != p && pp != parent) {
|
||||||
acquire(&pp->lock);
|
acquire(&pp->lock);
|
||||||
if(pp->parent == p){
|
if(pp->parent == p){
|
||||||
|
@ -375,7 +374,7 @@ wait(void)
|
||||||
for(;;){
|
for(;;){
|
||||||
// Scan through table looking for exited children.
|
// Scan through table looking for exited children.
|
||||||
havekids = 0;
|
havekids = 0;
|
||||||
for(np = ptable.proc; np < &ptable.proc[NPROC]; np++){
|
for(np = proc; np < &proc[NPROC]; np++){
|
||||||
if(np->parent != p)
|
if(np->parent != p)
|
||||||
continue;
|
continue;
|
||||||
acquire(&np->lock);
|
acquire(&np->lock);
|
||||||
|
@ -421,7 +420,7 @@ scheduler(void)
|
||||||
// Enable interrupts on this processor.
|
// Enable interrupts on this processor.
|
||||||
intr_on();
|
intr_on();
|
||||||
|
|
||||||
for(p = ptable.proc; p < &ptable.proc[NPROC]; p++) {
|
for(p = proc; p < &proc[NPROC]; p++) {
|
||||||
acquire(&p->lock);
|
acquire(&p->lock);
|
||||||
if(p->state == RUNNABLE) {
|
if(p->state == RUNNABLE) {
|
||||||
// Switch to chosen process. It is the process's job
|
// Switch to chosen process. It is the process's job
|
||||||
|
@ -557,7 +556,7 @@ wakeup(void *chan)
|
||||||
{
|
{
|
||||||
struct proc *p;
|
struct proc *p;
|
||||||
|
|
||||||
for(p = ptable.proc; p < &ptable.proc[NPROC]; p++) {
|
for(p = proc; p < &proc[NPROC]; p++) {
|
||||||
acquire(&p->lock);
|
acquire(&p->lock);
|
||||||
if(p->state == SLEEPING && p->chan == chan) {
|
if(p->state == SLEEPING && p->chan == chan) {
|
||||||
p->state = RUNNABLE;
|
p->state = RUNNABLE;
|
||||||
|
@ -574,7 +573,7 @@ kill(int pid)
|
||||||
{
|
{
|
||||||
struct proc *p;
|
struct proc *p;
|
||||||
|
|
||||||
for(p = ptable.proc; p < &ptable.proc[NPROC]; p++){
|
for(p = proc; p < &proc[NPROC]; p++){
|
||||||
if(p->pid == pid){
|
if(p->pid == pid){
|
||||||
acquire(&p->lock);
|
acquire(&p->lock);
|
||||||
if(p->pid != pid)
|
if(p->pid != pid)
|
||||||
|
@ -637,7 +636,7 @@ procdump(void)
|
||||||
struct proc *p;
|
struct proc *p;
|
||||||
char *state;
|
char *state;
|
||||||
|
|
||||||
for(p = ptable.proc; p < &ptable.proc[NPROC]; p++){
|
for(p = proc; p < &proc[NPROC]; p++){
|
||||||
if(p->state == UNUSED)
|
if(p->state == UNUSED)
|
||||||
continue;
|
continue;
|
||||||
if(p->state >= 0 && p->state < NELEM(states) && states[p->state])
|
if(p->state >= 0 && p->state < NELEM(states) && states[p->state])
|
||||||
|
|
Loading…
Reference in a new issue