diff options
| -rw-r--r-- | bootasm.S | 2 | ||||
| -rw-r--r-- | buf.h | 4 | ||||
| -rw-r--r-- | fs.c | 2 | ||||
| -rw-r--r-- | init.c | 4 | ||||
| -rw-r--r-- | kalloc.c | 2 | ||||
| -rw-r--r-- | main.c | 4 | ||||
| -rw-r--r-- | spinlock.c | 13 | 
7 files changed, 15 insertions, 16 deletions
@@ -5,7 +5,7 @@  .set CR0_PE_ON,0x1              # protected mode enable flag  ######################################################################### -# ENTRY POINT +# ENTRY POINT for the bootstrap processor  #   This code should be stored in the first sector of the hard disk.  #   After the BIOS initializes the hardware on startup or system reset,  #   it loads this code at physical address 0x7c00 - 0x7d00 (512 bytes). @@ -6,5 +6,5 @@ struct buf {    struct buf *next;    uchar data[512];  }; -#define B_BUSY 0x1 -#define B_VALID 0x2 +#define B_BUSY 0x1  // buffer is locked by some process +#define B_VALID 0x2 // buffer contains the data of the sector @@ -160,7 +160,7 @@ iget(uint dev, uint inum)    return nip;  } -// Copy ip->d, which has changed, to disk. +// Copy inode in memory, which has changed, to disk.  // Caller must have locked ip.  void  iupdate(struct inode *ip) @@ -17,8 +17,8 @@ main(void)      mknod("console", T_DEV, 1, 1);      open("console", O_RDWR);    } -  dup(0); -  dup(0); +  dup(0);  // stdout +  dup(0);  // stderr    for(;;){      pid = fork(); @@ -35,7 +35,7 @@ kinit(void)    initlock(&kalloc_lock, "kalloc");    start = (char*) &end;    start = (char*) (((uint)start + PAGE) & ~(PAGE-1)); -  mem = 256; // assume 256 pages of RAM +  mem = 256; // assume computer has 256 pages of RAM    cprintf("mem = %d\n", mem * PAGE);    kfree(start, mem * PAGE);  } @@ -15,7 +15,7 @@ extern uchar _binary__init_start[], _binary__init_size[];  void process0(); -// CPU 0 starts running C code here. +// Bootstrap processor starts running C code here.  // This is called main0 not main so that it can have  // a void return type.  Gcc can't handle functions named  // main that don't return int.  Really. @@ -28,7 +28,7 @@ main0(void)    // clear BSS    memset(edata, 0, end - edata); -  // switch to cpu0's cpu stack +  // switch to bootstrap processor's stack    asm volatile("movl %0, %%esp" : : "r" (cpus[0].mpstack + MPSTACK - 32));    asm volatile("movl %0, %%ebp" : : "r" (cpus[0].mpstack + MPSTACK)); @@ -51,10 +51,9 @@ acquire(struct spinlock *lock)    while(cmpxchg(0, 1, &lock->locked) == 1)      ; -  // Now that lock is acquired, make sure  -  // we wait for all pending writes from other -  // processors. -  cpuid(0, 0, 0, 0, 0);  // memory barrier +  // Serialize instructions: now that lock is acquired, make sure  +  // we wait for all pending writes from other processors. +  cpuid(0, 0, 0, 0, 0);  // memory barrier (see Ch 7 of IA-32 manual, vol 3)    // Record info about lock acquisition for debugging.    // The +10 is only so that we can tell the difference @@ -74,9 +73,9 @@ release(struct spinlock *lock)    lock->pcs[0] = 0;    lock->cpu = 0xffffffff; -  // Before unlocking the lock, make sure to flush -  // any pending memory writes from this processor. -  cpuid(0, 0, 0, 0, 0);  // memory barrier +  // Serialize instructions: before unlocking the lock, make sure +  // to flush any pending memory writes from this processor. +  cpuid(0, 0, 0, 0, 0);  // memory barrier (see Ch 7 of IA-32 manual, vol 3)    lock->locked = 0;    if(--cpus[cpu()].nlock == 0)  | 
