Tóm tắt Luận văn Thạc sĩ Công nghệ thông tin: Tính cận trên bộ nhớ Log của chương trình sử dụng giao dịch

20 42 0
Tóm tắt Luận văn Thạc sĩ Công nghệ thông tin: Tính cận trên bộ nhớ Log của chương trình sử dụng giao dịch

Đ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

Luận văn này tập trung nghiên cứu các lý thuyết về hệ thống kiểu; các khái niệm cơ bản cũng như tính chất của giao dịch; nghiên cứu cú pháp và ngữ nghĩa của ngôn ngữ TM (Transactional Memory) - Một ngôn ngữ để viết các chương trình giao dịch. Từ việc nắm được giải pháp xây dựng hệ thống kiểu đề cập trong bài báo, một công cụ sẽ được cài đặt dựa trên ngôn ngữ C#.

ĐẠI HỌC QUỐC GIA HÀ NỘI TRƢỜNG ĐẠI HỌC CÔNG NGHỆ NGUYỄN PHAN TÌNH TÍNH CẬN TRÊN BỘ NHỚ LOG CỦA CHƢƠNG TRÌNH SỬ DỤNG GIAO DỊCH Ngành: Cơng Nghệ Thông Tin Chuyên ngành: Kỹ thuật Phần Mềm Mã số: 60480103 TĨM TẮT LUẬN VĂN THẠC SỸ CƠNG NGHỆ THƠNG TIN Hà Nội - 2016 MỤC LỤC MỞ ĐẦU Tính cấp thiết đề tài Mục tiêu nghiên cứu Phƣơng pháp nghiên cứu Cấu trúc luận văn CHƢƠNG GIỚI THIỆU BÀI TOÁN .5 1.1 Giới thiệu .5 1.2 Hƣớng tiếp cận 1.3 Ví dụ minh họa CHƢƠNG MỘT SỐ KIẾN THỨC CƠ SỞ 2.1 Hệ thống kiểu 2.1.1 Giới thiệu hệ thống kiểu 2.1.2 Các thuộc tính hệ thống kiểu 2.1.3 Các ứng dụng hệ thống kiểu 2.2 Giao dịch nhớ giao dịch phần mềm ( Software Transactional Memory- STM) 2.2.1 Giao dịch (Transaction) 2.2.2 Bộ nhớ giao dịch phần mềm (Software Transactional Memory- STM) CHƢƠNG NGÔN NGỮ GIAO DỊCH 3.1 Cú pháp TM [1] .9 3.2 Các ngữ nghĩa động .9 3.2.1 Ngữ nghĩa cục 3.2.2 Ngữ nghĩa toàn cục .9 CHƢƠNG HỆ THỐNG KIỂU CHO CHƢƠNG TRÌNH GIAO DỊCH 11 4.1 Các kiểu .11 4.2 Các quy tắc kiểu 12 CHƢƠNG XÂY DỰNG CÔNG CỤ VÀ THỰC NGHIỆM 15 5.1 Giới thiệu ngôn ngữ lập trình/ tảng .15 5.2 Xây dựng công cụ thực nghiệm 15 5.2.1 Thuật toán rút gọn (chính tắc hóa) chuỗi 16 5.2.2 Thuật toán Cộng (Joint) 16 5.2.3 Thuật toán gộp (Merge) 17 5.2.4 Thuật toán JoinCommit 17 5.2.5 Thuật tốn tính cận tài ngun chƣơng trình giao dịch 17 KẾT LUẬN 18 TÀI LIỆU THAM KHẢO 19 MỞ ĐẦU Tính cấp thiết đề tài Cùng với phát triển nhƣ vũ bão khoa học công nghệ, vi xử lý đại ngày thể sức mạnh qua nhiều nhân (core) với tốc độ xử lý ngày cao Có đƣợc nhƣ bên vi xử lý đƣợc thiết kế luồng (thread) có khả chạy xử lý song song Trƣớc để lập trình đa luồng, ngƣời ta sử dụng chế đồng (synchronization) dựa khóa (lock) để áp đặt giới hạn quyền truy cập tài ngun mơi trƣờng có nhiều luồng thực thi.Tuy nhiên, áp dụng phƣơng pháp thƣờng nảy sinh vấn đề nhƣ khóa chết (deadlock) lỗi tiềm tàng… Software Transactional Memory (STM- nhớ giao dịch phần mềm) [8] giải pháp đơn giản hơn, nhƣng vơ mạnh mẽ mà giải đƣợc hầu hết vấn đề Nó thay hồn tồn giải pháp cũ việc truy cập nhớ dùng chung STM giao tiếp với nhớ thông qua giao dịch Các giao dịch cho phép tự đọc, ghi để chia sẻ biến vùng nhớ gọi log đƣợc sử dụng để ghi lại hoạt động kết thúc giao dịch Một mơ hình giao dịch phức tạp sử dụng STM mơ hình giao dịch lồng đa luồng (nested and multi-threaded transaction) [5] Trong trình thực thi chƣơng trình giao dịch lồng đa luồng, luồng đƣợc sinh giao dịch đƣợc bắt đầu, vùng nhớ gọi log đƣợc cấp phát Các log dùng để lƣu lại biến dùng chung, nhờ mà luồng sử dụng biến cách độc lập Vấn đề đặt thời điểm chƣơng trình chạy liệu lƣợng nhớ cần cấp phát cho log có vƣợt tài nguyên nhớ máy, hay chƣơng trình chạy cách trơn tru mà khơng gặp phải lỗi nhƣ hết nhớ Chính vậy, việc xác định cận nhớ thời điểm chạy chƣơng trìnhcủa chƣơng trình giao dịch vấn đề then chốt, có ý nghĩa quan trọng Chính lí đó, luận văn thực đây, nghiên cứu sử dụng phƣơng pháp phân tích tĩnh để giải tốn tính cận nhớ log chƣơng trình có giao dịch đƣợc trình bày, dựa báo đƣợc tác giả công bố [1] Mục tiêu nghiên cứu Luận văn đƣợc thực dựa nghiên cứu báo [1] Do để hiểu đƣợc giải pháp tác giả đề xuất [1], luận văn tập trung nghiên cứu lý thuyết hệ thống kiểu; Các khái niệm nhƣ tính chất giao dịch; Nghiên cứu cú pháp ngữ nghĩa ngôn ngữ TM (Transactional Memory) – Một ngôn ngữ để viết chƣơng trình giao dịch Từ việc nắm đƣợc giải pháp xây dựng hệ thống kiểu đề cập báo, công cụ đƣợc cài đặt dựa ngôn ngữ C# Phƣơng pháp nghiên cứu Để thực đƣợc mục tiêu đề luận văn, phƣơng pháp nghiên cứu sau đƣợc kết hợp: - Phƣơng pháp nghiên cứu lý thuyết: bao gồm phân tích, tổng hợp tài liệu, báo có liên quan lý thuyết hệ thống kiểu đặc biệt hệ thống kiểu cho chƣơng trình TM, tài liệu thuật toán dựa hệ thống kiểu - Phƣơng pháp thực nghiệm: Cài đặt thuật toán đề xuất, chạy thử để kiểm tra tính đắn chƣơng trình Cấu trúc luận văn Luận văn đƣợc trình bày phần, với nội dung phần nhƣ sau: Mở đầu: Nêu tính cấp thiết đề tài, nêu mục tiêu cần nghiên cứu, phƣơng pháp đƣợc sử dụng nghiên cứu cấu trúc phần luận văn Chƣơng 1: Giới thiệu tốn Trình bày nội dung cụ thể tốn tính cận nhớ log chƣơng trình có sử dụng giao dịch, vấn đề cần giải toán hƣớng tiếp cận để giải toán Trong phần này, điểm cải tiến phƣơng pháp giải toán so với phƣơng pháp trƣớc đƣợc nêu Ví dụ đƣợc trình bày mục 1.3 minh họa rõ ràng cho toán hƣớng tiếp cận đƣa Chƣơng 2: Một số kiến thức sở Trình bày lý thuyết đƣợc sử dụng làm sở để giải toán, bao gồm: Lý thuyết hệ thống kiểu nhƣ khái niệm, thuộc tính hay ứng dụng hệ thống kiểu thực tế; Lý thuyết giao dịch, nhớ giao dịch phần mềm gồm khái niệm, tính chất, ứng dụng… Chƣơng 3: Ngơn ngữ giao dịch Giới thiệu ngôn ngữ giao dịch TM (Transactional memory)- Một ngôn ngữ đƣợc dùng để viết chƣơng trình giao dịch Trong chƣơng này, cú pháp ngữ nghĩa ngơn ngữ TM đƣợc trình bày cụ thể Chƣơng 4: Hệ thống kiểu cho chƣơng trình giao dịch Nghiên cứu hệ thống kiểu để giải tốn tính cận nhớ log cho chƣơng trình có giao dịch đƣợc trình bày báo [1] Lý thuyết hệ thống kiểu đƣợc phát triển bao gồm kiểu quy tắc kiểu Chƣơng 5: Xây dựng công cụ thực nghiệm Cài đặt thuật toán kiểu dựa hệ thống kiểu đƣợc trình bày chƣơng Từ thuật tốn đó, xây dựng cơng cụ để giải tốn tính cận nhớ log thực nghiệm để kiểm tra tính đắn cơng cụ Kết luận: Đánh giá kết đạt đƣợc, nêu tồn hƣớng phát triển CHƢƠNG GIỚI THIỆU BÀI TOÁN 1.1 Giới thiệu Nhƣ đề cập phần mở đầu, STM giải pháp đƣợc sử dụng việc chia sẻ nhớ dùng chung mơ hình giao dịch phức tạp sử dụng STM mơ hình giao dịch lồng đa luồng (nested and multi-threaded transaction) Ở đây, giao dịch đƣợc gọi lồng chứa số giao dịch khác Chúng ta gọi giao dịch cũ giao dịch cha gọi giao dịch mà sinh giao dịch cha giao dịch Các giao dịch phải đƣợc đóng trƣớc giao dịch cha Hơn nữa, giao dịch đƣợc gọi đa luồng (multi-threaded) luồng sinh đƣợc chạy bên giao dịch đồng thời chạy song song với luồng cha thực thi giao dịch Khi giao dịch đƣợc bắt đầu vùng nhớ gọi log đƣợc cấp phát dùng để lƣu lại biến dùng chung Một luồng hay luồng con, đƣợc sinh tạo log giao dịch luồng cha Khi luồng cha thực đóng (commit) giao dịch, tất luồng đƣợc tạo bên luồng cha phải đóng với luồng cha Chúng ta gọi kiểu đóng join commit, thời điểm commit xảy đƣợc gọi thời điểm joint commit Ở thời điểm join commit nhớ đƣợc cấp phát cho log đƣợc giải phóng Join commit đóng vai trò nhƣ đồng ngầm luồng song song Chính hình thức đồng mà luồng song song bên giao dịch không hoàn toàn chạy độc lập Và vấn đề cần trả lời liệu thời điểm chạy chƣơng trình, liệu lƣợng nhớ cần cấp phát cho log có vƣợt tài nguyên nhớ máy, hay chƣơng trình chạy cách trơn tru mà không gặp phải lỗi nhƣ hết nhớ Để trả lời cho câu hỏi này, cần phải xác định đƣợc biên nhớ chƣơng trình giao dịch cận nhớ đƣợc cấp phát cho log thời điểm biên dịch Ở nghiên cứu trƣớc [2, 11], hệ thống kiểu đƣợc phát triển để đếm số lƣợng log lớn mà tồn thời điểm chƣơng trình chạy Con số cho thông tin thô nhớ đƣợc sử dụng log giao dịch Để định thêm xác lƣợng nhớ lớn mà log giao dịch sử dụng, nghiên cứu [1] tác giả đề xuất phƣơng pháp giải vấn đề với việc tính đến kích thƣớc log Đây điểm cải tiến hƣớng tiếp cận so với hƣớng tiếp cận trƣớc Nhƣ vậy, tốn cần giải phát biểu nhƣ sau: Tính tốn lƣợng nhớ u cầu lớn cho tồn chƣơng trình giao dịch biết kích thƣớc log 1.2 Hƣớng tiếp cận Để giải toán đặt ra, trƣớc hết viết chƣơng trình giao dịch ngơn ngữ dành riêng cho nó, cụ thể ngơn ngữ TM đƣợc trình bày chƣơng Để thêm thơng tin kích thƣớc log, mở rộng lệnh bắt đầu giao dịch nghiên cứu trƣớc để chứa thơng tin Sau phát triển hệ thống kiểu để đánh giá tài nguyên nhớ log mà giao dịch yêu cầu So với nghiên cứu trƣớc [2,11] ý tƣởng cấu trúc kiểu nghiên cứu [1] khơng có thay đổi Tuy nhiên, ngữ nghĩa kiểu quy tắc kiểu khác so với nghiên cứu trƣớc 1.3 Ví dụ minh họa CHƢƠNG MỘT SỐ KIẾN THỨC CƠ SỞ 2.1 Hệ thống kiểu 2.1.1 Giới thiệu hệ thống kiểu Về định nghĩa hệ thống kiểu, có nhiều quan điểm đƣợc đƣa Trong ngơn ngữ lập trình, hệ thống kiểu đƣợc định nghĩa tập quy tắc để gán thuộc tính đƣợc gọi kiểu cho cấu trúc chƣơng trình máy tính bao gồm biến, biểu thức, hàm, module Theo lý thuyết ngôn ngữ, hệ thống kiểu tập quy tắc quy định cấu trúc lập luận cho ngơn ngữ Trong lập trình, hệ thống kiểu đƣợc định nghĩa chế cú pháp ràng buộc cấu trúc chƣơng trình 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 Mục đích hệ thống kiểu ngăn chặn cố lỗi thực thi q trình chƣơng trình chạy [3, 6] Nó đƣợc thực cách định nghĩa giao diện phần khác chƣơng trình máy tính, sau kiểm tra xem thành phần đƣợc ghép nối quán hay chƣa Việc kiểm tra xảy tĩnh (tại thời gian biên dịch), động (tại thời gian chạy), kết hợp kiểm tra tĩnh động Ngoài hệ thống kiểu đƣợc sử dụng với nhiều mục đích khác, chẳng hạn nhƣ cho phép tối ƣu hóa trình biên dịch định, cung cấp hình thức tài liệu… 2.1.2 Các thuộc tính hệ thống kiểu Một hệ thống kiểu có số thuộc tính sau: Khả kiểm chứng: Hệ thống kiểu phải có thuật tốn kiểm tra kiểu để phân loại chƣơng trình Một hệ thống kiểu phải chủ động nắm bắt lỗi thực thi trƣớc chúng xảy Tƣờng minh: Các lập trình viên dự đốn chƣơng trình vƣợt qua kiểm tra kiểu Nếu lỗi kiểm tra, nên tìm đƣợc lí cách dễ dàng Khả thực thi: Các biến, biểu thức nên đƣợc kiểm tra tĩnh nhiều tốt Mặt khác, chúng cần đƣợc kiểm tra động Sự quán cần đƣợc kiểm chứng cách thƣờng xuyên 2.1.3 Các ứng dụng hệ thống kiểu Hệ thống kiểu đóng vai trò quan trọng cơng nghệ phần mềm lĩnh vực bảo mật mạng Đối với công nghệ phần mềm, đƣợc sử dụng trình biên dịch ngơn ngữ lập trình, tối ƣu hóa, sở liệu chí mơ hình ngơn ngữ tự nhiên… Trong ngơn ngữ lập trình, hệ thống kiểu có chức sau : a Phát i b Tr u tƣ ng h a c Làm tài iệu d Tăng hiệu 2.2 Giao dịch nhớ giao dịch phần mềm ( Software Transactional MemorySTM) 2.2.1 Giao dịch (Transaction) Một giao dịch luồng điều khiển mà áp dụng chuỗi hữu hạn thao tác nguyên thủy (primitive) vào nhớ [8] Hay nói cách khác giao dịch thực thi chƣơng trình ngƣời dùng 2.2.2 Bộ nhớ giao dịch phần mềm (Software Transactional Memory- STM) Từ năm 1986, ý tƣởng cung cấp hỗ trợ phần cứng cho giao dịch đời Cho đến 1995 Nir Shavit Dan Touitou mở rộng ý tƣởng cho nhớ giao dịch phần mềm Kể từ đó, trở thành trọng tâm các lý thuyết nghiên cứu chuyên sâu ứng dụng thực tế Trong khoa học máy tính, nhớ phần mềm giao dịch (STM) chế kiểm soát đồng thời tƣơng tự nhƣ giao dịch sở liệu cho việc kiểm soát quyền truy cập vào nhớ dùng chung tính tốn song song Đây phƣơng pháp thay cho chế đồng dựa khóa STM chiến lƣợc thực phần mềm, thành phần phần cứng CHƢƠNG NGÔN NGỮ GIAO DỊCH Trong chƣơng nghiên cứu cú pháp ngữ nghĩa ngôn ngữ giao dịch đƣợc gọi TM (Transactional Memory) Một chƣơng trình TM bắt đầu lệnh onacid(n) (với n biểu diễn kích thƣớc nhớ đƣợc cấp phát cho log mở giao dịch )và kết thúc lệnh commit Dƣới đây, tìm hiểu cú pháp ngữ nghĩa TM Trong đó, cú pháp nhằm mô tả thành phần ngôn ngữ Và công thức thh nghĩa (Rút gọn): Hàm rút gọn seq định nghĩa đệ quy sau: seq(S) = S S chuẩn tắc seq( S #m #n S‟) = seq( S # max(m,n)S‟) seq( S −m −n S‟) = seq( S − (m+n)S‟) seq( S +k #l −n S‟) = seq( S #(l+k) – (n-1) S‟) [1] Định nghĩa (Cộng): Cho S= s1 sk chuỗi chuẩn tắc mà + không nằm {S } giả sử i=first(S, −) Thì hàm cộng join(S) định nghĩa đệ quy thay − S ¬ sau: join (S)= S i=0; ¬ − join(S) = s1 si-1 join ( (| | – 1) si+1 …sk ) ngược lại [1] Định nghĩa (Gộp): 11 Cho S1 S2 chuỗi cộng mà số thành phần ¬ S1 S2 (có thể 0) Hàm merge định nghĩa đệ quy sau : Merge (# m1, # m2)= # (m1 + m2 ) Merge (# m1¬ n1 , # m2 ¬ n2 )= # (m1 + m2 ) ¬(n1 + n2 )merge( ) [1] Định nghĩa (Chọn) : Cho S1 S2 chuỗi mà loại bỏ thành phần # từ chúng, hai chuỗi lại giống hệt Hàm alt định nghĩa đệ quy sau : alt ( #m1 , #m2 )= #max( m1,m2) alt (# m1* n1 , # m2 * n2 )= # max(m1, m2 ) *n alt ( ) [1] 4.2 Các quy tắc kiểu Bảng 4.1 Các quy tắc kiểu Trong bảng trên, quy tắc T-ONACID cho phép chuyển onacid(n) thành +n Quy tắc T- COMMIT cho phép chuyển commit thành -1; Quy tắc T- SPAWN chuyển S từ chuỗi cộng đánh dấu kiểu gộp với chuỗi luồng cha hàm T- MERGE Quy tắc T- PREP cho phép tìm kiểu phù hợp cho e T- MERGE Quy tắc T-JC giải join commit luồng chạy song song sử dụng tời công thức jc trình bày định nghĩa 10 Trong đó, phần tử + cuối S1, gọi 12 n đƣợc kết hợp với phần tử ¬ S2, gọi ¬l (Hình 4.1) Nhƣng sau +n, có thành phần #, gọi #n’, cận đơn vị nhớ cục đƣợc sử dụng thành phần có kiểu +n#n’ n+ n’ Trƣớc ¬l có #l‟, thực join commit thành phần có kiểu ¬l với giao dịch bắt đầu có kiểu +n, kiểu phân đoạn l‟+l*n Sau kết hợp +n từ S1 với ¬l từ S2 rút gọn chuỗi lặp lại join commit jc Do hàm jc đƣợc xác định nhƣ sau : Định nghĩa 10 (Join commit): Hàm jc xác định đệ quy sau : jc( +n #n‟, #l‟¬l ) =jc(seq( #(n+ n‟), seq(#(n+n‟),seq(#( l‟ + l*n) )) l>0 jc(#n, #l‟ )= seq(# max(n‟, l‟) ) ngược lại [1] + Hình 4.1 Các luồng song song Joincommit Định nghĩa 11 (Chƣơng trình well- typed): Một thành phần e gọi well- typed tồn dẫn xuất cho e mà e : # n với số n [1] Do kiểu phản ánh hành vi thành phần, kiểu chƣơng trình định kiểu tốt (well- typed) chứa chuỗi #n n số đơn vị nhớ lớn đƣợc sử dụng thực chƣơng trình Dƣới sử dụng lý thuyết để giải tốn tính cận cho chƣơng trình hình 1.3 Để thuận lợi cho việc tính tốn, trƣớc hết ta chia nhỏ chƣơng trình thành biểu thức e1 = onacid (1); onacid (2); e2 = spawn (onacid (4); commit; commit; commit; commit) e3 =onacid (3); e4 = spawn (onacid (5); commit; commit; commit; commit) e5 = commit;onacid (6);commit;commit;onacid (7);commit;commit; Trƣớc hết ta tính kiểu cho e4; Sử dụng quy tắc T-ONACID, T-COMMIT T-SEQ ta có kiểu Onacid (5);commit;commit;commit;commit : #5¬1¬1¬1 Áp dụ ng T-SPAWN, ta đƣợc e4 :(#5¬1¬1¬1)p Tiếp theo ta tính e5 ; áp dụng hàm T-ONACID, T-COMMIT T-SEQ ta có 13 e5 : −1#6−1#7−1 Sử dụng T-PREP, có kiểu phù hợp với S4 , tiếp tục áp dụng hàm T- MERGE ta đƣợc e45 : (#5¬2#6¬2#7¬2)p Với -3 e3 :+3, áp dụng T-JC ta đƣợc e345: #11¬2#7¬2 jc(+3, #5¬2#6¬2#7¬2) = jc( seq(#3), seq(# (5+3*2) #6¬2#7¬2)) =jc(#3, #11¬2#7¬2)= #11¬2#7¬2; Tƣơng tự ta tính đƣợc kiểu e2 : e3 : (#4¬1¬1)p Kiểu e3 phù hợp với e345 , ta lại sử dụng hàm T-MERGE đƣợc kiểu e2345 e 2345 : #15¬3#7¬3 Áp dụng T-JC cho e1 e2 ta đƣơc e12345 : #24 jc(+1+2, #15¬3#7¬3)= jc(seq(+1#2),seq(#21, #7¬3)= jc(+1#2, #21¬3)= jc(seq(#3), seq(#24)) = #24 Vậy chƣơng trình well-typed lƣợng nhớ lớn mà chƣơng trình cần 24 đơn vị nhớ 14 CHƢƠNG XÂY DỰNG CÔNG CỤ VÀ THỰC NGHIỆM 5.1 Giới thiệu ngôn ngữ lập trình/ tảng Ngơn ngữ lập trình đƣợc sử dụng để xây dựng công cụ luận văn ngôn ngữ C#, NET Đây ngôn ngữ lập trình ứng dụng, ngơn ngữ biên dịch, ngơn ngữ đa đƣợc phát triển Microsoft Ngôn ngữ C# ngôn ngữ đƣợc phát triển từ C, C++ Java, nhƣng đƣợc tạo từ tảng phát triển C# đƣợc thêm vào đặc tính để giúp cho uyển chuyển dễ sử dụng Nhiều đặc tính ngơn ngữ C# giống với ngơn ngữ Java Cụ thể, C# có đặc tính sau :  Đơn giản, dễ học : Chỉ có khoảng 80 từ khóa mƣời kiểu liệu đƣợc dựng sẵn  Gần gũi với ngơn ngữ lập trình thơng dụng nhƣ C, C++, Java  Xây dựng dựa tảng ngơn ngữ lập trình mạnh nên thừa hƣởng đƣợc ƣu điểm ngơn ngữ  Hƣớng đối tƣợng  Mạnh mẽ mềm dẻo  Cung cấp đặc tính hƣớng thành phần nhƣ property, event…  C# có Garbage Collector tự động thu gom vùng nhớ không sử dụng  Hỗ trợ khái niệm giao diện Song hành với ngôn ngữ C# tảng NET Framework Đây tảng lập trình tảng thực thi ứng dụng chủ yếu hệ điều Windows Nó đƣợc phát triển Microsoft bao gồm thành phần chính:  CLR: Các chƣơng trình đƣợc viết nền.NET đƣợc triển khai môi trƣờng đƣợc gọi CLR (Common Language Runtime) Môi trƣờng phần mềm đóng vai trò máy ảo cung cấp dịch vụ nhƣ bảo mật, quản lý ngoại lệ hay nhớ  Thƣ viện lớp: NET framework gồm nhiều lớp thƣ viện, thƣ viện hỗ trợ lập trình viên việc xây dựng giao diện, kết nối sở liệu, giao tiếp mạng… 5.2 Xây dựng công cụ thực nghiệm Trong phần luận văn, dựa vào quy tắc kiểu đƣợc đề cập chƣơng 4, xây dựng thuật tốn tính kiểu đề giải toán nêu chƣơng Bƣớc tiếp theo, dựa thuật tốn có đƣợc viết chƣơng trình ngơn ngữ C# để tính tốn cận tài ngun cho chƣơng trình giao dịch Trƣớc tiên để xây dựng thuật toán ta quy ƣớc số ký hiệu đƣợc sử dụng để biểu diễn chuỗi số có dấu lập trình nhƣ sau: {+n, −n, #n,! n } ( n số tự nhiên) tƣơng ứng với thành phần dạng 15 n, n, n } đề cập phần 4.1 Chúng ta chuyển đổi mã chƣơng trình giao dịch thành chuỗi gồm dấu, số dấu đóng mở ngoặc tƣơng ứng với lệnh sinh luồng đóng luồng Cụ thể: onacid (n): Tƣơng ứng với chuỗi “+n”; commit: Tƣơng ứng với “-1”; spawn: Tƣơng ứng với “( )” – Khởi tạo luồng Qua bƣớc chuyển đổi thành phần trên, ta kết xuất đƣợc xâu đầu vào để thực tính tốn Chƣơng trình đƣợc xây dựng bao gồm phƣơng thức sau:  CalculResourses (string Input): Phƣơng thức thực việc tính cận nhớ log chƣơng trình sử dụng giao dịch Phƣơng thức gọi tới phƣơng thức Seq, Joint, Merge, JointCommit đƣợc trình bày bên dƣới  Seq (string InputString): Phƣơng thức rút gọn chuỗi gồm dấu số  Joint (string InputString): Phƣơng thức chuyển dấu “─ ” chuỗi đƣợc rút gọn (sau thực hàm Seq trên) dấu “⌐”  Merge (string s1, string s2): Phƣơng thức gộp chuỗi chuẩn tắc  JoinCommit(string s1, string s2): Phƣơng thức jointcommit chuỗi chuẩn tắc Sau xây dựng thuật toán cụ thể cho phƣơng thức nêu trên: 5.2.1 Thuật tốn rút gọn (chính tắc h a) chu i 5.2.1.1 Mơ tả thuật tốn: Thuật toán dựa quy tắc đƣợc trinh bày định nghĩa 6, mục 4.1 Đầu vào: Một chuỗi số có dấu chƣa đƣợc tắc, cho trƣớc quy tắc rút gọn nhƣ sau: seq(S) = S S chuỗi tắc; seq(S#m#nS') = seq(S#max(m,n)S') seq(S-m-nS') = seq(S-(m+n)S') seq(S+m#l−nS') = seq(S # (m+ 1) − (n - 1)S') Đầu ra: Chuỗi S đƣợc rút gọn hay tắc { n, 5.2.2 Thuật tốn Cộng (Joint) 5.2.2.1 Mơ tả thuật tốn Thuật tốn dựa quy tắc đƣợc trinh bày định nghĩa 7, mục 4.1 Đầu vào: Chuỗi có dấu tắc S khơng chứa dấu +, i vị trí chứa dấu – chuỗi S, i # Hàm join(S) đƣợc định nghĩa đệ quy nhƣ sau: join(S) = S i=0; join(S) = s1…si-1 ¬1 join (−(|si| - 1) si+1…sk) i≠0; Đầu ra: Chuỗi S chứa dấu # ⌐ ( lập trình dùng ký hiệu “!” thay cho ⌐) 16 5.2.3 Thuật toán gộp (Merge) 5.2.3.1 Mơ tả thuật tốn Thuật tốn dựa quy tắc đƣợc trinh bày định nghĩa 8, mục 4.1 Đầu vào: S1, S2 chuỗi có dấu tắc, với số phần tử chứa dấu “¬” (có thể 0) Hàm merge định nghĩa đệ quy nhƣ sau: Merge (S1, S2) = #(m1+m2) Si = #mi , i =1, Merge (# m1¬ n1 , # m2 ¬ n2 )= # (m1 + m2 ) ¬(n1 + n2 ) Merge( ) Đầu ra: Chuỗi đƣợc gộp từ chuỗi có dấu tắc ban đầu (chỉ chứa # ⌐) Để kiểm tra tính đắn thuật tốn, ta kiểm tra với đầu vào khác đƣợc kết cho bảng sau: Bảng 5.3 Bảng kết kiểm thử hàm gộp Lƣợt Chuỗi Chuỗi Kết !1 !1 !2 !1 #1 !1 #1!2 #2!2 !1 #2!3 #3 #3 #6 #3!1#2!2 #1!1!1 #4!2#2#2!3 5.2.4 Thuật tốn JoinCommit 5.2.4.1.Mơ tả thuật tốn: Thuật toán dựa quy tắc đƣợc trinh bày định nghĩa 10, mục 4.1 Đầu vào: S1, S2 chuỗi tắc Hàm joint commit đƣợc định nghĩa nhƣ sau: Jc (#n1, #l1) = #max (n1, l1) Jc (S‟1+n1#n2, #l1⌐l2 S'2) = jc (Sequence (S‟1 #(n1+n2)), Sequence( #(l1+12*n) S'2) Đầu ra: Giá trị cận tài nguyên thơng báo chƣơng trình thành lập khơng hợp lệ 5.2.5 Thuật tốn tính cận tài ngun chƣơng trình giao dịch 5.2.5.1 Mơ tả thuật tốn Đầu vào: Chuỗi kết xuất đƣợc từ chƣơng trình Featherweight Java có sử dụng giao dịch Đầu ra: Giá trị cận tài ngun nhớ log chƣơng trình thơng báo chƣơng trình thành lập khơng hợp lệ 17 KẾT LUẬN Qua thời gian nghiên cứu tìm hiểu đề tài, luận văn đƣợc hoàn thành đạt đƣợc nội dung đề với mục tiêu giải tốn tính cận nhớ log cho chƣơng trình sử dụng giao dịch Về lý thuyết, luận văn trình bày đƣợc kiến thức sở hệ thống kiểu nói chung bao gồm định nghĩa hệ thống kiểu, thuộc tính hệ thống kiểu ứng dụng hệ thống kiểu thực tế Ngồi ra, luận văn trình bày khái niệm giao dịch nhớ giao dịch phần mềm Tiếp theo, cú pháp ngữ nghĩa ngôn ngữ giao dịch TM đƣợc giới thiệu luận văn Từ cú pháp ngữ nghĩa ngơn ngữ TM, luận văn trình bày phƣơng pháp xây dựng hệ thống kiểu để xác định cận nhớ log chƣơng trình sử dụng giao dịch, dựa nghiên cứu đƣợc tác giả thực báo [1] Một chƣơng trình có giao dịch đƣợc cấu thành từ thành phần bản, thành phần thể hành vi giao dịch đƣợc định kiểu thông qua dạng chuỗi số đặc biệt, chuỗi số có dấu Hệ thống kiểu đƣợc trình bày bao gồm kiểu, quy tắc kiểu chứa định nghĩa phép toán đƣợc sử dụng để định kiểu cho thành phần chƣơng trình sử dụng giao dịch Về thực nghiệm, công cụ đƣợc viết ngôn ngữ C# đƣợc cài đặt để tính cận nhớ log chƣơng trình sử dụng giao dịch Chƣơng trình bao gồm phƣơng thức đƣợc xây dựng để thực phép toán nhƣ rút gọn chuỗi số có dấu, gộp chuỗi số có dấu, Joincommit…Và đặc biệt phƣơng thức để tính cận nhớ log Chƣơng trình đƣợc thực nghiệm với nhiều chuỗi đƣợc kết xuất từ chƣơng trình giao dịch khác cho kết tƣơng đối xác Tuy nhiên, thời gian có hạn tài liệu nghiên cứu liên quan chƣa nhiều Hơn nữa, đề tài khó, đòi hỏi đầu tƣ nhiều thời gian công sức nên luận văn khơng tránh khỏi hạn chế Trong q trình nghiên cứu đề tài, nhận thấy kết nghiên cứu dừng mức độ thực kiểm chứng mặt lý thuyết mà chƣa đƣợc kiểm chứng thực tế Do tƣơng lai, hi vọng đề tài đƣợc nghiên cứu kiểm chứng thực tế Nếu thành cơng, kết đạt đƣợc đóng góp đáng kể vào việc tối ƣu chƣơng trình phần mềm làm tăng hiệu sử dụng tài nguyên nhớ 18 TÀI LIỆU THAM KHẢO Tiếng Anh [1] Anh-Hoang Truong, Ngoc-Khai Nguyen, Dang Van Hung, and Dang Duc Hanh (2016), “Calculate statically maximum log memory used by multi-threaded transactional programs”, Theoretical Aspects of Computing – ICTAC 2016, pp 82-99 [2] Anh-Hoang Truong, Dang Van Hung, Duc-Hanh Dang, and Xuan-Tung Vu, “A type system for counting logs of multi-threaded nested transactional programs”, In Nikolaj Bjørner, Sanjiva Prasad, and Laxmi Parida, editors, Distributed Computing and Internet Technology - 12th International Conference, ICDCIT 2016, Proceedings, volume 9581 of LNCS, pp 157-168 [3] Hoang Truong (2006), Type Systems for Guaranteeing Resource Bounds of Component Software, Dissertation for the degree Philosophiae Doctor (PhD) University of Bergen, Norway [4] Igarashi, Atsushi, Pierce Benjamin C, Wadler, Philip (2001), “Featherweight Java: a minimal core calculus for Java and GJ”, Journal ACM Transactions on Programming Languages and Systems, Volume 23, pp 396- 450 [5] Jiang Hui,Lin Dong, Zhang Xingyuan, Xie Xiren(2001), “Type System in Programming Languages”, Journal of Computer Science and Technology, Volume 16, pp 286-292 [6] Luca Cardelli (1996), “Type system”, ACM Computing Surveys (CSUR),Volume 28 Issuse1, pp 263-264 [7] Martin Steffen and Thi Mai Thuong Tran (2009), “Safe commits for Transactional Featherweight Java”, Integrated Formal Methods, pp 290-304 [8] N.Shavit, and D.Touitou (1995), “Software Transational Memory”, Proceeding PODC '95 Proceedings of the fourteenth annual ACM symposium on Principles distributed computing, pp 204-213 [9] Thi Mai Thuong Tran, O.Owe, and Martin Steffen (2010), “Safe typing for transactional vs lock-based concurrency in multi-threaded Java”, KSE '10 Proceedings of the 2010 Second International Conference on Knowledge and Systems Engineering, pp.188-193 [10] Thi Mai Thuong Tran, Martin Steffen, and Hoang Truong (2011), “Estimating Resource Bounds for Software Transactions”, SEFM 2013 Proceedings of the 11th International Conference on Software Engineering and Formal Methods, Volume 8137, pp 212-228 [11] Xuan-Tung Vu, Thi Mai Thuong Tran, Anh-Hoang Truong, and Martin Steffen “A type system for finding upper resource bounds of multi-threaded programs with nested transactions”, In Symposium on Information and Communication Technologys 2012, SoICT ‟12, Halong City, Quang Ninh, Viet Nam, August 23-24, 2012, pp 21-30 19 ... lồng chứa số giao dịch khác Chúng ta gọi giao dịch cũ giao dịch cha gọi giao dịch mà sinh giao dịch cha giao dịch Các giao dịch phải đƣợc đóng trƣớc giao dịch cha Hơn nữa, giao dịch đƣợc gọi đa... giao dịch Các giao dịch cho phép tự đọc, ghi để chia sẻ biến vùng nhớ gọi log đƣợc sử dụng để ghi lại hoạt động kết thúc giao dịch Một mơ hình giao dịch phức tạp sử dụng STM mơ hình giao dịch. .. cho thông tin thô nhớ đƣợc sử dụng log giao dịch Để định thêm xác lƣợng nhớ lớn mà log giao dịch sử dụng, nghiên cứu [1] tác giả đề xuất phƣơng pháp giải vấn đề với việc tính đến kích thƣớc log

Ngày đăng: 17/01/2020, 23:25

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

Tài liệu liên quan