1. Trang chủ
  2. » Luận Văn - Báo Cáo

xây dựng hệ thống giải bài toán smt hiệu năng cao – phần máy chủ

48 796 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 48
Dung lượng 411,41 KB

Nội dung

Dựa trên những ưu điểm của các Solver, chúng ta xây dựng một hệ thống có cơ chế kết nối các ưu điểm đó của Solver để có thể tìm ra được kết quả cho bài toán SMT một cách nhanh chóng.. Th

Trang 1

ĐẠI HỌC QUỐC GIA HÀ NỘI TRƯỜNG ĐẠI HỌC CÔNG NGHỆ

Đỗ Ngọc Thiện

XÂY DỰNG HỆ THỐNG GIẢI BÀI TOÁN SMT

HIỆU NĂNG CAO – PHẦN MÁY CHỦ

KHOÁ LUẬN TỐT NGHIỆP ĐẠI HỌC HỆ CHÍNH QUY

Ngành: Công Nghệ Thông Tin

Cán bộ hướng dẫn: TS Trương Anh Hoàng

Cán bộ đồng hướng dẫn: TS Phạm Ngọc Hùng

Trang 2

Xây dựng hệ thống giải bài toán SMT hiệu năng cao – Phần máy chủ 2010

LỜI CẢM ƠN

Trước tiên, tôi xin gửi lời cảm ơn và lòng biết ơn sâu sắc đến Tiến sĩ Trương Anh Hoàng và Tiến sĩ Phạm Ngọc Hùng, những người đã tận tình chỉ bảo, hướng dẫn tôi

trong suốt quá trình thực hiện khoá luận tốt nghiệp

Tôi xin bày tỏ lời cảm ơn sâu sắc đến các thầy cô giáo đã giảng dạy tôi trong suốt

bốn năm học qua, đã cho tôi nhiều kiến thức quý báu để tôi vững bước trên con đường học tập của mình

Tôi xin gửi lời cảm ơn chân thành tới các anh chị cao học, các bạn trong nhóm tìm hiểu bài toán SMT và tìm hiểu cách xây dựng hệ thống giải quyết bài toán SMT

hiệu năng cao đã nhiệt tình giúp đỡ tôi trong quá trình tham gia nghiên cứu khoa học và làm khoá luận tốt nghiệp

Tôi xin gửi lời cảm ơn tới các bạn trong lớp K51CB và K51CNPM đã ủng hộ

khuyến khích tôi trong suốt quá trình học tập tại trường

Và cuối cùng, tôi xin bày tỏ niềm biết ơn vô hạn tới bố mẹ và những người bạn thân luôn bên cạnh, động viên tôi trong suốt quá trình thực hiện khoá luận tốt nghiệp.

Hà Nội, ngày 13 tháng 05 năm 2010

Sinh Viên

Đỗ Ngọc Thiện

Trang 3

Xây dựng hệ thống giải bài toán SMT hiệu năng cao – Phần máy chủ 2010

TÓM TẮT NỘI DUNG

Việc giải quyết các bài toán Satisfiability Modulo Theories (SMT) được nghiên cứu rất nhiều trên khắp thế giới Hiện nay, trên thế giới đã có rất nhiều bộ giải quyết các bài toán (hay còn gọi là Solver) SMT từ một tệp SMT đã được xây dựng trên thế giới, trong

đó phải kể đến CVC3, Z3, Yieces, IASolver, SatSolver,… Và mỗi Solver đó đều có những đặc trưng và thế mạnh riêng trong mỗi trường hợp của bài toán SMT Trong nhiều năm qua, bài toán giải quyết bài toán SMT hiệu năng cao đã được xây dựng, đặc biệt nó là đề tài tìm hiểu, nghiên cứu của rất nhiều trường đại học của các nước trên thế giới Do vậy, việc xây dựng bước đầu của hệ thống giải quyết bài toán SMT hiệu năng cao là điều quan trọng để những người phát triển khác về sau có thể nâng cấp, phát triển hệ thống tốt hơn Dựa trên những ưu điểm của các Solver, chúng ta xây dựng một hệ thống có cơ chế kết nối các ưu điểm đó của Solver để có thể tìm ra được kết quả cho bài toán SMT một cách nhanh chóng

Trong khóa luận tốt nghiệp này, một hệ thống giải quyết bài toán SMT hiệu năng cao mã nguồn mở được bước đầu được xây dựng nên Hi vọng, cùng với những người phát triển khác sau này của hệ thống, trường ta sẽ có một hệ thống giải quyết bài toán SMT tốt hơn, mang tên trường Đại Học Công Nghệ

Trang 4

Xây dựng hệ thống giải bài toán SMT hiệu năng cao – Phần máy chủ 2010

MỤC LỤC

Trang 5

Xây dựng hệ thống giải bài toán SMT hiệu năng cao – Phần máy chủ 2010

BẢNG KÍ HIỆU, CHỮ VIẾT TẮT

Timeout Thời gian tối đa để giải bài toán SMT

Trang 6

Xây dựng hệ thống giải bài toán SMT hiệu năng cao – Phần máy chủ 2010

DANH MỤC CÁC BẢNG SỬ DỤNG

Trang 7

Xây dựng hệ thống giải bài toán SMT hiệu năng cao – Phần máy chủ 2010

DANH MỤC CÁC HÌNH VẼ, BIỂU ĐỒ SỬ DỤNG

Trang 8

CHƯƠNG 1 MỞ ĐẦU1.1 Giới thiệu

Các bài toán lý thuyết mô đun về tính thỏa được (Satisfiability Modulo Theories – SMT) luôn được quan tâm và tìm hiểu trên khắp thế giới trong nhiều năm qua Việc giải các bài toán SMT đó là việc kiểm tra tính thỏa được của các biểu thức logic dựa trên các thuyết nền tảng Các bộ giải quyết bài toán SMT đã được xây dựng rất nhiều quốc gia từ rất sớm, khoảng đầu những năm 1980 Từ đó đến nay, chúng ta đã xây dựng được rất nhiều bộ giải quyết khác nhau Trong các bộ Solver đã được xậy dựng, ta phải kể đến các

Solver như : CVC, CVC Lite, ICS (SRI), MathSAT, STP, UCLID, Yices (SRI), Zap

(Microsoft), Z3 (Microsoft),…

Hiện tại, nhiều trường đại học nổi tiếng đã nghiên cứu và xây dựng nên các hệ thống

để giải quyệt bài toán SMT Điều chúng ta cần ở hệ thống giải quyết bài toán SMT đó là vấn đề hiệu năng, thời gian trả lời kết quả của bài toán Thách thức của chúng ta ở đây là xây dựng một hệ thống kết hợp các bộ giải toán SMT để tận dụng các ưu điểm của các Solver, giải quyết bài toán SMT nhanh chóng [1]

1.2 Phát biểu bài toán giải quyết bài toán SMT hiệu năng cao– phía máy chủ

Mỗi Solver đều có một thế mạnh cho riêng trong từng dạng của bài toán SMT Để đem lại cho người dùng kết quả của bài toán SMT nhanh chóng và chính xác, ta cần xây dựng một hệ thống cho phép tận dụng tối ưu các thế mạnh của các Solver Hệ thống dự kiến bao gồm 3 phần chính đó là: phần máy chủ (còn gọi là Server), Solver, và phần người sử dụng Khi phần thực thi các Solver và User được xây dựng, ta cần phải xây dựng phần Server cho phép chuyển giao bài toán từ phía User đến các Solver, và chuyển kết quả từ Solver về cho người dùng Đồng thời, ngắt việc thực thi các bài toán SMT ở các Solver khác sau khi nhận được kết quả nhanh nhất từ Solver Việc xử lý chuyển giao bài toán và kết quả của Solver phải được thực hiện song song và phải có cơ chế sao cho phục

vụ người dùng một cách hiệu quả nhất Kết quả từ các Solver được biểu diễn theo cách đặc trưng của Solver đó, chúng ta cần chuyển đổi chúng về một dạng để người dùng có

Trang 9

thể dễ hiểu hơn Việc xây dựng Solver cũng phải rõ ràng, dễ hiểu để người phát triển hệ thống tiếp theo có thể nâng cấp hệ thống một cách dễ dàng, hiệu quả.

1.3 Kết quả đã đạt được

Hệ thống giải bài toán SMT hiệu năng cao theo như trong trình bày luận văn đã được xây dựng và bước đầu cho kết quả khá tốt ở các bài toán đưa ra Hiện tại, hệ thống đang sử dụng 2 Solver đó là Z3 và Yieces và hỗ trợ 2 cách nhập bài toán SMT đó là bằng file hoặc sử dụng API Hệ thống cho thấy thời gian giải bài toán SMT là tương đương với thời gian nhanh nhất giải bài toán đó của 2 Solver Tuy vậy, hệ thống còn chưa hỗ trợ được nhiều Solver và mới chỉ duy nhất hỗ trợ một định dạng file “.smt”

1.4 Các nội dung chính của luận văn

Bài luận văn “Xây dựng hệ thống giải bài toán SMT hiệu năng cao – Phần máy chủ” bao gồm 7 chương:

- Ở chương 1, chương mở đầu của luận văn, chúng ta sẽ bước đầu biết đến SMT,hiểu được bài toán đặt ra cho hệ thống giải bài toán SMT hiệu năng cao và các kết quả đã đạt được của việc xây dựng hệ thống

- Ở chương 2, giới thiệu về SMT, SMT Solver trình bày về SMT và SMT Solver, các ứng dụng của việc giải bài toán SMT

- Ở chương 3, phân tích hệ thống và hướng giải quyết, chương này mô tả các thành phần của hệ thống giải bài toán SMT hiệu năng cao, các yêu cầu của người sử dụng Đồng thời

ta cũng nắm bắt được các lựa chọn để xây dựng nên hệ thống, cơ chế hoạt động của hệ thống

- Ở chương 4, thiết kế tổng thể của hệ thống, chương 4 cho ta nắm bắt được các thành phần, cách hoạt động mà mối quan hệ giữa các thành phần của hệ thống thông qua biểu

đồ ca sử dụng và biểu đồ hoạt động của hệ thống

- Ở chương 5, thiết kế chi tiết server, chương này trình bày về các lớp xây dựng nên Server

và cách xây dựng các lớp đó

- Ở chương 6, cài đạt và thực nghiệm, chương này trình bày về cách thức cài đặt, thực thi

hệ thống và những yêu cầu của hệ thống về môi trường phần cứng phần mềm Chương 6 cũng đưa ra bài toán thực nghiệm của hệ thống và đánh giá kết quả thực nghiệm của hệ thống

Trang 10

- Ở chương 7, kết luận, chương này trình bày về kết luận của việc xây dựng hệ thống giải bài toán SMT hiệu năng cao và các hướng phát triển tiếp theo của hệ thống.

CHƯƠNG 2 GIỚI THIỆU VỀ SMT, SMT SOLVER2.1 Giới thiệu về SMT

SMT là viết tắt của Satisfiability Modulo Theories - các lý thuyết mô đun về tính thỏa được, là một tập hợp của các phương pháp nghiên cứu tự động kiểm tra tính thỏa mãn của các biểu thức tiền tố với nền tảng một số thuyết “T” nào đó

Điều khác biệt giữa SMT và các hệ thống tự động suy luận thông thường đó là sử dụng thuyết nên tảng được gọi là các lý thuyết mô đun về tính thỏa được và sử dụng các phương pháp suy luận đặc trưng của thuyết đó Bằng cách sử dụng sự đặc trưng và giới hạn của ngôn ngữ để giải quyết các biểu thức, các phương thức đặc biệt được thực thi trong các Solver đem lại hiệu quả cao hơn trong thực tế so với các định lý toán học với mục đích thông thường

Trong khi, kĩ thuật SMT trong truyền thống chỉ dùng để hỗ trợ kiểm tra các phần mềm suy diễn thì ngày nay chúng được tìm thấy ở một số ứng dụng khác trong khoa học máy tính chẳng hạn như: lập kế hoạch, kiểm tra các mô hình và tự động tạo ra các mẫu kiểm tra Thông thường, các thuyết hay được quan tâm là các thuyết về biểu thức, số học, bit vector, kiểu dữ liệu đại số… [2] [3]

Thông thường, các bài toán SMT thường được biểu diễn theo quy tắc chuẩn SMT,

và được lưu ra tệp để cho các Solver thực hiện giải bài toán

2.2 Giới thiệu về SMT Solver

Các bộ giải quyết bài toán SMT (SMT Solver) dùng để giải các bài toán SMT đã được xây dựng và phát triển từ rất lâu Những bộ SMT Solver đầu tiên được xây dựng từ những năm 1980 Cho đến ngày nay, số lượng Solver đã được xây dựng đã lên đến hàng chục Solver, có thể kể đến : ArgoLib, Ario, Barcelogic, CVC, CVC Lite, CVC3, ExtSAT, Fx7, Harvey, HTP, ICS (SRI), Jat, MathSAT, Sateen, Simplify, Spear, STeP, STP, SVC, TSAT, UCLID, Yices (SRI), Zap (Microsoft), Z3 (Microsoft), …

Trong hệ thống giải quyết bài toán SMT hiệu năng cao đã được xây dựng, ta sử dụng đến 2 Solver là Yieces và Z3 Yieces và Z3 là 2 Solver cho phép đưa ra kết quả của

Trang 11

bài toán SMT và cũng cho phép truyền tham số về thời gian thực hiện giải bài toán, phù hợp với yêu cầu của hệ thống Đó chính là lí do hệ thống giải bài toán SMT hiệu năng cao chọn 2 Solver này trong quá trình xậy dựng và thực thi hệ thống.

2.3 Các ứng dụng của bài toán SMT

Ứng dụng của bài toán SMT được sử dụng kiểm tra phần mềm và phần cứng, mở rộng các kiểm tra tĩnh, làm sáng tỏ các ràng buộc, lập kế hoạch, lập lịch, sinh ra các kiểm thử và bảo mật máy tính Do đó, việc tạo hệ thống giải quyết bài toán SMT hiệu năng cao đem lại kết quả nhanh nhất, tốt nhất và rõ ràng nhất cho người sử dụng Đem lại cho người sử dụng cảm giác tin cậy và tiện dụng [4] Cùng với đó, hệ thống có khả năng hỗ trợ nhiều định dạng SMT, nhiều cách nhập dữ liệu cho người dùng

Trang 12

CHƯƠNG 3: PHÂN TÍCH HỆ THỐNG VÀ HƯỚNG GIẢI QUYẾT3.1 Phân tích yêu cầu

3.1.1 Các yêu cầu của người sử dụng

- Đầu vào: Ta có thể chọn 2 hình thức nhập bài toán SMT để gửi đến hệ thống giải quyết bài toán SMT đó là sinh ra file SMT bằng dòng code hoặc sử dụng file SMT sẵn có Việc gửi file để giải bài toán đi phải dễ dàng, hoặc cách thức nhập dữ liệu bài toán đơn giản Hiện tại, hệ thống mới hỗ trợ file định dạng *.SMT, một định dạng chuẩn và cơ bản nhất

mô tả các bài toán SMT và định dạng này được hỗ trợ ở hầu hết các Solver hiện tại

- Output: Kết quả của bài toán SMT được hiển thị trên màn hình Kết quả trả về cần chính xác, nhanh và dễ hiểu Tất cả các kết quả của các bài toán phải viết theo 1 chuẩn, chuẩn này có thể được quy định bởi chính hệ thống nhưng điều quan trọng là dễ hiểu

3.1.2 Các yêu cầu của hệ thống

Dựa trên yêu cầu của người dùng, hệ thống cũng phải đáp ứng được những điều sau:

- Phải chuyển được bài toán đến tất cả các Solver, để đón chờ kết quả nhanh nhất trong các Solver và chuyển tới người sử dụng một cách nhanh chóng

- Kết quả nhận được từ Solver phải được convert về một chuẩn chung dễ hiểu

- Hỗ trợ nhiều người dùng cùng kết nối đến Solver và giải bài toán SMT cùng một lúc

- Quản lý số lượng kết nối đến cùng lúc

- Dễ cài đặt và thực thi hệ thống

3.2 Các thành phần của hệ thống

Mô hình của hệ thống:

Trang 13

Hình 3.1 Mô hình hệ thống giải quyết bài toán SMT hiệu năng cao.

Dựa vào mô hình hệ thống giải quyết bài toán SMT hiệu năng cao hình 3.1, ta có thể thấy được hệ thống hoạt động bao gồm một Server, là trung tâm kết nối của các User và Solver, một Server có thể có nhiều User và Solver Server làm nhiệm vụ trung chuyển các yêu cầu về bài toán của User đến các Solver và chuyển kết quả theo chiều ngược lại đến User

Hệ thống bao gồm 3 bộ phận chính:

- Solver: mỗi một Solver kết nối với một bộ giải bài toán SMT (SMT Solver), cho phép giải quyết bài toán SMT và nhận kết quả của bài toán từ SMT Solver đem gửi cho Server, để Server chuyển kết quả cho người dùng tương ứng Một Solver có thể cho phép thực hiện giải nhiều bài toán cùng một lúc, mỗi một bài toán được thực hiện dưới một phiên làm việc (Session) riêng

Trang 14

- User: Tạo kết nối đến Server của hệ thống giải quyết bài toán SMT User cho phép người dùng gửi bài toán SMT bằng nhiều cách khác nhau như nhập bằng code của User hay nhập bằng tệp Mỗi yêu cầu có khoảng thời gian giải quyết riêng, người dùng có thể truyền vào nhưng không thể lớn hơn giá trị tối đa mặc định được quy đinh bởi hệ thống Khi người dùng bắt đầu gửi bài toán thì kết nối từ User đến Server được thiết lập và kết nối đó sẽ bị ngắt ngay sau khi có kết quả trả về từ Server.

- Server: Là một bộ phận rất quan trọng của hệ thống Server phải đem lại hiệu quả cao cho người dùng Server là nơi lắng nghe những yêu cầu của User và nhận thông tin về bài toán của User Khi nhận được bài toán từ User, Server phải tạo ra các phiên làm việc mới tới các Solver và phân phối bài toán đó cho các Solver để đón chờ kết quả sớm nhất từ một trong các Solver đó Việc tạo ra phiên làm việc để dễ dàng xử lý khi có nhiều luồng

dữ liệu vào - ra từ Server đến Solver và để phân biên các bài toán khác nhau Server phải cùng lúc gửi bài toán đó đến tất cả các Solver Sau khi nhận được kết quả của một phiên làm việc, Server phải có nhiệm vụ ngắt tất cả các Solver đang thực thi phiên làm việc đó nhằm mục đích tiết kiệm tài nguyên và hiệu quả hơn cho việc giải quyết các bài toán khác Server phải phục vụ được cùng lúc nhiều người dùng khác nhau, với khả năng truyền tải thông tin giữa các bộ phận lớn Chính vì vậy, Server cần phải có cơ chế phục vụ

và quản lý tiến trình chặt chẽ, nếu không hệ thống sẽ hoạt động kém hiệu quả do tài nguyên máy tính có giới hạn

3.3 Cách thức giao tiếp của các thành phần của hệ thống

3.3.1 Phương thức kết nối giữa các thành phần trong hệ thống

Ta có thể lựa chọn 2 phương thức kết nối giữa các thành phần trong việc giải quyết bài toán SMT hiệu năng cao đó là sử dụng web service và sử dụng kết nối socket Mỗi phương thức kết nối đều có những ưu, nhược điểm riêng Tùy thuộc theo yêu cầu của bài toán, ta có được sự lựa chọn đúng đắn Bảng 3.1 cho ta so sanh việc lựa chọn kết nối giữa các thành phần của hệ thống.

Trang 15

Bảng 3.1 So sánh việc lựa chọn kết nối các thành phần của hệ thống

Việc kết nối và giao tiếp giữa các thành

Không phải xây dựng cơ chế phục vụ do

cơ chế phục vụ đã được xây dựng sẵn

Phải mất các chi phí phụ như: thuê máy chủ, tên miền…

Do yêu cầu của bài toán, việc thời gian đáp ứng kết quả cho người dùng là điều đặc biệt quan trọng Cùng với đó, việc tự xây dựng cơ chế phục vụ của Server cho phép ta có thể tùy biến nhiều hơn phù hợp với bài toán được đặt ra Chính vì vậy, hệ thống lựa chọn hình thức kết nối socket là hoàn toàn hợp lý với yêu cầu bài toán.

2.3.2 Các quy ước trong giao tiếp giữa các thành phần hệ thống.

Việc giao tiếp giữa Server và các thành phần User, Solver của hệ thống thông qua socket và được quy ước gần giống như theo ngôn ngữ XML, nhưng có một chút cải tiến

đề phù hợp với tính chất của bài toán hơn

XML là ngôn ngữ phổ biến sử dụng trên nhiều nền ngôn ngữ, hình thức giao tiếp khác nhau XML cũng tương tự như HTML, nó biểu diễn các đối tượng cần lưu trữ dựa vào các thẻ, còn HTML là biểu diễn các đối tượng để trình bày XML được sử dụng rất hữu ích trong chia sẻ dữ liệu, có ảnh hưởng lớn đến sự phát triển các ứng dụng web Các thẻ trong XML hoàn toàn được định nghĩa bởi người lập trình [5] Hình 3.2 là một ví dụ

về XML:

<hello>

Z3

</hello>

Trang 16

Hình 3.2 Ví dụ về XML.

Đây là câu chào đầu tiên của Solver với Server để Server có thể hiểu được đó là Solver nào Nội dung của các đối tượng nằm trong cặp thẻ mở và thẻ đóng tương ứng Do tính thích nghi với tất cả các ngôn ngữ nên nó được sử dụng phổ biến trên khắp thế giới.Các quy ước trong hệ thống được mô tả rất kĩ trong tệp mã nguồn config.java

- Cặp thẻ <hello> và </hello> thể hiện sự bắt tay kết nối giữa các thành phần khác trong hệ

thống với Server

- Cặp thẻ <file> và </file> để bắt đầu việc thực hiện gửi file giữa Server và các Solver,

User của hệ thống

- Cặp thẻ <result> và </result> Để thể hiện nội dung kết quả nhận được từ việc giải bài

toán SMT giữa Solver – Server và Server – User

- Thẻ <destroy> Để phá hủy một phiên làm việc sau khi nhận được kết quả từ bài toán của

phiên làm việc đó, hoặc bài toán đó vô nghiệm trong khoảng thời gian giới hạn

- Thẻ <exit> thể hiện sự kết thúc kết nối giữa người dùng và Server.

Trong quá trình gửi dữ liệu từ Server đến các sovler, có rất nhiều luồng dữ liệu vào -

ra Do đó, để phân biệt giữa các dòng dữ liệu của các bài toán khác nhau ta sử dụng tới phiên làm việc Mã của phiên làm việc (Session_id) được sinh ra từ lớp ServerSMT và sesssion_id sẽ được ghi trước mỗi dòng dữ liệu từ Server đến Solver và ngược lại, ngăn cách với chuỗi gửi đi bằng dấu “|”

Chẳng hạn như 1234|<destroy> là việc thực hiện hủy việc hoạt động của phiên làm việc 1234 trên Solver nhận được dòng thông điệp trên từ Server

Việc xử dụng XML cũng tạo nên sự dễ hiểu cho những người cùng tham gia phát triển hệ thống

3.4 Ngôn ngữ lập trình

Giải pháp được chọn trong phương thức kết nối giữa các thành phần trong hệ thống

là kết nối qua socket nên ta lựa chọn ngôn ngữ lập trình bậc cao để lập trình cho hệ thống

vì các ngôn ngữ lập trình bậc cao hỗ trợ lập trình socket rất tốt Để xây dựng hệ thống giải quyết bài toán SMT hiệu năng cao, ta sử dụng ngôn ngữ lập trình Java, một trong những ngôn ngữ lập trình thông dụng và mạnh nhất hiện nay

Trang 17

Java đã rất quen thuộc với hầu hết các lập trình, có cộng đồng người sử dụng lớn, nên khi gặp phải vấn đề trong lập trình ta có thể dễ dàng tìm hiểu vấn đề đó qua mạng hơn Java còn hỗ trợ tốt lập trình socket qua lớp Java.net.Socket và Java.net.ServerSocket Tính tương thích cao của Java với các hệ điều hành khác nhau như Windows, Linux, Mac

… cũng là một trong những nguyên nhân dẫn đến quyết định chọn ngôn ngữ lập trình Java Sở dĩ Java có khả năng tương thích cao như vậy vì Java sử dụng máy ảo Java để có thể thông dịch mã bytecode của Java sang mã máy để máy có thể thực thi được [6]

3.5 Cơ chế phục vụ của Server

Xây dựng một Server đơn giản là một việc không khó nhưng để xây dựng được một Server có tính năng mạnh, có khả năng phục vụ nhiều người sử dụng thì phức tạp hơn Hệ thống giải quyết bài toán SMT hiệu năng cao được xây dựng dựa trên mô hình “Robust Java Server” của Steven Haines, một kĩ sư về Java của công ty phần mềm Quest, là tác giả của 2 cuốn sách “Java 2 primer plus” và “Java 2 from scratch” Để phù hợp với bài toán giải quyết bài toán SMT hiệu năng cao, chúng ta cần phải cải tiến mô hình để phân tách giữa các kết nối của Solver, và các kết nối của vì hệ thống có nét đặc trưng riêng

3.5.1.Mô hình robust Java Server – Steven Haines

Việc tự xây dựng một Java Server đơn giản là một việc không khó nhưng để xây dựng một Java Server mạnh mẽ thì phức tạp hơn nhiều

Để xây dựng một Server đơn giản, ta sử dụng lớp Java.net.ServerSocket và cũng chỉ cần một vài dòng code theo các bước sau, ta có thể có một Server trong vòng 10 phút, các bước thực hiện:

- Tạo một đối tượng thuộc lớp ServerSocket, cung cấp cho nó cổng để lắng nghe, và số lượng kết nối chờ trong hàng đợi (backlog)

- Gọi phương thức accept() thuộc lớp đối tượng ServerSocket đó để chờ đợi các kết nối từ

client đến ở cổng đã được định sẵn

- Và phương thức đó sẽ trả về một đối tượng Socket, từ đó ta có thể giao tiếp với các client đó

Trang 18

Một Server như vậy chỉ có thể phục vụ được một client request, nhưng thông thường, một Server cần phục vụ cho rất nhiều kết nối đến Khi ấy, một Server đơn giản như vậy sẽ gặp một số vấn đề rắc rối.

Như vậy, phải có bước xử lý đa kết nối Việc đó có thể thực hiện được bằng cách

thực hiện vòng lặp cho phương thức accept() của ServerSocket Điều ta cần làm là khi

nhận được một kết nối từ Client đến Server từ cổng lắng nghe của ServerSocket phải có một luồng xử lý được gọi ra Ta phải làm như vậy để cho ServerSocket có thể chờ và nhận các kết nối khác đến Server Ta có thể làm như sau:

while(true) {

Socket socket = ServerSocket.accept();

HandlerThread handler = new HandlerThread(socket);

handler.start();

}

Hình 2.3 Cách nhận tiếp nhận các kết nối đến.

Trong đoạn code trên, trong vòng lặp có 3 dòng:

- Server lắng nghe kết nối

- Khi có một kết nối đến và trả về là một socket, Server tạo một đối tượng để thực hiện trên socket đó

- Server bắt đầu luồng xử lý đó

Đến cuối vòng lặp, vòng lặp lại được thực hiện lại để lắng nghe kết nối tiếp theo.Trên lý thuyết, nếu chỉ làm như vậy thì Server có thể hoạt động tốt Nhưng trong thực tế, nó sẽ là một Server hoạt động cực kì chậm chạp Có thể kể đến 2 lý do như sau:

- Việc sinh một luồng xử lý mới tốn chi phí xử lý của CPU rất lớn

- Ở đây, hệ thống không có giới hạn về số luồng xử lý, và không có quản lý các tiến trình Khi có quá nhiều các luồng xử lý được thực hiện thì việc chuyển giao giữa các luồng xử

lý sẽ tốn nhiều thời gian Do vậy, hiệu quả hoạt động của hệ thống trở nên không cao

Steven Haines đã đề ra kiến trúc của một Server có khả năng hoạt động tốt –

Robust Java Server như sau:

Mô hình của Robust Java Server:

Trang 20

Lớp AbstractServer của hệ thống được xây dựng với các công việc chính sau:

+ Có một ServerSocket, đối tượng này thực hiện lắng nghe các kết nối đến từ phía client thông qua cổng lắng nghe đã được người lập trình định sẵn trong hệ thống

+ Khi có kết nối đến, Server thêm socket đó vào hàng đợi các request để tiện

xử lý

+ Lớp có biến thể hiện trạng thái của Server đang hoạt động hay không Khi

Server bắt đầu, hàm run() sẽ được gọi, vòng lặp lắng nghe các kết nối đến Server chừng

nào biến trạng thái hoạt động

+ Khi Server tắt, tiến trình đang xử lý và tất cả các kết nối đến nó sẽ bị ngắt

Hình 2.4 Mô hình hoạt động của Robust Java Server.

Trang 21

+ Đây là lớp được viết ra để khi xây dựng các Server khác có thể thừa kế từ lớp này.

Lớp AbtractSever có sử dụng hàng đợi các request và gọi đến lớp xử lý các

request, khi hàng đợi đó được tạo ra luôn có sự giới hạn về số lượng request, số lượng

threads tối thiểu và tối đa Khi phương thức start() được gọi chương trình sẽ thực hiện

hàm run của lớp Server Vòng lặp trong hàm run được thực hiện và sẽ đón chờ các kết nối, thêm các kết nối vào hàng đợi request

Lớp RequestQueue sử dụng danh sách liên kết để tạo ra danh sách cho các socket

giữa client và Server Số lượng thread (tiến trình) đang xử lý sẽ được giới hạn trong khoảng từ minthreads đến maxthreads Trên thực tế, minthread ta thường để là 0 và maxThreads có thể tùy chỉnh trong từng bài toán, có thể là bằng 2 lần số nhân của CPU máy tính đó Có 2 phương thức chính trong lớp này:

- Add (): thêm một đối tượng vào trong hàng đợi.

- GetNextObject(): Lấy một đối tượng trong hàng đợi ra.

Cũng giống như lớp Server, nó cũng có biến thể hiện trạng thái hoạt động, một danh sách liên kết

Lớp RequestThread

- Lớp RequestThread tạo một đối tượng RequestHandler, lớp định nghĩa việc xử lý các

request Toàn bộ phần chính của lớp được viết trong phương thức run(), sẽ được gọi đến

khi requestThread bắt đầu

- Khi một socket được lấy ra từ hàng đợi, đặt trạng thái là đang xử lý, sau đó truyền cho RequestHandler và lại đánh dấu lại trạng thái xử lý, và chờ lấy một đối tượng khác từ hàng đợi

- Thực chất, lớp RequestThread chỉ có nhiệm vụ truyền request đến lớp xử lý RequestHandler mà thôi.

Lớp requestThread gọi đến một lớp thực thi xử lý socket từ client kết nối đến Server Lớp RequestHandler được tùy chỉnh theo từng bài toán, lớp này quản lý và định

nghĩa cách thức giao tiếp giữa Server và Client

- Với kiến trúc làm việc như vậy, cho phép:

+ Một Client tạo một request đến Server

Trang 22

+ Khi Server nhận được request đó, thêm request vào danh sách hàng đợi, và tiếp tục lắng nghe những request tiếp theo.

+ Hàng đợi các request thêm request đó vào danh sách liên kết của mình (Thêm vào cuối và gỡ bỏ phần tử ở đầu đi)

+ RequestThread chờ đợi khi có một luồng dữ liệu rảnh rỗi thì đẩy request từ

luồng xử lý và thực hiện nó

+ Luồng xử lý request sẽ chuyển giao việc xử lý cho lớp xử lý yêu cầu

(requesthandler) để thao tác trực tiếp với client.

Ta có thể nhận thấy, việc thực hiện theo các bước trên khá là rõ ràng, và có thể thực hiện được một cách nhanh chóng Khi đi vào thực tế áp dụng cho các bài toán khác, tất nhiên sẽ gặp một số vướng mắc nho nhỏ theo tính chất đặc trưng riêng của từng bài toán [7]

3.5.2 Áp dụng mô hình Robust Java Server vào xây dựng giải quyết bài toán SMT hiệu năng cao

Do tính chất đặc thù của bài toán, nên khi xây dựng Server ta phải chú ý đầu tiên đến các đối tượng kết nối đến Server Các đối tượng kết nối đến Server bao gồm 2 phần: User và Solver Vai trò của mỗi đối tượng là khác nhau, do vậy, để cho dễ hiểu và minh bạch, ta viết các lớp xử lý cho Solver và User riêng biệt, cụ thể ở đây là SolverHandler và RequestHandler

Tương tự như mô hình Robust Java Server, Server SMT bao gồm các phần cơ bản

là RequestHandler, RequestQueue, RequestThread, SolverHandler - Cùng là lớp xử lý như RequestHandler nhưng là giao tiếp với các Solver Ngoài ra, còn có những lớp đặc trưng riêng của bài toán:

+ Lớp Session, là lớp tạo ra phiên làm việc giữa Solver và Server để phân biệt giữa các tiến trình giữa Server và Solver

+ Lớp config: Quy ước việc giao tiếp giữa các thành phần trong hệ thống.+ Lớp Debug: Để kiểm tra trong quá trình hoạt động của hệ thống

+ Lớp Convert: Chuyển output của các Solver về dạng chuẩn Do mỗi Solver sau khi thực hiện giải bài toán SMT sẽ đưa ra cho chúng ta nhiều định dạng kết

Trang 23

quả đầu ra khác nhau, để giúp cho người dùng dễ hiểu, ta phải chuyển chúng về một chuẩn của Server SMT.

Trang 24

CHƯƠNG 4 THIẾT KẾ TỔNG THỂ HỆ THỐNG4.1 Biểu đồ ca sử dụng của hệ thống

Hình 4.1 Biểu đồ ca sử dụng của hệ thống [ 8 ].

Trong biểu đồ ca sử dụng của hệ thống, có 2 tác nhân chính là Solver và User Các công việc phân phối, các giá trị tham số, và chuyển kết quả dạng chuẩn đến User là các Use Case của hệ thống

User sẽ gửi giá trị về Timeout và bài toán SMT đến cho Solver User gửi thông tin

về time out và phân phối đến các Solver Kết quả hệ thống nhận được từ Solver hoặc không nhận được do quá thời hạn thực hiện giải bài toán sẽ được chuyển về dạng chuẩn

để gửi về cho User Biểu đồ được vẽ bằng phần mềm Enterprise Architect 7.5

Ngày đăng: 16/07/2014, 15:20

Nguồn tham khảo

Tài liệu tham khảo Loại Chi tiết
[1] Leonardo de Moura, SMT Solvers: Introduction &amp; Applications. Cambridge, USA: Microsoft Research, 2007 Sách, tạp chí
Tiêu đề: SMT Solvers: Introduction & Applications
[2] Cesare Tinelli and Silvio Ranise, The SMT-LIB Standard.: Computer Science Department,The University of Iowa,Iowa City, IA, USA, 2006 Sách, tạp chí
Tiêu đề: The SMT-LIB Standard
[3] Barrett Clark, Deters Morgan, Oliveras Albert, and Stump Aaron, Satisfiability Modulo Theories Competition (SMT-COMP) 2010: Rules and Procedures.:Department of Computer Science, New York University, 2010 Sách, tạp chí
Tiêu đề: Satisfiability Modulo Theories Competition (SMT-COMP) 2010: Rules and Procedures
[4] Leonardo de Moura, SMT Solvers Theory &amp; Practice.: Microsoft Research, 2006 Sách, tạp chí
Tiêu đề: SMT Solvers Theory & Practice
[6] Clark S. Lindsey, S. Tolliver Johnny, and Lindblad Thomas, An Introduction to Scientific and Technical Computing with Java.: Cambridge University, 2005 Sách, tạp chí
Tiêu đề: An Introduction to Scientific and Technical Computing with Java
[7] Steven Haines, Java Reference Guide.: Steven Haines , 2005 Sách, tạp chí
Tiêu đề: Java Reference Guide
[8] Sinan Si Alhir, Learning UML. O'Reilly, 2003 Sách, tạp chí
Tiêu đề: Learning UML

HÌNH ẢNH LIÊN QUAN

BẢNG KÍ HIỆU, CHỮ VIẾT TẮT - xây dựng hệ thống giải bài toán smt hiệu năng cao – phần máy chủ
BẢNG KÍ HIỆU, CHỮ VIẾT TẮT (Trang 5)
Hình 3.1 Mô hình hệ thống giải quyết bài toán SMT hiệu năng cao. - xây dựng hệ thống giải bài toán smt hiệu năng cao – phần máy chủ
Hình 3.1 Mô hình hệ thống giải quyết bài toán SMT hiệu năng cao (Trang 13)
Hình 2.4 Mô hình hoạt động của Robust Java Server. - xây dựng hệ thống giải bài toán smt hiệu năng cao – phần máy chủ
Hình 2.4 Mô hình hoạt động của Robust Java Server (Trang 20)
Hình 4.1 Biểu đồ ca sử dụng của hệ thống [ 8 ]. - xây dựng hệ thống giải bài toán smt hiệu năng cao – phần máy chủ
Hình 4.1 Biểu đồ ca sử dụng của hệ thống [ 8 ] (Trang 24)
Hình 4.2 Biều đồ hoạt động của hệ thống [ 8 ]. - xây dựng hệ thống giải bài toán smt hiệu năng cao – phần máy chủ
Hình 4.2 Biều đồ hoạt động của hệ thống [ 8 ] (Trang 25)
Hình 5.1 Biều đồ lớp của Server [ 8 ]. - xây dựng hệ thống giải bài toán smt hiệu năng cao – phần máy chủ
Hình 5.1 Biều đồ lớp của Server [ 8 ] (Trang 28)
Hình 5.3 Ví dụ về việc chào hỏi giữa User và Server. - xây dựng hệ thống giải bài toán smt hiệu năng cao – phần máy chủ
Hình 5.3 Ví dụ về việc chào hỏi giữa User và Server (Trang 30)
Hình 5.5 Đón nhận kết nối đến từ User và đưa User đó vào hàng đợi. - xây dựng hệ thống giải bài toán smt hiệu năng cao – phần máy chủ
Hình 5.5 Đón nhận kết nối đến từ User và đưa User đó vào hàng đợi (Trang 31)
Hình 5.7 Phương thức thêm đối tượng của lớp RequestQueue. - xây dựng hệ thống giải bài toán smt hiệu năng cao – phần máy chủ
Hình 5.7 Phương thức thêm đối tượng của lớp RequestQueue (Trang 33)
Hình 5.9 Ví dụ về Session của hệ thống. - xây dựng hệ thống giải bài toán smt hiệu năng cao – phần máy chủ
Hình 5.9 Ví dụ về Session của hệ thống (Trang 34)
Hình 5.10 Các phương thức, thuộc tính của lớp Session. - xây dựng hệ thống giải bài toán smt hiệu năng cao – phần máy chủ
Hình 5.10 Các phương thức, thuộc tính của lớp Session (Trang 36)
Hình 5.12 Phương thức xóa bỏ một Session thuộc lớp SolverHandler. - xây dựng hệ thống giải bài toán smt hiệu năng cao – phần máy chủ
Hình 5.12 Phương thức xóa bỏ một Session thuộc lớp SolverHandler (Trang 38)
Bảng 6.2 So sánh thời gian trả về kết quả của Solver riêng lẻ và các hệ thống                      Solver - xây dựng hệ thống giải bài toán smt hiệu năng cao – phần máy chủ
Bảng 6.2 So sánh thời gian trả về kết quả của Solver riêng lẻ và các hệ thống Solver (Trang 44)
Bảng 6.1 Danh sách các file sử dụng để thực nghiệm - xây dựng hệ thống giải bài toán smt hiệu năng cao – phần máy chủ
Bảng 6.1 Danh sách các file sử dụng để thực nghiệm (Trang 44)
Bảng 6.3 Kết quả trả về của hệ thống từ các tệp thử nghiệm              Solver - xây dựng hệ thống giải bài toán smt hiệu năng cao – phần máy chủ
Bảng 6.3 Kết quả trả về của hệ thống từ các tệp thử nghiệm Solver (Trang 45)

TỪ KHÓA LIÊN QUAN

TRÍCH ĐOẠN

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

TÀI LIỆU LIÊN QUAN

w