OSTEP by Remzi and Andrea Arpaci-Dusseau is a great read for anybody interested in operating systems (https://pages.cs.wisc.edu/~remzi/OSTEP/). The projects in their class at the University of Wisconsin-Madison were mainly making edits to the xv6 OS.
I came across this course after going through the 6.824 from RTM last year and enjoying the hands on approach a lot! Teaching using the xv6 OS (https://pdos.csail.mit.edu/6.828/2012/xv6.html) is super valuable. I do not consider myself an expert in operating systems or C, but digging through the xv6 source code is quite fun, the code is easily readable and very newby friendly.
My OS class at the University of Wisconsin used xv6. I love and hate that little operating system. My professor had actually taken the time to logically split all the source files into folders for their given purpose. When I found the original source and the flat structure, I died a little inside. There was no way I would be able to recreate a folder structure that would also successfully build with make. I tried and gave up in short order.
I rebuilt it into a folder structure when I was younger trying to teach myself operating systems. It wasn’t that difficult if you’re familiar with make.
Yes it's very readable and easy to understand. I had made a huge design mistake in my OS's scheduling which basically prevented any task from going to sleep but it was hard to understand what other way was there to do it. Reading xv6's source code saved me (and my OS) as the code was so clean that it was easy to understand the idea behind their scheduling and port that to another kernel that had otherwise nothing to do with xv6.
I'm not familiar with xv6, but I remember using Pintos for my undergraduate level Operating Systems course around a dozen years ago.
I still chuckle at another student's description of the class... "a crash course in enabling and disabling interrupts in order to prevent segfaults and pagefaults.
Cool, when I was enrolled in the OS class at university, we worked with JOS (exokernel) instead and I relied heavily also on the great OSTEP[0] learning resources!
I did this course after someone mentioned in here a year ago, and have recommended it to a lot of people since. It's a very well structured and also up to date providing a good intro to RISC-V.
I came across a compiler bug when doing the course with gcc outputting incorrect ASM which was quite exciting as I've never come across one in the wild before. I really should check if that's been fixed and report it if not.
I completed all of the material between January and May last year, looking at the timestamps on my disk.
One of the requests on the course was to include time taken for the assignments as part of the submission. This was part of the (locally run) grading script, so even though I didn't submit I still completed it, luckily.
There were 11 assignments, and each took 5-10 hours apart from a few I got stuck on - I've got one assignment listed as being 30 hours (and I still remember the frustration. I nearly got to the point of emailing the course creators to ask for help but figured it out in the end as part of it was my aforementioned compiler bug).
On top of this there are two lectures a week (often ran over time with questions) so about 3 hours per assignment and some reading material.
I had used C before this course and was very rusty. This caused me to make some mistakes in the beginning, like pulling in standard libraries rather than using the ones as part of XV6, that someone new to C would likely not have made.
So in total I'd say 36 hours of lectures, 10 hours reading, 100+ hours doing assignments.
Does studying toy operating systems teach strictly more, or just different skills, than studying bare-metal embedded frameworks like https://github.com/rsta2/circle (which powers https://github.com/dwhinham/mt32-pi, unlike Zynthian which is Linux-based (https://zynthian.org/#software))? I dropped out of uni before completing my OS course, and I planned to look into mt32-pi, but sadly struggled with hardware and software setup (game MIDIs wouldn't play right, and in terms of sound design, all the good MT-32 patch editors are for obsolete platforms and many are gone from the Internet).
I took an operating systems course at Purdue in which we built the Xinu OS from (almost) scratch [1]. Almost all of us had no real experience with a _big_ project like this before, and the most important thing thing that I learned was how to be comfortable with a large system of different moving parts that all need to interop together. I learned a lot about how processes work, C memory management, and shells, but I don't ever use that in my day to day. It is fun to know kind of what is going on way behind the scenes when I'm using my computer, but knowing the low level datastructures really hasn't been practical for me while the big picture of the project impacted me greatly.
Though implementations differ, for any nontrivial task the problem of scheduling and resource allocation is a recurring theme and an important part of what an OS class “teaches”. But for many undergraduates an OS is also their first large project, perhaps one written in C. Really, there’s no “one” skill that a toy OS can offer, but anything in the area will give you a greater appreciation for how OSes in general might work and the problems they need to solve.
toy operating systems allow for more depth in the assignments, where working with real-world software systems with real world complexity requires ramping up.
when i took operating systems, we extended linux with an eye to building reliable systems (we built stuff like fault injectors for syscalls) as that was where the professor's graduate work had been and made various toy modifications to actual linux subsystems.
maybe folks working with nachos or one of these other toy operating systems get more topical depth (implement a scheduler or vm subsystem from scratch or such), but i personally found the experience of making real modifications to linux to be both more interesting and rewarding. (although many in the course struggled)
No, I meant is it better to teach or learn an OS, than a single-ring platform (about as minimal as a toy OS compared to Linux) where all code runs in the same address space, and scheduling is written by the user if present at all?
personally i'd probably prefer an os unless i was trying to learn device programming specifically. if you're playing with things like scheduler policies, vm strategies or networking, you probably want the all of the tooling that is available on full blown multiprocessing operating systems to generate/simulate workloads and test your strategies under real world conditions.
if you're aiming to be an embedded person someday on things like scada and such, or are interested in reverse engineering old hardware and systems and care a lot about device interfaces, them maybe one of these operating system as library frameworks would be a better choice.
The best universities in the world make their courses available online for free - what a time to be alive! I wonder if it's still possible to make money selling online courses in CS.
Lots of scammy-looking FANG Algo/Career sites sell subscriptions and seem fairly lucrative, and then you have Udacity/Coursera/Edx that sell you a certificate if you want one. Personally I quite like Udemy because they’re cheap and very specific - a lot are junk but some are really good (like the Stephan Girder series on JavaScript and docker).
I've taught this course a long time ago. Envied the students for all the fun they had implementing the homeworks. Highly recommended for anybody interested in computer systems.
For those wanting to move more into lower level stacks, after completing a class like OS, what might be some good entry jobs? What kind of job description would I be looking for? What next after entry?
The course is really neat.
Some of the candidate projects involving 9p virtio integration are suoerb ideas.
Did the CoW lab exersice for one of my courses.
The xv6 manual is very detailed as well.
I understand that this is a weird question, I've never coded in C, are there any online resources that help me grok OS concepts without a lot of emphasis on hands-on coding assignments.
The MIT endowment made $9 billion in profit last year, they don't need your $5 to keep releasing their course materials. It's basically marketing anyway.
The endowment isn't there just to pay for OCW, and the market returns last year are not the returns every year. Also, most donors restrict their funds to specific goals.
Every R1's endowment pays for everything a school must do: campus shuttles, sending lab kits to remote students during a lockdown, funding research activities (conferences, equipment, student salaries, journal fees), supporting student clubs, building/maintaining modern facilities, allowing poorer students---those already overcoming disadvantages relative to their peers---to focus on studying instead of working, poaching leading instructors from around the globe, building reactors.
According to https://ocw.aprende.org/donate/why-donate/ (a slightly older mirror of OCW's current donate page) MIT gets half of its $3.5 million budget from the institute while the remainder comes from donors. I also don't know that MIT is allowed to dip into the OCW fund for planting trees and endowing professors, so a donation probably actually goes toward maintaining AV gear, paying undergraduates to write captions, ensuring legal compliance, paying external courseware developers and Github fees.
(Yes, they occasionally hire external writers. I did this one summer before private repositories were free. OCW hires also get MIT certificates, which unlock a lot more course materials on MIT domains if you search a bit.)
At 2 million visits per month, one percent of visitors giving 5 dollars each year falls short of their budget by 500 grand. Do you think even one percent gives? Do you think they had 2 million site visits last month?
I don't know if they monetize their Youtube channel either. I can't recall ever seeing ads on their videos.
Ultimately, a lot of people are leeching off of large donors and corporate sponsors, who get back---at least short-term---practically nothing for their support. I see the school's perspective, why give more if users (or benefactors) are unwilling to support a reasonably worthy cause?
(If you need proof that a leading university will revoke its charitable publishing of course materials, look no further than UC Berkeley, which took the ball home after being ordered to add closed captions to free lecture videos.)
In short, I would recommend giving a few coffees worth to OCW before giving to Wikipedia (for the same reason you'd pay for universal grade school whether you have children or not), and I have historically done both.
Most body of knowledge built from working with Linux and Windows can be wholly ignored when building the New Operating System. There is barely anything worth of salvaging in either of the 'operating systems' or their lessons learned (besides not doing what they did).
I guess some of the GUI stuff is worth something, but you can just make a ray traced OS with Unity so.