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 
pdf 26 trang xuanthi 30/12/2022 2380
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:

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

  1. 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
  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
  3. 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
  4. 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
  5. 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
  6. 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
  7. 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
  8. 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
  9. 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
  10. 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
  11. 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
  12. 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
  13. 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