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 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

