1. Trang chủ
  2. » Công Nghệ Thông Tin

Đa tiểu trình một số khái niệm cơ bản

42 2K 8
Tài liệu đã được kiểm tra trùng lặp

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

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Đa tiểu trình một số khái niệm cơ bản
Thể loại Đề tài
Định dạng
Số trang 42
Dung lượng 685 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Đa tiểu trình một số khái niệm cơ bản

Trang 1

Đa tiểu trình

Trang 2

Nội dung chương

 Một số khái niệm cơ bản

 Xây dựng một ứng dụng đa tiểu trình

 Đồng bộ hóa các tiểu trình

Trang 3

Một số khái niệm cơ bản

 Độ ưu tiên của tiểu trình (Thread priority)

 Chuyển đổi ngữ cảnh (Context Switch)

Trang 4

Xử lý đồng hành

 Xử lý đồng hành ?

Bài toán: kq = a*b + c*d

 Một hệ thống xử lý đồng hành thường có nhiều tiến trình thực thi cùng lúc

 Các tiến trình có thể hoạt động độc lập hay kết hợp với nhau để thực hiện nhiều tác vụ

Trang 6

Đa nhiệm

 Hệ điều hành đa nhiệm phân chia thời gian xử lý của CPU thành nhiều “lát thời gian” (time slice) để các tiến trình/tiểu trình thực hiện luân phiên

 Tiến trình/tiểu trình đang thực thi sẽ tạm dừng khi time slice của nó hết và tiến trình/tiểu trình khác sẽ chạy

 Khi hệ thống chuyển đổi từ thread này sang thread khác, nó sẽ lưu lại ngữ cảnh của thread bị mất quyền

và phục hồi ngữ cảnh của thread sắp được chạy

Trang 7

Đa nhiệm

 Độ dài time slice phụ thuộc từng hệ điều hành và bộ

vi xử lý Bởi vì time slice khá nhỏ (khoảng 20ms) nên

ta có cảm giác thực hiện đồng thời

 Hệ điều hành Windows hỗ trợ pre-emptive Tasking (đa nhiệm có độ ưu tiên)

Multi- Những vấn đề khó khăn khi xử lý đa nhiệm:

 Không gian bộ nhớ để lưu trữ thông tin ngữ cảnh của tiến trình và tiểu trình

 Thời gian để theo vết, quản lý các tiểu trình

 Sự tranh chấp tài nguyên dùng chung

Trang 8

Tiến trình

 Là một chương trình đang thực thi

 Có một con trỏ lệnh, vùng không gian địa chỉ

ảo riêng, mã lệnh, dữ liệu, object handles,

các biến môi trường, độ ưu tiên…

 Các thuộc tính này tác động lên mọi tiểu trình trực thuộc tiến trình

 Một tiến trình có thể có nhiều tiểu trình

Trang 9

Tiến trình

Trang 10

 Là đơn vị nhỏ nhất thực thi được trên hệ điều hành Windows 32 bits

 Là đơn vị xử lý mà hệ điều hành Windows phân chia time slice

 Mỗi tiểu trình bao gồm các stack, trạng thái các thanh ghi CPU,…và một entry trên danh sách các tiểu trình của hệ thống điều phối

 Các tiểu trình của cùng một tiến trình chia sẻ nguồn tài nguyên chung của toàn bộ tiến trình

Trang 11

Tiểu trình

 Các trạng thái của tiểu trình:

Trang 12

Tiểu trình

 Khi kết thúc time slice của mình, một tiểu trình sẽ dừng lại và nhường tài nguyên cho các tiểu trình khác Quá trình này được gọi là chuyển đổi ngữ cảnh (context switch)

 Độ ưu tiên là thuộc tính giúp hệ điều hành xác định tiểu trình nào sẽ được thực hiện tiếp theo, đồng thời phân chia thời gian xử lý của CPU

 Khi thời điểm context switch đến, đơn vị điều phối (dispatcher) sẽ khảo sát tập các tiểu trình ở trạng thái sẵn sàng và chọn tiểu trình đầu tiên có độ ưu tiên cao nhất trên hàng đợi để thực hiện

Trang 13

Độ ưu tiên của tiến trình

IDLE_PRIORITY_CLASS: chỉ được thực hiện khi không còn tiến

trình nào sử dụng CPU

NORMAL_PRIORITY_CLASS: được quyền sử dụng CPU theo

thời gian phân chia Đây là độ ưu tiên mặc định cho tiến trình khi mới tạo lập

HIGH_PRIORITY_CLASS: Tiến trình được dành quyền sử dụng

CPU từ các tiến trình thuộc lớp Normal ngay khi cần

REALTIME_PRIORITY_CLASS: Có độ ưu tiên cao nhất, được

sử dụng CPU bất kỳ lúc nào

ABOVE_NORMAL_PRIORITY_CLASS (chỉ có trong Windows

2000 trở lên): cao hơn NORMAL nhưng thấp hơn HIGH priority

BELOW_NORMAL_PRIORITY_CLASS (chỉ có trong Windows

2000 trở lên): cao hơn IDLE nhưng thấp hơn NORMAL priority

Trang 14

Độ ưu tiên của tiểu trình

 Mỗi tiểu trình có 1 độ ưu tiên được xác lập từ

0 (thấp nhất) đến 31 (cao nhất), giá trị này

gọi là Base Priority

 Base Priority là giá trị độ ưu tiên của tiểu

trình tính trên toàn hệ thống

 Base Priority được xác định bởi:

 Độ ưu tiên của tiến trình chứa nó

 Mức độ ưu tiên của tiểu trình bên trong tiến trình

Trang 15

Độ ưu tiên của tiểu trình trong

điểm so với độ ưu tiên NORMAL

THREAD_PRIORITY_NORMAL: độ ưu tiên ngang

với độ ưu tiên của tiến trình

THREAD_PRIORITY_ABOVE_NORMAL (+1): cao

hơn 1 điểm so với độ ưu tiên NORMAL

THREAD_PRIORITY_HIGHEST (+2): cao hơn 2

điểm so với độ ưu tiên NORMAL

Trang 16

Độ ưu tiên của tiểu trình trong

Trang 17

Bảng 32 mức ưu tiên

Trang 18

Bảng 32 mức ưu tiên tt …

Trang 19

Chuyển đổi ngữ cảnh

 Để chuyển đổi xử lý từ tiểu trình này sang tiểu trình khác trong hàng đợi, hệ thống phải thực hiện việc chuyển đổi ngữ cảnh:

 Sao lưu ngữ cảnh của tiểu trình tạm ngưng xử lý.

 Đưa tiểu trình này vào hàng đợi hệ thống có độ ưu tiên tương ứng với độ ưu tiên xử lý của tiểu trình.

 Xác định tiểu trình sẵn sàng trong hàng đợi có độ ưu tiên

xử lý cao nhất.

 Nạp thông tin ngữ cảnh của tiểu trình được chọn vào hệ thống, xoá bỏ tiểu trình này trong hàng đợi hệ thống và thực thi tiểu trình này.

Trang 20

Chuyển đổi ngữ cảnh

 Việc chuyển đổi ngữ cảnh chỉ được thực hiện trong ba tình huống:

 Khi thời gian xử lý của một tiểu trình đã hết

 Khi tiểu trình đang xử lý phải chuyển sang trạng thái chờ, nó phải từ bỏ thời gian xử lý còn lại

 Một tiểu trình có độ ưu tiên xử lý cao hơn vừa từ trạng thái chờ (block, suspend) chuyển sang trạng thái sẵn sàng

Trang 21

Xây dựng ứng dụng đa tiểu trình

 Tạo lập tiểu trình

 Thay đổi trạng thái của tiểu trình

 Kết thúc tiểu trình

 Đồng bộ hóa các tiểu trình

Trang 22

Xây dựng ứng dụng đa tiểu trình

 Thread th = new Thread(mythread);

 mythread – 1 instance của lớp ThreadStart hoặc lớp ParameterizedThreadStart;

 public delegate void ThreadStart () ;

 public delegate void ParameterizedThreadStart (Object obj);

Trang 23

Xây dựng ứng dụng đa tiểu trình

 Ta có thể dùng các hàm GetThreadPriority và SetThreadPriority để thay đổi độ ưu tiên của tiểu trình

 th.Priority = ThreadPriority.Highest;

Trang 24

Xây dựng ứng dụng đa tiểu trình Tạo lập tiểu trình với ThreadStart

Trang 25

Xây dựng ứng dụng đa tiểu trình Tạo lập tiểu trình với ThreadStart

Trang 26

Xây dựng ứng dụng đa tiểu trình

Tạo tiểu trình với ParametrizedThreadStart

Trang 27

Xây dựng ứng dụng đa tiểu trình

Tạo tiểu trình với ParametrizedThreadStart

Trang 28

Xây dựng ứng dụng đa tiểu trình Truyền dữ liệu - đóng gói vào lớp.

Trang 29

Xây dựng ứng dụng đa tiểu trình

Truyền dữ liệu - đóng gói vào lớp (tt).

Trang 30

Xây dựng ứng dụng đa tiểu trình

Trả dữ liệu – dùng hàm gọi ngược.

 Xây dựng lớp chứa tiểu trình:

 Nhận dữ liệu vào và delegate tới hàm gọi ngược

 Trong phần code của tiểu trình sẽ gọi hàm ngược này

Trang 31

Xây dựng ứng dụng đa tiểu trình Trả dữ liệu – dùng hàm gọi ngược.

 Xây dựng lớp chứa tiểu trình:

Trang 32

Xây dựng ứng dụng đa tiểu trình

Trả dữ liệu – dùng hàm gọi ngược.

 Triển khai hàm gọi ngược ứng với delegate: /* Delegate that defines the signature for the callback method */

public delegate void ExampleCallback(int

lineCount);

Trang 33

Xây dựng ứng dụng đa tiểu trình

Trả dữ liệu – dùng hàm gọi ngược.

 Tạo tiểu trình, truyền dữ liệu và thực thi:

Trang 34

Xây dựng ứng dụng đa tiểu trình

Tạm dừng/tiếp tục tiểu trình

 Ta có thể tạm ngưng thực thi một tiểu trình bằng cách gọi hàm Suspend và khôi phục lại hoạt động bằng hàm Resume

 th.Suspend();

 th.Resume();

 Nếu tiểu trình đang gọi các hàm hệ thống, thao tác suspend

sẽ thất bại.

 Ứng dụng có thể phải gọi SuspendThread nhiều lần cho

đến khi suspend thành công.

 Kiểm tra trạng thái của một tiểu trình thông qua thuộc tính:

 th.ThreadState == ThreadState.Suspended

Trang 35

Xây dựng ứng dụng đa tiểu trình

Trang 36

Xây dựng ứng dụng đa tiểu trình

Đồng bộ hóa các tiểu trình

 Có nhiều cơ chế đồng bộ hóa các tiểu trình:

 Dùng từ khóa lock:

Trang 37

Xây dựng ứng dụng đa tiểu trình

Đồng bộ hóa các tiểu trình

 Dùng từ khóa lock:

 Các cấu trúc thường gặp là: lock (this), lock (typeof (MyType)), và lock ("myLock") thì vi phạm các nguyên tắc sau:

 lock(this): gây xung đột nếu lớp là public.

 lock (typeof (MyType)): gây xung đột nếu MyType là lớp public.

 lock(“myLock”): gây xung đột nếu chuỗi này cũng được dùng ở nơi nào khác

 Tốt hơn hết là khai báo private hay private shared cho các object của lock

Trang 38

Xây dựng ứng dụng đa tiểu trình Đồng bộ hóa các tiểu trình

Trang 39

Xây dựng ứng dụng đa tiểu trình Đồng bộ hóa các tiểu trình

 Dùng monitor:

Trang 40

Xây dựng ứng dụng đa tiểu trình Đồng bộ hóa các tiểu trình

Trang 41

Xây dựng ứng dụng đa tiểu trình Đồng bộ hóa các tiểu trình

Trang 42

Xây dựng ứng dụng đa tiểu trình

Đồng bộ hóa các tiểu trình - Monitor

Ngày đăng: 12/09/2012, 15:43

HÌNH ẢNH LIÊN QUAN

Bảng 32 mức ưu tiên - Đa tiểu trình một số khái niệm cơ bản
Bảng 32 mức ưu tiên (Trang 17)
Bảng 32 mức ưu tiên tt … - Đa tiểu trình một số khái niệm cơ bản
Bảng 32 mức ưu tiên tt … (Trang 18)

TỪ KHÓA LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w