NGUYỄN HẢI HÀ
BỘ GIÁO DỤC VÀ ĐÀO TẠO TẬP ĐOÀN BƯU CHÍNH VIỄN THÔNG VIỆT NAM
HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THÔNG
NGUYỄN HẢI HÀ
KỸ THUẬT ĐIỆN TỬ
NGHIÊN CỨU ỨNG DỤNG EMBEDDED OS
VÀO BÀI TOÁN GIÁM SÁT TRẠM VỆ TINH
LUẬN VĂN THẠC SỸ KỸ THUẬT
2005 – 2008
HÀ NỘI
2008
HÀ NỘI - 2008
BỘ GIÁO DỤC VÀ ĐÀO TẠO TẬP ĐOÀN BƯU CHÍNH VIỄN THÔNG VIỆT NAM
HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THÔNG
NGUYỄN HẢI HÀ
NGHIÊN CỨU ỨNG DỤNG EMBEDDED OS
VÀO BÀI TOÁN GIÁM SÁT TRẠM VỆ TINH
CHUYÊN NGÀNH : KỸ THUẬT ĐIỆN TỬ
MÃ SỐ:23.060.52.704.3898
LUẬN VĂN THẠC SỸ KỸ THUẬT
Người hướng dẫn khoa học : TS. HOÀNG MINH
HÀ NỘI - 2008
i
LỜI CẢM ƠN
Tôi xin bày tỏ lòng biết ơn đối với các thầy, cô giáo trong Học Viện Công nghệ
Bưu chính Viễn thông, các bạn bè, đồng nghiệp, người thân và nhất là người hướng
dẫn trực tiếp - Tiến sĩ Hoàng Minh đã tạo điều kiện giúp đỡ, hỗ trợ và động viên tôi
hoàn thành luận văn này.
Hà nội, 2008
Nguyễn Hải Hà
ii
Mục lục
DANH MỤC CÁC KÝ HIỆU, CÁC CHỮ VIẾT TẮT iv
DANH MỤC CÁC BẢNG BIỂU v
DANH MỤC CÁC HÌNH VẼ vi
MỞ ĐẦU 1
Chương 1 - Giới thiệu chung 2
Thế nào là một hệ thống nhúng 2
1.1 Ứng dụng của hệ thống nhúng 3
1.2 Mục đích của việc nghiên cứu 6
1.3 Nội dung nghiên cứu 8
1.4 Kết chương 8
Chương 2 - Kiến trúc của hệ điều hành nhúng 9
2.1 Lịch sử và sự phát triển trong tương lai 9
2.2 Các hệ thống thời gian thực 10
2.3 Đặc điểm nổi bật so với Multi-purpose OS 10
2.4 Mô hình 12
2.5 Quản lý tiến trình 13
2.6 Lập lịch 15
2.6.1 Quyền ưu tiên của tác vụ 16
2.6.2 Quyền ưu tiên tĩnh 16
2.6.3 Quyền ưu tiên động 16
2.6.4 Đảo ngược quyền 16
2.6.5 Cấp quyền ưu tiên 17
2.6.6 Thuật toán lập lịch 17
2.7 Nhân hệ điều hành 18
2.7.1 Nhân không hỗ trợ đoạt quyền ưu tiên 18
2.7.2 Nhân hỗ trợ đoạt quyền ưu tiên 20
2.8 Quản lý bộ nhớ 21
RAM 22
ROM 22
2.9 Keyboard 23
2.9.1 Cơ sở về bàn phím 23
2.10 Module LCD ký tự 25
2.10.1 Màn hình tinh thể lỏng 25
2.10.2 Module LCD ký tự 27
2.11 Quản lý định thời 27
2.12 Các cổng vào/ra rời rạc 28
2.12.1 Các đầu vào rời rạc 30
2.12.2 Các đầu ra rời rạc 31
2.13 Các đầu vào ra tương tự 32
2.13.1 Đọc ADC 33
2.14 Kết chương 34
Chương 3 - Tìm hiểu một số hệ thống nhúng và cách thức phát triển hệ thống nhúng 35
3.1 Ví dụ về một số hệ thống nhúng 35
Đặc tính của các hệ thống nhúng 37
Phân loại các hệ thống nhúng 38
iii
Phần cứng nhúng 39
Kiến trúc phần cứng 39
Phần mềm 43
3.1.2 Nhân hệ điều hành 43
3.1.3 Hệ con điều khiển tác vụ hoặc tiến trình 43
3.1.4 Hệ con quản lý driver thiết bị hoặc I/O 43
3.1.5 Các loại OS ứng dụng trong các hệ thống nhúng 43
3.1.6 Ngôn ngữ lập trình hệ nhúng 44
3.1.7 API 44
Các bước phát triển ứng dụng 44
3.2 Kết chương 46
Chương 4 - Xác định phạm vi và tiêu chí bài toán ứng dụng 47
Đặt vấn đề 47
Chỉ tiêu kỹ thuật 48
Các chỉ tiêu đối với hệ điều hành 48
Các yêu cầu khác về hệ thống 48
4.1 Các hệ thống giám sát hiện có trên thị trường 50
Phạm vi bài toán ứng dụng 50
4.1.1 Đặc điểm của FreeRT OS 50
Một số hàm API của Free RTOS 51
4.1.2 Xây dựng hệ thống giám sát cảnh báo 53
4.2 Kết chương 53
Chương 5 - Thiết kế, phát triển hệ thống và kết quả thử nghiệm 54
5.1 Thiết kế tổng thể 54
5.1.1 Mô hình một trạm tổng đài vệ tinh 54
5.1.2 Mô hình hệ thống 54
5.2 Thiết kế chi tiết 56
5.2.1 Thiết kế phần cứng 57
5.2.2 Thiết kế phần mềm 57
5.2.3 Cổng đo DI (các cổng cắm thiết bị đo) 59
5.3 Thực hiện giải pháp 66
5.3.1 Thiết bị đo + cảm biến 66
5.3.2 Phân tích, xử lý các tín hiệu và điều khiển đầu ra 66
5.4 Các sơ đồ đấu nối thiết bị 67
5.4.1 Sơ đồ đấu nối DI-DO 67
5.4.2 Sơ đồ chân DI/DO 67
5.5 Kết quả thử nghiệm 67
5.6 Kết chương 68
TÀI LIỆU THAM KHẢO 70
DANH MỤC CÁC KÝ HIỆU, CÁC CHỮ VIẾT TẮT
Từ viết tắt Từ đầy đủ Ý nghĩa
OS Oprating system Hệ điều hành
API Application Programming Interface Giao diện lập trình ứng dụng
ROM Read only memory Bộ nhớ chỉ đọc
RAM Random Access Memory Bộ nhớ truy cập ngẫu nhiên
ACNMS Alarm, Control network
management system
Hệ thống quản lý mạng cảnh
báo và điều khiển
DB Database Cơ sở dữ liệu
SMS Short message system Hệ thống nhắn tin ngắn
ACS Access control service Module quản lý truy cập
TCP Transmission Control Protocol Giao thức điều khiển truyền vận
IC Intergrated curcirt Mạch tổ hợp
I/O Input/Output Vào/ra
MIPS Millions of instructions per second Hàng triệu lệnh mỗi giây
RT OS RealTime Oprating system Hệ điều hành thời gian thực
LCD Liquid crystal display Màn hình tinh thể lỏng
CPU Central Processing Unit Đơn vị xử lý trung tâm
ISR Interrupt service routine Tiến trình dịch vụ ngắt
ADC Analog and Digital Converters Biến đổi tương tự số
DAC Digital and Analog Converters Biến đổi số tương tự
MC Microchip Chíp micro
CRC Cyclic redundancy check Kiểm tra mã vòng
MMI Monitor Management Interface Giao diện quản lý giám sát
PLC Programmable Logic Controller Bộ điều khiển logic lập trình
được
NCB Ngưỡng cảnh báo
ATS Automatic Transfer Switch Tự động chuyển nguồn
DANH MỤC CÁC BẢNG BIỂU
Bảng 1-1 Các yêu cầu thiết kế chung cho các hệ thống nhúng 6
Bảng 2-2 Đặc tính của bộ nhớ 22
DANH MỤC CÁC HÌNH VẼ
Hình 1-1 Hệ thống nhúng điển hình 4
Hình 2-2 Kiến trúc nhân hệ điều hành nhúng 13
Hình 2-3 Trạng thái của tác vụ 13
Hình 2-4 Multiple tasks 15
Hình 2-5 Đảo ngược quyền ưu tiên 17
Hình 2-6 Hoạt động của nhân không hỗ trợ đoạt quyền ưu tiên 19
Hình 2-7 Hoạt động của nhân có hỗ trợ đoạt quyền ưu tiên 21
Hình 2-8 Các loại bộ nhớ trong hệ thống nhúng 21
Hình 2-9 Công tắc bàn phím 24
Hình 2-10 Ma trận bàn phím 24
Hình 2-11 Các kiểu LCD 26
Hình 2-12 Các đầu vào rời rạc 28
Hình 2-13 Các đầu ra rời rạc 29
Hình 2-14 Đọc các đầu vào rời rạc sử dụng 74251 30
Hình 2-15 Kênh đầu vào rời rạc 31
Hình 2-16 Cập nhật các đầu ra rời rạc sử dụng 74259 32
Hình 2-17 Kênh đầu ra rời rạc 32
Hình 2-18 Biến đổi tương tự - số 33
Hình 3-19 Ví dụ về các hệ thống nhúng những năm đầu 35
Hình 3-20 Các ứng dụng của hệ thống nhúng 36
Hình 3-21 Một số mạch logic 37
Hình 3-22 PLC và Embedded System 38
Hình 3-23 Kiến trúc phần cứng 39
Hình 3-24 Một số bộ vi xử lý 40
Hình 3-25 Một số loại bộ nhớ sử dụng trong hệ thống nhúng 40
Hình 3-26 Các loại hiển thị 41
Hình 3-27 Ví dụ về bộ cảm biến áp suất 42
Hình 3-28 Các bước phát triển ứng dụng 45
Hình 3-29 Ví dụ về một bo mạch đánh giá 46
Hình 5-30 Mô hình một trạm tổng đài vệ tinh 54
Hình 5-31 Mô hình hệ thống 55
Hình 5-32 Sơ đồ khối PLC tại trạm vệ tinh 57
Hình 5-33 Sơ đồ DI/DO trên PLC 67
MỞ ĐẦU
Các nghiên cứu về Hệ điều hành nhúng (Embedded OS) ứng dụng trong các hệ
thống nhúng (Embedded System) đã có lịch sử phát triển và là một trong những
động lực phát triển của Công nghệ thông tin và Viễn thông trong những thập kỷ
qua. Với đặc tính hướng ứng dụng của mình, hệ điều hành nhúng giúp cho các hệ
thống nhúng thông minh hơn, đáp ứng nhu cầu về công việc, về đời sống cho con
người ngày một thiết thực hơn.
Từ việc nghiên cứu hệ điều hành nói chung, hệ điều hành nhúng thời gian thực nói
riêng, để có được một hệ thống nhúng ứng dụng vào một lĩnh vực cụ thể trong lĩnh
vực Viễn thông đòi hỏi quá trình đầu tư lâu dài và liên tục. Trên thế giới, các hệ
thống nhúng đã tiến một bước dài. Tuy nhiên ở Việt Nam, hầu hết các nghiên cứu
trong lĩnh vực Công nghệ thông tin và Viễn thông chỉ tập trung vào hướng phát
triển phần mềm ứng dụng, chưa quan tâm nhiều lĩnh vực phần mềm hệ thống
nhúng. Với sự phát triển mạnh mẽ của công nghệ phần cứng trên thế giới, các bộ vi
xử lý được sản xuất hàng loạt với giá thành hạ, thì việc nghiên cứu hệ điều hành
nhúng là cần thiết, để có thể đưa ra được những hệ thống thông minh ứng dụng
trong các lĩnh vực khác nhau của đời sống nói chung và Viễn thông nói riêng.
Đề tài nghiên cứu này nhằm mục tiêu góp phần nhỏ bé vào những nỗ lực tiếp cận
các kỹ thuật liên quan và mong muốn đưa ra được các ứng dụng cụ thể.
Chương 1 - Giới thiệu chung
Thế nào là một hệ thống nhúng
Một hệ thống nhúng là một kết hợp giữa phần cứng và phần mềm máy tính, và có
thể thêm một số phần cơ khí khác, được thiết kế để thực hiện một chức năng xác
định. Lò vi sóng là một ví dụ cụ thể. Gần như mọi gia đình đều có ít nhất một lò vi
sóng trong nhà, và hàng chục triệu sản phẩm được sử dụng mỗi ngày, nhưng rất ít
người nhận ra được đã có một bộ xử lý và phần mềm có dính dáng đến việc chuẩn
bị bữa ăn trưa hoặc ăn tối của họ.
Điều này đối lập với máy tính cá nhân của mỗi gia đình. Máy tính cá nhân cũng có
phần cứng, phần mềm và một số phần cơ khí (như các ổ đĩa, ). Nhưng máy tính cá
nhân không được thiết kế để thực hiện một chức năng xác định mà ngược lại, chúng
có khả năng thực hiện rất nhiều việc. Rất nhiều người dùng sử dụng cụm từ máy
tính “đa dụng” để làm rõ sự khác biệt này. Khi được xuất xưởng, một máy tính đa
dụng là một sản phẩm trống, nhà sản xuất không biết khách hàng sẽ làm gì với nó.
Một khách hàng có thể dùng nó để chứa dữ liệu trên mạng, khách hàng khác có thể
dùng nó chỉ để chơi game, trong khi người khác có thể dùng nó để viết các tiểu
thuyết nổi tiếng.
Nói chung một hệ thống nhúng thường là một thành phần trong một hệ thống lớn
hơn. Ví dụ, các ô tô và xe tải hiện đại có chứa rất nhiều hệ thống nhúng. Một hệ
thống nhúng điều khiển các phanh chống khoá, một hệ thống khác theo dõi và điều
khiển bộ phát của xe, hệ thống khác nữa thì hiển thị thông tin trên bảng đồng hồ.
Trong một số trường hợp, các hệ thống nhúng này được nối với nhau bằng các
mạng thông tin liên lạc, nhưng đó không phải là một yêu cầu bắt buộc.
Một điều cần chú ý là máy tính đa dụng cũng được tạo nên từ nhiều hệ thống
nhúng. Ví dụ, máy tính có bàn phím, chuột, cạc màn hình, modem, ổ cứng, ổ mềm
và cạc tiếng – mỗi thành phần đó là một hệ thống nhúng. Mỗi thiết bị đó có một bộ
xử lý và một phần mềm được thiết kế để thực hiện một chức năng chuyên biệt. Ví
dụ, modem được thiết kế để gửi và nhận các dữ liệu số qua một đường dây điện
thoại tương tự. Tất cả chỉ có thế. Và mọi thiết bị khác đều có thể tóm tắt chức năng
bằng một câu đơn như vậy.
Nếu một hệ thống nhúng được thiết kế tốt, người dùng thiết bị sẽ không thể nhận
thấy sự có mặt của bộ xử lý và phần mềm. Ví dụ như các trường hợp lò vi sóng,
VCR, hay đồng hồ báo thức. Trong một số trường hợp, có thể thay thế thiết bị đó
bằng một thiết bị tương tự mà không có bộ xử lý và phần mềm. Lúc đó, chúng được
thay thế bằng một mạch tích hợp riêng thực hiện cùng chức năng trong phần cứng.
Tuy nhiên, khi thiết kế được gắn sẵn trong phần cứng như thế này sẽ làm mất đi
tính linh hoạt của sản phẩm. Việc thay đổi một vài dòng lệnh trong phần mềm sẽ dễ
dàng hơn và rẻ hơn nhiều so với thiết kế lại một mạch phần cứng riêng.
1.1 Ứng dụng của hệ thống nhúng
Không giống như các phần mềm được thiết kế cho các máy tính đa dụng, phần mềm
nhúng không thể chạy trên các hệ thống nhúng khác mà không có các chỉnh sửa
quan trọng cần thiết. Lý do chủ yếu là tại các phần cứng nằm bên dưới. Phần cứng
trong mỗi hệ thống nhúng được thiết kế riêng cho mỗi ứng dụng, nhằm mục đích
sao cho chi phí hệ thống thấp nhất. Kết quả là các mạch không cần thiết sẽ bị loại
bỏ và tài nguyên phần cứng được chia sẻ dùng chung bất cứ chỗ nào có thể. Phần
sau đây trình bày các đặc tính phần cứng chung cho mọi hệ thống nhúng và lý do tại
sao có rất nhiều tuỳ biến phần cứng.
Các hệ thống nhúng được định nghĩa là có chứa một bộ xử lý và phần mềm, vậy các
đặc điểm chung của chúng là gì? Rõ ràng, để có phần mềm, hệ thống phải có nơi
chứa mã thực thi và phần chưa tạm cho các dữ liệu thời gian chạy. Đó tương ứng
chính là hình thức của ROM và RAM, và bất cứ hệ thống nhúng nào cũng đều có
một vài bộ nhớ này. Nếu chỉ yêu cầu có một số lượng nhỏ bộ nhớ, nó sẽ được chứa
luôn trong cùng một con chip với bộ xử lý. Ngược lại, nếu cần nhiều bộ nhớ thì các
loại bộ nhớ sẽ có thể được chứa trong các con chíp bộ nhớ ngoài.
Mọi hệ thống nhúng đều có một số loại đầu vào và đầu ra. Ví dụ, trong hệ thống lò
vi sóng, các đầu vào là các nút ở mặt trước máy và đầu dò nhiệt độ, và các đầu ra là
các hiển thị đọc được và nhiệt lượng toả ra của lò vi sóng. Các đầu ra của hệ thống
nhúng hầu như luôn luôn là một hàm của các đầu vào và một số các nhân tố khác
(như thời gian trôi qua, nhiệt độ hiện tại,…) Các đầu vào của hệ thống thường có
dạng của các sensor và đầu dò, các tín hiệu thông tin, hoặc núm điều khiển và nút
bấm. Các đầu ra thường là các hiển thị, các tín hiệu thông tin, hoặc chuyển sang môi
trường vật lý. Hình sau là một ví dụ điển hình của một hệ thống nhúng.
Hình 1-1 Hệ thống nhúng điển hình
Trừ các đặc tính chung được nêu ở trên, phần còn lại của hệ thống nhúng thường là
duy nhất. Trong thiết kế thường có các đặc tính cạnh tranh nhau tạo nên các biến
đổi trong hệ thống. Mỗi hệ thống phải đáp ứng một tập các yêu cầu khác nhau, bất
kỳ yêu cầu nào cũng ảnh hưởng đến sự thoả hiệp trong suốt quá trình phát triển sản
phẩm. Ví dụ, nếu hệ thống cần phải có một sản phẩm có giá thành nhỏ hơn 10 đô,
thì những yêu cầu khác như khả năng xử lý và độ tin cậy có thể chỉ cần trung bình
để thoả mãn yêu cầu về giá.
Tất nhiên, giá thành sản phẩm chỉ là một trong các ràng buộc có thể mà việc thiết kế
hệ thống nhúng phải tuân theo. Các yêu cầu thiết kế chung khác bao gồm:
Năng lực xử lý
Là tổng năng lực xử lý cần thiết để hoàn thành tác vụ. Năng lực xử lý thường
được tính bằng tốc độ MIPS (millions of instructions per second – hàng triệu
lệnh mỗi giây). Nếu 2 bộ xử lý có tốc độ là 25 MIPS và 40 MIPS, bộ thứ 2 sẽ
được nói là có năng lực xử lý mạnh hơn. Bên cạnh năng lực xử lý, các đặc
tính quan trọng khác của bộ xử lý cũng cần được xem xét. Một trong các đặc
tính đó là độ rộng thanh ghi, thường trong dải từ 8 đến 64 bit. Máy tính đa
dụng ngày nay sử dụng các bộ xử lý 32- và 64-bit, nhưng các hệ thống nhúng
vẫn thường dùng các bộ xử lý 8 và 16-bít cũ hơn và giá thành rẻ hơn.
Bộ nhớ
Là tổng dung lượng bộ nhớ (ROM và RAM) cần thiết để lưu trữ phần mềm
thực thi và dữ liệu chạy. Người thiết kế phần cứng thường phải dự đoán
trước lượng bộ nhớ cần thiết và sau đó sẽ tăng giảm dung lượng thực khi
phần mềm được phát triển. Tổng dung lượng phần mềm cần thiết có thể ảnh
hưởng đến việc lựa chọn bộ xử lý. Nói chung, độ rộng thanh ghi của bộ xử lý
thiết lập giới hạn trên của dung lượng bộ nhớ mà nó có thể truy nhập (ví dụ,
một thanh ghi địa chỉ 8-bit chỉ chó thể lựa chọn 256 vị trí bộ nhớ).
Giá thành phát triển
Là chi phí của quá trình làm phần cứng và phần mềm. Đây là chi phí cố định,
chỉ tính một lần, do đó có thể không là vấn đề lớn (thường cho các sản phẩm
sản xuất khối lượng lớn) hoặc là thước đo chính xác duy nhất cho giá thành
sản phẩm (trong trường hợp sản xuất số lượng nhỏ sản phẩm).
Số lượng sản phẩm
Việc cân bằng giữa chi phí sản xuất và chi phí phát triển bị ảnh hưởng nhiều
nhất bởi số lượng sản phẩm dự định sản xuất và bán ra. Ví dụ, việc phát triển
các cấu thành phần cứng theo yêu cầu riêng của bạn cho một số ít sản phẩm
là việc không mong muốn.
Thời gian hoạt động mong muốn
Trung bình hệ thống sẽ làm việc được trong bao lâu? Một tháng, một năm,
hay một thế kỷ? Điều này ảnh hưởng đến mọi quyết định trong quá trình
thiết kế kể từ việc lựa chọn thành phần phần cứng cũng như đến chi phí phát
triển và sản xuất hệ thống.
Độ tin cậy
Sản phẩm cuối cùng phải có độ tin cậy như thế nào? Nếu là một đồ chơi cho
trẻ em, hoạt động của nó không cần phải luôn luôn chính xác, nhưng nếu nó
là một phần của tàu con thoi vũ trụ, nó cần phải được đảm bảo chắc chắn
luôn luôn làm đúng chức năng của nó mỗi khi hoạt động và trong mọi lần
hoạt động.
Bên cạnh các yêu cầu chung kể trên, còn có một số các yêu cầu chức năng chi tiết
riêng cho từng hệ thống. Đó là các yêu cầu làm nên tính đơn nhất của từng hệ thống
nhúng như lò vi sóng, máy điều hoà nhịp tim hay máy nhắn tin.
Bảng 1-1 mô tả dải các giá trị có thể cho mỗi yêu cầu thiết kế có trước. Đây chỉ là
các giá trị ước lượng. Trong một số trường hợp, hai hoặc nhiều đặc tính có mối
quan hệ với nhau. Ví dụ như tăng năng lực xử lý có thể dẫn đến tăng chi phí sản
xuất. Ngược lại, chúng ta lại có thể giả thiết tăng năng lực xử lý có thể làm giảm chi
phí phát triển – bằng cách giảm độ phức tạp trong thiết kế phần mềm và phần cứng.
Do vậy, các giá trị trong một cột xác định không nhất thiết phải tỉ lệ thuận với nhau.
Bảng 1-1 Các yêu cầu thiết kế chung cho các hệ thống nhúng
Đặc tính Thấp Trung binh Cao
Bộ xử lý 4- hoặc 8-bit 16-bit 32- hoặc 64-bit
Bộ nhớ < 16 KB 64 KB đến 1 MB > 1 MB
Chi phí phát triển < $100,000
$100,000 to
$1,000,000
> $1,000,000
Chi phí sản xuất < $10 $10 to $1,000 > $1,000
Số lượng sản xuất < 100 100-10,000 > 10,000
Thời gian hoạt động
mong muốn
Vài ngày, vài tuần hay
vài tháng
Vài năm Vài thế kỷ
Độ tin cậy Có thể đôi khi sai Phải hoạt động tin cậy
Phải được dự
phòng sai
1.2 Mục đích của việc nghiên cứu
Với đặc điểm hướng ứng dụng của các hệ thống nhúng, các nhu cầu về các hệ thống
thông minh, nhỏ gọn, tiêu thụ điện năng ít, … các chip vi xử lý được sản xuất với
giá thành rất rẻ, đồng thời với nền công nghệ thông tin phát triển rất mạnh mẽ hiện
nay nên việc nghiên cứu hệ thống nhúng và đưa ra được những ứng dụng cụ thể
trong lĩnh vực viễn thông là cần thiết. Hiện nay, cùng với sự phát triển mạnh mẽ của
thị trường viễn thông và các ứng dụng của công nghệ thông tin, các trạm thiết bị
viễn thông – tin học ngày càng tăng về số lượng và yêu cầu khắt khe về chất lượng
hoạt động, mang đến nhiều thách thức cho các doanh nghiệp cung cấp dịch vụ viễn
thông hay ứng dụng công nghệ thông tin như:
• Số lượng trạm thiết bị lớn, đòi hỏi số lượng lớn nhân viên quản lý trực trạm do
đó dẫn đến chi phí sản xuất lớn kéo theo hiệu quả kinh doanh thấp
• Các thông số môi trường phòng máy, trạng thái hoạt động của các thiết bị phụ
trợ được theo dõi bằng nhân công, phân tán, nên không nhận biết kịp thời cảnh
báo hay sự cố, dễ gây ra các hậy quả đáng tiếc do sự cố trong phòng máy
• Các trạm thiết bị được quản lý tại chỗ, phân tán nên trình độ quản lý thiết bị phụ
trợ không đồng đều, các thông số môi trường phòng máy khó đảm bảo yêu cầu
kỹ thuật, làm rút ngắn tuổi thọ của cả thiết bị viễn thông – tin học và các thiết bị
phụ trợ
Từ những lý do trên, cần thiết phải xây dựng một mạng lưới để quản lý các trạm
thiết bị viễn thông - tin học. Các trạm này sẽ được quản lý tập trung. Tức là gồm
một trung tâm điều khiển, giám sát đặt tại trung tâm tỉnh thành, còn các trạm giám
sát sẽ đặt tại các trạm vệ tinh, các thông số giám sát về môi trường, điện áp, … cũng
như việc điều khiển được trao đổi với trung tâm trên nền IP.
Để đảm bảo rằng các thông số đo về môi trường như nhiệt độ, độ ẩm, các thông số
đo về điện áp, dòng điện, pha, cảnh báo gia tăng nhiệt độ, cảnh báo khói, cháy nổ,
cảnh báo mở cửa, kính vỡ … được cập nhật thường xuyên, chính xác và kịp thời, hệ
thống giám sát cần phải có khả năng đáp ứng kịp thời các sự kiện, đồng thời cũng
phải thực hiện song song nhiều tác vụ trong một khoảng thời gian. Có nhiều cách để
thực hiện điều này, trong đó có thể sử dụng một hệ điều hành thời gian thực, đa
nhiệm… Đối với bài toán về giám sát trạm vệ tinh, thì hệ thống nhúng là phù hợp
với quy mô giám sát một trạm.
1.3 Nội dung nghiên cứu
Phần 1: Nghiên cứu về Embedded OS
Chương 1: Giới thiệu chung
Chương 2: Kiến trúc của hệ điều hành nhúng
Chương 3: Tìm hiểu về một số hệ thống nhúng và cách thức phát triển hệ
thống nhúng
Phần 2: Đề xuất ứng dụng Embedded OS vào bài toán giám sát trạm vệ tinh
Chương 4: Xác định phạm vi và tiêu chí bài toán ứng dụng
Chương 5: Thiết kế, phát triển hệ thống và kết quả thử nghiệm
Kết luận và khuyến nghị hướng phát triển tiếp theo
1.4 Kết chương
Chương này nhằm mục đích giới thiệu về hệ thống nhúng nói chung, ứng dụng của
nó trong đời sống cũng như trong các lĩnh vực khác. Trình bày mục đích của việc
nghiên cứu và nội dụng nghiên cứu của đề tài.
Chương 2 - Kiến trúc của hệ điều hành nhúng
2.1 Lịch sử và sự phát triển trong tương lai
Các hệ thống như trong định nghĩa của hệ thống nhúng đã nêu ở trên không thể
xuất hiện trước năm 1971. Đó là năm Intel giới thiệu hệ thống vi xử lý đầu tiên trên
thế giới. Con chíp này, chíp 4004, được thiết kế cho dòng sản phẩm máy tính cá
nhân sản xuất bởi công ty Nhật Bản Busicom. Năm 1969, Busicom đề nghị Intel
thiết kế một tập các mạch tích hợp riêng theo yêu cầu của họ - mỗi mạch được dùng
cho một dòng sản phẩm máy tính mới của họ. Chíp 4004 là câu trả lời của Intel cho
đề nghị này. Thay vì thiết kế phần cứng riêng cho mỗi dòng máy tính, Intel đề xuất
giải pháp sản xuất một mạch đa năng có thể sử dụng cho tất cả các dòng máy tính.
Bộ xử lý đa năng mày được thiết kế để đọc và thực thi một tập các lệnh – phần mềm
– lưu trữ trong một con chíp nhớ ngoài. Ý tưởng của Intel là phần mềm sẽ làm nên
tập đặc điểm riêng của mỗi máy tính.
Bộ vi xử lý đã là một thành công bất ngờ, và được sử dụng ngày càng rộng rãi trong
thập kỷ sau. Các ứng dụng nhúng đầu tiên bao gồm tàu vũ trụ không người lái, các
đèn tín hiệu giao thông được máy tính hoá, và các hệ thống điều khiển các chuyến
bay. Vào những năm 1980, các hệ thống nhúng dấy lên làn sóng của thời đại vi tính
và mang các bộ vi xử lý vào mọi ngóc ngách của cuộc sống. Rất nhiều thiết bị điện
tử trong bếp của chúng ta (các máy làm bánh mì, các máy xử lý thức ăn và các lò vi
sóng), trong phòng khách (tivi, các dàn âm thanh và các điều khiển từ xa), và tại nơi
làm việc (các máy fax, máy nhắn tin, máy in laze, các máy đọc thẻ cá nhân) đều là
các hệ thống nhúng.
Có vẻ hiển nhiên là số lượng các hệ thống nhúng sẽ tiếp tục tăng lên nhanh chóng.
Một số thiết bị nhúng mới hứa hẹn sẽ được sản xuất với số lượng lớn: các công tắc
đèn và bộ ổn nhiệt có thể điều khiển bởi một máy tính trung tâm, các hệ thống túi
khí thông minh sẽ không bơm phồng khi trẻ nhỏ hoặc người lớn có kích thước bé
nhỏ có mặt, các máy sắp lịch làm việc điện tử có kích thước bằng bàn tay và các
máy hỗ trợ số cá nhân (PDA), các máy quay số, và các hệ thống định vị hiển thị số.
Rõ ràng rằng một lúc nào đó sẽ cần các cá nhân có khả năng và nguyện vọng thiết
kế thế hệ tiếp theo các hệ thống nhúng.
2.2 Các hệ thống thời gian thực
Các hệ thống thời gian thực là một phân lớp của hệ thống nhúng. Hệ thống thời gian
thực được định nghĩa chung là một hệ thống máy tính có các ràng buộc về thời gian.
Nói cách khác, một hệ thống thời gian thực một phần phải có khả năng thực thi một
số tác vụ hoặc ra quyết định kịp thời. Tức là phải hoàn thành các tính toán trong
một khoảng thời gian khống chế. Và trên thực tế, việc không hoàn thành đúng thời
hạn cũng bị coi là kết quả xấu như hoàn thành sai tác vụ.
Kết quả xảy đến nếu hệ thống không hoàn thành đúng thời hạn cũng là một vấn đề
mang tính quyết định. Ví dụ, nếu hệ thống thời gian thực là một phần của một hệ
thống điều khiển bay trên máy bay, có thể tính mạng của toàn bộ hành khách cũng
như phi hành đoàn sẽ bị đe doạ bởi một phép tính không đúng thời hạn. Tuy nhiên,
nếu hệ thống được dùng trong thông tin vệ tinh thì mối nguy hại chỉ làm sai lạc một
gói dữ liệu. Khi hậu quả càng nghiêm trọng thì việc hoàn thành đúng thời hạn lại
càng “chặt chẽ” (hard) và vì vậy, hệ thống được gọi là hệ thống thời gian thực chặt
chẽ (hard real-time system). Nếu yêu cầu về thời gian thực thấp thì hệ thống được
coi là có thời hạn “mềm” (sotf).
Người thiết kế hệ thống thời gian thực phải thật siêng năng vì cần phải đảm bảo độ
tin cậy của phần cứng và phần mềm trong mọi điều kiện có thể. Và nếu cuộc sống
con người phụ thuộc vào việc thực thi đúng hay sai của hệ thống thì sự đảm bảo này
phải được tính toán và mô tả trình bày trên giấy.
2.3 Đặc điểm nổi bật so với Multi-purpose OS
Trong thời kỳ sơ khai của máy tính không có mặt hệ điều hành. Người lập trình ứng
dụng chịu trách nhiệm hoàn toàn về điều khiển và giám sát các trạng thái của bộ xử
lý và các phần cứng khác. Trên thực tế, mục đích của hệ điều hành đầu tiên là cung
cấp nền tảng phần cứng ảo, giúp cho việc viết chương trình ứng dụng trở nên dễ
dàng hơn. Để hoàn thành mục tiêu này, các nhà phát triển hệ điều hành chỉ cần cung
cấp một tập các thủ tục – gần giống như thư viện phần mềm hiện nay – dùng cho
khởi động lại phần cứng về một trạng thái đã biết, đọc trạng thái các đầu vào, và
thay đổi trạng thái các đầu ra.
Các hệ điều hành hiện đại có khả năng thực thi đa tác vụ đồng thời trên một bộ xử
lý đơn lẻ. Mỗi tác vụ này là một đơn vị phần mềm có thể chạy riêng và chạy độc lập
với phần còn lại. Tập các yêu cầu của một phần mềm nhúng thường có thể phân
tách thành một số các đơn vị phần mềm như thế. Ví dụ như một thiết bị chia sẻ máy
in chứa ba tác vụ phần mềm rõ ràng sau:
• Tác vụ 1: Nhận dữ liệu từ máy tính nối qua cổng nối tiếp A
• Tác vụ 2: Nhận dữ liệu từ máy tính nối qua cổng nối tiếp B
• Tác vụ 3: Định dạng và gửi dữ liệu đang đợi (nếu có) tới máy in qua cổng
song song
Các tác vụ mô tả nhiệm vụ chủ yếu của phần mềm, khiến cho việc phát triển và thực
hiện phần nhúng dễ dàng hơn, mã nguồn kết quả cũng đơn giản, dễ hiểu và dễ bảo
trì hơn. Bằng cách phân tách một chương trình lớn thành các mảnh nhỏ, các lập
trình viên có thể dễ dàng tập trung năng lực và tài trí vào các đặc tính riêng của hệ
thống mà chưa được phát triển.
Nói đúng ra, một hệ điều hành không phải là một thành phần cần có của bất kỳ hệ
thống máy tính nào – dù là nhúng hay không. Luôn luôn có thể xây dựng các chức
năng của hệ điều hành trong bản thân phần mềm ứng dụng. Chương trình chỉ có
một cách đơn giản để thực thi – bắt đầu tại hàm main – đó là tải vào hệ thống và
chạy. Điều này tương đương với chỉ một tác vụ. Nhưng khi độ phức tạp của chương
trình ứng dụng tăng lên chứ không chỉ là làm nhấp nháy một đèn LED, lợi ích của
hệ điều hành cũng tăng lên rất nhiều so với chi phí liên quan.
Nếu trước đây bạn chưa bao giờ làm việc với phần bên trong của hệ điều hành, bạn
có thể nghĩ là chúng rất phức tạp. Tôi chắc chắn rằng các nhà sản xuất hệ điều hành
cũng muốn bạn tiếp tục tin như vậy và rằng chỉ có một nhóm nhỏ các nhà khoa học
máy tính có khả năng viết một cái như thế. Nhưng tôi ở đây để chỉ ra một sự thật
rằng: nó không quá khó như vậy! Thực tế, các hệ điều hành nhúng thậm chí còn dễ
viết hơn các hệ điều hành máy để bàn – chúng yêu cầu ít chức năng hơn và dễ định
nghĩa hơn. Một khi bạn đã học được các chức năng đó là gì và một số kỹ thuật thực
hiện, bạn sẽ thấy rằng hệ điều hành cũng không khó phát triển hơn bất kỳ mảnh
phần mềm nhúng nào.
Hệ điều hành nhúng nhỏ bởi vì chúng thiếu rất nhiều thứ mà bạn mong muốn tìm
thấy trên máy tính để bạn. Ví dụ các hệ thống nhúng hiếm khi có ổ cứng hoặc hiển
thị đồ hoạ, và vì vậy chúng không cần có hệ thống file hoặc giao diện đồ hoạ người
dùng trong hệ điều hành. Thêm vào đó, chỉ có duy nhất một “người dùng” (tức là
mọi tác vụ liên kết phần mềm nhúng), vì vậy không cần phải có các đặc tính an toàn
bảo mật của các hệ điều hành đa người dùng. Mọi đặc tính kể trên có thể là một
phần cả hệ điều hành nhúng nhưng trong hầu hết các trường hợp không nhất thiết
phải có.
2.4 Mô hình
Phần mềm viết cho hệ thống nhúng có độ phức tạp khác nhau, tùy thuộc vào ứng
dụng. Có một số kiến trúc phần mềm sau đây:
- Phần mềm chỉ đơn giản là một vòng lặp. Vòng lặp gọi các tiến trình con, mỗi
tiến trình quản lý một phần của phần cứng hoặc phần mềm.
- Một số hệ thống nhúng thì phần mềm chủ yếu là các tiến trình xử lý ngắt. Có
nghĩa là các tác vụ được thực hiện khi có các sự kiện xảy ra. Ngắt có thể được
tạo ra bởi một bộ định thời hoặc khi cổng điều khiển thu được dữ liệu. Thường
thì loại kiến trúc phần mềm này được sử dụng để xử lý các sự kiện xảy ra với
tốc độ thấp và thời gian xử lý các sự kiện này ngắn và đơn giản. Hệ thống này
chỉ gồm một vòng lặp chính, nhưng tác vụ này không nhạy cảm với những độ
trễ không mong muốn.
- Một phần mềm mức thấp chuyển mạch giữa các tác vụ dựa trên một bộ định
thời. Với mức này thì phần mềm được xem như là có một nhân hệ điều hành.
Phụ thuộc vào các chức năng yêu cầu, thì có thể đưa vào nhiều hay ít các chức
năng phức tạp để quản lý các tác vụ chạy đồng thời. Hình 2-1 dưới đây mô tả
một nhân hệ điều hành nhúng.
Hình 2-2 Kiến trúc nhân hệ điều hành nhúng
Với đề tài này thì kiến trúc phần mềm nhúng sử dụng nhân hệ điều hành sẽ là mục
tiêu nghiên cứu và ứng dụng vào hệ thống giám sát trạm vệ tinh. Phần tiếp theo sẽ
trình bày về các vấn đề liên quan đến hệ điều hành nhúng.
2.5 Quản lý tiến trình
Hình 2-3 Trạng thái của tác vụ
Một tác vụ (task) (cũng còn được gọi là một tiến trình (thread)) là một chương trình
đơn giản, nó chiếm toàn bộ CPU cho việc thực hiện tác vụ đó. Quy trình thiết kế
cho một ứng dụng thời gian thực bao gồm việc phân chia việc phải làm thành các
đáp ứng tác vụ cho mỗi phần của vấn đề cần giải quyết. Mỗi tác vụ được gán một
quyền ưu tiên, nó chiếm các thanh ghi của CPU, và vùng stack của nó. Hình vẽ 2-3
minh hoạ điều đó.
Mỗi tác vụ cụ thể là một vòng lặp vô tận, trạng thái của nó có thể là bất kỳ trạng
thái nào trong năm trạng thái sau: DORMANT, READY, RUNNING, WAITING
hoặc ISR. Hình 2-2 minh hoạ điều này.
• Trạng thái DORMANT tương ứng với một tác vụ mà nằm bên trong bộ nhớ
nhưng không làm để nhân đa nhiệm sử dụng
• Một tác vụ ở trạng thái READY khi nó có thể được thực hiện nhưng quyền ưu
tiên của nó thấp hơn tác vụ đang thực hiện
• Một tác vụ ở trạng thái RUNNING khi nó điều khiển CPU
• Một tác vụ ở trạng thái WAITING khi nó yêu cầu một sự kiện nào đó xảy ra
(đợi một quá trình IO hoàn thành, tài nguyên dung chung là khả dụng với nó,
hoặc một xung thời gian xảy ra, hoặc thời gian đã đạt đến, v v )
• Một tác vụ trạng thái ISR khi một ngắt đã xảy ra và CPU đang trong quá trình
xử lý ngắt
Chúng ta đã biết được nghe về đa nhiệm và ý tưởng là một hệ điều hành có thể thực
hiện nhiều chương trình tại cùng thời điểm. Nhưng điều đó có nghĩa là gì? Làm thế
nào nó có thể thực hiện được nhiều tác vụ cùng xảy ra? Trong thực tế, các tác vụ
không được thực hiện tại cùng thời điểm. Thay vào đó, chúng được thực hiện song
song một cách giả tạo. Chúng đơn thuần sử dụng lần lượt bộ xử lý. Nó giống với
cách mà nhiều người có thể đọc cùng một cuốn sách, nhưng chỉ một người thực sự
sử dụng cuốn sách tại một thời điểm, nhưng họ có thể cùng đọc bằng cách lần lượt
đọc cuốn sách.
Một hệ điều hành chịu trách nhiệm cho việc xác định tác vụ nào sử dụng bộ xử lý
tại một thời điểm cụ thể. Ngoài ra, nó duy trì thông tin về trạng thái của mỗi tác vụ.
Thông tin này được gọi là ngữ cảnh (context) của tác vụ, và nó phục vụ cho một
mục đích tương tự như đánh dấu sách (bookmark). Trong kịch bản nhiều người đọc
sách, mỗi người đọc coi như có một bookmark riêng của họ. Và họ phải có khả
năng nhận ra bookmark của họ, và nó phải biểu thị rằng vị trí mà họ ngừng đọc sách
ở lần cuối cùng họ sử dụng cuốn sách. Cái này gọi là ngữ cảnh của người đọc
(reader’context).
Một ngữ cảnh của một tác vụ ghi lại trạng thái của bộ xử lý chỉ ngay trước khi một
tác vụ khác đoạt quyền điều khiển. Ngữ cảnh thường gồm một con trỏ trỏ tới câu
lệnh tiếp theo được thực hiện (instruction pointer), địa chỉ của cao nhất hiện tại của
stack (stack pointer), và nội dung của các cờ của bộ vi xử lý và các thanh ghi chung.
Hình 2-4 Multiple tasks
2.6 Lập lịch
Trái tim và linh hồn của bất kỳ hệ điều hành nào là lập lịch. Nó là một phần của hệ
điều hành, dùng để xác định tác vụ nào ở trạng thái READY có quyền được sử dụng
CPU tại một thời điểm xác định.
Để quyết định tác vụ nào sẽ chạy, thì phần lập lịch của hệ điều hành (Scheduler) sẽ
ra quyết định. Trước khi đi vào phần này, ta sẽ tìm hiểu thêm về một số tham số của
tác vụ.
2.6.1 Quyền ưu tiên của tác vụ
Mỗi tác vụ sẽ có một quyền ưu tiên (priority), các tác vụ càng quang trọng, thì
quyền ưu tiên càng cao sẽ gán cho nó.
2.6.2 Quyền ưu tiên tĩnh
Các quyền ưu tiên của tác vụ là tĩnh khi các quyền ưu đó không thay đổi trong suốt
quá trình thực hiện ứng dụng. Do đó, mỗi tác vụ được gán một quyền ưu tiên cố
định tại thời điểm biên dịch. Tất cả các tác vụ và thời gian ràng buộc của nó được
xác định tại thời điểm biên dịch trong hệ thống ở đó các quyền ưu tiên là tĩnh.
2.6.3 Quyền ưu tiên động
Quyền ưu tiên của các tác vụ là động khi mà các quyền đó được thay đổi trong quá
trình thực hiện ứng dụng. Mỗi tác vụ có thể đổi quyền của nó trong thời gian chạy.
Đây là một đặc điểm mong muốn phải có trong nhân thời gian thực để tránh việc
đảo ngược quyền.
2.6.4 Đảo ngược quyền
Đây là vấn đề trong hệ thống thời gian thực và xảy ra thường xuyên khi sử dụng
nhân thời gian thực. Hình vẽ 2-4 sau miêu tả quá trình này. Task 1 có quyền cao
hơn Task 2, Task2 cao hơn Task 3. Task 1 và Task 2 đang đợi trong khi Task3 đang
thực hiện. Tại một thời điểm nào đó, Task 3 yêu cầu một semaphore trước khi truy
cập vào tài nguyên dùng chung, Task 3 thực hiện hoạt động trên tài nguyên đó cho
đến khi nó bị chiếm bởi Task 1 có quyền ưu tiên cao hơn. Task 1 thực hiện và nó
cũng muốn truy cập vào tài nguyên. Bởi vì Task 3 đang chiếm tài nguyên, do đó
Task 1 phải đợi cho đến khi Task 3 giải phóng semaphore. Khi Task 1 cố gắng lấy
semaphore, thì kernel thông báo semaphore đang được sử dụng, và Task1 bị treo ở
đó, và Task 3 được chạy. Task 3 lại chạy cho đến khi Task 2 đoạt quyền, Task 2
thực hiện cho đến khi hết, và nó giải phóng CPU cho Task 3. Khi Task 3 kết thúc,
nó giải phóng semaphore cho Task 1, Task 1 đang đợi semaphore khi có được
semaphore, thì nó chiếm CPU và truy cập vào tài nguyên để thực hiện nốt phần tác
vụ còn lại.
Như vậy là quyền của Task 1 coi như thấp so với Task 3 vì nó phải đợi tài nguyên
do Task 3 chiếm. Tình trạng này trở nên trầm trọng hơn do Task 2 đoạt quyền điều
khiển CPU của Task 3, và như vậy nó làm trễ việc thực hiện Task 1 thêm một thời
gian nữa.
Hình 2-5 Đảo ngược quyền ưu tiên
2.6.5 Cấp quyền ưu tiên
Cấp quyền ưu tiên không phải là một công việc tầm thường vì sự phức tạp của các
hệ điều hành thời gian thực. Trong hầu hết hệ thống, không phải tất cả các tác vụ
đều là quan trọng. Các tác vụ không quan trọng hiển nhiên sẽ được gán một quyền
ưu tiên thấp. Hầu hết các hệ thời gian thực có sự kết hợp các yêu cầu cứng và mềm
(SOFT and HARD). Trong một hệ thời gian thực SOFT, các tác vụ được thực hiện
nhanh nhất có thể, nhưng chúng không phải kết thúc trong một khoảng thời gian
xác định. Trong các hệ thời gian thực HARD, các tác vụ không những chỉ chính xác
mà còn phải đúng thời gian.
2.6.6 Thuật toán lập lịch
Có một số các thuật toán chung cho lập lịch như: FIFO, shortest job first, và roud
robin. Tuy nhiên, các hệ điều hành nhúng không sử dụng những thuật toán đơn giản
trên. Các hệ nhúng (cụ thể là các hệ thời gian thực) luôn luôn yêu cầu một cách thức
để chia sẻ bộ xử lý sao cho hầu hết các tác vụ quan trọng chiếm được bộ xử lý ngay
khi chúng cần đến. Vì vậy, hầu hết hệ điều hành nhúng sử dụng thuật toán lập lịch
dựa trên quyền ưu tiên mà hỗ trợ việc đoạt quyền ưu tiên. Điều có cho phép rằng tại