Luận án được bố cục bao gồm 6 chương: Chương 1 giới thiệu tổng quan về bài toán đặt ra, những đóng góp chính của luận án; Chương 2 trình bày những kiến thức cơ bản, nền tảng, và những nghiên cứu liên quan; Chương 3 xây dựng ngôn ngữ giao dịch tối giản và hệ thống kiểu để ước lượng biên tài nguyên tiêu thụ của chương trình; Chương 4 mở rộng ngôn ngữ của chương 3 với việc bổ sung các lệnh cơ bản đối với ngôn ngữ lập trình hướng cấu trúc;...
ĐẠI HỌC QUỐC GIA HÀ NỘI TRƯỜNG ĐẠI HỌC CÔNG NGHỆ −−−−−−−−−−−−− NGUYỄN NGỌC KHẢI HỆ THỐNG KIỂU ĐỂ ƯỚC LƯỢNG TĨNH TÀI NGUYÊN SỬ DỤNG CỦA CHƯƠNG TRÌNH GIAO DỊCH TĨM TẮT LUẬN ÁN TIẾN SĨ NGÀNH CƠNG NGHỆ THƠNG TIN Hà Nội - 2021 Cơng trình hồn thành tại: Trường Đại học Công Nghệ, Đại học Quốc gia Hà Nội Người hướng dẫn khoa học: PGS TS Trương Anh Hoàng Phản biện: TS Nguyễn Hữu Đức Phản biện: TS Đỗ Thị Bích Ngọc Luận án bảo vệ trước Hội đồng cấp Đại học Quốc gia chấm luận án tiến sĩ phòng 212, nhà E3, Trường Đại học Công nghệ, Đại học Quốc gia Hà Nội vào hồi ngày tháng năm 2021 Có thể tìm hiểu luận án tại: - Thư viện Quốc gia Việt Nam - Trung tâm Thông tin - Thư viện, Đại học Quốc gia Hà Nội ĐẠI HỌC QUỐC GIA HÀ NỘI TRƯỜNG ĐẠI HỌC CÔNG NGHỆ −−−−−−−−−−−−− NGUYỄN NGỌC KHẢI HỆ THỐNG KIỂU ĐỂ ƯỚC LƯỢNG TĨNH TÀI NGUYÊN SỬ DỤNG CỦA CHƯƠNG TRÌNH GIAO DỊCH Chuyên ngành: Kỹ thuật phần mềm Mã số: 9480103.01 TĨM TẮT LUẬN ÁN TIẾN SĨ NGÀNH 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 - 2021 Mục lục Giới thiệu 1.1 Đặt vấn đề 1.2 Những đóng góp chính, ý nghĩa khoa học thực tiễn 1.3 Bố cục luận án 1 Kiến thức tảng nghiên cứu liên quan 2.1 Cơ chế nhớ giao dịch phần mềm 2.1.1 Đặc điểm chương trình STM 2.2 Hệ thống kiểu 2.2.1 Khái niệm hệ thống kiểu 4 5 2.2.2 Ứng dụng hệ thống kiểu Nghiên cứu liên quan Tổng kết chương 7 2.3 2.4 Ước lượng biên tài ngun chương trình ngơn 3.1 Xác định số giao dịch tối đa 3.1.1 Ngôn ngữ giao dịch tối giản 3.1.1.1 Cú pháp 3.1.1.2 Ngữ nghĩa 3.1.2 Hệ thống kiểu tính số giao dịch tối đa 3.1.2.1 Kiểu 3.1.2.2 Quy tắc kiểu 3.1.2.3 Tính hệ thống kiểu 3.2 Xác định biên tài nguyên tiêu thụ chương trình 3.3 Tổng kết chương ngữ tối giản 8 9 11 11 11 12 13 13 chung 14 14 14 15 16 16 17 tượng 18 18 19 19 19 21 21 21 Kết luận 6.1 Những kết đạt 6.2 Những hạn chế hướng nghiên cứu 22 22 23 Tính nhớ tối đa cho chương trình ngơn ngữ mệnh lệnh 4.1 Giới thiệu 4.2 Ngôn ngữ giao dịch với cấu trúc mệnh lệnh 4.3 Hệ thống kiểu tìm biên nhớ cho biến dùng chung 4.3.1 Suy diễn kiểu 4.4 Hệ thống kiểu tích hợp xác định biên nhớ cấp phát cho biến dùng 4.5 Tổng kết chương Xác định nhớ giao dịch tối đa cho chương trình ngơn ngữ hướng đối 5.1 Giới thiệu 5.2 Ngôn ngữ giao dịch với cấu trúc hướng đối tượng 5.2.1 Cú pháp 5.2.2 Ngữ nghĩa 5.3 Hệ thống kiểu tích hợp tìm biên nhớ giao dịch 5.3.1 Quy tắc kiểu 5.4 Tổng kết chương i Chương Giới thiệu 1.1 Đặt vấn đề Ngày nay, thiết bị trang bị vi xử lý đa lõi trở nên phổ biến, việc phát triển phần mềm tương tranh để khai thác hiệu hệ thống phần cứng phát triển Tuy nhiên, việc phát triển phần mềm tương tranh đòi hỏi nhiều kỹ thuật phức tạp so với phát triển phần mềm hoạt động theo chế tuần tự, việc đồng luồng kỹ thuật quan trọng Thơng thường người lập trình thường sử dụng chế dựa khóa (lock based) để đồng luồng Tuy nhiên, chế đồng dựa khóa gây nhiều lỗi nghiêm trọng lỗi khóa sống (livelock), lỗi khóa chết (deadlock), lỗi tiềm ẩn khác khóa Ngồi ra, người lập trình cịn phải quan tâm tới việc quản lý khóa Điều gây nhiều khó khăn, phức tạp cho người lập trình Để giúp người lập trình viết chương trình đơn giản hơn, nhà nghiên cứu đưa giải pháp thay cho chế dựa khóa, chế nhớ giao dịch phần mềm (Software Transactional Memory - STM) giải pháp nhiều hứa hẹn Gần đây, chế trang bị cho số ngơn ngữ lập trình tương tranh đại ngôn ngữ Scala, Haskell, Java, C♯, Điểm bật ngôn ngữ trang bị tính giao dịch đa luồng lồng Đây tính tiên tiến, tạo nhiều thuận lợi cho người lập trình Giao dịch đa luồng có nghĩa giao dịch khởi tạo nhiều luồng Giao dịch lồng đặc biệt chỗ giao dịch chứa nhiều giao dịch luồng con, luồng phải đồng với giao dịch luồng cha kết thúc giao dịch Khi giao dịch commit, luồng giao dịch phải commit Để luồng chạy độc lập, chờ đợi nhau, luồng/giao dịch đọc ghi nhớ dùng chung, gọi log Sau hoàn thành giao dịch, chúng đồng log giá trị gốc Nếu khơng có xung đột, giao dịch hoàn thành, ngược lại giao dịch phải thực lại (rollback), bị hủy bỏ (abort) Các log yếu tố làm cho chương trình STM tiêu thụ nhiều tài nguyên nhớ chương trình truyền thống khác Điều dẫn đến lỗi thiếu tài nguyên nhớ dành cho chương trình Mục đích nghiên cứu chúng tơi đưa phương pháp để giúp người lập trình ước lượng tĩnh tài nguyên tối đa cần sử dụng chương trình giao dịch đa luồng sử dụng chế STM Từ đó, người lập trình tối ưu chương trình để sử dụng tài nguyên hiệu hơn, nhằm tiết kiệm tài nguyên, hạn chế lỗi thiếu tài nguyên thực thi chương trình Một ứng dụng khác dựa số lượng log tạo đồng thời suy đốn mức độ hiệu chương trình Nếu nhiều logs tạo đồng thời khả xung đột cao nhiều luồng giao dịch phải chạy lại bị hủy bỏ Do phức tạp tốn đặt nên chúng tơi chia tốn thành nhiều bước để giải Đầu tiên, giải toán xác định số lượng log lớn tồn thời điểm Từ có thơng tin sơ nhớ log sử dụng Làm mịn thêm kích thước log dựa thông tin số lượng kiểu biến đối tượng log, có thơng tin cụ thể nhớ sử dụng chương trình Với nhiều ưu điểm vượt trội phân tích trên, chế STM lựa chọn tốt cho người lập trình Tuy nhiên, chế nhớ giao dịch có hạn chế, việc tiêu thụ nhiều tài nguyên, nguy phải thực lại hủy bỏ giao dịch cao làm giảm hiệu suất chương trình Vì khơng kiểm sốt tốt số log chương trình tạo tài nguyên chúng sử dụng người lập trình khơng sẵn sàng để sử dụng chúng 1.2 Những đóng góp chính, ý nghĩa khoa học thực tiễn Những đóng góp luận án bao gồm hai hệ thống kiểu với mục đích ước lượng tĩnh biên tài nguyên cần sử dụng chương trình STM: - Hệ thống kiểu thứ xây dựng với quy tắc đơn giản hơn, thuận lợi để mở rộng cài đặt Hệ thống kiểu u cầu chương trình hồn thiện (nghĩa chương trình viết xong hợp lệ) định kiểu Chúng phù hợp để định kiểu cho chương trình nhỏ, viết số người - Hệ thống kiểu thứ hai có khả định kiểu linh hoạt Chúng định kiểu cho thành phần chương trình mà khơng cần phải chương trình hồn chỉnh, sau tích hợp lại để kiểu tồn chương trình Tính chất gọi tính tích hợp, đặc điểm thường thấy hệ thống kiểu Hệ thống kiểu phù hợp để định kiểu cho chương trình lớn, viết nhiều người Ngồi đóng góp trên, luận án đưa số cải tiến cho chế STM để sử dụng nhớ giao dịch hiệu Đồng thời, luận án đưa thuật toán suy diễn kiểu để định kiểu cho chương trình Thuật tốn cài đặt phương pháp lập trình hàm với ngơn ngữ lập trình F♯ Ý nghĩa luận án khơng việc giải toán ước lượng tài nguyên nhớ chương trình, mà luận án cịn có ý nghĩa việc góp phần phát triển lĩnh vực nghiên cứu lý thuyết kiểu phương pháp hình thức công nghệ phần mềm Cụ thể, luận án đóng góp cho cộng đồng nghiên cứu quy tắc kiểu với mục đích để giúp người lập trình kiểm sốt tài ngun chương trình cần sử dụng Bộ quy tắc tảng để mở rộng, phát triển cho mục đích khác chẳng hạn xác định tài nguyên CPU, độ phức tạp thời gian, số gas tiêu thụ hợp đồng thông minh Ethereum Ngồi ra, luận án góp phần thay đổi tư người lập trình việc tối ưu thuật toán để sử dụng tiết kiệm tài nguyên trình lập trình Những nghiên cứu chủ yếu giải cho chương trình song song luồng hoạt động độc lập Chúng trường hợp cụ thể toán chúng tơi Những nghiên cứu cho chương trình đa luồng sử dụng chế STM chủ yếu thực theo phương pháp động, nghĩa thực thi chương trình ngôn ngữ cụ thể để thực việc so sánh, đánh giá Những phương pháp cho kết gần yêu cầu phải có chương trình hồn thiện để thực thử nghiệm Hệ thống kiểu chúng tơi xây dựng phát triển có cấu trúc giàu thơng tin áp dụng cho nhiều chương trình tương tranh có cách thức đồng tương tự Giải pháp sử dụng hệ thống kiểu giúp việc xác định tài ngun đảm bảo tính mà khơng cần chạy chương trình Tính thời cần thiết nghiên cứu thấy rõ ngữ cảnh phát triển phần mềm thiết bị đa nhân ngày Ngày có nhiều thiết bị sử dụng xử lý đa nhân Việc viết chương trình đa luồng để khai thác thiết bị thực tế đặt Cơ chế STM chế mạnh, giúp người lập trình viết chương trình giao dịch đa luồng đơn giản Tuy nhiên, trình bày trên, với chế người lập trình n tâm kiểm sốt tài ngun sử dụng số log tối đa tạo chương trình Đặc biệt, điều quan trọng lập trình nhúng, lập trình cho thiết bị IOT, mà tài nguyên nhớ hạn chế, tiêu tốn tài nguyên liên quan trực tiếp đến tuổi thọ pin Vì vậy, kết luận án giải pháp giúp chế nhớ giao dịch trở nên thực tế hiệu 1.3 Bố cục luận án Luận án bố cục bao gồm chương: Chương giới thiệu tổng quan tốn đặt ra, đóng góp luận án; Chương trình bày kiến thức bản, tảng, nghiên cứu liên quan; Chương xây dựng ngôn ngữ giao dịch tối giản hệ thống kiểu để ước lượng biên tài nguyên tiêu thụ chương trình; Chương mở rộng ngôn ngữ chương với việc bổ sung lệnh ngơn ngữ lập trình hướng cấu trúc Từ đó, chúng tơi xây dựng hệ thống kiểu để xác định biên nhớ cấp phát cho biến dùng chung Dựa quy tắc kiểu này, cài đặt công cụ để suy kiểu chương trình Tiếp theo, cải tiến hệ thống kiểu để hệ thống kiểu có khả định kiểu linh hoạt (gọi hệ thống kiểu tích hợp); Chương tiếp tục mở rộng ngôn ngữ xây dựng chương với cấu trúc hướng đối tượng, đồng thời cải tiến chế STM để chương trình sử dụng nhớ hiệu Tài nguyên tiêu thụ chương xác định nhớ cấp phát cho đối tượng giao dịch Cùng với đó, chúng tơi xây dựng hệ thống kiểu để xác định biên nhớ giao dịch cho chương trình; Chương luận án tổng kết lại vấn đề luận án giải được, vấn đề tồn cần tiếp tục nghiên cứu để áp dụng kết vào thực tế cách thuận tiện Chương Kiến thức tảng nghiên cứu liên quan Trong chương này, luận án trình bày khái niệm, nguyên tắc lập trình tương tranh, chế STM hệ thống kiểu Đây khối kiến thức liên quan trực tiếp đến toán đặt luận án giải pháp để giải chúng Phần cuối chương, luận án trình bày hướng nghiên cứu liên quan tới toán hướng tiếp cận để giải toán luận án 2.1 Cơ chế nhớ giao dịch phần mềm Để đồng luồng, người lập trình thường sử dụng chế đồng dựa khóa Tuy nhiên, chế tiềm ẩn lỗi nghiêm trọng khóa lỗi khóa sống, lỗi khóa chết, người lập trình phải quan tâm xử lý khóa Để giải vấn đề khóa giúp người lập trình viết chương trình đơn giản hơn, số giải pháp thay cho chế đề xuất, chế STM giải pháp nhiều hứa hẹn Trong khoa học máy tính, STM chế điều khiển tương tranh tương tự giao dịch sở liệu để kiểm soát quyền truy cập vào nhớ dùng chung tính tốn diễn cách đồng thời Chúng giải pháp thay cho chế đồng dựa khóa Từ năm 2005, STM trở thành trọng tâm nghiên cứu mạnh mẽ hỗ trợ cho việc triển khai thực tế ngày tăng Chúng triển khai nhiều ngơn ngữ lập trình thực tế đại Haskell, Java, C♯ , Scala, 2.1.1 Đặc điểm chương trình STM Một chương trình STM cấu tạo luồng hoạt động song song không độc lập Từ luồng (luồng cha) chúng sinh luồng khác (luồng con) Trong luồng có giao dịch, giao dịch sinh luồng Mỗi giao dịch có vùng nhớ cục riêng biệt cho luồng, gọi log, để lưu trữ đối tượng dùng chung (shared objects) để luồng truy cập độc lập đối tượng dùng chung q 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 đối tượng giao dịch hồn tất Ngược lại có mâu thuẫn việc cập nhật đối tượng luồng tham gia vào trình đồng kết thúc giao dịch thực lại (rollback) hủy bỏ (abort) 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 Đối với số ngơn ngữ lập trình thực tế, người lập trình khơng phải quan tâm việc đồng luồng, giao dịch mà trình biên dịch tự động thực thi công việc Đặc điểm gọi đồng ngầm Chúng tạo thuận tiện cho người lập trình, nhiên phân tích chương trình, cần phải phân tích mức ngữ nghĩa ngơn ngữ thay mức mã nguồn ngơn ngữ Những đặc điểm làm cho chương trình STM trở nên đơn giản, rõ ràng hơn, thuận lợi cho người lập trình cơng tác bảo trì sau Người lập trình tạo chương trình với giao dịch luồng đan xen lồng cách linh hoạt, đáp ứng nhu cầu tốn thực tế Tuy nhiên, có giao dịch lồng phức tạp, luồng chạy song song không độc lập, nút đồng ngầm ta khơng nhìn thấy phân tích mức mã nguồn, tạo nên khó khăn thách thức ta xây dựng hệ thống kiểu để tổng qt chương trình cách xác Mặc dù chế STM có nhiều ưu điểm, nhiên chúng tiêu tốn nhiều tài nguyên nhớ chương trình truyền thống nên người lập trình yên tâm kiểm sốt tài ngun chương trình cần sử dụng 2.2 Hệ thống kiểu Trong lĩnh vực phương pháp hình thức, hệ thống kiểu quan tâm nghiên cứu từ lâu nhiều nhà khoa học Sau chúng tơi trình bày số khái niệm đặc điểm, ứng dụng phổ biến hệ thống kiểu 2.2.1 Khái niệm hệ thống kiểu Hiện nay, nhiều tác giả đưa khái niệm hệ thống kiểu góc độ khác nhau, số khái niệm cơng nhận rộng rãi: - Hệ thống kiểu phương pháp kiểm sốt cú pháp chương trình thấy vắng mặt hành vi chương trình cách phân loại thành phần theo kiểu cho giá trị tính tốn - Hệ thống kiểu phương pháp thức ngăn chặn lỗi trình thực thi chương trình - Hệ thống kiểu tập thích kiểu chế kiểm tra trợ giúp cho người lập trình; với người viết trình dịch, hệ thống kiểu nguồn thơng tin sử dụng để tối ưu mã máy sinh ra; theo lý thuyết ngôn ngữ, hệ thống kiểu quy tắc để quy định cấu trúc lập luận ngôn ngữ Như vậy, ta khái quát hệ thống kiểu 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 2.2.2 Ứng dụng hệ thống kiểu Hệ thống kiểu có vai trị quan trọng phát triển phần mềm, có hai hướng ứng dụng hệ thống kiểu: - Thứ nhất, sử dụng cơng cụ phân tích hình thức cho ngơn ngữ lập trình Hệ thống kiểu cung cấp mơ hình tốn học hình thức để mơ tả phân tích ngữ nghĩa ngơn ngữ; - Thứ hai, sử dụng phương pháp hình thức để phát triển ngơn ngữ cách chặt chẽ xác Hệ thống kiểu định nghĩa hợp lệ định nghĩa cụ thể chặt chẽ ngơn ngữ Nó điều kiện tiên để sử dụng triển khai ngôn ngữ Ngày nay, hệ thống kiểu thành phần cốt lõi nhiều ngôn ngữ Đặc trưng ngơn ngữ thiết kế hệ thống kiểu địi hỏi biến chương trình phải có miền giá trị cụ thể mà tham chiếu Mỗi khai báo hàm phải thao tác đối số cụ thể trả giá trị kiểu cụ thể Thơng tin khai báo rõ ràng cách sử dụng thích kiểu suy kiểm tra kiểu Khi chương trình biên dịch, kiểm tra kiểu đảm bảo biến gán kiểu giá trị hàm gọi với tham số kiểu Các ngôn ngữ hạn chế phạm vi biến gọi ngôn ngữ kiểu, ngược lại gọi ngôn ngữ phi kiểu Một hệ thống kiểu thành phần ngôn ngữ kiểu, có vai trị theo dõi kiểu biến kiểu tất biểu thức chương trình Trong ngơn ngữ mà có hệ thống kiểu giữ cho tất chương trình chạy ngơn ngữ lập trình cụ thể ta gọi ngơn ngữ có kiểu tốt Nó rằng, phân tích cẩn thận cần thiết để tránh tuyên bố sai cho ngôn ngữ lập trình Một hệ thống kiểu sử dụng để xác định liệu chương trình có coi có hành vi (well-behaved) không? Khi phát triển cách đúng, hệ thống kiểu cung cấp công cụ để đánh giá cách đầy đủ khía cạnh quan trọng định nghĩa ngôn ngữ Mô tả ngôn ngữ thường không xác định cấu trúc ngôn ngữ đầy đủ chi tiết phép thực thi rõ ràng Thường xảy với trình biên dịch khác cho ngôn ngữ cài đặt hệ thống kiểu khác Nhiều định nghĩa ngơn ngữ tìm thấy kiểu khơng đúng, theo chương trình sụp đổ đánh giá chấp nhận kiểm tra kiểu Lý tưởng hệ thống kiểu thức nên phần định nghĩa tất ngơn ngữ lập trình định kiểu Bằng cách thuật tốn kiểm tra kiểu đo đạc cách rõ ràng dựa vào thông số kỹ thuật xác tất khả thi, ngơn ngữ thể kiểu Trong ngơn ngữ lập trình, hệ thống kiểu tập hợp quy tắc gán cho thuộc tính gọi kiểu để xây dựng chương trình máy tính bao gồm biến, biểu thức, hàm mơ đun Mục đích hệ thống kiểu để 3.1.2 Hệ thống kiểu tính số giao dịch tối đa Trong hệ thống kiểu này, đề xuất kiểu thành phần dãy số gắn dấu Các dãy số trừu tượng hành vi giao dịch thành phần định kiểu 3.1.2.1 Kiểu Để mô tả hành vi giao dịch thành phần, sử dụng tập ký hiệu {+, −, ¬, ♯} Ký hiệu + − mô tả cho bắt đầu kết thúc giao dịch Ký hiệu ¬ mơ tả điểm đồng kết thúc giao dịch luồng song song ♯ mô 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 đưa quy tắc để mô tả thành phần (biểu thức) chương trình STM tối giản 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 lệnh onacid (commit) Kiểu ¬ n đoạn chương trình hiểu đoạn chương trình có n luồng cần phải đồng với onacid để hoàn tất giao dịch Ký hiệu ♯n hiểu thành phần tạo tối đa n log 3.1.2.2 Quy tắc kiểu Cú pháp ngôn ngữ kiểu T định nghĩa sau: T = S ∣ Sρ Ký hiệu 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 ρ 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 mô tả Bảng 3.4 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 quy 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 Quy tắc T-JC để thực kết hợp kiểu luồng cha luồng Các quy tắc cịn lại tự nhiên theo ngữ nghĩa chương trình Định lý 3.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: Việc chứng minh thực phương pháp quy nạp dựa quy tắc xác định kiểu mô tả Bảng 3.4 ∎ 11 Bảng 3.4: Quy tắc định kiểu cho chương trình STM tối giản n⊢e∶S T-ONACID T-COMMIT T-SPAWN −1 ⊢ onacid ∶ +1 ⊢ commit ∶ −1 n ⊢ spawn(e) ∶ join(S)ρ ρ n1 ⊢ e1 ∶ S1 n2 ⊢ e2 ∶ S2 S = jc(S1 , S2 ) n1 ⊢ e1 ∶ S1 n2 ⊢ e2 ∶ S2 S = seq(S1 S2 ) T-SEQ T-JC n1 + n2 ⊢ e1 ; e2 ∶ S n1 + n2 ⊢ e1 ; e2 ∶ S ρ ρ n ⊢ e1 ∶ S1 n ⊢ e2 ∶ S2 S = merge(S1 , S2 ) n⊢e∶S T-PREP T-MERGE n ⊢ e1 ; e2 ∶ S ρ n ⊢ e ∶ join(S)ρ kind(Ti ) n ⊢ ei ∶ Ti i = 1, kind(T1 ) = kind(T2 ) Ti = Si n ⊢ e1 + e2 ∶ alt(S1 , S2 )kind(S1 ) 3.1.2.3 T-COND Tính hệ thống kiểu Để 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 3.1.1.2, số log mơi trường tồn cục ln 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 mô tả số log tạo chép luồng pi Si mô tả số log tạo thực thi ei Vì vậy, luồng pi có hành vi log mô tả sim( +∣Ei ∣ , Si ), hàm sim định nghĩa Định lý 3.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 cịn lại chương trình, ký hiệu ∣Γ, P ∣, định nghĩa sau: k ∣Γ, P ∣ = ∑ ∣Ei , Si ∣ i=1 Bổ đề 3.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ý 3.1 ∎ Bổ đề 3.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 ′ ∣ 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 3.2 ∎ Bổ đề 3.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 3.3 Với quy tắc, ta cần chứng minh hai phần: (i) Γ′ ⊧ P ′ (ii) ∣Γ, P ∣ ≥ ∣Γ′ , P ′ ∣ ∎ 12 Định lý 3.2 (Tính đúng) Giả sử ⊢ e ∶ ♯n p1 ∶ , p1 (e) ⇒∗ Γ, P ∣Γ∣ < n Chứng minh: Với mơi trường ban đầu ta có ∣p1 ∶ , p1 (e)∣ = sim(0, ♯n ) = ♯n Từ Bổ đề 3.2, 3.3 Định lý 3.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 3.2 Xác định biên tài nguyên tiêu thụ chương trình Với ngôn ngữ giao dịch tối giản phần 3.1 xây dựng hệ thống kiểu để xác định số giao dịch tối đa chương trình Điều khơng nhằm mục đích xác định số giao dịch tối đa, mà chúng giúp đưa quy tắc kiểu đơn giản, thuận lợi để chứng minh, kiểm sốt tính quy tắc, làm tảng cho nghiên cứu Tuy nhiên, với ngơn ngữ trên, chưa có thông tin để xác định tài nguyên tiêu thụ chương trình mà dừng lại việc xác định số giao dịch tối đa chương trình Vì vậy, phần cải tiến ngôn ngữ 3.1.1 việc bổ sung giao dịch tham số thể lượng tài nguyên mà giao dịch cần sử dụng Từ đó, chúng tơi xây dựng hệ thống kiểu để xác định biên tài nguyên mà chương trình cần sử dụng dựa tham số giao dịch Các tham số giao dịch người dùng đưa vào mà chúng tổng hợp từ câu lệnh, khai báo giao dịch Điều giúp giải toán cách tổng quát Tài nguyên tham số, chưa phải loại tài nguyên cụ thể, tùy trường hợp thực tế mà xác định loại tài nguyên cụ thể cần tính (có thể nhớ cấp phát cho biến, đối tượng dùng chung, nhớ cho tập liệu, ) Ngôn ngữ hệ thống kiểu phần có số quy tắc công thức thay đổi để đạt mục đích xác định biên tài nguyên chương trình dựa tham số giao dịch Về mặt ý nghĩa, mục đích chúng tương tự với ngơn ngữ hệ thống kiểu trình bày trên, chúng tơi khơng mơ tả chi tiết 3.3 Tổng kết chương Trong chương này, xây dựng ngôn ngữ giao dịch với lệnh cốt lõi liên quan tới việc tiêu thụ tài nguyên chương trình hoạt động theo chế STM Cùng với đó, chúng tơi xây dựng hệ thống kiểu để tìm số giao dịch tài nguyên tiêu thụ tối đa chương trình giao dịch hợp lệ Hệ thống kiểu chúng tơi chứng minh để đảm bảo tính Kết nghiên cứu công bố tạp chí Khoa học, Đại học Sư Phạm Hà Nội (Cơng trình khoa học số (1)), Hội thảo quốc tế Theoretical Aspects of Computing (ICTAC) (Cơng trình khoa học số (2)) 13 Chương Tính nhớ tối đa cho chương trình ngơn ngữ mệnh lệnh Trong chương đưa ngôn ngữ giao dịch mở rộng từ ngôn ngữ chương với việc bổ sung câu lệnh khai báo, khởi tạo biến dùng chung, câu lệnh điều kiện, câu lệnh vòng lặp, phép tốn Tiếp theo chúng tơi cải tiến hệ thống kiểu chương để hệ thống kiểu với mục đích xác định biên tài nguyên nhớ cấp phát cho biến dùng chung (các biến bị nhân chế STM) Sau đó, chúng tơi cải tiến hệ thống kiểu để hệ thống kiểu có tính tích hợp Đây tính thường thấy hệ thống kiểu Cuối cùng, chúng tơi cài đặt thuật tốn suy diễn kiểu để định kiểu cho thành phần chương trình 4.1 Giới thiệu Trong chương 3, chúng tơi trình bày ngơn ngữ giao dịch tối giản hệ thống kiểu để tính tài nguyên tối đa cần sử dụng chương trình Tài nguyên tính tốn dựa tham số tài nguyên mà giao dịch cần sử dụng Kết chương hệ thống kiểu với quy tắc kiểu đơn giản thuận lợi để đảm bảo tính Đây kết quan trọng, làm tảng cho nghiên cứu Để áp dụng hệ thống kiểu người dùng cần tính tốn thủ cơng tài ngun tiêu thụ giao dịch Như vậy, công việc xác định tài nguyên tiêu thụ chương trình bán tự động Vì vậy, kết mang tính phương pháp chủ yếu Để giải toán cách hoàn toàn tự động sát với thực tế hơn, chương cải tiến ngôn ngữ việc bổ sung câu lệnh khai báo, khởi tạo biến, câu lệnh điều kiện, câu lệnh lặp, phép toán số học, phép toán logic Cùng với đó, chúng tơi cải tiến hệ thống kiểu để xác định biên tài nguyên tiêu thụ chương trình Trong ngơn ngữ này, biến dùng chung luồng biến bị nhân luồng sinh Vì vậy, tài nguyên nghiên cứu cụ thể hóa nhớ cấp phát cho biến dùng chung luồng 4.2 Ngôn ngữ giao dịch với cấu trúc mệnh lệnh Cú pháp ngôn ngữ mô tả Bảng 4.1 Ngữ nghĩa ngôn ngữ mô tả Bảng 4.2 Cú pháp ngữ nghĩa giao dịch ngôn ngữ tương tự với ngôn ngữ trình bày Chương 3, nhiên chúng làm mịn Cú pháp 14 ngữ nghĩa câu lệnh khác tương tự ngôn ngữ mệnh lệnh thông thường Bảng 4.1: Cú pháp ngôn ngữ giao dịch cấu trúc mệnh lệnh 10 11 12 13 14 P T D O vi vb v ei eb e ∶∶= ∶∶= ∶∶= ∶∶= ∶∶= ∶∶= ∶∶= ∶∶= ∶∶= ∶∶= φ ∣ P ∥ P ∣ p(e) int ∣ bool ⃗ ∶= v⃗ ∣ T x ⃗ ∶= v⃗ shared T x ●∣ ∣◆∣▴ n true ∣ false vi ∣ v b ei ● ei ∣ vi ei ei ∣ eb ◆ eb ∣ ▴ eb ∣ vb D ∣ e; e ∣ x ∶= ei ∣ x ∶= eb ∣ if(eb ) then{ e } else{ e } ∣ while(eb ){ e } ∣ spawn{ e } ∣ onacid ∣ commit luồng/tiến trình kiểu khởi tạo biến phép toán giá trị số nguyên giá trị logic giá trị biểu thức số nguyên phép toán logic biểu thức điều kiện lặp tạo luồng mở/đóng giao dịch Bảng 4.2: Ngữ nghĩa ngôn ngữ giao dịch cấu trúc mệnh lệnh p′ fresh spawn(p, p′ , Γ) = Γ′ S-SPAWN Γ, P ∥ p(spawn(e1 ); e2 ) ⇒ Γ′ , P ∥ p(e2 ) ∥ p′ (e1 ) l f resh start(l∶n, p, Γ) = Γ′ S-TRANS Γ, P ∥ p(onacid(e1 ); e2 ) ⇒ Γ′ , P ∥ p(e2 ) intranse(Γ, l ∶ n) = p = {p1 , , pk } commit(p, Γ) = Γ′ S-COMM Γ, P ∥ ∐k1 pi (commit; ei ) ⇒ Γ′ , P ∥ ∐k1 pi (ei ) x, v ∶ T S-INIT Γ, P ∥ p(shared T x ∶= v; e) ⇒ Γ′ , P ∥ p(e) eb ↓ true S-COND1 Γ, P ∥ p(if(eb )then{e1 }else{e2 }) ⇒ Γ, P ∥ p(e1 ) eb ↓ false S-COND2 Γ, P ∥ p(if(eb )then{e1 }else{e2 }) ⇒ Γ, P ∥ p(e2 ) eb ↓ true e S-WHILE Γ, P ∥ p(while(eb ){e}) ⇒ Γ, P ∥ p(e; while(eb ){e}) eb ↓ f alse e1 S-NO WHILE Γ, P ∥ p(while(eb ){e1 }; e2 ) ⇒ Γ, P ∥ p(e2 ) x, e1 , e2 ∶ T S-ASSIGN S-SKIP Γ, P ∥ p(x ∶= e1 ; e2 ) ⇒ Γ, P ∥ p(e2 ) Γ, P ∥ p(α; e) ⇒ Γ, P ∥ p(e) Γ = Γ′ ∪ {p ∶ E} ∣E∣ > Γ = Γ′ ∪ {p ∶ E} ∣E∣ = S-ERROR-C S-ERROR-O Γ, P ∥ p(commit; e) ⇒ error Γ, P ∥ p() ⇒ error 4.3 Hệ thống kiểu tìm biên nhớ cho biến dùng chung Hệ thống kiểu phát triển từ Hệ thống kiểu chương với cải tiến để tính nhớ log tối đa chương trình giao dịch cách tự động Bởi hệ thống kiểu phát triển dựa hệ thống kiểu chương 3, nên quy tắc có mục đích ý nghĩa tương tự, chúng khác phép tốn chi tiết Vì đây, chúng tơi khơng trình bày chi tiết hệ thống kiểu 15 4.3.1 Suy diễn kiểu Dựa quy tắc kiểu trình bày trên, cài đặt công cụ để suy kiểu cho chương trình hợp lệ Công cụ xây dựng phương pháp lập trình hàm sử dụng ngơn ngữ lập trình F♯ Công cụ kiểm thử với số ca kiểm thử đề xuất chúng vượt qua ca kiểm thử 4.4 Hệ thống kiểu tích hợp xác định biên nhớ cấp phát cho biến dùng chung Hệ thống kiểu chương sau phát triển, mở rộng phần 4.3 chương xác định biên nhớ dành cho biến dùng chung luồng chương trình Hệ thống kiểu có quy tắc kiểu ngắn gọn, dễ hiểu, dễ phát triển cài đặt Tuy nhiên hệ thống kiểu địi hỏi chương trình hồn chỉnh định kiểu Vì chúng khơng thuận tiện cho chương trình lớn, viết nhiều người Trong phần luận án xây dựng hệ thống kiểu với mục đích tương tự chúng có khả tích hợp Nghĩa chúng định kiểu cho đoạn chương trình sau tích hợp chúng lại với để kiểu chương trình Đây đặc điểm thường thấy hệ thống kiểu Định nghĩa 4.1 (Kiểu thành phần) Kiểu T thành phần định nghĩa sau: T = S ∣ T T ∣ T ⊗ T ∣ T ρ ∣ T ⊘ T ∣ T ∥k T Kiểu thành phần chuỗi số gắn ký hiệu S hệ thống kiểu trên, tổng hợp từ kiểu thành phần khác Trong định nghĩa này, T T có nghĩa kiểu thành phần suy từ kiểu hai thành phần T ρ có nghĩa rằng, thành phần có kiểu T thực thi luồng chạy song song với cha Các phép tốn T ⊗ T , T ⊘ T , T ∥k T phép toán hợp, chọn, song song tương ứng Chúng tạo thành phần từ thành phần tồn Quy tắc định kiểu mô tả Bảng 4.3 Bảng 4.3: Quy tắc kiểu hệ thống kiểu tích hợp + x∶T T-ONACID ⊢ onacid ∶ v ∶ T n = size(x) n ∈ N∗ T-COMMIT n ⊢ commit ∶ −1 n = isclone(x) ? ∶ size(x) n⊢e∶T T-SPAWN n ⊢ spawn{ e } ∶ T ρ nk ⊢ ek ∶ Tk k = 1, T-ASSIGN −n ⊢ x ∶= e1 ∶ ⋆n n1 + n2 ⊢ e1 ; e2 ∶ T1 T2 eb ∶ bool n ⊢ e ∶ T m = maxloop() −n ⊢ shared T x ∶= v ∶ ⋆n eb ∶ bool nk ⊢ ek ∶ Tk k = 1, n ⊢ if(eb ) then{ e1 } else{ e2 } ∶ T1 ⊘ T2 T-NEW T-COND n′ ⊢ while(eb ){ e } ∶ T m n ⊢ e2 ∶ T2 n ⊢ e1 ∶ n⊢e∶T T-THREAD n ⊢ p(e) ∶ T n ⊢ e1 ; e2 ∶ T1ρ T2 Γk ,Pk nk ⊢ Pk ∶ Tk Γ=Γ1 ,Γ2 common(Γ1 , Γ2 )=n n1 + n2 ⊢ P1 ∥ P2 ∶ T1 ∥n T2 T1ρ T-SEQ T-WHILE T-MERGE k=1, T-PAR Định nghĩa 4.2 (Kiểu hợp lệ) Một chương trình xem hợp lệ có kiểu T T ⇒∗ s♯ 16 Định nghĩa 4.3 (Tài nguyên tiêu thụ) Nếu Γ, P trạng thái chạy chương trình P ∶ T , tài nguyên tiêu thụ tối đa thực thi P là: vs♯ w vΓ, P w = { error ST ⇒∗ s♯ trường hợp khác S có dạng +n1 +n2 +nk vSw = vΓw Định lý 4.1 (Tính chất phát biểu kiểu) Giả sử e∶T , ST ⇒∗ s♯ vs♯ w≥vSw, S = +n1 +n2 +nk , vSw = vΓw Chứng minh: Bằng phương pháp quy nạp quy tắc định kiểu Bảng 4.3 ∎ Bổ đề 4.1 (Tính bất biến) Nếu Γ, P vΓ′ , P ′ w = n′ n ≥ n′ với ∀ R ⇒ Γ′ , P ′ quy tắc R vΓ, P w = n 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 4.2 ∎ Bổ đề 4.2 (Trạng thái) Cho chương trình hợp lệ P0 , kiểu T T ⇒∗ s♯ Đối với trạng thái Γ, P chương trình, ta có vΓ, P w ≤ vs♯ w Chứng minh: Chứng minh phương pháp quy nạp quy tắc ngữ nghĩa - Trạng thái khởi tạo: vφ, P w = vs♯ w ≤ vs♯ w - Nếu Γ, P ⇒ T ′ , P ′ , giả sử vΓ, P w ≤ vs♯ w, theo Bổ đề 4.1, ta có vΓ′ , P ′ w ≤ vΓ, P w ≤ vs♯ w ∎ Định lý 4.2 (Tính đúng) Cho chương trình hợp lệ P0 , kiểu T , T ⇒∗ s♯ tài nguyên tiêu thụ chương trình thực thi khơng thể vượt q vs♯ w Chứng minh: Giả sử Γ, P trạng thái chương trình, theo Bổ đề 4.2 ta có vΓ, P w ≤ vs♯ w Theo Định nghĩa vΓ, P w Định lý 4.1 ta suy vΓw ≤ vs♯ w ∎ Định lý khẳng định rằng, chương trình hợp lệ nhớ lớn sử dụng cho biến dùng chung không vượt giá trị mô tả kiểu 4.5 Tổng kết chương Trong chương này, mở rộng ngôn ngữ từ chương để gần với ngơn ngữ thực tế Sau đó, xây dựng hai hệ thống kiểu để xác định tài nguyên nhớ tối đa cần cấp phát cho biến dùng chung chương trình Kết nghiên cứu chương công bố (hoặc gửi đăng) tạp chí, hội thảo khoa học: Hội thảo quốc tế The Eighth International Symposium on Information and Communication Technology (SOICT) (Cơng trình khoa học số (3)), tạp chí Khoa học Kỹ thuật, Học viện Kỹ thuật qn (Cơng trình khoa học số (4)), tạp chí VNU Journal of Science (cơng trình khoa học số (5)) (Đang chờ phản biện) 17 Chương Xác định nhớ giao dịch tối đa cho chương trình ngôn ngữ hướng đối tượng Trong chương chúng tơi trình bày ngơn ngữ giao dịch với cấu trúc hướng đối tượng, chế STM cải tiến so với ngôn ngữ chương 3, chương để chúng sử dụng nhớ hiệu Cùng với đó, chúng tơi trình bày hệ thống kiểu cải tiến, mở rộng từ hệ thống kiểu chương để tìm biên nhớ cấp phát cho đối tượng dùng chung giao dịch chương trình 5.1 Giới thiệu Trong chương 4, luận án đưa ngôn ngữ giao dịch với cấu trúc mệnh lệnh, sau đề xuất hai hệ thống kiểu để ước lượng biên tài nguyên tiêu thụ chương trình Ngơn ngữ có hai đặc điểm bật là: Thứ nhất, chúng ngôn ngữ đa luồng với cấu trúc mệnh lệnh; Thứ hai, chế STM ngôn ngữ thực chép toàn biến dùng chung luồng cha vào luồng (khi luồng bắt đầu sinh ra) Như vậy, chương giải tốn ước lượng tài ngun chương trình cho lớp ngôn ngữ giao dịch với cấu trúc mệnh lệnh gần với ngôn ngữ thực tế Cơ chế STM ngôn ngữ khắc phục hạn chế chế dựa khóa hoạt động phù hợp với chế hoạt động số ngôn ngữ giao dịch thực tế Tuy nhiên, nhiều ngôn ngữ xây dựng theo cấu trúc hướng đối tượng Như vậy, kết chương chưa giải tốn đặt lớp ngơn ngữ Thêm nữa, nhận thấy rằng, chế chép toàn biến dùng chung cho luồng từ luồng cha tạo thuận lợi cho người cài đặt ngơn ngữ Tuy nhiên, góc độ sử dụng nhớ chương trình điều chưa tối ưu Bởi vì, biến dùng chung luồng cha mà luồng khơng cần sử dụng việc chép chúng không cần thiết Để giải vấn đề trên, chương này, đưa ngôn ngữ giao dịch với cấu trúc hướng đối tượng (gọi tắt ngôn ngữ giao dịch cấu trúc hướng đối tượng) Cơ chế STM ngôn ngữ cải tiến để sử dụng nhớ hiệu Cụ thể, luồng sinh ra, chúng khơng chép tồn đối tượng dùng chung luồng cha, mà giao dịch cần sử dụng đối tượng dùng chung chúng chép đối tượng từ giao dịch gần với để tạo thành để chúng sử dụng riêng Tiếp theo, cải tiến hệ thống kiểu tích hợp trình bày chương để xác định biên tài nguyên nhớ cấp phát cho đối tượng dùng chung giao dịch (gọi tắt nhớ giao dịch) 18 5.2 5.2.1 Ngôn ngữ giao dịch với cấu trúc hướng đối tượng Cú pháp Cú pháp ngơn ngữ trình bày Bảng 5.1, chúng tơi sử dụng → véc tơ ngang để mô tả chuỗi thứ tự hữu hạn, ví dụ f mơ tả cho f1, f2, , fn Tại dịng 1, P mơ tả luồng/tiến trình, chúng luồng trống (ký hiệu φ), luồng song song P∥P, luồng p thực thi biểu thức e Tại dịng 2, L mơ tả lớp, I mô tả lớp số nguyên định nghĩa → → sẵn, class C{ f ; M } mơ tả việc khai báo lớp Dịng mơ tả phương thức → → lớp Ký hiệu m( C x){ e } nghĩa phương thức m có tham số x1 , x2 , , xn , chúng biến đối tượng lớp C1 , C2 , , Cn tương ứng Từ dòng đến dòng 7, biểu thức e là: biến x; phép tốn lớp số nguyên, ví dụ cộng, trừ, nhân, chia (ký hiệu ●); câu lệnh để khởi tạo đối tượng mới, truy cập vào trường đối tượng, gọi phương thức đối tượng gán biểu thức cho trường đối tượng; câu lệnh lại tương tự ngơn ngữ trước trình bày Tại dịng 8, v mơ tả giá trị, chúng đối tượng, giá trị trường giá trị khác, lời gọi phương thức đối tượng, phép gán giá trị vào trường đối tượng, giá trị null Trong ngôn ngữ trước chúng tôi, luồng tạo câu lệnh spawn, chép tất đối tượng luồng cha Trong ngôn ngữ này, giao dịch chép đối tượng từ giao dịch cha giao dịch cần sử dụng (đọc, ghi) chúng Điều làm cho việc sử dụng nhớ chương trình hiệu Bảng 5.1: Cú pháp ngôn ngữ STM hướng đối tượng 5.2.2 P ::= φ ∣ P∥P ∣ p(e) → → L ::= I ∣ class C{ f ; M } → M ::= m( C → x ){ e } e ::= x ∣ v ∣ e ● e ∣ new C( → e ) ∣ e.f ∣ e.f:=e ∣ e.m( → e ) ∣ e;e ∣ spawn{ e } ∣ onacid ∣ commit ∣ if(e) then{ e } else{ e } ∣ while(e){ e } v ::= n ∣ r ∣ v.f ∣ v.m( → v ) ∣ v.f:=v ∣ null luồng/tiến trình lớp phương thức biểu thức giá trị Ngữ nghĩa Một môi trường (đơn vị) E vùng nhớ, xác định địa l nó, bao gồm danh sách cặp l′ biến tham chiếu r (được ký hiệu r = (l1′ ∶r1 , l2′ ∶r2 , , ln′ ∶rn )), l′ địa nơi mà biến r khởi tạo Chúng ký hiệu danh sách trống, danh sách mà không chứa phần tử Mối biến tham chiếu có đối tượng, ký hiệu r ↦ OC ( → v ), O đối tượng → lớp C , khởi tạo với tham số v Ký hiệu vrw kích thước nhớ đối tượng trỏ đến r Thực tế, kích thước nhớ đối tượng phụ thuộc vào giá trị trường thuộc tính 19 đối tượng Tuy nhiên, nghiên cứu này, giới hạn kiểu thuộc tính đối tượng số, đối tượng lớp có kích thước nhớ Ký hiệu vEw kích thước mơi trường đơn vị E , vEw = ∑ vrw, r ∈ E r∈E nghĩa tất biến r E Một môi trường đơn vị E phân thành lớp Eα El , Eα chứa biến luồng mà khơng thuộc giao dịch nào, El bao gồm biến giao dịch l luồng Một môi trường đầy đủ luồng p ký hiệu Ep , bao gồm hai thành phần: l∶Eα l định danh môi trường đơn vị Eα luồng p chuỗi (l∶El ∣ p′ ∶Ep′ )∗ l định danh mơi trường đơn vị El , p′ định danh luồng luồng p Trong nghiên cứu này, chế STM nhân đối tượng giao dịch, đối tượng khơng thuộc giao dịch khơng nhân Vì vậy, ước tính nhớ cấp phát cho đối tượng không giao dịch (các đối tượng thuộc Eα ) khơng cần thiết Vì vậy, định nghĩa sau, bỏ qua môi trường đơn vị Eα Định nghĩa 5.1 (Môi trường luồng) Một môi trường luồng Ep luồng p định nghĩa đệ quy Ep = (l∶El ∣ p′ ∶Ep′ )∗ Mơi trường luồng mơi trường tồn cục chương trình, ký hiệu E Tổng nhớ giao dịch chương trình sử dụng thời điểm tổng nhớ cấp phát cho đối tượng giao dịch hoạt động chương trình thời điểm Chúng ta có định nghĩa sau nhớ giao dịch Định nghĩa 5.2 (Bộ nhớ giao dịch) Bộ nhớ giao dịch mà chương trình cần sử dụng tổng nhớ cấp phát cho đối tượng giao dịch chương trình, ký hiệu vE w, định nghĩa vE w = ∑ vEl w + ∑ vE ′ w, El ∈ E, E ′ ∈ E có El ∈E E ′ ∈E nghĩa tất môi trường đơn vị El , E ′ danh sách môi trường E Bảng 5.2: Ngữ nghĩa ngôn ngữ STM hướng đối tượng p′ f resh spawn(p′ , E) = E ′ S-SPAWN E, P ∥ p(spawn{ e1 }; e2 ) ⇒ E ′ , P ∥ p(e2 ) ∥ p′ (e1 ) r f resh new(r, E) = E ′ l f resh onacid(l, E) = E ′ S-NEW S-ONACID ′ E, P ∥ p(onacid; e) ⇒ E , P ∥ p(e) E, P ∥ p(new C( → v ); e) ⇒ E ′ , P ∥ p(e) → l = txn(p) intrans(l, Ep ) = φ commit(l, E) = E ′ read(r, E) = OC ( → v ), E ′ f ields(C) = f S-COMM S-FIELD E, P ∥ p(commit; e) ⇒ E ′ , P ∥ p(e) E, P ∥ p(r.fi ; ) ⇒ E ′ , P ∥ p(vi ) ′ read(r, E) = OC ( → v ), E ′ write(r ↓ri , E ′ ) = E ′′ mbody(C, m) = → x ,e S-CALL S-UPD ′ ′ E, P ∥ p(r.fi ∶= r ; e) ⇒ E , P ∥ p(e) E, P ∥ p(r.m( → v ); ) ⇒ E, P ∥ p(e∣ → x =→ v) i = (val(e) ≠ 0) ? ∶ S-COND E, P ∥ p(if(e) then { e1 } else { e2 }) ⇒ E, P ∥ p(ei ) e′ = (val(e) ≠ 0) ? e1 ; while(e){ e1 }; e2 ∶ e2 S-WHILE E, P ∥ p(while(e){ e1 }; e2 ) ⇒ E, P ∥ p(e′ ) ∣Ep ∣ = S-SKIP S-ERROR ′ ′ E, P ∥ p(α; e) ⇒ E , P ∥ p(α ; e) E, P ∥ p(commit; e) ⇒ error 20 5.3 Hệ thống kiểu tích hợp tìm biên nhớ giao dịch Hệ thống kiểu nhằm xác định cận nhớ giao dịch mà chương trình STM cần sử dụng Mỗi thành phần chương trình định kiểu thơng qua chuỗi đặc biệt, tổng quát hành vi giao dịch chương trình Định nghĩa 5.3 (Kiểu thành phần) Kiểu T thành phần định nghĩa đệ quy sau: T = S ∣ TT ∣ T ⊗ T ∣ Tρ ∣ T ⊘ T ∣ T ∥ T 5.3.1 Quy tắc kiểu Các quy tắc định kiểu trình bày Bảng 5.3., kiểu thành phần có dạng n ⊢ e ∶ T , đọc e có kiểu T Ở đây, T nắm giữ thông tin tài nguyên nhớ biểu thức e n môi trường kiểu biểu thức e, chúng cung cấp ngữ cảnh cho biểu thức Môi trường kiểu n định nghĩa sau Định nghĩa 5.4 (Môi trường kiểu) Môi trường kiểu thành phần lượng nhớ cấp phát hay giải phóng thực thi thành phần Nó thể ngữ cảnh giao dịch cho thành phần định kiểu Khi kiểu môi trường n dương, có nghĩa thực thi biểu thức, giải phóng n đơn vị nhớ; n âm, nghĩa thực biểu thức, tiêu tốn n đơn vị nhớ Bảng 5.3: Quy tắc định kiểu ⊢ onacid ∶ +0 n = r ∈ setvar(l) ? ∶ size(r) T-ONACID −n ⊢ r.fi ∶ ⋆n n1 ⊢ e1 ∶ T1ρ n2 ⊢ e2 ∶ T2 r ↦ OC ( → v ) n = size(r) n∈N T-COMMIT T-NEW − n ⊢ commit ∶ −n ⊢ new C( → v ) ∶ ⋆n n = r ∈ setvar(l) ? ∶ size(r) n⊢e∶T −2 ∗ n ⊢ r.fi = v ∶ ⋆(2 ∗ n) n ⊢ spawn{ e } ∶ T ρ mtype(C, m) ∶ n → T n1 ⊢ e1 ∶ T1 n2 ⊢ e2 ∶ T2 T-SEQ T-MERGE T-CALL ρ n1 + n2 ⊢ e1 ; e2 ∶ T1 T2 n1 + n2 ⊢ e1 ; e2 ∶ T1 T2 n ⊢ r.m( → v)∶T n ⊢ e2 ∶ T n1 ⊢ e1 ∶ T1 n2 ⊢ e2 ∶ T2 T-WHILE T-COND n′ ⊢ while (e1 ){ e2 } ∶ T ′ max(n1 , n2 ) ⊢ if (e) then{ e1 } else{ e2 } ∶ T1 ⊘ T2 n1 ⊢ P1 ∶ T1 n2 ⊢ P2 ∶ T2 n⊢e∶T T-THREAD T-PAR n ⊢ p(e) ∶ T n1 + n2 ⊢ P1 ∥ P2 ∶ T1 ∥ T2 T-ACCESS T-UPDATE T-SPAWN Các phép toán kết hợp kiểu thành phần định nghĩa chi tiết luận án Ngồi ra, chương chúng tơi đưa chứng minh (ở dạng rút gọn) để đảm bảo tính cho quy tắc kiểu mà chúng tơi đề xuất 5.4 Tổng kết chương Trong chương này, chúng tơi trình bày ngơn ngữ lập trình đa luồng hoạt động theo chế STM hệ thống kiểu để xác định biên nhớ cần thiết cho đối tượng dùng chung giao dịch Những tính ngơn ngữ ngơn ngữ có cấu trúc hướng đối tượng ngữ nghĩa hoạt động tối ưu Kết nghiên cứu chương dự kiến gửi vào tạp chí International Journal of Software Engineering and Knowledge Engineering Journal (IJSEKE) (Cơng trình khoa học số (6)) 21 Chương Kết luận Hiện nay, lĩnh vực lập trình nhúng, lập trình cho thiết bị di động, thiết bị IOT, hay hệ thống trung tâm liệu, nơi mà tài nguyên tiêu hao liên quan chặt chẽ đến tuổi thọ pin, chi phí trì hoạt động, nhu cầu xây dựng phần mềm hiệu xuất cao, sử dụng tiết kiệm tài nguyên tốn quan trọng Đã có nhiều nhà khoa học, nhiều cơng trình nghiên cứu vấn đề ngữ cảnh khác Hầu hết nghiên cứu thực chương trình tuần tự, chương trình đa luồng luồng hoạt động song song độc lập Một số tác giả thực nghiên cứu ngôn ngữ thư viện cụ thể hoạt động theo chế STM cách sử dụng công cụ để đo lượng tài ngun tiêu thụ chương trình chạy, sau lấy kết trung bình lần đo để ước lượng lượng tài nguyên tiêu thụ chương trình Vì phương pháp cho kết gần thực chương trình hoàn thiện Mặt khác nghiên cứu thực ngôn ngữ thư viện cụ thể, chúng không sử dụng cho ngôn ngữ khác nên chúng khơng mang tính tổng qt Nghiên cứu thực ngôn ngữ chung, hoạt động theo chế STM kết mang tính tổng qt, phát triển để ứng dụng cho ngôn ngữ thực tế Phương pháp đề xuất phương pháp tĩnh kết chứng minh đảm bảo tính mà khơng cần chạy chương trình 6.1 Những kết đạt Kết luận án bao gồm hai hệ thống kiểu với mục đích ước lượng tĩnh tài nguyên tối đa cần sử dụng chương trình STM: - Hệ thống kiểu thứ xây dựng với quy tắc đơn giản hơn, thuận lợi để phát triển, cài đặt Hệ thống kiểu yêu cầu chương trình hồn thiện (chương trình viết xong hợp lệ) định kiểu được, chúng phù hợp với chương trình nhỏ, viết số người - Hệ thống kiểu thứ hai có khả định kiểu linh hoạt chúng tơi gọi hệ thống kiểu tích hợp Chúng định kiểu cho thành phần chương trình, sau tích hợp lại để kiểu tồn chương trình Hệ thống kiểu phù hợp với chương trình phức tạp, viết nhiều người Ngồi đóng góp trên, luận án đưa số cải tiến cho chế STM để sử dụng nhớ giao dịch hiệu Cuối cùng, dựa quy tắc kiểu, cài đặt công cụ để định kiểu cho chương trình Cơng cụ cài đặt phương pháp lập trình hàm 22 kiểm thử tự động với số ca kiểm thử đề xuất, chúng vượt qua ca kiểm thử Công cụ hồn thành tích hợp vào chương trình soạn thảo mã nguồn trình biên dịch để cung cấp thơng tin cho người lập trình lượng nhớ tối đa mà chương trình cần sử dụng Ý nghĩa khoa học luận án không việc giải toán ước lượng tài ngun chương trình STM, mà cịn phương pháp giải tốn mà chúng tơi xây dựng Luận án đóng góp vào phát triển lý thuyết kiểu hệ thống kiểu với quy tắc kiểu giúp người lập trình kiểm sốt lượng tài nguyên tiêu thụ chương trình Từ hệ thống kiểu này, tiếp tục mở rộng, phát triển để giải toán khác, chẳng hạn xác định số gas yêu cầu hợp đồng thông minh Ethereum, ước lượng thời gian chương trình cần để hồn thành cơng việc Các nghiên cứu chủ yếu áp dụng cho chương trình tuần tự, có luồng chạy song song độc lập Nghiên cứu chúng tơi áp dụng cho chương trình có luồng chạy song song không độc lập, nghĩa chúng có điểm đồng luồng Như vậy, chương trình tuần tự, có luồng hoạt động song song độc lập trường hợp cụ thể tốn chúng tơi Điều làm cho toán tổng quát tính tốn xác Giải pháp sử dụng hệ thống kiểu để ước lượng tĩnh tài ngun sử dụng chương trình mà khơng cần chạy chương trình Các hệ thống kiểu chúng tơi đưa chứng minh để đảm bảo tính Vì kết tính tốn đáng tin cậy 6.2 Những hạn chế hướng nghiên cứu Vấn đề xác định biên tài nguyên cần sử dụng chương trình STM vấn đề phức tạp, nghiên cứu đề xuất giải pháp giải tốn mang tính cốt lõi Tuy nhiên, kết đạt mang tính phương pháp, cịn hạn chế cần tiếp tục cải tiến Để áp dụng kết nghiên cứu vào thực tế cần tiếp tục nghiên cứu cải tiến số nội dung sau đây: Ngôn ngữ giao dịch mà đề xuất dạng rút gọn với mục đích thể rõ ý tưởng tốn đặt Ngơn ngữ thực tế có nhiều cấu trúc khác hàm, thủ tục, lời gọi phương thức, truyền thông điệp, kế thừa, nhiều tính tốn chi tiết Ngồi ra, số vấn đề khác xử lý việc thực lại giao dịch xảy xung đột hay xác định số vòng lặp tối đa câu lệnh lặp chưa giải nghiên cứu Để trở thành ngôn ngữ dùng thực tế cần phải cải tiến, làm mịn để ngôn ngữ chi tiết Hiện tại, cú pháp, ngữ nghĩa ngôn ngữ định nghĩa môi trường, trạng thái chương trình thể dạng trừu tượng, bán hình thức Vì để cài đặt chúng trở thành ngôn ngữ thực tế tiếp tục cải tiến để mơ tả chúng dạng hình thức hồn tồn Tiếp theo, chúng tơi có kế hoạch sử dụng tảng K để cài đặt cho ngôn ngữ Đây tảng mạnh, phù hợp để triển khai ngơn ngữ dạng hình thức, đặc biệt ngôn ngữ hoạt động theo chế tương tranh Nền tảng 23 hứa hẹn trở thành tảng thành công việc phát triển ngơn ngữ lập trình cơng nghiệp phần mềm Hệ thống kiểu đưa đảm bảo tính đúng, nhiên số trường hợp chưa đảm bảo tính sắc biên tìm Vì nghiên cứu tiếp tục cải tiến chúng để đảm bảo biên nhớ tìm sắc Ngồi ra, chúng tơi có kế hoạch cài đặt đầy đủ thuật toán suy diễn kiểu dựa hệ thống kiểu đề xuất để tích hợp vào trình soạn thảo, trình biên dịch ngơn ngữ lập trình để giúp người lập trình kiểm sốt chương trình q trình lập trình Trong nghiên cứu hệ thống kiểu chúng tơi có mục đích xác định cận nhớ chương trình STM Tuy nhiên, cố gắng xây dựng chúng cách tổng quát nhằm hướng đến việc cải tiến chúng để xác định tính chất khác chương trình xác định chi phí tài ngun CPU, băng thông mạng, số gas yêu cầu cho hợp đồng thơng minh Ethereum Bài tốn nghiên cứu ngôn ngữ chung với mục đích giải tốn cách tổng qt Ngơn ngữ chúng tơi mang đặc tính cốt lõi ngơn ngữ giao dịch thực tế Vì tiếp tục nghiên cứu ngôn ngữ, thư viện cụ thể thực tế để xây dựng công cụ chuyển đổi ngôn ngữ ngôn ngữ để áp dụng kết luận án Khi hồn thiện cơng việc này, kết luận án giải nhiều lớp ngơn ngữ thực tế khả ứng dụng rộng 24 Danh mục cơng trình khoa học tác giả liên quan đến luận án Những cơng trình cơng bố: (1) Trương Anh Hồng, Nguyễn Ngọc Khải (2015) "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" Tạp chí Khoa học, Đại học Sư phạm Hà Nội, pp 80-93 (2) Anh-Hoang Truong, Ngoc-Khai Nguyen, Dang Van Hung and Duc-Hanh Dang (2016) "Calculating statically maximum log memory used by multi-threaded transactional programs" Theoretical Aspects of Computing - ICTAC - 13th International Colloquium, Taipei, Taiwan, ROC, Proceedings (3) Ngoc-Khai Nguyen, and Anh-Hoang Truong (2017) "A Compositional Type Systems for Finding Log Memory Bounds of Transactional Programs" Proceedings of the Eighth International Symposium on Information and Communication Technology - SOICT, pp 409-416 (4) Nguyễn Ngọc Khải, Trương Anh Hoàng (2018) "Hệ thống kiểu để suy nhớ log chương trình giao dịch từ biến dùng chung" Tạp chí Khoa học Kỹ thuật, Học viện Kỹ thuật qn sự, pp 18-33 Những cơng trình gửi đăng: (5) Ngoc-Khai Nguyen, Anh-Hoang Truong, and Duc-Hanh Dang "Estimate the memory bounds required by shared variables in software transactional memory programs" VNU Journal of Science: Computer Science and Communication Engineering (6) Ngoc-Khai Nguyen, Anh-Hoang Truong, and Duc-Hanh Dang "Finding transaction memory bound of STM programs" International Journal of Software Engineering and Knowledge Engineering Journal (IJSEKE) 25 ... CÔNG NGHỆ −−−−−−−−−−−−− NGUYỄN NGỌC KHẢI HỆ THỐNG KIỂU ĐỂ ƯỚC LƯỢNG TĨNH TÀI NGUYÊN SỬ DỤNG CỦA CHƯƠNG TRÌNH GIAO DỊCH Chuyên ngành: Kỹ thuật phần mềm Mã số: 9480103.01 TÓM TẮT LUẬN ÁN TIẾN SĨ... xác Giải pháp sử dụng hệ thống kiểu để ước lượng tĩnh tài nguyên sử dụng chương trình mà khơng cần chạy chương trình Các hệ thống kiểu đưa chứng minh để đảm bảo tính Vì kết tính tốn đáng tin cậy... thể lượng tài nguyên mà giao dịch cần sử dụng Từ đó, chúng tơi xây dựng hệ thống kiểu để xác định biên tài nguyên mà chương trình cần sử dụng dựa tham số giao dịch Các tham số giao dịch người