Siêu thị PDFTải ngay đi em, trời tối mất

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
MIỄN PHÍ
Số trang
36
Kích thước
3.7 MB
Định dạng
PDF
Lượt xem
1551

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

Tải ngay đi em, còn do dự, trời tối mất!