Tải bản đầy đủ (.doc) (37 trang)

TÌM HIỂU VỀ HỆ ĐIỀU HÀNH THỜI GIAN THỰC

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (865.16 KB, 37 trang )

HỌC VIỆN KỸ THUẬT MẬT MÃ
KHOA AN TOÀN THÔNG TIN

BÁO CÁO BÀI TẬP LỚN MÔN HỌC
NGUYÊN LÝ HỆ ĐIỀU HÀNH
Chủ đề số 6:
TÌM HIỂU VỀ HỆ ĐIỀU HÀNH THỜI GIAN THỰC
Giảng viên: Lê Đức Thuận
Sinh viên thực hiện:
HÀ NỘI, 2014
LỜI NÓI ĐẦU
Trong lĩnh vực công nghệ thông tin, người ta nói về hệ thống thông tin thời
gian thực khi hệ thống đó điều khiển một vật thể vật lý với một tốc độ phù hợp với
Tìm hiểu về hệ điều hành thời gian thực
sự tiến triển của tiến trình chủ. Một ví dụ dễ hiểu (hệ thống thông tin điều khiển
màn hình hiển thị giờ chính xác của các tàu điện ngầm sẽ đến và đi tại một ga nhất
định). Hệ thống thông tin thời gian thực khác với những hệ thống thông tin khác
bởi sự gò bó về thời gian, do đó, việc tuân thủ các nguyên tắc cũng quan trọng như
độ chính xác của kết quả, nói một cách khác, hệ thống không chỉ đơn giản là đưa ra
kết quả chính xác mà nó còn phải thực hiện một xử lý trong một thời gian rất ngắn.
Hệ thống thông tin thời gian thực ngày nay được ứng dụng trong rất nhiều lĩnh vực
như: trong ngành công nghiệp sản xuất, kiểm soát tiến trình (trong nhà máy, hay
trong viện hạt nhân, trong hệ thống hàng không, thông qua các hệ thống dẫn đường
tích hợp trên máy bay và vệ tinh). Sự phát triển của hệ thống thông tin thời gian
thực yêu cầu mỗi phần tử của hệ thống phải ở thời gian thực, và một hệ thống được
thiết kế theo cách như vậy được gọi là hệ điều hành thời gian thực. Trong đề tàinày,
nhóm sẽ làm rõ về Hệ điều hành thời gian thực (RTOS)
2
Tìm hiểu về hệ điều hành thời gian thực
MỤC LỤC
Ý KIẾN GIẢNG VIÊN


3
Tìm hiểu về hệ điều hành thời gian thực
4
Tìm hiểu về hệ điều hành thời gian thực
CHƯƠNG I
GIỚI THIỆU CHUNG HỆ ĐIỀU HÀNH THỜI GIAN THỰC (RTOS)
1.1Định nghĩa
Hệ thống thời gian thực ( Real time System):
 Thời gian ( Time) :
Sự chính xác của hệ thống không chỉ phụ thuộc vào kết quả tính toán
logic mà còn phụ thuộc vào thời gian cho ra kết quả.
 Thực ( Real):
Đáp ứng của hệ thống với những sự kiện bên ngoài.
 Thời gian thực ( Real-Time):
Phải đảm bảo các yếu tố :
• Đáp ứng nhanh
• Dự đoán được.
• Các tác vụ ( Real-time Task) được xác định bằng deadline.
• Deadline là thời gian tối đa một tác vụ phải hoàn thành việc
thính toán.
Thời gian thực cứng ( Hard Real-time) và thời gian thực mềm
( Soft Real-Time):
Hình 1.1.1: Thời gian thực cứng và thời gian thực mềm.
 Thời gian thực cứng:
5
Tìm hiểu về hệ điều hành thời gian thực
Một tác vụ là thời gian thực cứng nếu như thời gian tính toán vượt quá
deadtime có thể gây ra sự phá vỡ môi trường điều khiển.
 Thời gian thực mềm:
Một tác vụ là thời gian thực mềm nếu như đảm bảo thực thi trong

deadtime cho phép và nếu như không đảm bảo thì sẽ không tạo ra những
nguy hại nào đáng kể cho hệ thống và không làm ảnh hưởng đến sự ứng
xử của hệ thống.
Định nghĩa hệ điều hành thời gian thực RTOS:
Hệ điều hành thời gian thực (RTOS) là phần mềm quản lí thời gian của một vi xử lý
hoặc viđiều khiển. Đặc tính của hệ thống thời gian thực nằm ở chỗ nhiều kết quả
tính tóan liên tụcđều có kết quả nếu tính logic cũng như tính chính xác về thời gian
đựoc thỏa mãn
Đặc điểm:
 Lịch trình thực thi theo thời gian.
 Quản lý tài nguyên hệ thống.
 Cung cấp những nền tảng cơ bản để phát triển các ứng dụng trên nó.
Một số RTOS:
Adeos, ART Linux, ChorusOS, eCos, ELinOS, FreeRTOS, iRmx, ITRON, Linux, LynxOS,
MicroC/OS-II, Nucleus, OS-9, OSE, OSEK/VDX, pSOS, PikeOS, QNX, RedHawk, RSX-11,
VxWorks, Windows CE, Xenomai
1.2Các thành phần trong RTOS:
6
Tìm hiểu về hệ điều hành thời gian thực
Hình 1.2.1 : Các đối tượng trong RTOS
 Bộ lịch trình ( scheduler):
Là một tập các thuật toán để xác định tác vụ ( Task) nào được thực thi.
 Đối tượng (Object) :
Là những cấu trúc đặc biệt (Kernel) giúp người lập trình tạo ra các ứng
dụng.
 Dịch vụ ( Service) :
Là những điều khiển mà Kernel ( lõi) thực thi trong đối tượng ( object):
chia thời gian ( Timing), Ngắt( interrupt), Đáp ứng ( handling) và quản lý
tài nguyên hệ thống ( resource management)
Bộ lịch trình ( Scheduler):

 Là một phần vô cùng quan trọng của lõi hệ thống điều khiển
( Operating System Kernel).
 Nó giúp xác định tác vụ (task) nào sẽ dành quyền CPU để thực
thi tiếp theo. Sau đó, nó thực hiện việc chuyển trạng thái ( context
switching) được thực hiện bằng bộ điều phối ( dispatcher).
Chuyển đổi trạng thái ( Context Switching)
7
Tìm hiểu về hệ điều hành thời gian thực
Hình 1.2.2: Chuyển đổi trạng thái ( ngữ cảnh)
 Trạng thái ( ngữ cảnh) của tác vụ ( Task)
 Mỗi task có một trạng thái riêng của nó, nó chính là trạng thái của
những thanh ghi ( registers).
 Mỗi thời điểm 1 task mới được tạo ra , kernel sẽ tạo ra và lưu giữ
một block điều khiển liên quan đến task đó ( TCBs ). TCBs là những cấu
trúc dữ liệu hệ thống mà kernel dùng để lưu trữ những thông tin đặc
trung của task. TCBs chứa mọi thứ mà một kernel cần để biết về một task
cụ thể nào đó. Khi task đnag chạy, trạng thái của nó là động. Trạng thái
động này được lưu trữ trong TCB. Khi task không còn chạy nữa, trạng
thái sẽ bị đóng bang ( frozen) trong TCB, và được sử dụng cho lần thực
thi tiếp theo của task.
 Công tắc chuyển đổi trạng thái ( Context Switch):
 Sẽ xãy ra khi bộ lịch trình ( scheduler) chuyển từ một trạng thái
này sang một trạng thái khác.
 Việc chuyển đổi trạng thái bao gồm:
 Thời gian chuyển đổi:
Là thời gian tiêu tốn để cho bộ lịch trình chuyển từ task này sang
task khác.
Nó không có liên quan nào đến các lệnh thực hiện trong task.
Nếu một ứng dụng được thiết kế mà xảy ra chuyển đổi trạng thái
thường xuyên thì có thể dẫn đến những thực thi không cần thiết. Vì

vậy, nên thiết kế ứng dụng theo cách mà tạo ra ít chuyển đổi trạng thái
nhất.
8
Tìm hiểu về hệ điều hành thời gian thực
 Khi nào chuyển đổi xãy ra:
Mỗi khi ứng dụng tạo một lời gọi hệ thống ( System Call) , bộ lịch
trình sẽ xác định rằng có cần chuyển đổi trạng tháu hay không. Khi
bộ lịch trình xác định việc chuyển đổi là cần thiết thì sẽ gọi bộ phân
phối ( dispatcher) để thực hiện việc chuyển đổi.
Hình 1.2.3: Ví dụ về Contex
Switch
Bộ điều phối
(Dispatcher):
 Dòng thưc thi
( Flow of Execution):
Tại bất kì thời điểm
nào RTOS đang chạy,
dòng thực thi sẽ chuyển đến 3 vùng: đến các Task ứng dụng
( application Task), đến một chương trình phục vụ ngắt ( ISR), hoặc đến
Kernel.
 Khi nào bộ phân phối được thực hiên:
 Khi một Task hoặc ISR tạo một lời gọi hệ thống, dòng điều khiển
sẽ chuyển đến Kernel để thực thi một trong số những thủ tục được cung
cấp bởi Kernel.
 Khi rời khỏi kernel, Dispatcher sẽ có trách nhiệm là chuyển lệnh
điều khiển đến một trong số những Task ứng dụng.
 Cách thực hiện như sau:
 Không cần thiết để chuyển toàn bộ lệnh điều khiển đến cùng một
task gọi System Call. Điều này sẽ được xác định bằng giải thuật phân
chia thời gian biểu (scheduling algorithms ) của bộ lịch trình ( scheduler).

• Chuyển đổi thực thi từ một Task
9
Tìm hiểu về hệ điều hành thời gian thực
Hình 1.2.4: Điều phối từ một Task
 Tùy thuộc vào cách truy cập vào Kernel như thế nào mà
dispatching sẽ xãy ra khác nhau. Khi một Task thực hiện một lời gọi hệ
thống, dispatcher sẽ được sử dụng để thoát khỏi Kernel mỗi khi Lời gọi
hệ thống được hoàn thành. Trong trường hợp này, dispatcher được dùng
như một lời gọi của lời gọi ( call- by –call basic) để nó có thể hỗ trợ cho
việc chuyển đổi trạng thái của Task. Bất kì Task nào cũng có thể gọi
system call. Một hay nhiều Task có thể ở trạng thái sắn sàng cho thực thi.
 Chuyển đổi thực thi từ 1 chương trình phục vụ ngắt(ISR):
Hình 1.2.5: Điều phối từ một ISR
 Khi một ISR tạo một System Call, Dispatcher sẽ bị bỏ vô hiệu
hóa cho đến khi ISR thưc thi xong. Quá trinh này sẽ đúng miễn là có đủ
tài nguyên để chuyển đổi giữa các Task. Chuyển đổi trạng thái này sẽ
10
Tìm hiểu về hệ điều hành thời gian thực
không được diễn ra bởi vì ISR phải được thực thi xong mà không được
ngắt bởi các Tasks. Sau khi ISR thực thi xong, Kernel sẽ thoát đến
dispatcher để có thể điều phối đến đúng task thực thi tiếp theo.
Giải thuật cho lịch trình:
 Lịch trình thay thế theo độ ưu tiên:
Hình 1.2.6: Giải thuật lịch trình theo độ ưu tiên.
 Hầu hết các Real – time Kernel sử dụng giải thuật lịch trình thay
thế theo độ ưu tiên ( preemptive priority- based scheduling) làm mặc
định.
 Các task sẽ được thực thi tại bất kì một thời điểm là task có độ ưu
tiên cao nhất so với các task khác đang ở trạng thái sẵn sàng.
 Real –Time Kernel hỗ trợ 256 cấp độ ưu tiên, với 0 là độ ưu tiên

cao nhất và 255 là độ ưu tiên thấp nhất. Một số Kernel thì ngược lại với
255 là độ ưu tiên cao nhất và 0 là độ ưu tiên thâp nhất.
 Với bộ chuyển đổi theo đọ ưu tiên, mỗi task phải có một độ ưu
tiên, và task có độ ưu tiên cao nhất chạy đầu tiên. Nếu một Task có độ
ưu tiên cao hơn task đang chạy trở nên sẵn sàng để chạy thì kernel sẽ
ngay lập tức lưu lại trạng thái Task hiện tại và chuyển sang Task có độ
ưu tiên cao hơn.
 Mặc dù việc phân chia độ ưu tiên của Task được thực hiện khi
task đó được tạo nhưng độ ưu tiên của Task là có thể thay đổi một cách
linh động sử dụng Lời gọi do kernel cung cấp ( Kernel – provided
calls). Khả năng này dùng để thay đổi một cách linh động cho phép một
11
Tìm hiểu về hệ điều hành thời gian thực
ứng dụng nhúng có độ linh hoạt để ứng xử với sự kiện bên ngoài khi
chúng xuất hiện, tạo ra một hệ thống thời gian thực và đáp ứng tốt. Lưu
ý là việc sử dụng không đúng khả năng thay đổi độ ưu tiên này có thể
dẫn đến đảo độ ưu tiên ( priority inversion), vùng chết ( deadlock), và có
thể dẫn đến treo hệ thống ( system failure).
 Ví dụ: ( Hình 1.2.7)
Task 1 được thay thế bởi task 2 có độ ưu tiên cao hơn, task 2 được
thay thế bởi task 3 có độ ưu tiên cao hơn, khi Task 3 hoàn thành, task 2
sẽ tiếp tục thực thi trạng thái ngay trước khi bị dành quyền thực thi.
Tương tự, khi task 2 hoàn thanh thì Task 1 sẽ được tiếp tục thực thi
(resumes).
 Lịch trình theo Round- Robin( Gọi vòng)
Hình 1.2.7 : Lịch trình theo Round- Robin
 Mỗi Task sẽ cùng chia sẻ thời gian thực thi của CPU. Round-
Robin thuần túy không thỏa mãn yêu cầu của hệ thống thời gian thực bởi
vì một hệ thống thời gian thực các task phải làm việc theo mức độ quan
trong khác nhau.

12
Tìm hiểu về hệ điều hành thời gian thực
Hình 1.2.8
 Ví dụ : ( Hình 1.2.8)
• Thay vì thay thế theo độ ưu tiên, các task round –robin được phân
chia thời giant thực thi theo các khoảng thời gian ( time slice).
Vơi time slicing , mỗi task sẽ được thực thi trong một khoảng thời
gian nhất định, và theo vong trong. Một bộ đếm thời gian sẽ giám sát thời
gian của mỗi Task, tăng lên theo mỗi xung clock. Khi thời gian thực thi
một task đã hết,
• bộ đếm sẽ bị xóa, và task này sẽ được đặt ở cuổi cùng của chu kì
( end of circle).
• Nếu như một task round-robin bị thay thế bởi mọt task có độ ưu tiên
cao hơn, thì bộ đếm thời gian sẽ lưu lại và phục hồi khi task bị thay thế
dành quyền thực thi lại.
Các đối tượng ( Objects) trong RTOS:
 Tasks:
Là các luồng ( thread) thực thi cùng tồn tại và độc lập nhau có thể “
cạnh tranh” nhau để dành quyền thực thi.
 Semaphores:
Là đối tượng bắt sự kiện để đồng bộ giữa các tasks, có thể tăng hoặc
giảm.
 Message Queues:
Là một kiểu cấu trúc dữ liệu được dùng để đồng bộ hóa hoặc trao đổi
thông tin giữa các Tasks.
 Real-time embedded applications:
Là sự kết nối giữa các đối tượng của Kernel để giải quyết vấn đề thời
gian thực như sự đồng thời, sự đồng bộ,và trao đổi dữ liệu
13
Tìm hiểu về hệ điều hành thời gian thực

Chương II
VẤN ĐỀ QUẢN LÝ CÁC TASKS
2.1Định nghĩa Tasks:
Hình 2.1.1.: Sơ đồ cấu trúc của một Task cơ bản.
 Task là một luồng thực thi độc lập mà có thể cạnh tranh chiếm
quyền thực thi . Một ứng dụng được chia ra làm nhiều Tasks đồng thời
( Concurrent Task) để tối ưu khả năng đáp ứng vào ra trong luật thời
gian.
 Một Task được định nghĩa thuần túy là một tập các tham số và cấu
trúc dữ liệu.
 Các thành phần của một Task:
 Khi được tạo ra, Task sẽ có tên, ID duy nhất, độ ưu tiên, một
block điều khiển Task ( TCB), Stack, và Các thủ tục thực thi Task.
2.2Task hệ thống ( System Task):
Bao gồm các Task sau:
 Task khởi tạo ( Initialization or Startup Task)
Khởi tạo hệ thống và tạo task khởi động hệ thống.
 Task “Rỗi” ( Idle Task).
14
Tìm hiểu về hệ điều hành thời gian thực
Idle Task chạy theo chu kì rỗi của hệ thống ( idle cycles), được đặt ở
độ ưu tiên thấp nhất.
Thực thi một vòng lặp vô tận. Idle task chắc chắn rằng bộ đếm chương
trình luôn luôn có giá trị cho trong trường hợp không có task nào thực
thi.
Kernel cho phép các thao tác được cấu hình bời người dùng
( developer) để chạy những yêu cầu đặc biệt : sleep mode …
 Task “đăng nhập” ( Logging Task).
Là tin nhắn truy cập vào hệ thống.
 Task “Lỗi” ( Exception- Handling Task).

Thực thi các trường hợp lỗi hệ thống hoặc ứng dụng.
 Task “ sữa lỗi” ( Debug Agent Task).
Cho phép sữa lỗi thông qua công cụ debug ( host debugger). Chú ý
rằng các task hệ thống khác có thể được tạo ra trong quá trình khởi tạo,
phụ thuộc vào các thành phần có trong kernel.
2.3Các trạng thái của một Task:
Hình 2.3.1 : Các trạng thái của một Task.
 Trạng thái của một Task:
Tại bất kì một thời điểm, mỗi task tồn tại một trong số những trạng thái nhỏ
bao gồm: Sẵn sàng ( Ready), Đang thực thi ( Running), hoặc Khóa ( Blocked).
Khi một hệ thống nhúng thời gian thực chạy, mỗi task thay đổi từ trạng thái
15
Tìm hiểu về hệ điều hành thời gian thực
này đến trạng thái khác theo quy luật logic của một mấy trang thái hữu hạn
đơn giản ( Finite state machine (FSM)).
Về cơ bản, 3 trạng thái chính được sử dụng trong hầu hết các hệ thống
Kernel sử dụng phương pháplịch trình thây thế . ( preemptive – scheduling).
Trạng thái sẵn sàng ( Ready State):
Task đã sẵn sàng thực thi nhưng chưa thể thực thi vì task có độ ưu tiên cao
hơn đang chiếm quyền thực thi.
 Khi một Task được tạo lần đầu tiên, Kernel sẽ tự động đặt task này
vào trạng thái sẵn sàng.
 Ở trạng thái này, Task sẽ dành quyền thực thi với các Task ở trạng
thái sẵn sàng khác để chiếm thời gian thực thi của bộ vi xử lý.
 Task ở trạng thái sẵn sàng không thề chuyển vào trạng thái
Khóa( blocked) một cách trực tiếp. Một Task đầu tiên cần phải chạy để
có thể gọi “blocking call”, blocking call là lời gọi đến một hàm mà không
thể chạy đến việc hoàn thành ngay lập tức.
 Đối với những Kernel chỉ hỗ trợ mỗi mức ưu tiên cho một Task duy
nhất, giải thuật lich trình sẽ được chuyển thẳng tới Task có độ ưu tiên cao

nhất sẵn sàng cho lần chạy tiếp theo. Với việc hiện thực theo cách này ,
Kernel giới hạn số lượng Task trong một ứng dụng tương ứng với số mức
ưu tiên được hỗ trợ.
 Tuy nhiên, hầu hết các kernel hỗ trợ nhiều hơn một Task cho mỗi
mức ưu tiên trong một ứng dụng cụ thể nào đó. Trong trường hợp này,
giải thuật lịch trình sẽ phức tạp hownvaf bao gồm cả việc lưu trữ một
danh sách cá task ổ trạng thái sẵn sàng. Một số Kernel lưu giữ danh sách
task ở trạng thái sẵn sàng một cách rời rạc cho từng độ ưu tiên; một số
khác thì có một danh sách duy nhất.
 Ví dụ: ( Hình 2.3.2)
16
Tìm hiểu về hệ điều hành thời gian thực
 Giả sử hệ thống sử dụng giải thuật lịch trình thay thế theo độ ưu
tiên ( priority- based preemptive scheduling algorithm) với 255 mức ưu
tiên và quy định mức ưu tiên 0( lowest) là mức ưu tiên cao nhất.
 Trong ví dụ này, Task 1, 2, 3, 4 và 5 đang ở trạng thái sẵn sàng
thực thi, và Kernel xếp hang chúng bằng trong dang sách các task sẵn
sàng( task –ready list). Task 1 là task có độ ưu tiên cao nhất (70); task 2,
3, 4 là những Task có độ ưu tiên tiếp theo (80), và Task 5 có độ ưu tiên
thấp nhất( 90). Các bước sau giải thích việc Kernel dùng danh sách này
như thế nào:
• Vì Task 1 có độ ưu tiên cao nhất nên nó là Task đầu tiên sẵn sàng để
chạy. Kernel sẽ chuyển Task 1 từ danh sách Task sẵn sàng sang trạng
thái đang thực thi.
• Suốt trong quá trình thực thi, Task 1 tạo ra một Blocking call. Kết
quả là Kernel chuyển Task 1 vào trạng thái Blocked. Tiếp theo, Task 2 có
độ ưu tiên cao thứ 2 nên sẽ được chuyển vào trạng thái đang thực thi.
• Tiếp theo, Task 2 gọi Blocking call. Kernel chuyển Task 2 vào trạng
thái Blocked.Quá trình tương tự diễn ra cho Task 3.
• Khi Task 3 thực thi, tài nguyên hệ thống được yêu cầu bởi Task 2.

Kernel sẽ chuyển Task 2 vào trạng thái sẵn sàng và chèn vào cuối danh
sách các trạng thái sẵn sàng ở độ ưu tiên là là 80. Task 3 vâc tiếp tục là
Task hiện thời đang chạy.
• Task 3 tại thời điểm này sẽ được chuyển đến trạng thái sẵn sàng và
chèn sau Task 2 trong danh sách ( cùng độ ưu tiên là 80), đứng trước
Task 5.
17
Tìm hiểu về hệ điều hành thời gian thực
Hình 2.3.2 : Ví dụ về trạng thái sẵn sàng của Task
Trạng thái đang thực thi ( Running state):
Task có độ ưu tiên cao nhất và đang chạy.
 Ở hệ thống đơn vi xử lý ( Single – processor system), chỉ duy nhất
một Task có thể chạy tại một thời điểm. Trong trường hợp này, khi Task
được chuyển vào trạng thái đang thực thi, bộ xử lý lấy dữ liệu từ các
thanh ghi ứng với với trạng thái của Task. Bộ xử lý có thể thực thi thực
thi những lệnh trong Task và quản lý Stack liên quan.
 Như đã đề cập đến trong phần 1.2.3.1, một Task có thể chuyển đến
trạng thái sẵn sàng trong khi đang chạy. Khi một Task chuyển từ trạng
thái đang chạy đến trạng thái Sẵn sàng, nó bị chiếm quyền thực thi bởi
Task có độ ưu tiên cao hơn. Trong trường hợp này, Task bị chiếm quyền
thực thi sẽ được đặt vào vị trí chính xác về mức ưu tiên trong danh sách
các Task đang trạng thái sẵn sàng thực thi, và Task có độ ưu tiên cao hơn
được chuyển từ trạng thái sẵn sàng sang trạng thái đang thực thi.
 Không giống như một Task wor trạng thái sẵn sàng, Task ở trạng
thái đang thực thi sẽ chuyển đến trạng thái Blcoked theo cách sau:
 Bằng cách tạo ra một lời gọi yêu cầu một tài nguyên nhưng
không có sẵn để đáp ứng.
 Bằng cách tạo ra một lwoif gọi yêu cầu chờ một sự kiện xuất
hiện.
18

Tìm hiểu về hệ điều hành thời gian thực
 Bằng cách tạo ra một yêu cầu để delay chính nó trong một
khoảng thời gian nào đó.
Trạng thái Khóa ( blocked State)
 Task yêu cẩu tài nguyên hệ thống nhưng chưa được đáp ứng, yêu
cầu sẽ phải đợi cho đến khi sự kiện xuất hiện, hoặc delay một khoảng
thời gian.
 Tính năng của trạng thái blocked là rất quan trọng trong hệ thống thời
gian thực vì nếu không có trạng thái này, Task có độ ưu tiên thấp hơn sẽ
không thể thực thi được. Nếu Task có độ ưu tiên cao hơn không được
thiết kế cho trạng thái Blocked, CPU bị treo có thể xãy ra.
 Một Task có thề chuyền đến trạng thái Blocked chỉ khi tạo một
blocking call, yêu cầu một số điều kiện khóa . Một Task ở trạng thái
Blocked cho đến khi một số điều kiện blocking được thỏa mãn. Ví dụ
như một Semaphore xác định được Task nào đang đợi để giải phóng
trạng thái blocked, hoặc là một “tin nhắn” ( message) trong đó chứa Task
đang đợi đến một Queue, hoặc thời gian delay cho Task đó đã hết….
 Khi một Task được mở khóa ( unclocked), Task có thể chuyển từ trạng
thái blocked sang trạng thái sẵn sàng chạy ( ready state).
 Nếu Task được mở khóa có độ ưu tiên cao nhất , Task này sẽ chuyển
trực tiếp đến trạng thái đang thực thi và sẽ chiếm quyền thực thi của Task
hiện tại.
 Hiện tượng “ CPU starvation”:
Hiện tượng này xãy ra khi Task có độ ưu tiên cao nhất chiếm toàn bộ
thời gian thực thi và Task có độ ưu tiên thấp hơn không thể chạy được.
Các trạng thái khác:
 Một số Kernel định nghĩa những trạng thái khác như : trì hoãn
( suspended), Treo ( pended) và delay. Trong trường hợp này, pended và
delay thực chất là trạng thái trung gian của trạng thái blocked. Một Task
ở trạng thái Pended đang chờ một tài nguyên nào đó cần được giải

19
Tìm hiểu về hệ điều hành thời gian thực
phóng, một delay Task thì đang chờ thời gian delay kết thúc. Trạng thái
suspended tồn tại với mục đích debugging hệ thống.
 Kernel phải lưu trạng thái hiện tại của tất cả các Tasks trong hệ
thống. Khi những lời gọi được tạo ra bởi các tác đang thực thi, bộ lịch
trình sẽ xác đính Task nào cần thay đổi và thực hiện những sự thay đổi
này.
 Trong một số trường hợp, Kernel thay đổi trạng thái của một số
Task nhưng không có việc chuyển trạng thái ( context switching) xuất
hiện vì trạng thái của Task có độ ưu tien cao nhất không bị ảnh hưởng.
Trong những trường hợp khác, những sự thay đổi trạng thái này dẫn đến
một context switching bởi vì Task có độ ưu tiên cao nhất sẽ bị blocked
và không còn có độ ưu tiên cao nhất nữa. Khi quá trình xử lý xãy ra, Task
thực thi trước đó được chuyển đến trạng thái blocked hoặc sẵn sàng, và
task có độ ưu tiên cao nhất mới sẽ được thực thi.
2.4 Các điều khiển liên quan đến Task:
Tạo một Task:
 Task có thể được tạo từ 1 hoặc 2 bước:
Create : đặt task vào trạng thái suspended state
Start : chuyển Task vào trạng thái sẵn sàng
Một số Kernel hỗ trợ “ user configurable hook thực thì việc tạo Task.
Trạng thái Suspended:
Giống như trạng thái blocked , trong đó Task bị suspended thì
không ở trạng thái đang thực thi cũng như là sẵn sàng thực thi.
User configurable hook là một “máy” ( mechanism) thực thi những hàm
do ngưởi lập trình cung cấp, tại thời điểm của một sự kiện nhất cụ thể
nào đó.
Xóa một Task:
 Nhiều Kernel cho phép một Task có thể xóa một Task khác.

 Quá trình xóa một Task: Dừng Task đó, Giải phóng bộ nhớ bằng
cách xóa Task control Block và Stack.
 Ví dụ:
20
Tìm hiểu về hệ điều hành thời gian thực
Giả sử một Task nào đó yêu cầu một semaphore để dành quyền truy
cập vào cấu trúc dữ liệu. Trong khi Task đang thực thi trên cấu trúc dữ
liệu này, Task bị xóa. Nếu không thi hành một cách thích hợp, Việc xóa
Task đang thực thi có thể dẫn đến những kết quả sau:
 Phá vỡ cấu trúc dữ liệu bởi những lệnh ghi chưa hoàn thành.
 Không giải phóng được Semaphore, dẫn đến các Task khác
không thể yêu cầu semaphore được
 Một cấu trúc dữ liệu không thể truy cập được, vì semaphore
không được giải phóng, kết quả là chúng ta bị mất bộ nhớ hoặc tài
nguyên hệ thống.
 Mất bộ nhớ xãy ra khi bộ nhơ được sử dụng nhưng không được
giải phóng, kết quả là thệ thống sẽ dần dần không còn đủ bộ nhớ để chạy
chương trình.
 Mất tài nguyên xãy ra khi tài nguyên được sử dụng nhưng
không bao giờ đươc giải phóng, kết quả là mất bộ nhớ vì mỗi tài nguyên
chiếm môt vùng nhớ nhất định.
Lịch trình cho một Task
 Kernel sẽ cung cấp các APIs cho việc điều khiển trạng thái của Task.
Người lập trình có thể điều khiển trạng thái của Task như: hoãn
(suspend), tiếp tục( resume), bắt đầu lại (restart), lấy độ ưu tiên, cài đặt
độ ưu tiên, khóa preemtion, mở khóa reemption.
 Sử dụng lịch trình bằng tay, người tập trình có thể suspend và
resume Task từ một ứng dụng. Điều này quan trọng trong vấn đề debug
hệ thống, hoặc là suspend Task có độ ưu tiên cao để Task có đợ ưu tiên
thấp hơn có thể được thực thi.

 Người lập trình có thể delay một Task, Lấy thông tin vể độ ưu tiên
của Task đó.
Lấy thông tin của một Task:
21
Tìm hiểu về hệ điều hành thời gian thực
 Kernel cung cấp những thủ tục cho phép người lập trình có thề lấy
thông tin của Task trong ứng dụng : ID và TCB.
 Việc xác định TCB chỉ là trạng thái tức thời của Task, vì trạng thái
của Task là động.
2.5Cấu trúc của một Task:
Hình 2.5.1: Hiện thực cấu trúc của một Task
 “Chạy đến kết thúc” Task ( Run – to – completion Task)
Một ví dụ của Run – to – completion Task là Task khởi tạo ở cấp ứng
dụng ( application level). Task khởi tạo có nhiệm vụ khởi tạo ứng dụng
và tạo ra các dịch vụ, Tasks, và một số đối tượng của Kernel.
 Vòng vô tận Task ( Enless-Loop Task)
Một cấu trúc Enless-Loop Task bao gồm cả phần code khỏi tạo nhưng
phần khởi tạo chỉ cần một lần, sau đó sẽ là vòn lặp vô tận.
Một thành phần không thể thiếu của vòng lặp vô tận là một hay nhiều
blocking call nẳm trong vòng lặp. Những blocking call này cho phép các
Task có độ ưu tiên thấp hơn có thể chạy được.
22
Tìm hiểu về hệ điều hành thời gian thực
Chương III
VẤN ĐỂ VỀ QUẢN LÝ SEMAPHORE
1.1 Vấn đề chia sẻ tài nguyên ( Resourse sharing) và đồng bộ hóa
( Synchronization):
Chia sẽ tài nguyên hệ thống:
Hình 3.1.1 : Chia sẽ tài nguyên hệ thống
 Chia sẽ tài nguyên:

Việc truy cập bời nhiều tasks phải được đồng bộ để duy trì sự thống nhất
của việc chia sẻ tài nguyên. Quá trình này gọi là đồng bộ hóa, có quan hệ
mật thiết đến “Chọn kênh” ( mutual exclusions) và vùng “ưu tiên”
( critical section).
 “Chọn kênh” ( mutual exclusion)
Chỉ một Task duy nhất tại mỗi thời điểm mới có thể truy cập vùng tài
nguyên chia sẽ.
 Vùng “ưu tiên” ( Critical sections):
Là vùng code truy cập vùng tài nguyên chia sẽ.
 Ví dụ:
 Xét 2 Tasks đang cố gắng truy cập một vùng nhớ chia sẽ. Một
Task nhận dữ liệu liên tục từ một cảm biến và ghi vào vùng nhớ này.
23
Tìm hiểu về hệ điều hành thời gian thực
Trong khi đó, Task kia có nhiện vụ hiển thị dữ liệu này, nó sẽ đọc liên
tục vùng nhớ lưu dữ liệu để gửi dữ liệu ra thiết bị hiển thị.
 Vấn đề nảy sinh là nếu như việc sử dụng vùng nhớ này không
mang tính “ độc quyền” (exclusive) thì nhiều task sẽ lần lượt truy cập đến
vùng nhớ này. Ví dụ khi Task chưa hoàn thành việc ghi dữ liệu trước khi
task kia cố gắng đọc dữ liệu. Điều này dẫn đến nội dung hiển thị sẽ sai.
 Vùng code mà Task nhận dữ liệu tử cảm biến và ghi vào vùng
nhớ là một vùng “ưu tiên” (critical section). Tương tự cho đoạn code mà
trong Task hiển thị đọc dữ liệu từ vùng nhớ này cũng là một vùng ưu
tiên, vì 2 vùng này cùng truy cập vào một vùng tài nguyên hệ thống.
Đồng bộ hóa( Synchronization):
Hình 3.1.2 : Đồng bộ hóa
 Một cách tổng quát, một Task phải đồng bộ hoạt động của nó với
Task khác để việc thực thi đa luồng( multi- thread) được đảm bảo. Hoạt
động đồng bộ đảm bảo rằng thứ tự thực thi các Task được sử dụng.
 Ví dụ:

Hình 14: Một đoạn code C2 trong Task 2 chỉ được chạy nếu một đoàn
code C1 nào đó trong Task 1 được chạy trước. Trong trường hợp này,
chúng ta dùng một semaphore nhị phân đơn giản( binary semaphore), để
hiện thực việc đồng bộ hóa.
24
Tìm hiểu về hệ điều hành thời gian thực
1.2Định nghĩa một Semaphore:
Hình 3.2.1: Semaphore
 Đối tượng của Kernel có một hay nhiều luồng thực thi có thể yêu
câu hoắc giải phóng cho mục đích đồng bộ.
 Khi một semaphore được tạo ra lần đầu tiên, Kernel sẽ phân chia
chúng đến một Block điều khiển semaphore( semaphore control block
(SCB), với một ID duy nhất, một giá trị và một danh sách các Tasks đang
ở trọng thái chờ ( task waiting list)
 Một semaphore giống như một chìa khóa cho phép một Task có thể
tiến hành một số lệnh điều khiển hoặc truy cập tài nguyên. Nếu Task
nhận được semphore thì nó sẽ tiến hành những điều khiền dự định trước
hoặc là truy cập đến tài nguyên .
 Kernel sẽ giám sát số lần semaphore được nhận bằng cách sử dụng
một biến đếm ( token count), Biến này có thể được khởi tạo giá trị khi
semaphore được tạo. Khi một Task nhận được một Semaphore, biến đếm
sẽ giảm và khi giải phóng semaphore thì biến này sẽ tăng lên. Nếu như
biến đếm này bằng 0 thì nghĩa là không có task nào nhận semaphore.
 Danh sách các task ở trạng thái chờ kiểm tra những Task bị blocked
và chờ semaphore. Danh sách này có thể là FIFO hoặc là theo thứ tự ưu
tiên.
25

×