4 ms·
I was looking at this the other day to learn OS stuff. Too bad, as it seems like a very nice design. Does anyone have any OS course / book recommendations? I'
by _huayra_ 6y ago
I was looking at this the other day to learn OS stuff. Too bad, as it seems like a very nice design.
Does anyone have any OS course / book recommendations?
I've worked my way through the excellent MIT course on xv6 [0], but I'm not sure what to work on next. Something related to Linux or one of the BSDs would be nice to see how things are done in the real world.
I cannot recommend this MIT course enough for those getting started. The projects are set up in a very nice way (i.e. if you can't complete one tricky assignment, you don't need it as a prereq for later ones) and the code is very simple. They've also gone to great lengths to set it up in a simple way (e.g. using cross-compilation for RISCV on qemu). It's also a great experience to really understand OS, as you'll make mistakes that will leave you scratching your head until you realize you messed up your page table and yeeted your kernel stack out of your address space.
[0] https://pdos.csail.mit.edu/6.828/2020/index.html https://pdos.csail.mit.edu/6.828/2020/index.html
- linguae 6y agoThere's a nice free OS textbook by Remzi and Andrea Arpaci-Dusseau named Three Easy Pieces (https://pages.cs.wisc.edu/~remzi/OSTEP/ https://pages.cs.wisc.edu/~remzi/OSTEP/), which was recently featured on this site (https://news.ycombinator.com/item?id=26051386 https://news.ycombinator.com/item?id=26051386). There are some exercises from the textbook that use xv6. Here are some other nice OS textbooks from a Unix standpoint that I've used over the years whenever I need to study some aspect of Unix in depth: - The Design of the UNIX Operating System by Maurice Bach (1986) - The Design and Implementation of the FreeBSD Operating System, 2nd Edition by McKusick, Neville-Neil, and Watson (2014) - UNIX Internals: The New Frontiers by Uresh Vahalia (1996) (note that this book covers the implementations of Unix variants that were contemporary in 1996)
- _huayra_ 6y agoWow thanks! These are awesome resources! Do these books (or perhaps courses around them) contain a graduated set of exercises for understanding? That's the thing that was so great about the MIT course, but it's been difficult to find that elsewhere. A similar course with a great pedagogical progression was CS631 at Stevens [0], which went over Advanced Programming in the Unix Environment with a bunch of videos and exercises. [0] https://stevens.netmeister.org/631/ https://stevens.netmeister.org/631/
- linguae 6y agoI just pulled these books off my shelf, and all three of them have exercises at the end of each chapter (though there is no answer guide, although some of the questions are actually research problems).
- JdeBP 6y ago* http://jdebp.uk./FGA/operating-system-books.html http://jdebp.uk./FGA/operating-system-books.html I must put in the review one day. (-:
- maverick74 6y agoGenode running on top of seL4 seems very promising!!! But there's still no minimal decent desktop (e.g.: lxqt)
- boricj 6y agoIt depends what you're looking for. If you don't know, read https://wiki.osdev.org/What_order_should_I_make_things_in https://wiki.osdev.org/What_order_should_I_make_things_in and find what sounds interesting to you. Then either start or join a project to do said stuff you find interesting. If you're looking for publications, most academical operating system projects have a bunch of papers (https://wiki.minix3.org/doku.php?id=publications https://wiki.minix3.org/doku.php?id=publications, http://www.helenos.org/wiki/Documentation http://www.helenos.org/wiki/Documentation). Personally I'm having fun hacking on SerenityOS. So far I've done a NE2000 network card driver, net booting, fixes to boot on an old Athlon XP computer, fixes to the ext2 filesystem, printing lines numbers in the JavaScript interpreter backtraces, some keyboard accessibility stuff (https://github.com/SerenityOS/serenity/commits?author=boricj https://github.com/SerenityOS/serenity/commits?author=boricj)... Basically any random thing that I find fun to work on.