From e8901719fae5c1e7b496709e842ffec0a1fd367e Mon Sep 17 00:00:00 2001 From: Philipp Oppermann Date: Thu, 25 Apr 2019 17:40:22 +0200 Subject: [PATCH] Update post numbers Renames the directories, updates the weights, and the post branch links --- .../exception-stack-frame.svg | 0 .../function-stack-frame.svg | 0 .../index.md | 6 +++--- .../qemu-breakpoint-exception.png | Bin .../{07-double-faults => 06-double-faults}/index.md | 6 +++--- .../qemu-catch-double-fault.png | Bin .../qemu-double-fault-on-stack-overflow.png | Bin .../index.md | 6 +++--- .../qemu-deadlock.png | Bin .../qemu-hardware-timer-dots.gif | Bin .../qemu-hardware-timer-double-fault.png | Bin .../qemu-printing-numbers.gif | Bin .../qemu-printing-scancodes.gif | Bin .../qemu-single-dot-printed.png | Bin .../qemu-typing.gif | Bin .../index.md | 6 +++--- .../multilevel-page-table.svg | 0 .../paging-fragmentation.svg | 0 .../paging-page-tables.svg | 0 .../qemu-page-fault.png | Bin .../segmentation-fragmentation-compacted.svg | 0 .../segmentation-fragmentation.svg | 0 .../segmentation-same-program-twice.svg | 0 .../single-level-page-table.svg | 0 .../x86_64-page-table-translation-addresses.png | Bin .../x86_64-page-table-translation-steps.svg | 0 .../x86_64-page-table-translation.svg | 0 .../x86_64-table-indices-from-address.svg | 0 .../identity-mapped-page-tables.svg | 0 .../index.md | 6 +++--- .../map-complete-physical-memory.svg | 0 .../page-tables-mapped-at-offset.svg | 0 .../qemu-mapper-translate-addr.png | Bin .../qemu-new-mapping.png | Bin .../qemu-print-level-4-table.png | Bin .../qemu-translate-addr.png | Bin .../recursive-page-table-access-level-1.png | Bin .../recursive-page-table-access-level-2.png | Bin .../recursive-page-table-access-level-3.png | Bin .../recursive-page-table.png | Bin ...table-indices-from-address-recursive-level-1.svg | 0 ...table-indices-from-address-recursive-level-2.svg | 0 ...table-indices-from-address-recursive-level-3.svg | 0 ...table-indices-from-address-recursive-level-4.svg | 0 .../temporarily-mapped-page-tables.svg | 0 45 files changed, 15 insertions(+), 15 deletions(-) rename blog/content/second-edition/posts/{06-cpu-exceptions => 05-cpu-exceptions}/exception-stack-frame.svg (100%) rename blog/content/second-edition/posts/{06-cpu-exceptions => 05-cpu-exceptions}/function-stack-frame.svg (100%) rename blog/content/second-edition/posts/{06-cpu-exceptions => 05-cpu-exceptions}/index.md (99%) rename blog/content/second-edition/posts/{06-cpu-exceptions => 05-cpu-exceptions}/qemu-breakpoint-exception.png (100%) rename blog/content/second-edition/posts/{07-double-faults => 06-double-faults}/index.md (99%) rename blog/content/second-edition/posts/{07-double-faults => 06-double-faults}/qemu-catch-double-fault.png (100%) rename blog/content/second-edition/posts/{07-double-faults => 06-double-faults}/qemu-double-fault-on-stack-overflow.png (100%) rename blog/content/second-edition/posts/{08-hardware-interrupts => 07-hardware-interrupts}/index.md (99%) rename blog/content/second-edition/posts/{08-hardware-interrupts => 07-hardware-interrupts}/qemu-deadlock.png (100%) rename blog/content/second-edition/posts/{08-hardware-interrupts => 07-hardware-interrupts}/qemu-hardware-timer-dots.gif (100%) rename blog/content/second-edition/posts/{08-hardware-interrupts => 07-hardware-interrupts}/qemu-hardware-timer-double-fault.png (100%) rename blog/content/second-edition/posts/{08-hardware-interrupts => 07-hardware-interrupts}/qemu-printing-numbers.gif (100%) rename blog/content/second-edition/posts/{08-hardware-interrupts => 07-hardware-interrupts}/qemu-printing-scancodes.gif (100%) rename blog/content/second-edition/posts/{08-hardware-interrupts => 07-hardware-interrupts}/qemu-single-dot-printed.png (100%) rename blog/content/second-edition/posts/{08-hardware-interrupts => 07-hardware-interrupts}/qemu-typing.gif (100%) rename blog/content/second-edition/posts/{09-paging-introduction => 08-paging-introduction}/index.md (99%) rename blog/content/second-edition/posts/{09-paging-introduction => 08-paging-introduction}/multilevel-page-table.svg (100%) rename blog/content/second-edition/posts/{09-paging-introduction => 08-paging-introduction}/paging-fragmentation.svg (100%) rename blog/content/second-edition/posts/{09-paging-introduction => 08-paging-introduction}/paging-page-tables.svg (100%) rename blog/content/second-edition/posts/{09-paging-introduction => 08-paging-introduction}/qemu-page-fault.png (100%) rename blog/content/second-edition/posts/{09-paging-introduction => 08-paging-introduction}/segmentation-fragmentation-compacted.svg (100%) rename blog/content/second-edition/posts/{09-paging-introduction => 08-paging-introduction}/segmentation-fragmentation.svg (100%) rename blog/content/second-edition/posts/{09-paging-introduction => 08-paging-introduction}/segmentation-same-program-twice.svg (100%) rename blog/content/second-edition/posts/{09-paging-introduction => 08-paging-introduction}/single-level-page-table.svg (100%) rename blog/content/second-edition/posts/{09-paging-introduction => 08-paging-introduction}/x86_64-page-table-translation-addresses.png (100%) rename blog/content/second-edition/posts/{09-paging-introduction => 08-paging-introduction}/x86_64-page-table-translation-steps.svg (100%) rename blog/content/second-edition/posts/{09-paging-introduction => 08-paging-introduction}/x86_64-page-table-translation.svg (100%) rename blog/content/second-edition/posts/{09-paging-introduction => 08-paging-introduction}/x86_64-table-indices-from-address.svg (100%) rename blog/content/second-edition/posts/{10-paging-implementation => 09-paging-implementation}/identity-mapped-page-tables.svg (100%) rename blog/content/second-edition/posts/{10-paging-implementation => 09-paging-implementation}/index.md (99%) rename blog/content/second-edition/posts/{10-paging-implementation => 09-paging-implementation}/map-complete-physical-memory.svg (100%) rename blog/content/second-edition/posts/{10-paging-implementation => 09-paging-implementation}/page-tables-mapped-at-offset.svg (100%) rename blog/content/second-edition/posts/{10-paging-implementation => 09-paging-implementation}/qemu-mapper-translate-addr.png (100%) rename blog/content/second-edition/posts/{10-paging-implementation => 09-paging-implementation}/qemu-new-mapping.png (100%) rename blog/content/second-edition/posts/{10-paging-implementation => 09-paging-implementation}/qemu-print-level-4-table.png (100%) rename blog/content/second-edition/posts/{10-paging-implementation => 09-paging-implementation}/qemu-translate-addr.png (100%) rename blog/content/second-edition/posts/{10-paging-implementation => 09-paging-implementation}/recursive-page-table-access-level-1.png (100%) rename blog/content/second-edition/posts/{10-paging-implementation => 09-paging-implementation}/recursive-page-table-access-level-2.png (100%) rename blog/content/second-edition/posts/{10-paging-implementation => 09-paging-implementation}/recursive-page-table-access-level-3.png (100%) rename blog/content/second-edition/posts/{10-paging-implementation => 09-paging-implementation}/recursive-page-table.png (100%) rename blog/content/second-edition/posts/{10-paging-implementation => 09-paging-implementation}/table-indices-from-address-recursive-level-1.svg (100%) rename blog/content/second-edition/posts/{10-paging-implementation => 09-paging-implementation}/table-indices-from-address-recursive-level-2.svg (100%) rename blog/content/second-edition/posts/{10-paging-implementation => 09-paging-implementation}/table-indices-from-address-recursive-level-3.svg (100%) rename blog/content/second-edition/posts/{10-paging-implementation => 09-paging-implementation}/table-indices-from-address-recursive-level-4.svg (100%) rename blog/content/second-edition/posts/{10-paging-implementation => 09-paging-implementation}/temporarily-mapped-page-tables.svg (100%) diff --git a/blog/content/second-edition/posts/06-cpu-exceptions/exception-stack-frame.svg b/blog/content/second-edition/posts/05-cpu-exceptions/exception-stack-frame.svg similarity index 100% rename from blog/content/second-edition/posts/06-cpu-exceptions/exception-stack-frame.svg rename to blog/content/second-edition/posts/05-cpu-exceptions/exception-stack-frame.svg diff --git a/blog/content/second-edition/posts/06-cpu-exceptions/function-stack-frame.svg b/blog/content/second-edition/posts/05-cpu-exceptions/function-stack-frame.svg similarity index 100% rename from blog/content/second-edition/posts/06-cpu-exceptions/function-stack-frame.svg rename to blog/content/second-edition/posts/05-cpu-exceptions/function-stack-frame.svg diff --git a/blog/content/second-edition/posts/06-cpu-exceptions/index.md b/blog/content/second-edition/posts/05-cpu-exceptions/index.md similarity index 99% rename from blog/content/second-edition/posts/06-cpu-exceptions/index.md rename to blog/content/second-edition/posts/05-cpu-exceptions/index.md index d3cce8f0..72f9838f 100644 --- a/blog/content/second-edition/posts/06-cpu-exceptions/index.md +++ b/blog/content/second-edition/posts/05-cpu-exceptions/index.md @@ -1,6 +1,6 @@ +++ title = "CPU Exceptions" -weight = 6 +weight = 5 path = "cpu-exceptions" date = 2018-06-17 @@ -12,11 +12,11 @@ CPU exceptions occur in various erroneous situations, for example when accessing -This blog is openly developed on [GitHub]. If you have any problems or questions, please open an issue there. You can also leave comments [at the bottom]. The complete source code for this post can be found in the [`post-06`][post branch] branch. +This blog is openly developed on [GitHub]. If you have any problems or questions, please open an issue there. You can also leave comments [at the bottom]. The complete source code for this post can be found in the [`post-05`][post branch] branch. [GitHub]: https://github.com/phil-opp/blog_os [at the bottom]: #comments -[post branch]: https://github.com/phil-opp/blog_os/tree/post-06 +[post branch]: https://github.com/phil-opp/blog_os/tree/post-05 diff --git a/blog/content/second-edition/posts/06-cpu-exceptions/qemu-breakpoint-exception.png b/blog/content/second-edition/posts/05-cpu-exceptions/qemu-breakpoint-exception.png similarity index 100% rename from blog/content/second-edition/posts/06-cpu-exceptions/qemu-breakpoint-exception.png rename to blog/content/second-edition/posts/05-cpu-exceptions/qemu-breakpoint-exception.png diff --git a/blog/content/second-edition/posts/07-double-faults/index.md b/blog/content/second-edition/posts/06-double-faults/index.md similarity index 99% rename from blog/content/second-edition/posts/07-double-faults/index.md rename to blog/content/second-edition/posts/06-double-faults/index.md index 87c807da..1c6e8274 100644 --- a/blog/content/second-edition/posts/07-double-faults/index.md +++ b/blog/content/second-edition/posts/06-double-faults/index.md @@ -1,6 +1,6 @@ +++ title = "Double Faults" -weight = 7 +weight = 6 path = "double-fault-exceptions" date = 2018-06-18 @@ -10,11 +10,11 @@ This post explores the double fault exception in detail, which occurs when the C -This blog is openly developed on [GitHub]. If you have any problems or questions, please open an issue there. You can also leave comments [at the bottom]. The complete source code for this post can be found in the [`post-07`][post branch] branch. +This blog is openly developed on [GitHub]. If you have any problems or questions, please open an issue there. You can also leave comments [at the bottom]. The complete source code for this post can be found in the [`post-06`][post branch] branch. [GitHub]: https://github.com/phil-opp/blog_os [at the bottom]: #comments -[post branch]: https://github.com/phil-opp/blog_os/tree/post-07 +[post branch]: https://github.com/phil-opp/blog_os/tree/post-06 diff --git a/blog/content/second-edition/posts/07-double-faults/qemu-catch-double-fault.png b/blog/content/second-edition/posts/06-double-faults/qemu-catch-double-fault.png similarity index 100% rename from blog/content/second-edition/posts/07-double-faults/qemu-catch-double-fault.png rename to blog/content/second-edition/posts/06-double-faults/qemu-catch-double-fault.png diff --git a/blog/content/second-edition/posts/07-double-faults/qemu-double-fault-on-stack-overflow.png b/blog/content/second-edition/posts/06-double-faults/qemu-double-fault-on-stack-overflow.png similarity index 100% rename from blog/content/second-edition/posts/07-double-faults/qemu-double-fault-on-stack-overflow.png rename to blog/content/second-edition/posts/06-double-faults/qemu-double-fault-on-stack-overflow.png diff --git a/blog/content/second-edition/posts/08-hardware-interrupts/index.md b/blog/content/second-edition/posts/07-hardware-interrupts/index.md similarity index 99% rename from blog/content/second-edition/posts/08-hardware-interrupts/index.md rename to blog/content/second-edition/posts/07-hardware-interrupts/index.md index d8c8388b..6948541c 100644 --- a/blog/content/second-edition/posts/08-hardware-interrupts/index.md +++ b/blog/content/second-edition/posts/07-hardware-interrupts/index.md @@ -1,6 +1,6 @@ +++ title = "Hardware Interrupts" -weight = 8 +weight = 7 path = "hardware-interrupts" date = 2018-10-22 @@ -10,11 +10,11 @@ In this post we set up the programmable interrupt controller to correctly forwar -This blog is openly developed on [GitHub]. If you have any problems or questions, please open an issue there. You can also leave comments [at the bottom]. The complete source code for this post can be found in the [`post-08`][post branch] branch. +This blog is openly developed on [GitHub]. If you have any problems or questions, please open an issue there. You can also leave comments [at the bottom]. The complete source code for this post can be found in the [`post-07`][post branch] branch. [GitHub]: https://github.com/phil-opp/blog_os [at the bottom]: #comments -[post branch]: https://github.com/phil-opp/blog_os/tree/post-08 +[post branch]: https://github.com/phil-opp/blog_os/tree/post-07 diff --git a/blog/content/second-edition/posts/08-hardware-interrupts/qemu-deadlock.png b/blog/content/second-edition/posts/07-hardware-interrupts/qemu-deadlock.png similarity index 100% rename from blog/content/second-edition/posts/08-hardware-interrupts/qemu-deadlock.png rename to blog/content/second-edition/posts/07-hardware-interrupts/qemu-deadlock.png diff --git a/blog/content/second-edition/posts/08-hardware-interrupts/qemu-hardware-timer-dots.gif b/blog/content/second-edition/posts/07-hardware-interrupts/qemu-hardware-timer-dots.gif similarity index 100% rename from blog/content/second-edition/posts/08-hardware-interrupts/qemu-hardware-timer-dots.gif rename to blog/content/second-edition/posts/07-hardware-interrupts/qemu-hardware-timer-dots.gif diff --git a/blog/content/second-edition/posts/08-hardware-interrupts/qemu-hardware-timer-double-fault.png b/blog/content/second-edition/posts/07-hardware-interrupts/qemu-hardware-timer-double-fault.png similarity index 100% rename from blog/content/second-edition/posts/08-hardware-interrupts/qemu-hardware-timer-double-fault.png rename to blog/content/second-edition/posts/07-hardware-interrupts/qemu-hardware-timer-double-fault.png diff --git a/blog/content/second-edition/posts/08-hardware-interrupts/qemu-printing-numbers.gif b/blog/content/second-edition/posts/07-hardware-interrupts/qemu-printing-numbers.gif similarity index 100% rename from blog/content/second-edition/posts/08-hardware-interrupts/qemu-printing-numbers.gif rename to blog/content/second-edition/posts/07-hardware-interrupts/qemu-printing-numbers.gif diff --git a/blog/content/second-edition/posts/08-hardware-interrupts/qemu-printing-scancodes.gif b/blog/content/second-edition/posts/07-hardware-interrupts/qemu-printing-scancodes.gif similarity index 100% rename from blog/content/second-edition/posts/08-hardware-interrupts/qemu-printing-scancodes.gif rename to blog/content/second-edition/posts/07-hardware-interrupts/qemu-printing-scancodes.gif diff --git a/blog/content/second-edition/posts/08-hardware-interrupts/qemu-single-dot-printed.png b/blog/content/second-edition/posts/07-hardware-interrupts/qemu-single-dot-printed.png similarity index 100% rename from blog/content/second-edition/posts/08-hardware-interrupts/qemu-single-dot-printed.png rename to blog/content/second-edition/posts/07-hardware-interrupts/qemu-single-dot-printed.png diff --git a/blog/content/second-edition/posts/08-hardware-interrupts/qemu-typing.gif b/blog/content/second-edition/posts/07-hardware-interrupts/qemu-typing.gif similarity index 100% rename from blog/content/second-edition/posts/08-hardware-interrupts/qemu-typing.gif rename to blog/content/second-edition/posts/07-hardware-interrupts/qemu-typing.gif diff --git a/blog/content/second-edition/posts/09-paging-introduction/index.md b/blog/content/second-edition/posts/08-paging-introduction/index.md similarity index 99% rename from blog/content/second-edition/posts/09-paging-introduction/index.md rename to blog/content/second-edition/posts/08-paging-introduction/index.md index df553e5d..b9ae9547 100644 --- a/blog/content/second-edition/posts/09-paging-introduction/index.md +++ b/blog/content/second-edition/posts/08-paging-introduction/index.md @@ -1,6 +1,6 @@ +++ title = "Introduction to Paging" -weight = 9 +weight = 8 path = "paging-introduction" date = 2019-01-14 @@ -10,11 +10,11 @@ This post introduces _paging_, a very common memory management scheme that we wi -This blog is openly developed on [GitHub]. If you have any problems or questions, please open an issue there. You can also leave comments [at the bottom]. The complete source code for this post can be found in the [`post-09`][post branch] branch. +This blog is openly developed on [GitHub]. If you have any problems or questions, please open an issue there. You can also leave comments [at the bottom]. The complete source code for this post can be found in the [`post-08`][post branch] branch. [GitHub]: https://github.com/phil-opp/blog_os [at the bottom]: #comments -[post branch]: https://github.com/phil-opp/blog_os/tree/post-09 +[post branch]: https://github.com/phil-opp/blog_os/tree/post-08 diff --git a/blog/content/second-edition/posts/09-paging-introduction/multilevel-page-table.svg b/blog/content/second-edition/posts/08-paging-introduction/multilevel-page-table.svg similarity index 100% rename from blog/content/second-edition/posts/09-paging-introduction/multilevel-page-table.svg rename to blog/content/second-edition/posts/08-paging-introduction/multilevel-page-table.svg diff --git a/blog/content/second-edition/posts/09-paging-introduction/paging-fragmentation.svg b/blog/content/second-edition/posts/08-paging-introduction/paging-fragmentation.svg similarity index 100% rename from blog/content/second-edition/posts/09-paging-introduction/paging-fragmentation.svg rename to blog/content/second-edition/posts/08-paging-introduction/paging-fragmentation.svg diff --git a/blog/content/second-edition/posts/09-paging-introduction/paging-page-tables.svg b/blog/content/second-edition/posts/08-paging-introduction/paging-page-tables.svg similarity index 100% rename from blog/content/second-edition/posts/09-paging-introduction/paging-page-tables.svg rename to blog/content/second-edition/posts/08-paging-introduction/paging-page-tables.svg diff --git a/blog/content/second-edition/posts/09-paging-introduction/qemu-page-fault.png b/blog/content/second-edition/posts/08-paging-introduction/qemu-page-fault.png similarity index 100% rename from blog/content/second-edition/posts/09-paging-introduction/qemu-page-fault.png rename to blog/content/second-edition/posts/08-paging-introduction/qemu-page-fault.png diff --git a/blog/content/second-edition/posts/09-paging-introduction/segmentation-fragmentation-compacted.svg b/blog/content/second-edition/posts/08-paging-introduction/segmentation-fragmentation-compacted.svg similarity index 100% rename from blog/content/second-edition/posts/09-paging-introduction/segmentation-fragmentation-compacted.svg rename to blog/content/second-edition/posts/08-paging-introduction/segmentation-fragmentation-compacted.svg diff --git a/blog/content/second-edition/posts/09-paging-introduction/segmentation-fragmentation.svg b/blog/content/second-edition/posts/08-paging-introduction/segmentation-fragmentation.svg similarity index 100% rename from blog/content/second-edition/posts/09-paging-introduction/segmentation-fragmentation.svg rename to blog/content/second-edition/posts/08-paging-introduction/segmentation-fragmentation.svg diff --git a/blog/content/second-edition/posts/09-paging-introduction/segmentation-same-program-twice.svg b/blog/content/second-edition/posts/08-paging-introduction/segmentation-same-program-twice.svg similarity index 100% rename from blog/content/second-edition/posts/09-paging-introduction/segmentation-same-program-twice.svg rename to blog/content/second-edition/posts/08-paging-introduction/segmentation-same-program-twice.svg diff --git a/blog/content/second-edition/posts/09-paging-introduction/single-level-page-table.svg b/blog/content/second-edition/posts/08-paging-introduction/single-level-page-table.svg similarity index 100% rename from blog/content/second-edition/posts/09-paging-introduction/single-level-page-table.svg rename to blog/content/second-edition/posts/08-paging-introduction/single-level-page-table.svg diff --git a/blog/content/second-edition/posts/09-paging-introduction/x86_64-page-table-translation-addresses.png b/blog/content/second-edition/posts/08-paging-introduction/x86_64-page-table-translation-addresses.png similarity index 100% rename from blog/content/second-edition/posts/09-paging-introduction/x86_64-page-table-translation-addresses.png rename to blog/content/second-edition/posts/08-paging-introduction/x86_64-page-table-translation-addresses.png diff --git a/blog/content/second-edition/posts/09-paging-introduction/x86_64-page-table-translation-steps.svg b/blog/content/second-edition/posts/08-paging-introduction/x86_64-page-table-translation-steps.svg similarity index 100% rename from blog/content/second-edition/posts/09-paging-introduction/x86_64-page-table-translation-steps.svg rename to blog/content/second-edition/posts/08-paging-introduction/x86_64-page-table-translation-steps.svg diff --git a/blog/content/second-edition/posts/09-paging-introduction/x86_64-page-table-translation.svg b/blog/content/second-edition/posts/08-paging-introduction/x86_64-page-table-translation.svg similarity index 100% rename from blog/content/second-edition/posts/09-paging-introduction/x86_64-page-table-translation.svg rename to blog/content/second-edition/posts/08-paging-introduction/x86_64-page-table-translation.svg diff --git a/blog/content/second-edition/posts/09-paging-introduction/x86_64-table-indices-from-address.svg b/blog/content/second-edition/posts/08-paging-introduction/x86_64-table-indices-from-address.svg similarity index 100% rename from blog/content/second-edition/posts/09-paging-introduction/x86_64-table-indices-from-address.svg rename to blog/content/second-edition/posts/08-paging-introduction/x86_64-table-indices-from-address.svg diff --git a/blog/content/second-edition/posts/10-paging-implementation/identity-mapped-page-tables.svg b/blog/content/second-edition/posts/09-paging-implementation/identity-mapped-page-tables.svg similarity index 100% rename from blog/content/second-edition/posts/10-paging-implementation/identity-mapped-page-tables.svg rename to blog/content/second-edition/posts/09-paging-implementation/identity-mapped-page-tables.svg diff --git a/blog/content/second-edition/posts/10-paging-implementation/index.md b/blog/content/second-edition/posts/09-paging-implementation/index.md similarity index 99% rename from blog/content/second-edition/posts/10-paging-implementation/index.md rename to blog/content/second-edition/posts/09-paging-implementation/index.md index 0c4b67bf..7193f59a 100644 --- a/blog/content/second-edition/posts/10-paging-implementation/index.md +++ b/blog/content/second-edition/posts/09-paging-implementation/index.md @@ -1,6 +1,6 @@ +++ title = "Paging Implementation" -weight = 10 +weight = 9 path = "paging-implementation" date = 2019-03-14 +++ @@ -9,11 +9,11 @@ This post shows how to implement paging support in our kernel. It first explores -This blog is openly developed on [GitHub]. If you have any problems or questions, please open an issue there. You can also leave comments [at the bottom]. The complete source code for this post can be found in the [`post-10`][post branch] branch. +This blog is openly developed on [GitHub]. If you have any problems or questions, please open an issue there. You can also leave comments [at the bottom]. The complete source code for this post can be found in the [`post-09`][post branch] branch. [GitHub]: https://github.com/phil-opp/blog_os [at the bottom]: #comments -[post branch]: https://github.com/phil-opp/blog_os/tree/post-10 +[post branch]: https://github.com/phil-opp/blog_os/tree/post-09