![]() ![]() Here's the very rough code, with a slightly buggy 8080 emulator implementation: I just read the textbook and coded in C at the library. Unfortunately, I failed the class because I couldn't answer trivia on the exam like "What does GRUB stand for" because I spent the whole semester working on the hypervisor and not actually going to any of the lectures. I was happy with that, because I'm not a grade chaser. The professor was impressed by the implementation (and I implemented all the algorithms required to get 10 points extra credit), but because I didn't actually write an OS simulator (closer to an actual OS, but not quite there), he gave me 100%, but no extra credit. There was a special instruction I made to fork the program so you could clone a process from another process, and I used one of the unused flag register bits to signify which fork the program was. I wrote a few long-running programs which printed out numbers to demonstrate memory paging and process pre-emption. You could spawn terminal windows and run specific programs. The program returned an HTML page which looked like a desktop. You had to have some kind of user interface, so I wrote it as a web server in C with a custom HTTP server implementation. I didn't actually read the instructions and ended up writing a kind of hypervisor(?) which ran programs in an 8080 emulator with some of my own custom instructions for memory banking and forking to meet the requirements of the class (your program had to be able to do memory paging up to something like 512mb of RAM). I had been doing C since I was 12 at that point, and since I was already using ubuntu server via ssh, it wasn't a difficult class at all for me.įor my OS final, we had to write an operating system simulator (a program which simulated the kind of events that would occur in an OS: new processes, processes being deleted, memory paging, single process multi-tasking with pre-emption). The only other class that didn't use java was systems programming, where we did C. I coded everything in vim with no debugger or code completion, and compiled everything with makefiles.Ĭlasses usually only required a single java file to turn in your work, which was then compiled and run automatically with the results being verified by another program, so as long as your individual java file output the same results as what was expected, it didn't matter what build system (if any) you used. I ended up renting a VPS from Vultr for $5/mo and SSH'ing in. Most assignments were in Java back then (from what I understand, colleges teach mostly python now) and I couldn't run eclipse (the standard IDE used in college at the time). It was the crucible of learning software development in the mid-2010s because you had to improvise. I coded on a chromebook throughout college. Then of course there's the question of providing a good UX on top of that base: I want to connect to Wifi, select the ID provider, type my username/password, and start working. Alpine & OpenBSD are both radically simpler, but lack the aspect of trivially reproducible builds. NixOS/Guix would be good candidates, but the underlying scaffolding is quite complex. Immutable / secure-by-default OS would also be interesting, but nothing else out there is quite like ChromeOS. ![]() email or even plain old SSH), choose your storage backend (including other clouds but also e.g. I would love to see these principles implemented in a privacy-respecting manner: bring your own device, choose your identity provider (including self-hosted options that integrate with e.g. I always loved the premise of the Chromebook: disposable device with a disposable OS secure by default your data is always backed up if you have any doubts or problems you can always restore to the factory image and be back in action within minutes, etc. ![]()
0 Comments
Leave a Reply. |
AuthorWrite something about yourself. No need to be fancy, just an overview. ArchivesCategories |