diff --git a/Utility-containers.md b/Utility-containers.md index a4c48cd..fff64ec 100644 --- a/Utility-containers.md +++ b/Utility-containers.md @@ -2,6 +2,58 @@ (Add a section for each new utility container, as well as documentation) +## How We Approached It All (in chronological steps) + +A great way to learn something new is to retrace the steps taken by someone who had taken the same path before. To make this possible for future readers, below are written major ideas, proposed solutions, encountered pitfalls, and implemented fixes that have arisen along the way. + +### Step 0: Set up a unified development environment +> **Suggested reading**: +> [Operating Systems: From 0 to 1, Chapters 1–6][os01] + +To safeguard against dependency hell, all the essential software needed to develop and run our OS will be provided through a set of Docker images. For those unfamiliar with Docker, a command cheatsheet will be provided later on. + +***Which compiler to use, gcc or clang?*** +... + +** Decision**: ... + +Preliminary list of essential software: +- QEMU: open-source machine emulator +- gcc: +- gdb: +- make: +- objdump: +- ... + +(ubuntu dockerfile...) + +### Step 1: Make a bootloader that prints 'dmzOS' +> **Suggested reading**: +> [Operating Systems: From 0 to 1, Chapter 7: *Bootloader*][os01] + +A few dilemmas had already emerged before even having started writing any code. + +***Should the kernel be 32-bit or 64-bit?*** +* A 32-bit kernel can provide access to 232 memory addresses. For a byte-addressable memory, that equals 232 B = 4*230 B = 4 GiB of physical memory. On the other hand, a 64-bit kernel can provide access to 264 B = 16 EiB of physical memory. +* Having more RAM available makes heavy multitasking and memory-intensive operations perform better. On the other hand, 64-bit programs use about 50% more memory then their 32-bit counterpart; this is due to numerous reasons, one of which is that 64-bit pointers take up twice as much space as 32-bit ones. +* The x86_64 architecture has two primary [modes of operation](https://en.wikipedia.org/wiki/X86-64#Operating_modes), each having different sub-modes. A 64-bit and 32-bit kernel require the processor to operate in different modes. + +*Decision*: In order to prevent running into chaos, we will first stick to the steps outlined in [Operating Systems: From 0 to 1][os01], which will result in our developing a 32-bit kernel stub. At that point, we will have necessary information to decide whether it aligns better with our goals to keep the kernel 32-bit or to convert it into a 64-bit version. + +***Intel or AT&T syntax for asm code?*** +* This is simply a matter of personal preference, as both are translated into the same machine code. + +*Decision*: Intel syntax, as it is used both in [AMD][amd64v1] and [Intel][intel64] architecture manuals. +(...) + +### Step 2: +(...) + +## List of command cheatsheets +### Docker +### gcc, gdb, clang-format... +(...) + ## Useful links ### Wiki * [OSDev Wiki](https://wiki.osdev.org/Expanded_Main_Page): a good way to get acquainted with multiple topics at a high level, though a bit outdated. @@ -9,13 +61,14 @@ * [Operating Systems: From 0 to 1][os01]: pretty in-depth and with hands-on instructions on how to use many of the tools needed. * [OpenCSF](https://w3.cs.jmu.edu/kirkpams/OpenCSF/Books/csf/html/index.html): an all-encompassing CS guide with a focus on many important OS-related topics. ### Blogs -* [CPU Land](https://cpu.land/): an avid learners perspective on the CS fundamentals. +* [CPU Land](https://cpu.land/): an avid learner's perspective on the CS fundamentals. ### Repositories * [SerenityOS](https://github.com/SerenityOS/serenity): pay special attention to YouTube channels of major contributors. ### YouTube * [Building an OS by nanobyte](https://www.youtube.com/watch?v=9t-SPC7Tczc&list=PLFjM7v6KGMpiH2G-kT781ByCNC_0pKpPN&t=1s&ab_channel=nanobyte): live-coding with a digest of the most important concepts behind-the-hood. ### Official documentation: -* [AMD64 Architecture Programmers Manual Volume 1: Application Programming][amd64v1] +* [AMD64 Architecture Programmer’s Manual Volume 1: Application Programming][amd64v1] +* [AMD64 Architecture Programmer’s Manual Volume 2: System Programming][amd64v2] * [Intel® 64 and IA-32 Architectures Software Developer Manuals][intel64] [//]: # (Second part of reference-style links)