Update Utility containers

texhno 2024-02-14 02:39:28 +00:00
parent 6cca0374a2
commit 8d05b0313c

@ -1,78 +1,3 @@
# List of utility containers and their respective commands
(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 16][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 2<sup>32</sup> memory addresses. For a byte-addressable memory, that equals 2<sup>32</sup> B = 4*2<sup>30</sup> B = 4 GiB of physical memory. On the other hand, a 64-bit kernel can provide access to 2<sup>64</sup> 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.
### Books
* [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.
### 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 Programmer2!@#$%^&()_}}}{{||""::??>><<``s Manual Volume 1: Application Programming][amd64v1]
* [AMD64 Architecture Programmers Manual Volume 2: System Programming][amd64v2]
* [Intel® 64 and IA-32 Architectures Software Developer Manuals][intel64]
[//]: # (Second part of reference-style links)
[os01]: https://github.com/tuhdo/os01
[amd64v1]: https://www.amd.com/content/dam/amd/en/documents/processor-tech-docs/programmer-references/24592.pdf
[amd64v2]: https://www.amd.com/content/dam/amd/en/documents/processor-tech-docs/programmer-references/24593.pdf
[intel64]: https://www.intel.com/content/www/us/en/developer/articles/technical/intel-sdm.html#combined