Bài giảng Kỹ thuật Máy tính - Chương 5: Thread (Luồng) - Nguyễn Thanh Sơn
Khái niệm tổng quan
Các mô hình multithread
Pthread (POSIX thread)
Multithreading trong Solaris
Các mô hình multithread
Pthread (POSIX thread)
Multithreading trong Solaris
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Kỹ thuật Máy tính - Chương 5: Thread (Luồng) - Nguyễn Thanh Sơn", để tải tài liệu gốc về máy hãy click vào nút Download ở trên.
File đính kèm:
- bai_giang_ky_thuat_may_tinh_chuong_5_thread_luong_nguyen_tha.pdf
Nội dung text: Bài giảng Kỹ thuật Máy tính - Chương 5: Thread (Luồng) - Nguyễn Thanh Sơn
- Xem xét lại khái niệm quá trình Khái niệm quá trình truyền thống: quá trình gồm 1. Không gian địa chỉ chứa code, data (Unix: text section, data section) 2. Một luồng thực thi duy nhất (single thread of execution) program counter các register stack 3. Các tài nguyên khác (các open file, các quá trình con, ) BK TP.HCM 18-Jan -16 Khoa Khoa học & Kỹ thuật Máy tính 2
- Quá trình đa luồng Khi quá trình khởi đầu chỉ có main (hay initial) thread thực thi Main thread sẽ tạo các thread khác. Các thread trong cùng một process chia sẻ code, data và tài nguyên khác (các file đang mở, ) của process. Quá trình đa luồng (multithreaded process) là quá trình có nhiều luồng. BK TP.HCM 18-Jan-16 Khoa Khoa học & Kỹ thuật Máy tính 4
- 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 Program counter Program counter Registers Registers Registers Stack & stack pointer Stack & stack pointer Stack & stack pointer State State State Quá trình có ba thread BK TP.HCM 18-Jan-16 Khoa Khoa học & Kỹ thuật Máy tính 6
- Multiplexing CPU giữa các thread time CPU ba quá trình single-threaded BK TP.HCM 18-Jan-16 Khoa Khoa học & Kỹ thuật Máy tính 8
- Ví dụ: Pthread Static Data #include void* thread1(){ int i; Heap for (i = 0; i < 10; i++){ printf(“Thread 1\n”); thread1 sleep(1); } SP1 stack } void* thread2(){ int i; thread2 for (i = 0; i < 10; i++){ SP2 printf(“Thread 2\n”); stack sleep(1); PC } 1 int main(){ Text pthread_t th1, th2; PC2 pthread_create(&th1, NULL, thread1, NULL); pthread_create(&th2, NULL, thread2, NULL); sleep(20); return 0; Sơ đồ bộ nhớ } Chương trình này khi chạy có bao nhiêu thread? BK TP.HCM 18-Jan-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) được hiện thực trong user space để hổ trợ các tác vụ lên thread Thư viện thread cung cấp các hàm khởi tạo, định thời và quản lý thread như thread_create thread_exit thread_wait thread_yield Thư viện thread dùng Thread Control Block (TCB) để lưu thông tin về user thread (program counter, các register, stack) BK TP.HCM 18-Jan-16 Khoa Khoa học & Kỹ thuật Máy tính 12
- User thread (tt.) Kernel không biết sự có mặt của user thread Kernel chỉ biết PCB của quá trình Ví dụ thư viện user thread POSIX Pthread BK TP.HCM 18-Jan-16 Khoa Khoa học & Kỹ thuật Máy tính 14
- Kernel thread Khi kỹ thuật multithreading được hệ điều hành trực tiếp hỗ trợ Kernel quản lý cả process và các thread – kernel thread Việc định thời CPU được kernel thực hiện trên thread BK TP.HCM 18-Jan-16 Khoa Khoa học & Kỹ thuật Máy tính 16
- Kernel thread (tt.) Khi multithreading được hỗ trợ bởi kernel Khởi tạo và quản lý các thread chậm hơn Tận dụng được lợi thế của kiến trúc multiprocessor Thread bị blocked không kéo theo các thread khác bị blocked. Một số hệ thống multithreading Windows 9x/NT/200x Solaris Linux BK TP.HCM 18-Jan-16 Khoa Khoa học & Kỹ thuật Máy tính 18
- Mô hình many-to-one Nhiều user-level thread “chia sẻ” một kernel thread để thực thi Việc quản lý thread được thực hiện thông qua các hàm của một thread library được gọi ở user level. Blocking problem: Khi một thread trở nên blocked thì mọi thread khác của process cũng sẽ trở nên blocked. Có thể được hiện thực đối với hầu hết các hệ điều hành. kernel thread BK TP.HCM 18-Jan-16 Khoa Khoa học & Kỹ thuật Máy tính 20
- Mô hình many-to-many Nhiều user-level thread được phân chia thực thi (multiplexed) trên một số kernel thread. Tránh được một số khuyết điểm của hai mô hình many-to-one và one-to-one Ví dụ Solaris 2 Windows NT/2000 với package ThreadFiber kernel thread BK TP.HCM 18-Jan-16 Khoa Khoa học & Kỹ thuật Máy tính 22
- Thread trong Solaris User-level threads Pthread và UI-thread Lightweight process (LWP) Mỗi process chứa ít nhất một LWP Thư viện thread có nhiệm vụ phân định user thread vào các LWP User-level thread được gắn với LWP thì mới được 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 một kernel-level thread Ngoài ra, hệ thống còn có một số kernel thread dành cho một số công việc ở kernel (các thread này không có LWP tương ứng) Đối tượng được định thời trong hệ thống là các kernel thread BK TP.HCM 18-Jan-16 Khoa Khoa học & Kỹ thuật Máy tính 24
- Thread trong Solaris (tt.) LWP1 LWP2 LWP3 Quá trình trong Solaris BK TP.HCM 18-Jan-16 Khoa Khoa học & Kỹ thuật Máy tính 26