Chương 1 của luận văn giới thiệu tổng quan về kiểm chứng mô hình, cácphương pháp mô hình hóa và đặc tả thuộc tính của hệ thống sử dụng hệ dịchchuyển và logic thời gian tuyến tính.. Trong
Trang 1NGUYỄN VĂN TRÃI
KIỂM CHỨNG HÌNH THỨC CHO HỆ THỐNG TƯƠNG TRANH
SỬ DỤNG NGÔN NGỮ ĐẶC TẢ CSP# VÀ CÔNG CỤ PAT
LUẬN VĂN THẠC SĨ CÔNG NGHỆ THÔNG TIN
Hà Nội – 2013
Trang 2Phụ lục 3:
NGUYỄN VĂN TRÃI
KIỂM CHỨNG HÌNH THỨC CHO HỆ THỐNG TƯƠNG TRANH
SỬ DỤNG NGÔN NGỮ ĐẶC TẢ CSP# VÀ CÔNG CỤ PAT
Ngành: Công nghệ thông tin
Chuyên ngành: Công nghệ phần mềm
Mã số: 60 48 10
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 – 2013
Trang 3Mục lục
1.1 Tổng quan về kiểm chứng mô hình 11
1.2 Các đặc tính của kiểm chứng mô hình 13
1.2.1 Các pha thực hiện 13
1.2.2 Ưu điểm và nhược điểm 16
1.3 Mô hình hóa hệ thống 17
1.3.1 Hệ dịch chuyển (Transition System) 17
1.3.2 Mô hình hóa hệ thống bằng hệ dịch chuyển 21
1.4 Đặc tả hình thức các thuộc tính của hệ thống 23
1.4.1 Các thuộc tính thời gian tuyến tính (Linear-Time Property) 23
1.4.2 Lôgic thời gian tuyến tính (Linear Temporal Logic) 26
2 Hệ thống tương tranh 30 2.1 Tổng quan về hệ tương tranh 30
2.2 Mô hình hóa hệ tương tranh bởi hệ dịch chuyển 32
2.2.1 Xử lý đan xen (Interleaving) 33
2.2.2 Giao tiếp qua biến chia sẻ (Shared Variables) 34
2.2.3 Tương tác dạng bắt tay (Handshaking) 35
2.2.4 Giao tiếp thông qua kênh truyền (Channel Systems) 36
2.2.5 Xử lý song song đồng bộ (Synchronous Parallelism) 39
3 Đặc tả mô hình hệ tương tranh với CSP# 41 3.1 Process Algebra 41
Trang 43.2 Ngôn ngữ CSP# 42
3.2.1 Các định nghĩa toàn cục 43
3.2.2 Định nghĩa tiến trình 44
3.2.3 Khẳng định 50
3.3 Một cách tiếp cận trích xuất mô hình từ mã nguồn C# 52
3.3.1 Xử lý đa luồng trong C# 54
3.3.2 Trích xuất mô hình từ mã nguồn C# 57
3.3.3 Hướng phát triển 61
4 Kiểm chứng thử nghiệm với PAT 62 4.1 Tổng quan về PAT 62
4.2 Mô-đun CSP 64
4.3 Ví dụ thử nghiệm 65
4.4 So sánh đánh giá 71
Trang 5Danh sách bảng
3.1 Các luật tương đương trong trích xuất mô hình 59
Trang 6Danh sách hình vẽ
1.1 Tàu vũ trụ Ariane-5 vào tháng 4 năm 1996 [3] 9
1.2 Sơ đồ quy trình kiểm chứng [3] 10
1.3 Lỗi và chi phí sửa lỗi trong phát triển phần mềm [3] 11
1.4 Sơ đồ kiểm chứng mô hình [3] 12
3.1 Kiểm chứng mô hình cổ điển và hiện đại 53
3.2 Xử lý đa luồng trong C# 55
3.3 Đồ thị trạng thái của mô hình đạt được sau trích xuất 61
4.1 Kiến trúc của PAT 64
4.2 Mô-đun CSP 65
4.3 Biểu đồ trạng thái đầy đủ của mô hình ứng với đặc tả 1 69
4.4 Biểu đồ trạng thái đầy đủ của mô hình ứng với đặc tả 2 71
4.5 So sánh kết quả kiểm chứng giữa PAT và SPIN 72
Trang 7LỜI MỞ ĐẦU
Trong thời đại bùng nổ ứng dụng công nghệ thông tin hiện nay, cùng với những
cơ hội là rất nhiều thách thức dành cho các nhà phát triển phần mềm Để đem lạihiệu quả công việc cao nhất và tiết kiệm thời gian, chi phí cho doanh nghiệp, các
hệ thống phần mềm khi đưa vào ứng dụng phải đảm bảo các yêu cầu nghiêm ngặt
về hiệu năng xử lý và tiết kiệm năng lượng Một giải pháp là sử dụng các hệ thống
xử lý tương tranh giúp tận dụng tối đa tài nguyên phần cứng, cho phép thực hiệnnhiều tác vụ cùng lúc Tuy nhiên, trong phát triển phần mềm, việc xác định tínhđúng đắn cho các hệ thống xử lý tương tranh như vậy thường rất khó khăn vì sựtương tác phức tạp giữa các thành phần cùng xử lý trong hệ thống Các lỗi xuấthiện trong hệ thống xử lý tương tranh thường không có xu hướng lặp lại, vì thế rấtkhó phát hiện bởi các ca kiểm thử, khi đó sử dụng các kỹ thuật kiểm chứng hìnhthức là cần thiết Nội dung của luận văn sẽ tập trung giới thiệu hướng tiếp cậnkiểm chứng mô hình cho hệ xử lý tương tranh, đi sâu vào phương pháp mô hìnhhóa hệ thống Một ngôn ngữ mô hình hóa cụ thể được giới thiệu trong luận văn
là Communicating Sequential Processes Sharp (CSP#), các mô hình đặc tả bằngngôn ngữ này được sử dụng trong phần kiểm chứng thử nghiệm với bộ công cụProcess Analysis Toolkit (PAT)
Chương 1 của luận văn giới thiệu tổng quan về kiểm chứng mô hình, cácphương pháp mô hình hóa và đặc tả thuộc tính của hệ thống (sử dụng hệ dịchchuyển và logic thời gian tuyến tính) Trong chương 2 luận văn tiếp tục giới thiệutổng quan về hệ thống tương tranh, các cơ chế thực thi, tương tác trong hệ tươngtranh, mô hình hóa các cơ chế thực thi, tương tác trên bằng hệ dịch chuyển để phục
vụ kiểm chứng mô hình Tuy nhiên trong thực tế, quá trình mô hình hóa hệ thốngthường không sử dụng trực tiếp hệ dịch chuyển mà thông qua một ngôn ngữ môhình hóa trung gian để đảm bảo tính trực quan đối với người dùng Sau đó cácđặc tả mô hình bằng ngôn ngữ này được chuyển tự động qua dạng hệ dịch chuyểndựa trên ngữ nghĩa của ngôn ngữ đã sử dụng Chương 3 sẽ trình bày về ngôn ngữ
mô hình hóa CSP# - một ngôn ngữ phù hợp để đặc tả mô hình các hệ xử lý tươngtranh Trong chương 3 luận văn cũng đề xuất một cách tiếp cận trích xuất mô hìnhtrực tiếp từ mã nguồn C Sharp (C#) đối với phạm trù xử lý tương tranh trong lậptrình đa luồng Kết quả của quá trình trích xuất là mô hình xử lý tương tranh trong
mã nguồn dưới dạng đặc tả bằng CSP# Đề xuất này nhằm phục vụ mục tiêu kiểmchứng mô hình trực tiếp trên mã nguồn C# Phần cuối của luận văn ở chương 4tiến hành thử nghiệm mô hình hóa và kiểm chứng một hệ tương tranh, sử dụngngôn ngữ mô hình hóa CSP# và công cụ hỗ trợ kiểm chứng PAT
Trang 8Chương 1
Kiểm chứng mô hình
Sự phụ thuộc của chúng ta vào các hệ thống công nghệ thông tin ngày càng giatăng Các hệ thống này ngày càng trở lên phức tạp, tham gia vào hầu hết các hoạtđộng hàng ngày thông qua Internet và các loại hệ thống nhúng như điện thoại diđộng, máy tính cầm tay, ô tô Theo thống kê ngay từ những năm 1995, mỗi ngườitiếp xúc với khoảng 25 thiết bị công nghệ thông tin hàng ngày [3] Các dịch vụ nhưngân hàng điện tử, mua sắm trực tuyến trở lên phổ biến Lượng tiền hàng ngày lưuthông qua Internet là khoảng 1012 triệu đô la Mỹ [3] Khoảng 20% chi phí pháttriển các phương tiện giao thông hiện đại như xe hơi, xe lửa tốc độ cao và máy bayđược dành cho các hệ thống xử lý thông tin [3] Sự phụ thuộc của chúng ta vàocác hệ thống nhúng khiến độ tin cậy của chúng có tầm quan trọng lớn trong xã hộihiện đại Bên cạnh cung cấp hiệu suất tốt thông qua thời gian đáp ứng, năng lực xử
lý thì không xảy ra lỗi là một tiêu chí quan trọng trong việc đánh giá chất lượng.Nhiều lỗi phần mềm hoặc phần cứng không đe dọa trực tiếp cuộc sống củachúng ta nhưng có thể gây ra các hậu quả nghiêm trọng về mặt tài chính Một số
ví dụ nổi tiếng về hậu quả gây ra do lỗi phần mềm và phần cứng như trong [3].Lỗi dấu phảy động trong bộ xử lý Intel Pentinum II đầu những năm 90 gây ra thiệthại khoảng 475 triệu đô la Mỹ để thay thế các bộ vi xử lý lỗi, danh tiếng của Intelcũng bị ảnh hưởng nghiêm trọng Lỗi phần mềm trong hệ thống xử lý hành lý đãtrì hoãn việc mở cửa sân bay Denver trong 9 tháng, hãng này phải chịu lỗ 1.1 triệu
đô la Mỹ mỗi ngày Đối với một số hệ thống, lỗi có thể gây ra thảm họa Một ví
dụ điển hình là lỗi trong phần mềm điều khiển của tàu vũ trụ Ariane-5 vào tháng
4 năm 1996, 36 giây kể từ khi ra khỏi bệ phóng tàu bị rơi chỉ do lỗi chuyển đổi sốthực 32 bit sang số nguyên 16 bit (Hình 1.1)
Tầm quan trọng của các hệ thống công nghệ thông tin ngày càng tăng dẫn tớinhu cầu cấp thiết là đảm bảo được tính đúng đắn của hệ thống Các hệ thống côngnghệ thông tin hiện nay không chỉ tồn tại độc lập mà còn được nhúng trong các
hệ lớn, kết nối và tương tác với các thành phần thuộc hệ thống khác Các hệ thốngnhư thế rất dễ xảy ra lỗi Đặc biệt, mô hình tương tác giữa các thành phần trongmột số hệ thống như hệ tương tranh, lựa chọn không đơn định rất khó để đảm bảotính đúng đắn với các kỹ thuật tiêu chuẩn Độ phức tạp ngày càng tăng, cùng với
Trang 9Hình 1.1: Tàu vũ trụ Ariane-5 vào tháng 4 năm 1996 [3]
áp lực giảm thời gian phát triển hệ thống khiến việc cung cấp các hệ thống côngnghệ thông tin ít khiếm khuyết là một công việc đầy khó khăn và thử thách
Kiểm chứng
Kỹ thuật kiểm chứng được sử dụng trong quá trình thiết kế các hệ thống côngnghệ thông tin theo nhiều cách khác nhau Về cơ bản, kỹ thuật này sẽ xác địnhmột thiết kế hoặc sản phẩm dưới phạm trù cần xem xét có thỏa mãn các thuộctính nhất định không Các thuộc tính được kiểm chứng có thể khá đơn giản, ví dụnhư hệ thống có bao giờ rơi vào trạng thái bế tắc (deadlock) không, và hầu hết cácthuộc tính đều được lấy ra từ đặc tả của hệ thống Đặc tả của hệ thống quy địnhnhững gì hệ thống phải làm và không được làm, do đó là cơ sở cho mọi hoạt độngkiểm chứng Một lỗi được tìm thấy khi hệ thống không thỏa mãn một thuộc tínhtrong đặc tả Một hệ thống được coi là đúng khi mọi thuộc tính trong đặc tả của
nó được thỏa mãn Do đó tính đúng đắn của hệ thống luôn liên quan đến đặc tảcủa hệ thống đó Sơ đồ quy trình kiểm chứng được mô tả trong Hình 1.2
Đánh giá ngang hàng (peer reviewing) và kiểm thử (testing) là hai kỹ thuật phổbiến được sử dụng trong thực tế để đảm bảo chất lượng phần mềm Tuy nhiên, hai
kỹ thuật này có chung một nhược điểm lớn là không thể xác định chính xác đượctính đúng của hệ thống Trong khi đánh giá ngang hàng là kỹ thuật chủ yếu dựatrên kinh nghiệm của người tham gia đánh giá thì kiểm thử chỉ có thể được tiếnhành trên một số nhánh thực thi của hệ thống Tiến hành kiểm thử trên đầy đủ cácnhánh thực thi là không thể Vì thế hai kỹ thuật này chỉ có khả năng phát hiện lỗi
mà không thể khẳng định là hoàn toàn không còn lỗi trong hệ thống Đối với các
hệ thống phần mềm phức tạp đòi hỏi độ tin cậy cao, sử dụng các kỹ thuật trên rõràng không đáp ứng được yêu cầu Khi đó, các phương pháp kiểm chứng hình thức(formal verification) được coi là có nhiều tiềm năng Bản chất của phương phápkiểm chứng hình thức là áp dụng toán học vào việc mô hình hóa và phân tích các
hệ thống công nghệ thông tin, đảm bảo tính đúng đắn cho hệ thống với sự chặtchẽ của toán học Tiềm năng to lớn của phương pháp hình thức dẫn tới sự gia tăngnhanh chóng việc sử dụng phương pháp này trong kiểm chứng các hệ thống phức
Trang 10Thi ế t k ế
(Design)
Ki ể m ch ứ ng (Verification)
Không tìm th ấ y
l ỗ i Tìm th ấ y l ỗ i
Hình 1.2:Sơ đồ quy trình kiểm chứng [3]
tạp Theo thống kê, hiện nay các phương pháp hình thức được sử dụng ở một sốdạng khác nhau, trong khoảng 10% đến 15% các dự án phần mềm [3]
Trong công nghệ phần mềm, kiểm chứng hình thức là khái niệm về việc sửdụng các phương pháp hình thức (formal methods) trong toán học để chứng minhhoặc phủ định tính đúng đắn của hệ thống dựa trên một đặc tả hình thức (formalspecification) hoặc thuộc tính hình thức (formal property) của hệ thống đó Quátrình kiểm chứng được tiến hành bằng các chứng minh trên một mô hình toánhọc trừu tượng của hệ thống, tính chính xác của mô hình toán học này phụ thuộcvào quá trình mô hình hóa Một số dạng mô hình toán học thường được sử dụng
để mô hình hóa hệ thống là: process algebra, máy trạng thái hữu hạn (finite statemachines), hệ thống dịch chuyển nhãn (labelled transition systems), mạng Petri(petri nets)
Một cách tiếp cận sớm và đặc thù của kiểm chứng hình thức là kiểm chứng môhình, quá trình kiểm chứng mô hình bao gồm các bước tiến hành để kiểm tra mộtcách toàn diện trên mô hình toán học của hệ thống Nội dung luận văn tập trungvào các phương pháp mô hình hóa hệ thống để phục vụ kiểm chứng mô hình chocác hệ tương tranh Các kỹ thuật như kiểm thử thường đem lại hiệu quả rất thấp vìlỗi trong hệ tương tranh thường không có xu hướng lặp lại [1]
Trong phát triển phần mềm, các khiếm khuyết của hệ thống được phát hiệncàng sớm càng tốt vì chi phí sửa chữa lỗi trong giai đoạn bảo trì cao hơn trong giaiđoạn thiết kế ban đầu khoảng 500 lần (Hình 1.3) Do đó mục tiêu quan trọng củakiểm chứng mô hình là áp dụng sớm để kiểm chứng ngay trong giai đoạn thiết kế
hệ thống Trong giai đoạn này, mô hình toán học của hệ thống được xây dựng dựa
Trang 11trên nội dung bản thiết kế hệ thống và các thuộc tính cần kiểm tra được lấy ra từđặc tả hoặc các yêu cầu thiết kế.
Hình 1.3:Lỗi và chi phí sửa lỗi trong phát triển phần mềm [3]
Một vài năm trở lại đây, trong khoa học máy tính, kiểm chứng mô hình (modelchecking) bắt đầu được sử dụng rộng rãi trong kiểm định các hệ thống phần mềm
và các hệ thống điều khiển điện tử [9] Kiểm chứng mô hình là một nhóm các kỹthuật kiểm định tự động một cách hình thức một mô hình với đặc tả các tính năngcủa mô hình đó [10] Mô hình của một hệ thống bao gồm tập hợp các trạng thái
và tập hợp các chuyển dịch giữa các trạng thái đó Thông thường, một đặc tả hoặcmột tính năng của hệ thống được viết dưới dạng công thức lôgic và thường đượcdiễn tả bằng một ngôn ngữ lôgic thời gian [11, 14, 22] Ý tưởng cơ bản là chứngminh xem một mô hình có thỏa mãn các tính năng đã mô tả trước đó về nó haykhông bằng cách duyệt toàn bộ không gian trạng thái của mô hình đó Nếu môhình không thỏa mãn một tính năng nào đó, thuật toán cần phải đưa ra một phản
ví dụ Phản ví dụ là một tập hợp các giá trị của biến đầu vào để chỉ ra rằng với mộtđầu vào như thế thì mô hình sẽ chạy không đúng như tính năng đã được mô tả.Các nghiên cứu đầu tiên về kiểm chứng mô hình được thực hiện bởi EdmundMelson Clarke và Ernest Allen Emerson cũng như Jean-Pierre Queille và JosephSifakis Jean-Pierre Clarke, Emerson và Sifakis đã được nhận giải thưởng Turingnăm 2007 cho các đóng góp của họ về kiểm chứng mô hình
Đặc tả thuộc tính quy định hệ thống phải làm gì và không được làm gì trong
Trang 12khi mô hình mô tả hành vi của hệ thống đó Hành vi của hệ thống được mô tả trên
mô hình một cách rõ ràng, không mập mờ sử dụng lý thuyết toán học Mô hình hệthống thường được sinh tự động từ đặc tả mô hình (sử dụng các ngôn ngữ mô hìnhhóa) Do chỉ thực hiện dựa trên mô hình của hệ thống nên sự thiếu chính xác của
mô hình có thể dẫn tới các kết quả không đầy đủ, không rõ ràng, và không nhấtquán với đặc tả của hệ thống Những vấn đề trên thường chỉ được phát hiện rấtmuộn sau giai đoạn thiết kế Mô hình hệ thống thường đi kèm các thuật toán đểkiểm tra tất cả các trạng thái có trong mô hình đó để xem chúng có thỏa mãn mộtthuộc tính mong muốn nào đó không Nếu bắt gặp một trạng thái vi phạm thuộctính cần xem xét, bộ kiểm tra mô hình sẽ cung cấp một phản ví dụ để chỉ ra làmthế nào mô hình có thể đạt đến trạng thái đó Phản ví dụ mô tả một đường dẫnthực thi bắt đầu từ trạng thái khởi tạo dẫn tới trạng thái mà ở đó thuộc tính kiểmtra bị vi phạm Sơ đồ toàn bộ quá trình kiểm chứng mô hình được minh họa trongHình 1.4
Ki ể m ch ứ ng mô hình (Model checking )
Y ề u c ầ u
(Requirements)
Đị nh v ị l ỗ i (Location error)
Th ỏ a mãn
(satisfied )
H ệ th ố ng (System)
Đặ c t ả thu ộ c tính
(Property specification )
Mô hình h ệ th ố ng (System model )
Vi ph ạ m, ph ả n ví d ụ
(Violated, counterexample )
Mô ph ỏ ng (Simulation)
Mô hình hóa (Modeling )
Hình th ứ c hóa
(Formalizing )
Hình 1.4: Sơ đồ kiểm chứng mô hình [3]
Một số thuộc tính được kiểm tra bằng kỹ thuật kiểm chứng mô hình có thể làdạng định lượng như: Kết quả thu được là phù hợp? Hệ thống có thể rơi vào trạngthái bế tắc không? Nhưng cũng có thể là dạng thuộc tính định thời như: bế tắc cóthể xảy ra sau 1 tiếng hệ thống khởi động? Thời gian đáp ứng của hệ thống luônnhỏ hơn 8 phút? Kiểm chứng mô hình yêu cầu thuộc tính cần kiểm tra phải rõ ràngkhông mập mờ Tương tự như đối với bước mô hình hóa hệ thống, thuộc tính cầnkiểm tra không rõ ràng thường dẫn tới kết quả mập mờ, không nhất quán với tài
Trang 13liệu đặc tả.
Hiệu suất của việc kiểm định thường phụ thuộc vào không gian trạng thái của
hệ thống Không gian trạng thái của một chương trình phần mềm thường tăng theohàm số mũ so với số dòng mã và phụ thuộc vào nhiều yếu tố như : số lượng biến,kích thước của biến tính theo số bit, và cấu trúc của chương trình [3] Các phươngthức biểu diễn trạng thái của hệ thống được chia thành hai nhóm : Kiểm chứng
mô hình biểu trưng (Symbolic Model Checking) và Kiểm chứng mô hình rõ ràngtheot rạng thái (Explicite State Model Checking) Thử thách lớn nhất với kiểmchứng mô hình là vấn đề bùng nổ không gian trạng thái Vấn đề này xảy ra trong
hệ thống khi có nhiều thành phần tương tác với nhau (như trong hệ thống tươngtranh) hoặc hệ thống bao gồm các cấu trúc dữ liệu có nhiều giá trị khác nhau.Trong các trường hợp như vậy, số lượng các trạng thái có thể phát sinh rất lớn.Các kỹ thuật kiểm chứng mô hình tiên tiến hiện nay có thể xử lý không gian trạngthái cỡ 108 đến 109 [3] Sử dụng các thuật toán tối ưu hơn, các cấu trúc dữ liệuchuyên dụng, không gian trạng thái cỡ 1010đến 10476có thể được xử lý trong một
số kiểm tra đặc biệt Một số lỗi tiềm ẩn không thể khám phá bằng các kỹ thuật giảlập (emulation), kiểm thử, mô phỏng (simulation) vẫn có thể được phát hiện bởikiểm chứng mô hình
Không ngừng cải tiến về thuật toán, cấu trúc dữ liệu và bộ nhớ máy tính ngàycàng tăng, các kỹ thuật kiểm chứng mô hình trước đây chỉ được thử nghiệm trêncác ví dụ đơn giản hiện nay đã được đưa vào áp dụng cho rất nhiều hệ thống thựctế
Khái niệm cơ bản về kiểm chứng mô hình được trình bày trong phần 1.1 có thểtóm gọn như sau: Kiểm chứng mô hình là một kỹ thuật tự động, cho trước một môhình hữu hạn trạng thái của hệ thống và một thuộc tính được đặc tả hình thức, bộkiểm chứng mô hình sẽ kiểm tra mô hình đưa ra có thỏa mãn thuộc tính đó không.Phần này sẽ trình bày các nội dung tiếp theo của kiểm chứng mô hình như: quytrình thực hiện, các đặc tính, ưu nhược điểm và vai trò của kiểm chứng mô hìnhtrong vòng đời phát triển phần mềm
1.2.1 Các pha thực hiện
Áp dụng kiểm chứng mô hình để kiểm định một thiết kế chia làm các giai đoạnsau [3]:
• Pha mô hình hóa (Modeling phase):
– Mô hình hóa hệ thống dưới phạm trù cần xem xét bằng các ngôn ngữ
mô hình hóa phù hợp với bộ kiểm chứng mô hình;
Trang 14– Kiểm tra và đánh giá nhanh mô hình sử dụng một vài mô phỏng;
– Hình thức hóa các thuộc tính cần kiểm tra sử dụng các ngôn ngữ đặc tảthuộc tính
• Pha chạy (Running phase): Chạy bộ kiểm chứng mô hình để kiểm tra tính
hợp lệ của thuộc tính trong mô hình đã xây dựng
• Pha phân tích (Analysis phase):
– Thuộc tính được thỏa mãn? −→ kiểm tra thuộc tính tiếp theo (nếu có);
– Thuộc tính bị vi phạm? −→
∗ phân tích phản ví dụ được sinh ra bằng mô phỏng;
∗ tinh chỉnh mô hình, thiết kế, hoặc thuộc tính;
∗ lặp lại toàn bộ các bước kiểm chứng
– Không đủ bộ nhớ máy tính? −→ cố gắng làm giảm kích cỡ mô hình vàthử lại
Ngoài các bước thực hiện trên thì toàn bộ quá trình kiểm chứng phải được lên kếhoạch, tổ chức và kiểm soát
Pha mô hình hóa Đầu vào cho kiểm chứng mô hình là mô hình của hệ thốngdưới phạm trù cần xem xét và đặc tả hình thức của thuộc tính cần kiểm tra
Mô hình của hệ thống mô tả hành vi của hệ thống đó một cách rõ ràng khôngnhập nhằng Hầu hết chúng được biểu diễn bởi các otomat hữu hạn trạng thái baogồm một tập hữu hạn các trạng thái và tập dịch chuyển Trạng thái bao gồm thôngtin hiện thời về giá trị các biến trong chương trình, câu lệnh thực thi trước đó (ví
dụ con đếm chương trình), và những đối tượng tương tự Tập dịch chuyển mô tảlàm thế nào hệ thống có thể chuyển từ một trạng thái tới trạng thái khác Trongthực tế, các otomat hữu hạn trạng thái thường được mô tả bởi các ngôn ngữ môhình hóa Mô hình hóa hệ thống tương tranh ở mức độ trừu tượng thực sự rất phứctạp, phần này sẽ được giới thiệu trong chương 2
Để cải thiện chất lượng của mô hình, một số các mô phỏng có thể được thựchiện trước khi tiến hành kiểm chứng mô hình Mô phỏng có thể được sử dụng đểphát hiện các lỗi mô hình hóa đơn giản một cách hiệu quả Loại bỏ các lỗi đơngiản trước khi tiến hành kiểm chứng giúp giảm đáng kể chi phí, thời gian kiểmchứng
Để thực hiện kiểm chứng chính xác nhất có thể, thuộc tính cần kiểm tra phải rõràng, không nhập nhằng Các thuộc tính thường được mô tả bằng ngôn ngữ đặc tảthuộc tính Lôgic thời gian được xem như một ngôn ngữ đặc tả thuộc tính phổ biếnhiện nay, đây là một dạng lôgic phù hợp để mô tả các thuộc tính của hệ thống côngnghệ thông tin Về mặt toán học lôgic, một hệ thống có thể được mô tả như một
mô hình các công thức lôgic thời gian Lôgic thời gian mở rộng từ lôgic mệnh đề
Trang 15truyền thống bằng cách thêm các toán tử mô tả hành vi của hệ thống dựa trên thờigian Nó cho phép đặc tả một loạt các thuộc tính liên quan của hệ thống như tínhđúng đắn của chức năng (correctness - thực hiện chính xác những gì phải làm),tính tới được (reachability - có tới được một trạng thái xác định trước hay không),tính an toàn (safety - điều xấu không bao giờ xảy ra), tính sống (liveness - điều tốtthực sự sẽ xảy ra), các giả định về tính đúng thực tế (fairness - loại bỏ các hành vi
vô hạn được coi là không thực tế) và các thuộc tính thời gian thực Chi tiết về đặc
tả thuộc tính bằng lôgic thời gian được giới thiệu trong phần cuối của chương này.Mặc dù các thông tin trên là khá rõ ràng, tuy nhiên việc thẩm định quá trìnhhình thức hóa mô hình, thuộc tính có đúng yêu cầu thực tế không lại là một vấn đềthực sự phức tạp Sự phức tạp của các hệ thống liên quan cùng với thông tin thiếuhụt trong các đặc tả không hình thức về các chức năng của hệ thống, dẫn tới rấtkhó trả lời câu hỏi thuộc tính kiểm tra có được thỏa mãn hay không
Pha chạy Bộ kiểm chứng mô hình được khởi tạo bởi việc thiết đặt phù hợpcác thông số tùy chọn, những thông số này có thể được sử dụng trong toàn bộ quátrình kiểm chứng Sau đó quá trình kiểm chứng chính được khởi chạy Về cơ bảnđây là giai đoạn các thuật toán kiểm chứng được áp dụng để kiểm tra thuộc tínhcần xem xét trên tất cả các trạng thái của mô hình
Pha phân tíchVề cơ bản có thể có 3 dạng kết quả đầu ra có thể: Thuộc tính cầnkiểm tra là thỏa mãn; Thuộc tính cần kiểm tra không thỏa mãn; Quá trình kiểmchứng dừng vì không đủ bộ nhớ (số trạng thái trong mô hình quá lớn)
Trong trường hợp thuộc tính kiểm tra là thỏa mãn, các thuộc tính tiếp theo đượckiểm tra
Trong trường hợp thuộc tính cần kiểm tra không thỏa mãn, kết quả không thỏamãn này có thể do một số nguyên nhân khác nhau Có thể mô hình lỗi, tức là việc
mô hình hóa phản ánh không đúng thiết kế thực tế của hệ thống Mô hình lỗi cầnđược sửa để kiểm chứng lại Quá trình kiểm chứng lại phải thực hiện trên cả cácthuộc tính đã được kiểm chứng trên mô hình lỗi trước đó vì kết quả kiểm chứngtrên một mô hình lỗi là không hợp lệ Nếu mô hình không bị lỗi thì có thể thiết
kế lỗi hoặc đặc tả thuộc tính lỗi Trong trường hợp thiết kế lỗi, kiểm chứng khẳngđịnh thuộc tính kiểm tra không thỏa mãn và thiết kế này cần được sửa đổi Thuộctính không thỏa mãn cũng có thể do đặc tả hình thức của nó không phản ánh đúngnội dung mong muốn kiểm tra Thuộc tính này cần được tinh chỉnh đặc tả và kiểmchứng lại Quá trình kiểm chứng lại không cần bao gồm các thuộc tính đã kiểmtra trước đó vì mô hình là không đổi Thiết kế được coi là đã kiểm chứng nếu vàchỉ nếu tất cả các thuộc tính được kiểm tra trên một mô hình hợp lệ
Khi mô hình hệ thống là quá lớn, không thể lưu toàn bộ không gian các trạngthái vào trong bộ nhớ máy tính, cần thêm các giải pháp để xử lý vấn đề này Mộttrong số các giải pháp là cố gắng khai thác các quy luật ngầm trong mô hình Ví
dụ sử dụng các kỹ thuật biểu trưng (symbolic) như lược đồ quyết định nhị phân
Trang 16(binary decision diagrams) hoặc rút gọn bậc từng phần(partial order reduction).Ngoài ra có thể áp dụng các kỹ thuật trừu tượng hóa lên mô hình đầy đủ của hệthống Kết quả trừu tượng phải giữ được nguyên tính chất của mô hình đối vớithuộc tính cần kiểm tra Thường trừu tượng có thể thu được đủ nhỏ với một thuộctính duy nhất Trong trường hợp này cần các trừu tượng khác nhau để áp dụng lên
mô hình cho phù hợp Một cách khác để đối phó với không gian trạng thái lớn làgiảm tính chính xác của kết quả kiểm chứng Ví dụ cách tiếp cận kiểm chứng xácsuất, chỉ khám phá một phần của không gian trạng thái (thường bỏ qua số trạngthái không đáng kể)
Tổ chức kiểm chứngToàn bộ quá trình kiểm chứng mô hình cần được lập kếhoạch và tổ chức thực hiện Các ứng dụng công nghiệp của kiểm chứng mô hìnhcung cấp các bằng chứng cho thấy việc sử dụng đánh dấu phiên bản và quản lýcấu hình đặc biệt liên quan Trong quá trình kiểm chứng, nhiều mô hình mô tả cácphần khác nhau của hệ thống, nhiều kết quả kiểm chứng là có sẵn từ các lần thựchiện trước Những thông tin, kết quả này cần được tài liệu hóa, duy trì cẩn thận để
sử dụng trong quá trình quản lý kiểm chứng thực tế và cho phép tái sử dụng
1.2.2 Ưu điểm và nhược điểm
Ưu điểm của kiểm chứng mô hình:
• Là hướng tiếp cận kiểm chứng tổng quát, có thể áp dụng cho nhiều lĩnh vựcnhư các hệ thống phần mềm, hệ nhúng, thiết kế phần cứng;
• Hỗ trợ kiểm chứng từng phần, các thuộc tính có thể được kiểm tra riêng lẻ,
do đó cho phép tập trung vào những thuộc tính quan trọng trước Không đòihỏi một đặc tả yêu cầu hoàn chỉnh;
• Mục đích là tìm ra các lỗi tiểm ẩn, điều này trái ngược với kiểm thử và môphỏng nhằm mục đích tìm những khiếm khuyết dễ xảy ra nhất;
• Cung cấp các thông tin chuẩn đoán khi thuộc tính được kiểm tra không hợp
lệ, chuẩn đoán này hữu ích cho mục tiêu tìm và gỡ lỗi;
• Kiểm chứng mô hình là một công nghệ tiềm năng, không đòi hỏi tương tácmức độ cao của người dùng cũng như trình độ chuyên môn cao;
• Nhận được rất nhiều sự quan tâm nghiên cứu, hiện đã có các sản phẩm côngnghiệp;
• Dễ dàng tích hợp vào trong các chu trình phát triển phần mềm hiện có, giúpgiảm thời gian phát triển;
• Có nền tảng toán học vững chắc, dựa trên các thuật toán lý thuyết đồ thị, cấutrúc dữ liệu và lôgic
Trang 17Nhược điểm của kiểm chứng mô hình:
• Kiểm chứng mô hình chủ yếu thích hợp với các ứng dụng điều khiển chuyênsâu, không phù hợp với các ứng dụng xử lý dữ liệu, các ứng dụng xử lý dữliệu thường dẫn tới bài toán vô hạn trạng thái;
• Ứng dụng để xử lý các vấn đề giải được, đối với hệ thống vô hạn trạng tháikiểm chứng mô hình nói chung tính toán không hiệu quả;
• Chỉ kiểm tra trên mô hình mà không phải hệ thống thật Kết quả kiểm chứngphụ thuộc nhiều vào độ chính xác của mô hình Các kỹ thuật bổ sung nhưkiểm thử là cần thiết để phát hiện các lỗi như mã hóa;
• Kiểm chứng mô hình chỉ kiểm tra các thuộc tính được yêu cầu, do đó không
Để kiểm chứng mô hình, mô hình của hệ thống thường được biểu diễn dướidạng hệ dịch chuyển Phần này sẽ trình bày về hệ dịch chuyển và sử dụng hệ dịchchuyển để mô hình hóa hệ thống
1.3.1 Hệ dịch chuyển (Transition System)
Trong khoa học máy tính hệ dịch chuyển thường được sử dụng như một mô hình
mô tả hành vi của hệ thống Về cơ bản hệ dịch chuyển là một đồ thị có hướng, cácnút biểu diễn trạng thái của hệ thống, và các cạnh mô hình sự dịch chuyển trạngthái Một trạng thái miêu tả các thông tin về hệ thống tại một thời điểm nhất địnhtrong chuỗi các hành vi của hệ thống đó Thông thường, trạng thái trong chươngtrình máy tính tuần tự thể hiện qua giá trị hiện thời của tất cả các biến trong chương
Trang 18trình và con đếm chương trình trỏ tới lệnh tiếp theo sẽ được thực hiện Các dịchchuyển quy định làm thế nào để hệ thống có thể chuyển từ một trạng thái sangtrạng thái khác Trong các chương trình tuần tự, một dịch chuyển thường xảy rakhi thực thi một đoạn mã làm thay đổi giá trị các biến và con đếm chương trình.
Có nhiều kiểu của hệ dịch chuyển được tạo ra nhằm các mục tiêu khác nhau
Trong hệ dịch chuyển thường sử dụng khái niệm hành động (action names) để gán nhãn cho một dịch chuyển và mệnh để nguyên tử (atomic propositions) để đại diện
cho các trạng thái Các hành động được dùng để mô tả cơ chế giao tiếp giữa cáctiến trình Các mệnh đề nguyên tử được sử dụng để hình thức hóa các đặc tính thờigian
Định nghĩa 1.3.1 Hệ dịch chuyển (Transition System - TS) [3]
Hệ dịch chuyển là một bộ (S , Act, −→, I, AP, L) trong đó:
• S là tập các trạng thái,
• Act là tập các hành động,
• −→⊆ S × Act × S là tập quan hệ dịch chuyển,
• I ⊆ S là tập trạng thái khởi đầu,
• AP là tập các mệnh đề nguyên tử, và
• L : S → 2 AP là hàm nhãn.
Các hành động không cần xem xét, không quan tâm được kí hiệu chung làτ
Để thuận tiện, có thể viết s −→ s−α ′ thay vì (s , α, s′)∈−→ Hoạt động của hệ dịchchuyển có thể mô tả như sau Hệ dịch chuyển bắt đầu với một trong các trạng thái
s0 ∈ I và biến đổi theo quan hệ dịch chuyển −→ Nghĩa là, nếu s là trạng thái hiện thời, thì một dịch chuyển s −→ s−α ′ bắt đầu từ trạng thái s được lựa chọn không đơn
định và thực hiện Hành độngα được thực thi, hệ thống chuyển từ trạng thái s tới trạng thái s′ Quá trình này tiếp tục lặp lại với trạng thái s′ và kết thúc khi gặp mộttrạng thái mong đợi hoặc không tồn tại dịch chuyển nào tiếp theo Trong trườnghợp tại một trạng thái có nhiều dịch chuyển có thể lựa chọn hoặc có nhiều trạngthái khởi đầu thì việc lựa chọn dịch chuyển và một trong các trạng thái khởi đầu
là không đơn định
Hàm nhãn L cho biết mỗi trạng thái s thỏa mãn (được đại diện bởi) các mệnh
đề nguyên tử nào thuộc tập AP Cho công thức lôgic mệnh đề Φ, trạng thái s được
gọi là thỏa mãnΦ nếu từ L(s) có thể suy ra Φ là True
s |= Φ nếu và chỉ nếu L(s) |= Φ
Trang 19Định nghĩa 1.3.2 Trạng thái trước và kế tiếp (Successors and Predecessors) [3]
Cho hệ dịch chuyển (S , Act, →, I, AP, L) Với mỗi trạng thái s ∈ S và α ∈ Act, tập
trạng thái kế tiếp của s với hành động α ký hiệu là α− successors được định nghĩa
Định nghĩa 1.3.3 Trạng thái kết thúc (Terminal State) [3]
Trạng thái s trong một hệ dịch chuyển được gọi là kết thúc nếu và chỉ nếu Post(s) =
∅.
Trong hệ dịch chuyển mô hình một chương trình máy tính tuần tự, trạng tháikết thúc thường xảy ra tương ứng với kết thúc của chương trình Tuy nhiên trong hệthống xử lý song song, các trạng thái kết thúc như vậy thường không được mongđợi
Tính không đơn định rất quan trọng trong mô hình hóa hệ thống Tuy nhiên,theo một số quan niệm, các hành vi quan sát được trên hệ dịch chuyển là đơn định
sẽ hữu ích hơn Có hai cách tiếp cận chính trong quan sát hành vi của hệ dịchchuyển: quan sát dựa trên các hành động và quan sát dựa trên nhãn (các mệnh đềnguyên tử) của các trạng thái Trong khi cách tiếp cận dựa trên hành động giả địnhrằng chỉ có các hành động thực hiện được quan sát từ bên ngoài thì cách tiếp cậndựa trên trạng thái bỏ qua các hành động và dựa trên các mệnh đề nguyên tử đượcthỏa mãn ở trạng thái hiện tại được quan sát Hệ dịch chuyển là đơn định trongcách quan sát dựa trên hành động nếu nó có nhiều nhất một bước chuyển dịch đầu
ra với mỗi hành độngα trên mỗi trạng thái Tương tự, hệ dịch chuyển là đơn định
Trang 20trong quan sát dựa trên các trạng thái nếu với mỗi nhãn A ∈ 2AP, một trạng tháibất kỳ có nhiều nhất một bước chuyển dịch đầu ra dẫn tới một trạng thái với nhãn
A Trong cả hai trường hợp đều yêu cầu có nhiều nhất một trạng thái khởi đầu.
Định nghĩa 1.3.4 Hệ dịch chuyển đơn định và không đơn định [3]
Cho hệ dịch chuyển T S = (S, Act, →, I, AP, L).
• TS được gọi là đơn định theo hành động (action − deterministic) nếu |I| ≤ 1
và |Post(s, α)| ≤ 1 với mọi trạng thái s và hành động α
• TS được gọi là đơn định theo AP (AP − deterministic) nếu |I| ≤ 1 và
|Post(s) ∩ {s′ ∈ S |L(s′) = A}| ≤ 1 với mọi trạng thái s và A ∈ 2 AP
1.3.1.1 Thực thi (Executions)
Hành vi của hệ dịch chuyển được biểu diễn một cách hình thức thông qua ký
pháp thực thi Một thực thi của hệ dịch chuyển là kết quả từ các lựa chọn không
đơn định có thể trong hệ thống, do đó nó mô tả các hành vi có thể trong hệ dịchchuyển
Định nghĩa 1.3.5 Phân đoạn thực thi (Execution Fragment) [3]
Cho hệ dịch chuyển TS = (S , Act, →, I, AP, L) Một phân đoạn thực thi hữu hạn
ϱ của TS là một chuỗi xen kẽ các trạng thái và hành động kết thúc bởi một trạng
thái:
ϱ = s0α1s1α2· · · αn s n trong đó s i
αi+1
−−−→ s i+1 với mọi 0 ≤ i ≤ n
Giá trị n ≥ 0 là độ dài của phân đoạn thực thi ϱ.
Một phân đoạn thực thi vô hạn ρ của TS là một chuỗi đan xen vô hạn các trạng
Định nghĩa 1.3.7 Thực thi (Excution) [3]
Một thực thi của hệ dịch chuyển TS là một phân đoạn thực thi khởi tạo và tối đa.
Trạng thái s được gọi là tới được nếu có ít nhất một phân đoạn thực thi kết thúc tại s và bắt đầu tại một trạng thái khởi tạo.
Trang 21Định nghĩa 1.3.8 Trạng thái tới được (Reachable State) [3]
Cho hệ dịch chuyển TS = (S , Act, →, I, AP, L) Một trạng thái s ∈ S được gọi là
tới được trong TS nếu tồn tại một phân đoạn thực thi khởi tạo, hữu hạn
Reach(TS) biểu diễn tập tất cả các trạng thái tới được của TS
1.3.2 Mô hình hóa hệ thống bằng hệ dịch chuyển
Nội dung phần này sẽ giới thiệu việc sử dụng hệ dịch chuyển trong mô hìnhhóa hệ thống Trong nhiều trường hợp, các trạng thái thường biểu diễn nội dung
bộ nhớ (thông qua các mệnh đề đánh giá trên các biến liên quan mà trạng thái thỏamãn), dịch chuyển biểu diễn sự thay đổi giá trị của các biến trên Khái niệm biến
ở đây được hiểu theo nghĩa rộng, với một chương trình máy tính một biến có thể
là một biến điều khiển (ví dụ con đếm chương trình) hoặc một biến dữ liệu trongchương trình
Kết quả thực thi của các hệ thống phụ thuộc dữ liệu thông thường phụ thuộcvào các điều kiện phân nhánh, ví dụ như
if x%2 = 1 then x := x + 1 else x := 2 ∗ x
Về nguyên tắc, khi mô hình hóa phần chương trình này bởi hệ dịch chuyển, điều
kiện để tiến hành dịch chuyển (phần i f x%2= 1) có thể được bỏ qua và các nhánh
tương ứng (x : = x + 1 và x := 2 ∗ x) có thể được lựa chọn không đơn định Nhưng
nhìn chung, cách mô hình hóa như vậy tạo ra một hệ dịch chuyển quá trừu tượng,không biểu diễn được nhiều thông tin, do đó có rất ít các thuộc tính liên quan cóthể được xác minh Sử dụng cách tiếp cận khác, điều kiện dịch chuyển có thể được
sử dụng để tạo ra các đồ thị chương trình, sau đó các đồ thị chương trình này có thểđược chuyển đổi thành một hệ dịch chuyển tương đương để phục vụ kiểm chứng.Một đồ thị chương trình trên một tập các biến là một đồ thị có hướng, các cạnh
đồ thị được gán nhãn kết hợp giữa các điều kiện (dựa trên giá trị các biến) và cáchành động
Định nghĩa 1.3.9 Đồ thị chương trình (Program Graph) [3]
Một đồ thị chương trình PG trên tập biến Var là một bộ (Loc , Act, E f f ect, ,→ , Loc0, g0) trong đó
• Loc là tập các vị trí (location) và Act là tập các hành động,
• E f f ect : Act × Eval(Var) → Eval(Var) là hàm tác động,
• ,→⊆ Loc × Cond(Var) × Act × Loc là điều kiện dịch chuyển (conditional
transition),
• Loc0 ⊆ Loc là tập các vị trí khởi tạo, và
Trang 22• g0 ∈ Cond(Var) là điều kiện khởi tạo.
Trong định nghĩa trên Eval(Var) là hàm đánh giá trên các biến (thường ký hiệu
ngắn gọn làη) , ví dụ η(y) = 2, Cond(Var) là tập các điều kiện dạng Boolean trên các biến, ví dụ x + y < 5
Hành vi tại vị trí l ∈ Loc phụ thuộc vào giá trị hiện thời của hàm đánh giá η trên các biến Các dịch chuyển l ,−−→ l g:α ′ cùng thỏa mãn điều kiện g theo đánh giá
của hàmη (tức là η |= g) sẽ được lựa chọn theo cách không đơn định để thực hiện.
Thực thi hành độngα làm thay đổi giá trị đánh giá của hàm E f f ect(α, ) trên các biến Sau đó hệ thống chuyển từ vị trí l tới l′ Nếu không còn bước chuyển tiếp nào
có thể thực hiện thì hệ thống dừng
Mỗi đồ thị chương trình có thể được diễn giải dưới dạng một hệ dịch chuyển
Hệ dịch chuyển có thể đạt được thông qua phép chuyển đổi (unfolding) Các trạng
thái của hệ dịch chuyển kết quả là kết hợp giữa vị trí l và đánh giá η dựa trên cácbiến của đồ thị chương trình, ký hiệu là cặp⟨l, η⟩ Trạng thái khởi tạo là vị trí khởi tạo thỏa mãn điều kiện khởi tạo g0 Tập AP các mệnh đề nguyên tử bao gồm các vị trí l ∈ Loc (để chỉ ra vị trí hiện thời kiểm soát hệ thống) và các điều kiện Boolean
trên các biến Ví dụ mệnh đề sau:
(x ≤ 5) ∧ (y%2 = 0) ∧ (l ∈ {1, 2}) trong đó x , y là các biến nguyên và các vị trí được biểu diễn bởi các số tự nhiên.
Trạng thái⟨l, η⟩ được gán nhãn kết hợp giữa l với tất cả các điều kiện trên các biến
được thỏa mãn theo đánh giáη Quan hệ dịch chuyển được xác định như sau Khi
l −−→ l g:α ′ là một điều kiện dịch chuyển trong đồ thị chương trình, và điều kiện g
được thỏa mãn theo đánh giá hiện tạiη, thì có một dịch chuyển từ trạng thái ⟨l, η⟩
tới trạng thái ⟨l′, E f f ect(α, η)⟩ Phép dịch chuyển này rõ ràng là không có điều
kiện Định nghĩa hình thức hệ dịch chuyển của một đồ thị chương trình như sau:
Định nghĩa 1.3.10 Hệ dịch chuyển của đồ thị chương trình [3]
Hệ dịch chuyển TS(PG) của đồ thị chương trình
PG = (Loc, Act, E f f ect, ,→, Loc0, g0)
trên tập biến Var là bộ (S , Act, −→, I, AP, L), trong đó:
Trang 231.4.1 Các thuộc tính thời gian tuyến tính (Linear-Time Property)
1.4.1.1 Hành vi thời gian tuyến tính (Linear-Time Behavior)
Để phân tích hệ thống được biểu diễn bằng hệ dịch chuyển, có thể dựa trên cáccách tiếp cận: quan sát dựa trên hành động và quan sát dựa trên trạng thái Cáchtiếp cận dựa trên trạng thái bỏ qua các hành động mà chỉ xem xét nhãn của cácchuỗi trạng thái Ngược lại, cách tiếp cận dựa trên hành động bỏ qua trạng thái
mà chỉ quan tâm tới nhãn của các hành động dịch chuyển Hầu hết các đặc tả hìnhthức và các phương thức kiểm chứng tương ứng hiện nay có thể được xây dựngtrên cả hai quan điểm
Phần này của luận văn chỉ tập trung vào cách tiếp cận dựa trên trạng thái Nhãncủa các hành động của hệ dịch chuyển chỉ cần thiết đối với việc mô hình hóa quátrình giao tiếp Thay vào đó, các mệnh đề nguyên tử đại diện cho các trạng tháiđược sử dụng để xây dựng thuộc tính của hệ thống Do đó, các thuật toán kiểmchứng mô hình sẽ được thực thi trên đồ thị trạng thái của một hệ dịch chuyển,hướng của đồ thị này được trừu tượng theo nhãn của các hành động
1.4.1.1.1 Đường dẫn và Đồ thị trạng thái (Paths and State Graph) Cho T S = (S, Act, −→ , I, AP, L) là một hệ dịch chuyển.
Định nghĩa 1.4.1 Đồ thị trạng thái (State Graph) [3]
Đồ thị trạng thái của TS, kí hiệu là G(TS), là một đồ thị có hướng (V,E) với các đỉnh V = S và các cạnh E = {(s, s′) ∈ S × S | s′ ∈ Post(s)}
Định nghĩa 1.4.2 Phân đoạn đường dẫn (Path Fragment) [3]
Một phân đoạn đường dẫn hữu hạn ˆ π của TS là một chuỗi hữu hạn các trạng thái
s0s1· · · s n sao cho s i ∈ Post(s i−1) với mọi 0 < i ≤ n, với n ≥ 0
Một phân đoạn đường dẫn vô hạn hạn π của TS là một chuỗi vô hạn các trạng thái
s0s1s2· · · sao cho s i ∈ Post(s i−1) với mọi 0 < i
Định nghĩa 1.4.3 Phân đoạn đường dẫn tối đa và khởi tạo (Maximal and Initial
Path Fragment) [3]
Trang 24Một phân đoạn đường dẫn được gọi là tối đa nếu nó là một phân đoạn đường dẫn hữu hạn và kết thúc với một trạng thái kết thúc hoặc là một phân đoạn đường dẫn
vô hạn.
Một phân đoạn đường dẫn được gọi là khởi tạo nếu nó bắt đầu với một trạng thái khởi tạo (s0 ∈ I)
Ký hiệu Paths(s) biểu diễn tập tất cả các phân đoạn đường dẫn tối đa π với
f irst( π) = s, Paths f in (s) biểu diễn tập tất cả các phân đoạn đường dẫn hữu hạn ˆπ
với f irst( ˆ π) = s
Định nghĩa 1.4.4 Đường dẫn (Path) [3]
Một đường dẫn của hệ dịch chuyển là một phân đoạn đường dẫn khởi tạo và tối đa.
Paths(TS) kí hiệu tập tất cả các đường dẫn của TS và Paths f in (T S ) là tập tất cả
các phân đoạn đường dẫn khởi tạo và hữu hạn.
1.4.1.1.2 Vết (Traces) Thực thi đã được giới thiệu là một chuỗi xen kẽ các trạng
thái và hành động Các hành động được bỏ qua như đã trình bày Nội dung phầnnày chỉ tập trung xem xét các trạng thái được đi qua trong suốt quá trình thực thi.Thực tế, bản thân các trạng thái không thể được quan sát, những quan sát đượcthực hiện thông qua đại diện là các mệnh đề nguyên tử thỏa mãn trên mỗi trạng
thái Do đó, thay vì chuỗi thực thi dạng: s0
xét dưới dạng L(s0)L(s1)L(s2)· · · là tập các mệnh đề nguyên tử hợp lệ của thực
thi Các chuỗi giống như vậy được gọi là vết.
Vết của một hệ dịch chuyển có thể coi là các từ trên bảng chữ cái 2AP Các nộidung phía sau của luận văn giả định rằng hệ dịch chuyển sẽ không có trạng tháikết thúc Trong trường hợp đó, tất cả các vết đều là các từ vô hạn Giả định nàynhằm đơn giản hóa và không gây ra bất kì hạn chế nghiêm trọng nào Trước khi
kiểm tra bất kỳ thuộc tính dạng thời gian tuyến tính nào, một phân tích tới được
có thể được thực hiện để xác định tập các trạng thái kết thúc Nếu một trạng tháikết thúc được tìm thấy, hệ thống bao gồm một bế tắc và cần được sửa trước khitiến hành các phân tích tiếp theo Hoặc hệ dịch chuyển TS có thể được mở rộng
với mỗi trạng thái kết thúc s bằng một trạng thái mới s stop, thêm một dịch chuyển
s −→ s stop và s stop là một vòng tự lặp (s stop −→ s stop) Kết quả là tương đương hệdịch chuyển TS và hệ dịch chuyển này không có trạng thái kết thúc
Trang 25Vết của một phân đoạn đường dẫn do đó là một từ hữu hạn hoặc vô hạn trêntập 2AP, tức là tập các mệnh đề nguyên tử thỏa mãn trên các trạng thái của đườngdẫn Các vết của một tập hợp đường dẫnΠ được định nghĩa như sau
trace( Π) = {trace(π) | π ∈ Π}
Một vết của trạng thái s là vết của một phân đoạn đường dẫn vô hạn π với
f irst( π) = s Tương tự, một vết hữu hạn của s là vết của một phân đoạn đường dẫn hữu hạn bắt đầu bằng s T races(s) kí hiệu tập các vết của s, và T races(T S )
kí hiệu tập các vết của các trạng thái khởi tạo trong hệ dịch chuyển TS
T races(s) = trace(Paths(s)) T races(T S )= ∪
Các nội dung phía sau trong luận văn sẽ giả định rằng tập các mệnh đề AP là
cố định Một thuộc tính thời gian tuyến tính là một yêu cầu trên các vết của hệdịch chuyển Các thuộc tính như vậy có thể được hiểu như một yêu cầu trên tập tất
cả các từ của tập AP, và được định nghĩa là tập tất cả các từ được chấp nhận
Định nghĩa 1.4.6 Thuộc tính thời gian tuyến tính [3]
Một thuộc tính thời gian tuyến tính trên tập các mệnh đề nguyên tử AP là một tập con của (2 AP)ω
Trong đó, (2AP)ω kí hiệu tập các từ phát sinh từ việc ghép nối vô hạn các từ trêntập 2AP Một thuộc tính thời gian tuyến tính do đó là một ngôn ngữ gồm các từ vôhạn trên bộ chữ cái 2AP Lưu ý rằng chỉ xét các từ vô hạn, tức là hệ dịch chuyểnkhông có các trạng thái kết thúc Một thuộc tính thời gian tuyến tính được thỏamãn bởi một hệ dịch chuyển như định nghĩa 1.4.7
Định nghĩa 1.4.7 Thỏa mãn thuộc tính thời gian tuyến tính (Satisfaction
Rela-tion for LT Properties) [3]
Trang 26Cho P là một thuộc tính thời gian tuyến tính trên tập AP và hệ dịch chuyển
T S = (S, Act, −→, I, AP, L) không có trạng thái kết thúc Khi đó TS thỏa mãn
P, kí hiệu là T S |= P nếu Traces(TS ) ⊆ P Trạng thái s ∈ S thỏa mãn P, kí hiệu
1.4.2 Lôgic thời gian tuyến tính (Linear Temporal Logic)
Lôgic thời gian tuyến tính là một ngôn ngữ lôgic hình thức phù hợp với đặc tảcác thuộc tính thời gian tuyến tính Trong phần này luận văn sẽ trình bày cơ bản
về cú pháp và ngữ nghĩa của lôgic thời gian tuyến tính
1.4.2.1 Lôgic thời gian tuyến tính
Lôgic thời gian (temporal logic) mở rộng từ lôgic mệnh đề hoặc lôgic tân từbằng cách thêm các toán tử về thời gian Loại lôgic này phù hợp để biểu diễn cácthuộc tính về quan hệ giữa các nhãn trạng thái trong quá trình thực thi Sử dụnglôgic thời gian và các phương thức lôgic liên quan để kiểm tra các hệ thống phứctạp được đưa ra bởi Pnueli trong cuối những năm 70
Trong luận văn, chỉ tập trung vào lôgic thời gian mệnh đề (propositional poral logic), tức là mở rộng của lôgic mệnh đề bằng các toán tử thời gian Các toán
tem-tử thời gian cơ bản và xuất hiện trong hầu hết các loại lôgic thời gian bao gồm:
♢ "eventually" (thực sự tồn tại một điểm thỏa mãn trong tương lai)
"always" (luôn luôn thỏa mãn)
Tính chất cơ bản về thời gian trong lôgic thời gian có thể được chia làm hai loại:Tuyến tính (linear) và Nhánh (branching) Trong cách nhìn tuyến tính, ở mỗi thờiđiểm chỉ có duy nhất một thời điểm tiếp theo, trong khi với cách nhìn nhánh thìgiống như cấu trúc cây, ở đó thời gian có thể được chia thành các nhánh khác nhau.Luận văn sẽ chỉ tập trung vào lôgic thời gian tuyến tính do sự phù hợp để đặc tảcác thuộc tính thời gian tuyến tính như định nghĩa 1.4.6 Hầu hết các công cụ kiểmchứng mô hình hiện nay đều hỗ trợ sử dụng lôgic thời gian tuyến tính làm ngônngữ đặc tả thuộc tính
Về tính từ thời gian trong lôgic thời gian tuyến tính, thuật ngữ thời gian chỉ
mang ý nghĩa trừu tượng Một ngôn ngữ lôgic thời gian cho phép đặc tả quan hệthứ tự giữa các sự kiện Ví dụ "thông điệp được nhận sau khi nó được gửi" Lôgicthời gian tuyến tính không hỗ trợ bất kì ngữ nghĩa nào liên quan đến thời gianchính xác của các sự kiện Tức là dạng "thông điệp được nhận sau 3 giây sau khi
nó được gửi" không thể đặc tả bằng lôgic thời gian tuyến tính Xét riêng đối với
Trang 27hệ dịch chuyển, khoảng thời gian dịch chuyển hay thời gian lưu lại của hệ thốngtại một trạng thái không đặc tả được bằng lôgic thời gian tuyến tính Thay vào đó,lôgic thời gian tuyến tính cho phép đặc tả thứ tự các trạng thái xảy ra trong suốtquá trình thực thi.
1.4.2.1.1 Cú pháp Phần này mô tả các luật cú pháp để xây dựng công thức lôgicthời gian tuyến tính Thành phần cơ bản của công thức lôgic thời gian tuyến tính là
các mệnh đề nguyên tử (các nhãn a ∈ AP), các kết nối dạng Boolean như phép hội
∧ và phủ định ¬ và hai phương thức thời gian cơ bản ⃝ (tiếp theo) và∪(tận khi)
Các mệnh đề nguyên tử a ∈ AP tượng trưng cho các nhãn trạng thái α trong hệ
dịch chuyển Thông thường, các mệnh đề nguyên tử khẳng định về giá trị của các
biến điều khiển hoặc các biến chương trình giống như x > 5 hoặc x 6 y Phương
thức⃝ là một toán tử tiền tố đơn nguyên, nhận vào duy nhất một công thức lôgicthời gian tuyến tính dưới dạng tham số Công thức⃝φ thỏa mãn ở thời điểm hiệntại nếu φ thỏa mãn trong bước tiếp theo Phương thức ∪ là một toán tử trung tốnhị nguyên, nhận vào hai công thức lôgic thời gian tuyến tính dưới dạng tham số.Công thứcφ1∪φ
2 thỏa mãn ở thời điểm hiện tại, nếu có một vài thời điểm trongtương laiφ2 thỏa mãn vàφ1 thỏa mãn ở tất cả các thời điểm cho đến tận thời điểmtương lai đó
Định nghĩa 1.4.8 Cú pháp lôgic thời gian tuyến tính [3]
Công thức lôgic thời gian tuyến tính trên tập AP các mệnh đề nguyên tử được tạo thành theo cú pháp:
φ ::= true | a | φ1 ∧ φ2 | ¬φ | ⃝ φ | φ1 ∪ φ2
trong đó a ∈ AP
Thứ tự ưu tiên các toán tử như sau Toán tử đơn nguyên liên kết mạnh hơn toán
tử nhị nguyên.¬ và ⃝ liên kết mạnh ngang nhau Toán tử thời gian∪được ưu tiênhơn∧, ∨ và −→ Dấu ngoặc đơn được bỏ qua khi thích hợp Ví dụ viết ¬φ1
được chuyển đổi tới các phương thức thời gian♢ (thực sự) và
(luôn luôn) như sau:
Trang 28♢φ = true∪φ
φ = ¬♢¬φ
Với các phép chuyển đổi trên, có thể thấy được ý nghĩa trực quan của ♢ và
♢φ đảm bảo rằng φ sẽ thực sự đúng trong tương lai φ được thỏa mãn nếu và chỉnếu không tồn tại trường hợp nào¬φ thỏa mãn Điều này tương đương với φ đượcthỏa mãn ở hiện tại và mãi mãi
Bằng việc kết hợp các phương thức thời gian♢ và , các phương thức thời gianmới có thể được tạo ra Ví dụ,♢a (luôn luôn thực sự tồn tại a trong tương lai) mô
tả một thuộc tính chỉ ra rằng ở mọi thời điểm j bất kì luôn có một thời điểm i > j
mà ở đó trạng thái a được thỏa mãn ♢a biểu diễn rằng chắc chắn tồn tại những thời điểm j mà từ đó trạng thái a luôn được thỏa mãn.
1.4.2.1.2 Ngữ nghĩa Công thức lôgic thời gian tuyến tính biểu diễn các thuộc tínhcủa các đường dẫn (hoặc các vết của chúng) Điều này nghĩa là một đường dẫn cóthể thỏa mãn một công thức lôgic thời gian tuyến tính hoặc không Để đánh giámột cách chính xác khi một đường dẫn thỏa mãn một công thức lôgic thời giantuyến tính tiến hành như sau Đầu tiên, ngữ nghĩa của công thức lôgic thời giantuyến tính φ được định nghĩa dưới dạng một ngôn ngữ Words(φ) bao gồm tất cả
các từ vô hạn thỏa mãn φ trên bảng chữ cái 2AP Do đó, đối với mỗi công thứclôgic thời gian tuyến tính, một thuộc tính thời gian tuyến tính duy nhất được kếthợp Sau đó, các ngữ nghĩa được mở rộng tới một diễn giải trên các đường dẫn vàcác trạng thái của hệ dịch chuyển
Định nghĩa 1.4.9 Ngữ nghĩa của lôgic thời gian tuyến tính (diễn giải trên các
Trang 29σ |= ♢φ nếu và chỉ nếu ∃ j > 0 σ[ j · · · ] |= φ
σ |= φ nếu và chỉ nếu ∀ j > 0 σ[ j · · · ] |= φ
Bước tiếp theo là xác định ngữ nghĩa của công thức lôgic thời gian tuyến tínhvới khía cạnh một hệ dịch chuyển Theo định nghĩa về quan hệ thỏa mãn các thuộctính thời gian tuyến tính 1.4.7, công thức lôgic thời gian tuyến tínhφ thỏa mãn tại
trạng thái s nếu tất cả các đường dẫn bắt đầu từ s thỏa mãnφ Hệ dịch chuyển TSthỏa mãnφ nếu TS thỏa mãn thuộc tính thời gian tuyến tính Words(φ), tức là, nếu
tất cả các đường dẫn khởi tạo của TS thỏa mãnφ
Giả định rằng các hệ dịch chuyển không có trạng thái kết thúc, tức là tất cảđường dẫn cũng như vết là vô hạn Giả định này chỉ nhằm mục tiêu đơn giản, hoàntoàn có thể định nghĩa ngữ nghĩa của lôgic thời gian tuyến tính đối với các đườngdẫn hữu hạn Ngữ nghĩa không bị ảnh hưởng bởi tính hữu hạn hay vô hạn của hệdịch chuyển TS Tính hữu hạn hay vô hạn chỉ ảnh hưởng tới các thuật toán kiểmchứng mô hình nói chung
Đối với một thuộc tính thời gian tuyến tính, khi định nghĩa T S |= φ đối với
hệ dịch chuyển TS trên tập AP′ thì ngầm định rằngφ là một công thức lôgic thời
gian tuyến tính với các mệnh đề nguyên tử trong tập AP = AP′ (có thể cho phép
AP ⊆ AP′)
Định nghĩa 1.4.10 Ngữ nghĩa của lôgic thời gian tuyến tính trên các đường
dẫn và trạng thái [3]
Cho hệ dịch chuyển T S = (S, Act, −→, I, AP, L) không có trạng thái kết thúc và
cho φ là một công thức LTL trên tập AP.
• Đối với phân đoạn đường dẫn vô hạn π của TS, quan hệ thỏa mãn được định
nghĩa như sau
π |= φ nếu và chỉ nếu trace(π) |= φ
• Đối với trạng thái s ∈ S , quan hệ thỏa mãn được định nghĩa là
s |= φ nếu và chỉ nếu (∀π ∈ Paths(s) π |= φ)
• TS thỏa mãn φ, kí hiệu là TS |= φ, nếu Traces(TS ) ⊆ Words(φ)
Trang 30Chương 2
Hệ thống tương tranh
Điều kiện đầu tiên để thực hiện kiểm chứng mô hình là tạo được mô hình của
hệ thống dưới phạm trù cần kiểm tra Nội dung luận văn sẽ tập trung xem xét các
hệ thống phần mềm dưới một phạm trù đặc biệt là xử lý tương tranh, nói cáchkhác, các hệ thống được xem xét là các hệ thống tương tranh (concurrent system).Chương này sẽ giới thiệu các điểm chính về hệ thống tương tranh cũng như cách
mô hình hóa hệ tương tranh sử dụng hệ dịch chuyển để phục vụ cho kiểm chứng
mô hình Mỗi cơ chế thực thi, tương tác trong hệ tương tranh được mô hình hóatheo các cách khác nhau, từ trường hợp đơn giản khi các tiến trình chạy hoàn toànđộc lập đến các trường hợp phức tạp khi có sự giao tiếp giữa các tiến trình
Trong khoa học máy tính, hệ tương tranh là hệ thống bao gồm nhiều tiến trìnhđộc lập, được thực thi đồng thời và có thể tương tác với nhau [1] Các tiến trình cóthể được thực thi trên cùng một bộ xử lý bởi các bước xử lý đan xen theo phân khethời gian, hoặc xử lý trên các bộ xử lý riêng biệt Khái niệm tiến trình ở đây mangtính tổng quan, không phải là định nghĩa tiến trình như trong Linux
Định nghĩa hệ tương tranh như trên dường như khá tương đồng với hệ songsong, tuy nhiên đây là hai khái niệm khác biệt
• Tương tranh: Đối phó với nhiều thứ cùng lúc.
• Song song: Làm nhiều thứ cùng lúc.
Trang 31Giữa tương tranh và song song cũng có sự liên quan
• Tương tranh là về cấu trúc, song song là về thực thi
• Tương tranh cung cấp một cấu trúc để giải quyết vấn đề, mà vấn đề đó có thểgiải quyết (nhưng không nhất thiết) bằng xử lý song song
Thử thách chính trong thiết kế các hệ thống tương tranh là đảm bảo được tínhđúng đắn về thứ tự thực hiện, giao tiếp giữa các thành phần tham gia và điều khiểntruy cập tài nguyên chia sẻ Bởi vì các tiến trình trong hệ tương tranh có thể tươngtác với nhau trong khi chúng được thực thi nên số lượng các đường dẫn thực thi cóthể rất lớn và kết quả có thể không xác định Xử lý tương tranh sử dụng chia sẻ tàinguyên có thể dẫn tới vấn đề bế tắc hoặc có thành phần không bao giờ được thựchiện Thiết kế hệ tương tranh thường đòi hỏi việc tìm ra các kỹ thuật để điều phối
xử lý, trao đổi dữ liệu, cấp phát bộ nhớ và lập lịch để tối thiểu thời gian đáp ứngcũng như tối đa hiệu năng [3]
Các mục tiêu cơ bản hệ tương tranh cần phải đạt được là tính đúng đắn, hiệunăng và tính bền vững Một số hệ tương tranh như hệ điều hành và hệ quản trị cơ
sở dữ liệu được thiết kế để hoạt động không dừng có thể yêu cầu thêm một số khảnăng như tự động phục hồi khi xảy ra lỗi và không bị dừng đột xuất [1]
Edsger Dijkstra, Per Brinch Hansen, và C.A.R Hoare là các nhà nghiên cứutiên phong về xử lý tương tranh Một trong những đề xuất đầu tiên là sử dụngmạng Petri để đặc tả mô hình xử lý tương tranh của Carl Adam Petri vào năm
1960 Trong những năm gần đây có rất nhiều kỹ thuật hình thức được phát triển
để mô hình hóa và lập luận, chứng minh về hệ tương tranh Các mô hình toán họcphổ biến được phát triển cho mục tiêu mô tả xử lý tương tranh gồm: Mạng Petri,Process Algebra, Parallel Random Access Machine Model, Actor Model và ReoCoordination Language Trong giới hạn phạm vi luận văn sẽ chỉ đề cập đến môhình Process Algebra Ngôn ngữ CSP# sử dụng trong luận văn là ngôn ngữ mởrộng từ ngôn ngữ CSP được đưa ra bởi C.A.R Hoare, đây là một ngôn ngữ thuộc
họ Process Algebra, dùng đặc tả mô hình hệ tương tranh [7] Hiện nay, lý thuyết
về xử lý tương tranh vẫn đang là một chủ đề nhận được nhiều sự quan tâm, nghiêncứu trong khoa học máy tính
Trong một số hệ tương tranh, cơ chế giao tiếp phức tạp giữa các thành phầnđược ẩn đi đối với lập trình viên, nhưng trong hầu hết các trường hợp còn lại quátrình giao tiếp này phải xử lý thủ công Giao tiếp trong hệ tương tranh được chialàm hai loại [3]:
• Giao tiếp thông qua chia sẻ bộ nhớ (Shared Memory Communication): Các
thành phần giao tiếp với nhau bằng cách cùng sửa nội dung tại phần bộ nhớchia sẻ Kiểu giao tiếp này trong xử lý tương tranh yêu cầu phải có một số cơchế khóa (locking) như mutexes, semaphores, monitors để điều khiển truycập bộ nhớ;
Trang 32• Giao tiếp thông qua truyền thông điệp (Message Passing Communication):
Các thành phần giao tiếp bằng cách trao đổi thông điệp Quá trình trao đổithông điệp có thể tiến hành đồng bộ hoặc bất đồng bộ Giao tiếp thông quatruyền thông điệp thường dễ dàng để lập luận và chứng minh hơn so với kiểuchia sẻ bộ nhớ, do đó thường được dùng nhiều hơn trong lập trình xử lý tươngtranh
Thiết kế hệ tương tranh gặp rất nhiều khó khăn như trên, tuy nhiên các lợi ích
mà hệ tương tranh mang lại là rõ rệt:
• Tăng thông lượng ứng dụng: kiến trúc tốt cho phép tận dụng tối đa khả
năng của phần cứng, cho phép nhiều tác vụ được hoàn thành hơn trong mộtkhoảng thời gian nhất định;
• Đáp ứng tốt hơn cho vấn đề đầu vào/ đầu ra: khi một tác vụ chờ đợi đầu
vào hoặc đầu ra để hoàn thành thì lập tức bộ xử lý được chuyển cho tác vụkhác thực thi trong thời gian chờ đợi;
• Cấu trúc chương trình phù hợp hơn: Một vài vấn đề hoặc miền vấn đề
được thể hiện phù hợp hơn với cấu trúc xử lý tương tranh
2.2 Mô hình hóa hệ tương tranh bởi hệ dịch chuyển
Để kiểm chứng mô hình, hệ thống cần được mô hình dưới dạng hệ dịch chuyển.Chương 1 đã trình bày phương pháp mô hình hóa các hệ thống phụ thuộc dữ liệudạng tuần tự thông thường bằng hệ dịch chuyển Trong thực tế, hầu hết các hệthống phần mềm không tuần tự mà bao gồm nhiều thành phần xử lý tương tranh.Nội dung phần này sẽ mô tả các cơ chế để mô hình hóa hệ tương tranh sử dụngcác hệ dịch chuyển Các cơ chế này sẽ được xét riêng theo từng kiểu thực thi cũngnhư tương tác trong xử lý tương tranh
Giả định rằng các tiến trình tham gia xử lý tương tranh được mô hình hóa bởi
các hệ dịch chuyển T S1, TS2, , TS n Mục tiêu là định nghĩa được toán tử xử lýtương tranh∥ mà
T S = TS1∥TS2∥ · · · ∥TS n
là một hệ dịch chuyển, đặc tả hành vi của hệ thống bao gồm các thành phần xử lý
tương tranh được đại diện bởi các hệ dịch chuyển từ T S1 tới T S n Ở đây toán tử
∥ có thể có tính giao hoán và kết hợp Tính chất của toán tử ∥ phụ thuộc vào kiểuthực thi và tương tác tương ứng Lưu ý rằng một số toán tử tương tranh∥ không có
tính chất kết hợp Trong cấu trúc xử lý tương tranh trên, các T S i lại có thể là kếthợp của một số hệ dịch chuyển khác
T S i = TS i,1∥TS i,2∥ · · · ∥TS i ,n
Trang 33Sử dụng các thành phần xử lý tương tranh theo cách phân cấp, một hệ thống phứctạp có thể được mô tả cấu trúc một cách rõ ràng.
Trong phạm vi luận văn chỉ đề cập tới các cơ chế sau trong xử lý tương tranh:
• Xử lý đan xen (Interleaving)
• Giao tiếp qua biến chia sẻ (Communication via Shared Variables)
• Tương tác dạng bắt tay (Handshaking)
• Giao tiếp thông qua kênh truyền (Channel Systems)
• Xử lý song song đồng bộ (Synchronous Parallelism)
2.2.1 Xử lý đan xen (Interleaving)
Một mô hình thực thi được áp dụng rộng rãi trong xử lý tương tranh là đan xen.
Trong mô hình thực thi đan xen, hệ thống bao gồm các thành phần xử lý hoàn toànđộc lập Do đó trạng thái chung của cả hệ thống được hợp thành từ trạng thái hiệnthời của các thành phần Hành động của một thành phần độc lập được xử lý xen
kẽ tùy ý với hành động từ các thành phần khác Trong hệ tương tranh xử lý theo
cơ chế đan xen, ở mỗi thời điểm, hành động của các tiến trình tham gia được lựa
chọn không đơn định để thực hiện Ví dụ với P và Q là hai tiến trình không kết
thúc, hoạt động hoàn toàn độc lập thì
p q p q p q q q p · · ·
p q p p q p p p q · · ·
p p q p q q P p p · · ·
là 3 chuỗi thực thi có thể của P đan xen Q.
Toán tử đan xen được ký hiệu là||| Hệ dịch chuyển TS1|||TS2 biểu diễn một hệ
thống tương tranh bởi việc đan xen các hành động từ T S1 và T S2 Giả thiết rằngkhông có giao tiếp trong toàn bộ quá trình xử lý Trạng thái chung của hệ thống
T S1|||TS2 là cặp ⟨s1, s2⟩, trong đó s i là trạng thái riêng của thành phần T S i Cácdịch chuyển đầu ra của trạng thái ⟨s1, s2⟩ bao gồm các dịch chuyển đầu ra của s1
cùng với s2 Theo đó, với mỗi trạng thái ⟨s1, s2⟩, một lựa chọn không đơn định
được thực hiện giữa tất cả dịch chuyển đầu ra có thể của s1 và s2
Định nghĩa 2.2.1 Hệ dịch chuyển của xử lý đan xen [3]
Cho T S i = (S i , Act i, −→i , I i , AP i , L i ) i =1,2 là hai hệ dịch chuyển Hệ dịch chuyển
T S1|||TS2 được định nghĩa là
T S1|||TS2 = (S1× S2, Act1 ∪ Act2, −→, I1 × I2, AP1∪ AP2, L)
Trong đó quan hệ dịch chuyển −→ được định nghĩa như sau
Trang 34s1 α
−
−→1s′ 1
⟨s1,s2 ⟩−→−α ⟨s′1,s2 ⟩ và
s2 α
−
−→2s′ 2
⟨s1,s2 ⟩−→−α ⟨s1,s′2⟩
và hàm nhãn được định nghĩa là L( ⟨s1, s2⟩) = L(s1)∪ L(s2)
2.2.2 Giao tiếp qua biến chia sẻ (Shared Variables)
Toán tử đan xen||| có thể được sử dụng để mô hình hóa xử lý tương tranh khôngđồng bộ (asynchronous concurrency), trong đó một tiến trình hoạt động hoàn toànđộc lập với các tiến trình khác, không có bất kì sự trao đổi thông điệp hay tranhchấp thông qua biến chung nào giữa các tiến trình Toán tử đan xen như vậy kháđơn giản, trong khi hầu hết các hệ thống tương tranh đều có tranh chấp hoặc cógiao tiếp giữa các thành phần Một ví dụ đơn giản
x : = 2 ∗ x ||| x : = x + 1 Với biến chung x, rõ ràng thứ tự thực hiện của hai thành phần sẽ ảnh hưởng tới kết quả cuối cùng Giả sử giá trị khởi tạo là x = 3, PG1 là đồ thị chương trình tươngứng{x := 2 ∗ x}, PG2 ứng với {x := x + 1} Khi đó hệ dịch chuyển dạng đan xen
T S (PG1) ||| TS (PG2) như trên sẽ bao gồm một trạng thái không nhất quán ⟨x =
6, x = 4⟩, điều này không phản ánh đúng hành vi của hệ tương tranh Để giải quyết vấn đề này, trước hết phải định nghĩa một đồ thị chương trình đan xen PG1|||PG2,
sau đó chuyển đồ thị chương trình này qua hệ dịch chuyển T S (PG1|||PG2) Rõ
ràng T S (PG1|||PG2) khác T S (PG1)|||TS (PG2)
Định nghĩa 2.2.2 Đan xen các đồ thị chương trình (Interleaving of Program
Graphs) [3]
Cho PG i = (Loc i , Act i , E f f ect i, ,→i , Loc0,i , g0,i ), với i = 1,2 là hai đồ thị chương
trình trên các tập biến Var i Đan xen của hai đồ thị chương trình PG1|||PG2 trên tập biến Var1∪ Var2 được định nghĩa như sau
PG1|||PG2 = (Loc1 × Loc2, Act1 ⊎ Act2, E f f ect, ,→, Loc0 ,1× Loc0 ,2, g0 ,1∧ g0 ,2)
trong đó ,→ được định nghĩa:
l1
g:α
,−−→1l′ 1
⟨l1,l2 ⟩,−−→g:α ⟨l′1,l2 ⟩ và
l2
g:α
,−−→2l′ 2
⟨l1,l2 ⟩,−−→g:α ⟨l1,l′2⟩
và E f f ect( α, η) = E f f ect i(α, η) nếu α ∈ Act i
Các đồ thị chương trình PG1 và PG2 có các biến chung là Var1 ∩ Var2, gọi làcác biến chia sẻ Các biến {Var1 \ Var2} là biến riêng của PG1, {Var2 \ Var1} là
biến riêng của PG2
Trang 352.2.3 Tương tác dạng bắt tay (Handshaking)
Hai cơ chế trong xử lý tương tranh đã được xem xét là: đan xen và biến chia
sẻ Với mô hình đan xen, các tiến trình hoàn toàn độc lập, trong khi với mô hìnhbiến chia sẻ các tiến trình giao tiếp thông qua các biến dùng chung Nội dung phầnnày sẽ xem xét một cơ chế khác, các tiến trình sẽ xử lý tương tranh và tương tác
với nhau qua giao thức bắt tay (handshaking) Thuật ngữ bắt tay nghĩa là các tiến
trình xử lý tương tranh muốn tương tác phải thực hiện theo cơ chế đồng bộ Cáctiến trình chỉ có thể xử lý một hành động khi tất cả cùng sẵn sàng xử lý hành động
đó tại một thời điểm
Thông tin được trao đổi trong quá trình bắt tay rất đa dạng, từ một giá trị sốnguyên đơn giản, tới các dữ liệu có cấu trúc phức tạp như mảng, bản ghi Nội dungluận văn sẽ không đi sâu vào nội dung của thông điệp trao đổi mà chỉ quan tâmtới quá trình giao tiếp khi xảy ra hành động bắt tay
Xét H là một tập hợp các hành động bắt tay (handshake actions), và τ < H (τ
là hành động ẩn, không muốn xem xét) Chỉ khi tất cả các tiến trình thành phần
cùng sẵn sàng thực thi hành động trong tập H thì thông điệp giao tiếp mới có thể được truyền Tất cả các hành động ngoài tập H (Act \ H) là độc lập và có thể được
xử lý đan xen tùy ý
Định nghĩa 2.2.3 Cơ chế bắt tay (truyền thông điệp đồng bộ - Synchronous
Message Passing) [3]
Cho các hệ dịch chuyển T S i = (S i , Act i, −→i , I i , AP i , L i ), với i = 1,2 và H ⊆
Act1 ∩ Act2 với τ < H Hệ dịch chuyển TS1∥H T S2 được định nghĩa như sau:
T S1∥H T S2 = (S1× S2, Act1 ∪ Act2, −→, I1 × I2, AP1 ∪ AP2, L)
Trong đó L( ⟨s1, s2⟩) = L1(s1) ∪ L2(s2), và quan hệ dịch chuyển −→ được định
nghĩa như sau:
• Thực thi đan xen với α < H:
Trang 362.2.4 Giao tiếp thông qua kênh truyền (Channel Systems)
Kênh truyền được sử dụng trong giao tiếp giữa các tiến trình của hệ tươngtranh Các kênh truyền có bộ nhớ đệm kiểu vào trước ra trước (FIFO) để chứa cácthông điệp (message) Trong phạm vi luận văn, hệ thống kênh truyền được xem làđóng, tức là các tiến trình trong hệ thống có thể giao tiếp với nhau thông qua kênhtruyền nhưng không thể giao tiếp với các tiến trình bên ngoài hệ thống
Một hệ thống kênh truyền bao gồm n tiến trình từ P1 đến P n Mỗi tiến trình P i được đặc tả bởi một đồ thị chương trình PG i, ngoài các hành động thông thường(actions) như đã biết thì được mở rộng thêm với các hành động giao tiếp (commu-nication actions) Quá trình chuyển đổi đồ thị chương trình tới hệ dịch chuyển sửdụng các điều kiện chuyển đổi thông thường như trước (gán nhãn với điều kiện vàhành động), hoặc là với một trong các hành động giao tiếp với ý nghĩa sau:
• c!v truyền giá trị v trên kênh c
• c?v nhận một thông điệp trên kênh c và gán cho biến x
Xem xét kênh c dưới dạng bộ nhớ đệm, hành động giao tiếp c!v đưa giá trị v vào cuối bộ đệm, c?x lấy phần tử trên cùng của bộ đệm và gán cho x (giả định biến x là cùng kiểu với phần tử được lấy ra).
Tập hợp:
Comm = {c!v, c?x | c ∈ Chan, v ∈ dom(c), x ∈ Var với dom(x) ⊇ dom(c)}
là tập các hành động giao tiếp, trong đó Chan là tập hữu hạn các kênh truyền Mỗi kênh c có một dung lượng chỉ rõ số lượng tối đa các thông điệp nó có thể chứa, và một kiểu cho biết kiểu của các thông điệp có thể được truyền trên c Dung lượng kênh kí hiệu là cap(c) với cap(c)∈ ∪ {∞}, kiểu của kênh kí hiệu là
dom(c) Ví dụ với kênh chỉ truyền chuỗi các bit thì dom(c)= {0, 1}
Định nghĩa dung lượng kênh tương ứng với kích cỡ của bộ nhớ đệm, tức là số
lượng thông điệp có thể lưu trên bộ nhớ đệm Khi cap(c) ∈ thì kênh được gọi
là hữu hạn, cap(c) = ∞ kênh được gọi là vô hạn Lưu ý cap(c) = 0 là hợp lệ, trong trường hợp này kênh không có bộ nhớ đệm, giao tiếp thông qua kênh c theo phương thức bắt tay (gửi và nhận thông điệp đồng thời - trao đổi thông điệp đồng bộ) Khi cap(c) > 0, sẽ có "trễ", thời điểm gửi và nhận thông điệp là khác nhau(trao đổi thông điệp không đồng bộ) Thông điệp được gửi lên kênh, được chứatrong bộ nhớ đệm và lấy ra tại thời điểm sau thời điểm gửi Bằng hệ thống kênhtruyền, cả phương thức truyền thông điệp đồng bộ và không đồng bộ có thể được
mô hình hóa
Định nghĩa 2.2.4 Hệ thống kênh (Channel System) [3]
Một đồ thị chương trình trên cặp (Var , Chan) là một bộ
PG = (Loc, Act, E f f ect, ,→, Loc0, g0)
Trang 37tương tự như định nghĩa đồ thị chương trình nhưng chỉ khác là
,→⊆ Loc × (Cond(Var) × (Act ∪ Comm)) × Loc
Một hệ thống kênh CS trên tập (Var , Chan) bao gồm các đồ thị chương trình PG i
trên tập (Var i , Chan) (1 6 i 6 n) với Var = ∪16i6n Var i Ký hiệu là
CS = [PG1| · · · |PG n]Quan hệ dịch chuyển,→ của đồ thị chương trình trên tập (Var, Chan) gồm hai kiểu Như nội dung phần trước, các điều kiện dịch chuyển l ,−−→ l g:α ′ được gán nhãn
với điều kiện g và hành độngα Ngoài ra, các điều kiện dịch chuyển có thể được
gán nhãn với các hành động giao tiếp Các điều kiện dịch chuyển này có dạng
l ,−−−→ l g:c!v ′ (gửi v lên kênh c) và l ,−−−→ l g:c?x ′ (nhận một thông điệp từ kênh c) Sự thực
thi của các điều kiện dịch chuyển phụ thuộc vào đánh giá hiện thời trên các biến
và dung lượng cũng như nội dung của kênh c Các điều kiện bảo vệ g được thỏa
mãn theo các giả thiết đơn giản sau:
• Cơ chế bắt tay Nếu cap(c) = 0, thì tiến trình P i chỉ có thể truyền giá trị v lên kênh truyền c bằng xử lý
l i
c!v ,−→ l′i khi có một tiến trình P j nhận tương ứng, tức là có xử lý
l j
c?x ,−−→ l′j
P i và P j phải xử lý c!v (trong P i ) và c?x (trong P j) đồng thời Khi đó quá
trình truyền thông điệp có thể tiến hành giữa P i và P j Tác động của truyền
thông điệp tương ứng phép gán dạng phân tán x : = v Lưu ý là phương thức
bắt tay chỉ sử dụng cho mục đích đồng bộ, không sử dụng cho truyền dữ liệu
• Truyền thông điệp bất đồng bộ Nếu cap(c) > 0, thì tiến trình P i có thể xử
lý điều kiện dịch chuyển
l i
c!v ,−→ l′i nếu và chỉ nếu kênh c không đầy, tức là có ít hơn cap(c) thông điệp đã được lưu trên c Trong trường hợp này, v được lưu phía sau trong bộ nhớ đệm của kênh c Các bộ nhớ đệm trên kênh truyền do đó được coi là FIFO Theo đó,
P j có thể xử lý
l j
c?x ,−−→ l′j nếu và chỉ nếu bộ nhớ đệm của kênh c không rỗng Khi đó phần tử v đầu tiên trong bộ nhớ đệm được lấy ra và gán cho x.
Trang 38Định nghĩa 2.2.5 hình thức hóa hành vi của một hệ thống kênh bằng hệ dịchchuyển Ý tưởng cơ bản vẫn là chuyển đổi từ một đồ thị chương trình sang hệ dịch
chuyển Cho hệ thống kênh CS = [PG1| · · · |GP n ] trên tập (Chan , Var) Trạng thái của hệ dịch chuyển T S (CS ) là các bộ có dạng
⟨l1, · · · , l n, η, ξ⟩
trong đó l i là các vị trí hiện thời của các PG i, η thay đổi theo giá trị hiện tại củacác biến, vàξ ghi lại nội dung hiện tại của các kênh (dưới dạng chuỗi) Một cáchhình thức,η ∈ Eval(Var) là một đánh giá trên các biến và ξ là một đánh giá kênh, tức là ánh xạ từ kênh c ∈ Chan tới một chuỗi ξ(c) ∈ dom(c)∗ mà độ dài của chuỗi
không thể vượt quá dung lượng của kênh c, tức là len( ξ(c)) 6 cap(c), len(.) kí hiệu
độ dài của chuỗi Eval(Chan) kí hiệu tập tất cả các đánh giá kênh Với trạng thái khởi tạo, các thành phần điều khiển l i ∈ Loc0,iphải được khởi tạo và đánh giá biến
η phải thỏa mãn điều kiện khởi tạo g0 Ngoài ra, tất cả các kênh ban đầu được giảđịnh là trống, kí hiệu làε
Đánh giá kênh ξ(c) = v1v2· · · v k (trong đó cap(c) > k) kí hiệu rằng v1 là phía
trước của bộ nhớ đệm của kênh c, v2 là phần tử thứ 2 và v klà phần tử sau cùng của
c len( ξ(c)) = k trong trường hợp này ξ[c := v1, · · · v k] kí hiệu đánh giá kênh trong
đó chuỗi v1, · · · , v k được gán cho c và tất cả các kênh khác không bị ảnh hưởng.
Định nghĩa 2.2.5 Hệ dịch chuyển của hệ thống kênh [3]
Cho hệ thống kênh CS = [PG1| · · · |PG n ] trên tập (Chan , Var) với
PG i = (Loc i , Act i , E f f ect i, ,→i , Loc0,i , g0,i ) với 0 < i 6 n
Hệ dịch chuyển của CS , ký hiệu là T S (CS ), là bộ (S , Act, →, I, AP, L) trong đó
• S = (Loc1 × · · · × Loc n)× Eval(Var) × Eval(Chan)
• Act = ⊎0<i≤n Act i ⊎ {τ}
• → được định nghĩa như sau
* Đan xen đối với α ∈ Act i :
Trang 39* Trao đổi thông điệp không đồng bộ trên kênh c ∈ Chan, cap(c) > 0:
- Nhận một giá trị trên kênh c và gán cho biến x:
l i
g:c?x ,−−−→ l′i ∧ η |= g ∧ len(ξ(c)) = k > 0 ∧ ξ(c) = v1· · · v k
các kênh giống như: "kênh c là rỗng" hoặc "kênh c là đầy", và kiểm tra các điều
kiện này khi đánh giá kênhξ
2.2.5 Xử lý song song đồng bộ (Synchronous Parallelism)
Khi biểu diễn hệ thống không đồng bộ bởi hệ dịch chuyển, không có giả địnhnào về tốc độ tương ứng của các bộ xử lý mà trên đó các thành phần được thực thi.Thời gian lưu trú của hệ thống tại một trạng thái và thời gian xử lý của các hànhđộng bị bỏ qua Vì thế xử lý tương tranh các thành phần là trừu tượng về mặt thờigian
Điều này trái ngược với các hệ thống đồng bộ, các thành phần tiến hóa theo cácbước khóa (lock step fashion) Đây cũng là cơ chế tính toán điển hình trong cácmạch phần cứng đồng bộ, các thành phần khác nhau được kết nối tới một đồng hồtrung tâm và tất cả xử lý từng bước trên mỗi xung nhịp đồng hồ Các xung nhịpđồng hồ xảy ra định kỳ với một độ trễ cố định, các xung nhịp này có thể được xemxét một cách rời rạc, và hệ dịch chuyển có thể được sử dụng một cách thích hợp
để mô tả các hệ thống đồng bộ này Thành phần đồng bộ của hai hệ dịch chuyểnđược nêu trong định nghĩa 2.2.6