Hacker Newsnew | past | comments | ask | show | jobs | submitlogin
Labs for Rust OS – CS-3210 at Georgia Tech (gts3.org)
382 points by tsgates on April 21, 2020 | hide | past | favorite | 44 comments


As a current graduate student specializing in systems at Georgia Tech OMSCS, I would love to see this class offered online. What's piques my interest is are the following two labs: preemptive multitasking (i.e. implementing processes) and FAT32 file system (i.e. implementing a file system, something I've always wanted to do)


> FAT32 file system (i.e. implementing a file system, something I've always wanted to do)

It's worth learning both how FAT32 works and how a simple inode-based filesystem works. They're quite different styles, and inode-based systems support things like hardlinks.


I got to the point where I could read the header / metadata from a FAT32 image, but I couldn't find the right offset to read a file. Is there a definitive document anywhere? I remember I was jumping between at least 3 documents with varying levels of completeness.


This seems complete enough to me: http://www.ntfs.com/fat-32structure.htm


FAT is enjoyable! I spent a rather insane summer on a personal project to implement a FAT16 interface speaking the SD protocol to an SD card over an SPI bus.... from scratch. I think I had five spec documents open simultaneously at one point, spanning the stack from FAT to the microprocessor I was using.

It was insane, but I learned an incredible amount from it. Would recommend, even if you focus only on FAT.


Cool project! Doing things like that from scratch can teach a lot.

Was your implementation able to write to the SD card, too? This seems like the much hard part to me because you need to do implement the data structure changes and block allocations for files. Reading from a file system often boils down to following the right offsets until you get to file content, at least in journal-less file systems.


Yeah, writing was supported too. Absolutely was the harder part, since you have to worry about allocating new segments for your directories as your filesystem grows.

Ironically, looking at my code now, it seems like I never got around to actually writing file contents. I seem to have stopped after finishing the overall FAT16 filesystem structure traversal and mutation.

The SD card module was a little simpler, because I only really needed to implement flows for the commands involved in initialization and single-block reads and writes. The SD card presents a block-oriented storage interface, but it doesn’t really care what you’re storing otherwise.


Also currently a student in the program, and I agree this would definitely earn one of my remaining slots. The current OS courses are already considered some of the best, and this would be a great addition. Fingers crossed.


ext2 is pretty easy to implement (a minimal implementation at least)! It's what I used for my hobby os

Have you checked out the osdev wiki and forums? There's a good deal of info on both of those topics there.


Implementing a simple filesystem using the Linux VFS interface is a fun thing to do. You can start by implementing the bare minimum and then add more functions over time.

Yes, it is C, not Rust, but for systems work it is absolutely worth knowing.


Maybe you could implement it in Rust? IIRC there's experimental rust support for drivers for the Linux kernel.


Just curious, would you pay for a practical course if it existed? Asking as I am planning to develop one.


I probably would. I’m also in OMSCS and the two operating systems classes offered cover a very different spectrum (GIOS is more about learning the Linux OS interface and AOS is about experimental concepts in OS development). There isn’t a “back to basics” OS class unfortunately.


Thanks for feedback, I am considering both (a) Linux interface (b) Back to basics building at least a decent multitasking kernel with memory management.


I think building some sort of OS from scratch would be a wonderful class. I've actually thought about what _I_ would like to see in a class like this before. These ideas might be useful to you:

1. Use a widely available architecture. This practically means x86 or x86_64. Nothing against RPis, for example, it's just that _everyone_ is more likely to have some sort of Intel desktop/laptop before they even have an RPi.

2. Start from the very basics: booting up and go into a NOP loop should be one of the first lessons.

3. Don't need to go too far: basic but functional implementations of things like memory management, multitasking, file systems, etc. are enough.

4. By the end, have a simple OS that boots up to a basic shell, is capable of reading/writing to something like FAT16 and can run multiple tasks in parallel.


Such a course would be amazing.

We definitely need more course that go down to deep specifics of how OSes work, are implemented.

(I feel like Tanenbaum's Minix book the last excellent piece of literature in the area that came closest. But of course, if you're aware of other literature on this, let me know!)


I would, dependent on the price of course.


Thank you for feedback. Do you think $49 - $79 would be justified for a %100 practical course, with about 2.5 hours of dense (not sparse to fill time) material?


I would comfortably pay up to twice that amount if the content is high quality.


Not the OP, but I would definitely pay that.


FAT12 is really simple (and limited) . I have implemented a driver for it from scratch back in the day, in assembler and then later in C. Taught me a lot!


The Reference Materials section has some nice tutorials, including one written by my colleague: Making a RISC-V Operating System using Rust, which has been discussed on HN several times.

http://osblog.stephenmarz.com/



On the linked page it's noted:

> The labs used in CS3210 are largely based on the materials originally developed for CS140e: An Experimental Course on Operating Systems by Sergio Benitez.


A "big" difference is that we have VM, Multicore and Networking stack! Also, it uses Rust 2018.


Networking drivers and APIs are nice to have - they are often omitted in OS project assignments because it's hard to fit them into the course schedule.

However for an IoT/embedded OS networking is pretty essential.


Wow. CS 3210 is in Rust now? That course contributed significantly to me getting my first real job. Back then we wrote Linux kernel modules.


I'll also have to say that the course labs look far more interesting than they were a decade ago. Implementing a new linux syscall to readtsc isn't particularly exciting...


CS 3210 & 6210 were my favorite undergrad courses.

Incredibly frustrating, but I learned more general concepts in each semester than in anything else.

I still remember trying to decide between 6210 and another elective. I asked Bill Leahy, who in typically efficiency replied, "Well, Tom Conte has a Porsche and a Ferrari." I figured that was a fair criteria in deciding who to learn from.


Bill Leahy and Tom Conte are god damn treasures to this world. I love them both.


Actually all the professors in COC can afford them because they got paid very well(Full professors in COC has 200k+)


Tom Conte’s graduate computer architecture course was a ton of fun and a lot of work!


I'm really impressed. When I took the course ~1.5 years ago it was still cribbing heavily from MIT OCW's OS course. Really nice to see the curriculum has changed (and more importantly been reduced)!


To be fair it seems like it's mostly doing the same still, just with Stanford's material instead :P


"just" is not a fair term. check its detail. we have designed VM, Multicore and Networking stack based on Rust 2018.


Any chance I'd be able to watch the lecture videos?


Wow this looks pretty cool! Courses like this are why I kinda wish I had gone to school and done a (good) CS program.


This is awesome... Really hope they offer this course on EdX or Coursera or something with full materials


I heard it is amazingly good. Here is another class taught by the same professor about security: https://tc.gts3.org/cs6265/2019/info.html


Is there an equivalent course in C or C++? I would be interested to take it if that was the case (nothing against Rust, I just don't see myself learning a new language just for a course)


I don't know for sure, but I imagine the similar courses referenced in the acknowledgements use C: https://tc.gts3.org/cs3210/2020/spring/info.html#acknowledgm...


The labs seem to be using Pi 3; if I wanted to follow along I guess there shouldn't be an issue with using Raspberry Pi 4 instead of 3?


I'm trying to figure out if a Pi 4 or 3A will work as well.


cs140e was a phenomenal class that I learned a lot doing, highly recommend to anyone that wants to learn more Rust or systems topics




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: