Hệ thống điều hành được viết để phục vụ điều khiển bộ xử lý cũng như các tài nguyên khác trong hệ thống bởi vì nó sẽ đảm nhiệm chức năng quản lý và lập lịch các quá trình sử dụng CPU và
Trang 1Chương 2 : Hệ điều hành thời gian thực (Realtime Operating
System- RTOS)
I. Đại cương về hệ điều hành tời gian thực
1. Hệ điều hành
Hệ thống điều hành bản chất cũng là một loại phần mềm nhưng nó khác với các loại phần mềm thông thường Sự khác biệt điển hình là hệ thống điều hành được nạp và thực thi đầu tiên khi hệ thống bắt đầu khởi động và được thực hiện trực tiếp bởi bộ xử lý của hệ thống Hệ thống điều hành được viết để phục vụ điều khiển bộ xử lý cũng như các tài nguyên khác trong hệ thống bởi vì nó sẽ đảm nhiệm chức năng quản lý và lập lịch các quá trình sử dụng CPU và cùng chia sẻ tài nguyên
Hình 2.1: Kiến trúc hệ điều hành
a. Hệ điều hành thời gian thực so với hệ điều hành trên PC
Trang 2Hệ điều hành thời gian thực (RTOS) cho các hệ thống nhúng rất khác so với
hệ điều hành trên máy tính desktop như Windows hay UNIX :
Thứ nhất, trên máy tính desktop hệ điều hành sẽ chiếm quyền điều khiển ngay sau khi máy được bât và sau đó mới cho chúng ta bắt đầu ứng dụng của mình Chúng ta biên dịch và liên kết các ứng dụng của mình tách biệt với hệ điều hành Ngược lại, trong một hệ thống nhúng, ứng dụng thường xuyên liên kết với RTOS Tại lúc khởi động, ứng dụng nhân lấy quyền điều khiển đầu tiên và sau đó
nó mới bắt đầu RTOS Bởi vây ứng dụng và RTOS phải có mối quan hệ chặt chẽ hơn
Thứ hai, rất nhiều RTOS không bảo vệ chính bản thân chúng một cách cẩn thân như hệ điều hành trên desktop
Thứ ba, để tiết kiệm bộ nhớ các RTOS mặc định chỉ bao gồm các dịch vụ cần thiết cho ứng dụng nhúng của chúng ta Hầu hết các RTOS cho phép chúng ta cấu hình bao quát trước khi chúng ta liên kết chúng với ứng dụng
Thứ tư, hầu hết các điều hành trên máy desktop quan tâm đến hiệu năng trung bình trong khi các hệ điều hành thời gian thực lại quan tâm đến các giới hạn, thời gian đáp ứng
Ở trong phần này, chúng ta tìm hiểu khái niệm tác vụ - Task trong môi trường RTOS và vấn đề chia sẻ dữ liệu, semaphores, mailbox,
queue Ngoài ra, chúng ta còn xem xét vấn đề truyền thông liên quá trình, dịch vụ bộ định thời, quản lý bộ nhớ và tương tác giữa các thủ tục ngắt
Các hệ điều hành thời gian thực nhấn mạnh đến khả năng dự đoán
và các ràng buộc về thời gian đáp ứng
b. Các đặc điểm hệ điều hành thời gian thực :
Trang 3Do các yêu cầu khắt khe về thời gian, về việc sử dụng tài nguyên, và sự quan trọng của việc lâp lịch, các RTOS đóng vai trò rất quan trọng trong phát triển hệ nhúng thời gian thực Chúng giống như những thư viện, chúng ta có thể dùng, thêm bớt các dịch vụ cho phù hợp với ứng dụng nhúng thời gian thực để có thể phát triển ứng dụng nhúng thời gian thực một cách nhanh hơn, tin tưởng hơn Vì vây sự tồn tại của các RTOS là rất cần thiết và quan trọng
Trước khi xem xét các dịch vụ của hệ điều hành thời gian thực xác định, ta cần biết như thế nào để có thể đánh giá đây là hệ điều hành thời gian thực tốt, phù hợp với các ứng dụng nhúng thời gian thực của ta Theo FQA cho comp.realtime: Một RTOS tốt chỉ khi có một nhân tốt Một RTOS tốt sẽ có một tài liệu tốt và được phân phát cùng các công cụ tốt để phát triển và vân hành ứng dụng của chúng ta
Vì vây, các tính toán về khoảng thời gian ngắt và thời gian chuyển mạch ngữ cảnh
là rất quan trọng, cùng với các thông số khác làm nên một RTOS tốt Cho ví dụ, một RTOS hỗ trợ nhiều dịch vụ có nhiều thuận lợi hơn một RTOS đơn giản
Thêm vào đó, có những đặc tả chính xác là rất quan trọng để nhân ra RTOS tốt.Theo comp.realtime thì các nhà sản xuất RTOS nên chỉ rõ các yếu tố:
Khoảng thời gian trễ ngắt - Interrupt Latency: là khoảng thời gian từ lúc ngắt tới lúc chạy tác vụ Khoảng thời gian này phải tương thích với các đòi hỏi của ứng dụng và phải dự đoán được Các giá trị này phụ thuộc trên số lượng của các ngắt đồng thời chờ đợi
Cho mỗi lời gọi hệ thống, thời gian tối đa được biết trước Nó sẽ có thể đoán
và không phụ thuộc vào số lượng các đối tượng trong hệ thống
Thời gian cực đại của RTOS và điều khiển các mặt nạ ngắt
Các mức ngắt hệ thống
Trình thiết bị điều khiển các ngắt (IRQ: Interrupt ReQuest), thời gian cực đại của hệ thống mà trình thiết bị điều khiển ngắt thực hiện
Hệ điều hành thời gian thực tương tự như một hệ điều hành đa mục đích và cung cấp các chức năng như:
+ Giao tiếp với phần cứng ở lớp dưới
+ Lâp lịch và xử lý ưu tiên
+ Quản lý bộ nhớ
+ Các dịch vụ vào ra
+ Hỗ trợ sự lựa chọn bộ vi xử lý
+ Tính khả chuyển tới các bộ vi xử lý khác
+ Tính mềm dẻo để phù hợp với các yêu cầu ứng dụng khác nhau
+ Hỗ trợ bộ đa vi xử lý
+ Mở rộng các dịch vụ như hỗ trợ mạng
Trang 4Một RTOS thường có tính mềm dẻo và có tính cấu trúc Nó cho phép tích hợp thêm các dịch vụ gia tăng theo vòng tròn đồng tâm Vòng trong cùng hay nhân cung cấp những đặc tính quan trọng nhất của hệ điều hành thời gian thực Các đặc điểm khác có thể được thêm vào như một vòng ngoài khi cần thiết Nhân nhỏ của một RTOS thích hợp cho một ứng dụng bộ xử lý nhỏ, trong khi những vòng ngoài
có thể giúp đỡ xây dựng hệ thống thời gian thực lớn Các RTOS thường cung cấp các mức xử lý ưu tiên Các công việc ưu tiên cao hơn sẽ được thực hiện trước
2. Phân loại hệ điều hành thời gian thực
a. Hệ điều hành thời gian thực nhỏ với mục đích thương mại
Các hệ điều hành này thường nhỏ và nhanh Như: QNX, PDOS, pSOS, VxWorks, Nulceus, ERCOS, EMERALDS, Windows CE, chúng có các đặc điểm sau:
Có thời gian chuyển ngữ cảnh và thời gian đáp ứng nhanh
Kích thước rất nhỏ
Không có bộ nhớ ảo và có thể cố định mã, dữ liệu trong bộ nhớ
Hệ thống đa tác vụ và chuẩn giao tiếp liên quá trình.Các mailbox, các sự kiện,
các tín hiệu và các đèn báo được định nghĩa tốt
Những hệ điều hành này thường có các đặc tả tốt và có các công cụ tốt để phát triển các ứng dụng nhúng thời gian thực Nó hỗ trợ các ràng buộc thời gian thực với các dịch vụ như:
Các giới hạn thời gian thực hiện
Đồng hồ thời gian thực
Lập lịch thứ tự ưu tiên
Cảnh báo đặc biệt và thời gian quá hạn (timeout)
Hỗ trợ các hàng đơi thời gian thực
Cung cấp việc xử lý độ trễ, treo hay kích hoạt việc thực hiện
b. Hệ điều hành thời gian thực mở rộng tới Unix và các hệ điều hành khác:
Các hệ điều hành này như: RT-UNIX, RT-LINUX, RT-MACH, RT-POSIX Chúng châm hơn và có khả năng dự đoán ít hơn so với các hệ điều hành thời gian thực thương mại ở trên nhưng chúng lại có nhiều chức năng và môitrường phát triển tốt hơn dựa trên tâp các giao tiếp chuẩn và thân thiện
c. Các nhân cho mục đích nghiên cứu
Các hệ điều hành này có các đặc điểm sau:
Hỗ trợ các thuât toán lâp lịch thời gian thực và việc phân tích thời gian
Hỗ trợ các dịch vụ cơ bản để đồng bộ thời gian thực
Nhấn mạnh khả năng dự đoán hơn là hiệu năng trung bình
Trang 5 Hỗ trợ cho khả năng chịu lỗi.
Ví dụ như: Spring, MARS, HARTOS, MARUTI, ARTS, CHAOS, DARK
II. Tổ chức và kiến trúc hệ điều hành thời gian thực.
Hệ thống điều hành đảm nhiệm việc điều khiển các chức năng cơ bản của hệ thống bao gồm chủ yếu là quản lý bộ nhớ, ngoại vi và vào ra giao tiếp với hệ thống phần cứng Một điểm khác biệt cơ bản như chúng ta đã biết về hệ điều hành với các phần mềm khác là nó thực hiện chức năng điều khiển sự kiện thực thi trong hệ thống Có nghĩa là nó thực hiện các tác vụ theo mệnh lệnh yêu cầu từ các chương trình ứng dụng, thiết bị vào ra và các sự kiện ngắt
Hình 2.2: Mô hình hệ thống điều hành Bốn nhân tố chính tác động trực tiếp tới quá trình thiết kế hệ điều hành là :
khả năng thực hiện,
năng lượng tiêu thụ
giá thành
khả năng tương thích
Hiện nay chúng ta cũng có thể bắt gặp rất nhiều hệ điều hành khác nhau đặc biệt cho các hệ nhúng cũng vì sự tác động của 4 nhân tố nêu trên Hầu hết chúng đều có kiểu dạng và giao diện khá giống nhau nhưng cơ chế quản lý và thực thi các tác vụ bên trong rất khác nhau Mỗi hệ điều hành được thiết kế phục vụ trực tiếp các chức năng đặc thù phần cứng của hệ nhúng và không dễ dàng so sánh được giữa chúng với nhau
1. Kiến trúc hệ điều hành
Hai thành phần chính trong thiết kế hệ điều hành là: phần hạt nhân (kernel)
và các chương trình hệ thống
Hạt nhân chính là phần lõi của hệ điều hành Nó được sử dụng để phục vụ
Trang 6cho các bộ quản lý quá trình, bộ lập lịch bộ quản lý tài nguyên và bộ quản lý vào
ra Phần hạt nhân đảm nhiệm chức năng lập lịch, đồng bộ và bảo vệ hệ thống bởi việc sử dụng sai, xử lý ngắt Chức năng điều khiển chính của nó là phục vụ điều khiển phần cứng bao gồm ngắt, các thanh ghi điều khiển, các từ trạng thái và các
bộ định thời gian Nó nạp các phần mềm điều khiển thiết bị để cung cấp các tiện ích chung và phối hợp với các hoạt động vào ra với hệ thống Phần hạt nhân có vai trò điều khiển rất quan trọng để đảm bảo tất cả các phần của hệ thống có thể làm việc ổn định và thống nhất
Hai kiến trúc thiết kế phần hạt nhân kinh điển nhất là kiến trúc vi hạt nhân
và đơn hạt nhân (monolithic)
Vi hạt nhân :
Các vi hạt nhân cung cấp các chức năng điều hành cơ bản cốt lõi (thô) theo
cơ chế các module tương đối độc lập đảm nhiệm các tác vụ cụ thể và chuyển rời rất nhiều các dịch vụ điển hình điều hành hệ thống thực thi trong không gian người sử dụng Nhờ cơ chế này mà các dịch vụ có thể được khởi tạo hoặc cấu hình lại mà không nhất thiết phải khởi tạo lại toàn bộ hệ thống Kiến trúc vi hạt nhân cung cấp
độ an toàn cao bởi vì dịch vụ hệ thống chạy ở tầng người sử dụng với hạn chế về truy nhập vào tài nguyên của hệ thống và có thể được giám sát Kiến trúc vi hạt nhân có thể được xây dựng một cách mềm dẻo để phù hợp với cấu hình phần cứng khác nhau một cách linh hoạt hơn so với kiểu kiến trúc hạt nhân monilithic Tuy nhiên do tính độc lập tương đối giữa các modul trong vi hạt nhân nên cần thiết phải
có một cơ chế trao đổi thông tin hay truyền thông giữa các modul đó vì vậy có thể
là lý do làm chậm tốc độ và giảm tính hiệu quả hoạt động của hệ thống Đặc điểm nổi bật và cốt lõi của kiến trúc vi hạt nhân là kích thước nhỏ và dễ dàng sửa đổi cũng như xây dựng linh hoạt hơn Các dịch vụ thực thi ở tầng trên của hạt nhân vì vậy đạt được độ an toàn cao Kiến trúc vi hạt nhân được phát triển mạnh mẽ trong các hệ thống đa xử lý
Đơn hạt nhân:
Kiểu kiến trúc monolithic cung cấp tất cả chức năng/dịch vụ chính yếu thông qua một qua trình xử lý đơn lẻ Chính vì vây kích thước của chúng thường lớn hơn kiểu kiến trúc vi hạt nhân Loại hình kiến trúc này thường được áp dụng chủ yếu cho các phần cứng cụ thể mà hạt nhân monolithic có sự tương tác trực tiếp với phần cứng nhờ vây mà khả năng tối ưu cũng dễ dàng hơn so với áp dụng kiểu kiến trúc vi hạt nhân Chính vì vây cũng là lý do tại sao kiến trúc monolithic không thể thay đổi mềm dẻo linh hoạt như kiểu vi hạt nhân Ví dụ điển hình về loại hình kiến trúc hạt nhân monolithic bao gồm Linux, MacOS, và DOS
Vì hệ điều hành cũng đòi hỏi về tài nguyên và kiêm cả chức năng quản lý chúng vì vây người thiết kế cần phải nắm được thông tin về chúng một cách đầy đủ
2. Hạt nhân hệ điều hành thời gian thực
Trang 7Hệ thống điều hành với phần lõi là hạt nhân phải đảm nhiệm các tác vụ chính như sau:
Xử lý ngắt
Lưu trữ ngữ cảnh chương trình tại thời điểm xuất hiện ngắt
Nhân dạng và lựa chọn đúng bộ xử lý và phục vụ dịch vụ ngắt
Điều khiển quá trình
Tạo và kết thúc quá trình/tác vụ
Lâp lịch và điều phối hoạt động hệ thống
Định thời
Điều khiển ngoại vi
Xử lý ngắt
Khởi tạo giao tiếp vào ra
Hình 2.3: hệ thống điều hàn với lõi là hạt nhân
Tùy theo cơ chế thực hiện và xây dựng hoạt động của hạt nhân người ta phân loại một số loại hình
Hệ thống thời gian thực nhỏ:
Với loại này các phần mềm được phát triển mà không cần có hệ điều hành, người lập trình phải tự quản lý và xử lý các vấn đề về điều khiển hệ thống bao gồm:
Xử lý ngắt
Điều khiển quá trình/ tác vụ
Quản lý bộ nhớ
Công nghệ đa nhiệm
Mỗi quá trình có một không gian bộ nhớ riêng
Các quá trình phải được chia nhỏ thành các Thread cùng chia sẻ không gian bộ nhớ
Các dịch vụ cung cấp bởi hạt nhân
Tạo và kết thúc quá trình/ tác vụ
Trang 8 Truyền thống giữa các quá trình
Các dịch vụ về định thời gian
Một số các dịch vụ cung cấp hỗ trợ việc thực thi liên quan đến điều khiển hệ hống
Hạt nhân điển hình cơ bản
Loại hạt nhân đơn giản nhất là một vòng lặp vô hạn thăm dò các sự kiện xuất hiện trong hệ thống và phản ứng lại theo sự thay đổi nếu có
Với một bộ xử lý cấu hình nhỏ nhất, không phải lúc nào nó cũng có thể lưu cất ngữ cảnh vì không thể thay đổi con trỏ ngăn xếp hoặc vùng ngăn xếp rất hạn chế
Thay vì sử dụng các thanh ghi thiết bị, vòng lặp thăm dò có thể giám sát các biến mà chịu sự thay đổi cập nhật bởi các bộ xử lý ngắt
Hạt nhân có thể được xây dựng sao cho tất cả các tín hiệu logic được điều khiển bởi vòng lặp và nhịp được điều khiển bởi các ngắt
Các tác vụ lớn cần nhiều thời gian thực hiện có thể được chia nhỏ thành các tác vụ nhỏ và được thực hiện tại các thời điểm khác nhau nhờ vào cơ chế chuyển và sử dụng bộ đếm
Các hạt nhân thực thi theo cơ chế ngắt rất giống với loại hạt nhân thực hiện theo cơ chế vòng lặp thăm dò Nó xử lý tất cả các tác vụ thông qua các dịch vụ ngắt
Các hạt nhân lớn và phức tạp hơn sẽ bao gồm một số các dịch vụ phụ phục vụ cho việc truyền thông giữa các quá trình Và nếu được bổ sung đầy đủ nó sẽ trở thành một hệ điều hành đầy đủ
Các kiểu loại hạt nhân cơ bản
Hạt nhân thực hiện vòng lặp thăm dò
Hạt nhân thực hiện theo cơ chế ngắt
Hạt nhân quá trình vận hành quá trình
Việc lựa chọn loại hạt nhân nào hoàn toàn tùy thuộc vào các bộ xử lý và kích thước phần mềm, tuy nhiên riêng loại hạt nhân vận hành theo quá trình không phù hợp với các bộ xử lý nhỏ
Hạt nhân quá trình
Các hạt nhân quá trình rõ ràng là phức tạp hơn các hạt nhân thực hiện theo
cơ chế thăm dò và điều khiển ngắt Các đường truyền tín hiệu logic bên trong các quá trình và các dịch vụ ngắt được tích hợp và thực hiện thông qua việc truyền dữ liệu
Trang 9Hạt nhân sẽ phải đảm nhiệm chức năng lập lịch cho các quá trình theo đúng
mô hình trạng thái
RUN: quá trình được thực hiện
WAIT: các quá trình chờ một sự kiện hoặc tín hiệu vào ra kích hoạt quá trình
READY: các quá trình sẵn sàng được thực hiện
Các phần tử thuộc tính của một quá trình: Các phần tử này cần thiết để phục vụ cho việc lập lịch Ví dụ đối với cơ chế lập lịch theo mức độ ưu tiên sẽ yêu cầu thông tin sau với mỗi quá trình:
Tên (địa chỉ bộ nhớ của phần tử quá trình)
Trạng thái: RUN, WAIT, READY
Mức độ ưu tiên
Ngữ cảnh (dùng con trỏ để quản lý lưu cất thông tin trong ngăn xếp)
3. Các dịch vụ mở rộng của RTOS thương mại
a. Message Queues, Mailboxes và Piles
Hàng đợi - Queue
Các tác vụ phải có khả năng giao tiếp với nhau để kết hợp các hoạt động và
để chia sẻ dữ liệu Hầu hết RTOS kết hợp của một số dịch vụ như: hàng các đợi thông điệp, các mailboxe, các pipe cho mục đích này Tính năng xác định của các dịch vụ này phụ thuộc vào RTOS, chúng ta phải đọc hướng dẫn mà RTOS đó đưa ra
Hầu hết RTOS yêu cầu chúng ta phải khởi tạo hàng đợi trước khi chúng ta
sử dụng chúng bằng việc gọi hàm cung cấp cho mục đích này Một số hệ thống cho phép chúng ta cấp phát bộ nhớ mà RTOS sẽ quản lý như một hàng đợi
Hầu hết các RTOS cho phép ta sử dụng nhiều hàng đợi nếu chúng ta muốn Chúng ta thêm một số thông số để định danh hàng đợi và từ đó chúng ta có thể đọc, ghi vào hàng đợi đó
Nếu chúng ta cố ghi vào hàng đợi khi nó đã đầy, RTOS sẽ trả lại một thông báo lỗi để chúng ta biết hoạt động đó bị hỏng hoặc là hoạt động đó phải bị khoá cho đến khi có một tác vụ đọc dữ liệu khỏi hàng đợi
Rất nhiều RTOS sử dụng một hàm để đọc từ một hàng đợi nếu có dữ liệu
Trang 10trong hàng đợi và sẽ trả ra một lỗi nếu hàng đợi rỗng Và hàm này sẽ ở trạng thái khoá (block) nếu hàng đợi rỗng
Số byte dữ liệu mà RTOS ghi vào hàng đợi trong một lời gọi có thể không chính xác với số byte dữ liệu chúng ta muốn ghi Rất nhiều RTOS không mềm dẻo
về vấn đề này nhưng có một số RTOS cho phép chúng ta ghi lên một hàng đợi trong một lần gọi số lượng byte mang đến bằng một con trỏ hàm
Mailbox
Nói chung, mailbox là giống hàng đợi Mặc định RTOS có các hàm để tạo, đọc và ghi vào mailbox và có lẽ các hàm này sẽ kiểm tra xem mailbox có chứa được hay không bất kỳ một thông điệp nào Khi mailbox không cần thiết nữa thì
nó sẽ được huỷ để giải phóng bộ nhớ Trong các RTOS thì mailbox có những đặc điểm riêng:
Một số RTOS cho phép chính xác số lượng thông điệp trong mỗi mailbox, con số này chúng ta có thể chọn khi tạo mailbox, một số khác thì chỉ cho phép một thông điệp trong một mailbox tại một thời điểm Một thông điệp được ghi tới mailbox, mailbox sẽ đầy khi đó các thông điệp khác chỉ có thể ghi tới mailbox khi thông điệp đầu được đọc
Trong một số RTOS, số lượng của thông điệp trong mỗi mailbox là không bị giới hạn Chỉ có một giới hạn là tổng số thông điệp trong tất cả các mailbox trong hệ thống
Trong một số RTOS, chúng ta có thể ưu tiên các thông điệp trong mailbox Các thông điệp ưu tiên cao hơn sẽ được đọc trước các thông điệp có ưu tiên thấp hơn, không phụ thuộc vào thứ tự chúng được ghi vào mailbox
Pipe
Các pipe cũngrấtgiống hàngđợi RTOS có thể tạochúng, ghi lên chúng, đọc từ chúng Nhưng trong mỗi RTOS chúng cũng có những đặc điểm riêng:
Một số RTOS cho phép chúng ta ghi thông điệp với độ dài tuỳ ý lên trên pipe (không giống như mailbox và queue độ dài thông điệp là cố định)
Pipe trong một số RTOS là toàn bộ hướng byte: Nếu task A ghi 11 byte tới pipe và sau đó task B ghi 19 byte tới pipe, sau đó nếu task C đọc 14 byte từ pipe, nó sẽ nhận được 11 byte của task A đã ghi cộng với 3 byte đầu tiên mà task B đã ghi
Một số RTOS sử dụng hàm thư viện chuẩn C là fread và fwrite để đọc và ghi tới pipe
Sử dụng queue, mailbox, pipe
Mặc dù queue, mailbox, pipe có thể làm vấn đề chia sẻ dữ liệu giữa các tác
vụ trở lên dễ dàng hơn nhưng nó cũng rất dễ gây ra lỗi trong hệ thống của chúng
ta Đây là một số kinh nghiệm khi sử dụng chúng:
Hầu hết RTOS không giới hạn tác vụ nào có thể đọc, ghi vào queue, mailbox, pipe vì vậy chúng ta phải đảm bảo rằng các tác vụ được sử dụng là