Luồng mức người dùng và luồng mức nhân

Một phần của tài liệu Giáo trình môn Hệ Điều Hành PTIT (Trang 53 - 56)

CHƯƠNG 2 : QUẢN LÝ TIẾN TRÌNH

2.2. LUỒNG

2.2.5. Luồng mức người dùng và luồng mức nhân

Ở trên, ta đã xem xét khái niệm luồng và lợi ích của việc sử dụng mơ hình tiến trình với nhiều luồng. Tiếp theo ta sẽ xem xét vấn đề triển khai, cụ thể là luồng được tạo ra và quản lý như thế nào?

Nhìn chung, có thể tạo ra và quản lý luồng ở hai mức: mức người dùng và mức nhân. Luồng mức người dùng được tạo ra và quản lý khơng có sự hỗ trợ của hệ điều hành. Trong khi đó, luồng mức nhân được tạo ra nhờ hệ điều hành và được hệ điều hành quản lý. Luồng mức nhân cịn được gọi là các tiểu trình để nhấn mạnh sự hỗ trợ trực tiếp của hệ điều hành tương tự như đối với tiến trình.

a) Luồng mức người dùng.

Luồng mức người dùng do trình ứng dụng tự tạo ra và quản lý, hệ điều hành không biết về sự tồn tại của những luồng như vậy. Để tạo ra luồng mức người dùng, trình ứng dụng sử dụng thư viện do ngơn ngữ lập trình cung cấp, ví dụ như khi lập trình trên Java. Thư viện hỗ trợ luồng thường bao gồm các hàm tạo, xóa luồng, đồng bộ luồng, thiết lập mức ưu tiên và điều độ luồng, hàm tạo liên lạc với luồng khác và hàm cho phép lưu/khôi phục ngữ cảnh của luồng.

Do hệ điều hành không biết về sự tồn tại của luồng mức người dùng, hệ điều hành vẫn coi tiến trình như một đơn vị duy nhất với một trạng thái tiến trình duy nhất. Việc phân phối CPU được thực hiện cho cả tiến trình thay vì cho từng luồng cụ thể (xem hình 2.8.a).

Việc sử dụng luồng mức người dùng có một số ưu điểm sau:

- Thứ nhất, do luồng được tạo ra và quản lý trong không gian người dùng nên việc chuyển đổi luồng khơng địi hỏi phải chuyển sang chế độ nhân và do vậy tiết kiệm thời gian hơn.

- Thứ hai, trình ứng dụng có thể điều độ luồng theo đặc điểm riêng của mình, khơng phụ thuộc vào phương thức điều độ của hệ điều hành.

- Thứ ba, có thể sử dụng luồng mức người dùng cả trên những hệ điều hành không hỗ trợ đa luồng bằng cách bổ sung thư viện luồng mà các ứng dụng có thể dùng chung. Bên cạnh đó, sử dụng luồng mức người dùng bị ảnh hưởng bởi một số nhược điểm dưới đây:

- Khi một luồng của tiến trình gọi lời gọi hệ thống và bị phong tỏa (tức là phải đợi cho tới khi thực hiện xong lời gọi hệ thống), thì tồn bộ tiến trình sẽ bị phong tỏa và phải đợi cho tới khi lời gọi hệ thống thực hiện xong. Như vậy, luồng mức người dùng không cho phép tận dụng ưu điểm về tính đáp ứng của mơ hình đa luồng.

- Cách tổ chức này không cho phép tận dụng kiến trúc nhiều CPU. Do hệ điều hành phân phối CPU cho cả tiến trình chứ khơng phải từng luồng cụ thể nên tất cả các luồng của tiến trình phải chung nhau một CPU thay vì thực hiện song song trên nhiều CPU khác nhau.

Có một số thư viện hỗ trợ luồng mức người dùng được sử dụng trên thực tế, trong đó có thể kể đến Green threads cho hệ điều hành Solaris và thư viện GNU Portable threads.

Hình 2.8: Mơ hình sử dụng luồng mức người dùng và luồng mức nhân

b) Luồng mức nhân

Luồng mức nhân được hệ điều hành tạo ra và quản lý. Hệ điều hành sẽ cung cấp giao diện lập trình bao gồm một số lời gọi hệ thống mà trình ứng dụng có thể gọi để yêu cầu tạo/xóa luồng và thay đổi tham số liên quan tới quản lý luồng. Hệ điều hành Windows và Linux là hai ví dụ trong việc hỗ trợ luồng mức nhân như vậy.

Ưu điểm chủ yếu của luồng mức nhân là khắc phục được các nhược điểm của luồng mức người dùng. Cụ thể là việc sử dụng luồng mức nhân cho phép tăng tính đáp ứng và khả năng thực hiện đồng thời của các luồng trong cùng một tiến trình. Trên hệ thống với nhiều CPU, luồng mức nhân có thể được cấp CPU khác nhau để thực hiện song song.

Nhược điểm chủ yếu của luồng mức nhân so với luồng mức người dùng là tốc độ. Việc tạo và chuyển luồng đòi hỏi thực hiện trong chế độ nhân và do vậy cần một số thao tác để chuyển từ chế độ người dùng sang chế độ nhân và ngược lại.

P P chế độ người dùng chế độ nhân chế độ nhân chế độ người dùng a) Mơ hình mức người dùng b) Mơ hình mức nhân chế độ người dùng chế độ nhân P c) Mơ hình kết hợp dịng mức người dùng dịng mức nhân P tiến trình PTIT

c) Kết hợp luồng mức người dùng và luồng mức nhân

Có thể kết hợp sử dụng luồng mức người dùng với luồng mức nhân. Theo cách tổ chức này, luồng mức người dùng được tạo ra trong chế độ người dùng nhờ thư viện. Sau đó, luồng mức người dùng được ánh xạ lên một số lượng tương ứng hoặc ít hơn luồng mức nhân. Số lượng luồng mức nhân phụ thuộc vào hệ thống cụ thể, chẳng hạn hệ thống nhiều CPU sẽ có nhiều luồng mức nhân hơn. Cũng có trường hợp hệ thống cho phép người lập trình điều chỉnh số lượng này.

Việc kết hợp luồng mức người dùng với luồng mức nhân cho phép kết hợp ưu điểm của hai phương pháp riêng lẻ. Trình ứng dụng có thể tạo ra rất nhiều luồng mức người dùng. Tùy thuộc vào số lượng CPU, một số luồng có thể chạy song song với nhau. Ngồi ra khi có luồng bị phong tỏa, hệ điều hành có thể phân phối CPU cho luồng khác thực hiện.

Một phần của tài liệu Giáo trình môn Hệ Điều Hành PTIT (Trang 53 - 56)