Thư viện tri thức trực tuyến
Kho tài liệu với 50,000+ tài liệu học thuật
© 2023 Siêu thị PDF - Kho tài liệu học thuật hàng đầu Việt Nam

Phát triển với Java thời gian thực, Phần 1: Khai thác các đặc tính độc nhất của Java thời gian thực
Nội dung xem thử
Mô tả chi tiết
Phát triển với Java thời gian thực, Phần 1: Khai thác các đặc tính độc nhất
của Java thời gian thực
Tận dụng hiệu năng Java thời gian thực trong ứng dụng của bạn
Sean C. Foley, Phát triển phần mềm, IBM
Tóm tắt: Bộ Java thời gian thực (Real-time Java™) kết hợp dễ dàng việc lập
trình bằng ngôn ngữ Java theo hiệu năng do ứng dụng yêu cầu mà phải phù hợp
với các ràng buộc thời gian thực. Các phần mở rộng của ngôn ngữ Java đưa ra các
đặc tính về môi trường thời gian thực mà đang thiếu trong môi trường thời gian
chạy Java truyền thống. Bài này, bài đầu tiên trong loạt bài ba phần, mô tả một số
đặc tính này và giải thích cách bạn có thể áp dụng chúng để đạt được hiệu năng
thời gian thực trong các ứng dụng của chính mình.
Java thời gian thực là một bộ các tăng cường cho ngôn ngữ Java, cung cấp cho các
ứng dụng một mức hiệu năng thời gian thực, vượt trội hiệu năng của công nghệ
Java chuẩn. Hiệu năng thời gian thực khác với hiệu năng thông lượng truyền
thống, là một thước đo điển hình của tổng số các chỉ thị, tác vụ, hoặc công việc có
thể được thực hiện trong khoảng thời gian ấn định. Hiệu năng thời gian thực tập
trung vào thời gian mà một ứng dụng yêu cầu để đáp ứng các kích thích bên ngoài
mà không vượt quá các ràng buộc thời gian cho trước. Trong trường hợp của các
hệ thống thời gian thực cứng (hard real-time), các ràng buộc như vậy không bao
giờ được vượt quá; các hệ thống thời gian thực mềm (soft real-time) có một dung
sai cao hơn đối với các vi phạm. Hiệu năng thời gian thực đòi hỏi chính ứng dụng
phải giành được quyền điều khiển của bộ xử lý sao cho nó có thể trả lời các kích
thích, và trong khi trả lời các tác nhân kích thích đó thì bộ mã của ứng dụng không
bị khóa do thực hiện các quy trình tương tranh trong máy ảo đó. Java thời gian
thực đưa ra độ đáp ứng mà trước đây chưa được thoả mãn trong các ứng dụng
Java.
Một máy ảo Java (JVM) thời gian thực có thể tận dụng các dịch vụ hệ điều hành
thời gian thực (RTOS) để cung cấp các khả năng thời gian thực cứng, hoặc nó có
thể chạy trên nhiều hệ điều hành thông thường đối với các áp dụng có các ràng
buộc thời gian thực mềm dẻo hơn. Một số công nghệ sử dụng trong Java thời gian
thực trở nên “miễn phí” khi bạn chuyển sang sử dụng máy ảo Java thời gian thực.
Nhưng để khai thác một số đặc tính của Java thời gian thực, cần phải có một số
thay đổi về ứng dụng. Các đặc tính này là trọng tâm của bài viết này.
Các quy trình con phải bị ràng buộc
Một JVM phục vụ một ứng dụng cho trước bằng cách thực hiện công việc mà ứng
dụng đó chỉ điều khiển theo cách lỏng. Một vài quy trình thời gian chạy con làm
việc trong JVM, gồm:
Gom rác: Đây là công việc để phục hồi lại các khối nhớ thời gian chạy
(run-time memory) mà ứng dụng đã loại bỏ. Việc gom rác có thể làm chậm
việc thực thi ứng dụng trong một khoảng thời gian.
Nạp lớp: Quy trình này — gọi như vậy vì các ứng dụng Java được nạp ở
mức chi tiết của các lớp, liên quan đến việc nạp các cấu trúc ứng dụng —
các chỉ thị, và các tài nguyên khác từ hệ thống tệp hoặc mạng. Trong Java
chuẩn, ứng dụng nạp từng lớp khi nó được tham chiếu lần đầu (nạp chậm).
Biên dịch động đúng thời (JIT dynamic compilation): Nhiều máy ảo sử
dụng việc biên dịch động của các phương thức từ ngôn ngữ máy của Java
(Java bytecode) sang các chỉ thị máy riêng khi ứng dụng đang chạy. Mặc dù
việc này cải thiện được hiệu năng, hoạt động biên dịch tự nó có thể gây ra
sự trì hoãn tạm thời, khóa việc chạy mã ứng dụng.
Lập lịch: Trong Java chuẩn, cho phép mức điều khiển tối thiểu để ứng
dụng ra lệnh cả việc lập lịch việc chạy các xử lí (threads) của chính mình
lẫn lập lịch của ứng dụng tương quan với các ứng dụng khác đang chạy trên
cùng hệ điều hành.
Tất cả các quy trình con này có thể gây trở ngại đến khả năng phản hồi các tác
nhân kích thích bên ngoài của một ứng dụng, vì chúng có thể làm chậm việc thực
thi bộ mã ứng dụng. Thí dụ một chuỗi chỉ thị hẳn có thể được lên lịch thực hiện để
trả lời một tín hiệu từ mạng, hệ thống radar, bàn phím, hoặc bất kỳ thiết bị nào
khác. Một ứng dụng thời gian thực có một khoảng thời gian tối thiểu chấp nhận
được trong đó một quy trình không liên quan đến, chẳng hạn như cho phép gom
rác làm chậm việc thực hiện chuỗi chỉ thị trả lời.
Java thời gian thực đưa ra các công nghệ đa dạng được thiết kế để giảm can thiệp
đến ứng dụng khỏi các quy trình con ẩn này. Các công nghệ “miễn phí” này xuất
hiện khi bạn chuyển sang JVM thời gian thực bao gồm việc gom rác đặc biệt có
hạn chế khoảng thời gian và tác động của các gián đoạn đối với việc thu gom, tải
lớp đặc biệt mà cho phép hiệu năng được tối ưu hoá vào lúc khởi động, thay vì
việc tối ưu hoá bị chậm, khoá và đồng bộ hoá đặc biệt, và lập lịch xử lí ưu tiên đặc
biệt với việc tránh bị đảo ngược quyền ưu tiên. Tuy nhiên, đòi hỏi một số thay đổi
cho ứng dụng — cụ thể là khai thác các đặc tính do Đặc tả Thời gian Thực cho
Java (RTSJ) đưa ra.
RTSJ đảm bảo một API có nhiều đặc tính thời gian thực trong các JVM. Một số
các đặc tính này có tính bắt buộc khi thực hiện đặc tả, số khác thì tuỳ ý. Đặc tả bao
hàm các lĩnh vực chung về:
Lập lịch thời gian thực
Quản lý nhớ nâng cao
Các bộ định thời gian phân giải cao
Xử lý sự kiện không đồng bộ
Ngắt không đồng bộ các xử lí
Các xử lí thời gian thực
RTSJ định nghĩa javax.realtime.RealtimeThread — là một lớp con của lớp chuẩn
java.lang.Thread. Trên chính nó, RealtimeThread tạo ra một số đặc tính tiên tiến
của đặc tả. Thí dụ các xử lí thời gian thực là chủ thể của bộ lập lịch xử lí thời gian
thực. Bộ lập lịch đảm bảo một phạm vi duy nhất các quyền ưu tiên lập lịch và có
thể thực hiện chính sách lập lịch thời gian thực vào trước - ra trước (đảm bảo các
xử lí có quyền ưu tiên cao nhất được thực hiện không bị gián đoạn), cùng với việc
kế thừa quyền ưu tiên (một thuật toán tránh các xử lí quyền ưu tiên thấp hơn giữ
vô hạn một khoá mà một xử lí có quyền ưu tiên cao hơn đang yêu cầu và được
chạy không bị cản trở — tình huống này được xem như đảo quyền ưu tiên).
Bạn có thể xây dựng nên một cách rõ ràng các cá thể của RealtimeThread (xử lí
thời gian thực) trong mã của bạn. Nhưng cũng có thể thay đổi ứng dụng của bạn
theo một cách tối thiểu để xử lí thời gian thực, nên tránh được sự cố gắng phát
triển đáng kể và các chi phí liên quan. Thể hiện sau đây là các ví dụ khác nhau về
các cách để cho phép tạo xử lí thời gian thực ít can thiệp nhất và minh bạch nhất.
(Bạn có thể tải về mã nguồn cho toàn bộ các thí dụ trong bài viết.) Các kỹ thuật
này cho phép một ứng dụng khai thác các xử lí thời gian thực với sự cố gắng tối
thiểu và cho phép ứng dụng giữ được sự tương thích với các máy ảo chuẩn.
Chỉ định kiểu xử lí theo quyền ưu tiên