1. Trang chủ
  2. » Giáo án - Bài giảng

Chương 4 Tiểu trình

60 618 0

Đ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

Định dạng
Số trang 60
Dung lượng 4,32 MB

Nội dung

Thành viên: 1. Trần Viết Thin 2. Trần Tân 3. Hồ Trí Tâm 4. Phạm Đức Hùng 5. Phan Gia Mạnh 6. Cao Hữu Tú 7. Lê Công Danh 8. Lê Văn Đồng 9. Nguyễn Hữu Thành Nam 10. Hoàng Kết Mô hình tiểu trình đã giới thiệu ở chương 3 giả thiết rằng 1 chương trình là 1 tiến trình chỉ có 1 tiểu trình điều khiển. Hầu hết các hệ điều hành hiện nay đều hỗ trợ một tiến trình bao gồm nhiều tiểu trình điều khiển. Chương này giới thiệu những lý thuyết liên quan đến các hệ thống máy tính đa tiểu trình, bao gồm các APIs của các thư viện tiểu trình Java, Win32, Pthreads. Chúng ta còn xem xét các vấn đề phát sinh liên quan đến lập trình đa tiểu trình và ảnh hưởng của nó đến thiết kế của các hệ điều hành. Cuối cùng, chúng ta sẽ giải thích rõ làm thế nào các hệ điều hành Window XP , Linux hỗ trợ tiểu trình Kernel.  Giới thiệu lý thuyết tiểu trình – đơn vị cơ bản của độ hiệu dụng CPU và là nền tảng của các hệ thống máy tính đa tiểu trình.  Thảo luận về các APIs của các thư viện tiểu trình Java, Window 32, Pthreads. 1. Các phần mềm chạy trên các máy tính để bàn hiện nay đều sử lý đa tiến trình. Một ứng dụng thông thường là 1 tiến trình bao gồm nhiều tiểu trình điều khiển. Ví dụ như : một trình duyệt web có thể có 1 tiểu trình để hiển thị ảnh và văn bản trong khi 1 tiểu trình khác lấy dữ liệu từ mạng internet. Một chương trình sử lý văn bản có thể có 1 tiểu trình để hiển thị đồ họa, 1 tiểu trình khác để đáp ứng các phím được nhấn bởi người sử dụng, và 1 tiểu trình thứ 3 chạy nền có chức năng kiểm tra chính tả. 2. Trong một vài trường hợp, một ứng dụng cần phải thực hiện nhiều công việc tương tự nhau. Ví dụ như một máy chủ web nhận yêu cầu từ các mày khách về các trang web, hình ảnh, âm thanh vân vân. Một máy chủ làm việc hiệu quả có thể có nhiều máy khách truy cập cùng lúc(Có thể lên đến hàng nghìn). Nếu mày chủ sử dụng tiến trình đơn truyền thống, thì khoảng thời gian mà các mày khách phải đợi để được phục vụ có thể là rất lớn. Lý do ra đời tiểu trình Lý do ra đời tiểu trình 3. Mitt giải pháp được đưa ra là phải có một máy chủ hoạt động như là một tiến trình và sẽ nhận các yêu cầu từ máy khách. Khi máy chủ nhận được yêu cầu nó sẽ tạo ra một tiến trình mới để phục vụ cho yêu cầu đó. Trong thực tế, cách tạo ra tiến trình này khá thông dụng trước khi tiểu trình trở nên phổ biến. Việc tạo ra tiến trình hao tốn nhiều thời gian và tài nguyên, nếu một tiến trình được tạo ra chỉ để thực hiện các công việc tương tự như các tiến trình trước đó thì tại sao phải làm như vậy? Sẽ hiệu quả hơn nếu ta sử dụng một tiến trình bao gồm nhiều tiểu trình. Cách này sẽ tạo nên các tiến trình gồm nhiều tiểu trình cho các mày chủ web. Máy chủ sẽ tạo ra một tiểu trình để lắng nghe các yêu cầu từ các mày khách. Khi một yêu cầu được gửi đến thì máy chủ sẽ tạo ra một tiểu trình để phục vụ nó thay vì tạo ra một tiến trình. 4. Tiểu trình cũng đóng một vai trò quan trọng trong các hệ thống gọi thủ tục từ xa(RPCs). RPCs cho phép thông tin liên lạc liên tiến trình bằng cách cung cấp một cơ chế liên lạc tương tự như các lời gọi hàm hay thủ tục thông thường. Nói chung, các máy chủ RPCs là đa tiến trình. Khi một máy chủ nhận một thông điệp, nó sử dụng một tiểu trình riêng để đáp ứng thông điệp đó. Điều này giúp cho mày chủ có thể đáp ứng được nhiều yêu cầu cùng lúc. Hệ thống RMI của Java cũng làm việc tương tự. 5. Cuối cùng, nhiều nhân hệ điều hành ngày nay cũng đa tiểu trình; Các tiểu trình hoạt động ở nhân và mỗi tiểu trình sẽ thực hiện một công việc cụ thể, như quản lý thiết bị hay quản lý ngắt. Ví dụ như hệ điều hành Solaris sẽ tạo ra một tập hợp các tiểu trình ở nhân để quản lý ngắt. Linux sử dụng các tiểu trình ở nhân để quản lý bộ nhớ còn trống của hệ thống. Các lợi ích của việc sử dụng đa tiểu trình có thể được chia thành các mục sau: Tính tương tác : Sử dụng đa tiến trình trong một ứng dụng tương tác người dùng cho phép chương trình tiếp tục chạy ngay cả khi một phần của nó bị block hoặc đang thực hiện một công việc khác tốn nhiều thời gian, vì vậy sẽ làm tăng tính tương tác với người dùng. Ví dụ như, một trình duyệt web có thể dùng 1 tiểu trình để tương tác với người dùng, trong khi ảnh có thể được nạp lên bởi một tiểu trình khác. Chi sẽ tài nguyên: Mặc định, các tiểu trình cùng thuộc về một tiến trình sẽ cùng chia sẽ bộ nhớ và tài nguyên của tiến trình đó. Việc chia sẽ các đoạn mã và dữ liệu giúp ứng dụng có nhiều tiểu trình khác nhau cùng hoạt động trong cùng một không gian địa chỉ. Những tiện ích của việc sử dụng tiểu Những tiện ích của việc sử dụng tiểu trình trình Kinh tế : Sẽ tốn nhiều tài nguyên và bộ nhớ khi tạo ra các tiến trình. Sẽ tiết kiệm hơn nếu tạo ra các tiến trình gồm nhiều tiểu trình cùng chia sẽ tài nguyên của tiến trình đó. Nói chung việc tạo ra và quản lý các tiến trình sẽ mất nhiều thời gian hơn là tạo ra và quản lý các tiểu trình. Trong hệ điều hành Solaris, việc tạo ra một tiến trình chậm hơn gần 30 lần so với tạo ra một tiểu trình, và việc chuyển đổi qua lại giữa chúng sẽ chậm hơn khoảng 5 lần. Độ hiệu dụng của các kiến trúc đa vi xử lý: Vì các tiểu trình có thể chạy song song trên nhiều bộ vi xử lý nên lợi ích của việc sử dụng đa tiến trình sẽ tăng lên đáng kể trong các kiến trúc đa vi xử lý. Đa tiểu trình trên các máy có nhiều CPU sẽ làm tăng số lượng các công việc có thể được thực hiện tại một thời điểm. Các mô hình đa tiến trình: Cho đến nay chúng ta chỉ nhìn nhận tiểu trình theo một cảm giác chung. Tuy nhiên khi đi vào cụ thể các hỗ trợ cho tiểu trình có thể được cung cấp cả ở mức độ người dùng(user thread), và mức độ nhân hệ điều hành(Kernel thread). Các tiểu trình người dùng được hỗ trợ và quản lý một cách tách biệt với nhân, trong khi các tiểu trình nhân được hỗ trợ và quản lý trực tiếp bởi hệ điều hành. Tất cả các hệ điều hành hiện nay bao gồm : Window XP, Linux, Mac OS X, Solaris, và Tru64 UNIX đều hỗ trợ tiểu trình nhân.  Mô hình nhiều vào một (Many-to-one) (Hình 4.2) liên kết nhiều tiểu trình ở mức người dùng với một tiểu trình nhân. Việc quản lý tiểu trình được thực hiện bởi thư viện tiểu trình trong không gian người dùng, vì vậy nó đạt kết quả tốt. Nhưng toàn bộ tiến trình sẽ bị dừng lại nếu có một trong các tiểu trình bị dừng lại. Và cũng vì chỉ duy nhất một tiểu trình được truy cập vào nhân ở một thời điểm, nhiều tiểu trình không thể chạy song song trên các hệ thống đa vi xử lý. Tiểu trình Green (Một thư viện tiểu trình của Solaris) sử dụng mô hình này. Mô hình Nhiều vào một(Many-to-one): Mô hình Nhiều vào một(Many-to-one): [...]... vài lần khởi tạo, hàm main() tạo ra tiểu trình thứ hai bắt đầu tiểu trình điều khiển trong hàm runner() Các tiểu trình này sử dụng chung biến sum toàn cục Hình 4. 6   Hãy quan sát chương trình chương trình kỹ hơn Tất cả các chương trình Pthreads đều phải nạp file pthead.h ở đầu chương trình Câu lệnh pthread_tid khai báo tên của tiểu trình sẽ được tạo ra Mỗi tiểu trình có một tập các thuộc tính, bao... trên tiểu trình đó Phân phối tiểu trình đến mọi tiểu trình của tiến trình Phân phối tiểu trình đến một số tiểu trình nhất định của tiến trình Chỉ ra một tiểu trình duy nhất sẽ nhận tất cả các tín hiệu của tiến trình  Cách thức phân phối tín hiệu phụ thuộc vào kiểu của tín hiệu được tạo ra Ví dụ như : các tín hiệu đồng bộ cần được phân phối đến tiểu trình gây ra tín hiệu đó chứ không phải các tiểu trình. .. ra tiểu trình tính tổng, tiểu trình cha sẽ gọi hàm pthead_join() để đợi cho đến khi tiểu trình con hoàn thành công việc Tiểu trình tính tổng sẽ hoàn thành khi nó gọi hàm pthead_exit() Đến khi tiểu trình tính tổng hoàn thành, tiểu trình chính sẽ xuất ra màn hình biến toàn cục sum Tiểu trình Win32   Kỹ thuật dùng để tạo ra các tiểu trình Win32 cũng tương tự như kỹ thuật đã dùng của Ptheads Hình 4. 7... ra một tiểu trình mới hoặc sao lại một tiến trình Trong một chương trình đa tiểu trình Ý nghĩa của fork() và exec() sẽ thay đổi 2) Khi một tiểu trình gọi hàm fork(), liệu có phải một tiến trình mới sẽ được tạo ra và sao lại tất cả các tiểu trình, hay chỉ tạo ra một tiến trình đơn tiểu trình Một số hệ thống UNIX chọn cả hai cách sử dụng nêu trên của hàm fork(), một là sao chép tất cả các tiểu trình và... kết thúc chương trình Điều khiển tín hiệu trong các chương trình đơn tiểu trình thì đơn giản Các tín hiệu đều thuộc về cùng một tiểu trình Tuy nhiên, sự phân phối tín hiệu trở nên phức tạp hơn đối với các chương trình đa tiểu trình, vì một tiến trình có thể có nhiều tiểu trình Vậy thì một tín hiệu sẽ được phân phối đi đâu?  Thông thường có các lựa chọn sau:     Phân tín hiệu đến tiểu trình để... của tiểu trình và các thuộc tính của tiểu trình, chúng ta cũng truyền vào tên của hàm mà tiểu trình mới tạo ra sẽ thực thi, trong trường hợp này là hàm runner() Cuối cùng là truyền vào một tham số kiểu số nguyên được nhập vào từ tham số dòng lệnh, đó là argv[1] Lúc này, chương trình sẽ gồm hai tiểu trình Tiểu trình khởi tạo (Tiểu trình cha) nằm trong hàm main() và tiểu trình tính tổng (Tiểu trình con... hành khác nhau của Windows cũng như vậy Chương trình C trong hình 4. 6 mô tả API Pthreads cơ bản để xây dựng một chương trình tính tổng của một số nguyên không âm trong một tiểu trình Trong một chương trình Pthreads, các tiểu trình khác nhau sẽ bắt đầu thực thi trong một hàm cụ thể Trong hình 4. 6 đó là hàm runner() Khi một chương trình bắt đầu thực thi, một tiểu trình đơn bắt đầu chạy trong hàm main()... các tiểu trình đang tải hình ảnh bị hủy bỏ 2) Tiểu trình bị hủy bỏ được coi là tiểu trình đích Việc hủy bỏ một tiểu trình đích có thể xảy ra trong hai trường hợp sau: 3) Hủy bỏ không đồng thời: Một tiểu trình lập tức kết thúc tiểu trình đích 4) Sự hủy bỏ bị hoản lại: Tiểu trình đích được kiểm tra định kỳ, xem nó đã kết thúc chưa, cho nó cơ hội kết thúc chính nó một cách tuần tự 5) Việc hủy bỏ một tiểu. .. các tiểu trình dữ liệu riêng Hầu hết các thư viện tiểu trình – gồm Win32 và Ptheads – cung cấp một vài dạng hỗ trợ cho các tiểu trình dữ liệu riêng Java cũng vậy 4. 4.6  Vấn đề cuối cùng cần xem xét đối với các chương trình đa tiểu trình liên quan đến sự giao tiếp giữa nhân và thư viện tiểu trình, mà có thể được yêu cầu ở các mô hình many-to-many và twolevels Sự phối hợp này cho phép số tiểu trình. .. giữa các tiểu trình nhân và tiểu trình người dùng Cấu trúc dữ liệu này – tiến trình nhẹ (LWP) – được mô tả trong hình 4. 9 Với thư viện tiểu trình người dùng, LWP như là một bộ xử lý ảo mà ứng dụng có thể lập lịch cho một tiểu trình người dùng trên đó Mỗi EWP được gắn vào một tiểu trình nhân, và nó là tiểu trình nhân được hệ điều hành lập lịch để chạy trên các vi xử lý vật lý Nếu một tiểu trình nhân . dòng lệnh, đó là argv[1].  Lúc này, chương trình sẽ gồm hai tiểu trình. Tiểu trình khởi tạo (Tiểu trình cha) nằm trong hàm main() và tiểu trình tính tổng (Tiểu trình con ),việc tính tổng được thực. hàm runner(). Các tiểu trình này sử dụng chung biến sum toàn cục.  Hình 4. 6 4. 3.1 Pthreads 4. 3.1 Pthreads  Hãy quan sát chương trình chương trình kỹ hơn. Tất cả các chương trình Pthreads đều. Solaris, và Tru 64 UNIX đều hỗ trợ tiểu trình nhân.  Mô hình nhiều vào một (Many-to-one) (Hình 4. 2) liên kết nhiều tiểu trình ở mức người dùng với một tiểu trình nhân. Việc quản lý tiểu trình được

Ngày đăng: 13/05/2014, 00:26

TỪ KHÓA LIÊN QUAN

w