Chuyên đề Operating System: process và thread, memory management, file system, I/O multiplexing, Linux và Shell
Đây là chuyên đề Operating System dành cho việc học backend và ôn tập phỏng vấn, tổng hợp kiến thức cơ bản về Operating System, process và thread, inter-process communication, lock và synchronization, memory management, virtual memory, zero-copy, I/O multiplexing, file system, Linux và Shell.
Dành cho ai
- Backend developer đang học có hệ thống kiến thức cơ bản về Operating System.
- Người chuẩn bị cho câu hỏi phỏng vấn Operating System trong tuyển dụng campus, tuyển dụng người đã có kinh nghiệm và các công ty công nghệ vừa/lớn.
- Độc giả chỉ học thuộc rời rạc về process và thread, deadlock, memory management, Linux command.
- Kỹ sư muốn xây nền tảng cho Java Concurrency, JVM, database và network programming.
Trọng tâm học
- Operating System chịu trách nhiệm quản lý CPU, memory, file, I/O và process, là nền tảng để hiểu cơ chế vận hành của phần mềm ở tầng trên.
- Process, thread và inter-process communication là các khái niệm nền tảng của concurrent programming, performance của server và troubleshooting.
- Lock và synchronization, deadlock, context switch, scheduling là các chủ đề thường gặp trong phỏng vấn.
- Memory management, virtual memory, paging, page replacement giúp hiểu JVM, database và cache.
- Zero-copy và I/O multiplexing giúp hiểu các component hiệu năng cao như Kafka, RocketMQ, Redis, Nginx, Netty.
- Linux và Shell là những kỹ năng thường dùng trong backend development, deploy, troubleshooting và viết automation script.
Thứ tự đọc đề xuất
- Tổng hợp câu hỏi phỏng vấn Operating System thường gặp (phần 1): trước tiên nắm các câu hỏi trọng tâm về kiến thức cơ bản của Operating System, process và thread, deadlock, memory management.
- Tổng hợp câu hỏi phỏng vấn Operating System thường gặp (phần 2): tiếp tục bổ sung các vấn đề về file system, I/O, Linux.
- Giải thích chi tiết process và thread: khác biệt, trạng thái, communication, context switch và virtual thread: tìm hiểu có hệ thống về process, thread, PCB/TCB, fork/exec/wait, thread model và context switch.
- Giải thích chi tiết interrupt, exception và system call: từ kernel entry đến page fault: lấy
read()làm đầu mối để kết nối hardware interrupt, synchronous exception, system call, signal, page fault và thread switch. - Giải thích chi tiết CPU scheduling và system load: tìm hiểu scheduling algorithm, CFS/EEVDF, load average, CPU usage và cách troubleshooting trong production.
- Giải thích chi tiết inter-process communication (IPC): pipe, message queue, shared memory, Socket và Binder: so sánh các phương án IPC như pipe, message queue, shared memory, semaphore, Socket, Binder.
- Giải thích chi tiết lock và synchronization mechanism trong Operating System: mutex, semaphore, condition variable, spinlock và futex: tìm hiểu ranh giới trách nhiệm của critical section, mutex, semaphore, condition variable, spinlock và futex.
- Giải thích chi tiết deadlock: bốn điều kiện cần, troubleshooting Java deadlock và xử lý database deadlock: làm rõ deadlock wait cycle, bốn điều kiện cần, troubleshooting Java thread deadlock và retry transaction trong database.
- Giải thích chi tiết memory management của Operating System: paging, segmentation, page replacement, Swap và OOM: tìm hiểu memory allocation, fragmentation, page table, page reclaim và OOM.
- Giải thích chi tiết virtual memory: address translation, TLB, page fault và page replacement: kết nối paging, page table, TLB, page fault và page replacement.
- Giải thích chi tiết file system của Operating System: inode, VFS, Page Cache và journaling mechanism: tìm hiểu file, directory, inode, VFS, Page Cache và cơ chế khôi phục từ journal.
- Giải thích chi tiết I/O multiplexing: nguyên lý và khác biệt của select, poll, epoll: tìm hiểu cơ chế kernel phía sau việc một thread xử lý lượng lớn connection.
- Giải thích chi tiết zero-copy: mmap, sendfile và splice: làm rõ copy path và trường hợp sử dụng của traditional I/O, mmap, sendfile, splice.
- Tổng hợp kiến thức cơ bản Linux: nắm cấu trúc directory, file permission, command thường dùng và kỹ năng troubleshooting cơ bản.
- Tổng hợp kiến thức cơ bản Shell programming: học variable, condition, loop, function và cách viết script thường dùng.
Bài viết cốt lõi
- Tổng hợp câu hỏi phỏng vấn Operating System thường gặp (phần 1): bao quát các câu hỏi thường gặp về kiến thức cơ bản của Operating System, process và thread, deadlock, memory management.
- Tổng hợp câu hỏi phỏng vấn Operating System thường gặp (phần 2): tiếp tục hệ thống hóa các điểm kiến thức về file system, I/O, multiplexing, Linux.
- Giải thích chi tiết process và thread: khác biệt, trạng thái, communication, context switch và virtual thread: làm rõ ranh giới resource của process và thread, state transition, cơ chế tạo process trong Linux và Java virtual thread.
- Giải thích chi tiết interrupt, exception và system call: từ kernel entry đến page fault: làm rõ mối quan hệ giữa hardware interrupt, synchronous exception, system call, signal và page fault.
- Giải thích chi tiết CPU scheduling và system load: làm rõ task scheduling, CFS/EEVDF, load average, CPU usage và command troubleshooting thường dùng.
- Giải thích chi tiết inter-process communication (IPC): pipe, message queue, shared memory, Socket và Binder: làm rõ nguyên lý, ưu nhược điểm và cách lựa chọn các phương thức IPC thường gặp.
- Giải thích chi tiết lock và synchronization mechanism trong Operating System: mutex, semaphore, condition variable, spinlock và futex: làm rõ critical section, mutex, semaphore, condition variable, spinlock, futex, memory ordering và context của kernel lock.
- Giải thích chi tiết deadlock: bốn điều kiện cần, troubleshooting Java deadlock và xử lý database deadlock: làm rõ điều kiện hình thành deadlock, resource allocation graph, công cụ troubleshooting Java, deadlock detection của database và retry strategy ở application layer.
- Giải thích chi tiết memory management của Operating System: paging, segmentation, page replacement, Swap và OOM: làm rõ VSZ/RSS/PSS, contiguous allocation, memory fragmentation, buddy system, page table, TLB, page fault, page reclaim và OOM.
- Giải thích chi tiết virtual memory: address translation, TLB, page fault và page replacement: làm rõ virtual address, physical address, paging, multi-level page table, TLB, page fault và page replacement algorithm.
- Giải thích chi tiết file system của Operating System: inode, VFS, Page Cache và journaling mechanism: làm rõ file, directory, inode, dentry, file descriptor, VFS, Page Cache, fsync và cơ chế journaling.
- Giải thích chi tiết I/O multiplexing: nguyên lý và khác biệt của select, poll, epoll: làm rõ hai giai đoạn của network I/O, năm I/O model và khác biệt giữa select, poll, epoll.
- Giải thích chi tiết zero-copy: mmap, sendfile và splice: làm rõ zero-copy thực sự loại bỏ phần nào, cùng các ứng dụng điển hình trong Java NIO, Kafka, RocketMQ.
- Tổng hợp kiến thức cơ bản Linux: giới thiệu Linux directory tree, file permission, command thường dùng, user và process management.
- Tổng hợp kiến thức cơ bản Shell programming: giới thiệu Shell variable, conditional judgment, loop, function, text processing và thực hành script.
Câu hỏi thường gặp
- Process và thread khác nhau thế nào? Thread chia sẻ những resource nào với nhau?
- Inter-process communication có những phương thức nào? Mỗi phương thức phù hợp với trường hợp sử dụng nào?
- Context switch là gì? Việc context switch thường xuyên gây ảnh hưởng gì?
- Mutex, semaphore, condition variable, spinlock và futex lần lượt giải quyết vấn đề gì?
- Điều kiện cần để deadlock xảy ra là gì? Trong Java và database, troubleshooting deadlock như thế nào?
- Virtual memory là gì? Paging và segmentation khác nhau thế nào?
- TLB, page fault và page replacement lần lượt giải quyết vấn đề gì?
- Có những page replacement algorithm nào? Page fault là gì?
- Vì sao zero-copy nhanh? mmap, sendfile, splice khác nhau thế nào?
- inode, hard link, soft link của file system lần lượt là gì?
- select, poll, epoll khác nhau thế nào?
- Hiểu file permission của Linux như thế nào? Có những command troubleshooting thường dùng nào?
- Shell script phù hợp để giải quyết những vấn đề automation nào?
Chuyên đề liên quan
- Hệ thống kiến thức về Computer Basics
- Chuyên đề Computer Network
- Chuyên đề Data Structure
- Java Concurrency
- Giải thích chi tiết memory area của JVM
Lời cuối
Nếu nội dung hữu ích với bạn, hãy tiện tay tặng JavaGuide một Star miễn phí để ủng hộ: GitHub | Gitee.
JavaGuide đã được duy trì gần bảy năm, tích lũy 6100+ commit, với sự chung tay hoàn thiện của 620+ contributor. Star, phản hồi và PR của bạn đều là động lực để dự án tiếp tục cập nhật.
Nếu bạn đang chuẩn bị phỏng vấn backend / phát triển ứng dụng AI, có thể tham khảo Knowledge Planet của tôi, bao gồm các project thực tế về backend và AI, tối ưu CV, hỏi đáp 1-1 và tài liệu về các trọng điểm thường gặp, đã được duy trì liên tục sáu năm.
