Một vấn đề đặt ra là làm thế nào để cĩ thể dừng tiến trình sau đĩ lại bắt đầu lại mà khơng bị ảnh h−ởng gì. Để thực hiện đ−ợc điều này thì hệ điều hành cần phải l−u lại đ−ợc trạng thái của các tài nguyên mà tiến trình đang sử dụng khi nĩ bị dừng bởi hệ điều hành và lấy lại đ−ợc trạng thái của các tài nguyên này khi tiến trình đ−ợc bắt đầu lại. Hoạt động l−u, và phục hồi trạng thái của các tài nguyên của một tiến trình gọi là Context Switching.
Trong bị vi điều khiển, một số tài nguyên cần phải đ−ợc cất mỗi khi chuyển từ tiến trình này sang tiến trình khác nh− sau:
- Các thanh ghi trung gian. - Thanh ghi trạng thái.
- Bộ đếm ch−ơng trình (con trỏ lệnh).
Tiến trình bị dừng ngày tr−ớc khi nĩ đi vào thực hiện lệnh cộng Hai câu lệnh tr−ớc của tiến trình đã đặt 2 số hạng vào 2 thanh ghi để thực hiện lệnh cộng. Tuy nhiên tr ớc khi thực hiện phép cộng tiến trình bị − dừng và một tiến trình khác hoạt động. Khi quay trở lại thì tiến trình sẽ thực hiện cau lệnh cộng tuy nhiên lúc đĩ 2 số hạng trong 2 thanh ghi cĩ thể đã bị thay đổi bời các câu lệnh của các tiến trình khác.
- Con trỏ ngăn xếp.
Hình 4.10. Các tài nguyên cần l−u khi dừng một tiến trình.
2. L−u các tài nguyên của tiến trình.
Các bộ vi điều khiển đều cĩ một vùng nhớ đặc biệt gọi là ngăn xếp, vùng nhớ này cho phép cĩ thể cất nội dung của các thanh ghi vào và cho phép lấy ra theo nguyên tắc LIFO (Last in First out). Mặt khác trong tập lệnh của các bộ vi điều khiển đều cĩ câu lệnh cất vào ngăn xếp (push) và lấy ra từ ngăn xếp (pop). Dựa vào các căn cứ này chúng ta cĩ thể xây dựng một ch−ơng trình con chuyên làm nhiệm vụ cất các thanh ghi mỗi khi tiến trình bị dừng.
Cĩ 2 vấn đề đặt ra với ch−ơng trình này là:
Thứ nhất: Phải phân bổ ngăn xếp cho hợp lý. Vùng dành để l−u trạng thái các thanh ghi cho các tiến trình phải đủ cho n tiến trình. Vùng dành cho các
tiến trình sử dụng phải đủ cho tiến trình cĩ dug l−ợng ngăn xếp cần sử dụng lớn nhất trong các tiến trình (hình 4.11).
Hình 4.11. Phân bổ ngăn xếp cho các tiến trình
Thứ hai: Vì ngăn xếp hoạt động theo nguyên tắc LIFO nên trong ch−ơng trình phải xác định đ−ợc thanh ghi nào cần phải đ−ợc cất tr−ớc và thnh ghi nào cần phải đ−ợc cất sau.
Giải thuật của ch−ơng trình nh− sau:
#define SAVE_CONTEXT() asm volatile {
-đọc biến task_num để xác định tiến trình nào bị dừng.
-cất nội dung của con trỏ ngăn xếp hiện tại sang biến save_SP.
-Cập nhật vị trí ngăn xếp cần cất vào thanh ghi
con trỏ ngăn xếp
-Cất giá trị của thanh ghi con trỏ ngăn xếp trong biến save_SP
-Cất các thanh ghi trung gian -Cất thanh ghi trạng thái.
- Cất bộ đếm ch−ơng trình. } Vùng dành cho các tiến trình sử dụng Tiến trình 1 Tiến trình 2 .... Tiến trình n Vùng dành để l−u trạng thái các thanh ghi cho các tiến trình
3. Phục hồi các tài nguyên của tiến trình.
Vì ngăn xếp hoạt động theo nguyên tắc LIFO nên giải thuật của ch−ơng trình RESTORE_CONTEXT() sẽ ng−ợc với ch−ơng trình SAVE_CONTEXT():
#define RESTORE_CONTEXT() asm volatile
{
-đọc biến task_num để xác định tiến trình nào
đ−ợc phục hồi.
-Cập nhật vị trí ngăn xếp cần cất vào thanh ghi
con trỏ ngăn xếp
-Lấy bộ đếm ch−ơng trình.
-Lấy thanh ghi trạng thái. -Lấy các thanh ghi trung gian -Lấy con trỏ ngăn xếp.
}
4.4.2. Lập lịch cho CPU
Nh− đã trình bày trong ch−ơng 1, cĩ khá nhiều thuật tốn để lập lịch cho CPU tuy nhiên do đặc thù của hệ thống cĩ 6 tác vụ và các tiến trình cũng đ−ợc xác định tr−ớc nên cĩ thể chọn thuật tốn RR kết hợp với xử lý ngắt khi cĩ sự tác động của ng−ời sử dụng lên các phím nhấn.
Các tác vụ trên hệ thống cĩ những đặc thù khác nhau chính vì vậy cĩ thể phân loại và áp dụng cách phân phối tài giờ CPU theo các nguyên tắc khác nhau trên cơ sở thuật tốn RR.
Quét chữ trên ma trận LED:
Nh− đã trình bày ở ch−ơng 3, để quét chữ trên ma trận LED thì cần cĩ 8 lần xuất dữ liệu và giữa các lần đĩ là các khoảng thời gian trễ 25 ms chính vì vậy 8 tiến trình này mỗi tiến trình thực chất chỉ chạy (running) trong khoảng
thời gian cở vài micro giây (khoảng thời gian thực hiện 2 lệnh), thời gian trễ tiến trình sẽ đi vào trạng thái đợi (waitting) cho đến khi sự kiện time out (hết 25ms) xảy ra thì tiến trình lại đ−ợc tiếp tục (hình 4.12).
Khoảng thời gian từ t0 đến t1: Tiến trình 1 (P1) ở trạng thái running. Khoảng thời gian từ t1 đến t3 (25 ms): Tiến trình 1 (P1) ở trạng thái waiting.
Khoảng thời gian từ t2 đến t3: Tài nguyên giờ CPU đ−ợc phân phối cho các tiến trình khác (ngồi 8 tiến trình trên).
Hình 4.12. Lập lịch cho 8 tiến trình thực hiện quét chữ trên ma trận LED
Quét các số trên LED 7 đoạn :
Hệ thống đ−ợc thiết kế với 4 LED 7 đoạn để hiển thị các thơng tin về thời gian thực vì vậy cần 4 tiến trình để thực hiện tác vụ này. Nguyên tắc quét trên LED 7 đoạn t−ơng tự nguyên tắc quét trên ma trận LED vì vậy 4 tiến trình này cũng hoạt động theo nguyên tắc của 4 tiến trình trên (hình 4.13).
Hình 4.13. Lập lịch cho 4 tiến trình quét các số trên 4 LED 7 đoạn
P1 P2 P3 P4 P5 P6 P7 P8 t0 t1 2 3 t t t
... Tiến trình ỏ trạng thái waiting. Tiến trình ở trạng thái running
P9 P10 P11 P12 t0 t1 2 3 t t t
... Tiến trình ỏ trạng thái waiting. Tiến trình ở trạng thái running
Hiển thị thơng tin trên LCD:
Khi bật nguồn, hệ thơng sẽ chạy mặc định với một dịng chữ trên ma trận LED và mặc định kiểu đồng hồ thời gian là phút và giây, trên LCD cùng hiển thị một dịng chữ mặc định. Khi cĩ lệnh của ng−ời sử dụng, tuỳ theo câu lệnh của ng−ời sử dụng cĩ các dịng chữ hiển thị khá nhau trên LCD. Nh− vậy tiến trình này ban đầu chỉ gồm các lệnh xuất ký tự hiển thị sau đĩ đi vào trạng thái đợi vơ thời hạn cho đến khi cĩ sự kiện ng−ời sử dụng ra lệnh (gây ra ngắt) thì mới bắt chạy lại và sau đĩ lại đợi sự kiện ng−ời sử dụng ra lệnh tiếp theo. Khoảng thời gian tiến trình ở chạy (running) chỉ cở vài micro giây cịn khoảng thời gian nĩ ở trạng thái đợi là khơng biết tr−ớc chính vì vậy cĩ thể dùng sự kiện signal để đợi từ một tiến trình khác.
Hình 4.14. Lập lịch cho tiến trình điều khiển LCD
- Quản lý thời gian thực:
Giải thuật của tác vụ này là liên tục tăng biến giây lên mỗi đơn vị sau 40 sự kiện timeout (25ms x 40 = 1000ms = 1s) và tăng biến phút lên 1 đơn vị sau khi biến giây tăng đ−ợc 60 lần... Căn cứ vào giải thuật này cĩ thể chọn sự kiện timeout để đ−a tiến trình trở lại trạng thái running từ trạng thái waiting.
Hình 4.15. Lập lịch cho tiến trình thời gian thực
Running waiting running
Ng−ời sử dụng ra lệnh P13
Running waiting(25ms) running
Hết 25 ms P14
- Khởi tạo các thơng số:
Màn hình tinh thể lỏng, các thanh ghi cho phép ngắt, các thnh ghi của các bộ định thời...là các đối t−ợng cần đ−ợc khởi tạo tr−ớc khi chúng đ−ợc các tiến trình sử dụng nh− một tài nguyên hệ thống.
Tiến trình này cần phải đ−ợc hoạt động tr−ớc tiên khi hệ thống bắt đầu đi vào hoạt động. Tiến trình này là một tiến trình khá đặc biệt, do thao tác khởi tạo chỉ cần một lần nên tiến trình này cũng chỉ cần chạy một lần duy nhất. Tiến trình này sẽ mang số hiệu 0, khi thực hiện, nĩ sẽ đ−ợc u tiên thực hiện − đầu tiên.
4.5. Quản lý bộ nhớ.
Hệ điều hành đ−ợc thiết kế trên một phần cứng là hệ vi điều khiển. Hệ vi điều khiển chỉ cĩ bộ nhớ ROM và bộ nhớ RAM, khơng giống các máy tính cĩ nhiều cấp bộ nhớ nên cũng khơng cĩ các kỹ thuật phân đoạn phân trang... đ−ợc áp dụng. Trong mục này chỉ đi vào giải quyết việc tổ chức phân chia bộ nhớ cho các tiến trình, các ch−ơng trình của nhân hệ điều hành sao cho hợp lý và tránh xung đột bộ nhớ.
Hình 4.16. Tổ chức bộ nhớ ROM của hệ vi điều khiển
0000H 0003H 000BH 0013H 001BH 0023H 002BH . . . 1FFFH Ngắt do reset hệ thống Ngắt ngồi 0 Ngắt do bộ định thời 0 Ngắt ngồi 1 Ngắt do bộ định thời 1 Ngắt do port nối tiếp Ngắt do bộ định thời 2
Nh− trên hình 4.12 khơng gian dành cho các ch−ơng trình con phục vụ ngắt là rất nhỏ trong khi đây chính là nhân của hệ điều hành. Để khắc phục vấn đề này, ch−ơng trình con phục vụ ngắt cĩ thể đặt ở vị trí khác trong bộ nhớ và ở vị trí của các véc tơ ngắt cĩ thể đặt câu lệnh để nhảy tới các điểm đặt ch−ơng trình con phục vụ ngắt (hình 4.17).
Hình 4.17. Thay đổi vị trí đặt các ch−ơng trình con phục vụ ngắt
Ngồi các vùng dùng để chứa các ch−ơng trình con phục vụ ngắt ra, vùng nhớ cịn lại sẽ thuộc về mã của các ch−ơng trình t−ơng ứng với các tiến trình.
Nh− vậy bộ nhớ ch−ơng trình sẽ đ−ợc chia thành 3 vùng chính:
Vùng 1: Vùng này chỉ đặt các câu lệnh nhảy tới các ch−ơng trình con phục vụ ngắt tại vị trí của các véc tơ ngắt t−ong ứng.
Vùng 2: Là vùng để đặt các ch−ơng trình con phục vụ ngắt.
Vùng 3: Là vùng chứa mã của các ch−ơng trình t−ơng ứng với các tiến trình cĩ trong hệ thống. JMP Main JMP EX0ISR 0000H 0003H 000BH 0013H 001BH 0023H 002BH . . . 1FFFH Main: EX0ISR:
Hình 4.18. Phân bổ bộ nhớ ROM
Cũng t−ơng tự nh− bộ nhớ ch−ơng trình, bộ nhớ dữ liệu cũng phải đ−ợc tổ chức thành các vùng khác nhau để tránh việc chồng chéo lên nhau khi thực hiện. Hình 4.19. Phân bổ bộ nhớ RAM 0000H 0003H 000BH 0013H 001BH 0023H 002BH . . . 1FFFH Vùng 1 Vùng 2 Vùng 3 Nhân của hệ điều hành 0000H 001FH . . . 1FFFH Vùng 1: Dành cho các thanh ghi đa năng
Vùng 2: Dành cho các tiến trình đang hoạt
động
Vùng 3: Dành cho việc l−u trạng thái của các thanh ghi của mỗĩ tiến
trình khi nĩ bị dừng bởi hệ điều hành
Kết luận và kiến nghị
Sau thời gian nghiên cứu và tìm hiểu về nguyên tắc thiết kế các hệ điều hành nhỏ trên các bộ vi điều khiển, tơi đã đạt đ−ợc một số kết quả sau:
- Nắm đ−ợc ph−ơng pháp thiết kế mới các hệ vi điều khiển.
- Nắm đ−ợc ph−ơng pháp thiết kế các hệ điều hành cho các hệ vi điều khiển
- Cĩ kỹ năng sử dụng các trình biên dịch, phần mềm nạp cho các bộ vi điều khiển.
- Thiết kế thành cơng module thí nghiệm hệ điều hành cho vi điều khiển dung cho mục đích nghiên cứu, giảng dạy, thí nghiệm.
Với mục đích nghiên cứu tìm hiểu để thiết kế module phục vụ cơng tác giảng dạy nên sản phẩm thiết kế của tơi mới chỉ dừng ở một vài ứng dụng nhỏ. Tuy nhiên với những kết quả đã đạt đ−ợc trong thời gian nghiên cứu vừa qua, tơi nhận thấy mình hồn tồn cĩ khả năng làm chủ các hệ vi điều khiển về cả phần cứng và phần mềm. Hy vọng luận văn này sẽ giúp ích phần nào cho những ng−ời bắt đầu tìm hiểu về lĩnh vực này.
Tơi xin chân thành cảm ơn:
TS Nguyễn Linh Giang, ng−ời đã trực tiếp h−ớng dẫn và giúp đỡ tơi trong thời gian làm luận văn. Trung tâm Đào tạo và Bồi d−ỡng Sau Đại học - Tr−ờng Đại học Bách khoa Hà Nội; các thầy cơ giáo trong Khoa Điện tử, tr−ờng ĐHCN HN, đã giúp đỡ tơi về mặt thời gian, thiết bị cũng nh− sự động viên rất lớn của bạn bè ng−ời thân về mặt tinh thần trong thời gian thực hiện đề tài.
Tài liệu tham khảo Tiếng Việt
1. Phạm Văn ất, Lập trình C cơ sở và nâng cao, NXB khoa học kỹ thuật, Hà Nội.
2. Nguyễn Gia Định (2000), Nguyên lý hệ điều hành, NXB khoa học kỹ thuật, Hà Nội.
3. Trần Hạnh Nhi (1998), Hệ điều hành nâng cao, NXB khoa học kỹ thuật, Hà Nội.
4. Tống Văn On (1998), Họ vi điều khiển 8051, NXB Minh Khai, TP Hồ Chí Minh.
Tiếng Anh
5. M.Beach (2000), C51primer, Prentice Hall, London.
6. William Stalling (1995). Operating Systems, Prentice Hall,London.
Websides:
7.http://www.atmel.com
8. http://www.freeRTOS.com
9. http://www.Keil.com.