Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 56 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
56
Dung lượng
1,72 MB
Nội dung
ĐẠI HỌC QUỐC GIA HÀ NỘI TRƢỜNG ĐẠI HỌC CÔNG NGHỆ NGUYỄN PHAN TÌNHTÍNHCẬNTRÊNBỘNHỚLOGCỦA CHƢƠNG TRÌNHSỬDỤNGGIAODỊ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ÌNHTÍNHCẬNTRÊNBỘNHỚLOGCỦA CHƢƠNG TRÌNHSỬDỤNGGIAODỊ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 tơi thực hiện, đƣợc hồ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, tn 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, tơi 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 hồn thiện luận văn Cuối c ng tơi 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 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 Giaodịchnhớgiaodịch phần mềm ( Software Transactional Memory- STM) 18 2.2.1 Giaodịch (Transaction) 18 2.2.2 Bộnhớgiaodịch phần mềm (Software Transactional Memory- STM) 19 CHƢƠNG NGÔN NGỮ GIAODỊ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ÌNHGIAODỊ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 tố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 tốn tínhcận tài nguyên chƣơng tr nh giaodị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 – Memory Transactional Ngôn ngữ để viết chƣơng tr nh giaodịch STM Software Bộnhớgiaodị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 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 Hệ thống kiểu Giaodị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ở giaodịch Tr ng thái kết thúc giaodịch Các giaodị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 29 30 31 32 Local semantics Global semantics Local enviroments Global enviroments Ngữ nghĩa cục Ngữ nghĩa tồ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ở giaodị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 giaodịch lồng đa luồng 11 Hình 1.2 Mơ hình giaodị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 giaodị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ínhcận tài nguyên nhớlog 40 Hình 5.2 Mơ hình giaodịch lồng đa luồng cho ví dụ 5.1 41 Hình 5.3 Mơ tả giai đo n thuật tốn tính tài ngun 41 Hình 5.4 Mơ hình giaodị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 giaodị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 giaodị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 giaodị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 giaodị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 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ớgiaodị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 giaodịch Các giaodị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 giaodịch Một mơ hình giaodịch phức t p s dụng STM mô hình giaodịch lồng đa luồng (nested and multi-threaded transaction) [5] Trong trình thực thi c c chƣơng tr nh giaodịch lồng đa luồng, luồng đƣợc sinh giaodị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ậnnhớ thời điểm ch y chƣơng tr nhcủa chƣơng tr nh giaodị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ínhcậnnhớlog chƣơng trình có giaodị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 giaodị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 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) ‟ + # # ⌐ ‟ # (n1+n2)), Jc (S n1 n2, l1 l2 S'2) = jc (Sequence (S S'2) Đầu ra: Chuỗi tắc có d ng #m Bƣớc 1: Duyệt chuỗi S1, S2 : # Sequence( (l1+12*n) 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 = ( n#1+n¬ 2) 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 41 42 43 44 45 46 47 48 49 return JoinCommit(st1, st2); } else if ((M2[0] == "#") & (M2[8] == "!")) { l1 = Int32.Parse(M2[1]); l2 = Int32.Parse(M2[5]); n1 = Int32.Parse(M1[M1.Count - 3]); n2 = Int32.Parse(M1[M1.Count - 1]); int x2 = l1 + l2 * n1; 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 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()); 71 72 73 string st5 = Seq(t31 + "#" + n1.ToString()); string st6 = Seq("#" + k1.ToString() + t32); 75 76 77 78 79 80 81 82 83 84 85 86 87 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()); 89 90 91 92 string st8 = Seq("#" + k2.ToString() + t42); return JoinCommit(st7, st8); } 74 88 else Console.WriteLine("Chuong trinh khong hop le"); 93 94 95 } } 97 return null; 99 } 96 98 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 tốn tínhcận tài ngun chƣơng trìnhgiaodị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 dịch s dụnggiao Đầ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 tốn: Thuật tố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 Input String Giai đo n DataStack Gi trị cận tài ngun nhớlog Hình 5.1 Hình mơ tả giai đoạn tínhcậ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ụnggiaodịch với đo n m nhƣ sau: onacid(1); spawn(onacid(1),commit,commit,commit); commit; 40 Khi đ đo n mã mơ hình hóa d ng luồng lồng nhƣ h nh vẽ dƣới đ y: Hình 5.2 Mơ hình giaodị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 tốn tính tài ngun 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ậnnhớ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 25 } else { 27 28 29 string S32 = Join(Seq(X)); if (result == "") result = S32; else result = JoinCommit(S32, result); 31 } 26 30 32 33 34 35 36 } return result; } Để 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ínhcận tài nguyên nhớlogchươngtrình có giao dich, với chuỗi đầu vào: S=+1+1-1(-1)-1 Mơ hình giaodịch lồng đa luồng tƣơng ứng với chuỗi trên: Hình 5.4 Mơ hình giaodị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ínhcận tài nguyên nhớlogchươngtrình có giao dich, với chuỗi đầu vào: S=+1(+1-1-1)-1 45 Mơ hình giaodịch lồng đa luồng tƣơng ứng cho thực nghiệm nhƣ sau: Hình 5.6 Mơ hình giaodị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ậnnhớlog #3 Hình 5.7 Màn hình kết thực nghiệm Thực nghiệm 3: Tínhcận tài nguyên nhớlogchươngtrình có giao 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 giaodị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ậnnhớlog #6 Hình 5.9 Màn hình kết chạy thực nghiệm Thực nghiệm 4: Tínhcận tài nguyên nhớlogchươngtrình có giao 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-11-1 Chuỗi đƣợc mơ h nh h a nhƣ sau: 47 Hình 5.10 Mơ hình giaodịch cho thực nghiệm Ch y thực nghiệm chƣơng trình, ta nhận đƣợc giá trị cậnnhớlog #30 Hình 5.11 Màn hình kết thực nghiệm Thực nghiệm 5: Tínhcận tài nguyên nhớlogchươngtrình có giao 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 giaodị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 giaodị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ậnnhớ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 tốn tínhcậnnhớlog cho c c chƣơng tr nh s dụnggiaodị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 giaodịchnhớgiaodịch phần mềm Tiếp theo, cú pháp ngữ nghĩa ngôn ngữ giaodị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ậnnhớlog chƣơng tr nh s dụnggiao dịch, dựa nghiên cứu đƣợc tác giả thực báo [1] Một chƣơng tr nh c giaodịch đƣợc cấu thành từ thành phần bản, thành phần thể hành vi giaodị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ụnggiaodịch Về thực nghiệm, công cụ đƣợc viết ngôn ngữ C# đ đƣợc cài đặt để tínhcậnnhớlog chƣơng tr nh s dụnggiaodị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ínhcậnnhớ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 giaodị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 q trình nghiên cứu đề tài, chúng 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 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)... 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...ĐẠ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ố: