Phương pháp dựa trên hệ thống kiểu để tính cận trên tài nguyên của các chương trình featherweight java có giao tác

92 18 0
Phương pháp dựa trên hệ thống kiểu để tính cận trên tài nguyên của các chương trình featherweight java có giao tác

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

3 MỤC LỤC LỜI CAM ĐOAN LỜI CẢM ƠN MỤC LỤC DANH MỤC CÁC KÝ HIỆU , THUẬT NGỮ, CHỮ VIẾT TẮT DANH MỤC CÁC BẢNG DANH MỤC CÁC HÌNH VẼ PHẦN MỞ ĐẦU Tính cấp thiết đề tài Mục tiêu luận văn Công cụ phần mềm Phƣơng pháp nghiên cƣƣ́u Bố cục luận văn CHƢƠNG MỘT SỐ KIẾN THỨC CƠ SỞ 1.1 Các lý thuyết tảng hệ thống kiểu 1.1.1 Khái niệm hệ thống kiểu 1.1.2 Vai trò hệ thống kiểu 1.1.3 Các thuộc tính hệ thống kiểu 1.1.4 Các ứng dụng ý nghĩa kinh tế hệ thống kiểu 1.1.5 Hệ thống kiểu việc thức hóa ngơn ngữ kiểu 1.2 Bộ nhớ giao tác phần mềm 1.2.1 Khái niệm thuộc tính giao tác 1.2.2 Bộ nhớ giao tác phần mềm CHƢƠNG FEATHERWEIGHT JAVA CÓ GIAO TÁC 2.1 Cú pháp 2.2 Các ngữ nghĩa 2.2.1 Ngữ nghĩa cục 2.2.2 Ngữ nghĩa toàn cục CHƢƠNG HỆ THỐNG KIỂU CHO TFJ 3.1 Các kiểu 3.2 Các qui tắc kiểu 3.2.1 Qui tắc cục 3.2.2 Qui tắc toàn cục CHƢƠNG THUẬT TỐN KIỂU VÀ CƠNG CỤ 4.1 Xây dựng cú pháp cho TFJ với ANTLR 4.1.1 Cơ sở lý thuyết cú pháp đƣợc hỗ trợ ANTLR 4.1.2 Bộ đặc tả cú pháp cho TFJ với ANTLR V3 4.2 Xây dựng thuật tốn tính kiểu 4.2.1 Rút gọn chuỗi số có dấu chuỗi số tắc 4.2.2 Mơ tả phép tốn cộng ⊕ chuỗi số có dấu tắc 4.2.3 Mơ tả phép tốn gộp ⊗ chuỗi số có dấu tắc 4.2.4 Mô tả phép toán điều kiện , phép toán chọn ⊙, chuỗi số có dấu tắc 4.2.5 Tính tốn giá trị mức giới hạn tổng chi phí tài ngun cho chƣơng trình TFJ CHƢƠNG THỰC NGHIỆM KẾT LUẬN TÀI LIỆU THAM KHẢO PHỤ LỤC PHỤ LỤC CÁC CÔNG CỤ HỖ TRỢ CÀI ĐẶT THỰC NGHIỆM PHỤ LỤC BẢNG MÔ TẢ CHI TIẾT ĐẶC TẢ CÚ PHÁP TFJ TRÊN ANTLR V3 PHỤ LỤC BẢNG MƠ TẢ CÁC PHƢƠNG THỨC TRONG CHƢƠNG TRÌNH DANH MỤC CÁC KÝ HIỆU , THUẬT NGỮ, CHỮ VIẾT TẮT CHỮ VIẾT TẮT, THUẬT STT NGỮ, KÝ HIỆU FJ –Featherweigh Java STM - Software Transactional Memory TFJ – Transactional Featherweight Java Type System Transaction Thread Excution errors Syntactic mechanism Type checker Well-behaved Well-formed Ill-behaved 10 Execution error 11 12 13 Well-typed Ill-typed ADT-Abstract Data Type 14 Efficiency 15 Compositionality 16 Guarantee Static phase 17 18 Dynamic phase 19 Atomicity 20 Consistency 21 Isolation 22 Durability 23 Onacid 24 Commit 25 Lock-based synchronization 26 Nested transactions 27 Multi-threaded 28 Spawn 29 Joint commits 30 Local semantics 31 Global semantics 32 Local enviroments 33 Global enviroments 34 Syntax 35 Term +m - m #m ¬m DANH MỤC CÁC BẢNG Bảng 2.1 Cú pháp TFJ [17] Bảng 2.2 Ngữ nghĩa cục [17] Bảng 2.3 Ngữ nghĩa toàn cục [17] Bảng 3.1 Hệ thống kiểu mức cục bộ[17] Bảng 3.2 Hệ thống kiểu mức toàn cục[17] Bảng 4.1 Tổng quát hóa rule EBNF [18] Bảng 4.2 Bảng kết kiểm thử phép toán ch Bảng 4.3 Bảng kết kiểm thử phép toán cộ Bảng 4.4 Bảng kết kiểm thử phép toán gộ Bảng 4.5 Bảng kết kiểm thử phép toán ch Bảng PL-0 Chú giải chi tiết rule cú pháp ngôn ngữ TFJ Bảng PL-0 Mô tả phƣơng thức dùng để tính tốn giới hạn chi phí tài ngun 85 DANH MỤC CÁC HÌNH VẼ Hình 1.1 Hệ thống kiểu trình biên dịch[10] Hình 1.2 Sơ đồ trạng thái giao tác Hình 1.3 Ví dụ giả mã cho mơ hình giao tác lồng đa luồng Hình 1.4 Ví dụ mơ hình giao tác lồng, đa luồng joint Hình 1.5 Ví dụ mơ hình giao tác thể tính phụ thuộc luồng song song Hình 3.1 Mô tả hai thành phần # liền kề Hình 3.2 Minh họa ý nghĩa thành phần ¬ Hình 3.3 Mơ hình mô tả spawn thời điểm cuối biểu thức Hình 4.1 Mơ tả bƣớc lấy đƣợc chuỗi StringTFJPrimitive Hình 4.2 Mơ tả giai đoạn để tính giá trị giới hạn tài nguyên Hình 4.3 Mơ hình chƣơng trình TFJ cho Ví dụ 4.3 Hình 4.4 Minh họa ví dụ giai đoạn để tính giới hạn tổng chi phí tài ngun Hình 5.1 Mơ hình giao tác Thực nghiệm Hình 5.2 Chạy mã Thực nghiệm cơng cụ Hình 5.3 Mơ hình giao tác cho Thực nghiệm Hình 5.4 Chạy mã Thực nghiệm cơng cụ t Hình PL-0 Tạo Project Hình PL-0 Tạo tệp ngữ pháp ANTLR PHẦN MỞ ĐẦU Tính cấp thiết đề tài Gần máy tính điện thoại đƣợc trang bị nhiều xử lý hay xử lý có nhiều nhân (core) Để khai thác hết khả chạy song song xử lý cần có tiến trình luồng (process, thread) có khả tính tốn song song Các ngơn ngữ lập trình truyền thống sử dụng chế khóa đồng (lock, synchronization) để tiến trình hoạt động truy cập đến biến dùng chung Tuy nhiên, phƣơng pháp dễ gây khóa chết (deadlock) lỗi tiềm ẩn khó phát sửa chữa Software Transactional Memory (STM- nhớ giao tác phần mềm) [15], giải pháp để viết chƣơng trình song song sử dụng chế giao tác (transaction) hệ quản trị sở liệu thay cho chế đồng dựa khóa việc chia sẻ nhớ đồng thời STM xử lý với nhớ thông qua giao tác, giao tác cho phép tự đọc ghi để chia sẻ biến đƣợc khởi động (onacid) log đƣợc sử dụng để ghi hoạt động thời điểm kết thúc (commit) Tuy nhiên, vấn đề phát sinh mơ hình STM sử dụng thêm nhiều tài nguyên (bộ nhớ, xử lý), log thông tin, biến, tính tốn để thực commit rollback tính toán bị thất bại xong Hệ thống kiểu phƣơng pháp phân tích tĩnh dựa qui tắc kiểu đặt để đƣa khẳng định chƣơng trình có thành lập an tồn hay khơng, từ đó, hạn chế lỗi tiềm tàng xảy Hệ thống kiểu ƣớc lƣợng an tồn thơng tin tài ngun sử dụng chƣơng trình mà khơng cần thực thi nó[5] Việc có ý nghĩa thực tiễn với chƣơng trình cho ta biết đƣợc trƣờng hợp xấu cần nhớ Một số hệ thống kiểu trƣớc giải vấn đề tính tốn tài ngun tĩnh cho chƣơng trình có giao tác thơng qua thể phân cấp [13] tổng tài nguyên đƣợc tính theo nguyên tắc cộng dồn, giới hạn tổng tài nguyên đƣa số lớn Luận văn nghiên cứu hệ thống kiểu [17] sử dụng chƣơng trình Featherweight Java có giao tác (Transactional Featherweight Java, gọi tắt TFJ) Hệ thống kiểu ƣớc lƣợng tài nguyên tiêu tốn xác so với nghiên cứu trƣớc [6, 13] Những vấn đề nêu sở khoa học thực tiễn để thực đề tài “Phương pháp dựa hệ thống kiểu để tính cận tài nguyên chương trình Featherweight Java có giao tác” Mục tiêu luận văn Trên sở nghiên cứu lý thuyết hệ thống kiểu , để xác định tài ngun chƣơng trình Featherweight Java có giao tác (TFJ) [17], đề tài đƣa phƣơng pháp tính tài nguyên chƣơng trình TFJ cài đặt cơng cụ phần mềm có khả tính tài ngun sử dụng chƣơng trình TFJ Cơng cụ phần mềm Sử dụng thƣ viện công cụ hỗ trợ ANTLR để phân tích mã nguồn chƣơng trình TFJ Các cơng cụ lập trình NET ngơn ngữ C # để cài đặt thuật tốn chƣơng trình Phƣơng pháp nghiên cƣƣ́u Để đề tài đạt đƣợc kết nhƣ mục tiêu đặt ra, luận văn đề xuất áp dụng phƣơng pháp nghiên cứu nhƣ sau: - Nghiên cứu tài liệu: Nghiên cứu hệ thống kiểu nói chung tập trung vào hệ thống kiểu cho chƣơng trình TFJ nhƣ nêu [17] Đây mảng kiến thức mới, không đƣợc học trƣờng đòi hỏi nhiều kiến thức tảng liên quan Đồng thời phải nghiên cứu thuật toán dựa hệ thống kiểu đề xuất để tính tài ngun cho chƣơng trình TFJ - Cài đặt, thực nghiệm: Nghiên cứu cơng cụ phân tích chƣơng trình thƣ viện hỗ trợ (ANTLR) để sử dụng phân tích chƣơng trình đầu vào Từ cài đặt thuật tốn đề xuất, đồng thời chạy thử, kiểm tra tính đắn công cụ Bố cục luận văn Trong luận văn sẽ đƣợc thƣƣ̣c phần bản: - Phần mở đầu: Đƣa tính cấp thiết đề tài, công cụ phần mềm sử dụng, phƣơng pháp nghiên cứu bố cục luận văn - Chƣơng 1: Nghiên cƣƣ́u số kiến thức sở hệ thống kiểu nhớ giao tác phần mềm - Chƣơng 2: Nghiên cứu cú pháp ngữ nghĩa tổng quát chƣơng trình Featherweight Java có giao tác - Chƣơng 3: Nghiên cứu hệ thống kiểu cho chƣơng trình TFJ: Định nghĩa, tập qui tắc kiểu dựa chuỗi số có dấu - Chƣơng 4: Xây dựng thuật tốn tính kiểu cơng cụ: Các phép tốn tính tốn kiểu, tính giới hạn tổng chi phí tài nguyên cho chƣơng trình TFJ - Chƣơng 5: Thực nghiệm: Kiểm tra chƣơng trình tính kiểu xây dựng Chƣơng thơng qua ví dụ thực nghiệm với chƣơng trình TFJ - Kết luận: Tổng hợp kết đạt đƣợc, tồn hƣớng mở rộng đề tài 10 CHƢƠNG MỘT SỐ KIẾN THỨC CƠ SỞ 1.1 Các lý thuyết tảng hệ thống kiểu 1.1.1 Khái niệm hệ thống kiểu Hệ thống kiểu (type system) toán học xuất từ đầu kỷ 19 Đến hệ thống kiểu có sức ảnh hƣởng có ý nghĩa to lớn [1] Đã có nhiều quan điểm khác hệ thống kiểu: Một hệ thống kiểu phƣơng pháp kiểm soát cú pháp cho việc chứng minh vắng mặt hành vi chƣơng trình cách phân loại thành phần theo kiểu cho giá trị tính tốn [1] Luca Cardelli phát biểu rằng: Hệ thống kiểu phƣơng pháp thức ngăn chặn lỗi thực thi trình chạy chƣơng trình [3, 5] Dƣới góc độ ngƣời lập trình , hệ thống kiểu tập thích kiểu chế kiểm tra trợ giúp cho ngƣời lập trình Với ngƣời viết trình dịch , hệ thống kiểu nguồn thơng tin đƣợc sƣƣ̉ dụng để tối ƣu mã máy sinh Theo lý thuyết ngôn ngữ , hệ thống kiểu qui tắc để qui định cấu trúc lập luận ngơn ngƣƣ̃ Nói tóm lại hệ thống kiểu đóng vai trò quan trọng với ngơn ngữ lập trình [8] Ta khái quát hóa khái niệm hệ thống kiểu nhƣ sau: Hệ thống kiểu một chế cú pháp (syntactic mechanism) ràng ḅc cấu trúc mợt chương trình bởi việc kết hợp thông tin ngữ nghĩa với thành phần chương trình giới hạn phạm vi thành phần Theo đặc trƣng ngơn ngữ đƣợc thiết kế hệ thống kiểu đòi hỏi biến chƣơng trình phải có miền giá trịcụ thể mà tham chiếu khai báo hàm phải thao tác kiểu đối số cụ thể trả giá trịcủa kiểu cụ thể Thơng tin đƣợc khai báo rõ ràng cách sƣƣ̉ dụng thích kiểu suy kiểm tra kiểu (type checker) Khi chƣơng trình đƣợc biên dịch kiểm tra kiểu đảm bảo biến chỉđƣợc gán kiểu giá trịvà hàm chỉ đƣợc gọi với tham số kiểu Các ngôn ngữ hạn chế phạm vi biến đƣợc gọi ngôn ngữ kiểu , nhƣ ML C Ngƣợc lại, ta hiểu ngôn ngữ phi kiểu, nhƣ LISP, Assembler Một hệ thống kiểu thành phần ngôn ngƣƣ̃ kiểu, có vai trò theo dõi kiểu biến kiểu tất biểu thƣƣ́c chƣơng trình Trong ngơn ngữ có hệ thống kiểu mà giƣƣ̃ cho tất chƣơng trình chạy đƣợc ngơn ngƣƣ̃ lập trình cụ thể, nói ngơn ngữ kiểu tốt (well typed) Nó chỉ rằng, phân tích cẩn thận cần thiết để tránh nhƣƣ̃ng tuyên bố sai cho ngôn ngƣƣ̃ lập trình Một hệ thống kiểu đƣợc sƣƣ̉ dụng để xác định liệu chƣơng trình có đƣợc coi well-behaved (hành xử đúng) Do vậy, chƣơng trình đƣợc thực theo hệ thống 74 typeData primitiveType 75 arrayType statement 76 variable nameVariable 77 nameTypeOBJ nameVariableOBJ newAsign readStatement writeStatement 78 assignment ifStatement methodCall nameMethodCall 79 actualParameters valueParameterRest valueParameter parameterOfString parameterOfInt returnStatement onacidStatement commitStatement spawnStatement endspawnStatement 81 term negation unary 82 mult add relation expression MULTILINE_COMMENT STRING_LITERAL CHAR_LITERAL fragment LETTER fragment DIGIT INTEGER IDENT WS COMMENT 85 PHỤ LỤC BẢNG MƠ TẢ CÁC PHƢƠNG THỨC TRONG CHƢƠNG TRÌNH Bảng PL-0 Mơ tả phương thức dùng để tính tốn giới hạn chi phí tài nguyên PHƢƠNG THỨC private static bool isSignal(char signal) Mô tả Kiểm tra ký tự có dấu {+, -, #, :}, trả giá trị True thuộc dấu Ví dụ private static int getAfterClusterIndex(String S, int index) Mô tả Lấy chỉ số dấu liền sau ký tự Ví dụ getAfterClusterIndex(‚+3#44+2:5 private static String sign(String S) Mô tả Lấy dãy dấu từ trái sa Ví dụ Sign(‚+3#44+2:5‛)= ‚+#+:‛ private static bool isSharpN(String S) Mơ tả Ví dụ Kiểm tra số có dấu có dạn n>0, ngƣợc lại trả False isSharpN(‚#4‛)= True; isSharpN(‚-1 public static String canonical(String S) Mô tả Chính tắc hóa chuỗi số đánh Ví dụ canonical(‚+1+2+1-1-2+1:3‛)= ‚+ public static String sum(String S1, String S2) Mô tả Ví dụ Phép cộng chuỗi số đánh dấu tắc S1 S2 (Phép tốn cộng ⊕), trả chuỗi số tắc, với S1 sum (‚#2-1+1:3‛,‚#3-2+1:2‛) = ‚#5 private static int calWeight(String S, int h1) Mơ tả Tính giá trị phần trị số sau ký tự c Ví dụ calWeight(‚#5-356+2:5‛, 3) = 356 private static String calSmallS(String S, int h, int ch) Mơ tả Tính giá trị số đứng sau chỉ số “#0” ch

Ngày đăng: 11/11/2020, 22:18

Tài liệu cùng người dùng

Tài liệu liên quan