Repo cung cấp 5 bài lab thực hành về lập lịch thời gian thực trên Linux và Zephyr RTOS. Mỗi lab có đủ phần lý thuyết nền, hướng dẫn setup, mã nguồn mẫu, cách chạy step-by-step và gợi ý phân tích kết quả.
- Mục tiêu: Tạo 3–4 tác vụ chu kỳ ⟨Cᵢ, Tᵢ, Dᵢ⟩, chạy với RMS (SCHED_FIFO) và EDF (SCHED_DEADLINE hoặc mô phỏng user-space), đo deadline miss và độ trễ p99.9 rồi đối chiếu điều kiện Liu–Layland.
- Thành phần chính:
src/periodic_demo.csinh luồng periodic dùng clock_nanosleep ABS time, logschedule_log.csvvới latency, runtime, deadline hit. - Chuẩn bị:
sudo apt install build-essential rt-tests. Kiểm tra kernel cóCONFIG_SCHED_DEADLINE. - Cách chạy nhanh: Biên dịch
gcc -O2 -Wall -pthread periodic_demo.c -o periodic_demo; chạysudo ./periodic_demo --policy rms ...rồi--policy edf; song song chạysudo cyclictest ...để đo jitter nền. - Phân tích/Kỳ vọng: RMS ổn định dưới ngưỡng ΣC/T ≤ n(2^{1/n}-1); EDF giữ deadline tốt gần 100% tải; log CSV và
cyclictestgiúp so tail latency giữa hai chế độ.
- Mục tiêu: Mô phỏng ba luồng L/M/H cùng mutex để quan sát priority inversion và lợi ích của Priority Inheritance (PI) trên Linux.
- Thành phần chính:
src/priority_inversion_demo.ctạo thread SCHED_FIFO với barrier đồng bộ, ghiresults.csvcho từng iteration. - Chuẩn bị:
sudo apt install build-essential. Chạy trên Linux với quyền đặt SCHED_FIFO. - Cách chạy nhanh:
gcc -O2 -Wall -pthread priority_inversion_demo.c -o priority_inversion_demo; chạysudo ./priority_inversion_demo --policy none ...rồi--policy inherit; so sánh response time của luồng H trong CSV. - Phân tích/Kỳ vọng: Không PI → H bị kẹt khi M chiếm CPU; bật PI → L được nâng ưu tiên, mutex nhả sớm, response time co lại. Có thể thêm
--work-ms/--hold-msđể tăng độ tương phản.
- Mục tiêu: Đo jitter
cyclictestcho ba chính sách POSIX (CFS, RR, FIFO) và tác động của CPU affinity, thêm tải nền. - Thành phần chính:
run_experiments.shgom lệnhcyclictest, tự tạo thư mụclogs/<timestamp>/, lưu raw output vàsummary.txt. - Chuẩn bị:
sudo apt install rt-tests util-linux stress-ng. Script yêu cầusudokhi đặt chính sách realtime. - Cách chạy nhanh:
./run_experiments.sh --cpu 2 --interval 1000 --loops 200000 --background. Script sẽ lần lượt chạy OTHER/RR/FIFO (kèm stress nếu bật) và chốt bằng tóm tắt tail log. - Phân tích/Kỳ vọng: SCHED_OTHER có tail cao nhất, SCHED_RR cải thiện phần nào, SCHED_FIFO + pin CPU giữ jitter thấp và ổn định hơn; khi bật stress-ng tail tăng mạnh, nhất là OTHER.
- Mục tiêu: Trên Zephyr (QEMU x86), triển khai client gửi chu kỳ qua
k_msgqcho server; đổi ưu tiên server để quan sát độ trễ và backlog. - Thành phần chính:
src/main.ctạo hai thread, loglatency,backlog,drop;prj.confđặt default (server prio 1),overlay-server-low.confhạ server xuống 3,Kconfigcho phép điều chỉnh thông số. - Chuẩn bị: Cài Zephyr toolchain (
pip install west,west init/update,west zephyr-export), đảm bảoZEPHYR_BASE. - Cách chạy nhanh:
west build -b qemu_x86 <repo>/lab4_zephyr_msgq -p alwaysrồiwest build -t run; lặp lại với-- -DOVERLAY_CONFIG=overlay-server-low.conf. - Phân tích/Kỳ vọng: Server prio cao → latency ≈ thời gian xử lý mô phỏng, backlog thấp; server prio thấp → backlog tăng, log cảnh báo drop khi queue đầy; phù hợp để đo tác động ưu tiên trong RTOS.
- Mục tiêu: Mô phỏng deferred work: client ưu tiên thấp gửi burst thông điệp lớn qua
k_mbox, server ưu tiên cao xử lý và báo hoàn tất quak_sem. - Thành phần chính:
src/main.cđịnh nghĩa mailbox, semaphore, payload linh hoạt;prj.conf(server prio 1) vàoverlay-server-low.conf(server prio 4);Kconfigcho phép chỉnh burst, payload, thời gian xử lý. - Chuẩn bị: Dùng cùng môi trường Zephyr như LAB 4.
- Cách chạy nhanh:
west build -b qemu_x86 <repo>/lab5_zephyr_mbox -p alwaysrồiwest build -t run; chạy lại với overlay để hạ ưu tiên server và so sánh log. - Phân tích/Kỳ vọng: Server ưu tiên cao → mỗi burst hoàn tất nhanh, log server latency thấp; khi hạ ưu tiên → thời gian client đợi
k_semkéo dài, log cho thấy latency tăng và số message bị truncate (nếu payload vượt buffer).
Lưu ý: README trong từng thư mục mở rộng thêm lý thuyết, lệnh chi tiết, biến cấu hình và gợi ý mở rộng. Hãy xem trực tiếp từng lab khi chuẩn bị báo cáo hoặc chạy thử nghiệm.