linux2020
目的: 檢驗學員對 bitwise、數值系統和浮點數的認知
1
考慮到以下浮點數除法程式: (fdiv.c)
#include <stdio.h>
#include <stdlib.h>
double divop(double orig, int slots) {
if (slots == 1 || orig == 0)
return orig;
int od = slots & 1;
double result = divop(orig / D1, od ? (slots + D2) >> 1 : slots >> 1);
if (od)
result += divop(result, slots);
return result;
}
假設 divop()
的第二個參數必為大於 0
的整數,而且不超過 int
型態能表達的數值上界。請補完程式碼。
作答區
D1
= ?
(a)
4(b)
3(c)
2(d)
1D2
= ?
(a)
4(b)
3(c)
2(d)
1延伸問題:
io_uring 的目標是徹底移除傳統同步 I/O 與 epoll 就緒通知模型需要頻繁切換核心態的負擔,藉由提交佇列 (SQ) 與完成佇列 (CQ) 搭配 mmap 系統呼叫,以 atomic 操作和單一 io_uring_enter 同步提交與取回結果,大幅降低系統呼叫成本。如此一來,I/O 生命週期長駐核心,充分釋放 NVMe 與高頻寬網路介面的效能。
Aug 21, 2025本文改寫自 宋寶華:世上最好的共享記憶體內容改寫和補充: jserv
Aug 19, 20255.16.6
Aug 19, 2025Linux 核心對於 UNIX Process (繁體中文翻譯為「行程」,簡體翻譯為「進程」) 的實作相當複雜,不僅蘊含歷史意義 (幾乎每個欄位都值得講古),更是反映出資訊科技產業的變遷,核心程式碼的 task_struct 結構體更是一絕,廣泛涵蓋 process 狀態、處理器、檔案系統、signal 處理、底層追蹤機制等等資訊,更甚者,還很曖昧地保存著 thread (繁體中文翻譯為「執行緒」,簡體中文翻譯為「線程」) 的必要欄位,好似這兩者天生就脫不了干係。 本講座期望帶著聽眾得知 Linux 核心設計的特有思維,像是如何透過 LWP 和 NPTL 實作執行緒,又如何透過行程建立記憶體管理的一種抽象層,再者回顧行程間的 context switch 及排程機制,搭配 signal 處理 (千萬不要小看 kill,裡頭可是大有玄機!)。聽眾應可不至於迷失在茫茫程式碼大海中。
Aug 17, 2025or
By clicking below, you agree to our terms of service.
New to HackMD? Sign up