Khi hệ thống phân tán đầu tiên xuất hiện thì trên hệ thống được lập trình bằngcác ngôn ngữ truyền thống tuần tự, thường làm việc bổ sung thêm vài thủ tục, thưviện cho việc gử
Trang 1LỜI MỞ ĐẦU
Trong những năm gần đây, những thành tựu về Khoa học - Công nghệ pháttriển mạnh mẽ đã làm thay đổi cách nhìn, cách nghĩ của con người từ đó làm thayđổi bộ mặt của xã hội Đặc biệt là sự phát triển vượt bậc trong lĩnh vực công nghệthông tin Từ những chiếc máy tính điện tử đầu tiên đã cho ra đời những hệ thốngmáy tính hoạt động đơn lẻ với nhau ta gọi là máy tính đơn sau đó có thể nối mạngvới nhau để trở thành một mạng máy tính, từ hệ máy tính tập trung đã phát triểnthành hệ máy tính phân tán
Khi hệ thống phân tán đầu tiên xuất hiện thì trên hệ thống được lập trình bằngcác ngôn ngữ truyền thống tuần tự, thường làm việc bổ sung thêm vài thủ tục, thưviện cho việc gửi và nhận thông tin Khi ứng dụng phân tán trở nên phổ biến hơn
và tinh vi hơn thì cách tiếp cận này đặc biệt trở nên không còn phù hợp Các nhàthiết kế trên toàn thế giới đã bắt đầu thiết kế các ngôn ngữ lập trình mới cụ thể choviệc thực hiện các ứng dụng phân tán
Trong nội dung của tiểu luận này sẽ trình bày hai vấn đề sau:
Phần I - LÝ THUYẾT
Các ngôn ngữ lập trình phân tán
Phần II – BÀI TẬP
Quản lý bộ nhớ bằng ngôn ngữ lập trình ADA
Tôi xin chân thành cảm ơn TS Lê Văn Sơn và các bạn lớp Khoa học máy tínhkhoá 2011– 2013 - Đại học Đà Nẵng đã giúp tôi hoàn thành tiểu luận này
Trang 1
Trang 2PHẦN LÝ THUYẾT
Chương I TỔNG QUAN VỀ HỆ PHÂN TÁN
I Hệ phân tán (Distributed System):
Hệ tin học phân tán là một hệ thống đa dạng, nhiều thành phần và phức tạp vềmặt cấu trúc, là vùng tri thức hiện đại đang được các chuyên gia công nghệ thôngtin đặc biệt quan tâm nghiên cứu và đỗi mới một cách nhanh chóng Trong điềukiện đó, đứng trên một quan điểm khác nhau người ta đã đưa ra các định nghĩakhác nhau về hệ phân tán như sau:
Theo định nghĩa của Andrew Tanenbanum:
Hệ phân tán là một tập hợp các máy tính độc lập mà xuất hiện đối với cácngười sử dụng như một máy tính đơn Với các đặc điểm:
Nhiều bộ phận
Kết nối thông qua mạng truyền thông
Chia sẻ các tài nguyên
Hình 1 Ví dụ về hệ phân tán - Một Intranet tiêu biểu
Nói chung, một định nghĩa phổ biến và khá đầy đủ về hệ phân tán được trìnhbày trong tài liệu [1] như sau:
“Hệ tin học phân tán hay nói ngắn gọn là hệ phân tán (Distributed System) là
hệ thống xử lý thông tin bao gồm nhiều bộ xử lý hoặc bộ vi xử lý nằm các tại các
Trang 3vị trí khác nhau và được liên kết với nhau thông qua phương tiện viễn thông dưới
sự điều khiển thống nhất của một hệ điều hành.”
Mục tiêu của hệ phân tán:
Tăng tốc độ bình quân trong tính toán, xử lý
Cải thiện tình trạng luôn luôn sẵn sàng của các loại tài nguyên
Tăng độ an toàn cho dữ liệu
Đa dạng hóa các loại hình dịch vụ tin học
Đảm bảo tính toàn vẹn của thông tin.
II Các mô hình hệ phân tán:
Platform (hệ nền): phần cứng mức thấp nhất và các lớp phần mềm (hệ điềuhành)
Middleware: một lớp của phần mềm mà mục đích của nó là đánh dấuheterogeneity và để cung cấp một mô hình lập trình cho các ứng dụng, như:CORBA, RMI (Remote Method Invocation), DCOM (Distributed ComponentObject Model),
2 Kiến trúc hệ thống phân tán:
a Mô hình Client/Server:
Trang 3
Trang 4Hình 3 Một WebServer thường là một client của một File Server cục bộ.
Các WebServer và các Server của Internet khác là các client của một DNSServer cái mà dịch các tên miền Internet thành các địa chỉ mạng
Một máy tìm kiếm là một Server, nhưng nó chạy chương trình được gọi làWeb Crawlers cái mà truy cập các Web server thông qua Internet cho thông tin yêucầu
Dịch vụ cung cấp bởi nhiều server:
Hình 4 Dịch vụ cung cấp bởi nhiều Server
Nhiều Server có thể:
Mỗi phần là một tập hợp các đối tượng
Duy trì các bản copy của toàn bộ tập hợp các đối tượng trên một vài máy
Ví dụ Web Proxy Server:
Trang 5Hình 5 Web Proxy Server cung cấp một bộ nhớ cache chia xẻ cho các máy client tại
một site hoặc băng qua một vài site khác nhau.
b Mô hình tương tác trong hệ phân tán:
Thực hiện truyền thông:
Đồng hồ và thứ tự các sự kiện:
Không có khái niệm toàn cục của thời gian
Nhịp độ đồng hồ trôi: nhịp độ tương đối ở một đồng hồ máy tính trôi dạt
ra khỏi từ một đồng hồ tham chiếu hoàn hảo
Trang 6Chương II NGÔN NGỮ LẬP TRÌNH PHÂN TÁN
I Giới thiệu
Khi hệ thống phân tán lần đầu tiên xuất hiện thì hệ thống đã được lập trình vớingôn ngữ tuần tự truyền thống, thường là với việc bổ sung của một vài thủ tục thưviện để gửi và nhận tin nhắn Khi ứng dụng phân tán trở nên phổ biến hơn và tinh
vi hơn, cách tiếp cận này đặc biệt trở nên không thỏa đáng Các nhà nghiên cứutrên toàn thế giới bắt đầu thiết kế ngôn ngữ lập trình mới cụ thể cho việc thực hiệnphân tán các ứng dụng Những ngôn ngữ và lịch sử, nguyên tắc cơ bản, thiết kế,
và sử dụng của chúng là chủ đề của chương này
Các ngôn ngữ lập trình phân tán có thể chia làm hai loại chính:
Một số ngôn ngữ cho phép lập trình ứng dụng với tư cách là kích hoạt songsong và hoàn toàn không quan tâm đến vấn đề là sẽ triển khai chương trìnhtrên hệ tập trung hay là hệ phân tán Các ngôn ngữ này triển khai cấu trúckiểm tra có tính chất thủ tục Mặc dù có một số hạn chế, song chúng cũngtriển khai trên các hệ phân tán
Một số ngôn ngữ khác cho phép triển khai tường minh công việc phân tán.Chúng cho phép tạo các mối quan hệ cần thiết từ một trạm đến các trạm kháctrong hệ phân tán
Hiện nay có nhiều ngôn ngữ khác nhau cho phép lập trình phân tán như: CSP,Occam, NIL, Ada, Java, “Concurrent” C, SR, Emerald, Argus, Aeolus, ParAlfl,
“Concurrent” PRO-LOG, PARLOG, Linda, Orca, …
Tiểu luận này sẽ đi vào giới thiệu 2 ngôn ngữ lập trình là ADA và CSP
III Ngôn ngữ ADA
1 Giới thiệu ngôn ngữ ADA
Ada là ngôn ngữ lập trình xuất xứ từ Bộ quốc phòng Mỹ vào khoảng nửa
đầu thập niên 80 của thế kỷ 20 Ngôn ngữ này được đặt tên theo Ada Augusta nữ
bá tước xứ Lovelace (1815 – 1852), nhà toán học với ý tưởng tiên phong coi phầncứng và phần mềm là hai mặt khác nhau đã đi vào lịch sử như lập trình viên đầutiên và hacker đầu tiên của loài người
Nhu cầu của Lầu Năm Góc lúc đó là một ngôn ngữ lập trình duy nhất thay thếcho khoảng 500 ngôn ngữ dùng cho các hệ thống nhúng (embedded) Đặc trưngcủa các hệ thống như thế là phần cứng đa dạng, phần cứng liền với phần mềm,phần mềm hệ thống liền với phần mềm ứng dụng, thời gian sử dụng lâu dài, tính
Trang 7chất thời gian thực (real-time) và độ bền cao (high-integrity) thể hiện rõ, nhiều hệthống nhúng là hệ phân tán (distributed).
Ngôn ngữ lập trình đáp ứng những yêu cầu đó phải chặt chẽ, nhỏ gọn nhưng
có sức biểu diễn lớn, viết mã nguồn dễ đọc, sinh mã đích hiệu quả
Vì thế Ada xuất phát từ Pascal, nhưng kiểm tra kiểu mạnh hơn Mở rộng kiểu(type extension), kế thừa (inheritance) và đa kế thừa giao diện (multiple interfaceinheritance) hỗ trợ lập trình định hướng đối tượng Ngoài các kết cấu điều khiểnthông thường như rẽ nhánh, lặp, xử lýngoại lệ (exception), và kết cấu đơn vị thôngthường như thủ tục (procedure), hàm (function), Ada còn có kết cấu gói (package)
hỗ trợ lập trình theo thành phần (modular), kết cấu mẫu (generic) hỗ trợ lập trìnhmẫu, kết cấu tác vụ (task) và kiểu có bảo vệ (protected type) hỗ trợ lập trình songsong và tương tranh
Trên thế giới, tỉ lệ lập trình viên sử dụng ngôn ngữ Ada chiếm khoảng 5% Ada có bộ biên dịch miễn phí GNAT và môi trường phát triển miễn phí GPS,sinh mã đích cho rất nhiều platform khác nhau
end hello; nhắc lại tên thủ tục
Một số đặc điểm cú pháp khác như sau:
vòng lặp thoát bởi exit:
i : integer; khai báo i là biến số nguyên
Trang 8Khai báo T1
Khai báo T2
Khai báo T1 Khai báo T2
Thân của hoạt động T1
Quá trình trao đổi từ xa được bắt đầu bằng tiến trình T1
Các đường chấm chỉ quá trình thực hiện lệnh từ xa.
Dữ liệu D Thủ tục P
Hình 5.Thực hiện chương trình từ xa trong ADA
Một vòng lặp viết theo dạng for:
for i in 1 10 loop
put_line("Hello World");
end loop;
3 Hoạt động
Khi mô tả một hoạt động trong ngôn ngữ Ada cần phải xác định các điểm:
- Các dữ liệu cục bộ
- Các thủ tục cho phép truy cập vào dữ liệu cục bộ
- Một chương trình tuần tự hay thân của hoạt động được thực hiện cùng
lệnh khởi sự ban đầu.
Hai hoạt động có thể trao đổi thông tin với nhau hay vào theo kiểu cạnh tranh
để truy cập dữ liệu Khi hai hoạt động cùng truy cập vào một dữ liệu thì cần phải
Trang 9P, nó có thể vào và xung đột với T2 để truy cập dữ liệu D Thực tế T2 hành động như là kiem_tra để kiểm tra các truy cập vào D Tất cả các hành động trên D có thể
thực hiện song song được xác định như là thủ tục Ngược lại các hành động theo
kiểu loại trừ tương hỗ được thực hiện trực tiếp bởi T 2; chứng được xác định như làmột điểm vào
Trong hoạt động, khai báo vào cũng giống như phần đầu của khai báo thủ tục
Như thế, trong T 2, ta có phần khai báo như sau:
xử lý này được thực hiện bởi T 2 bằng một lệng đặc biệt chap_nhan(accept) Lệnh
này được thực hiện như sau:
Chừng nào một lệnh gọi vào đã không được thực hiện, lệnh chap_nhan sẽ là
một lệnh treo Ngược lại phải gọi vào treo hoạt động thực hiện nó cho đến khi hoạt
động mà ở đó vào đã kết thức việc thực hiện một lệnh chap_ nhan tương ứng với vào đó đã được khai báo có nghĩa là thực hiện các lệnh giữa do và end phối hợp cùng với chap_nhan.
Để cùng một vào, ta có thể tìm thấy nhiều lệnh chap_nhan; điều đó cho phép
kết hợp nhiều xử lý khác nhau
Cuối cùng, việc xử lý có thể bị bỏ sót do thiếu do…end chẳng hạn Điều đó
tương ứng với việc chỉ thực hiện "cuộc gặp gỡ"
Chờ bội:
ADA là ngôn ngữ chờ không hạn định một lời gọi trong nhiều lời gọi cho
phép
Ví dụ phátbiểu sau:
Trang 9
Thực thể E(X: nguyên ; Y: out nguyên)
Chấp nhận E(X: in nguyên ; Y: out nguyên) do Y:=X+1
Chấm dứt
Lựa chọnChấp nhận X(…) thực hiện T1 kết thúc
TL1
hoặcchừng nào C1 accept Y(…) thực hiện
Trang 10Chỉ ra rằng:
Nếu C 1 nhận giá trị false, thì chờ một lời gọi từ X.
Nếu C 1 nhận giá trị true, thì chờ một lời gọi từ X hay từ Y.
Trong trường hợp sau cùng, nếu không có lời gọi nào từ X hay từ Y đã được tiến hành thì hoạt động thực hiện lệnh lua chon bị treo; nó phải chấp nhận lời gọi
đầu tiên trong số hai "chờ" nêu trên Mỗi khi việc chọn lựa là có thể thì nó là bấpbênh
Việc xử lý từng nhánh đuwọc phân định thành hai phần bàng từ khoá ket thuc
Ti và TL i ; trong tiến trình T i , hoạt động gọi đang trong trạng thái chờ và trong TLi,
nó có thể thực hiện công việc của mình theo kiểu song song
Cần lưu ý rằng các xử lý T i và TL i là các dãy phát biểu nào đó và có thể chứa các lựa chọn và các chấp nhận.
4 Ứng dụng
Ngoài các ứng dụng truyền thống trong vũ khí, khí tài và các hệ thống liênlạc, tham mưu, chỉ huy, tác chiến, sau hơn 2 thập kỷ ngày nay Ada còn được dùngtrong các ứng dụng của ngành thám hiểm không gian, hàng không, giao thông sắt
& bộ, năng lượng hạt nhân, viễn thông, và tài chính – ngân hàng
Chương trình viết bằng ngôn ngữ giả định Ada
Task TraCuu is
Procedure truy_van1(Ten : in identifier ; Diem : out interger);
Entry cap_nhat1(Ten : in identifier ; Diem : in integer);
Task body TraCuu is
Trang 11[<Tiến trình 1>]||[<Tiến trình 2>]||…||[<Tiến trình n>]
Accept fincons ; Lec:=lec-1
or when (lec=0) =>
Accept cap_nhat1(Ten : in identifier ; Diem : in integer) do
<cập nhật Table>
End End Select End Loop;
End ;
End TraCuu;
IV Ngôn ngữ CSP (Communicating Sequential Processes)
CSP được thiết kế bởi Hoare, cho phép thực hiện có hiệu quả trên một loạt cáckiến trúc CSP cung cấp một câu lệnh đơn giản song song để tạo ra một số cố địnhcủa các tiến trình song song CSP cho phép lập trình ứng dụng dưới dạng một sốlượng tiến trình cố định Các tiến trình này có thể phối hợp với nhau nhờ phép toánliên lạc kiểu "kiểu gặp gỡ" Tất cả thông tin liên lạc trong tiến trình được thực hiệnbằng cách sử dụng đồng bộ việc tiếp nhận và gửi
CSP cho phép một tiến trình tiếp nhận có chọn lọc, dựa trên sự sẵn có của đầuvào và các lĩnh vực tên của các thông tin liên lạc đến
Một chương trình bao gồm tập hợp các tiến trình có thể thể hiện dưới dạngsau đây:
Trong đó, <Tiến trình > dựa vào liên hợp một tên với mã chương trìnhnguồn của tiến trình:
Ở đây, các biến toàn cục bị cấm áp dụng
Trang 11Name::<text>
Trang 12Các tiến trình cần có hai hàm nguyên thuỷ để trao đổi Đó là gửi (phép ra) và nhận (phép vào) một thông điệp Mỗi tiến trình cần phải định danh tường minh
người đối thoại (đối tác) của mình và các thông điệp phải đúng kiểu Các vào rakinh điển được đảm bảo bằng các tiến trình đựoc định nghĩa trước khi phối hợp cácngoại vi mắc nối
Để gửi thông điệp cho tiến trình Q, tiến trình P cần phải sử dụng lệnh ra có
dạng như sau:
Việc tiếp nhận thông điệp tại Q được tiến hành thông qua lệnh có dạng sau:
Ta phải có các thông điệp cấu trúc hoá ví dụ như việc chuyển hai giá trịnguyên có thể thể hiện như sau:
Việc kiểm tra chặt chẽ trên lai lịch của người đối thoại và trên kiểu của cácthông điệp trao đổi được tiến hành khi thử hiệu chỉnh và dịch chương trình Ngượclại chính việc kiểm tra đó có thể lại là việc bắt buộc đối với người lập trình
Ví dụ: [writer :: x: real; || reader(i: 1 2) :: ] tạo ra ba tiến trình, đượcgọi là "writer", "reader (l)" và "reader(2),"writer” có một biến cục bộ x Các biếnchỉ số có thể được sử dụng trong thân của tiến trình reader
Tiến trình gửi thư xác định tên của tiến trình điểm đến và cung cấp một giá trịđược gửi đi Tiến trình nhận được quy định cụ thể tên của tiến trình gửi và cungcấp một biến mà giá trị nhận được phân công Một tiến trình thực hiện, hoặc gửihoặc nhận bị chặn lại cho đến khi đối tác của nó đã thực hiện báo cáo bổ sung Hãyxem xét ví dụ sau đây:
[X :: Y! 3||Y :: n: số nguyên; X? n]
Trong một tuyên bố của tiến trình X, giá trị 3 được gửi đến Y Trong mộttuyên bố của tiến trình Y, đầu vào được đọc từ tiến trình X và được lưu trữ trongcác biến cục bộ n Khi cả hai X và Y đã thực hiện báo cáo, các thông tin liên lạcmột chiều xảy ra Kết quả được phân công 3 đến n
Ứng dụng: CSP cơ bản là một thiết kế giấy, nhưng nó đã ảnh hưởng đến thiết
kế của một số ngôn ngữ, đáng chú ý nhất là ngôn ngữ Occam
Q!<Biểu thức>
P?<Biến>
Q!(4,5) trong PP!(i ,j) trong Q
Trang 13Occam được mô phỏng trên CSP Hoare và được thiết kế cho các lập trìnhInmos của transputer Inmos Ltd năm 1984 Occam cơ bản là ngôn ngữ lắp ráp củaphần mềm trung gian Ngôn ngữ thiếu tính năng mà đã trở thành tiêu chuẩn trongcác ngôn ngữ lập trình hiện đại nhất, chẳng hạn như thủ tục đệ quy, các mô-đun,
Trang 13
Trang 14KẾT LUẬN
Một ứng dụng phân tán thông thường rất phức tạp và phải được chia thànhnhiều mức khác nhau Tại mỗi mức, có nhiều vấn đề đặt ra cần phải giải quyết.Một trong những vấn đề quan trọng ta cần phải lựa chọn là ngôn ngữ nào trong tiếntrình lập trình với sự phụ thuộc ít nhất vào cấu trúc vật lý của việc phân tán
Trong tất cả các trường hợp, người lập chương trình phân tán cần phải xemxét số lượng các tiến trình song song và phối hợp chúng lại với nhau như thế nào làhợp lý nhất Để triển khai các tiến trình này, đầu tiên, cần phỉa có khả năng chothực hiện trên một trạm rồi liên thông giữa các trạm lại với nhau