Initial Thread

Hopefully this won’t become YASCRIBE (yet another self conscious readerless initial blog entry), but so far it’s not looking that promising, is it?

After 16+ years at Sun I’m still having plenty of fun, so maybe Multiple Threads will allow me to spread some of the fun around? Of course, your idea of fun may differ significantly from mine. But here goes anyway …

Multithreading has been my thing for the past decade, and so much has been happening in this space! Here are some of the highlights:

  • Solaris 2.0 (1992) multithreaded kernel (for scalable SMP)
  • Solaris 2.2 (1993) libthread (for multithreaded applications, and based on an MxN model)
  • Solaris 2.5 (1995) libpthread (for applications written to the Pthread APIs)
  • Solaris 2.6 (1997) preemption control, scheduler activations, adaptive mutexes (for performance)
  • Solaris 7 (1998) libmtmalloc (for improved heap performance), 64-bit address space (for lots more threads!)
  • Solaris 8 (2000) alternate libthread implementation based on a 1-1 model (more scalable, improved semantics, simpler to maintain and extend)
  • Solaris 9 (2002) removed MxN implementation altogether, added Thread Local Storage support (allows C compilers to implement __thread directive efficiently)
  • Solaris 10 (2005) rolled libthread into libc (i.e. threads are now first class citizens), added various POSIX APIs (e.g. posix_spawn() and spin locks)

My technical whitepaper Multithreading in the Solaris Operating Environment reviews most of the above in much greater detail — up to and including Solaris 9 (being written for that release). I hope to use this blog to fill in many of the gaps concerning the exciting stuff we have done since then, not least what we did to make threads first class citizens in Solaris 10.

I hope to be back before too long to share more of this really interesting stuff — probably starting with how I made getenv(3C) lockless in Solaris 10. So watch this space!

Tag: ,

One thought on “Initial Thread

Leave a Reply

Your email address will not be published. Required fields are marked *