--- 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版本5以上,支援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
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up