---
# System prepended metadata

title: Linux Kernel
tags: [Linux]

---

---
title: Linux Kernel
tags: Linux
image:
disque: hackmd
---

# linux2021: starlinking

## 測驗 α−1
>舉出 Linux 核心原始程式碼裡頭 bit rotation 的案例並說明


## 測驗 α−2
>x86_64 指令集具備 rotr 和 rotl 指令，上述 C 程式碼經過編譯器最佳化 (例如使用 gcc) 後，能否運用到這二個指令呢？

:::success
可以，X86機器上，編譯器知道 x86 旋轉和移位指令以與 C 源代碼相同的方式屏蔽移位計數。
GCC版本５以上，支援ror 或 rol 指令進行變量計數。

在C++20，直接支援rotl和rotr指令。
:::

## 測驗 β−1
>說明上述程式碼的運作原理

## 測驗 β−2
>在 Linux 核心原始程式碼找出類似 align_up 的程式碼，並舉例說明其用法

## 測驗 γ-1
```c=
#include <stdio.h>
#include <unistd.h>

int main(void)
{
    for (int i = 0; i < NNN; i++) {
        fork();
        printf("-");                         
    }

    fflush(stdout);
    return 0;
}
```
>解釋上述程式碼輸出 - 字元數量的原理

| NNN      | wc -c  |
| -------- | ------ |
| 1        | 2      |
| 2        | 8      |
| 3        | 24     |
| 4        | 64     |
| 5        | 160    |
| 6        | 384    |
| 7        | 896    |
| 8        | 2048   |
| 9        | 4608   |
| 10       | 10240  |
| 11       | 22528  |
| 12       | 49152  |

:::success
* fork時，會一併拷貝printf緩衝區
* printf函式只有當緩衝區被重新整理的時候才會輸出資料，在此之前只是將資料存放到緩衝區。
* 程式最後呼叫fflush函式重新整理緩衝區，才會輸出資料至stdout。
* 迴圈n次時，共有 2^n^ 個程序
* 列印 - 字元數量為程序數量再加上每一次被拷貝的printf緩衝區內容。
:::


## 測驗 δ-1


## 測驗 δ-2


## 測驗 ϵ-1


## 測驗 ϵ-2


## 測驗 ζ-1


## 測驗 ζ-2





