Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 60 trang
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ểutrình đã giới thiệu ở chương 3 giả thiết rằng 1 chươngtrình là 1 tiến trình chỉ có 1 tiểutrì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ểutrì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ểutrì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ểutrì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ểutrình Kernel. Giới thiệu lý thuyết tiểutrì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ểutrì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ểutrình điều khiển. Ví dụ như : một trình duyệt web có thể có 1 tiểutrình để hiển thị ảnh và văn bản trong khi 1 tiểutrình khác lấy dữ liệu từ mạng internet. Một chươngtrình sử lý văn bản có thể có 1 tiểutrình để hiển thị đồ họa, 1 tiểutrình khác để đáp ứng các phím được nhấn bởi người sử dụng, và 1 tiểutrì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ểutrình Lý do ra đời tiểutrì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ểutrì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ểutrình cho các mày chủ web. Máy chủ sẽ tạo ra một tiểutrì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ểutrình để phục vụ nó thay vì tạo ra một tiến trình. 4.Tiểutrì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ểutrì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ểutrình hoạt động ở nhân và mỗi tiểutrì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ểutrình ở nhân để quản lý ngắt. Linux sử dụng các tiểutrì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ểutrì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ươngtrì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ểutrì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ểutrình khác. Chi sẽ tài nguyên: Mặc định, các tiểutrì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ểutrì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ểutrìnhtrì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ểutrì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ểutrì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ểutrì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ểutrình theo một cảm giác chung. Tuy nhiên khi đi vào cụ thể các hỗ trợ cho tiểutrì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ểutrì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ểutrì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ểutrì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ểutrình ở mức người dùng với một tiểutrình nhân. Việc quản lý tiểutrình được thực hiện bởi thư viện tiểutrì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ểutrình bị dừng lại. Và cũng vì chỉ duy nhất một tiểutrình được truy cập vào nhân ở một thời điểm, nhiều tiểutrình không thể chạy song song trên các hệ thống đa vi xử lý. Tiểutrình Green (Một thư viện tiểutrì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ểutrình thứ hai bắt đầu tiểutrình điều khiển trong hàm runner() Các tiểutrì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ìnhchươngtrình kỹ hơn Tất cả các chươngtrình Pthreads đều phải nạp file pthead.h ở đầu chươngtrình Câu lệnh pthread_tid khai báo tên của tiểutrình sẽ được tạo ra Mỗi tiểutrình có một tập các thuộc tính, bao... trên tiểutrình đó Phân phối tiểutrình đến mọi tiểutrình của tiến trình Phân phối tiểutrình đến một số tiểutrình nhất định của tiến trình Chỉ ra một tiểutrì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ểutrình gây ra tín hiệu đó chứ không phải các tiểu trình. .. ra tiểutrình tính tổng, tiểutrình cha sẽ gọi hàm pthead_join() để đợi cho đến khi tiểutrình con hoàn thành công việc Tiểutrình tính tổng sẽ hoàn thành khi nó gọi hàm pthead_exit() Đến khi tiểutrình tính tổng hoàn thành, tiểutrì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ểutrình Win32 cũng tương tự như kỹ thuật đã dùng của Ptheads Hình 4. 7... ra một tiểutrình mới hoặc sao lại một tiến trình Trong một chươngtrình đa tiểutrình Ý nghĩa của fork() và exec() sẽ thay đổi 2) Khi một tiểutrì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ểutrì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ểutrình và... kết thúc chươngtrình Điều khiển tín hiệu trong các chươngtrình đơn tiểutrình thì đơn giản Các tín hiệu đều thuộc về cùng một tiểutrì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ươngtrình đa tiểu trình, vì một tiến trình có thể có nhiều tiểutrì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ểutrình để... của tiểutrì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ểutrì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ươngtrình sẽ gồm hai tiểu trìnhTiểutrình khởi tạo (Tiểu trình cha) nằm trong hàm main() và tiểutrình tính tổng (Tiểu trình con... hành khác nhau của Windows cũng như vậy Chươngtrình C trong hình 4. 6 mô tả API Pthreads cơ bản để xây dựng một chươngtrình tính tổng của một số nguyên không âm trong một tiểutrình Trong một chươngtrình Pthreads, các tiểutrì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ươngtrình bắt đầu thực thi, một tiểutrình đơn bắt đầu chạy trong hàm main()... các tiểutrình đang tải hình ảnh bị hủy bỏ 2) Tiểutrình bị hủy bỏ được coi là tiểutrình đích Việc hủy bỏ một tiểutrì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ểutrình lập tức kết thúc tiểutrình đích 4) Sự hủy bỏ bị hoản lại: Tiểutrì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ểutrình dữ liệu riêng Hầu hết các thư viện tiểutrình – gồm Win32 và Ptheads – cung cấp một vài dạng hỗ trợ cho các tiểutrì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ươngtrình đa tiểutrì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ểutrình nhân và tiểutrì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ểutrì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ểutrình người dùng trên đó Mỗi EWP được gắn vào một tiểutrình nhân, và nó là tiểutrì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ểutrì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