You are on page 1of 44

NGUYÊN LÝ HỆ ĐIỀU HÀNH

LUỒNG (TUYẾN)
Nội dung
 Khái niệm luồng (tuyến)
 Mô hình đa luồng
 Thư viện
 Xuất bản luồng
 Ví dụ
 Linux
Khái niệm cơ bản
 Là một đơn vị cơ bản về khả năng sử dụng CPU
 Tuyến bao gồm
 Định danh
 Bộ đếm chương trình

 Tập thanh ghi

 Stack

 Các tuyến của cùng một tiến trình chia sẻ


 Code section
 Data section

 Tài nguyên khác


Tiến trình đơn tuyến – đa tuyến
Khái niệm cơ bản (tiếp)
 Tiến trình truyền thống chỉ có 1 tuyến
 Hệ thống mới: đa tuyến
 Có thể thực thi nhiều nhiệm vụ tại cùng một thời điểm

 VD: Word processor


 Web browser
Lợi ích
 Đáp ứng yêu cầu người dùng
 Chia sẻ tài nguyên
 Hiệu quả
 Khả năng mở rộng
Tuần tự trên hệ thống đơn nhân
Song song trên hệ thống đa nhân
Lập trình đa nhân
 Hệ thống đa nhân là thách thức cho người lập trình
 Xác định nhiệm vụ
 Công bằng

 Phân tách dữ liệu

 Phụ thuộc dữ liệu

 Kiểm tra và gỡ lỗi


Các kiểu song song
 Hai kiểu song song
 Song song dữ liệu
◼ Ví dụ: tính tổng N phần trong mảng
 Song song tác vụ
Mô hình đa tuyến
 Tuyến mức người dùng - User thread
 Hỗ trợ và quản lý bởi người dùng
 Ba thư viện làm việc với tuyến
◼ POSIX Pthread
◼ Win32 thread
◼ Java thread

 Tuyến mức nhân - Kernel thread


 Hỗ trợ và quản lý trực tiếp bởi hệ điều hành
 VD:
◼ Windows XP, Linux, Mac OS
 Giữa chúng có mối quan hệ mật thiết
Mô hình đa tuyến
Mô hình đa tuyến (tiếp)
 Mô hình nhiều - một
 Nhiều tuyến mức người dùng ánh xạ vào một tuyến mức
nhân
 Tuyến được quản lý bởi thư viện tuyến

 Nhược điểm:
◼ Tiến trình bị block nếu một tuyến bị block
Mô hình đa tuyến (tiếp)
 Mô hình nhiều-một
Mô hình đa tuyến (tiếp)
 Mô hình một - một
 Mô hình một-một ánh xạ một tuyến mức người dùng tới
một tuyến mức nhân
 Số lượng tuyến mức nhân bị giới hạn bởi hệ thống

 Lợi ích
◼ Cho phép chạy tuần tự hay song song
 Nhược điểm
◼ Ảnh hưởng tới sự thực thi của ứng dụng
Mô hình đa tuyến (tiếp)
 Mô hình một-một
Mô hình đa tuyến (tiếp)
 Mô hình nhiều – nhiều
 Mô hình nhiều-nhiều ánh xạ nhiều tuyến mức người dùng
tới một số lượng ít hơn hoặc bằng các tuyến mức nhân
 Cho phép hệ điều hành tạo ra một lượng cần thiết tuyến
mức nhân
 Lợi ích
◼ Có thể tạo ra nhiều tuyến mức người dùng
◼ Có thể chạy song song
◼ Một tuyến bị block không làm ảnh hưởng đến các tuyến khác
Mô hình đa tuyến (tiếp)
 Mô hình nhiều- nhiều
Mô hình đa tuyến (tiếp)
 Mô hình hai mức
 Mô hình hai mức giống mô hình nhiều-nhiều
 Cho phép một tuyến mức người dùng tác động lên một
tuyến mức nhân
Mô hình đa tuyến (tiếp)
 Mô hình hai mức
Giới thiệu một số thư viện tuyến
 Cung cấp cho người lập trình tập các hàm, thủ tục làm
việc với tuyến
 Hai phương pháp hay dùng để cài đặt thư viện
 Hoàn toàn trong không gian người sử dụng
 Hoàn toàn trong không gian nhân và được hỗ trợ trực tiếp
bởi hệ điều hành
 Ba thư viện chính được dùng
 POSIX Pthread
 Win32

 Java
POSIX Pthread
 Cung cấp cả hai mức: người dùng và nhân
 API tạo và đồng bộ tuyến
 Là đặc tả của tuyến, không phải cài đặt
 Phổ biến trên các hệ điều hành UNIX (Solari, Linux,..)
Một ví dụ về Pthread
Một ví dụ về Pthread (tiếp)
Một ví dụ về Win32 Thread
Một ví dụ về Win32 Thread (tiếp)
Tuyến trong JAVA
 Tuyến trong Java được quản lý trực tiếp bởi JVM
 Được cài đặt dựa trên mô hình tuyến của mỗi hệ điều
hành
 Được tạo bởi
 Lớp Extending Thread
 Cài đặt giao diện Runnable
Ví dụ về tuyến trong JAVA
Ví dụ về tuyến trong JAVA (tiếp)
Xuất bản tuyến
 Gọi hệ thống fork() và exec()
 Thread cancellation of target thread
 Không đồng bộ
 Trì hoãn

 Signal handling
 Đồng bộ
 Không đồng bộ
Xuất bản tuyến (tiếp)
 Thread pools
 Thread-specific data
Create Facility needed for data private to thread
 Scheduler activations
Ngữ nghĩa fork() và exec()
 Gọi hệ thống fork(), tiến trình mới nhân bản toàn bộ
tuyến hay chỉ tạo ra tiến trình với 1 tuyến duy nhất?
Hủy bỏ tuyến
 Kết thúc làm việc của một tuyến - tuyến đích - trước khi
nó kết thúc một cách bình thường

 Hai kịch bản


 Đồng bộ: kết thúc phiên làm việc của tuyến đích một cách
tức thì
 Trì hoãn: cho phép tuyến đích định kì kiểm tra
Signal handling
 Tín hiệu trong các hệ thống UNIX được dùng để thông
báo cho một tiến trình biết có một sự kiện sảy ra
 Bộ xử lý tín hiệu được dùng để quản lý tín hiệu điều
khiển tiến trình
 Tín hiệu được sinh ra bởi một sự kiện
 Tín hiệu được chuyển tới tiến trình

 Tín hiệu được xử lý


Thread pools
 Tuyến được tạo ra ngay sau khi tiến trình được tạo và
đặt vào hàng đợi
 Lợi ích
 Thời gian đáp ứng yêu cầu về xử lý nhanh hơn
 Số lượng tuyến của một ứng dụng giới hạn bởi pool
Thread Specific Data
 Mỗi tuyến một không gian dữ liệu riêng
Scheduler Activations
 Là một cơ chế cho phép số lượng tuyến mức nhân tự
điều chỉnh một các linh hoạt cho phù hợp.
 Mô hình nhiều – nhiều và hai mức sử dụng cơ chế này
Scheduler Activations (tiếp)
 Lightweigh process – LWP
 Các hệ thống cài đặt mô hình nhiều- nhiều hay hai mức
đều đặt một cấu trúc dữ liệu trung gian giữa tuyến mức
người dùng và tuyến mức nhân
Scheduler Activations (tiếp)
 Lightweigh process – LWP
 Đối với người dùng: virtual processor
 Đối với kernel: Hệ điều hành sẽ lựa chọn để chạy trên bộ
vi xử lý
 Mỗi một LWP ứng với một tuyến mức nhân

 Nếu một tuyến mức nhân bị block (đợi vào ra) thì LWP
cũng bị block theo
 Schedule activation cung cấp một cơ chế giao tiếp giữa
mức nhân và mức tuyến – upcall
 upcall được quản lý bởi upcall handler
Ví dụ về thread trên windows XP
 Ứng dụng Windows XP thực thi trên một tiến trình đơn
lẻ
 Một tiến trình có một hay nhiều tuyến
 Xử dụng mô hình một – một
 Thư viện fiber cho phép cài đặt nhiều - nhiều
 Một tuyến bao gồm:
 Định danh tuyến
 Tập thanh ghi ghi lại trạng thái của bộ vi xử lý

 user stack và kernel stack riêng biệt

 Vùng lưu trữ dữ liệu riêng


Ví dụ về thread trên windows XP
 Tập thanh ghi, stack, vùng lưu trữ dữ liệu riêng của mỗi
tuyến gọi là context của tuyến
 Cấu trúc của một tuyến
 ETHREAD (executive thread block)
 KTHREAD (kernel thread block)

 TEB (thread environment block)


Cấu trúc tuyến
Ví dụ về thread trên Linux
 Gọi hệ thống fork() nhân bản tiến trình cha
 Thường gọi là tasks thay vì thread
 Linux cung cấp gọi hệ thống clone() tạo tuyến do linux
không phân biệt tuyến và tiến trình
 clone() cho phép tiến trình con chia sẻ không gian địa
chỉ với tiến trình cha
 Cấu trúc task_struct trỏ vào cấu trúc dữ liệu tiến trình
(chia sẻ hay không chia sẻ)
Ví dụ về thread trên Linux

You might also like