Lớp Term

Một phần của tài liệu xây dựng hệ thống giải bài toán smt hiệu năng cao – phần máy trạm (Trang 30 - 34)

- Term (varDecl v): khái báo một term từ khai báo của một biến v - Term (double d): khai báo một term từ giá trị của một số thực d - Term (Identifier i): khai báo một term từ một đinh danh i

- Term iteOperator (Formula f, Term t1, Term t2): toán tử “ite” của Term

5.2.2.9. Lp annotation: được xây dựng dựa trên (15) bảng 1, dùng để khai báo một ghi chú trong bài toán SMT. Có hai cách khai báo như sau:

- annotation (String attribute): khai báo ghi chú với chuỗi ký tự attribute

- annotation (String attribute, String user_value): khai báo ghi chú với chuỗi ký tự thuộc tính attribute và user_value

5.2.2.10. Lp varDecl: Dùng để khai báo một biến trong bài toán SMT. Được xây dựng dựa trên (8) bảng 1

- varDecl (String v): khai báo biến với chuỗi v

5.2.2.11. Lp fvarDecl: được xây dựng dựa trên (9) bảng 1. - fvarDecl (String fv): dùng để khai báo fvar với chuỗi fv

5.2.2.12. Lp Arith_symb: dùng để khai báo một hoặc một chuỗi các tự như đã được định nghĩa trong (10) bảng 1.

- Arith_symb (String s): khai báo một hoặc 1 chuỗi các ký tự.

5.2.2.13. Lp Identifier: được xây dựng dựa trên (7) bảng 1, để đưa ra các định danh cho bài toán SMT.

- Identifier (String simpleIdentifier): khai báo định danh từ một định danh đơn giản (simple_identifier được định nghĩa trong (1) bảng 1) - Identifier (String simleID, long num): khai báo định danh từ một định

danh đơn giản và một số nguyên)

- Identifier (String simpleId,long num1, long[] num2): khai báo định danh từ một định danh đơn giản và một số nguyên cùng một mảng số nguyên.

5.2.2.14. Lp quant_var: được xây dựng dựa trên (5) của bảng 2.

- quant_var (varDecl var,Identifier id): khai báo quant_vả từ khai báo biến var và định danh id.

Trên đây là các lớp và các hàm được xây dựng để hỗ trợ người dùng xây dựng bài toán SMT trước khi gửi lên máy chủ. Để xây dựng được một bài toán SMT đúng đắn bằng việc sử dụng các hàm trên, người dùng cần tuân thủ nghiêm ngặt các định nghĩa, cách khai báo các thành phần đã được đưa ra ở trên. Chương trình không hỗ trợ việc kiểm tra những gì người dùng nhập vào. Ví dụ với khai báo một đối tượng của lớp Arith_symb, người dùng buộc phải đưa vào một hoặc một chuỗi các ký tự thuộc tập các ký tự {=, >, <, &, @, #, +, -, *, /, %, |, ~ } Nếu người dùng đưa vào sai chuỗi được thiết lập từ các ký tự trên, tệp tin chứa bài toán SMT vẫn được sinh ra nhưng sẽ không đúng chuẩn và khi đó sẽ không có lời giải.

Ngoài ra, do một số lớp có sử dụng đối tượng của lớp khác, nên người dùng cũng cần phải tuân thủ theo đúng việc khai báo các đối tượng của các lớp. Ví dụ, trước khi có được một đối tượng của lớp Bench_attribute, người dùng cần phải khai báo và xây dựng các đối tượng thuộc lớp Formula, annotation, funs_decl…

5.3.Phn máy trm

Chức năng của hệ thống được cài đặt trên máy trạm là nhận về bài toán SMT được máy chủ chuyển tới. Sau khi nhận được bài toán, hệ thống sẽ gọi chương trình để giải bài toán ấy. Sau khi có được lời giải của bài toán, hệ thống sẽ gửi lại phía máy chủ lởi giải đó. Trong trường hợp có máy trạm khác đã giải quyết xong bài toán ấy và gửi lên máy chủ trước khi chương trình giải được cài đặt trên hệ thống giải quyết xong bài toán, máy chủ sẽ gửi về một tín hiệu ngắt tiến trình đang chạy và không hệ thống sẽ dừng chương trình đang chạy và không gửi gì về phía máy chủ nữa.

5.3.1. Cơ chế làm vic ca máy trm

Để đáp ứng nhu cầu nhận và giải liên tục các bài toán từ phía máy chủ, hệ thống máy trạm cần có cơ chế phù hợp để vừa có thể nhận liên tục dữ liệu từ máy chủ, vừa có thể thực thi việc giải bài toán (đã nhận xong từ phía máy chủ) và vừa có thể đảm bảo việc gửi lại chính xác kết quả của bài toán tương ứng sau khi đã giải xong. Để đáp ứng được yêu cầu này, hệ thống máy trạm cần được tổ chức các tác vụ thành các luồng tiến trình khác nhau.

Trong ngôn ngữ lập trình Java, một luồng là một thuộc tính duy nhất [8] Nó là

đơn vị nhỏ nhất của đoạn mã có thể thi hành được mà thực hiện một công việc riêng

biệt. Một ứng dụng được viết bởi ngôn ngữ lập trình java có thể bao hàm nhiều luồng. Mỗi luồng được đăng ký một công việc riêng biệt, mà chúng được thực thi đồng thời với các luồng khác.

Đa luồng giữ thời gian nhàn rỗi của hệ thống thành nhỏ nhất. Điều này cho phép các chương trình được viết bởi java có hiệu quả cao với sự tận dụng CPU là tối đa. Mỗi phần của chương trình được gọi một luồng, mỗi luồng định nghĩa một đường dẫn khác nhau của sự thực hiện.

Việc phân luồng được ứng dụng trong hệ thống máy trạm sẽ được đề cập cụ thể hơn ở những phần sau của tài liệu.

5.3.2. Quy định giao tiếp vi máy ch

Do toàn bộ hệ thống được cài đặt trực tuyến, nên trường hợp nhận được nhiều bài toán tại một thời điểm là hoàn toàn có thể xảy ra. Để xác định đúng kết quả của bài toán tương ứng với bài toán nhận được trước đó, cần có một sự đánh dấu thứ tự cho các bài toán ấy. Nhóm nghiên cứu đã đưa ra và thống nhất sử dụng mã sessionID được tạo ra bởi máy chủ và được gửi kèm với nội dung.

Việc sử dụng mã sessionID còn giúp hệ thống tránh được sự nhầm lẫn giữa hai hay nhiều bài toán cùng được gửi lên một lúc.

Quy trình kết nối giữu máy trạm và máy chủ sẽ như sau: (adsbygoogle = window.adsbygoogle || []).push({});

- Sau khi kết nối đến máy chủ, hệ thống cài đặt trên máy trạm sẽ gửi lời chào hỏi đến máy chủ thông qua thẻ cặp thẻ chào hỏi <hello> như sau:

<hello>

[Tên chương trình gii bài toán SMT] </hello>

- Máy chủ sau khi nhận được lời chào sẽ gửi đến nội dung của bài toán SMT mà máy khách đã gửi lên yêu cầu giải. Việc gửi dữ liệu cũng được bắt đầu bằng thẻ mở <file> và kèm thêm mã sessionID trước đó. Mỗi dòng dữ liệu của bài toán ấy gửi lên cũng sẽ kèm theo sessionID của bài toán đó cho đến khi thẻ đóng </file> được gửi lên:

sessionID | <file>

sessionID | [ni dung dòng d liu th 1] ….

sessionID | [ni dung dòng d liu th n] sessionID | </file>

- Sauk hi nhận được dữ liệu từ tệp tin chứa bài toán SMT, hệ thống sẽ nhận trễ thời gian giới hạn thực thi bài toán ấy. Việc nhận trễ thời gian giới hạn này được quy định như sau:

sessionID | <timeout>

sessionID | [tr thi gian] sessionID | </timeout>

- Sau khi đã có dữ liệu đầy đủ của một bài toán hệt thống sẽ gọi chương trình giải bài toán SMT để thực hiện việc giải bài toán đó. Sau khi có kết quả, hệ thống sẽ gửi lại máy chủ theo quy chuẩn sau:

sessionID | <result>

sessionID | [ni dung dòng kết qu tr v th 1] …..

sessionID | [ni dung dòng kết qu tr v th 2] sessionID | </result>

- Sau khi gửi về kết quả, hệ thống sẽ vẫn tiếp tục nhận hoặc chờ bài toán tiếp theo mà máy chủ sẽ gửi đến.

Một phần của tài liệu xây dựng hệ thống giải bài toán smt hiệu năng cao – phần máy trạm (Trang 30 - 34)