Xem mẫu

Lập trình phân tán và lập trình trên mạng Occam, RS và Linda được mô tả như những ngôn ngữ đồng thời hoặc những mô hình cho hệ thống chặt chẽ. Chúng không đáp ứng được cho hệ thống không chặt chẽ hoặc là mạng máy tính, nơi những vấn đề về khả năng trong suốt và khả năng tương tác các toán tử là cần được suy nghĩ. Trong hệ thống lỏng, sự thực hiện các hệ chương trình đồng thời cần được cung cấp sự truyền thông tin cậy, đối tượng riêng biệt, nhân bản dữ liệu và một hệ thống hỗn tạp. Hai ngôn ngữ lập trình ORCA và JAVA là ví dụ liên quan đến lập trình hệ phân tán và mạng. ORCA Orca là ngôn ngữ lập trình động thời dựa trên mô hình đối tượng chia sẻ logic cho hệ thống phân tán lỏng. Nó hỗ trợ việc thực hiện song song của QT trên các máy khác nhau nhờ truy nhập đồng thời đối tượng dữ liệu chia xẻ. Đối tượng dữ liệu chia xẻ là các thể hiện của kiểu dữ liệu trừu tượng được người dùng định nghĩa. Chúng có thể được phân tán vật lý hoặc được nhân bản để truy nhập cục bộ hiệu quả và thuận tiện nhưng chúng hoàn toàn “trong suốt“ đối với chương trình ứng dụng nhờ thi hành của Orca. QT Orca mỗi khi được khởi tạo, truyền thông xuyên qua các đối tượng chia xẻ khi dùng các phép toán người dùng định nghĩa trên các đối tượng đó. Ưu điểm của việc sử dụng biến chia xẻ cho TTLQT thì tương phản với CTĐ là hoàn toàn rành mạch. Truyền thông liên bộ xử lý là hoàn toàn “trong suốt” và các thông tin toàn cục có thể được chia xẻ trực tiếp. Viết một chương trình đồng thời là gần gũi với kiểu lập trình thông thường. Thêm nữa, nếu thể hiện cấu trúc dữ liệu phức tạp của đối tượng được phân tán vật lý, việc sử dụng CTĐ tường minh để truy cập vào từng phần của cấu trúc dữ liệu sẽ trở nên khó khăn nếu không quá dài dòng. Khái niệm cốt lõi được dùng trong hệ thống Orca là đối tượng chia xẻ lôgic và kiểu dữ liệu trừu tượng. Khái niệm đối tượng chia xẻ lôgic (hoặc cấu trúc dữ liệu) đã từng biết trong Linda còn khái niệm kiểu dữ liệu trừu tượng có trong SR. Trong Linda đối tượng chai xẻ (bao gồm dữ liệu và QT) là các bộ trong không gian bộ. Phương thức truy nhập là phù hợp (địa chỉ hóa nội dung) nhưng ở mức thấp (nguyên thủy in, out, rd). Mặc dù về ngữ nghĩa thì khá đơn giản và đẹp đẽ, nhưng viết một chương trình với cấu trúc dữ liệu phức tạp trong Linda là không trực giác (nhúng trong những ngôn ngữ lập trình). Dùng kiểu dữ liệu trừu tượng trong Orca thì cho phép sự chặt chẽ kiểm tra kiểu và độ mềm dẻo của các phép toán trên đối tượng. SR là ngôn ngữ định kiểu mạnh và có tính trừu tượng kiểu dữ liệu giống như Orca. Tuy nhiên, do không có khái niệm đối tượng chia xẻ logic nên SR phải dựa vào một tập hợp lớn nguyên thủy đồng bộ và truyền thông (cuộc hẹn, CALL, SEND, năng lực và những đồng bộ biến chia xẻ khác). Mặt dù ngôn ngữ 101/249 này khá dồi dào cho lập trình đồng thời, nhưng đồng bộ và truyền thông QT lại không trong suốt. Orca được xem như ngôn ngữ thoả hiệp tốt giữa Linda và RS. QT đồng thời trong Orca được kích hoạt bằng cách tạo ra một QT mới trên một máy hoàn toàn xác định bởi lệnh fork: fork Tên_QT ( các tham số) { on [ số Bộ XL]} Tham số được truyền từ QT cha xuống QT con có thể là giá trị, đối tượng thường hoặc đối tượng chia xẻ. Giá trị và đối tượng thường là những dữ liệu cục bộ của QT. Đối tượng chia xẻ là toàn cục. Chúng được nhân bản tại mỗi bộ xử lý và cần một giao thức cập nhật nguyên tử để duy trì nhất quán của các bản sao của đối tượng chia xẻ. Hai kiểu đồng bộ trên đối tượng được Orca cung cấp là loại trừ ràng buộc và cộng tác có điều kiện. Orca cho rằng tất cả các phép toán đều hoàn toàn cô lập trên đối tượng. Mỗi đối tượng được gắn một khóa để loại trừ ràng buộc. Khoá chỉ có hiệu lực tại mức đối tượng và được giới hạn với đối tượng đơn. Khoá chia xẻ được cung cấp để cho phép cùng một lúc có nhiều phép toán đọc đối tượng. Để cộng tác có điều kiện, Orca sử dụng lệnh an toàn (Guarded) tương tự như trong CSP: Operation Op(parameters) //operation Tên_toán_tử(các_tham_số) Guarded condition do statements; //Guarded điều_kiện do các_câu_lệnh; Guarded condition do statements; // Guarded điều_kiện do các_câu_lệnh; Lệnh trong toán tử chỉ được thực hiện khi điều_kiện trong Guarded là đúng. Nếu không thì QT đó bị chặn lại. Nếu có hơn một điều kiện đúng, thì chỉ một lệnh điều kiện được chọn động để cung cấp cách thức thực hiện không xác định. Một toán tử đối tượng trong một chương trình ứng dụng trên Orca được biên dịch thành nguyên thủy invoke (yêu cầu). invoke (object, operation, parameters) Các nguyên thủy invoke được bẫy tới hệ thống thời gian thực hiện Orca (Orca RTS: Orca Run Time System). RTS kiểm tra xem đối tượng có phải là chỉ đọc. Nếu đúng, RTS đặt khoá chia xẻ cho bản sao địa phương, thực hiện QT đọc, sau đó lại mở khóa đối tượng. Nếu không, RTS khởi tạo một TĐ quảng bá đến tất cả các vị trí của đối tượng chia xẻ, bao gồm chính nó, để cập nhật đối tượng và kết khối QT. Khi nhận TĐ quảng bá để ghi lên đối tượng, RTS đặt một khoá ghi lên đối tượng, thực hiện toán tử ghi và mở khoá đối tượng. Nếu thông điệp quảng bá hình thành cục bộ, nó sẽ kết khối QT. RTS giả thiết truyền thông là tin cậy. Nó hỗ trợ tầng quảng bá tin cậy ngay dưới hệ thống thời gian chạy. Tầng quảng bá tin cậy đó có thể thi hành nhiều giao thức quảng 102/249 bá theo những đòi hỏi ngữ nghĩa khác nhau. Giao thức quảng bá kỳ vọng đảm bảo rằng mọi phía đối tượng nhận được toàn bộ các TĐ quảng bá và tất cả các TĐ được phân phát theo đúng một thứ tự (tức là quảng bá được xem như là một nguyên tử). Thi hành giao thức quảng bá nguyên tử được trình bày ở chương sau, tuy vậy ở đây giới thiệu khái quát cách tiếp cận đơn giản trong Orca để thực hiện quảng bá nguyên tử. Khi quảng bá được RTS yêu cầu, nhân của RTS gửi một TĐ điểm-điểm đến lời gọi nhân đặc biệt sequencer. Sequencer gắn một số hiệu dãy tới yêu cầu và quảng bá TĐ bao gồm các số hiệu dãy tới mọi phía đối tượng nhân bản. Chi số dãy được mỗi nhân dùng để xác định thứ tự phân phát TĐ, kiểm tra TĐ bội, và yêu cầu sequencer chuyển lại một TĐ nếu như TĐ đó bị mất. Đối tượng là đơn vị dữ liệu nền tảng trong Orca. Đối tượng được trình bày bằng một cấu trúc dữ liệu chẳng hạn như danh sách, cây hoặc đồ thị, thường được dùng bằng con trỏ trong ngôn ngữ lập trình quy ước. Con trỏ (pointer) là một địa chỉ máy. Truyền địa chỉ máy là kém ngữ nghĩa và có thể dẫn đến xung đột an ninh CTĐ ở HPT. Cơ chế cho phép thi hành và truyền cấu trúc dữ liệu phức tạp có sẵn để tạo ra mô hình đối tượng chia xẻ hữu dụng. Orca giải quyết vấn đề này bằng cách thay thế con trỏ bởi tên. Với mỗi đối tượng được RTS quản lý, mảng logic các dữ liệu có cấu trúc sẽ được duy trì cho đối tượng. Ví dụ, một cây nhị phân đơn giản t với 3 nút {A, B, C} và các liên kết trái và phải, được trình bày như sau: t[1] = 6,A,8 t[6] = 0,B,0 t[8] = 0,C,0 Mỗi nút trong cấu trúc dữ liệu này được tạo động bởi nguyên thủy RTS addnode(t), trả lại tên n cho nút đó. Tên n được dùng như số hiệu của cấu trúc mảng để đặt tên cho nút cũng như để liên kết tới các nút khác. Tương tự cũng có một nguyên thuỷ xóa nút là deletenote(t,n). Chỉ dẫn tới nút đã bị xóa sẽ gặp lỗi thực hiện. Mảng đối tượng mang tính lôgic: định vị và giải phóng lưu giữ chúng được RTS quản lý động. Dùng nút đặt tên để thi hành cấu trúc dữ liệu đạt được hiệu lực tới con trỏ mà không cần địa chỉ máy. Truyền cấu trúc dữ liệu phức tạp trở thành chấp nhận được với việc trả thêm tổng phí trong hệ thống thời gian chạy. Java Mục tiêu nguyên thủy của Orca là hỗ trợ lập trình đồng thời trong hệ phân tán. Vấn đề thi hành chính yếu của nó là tính toán phân tán và tạo độ trong suốt truyền thông tới các QT cộng tác. Java được đưa ra theo một phối cảnh khác. Nó là ngôn ngữ lập trình và môi trường lập trình, nhằm đạt được khả năng cộng tác trong phát triển phần mềm mạng. Chúng ta có thể hình dung rằng ứng dụng mạng chứa một tập hợp các môdun phần mềm 103/249 được phân tán một cách vật lý trên một hệ mạng diện rộng hỗn tạp. Mỗi môdun phần mềm có thể được thi hành và duy trì bởi những cá thể khác nhau trên những nút mạng. Để thực hiện một ứng dụng mạng thì phải tập hợp một số modun trên tới một nút mạng đơn. Khả năng liên thao tác để mở một ứng dụng mạng cần sự hỗ trợ của ba hệ thông cơ sở: 1. Các giao diện chuẩn định nghĩa tốt để tích hợp các môđun phần mềm, 2. Năng lực thực hiện môđun phần mềm trên máy tính bất kỳ, 3. Hạ tầng cho cộng tác và vận chuyển modun phần mềm Để thuận tiện tích hợp phần mềm, Java thông qua mô hình hướng đối tượng, một kiểu lập trình đã được dùng rộng rãi khi phát triển những phần mềm lớn. Ngôn ngữ Java tương tự ngôn ngữ hướng đối tượng C++. Với sự chấp nhận với một ít kiểu dữ liệu, như số và logic, mọi thực thể phần mềm được mô hình hóa như một đối tượng Java. Một đối tượng là một tóm lược của dữ liệu và các thủ tục (hoặc phương pháp) liên quan trên đối tượng đó. Đối tượng được tạo ra bằng việc thuyết minh lớp qua ví dụ. Lớp là một mẫu xác định các biến cũng như những phương pháp chung cho tất cả các đối tượng cùng kiểu (lớp). Lớp này thường chứa đựng lớp khác (thừa kế). Chúng là cơ sở để xây dựng các khối trong chương trình Java. Các file lớp thường dùng phân loại và sắp xếp trong các thư viện lớp được gọi là gói. các gói có thể được nạp cục bộ hay từ xa để khởi tạo đối tượng. Phát triển phần mềm mạng trở thành dễ điều khiển hơn do các thư viện lớp được chia xẻ. Tiếp cận đặt ra với Java là cho phép chạy mọi modul phần mềm tại mọi nơi theo ngữ nghĩa của khái niệm máy ảo. Hệ thống Java với trình biên dịch và trình phiên dịch. Đầu tiên, chương trình Java được biên dịch thành file lớp chứa các mã trung gian được gọi là applet (tiểu dụng). Tiểu dụng là chương trình độc lập máy và có thể được thông dịch trên mọi máy tính có trình thông dịch Java. Thông dịch trên mã trung gian là kém hiệu quả hơn so với chạy mã máy biên dịch. Tuy nhiên, ưu điểm lớn của cách thức này là mã trung gian được chuyển đi như những TĐ tới bất cứ môi trường nào và chạy trực tiếp không cần dịch lại. Một ứng dụng mạng có thể mang bất cứ một file mã byte nào trên đường truyền để thực hiện. Do các bản sao của file mã không cần lưu cục bộ, bài toán duy trì tính nhất quán cập nhật phiên bản trong phát triển phần mềm cộng tác được loại bỏ. Java được ràng buộc cẩn thận nhằm đảm bảo tính độc lập máy. Một vài đặc trưng của ngôn ngữ thông dụng là nguyên nhân làm cho các vấn đề liên thao tác hoặc an toàn được loại bỏ khỏi ngôn ngữ. Ví dụ, Java không cung cấp con trỏ, kiểu cấu trúc, chuyển đổi kiểu ngầm định hoặc thừa kế bội. Khái niệm về file đầu (.h) trong C cũng bị loại trừ khỏi Java. Hơn nữa, mọi phương thức và biến trong file lớp Java là được chhỉ dẫn bằng tên và được giải quyết trước khi thực hiện. Việc làm chậm giải pháp tên đòi hỏi sự hỗ 104/249 trợ của dịch vụ tên. Nó cung cấp sự trong suốt truy nhập, trong suốt định vị và an toàn bổ sung. Hạ tầng để chuyển vận tiểu dụng Java được sáng tỏ tốt nhất nhờ việc tích hợp Java cùng với hệ thống duyệt WWW. Theo nhiều khía cạnh, triết lý của Java cũng rất giống với duyệt Web là sử dụng giao thức giao vận như giao thức chuyển siêu văn bản HTTP để chuyển các modun HTML dọc theo các nút mạng hỗn tạp. HTML là ngôn ngữ đánh dấu độc lập máy để mô tả dữ liệu siêu văn bản. Giống như file lớp trong Java, file HTML là đối tượng có thể chứa các file HTML khác và có thể định vị và liên kết khi dùng bộ định vị tài nguyên tổng thể toàn mạng URL. Tiểu dụng Java có thể hợp nhất trong một file HTML và được thông dịch bởi trình thông dịch Java đã được dựng nội trong trình duyệt. Theo cách đó, trình duyệt vừa có thể hiển thị nội dung dữ liệu siêu văn bản tĩnh vừa có thể chạy linh hoạt tiểu dụng Java. Trình ứng dụng là vô kể. Với trình duyệt đa luồng và Java đa luồng, thì trình duyệt có thể hiển thị đồng thời văn bản cũng như hình ảnh động và trở thành tương tác giữa khách và phục vụ của ứng dụng. Một cách hiệu quả, trang Web được trình bày dưới một file HTML trở thành lối vào của tiểu dụng Java. Khái niệm thực hiện thông dịch trực tuyến trong Java không phải là mới. Ví dụ, Postscript và dữ liệu đồ họa GIF cũng được thông dịch trong hệ thống trình duyệt. Tuy nhiên, Java là ngôn ngữ đa năng đã được suy nghĩ cẩn thận cho lập trình mạng. Lưu ý cuối cùng là vấn đề an toàn khi thiết kế Java. An toàn là vấn đề khó tính trong lập trình mạng hệ thống mở. Thêm nữa, để định nghĩa ngôn ngữ chặt chẽ nhằm đề phòng sự lạm dụng của ngôn ngữ, Java là ngôn ngữ định kiểu mạnh giống như Orca. Mọi đối tượng trong Java phải được định kiểu tường minh. Trình biên dịch làm hiệu lực những kiểm tra kiểu tĩnh. Do mỗi máy thấy được tiểu dụng từ bên ngoài theo mã trung gian, cần phải xác minh mã trung gian không phải bị làm giả hay biến dạng. Kiểu và những thông tin điều khiển khác được tích hợp với mọi tiểu dụng. Trước khi thực hiện một tiểu dụng, mã của nó buộc phải được kiểm tra chặt chẽ bộ kiểm tra Java (Java Virifier) xem sự vi phạm về truyền tham số, chuyển đổi kiểu bất hợp pháp, khả năng tràn (vượt trần) và hụt (xuống quá đáy) stack, vi phạm truy nhập và sinh mã trung gian giả bởi trình biên dịch đáng ngờ. Việc kiểm tra lỗi thời gian chạy ở mức tối thiểu nhất nhằm có được sự thực hiện hiệu quả. Một vần đề về an toàn khác đáng chú ý tới lập trình trên mạng là sự nhái lại đối tượng. Khi tiểu dụng thực hiện có thể gọi một đối tượng khác. File lớp đã được tải cho đối tượng có thể là tiểu dụng đích thực với cùng tên và xuất hiện nhưng có thể không phải từ địa hạt mong muốn. Ví dụ, đối tượng lớp đối với hệ thống file và vào ra I/O nên đến là địa phương. Mỗi lớp file lớp được tương ứng một địa hạt bảo vệ. Địa hạt được phân ra ít nhất là ba mức: máy tính cục bộ, mạng cục bộ và mạng toàn cục mà mức máy tính cục bộ có mức bảo vệ cao nhất. Khi tải một file lớp, các lớp với độ bảo vệ cao hơn được ưu tiên hơn các lớp độ bảo vệ thấp hơn. Hơn nữa, lớp trong một dịa hạt chỉ truy nhập được các phương pháp trong cùng địa hạt. Các phương pháp thuộc các lớp trong một địa 105/249 ... - tailieumienphi.vn
nguon tai.lieu . vn