Một số mẫu cho hệ thời gian thực

Một phần của tài liệu Hệ thống thời gian thực và ứng dụng các mẫu trong thiết kế (Trang 37 - 44)

Chương I TỔNG QUAN VỀ HỆ THỜI GIAN THỰC

2.1.4 Một số mẫu cho hệ thời gian thực

Trong khuôn khổ luận văn này, sẽ trình bày một số mẫu thường được sử dụng khi thiết kế hệ thời gian thực. Đó là các mẫu sau:

mẫu quan sát (Observer Pattern)

mẫu chiến lược (Trategy Pattern

mẫu ngắt (Interrupt Pattern)

mẫu quay vòng Robin (Round Robin Pattern) 2.1.4.1 Mẫu hành vi Observer

a. Vấn đề

Xác định phụ tnuộc một – nhiều giữa các đối tượng. Khi một đối tượng thay đổi, tất cả những đối tượng phụ thuộc vào nó được nhận biết và cập nhật tự động.

b. Giải pháp

Mẫu quan sát thường được dùng trong các trường hợp sau:

Khi một sự trừu tượng có hai giao diện, một giao diện lại phụ thuộc vào đối tượng khác, các đối tượng phân chia trong hai giao diện lại làm thay đổi hoặc sử dụng lại lẫn nhau một cách độc lập.

Khi có một sự thay đổi yêu cầu tất cả các đối tượng khác cũng phải thay đổi theo mà không cần quan tâm đến có bao nhiêu đối tượng cần được thay đổi.

Các đối tượng phụ thuộc với nhau một cách lỏng lẻo khi thực hiện.

c. Cấu trúc mẫu

Trong mẫu, các đối tượng phân thành hai nhóm:

Subjects: là nhóm đối tượng được quan sát. Đối tượng thuộc nhóm này có dữ liệu được sử dụng bởi các đối tượng khác. Sự thay đổi dữ liệu của đối tượng nhóm này sẽ kéo theo các hành vi, trạng thái tương ứng của các đối tượng sử dụng dữ liệu.

Observers: nhóm đối tượng quan sát: gồm các đối tượng sử dụng dữ liệu của các đối tượng trên.Nhóm quan sát luôn quan sát các đối tượng cụ thể mà nó đã đăng ký.

Khi thấy có tín hiệu thay đổi trên đối tượng được quan sát, đối tượng quan sát tự nhận biết được thay đổi thông qua tín hiệu thay đổi của đối tượng được quan sát và có hành vi tương ứng.

Nhóm được quan sát không cần biết nó được quan sát bởi các đối tượng nào; khi có thay đổi, nó đưa tín hiệu thông báo đã thay đổi cho tất cả các đối tượng quan sát nó.

Hình 2.2 Cấu trúc mẫu Quan sát c. Các kết quả

Tồn tại một cặp trừu tượng: thành phần quan sát và thành phần được quan sát.

Tất cá các thành phần quan sát đều được lập danh sách trong đối tượng được quan sát, và chúng thích nghi với từng lớp giao diện quan sát trừu tượng đơn giản.

Cung cấp sự truyền kết nối rộng rãi: Sự thay đổi tự động truyền đi tới tất cả các đối tượng và được bổ sung vào thành phần quan sát.

Bất ngờ cập nhật: Lý do chủ yếu là do các thành phần được quan sát không có thông tin về các thành phần quan sát do đó chúng không thấy được giá trị thay đổi cuối cùng của thành phần quan sát. Một phép toán trên thành phần quan sát có thể là nguyên nhân dẫn đến sự cập nhật tới thành phần được quan sát và tất cả các đối tượng khác phụ thuộc vào chúng.

2.1.4.2 Mẫu chiến lược a. Vấn đề

Xác định cách giải quyết cho các đối tượng: Xác định một họ thuật toán và làm cho chúng có thể thay đổi được cho nhau, cho phép các thuật toán biến đổi độc lập với máy khách dùng nó.

b. Giải pháp

Cung cấp một cách để định hình một lớp với một cách xử sự trong nhiều cách xử xự của lớp đó. Cần thiết đưa ra các biến đổi khác nhau trong một giải thuật và chúng được thực hiện có thứ tự trong giải thuật.

c. Cấu trúc mẫu

Hình 2.3 Mô hình cấu trúc mẫu chiến lược Trong đó:

strategy : Khai báo một lớp giao diện dùng chung cho tất cả các giải thuật.

ConcreteStrategy: Thực hiện giải thuật sử dụng giao diện chung do strategy cung cấp.

Context : được cấu hình với đối tượng ConcreteStrategy object, lưu trữ một tham chiếu đến đối tượng strategy, có thể định nghĩa một giao diện khác.

d. Các kết quả

 Cung cấp một họ giải thuật có mối quan hệ với nhau

 Cung cấp một lựa chọn cho các lớp con

Mẫu chiến lược cho phép lựa chọn một giải thuật trong họ các giải thuật. Khi đó Context chuyển đổi giữa các chiến lược theo yêu cầu. Phương pháp này tránh được các câu lệnh điều kiện.

Khi có một số tham số khác nhau cần chuyển đổi giữa các thuật toán, mẫu chiến lược cho phép phát triển thành phần giao diện context và mô hình trategy.

2.1.4.3 Mẫu ngắt a. Vấn đề

Việc điều khiển các đáp ứng một cách nhanh chóng và có hiệu quả đối với các sự kiện có mức ưu tiên cao trong khi hệ thống hiện tại đang làm việc?

b. Giải pháp

Các ngắt thực hiện rất nhanh chóng. Chúng cung cấp một cách thức đáp ứng kịp thời đối với các sự kiện khẩn cấp. Trong khi đó, trong nhiều các ứng dụng thời gian thực nhúng, các sự kiện chắc chắn cần được đáp ứng nhanh chóng và có hiệu quả trong khi hệ thống hiện tại đang làm việc. Chính vì vậy, mẫu ngắt này thường được sử dụng trong các hệ thống thời gian thực nhúng.

Hình 2.4. Cấu trúc mẫu ngắt

Bộ điều khiển ngắt int Num: unsigned Old Vector: Address

install (int Num) deinstall(int Num)

handleInterrupt(void) : void Biến tĩnh

Vector ngắt Current Vector: Address

Bảng vector ngắt: Mảng tuyến tính

setVector(int Num, address) getVector(int Num, address)

1

*

1

1

Bộ điều khiển ngắt cụ thể

c. Cấu trúc mẫu

Hình 2.4 mô tả cấu trúc cơ bản của mẫu ngắt. Hệ điều hành cung cấp bảng vector ngắt tổ chức dưới dạng mảng tuyến tính các địa chỉ vector ngắt (kích thước phụ thuộc vào CPU). Bảng này được mô hình giống như một lớp với hai phương thức đặt vào (Set) và lấy ra (Get). Bộ điều khiển ngắt chứa các đường liên kết tới bảng vector ngắt.

Bộ hành vi của các phương thức trong Bộ điều khiển ngắt rất rõ ràng và được mô tả trong Hình 2.5 dưới đây. Cài đặt bộ điều khiển ngắt trỏ tới phương thức handleInterrupts(void) tương ứng với việc thiết lập một con trỏ hàm trỏ tới vector ngắt tương ứng trong bảng vector ngắt.

Hình 2.5. Phương thức điều khiển ngắt

d. Các kết quả

Các phương thức này thường sử dụng hàng đợi các đáp ứng (xử lý không đồng bộ) và cung cấp các đáp ứng có hiệu quả cao cho các sự kiện rất khẩn cấp.

Khi các đáp ứng yêu tới các ngắt được tạo rất ngắn, mẫu cung cấp đáp ứng nhanh và kịp thời. Tuy nhiên, mẫu này không thích hợp khi sử dụng cho các đáp ứng quá dài hoặc khi hệ thống chưa hoàn thành các đáp ứng của nó tới các sự kiện trước.

2.1.4.4 Mẫu luân chuyển Robin a. Vấn đề

Khi các tác vụ đặc biệt không hoàn thành trong một chu kỳ lập lịch đơn hoặc khi toàn bộ tác vụ đang dịch chuyển với tốc độ gần bằng nhau?

b. Giải pháp

Hầu hết các tài liệu về hệ thống thời gian thực đều tập trung vào hệ thống phần cứng. Các hệ thống phần cứng có những tác vụ theo thời gian (theo chu kỳ) và theo sự kiện. Các hệ thống này thực hiện không công bằng vì khi quá tải, các tác vụ có mức ưu tiên thấp sẽ không được thực hiện. Vì vậy, trong các hệ thống này cơ chế giành quyền ưu tiên đã không được thực hiện.

Mẫu luân chuyển sử dụng một chiến lược lập lịch công bằng mà trong đó tất cả các tác vụ đều được thực hiện. Mẫu này tương tự như mẫu điều hành theo chu kỳ ngoại trừ việc tác vụ trước trao quyền ưu tiên dựa trên thời gian.

c. Cấu trúc mẫu

Mẫu luân chuyển Robin có cấu trúc đơn giản. Bộ lập lịch có khả năng giành quyền chạy các tác vụ khi nó nhận được tín hiệu có thông báo từ Bộ bấm giờ. Hình 2.6 cho biết cấu trúc hoàn thiện của mẫu luân chuyển Robin. Hình 2.6a cho biết thêm hai cơ sở đó là : Khối điều khiển tác vụ (Task Control Block) và Ngăn xếp (Stack). Hình 2.6b bỏ qua hai lớp này.

c. Các kết quả

Mẫu luân chuyển Robin xử lý được tình trạng khi có một tác vụ không có hành vi, toàn bộ hệ thống sẽ vẫn hoạt động. Bởi vì bộ đếm giờ sẽ ngắt mỗi tác vụ khi thời gian thực hiện chuyển tác vụ. Cũng giống như mẫu điều khiển theo chu kỳ, mẫu luân chuyển Robin tối ưu các đáp ứng của các sự kiện có ích.

Mẫu này cải tiến hơn mẫu điều hành theo chu kỳ vì số lượng các tác vụ nhiều hơn và không ảnh hưởng gì đến các mẫu giành quyền ưu tiên.

Chuỗi trừu tượng (Abstract Thread)

run(void): void

Chuỗi cụ thể (Concrete thread)

1 (Có thứ tự)

* Bộ lập lịch

(Scheduler)

switchTask() Bộ bấm giờ

(Timer)

Stack

1 1

TaskControlBlock

* 1

1

1 1 1

Hình 2.6a. Mẫu luân chuyển Robin dạng đầy đủ

Chuỗi trừu tượng (Abstract Thread)

run(void): void

Chuỗi cụ thể (Concrete thread)

1 (Có thứ tự)

* Bộ lập lịch

(Scheduler)

switchTask() Bộ bấm giờ

(Timer)

1 1

Hình 2.6b. Mẫu luân chuyển Robin dạng đơn giản

Một phần của tài liệu Hệ thống thời gian thực và ứng dụng các mẫu trong thiết kế (Trang 37 - 44)

Tải bản đầy đủ (PDF)

(91 trang)