HPT chương 3 Tiến trình

1. Tiến trình

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

Tiến trình : Một tiến trình thường được định nghĩa là một chương trình đang trong quá trình thực thi, tức là, một chương trình đang được thực thi bởi một trong những bộ vi xử lý ảo (virtual processor) của hệ điều hành. Hê điều hành cũng phải đảm bảo một tiến trình sẽ không thể (dù vô tình hay cố ý) làm ảnh hưởng đến hoạt động của một tiến trình khác, hay nói cách khác, việc các tiến trình có thể cùng chia sẻ một CPU và các tài nguyên phần cứng khác sẽ được hệ điều hành làm cho trong suốt.

Luồng: Một luồng thường được xem là một đơn vị xử lý nhỏ nhất mà có thể được lập lịnh, thực thi bởi hệ điều hành. Tương tự như process, luồng cũng thực thi những đoạn code riêng của nó độc lập với các thread khác, tuy nhiên, tính trong suốt về sự thực thi của các luồng không được hệ điều hành đảm bảo như trong trường hợp của process. Do đó, các luồng thường chỉ chứa một số lượng nhỏ nhất các thông tin để cho phép một CPU có thể được chia sẻ giữa một vài luồng. Thông thường, ngữ cảnh luồng (thread context) chỉ bao gồm thông tin về ngữ cảnh CPU (CPU context) cùng với một vài thông tin về quản lý luồng.

Lời gọi hệ thống : Là tập lệnh mở rộng do hệ điều hành cung cấp xác định giao diện giữa hệ điều hành và các chương trình người sử dụng

o   Lời gọi hệ thống bị phong tỏa (block system call): Để thực hiện, chúng ta chỉ cần gọi sys call, sau đó đợi kết quả. Cách thức này thì dễ lập trình hơn, nhưng lại kém hiệu quả vì có thời gian chết.

o   Lời gọi hệ thống không bị phong tỏa (nonblocking system call): Một mặt tiến trình gửi syscall, mặt khác, nó lại tiếp tục công việc của mình. Phương pháp thực hiện này đem lại lại hiệu quả cao, nhưng việc lập trình, cài đặt lại phức tạp hơn.

1.2. Các hệ thống đa luồng với mô hình Client/Server

1.2.1. Multithreaded Clients

Để thiết lập một mực cao của phân tán trong suốt , hệ phân tán hoạt động trong một mạng lớn cần phải che dấu số lần truyền các thông điệp nội bộ các quá trình . Vòng trễ trong mạng diện rộng có thể dễ dàng xẩy ra có thể từ hàng trăm ms đến một vài s . Thông thường để ẩn độ trễ trong kết nối là để thiết lập kết nôi và ngay lập tức thực thi 1 việc khác . Một ví dụ điển hình của điều này là ở trình duyệt web . Trong nhiều trường hợp , một tài liệu Web bao gồm một tệp HTML có chứa văn bản cùng với các hình ảnh , biểu tượng …. Để lấy từng phần tử của 1 văn bản web thì trình duyệt sẽ thiết lập 1 kết nối TCP/IP , đọc dữ liệu gửi đến và chuyển nó đến thành phần hiển thị . Thiết lập một kế nối cũng như đọc dữ liệu đến thì sẽ ngăn chặn các hoạt động khác . Khi xử lý các kết nối lâu , chúng ta có những bất lợi đó là thời gian hoàn thành tác vụ này tương đối dài .Một trình duyệt web thường bắt đầu với các trang HTML và sau đó hiển thị nó . Để ẩn trễ kết nối tới mức tốt nhất , một số trình duyệt bắt đầu hiển thị các dữ liệu trong khi vẫn nhận các thông tin tới . Trong khi văn bản được tạo cho người sử dụng , thì các thành phần khác của văn bản như ảnh cũng được thực hiện tương tự . Như vậy người dùng sẽ không phải chờ đến khi mà toàn trang được tải xong thì mới được xem nội dung của trang .

Trong thực tế , trình duyệt web thực hiện một số nhiệm vụ đồng thời , ngay khi mà trang chính HTML được tải xuống , các luồng riêng biệt được bật để quản lý các phần khác của trang . Mỗi luồng thiết lập một kết nối riêng biệt với máy chủ để lấy dữ liệu . Như vậy nếu theo ví dụ này , khi ta chỉ dùng 1 máy chủ , và ở thời điểm có rất nhiều máy cùng gửi yêu cầu đến máy chủ đó thì máy chủ này sẽ phải chịu tải rất lớn và trở nên chậm chạp . Tuy nhiên trong nhiều trường hợp , máy chủ web được nhân rộng trên nhiều máy tính nơi mà mỗi máy chủ cung cấp một cách chính xác cùng 1 bộ tài liệu . Như vậy khi 1 yêu cầu được gửi đến máy chủ thì yêu cầu này sẽ được chuyển đến 1 trong các máy chủ đó theo cơ chế cân bằng tải  , hoặc round-robin . Tuy nhiên , việc này chỉ thật sự có hiệu quả khi mà trình duyệt của máy khách có thể xử lý đồng thời được các tài liệu web được gửi đến .

[tài liệu]

Có một số lợi ích của việc sử dụng multithreaded Web browser :

·         Tải nội dung HTML, load ảnh bằng các luồng khác nhau…

·         Một vài kết nối có thể được mở đồng thời.

·         Khi sử dụng multithreaeded client, connection có thể được thiết lập tới các bản copy khác nhau của web server, cho phép dữ liệu truyền song song

1.2.2. Multithreaded Servers

Mặc dù những lợi ích quan trọng của việc sử dụng đa luồng trên ứng dụng phía khách hàng nhưng ứng dụng chính của đa luồng trong hệ phân tán lại nằm bên phía máy chủ . Thực tế cho thấy rằng đa luồng không chỉ làm đơn giản mã trên máy chủ mà còn làm cho việc phát triển máy chủ khai thác xử lý song song đạt được hiệu năng cao , thậm chí ngay trên các hệ thống đơn xử lý . Tuy nhiên , bây giờ các hệ thống đa xử lý đã được sử dụng rộng rãi .

Để nắm được những lợi ích của luồng trong việc viết mã cho máy chủ , chúng ta sẽ xem xét việc tổ chức tập tin cho máy chủ mà thông thường phải đợi 1 khoảng thời gian để đọc đĩa . Máy chủ tệp tin thường đợi các yêu cầu đến cho một hoạt động của tập tin , sau đó thực hiện yêu cầu , và gửi lại trả lời . Tuy nhiên thì có thể thực hiện bằng cách khác , những yêu cầu được gửi đến 1 vị trí đặc biệt nào đó trên máy chủ , sau khi kiểm tra các yêu cầu máy chủ chọn ra 1 luông nhàn rỗi nào đó để thực hiện yêu cầu này .Như vậy có thể thực hiện nhiều yêu cầu mà vẫn đảm bảo hoạt động của hệ thống .

Hình 3.1Multithreaded Server

Tiến trình này sẽ thực hiện việc đọc các tệp tin trên hệ thống nội bộ , lúc này có thể làm cho luồng bị dừng cho đến khi dữ liệu được đọc từ đĩa . Nếu luồng bị dừng , luồng khác sữ được chọn để thực thi .

Bây giờ , ta sẽ xem xét xem làm thế nào mà các máy chủ tệp tin có thể ghi được khi thiếu các luồng . Một khả năng là nó hoạt động như 1 luồng duy nhất . Vòng lặp chính của máy chủ tệp tin lấy 1 yêu cầu , kiểm tra nó và đưa nó ra để hoàn thành trước khi thực hiện công việc kế tiếp . Trong khi chờ đợi đĩa , máy chủ trong trạng thái nhàn rỗi và không thực hiện bất kỳ yêu cầu nào khác . Do đó yêu cầu từ máy khách khác không thể xử lý . Ngoài ra , nếu máy chủ là tệp tin chạy trên một máy chuyên dụng , như CPU chỉ đơn giản là nhàn rồi trong khi máy chủ tệp tin chờ đọc đĩa . Kết quả có được là rất ít yêu cầu được xử lý mỗi giây à giảm hiệu năng server .

Cho đến nay , chúng ta đã có 2 thiết kế : một máy chủ tệp tin đa luồng và 1 máy chủ đơn luồng . Một thiết kế thứ 3 là chạy máy chủ như 1 máy trạng thái hữu hạn . Khi 1 yêu cầu đến , chỉ 1 luồng kiểm tra nó và nếu thỏa mãn thì thực hiện nếu không thì 1 thông điệp sẽ được gửi từ đĩa .

Tuy nhiên , thay vì ngăn chặn , nó ghi lại trạng thái của yêu cầu hiện tài vào 1 bảng và tiếp tục lấy thông điệp tiếp theo . Nếu thông điệp tiếp theo là công việc mới thì thực hiện còn nếu là lời trả lời từ đĩa cho công việc trước thì nó sẽ lấy các thông tin liên quan từ bảng , lời trả lời đã được xử lý và sau đó gửi lại cho phía máy khách . Theo cách này máy chủ sẽ sử dụng đến các lời gọi không chặn để gửi và nhận các yêu cầu .

Trong thiết kế , mô hình quá trình tuần tự mà chúng tôi đã đề cập trong 2 trường hợp đầu đã dần biến mất . Trong thực tế chúng ta thực hiện theo kiểu đa luồng và ngăn xếp . Tiến trình được thực hiện như một máy hữu hạn trạng thái , nhận các sự kiện rồi phản ứng với các sự kiện này tùy thuộc vào đó là sự kiện gì .

Tóm lại ,chúng ta tổng kết những ưu và nhược điểm của cả 3 dạng trên như sau :

Với đa luồng , hệ thống thực hiện các blocking system calls và vẫn đạt được xử lý song song . Lời gọi hệ thống có thể che đươc làm cho việc lập trình dễ hơn và cải thiện hiệu suất xử lý song song .

Máy chủ đơn luông đơn giản nhưng làm giảm một phần hiệu năng .

Máy chủ theo kiểu máy hữu hạn trạng thái đạt được hiệu suất cao nhưng lại sử dụng lời gọi hệ thống không che ( nonblocking system calls ). Việc này gây khó khăn trong lập trình

1.3. Di trú mã

1.3.1. Ý tưởng

Trước phần này, chúng ta chủ yếu đề cập đến việc truyền dữ liệu (passing data) trong hệ phân tán. Tuy nhiên, cũng có tình huống mà chúng ta cần phải truyền cả chương trình (passing program), và đôi khi, ngay cả khi chúng đang được thực hiện. Điều này liên quan đến thuật ngữ di trú mã. Và trong phần này, em xin tìm hiểu chi tiết hơn về vấn đề này.

Ý tưởng của việc di trú mã, đó là việc di trú các tiến trình (chứ không phải là source code)  đang chạy ở một máy này sang một máy khác. Thực chất ở đây là process migration.

Ưu điểm:

·         Giảm tải tài nguyên, thông qua cân bằng tải giữa các server trong hệ thống

·         Tăng hiệu quả sử dụng tài nguyên, qua đó, tăng tính mềm dẻo trong thực thi hệ phân tán.

è tăng hiệu năng của toàn hệ thống.. Thật vậy, hiệu năng của toàn bộ hệ thống sẽ được cải thiện nếu các tiến trình được di chuyển từ nơi phải chịu tải nặng sang nơi đang có tải nhẹ

1.3.2. Các mô hình di trú mã

Ta coi một tiến trình gồm có ba thành phần:

·         Phần mã (Code segment) : Phần này gồm các tập lệnh của tiến trình.

·         Phần tài nguyên (Resource segment) : Phần này chứa các tham số tới các tài nguyên mà tiến trình cần.

·         Phần thực thi (Execution segment): Phần này chứa các trạng thái thực thi hiện hành của tiến trình như dữ liệu, bộ đếm, stack...

Từ đó chúng ta nhận thấy có hai mô hình di trú mã chính:

·         Mô hình di động yếu (weak mobility): Với mô hình này, chỉ có thành phần Code Segment cùng với một số tham số khởi động được di trú. Một đặc điểm của mô hình di động yếu, đó là chương trình được di chuyển luôn luôn được khởi tạo từ một trong các vị trí bắt đầu được định nghĩa trước. Ví dụ như Java applets, nó luôn được bắt đầu thực thi ngay từ đầu. Lợi ích của mô hình này là tính đơn giản của nó. Nó chỉ đòi hỏi phía máy đích có khả năng thực thi đoạn mã nguồn đó, ý tưởng chính của nó chỉ là làm cho đoạn code có khả năng di động.

·         Di trú mã mạnh (Strong Mobility) : Cả ba thành phần của tiến trình đều được di chuyển. Đặc điểm của mô hình di trú mã mạnh là, một tiến trình đang chạy có thể được tạm dừng hoạt động, sau đó, nó được di chuyển tới một máy khác, rồi sau đó lại tiếp tục hoạt động của mình ở chính vị trí mà nó đã dừng lại ở thời điểm trước.

Tác tử di động

Liên quan đến vấn đề di trú mã, chúng ta đưa ra khái niệm tác tử di động

Ví dụ trong bài toán quản trị mạng, tại mỗi ví trí chúng ta cần cài đặt các argent để thu thập thông tin, sau đó báo về cho nhà quản trị mạng để có các xử lý thích hợp. Thay vì dùng nhiều argent, chúng ta có thể dùng một mobile argent, nó sẽ di động qua các nút mạng, thu thập thông tin và báo về.

Ngoài ra, chúng ta còn có khái niệm tác tử thông minh (Intelligent argent): thay vì thu thập thông tin một cách độc lập, tác tử này có thể có các hệ chuyên gia, các tri thức để sau khi thu thập thông tin, nó có thể đưa ra các hoạt động, các xử lý phù hợp với thông tin mà nó thu thập được.

1.4. Ảo hóa (Virtualization)

1.4.1. Khái niệm.

Ảo hóa là khi chúng ta có một CPU vật lý, và bằng cách chuyển đổi rất nhanh giữa các luồng và các tiến trình, chúng ta sẽ tạo ra cảm giác về sự thực hiện song song. Trong bối cảnh hệ phân tán, khi mà các ứng dụng phần mềm hầu như nằm ở một vị trí khác so với phần mềm hệ thống, cũng như phần cứng bên dưới, thì ảo hóa cũng đóng một vai trò rất đáng kể.

Trong hệ phân tán : Ảo hóa liên quan đến việc mở rộng hoặc thay thế một giao diện cũ để nó có thể bắt chiếc hành vi của một hệ thống khác.

Nguyên nhân chính của ảo hóa

·         Phần mềm không theo kịp tốc độ phát triển của phần cứng à ảo hóa giúp tạo ra các giao diện, giúp cho các phần mềm cũ có thể chạy trên nền tảng phần cứng mới.

·         Mạng máy tính rất phát triển à bắt buộc phải sử dụng, tuy nhiên, nó có các thành phần không đồng nhất, ảo hóa giúp cho các ứng dụng có thể chạy trong máy ảo của chính nó, qua đó tương thích với nhiều hạ tầng phần cứng phía dưới.

Hình 3.2: Ảo hóa

Thông thường, các hệ thống máy tính sẽ cung cấp một giao diện lập trình cho các phần mềm ở phía bên trên (Hình 3.2a). Hiện nay, có rất nhiều loại giao diện lập trình ứng dụng, từ các giao diện đơn giản được cung cấp bởi CPU, đến các tập rất lớn các API. Về cơ bản, ảo hóa liên quan đến việc mở rộng và thay thế các giao diễn sẵn có, sao cho nó có thể bắt chước hành vi của một hệ thống khác (Hình 3.2b)

Hình 3.3: Các loại giao diện chính

Có bốn loại giao diện (Hình 3.3) :

·         Giao diện giữa phần cứng và phần mềm bao gồm các lệnh máy được gọi bởi bất kì một chương trình nào

·         Giao diện giữa phần cứng và phần mềm bao gồm các lệnh máy nhưng chỉ được gọi bởi một số chương trình đặc biệt ( ví dụ hệ điều hành )

·         Giao diện giữa hệ điều hành - ứng dụng bao gồm các lời gọi hệ thống được cung cấp bởi hệ điều hành

·         Giao diện bao gồm các library calls ( ví dụ như các API)

Tư tưởng chính của ảo hóa trong hệ phân tán là bắt chước hành vi của các giao diện trên.

Hình 3.4: Hai cách tiếp cận vấn đề ảo hóa

Chúng ta có hai cách tiếp cận vấn đề ảo hóa:

·         PVM (Process Virtual Machine) (Hình 3.4b) : Hình thức ảo hóa này chỉ được thực hiện theo từng tiến trình (ảo hóa tiến trình): chúng ta có thể xây dựng một hệ thống cung cấp một tập lệnh trừu tượng có thể được sử dụng bởi các ứng dụng đang thực thi. Tập lệnh này có thể được biên dịch ( giống như trường hợp môi trường runtime của java – Java runtime environment), nó cũng có thể được mô phỏng để chạy một ứng dụng Window trong môi trường UNIX. Trong trường hợp thứ hai, quá trình mô phỏng cần thêm một điều kiện, đó là nó phải bắt chước hành vi của lời gọi hệ thống

·         VMM (Virtual Machine Monitor) (Hình 3.4b) : Ảo hóa ở cấp độ cao hơn. Vấn đề này nảy sinh do trong các hệ thống lớn, việc sử dụng các thành phần không đồng nhất là không thể tránh khỏi, VMM giúp cho hệ thống được sử dụng và khai thác hiệu quả trong môi trường như vậy. Cụ thể, chúng ta sẽ cung cấp cho hệ thống một tầng ngay phía trên tầng phần cứng (xây dựng các phần cứng ảo). Tầng này sẽ cung cấp các tập lệnh của phần cứng phía dưới dưới dạng một giao diện. Giao diện này có thể được cung cấp đồng thời cho các chương trình khác nhau phía bên trên. Như vậy, chúng ta có thể có nhiều hệ điều hành thuộc nhiều loại khác nhau cùng chạy một cách độc lập, và đồng thời trên một nền tảng phần cứng. Tầng mà chúng ta nhắc đến ở trên thường được gọi là Virtual Machine Monitor. Một ví dụ điển hình của cách tiếp cận này là khái niệm máy ảo Vmware.

Bạn đang đọc truyện trên: AzTruyen.Top