Nội dung Bài giảng Hệ điều hành Máy tính: Lecture 5 trình bày đến người học những vấn đề liên quan đến Thread (Luồng), cụ thể như: Khái niệm tổng quan, các mô hình multithread, Pthread (POSIX thread), Multithreading trong Solaris,...
(B) Thread (Luồng) Khái niệm tổng quan Các mơ hình multithread Pthread (POSIX thread) Multithreading Solaris BK TP.HCM 25-Aug-16 Khoa Khoa học & Kỹ thuật Máy tính Xem xét lại khái niệm q trình Khái niệm trình truyền thống: trình gồm Không gian địa chứa code, data (Unix: text section, data section) Một luồng thực thi (single thread of execution) BK program counter register stack Các tài nguyên khác (các open file, trình con,…) TP.HCM 25-Aug-16 Khoa Khoa học & Kỹ thuật Máy tính Mở rộng khái niệm trình BK Mở rộng khái niệm trình truyền thống cách thực nhiều luồng thực thi mơi trường q trình Q trình gồm Khơng gian địa Một hay nhiều luồng thực thi, luồng thực thi (thread) có riêng: program counter register stack Các tài nguyên khác (các open file, trình con,…) TP.HCM 25-Aug-16 Khoa Khoa học & Kỹ thuật Máy tính Q trình đa luồng Khi q trình khởi đầu có main (hay initial) thread thực thi Main thread tạo thread khác Các thread process chia sẻ code, data tài nguyên khác (các file mở, ) process Quá trình đa luồng (multithreaded process) trình có nhiều luồng BK TP.HCM 25-Aug-16 Khoa Khoa học & Kỹ thuật Máy tính Ví dụ: Sử dụng thread formatting backup mouse A word processor with three threads BK TP.HCM 25-Aug-16 Khoa Khoa học & Kỹ thuật Máy tính Process & thread information Per process items Address space Open files Child processes Signals & handlers Accounting info Global variables Per thread items Per thread items Per thread items Program counter Registers Stack & stack pointer State Program counter Registers Stack & stack pointer State Program counter Registers Stack & stack pointer State Q trình có ba thread BK TP.HCM 25-Aug-16 Khoa Khoa học & Kỹ thuật Máy tính Q trình đơn & đa luồng BK TP.HCM 25-Aug-16 Khoa Khoa học & Kỹ thuật Máy tính Multiplexing CPU thread time CPU ba trình single-threaded BK TP.HCM 25-Aug-16 Khoa Khoa học & Kỹ thuật Máy tính Multiplexing CPU thread (tt.) time CPU hai trình multithreaded BK TP.HCM 25-Aug-16 Khoa Khoa học & Kỹ thuật Máy tính Ví dụ: Pthread Static Data #include void* thread1(){ int i; for (i = 0; i < 10; i++){ printf(“Thread 1\n”); sleep(1); } } void* thread2(){ int i; for (i = 0; i < 10; i++){ printf(“Thread 2\n”); sleep(1); } int main(){ pthread_t th1, th2; pthread_create(&th1, NULL, thread1, NULL); pthread_create(&th2, NULL, thread2, NULL); sleep(20); return 0; } Heap thread1 SP1 stack thread2 SP2 stack PC1 Text PC2 Sơ đồ nhớ Chương trình chạy có thread? BK TP.HCM 25-Aug-16 Khoa Khoa học & Kỹ thuật Máy tính 10 User thread Một thư viện thread (thread library, run-time system) thực user space để hổ trợ tác vụ lên thread Thư viện thread cung cấp hàm khởi tạo, định thời quản lý thread thread_create thread_exit thread_wait thread_yield Thư viện thread dùng Thread Control Block (TCB) để lưu thông tin user thread (program counter, register, stack) BK TP.HCM 25-Aug-16 Khoa Khoa học & Kỹ thuật Máy tính 12 User thread (tt.) Cấu trúc liệu memory layout để thực user thread TCBs D Feitelson BK TP.HCM Khoa Khoa học & Kỹ thuật Máy tính 13 User thread (tt.) Kernel khơng biết có mặt user thread Kernel biết PCB q trình Ví dụ thư viện user thread POSIX Pthread BK TP.HCM 25-Aug-16 Khoa Khoa học & Kỹ thuật Máy tính 14 User thread (tt.) Vấn đề: hệ điều hành cấp phát PCB cho process ( main/initial thread) Blocking problem: Khi thread trở nên blocked thread khác process trở nên blocked user thread thread library thread library thread library PCB PCB PCB kernel BK TP.HCM 25-Aug-16 Khoa Khoa học & Kỹ thuật Máy tính 15 Kernel thread Khi kỹ thuật multithreading hệ điều hành trực tiếp hỗ trợ Kernel quản lý process thread – kernel thread Việc định thời CPU kernel thực thread BK TP.HCM 25-Aug-16 Khoa Khoa học & Kỹ thuật Máy tính 16 Kernel thread (tt.) Cấu trúc liệu memory layout để thực kernel thread TCBs BK D Feitelson TP.HCM Khoa Khoa học & Kỹ thuật Máy tính 17 Kernel thread (tt.) Khi multithreading hỗ trợ kernel Khởi tạo quản lý thread chậm Tận dụng lợi kiến trúc multiprocessor Thread bị blocked không kéo theo thread khác bị blocked Một số hệ thống multithreading Windows 9x/NT/200x Solaris Linux BK TP.HCM 25-Aug-16 Khoa Khoa học & Kỹ thuật Máy tính 18 Hiện thực thread Nhắc lại kernel thread – thread hệ điều hành quản lý Multithreading thực theo mơ hình sau Mơ hình many-to-one Mơ hình one-to-one Mơ hình many-to-many BK TP.HCM 25-Aug-16 Khoa Khoa học & Kỹ thuật Máy tính 19 Mơ hình many-to-one Nhiều user-level thread “chia sẻ” kernel thread để thực thi Việc quản lý thread thực thông qua hàm thread library gọi user level Blocking problem: Khi thread trở nên blocked thread khác process trở nên blocked Có thể thực hầu hết hệ điều hành kernel thread BK TP.HCM 25-Aug-16 Khoa Khoa học & Kỹ thuật Máy tính 20 Mơ hình one-to-one Mỗi user-level thread thực thi thông qua kernel thread riêng Mỗi user thread tạo cần tạo kernel thread tương ứng Hệ điều hành phải có chế cung cấp nhiều kernel thread cho q trình Ví dụ: Windows NT/2000 kernel thread BK TP.HCM 25-Aug-16 Khoa Khoa học & Kỹ thuật Máy tính 21 Mơ hình many-to-many Nhiều user-level thread phân chia thực thi (multiplexed) số kernel thread Tránh số khuyết điểm hai mơ hình many-to-one one-to-one Ví dụ Solaris Windows NT/2000 với package ThreadFiber kernel thread BK TP.HCM 25-Aug-16 Khoa Khoa học & Kỹ thuật Máy tính 22 Pthread BK Chuẩn POSIX (IEEE 1003.1c) đặc tả API cho thủ tục tạo thread đồng thread Phổ biến hệ thống UNIX/Linux Là thư viện hỗ trợ user-level thread Tham khảo thêm ví dụ lập trình thư viện Pthread với ngơn ngữ C hệ thống Unix-like, trang 140, “Operating System Concepts”, Silberschatz et al, 6th Ed, 2003 Biên dịch thực thi chương trình multithreaded C Linux $ gcc source_file.c -lpthread –o output_file $ /output_file TP.HCM 25-Aug-16 Khoa Khoa học & Kỹ thuật Máy tính 23 Thread Solaris User-level threads Pthread UI-thread Lightweight process (LWP) Mỗi process chứa LWP Thư viện thread có nhiệm vụ phân định user thread vào LWP User-level thread gắn với LWP thực thi Thư viện thread chịu trách nhiệm điều chỉnh số lượng LWP Kernel-level threads Mỗi LWP tương ứng với kernel-level thread Ngồi ra, hệ thống có số kernel thread dành cho số công việc kernel (các thread khơng có LWP tương ứng) Đối tượng định thời hệ thống kernel thread BK TP.HCM 25-Aug-16 Khoa Khoa học & Kỹ thuật Máy tính 24 Thread Solaris (tt.) many-to-many BK TP.HCM 25-Aug-16 Khoa Khoa học & Kỹ thuật Máy tính 25 Thread Solaris (tt.) … LWP1 LWP2 LWP3 Quá trình Solaris BK TP.HCM 25-Aug-16 Khoa Khoa học & Kỹ thuật Máy tính 26 ... Mơ hình many-to-one Mơ hình one-to-one Mơ hình many-to-many BK TP.HCM 2 5- Aug-16 Khoa Khoa học & Kỹ thuật Máy tính 19 Mơ hình many-to-one Nhiều user-level thread “chia sẻ” kernel thread... thống kernel thread BK TP.HCM 2 5- Aug-16 Khoa Khoa học & Kỹ thuật Máy tính 24 Thread Solaris (tt.) many-to-many BK TP.HCM 2 5- Aug-16 Khoa Khoa học & Kỹ thuật Máy tính 25 Thread Solaris (tt.) … LWP1... TP.HCM 2 5- Aug-16 Khoa Khoa học & Kỹ thuật Máy tính 21 Mơ hình many-to-many Nhiều user-level thread phân chia thực thi (multiplexed) số kernel thread Tránh số khuyết điểm hai mơ hình many-to-one