1. Trang chủ
  2. » Thể loại khác

Thuật toán nén tệp thực thi BDC và ứng dụng

79 282 0

Đ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

Thông tin cơ bản

Định dạng
Số trang 79
Dung lượng 1,47 MB

Nội dung

i ĐẠI HỌC THÁI NGUYÊN TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN & TRUYỀN THÔNG NGUYỄN HỮU HIẾU THUẬT TOÁN NÉN TỆP THỰC THI BDC ỨNG DỤNG LUẬN VĂN THẠC SỸ KHOA HỌC MÁY TÍNH Thái Nguyên - 2016 Số hóa Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn ii ĐẠI HỌC THÁI NGUYÊN TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN & TRUYỀN THÔNG NGUYỄN HỮU HIẾU THUẬT TOÁN NÉN TỆP THỰC THI BDC ỨNG DỤNG Chuyên ngành: Khoa học máy tính Mã số: 60480101 LUẬN VĂN THẠC SỸ KHOA HỌC MÁY TÍNH NGƯỜI HƯỚNG DẪN KHOA HỌC PGS.TS NGUYỄN VĂN TAM Thái Nguyên – 2016 Số hóa Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn i LỜI CAM ĐOAN Tôi xin cam đoan rằng: Số lượng kết nghiên cứu luận văn hoàn toàn trung thực chưa sử dụng công bố công trình khác Mọi giúp đỡ cho việc thực luận văn cảm ơn thông tin trích dẫn luận văn ghi rõ nguồn gốc Tác giả luận văn Nguyễn Hữu Hiếu Số hóa Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn ii LỜI CẢM ƠN Lời học viên xin gửi lời cảm ơn trân thành tới Thầy, Cô giáo trường Đại học Công nghệ thông tin Truyền thông, Đại học Thái Nguyên, thầy cô tận tình dạy bảo, truyền đạt kiến thức quý báu cho học viên suốt trình học tập Xin trân trọng cảm ơn Khoa, Phòng, Ban cán tạo điều kiện tốt cho học viên học tập hoàn thành đề tài tốt nghiệp Đặc biệt, học viên xin gửi lời cảm ơn sâu sắc đến Thầy giáo hướng dẫn học viên PGS TS Nguyễn Văn Tam, Thầy tận tình bảo giúp đỡ học viên suốt trình nghiên cứu để hoàn thành luận văn Cuối học viên xin gửi lời cảm ơn gia đình, bạn bè, đồng nghiệp giúp đỡ, động viên ủng hộ học viên nhiều toàn trình học tập nghiên cứu để hoàn thành luận văn Trân trọng cảm ơn! Số hóa Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn iii MỤC LỤC MỞ ĐẦU 1 Đặt vấn đề Đối tượng phạm vi nghiên cứu: Ý nghĩa khoa học, thực tiễn đề tài: Phương pháp nghiên cứu: Bố cục luận văn: CHƯƠNG I GIỚI THIỆU CHUNG VỀ MỘT SỐ CÔNG NGHỆ NÉN 1.1 Tầm quan trọng nén liệu truyền tin 1.2 Nguyên tắc nén liệu 1.3 Một số phương pháp nén liệu 1.3.1 Phương pháp mã hóa độ dài loạt (Run - Length Encoding) 1.3.2 Phương pháp mã hóa Huffman 1.3.3 Phương pháp nén LZW 1.3.4 Chọn phương pháp nén 15 Kết luận: 16 CHƯƠNG 17 CÔNG NGHỆ NÉN DELTA 17 2.1 Giới thiệu công nghệ nén Delta 17 2.1.1 Khái niệm nén 17 2.1.2 Bộ nén Delta 18 2.1.3 Tính hiệu 18 2.2 Nền tảng 19 2.2.1 Nền tảng chung 19 2.2.2 Bộ nén LZ77- Nền tảng nén Delta 21 Số hóa Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn iv 2.3 Thuật toán nén Delta 24 2.3.1 Nguyên lý thuật toán nén Delta 24 2.3.2 Giới thiệu 25 2.3.3 Đặt vấn đề 27 2.3.4 Những nghiên cứu 28 2.3.5 Thuật toán 30 2.3.6 Sự cải tiến độ phức tạp thuật toán 35 2.3.7 Xây dựng lại xâu đích 37 2.4 Giải pháp nén Delta dựa chữ ký 38 2.4.1 Thuật toán nén Delta dựa chữ ký 38 2.4.2 Đánh giá thuật toán qua thực thi rsync 40 2.5 Một số ứng dụng thuật toán nén Delta 41 Kết luận: 44 CHƯƠNG 45 CHƯƠNG TRÌNH THỬ NGHIỆM 45 3.1 Bộ công cụ mã nguồn mở cho giải thuật nén Delta 45 3.1.1 Thư viện nén Delta: librsync 45 3.1.2 Hàm thư viện: rdiff 46 3.2 Xây dựng chương trình thử nghiệm 50 3.2.1 Mô hình thử nghiệm 50 3.2.2 Xây dựng chương trình 51 3.2.2.1 Module chương trình máy chủ 51 3.2.2.2 Module chương trình máy khách 53 3.2.3 Kịch thử nghiệm đánh giá 54 Kết luận: 55 KẾT LUẬN HƯỚNG PHÁT TRIỂN 56 A Kết luận: 56 Số hóa Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn v B Hướng phát triển 56 TÀI LIỆU THAM KHẢO 58 PHỤ LỤC 59 Số hóa Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn vi DANH MỤC CÁC KÝ HIỆU, CÁC CHỮ VIẾT TẮT Từ viết tắt Tiếng anh API Application Programming Interface BDC Binary Delta Compression COM Component Object Model DOS Disk Operating System HTTP Hyper Text Transfer Protocol LCS Longgest common Subsequence LZW Lempel-Zip- Welch MD5 Message Digest Algorithm QAM Quadrature Amplitude Modulation Số hóa Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn vii DANH MỤC CÁC BẢNG Bảng 1.1 Mô tả trường hợp xuất ký hiệu nén Bảng 1.2 Mô tả thông tin với mã Huffman Bảng 2.1 Các kết nén cho liệu gcc emacs 24 Bảng 2.2 kết nén cho gcc emacs liệu KB 41 Bảng 2.3 Kết nén cho emacs với kích thước block khác KB 41 Bảng 3.1 Tên tệp kích thước thử nghiệm chương trình 69 Số hóa Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn viii DANH MỤC CÁC HÌNH VẼ Hình 1.1 Phương pháp nén RLE(1) Hình 1.2 Phương pháp nén RLE(2) Hình 1.3 Mã hóa Huffman Hình 1.4 Mã hóa Huffman ngược Hình 2.1 Bộ nén liệu thông thường 17 Hình 2.2 Bộ nén Delta 18 Hình 2.3 Mô hình cập nhật Windows 43 Hình 3.1 Lưu đồ thuật toán cho thư viện hàm rdiff_sig 47 Hình 3.2 Lưu đồ thuật toán cho thư viện hàm rdiff_Delta 48 Hình 3.3 Lưu đồ thuật toán cho thư viện hàm rdiff_patch 49 Hình 3.4 Mô hình thử nghiệm 50 Hình 3.5 Chương trình server 51 Hình 3.6 Tạo tệp chữ ký bên máy chủ 52 Hình 3.7 Tạo tệp bên máy chủ 52 Hình 3.8 Tạo Delta tệp cũ bên chương trình máy chủ 53 Hình 3.9 Chương trình dành cho máy khách 53 Hình 3.10 Tạo tệp cập nhật bên máy khách 54 Hình 3.11 Sự đối lập kích thước nén tập tin giống tập tin 68 Hình 3.12 Sự đối lập thời gian thực giống tập tin 69 Số hóa Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn 55 - Tại máy chủ phát sinh tệp Makefile.am.in.new có dung lượng 3.1 KB - Trên máy chủ tạo tệp delta Makefile.am.in.del có dung lượng 1.1 KB - Máy chủ truyền tệp Makefile.am.in.del cho máy khách - Máy khách tạo tệp Makefile.am.in.pat từ tệp Makefile.am.in Makefile.am.in.del - So sánh tệp Makefile.am.in.new máy chủ tệp Makefile.am.in.pat máy khách cho nội dung tệp kích thước tệp giống 3,1 KB Tuy nhiên, tệp phải truyền qua mạng tệp Makefile.am.in.del có 1,1 KB Tỷ lệ nén 281% Ngoài học viên thử nghiệm thêm số tệp chương trình ví dụ 2, phụ lục phần III thử nghiệm số tệp aodv.cc.in; aodv.cc.in.new; aodv.cc.in.sig; aodv.cc.in.del; aodv.cc.in.pat Với kích thước bảng 3.1 phần phụ lục III Kết cho tỷ lệ nén 1780% Trên mô hình thử nghiệm chương trình luận văn hoàn chỉnh đưa vào áp dụng cho việc cập nhật phầm mềm ứng dụng quan, doanh nghiệp Kết luận: Qua đánh giá thực nghiệm chương trình luận văn ta thấy phương pháp nén Delta phương pháp nén cho kết tốt Tùy theo chương trình gói phần mềm, hay tệp thực thi lớn hay nhỏ làm theo phương pháp nén Delta giúp giảm dung lượng đáng kể trước truyền qua mạng Giúp giảm lưu lượng đường truyền môi trường mạng Kích thước dung lượng tập tin nhỏ đáng kể so với dung lượng ban đầu trước truyền Ngoài nghiên cứu luận văn học viên lấy thêm ví dụ thí nghiệm công nghệ nén mà kết cho tốt Học viên trình bày phụ lục phần Số hóa Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn 56 KẾT LUẬN HƯỚNG PHÁT TRIỂN A Kết luận: Qua trình hoàn thành luân văn, học viên thu kết sau: - Tìm hiểu nguyên lý chung thuật toán nén giới thiệu số phương pháp nén liệu như: phương pháp mã hoá độ dài loạt, phương pháp mã hoá Huffman, phương pháp nén LZW - Nghiên cứu thuật toán nén BDC (DELTA) Học viên phân tích thuật toán, tìm hiểu trình phát triển hoàn thiện thuật toán, phân tích đánh giá thuật toán qua nghiên cứu tác giả trước Trên sở đó, học viên nhận thấy thuật toán DELTA đựa chữ ký có ứng dụng hiệu mạng nên lựa chọn để xây dựng toán thử nghiệm - Dựa kiến thức thu từ nghiên cứu lý thuyết, học viện tìm hiểu công cụ Librsync xây dựng module chương trình nén thử nghiệm chạy máy chủ máy khách phục vụ cập nhật phần mềm qua mạng B Hướng phát triển Hoàn thành luận văn với kết đạt tương đối theo yêu cầu đề tài đưa Tuy nhiên có điều kiện nghiên cứu sâu học viên mở rộng chương trình thử nghiệm thử nghiệm với nhiều tệp Học viên nhận thấy nhiều vấn đề liên quan cần tìm hiểu nghiên cứu thêm Học viên xin đưa số khả ứng dụng đề tài sau:  Trong nghiên cứu khoa học Cải tiến nâng cao hiệu năng, giải trường hợp phiên gốc máy cần cập nhật khác mục tiêu  Trong quản trị mạng Số hóa Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn 57 Khi có nhiều phần mềm nghiệp vụ cần cập nhật thời điểm, cần phải tạo nhiều tương ứng Nếu có cách tập trung xử lý tất thành nhất, giảm tối thiểu tối đa thao tác dung lượng tối thiểu tệp truyền qua mạng Số hóa Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn 58 TÀI LIỆU THAM KHẢO Tiếng Việt [1] Nguyễn Thị Hương (2009), "Công nghệ nén Delta", Luận văn thạc sĩ, Trường Đại học Công nghệ, Hà Nội Tiếng Anh [2] G Navarro, R Baeza-Yates, E Sutinen, J Tarhio (2001), “Indexing methods for approximate string matching”, IEEE Data Eng Bull (24) [3] J.Hunt, K.P Vo, and W.Tich (1992), “Delta algorithms: An empirical analysis” ACM Transactions on Computers [4] J.Ziv and A.Lempel (1997), ”A universal algorithm for data compression” IEEE Transactions on Information Theory [5] Ramesh C.Agarwal, Suchitra Amalapurapu (2001), “An approximation to the Greedy Algorithm for Differential Compression of Very Large Files” [6] R.A Baeza-Yates, G Navarro (2000), “A faster algorithm for approximate string matching”, Proc Seventh Ann Symp on Combinatorial Pattern [7] R.A Wagner and M.J.Fisher (2002), “The string – to – string correction problem” J.ACM, 168-173 11 R Grossi, J.S Vitter (1996), “Compressed suffix arrays and suffix trees with applications to text indexing and string matching”, [8] A Cobbs (1995), “Fast approximate matching using suffix trees”, Combinatorial Pattern Matching [9] https://msdn.microsoft.com/en-us/library/bb417345.aspx [10] Torsten Suel, Nasir Memon, " Algorithms for Delta Compression and Remote File Synchronization", CIS Department Polytechnic University Brooklyn, NY 11201 Số hóa Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn 59 PHỤ LỤC Trong luận văn em có sử dụng chương trình lập trình C ngôn ngữ lập trình shell Ubuntu để mô tả vào code thuật toán cho hàm rdiff thuật toán nén Delta dựa chữ ký xây dựng chương trình máy chủ, máy khách cho luận văn Phần I Chương trình cho hàm rdiff dựa chữ ký: Khai báo chương trình đầu cho hàm rdiff #include #include #include #include #include #ifdef HAVE_ZLIB_H #include #endif #ifdef HAVE_BZLIB_H #include #endif #include "librsync.h" #include "fileutil.h" #include "util.h" Số hóa Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn 60 #include "trace.h" #include "isprefix.h" #include "snprintf.h" #define PROGRAM "rdiff" static size_t block_len = RS_DEFAULT_BLOCK_LEN; static size_t strong_len = RS_DEFAULT_STRONG_LEN; static int show_stats = 0; static int bzip2_level = 0; static int gzip_level = 0; enum { OPT_GZIP = 1069, OPT_BZIP2 }; extern int rs_roll_paranoia; const struct poptOption opts[] = { { "verbose", 'v', POPT_ARG_NONE, 0, 'v' }, { "version", 'V', POPT_ARG_NONE, 0, 'V' }, { "input-size", 'I', POPT_ARG_INT, &rs_inbuflen }, { "output-size", 'O', POPT_ARG_INT, &rs_outbuflen }, { "help", { 0, '?', POPT_ARG_NONE, 0, 'h', POPT_ARG_NONE, 0, 'h' }, 'h' }, { "block-size", 'b', POPT_ARG_INT, &block_len }, { "sum-size", 'S', POPT_ARG_INT, &strong_len }, Số hóa Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn 61 { "statistics", 's', POPT_ARG_NONE, &show_stats }, { "stats", 0, POPT_ARG_NONE, &show_stats }, { "gzip", 0, POPT_ARG_NONE, 0, OPT_GZIP }, { "bzip2", 0, POPT_ARG_NONE, 0, OPT_BZIP2 }, { "paranoia", 0, POPT_ARG_NONE, &rs_roll_paranoia }, {0} }; Code chương trình cho hàm rdiff cho chế độ chữ ký (signature) static rs_result rdiff_sig(poptContext opcon) { FILE *basis_file, *sig_file; rs_stats_t stats; rs_result result; basis_file = rs_file_open(poptGetArg(opcon), "rb"); sig_file = rs_file_open(poptGetArg(opcon), "wb"); rdiff_no_more_args(opcon); result = rs_sig_file(basis_file, sig_file, block_len, strong_len, &stats); rs_file_close(sig_file); rs_file_close(basis_file); if (result != RS_DONE) return result; if (show_stats) rs_log_stats(&stats); return result; } Số hóa Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn 62 Chương trình hàm rdiff cho chế độ delta static rs_result rdiff_delta(poptContext opcon) { FILE *sig_file, *new_file, *delta_file; char const rs_result *sig_name; result; rs_signature_t *sumset; rs_stats_t stats; if (!(sig_name = poptGetArg(opcon))) { rdiff_usage("Usage for delta: " "rdiff [OPTIONS] delta SIGNATURE [NEWFILE [DELTA]]"); return RS_SYNTAX_ERROR; } sig_file = rs_file_open(sig_name, "rb"); new_file = rs_file_open(poptGetArg(opcon), "rb"); delta_file = rs_file_open(poptGetArg(opcon), "wb"); rdiff_no_more_args(opcon); result = rs_loadsig_file(sig_file, &sumset, &stats); if (result != RS_DONE) return result; if (show_stats) rs_log_stats(&stats); if ((result = rs_build_hash_table(sumset)) != RS_DONE) return result; result = rs_delta_file(sumset, new_file, delta_file, &stats); rs_free_sumset(sumset); rs_file_close(delta_file); Số hóa Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn 63 rs_file_close(new_file); rs_file_close(sig_file); if (show_stats) rs_log_stats(&stats); return result; } Chương trình hàm rdiff cho chế độ patch static rs_result rdiff_patch(poptContext opcon) { /* patch BASIS [DELTA [NEWFILE]] */ FILE *basis_file, *delta_file, *new_file; char const *basis_name; rs_stats_t stats; rs_result result; if (!(basis_name = poptGetArg(opcon))) { rdiff_usage("Usage for patch: " "rdiff [OPTIONS] patch BASIS [DELTA [NEW]]"); return RS_SYNTAX_ERROR; } basis_file = rs_file_open(basis_name, "rb"); delta_file = rs_file_open(poptGetArg(opcon), "rb"); new_file = rs_file_open(poptGetArg(opcon), "wb"); rdiff_no_more_args(opcon); result = rs_patch_file(basis_file, delta_file, new_file, &stats); rs_file_close(new_file); rs_file_close(delta_file); rs_file_close(basis_file); Số hóa Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn 64 if (show_stats) rs_log_stats(&stats); return result; } Phần II Code chương trình dành cho server #!/bin/bash # set an infinite loop while : clear # display menu echo "Chuong trinh tren Server - Nguyen Huu Hieu" echo " -" echo " M A I N - M E N U" echo " -" echo "1 Tao chu ky cua Tep." echo "2 Tao Tep moi." echo "3 Tao Delta giua Tep cu va Tep moi." echo "4 Xoa Tep va Thoat" echo "5 Thoat" # get input from the user read -p "Chon mot cac so [ -5 ] " choice # make decision using case in esac case $choice in 1) Số hóa Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn 65 # echo "Today is $(date)" /sig_test read -p "An [Enter] de tiep tuc " readEnterKey ;; 2) #w /create_new read -p "An [Enter] de tiep tuc " readEnterKey ;; 3) # netstat -nat /del_test read -p "An [Enter] de tiep tuc " readEnterKey ;; 4) /exit_test echo "Bye!" exit ;; 5) echo "Bye!" exit ;; *) Số hóa Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn 66 echo "Error: Invalid option " read -p "An [Enter] de tiep tuc " readEnterKey ;; esac done Code chương trình dành cho client #!/bin/bash # set an infinite loop while : clear # display menu echo "Chuong trinh may khach - Nguyen Huu Hieu" echo " -" echo " M A I N - M E N U" echo " -" echo "1 Tao Tep cap nhat." echo "2 Xoa Tep va Thoat" echo "3 Thoat" # get input from the user read -p "Chon mot cac so [ -3 ] " choice # make decision using case in esac case $choice in 1) # echo "Today is $(date)" Số hóa Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn 67 /pat_test read -p "An [Enter] de tiep tuc " readEnterKey ;; 2) /exit_test_c echo "Bye!" exit ;; 3) echo "Bye!" exit ;; *) echo "Error: Invalid option " read -p "An [Enter] de tiep tuc " readEnterKey ;; esac done Số hóa Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn 68 Phần III Qua trình nghiên cứu hoàn thành luận văn Đã có nhiều nghiên cứu thuật toán nén tệp thực thi Học viên xin nêu thí nghiệm[10] vài ví dụ kết thí nghiệm công cụ nén Ví dụ 1: Trong kết này, so sánh với xdelta, vcdiff, zdelta hai tập tin khác Một tập tin giả định tạo nhằm mô tả tương tự hai tập tin Cụ thể, tạo hai tập tin ngẫu nhiên f0 f1 có độ dài cố định, sau thực nén Delta f0 tập tin fm khác tạo pha trộn cách copy text từ f0 f1 theo tiến trình Markov đơn giản Bằng cách biến đổi tham số tiến trình, tạo tập tin fm với dãy tương tự từ (fm =f1) đến (fm = f0) Hình 3.11 Sự đối lập kích thước nén tập tin giống tập tin Số hóa Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn 69 Hình 3.12 Sự đối lập thời gian thực giống tập tin Từ hai hình vẽ trên: nén Delta cho ta kết đáng kể gcc emacs liệu, số không nén gzip với phiên Qua gzip tập tin, đặc biệt cho tập tin gcc giống Theo phương pháp nén Delta zdelta tỷ lệ nén tốt Ví dụ 2: Từ chương trình luận văn ta xét thêm tệp tin sau: Bảng 3.1 Tên tệp kích thước thử nghiệm chương trình Tên tệp Độ dài aodv.cc.in 35.6 kB aodv.cc.in.new 37.6 kB aodv.cc.in.sig 228 Byte aodv.cc.in.del 2.0 kB aodv.cc.in.pat 37.6kB Qua trình thử nghiệm tệp Tỷ lệ nén 1780% Số hóa Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn ... tài: - Ý nghĩa khoa học: Hiểu ứng dụng Thuật toán nén tệp thực thi BDC (Binary Delta Compression) ứng dụng với truyền tệp tin qua mạng máy tính - Ý nghĩa thực tiễn: Vận dụng phương pháp nghiên cứu... mạng, thuật toán nén tệp thực thi (Binary Delta Compression) Kết hoàn thi n, triển khai ứng dụng thực tiễn Phương pháp nghiên cứu: - Nghiên cứu kết công bố lĩnh vực nén tệp thực thi truyền tin... trình bày ứng dụng phương pháp nén việc cập nhật nâng cấp phần mềm Do đó, ho ̣c viên lựa cho ̣n đề tài luâ ̣n văn Tha ̣c sỹ “ Thuật toán nén tệp thực thi BDC ứng dụng Đối tượng phạm vi nghiên

Ngày đăng: 23/06/2017, 22:20

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN