GIÁO TRÌNH HỆ ĐIỀU HÀNH – CHƯƠNG 2: TIẾN TRÌNH VÀ LUỒNG (KHOA CNTT - HỌC VIỆN KỸ THUẬT MẬT MÃ)

Tổng quan về giáo trình (250-300 từ)

Tài liệu học tập Chương 2: Tiến trình và Luồng thuộc học phần Hệ điều hành do Khoa Công nghệ Thông tin – Học viện Kỹ thuật Mật mã (HvKTMM) biên soạn. Học phần này giữ vị trí cốt lõi trong khối kiến thức cơ sở ngành của chương trình đào tạo kỹ sư Công nghệ thông tin và An toàn thông tin. Nội dung chương tập trung trang bị cho người học bản chất của sự thực thi chương trình trong hệ thống máy tính, chuyển tiếp từ trạng thái tĩnh của mã nguồn sang trạng thái động của các đơn vị xử lý.

Mục tiêu học tập của chương bao gồm:

  • Xác định và phân biệt các khái niệm tiến trình (process), luồng (thread) và tiểu trình.
  • Phân tích chu trình sống, các trạng thái tiến trình (new, ready, running, waiting, terminated) và cơ chế chuyển đổi trạng thái.
  • Trình bày cấu trúc và vai trò của Khối điều khiển tiến trình (Process Control Block - PCB) cùng nguyên lý chuyển ngữ cảnh.
  • Nắm vững các thuật toán và danh sách điều phối CPU (Ready list, Waiting list, Device list) của trình lập lịch ngắn kỳ và dài kỳ.
  • Vận dụng các cơ chế giao tiếp liên tiến trình (IPC - Inter-Process Communication) và phân tích các mô hình đa luồng.

Tài liệu được xây dựng theo cách tiếp cận phân rã từ tổng thể đến chi tiết: bắt đầu từ khái niệm thực thể tiến trình, các thao tác quản lý vòng đời, cơ chế phân phối tài nguyên, chuyển tiếp sang các giải pháp truyền thông liên tiến trình và cấu trúc bên trong của luồng xử lý. Điểm đặc sắc của giáo trình là việc kết hợp giữa lý thuyết điều phối hệ thống kinh điển và các ví dụ hiện thực hóa trên các nền tảng phổ biến như Windows và Android.


Nội dung kiến thức cốt lõi (500-600 từ)

Các chương/chủ đề chính

Nội dung của chương được tổ chức logic thành 6 chủ đề chính:

  1. Khái niệm và Cấu trúc Tiến trình: Tiến trình được định nghĩa là một chương trình đang thực thi, bao gồm mã nguồn (code - cố định), dữ liệu (data), bộ đếm chương trình (Program Counter - PC), ngăn xếp (Stack) và các giá trị thanh ghi (Register values). Cấu trúc Khối điều khiển tiến trình (PCB) được mô tả chi tiết với 5 trường thông tin: Định danh tiến trình (PID), Trạng thái tiến trình, Ngữ cảnh tiến trình (trạng thái CPU, thông tin lập lịch, quản lý bộ nhớ, tài nguyên sử dụng và tạo lập), Thông tin giao tiếp và Thông tin thống kê.

  2. Vòng đời và Trạng thái Tiến trình: Phân tích mô hình chuyển đổi trạng thái từ khởi tạo (new), sẵn sàng (ready), thực thi (running), chờ đợi (waiting) đến kết thúc (terminated). Trạng thái tiến trình trong hệ điều hành di động Android cũng được đưa vào cấu trúc khảo sát.

  3. Lập lịch và Điều phối Tiến trình: Phân biệt hai nhóm tiến trình hướng vào/ra (I/O-bound process) và tiến trình hướng tính toán (CPU-bound process). Cung cấp cơ chế hoạt động của trình lập lịch dài kỳ (Long-term scheduler - đưa tiến trình từ bộ nhớ ngoài vào RAM, kiểm soát mức đa chương) và trình lập lịch ngắn kỳ (Short-term scheduler - cấp phát CPU thực theo mili-giây thông qua lượng tử thời gian quantum). Quản lý hàng đợi gồm Ready list (duy nhất trong hệ thống) và Device list.

  4. Các Hoạt động Quản trị Tiến trình: Các thao tác gồm tạo lập (create), kết thúc (destroy/terminate), tạm dừng (suspend), tái kích hoạt (resume) và thay đổi độ ưu tiên. Quá trình tạo lập xây dựng nên cây tiến trình (process tree) với quan hệ cha-con; thiết lập các mức độ chia sẻ tài nguyên (toàn bộ, tập con, hoặc không chia sẻ) và không gian địa chỉ (bản sao đệ quy hoặc nạp chương trình mới).

  5. Tiến trình Hợp tác và Giao tiếp Liên tiến trình (IPC): Khảo sát mô hình Nhà sản xuất – Người tiêu thụ (Producer - Consumer). Phân loại và so sánh 5 cơ chế truyền thông:

    • Tín hiệu (Signal): Ngắt phần mềm không đồng bộ, bảng tín hiệu, trình xử lý signal handler (ví dụ: lệnh End Task, phím tắt Ctrl+F4 trên Windows).
    • Đường ống (Pipe): Kênh truyền một chiều FIFO, dòng byte giới hạn 4096 ký tự, thao tác qua read/write, đồng bộ hóa khóa kênh khi đầy/rỗng, giới hạn trong quan hệ cha-con cùng máy tính.
    • Vùng nhớ chia sẻ (Shared Memory): Kết gắn không gian nhớ chung, tốc độ trao đổi nhanh nhất nhưng đòi hỏi kỹ thuật đồng bộ hóa để tránh xung đột dữ liệu.
    • Trao đổi thông điệp (Message Passing): Giao tiếp không chia sẻ địa chỉ qua hai hàm nguyên thủy send()receive().
    • Sockets: Điểm cuối truyền thông định danh bằng địa chỉ IP kết hợp số hiệu cổng (IP:Port), áp dụng cho mô hình mạng phân tán Client - Server.
  6. Mô tả Luồng và Đa luồng: Luồng là đơn vị xử lý cơ bản trong hệ thống, bao gồm Thread ID, Program Counter, tập thanh ghi và vùng Stack riêng; đồng thời chia sẻ chung đoạn mã, dữ liệu và tệp mở với các luồng khác trong cùng tiến trình.

flowchart TD
    subgraph ProcessStructure ["Cấu trúc Tiến trình (Process)"]
        PCB["Khối PCB (PID, State, Scheduling, Registers)"]
        Code["Code (Không đổi)"]
        Data["Data (Biến toàn cục, bộ nhớ tĩnh)"]
        Heap["Heap (Bộ nhớ cấp phát động)"]
    end

    subgraph ThreadStructure ["Các Luồng con (Threads)"]
        T1["Thread 1: PC, Stack, Registers riêng"]
        T2["Thread 2: PC, Stack, Registers riêng"]
        T3["Thread 3: PC, Stack, Registers riêng"]
    end

    ProcessStructure --> T1
    ProcessStructure --> T2
    ProcessStructure --> T3

Kiến thức nền tảng được xây dựng

  • Lý thuyết Đa chương trình (Multiprogramming) và Chia sẻ thời gian (Time-sharing): Nguyên lý tối ưu hóa công suất CPU thông qua cơ chế chuyển đổi ngữ cảnh liên tục giữa các tiến trình.
  • Khái niệm CPU Thực và CPU Ảo: Hệ thống đa chương tạo ra cảm giác thực thi song song cho người dùng bằng cách phân phối các lát cắt CPU logic (CPU ảo) với tốc độ thấp hơn CPU thực.
  • Nguyên tắc Đồng bộ và Bất đồng bộ trong IPC: Xử lý điều kiện tranh chấp (race condition), khóa chết (deadlock) khi hai pipe nối kết đều đầy hoặc trống.

Kỹ năng phát triển

  • Kỹ năng kỹ thuật (Technical skills): Thiết lập cấu trúc dữ liệu mô tả tiến trình; cấu hình các tham số truyền thông Socket (địa chỉ IP và Port); định dạng các gói tin trong hàng đợi thông điệp.
  • Kỹ năng phân tích (Analytical skills): Phân loại hành vi tiến trình (I/O-bound hay CPU-bound) để áp dụng thuật toán điều phối phù hợp; nhận diện nguy cơ deadlock trong kênh truyền dữ liệu.
  • Năng lực thực hành (Practical competencies): Thiết kế kiến trúc đa luồng cho các ứng dụng thực tế (như xử lý đồng thời giao diện, nhập liệu và kiểm tra văn bản; hoặc xây dựng cơ chế phục vụ đa kết nối trên máy chủ Web).

Phương pháp giảng dạy và học tập (300-350 từ)

Phương pháp tiếp cận sư phạm (Pedagogical approach)

Giáo trình sử dụng phương pháp diễn dịch kết hợp mô hình hóa:

  • Khởi đầu bằng các định nghĩa hình thức (hình học hóa chu trình trạng thái tiến trình).
  • Chuyển tiếp sang chi tiết hóa cấu trúc dữ liệu hệ thống (các trường trong PCB, bảng vector ngắt tín hiệu).
  • Kết thúc bằng các giải pháp kiến trúc thực tế (so sánh chi phí tài nguyên giữa tạo lập tiến trình mới và khởi tạo luồng).

Bài tập và Tình huống nghiên cứu (Case studies)

Tài liệu cung cấp các bài toán và ví dụ điển hình:

  • Cây tiến trình tính toán: Mô hình hóa bài toán "Nhập 100 số, in các số nguyên tố" được phân rã thành tiến trình cha và các tiến trình con đảm nhiệm việc kiểm tra số nguyên tố, in kết quả và kiểm tra số dương.
  • Ứng dụng văn phòng đa luồng: Phân rã phần mềm xử lý văn bản thành 3 luồng độc lập: luồng 1 hiển thị hình ảnh/văn bản, luồng 2 tiếp nhận sự kiện bàn phím từ người dùng, luồng 3 thực thi kiểm tra chính tả và ngữ pháp trong nền.
  • Máy chủ Web đa luồng (Web-server): Mô hình luồng lắng nghe (listener thread) đón nhận yêu cầu kết nối từ Client và tạo luồng làm việc (worker thread) để xử lý thay vì tạo tiến trình riêng biệt gây tốn tài nguyên.
graph TD
    Parent["Tiến trình Cha: Nhập 100 số"] --> Child1["Tiến trình Con 1: Kiểm tra nguyên tố"]
    Parent --> Child2["Tiến trình Con 2: Kiểm tra số dương"]
    Child1 --> SubChild["Tiến trình Con: In kết quả"]

Phương pháp đánh giá và Hướng dẫn tự học

  • Phương pháp đánh giá: Đánh giá thông qua việc giải thích các sơ đồ chuyển trạng thái, khả năng truy vết các giá trị thanh ghi khi xảy ra ngắt, và so sánh định lượng các cơ chế IPC (độ trễ, phạm vi áp dụng, cơ chế đồng bộ hóa).
  • Hướng dẫn tự học: Sinh viên cần lập bảng đối sánh giữa tiến trình đơn luồng và tiến trình đa luồng; phân tích các kịch bản khóa chết (deadlock) khi sử dụng cơ chế truyền thông đường ống hai chiều; mô phỏng hoạt động phân phối lượng tử thời gian (quantum) giữa các tiến trình trong hàng đợi ready.

Điểm nổi bật và cập nhật (250-300 từ)

Tài liệu Chương 2: Tiến trình và Luồng tích hợp các nội dung kỹ thuật gắn liền với các nền tảng hệ điều hành hiện đại và kiến trúc ứng dụng thực tế:

  • Tích hợp mô hình tiến trình di động: Bổ sung mô hình các trạng thái tiến trình trong hệ điều hành Android, mở rộng từ mô hình 5 trạng thái kinh điển sang các ràng buộc về quản lý bộ nhớ trên thiết bị di động.
  • Minh họa bằng cơ chế hệ điều hành Windows: Các khái niệm lý thuyết về tín hiệu (Signal) và điều khiển luồng được ánh xạ trực tiếp vào các tác vụ cụ thể của Windows như chức năng kết thúc tiến trình qua End Task, thao tác Close all trên thanh tác vụ (taskbar), và ngắt ứng dụng thông qua tổ hợp phím tắt (Ctrl+F4).
  • Chuyển dịch kiến trúc phần mềm sang mô hình Đa luồng: Phân tích nguyên nhân chuyển đổi từ kiến trúc đơn luồng nặng nề sang kiến trúc đa luồng đáp ứng nhanh (responsiveness). Minh chứng rõ nét qua mô hình kiến trúc Web Server: chuyển từ mô hình tạo tiến trình độc lập (chi phí phân bổ bộ nhớ cao) sang mô hình cấp phát luồng phục vụ yêu cầu kết nối.
  • Mở rộng giao tiếp từ nội bộ sang phân tán: Hệ thống hóa cơ chế IPC từ phạm vi nội bộ một máy đơn lẻ (Pipes, Vùng nhớ chia sẻ) mở rộng sang môi trường mạng phân tán qua giao thức Socket (định danh bằng cặp IP và Port).

Đối tượng sử dụng giáo trình (200-250 từ)

  • Sinh viên mục tiêu: Sinh viên đại học năm thứ hai hoặc năm thứ ba thuộc các chuyên ngành Công nghệ thông tin, An toàn thông tin, Kỹ thuật mật mã, và Kỹ thuật phần mềm.
  • Kiến thức tiên quyết:
    • Kiến trúc máy tính (tổ chức CPU, bộ nhớ RAM, thanh ghi, cơ chế ngắt).
    • Ngôn ngữ lập trình C/C++ (quản lý con trỏ, cấp phát bộ nhớ động, lời gọi hàm hệ thống).
    • Cấu trúc dữ liệu và giải thuật (ngăn xếp Stack, hàng đợi Queue, cấu trúc cây).
  • Giảng viên và Cách thức sử dụng: Tài liệu được thiết kế làm khung bài giảng lý thuyết (Slide bài giảng). Giảng viên sử dụng các sơ đồ PCB, mô hình cây tiến trình và các case study về Web server để tổ chức bài giảng tương tác, ra đề bài tập lập trình mô phỏng điều phối và đồng bộ hóa tiến trình.
  • Tự học và Tài liệu tham khảo: Tài liệu là cơ sở tham chiếu chuẩn cho kỹ sư phần mềm cần tối ưu hóa hiệu năng ứng dụng, xử lý đa nhiệm (multitasking), lập trình mạng (Socket programming) và thiết kế hệ thống có tính sẵn sàng cao.

Câu hỏi thường gặp (250-300 từ)

1. Giáo trình này phù hợp với ai?

Tài liệu được thiết kế cho sinh viên đại học chuyên ngành Công nghệ thông tin, An toàn thông tin và các kỹ sư phần mềm cần củng cố kiến thức nền tảng về cơ chế vận hành bên dưới của hệ điều hành.

2. Cần kiến thức nền nào để học chương này?

Người học cần nắm vững kiến thức về Kiến trúc máy tính (tập thanh ghi, con trỏ lệnh PC, ngăn xếp Stack), cấu trúc dữ liệu hàng đợi và kỹ năng lập trình hệ thống cơ bản trên C/C++.

3. Điểm khác biệt giữa tiến trình (Process) và luồng (Thread) trong giáo trình là gì?

Tiến trình là đơn vị sở hữu tài nguyên độc lập với không gian địa chỉ riêng biệt, việc tạo lập tốn nhiều chi phí hệ thống. Luồng là đơn vị thực thi cơ bản bên trong tiến trình; các luồng chia sẻ chung đoạn mã, dữ liệu và tài nguyên của tiến trình cha nhưng sở hữu Stack và tập thanh ghi riêng.

4. Khi nào nên sử dụng Pipe và khi nào nên dùng Vùng nhớ chia sẻ (Shared Memory)?

  • Dùng Pipe khi cần truyền luồng byte một chiều tuần tự (FIFO) giữa hai tiến trình có quan hệ cha-con trên cùng một máy tính.
  • Dùng Vùng nhớ chia sẻ khi cần tốc độ truyền dữ liệu tối đa giữa các tiến trình và có cài đặt các cơ chế đồng bộ hóa để kiểm soát tranh chấp dữ liệu.

5. Có tài liệu bổ trợ nào kèm theo nội dung này không?

Nội dung chương này liên kết trực tiếp với các bài thực hành lập trình hệ thống (System Calls về tạo tiến trình fork(), exec(), quản lý luồng pthread, lập trình Socket) trong chương trình thực hành Hệ điều hành của Khoa CNTT - HvKTMM.


Kết luận (150 từ)

Chương 2 Tiến trình và Luồng cung cấp khung lý thuyết hoàn chỉnh về cơ chế quản trị và điều phối các đơn vị thực thi trong hệ điều hành máy tính. Nội dung tài liệu làm rõ bản chất của quá trình phân chia thời gian CPU, cấu trúc quản lý PCB, các phương thức giao tiếp liên tiến trình (IPC) và mô hình đa luồng.

Lộ trình học tập đề xuất:

  1. Nắm vững vòng đời tiến trình và cấu trúc Khối điều khiển tiến trình (PCB).
  2. Phân tích nguyên lý lập lịch điều phối CPU (Ready list, Device list).
  3. Thực hành cài đặt và so sánh các cơ chế giao tiếp liên tiến trình (Pipe, Shared Memory, Socket).
  4. Thiết kế các ứng dụng đa luồng (Multi-threaded applications) tối ưu hóa tài nguyên.

Sinh viên có thể kết hợp tài liệu này với các tài liệu tham khảo chuẩn quốc tế về Hệ điều hành (Operating System Concepts của Silberschatz, Galvin, Gagne) và hệ thống bài tập thực hành mã nguồn mở trên nền tảng Linux.