The Boston Diaries

The ongoing saga of a programmer who doesn't live in Boston, nor does he even like Boston, but yet named his weblog/journal “The Boston Diaries.”

Go figure.

Wednesday, May 23, 2001

They never learn …

According to SlashDot, there's a new OS called, appropriately enough, NewOS. Okay, I have an interest in these things, and, unlike some others, this one seems to actually be in a working state.

I download the code and peruse it.

Not five minutes and already I find a horrible bug:


void aquire_spinlock(int *lock)
{
    if(smp_num_cpus > 1) {
        while(1) {
            while(*lock != 0)
                ;
            if(test_and_set(lock, 1) == 0)
                break;
        }
    }
}

void release_spinlock(int *lock)
{
    *lock = 0;
}

newos/kernel/smp.c:48

It works if you have more than one CPU, but on your typical single-CPU system, this fails to do The Right Thing and you end up with very hard to track down bugs. Also, the code for test_and_set() is needlessly complicated:


test_and_set:
    movl     4(%esp),%edx     /* load address of variable into edx */

_test_and_set1:
    movl     8(%esp),%ecx    /* load the value to set the lock to */
    movl     (%edx),%eax      /* load the value of variable into eax */

    cmpl     $0, %eax         /* see if someone else got it */
    jnz      _test_and_set2   /* if so, bail out */

    lock
    cmpxchg  %ecx,(%edx)

    jnz      _test_and_set1   /* if zf = 0, cmpxchng failed so redo it */

_test_and_set2:
   ret

newos/kernel/arch/i386/arch_i386.S:61

Sigh. It's not hard or complicated.

Obligatory Picture

[The future's so bright, I gotta wear shades]

Obligatory Contact Info

Obligatory Feeds

Obligatory Links

Obligatory Miscellaneous

You have my permission to link freely to any entry here. Go ahead, I won't bite. I promise.

The dates are the permanent links to that day's entries (or entry, if there is only one entry). The titles are the permanent links to that entry only. The format for the links are simple: Start with the base link for this site: https://boston.conman.org/, then add the date you are interested in, say 2000/08/01, so that would make the final URL:

https://boston.conman.org/2000/08/01

You can also specify the entire month by leaving off the day portion. You can even select an arbitrary portion of time.

You may also note subtle shading of the links and that's intentional: the “closer” the link is (relative to the page) the “brighter” it appears. It's an experiment in using color shading to denote the distance a link is from here. If you don't notice it, don't worry; it's not all that important.

It is assumed that every brand name, slogan, corporate name, symbol, design element, et cetera mentioned in these pages is a protected and/or trademarked entity, the sole property of its owner(s), and acknowledgement of this status is implied.

Copyright © 1999-2024 by Sean Conner. All Rights Reserved.