Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 11 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
11
Dung lượng
2,14 MB
Nội dung
ĐẠI HỌC QUỐC GIA HÀ NỘI TRƢỜNG ĐẠI HỌC CÔNG NGHỆ NGUYỄN QUANG ĐẠI KỸ THUẬT PHÂN TÍCH CHƢƠNG TRÌNH TĨNH CHO BÀI TOÁN PHÂN TÍCH HÌNH DẠNG BỘ NHỚ HEAP LUẬN VĂN THẠC SĨ CÔNG NGHỆ THÔNG TIN Hà Nội – 2015 ĐẠI HỌC QUỐC GIA HÀ NỘI TRƢỜNG ĐẠI HỌC CÔNG NGHỆ NGUYỄN QUANG ĐẠI KỸ THUẬT PHÂN TÍCH CHƢƠNG TRÌNH TĨNH CHO BÀI TOÁN PHÂN TÍCH HÌNH DẠNG BỘ NHỚ HEAP 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: TS Nguyễn Trƣờng Thắng Hà Nội - 2015 LỜI CAM ĐOAN Tôi xin cam đoan công trình nghiên cứu có giúp đỡ Thầy giáo hƣớng dẫn đồng nghiệp quan Các nội dung kết nghiên cứu luận văn hoàn toàn trung thực Trong luận văn, có tham khảo đến số tài liệu số tác giả đƣợc liệt kê mục tài liệu tham khảo Hà Nội, 03 tháng 07 năm 2015 Học viên Nguyễn Quang Đại LỜI CẢM ƠN Tôi xin chân thành cảm ơn thầy cô giáo Khoa Công nghệ Thông tin, Trƣờng Đại học Công nghệ – Đại học Quốc gia Hà Nội tận tình giảng dạy trang bị cho kiến thức, giúp hoàn thành luận văn Tôi xin đƣợc bày tỏ lòng kính trọng lời cảm ơn sâu sắc tới TS Nguyễn Trƣờng Thắng, Phó Viện trƣởng, Viện Công nghệ Thông Tin – Viện Hàn lâm Khoa học Công nghệ Việt Nam Thầy động viên hƣớng dẫn hoàn thành luận văn tốt nghiệp Mặc dù cố gắng để hoàn thành luận văn, nhƣng phạm vi khả cho phép tránh khỏi thiếu sót, mong nhận đƣợc cảm thông tận tình bảo thầy cô Hà Nội, 03 tháng 07 năm 2015 Học viên Nguyễn Quang Đại MỤC LỤC MỤC LỤC DANH MỤC CÁC KÝ HIỆU VÀ CHỮ VIẾT TẮT DANH SÁCH HÌNH VẼ MỞ ĐẦU CHƢƠNG GIỚI THIỆU CHUNG 1.1 Đặt vấn đề 1.2 Giới thiệu phân tích chƣơng trình tĩnh 1.3 Điểm mạnh điểm yếu phân tích chƣơng trình tĩnh 1.4 Các kỹ thuật phân tích chƣơng trình tĩnh CHƢƠNG LÝ THUYẾT NỀN TẢNG 11 2.1 Nền tảng phân tích ngữ nghĩa chƣơng trình 11 2.1.1 Lý thuyết giàn 11 2.1.2 Thuộc tính đóng 13 2.1.3 Phƣơng trình bất phƣơng trình 15 2.1.4 Lý thuyết điểm cố định 16 2.1.5 Các kỹ thuật tăng tốc độ hội tụ widening/narrowing 18 2.2 Kết luận chƣơng 22 CHƢƠNG PHÂN TÍCH HÌNH DẠNG HEAP 23 3.1 Phân tích trỏ 23 3.1.1 Thuật toán Andersen 23 3.1.2 Thuật toán Steensgaard 25 3.2 Phân tích trỏ liên thủ tục 26 3.3 Phân tích hình dạng nhớ heap 27 3.2.1 Kỹ thuật phân tích 29 3.2.2 Đánh giá 33 3.3 Kết luận chƣơng 33 CHƢƠNG THỰC NGHIỆM 34 4.1 Tổng quan Valgrind 34 4.1.1 Công cụ Memcheck 35 4.1.2 Biên dịch chƣơng trình với Memcheck 37 4.1.3 Lệnh kiểm tra Memcheck 37 4.2 Phân tích heap chƣơng trình Valgrind 39 4.2.1 Rò rỉ nhớ 39 4.2.2 Sử dụng nhớ không đƣợc khởi tạo 40 4.2.3 Lỗi sử dụng không malloc/ new/ new[] với free/ delete/ delete[] 43 4.2.4 Thực nghiệm chƣơng trình có mã nguồn lớn 45 KẾT LUẬN 47 TÀI LIỆU THAM KHẢO 48 PHỤ LỤC A 49 PHỤ LỤC B 51 PHỤ LỤC C 55 DANH MỤC CÁC KÝ HIỆU VÀ CHỮ VIẾT TẮT Ký hiệu Thuật ngữ CFG Control Flow Graph CG Garbage Collection DFG Data Flow Graph SMT Satisfiability Modulo Theories SAT Satisfiability Testing DANH SÁCH HÌNH VẼ Hình 2.1 Biểu đồ Hasse biểu diễn giàn 11 Hình 2.2 Quan hệ thứ tự phần giàn 12 Hình 2.3 Quan hệ thứ tự phần giàn 12 Hình 2.4 Ví dụ giàn có chiều cao 13 Hình 2.5 Phép toán cộng giàn 14 Hình 2.6 Phép toán nâng (lift) giàn 14 Hình 2.7 Phép toán lift tập tạo thành giàn 14 Hình 2.8 Tính toán điểm cố định giàn 17 Hình 2.9 Giàn có chiều cao vô hạn 19 Hình 3.1 Quan hệ tƣơng đƣơng ràng buộc 26 Hình 3.2 Đồ thị heap 30 Hình 3.3 Đồ thị hình dạng heap sau vòng lặp 32 Hình 4.1 Kết ví dụ rò rỉ nhớ Memcheck 40 Hình 4.2 Kết ví dụ sử dụng nhớ chƣa đƣợc khởi tạo Memcheck sử dụng –track-origins 42 Hình 4.3 Kết ví dụ sử dụng nhớ chƣa đƣợc khởi tạo Memcheck không sử dụng –track-origins 43 Hình 4.4 Kết ví dụ lỗi sử dụng không malloc/new/new[] với free/delete/delete[] 44 MỞ ĐẦU Ngày với phát triển vƣợt bậc công nghệ thông tin, phần mềm có vai trò cốt lõi ngày chiếm vị trí quan trọng công nghệ thông tin mà đời sống kinh tế xã hội Vấn đề chất lƣợng phần mềm (software quality) chắn mối quan tâm thách thức xã hội đại ngày phụ thuộc vào dịch vụ máy tính đem lại Liên quan tới đảm bảo chất lƣợng phần mềm, khía cạnh quản lý nhớ đƣợc quan tâm Quản lý nhớ đƣợc chia làm hai giai đoạn phân bổ nhớ theo yêu cầu, giải phóng chƣơng trình không sử dụng Hiện nay, nhiều hệ thống ngôn ngữ lập trình sử dụng chế quản lý nhớ tự động, tiêu biểu nhƣ Java C# Trong Java, ngƣời lập trình không cần phải trọng đến phân bổ giải phóng nhớ Khi khối nhớ đƣợc phân bổ không đƣợc sử dụng máy ảo Java (Java Virtual Machine) tự giải phóng nhớ thông qua chế thu dọn rác tự động (Automatic Garbage Collection) [1] Thu gom rác tự động trình kiểm tra nhớ heap, xác định đối tƣợng đƣợc sử dụng không đƣợc sử dụng, xóa đối tƣợng không đƣợc sử dụng Chức GC (Garbage Collection) gồm hai bƣớc trừu tƣợng (trong thực tế hai pha đan xen nhau): Phát rác (tìm đối tƣợng từ đống rác cách đó) Cải tạo rác (Cải tạo lại ô nhớ đối tƣợng rác, chƣơng trình chạy sử dụng ô nhớ này) Tuy nhiên, số ngôn ngữ lập trình truyền thống, đƣợc sử dụng phổ biến thực tế nhƣ C, C++ vấn đề quản lý nhớ đƣợc đặt hoàn toàn vào lập trình viên [6] Lập trình viên tự động cấp phát nhớ, nhƣng khối không cần thiết, họ cần phải trả lại cho hệ thống lời gọi hàm hệ thống nhƣ free() Hậu ngƣời lập trình quên hoàn trả vùng cấp phát cho nhớ lại tiếp tục dùng lệnh cấp phát, lúc nhiều phần nhớ bị chiếm chỗ Điều dẫn tới lỗi liên quan tới nhớ, đặc biệt khối nhớ khởi tạo tự động trỏ hay mắc lỗi rò rỉ nhớ (memory leak) Quản lý nhớ quan trọng có nhiều khía cạnh nghiên cứu Các kỹ thuật thu dọn rác hƣớng tiếp cận vấn đề Mục tiêu luận văn tìm hiểu kỹ thuật phân tích chƣơng trình tĩnh, cập nhật xu hƣớng nghiên cứu nƣớc lĩnh vực phân tích chƣơng trình tĩnh, cải tiến kỹ thuật Cụ thể, luận văn tập trung vào hƣớng tiếp cận tìm hiểu kỹ thuật phân tích hình dạng nhớ heap chƣơng trình Kết kỹ thuật áp dụng khâu loại bỏ đối tƣợng rác Kỹ thuật dựa lý thuyết ngữ nghĩa chƣơng trình theo trỏ Lý thuyết giàn, ngữ nghĩa điểm cố định đƣợc sử dụng nhƣ tảng kỹ thuật Luận văn có cấu trúc nhƣ sau: Chƣơng giới thiệu tổng quan phân tích chƣơng trình tĩnh Trong chƣơng trình bày định nghĩa kỹ thuật phân tích chƣơng trình tĩnh, ứng dụng, điểm mạnh điểm yếu kỹ thuật Tiếp luận văn trình bày vài kỹ thuật phân tích chƣơng trình tĩnh phổ biến nay, toán kỹ thuật mà luận văn thực tìm hiểu Chƣơng trình bày tảng ngữ nghĩa chƣơng trình Chƣơng trình bày kỹ thuật phân tích hình dạng nhớ heap Đƣa toán, cách giải đánh giá Chƣơng thực nghiệm với công cụ Valgrind Cuối phần kết luận tài liệu tham khảo 48 TÀI LIỆU THAM KHẢO [1] Buytaert D, Venstermans K, Eeckhout L, BosschereK D, Garbage Collection Hints ELIS Department, Ghent University – HiPEAC Member, St.-Pietersnieuwstraat 41, B-9000 Gent, Belgium [2] Cousot P (2001), Abstract interpretation based formal methods and futurechallenges, Lecture Notes in Computer Science 2000, (138–170) [3] Cousot P Abstract Interpretation Web page maintained by P Cousot, 2008 [4] Cousot P Constructive Design of a Hierarchy of Semantics of a Transition System by Abstract Interpretation In Electronic Notes in Theoretical Computer Science, Volume 6, 1997 [5] Clarke E.M, Grumberg O, Peled D.A (1999), Model Checking The MIT Press [6] Jon Rafkind, Adam Wick, John Regehr, Matthew Flatt Precise Garbage Collection for C [7] Julian Seward, Nicholas Nethercote Using Valgrind to detect undefined value errors with bit-precision [8] Nielson F., Nielson H.R., Hankin C (2004), Principles of Program Analysis, Springer [9] Rice H.G (1953), Classes of recursively enumerable sets and their decisionproblems, Transactions of American Math Society 74, (358-366) [10] Schwartzbach M.I (2008), Lecture notes on static analysis Technical report, BRICS, Dept of Computer Science - University of Aarhus [11] Sagiv M, Reps T, and Wilhelm R Parametric shape analysis via 3-valued logic ACM Transactions on Programming Languages and Systems (TOPLAS), 24(3):217–298, 2002 [12] Thomas Reps, Mooly Sagiv, Reinhard Wilhelm, Static Program Analysis via 3-Valued Logic* [13] http://valgrind.org/ [14] Wogerer W (2005), A Survey of Static Program Analysis Techniques, Technische Universitat Wien [...]... Science, Volume 6, 1997 [5] Clarke E.M, Grumberg O, Peled D.A (1999), Model Checking The MIT Press [6] Jon Rafkind, Adam Wick, John Regehr, Matthew Flatt Precise Garbage Collection for C [7] Julian Seward, Nicholas Nethercote Using Valgrind to detect undefined value errors with bit-precision [8] Nielson F., Nielson H.R., Hankin C (2004), Principles of Program Analysis, Springer [9] Rice H.G (1953), Classes