2.1 – Khái niệm tiến trình (Proccess)
2.1.1 – Định nghĩa tiến trình
Tiến trình là một khái niệm được nhắc tới trong nhiều công trình nghiên cứu.
Đó là một trong những khái niệm được dùng phổ biến nhất nhưng đồng thời đó cũng là khái niệm kém chuẩn xác nhất nếu xét về mặt định nghĩa.
Một cách không hình thức có thể coi tiến trình là một nhóm các bytes có nội dung thay đổi theo một luật nào đó. Luật này được mô tả bằng chương trình, hướng dẫn các hoạt động của processor. Mặc dù bản chất của khái niệm tiến trình khá rõ ràng, định nghĩa tiến trình hết sức đa dạng. Theo Saltzer thì “tiến trình là chương trình do một processor logic thực hiện”. Theo Dijkstra E. W. thì tiến trình
là những gì liên quan đến một hệ thống tính toán, xuất hiện khi thực hiện một chương trình. Horning và Randell năm 1973 đã xây dựng một định nghĩa hình thức cho tiến trình. Định nghĩa này khá phù hợp với nhu cầu sử dụng của chúng ta, vì vậy ta sẽ dừng lại kỹ hơn trước khi nêu lên định nghĩa.
Ký hiệu s1, s2, …, sn, … là các biến trạng thái. Vector S = (s1, s2, …, sn, …) gọi
là bộ biến trạng thái. Trạng thái là bộ giá trị cụ thể của vector S. Tập tất cả các trạng thái đó có thể tạo thành không gian trạng thái. Không gian trạng thái là hữu hạn mặc dù có số chiều và lực lượng cực lớn. Tác động việc gán giá trị cho một biến trạng thái. Dãy trạng thái trong không gian trạng thái của hệ thống tạo thành một công việc. Một trong những cách tạo công việc là thực hiện chuỗi các hành động khác nhau. Để thực hiện được hành động ta cần hàm hành động – ánh xạ trạng thái sang hành động. Hàm hành động có thể sinh ra công việc dựa vào trạng thái ban đầu. Nó mô tả hành động cần thực hiện ứng với mỗi trạng thái nhận được
và kết quả là ta có một chuỗi trạng thái, tức là một công việc. Người sử dụng nói chung chỉ quan tâm đến giá trị biến mình xây dựng. Vì vậy trạng thái của hệ thống
Các vấn đề trong bài này liên quan tới điều khiển hoạt động các chương trình trong điều kiện có cạnh tranh tài nguyên, xét mối quan hệ tác động qua lại giữa các chương trình đang hoạt động trong môi trường đa nhiệm, các biện pháp chống bế tắc và cơ chế gọi gọi tiến trình.
có thể hạn chế trong phạm vi nội dung phạm vị bộ nhớ, còn hàm hành động là chương trình.
Dựa trên những khái niệm cơ bản đó ta có thể định nghĩa tiến trình như quá trình chuyển từ trạng thái này sang trạng thái khác dưới tác động của hàm hành
động
2.1.2 – Tiến trình và tuyến (thread)
Hiệu quả hoạt động của hệ thống sẽ còn được nâng cao hơn nữa nếu tiến trình được chia thành các phần nhỏ hơn thỏa mãn các điều kiện:
Quá trình chuyển trạng thái ở mỗi phần có thể được thực hiện song song, Trong phạm vi một phần, việc chuyển trạng thái phải được tiến hành tuần tự.
Các phần này được gọi là tuyến (threads). Trên quan điểm tổ chức quản lý và
thực hiện tuyến không khác nhiều với tiến trình, vì vậy tuyến còn được gọi là tiểu tiến trình (miniprocess). Các vấn đề quản lý tuyến và quản lý tiến trình sẽ được xét
dưới tiêu đề chung là quản lý tiến trình. Lưu ý rằng các tiến trình khác nhau sẽ có không gian bộ nhớ khác nhau, nhưng các tuyến của một tiến trình đều có chung một không gian bộ nhớ duy nhất.
Tiến
Tiến
Tiến
Các tuyến của tiến trình 3
Hình 2.1. Tiến trình và tuyến.
Các không gian bộ nhớ
Mỗi tiến trình tương ứng với một cấu trúc thông tin cho phép xác định đơn trị tiến trình. Cấu trúc thông tin này gọi là khối mô tả tiến trình. Khối mô tả tiến trình bao gồm:
Biến trạng thái tiến trình cho biến trạng thái hiện tại của tiến trình (sẵn sàng, thực hiện hay bị ngắt).
Vùng bộ nhớ lưu trữ giá trị các thanh ghi tiến trình sử dụng.
Thông tin về tài nguyên tiến trình đang sử dụng hoặc có quyền sử dụng. Mỗi tiến trình cũng như mỗi tuyến đều phải có một bộ đếm lệnh (Instruction
Pointer – IP) riêng.
Ngoài ra, khối mô tả tiến trình còn chứa một số thông tin hỗ trợ khác phục vụ trao đổi thông tin và đối thoại giữa các tiến trình.
2.1.3 – Phân loại tiến trình
Phụ thuộc vào thời gian tồn tại tiến trình người ta chia chúng thành 2 loại: kế tiếp và song song. Hai tiến trình được gọi là song song nếu thời điểm bắt đầu của một tiến trình nằm giữa thời điểm bắt đầu và kết thúc của một tiến trình khác. Hai tiến trình không song song là những tiến trình kế tiếp. Các tiến trình kế tiếp không có điều kiện tác động trực
tiếp tới nhau vì vậy không nảy sinh các
vấn đề phức tạp trong quản lý và điều
khiển. Các vấn đề lý thuyết chủ yếu
xoáy quanh việc quản lý và điều khiển
tiến trình song song.
Dựa vào mối quan hệ thông tin và
tác động qua lại với nhau các tiến trình song song được chia thành 4 loại chính:
Tiến trình độc lập,
Tiến trình có quan hệ thông tin,
Tiến trình phân cấp,
Tiến trình đồng mức.
Các tiến trình song song độc lập không có bất kỳ mối quan hệ nào với nhau trong quá trình hoạt động.
Tiến trình song song có quan hệ thông tin là những tiến trình trong quá trình hoạt động có nhu cầu gửi thông báo tới một tiến trình khác. Vấn đề phức tạp là tiến trình gửi thông báo không biết tiến trình nhận có tồn tại hay không và nếu tồn tại thì ở đâu và vào giai đoạn nào.
Có 3 cơ chế tổ chức truyền tin:
Hình 2.2. Tiến trình song song.
Kỹ thuật hòm thư,
Truyền qua cổng vào ra,
Truyền qua Monitor.
Ở kỹ thuật hòm thư hệ thống dùng một vùng của bộ nhớ chung G để các tiến trình trao đổi thông báo. Các tiến trình có thể ghi thông báo vào vùng bộ nhớ này hoặc đến đó kiểm tra xem có thông báo dành cho mình hay không. Hòm thư cho phép lưu trữ thông báo kích thước lớn và thời gian lưu trữ lâu dài. Mỗi thông báo ghi trong hòm thư phải có dấu hiệu của tiến trình gửi và tiến trình nhận. Tồn tại công cụ lọc thông báo hỗ trợ tiến trình nhận dễ dàng tìm ra thông báo dành cho mình nếu có.
Tuy nhiên kỹ thuật hòm thư có nhược điểm lớn là tính thụ động. Tiến trình nhận không biết thời điểm xuất hiện thông báo dành cho mình. Thông báo có thể được tiếp nhận xử lý với độ trễ lớn. Ngoài ra, với hàng rào bảo vệ bộ nhớ chặt chẽ, việc truy nhập vào hòm thư không phải lúc nào cũng thuận tiện và nhanh chóng.
Để hạn chế các nhược điểm trên, thông báo có thể được truyền qua cổng vào
ra. Tiến trình nhận dễ dàng nhận biết và tiếp cận thông báo hơn. Tuy vậy thông tin gửi quả cổng vào ra không thể lưu trữ lâu dài và có dung lượng không lớn. Một số
hệ thống kết hợp cả hai phương pháp trên: nội dung thông báo được ghi vào hòm thư, còn ở cổng vào ra là thông tin bổ trợ giúp tiến trình nhận biết và truy cập dễ dàng hơn tới thông báo.
Các tiến trình có thể trao đổi thông tin với nhau thông qua các công cụ cấp cao – qua các tiến trình điều khiển của hệ thống, thông thường là thông qua chương trình Monitor (thư ký). Công cụ trao đổi cấp cao cho phép chủ động gửi thông tin đến tiến trình nhận vào đúng thời điểm cần thiết. Tuy vậy, việc thông báo nhiều qua monitor có thể làm ảnh hưởng đến năng suất của hệ thống.
Trong quá trình hoạt động một tiến trình có thể khởi tạo một tiến trình khác hoạt động song song. Tiến trình khởi tạo là tiến trình chính, tiến trình thứ hai là tiến trình con. Điều quan trọng là tiến trình con nhận tài nguyên ở đâu: Từ tiến trình chính hay trực tiếp từ hệ thống. Mô hình quản lý tài nguyên tập trung tiến
hành phân phối tài nguyên trực tiếp cho cả tiến trình chính lẫn tiến trình con. Mô hình quản lý tài nguyên phân tán đơn giản hơn. Tài nguyên được phân phối cho tiến trình chính. Tiến trình con nhận tài nguyên từ tiến trình chính. Cách phân phối tài nguyên này đơn giản nhưng không tối ưu vì tài nguyên phải được phân phối sớm. Trong mọi trường hợp, tiến trình con nhận tài nguyên ở đâu thì phải trả về
nơi nhận. Chính vì vậy trong mô hình quản lý tài nguyên phân tán tiến trình chính phải kết thúc sau tiến trình con.
Tiến trình đồng mức là những tiến trình có một số tài nguyên sử dụng chung theo nguyên tắc lần lượt. Sau khi sử dụng xong tài nguyên chung một tiến trình bàn giao lại tài nguyên này cho tiến trình khác. Bản thân tiến trình bàn giao lại tài nguyên vẫn có thể tiếp tục các công việc của mình trong khoảng thời gian chờ nhận lại tài nguyên chung. Ở đây không có quan hệ chính - phụ, không có tiến trình nào gọi tiến trình nào đó mà chỉ đơn giản là bàn giao tài nguyên. Ví dụ về tiến trình đồng mức là các tiến trình đánh cờ. Hai tiến trình “đấu cờ” với nhau cùng sử dụng chung thông tin về bàn cờ và mỗi bên lần lượt sử dụng vùng nhớ liên quan tới bàn cờ cho đến khi tính xong nước đi thì ghi nhận và chuyển giao lại “bàn cờ” cho đối thủ. Trong thời gian chờ đợi đối thủ đi tiến trình vẫn có thể hoạt động, dự tính các tình huống và cách đối phó.
2.1.4 – Mô tả tiến trình song song
Tồn tại các ngôn ngữ định hướng mô tả và xử lý tiến trình, ví dụ như ngôn ngữ FP (Functional Pascal), SIMULA 67, . . . nhưng việc mô tả tiến trình trên các ngôn ngữ này cũng phức tạp không kém việc dùng JAVA hay C++ để mô tả.
Để thuận tiện trình bày giải thuật người ta thường dùng một ký pháp riêng thể hiện các tiến trình song song.
Giả thiết cần diễn tả việc thực hiện song song trên một máy hoặc một số máy khác nhau n công việc
T1, T2, . . ., Tn người ta
thường dùng một trong 2
ký pháp nêu ở hình 2.3.
Ở ký pháp a) các
công việc được đặt trong
cặp ngoặc PARBEGIN
(Parallel Begin – Bắt đầu
song song) và PAREND
(Parallel End – Kết thúc
song song).
Ở ký pháp b) CO- là tiếp đầu ngữ chỉ đồng mức trong tiến Anh, COBEGIN – bắt đầu đồng mức, COEND – kết thúc đồng mức.
Hình 2.3. Mô tả tiến trình song song.
Để trình bày giải thuật, các công việc Ti, i = 1 ÷ n phải được mô tả một cách tuyệt đối chính xác; vì vậy nội dung các công việc này sẽ được nêu bằng một trong
số các ngôn ngữ lập trình cụ thể như PASCAL hoặc C/C++.
2. 2 – Đoạn găng và điều độ tiến trình qua đoạn găng
Các tiến trình song song có thể hoàn toàn độc lập, không có quan hệ gì với nhau, có thể tương tác hỗ trợ nhau hoặc có thể tương tranh trong việc sử tài nguyên. Phải có những giải pháp tránh xung đột giữa các tiến trình, đảm bảo mọi tiến trình đều thực hiện được và kết thúc bình thường.
2.2.1 – Tài nguyên găng và đoạn găng
Khái niệm tài nguyên găng và đoạn găng được E.W. Dijsktra đề xuất và khảo sát năm 1965.
Tài nguyên găng là loại tài nguyên mà trong một khoảng thời gian nhất định chỉ có thể phục vụ hợp lý một số tiến trình nhất định. Trong thực tế, phần lớn các tài nguyên găng có khả năng phục vụ bằng 1.
Ví dụ, ở hệ thống bán vé máy bay, file thông tin tình trạng vé của một chuyến bay là tài nguyên găng đối với hệ thống tra cứu và bán vé. Khi có một khách hàng đến hỏi thông tin, đặt vé cho một chuyến bay và nếu quầy bán vé đã truy nhập được vào file tình trạng vé của chuyến bay này thì mọi quầy khác không thể truy tới file đó chừng nào giao dịch với khách hàng nói trên chưa kết thúc. Cần phải có chế độ tổ chức hợp lý để khi quầy ban đầu kết thúc giao dịch các quầy khác nhận biết được và cho phép một trong số các quầy đang chờ đợi này truy cập vào file. Đoạn chương trình có sử dụng tài nguyên găng được gọi là đoạn găng hay
chỗ hẹp của tiến trình.
2.2.2 – Điều độ tiến trình qua đoạn găng
Việc tổ chức cho mọi tiến trình qua được chỗ hẹp gọi là điều độ tiến trình qua đoạn găng.
Các giải thuật điều độ phải thỏa mãn 4 yêu cầu:
Ở mọi thời điểm tài nguyên găng không phải phục vụ quá khả năng của mình,
Không để tiến trình nào nằm vô hạn trong đoạn găng,
Một tiến trình, nếu xếp hàng chờ đợi thì sớm hay muộn cũng qua được đoạn găng,
Nếu có tiến trình chờ đợi và nếu tài nguyên găng được giải phóng thì tài
Việc thực hiện yêu cầu thứ nhất là để đảm bảo tính đúng đắn trong việc thực hiện tiến trình. Tiến trình vào đoạn găng phải thông báo việc mình bắt đầu sử dụng tài nguyên găng và các tiến trình khác phải nhận biết được thông báo. Thông báo vào đoạn găng và việc nhận biết ở các tiến trình khác phải đồng bộ để tránh tình trạng nhiều tiến trình cùng vào đoạn găng hay ngược lại – cùng chờ đợi nhau trong khi tài nguyên găng không phục vụ tiến trình nào.
Ý nghĩa của yêu cầu thứ hai là không để một tiến trình nào chiếm tài nguyên găng thành tài nguyên riêng cho mình. Khi đã trở thành tài nguyên riêng của tiến trình, hệ thống sẽ không có khả năng phân phối lại cho các tiến trình khác.
Yêu cầu thứ ba là đảm bảo mọi tiến trình đều qua được chỗ hẹp của mình. Tồn tại các trường hợp hệ thống hủy tiến trình nếu yêu cầu về tài nguyên không đáp ứng. Việc hủy tiến trình phụ thuộc vào loại yêu cầu và được tiến hành vì lợi ích của cả hệ thống lẫn người sử dụng.
Yêu cầu thứ tư là yêu cầu quan trọng nhất và cũng khó thực hiện nhất. Các tài nguyên găng phải được khai thác triệt để và liên tục. Điều này liên quan tới việc thông báo giải phóng tài nguyên găng, nhận biết thông báo này và xử lý chúng một cách đồng bộ.
Các công cụ điều độ được chia thành hai loại: cấp thấp và cấp cao. Cấp thấp
là loại công cụ mà giải thuật điều độ cài đặt ngay trong tiến trình được điều độ. Cấp cao là loại công cụ của hệ thống, nằm ngoài tiến trình được điều độ. Các tài nguyên găng nằm trong danh mục quản lý tài nguyên của hệ thống được quản lý và điều độ bằng công cụ cấp cao. Dĩ nhiên, các công cụ cấp cao cũng phải được xây dựng dựa trên nền tảng của công cụ và giải thuật điều độ cấp thấp.
2.3 – Các giải thuật điều độ cấp thấp
Các giải thuật điều độ cấp thấp được chia thành 3 lớp:
Phương pháp khóa trong,
Phương pháp kiểm tra và xác lập,
Kỹ thuật đèn báo.
Mỗi lớp giải thuật dựa trên một nguyên lý hoạt động riêng. Việc nghiên cứu các loại giải thuật là cần thiết cả về mặt lý thuyết lẫn ứng dụng vì mỗi lớp giải thuật có môi trường ứng dụng hiệu quả của nó và trong môi trường hệ thống nhiều processors phổ biến hiện nay, công việc điều độ phải được tổ chức dựa trên cơ sở của hai trong số các giải thuật trên.
Việc triển khai giải thuật điều độ cấp thấp là cần thiết với các tiến trình ứng dụng khi phải làm việc với tài nguyên găng của hệ thống ứng dụng.2.3.1 – Phương pháp khóa trong
Nguyên lý của phương pháp khóa trong là mỗi tiến trình đặt tương ứng tài nguyên găng mà mình sử dụng với một biến ở vùng bộ nhớ chung và dùng biến này để đánh dấu việc mình đang sử dụng tài nguyên găng hay không. Bao nhiêu tài nguyên găng sử dụng trong tiến trình sẽ có bấy nhiêu biến. Mỗi lần muốn vào đoạn găng, tiến trình phải kiểm tra tất cả các biến tương ứng với tài nguyên găng này của các tiến trình khác và chỉ vào đoạn găng khi không có tiến trình nào khác sử dụng tài nguyên găng này.
Để minh họa cho giải thuật ta xét trường hợp có 2 tiến trình và một tài nguyên găng có khả năng phục vụ bằng 1. Mỗi tiến trình có một đoạn găng ở đầu. Các tiến trình lặp vô hạn.
Giải thuật điều độ bằng phương pháp khóa trong phức tạp và tinh tế. Vì vậy các sơ đồ nguyên lý sẽ được xem xét, phân tích, một mặt minh họa cho tư tưởng giải thuật, mặt khác – để hiểu rõ vai trò và ý nghĩa các bước xử lý trong giải thuật điều độ. Cần lưu ý tránh nhầm lẫn đồng nhất sơ đồ nguyên lý với giải thuật điều độ!
a – Sơ đồ nguyên lý I: