TÍNH cận TRÊN bộ NHỚ LOG của CHƢƠNG TRÌNH sử DỤNG GIAO DỊCH

53 310 0
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

ĐẠ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 LUẬN VĂN THẠC SỸ CÔNG NGHỆ THÔNG TIN Hà Nội - 2016 ĐẠ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 LUẬN VĂN THẠC SỸ CÔNG NGHỆ THÔNG TIN NGƢỜI HƢỚNG DẪN KHOA HỌC: PGS.TS Trƣơng Anh Hoàng Hà Nội - 2016 LỜI CAM ĐOAN Tôi xin cam đoan luận văn thực hiện, đƣợc hoàn thành dƣới hƣớng dẫn trực tiếp từ PGS.TS.Trƣơng Anh Hoàng Các trích dẫn có nguồn gốc rõ ràng, tuân thủ tôn trọng quyền tác giả Luận văn không chép nguyên từ nguồn tài liệu khác Nếu có sai sót, xin chịu trách nhiệm Học viên Nguyễn Phan Tình LỜI CẢM ƠN Để hoàn thành đề tài luận văn bên c nh chủ động cố gắng th n đ nhận đƣợc ủng hộ gi p đ nhiệt t nh từ c c tập thể c nh n trƣờng Qua đ y cho phép đƣợc bày t l ng cảm ơn s u sắc tới thầy PGS.TS.Trƣơng Anh Hoàng giảng viên trƣờng Đ i học công nghệ – Đ i học Quốc gia Hà Nội ngƣời đ trực tiếp động viên định hƣớng hƣớng dẫn tận t nh qu tr nh học tập hoàn thành đề tài luận văn Đồng k nh g i lời cảm ơn đến tập thể c c thầy cô gi o trƣờng Đ i học Công Nghệ – Đ i học Quốc gia Hà Nội đ trau dồi kiến thức cho điều đ tảng qu b u g p phần to lớn qu tr nh vận dụng vào hoàn thiện luận văn Cuối c ng xin đƣợc g i l ng biết ơn s u sắc đến gia đ nh b n b đồng nghiệp đ t o điều kiện vật chất c ng nhƣ tinh thần s t c nh bên động viên gi p yên t m học tập kết th c kh a học Tôi xin ch n thành cảm ơn MỤC LỤC LỜI CẢM ƠN DANH MỤC CÁC KÝ HIỆU, THUẬT NGỮ, CHỮ VIẾT TẮT DANH MỤC CÁC BẢNG .7 DANH MỤC CÁC HÌNH VẼ 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 .10 1.1 Giới thiệu 10 1.2 Hƣớng tiếp cận 11 1.3 Ví dụ minh họa 11 CHƢƠNG MỘT SỐ KIẾN THỨC CƠ SỞ 14 2.1 Hệ thống kiểu .14 2.1.1 Giới thiệu hệ thống kiểu .14 2.1.2 Các thuộc tính hệ thống kiểu 16 2.1.3 Các ứng dụng hệ thống kiểu .16 2.2 Giao dịch nhớ giao dịch phần mềm ( Software Transactional Memory- STM) 18 2.2.1 Giao dịch (Transaction) 18 2.2.2 Bộ nhớ giao dịch phần mềm (Software Transactional Memory- STM) .19 CHƢƠNG NGÔN NGỮ GIAO DỊCH .21 3.1 Cú pháp TM [1] 21 3.2 Các ngữ nghĩa động 21 3.2.1 Ngữ nghĩa cục 21 3.2.2 Ngữ nghĩa toàn cục .22 CHƢƠNG HỆ THỐNG KIỂU CHO CHƢƠNG TRÌNH GIAO DỊCH 24 4.1 Các kiểu .24 4.2 Các quy tắc kiểu .27 CHƢƠNG XÂY DỰNG CÔNG CỤ VÀ THỰC NGHIỆM 30 5.1 Giới thiệu ngôn ngữ lập trình/ tảng .30 5.2 Xây dựng công cụ thực nghiệm 30 5.2.1 Thuật toán rút gọn (chính tắc hóa) chuỗi 31 5.2.2 Thuật toán Cộng (Joint) 33 5.2.3 Thuật toán gộp (Merge) 34 5.2.4 Thuật toán JoinCommit 37 5.2.5 Thuật toán tính cận tài nguyên chƣơng tr nh giao dịch 40 KẾT LUẬN 50 TÀI LIỆU THAM KHẢO 51 DANH MỤC CÁC KÝ HIỆU, THUẬT NGỮ, CHỮ VIẾT TẮT STT CHỮ VIẾT TẮT, THUẬT NGỮ, KÝ HIỆU GIẢI NGHĨA CHỮ VIẾT TẮT TM – Transactional Ngôn ngữ để viết chƣơng tr nh giao dịch Memory STM Software Bộ nhớ giao dịch phần mềm, giải pháp viết Transactional Memory c c chƣơng tr nh song song THUẬT NGỮ 10 11 12 13 14 19 20 21 22 23 24 25 26 27 28 29 30 31 32 Type System Transaction illegal memory reference Data corruption Thread Type checker Type checking Well-behaved Well-formed Ill-behaved Well-typed Ill-typed ADT-Abstract Data Type Illegal instruction Atomicity Consistency Isolation Durability Onacid Commit Nested transactions Multi-threaded Spawn Joint commits Local semantics Global semantics Local enviroments Global enviroments Hệ thống kiểu Giao dịch Tham chiếu nhớ không hợp lệ Hƣ h ng liệu Luồng Bộ kiểm tra kiểu Trình kiểm tra kiểu Tính chất hành x đ ng chƣơng tr nh Tính chất thiết lập đ ng chƣơng tr nh Tính chất hành x yếu chƣơng tr nh Định kiểu tốt Định kiểu yếu Kiểu liệu trừu tƣợng Lệnh không hợp lệ Tính nguyên t Tính quán T nh độc lập Tính bền vững Tr ng thái mở giao dịch Tr ng thái kết thúc giao dịch Các giao dịch lồng Đa luồng Sinh luồng Các commit luồng song song đồng thời thực kết thúc giao tác chung Ngữ nghĩa cục Ngữ nghĩa toàn cục Môi trƣờng cục Môi trƣờng toàn cục 33 Syntax + n - n # n ¬ n Cú pháp KÝ HIỆU Mô tả thành phần + hệ thống kiểu dựa chuỗi số có dấu, mở giao dịch c k ch thƣớc n đơn vị nhớ Mô tả thành phần – hệ thống kiểu dựa chuỗi số có dấu, m thao tác commit liên tiếp Mô tả thành phần # hệ thống kiểu,chỉ số đơn vị nhớ lớn đƣợc s dụng thành phần n Mô tả thành phần ¬ thể số luồng c ng đồng t i thời điểm joint commits DANH MỤC CÁC BẢNG Bảng 3.1 Bảng cú pháp TM 21 Bảng 3.2 Bảng ngữ nghĩa động TM 23 Bảng 4.1 Các quy tắc kiểu 27 Bảng 5.1 Bảng kết kiểm th hàm rút gọn 33 Bảng 5.2 Bảng kết kiểm th hàm cộng 34 Bảng 5.3 Bảng kết kiểm th hàm gộp 37 Bảng 5.4 Bảng kiểm th hàm JoinCommit 40 DANH MỤC CÁC HÌNH VẼ H nh 1.1 Đo n mã cho mô hình giao dịch lồng đa luồng 11 Hình 1.2 Mô hình giao dịch lồng đa luồng 12 Hình 2.1 Hệ thống kiểu trinh biên dịch .17 Hình 2.2 Các tr ng thái giao dịch 18 Hình 4.1 Các luồng song song Joincommit 28 Hình 5.1 Hình mô tả c c giai đo n tính cận tài nguyên nhớ log 40 Hình 5.2 Mô hình giao dịch lồng đa luồng cho ví dụ 5.1 41 Hình 5.3 Mô tả giai đo n thuật toán tính tài nguyên 41 Hình 5.4 Mô hình giao dịch lồng đa luồng cho thực nghiệm .45 Hình 5.5 Màn hình kết thực nghiệm 45 Hình 5.6 Mô hình giao dịch lồng đa luồng cho thực nghiệm .46 Hình 5.7 Màn hình kết thực nghiệm 46 Hình 5.8 Mô hình giao dịch lồng đa luồng cho thực nghiệm .47 Hình 5.9 Màn hình kết ch y thực nghiệm 47 Hình 5.10 Mô hình giao dịch cho thực nghiệm 48 Hình 5.11 Màn hình kết thực nghiệm 48 Hình 5.12 Mô hình giao dịch lồng đa luồng cho thực nghiệm .49 Hình 5.13 Màn hình kết thực nghiệm 49 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 đ y để 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 nguyên 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 nhƣng vô c ng m nh mẽ mà giải đƣợc hầu hết vấn đề N đ thay hoàn toà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 c c 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 đ y t i thời điểm chƣơng tr nh ch y liệu lƣợng nhớ cần cấp ph t cho c c log c vƣợt tài nguyên nhớ máy, hay chƣơng tr nh c thể 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 v 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 toán tính cận nhớ log chƣơng trìnhgiao 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 c ng 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# Để kiểm tra t nh đ ng đắn thuật toán, ta kiểm tra với c c đầ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 toán JoinCommit 5.2.4.1.Mô tả thuật toá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: Chuỗi tắc có d ng #m Bƣớc 1: Duyệt chuỗi S1, S2 :  Nếu S1, S2 có d ng #m, #n  jc (S1, S2)= #max(m,n)  Nếu phần t cuối S1 có d ng “+n1#n2” th kiểm tra phần đầu S2: o Nếu phần đầu S2 có d ng ⌐l2 thì:  Lo i b phần đầu S2  Gọi hàm Seq với đầu vào chuỗi S2 sau đ thêm phần t #(l2 *n1) vào đầu chuỗi thu đƣợc bƣớc  Gọi hàm Jc với S1 = #( n1+n2) chuỗi kết thu đƣợc o Nếu phần đầu S2 có d ng #l1¬l2 thì:  Lo i b phần t đầu S2  Gọi hàm Seq( #(l1 + l2 *n1) S2) với S2 thu đƣợc bƣớc  Gọi đệ quy jc với chuỗi # (n1+n2) chuỗi kết thu đƣợc bƣớc  Nếu phần cuối S1 có d ng “+n1” kiểm tra phần đầu S2: o Nếu phần đầu lst2 có d ng ¬l thì:  Lo i b phần t đầu S2  Gọi hàm Seq (#(l2 *n1) S2) với S2 thu đƣợc bƣớc  Gọi đệ quy joint commit với chuỗi S1 = #n1 chuỗi kết thu đƣợc bƣớc o Nếu phần đầu S2 có d ng #l1¬l2 thì:  Lo i b phần đầu S2 #  Seq( (l1 + l2 *n1) S2) với S2 thu đƣợc bƣớc 37 Gọi đệ quy joint commit với chuỗi S1= #n1 S2 thu đƣợc 5.2.4.2 Cài đặt kiểm chứng  public static string JoinCommit(string s1, string s2) { string[] S1 = ConvertToArray(s1); List M1 = new List(S1); string[] S2 = ConvertToArray(s2); List M2 = new List(S2); string result = ""; int l1, l2, n1, n2; if ((M1[0] == "#") & (M2[0] == "#") & (M1.Count == 2)) 10 { 11 n2 = Int32.Parse(M1[1]); 12 l1 = Int32.Parse(M2[1]); 13 int max = n2 > l1 ? n2 : l1; 14 M2.RemoveRange(0, 2); 15 string t = string.Join("", M2.ToArray()); 16 result = Seq("#" + max.ToString() + t); 17 return result; 18 19 } 20 else 21 { 22 23 if ((M1.Count >= 4) && (M1[M1.Count - 4] == "+") && (M1[M1.Count - 2] == "#")) 24 { 25 if (M2[0] == "!") 26 { 27 l2 = Int32.Parse(M2[1]); 28 n1 = Int32.Parse(M1[M1.Count - 3]); 29 n2 = Int32.Parse(M1[M1.Count - 1]); 30 int x1 = l2 * n1; 31 int n = n1 + n2; 32 M2.RemoveRange(0, 2); 33 M1.RemoveRange(M1.Count - 4, 4); 34 35 string t11 = string.Join("", M1.ToArray()); 36 string t12 = string.Join("", M2.ToArray()); 37 string st1 = Seq(t11 + "#" + n.ToString()); 38 string st2 = Seq("#" + x1.ToString() + t12); 39 40 return JoinCommit(st1, st2); 41 } 42 else if ((M2[0] == "#") & (M2[8] == "!")) 43 { 44 l1 = Int32.Parse(M2[1]); 45 l2 = Int32.Parse(M2[5]); 46 n1 = Int32.Parse(M1[M1.Count - 3]); 47 n2 = Int32.Parse(M1[M1.Count - 1]); 48 int x2 = l1 + l2 * n1; 49 int m = n1 + n2; 38 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 M2.RemoveRange(0, 4); M1.RemoveRange(M1.Count - 4, 4); string t21 = string.Join("", M1.ToArray()); string t22 = string.Join("", M2.ToArray()); string st3 = Seq(t21 + "#" + m.ToString()); string st4 = Seq("#" + x2.ToString() + t22); return JoinCommit(st3, st4); } } else if (M1[M1.Count - 2] == "+") { if (M2[0] == "!") { l2 = Int32.Parse(M2[1]); n1 = Int32.Parse(M1[M1.Count - 1]); int k1 = l2 * n1; M2.RemoveRange(0, 2); M1.RemoveRange(M1.Count - 2, 2); string t32 = string.Join("", M2.ToArray()); string t31 = string.Join("", M1.ToArray()); string st5 = Seq(t31 + "#" + n1.ToString()); string st6 = Seq("#" + k1.ToString() + t32); return JoinCommit(st5, st6); } else if ((M2[0] == "#") & (M2[8] == "!")) { l1 = Int32.Parse(M2[1]); l2 = Int32.Parse(M2[5]); n1 = Int32.Parse(M1[M1.Count - 1]); int k2 = l1 + l2 * n1; M2.RemoveRange(0, 4); M1.RemoveRange(M1.Count - 2, 2); string t42 = string.Join("", M2.ToArray()); string t41 = string.Join("", M1.ToArray()); string st7 = Seq(t41 + "#" + n1.ToString()); string st8 = Seq("#" + k2.ToString() + t42); return JoinCommit(st7, st8); } else Console.WriteLine("Chuong trinh khong hop le"); } } return null; } 39 Để kiểm tra t nh đ ng đắn thuật toán, ta kiểm tra với c c đầu vào khác thu đƣợc kết cho bảng sau: Bảng 5.4 Bảng kiểm thử hàm JoinCommit Lƣ t Chu i +1 #1 +1#2 +2#3 Chu i !1 #1!1 #1 !1 #2!1 Kết #1 #2 #3 #5 5.2.5 Thuật toán tính cận tài nguyên chƣơng trình giao dịch 5.2.5.1 Mô tả thuật toá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 nguyên nhớ log chƣơng tr nh thông báo chƣơng tr nh thành lập không hợp lệ Thuật toán: Thuật toán chia nh thành giai đo n sau: Giai đoạn 1: Chuyển chuỗi kết xuất đƣợc từ m chƣơng tr nh TFJ vào ngăn xếp, đ phần t d ng “(” “)” X, với X chuỗi Giai đoạn 2: Tính giá trị cận tài nguyên cho nhớ log Giai đo n Giai đo n Input String Gi trị cận tài nguyên nhớ log DataStack Hình 5.1 Hình mô tả giai đoạn tính cận tài nguyên nhớ log Ví dụ 5.1 Tính giá trị cận tài nguyên nhớ log chƣơng tr nh c s dụng giao dịch với đo n m nhƣ sau: onacid(1); spawn(onacid(1),commit,commit,commit); commit; 40 Khi đ đ y: đo n mã mô hình hóa d ng luồng lồng nhƣ h nh vẽ dƣới Hình 5.2 Mô hình giao dịch lồng đa luồng cho ví dụ 5.1 Với đo n m nhƣ ta kết xuất đƣợc x u đầu vào tƣơng ứng: Input= +1(+1-1-1-1)-1 Giai đo n 1: Chuyển x u đầu vào Input thành ngăn xếp Hình 5.3 Mô tả giai đoạn thuật toán tính tài nguyên Giai đo n 2: Tính giá trị cận tài nguyên với x u đầu vào đ đƣợc chuyển thành ngăn xếp nhƣ h nh 5.3 Sau thuật toán cụ thể cho t ng giai đoạn: Giai đoạn 1: Chuyển chuỗi kết xuất đƣợc từ m chƣơng tr nh TFJ vào ngăn xếp, đ phần t d ng “(” “)” X, với X chuỗi Thuật toán: Bƣớc 1: Nhận giá trị đầu vào xâu Input; Khởi t o DataStack= null để lƣu trữ xâu trả về; i=0, biến đếm lƣu số cho ký tự; 41 X u S lƣu l i giá trị phần t ngăn xếp DataStack Bƣớc 2: Kiểm tra i>= Input.Length trả ngăn xếp DataStack kết thúc Bƣớc 3: Nếu Input[i] = „(‟ Input[i] = „)‟ th S= + Input[i], i=i+1 quay Bƣớc Bƣớc 4: Nếu Input[i] = „(‟ th Bƣớc 4.1: Kiểm tra S.Length>0 đẩy S vào ngăn xếp Bƣớc 4.2: Đẩy “(” vào ngăn xếp, quay Bƣớc Bƣớc 5: Nếu Input[i] = „)‟ th Bƣớc 5.1: Kiểm tra S.Length >0 đẩy S vào ngăn xếp Bƣớc 5.2: Đẩy “)” vào ngăn xếp, quay Bƣớc Giai đoạn 2: Tính giá trị cận tài nguyên cho nhớ log Thuật toán: Bƣớc 1: Đầu vào chuỗi Input đ đƣợc chuyển ngăn xếp DStack qua giai đo n 1; Khởi t o result= “ ”, result x u lƣu l i kết cận nhớ log Bƣớc 2: Thực ngăn xếp không rỗng Lấy phần t X ngăn xếp, Bƣớc 3: Nếu X = “)” th thực Bƣớc 3.1: Lấy phần t ngăn xếp Y Bƣớc 3.2: Gọi hàm Join(Seq(Y)), kết trả hàm Join(Seq(Y)) chuỗi S12 Bƣớc 3.3: Gán result = Merge(S12,result); Và quay trở l i bƣớc Bƣớc 4: Nếu X = “(” th thực Bƣớc 4.1: Lấy phần t ngăn xếp Y2 Bƣớc 4.2: Gọi hàm Join(Seq(Y2)), kết Join(Seq(Y2)) chuỗi S22 Bƣớc 4.3: Gán result= JoinCommit(S22,result); Và quay trở l i bƣớc Bƣớc 5: Nếu X xâu Bƣớc 5.1: Gọi hàm Join(Seq(X)), kết thu đƣợc chuỗi S32 Bƣớc 5.2: Nếu result= “ ” gán result= S32; Và quay trở l i bƣớc Bƣớc 5.3: Nếu result = “ ” gán result= JoinCommit(S32,result); Và quay trở l i bƣớc 42 5.2.5.2 Cài đặt kiểm chứng Cài đặt cho giai đo n 1: public static Stack ConvertStringToStack(string Input) { Stack DataStack = new Stack(); String S = ""; for (int i = 0; i < Input.Length; i++) { if (Input[i] == '(') { 10 if (S.Length > 0) DataStack.Push(S); 11 DataStack.Push("("); 12 S = ""; 13 } 14 else if (Input[i] == ')') 15 { 16 if (S.Length > 0) DataStack.Push(S); 17 DataStack.Push(")"); 18 S = ""; 19 } 20 else S += Input[i]; 21 } 22 if (S != "") DataStack.Push(S); 23 24 return DataStack; 25 } 43 Cài đặt cho giai đo n 2: public static string CalculResourses(string Input) { Stack DStack = ConvertStringToStack(Input); string result = ""; while (DStack.Count > 0) { string X = DStack.Pop(); 10 if (X == ")") 11 { 12 string Y = DStack.Pop(); 13 string S12 = Join(Seq(Y)); 14 result = Merge(S12, result); 15 } 16 else if (X == "(") 17 { 18 string Y2 = DStack.Pop(); 19 20 string S22 = Join(Seq(Y2)); 21 result = JoinCommit(S22, result); 22 23 } 24 else 25 { 26 27 string S32 = Join(Seq(X)); 28 if (result == "") result = S32; 29 else result = JoinCommit(S32, result); 30 31 } 32 33 34 } 35 return result; 36 } Để kiểm tra t nh đ ng đắn thuật toán, ta kiểm tra với c c đầu vào khác qua thực nghiệm sau: 44 Thực nghiệm 1: Tính cận tài nguyên nhớ log chương trìnhgiao dich, với chuỗi đầu vào: S=+1+1-1(-1)-1 Mô hình giao dịch lồng đa luồng tƣơng ứng với chuỗi trên: Hình 5.4 Mô hình giao dịch lồng đa luồng cho thực nghiệm Ch y thực nghiệm chƣơng tr nh ta đƣợc kết quả: #2 Hình 5.5 Màn hình kết thực nghiệm Thực nghiệm 2: Tính cận tài nguyên nhớ log chương trìnhgiao dich, với chuỗi đầu vào: S=+1(+1-1-1)-1 45 Mô hình giao dịch lồng đa luồng tƣơng ứng cho thực nghiệm nhƣ sau: Hình 5.6 Mô hình giao dịch lồng đa luồng cho thực nghiệm Ch y thực nghiệm chƣơng tr nh ta nhận đƣợc giá trị cận nhớ log #3 Hình 5.7 Màn hình kết thực nghiệm Thực nghiệm 3: Tính cận tài nguyên nhớ log chương trìnhgiao dich, với chuỗi đầu vào: S= +2(+2-1-1)-1 Chuỗi đƣợc mô h nh h a nhƣ sau: 46 Hình 5.8 Mô hình giao dịch lồng đa luồng cho thực nghiệm Ch y thực nghiệm chƣơng tr nh ta nhận đƣợc giá trị cận nhớ log #6 Hình 5.9 Màn hình kết chạy thực nghiệm Thực nghiệm 4: Tính cận tài nguyên nhớ log chương trìnhgiao dich, với chuỗi đầu vào: S= +3+4(+1+2-1-1-1+3-1-1)+5-1-1+6+7+8-1-1-1-1 Chuỗi đƣợc mô h nh h a nhƣ sau: 47 Hình 5.10 Mô hình giao dịch cho thực nghiệm Ch y thực nghiệm chƣơng trình, ta nhận đƣợc giá trị cận nhớ log #30 Hình 5.11 Màn hình kết thực nghiệm Thực nghiệm 5: Tính cận tài nguyên nhớ log chương trìnhgiao dich, với chuỗi đầu vào: S= +1+2(+4-1-1-1)+3(+5-1-1-1-1)-1+6-1-1+7-1-1 Mô hình giao dịch lồng đa luồng tƣơng ứng với chuỗi đầu vào nhƣ là: 48 Hình 5.12 Mô hình giao dịch lồng đa luồng cho thực nghiệm Ch y thực nghiệm chƣơng tr nh ta nhận đƣợc giá trị cận nhớ log #24 Hình 5.13 Màn hình kết thực nghiệm Đánh giá kết thực nghiệm: Qua ch y thực nghiệm công cụ với số trƣờng hợp, kết nhận đƣợc có giá trị kết mong đợi 49 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 toán tính cận nhớ log cho c c 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ế Ngoài ra, luận văn c n tr nh bày c c 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 ng đƣợ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 đ y bao gồm kiểu, quy tắc kiểu đ chứa định nghĩa c c 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 c c phƣơng thức đƣợc xây dựng để thực c 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, đ y đề 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 trình nghiên cứu đề tài, c ng 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 c c chƣơng tr nh phần mềm làm tăng hiệu s dụng tài nguyên nhớ 50 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 51 ... 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. .. chƣơng tr nh giao dịch Trong chƣơng 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 toán tính cận nhớ log. .. 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

Ngày đăng: 09/06/2017, 11:20

Từ khóa liên quan

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

Tài liệu liên quan