Bài giảng Nguyên lý hệ điều hành: Chương 4 - Phạm Quang Dũng

7 71 0
Bài giảng Nguyên lý hệ điều hành: Chương 4 - Phạm Quang Dũng

Đang tải... (xem toàn văn)

Thông tin tài liệu

Chương 4 của bài giảng Nguyên lý hệ điều hành cung cấp những kiến thức về luồng (Threads) trong hệ điều hành. Chương này trình bày 4 nội dung chính, đó là: Giới thiệu chung về luồng, các mô hình đa luồng, các vấn đề về luồng, một số loại luồng. Mời các bạn cùng tham khảo.

Nội dung chương BÀI GIẢNG NGUYÊN LÝ HỆ ĐIỀU HÀNH „ Giới thiệu chung „ Các mơ hình đa luồng Chương 4: Luồng (Threads) „ Các vấn đề luồng „ Một số loại luồng Phạm Quang Dũng Bộ mơn Khoa học máy tính Khoa Cơng nghệ thơng tin Trường Đại học Nông nghiệp Hà Nội Website: fita.hua.edu.vn/pqdung Bài giảng Nguyên lý Hệ điều hành 4.1 Giới thiệu chung 4.2 Phạm Quang Dũng ©2008 Các tiến trình đơn luồng đa luồng „ Luồng đơn vị sử dụng CPU „ Là dòng điều khiển tiến trình Nếu tiến trình có nhiều luồng, thực nhiều tác vụ thời điểm „ Luồng bao gồm: z Mã luồng (thread ID) z Bộ đếm chương trình (PC) z Tập ghi (register set) z stack „ Các luồng tiến trình chia sẻ với đoạn mã (code), đoạn liệu (data) tài nguyên hệ thống khác tệp mở, tín hiệu Bài giảng Nguyên lý Hệ điều hành 4.3 Phạm Quang Dũng ©2008 Bài giảng Nguyên lý Hệ điều hành 4.4 Phạm Quang Dũng ©2008 Sự thúc đẩy Lợi ích tiến trình đa luồng „ Đáp ứng nhanh: cho phép chương trình tiếp tục thực „ Tạo tiến trình công việc "nặng nhọc" „ Nhiều phần mềm chạy PC đa luồng (multithreaded) Một ứng dụng thường thực tiến trình riêng với vài luồng điều khiển chí phận bị khóa thực hoạt động dài „ Chia sẻ tài nguyên: lợi ích chia sẻ code cho phép ứng dụng có số luồng khác hoạt động không gian địa „ Vd1: Trình soạn thảo văn z luồng hiển thị ảnh, chữ „ Kinh tế: tạo chuyển ngữ cảnh luồng kinh tế so với z luồng đọc phím nhấn người sử dụng z luồng thực việc kiểm tra tả ngữ pháp tiến trình Trong HĐH Solaris 2, tạo tiến trình chậm 30 lần, chuyển ngữ cảnh tiến trình chậm lần với luồng „ Vd2: web-server tạo luồng nghe yêu cầu từ client „ Thực kiến trúc multiprocessor: lợi ích đa Khi có u cầu, thay tạo tiến trình khác, tạo luồng khác để phục vụ yêu cầu luồng tăng lên kiến trúc multiprocessor, luồng chạy song song processor Bài giảng Nguyên lý Hệ điều hành 4.5 Phạm Quang Dũng ©2008 Bài giảng Nguyên lý Hệ điều hành User Threads 4.6 Phạm Quang Dũng ©2008 Kernel Threads „ Được hỗ trợ kernel thực thư viện luồng mức người sử dụng (user level) „ Được hỗ trợ trực tiếp HĐH „ Kernel thực tạo luồng, lập lịch quản lý không „ Tất tạo luồng lập lịch thực khơng gian người sử dụng Do đó, user-level thread nói chung nhanh để tạo quản lý gian kernel Do đó, tạo quản lý kernel thread nói chung chậm user thread „ Nếu luồng thực system call khóa, kernel có „ Tuy nhiên, chúng có hạn chế: kernel đơn luồng, thể lập lịch luồng khác để thực Trong mơi trường có user-level thread thực system call khóa, multiprocessor, kernel lập lịch luồng gây cho tồn tiến trình bị khóa, tiến processor khác trình khác chạy ứng dụng „ Vd: Các HĐH nay: Windows NT/2000/XP, Solaris, „ Vd: POSIX Pthreads, Win32 threads, Java threads Bài giảng Nguyên lý Hệ điều hành 4.7 Phạm Quang Dũng ©2008 Tru64 UNIX, LINUX, Mac OS X Bài giảng Nguyên lý Hệ điều hành 4.8 Phạm Quang Dũng ©2008 4.2 Các mơ hình đa luồng Mơ hình Many-to-One „ Để chạy CPU, user thread cuối phải ánh xạ vào kernel thread „ Nhiều user-level thread ánh xạ vào „ Nhiều HĐH hỗ trợ user thread kernel thread, thể kernel thread mơ hình đa luồng phổ biến: z Many-to-One z One-to-One „ Quản lý luồng thực không gian người sử dụng z Many-to-Many → nhanh tiến trình dễ bị khóa z 2-level „ Các luồng chạy song song hệ thống multiprocessor „ Vd: Solaris Green Theads, GNU Portable Threads Bài giảng Nguyên lý Hệ điều hành 4.9 Phạm Quang Dũng ©2008 Bài giảng Ngun lý Hệ điều hành Mơ hình One-to-One 4.10 Phạm Quang Dũng ©2008 Mơ hình Many-to-Many „ Mỗi user-level thread ánh xạ vào kernel thread „ Nhiều user-level thread (n) ánh xạ vào nhiều kernel thread (m) „ m≤n „ Cho phép tiến trình khác chạy có tiến trình tạo system call khóa „ Cho phép nhiều luồng chạy song song multiprocessor „ Cần giới hạn số luồng hỗ trợ HĐH 4.11 kernel thread tương ứng chạy song song multiprocessor Khi thread thực system call khóa, kernel lập lịch thread khác để thực „ Vd: Solaris trước phiên 9, Windows 2000/NT với gói ThreadFiber „ Vd: Windows NT/2000/XP, Linux, Solaris trở Bài giảng Nguyên lý Hệ điều hành „ Người phát triển tạo user thread tùy ý, Phạm Quang Dũng ©2008 Bài giảng Nguyên lý Hệ điều hành 4.12 Phạm Quang Dũng ©2008 Mơ hình mức 4.3 Các vấn đề luồng „ Tương tự Many-to-many, khác cho phép „ Các system call fork() exec() „ Hủy luồng user thread giới hạn kernel thread „ Xử lý tín hiệu „ Ví dụ z IRIX „ Thread pools z HP-UX „ Dữ liệu riêng cho luồng z Tru64 UNIX „ Giao tiếp kernel thư viện luồng z Solaris trở trước Bài giảng Nguyên lý Hệ điều hành 4.13 Phạm Quang Dũng ©2008 Bài giảng Nguyên lý Hệ điều hành „ Là tác vụ thực hủy bỏ thread trước kết thúc „ Vd: nhiều luồng tìm kiếm CSDL, HĐH UNIX có phiên fork luồng tìm thấy, luồng lại nên dừng lại z Một lại tất thread „ Sự hủy luồng diễn theo cách: z Một lại thread gọi fork „ Nếu luồng gọi exec, chương trình xác định tham số exec thay tồn tiến trình (gồm tất z Hủy không đồng bộ: ngừng luồng z Hủy trì hỗn: luồng bị hủy kiểm tra tiên đốn xem có nên bị hủy khơng, cho phép có hội tự hủy theo luồng) Bài giảng Nguyên lý Hệ điều hành Phạm Quang Dũng ©2008 4.3.2 Hủy bỏ luồng 4.3.1 Cá Các system call fork và exec (trong UNIX) „ Nếu luồng chương trình gọi fork(), số 4.14 cách có trật tự 4.15 Phạm Quang Dũng ©2008 Bài giảng Nguyên lý Hệ điều hành 4.16 Phạm Quang Dũng ©2008 4.3.3 Xử lý tín hiệu 4.3.4 Thread Pools „ Các tín hiệu sử dụng HĐH UNIX để báo cho tiến trình biết có kiện đặc biệt xuất „ Các tín hiệu xử lý trình xử lý theo bước: Tín hiệu sinh kiện đặc biệt luồng lúc bắt đầu tiến trình đặt chúng vào pool nơi chúng "ngồi" đợi việc „ Khi server nhận yêu cầu, "đánh thức" luồng pool - sẵn sàng - truyền cho yêu cầu để phục vụ Khi hồn thành, luồng lại trở pool chờ cơng việc khác Tín hiệu đưa đến tiến trình Sau đó, tín hiệu xử lý „ Lợi ích: „ Các lựa chọn: z Dùng luồng tồn phục vụ nhanh so với chờ đợi để z Đưa tín hiệu tới luồng tương ứng dành cho tín hiệu tạo luồng z Đưa tín hiệu tới tất luồng tiến trình z thread pool giới hạn số luồng tồn thời điểm Điều z Đưa tín hiệu tới số luồng tiến trình z Ấn định luồng chuyên nhận tất tín hiệu cho tiến trình Bài giảng Ngun lý Hệ điều hành „ Tư tưởng chung đằng sau thread pool tạo nhiều 4.17 Phạm Quang Dũng ©2008 đặc biệt quan trọng hệ thống hỗ trợ số lượng lớn luồng lúc Bài giảng Nguyên lý Hệ điều hành 4.18 Phạm Quang Dũng ©2008 4.3.5 Dữ liệu riêng luồng 4.3.6 Giao tiếp kernel - thư viện luồng „ Các luồng thuộc tiến trình chia sẻ tài ngun „ Cả mơ hình many-to-many mơ hình 2-mức u tiến trình „ Nhưng số trường hợp: luồng cần liệu riêng „ Ví dụ: hệ thống xử lý giao dịch, ta nên phục vụ giao dịch luồng riêng Hơn giao dịch gán id ⇒ sử dụng liệu riêng cho luồng cầu giao tiếp để trì số lượng thích hợp kernel thread phân phối cho ứng dụng „ upcall –cơ chế giao tiếp kernel thư viện luồng: z Kernel cung cấp ứng dụng gồm tập BXL ảo z ứng dụng lập lịch user thread vào BXL ảo khả dụng z Kernel phải thông báo cho ứng dụng kiện „ Lợi ích: z Cho phép luồng có copy liệu riêng z Hữu ích bạn khơng có kiểm sốt tiến trình tạo luồng „ Sự giao tiếp cho phép ứng dụng trì số lượng kernel thread đắn (nghĩa sử dụng thread pool) Bài giảng Nguyên lý Hệ điều hành 4.19 Phạm Quang Dũng ©2008 Bài giảng Nguyên lý Hệ điều hành 4.20 Phạm Quang Dũng ©2008 4.4 Một số loại luồng 4.4.2 Luồng Windows XP „ Áp dụng cho "họ" Windows: 95/98/2000/XP/NT (Win32 API) 4.4.1 Pthreads „ Là chuẩn POSIX (IEEE 1003.1c), định API cho việc tạo đồng hóa luồng „ Một ứng dụng Windows chạy tiến trình riêng, tiến trình chứa nhiều luồng „ Sử dụng mơ hình ánh xạ one-to-one „ API xác định hành vi (behavior) thư viện luồng, thực thi (implementation) phụ thuộc vào phát triển thư viện „ Phổ biến HĐH dạng UNIX (Solaris, Linux, Mac OS X, True64 UNIX) „ Cũng hỗ trợ thư viện fiber, cung cấp chức mơ hình many-to- many „ Bằng cách sử dụng thư viện luồng, luồng tiến trình truy nhập khơng gian địa tiến trình „ Các thành phần luồng: z thread ID z tập ghi biểu diễn trạng thái processor z user stack kernel stack z vùng lưu trữ riêng Bài giảng Nguyên lý Hệ điều hành 4.21 Phạm Quang Dũng ©2008 Bài giảng Nguyên lý Hệ điều hành 4.4.3 Luồng LINUX 4.22 context luồng Phạm Quang Dũng ©2008 4.4.4 Luồng Java „ Ngồi fork(), Linux cung cấp system call tương tự „ Java số NNLT có cung cấp hỗ clone() để tạo luồng, thay tạo copy trợ tạo quản lý luồng mức ngơn ngữ: có lệnh tạo thao tác với luồng điều khiển chương trình tiến trình gọi, tạo tiến trình (tiến trình con) „ Tiến trình trỏ vào cấu trúc liệu tiến trình cha, cho phép tiến trình chia sẻ nhớ tài nguyên khác cha „ Điều thú vị Linux không phân biệt tiến trình luồng Thực tế, Linux thường dùng thuật ngữ task để 4.23 Machine), thư viện luồng hay kernel „ Tất chương trình Java chứa luồng điều khiển đơn (khi chương trình có phương thức main) dịng điều khiển chương trình Bài giảng Nguyên lý Hệ điều hành „ Các luồng quản lý JVM (Java Virtual Phạm Quang Dũng ©2008 Bài giảng Nguyên lý Hệ điều hành 4.24 Phạm Quang Dũng ©2008 Các kỹ thuật tạo luồng CT Java Tạo lớp dẫn xuất lớp Thread chồng Vd: Tạo luồng Java class Worker1 extends Thread { public void run() { phương thức run() System.out.println("I Am a Worker Thread"); z Một đối tượng lớp dẫn xuất chạy luồng điều khiển riêng JVM Phương thức start thực tạo luồng } } public class ThreadTester { public static void main(String args[]) { Định nghĩa lớp thực thi Runnable interface: Worker1 runner = new Worker1(); runner.start(); public interface Runnable{ System.out.println("I Am The Main Thread"); public abstract void run(); } } } Bài giảng Nguyên lý Hệ điều hành 4.25 Phạm Quang Dũng ©2008 Bài giảng Nguyên lý Hệ điều hành 4.26 Phạm Quang Dũng ©2008 Các trạng thái luồng Java End of Chapter Bài giảng Nguyên lý Hệ điều hành 4.27 Phạm Quang Dũng ©2008 ... } } Bài giảng Nguyên lý Hệ điều hành 4. 25 Phạm Quang Dũng ©2008 Bài giảng Nguyên lý Hệ điều hành 4. 26 Phạm Quang Dũng ©2008 Các trạng thái luồng Java End of Chapter Bài giảng Nguyên lý Hệ điều. .. vùng lưu trữ riêng Bài giảng Nguyên lý Hệ điều hành 4. 21 Phạm Quang Dũng ©2008 Bài giảng Nguyên lý Hệ điều hành 4. 4.3 Luồng LINUX 4. 22 context luồng Phạm Quang Dũng ©2008 4. 4 .4 Luồng Java „ Ngoài... threads Bài giảng Nguyên lý Hệ điều hành 4. 7 Phạm Quang Dũng ©2008 Tru 64 UNIX, LINUX, Mac OS X Bài giảng Nguyên lý Hệ điều hành 4. 8 Phạm Quang Dũng ©2008 4. 2 Các mơ hình đa luồng Mơ hình Many-to-One

Ngày đăng: 11/05/2021, 01:26

Từ khóa liên quan

Mục lục

  • BÀI GIẢNG NGUYÊN LÝ HỆ ĐIỀU HÀNH Chương 4: Luồng (Threads)

  • Nội dung chương 4

  • 4.1. Giới thiệu chung

  • Các tiến trình đơn luồng và đa luồng

  • Sự thúc đẩy

  • Lợi ích của tiến trình đa luồng

  • User Threads

  • Kernel Threads

  • 4.2. Các mô hình đa luồng

  • Mô hình Many-to-One

  • Mô hình One-to-One

  • Mô hình Many-to-Many

  • Mô hình 2 mức

  • 4.3. Các vấn đề về luồng

  • 4.3.1. Các system call fork và exec (trong UNIX)

  • 4.3.2. Hủy bỏ luồng

  • 4.3.3. Xử lý tín hiệu

  • 4.3.4. Thread Pools

  • 4.3.5. Dữ liệu riêng của luồng

  • 4.3.6. Giao tiếp kernel - thư viện luồng

Tài liệu cùng người dùng

Tài liệu liên quan