Bạn đồng hành song ngữ · 26 chương cốt lõi Bilingual companion · 26 core chapters
The Linux Programming Interface The Linux Programming Interface
Nếu CS:APP cho bạn thấy máy tính từ góc lập trình viên, cuốn này chỉ cho bạn cách ra lệnh cho nhân Linux. Mọi chương trình thật — shell, trình duyệt, máy chủ web — đều làm việc qua cùng một tập lời gọi hệ thống (system call): mở tệp, tạo tiến trình, gửi tín hiệu, cấp phát bộ nhớ, nói chuyện qua mạng. Bộ cốt lõi 26 chương này đi qua đúng những API đó, bám sát cách trình bày của Michael Kerrisk, chú nguồn cho mọi khẳng định.
Hãy hình dung nhân Linux (kernel) như một quầy dịch vụ: chương trình của bạn không tự chạm vào phần cứng, mà phải xếp hàng xin kernel làm hộ — "mở giúp tệp này", "tạo giúp một tiến trình", "gửi giúp gói tin". Những lời xin đó gọi là system call. Cuốn sách dạy bạn cách xin cho đúng. Nhớ nhé: lập trình hệ thống là học cách nói chuyện với kernel.
If CS:APP shows you the machine from a programmer's perspective, this book shows you how to command the Linux kernel. Every real program — a shell, a browser, a web server — works through the same set of system calls: open files, create processes, send signals, allocate memory, talk over the network. These 26 core chapters walk exactly those APIs, keeping Michael Kerrisk's own framing, and cite a source for every specific.
Mỗi trang chương có ba mức đọc (Dễ hiểu · Chuẩn · Đầy đủ) và hai ngôn ngữ (VI · EN). Dùng thanh trên cùng để đổi — lựa chọn của bạn được ghi nhớ giữa các trang.
Ở góc trên có mấy cái nút. Bấm để đổi mức khó, đổi tiếng Việt / tiếng Anh, đổi nền sáng / tối. Máy sẽ nhớ cho bạn. Nhớ nhé: chưa quen thì cứ để "Dễ hiểu".
Every chapter page carries three reading levels (Easy · Standard · Full) and two languages (VI · EN). Use the bar at the top to switch — your choice is remembered across pages.
Nhóm 1 · 3 chương Module 1 · 3 chapters
Nền tảng và khái niệm Background and Concepts
Ba chương mở đầu dựng khung chung: UNIX và Linux ra đời thế nào, các chuẩn (POSIX, SUS) ràng buộc ra sao, và những khái niệm nền — kernel, shell, tiến trình, tệp, quyền — mà mọi chương sau đều dựa vào. Chương 3 giới thiệu cách gọi system call, bắt lỗi qua errno và các quy ước dùng chung trong cả cuốn.
Phần này là "lớp vỡ lòng": lịch sử ngắn gọn, vì sao có chuẩn, và bộ từ vựng cơ bản (tiến trình là gì, tệp là gì, system call là gì). Nhớ nhé: nắm chắc ba chương này thì các chương sau mới dễ vào.
The opening three chapters set the shared frame: how UNIX and Linux came to be, how the standards (POSIX, SUS) constrain things, and the core concepts — kernel, shell, process, file, permissions — every later chapter rests on. Chapter 3 introduces how system calls are made, how errors surface through errno, and the conventions used across the whole book.
Nhóm 2 · 6 chương Module 2 · 6 chapters
File I/O và hệ thống tệp File I/O and File Systems
"Mọi thứ đều là tệp" là triết lý trung tâm của UNIX. Nhóm này đi từ mô hình I/O vạn năng (open, read, write, close trên mọi loại tệp), qua các chi tiết nâng cao và cơ chế đệm, tới cách hệ thống tệp, thuộc tính tệp và liên kết thực sự hoạt động trên đĩa.
Phần này trả lời: đọc/ghi một tệp thật ra là làm gì bên dưới, và vì sao cùng một vài lệnh lại dùng được cho tệp, thiết bị, lẫn đường ống. Nhớ nhé: hiểu file descriptor là hiểu nửa cuốn sách.
"Everything is a file" is UNIX's central philosophy. This module goes from the universal I/O model (open, read, write, close on every kind of file), through further details and buffering, to how file systems, file attributes and links actually work on disk.
Nhóm 3 · 6 chương Module 3 · 6 chapters
Tiến trình và bộ nhớ Processes and Memory
Đây là trái tim của lập trình hệ thống Linux: một tiến trình được bố trí trong bộ nhớ ra sao, cấp phát vùng nhớ động thế nào, và bộ ba fork() – exec() – wait() dựng nên mọi thứ từ shell tới trình quản lý dịch vụ. Hiểu được chương này là hiểu cách một chương trình sinh ra, thay hình đổi dạng, kết thúc và được cha nó thu dọn.
Phần này kể chuyện vòng đời một chương trình đang chạy: nó được chia bộ nhớ thế nào, làm sao một tiến trình "đẻ" ra tiến trình con, và vì sao shell gõ lệnh nào cũng chạy được. Nhớ nhé: fork tạo bản sao, exec thay nội dung, wait dọn dẹp.
This is the heart of Linux system programming: how a process is laid out in memory, how it allocates memory dynamically, and how the fork() – exec() – wait() trio builds everything from a shell to a service manager. Grasping this module is grasping how a program is born, transforms, terminates and is reaped by its parent.
Nhóm 4 · 4 chương Module 4 · 4 chapters
Tín hiệu và luồng Signals and Threads
Hai cách để một chương trình xử lý nhiều việc "cùng lúc". Signals là cơ chế thông báo bất đồng bộ cổ xưa của UNIX — một tiến trình bị ngắt giữa chừng để chạy trình xử lý. Threads chia sẻ cùng không gian địa chỉ để chạy song song thực sự, nhưng đổi lại là bài toán đồng bộ hoá. Nhóm này đặt nền cho cả hai.
Phần này nói về "làm nhiều việc một lúc" theo hai kiểu: tín hiệu (bị gõ cửa và phải xử lý ngay) và luồng (nhiều người cùng làm trong một phòng, phải tránh giẫm chân nhau). Nhớ nhé: signal là ngắt, thread là chia sẻ — mỗi cái một loại rắc rối.
Two ways a program handles several things "at once." Signals are UNIX's venerable asynchronous notification mechanism — a process is interrupted mid-stride to run a handler. Threads share one address space for true parallelism, at the cost of synchronization. This module lays the groundwork for both.
Nhóm 5 · 3 chương Module 5 · 3 chapters
Giao tiếp liên tiến trình và thư viện chia sẻ IPC and Shared Libraries
Tiến trình cần nói chuyện với nhau: đường ống (pipe) nối đầu ra lệnh này vào đầu vào lệnh kia, còn ánh xạ bộ nhớ (mmap) cho nhiều tiến trình dùng chung một vùng nhớ hoặc nạp thẳng tệp vào không gian địa chỉ. Chương về thư viện chia sẻ nối thẳng sang chủ đề liên kết của CS:APP — vì sao .so được nạp và gắn địa chỉ lúc chạy.
Phần này nói về cách các chương trình "chuyền tay" dữ liệu cho nhau — qua đường ống như trong shell (a | b), hoặc qua vùng nhớ dùng chung — và cách một thư viện được nhiều chương trình dùng lại. Nhớ nhé: pipe là băng chuyền, mmap là kho chung.
Processes need to talk: a pipe wires one command's output into another's input, while memory mapping (mmap) lets several processes share one region or load a file straight into the address space. The shared-libraries chapter connects directly to CS:APP's linking theme — why a .so is loaded and relocated at run time.
Nhóm 6 · 4 chương Module 6 · 4 chapters
Sockets, daemon và I/O nâng cao Sockets, Daemons and Advanced I/O
Nhóm cuối đưa chương trình ra mạng và vào môi trường máy chủ. Sockets là API để nói chuyện qua TCP/IP; daemon là tiến trình chạy ngầm phục vụ lâu dài; còn các mô hình I/O thay thế (select, poll, epoll) là cách một tiến trình đơn phục vụ hàng nghìn kết nối cùng lúc — nền tảng của mọi máy chủ hiệu năng cao.
Phần cuối cho chương trình "ra khỏi máy": gửi dữ liệu qua mạng, chạy ngầm như một dịch vụ, và phục vụ nhiều kết nối một lúc mà không cần nghìn luồng. Nhớ nhé: epoll là bí quyết để một server gánh được rất nhiều khách.
The final module takes a program onto the network and into the server environment. Sockets are the API for speaking over TCP/IP; a daemon is a background process serving for the long haul; and alternative I/O models (select, poll, epoll) are how one process serves thousands of connections at once — the basis of every high-performance server.
Bản đồ toàn cuốn sách Bản đồ cả cuốn sách Whole-book map
Một trang tổng hợp gom các chương cốt lõi thành những mạch lập luận, kèm các sợi chỉ chạy xuyên nhóm và lộ trình đọc gợi ý. Trang này sẽ được bổ sung sau khi các chương đã đủ.
Một trang gom các chương lại thành vài nhóm lớn, chỉ ra những ý lặp đi lặp lại và gợi ý cách đọc. Nhớ nhé: trang này sẽ mở khi đã có đủ chương.
A synthesis page gathering the core chapters into movements, with threads that cut across the modules and suggested reading routes. It will be added once enough chapters exist.
Cách dùng trang này How to use this companion
Ba mức đọc, hai ngôn ngữ Three reading levels, two languages
Dễ hiểu — giải thích bằng đời thường, có ví dụ thêm vào, mỗi đoạn kết bằng một câu "Nhớ nhé". Dành cho người mới.
Easy — plain-language explanation with added analogies, each passage closing on a "Nhớ nhé" takeaway. For newcomers.
Chuẩn — bám sát mạch của tác giả, đủ chi tiết để làm việc thật. Đây là mức mặc định.
Standard — follows the author's own line of argument, detailed enough to work from. This is the default.
Đầy đủ — mở thêm các khối cơ chế: chi tiết kỹ thuật, và những chỗ cần đối chiếu với tài liệu hiện hành.
Full — opens the mechanism blocks: technical detail, and the places worth checking against current documentation.
Nguyên tắc cao nhất của bộ trang này là không bịa. Mọi con số, trích dẫn, lệnh hay ví dụ được gán cho tác giả đều có chú nguồn 1 dẫn tới một nguồn ngoài có thật. Khi sách và tài liệu hiện hành nói khác nhau, phần thân giữ cách nói của sách, còn chỗ lệch được nêu riêng trong khối Đầy đủ kèm nguồn của nó.
Trang này không tự nghĩ ra thông tin. Con số nào cũng có chỗ dẫn nguồn để bạn kiểm tra. Nhớ nhé: thấy số mà không có nguồn thì đừng tin — kể cả ở đây.
The supreme rule across these pages is không bịa — nothing invented. Every figure, quotation, command or author-attributed example carries a citation 1 resolving to a real external source. Where the book and current documentation disagree, the body keeps the book's framing and the divergence is named separately in a Full block with its own source.