Lập trình thời gian
thực trong Java
Mở đầu
Mục đích về
kỹ
thuật
Hiểu những yêu cầu cơ bản của hệ thống
thời gian thực
Hiểu những yêu cầu trong thiết kế Java và
hệ thống thời gian thực trong Java
Có thể lập trình nâng cao trong hệ thời
gian thực Java
2
Vũ
Quang Dũng
Thuật ngữ
Hard real-time —hệ thống hoàn toàn cưỡng chế sự trả lời
trong khoảng thời gian deadline cho phép. Ví dụ như hệ
thống điều khiển bay.
Soft real-time — deadline là quan trọng đối với hệ thống,
nhưng cũng tồn tại chức năng để sửa lỗi hệ thống khi
deadline không được đáp ứng kịp thời. Ví dụ như hệ thống
nhận dữ liệu.
Firm real-time —làhệ thống soft real-time trong trường hợp
không có sự ràng buộc gì trong giới hạn cần thiết.
3
Vũ
Quang Dũng
Đặc trưng hệ
thống nhúng
4
Vũ
Quang Dũng
Thuật toán
trong điều khiển
Ghi dữ
liệu
Nhân dữ
liệu
và
hiển thị
Điều
khiển giao
diện
Giao diện
Hệ
thống
kỹ
thuật
Quá
trình truy cập
hệ
thống từ
xa
Đồng hồ
thời gian thực
Database
Lệnh điều khiển
Thiết bị
hiển thị
Máy tính thời gian thực
Kiến trúc Java
5
Vũ
Quang Dũng
Real-time Operating System
JVM
JBC
Standalone
JVM
JBC
Hardware JVM
JBC
Đặc điểm kỹ
thuật của hệ
thời gian
thực trong Java
Đặc điểm kỹ thuật của RTSJ (The Real-
Time Specification for Java) và hệ thống
chuẩn theo NIST (US National Institute of
Standards and Technology)
Cung cấp các đặc điểm về
Quản lý bộ nhớ
Giá trị thời gian và đồng hồ
Đối tượng lịch và lập lịch
6
Vũ
Quang Dũng
Yêu cầu NIST
NIST là tổ chức của Mỹ về tiêu chuẩn và kỹ thuật,
hướng dẫn những nguyên tắc cơ bản và cài đặt những
yêu cầu cho hệ thời gian thực phát triển trên nền Java
Hệ thời gian thực Java (Real-time Java) sẽứng dụng
thời gian thực vào giải quyết các vấn đề kỹ thuật trong
thực thi các hệ thống thời gian thực
7
Vũ
Quang Dũng
Các vấn đề nâng cao trong Java
đối với hệ
thời gian thực
Thời gian thực trong Java là nâng cao của Java
trong các vấn đề sau:
Quản lý bộ nhớ
Thời gian và đồng hồ
Đối tượng lịch và lập lịch
Luồng thời gian thực
Thiếu đồng bộ của nắm bắt sự kiện và đồng hồ
Thiếu đồng bộ trong truyền điều khiển
Sự đồng bộ hóa và chia xẻ tài nguyên
Truy cập bộ nhớ vật lý
8
Vũ
Quang Dũng
Quản lý bộ
nhớ
Nhiều hệ thống thời gian thực giới hạn sự cho phép của bộ nhớ vì
Giá cả
Những vấn đề liên quan tới hệ thống như độ lớn, chuyên môn hóa của
hệ thống
Để hệ thống nhúng làm việc có hiệu quả, điều cần thiết đầu tiên là
sự phâ chia và quản lý có hiệu quả của bộ nhớ
Khi tồn tại nhiều kiểu của bộ nhớ (với những đặc trung truy cập
khác nhau) thì có thể cần thiết để có những chỉ dẫn biên dịch đối với
các kiểu dữ
Hệ thống sẽ nâng cao khả năng thực thi và khả năng dự đoán của
hệ thống nhúng
9
Vũ
Quang Dũng
Bộ
nhớ động
Máy ảo Java chịu trách nhiệm về quản lý bộ nhớ động
Chìa khóa chính là quyết định được độ lớn bộ nhớ cần thiết là bao
nhiêu và tính toán được phần bộ nhớ không sử dụng tới (lớp
sizeEstimator)
Quản lý bộ nhớ gồm:
1.
Đòi hỏi người lập trình phải trả
lại bộ
nhớ
một cách chính xác
2.
Đòi hỏi máy ảo Java điều khiển bộ
nhớ
và
quyết định khi nào thi không
được phép truy cập
3.
Đòi hỏi máy ảo Java điều khiển bộ
nhớ
và
khoanh vùng bộ
nhớ
không
còn truy nhập khi thực thi chương trình và
giải phóng bộ
nhớ
(garbage
collection)
10
Vũ
Quang Dũng
Real-Time Garbage Collection
Trong hệ thống thờigianthực, sự tiếpcậnlàmtăng khả năng ảnh
hưởng tới quá trình phân tích thờigiancủahệ thống
Garbage collection có thể thi hành khi tràn bộ nhớđộng hoặctăng
cường sự hoạt động
Sự hoạt động củaGC cóthểảnh hưởng tớikhả năng đáp ứng các
luồng thờigian
Tấtcả các đốitượng chuẩncủa Java được ghi trong bộ nhớđộng
và cầnthiếtsự thực thi có hiệuquả củaGC
GC là mộtphầncủamáyảoJava
Mặc dù tính chấthoạt động của GC trong toàn bộ quá trình thựcthi
hệ thống, nhưng vẫncòntồntịanhững sự miễncưỡng trong hệ
thống thờigiannhằm đáp ứng vấn đề giớihạnthờigian
11
Vũ
Quang
Dũng
Vùng
bộ
nhớ
RTSJ cung cấpsự quảnlýbộ nhớ mà không ảnh hưởng tớihoạt
động của garbage collection
Nó xác định vùng nhớ, mộtsố trong đótồntại bên ngoài bộ nhớ
Java thông thường và không chịutácđộng củaGC
RTSJ đòhỏiGC cần có quyền ưutiênbởicácluồng thờigianthực
và và sẽ tồntạigiớihạncủa quyền ưutiên
Lớp MemoryArea là mộtlớptrừutượng dành cho tấtcả các vùng
phân chia củaRTSJ
Khi truy cậpvàomộtvùngnhớ, tấtcả các đốitượng đượcthựchiện
bên trong vùng đó
12
Vũ
Quang
Dũng
Phân
lớpcủa
MemoryArea
HeapMemory chophépcácđốitượng được đưa vào trong bộ nhớđộng
củaJava
ImmortalMemory chia xẻ trong số các luồng, đốitượng đượckhởitạotại
đây không phụ thuộc vào GC và đượcgiải phóng chỉ khi dừng chương trình
ScopedMemory là vùng bộ nhớ cho các đốitượng đã được định nghĩarõ
ràng, liên hệ vớitừng phạmvi củabộ nhớ là mộtsự liên kết để theo dõi có
bao nhiêu tiếntrìnhthờigianthực đượcsử dụng tại vùng nhớđó
Khi sự liên kết tính từ 1 tới0, tấtcả các đốitượng trong phạmvi bộ nhớ sẽ thực
thi phương thứccuốicùngcủanóvàbộ nhớđượcgiải phóng
Lớp ScopedMemory là lớptrừutượng bao gồmmộtsố phân lớpsau
VTMemory: là nơi phân phốibộ nhớ tùy biếntheothời gian (Variable Time)
LTMemory: là nơi phân phốibộ nhớ xảy ra trong thờigiantuyếntính(Linear
Time) (liên quan tớikíchthướccủa đốitượng)
13
Vũ
Quang
Dũng
Đặctrưng
củabộ
nhớ
Có thểđượccấp phát khi các luồng thờigianthựcvà
những bộ xử lý, chỉ rõ
Số lượng cực đạicủabộ nhớ trong một vùng bộ nhớ
Số lượng cực đạicủabộ nhớ có thểđượcsử dụng trong bộ nhớ
vô hạn
Khoảng giớihạntốc độ đượccấp phát củabộ nhớđộng (bytes
per second),
Có thểđượcsử dụng bởibộ lậplịch trong điềukhiểnthu
nạpvà/hoặc dành cho mục đích củaviệc đảmbảoGC
tương thích
14
Vũ
Quang
Dũng
Sơđồlớpquảnlýbộ
nhớ
15
Vũ
Quang
Dũng
MemoryArea
HeapMemory
ImmortalMemory
ScopedMemory
LTMemory VTMemory
SizeEstimator
MemoryParameters
GarbageCollector
RTSJ class
RTSJ abstract class
Giá
trị
thờigian
HighResolutionTime đóng gói những giá trị thờigianvớimức độ
nanosecond
Giá trịđượcbiểudiễnbởi thành phần 64 bit millisecond và 32 bit
nanosecond
Lớplàlớptrừutượng có 3 phân lớp sau:
AbsoluteTime: thể hiệnnhư là quan hệ thờigiantuyệt đối
RelativeTime : thể hiện quan hệ thờigian
RationalTime là kiểu quan hệ thờigiancótầnsố quan hệ, sử dụng
để thể hiệntốc độ sự kiệnxảyra
Giá trị thời gian quan hệ chặtchẽ với đồng hồ
16
Vũ
Quang
Dũng
Đồng
hồ
Lớp Clock của RTSJ xác định lớptrừutượng từđótất
cả các đồng hồđượcdẫnxuấttới
Tồntạinhiềukiểu đồng hồ khác nhau, ví dụ nhưđồng
hồ tính toán thờigiancủa CPU
Luôn tồntạimột đồng hồ thờigianthực
Phương thứctĩnh getRealtimeClock cho phép lấy
giá trị hiệntạithựccủa đồng hồ
17
Vũ
Quang
Dũng
Sơđồgiá
trị
thờigianvàđồng
hồ
18
Vũ
Quang
Dũng
HighResolutionTime
RationalTime
AbsoluteTime
RelativeTime
Clock
relativeTo
relativeTo
relativeTo
standard Java interface
RTSJ class
RTSJ abstract class
Lậplịch
trong
Java
Java không đưaranhững đảmbảoluồng với quyền ưutiêncao
nhấtsẽ luôn đượcthựcthi
JVM có thể tin cậyvàomộthệđiều hành chủ hỗ trợ những luồng
của nó, một số những hệ thống này có thể không hỗ trợ sự lập lịch
trên nền quyền ưu tiên
Java duy nhất định nghĩa 10 mức độ ưutiênvàsự thực thi nó là sự
giải phóng trong kếthợpcủacácmức độ quyền ưu tiên này lên trên
mộtphạm vi quyền ưutiêncủahệđiều hành để hạnchế nếucần
thiết
Sự yếu kém trong định nghĩalậplịch và vùng phân bố hẹp nghĩalà
chương trình Java thiếusự dựđoán trước, và từđósử dụng Java
cho các hệ thống thờigianthựcbị hạnchế.
19
Vũ
Quang
Dũng
Đốitượng
lậplịch
RTSJ khái quát hóa những thựcthể mà có thểđượclập
lịch từ những luồng đếnkháiniệmcủa đốitượng lậplịch
(schedulable objects)
Mỗi đốitượng lậplịch là mộtsự thực thi giao diện
Schedulable
Mỗi đốitượng lậplịch phảicóchỉ dẫn riêng biệt
Giải phóng yêu cầu, khi nó trở nên khả thi,
Yêu cầubộ nhớ (nhịp độ đốitượng truy xuấtbộ nhớđộng)
Yêu cầulậplịch (quyền ưutiênsẽ phải đượchoạch định)
20
Vũ
Quang
Dũng
Giải
phóng
yêu
cầu
Những thuyếtvề lậplịch thường xác định 3 kiểu:
Theo chu kỳ (trên cơ sở thông thường),
Không tuần hoàn (ngẫu nhiên) và
Rờirạc(bấtthường nhưng vớikhoảng thờigiancựctiểugiữa chúng)
Mọithamsố giải phóng có giá trị và deadline liên hệ vớigiátrị thờigian
Giá trị tính theo thờigianCPU cầnthiếtchomỗigiải phóng
deadline là thờigiancầnthiết đốivớimỗiyêucầu
PeriodicParameters bao gồmcả thờigianbắt đầucholầnthứ nhấtvà
khoảng thờigiangiữacáclần.
SporadicParameter bao gồmkhoảng thờigiannhỏ nhấtgiữacáclần
yêu cầu
Đốivới đốitượng lậplịch không tuần hoàn có thể tớihạncủasố lượng thời
gian mà lậplịch dành cho nó trong chu kỳđặcthùsử dụng
ProcessingGroupParameters
21
Vũ
Quang
Dũng
Đặctrưng
củalậplịch
Đặctrưng củalậplịch đượcsử dụng bởibộ lậplịch, để
xách định tạithời điểmhiệntại đốitượng nào xứng đáng
được thi hành
Lớptrừutượng SchedulingParameters cung cấplớp
gốc trong phạm vi tiêu chuẩnlậplịch có thể biểuthị
RTSJ định nghĩamộttiêuchuẩndựa vào quyền ưutiên
Những giá trị số lớnchosự thể hiệnquyền ưutiêncao
ImportanceParameters cho phép lậplịch bổ sung, và
được gán cho phân lớp PriorityParameters
22
Vũ
Quang
Dũng
Bộ
lậplịch
Bộ lậplịch chịu trách nhiệmvề lậplịch những đốitượng chương
trình liên quan củanó
RTSJ hỗ trợ sự lậplịch dựatrênnền quyền ưu tiên thông qua
PriorityScheduler (sự lậplịch trên nền ưutiêncốđịnh với28
mức ưu tiên duy nhất)
Scheduler là mộtlớptrừutượng với phân lớp
PriorityScheduler
Cho phép thực thi theo hướng Sớmnhất–Hạncuốicùng–Bộ lập
lịch đầutiên
Bấtkỳ sự cố gắng nào để cài đặtbộ lậplịch cho luồng phải đảmbảo
rằng nó nằm trong sựđảmbảo cho phép (security permissions)
23
Vũ
Quang
Dũng
Sơđồquan
hệ
các
lớplậplịch
24
Vũ
Quang
Dũng
ReleaseParameters
PeriodicParameters
AperiodicParameters
SporadicParameters
SchedulingParameters
ProcessingGroupParameters
MemoryParameters
ImportanceParameters
Scheduler
PriorityParameters
PriorityScheduler
uses
uses
uses
uses
RealtimeSecurity
checks
Deadlines
Hệ thờigianthựccần
Dựđoán liệucóphải đốitượng chương trình đãgặp deadline
Thông báo về sự bỏ lỡ deadline, tràn giá trị, hoặc xâm phạmkhoảng thờigiantối
thiểu
Đốivớimộtsố hệ thống dựđoán liệu đốitượng đãgặp deadline hay chưa
Vớinhững hệ thống khác, yêu cầumộtsố mẫuphântíchtrựctiếp
RTSJ cung cấpphương pháp phân tích trựctiếp
Không kể tớilàmsaodựđoán đã đượclập, sự cầnthiết là thông báo về sự
tràn giá trị
RTSJ cung cấpcơ chế xử lý sự kiện không đồng bộ cho mục đích trên
25
Vũ
Quang
Dũng