Slashdot Mirror


Building Your Own Operating System?

sonictooth asks: "I have dreams of writing a toy operating system, as I know some people have already done in college. Unfortunately, I don't have that opportunity. I was wondering what books (as there are so many) and methods people [have used], either in college or on their own. Amazon is littered with books from varying authors, Tanenbaum in particular, and there are both positive and negative reviews of his books. Does anyone recommend a simple book to walk you through the early stages, and then explain the more complex theories later on."

20 of 102 comments (clear)

  1. offtopic, but... by ru-486 · · Score: 3, Interesting

    Slashdot needs more items like this! Reminds me of the pre-SCO days...

  2. Amiga RKMs by Mr.+Darl+McBride · · Score: 5, Informative
    Get your hands on the Amiga ROM Kernel Manuals -- both "Libraries and Devices" and "Includes and Autodocs." I&A has the headers for most everything, and the libraries explain the workings pretty well. The Amiga OS was very simple and elegant. Understanding the base (ignore the GUI) will be enlightening.

    Now, these books don't make for a how-to, and you don't get the source for the core OS with them, but if you start by learning the exec interface, then look over the exec headers, you'll quickly develop a thorough understanding of a simple multitasking kernel. From there, you can glom onto the basic device library with the library book, then the headers again, and repeat for the trackdisk library. Jump into console and other libraries as your interest dictates. Don't worry about learning these things in a linear fashion -- going with your interest first is critical for learning something as complex and intricately interconnected as the workings of an OS.

    After seeing how some of these work together, if you've got your head on straight with C, implementing your own equivalent on the PC should be easy. Grab MS-DOS, which leaves protected mode entirely open to you, and build your own system on top of that. No need to start with your own bootstrapper if you can do it with a little DOS code. That way you have BIOS services for the parts you haven't written yet, and can replace bits a little at a time as your interest dictates. Make a simple OS shell first, using mostly wrappers, then drill down until it's time to start making your own device drivers.

    From here, I went on to acquire the IP rights behind UNIX and develop from there, but you can take your own route.

    ~Darl

  3. Here's a list for ya.. by QuantumG · · Score: 5, Informative
    • Learn asm
    • Get used to rebooting your machine or figure out how to get Bochs to compile with the debugger enabled
    • Write a bootloader (I know Grub rocks, but you need the experience)
    • Write a keyboard driver
    • Write a video driver
    • Write a scheduler
    • Write a shell
    • Write a filesystem driver
    • Write a network driver
    • Try to port gcc to your OS
    • Write yet another revolutionary GUI
    • Write everything else

    • Congratulations you've got yet another monolithic kernel based hobby OS that no-one is interested in but you.

      If you want something remotely interesting, try seperating as much of that junk in the kernel as you can into userland. Pentiums now have system calls that are 5 to 10 times faster than they used to be. Think about writing applications that communicate using shared memory pages. If one app writes a page and then instructs the kernel to map that page into another process, the kernel can do that rediculously fast. That's 4k (or more if you're using bigger pages) that has transfered from one process to another in the space of a single system call.

    --
    How we know is more important than what we know.
    1. Re:Here's a list for ya.. by edalytical · · Score: 3, Interesting
      Write a bootloader

      Why? What experience do you gain from this? I only ask because every other tutorial or FAQ, that I have come across, strongly advises you not to do this-- especially as the first step.

      --
      Win a signed Stephen Carpenter ESP Guitar from the Deftones: http://def-tag.com/?r=0008781
    2. Re:Here's a list for ya.. by Satan's+Librarian · · Score: 4, Interesting
      Actually, depending on what you are looking to get out of the experience and how determined you are, it's a *very* small piece of code that you can learn quite a bit about the PC by writing.

      If you're writing a toy OS to learn the upper level OS concepts, then you're probably better off writing your 'OS' as an app that runs on top of your favorite existing OS. But if you're doing it to learn more about low level programming and the hardware/firmware you're running on, the bootloader is at least a portion you can get done before loosing interest, and it teaches its own lessons.

      Also, if all you want is a baby utility OS/program, you can bootstrap the entire program into memory from a floppy (or bootable CD) bootsector, run it, and be done with it.

      Lessons learned:

      • Assembler language
      • BIOS interrupts
      • BIOS memory architecture
      • Disk structure and I/O
      • How a PC boots
      • How to get lilo back quickly and easily if you install XP onto a partition after linux.
      • Why you should backup your partition table and MBR sector before writing a buggy program to it.
  4. One good source by nerd65536 · · Score: 3, Informative

    One good source isn't a book at all: The source code for the Linux kernel. You could also take a look at FreeBSD and any other open source OS. Looking at something that works should give you an idea of what you need to do in your own OS.

    1. Re:One good source by Otter · · Score: 5, Informative
      None of this is really an answer to his question, which is for a text that walks you through the basic concepts -- but one of the annotated Linux kernel texts, similar to the classic Lion's Commentary on Unix is a lot closer to what he wants than telling him to read a tarball.

      But, again, he really just wants to know what the best college-level textbook is.

  5. Google is your friend. by linuxkrn · · Score: 3, Interesting

    I did this years ago. Had a quick boot floppy with a dumb OS that did almost nothing. But it was still cool "just for fun."

    As I suggested, google is your friend.

    Google gives you this first: http://mega-tokyo.com/osfaq2/.

    And this might be good for FS (Fat12) http://www.free2code.net/tutorials/other/20/os1.ph p

  6. A College Course You can follow along with by thedanc · · Score: 4, Informative

    I'm taking an Operating Systems course right now. You could follow along with it (or a similar course at any university.) Obviously you'll miss the lectures, but read along in the book and you'll get the same content. (BTW, the book for this class is by Silberschatz; ISBN 0471250600. I only gave Tanenbaum's OS book a quick look over, but so far I like the style of this book more than Tanenbaum's writing that I saw in his Computer Organization book.)

    The course starts you off with a very basic skeleton. From there, we'll add most of the parts of a basic OS in several individual programming projects. The class website is at http://www.cs.umd.edu/class/spring2004/cmsc412/ (won't work in IE) It has everything on it you should need to follow along.

  7. You can start by studying DOS by HotNeedleOfInquiry · · Score: 3, Informative
    It's still widely used in embedded systems and there's at least one version (freedos) that's open source. There's lots of FAT disk driver code around and acually getting something to work is not that hard.

    My favorite books are:
    DOS Technical Reference by IBM
    DOS Internals by Chappell
    Dissecting DOS by Podanoffsky (I believe he wrote a DOS as well)

    --
    "Eve of Destruction", it's not just for old hippies anymore...
  8. Highly Recommended by eviltypeguy · · Score: 4, Informative

    I would highly recommend the book:

    The Design and Implementation of the 4.4 BSD Operating System
    by Marshall Kirk McKusick
    Keith Bostic
    Micahel J. Karels
    and John S. Quarterman
    (ISBN 0201549794)

    It's really a great book about a mature operating system and will give you some great technical insights into the hows and whys behind operating systems in my opinion.

    Additionally, most *BSD distributions are a great study because their code tends to be very well organized and they come with *LOTS* of documentation.

    Even reading the FreeBSD developer's handbook here:

    http://www.freebsd.org/doc/en_US.ISO8859-1/books /d evelopers-handbook/

    or the KernelNewbies site here:

    http://www.kernelnewbies.org/

    May be of benefit to you.

    Additionally, I hope you have a high level of reading comprehension. Be prepared to take several trips to your local library or bookstore and spend hours perusing texts to better understand the ins and outs, and quirks of hardware.

    But lastly, even after you do all of the above, the best way to learn is to do! Install a copy of Boch's or if you're a little richer, buy VMWare or VirtualPC (VirtualPC's emulation tends to be better than VMWare's although a bit slower). Get brave and setup and old pc and install all kinds of different OS's on it. That's the best way in my opinion to learn...

  9. Getting started.... by Satan's+Librarian · · Score: 4, Informative
    If you want to learn from a simpler operating system than Linux, Dissecting DOS was an excellent book in its time.

    Assuming you want to go bottom-up in designing the system and you're using a PC, the first things you'll need are a decent grip on x86 assembler and PC architecture. Then, you need to learn the BIOS interrupts/services, since that's about all that'll be available to you.

    I'd think one of the first things you might want to write is a bootstrap routine.The Undocumented PC had a pretty good description of bootstrapping as I recall. Basically, the bootsector of the boot device (first sector on a floppy, the MBR/partition table on hard disk, etc.) gets loaded to 0:7c00 in real mode and gets executed - what you do from there is up to you. Some *really* old video games for PC's came as boot disks and did just that - in a sense, they provided their own simple operating systems.

    After that, you'll get into the more fun stuff - filesystems, memory management, task switching, compilers, linkers and loaders, device drivers, etc. That's where you'll want to be reading your Tanenbaum book, a stack of others, and probably peeking at Linux and other open source operating systems to see how it's really done.

    Good luck!

  10. Richard Burgess's "Developing Your Own 32-Bit OS" by mosel-saar-ruwer · · Score: 5, Informative

    Richard Burgess's "Developing Your Own 32-Bit Operating System":
    http://www.amazon.com/exec/obidos/ASIN/0672306557/

    http://www.accu.org/bookreviews/public/reviews/d/d 000481.htm

    http://www.sensorypublishing.com/mmurtl.html

    Used to be published by SAMS, but they no longer list it. Now available as an online download.

  11. Don't do it for Intel by Dimwit · · Score: 4, Insightful

    Don't really do it for any modern architecture. Visit 6502.org and look at the sample operating systems they have there.

    Why? Because on your first (and second, and third, and forth...) you're not going to want to learn all about the inner workings of the Intel architecture. Segmented memory. *shudder*

    The 6502 is still small enough that you can wrap your head around it easily. 6502 emulators are plentiful. An operating system for a 6502-based machine would be small and simple, but still a useful tool.

    Once you get your head around that, then try the 6510 - same instruction set, but up to 16MB of memory.

    Finally, when you feel good with all that, try Intel, or Sparc, or PPC. My personal favorite processor to code for (assembly-language speaking) is Motorola's 68k.

    --
    ...but it's being eaten...by some...Linux or something...
    1. Re:Don't do it for Intel by squiggleslash · · Score: 3, Insightful
      Erm. You don't want the guy to learn about segmented memory so you recommend the 6502?!

      I would suggest the Z80, or if he wants to get exotic, the 6809. The 6502 is a horrible chip when it comes to memory - divides the entire map into 256 byte "pages". *shudder*

      There are plenty of older Z80 based machines, and it has proper, consistant, 16 bit addressing throughout. A much more pleasurable experience.

      --
      You are not alone. This is not normal. None of this is normal.
    2. Re:Don't do it for Intel by chthon · · Score: 3, Interesting

      There are also plenty of nice Z80 emulators. That way you don't need to reboot a machine every time and you have easier code stepping capabilities.

  12. Sigops by edalytical · · Score: 4, Informative

    Sigops How to Write an Operating System. This is a series that will walk you trough writing your own os. You'll have your own Hello World OS after you read the first chapter and you'll be multitasking by chapter five.

    --
    Win a signed Stephen Carpenter ESP Guitar from the Deftones: http://def-tag.com/?r=0008781
  13. omg by Anonymous Coward · · Score: 5, Funny

    I have dreams of writing a toy operating system...

    Linus, is that you?

    So that Ask Slashdot you posted some time ago finally made it through the submission queue?

  14. Do something new! by Walles · · Score: 4, Insightful
    Write it in an interpreted language. Have the interpreter run itself. I'm dead serious.

    The benefits would be that porting the OS and all programs running on it to a new platform would consist of porting the virtual machine only.

    Also, all code would be bounds-checked and stack-overflow protected, so a lot of today's security holes wouldn't be possible to create. With garbage collection, memory leaks would be a minor problem as well.

    To get a lot for free, you could base it on IBM's JRVM, a virtual machine for Java, written in Java.

    The drawback of not allowing C code to run natively is that there's a lot of software out there that'll be hard to support. This may be solvable, but I haven't given any thought to it so I don't know.

    --
    Installed the Bubblemon yet?
  15. First step by Permission+Denied · · Score: 3, Informative
    People here are recommending all sorts of books and websites specifically catered to this project. When I did it, I knew of no such resources.

    Anyway, I'd recommend doing a google search for 386intel.txt. This is Intel's documentation for the 386 chip, including systems programming stuff. This is the file Linus used. The modern version of this documentation is available here for the Pentium III, split up in three. You'll need all three, but the third in the series is most relevant.

    After you get booting, you'll need some documentation for various devices when writing drivers. I used "The Indespensible PC Hardware Book" by Messner and it was pretty good. I guess there are also good websites available and you can always look at how Linux or *BSD does it.

    Anyway, you might be able to skip the Intel documentation if you use someone else's bootloader, but I don't recommend this. One of the points of this project should be to understand the machine inside and out from boot, so write your own bootloader and object code loader. Once it can run your C code, you'll get a feeling of satisfaction, which should be another of this project's goals.

    I used an older version of VMWare for testing, but I highly recommend bochs nowadays. Bochs seems designed exactly for this stuff, so you can run a debugger right away and you don't need to go through the older debugging route which was to write a serial port driver as soon as possible and get a remote debugger working over that (easiest way to do remote debugging in VMWare and real hardware).

    I'd recommend nasm for the assembler bits. It can do 16-bit code for the bootloader and it can spit out unadorned object code so you don't have to bother with parsing ELF and extracting what you need (although you'll need to do this eventually when you get to C, but you can at least delay that until after you start booting).

    One last thing - ignore the naysayers. It seems lots of people thought it important to post that you shouldn't be doing this but should instead be contributing some drivers to another project or something like that. Whenever someone in the open source community says this, they're almost always non-developers. Most of us write code on our own time because we find it satisfying and this is one of the most satisfying projects you can undertake. This project is also a kind of "coming-of-age" experience (for lack of a better word), like writing your own compiler or creating a GUI API or window manager. Users won't understand. That's OK. We understand.