Hệ điều hành àC/OS

Một phần của tài liệu ĐỒ ÁN TỐT NGHIỆP HỆ THỐNG QUẢN LÝ BÃI ĐỖ XE (CÓ KÈM FILE CODE) (Trang 31 - 35)

CHƯƠNG 2. THIẾT KẾ HỆ THỐNG

2.2 Hệ điều hành àC/OS

àC/OS là một hệ điều hành thời gian thực được ỏp dụng cho rất nhiều dự ỏn cú yờu cầu cao về đỏp ứng thời gian (hàng khụng, y tế...). àC/OS khụng phải là một hệ điều hành hoàn chỉnh mà chỉ là nhân thời gian thực dùng để cung cấp cho cỏc ứng dụng. Và hệ điều hành àC/OS hỗ trợ cỏc tớnh năng sau:

• Quản lý truy cập tới miền găng của àC/OS

• Cấu trúc và trạng thái của các tác vụ

• Hàm xử lý ngắt

• Quản lý nhịp đồng hồ

• Khởi động hệ thống àC/OS, hệ thống đa nhiệm 2.2.1 Quản lý miền găng

Miền găng trong àC/OS chớnh là vũng mà mó lệnh xảy ra tranh chấp tài nguyờn dùng chung khi có nhiều tiến trình cùng thực hiện miền găng.

VD: Vào cùng một thời điểm có 2 request tới server để cập nhật một đối tượng nào đó mà giá trị của request này lại ảnh hưởng tới request khác. Và những đoạn code đó được gọi là miền găng.

Với mỗi hệ điều hành hay hệ thống mà có nhiều tiến trình chạy thì phải đảm bảo trong một thời điểm chỉ có một tiến trình được thực hiện trong đoạn găng đó để đảm bảo toàn vẹn dữ liệu. Có rất nhiều giải pháp để xử ý trường hợp này như:

Sermaphore, Test&Set, cấm ngắt... àC/OS sử dụng giải phỏp vụ hiệu húa cỏc ngắt khi tiến trình thực thi miền găng. OS_ENTER_CRITICAL() và OS_EXIT_CRITICAL() là 2 hàm để vô hiệu hay hữu hiệu các ngắt đó. Các hàm này có thể được định nghĩa khác nhau tùy vào vi xử lý nên được đặt trong file cấu hình (OS_CPU.H).

2.2.2 Cấu trúc và các trạng thái của các tác vụ

Một tác vụ là một hàm lặp vô hạn. Nó giống như các hàm khác trong C VD:

voidTesk(void*data)

{

27 For(;;){

/* CODE */

Call one of àC/OS's services: OSMboxPend();

OSSemPend();

OSTaskDel(OS_PROI_SELF);

...

/* CODE */

}

}

àC/OS cú thể quản lý tối đa 64 tỏc vụ: trong đú cú 2 tỏc vụ hệ thống cú độ ưu tiên OS_LOWEST_PRIO-0 tới OS_LOWEST_PRIO-3 => Người dùng chỉ quản lý được 56 tác vụ với mỗi tác vụ có 1 độ ưu tiên duy nhất từ OS_LOWEST_PRIO- 0 tới OS_LOWEST_PRIO-2 và àC/OS luụn chạy tỏc vụ cú độ ưu tiờn cao nhất trước.

OSTaskCreate() và OSTaskCreateEx() là 2 hàm trong àC/OS dựng để tạo cỏc tác vụ.

Mỗi tỏc vụ trong àC/OS cú thể ở trong cỏc trạng thỏi sau:

- DORMANT: Tác vụ nằm trong bộ nhớ (ROM hoặc RAM) nhưng chưa được khởi tạo.

- READY: Đây là trạng thái khi tác vụ được tạo ra.

- RUNNING: Là trạng thái khi tác vụ đó được thực thi.

- WAITING (WAITING FOR AN EVENT): Đang chờ sự kiện nào đó.

- INTERRUPTED: Ngắt xuất hiện khi đang thực thi tác vụ và CPU đang thực thi thủ tục ngắt.

Trạng thái DORMANT tương ứng với tác vụ đã nằm trong chương trình nhưng chưa nằm trong sự quản lý của àC/OS. Khi àC/OS gọi hàm tạo

28

(OSTaskCreate() hoặc OSTaskCreateEx()) thì tác vụ trên mới được quản lý bởi hệ điều hành, và nó được chuyển sang trạng thái READY. Khi tác vụ đó bị xóa khỏi àC/OS bằng lệnh OSTaskDel() thỡ tỏc vụ đú bị chuyển về trạng thái DORMANT. Các tác vụ có thể được tạo ra bất cứ lúc nào, khi tạo mới mà được gán quyền cao hơn thì nó lập tức chiếm quyền điều khiển của CPU.

Quá trình đa nhiệm được bắt đầu khi gọi OSStart(). Sau đó OSStart() sẽ chọn tác vụ có trạng thái READY và có độ ưu tiên cao nhất để chuyển sang trạng thái RUNNING.

Một tác vụ đang chạy có thể tự trì hoãn chính nó bằng cách gọi OSTimeDly().

Trong khi đó thì các tác vụ khác có quyền ưu tiên cao hơn vẫn có thể chiếm quyền CPU. OSTimeTick() sẽ khôi phục lại trạng thái RUNNING cho tác vụ khi thời gian trì hoãn kết thúc.

Tác vụ đang chạy cũng có thể đợi sự xuất hiện của các sự kiện khác bằng việc gọi OSMboxPend(), OSSemPend() hoặc OSQPend(), khi gọi các hàm này thì tác vụ sẽ chuyển sang trạng thái WAITTING. Khi tác vụ này đang ở trạng WAITTING thì tác vụ có độ ưu tiên cao nhất tiếp theo được quyền sử dụng CPU. Khi sự kiện xuất hiện thì tác vụ lại được chuyển sang trạng thái READY và được báo bới một tác vụ khác hoặc bằng ISR. Tác vụ đang chạy luôn có thể bị ngắt trừ khi àC/OS vụ hiệu húa cỏc ngắt (thường là khi trong miền găng) và tỏc vụ được chuyển sang trạng thái INTERRUPTED. Khi ngắt xuất hiện, tác vụ bị tạm dừng, ISR chiếm quyền điều khiển CPU. Khi tất cả các tác vụ đều đợi sự kiện thỡ àC/OS sẽ thực hiện tỏc vụ OSTaskIdle().

2.2.3 Lập lịch tác vụ

àC/OS sự dụng bộ lập lịch tỏc vụ được thực hiện bởi hàm OSSched(), nú luụn chọn tác vụ có độ ưu tiên cao nhất để thực thi. Lập lịch mức ISR sẽ được quản lý bởi hàm OSIntExit() (lập lịch sau khi thoát khỏi ngắt).

Thời gian để lập lịch các tác vụ luôn là hằng số và không phụ thuộc vào số tác vụ. Nếu ứng dụng gọi OSSchedLock() hoặc xuất hiện ngắt (OSIntNessting>0), tác vụ lập lịch sẽ kết thúc.

2.2.4 Ngắt trong àC/OS

àC/OS yờu cầu dịch vụ ngắt ISR viết bằng hợp ngữ.

29 ISR:

Save all CPU registers;

Call OSIntEnter() or increment OSIntNesting directly;

Excute user code to service ISR;

Call OSIntExit();

Restore all CPU registers;

Exucute a return from interrup instructions;

Khi tăng trực tiếp OSIntNesting thì sẽ ngắt nhanh hơn do việc gọi hàm OSIntEnter() sẽ phải thực hiện vô hiệu hóa các ngắt khác.

2.2.5 Nhịp đồng hồ

àC/OS yờu cầu cung cấp một đồng hồ thời gian để thực thi cỏc chức năng liờn quan đến đo thời gian mà cỏc dịch vụ cần đến. Trong àC/OS, người phỏt triển cho phép ngắt thời gian sau khi khởi động hệ thống đa nhiệm (OSTart()) nhưng không cho phộp ngắt thời gian xảy ra giữa OSInit() và OSStart() vỡ khi đú àC/OS sẽ trong trạng thái không được định nghĩa và sẽ xảy ra lỗi.

Nhịp đồng hồ trong àC/OS được sử dụng qua hàm OSTimeTick() từ một ngắt đồng hồ. Mã ngắt cho đồng hồ phải được viết bằng hợp ngữ hoặc gọi hàm OSTimeTick() từ một tác vụ có độ ưu tiên cao hơn tác vụ hiện có. Tác vụ này được gọi là TickTask.

2.2.6 Khởi động hệ thống àC/OS

Như đó viết ở trờn thỡ khởi tạo hệ thống àC/OS bằng cỏc gọi hàm OSInit() và hàm này phải gọi trước khi gọi bất cứ dịch vụ nào. OSInit() sẽ khởi tạo mọi biến và cấu trỳc dữ liệu của àC/OS và khởi tạo tỏc vụ OSTaskIdle() với độ ưu tiờn ko đổi là OS_LOWEST_PRIO. Khởi động hệ thống đa nhiệm bằng hàm OSStart() và trước khi khởi tạo hàm này ta phải tạo ít nhất 1 tác vụ cho chương trình ứng dung.

Một phần của tài liệu ĐỒ ÁN TỐT NGHIỆP HỆ THỐNG QUẢN LÝ BÃI ĐỖ XE (CÓ KÈM FILE CODE) (Trang 31 - 35)

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

(39 trang)