Question

I wish to learn operating system design. I was wondering if I should tackle Minix or GNU/Linux in the process? I like books so I would be following mainly a book, though video resources (presumably videotaped lectures) would also be welcome.

I have formally studied C and C# and can program small to medium sized programs in them. I also have a very basic understanding of data structures.

If I take the Minix route, should I tackle version 2 (simpler??) or version 3?

Was it helpful?

Solution

I would go for the Minix route, just because of my personal experience with it. Minix is very straightforward, and written from an educational point of view. Linux kernel on the other hand has been around for so long, and is therefore optimized heavily. I do not think that it is a good start.

I wouldn't worry too much about which minix version. The concept remains the same. With the newer versions you are able to run X on it, which can be helpful, but at the same time adds more complexity. Just go with the version you find a good book of.

OTHER TIPS

Operating Systems: Design and Implementation covers Minix, so this might a good argument pro Minix.

Without having touched this topic myself, Linux is rather large (last time I checked 10 millions line+, though of course you would not have to study all of it), and Minix uses a microkernel architecture with separate modules, so it might be easier to grasp.

I would go for Minix.

(on the other hand, O'Reilly has a number of books on Linux; but I think I would still go with Minix, having that phat book as the reference)

At an internship I did, I had to change the hard drive driver in Minix so that it serves requests using the elevator algorithm instead of first-come-first-served. I was supposed to do it in Minix 2, but I wanted to do it in Minix 3 because I never like using old technologies.

In the 2 months I was working on it, the most frustrating thing was that Minix 3 took about 20 minutes to compile in VMWare on a laptop with an I5 processor, 4GB of RAM running Windows 7. Finally, after 2 months, I gave up on Minix 3 and switched to Minix 2, which compiled in about 20 s.

Now I'm not saying there couldn't have been something very wrong about how I was compiling the system, but I was trying really hard to speed it up with no success.

Let me just say that at the time I had just received my Master's degree in computer science and I had 5 years of intensive experience with programming in C (just so that you don't think I'm a self-taught programmer that just decided to jump in to programming by redesigning an operating system :D )

EDIT: In the end, I suggest you to try compiling Minix 3 to see how it goes for you. If you have more luck, definitely go with this one because it has more modern OS concepts, on the other hand, if you are a complete beginner, you'll probably learn tons from Minix 2. I did.

As other posters have said, starting with Linux can be difficult because it is now so large and complex that the barrier to entry has sky-rocketed. But, if you do choose this route, I recommend starting with one small subsystem and focusing on that.

There are other possibilities, FreeBSD or even GNU/Hurd (or even your own toy kernel). And it depends of what you really want to learn.

If you know Linux and what to learn how to write drivers, writing your own Linux driver kernel module is sensible.

It also depends upon your precise definition of Operating System. This is not necessarily the same as an OS kernel

Not all operating systems are "Unix-like", e.g. coyotos, Kangaroo, ... See also tunes.org

J.Pitrat's book Artificial Beings (the conscience of a conscious machine) have interesting insights on what an OS could be.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top