Hệ thống nhúng thời gian thực

15/03/2012 0 8706

Mặc dù khái niệm hệ thống nhúng (embedded system) ra đời cách đây thực sự chưa lâu (1971), tuy nhiên sự phát triển và thành công của nó càng ngày càng rõ nét và chưa có giới hạn cuối cùng.


1. Giới thiệu

Ngày nay, một hệ thống nhúng có các ứng dụng rất rộng rãi trong cuộc sống hàng ngày và có thể tìm gặp ở bất kì các thiết bị điện tử nào. Ví dụ trong các thiết bị điện tử dân dụng (máy giặt, tủ lạnh, TV . . .), các thiết bị điện tử “thông minh” (điện thoại di động), thiết bị truyền thông, thiết bị y tế, xe hơi, thậm chí cả trong một máy tính cá nhân (card mở rộng).

Một hệ thống nhúng đầu tiên được phát triển bởi Intel vào năm 1971. Đó chính là một con chip vi xử lý 4004 cho các máy tính cầm tay. Một con chip giống nó cũng đã được sử dụng cho tất cả các máy tính cầm tay với nhiều chủng lại khác nhau, chúng chỉ khác nhau ở phần mềm tương ứng với mỗi dòng được nạp trên ROM. Ngày nay, trên thế giới xấp xỉ 98% các loại vi xử lý/vi điều khiển được sử dụng trong một hệ thống nhúng. Và ARM là nhà cung cấp hàng đầu các vi xử lý dựa trên kiến trúc RISC 32 bit (chiếm 75% thị trường) cho các hệ thống nhúng đó. Điểm đặc biệt là ARM chỉ bán IP chứ không bán chip, do đó việc tích hợp các IP vi xử lý 32 bit của ARM vào một chip để xây dựng một SoC trở nên dễ dàng hơn.

2. Hệ thống nhúng là gì?
Trong những năm gần đây, sự phân chia khái niệm một hệ thống thế nào là nhúng và thế nào là không nhúng ngày càng mờ nhạt, không rõ ràng. Lý do rất đơn giàn, vì hầu hết các hệ thống ngày nay đều là hệ thống nhúng. Hệ thống nhúng đã có một số lượng rất lớn các ứng dụng từ nhỏ đến lớn, từ trong dân dụng đến trong công nghiệp, từ điều khiển đơn giản đến xử lý phức tạp. . . Trong khuôn khổ bài viết này, một hệ thống nhúng có thể định nghĩa như sau : là một hệ thống chuyên dụng cho một mục đích xác định, bao gồm nhiều thành phần (bộ nhớ, I/O, module chức năng . . .) xung quanh một vi xử lý cùng với một hệ điều hành nhỏ, gọn, nhanh nhằm mục đích điều khiển vi xử lý, tất cả nằm trên một con chip (SoC) hay một board mạch
Điểm quan trọng cần lưu ý là sự khác biệt giữa một hệ thống nhúng và hệ thống máy tính PC : một hệ thống nhúng chính là một hệ thống chuyên dụng với một chức năng cụ thể, trong khi đó hệ thống máy tính PC là một hệ thống đa dụng với chức năng của nó tại một thời điểm do phần mềm quyết định.
Trong một hệ thống nhúng có thể có nhiều chương trình phần mềm chạy cùng lúc với nhau dưới một hệ điều hành nào đó. Bởi vì một hệ thống nhúng còn có thể là một phần nhỏ của một hệ thống lớn hơn, nên nó có thể nằm trên một board mạch với một vi xử lý riêng cùng với phần mềm được lưu trữ trong ROM. Vì là một hệ thống chuyên dụng, nên hầu hết các hệ thống nhúng phải đáp ứng sự thay đổi ở các tín hiệu ngõ vào (input) trong thời gian ngắn nhất có thể, tức là phải đảm bảo tốc độ hoạt động của nó. Vì vậy, các hệ thống nhúng đều có tốc độ hoạt động rất cao là được xếp vào loại thời gian thực (real time). Với các ứng dụng đơn giản, nó chỉ cần một chương trình nhỏ (mà không cần hệ điều hành) để điều khiển hệ thống, tuy nhiên, một hệ điều hành cài đặt trên hệ thống nhúng để chạy các chương trình ứng dụng sẽ giúp cho hệ thống trở nên cực kỳ linh hoạt.
3. Đặc trưng của hệ thống nhúng
Một đặc trưng quan trọng của hệ thống nhúng đó chính là “tính quyết định”. Đặc trưng này có nghĩa là tất cả các trạng thái bên trong của hệ thống, các giá trị ngõ vào liên quan đến ngõ ra đều có thể tính toán trước được (về mặt nguyên tắc). Tất nhiên “tính quyết định” không chỉ là một đặc trưng riêng cho một hệ thống nhúng mà nó có thể là một hệ thống bất kỳ, tuy vậy, một đặc tính khác cũng khá quan trọng và mang nét riêng của hệ thống nhúng đó chính là thời gian thực. Một hệ thống nhúng phải có khả năng thực hiện chức năng của mình trong một khoảng thời gian hữu hạn, ít nhất và có thể biết trước.
Một hệ thống nhúng bao giờ cũng được “bao bọc” bởi một hệ thống phần cứng mà nó điều khiển, chính vì vậy, đối với người sử dụng cuối, họ không nhận ra sự hiện diện của hệ thống nhúng trong một thiết bị phần cứng. Do đó, đây cũng là sự khác biệt giữa một hệ thống nhúng và một máy tính cá nhân. Một hệ thống nhúng cũng có khả năng tương tác với thế giới bên ngoài, tuy nhiên giao diện người sử dụng của nó lại thường khá đơn giản.
Lĩnh vực hệ thống nhúng đòi hỏi sự kết hợp của nhiều ngành lại với nhau như : kỹ thuật phần mềm, hệ điều hành, thiết kế phần cứng (chip) . . . Vì vậy, một kỹ sư thiết kế hệ thống nhúng phải có khả năng hiểu được nhiều lĩnh vực khác nhau, từ thiết kế phần cứng, xuống layout ra chip, đến lập trình phần mềm, cài đặt hệ điều hành . . .
4. Hệ thống thời gian thực
Như đã đề cập ở trên, một hệ thống có khả năng thực hiện thời gian thực nghĩa là hệ thống đó phải thực hiện các chức năng của mình trong một khoảng thời gian xác định và nhỏ nhất có thể chấp nhận được. Khi đáp ứng được yêu cầu này, hệ thống đó có thể gọi là hệ thống thời gian thực
Các hệ thống này phải có khả năng đáp ứng các tín hiệu ngõ vào hoặc các sự kiện trong giới hạn một khoảng thời gian bắt buộc. Cho nên các hệ thống này không chỉ phải trả về một kết quả đúng mà còn phải nhanh nhất đáp ứng được yêu cầu về tốc độ của hệ thống. Trong các hệ thống thời gian thực, tốc độ cũng quan trọng không kém gì độ chính xác của nó.
Có 2 loại thời gian thực : thời gian thực cứng và thời gian thực mềm. Đối với hệ thống thời gian thực cứng, tất cả các chức năng của nó phải được thực thi chính xác trong một khoảng thời gian xác định, nếu không cả hệ thống sẽ bị lỗi nghiêm trọng. Ví dụ : hệ thống điều khiển không lưu, hệ thống dẫn đường tên lửa, thiết bị y tế . . . Đối với hệ thống thời gian thực mềm, các chức năng phải được thực hiện trong một khoảng thời gian xác định nhỏ nhất nhưng không bắt buộc.
5. Hệ điều hành thời gian thực (RTOS) và kernel thời gian thực
Một số các ứng dụng nhúng có thể thực hiện hiệu quả mà chỉ cần một chương trình đơn giản chạy độc lập điều khiển cả hệ thống. Tuy nhiên, đối với đa số các ứng dụng mang tính thương mại, một hệ nhúng cần phải có hệ điều hành thời gian thực hoặc kernel thời gian thực. Một kernel thời gian thực thường nhỏ hơn rất nhiều so với một RTOS hoàn chỉnh. Trong lý thuyết về hệ điều hành, kernel chính là một phần của hệ điều hành, nó sẽ được nạp lên bộ nhớ đầu tiên và vẫn tồn tại trong lúc chương trình hoạt động. Một kernel thời gian thực sẽ cung cấp hầu hết các dịch vụ cần thiết cho các ứng dụng nhúng.Do đó chỉ là một phần của hệ điều hành và được nạp thẳng lên bộ nhớ, nên một kernel thời gian thực thường có kích thước rất nhỏ, rất phù hợp cho các bộ nhớ có dung lượng thấp trong các hệ thống nhúng. Hình dưới mô tả một kernel trong một RTOS hoàn chỉnh.

Hoạt động của hệ thống nhúng đươc thực hiện theo chương trình, gồm các tác vụ (task) hoặc luồng (thread) trong việc đáp ứng các tín hiệu ngõ vào hay trong quá trình xử lý bình thường theo yêu cầu của hệ thống. Các quá trình xử lý phải trả về kết quả đúng trong một khoảng thời gian xác định.
6. Chương trình, tác vụ và luồng
Một chương trình trên một hệ thống nhúng chính là một phần mềm có khả năng thực thi độc lập và có vùng nhớ riêng của mình. Nó bao gồm môi trường thực thi một chức năng cụ thể và khả năng tương tác với hệ điều hành. Một chương trình có thể được bắt đầu chạy một cách độc lập hoặc có thể từ các chương trình khác. Một hệ điều hành có khả năng thực thi nhiều chương trình cùng một lúc song song nhau.
Tuy nhiên, khi một chương trình có khả năng tự chia ra một vài phần có khả năng thực thi song song nhau, mỗi phần đó được gọi là một luồng. Một luồng chính là một phần trong chương trình và phụ thuộc về mặt chức năng so với các luồng khác nhưng lại có khả năng hoạt động độc lập nhau. Các luồng sẽ chia sẻ chung một bộ nhớ trong một chương trình. Khái niệm về tác vụ và luồng có thể thay thế cho nhau. Hình dưới mô tả sự khác nhau giữa chương trình và luồng.

7. Kiến trúc của hệ thống thời gian thực
Kiến trúc của một hệ thống thời gian thực sẽ quyết định các luồng được thực thi khi nào và bằng cách nào. Có 2 kiến trúc phổ biến là kiến trúc điều khiển vòng lặp với polling và mô hình sắp xếp ưu tiên. Trong kiến trúc điều khiển vòng lặp với polling, kernel sẽ thực thi một vòng lặp vô hạn, vòng lặp này sẽ chọn ra luồng trong một mẫu được định trước. Nếu một luồng cần dịch vụ, nó sẽ được xử lý. Có một vài biến thể của phương pháp này, tuy nhiên vẫn phải đảm bảo mỗi luồng đều có khả năng truy cập đến vi xử lý. Hình dưới mô tả cách xử lý của phương pháp này.

Mặc dù phương pháp điều khiển vòng lặp với polling rất dễ thực hiện, tuy nhiên nó vẫn có những hạn chế nghiêm trọng. Thứ nhất đó chính là nó sẽ mất rất nhiều thời gian, khi mà một luồng cần truy cập đến vi xử lý sẽ phải chờ đến lượt của mình, và một chương trình có quá nhiều luồng sẽ bị chậm đi rất nhiều. Thứ hai, phương pháp này không có sự phân biệt giữa các luồng, luồng nào quan trọng và luồng nào ít quan trọng, từ đó xác định mức độ ưu tiên giữa các luồng.
Một phương pháp khác mà các kernel thời gian thực hay sử dụng đó chính là mô hình sắp xếp mức độ ưu tiên. Trong mô hình này, mỗi luồng sẽ đi kèm với mức độ ưu tiên của nó, lúc này, vi xử lý sẽ thiết lập đường truy cập tới luồng nào có mức độ ưu tiên cao nhất khi nó đòi hỏi được phục vụ. Cũng có một vài biến thể của phương pháp này, tuy nhiên vẫn phải đảm bảo các luồng có mức độ ưu tiên thấp nhất vẫn phải có thể truy cập tới vi xử lý một vài lần. Hình dưới mô tả phương pháp cách xử lý của phương pháp này.

Một ưu điểm cực kỳ quan trọng của phương pháp này đó chính là nó có khả năng tạm hoãn thực thi một luồng khi có một luồng khác với mức độ ưu tiên cao hơn cần phục vụ. Quá trình lưu trữ lại các thông tin hiện thời của luồng bị tạm hoãn thực thi khi có một luồng khác với mức độ ưu tiên cao hơn cần phục vụ gọi là “context switching”. Quá trình này phải được thực hiện nhanh và đơn giản để luồng bị tạm hoãn có thể thực hiện tiếp nhiệm vụ của mình một cách chính xác khi nó lấy lại đươc quyền điều khiển.
Một hệ thống nhúng thời gian thực phải có khả năng đáp ứng lại các tín hiệu ngõ vào hay các sự kiện một cách nhanh nhất và chính xác nhất, đây chính là các ngắt của hệ thống. Ngắt của hệ thống sẽ phải làm cho vi xử lý ngưng nhiệm vụ đang thực thi để xử lý ngắt. Một ngắt sẽ được xử lý bởi ISR (interrupt service routine), nó có khả năng kích hoạt một luồng có mức độ ưu tiên cao hơn luồng đang được thực thi. Lúc này, nó sẽ tạm hoãn lại luồng hiện tại để dành quyền cho luồng mới có mức độ ưu tiên cao hơn. Ngắt có thể được tạo ra bởi phần mềm (ngắt mềm) hay bởi các thiết bị phần cứng (ngắt cứng).
8. Sự phát triển của hệ thống nhúng
Các ứng dụng nhúng ngày nay rất rộng rãi và sẽ được phát triển ngày càng cao ở cả phần cứng lẫn phần mềm. Các ứng dụng nhúng đều cần phải có thời gian thực, đây là một sự khác biệt rất lớn giữa một hệ thống nhúng và một hệ thống máy tính truyền thống. Ngày nay để tăng tốc độ của một hệ thống nhúng, nó phải có khả năng thực hiện xử lý song song giữa các luồng với nhau. Do vậy, cách viết các chương trình phần mềm truyền thống sẽ không còn phù hợp khi lập trình cho các hệ thống nhúng đa luồng nữa. Hơn nữa, một vi xử lý trong hệ thống nhúng đòi hỏi tốc độ cao sẽ không còn làm nhiệm vụ xử lý, mà chỉ còn làm nhiệm vụ điều khiển và giám sát hoạt động của hệ thống. Chức năng xử lý luồng dữ liệu sẽ được các module phần cứng trong hệ thống đảm nhận và được thực hiện song song nhau. Kiến trúc một hệ thống nhúng thời gian thực đã có sự khác biệt rất nhiều và những cải tiến đáng kể so với kiến trúc hệ thống máy tính truyền thống trước kia. Điều này nhằm đảm bảo về sự chính xác và cải thiện tốc độ của hệ thống. Hầu hết các hệ thống nhúng ngày nay dùng ngôn ngữ C để lập trình, tuy nhiên một số rất ít vẫn dùng hợp ngữ.

Theo TC - Bimosvietnam

Đăng nhập