---
# System prepended metadata

title: 'Book : iThome EN 帶你寫個作業系統 '
tags: [HomeLab / SelfHost & Linux OS]

---

> Reference \: https://www.books.com.tw/products/0010933946

*I have this book as a reference and side reading. This note will only include topics that I am interested in and  materials that I refer to when reading this book*

# Chapter \#1

## 1\-5 透過RISC-V模擬器搞懂指令管線化

### Stage Pipeline Issue

:::info
:information_source: **Instruction Pipeline Wikipedia**

https://en.wikipedia.org/wiki/Instruction_pipelining
:::

## 1\-6 淺談分支預測與Hazards議題

:::info
:information_source: **My Other Post**

* Brach Prediction
https://hackmd.io/FiPAsD0pQfempm4gPABisQ?view#Unequal-Branches
* Instruction-Level Parallelism
https://hackmd.io/FiPAsD0pQfempm4gPABisQ?view#Instruction-Level-Parallelism
:::

### Pipeline Hazards

* **Structure Hazards** \: Hazard cause by limited resource and pipeline instruction accessing same resource.
* **Data Hazards** \: Data dependancy
* **Control Hazards** \: Can be improved by branch prediction

### Branch Prediction

> Reference \: 
> * Dynamic Branch Prediction - UMD Computer Science
> https://www.cs.umd.edu/~meesh/411/CA-online/chapter/dynamic-branch-prediction/index.html
> * Dynamic Branch Prediction
> https://hackmd.io/@yq_MtXLqQ7quQb0BHoEY5g/S1xQN6hiT

## 1\-7 goto die? 那個goto到底能不能用啊?

* Exception Handling
* Computed Goto

:::success
:bulb: **Computed goto for efficient dispatch tables**

https://eli.thegreenplace.net/2012/07/12/computed-goto-for-efficient-dispatch-tables
:::

### Computed Goto

:::success
:bulb: **你所不知道的 C 語言\: goto 和流程控制篇**

https://hackmd.io/@sysprog/c-control-flow
:::

**Book Source Code Example**

> Reference \: https://ithelp.ithome.com.tw/articles/10283072

```cpp
int interp_cgoto(unsigned char* code, int initval) {

    static void* dispatch_table[] = {
        &&do_halt, &&do_inc, &&do_dec, &&do_mul2,
        &&do_div2, &&do_add7, &&do_neg};
    #define DISPATCH() goto *dispatch_table[code[pc++]]

    int pc = 0;
    int val = initval;

    DISPATCH();
    while (1) {
        do_halt:
            return val;
        do_inc:
            val++;
            DISPATCH();
        do_dec:
            val--;
            DISPATCH();
        do_mul2:
            val *= 2;
            DISPATCH();
        do_div2:
            val /= 2;
            DISPATCH();
        do_add7:
            val += 7;
            DISPATCH();
        do_neg:
            val = -val;
            DISPATCH();
    }
}
```

## 1\-8 \: IEEE\-754 與浮點運算

:::info
:bulb: **Floating Point Number Representation**

*My other post basically contain most of this.*

https://hackmd.io/@Erebustsai/Sk39malXa
:::

## 1\-9 \: 組譯器與連結器

*TODO \: High chance being merged to other post*

# Chapter \#3

## 3\-4 \: 學習撰寫 Makefile

### Basic Structure

```bash
Target: Dependencies
    Commands
```

:::success
:bulb: **Makefile 語法和示範**

https://hackmd.io/@sysprog/SySTMXPvl
:::

:::success
:bulb: **簡單學 makefile：makefile 介紹與範例程式**

https://www.mropengate.com/2018/01/makefile.html
:::

# Chapter \#4

## Important Reference

:::success
:bulb: **`mini-riscv-os`**

**mini-riscv-os -- 一步一步自製 RISC-V 處理器上的嵌入式作業系統**

https://github.com/cccriscv/mini-riscv-os/tree/master/doc/tw
:::

## 4\-1 \: UNIX, BSD 與 Linux 的愛恨情仇

> Reference \: 
> * FreeBSD vs Linux：哪個開源作業系統更強大
> https://blog.vvzero.com/2022/05/25/freebsd-vs-linux-which-open-source-os-is-superior/

:::success
:bulb: **Reference Mapping**

https://github.com/cccriscv/mini-riscv-os/blob/master/doc/tw/01-HelloOs.md
:::

## 4\-2 \: Hello, OS\!

> Reference \:
> * My Other Post About UART
> https://hackmd.io/@Erebustsai/SJ6xmLqY6

## 4\-3 \: 實作動態記憶體

:::success
:bulb: **linker script 簡單教學**

https://evshary.com/2018/06/02/linker-script-%E7%B0%A1%E5%96%AE%E6%95%99%E5%AD%B8/
:::

## 4\-4 \: 學習上下文交換

### Process Control Block

:::success
:bulb: **Process Control Block Wikipedia**

https://en.wikipedia.org/wiki/Process_control_block
:::

:::success

:bulb: **ria-jit 重點摘要**

This article provide some insight of differece of RISC-V and x86.

https://hackmd.io/@WeiCheng14159/rkCixiYnv
:::

## 4\-5 \: 任務排程

:::success
:bulb: **`std::this_thread::yield`**

For C++

https://en.cppreference.com/w/cpp/thread/yield
:::

* **FCFS** \(First-Come First-Served\)
* **RR** \(Round-Robin\)
* **SJF** \(Shortest Job First\)
* **PS** \(Priority Scheduling\)

## 4\-6 \: 再談中斷異常

:::info
:information_source: **RTOS with STM32**

https://hackmd.io/@Erebustsai/S1B6s0ns2
:::

## 4\-8 \: 淺談檔案系統

### 從理論到實務 \: 吃拉麵也能學會 FAT32 檔案系統

:::success
:bulb: **Linux 核心設計: 檔案系統概念及實作手法**

https://hackmd.io/@owlfox/SyVVY3EgI/https%3A%2F%2Fhackmd.io%2Fs%2FBypqEyF6N
:::

## 4\-9 \: 實作 Shell

*TODO*


# Chapter \#5

## 5\-1 \: Program, Process and Thread

:::success
:bulb: **Process State**

https://byjus.com/gate/process-state-in-operating-system-notes/
:::

## 5\-2 POSIX Thread 介紹

There are about 100 functions in POXIS API. All of them start with `pthread_`.

* **Thread Management** \: Create, wait, check...
* **Mutex Lock** \: Create, destroy, lock, unlock...
* **Condition Variable** \: Wait, signal, check...
* **Synchronization** between threads

:::info
:information_source: **Comparison of POSIX Thread Model and C++ `std::thread` Model**

https://www.linkedin.com/pulse/comparision-c-posix-threads-amit-nadiger#:~:text=C%2B%2B%20threads%20provide%20a%20higher,more%20portability%20across%20different%20platforms.
:::

# Appendix

:::info
:information_source: **Semaphore \& Mutex**

https://jasonblog.github.io/note/linux_system/mutex_yu_semaphore_zui_da_de_cha_yi_shi.html
:::
