Hệ thống kiểu tính cận trên số log cho ngôn ngữ giao dịch đa luồng tối giản

14 63 0
Hệ thống kiểu tính cận trên số log cho ngôn ngữ giao dịch đa luồng tối giản

Đ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

Bài viết đưa ra một hệ thống kiểu để ước lượng cận trên tài nguyên sử dụng của các chương trình đa luồng và sử dụng bộ nhớ giao dịch. Tài nguyên được đơn giản hóa là số vùng bộ nhớ giao dịch được tạo ra.

JOURNAL OF SCIENCE OF HNUE Educational Sci., 2015, Vol 60, No 7A, pp 80-93 This paper is available online at http://stdb.hnue.edu.vn DOI: 10.18173/2354-1075.2015-0055 HỆ THỐNG KIỂU TÍNH CẬN TRÊN SỐ LOG CHO NGÔN NGỮ GIAO DỊCH ĐA LUỒNG TỐI GIẢN Trương Anh Hoàng1 , Nguyễn Ngọc Khải2 Trường Đại học Công nghệ - Đại học Quốc Gia Hà Nội Trường Đại học Tài nguyên Môi trường Hà Nội Tóm tắt Trong báo này, chúng tơi đưa hệ thống kiểu để ước lượng cận tài nguyên sử dụng chương trình đa luồng sử dụng nhớ giao dịch Tài nguyên đơn giản hóa số vùng nhớ giao dịch tạo Hệ thống kiểu xây dựng cho ngôn ngữ lõi với lệnh liên quan đến việc tạo luồng giao dịch Việc sử dụng ngôn ngữ lõi giúp việc kiểm tra tính đắn xác việc ước lượng rõ ràng đồng thời cho phép mở rộng ngôn ngữ sử dụng nhớ giao dịch khác thuận lợi Từ khóa: Hệ thống kiểu, biên tài nguyên, nhớ giao dịch, đa luồng, ngôn ngữ lập trình Mở đầu Bộ nhớ giao dịch phần mềm [12] cấu trúc lập trình nhằm thay cho chế đồng bộ nhớ dùng chung dựa khóa Một chế giao dịch mạnh cho phép giao dịch đan xen việc lồng việc tạo luồng giao dịch mở mô tả [9] Theo chế này, giao dịch gọi lồng giao dịch khác bắt đầu kết thúc giao dịch khác; giao dịch đầu gọi giao dịch cha, giao dịch sau gọi giao dịch Khi lồng nhau, giao dịch phải kết thúc (commit) trước giao dịch cha chúng kết thúc Một giao dịch gọi đa luồng người lập trình tạo luồng bên giao dịch chưa kết thúc Các luồng tạo chạy song song với luồng có giao dịch chưa kết thúc Để cho phép truy cập đồng thời đến biến dùng chung, luồng tạo biến thuộc giao dịch mở Khi luồng cha kết thúc giao dịch, tất luồng tạo bên giao dịch phải kết thúc với luồng cha chúng Chúng gọi loại kết thúc đồng kết thúc (joint commit) thời điểm kết thúc điểm đồng kết thúc Các đồng kết thúc dạng đồng ẩn luồng chạy song song với Để cài đặt chế nhớ giao dịch, giao dịch có vùng nhớ cục riêng biệt cho luồng, gọi log, để lưu trữ biến dùng chung (chia sẻ) để luồng truy cập độc lập biến dùng chung trình thực Mỗi luồng tạo số giao dịch lồng nên có tương ứng số lượng log tạo cho giao dịch Hơn nữa, luồng tạo giao dịch có cha Khi đồng kết thúc, log so sánh với khơng có mâu thuẫn việc cập nhật Ngày nhận bài: 6/8/2015 Ngày nhận đăng: 15/11/2015 Liên hệ: Trương Anh Hoàng, e-mail: truonganhhoang@gmail.com 80 Hệ thống kiểu tính cận số log cho ngơn ngữ giao dịch đa luồng tối giản biến giao dịch hồn tất Ngược lại có mâu thuẫn việc cập nhật biến luồng tham gia vào trình đồng kết thúc giao dịch thử lại (retry), hủy bỏ (rollback) Tại điểm đồng kết thúc, log giải phóng, tức tài nguyên nhớ tương ứng giải phóng Cơ chế nhớ giao dịch có ưu điểm tạo thuận lợi cho người lập trình gây số vấn đề khơng tầm thường như: việc tạo log luồng tạo ngầm, hay việc đồng trạng thái kết thúc với trạng thái khác ngầm Ngầm hiểu người lập trình khơng chủ động viết lệnh tạo log hay lệnh đồng Các hoạt động ngầm làm việc ước lượng tài nguyên sử dụng chương trình trường hợp trở nên khó khăn Hơn nữa, việc tạo log làm ảnh hưởng đến khả kết thúc luồng hoạt động song song, việc tạo nhiều log ảnh hưởng đến an tồn chương trình tài ngun nhớ máy hữu hạn Vì vậy, việc ước lượng cận số log tồn chương trình nhớ giao dịch đa luồng, lồng có vai trò quan trọng để đánh giá tính hiệu chương trình Trong nghiên cứu trước [10, 14] đưa hệ thống kiểu hiệu ứng để ước lượng cận số log tồn thời điểm Tuy nhiên, hệ thống kiểu hiệu ứng nghiên cứu phức tạp biên tìm chưa sắc - tức ước lượng cận cao thực tế xảy Trong nghiên cứu này, đưa hệ thống kiểu đơn giản cho ngôn ngữ đơn giản hóa có đầy đủ lệnh để tạo giao dịch luồng con, suy luận biên xác Các đóng góp báo gồm: • Đưa ngơn ngữ lõi gồm lệnh liên quan đến giao dịch đa luồng • Trình bày hệ thống kiểu có khả xác định cận số log chương trình tạo • Nêu tính chất chứng minh tính đắn hệ thống kiểu đề xuất Ước lượng tài nguyên sử dụng nghiên cứu nhiều ngữ cảnh khác Tuy nhiên, hầu hết nghiên cứu hạn chế ngơn ngữ lập trình hàm Trong nghiên cứu này, tập trung xác định số lượng log tối đa chương trình đa luồng, cấu trúc đồng phức tạp ngầm định với mơ hình giao dịch có kế thừa Hughes Pareto [8] giới thiệu cấu trúc liệu đệ quy động để xác định biên tài nguyên sử dụng Tofte Talpin [13] sử dụng hệ thống suy luận để mơ tả việc quản lí nhớ cho chương trình thực cấp phát giải phóng nhớ động Hofmann Jost [6] tính tốn biên khơng gian heap cho ngơn ngữ hàm Wei-Ngan Chin [5] xác minh nhớ sử dụng cho chương trình hướng đối tượng Những người lập trình u cầu thích nhớ sử dụng kích thước liên quan cho phương thức việc giải phóng nhớ rõ ràng Trong [7], Hofmann Jost sử dụng hệ thống kiểu để tính tốn biên khơng gian heap hàm đầu vào cho ngôn ngữ hướng đối tượng Trong [4] tác giả tính tốn cận tài nguyên sử dụng phương thức sử dụng hàm phi tuyến với tham số phương thức Các biên chưa xác nghiên cứu họ không dựa kiểu Braberman cộng [2] tính tốn sấp xỉ hình thức phi tuyến biên nhớ cho chương trình Java liên quan đến cấu trúc liệu vòng lặp Trong [3] tác giả đề xuất hệ thống kiểu cho ngôn ngữ thành phần với thành phần chạy song song luồng chạy độc lập Trong [1], Albert cộng tính tốn kích thước nhớ (heap) chương trình hàm biến đầu vào Trong [11] đề xuất thuật toán nhanh để xác định tĩnh cận nhớ heap lớp chương trình JavaCard Trong phân tích chúng tơi tập trung vào ngôn ngữ cho phép linh hoạt việc tạo luồng linh hoạt việc mở, đóng kéo theo đồng ngầm luồng kết thúc giao dịch Ngôn ngữ hệ thống kiểu tối giản tảng tốt cho nghiên cứu sau tài nguyên nhớ ngôn ngữ sử dụng nhớ giao dịch 81 Trương Anh Hoàng, Nguyễn Ngọc Khải 2.1 Nội dung nghiên cứu Ví dụ minh họa Để minh họa tốn hướng giải chúng tơi sử dụng Đoạn mã làm ví dụ minh họa Trong đoạn chương trình này, cặp lệnh onacid commit để bắt đầu kết thúc giao dịch chúng phải đôi với Các biểu thức e1, e2, e3 e4 đại diện cho đoạn chương trình Lệnh spawn tạo luồng Đoạn mã 1: Một chương trình lồng đa luồng onacid;//thread onacid; spawn(e1;commit;commit);//thread onacid; spawn(e2;commit;commit;commit);//thread commit; e3; commit; e4; 10 commit Hình Các luồng song song, lồng kết thúc Ngữ nghĩa chương trình minh họa Hình Lệnh onacid lệnh commit kí hiệu [ ] tương ứng hình Lệnh spawn tạo luồng chạy song song với luồng cha mô tả đường nằm ngang Luồng tạo log luồng cha để luồng truy cập biến cách độc lập, tránh xung đột với luồng khác Trong ví dụ này, tạo e1 luồng mở hai giao dịch, luồng thực thi e1 hai giao dịch phải thực hai lệnh commit để đóng chúng Các luồng song song giao dịch kết thúc thời điểm mơ tả hình chữ nhật có đường kẻ chấm chấm Các cạnh bên phải hình chữ nhật thể thời điểm đồng Giả sử e1 giao dịch đơn khơng có giao dịch con, e2 giao dịch với hai giao dịch lồng (e2=onacid; onacid; commit; commit), e3 giao dịch với ba giao dịch bên lồng nhau, e4 có bốn giao dịch bên lồng Có thể tính tay số log tối đa chương trình sau tạo e2 Tại thời điểm đó, e1 đóng góp giao dịch (2 từ luồng chính, nó), e2 đóng góp giao dịch (3 từ luồng chính, nó), luồng đóng góp giao dịch Tổng + + = 11 giao dịch Trong thời điểm thực 82 Hệ thống kiểu tính cận số log cho ngơn ngữ giao dịch đa luồng tối giản e3 e4, số giao dịch mở nhiều giao dịch đóng trước Một điểm khó khăn việc phân tích phải nắm bắt điểm đồng ngầm thời điểm biên dịch Ví dụ sử dụng ngơn ngữ lõi với lệnh liên quan đến việc tạo luồng giao dịch, gọi TM (transactional multi-threaded language) Trong nghiên cứu trước chúng tơi, việc chia tách chương trình thành thành phần sau xây dựng kiểu cho thành phần thực cách tự Điều dẫn đến hệ thống kiểu phức tạp sau phải xử lí nhiều khả kết hợp thành phần Trong nghiên cứu này, để hạn chế việc kết hợp tùy ý thành phần, xác định kiểu cho luồng trước, sau kết hợp với luồng anh chị (cha) nó, q trình lặp lại đến mơt luồng Trong ví dụ này, xác định kiểu cho biểu thức dòng trước tiên, sau kết hợp với phần từ dòng tới dòng 10 Tiếp theo dòng xác định kiểu với phần từ dòng tới dòng 10 Bây phần từ dòng tới dòng 10 kết hợp với luồng dòng Sau dòng xác định kiểu với dòng tới 10, sau xác định kiểu tồn chương trình từ dòng tới dòng 10 Bằng cách này, có ước lượng số log tối đa xác 2.2 Ngôn ngữ TM TM ngôn ngữ mệnh lệnh hỗ trợ cấu trúc giao dịch đa luồng Đây đặc điểm cần thiết mô hình tương tranh hệ thống giao dịch lồng P ::= e ::= | p(e) | P P e1 ; e2 | e1 + e2 | spawn(e) | onacid | commit Hình Cú pháp TM 2.2.1 Cú pháp Cú pháp TM thể Hình Dòng thứ để biểu diễn luồng/tiến trình Dòng thứ xác định lệnh tạo thành chương trình e e1 nối tiếp e2 nhận hai giá trị e1 e2 Dòng sau ba lệnh để tạo luồng, bắt đầu kết thúc giao dịch Hai lệnh cuối lệnh sử dụng (cấp phát) giải phóng tài nguyên 2.2.2 Ngữ nghĩa động Ngữ nghĩa TM thể hai tập quy tắc hoạt động: tập quy tắc cho ngữ nghĩa mệnh lệnh (Bảng 1) tập quy tắc cho ngữ nghĩa giao dịch đa luồng (Bảng 2) Hiểu cách tổng quát, môi trường lúc chạy (toàn cục) tập hợp luồng Mỗi luồng có mơi trường cục chuỗi log Để quản lí luồng log gán cho luồng log định danh Phần định nghĩa cách hình thức mơi trường cục mơi trường tồn cục Ngữ nghĩa mệnh lệnh Ngữ nghĩa mệnh lệnh quy tắc chuẩn tương tự ngôn ngữ thông dụng khác Ở đây, trình bày điểm liên quan đến việc tạo hủy log giao dịch luồng Định nghĩa 2.1 (Môi trường cục bộ) Một môi trường cục E dãy hữu hạn log gắn nhãn l1 :log1 ; ; lk :logk , phần tử thứ i dãy bao gồm nhãn li (một tên giao 83 Trương Anh Hoàng, Nguyễn Ngọc Khải dịch) log logi Cho E = l1 :log1 ; ; lk :logk , ta gọi k kích cỡ E, kí hiệu |E| Kích cỡ |E| độ sâu giao dịch lồng (l1 giao dịch cùng, lk giao dịch cùng) Mơi trường rỗng/trống kí hiệu ǫ E, (e1 + e2 ); e → E, (e1 ; e) L-COND1 E, (e1 + e2 ); e → E, (e2 ; e) L-COND2 Bảng Ngữ nghĩa mệnh lệnh Ngữ nghĩa mức cục biểu diễn dạng E, e → E ′ , e′ Trong E, E ′ mơi trường cục bộ, e, e′ biểu thức đánh giá mơi trường Hai quy tắc L-COND1 L-COND2 hiểu việc lựa chọn thực thi hai biểu thức e1 e2 tùy thuộc vào giá trị biểu thức điều kiện Ngữ nghĩa giao dịch đa luồng Các quy tắc cho ngữ nghĩa thể dạng Γ, P ⇒ Γ′ , P ′ Γ, P ⇒ error , Γ mơi trường tồn cục P tập tiến trình có dạng p(e) Một mơi trường tồn cục bao gồm mơi trường cục luồng định nghĩa sau: Định nghĩa 2.2 (Mơi trường tồn cục) Một mơi trường tồn cục Γ ánh xạ xác định từ định danh luồng tới mơi trường cục nó, Γ = p1 :E1 , , pk :Ek , pi định danh luồng Ei môi trường cục luồng pi E, e → E ′ , e′ p : E ∈ Γ ref lect(p, E ′ , Γ) = Γ′ G-PLAIN Γ, P p(e) ⇒ Γ′ , P p(e′ ) p′ f resh spawn(p, p′ , Γ) = Γ′ G-SPAWN Γ, P p(spawn(e1 ); e2 ) ⇒ Γ′ , P p(e2 ) p′ (e1 ) l f resh start(l, p, Γ) = Γ′ G-TRANS Γ, P p(onacid; e) ⇒ Γ′ , P p(e) ¯ Γ) = Γ′ p : E ∈ Γ E = ; l : log; intranse(Γ, l) = p¯ = p1 pk commit(¯ p, E, Γ, P k pi (commit; ei ) ⇒ Γ′ , P ( Γ = Γ′′ ; p : E |E| = Γ, P p(commit; e) ⇒ error k pi (ei )) G-COMM G-ERROR Bảng Ngữ nghĩa giao dịch luồng Để mô tả ngữ nghĩa ngôn ngữ, ta cần thêm số hàm phụ trợ sau: • Hàm ref lect cập nhật thay đổi từ môi trường cục lên mơi trường tồn cục: Nếu ref lect(p, E ′ , Γ) = Γ′ Γ = p1 : E1 , , pk : Ek Γ′ = p1 : E1′ , pk : Ek′ với |Ei | = |Ei′ | (với i) • Hàm spawn sinh luồng p′ từ luồng cha p: Giả sử Γ = p : E, Γ′′ p′ ∈ / Γ spawn(p, p′ , Γ) = Γ′ , Γ′ = Γ, p′ : E ′ với |E| = |E ′ | • Hàm start(l, pi , Γ) tạo giao dịch nhãn l từ luồng pi : Nếu start(l, pi , Γ) = Γ′ với Γ = p1 : E1 , , pi : Ei , , pk : Ek với lệnh f resh l, Γ′ = p1 : E1 , , pi : Ei′ , , pk : Ek , với |Ei′ | = |Ei | + 84 Hệ thống kiểu tính cận số log cho ngơn ngữ giao dịch đa luồng tối giản • Hàm intranse(Γ, l) trả lại tập luồng giao dịch l: Giả sử Γ = Γ′′ , p : E với E = E ′ , l : ρ intranse(Γ, l) = p¯, thì: - p ∈ p¯ - với pi ∈ p¯ ta có Γ = , pi : (Ei′ , l : ρi ), - với luồng p′ với p′ ∈ / p¯ Γ = , p′ : (E ′ , l′ : ρ′ ), , ta có l′ = l ¯ Γ) = Γ′ với Γ = Γ′′ , p : (E, l : ρ) • Hàm commit kết thúc giao dịch: commit(¯ p, E, ′ ′ p¯ = intranse(Γ, l) Γ = , pj : Ej , , pi : E;i , pi ∈ p¯, pj ∈ / p¯, pj : Ej ∈ Γ, với |Ej′ | = |Ej | |Ei′ | = |Ei | − Chú ý hàm spawn tạo nhiều nhãn giống luồng khác dấu vết để chúng đồng kết thúc quy tắc G-SPAWN Các quy tắc Bảng có nghĩa sau: • Quy tắc G-PLAIN để cập nhật thay đổi mức cục lên mức toàn cục Giả sử p : E ∈ Γ, luồng p tạo biến đổi E, e → E ′ , e′ môi trường cục E Hàm ref lect cập nhật biến đổi lên mơi trường tồn cục, chuyển từ mơi trường Γ thành Γ′ • Quy tắc G-SPAWN dùng cho trường hợp tạo luồng với lệnh spawn Lệnh spawn(e1 ) tạo luồng p′ thực thi e1 song song với luồng cha p, biến đổi mơi trường từ Γ sang Γ′ • Quy tắc G-TRANS dùng trường hợp luồng p tạo giao dịch với lệnh onacid Giao dịch với nhãn l sinh ra, môi trường biến đổi từ Γ sang Γ′ • Quy tắc G-COMM để thực việc kết thúc giao dịch Giao dịch luồng p l Tất luồng giao dịch l phải kết thúc (commit) giao dịch l kết thúc • Quy tắc G-ERROR dùng trường hợp việc kết thúc giao dịch không thành công Trong trường hợp luồng p thực việc kết thúc giao dịch bên ngồi mơi trường nghĩa |E| = trả lại kết lỗi (error) 2.3 Hệ thống kiểu Mục đích hệ thống kiểu để xác định số log tối đa tạo chương trình TM Ở chúng tơi đề xuất kiểu đoạn chương trình dãy số có dấu Các dãy số có dấu trừu tượng hành vi giao dịch đoạn chương trình 2.3.1 Kiểu Để mổ tả hành vi giao dịch đoạn chương trình, chúng tơi sử dụng tập bốn kí hiệu {+, −, ¬, ♯} Kí hiệu + − mô tả cho bắt đầu kết thúc giao dịch Kí hiệu ¬ miêu tả điểm đồng kết thúc giao dịch luồng song song ♯ miêu tả số log tối đa tạo Để tiện lợi cho việc tính tốn sau dãy này, gán kí hiệu với số tự nhiên không âm n ∈ N+ = {0, 1, 2, } thành dạng số có dấu Vì vậy, kiểu sử dụng dãy hữu hạn tập số có dấu T N = { +n , −n , ♯n , ¬ n | n ∈ N+ } Chúng cố gắng để đưa quy tắc để miêu tả thành phần (biểu thức) TM dãy số có dấu Một đoạn chương trình có kiểu, +n ( −n ) hiểu có liên tiếp n onacid (commit) ¬ với n hiểu thành phần có n luồng cần phải đồng với onacid để hồn tất giao dịch, với kí hiệu ♯n hiểu thành phần tạo tối đa n log Trong q trình tính tốn, phần tử có giá trị xuất không ảnh hưởng đến ngữ nghĩa chuỗi nên tự động bỏ chúng Để đơn giản trình bày, chèn phần tử ♯0 cần thiết ¯ tập hợp tất chuỗi Chúng ta dùng s cho phần tử thuộc T N, kí hiệu T N ¯ m, n, l, thuộc N Các chuỗi rỗng kí số có dấu, dùng S cho phần tử thuộc T N hiệu ǫ Đối với chuỗi S kí hiệu độ dài |S|, kí hiệu S(i) cho phần tử thứ i 85 Trương Anh Hoàng, Nguyễn Ngọc Khải S Đối với số có dấu s, kí hiệu tag(s) tag s, |s| số tự nhiên tương ứng ¯ kí hiệu tag(S) cho chuỗi của s (ví dụ s = tag(s) |s|) Đối với chuỗi S ∈ T N, tag phần tử S, ví dụ, tag(s1 sk ) = tag(s1 ) tag(sk ) kí hiệu {S} cho tập kí hiệu xuất S Để đơn giản kí hiệu tag(s) ∈ S thay cho tag(s) ∈ {S} ¯ phân chia thành lớp tương đương Các phần tử lớp tương Tập T N đương biểu diễn hành vi giao dịch Trong lớp sử dụng chuỗi rút gọn để đại diện cho lớp gọi chuỗi tắc Định nghĩa 2.3 (Chuỗi tắc) Một chuỗi S chuỗi tắc tag(S) không chứa chuỗi ‘−−’, ‘♯♯’, ‘++’, ‘+−’, ‘+♯−’, ‘+¬’ ‘+♯¬’ |S(i)| > với i Ở thường đơn giản/rút gọn chuỗi S mà khơng làm thay ngữ nghĩa Hàm seq rút gọn chuỗi S thành chuỗi tắc Trong định nghĩa mẫu +− khơng xuất bên trái, chèn ♯0 để áp dụng Hai mẫu ‘+¬’ ‘+♯¬’ xử lí hàm jc phần sau Định nghĩa 2.4 (Đơn giản hóa) Hàm seq định nghĩa đệ quy sau: seq(S) = S S 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 −m −n S ′ ) = seq(S −(m + n) S ′ ) seq(S +m ♯l −n S ′ ) = seq(S +(m − 1) ♯(l + 1) −(n − 1) S ′ ) Như minh họa Hình 1, luồng đồng đồng kết thúc (hình chữ nhật nét đứt) Vì đồng kết thúc tách luồng thành đoạn số đoạn chạy song song với Trong ví dụ e1 chạy song song với e2 e3, không chạy song song với e4 Với kiểu đưa cho biểu thức e, đoạn xác định việc xem xét kiểu biểu thức e bên spawn(e) xem có thành phần − ¬ khơng Ví dụ, spawn(e1 ); e2 , chuỗi tắc e1 có − ¬, số đoạn e1 phải đồng với đoạn e2 Hàm merge Định nghĩa 2.6 sử dụng tình này, để định nghĩa cần vài hàm phụ ¯ sig ∈ {+, −, ¬, ♯}, định nghĩa hàm phụ f irst(S, sig) trả Với S ∈ T N số i nhỏ có dấu sig, tức tag(S(i)) = sig Nếu khơng có phần tử vậy, hàm trả Một lệnh kết thúc giao dịch kết thúc thường (cục bộ) đồng kết thúc Ban đầu, giả sử tất lệnh kết thúc kết thúc thường Sau thấy khơng có lệnh bắt đầu giao dịch (onacid) để khớp với lệnh kết thúc cục đổi kết thúc thành đồng kết thúc Hàm sau thực cơng việc chuyển chuỗi tắc (khơng có phần tử +) thành chuỗi đồng Định nghĩa 2.5 (Chuyển dạng) S = s1 sk chuỗi tắc, giả sử i = f irst(S, −) Hàm join(S) thay − S ¬ sau: join(S) = S i = join(S) = s1 si−1 ¬ join( −(|si | − 1) si+1 sk ) i = Bởi hàm join lũy đẳng, định nghĩa hợp lệ Chú ý dạng tắc S chứa phần tử ♯ xen kẽ với phần tử − ¬ Chuỗi đồng sử dụng cho biểu 86 Hệ thống kiểu tính cận số log cho ngôn ngữ giao dịch đa luồng tối giản thức spawn phần luồng Các chuỗi đồng hợp với theo định nghĩa sau Định nghĩa 2.6 (Hợp) S1 S2 chuỗi đồng với số lượng phần tử ¬ S1 S2 Hàm merge định nghĩa đệ quy sau: merge( ♯m1 , ♯m2 ) = ♯(m1 + m2 ) merge( ♯m1 ¬ n1 S1′ , ♯m2 ¬ n2 S2′ ) = ♯(m1 + m2 ) ¬ (n1 + n2 ) merge(S1′ , S2′ ) Định nghĩa hợp lệ S1 , S2 chuỗi đồng nên chúng có phần tử ♯ ¬ Hơn nữa, số lượng = giả thiết định nghĩa Vì vậy, chèn ♯0 để tạo hai chuỗi phù hợp với định nghĩa Đối với lệnh điều kiện e1 + e2 , cần hành vi giao dịch chúng với bên phải tương tự Tức là, loại bỏ tất phần tử ♯ chúng hai chuỗi lại phải giống hệt Giả sử S1 S2 hai chuỗi có Si = ♯mi ∗ n Si′ , i = 1, 2, ∗ = {+, −, ¬}, S1′ S2′ có giao dịch tương tự Với S1 S2 này, định nghĩa phép toán chọn sau: Định nghĩa 2.7 (Chọn) S1 S2 hai chuỗi mà loại bỏ tất phần tử ♯ chúng hai chuỗi giống hệt Hàm alt định nghĩa đệ quy sau: alt( ♯m1 , ♯m2 ) = ♯max(m1 , m2 ) alt( ♯m1 ∗ n S1′ , ♯m2 ∗ n S2′ ) = ♯max(m1 , m2 ) ∗ n alt(S1′ , S2′ ) 2.3.2 Các quy tắc kiểu −1 ⊢ onacid : +1 n⊢e:S n ⊢ spawn(e) : join(S)ρ T-ONACID T-SPAWN ⊢ commit : −1 n ⊢ e : S1 T-COMMIT n2 ⊢ e2 : S2 S = seq(S1 S2 ) n1 + n2 ⊢ e ; e : S n1 ⊢ e1 : S1 n2 ⊢ e2 : S2ρ S = jc(S1 , S2 ) n1 + n2 ⊢ e ; e : S n ⊢ e1 : S1ρ n⊢e:S n ⊢ e : join(S)ρ T-PREP n ⊢ e2 : S2ρ S = merge(S1 , S2 ) n ⊢ e1 ; e2 : S ρ n ⊢ ei : T i T-SEQ T-JC T-MERGE kind(Ti ) i = 1, kind(T1 ) = kind(T2 ) Ti = Si n ⊢ e1 + e2 : alt(S1 , S2 )kind(S1 ) T-COND Bảng Quy tắc kiểu Cú pháp ngôn ngữ kiểu T định nghĩa sau: T = S | Sρ S ρ sử dụng cho biểu thức spawn để đánh dấu chúng cần đồng với luồng cha chúng Chúng ta định nghĩa hàm kind(T ) trả trống cho kiểu thông thường S ρ T có dạng S ρ 87 Trương Anh Hồng, Nguyễn Ngọc Khải Môi trường kiểu cung cấp thông tin ngữ cảnh cho biểu thức tính kiểu Các phát biểu kiểu có dạng sau: n⊢e:T Trong n ∈ N môi trường kiểu Khi n dương thể số giao dịch mở mà e đóng kết thúc thường đồng kết thúc e Các quy tắc kiểu cho phép tính chúng tơi mơ tả Bảng Ở ngầm hiểu qui tắc áp dụng hàm tương ứng seq, jc, merge, alt thực Tức đối số chúng đáp ứng điều kiện hàm Quy tắc T-SPAWN chuyển đổi S thành chuỗi đồng tạo kiểu ρ để hợp luồng chạy song song với qui tắc T-MERGE Quy tắc T-PREP cho phép tạo kiểu phù hợp cho e2 để áp dụng T-MERGE Các quy tắc lại tự nhiên theo ngữ nghĩa chương trình, ngoại trừ quy tắc T-JC có hàm jc Hàm giải thích trước định nghĩa hình thức Định nghĩa 2.8 Trong quy tắc T-JC, e2 có vài đoạn, l (trong Định nghĩa 2.8) số luồng kết thúc Phần tử + cuối S1 , +n , khớp với phần tử ¬ S2 , ¬ l Nhưng sau +n , có phần tử ♯, gọi ♯n′ , số lượng log cục tối đa cho +n ♯n′ n + n′ (nhưng định nghĩa bước định nghĩa sau jc thêm vào n′ thời điểm) Tương tự, trước ¬ l có ♯l′ , số lượng log tối đa điểm l + l′ Sau gỡ bỏ + từ S1 ¬ từ S2 rút gọn chuỗi để áp dụng đệ quy tiếp jc Do có định nghĩa hình thức cho jc sau Định nghĩa 2.8 (Đồng kết thúc) Hàm jc định nghĩa đệ quy sau: jc(S1′ +n ♯n′ , ♯l′ ¬ l S2′ ) = jc(seq(S1′ +(n − 1) ♯(n′ + 1) ), seq( ♯(l′ + l) S2′ )) if l > jc( ♯n′ , ♯l′ ¬ l S2′ ) = seq( ♯max(n′ , l′ ) ¬ l S2′ ) otherwise Vì kiểu thể hành vi đoạn chương trình nên chương trình có kiểu hợp lệ có kiểu phần tử đơn ♯n n số log tối đa tồn chương trình chạy Định nghĩa 2.9 (Kiểu hợp lệ) Một biểu thức e có kiểu hợp lệ tồn kiểu dẫn xuất cho e cho ⊢ e : ♯n với n Một phát biểu kiểu có đặc điểm mơi trường đủ để giao dịch mở (đồng) kết thúc e mô tả T Định lý 2.1 (Tính chất phát biểu kiểu) Nếu n ⊢ e : T n ≥ sim( +n , T ) = ♯m m ≥ n sim(T1 , T2 ) = seq(jc(S1 , S2 )) với Si Ti bỏ ρ Chứng minh Bằng phương pháp quy nạp dựa quy tắc xác định kiểu mơ tả Bảng • Trường hợp T-ONACID khơng áp dụng n < • Trường hợp T-COMMIT tầm thường sejc( +1 −1 ) = ♯1 m = = n • Đối với T-SEQ, theo giả thuyết quy nạp (IH) có seq(jc( +ni , Si )) = seq( +ni Si ) = ♯m với i = 1, S khơng có phần tử ¬ Cần phải chứng minh i i 88 Hệ thống kiểu tính cận số log cho ngơn ngữ giao dịch đa luồng tối giản sim( +(n1 + n2 ) , S) = ♯m m ≥ m1 + m2 Ta có: sim( +(n1 + n2 ) , S) = seq(jc( +(n1 + n2 ) , seq(S1 S2 ))) = seq( +n2 +n1 S1 S2 ) ¬∈ / S1 S2 = seq( +n2 ( +n1 S1 )S2 ) + Định nghĩa 2.4 ♯ IH = seq( n2 m1 S2 )) = ♯(m1 + m2 ) IH, Định nghĩa 2.4 • For T-JC, theo giả thuyết quy nạp ta có seq( +n1 S1 ) = ♯m1 and seq(jc( +n2 , S2 )) = ♯m2 Tương tự trường hợp trước, ta có: sim( +(n1 + n2 )) , S) = seq(jc( +(n1 + n2 )) , jc(S1 , S2 ))) S = jc(S1 , S2 ) = seq(jc( +(n1 + n2 ) S1 , S2 ))) jc = seq(jc( +n2 ♯m1 , S2 ))) IH ♯ jc, IH = max(n2 + m1 , m2 ) ≥ ♯max(n2 + n1 ) m1 ≥ n1 theo IH • Đối với T-MERGE, theo giả thuyết quy nạp, ta có: seq(jc( +n1 , S1 ) seq(jc( +n2 S2 ) = ♯m2 Tương tự trường hợp trước, ta có: seq(jc( +n , S)) = seq(jc( +n , merge(S1 , S2 ))) + + = seq(jc( n , S1 )) + seq(jc( n , S2 )) = ♯m S = merge(S1 , S2 ) tính chất S1 , S2 ♯ = (m1 + m2 ) IH • Đối với quy tắc lại, bổ đề theo giả thuyết quy nạp Xác định kiểu cho chương trình ví dụ Bây ta thử tạo kiểu dẫn xuất cho chương trình Đoạn mã Kí hiệu elm cho phần chương trình từ dòng l tới dòng m Đầu tiên, sử dụng T-SEQ, T-ONACID, T-COMMIT ta có biểu thức bên spawn dòng có kiểu ♯2 −1 −1 −1 Sau đó, áp dụng quy tắc T-SPAWN, ta có: ⊢ e55 : ( ♯2 ¬ ¬ ¬ )ρ Bây giờ, ta sử dụng T-MERGE cần biểu thức mà kiểu phù hợp với ♯2 ¬ ¬ ¬ Ta tìm e6 thỏa mãn điều kiện kiểu suy diễn sử dụng 10 quy tắc T-SEQ, T-ONACID, T-COMMIT như: ⊢ e610 : −1 ♯3 −1 ♯4 −1 Bằng cách áp dụng T-PREP, ta có kiểu phù hợp với (2.3.2.) Vì vậy, ta áp dụng với có: ⊢ e510 : ( ♯2 ¬ ♯3 ¬ ♯4 ¬ )ρ T-MERGE Bây áp dụng T-JC để có kiểu cho e410 : ⊢ e410 : ♯4 ¬ ♯4 ¬ jc( +1 , ♯2 ¬ ♯3 ¬ ♯4 ¬ ) = seq( ♯4 ♯3 ¬ ♯4 ¬ ) = ♯4 ¬ ♯4 ¬ Bằng cách tương tự, ta tính kiểu cho e310 : ⊢ e310 : ♯5 ¬ ♯4 ¬ 89 Trương Anh Hoàng, Nguyễn Ngọc Khải Áp dụng T-JC với −1 ⊢ e12 : ♯2 ta có: ⊢ e110 : ♯11 Chương trình có kiểu phù hợp số lượng log tối đa tồn suốt q trình chương trình chạy 11 Tính xác hệ thống kiểu Hệ thống kiểu sắc hệ thống kiểu nghiên cứu trước [14] qua ví dụ chương trình onacid; onacid; commit; spawn(commit); commit; Biểu thức dòng 4-5 có kiểu ( ¬ )ρ Dòng 1-3 có kiểu +1 ♯1 Áp dụng quy tắc T-JC ta có jc( +1 ♯1 , ¬ ) = ♯max(1 + 1, + 2) = ♯2 Hệ thống kiểu trước trả lại biên ♯3 , chúng khơng xác biên ♯2 tính hệ thống kiểu báo Đoạn mã 2: Chương trình ví dụ chứng minh tính sắc biên onacid; onacid; commit; spawn(commit); commit 2.4 Tính đắn Để chứng minh tính hệ thống kiểu, ta cần chứng minh chương trình có kiểu hợp lệ khơng có số log (tại thời điểm trình thực chương trình) lớn số thể kiểu Ta gọi chương trình có kiểu hợp lệ e kiểu ♯n Ta cần chứng minh thực thi e theo ngữ nghĩa Phần 2.2., số log mơi trường tồn cục nhỏ n Một trạng thái chương trình cặp Γ, P Γ = p1 : E1 ; ; pk : Ek P = k1 pi (ei ) Ta nói Γ thỏa mãn P , kí hiệu Γ |= P , tồn S1 , , Sk mà |Ei | ⊢ ei : Si với i = 1, , k Với i, Ei miêu tả số log tạo chép luồng pi Si miêu tả số log tạo thực thi ei Vì vậy, luồng pi có hành vi log miêu tả sim( +|Ei | , Si ), hàm sim định nghĩa Định lí 2.1 Ta chứng minh sim( +|Ei | , S) = ♯n với số n Ta kí hiệu giá trị n |Ei , Si | Tổng số log trạng thái chương trình, bao gồm Γ log tạo thực thi phần lại chương trình, kí hiệu |Γ, P |, định nghĩa sau: k |Γ, P | = i=1 |Ei , Si | Bởi |Γ, P | thể số log tối đa từ trạng thái |Γ| số log trạng thái tại, có bổ đề sau Bổ đề 2.1 (Trạng thái) Nếu Γ |= P |Γ, P | ≥ |Γ| Chứng minh Theo định nghĩa |Γ, P | |Γ|, ta cần chứng minh |Ei , Si | ≥ |Ei | với i Điều theo Định lí 2.1 Bổ đề 2.2 (Bất biến cục bộ) Nếu E, e → E ′ , e′ , |E| ⊢ e : S tồn S ′ cho |E ′ | ⊢ e′ : S ′ |E, S| ≥ |E ′ , S ′ | 90 Hệ thống kiểu tính cận số log cho ngơn ngữ giao dịch đa luồng tối giản Chứng minh Việc chứng minh thực cách kiểm tra trực tiếp luật ngữ nghĩa đối tượng Bảng Bổ đề 2.3 (Bất biến toàn cục) Nếu Γ |= P Γ, P ⇒ Γ′ , P ′ Γ′ |= P ′ |Γ, P | ≥ |Γ′ , P ′ | Chứng minh Việc chứng minh thực cách kiểm tra quy tắc tất quy tắc ngữ nghĩa Bảng Với quy tắc, ta cần chứng minh hai phần: (i) Γ′ |= P ′ (ii) |Γ, P | ≥ |Γ′ , P ′ | • Với quy tắc G-SPAWN, từ giả thiết Γ |= P định nghĩa |= ta có |E| ⊢ spawn(e1 ); e2 : S |E, S| = n với số E, S, n Với G-SPAWN, ta cần chứng minh hai phần tử Γ′ |E| ⊢ spawn(e1 ) : S1 |E| ⊢ e2 : S2 cho S1 , S2 , điều suy trực tiếp từ T-MERGE spawn(e1 ) kết hợp với e2 quy tắc kiểu Thêm nữa, ta có S = merge(S1 , S2 ) Theo định nghĩa merge, ta có số ¬ S, S1 S2 tương tự, theo định nghĩa jc, |E| Vì |E, Si | = ni với số ni với i = 1, Vì (i) chứng minh Đối với (ii), trước tiên, theo định nghĩa merge jc ta có n = n1 +n2 Ta cần chứng minh |Γ, P |−|Γ′ , P ′ | ≥ Bởi Γ Γ′ khác luồng E, E1 , E2, ta có |Γ, P |−|Γ′ , P ′ | = |E, S| − |E, S1 | − |E, S2 | = n − n1 − n2 = Vì (ii) chứng minh • Đối với G-TRANS, tương tự trường hợp trước, theo giả thiết ta có |E| ⊢ onacid; e : S |e, S| = n số E, S, n Quy tắc G-TRANS tạo log E ta cần chứng minh |E| + ⊢ e : S ′ cho số S ′ Bởi onacid; e định kiểu T-SEQ T-JC, ta có hai trường hợp cần xem xét - Với quy tắc T-SEQ, (i) suy trực tiếp quy tắc kiểu thành phần −1 ⊢ onacid : +1 Đối với (ii), tương tự trường hợp trước, ta có |Γ, P | − |Γ′ , P ′ | = | +|E| , +1 S ′ | − | +(|E| + 1) , S ′ | = Vì (ii) chứng minh - Với quy tắc T-JC, (i) suy trực tiếp quy tắc kiểu thành phần −1 ⊢ onacid : +1 Đối với (ii) ta có |Γ, P | − |Γ′ , P ′ | = | +|E| , jc( +1 , S ′ )| − | +(|E| + 1) , S ′ | = sim(|E|, jc( +1 , S ′ ) − sim( +(|E| + 1) , S ′ ) = seq(jc(|E|, jc( +1 , S ′ )) − seq(jc( +(|E| + 1) , S ′ )) = seq(jc(|E|, jc( +1 , S ′ )) − seq(jc( +|E| , jc( +1 , S ′ ))) =0 Vì (ii) chứng minh • Đối với quy tắc G-COMM, với giả thuyết Γ |= P ta có Ei ⊢ commit; ei : Si số Ei , Si , i = k′ Vì commit; ei xác định kiểu T-SEQ commit joint commit, (i) suy quy tắc kiểu biểu thức +1 ⊢ commit : −1 ta có Si = ¬ Si′ Si′ kiểu ei Đối với (ii) ta có: |Γ, P | − |Γ′ , P ′ | = k′ ¬ ′ (|Ei , Si | = k′ + ¬ ′ (seq(jc( |Ei | , Si )) − |Ei′ , Si′ |) − seq(jc( +|Ei′ | , Si′ ))2cm định nghĩa |E, S| 91 Trương Anh Hoàng, Nguyễn Ngọc Khải k′ = (seq(jc( +|Ei | , ¬ Si′ )) − seq(jc( +(|Ei | − 1) , Si′ )) |Ei′ | = |Ei | − k′ = (seq(jc( +(|Ei | − 1) , ♯1 Si′ )) − seq(jc( +(|Ei | − 1) , Si′ )) định nghĩa jc ≥0 Vì (ii) chứng minh • Các quy tắc lại chứng minh tương tự Tiếp theo xem xét tính đắn hệ thống kiểu đề xuất Định lý 2.2 (Tính đắn) Giả sử ⊢ e : ♯n p1 : ǫ, p1 (e) ⇒∗ Γ, P Thì |Γ| < n Chứng minh Với mơi trường ban đầu ta có |p1 : ǫ, p1 (e)| = sim(0, ♯n ) = ♯n Vì từ Bổ đề 2.2, 2.3 Định lí 2.1, định lí chứng minh quy nạp theo độ dài dẫn xuất Định lí cuối khẳng định chương trình có kiểu hợp lệ, chương trình thực khơng tạo số log tồn lớn giá trị thể kiểu chương trình Kết luận Chúng tơi trình bày hệ thống kiểu cho ngơn ngữ lập trình lập trình tối giản, có lệnh liên quan đến nhớ giao dịch tạo luồng Hệ thống kiểu có số ưu điểm so với hệ thống kiểu trước [10, 14] điểm vừa đơn giản lại vừa tính xác số lượng log tối đa tồn trình thực thi chương trình Hệ thống kiểu cho ngôn ngữ lõi tảng để áp dụng vào ngơn ngữ lập trình thực tế Đây hướng nghiên cứu để áp dụng cho ngôn ngữ lập trình thực tế Lời cảm ơn Nghiên cứu tài trợ Quỹ Phát triển khoa học công nghệ Quốc gia (NAFOSTED) đề tài mã số 102.03-2014.23 TÀI LIỆU THAM KHẢO [1] [2] [3] [4] [5] 92 Elvira Albert, Samir Genaim, and Miguel Gomez-Zamalloa, 2007 Heap space analysis for Java bytecode In ISMM ’07, New York, NY, USA ACM David Aspinall, Robert Atkey, Kenneth MacKenzie, and Donald Sannella, 2010 Symbolic and analytic techniques for resource analysis of Java bytecode In TGC’10, number 6084 in LNCS Springer-Verlag Marc Bezem, Dag Hovland, and Hoang Truong, 2012 A type system for counting instances of software components Theor Comput Sci., 458:29-48 Victor Braberman, Diego Garbervetsky, and Sergio Yovine, 2006 A static analysis for synthesizing parametric specifications of dynamic memory consumption Journal of Object Technology, 5(5) Wei-Ngan Chin, Huu Hai Nguyen, Shengchao Qin, and Martin C Rinard, 2005 Memory usage verification for OO programs In Proceedings of SAS ’05, Volume 3672 of LNCS Springer-Verlag Hệ thống kiểu tính cận số log cho ngôn ngữ giao dịch đa luồng tối giản [6] [7] [8] [9] [10] [11] [12] [13] [14] Martin Hofmann and Steffen Jost, 2003 Static prediction of heap space usage for first-order functional programs In Proceedings of POPL ’03 ACM Martin Hofmann and Steffen Jost, 2006 Type-based amortised heap-space analysis (for an object-oriented language) In Peter Sestoft, editor, Proceedings of ESOP 2006, volume 3924 of LNCS Springer-Verlag John Hughes and Lars Pareto, 1999 Recursion and dynamic data-structures in bounded space: Towards embedded ML programming SIGPLAN Notices, 34(9) Suresh Jagannathan, Jan Vitek, Adam Welc, and Antony Hosking, 2005 A transactional object calculus Sci Comput Program., 57(2):164-186 Thi Mai Thuong Tran, Martin Steffen, and Hoang Truong, 2013 Compositional static analysis for implicit join synchronization in a transactional setting In Software Engineering and Formal Methods, Volume 8137 of LNCS, pages 212-228 Springer Berlin Heidelberg Tuan-Hung Pham, Anh-Hoang Truong, Ninh-Thuan Truong, and Wei-Ngan Chin, 2008 A fast algorithm to compute heap memory bounds of Java Card applets In SEFM’08 Nir Shavit and Dan Touitou, 1995 Software transactional memory In Symposium on Principles of Distributed Computing, pages 204 - 213 Mads Tofte and Jean-Pierre Talpin, 1997 Region-based memory management Information and Computation, 132(2) Xuan-Tung Vu, Thi Mai Thuong Tran, Anh-Hoang Truong, and Martin Steffen, 2012 A type system for finding upper resource bounds of multi-threaded programs with nested transactions In Symposium on Information and Communication Technology 2012, SoICT ’12, Halong City, Quang Ninh, Viet Nam, August 23-24, 2012, pages 21-30 ABSTRACT A type system for counting logs of a minimal language with multithreaded and nested transactions We present a type system to estimate an upper bound for resource consumption of a multi-threaded, nested transactional memory program The resource is abstracted as transaction logs We build our type system for a core language with basic commands related to creating threads and transaction Using the core language not only makes proving the soundness easier, it also allows us to extend the language with more features easier Keywords: Type systems, resource bound, software transactional memory, static analysis, programming language 93 ... nhớ giao dịch tạo luồng Hệ thống kiểu có số ưu điểm so với hệ thống kiểu trước [10, 14] điểm vừa đơn giản lại vừa tính xác số lượng log tối đa tồn trình thực thi chương trình Hệ thống kiểu cho ngôn. . .Hệ thống kiểu tính cận số log cho ngơn ngữ giao dịch đa luồng tối giản biến giao dịch hồn tất Ngược lại có mâu thuẫn việc cập nhật biến luồng tham gia vào trình đồng kết thúc giao dịch thử... cho biểu 86 Hệ thống kiểu tính cận số log cho ngôn ngữ giao dịch đa luồng tối giản thức spawn phần luồng Các chuỗi đồng hợp với theo định nghĩa sau Định nghĩa 2.6 (Hợp) S1 S2 chuỗi đồng với số

Ngày đăng: 11/01/2020, 19:46

Từ khóa liên quan

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

  • Đang cập nhật ...

Tài liệu liên quan