Các vấn đề nâng cao trong Java 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 gi
Trang 1Lập trình thời gian thực trong Java
Mở đầu
Trang 2Mụ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
Trang 3Thuậ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.
Trang 4Đặc trưng hệ thống nhúng
Thuật toán trong điều khiển
Trang 5Kiến trúc Java
Real-time Operating System
JVM JBC
Standalone JVM
JBC
Hardware JVM
JBC
Trang 6Đặ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ồ
Trang 7Yê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
Trang 8Các vấn đề nâng cao trong Java
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
Trang 9 Để 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
Trang 10Bộ 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)
Trang 11Real-Time Garbage Collection
Trong hệ thống thời gian thực, sự tiếp cận làm tăng khả năng ảnhhưởng tới quá trình phân tích thời gian của hệ thống
Garbage collection có thể thi hành khi tràn bộ nhớ động hoặc tăngcường sự hoạt động
Sự hoạt động của GC có thể ảnh hưởng tới khả năng đáp ứng cácluồng thời gian
Tất cả các đối tượng chuẩn của Java được ghi trong bộ nhớ động
và cần thiết sự thực thi có hiệu quả của GC
GC là một phần của máy ảo Java
Mặc dù tính chất hoạt động của GC trong toàn bộ quá trình thực thi
hệ thống, nhưng vẫn còn tồn tịa những sự miễn cưỡng trong hệthống thời gian nhằm đáp ứng vấn đề giới hạn thời gian
Trang 12 RTSJ đò hỏi GC cần có quyền ưu tiên bởi các luồng thời gian thực
và và sẽ tồn tại giới hạn của quyền ưu tiên
Lớp MemoryArea là một lớp trừu tượng dành cho tất cả các vùng
phân chia của RTSJ
Khi truy cập vào một vùng nhớ, tất cả các đối tượng được thực hiệnbên trong vùng đó
Trang 13Phân lớp của MemoryArea
HeapMemory cho phép các đối tượng được đưa vào trong bộ nhớ động của Java
ImmortalMemory chia xẻ trong số các luồng, đối tượng được khởi tạo tại đây không phụ thuộc vào GC và được giải phóng chỉ khi dừng chương trình
ScopedMemory là vùng bộ nhớ cho các đối tượng đã được định nghĩa rõ ràng, liên hệ với từng phạm vi của bộ nhớ là một sự liên kết để theo dõi có bao nhiêu tiến trình thời gian thực được sử dụng tại vùng nhớ đó
Khi sự liên kết tính từ 1 tới 0, tất cả các đối tượng trong phạm vi bộ nhớ sẽ thực thi phương thức cuối cùng của nó và bộ nhớ được giải phóng
Lớp ScopedMemory là lớp trừu tượng bao gồm một số phân lớp sau
VTMemory: là nơi phân phối bộ nhớ tùy biến theo thời gian (Variable Time)
LTMemory: là nơi phân phối bộ nhớ xảy ra trong thời gian tuyến tính (Linear Time) (liên quan tới kích thước của đối tượng)
Trang 14Đặc trưng của bộ nhớ
Có thể được cấp phát khi các luồng thời gian thực và những bộ xử lý, chỉ rõ
Số lượng cực đại của bộ nhớ trong một vùng bộ nhớ
Số lượng cực đại của bộ nhớ có thể được sử dụng trong bộ nhớ
Trang 15RTSJ class RTSJ abstract class
Trang 16Giá trị thời gian
HighResolutionTime đóng gói những giá trị thời gian với mức độnanosecond
Giá trị được biểu diễn bởi thành phần 64 bit millisecond và 32 bit nanosecond
Lớp là lớp trừu tượng có 3 phân lớp sau:
AbsoluteTime: thể hiện như là quan hệ thời gian tuyệt đối
RelativeTime : thể hiện quan hệ thời gian
RationalTime là kiểu quan hệ thời gian có tần số quan hệ, sử dụng
để thể hiện tốc độ sự kiện xảy ra
Giá trị thời gian quan hệ chặt chẽ với đồng hồ
Trang 17Đồng hồ
Lớp Clock của RTSJ xác định lớp trừu tượng từ đó tất
cả các đồng hồ được dẫn xuất tới
Tồn tại nhiều kiểu đồng hồ khác nhau, ví dụ như đồng
hồ tính toán thời gian của CPU
Luôn tồn tại một đồng hồ thời gian thực
Phương thức tĩnh getRealtimeClock cho phép lấy
giá trị hiện tại thực của đồng hồ
Trang 18Sơ đồ giá trị thời gian và đồng hồ
standard Java interface
Trang 19Lập lịch trong Java
Java không đưa ra những đảm bảo luồng với quyền ưu tiên cao
nhất sẽ luôn được thực thi
JVM có thể tin cậy vào một hệ điều hành chủ hỗ trợ những luồngcủ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 độ ưu tiên và sự thực thi nó là sựgiải phóng trong kết hợp của các mức độ quyền ưu tiên này lên trênmột phạm vi quyền ưu tiên của hệ điều hành để hạn chế nếu cầnthiết
Sự yếu kém trong định nghĩa lập lịch và vùng phân bố hẹp nghĩa làchương trình Java thiếu sự dự đoán trước, và từ đó sử dụng Java cho các hệ thống thời gian thực bị hạn chế
Trang 20Đối tượng lập lịch
RTSJ khái quát hóa những thực thể mà có thể được lập lịch từ những luồng đến khái niệm của đối tượng lập lịch ( schedulable objects)
Mỗi đối tượng lập lịch là một sự thực thi giao diện
Schedulable
Mỗi đối tượng lập lịch phải có 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ầu bộ nhớ (nhịp độ đối tượng truy xuất bộ nhớ động)
Yêu cầu lập lịch (quyền ưu tiên sẽ phải được hoạch định)
Trang 21Giải phóng yêu cầu
Những thuyết về lập lị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ời rạc (bất thường nhưng với khoảng thời gian cực tiểu giữa chúng)
Mọi tham số giải phóng có giá trị và deadline liên hệ với giá trị thời gian
Giá trị tính theo thời gian CPU cần thiết cho mỗi giải phóng
deadline là thời gian cần thiết đối với mỗi yêu cầu
PeriodicParameters bao gồm cả thời gian bắt đầu cho lần thứ nhất và khoảng thời gian giữa các lần.
SporadicParameter bao gồm khoảng thời gian nhỏ nhất giữa các lần yêu cầu
Đối với đối tượng lập lịch không tuần hoàn có thể tới hạn của số lượng thời gian mà lập lịch dành cho nó trong chu kỳ đặc thù sử dụng
ProcessingGroupParameters
Trang 22Đặc trưng của lập lịch
Đặc trưng của lập lịch được sử dụng bởi bộ lập lịch, để xách định tại thời điểm hiện tại đối tượng nào xứng đáng được thi hành
Lớp trừu tượng SchedulingParameters cung cấp lớp gốc trong phạm vi tiêu chuẩn lập lịch có thể biểu thị
RTSJ định nghĩa một tiêu chuẩn dựa vào quyền ưu tiên
Những giá trị số lớn cho sự thể hiện quyền ưu tiên cao
ImportanceParameters cho phép lập lịch bổ sung, và được gán cho phân lớp PriorityParameters
Trang 23Bộ lập lịch
Bộ lập lịch chịu trách nhiệm về lập lịch những đối tượng chươngtrình liên quan của nó
RTSJ hỗ trợ sự lập lịch dựa trên nền quyền ưu tiên thông qua
PriorityScheduler (sự lập lịch trên nền ưu tiên cố định với 28 mức ưu tiên duy nhất)
Scheduler là một lớp trừu tượng với phân lớpPriorityScheduler
Cho phép thực thi theo hướng Sớm nhất – Hạn cuối cùng – Bộ lậplịch đầu tiên
Bất kỳ sự cố gắng nào để cài đặt bộ lập lịch cho luồng phải đảm bảorằng nó nằm trong sự đảm bảo cho phép (security permissions)
Trang 24RealtimeSecurity checks
Trang 25 Hệ thời gian thực cần
Dự đoán liệu có phải đối tượ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ạm khoảng thời gian tối thiểu
Đối với một số hệ thống dự đoán liệu đối tượng đã gặp deadline hay chưa
Với những hệ thống khác, yêu cầu một số mẫu phân tích trực tiếp
RTSJ cung cấp phương pháp phân tích trực tiếp
Không kể tới làm sao dự đoán đã được lập, sự cần thiết là thông báo về sự tràn giá trị
RTSJ cung cấp cơ chế xử lý sự kiện không đồng bộ cho mục đích trên
Trang 26Luồng thời gian thực
Đối tượng lập lịch
Cung cấp gói java.lang.thread
Không có bộ nhớ động, không có sự truy cập tới bộ nhớ động và riêng biệt đối với GC
Trang 27Sơ đồ luồng thời gian thực
Thread Runnable
Schedulable
RealtimeThread
SchedulingParameters
ReleaseParameters Scheduler
has
has
has has
imp lem ents
Trang 28 Từ hệ thời gian thực, sự kiện có thể đòi hỏi sự xử lý trong khoảng deadline
RTSJ khái quát hóa những bộ xử lý sự kiện Java thành những thực thể lập lịch
Trang 29Sơ đồ xử lý sự kiện không đồng bộ
has
hasimplements
Trang 30Sự xử lý luồng thời gian thực
Trong thực tế, thời gian thực JVM thường được kết hợp động với xử lý sự kiện thời gian thực
Để tránh sự tràn, cần phải xác định rõ luồng thời gian thực cần xử lý
Mỗi lớp AsyncEvent có thể có một hoặc nhiều sự xử lý
và cùng một xử lý có thể diễn ra đối với một hoặc nhiều
sự kiện khác nhau
Khi một sự kiện xuất hiện, tất cả các xử lý tới sự kiện đó
SchedulingParameters
Trang 31Sự kiện không đồng bộ
Sự kiện không đồng bộ có thể phụ thuộc vào các hàm ngắt hoặc tín hiệu POSIX (Portable Operating System Interface for Computer Environment) signals
Thời gian sẽ là nguyên nhân để sự kiện bị loại bỏ
Sự loại bỏ này có thể là ngay lập tức hoặc tuần hoàn
Trang 32Sơ đồ lớp sự kiện không đồng bộ
Clock
AsyncEvent AsyncEventHandler
Timer BoundAsyncEventHandler
Trang 33Chuyển quyền điều khiển không
Asynchronous Transfer of Control (ATC)
Sự kiện không đồng bộ cho phép chương trình trả lời trong thời giantới điều kiện được kiểm tra bởi chương trình hoặc môi trường
Không cho phép đối tượng lịch đặc biệt được cung cấp trực tiếp
Trong nhiều chương trình, chỉ có một mẫu của chuyển quyền điềukhiển mà luồng thời gian thực cần để yêu cầu tự thực thi
Ngôn ngữ và hệ điều hành cung cấp tiến trình hủy bỏ tiến trình xử lý
Đối với hệ thời gian thực, cần thiết đòi hỏi các đối tượng lập lịch đểkết thúc những gì đang thực thi
Trang 34ATC I
Trong Java chuẩn, cơ chế ngắt là sự cố gắng tạo mẫu của sự chuyển quyền điều khiển không đồng bộ
Cơ chế không cung cấp thời gian trả lời tới hàm ngắt
Phải có sự thông báo về thực thi của luồng
Sự trì hoãn này là sự không chấp nhận được cho những
hệ thống thời gian thực
Với nhưng lý do đo, RTSJ cung cấp một cách tiếp cân thay thế cho sự ngắt đối tượng lập lịch, sử dụng sự chuyển quyền điều khiển không đồng bộ - asynchronous transfer of control (ATC)
Trang 35ATC II
Mô hình ATC được xây dựng trên những nguyên tắc sau
Đối tượng lập lịch phải rõ ràng, sẵn sàng cho cho phép ATC sẽ được chuyển
Theo mặc định, đối tượng lập lịch sẽ có sự hoãn ATC
Sự thực thi của phương pháp đồng bộ luôn làm trì hoãn ATC
ATC là sự chuyển quyền điều khiển không có giá trị trả về
Trang 36 Giao diện Interruptible cung cấp liên kết giữa lớp AIE và đối tượng thực thi phương thức ngắt
Trang 37Lớp và giao diện ATC
Interruptible
InterruptedException
AsynchronouslyInterruptedException uses
doInterruptible fire
RTSJ class
RTSJ interface Java interface
Timed
Trang 39Các lớp RTSJ cho thừa kế quyền ưu tiên
MonitorControl
PriorityInheritance PriorityCeilingEmulation
Trang 40Thừa kế quyền ưu tiên và GC
Nếu những luồng thời gian thực muốn giao tiếp với những luồng không phải thời gian thực thì sự tương tác với GC phải được xem xét
Cần thiết thử để tránh trường hợp nơi một luồng không phải thời gian thực đã đưa vào vùng loại trừ lẫn nhau dùng chung với một luồng thời gian thực
Những hoạt động của luồng không phải thời gian thực là kết quảdẫn tới hình thành GC
Luồng thời gian thực giành quyền ưu tiên của GC, nhưng khôngđược đưa vào vùng loại trừ lẫn nhau
Phải đợi cho đến khi GC kết thúc và luồng thời không phải thời gianthực rời khỏi vùng
Trang 41Đợi liên kết tự do
Một cách tránh những sự tương tác không thể đoán trước với GC là
sẽ cung cấp một cơ chế liên kết không chặn kết nối giữa những luồng không phải thời gian thực và những luồng thời gian thực
RTSJ cung cấp 3 lớp đợi liên kết tự do không chặn kết nối:
WaitFreeWriteQueue : bộ đệm, quá trình đọc được đồng bộ, quá trình ghi không đồng bộ
WaitFreeReadQueue : bộ đệm, quá trình ghi được đồng bộ, quá trình ghi có thể đòi hỏi không được thông báo khi có dữ liệu thông qua sự kiện không đồng bộ
WaitFreeDequeue : bộ đệm, cho phép cùng ngăn và không ngăn quá trình đọc và ghi
Trang 42Các lớp đợi tự do
WaitFreeDequeue WaitFreeWriteQueue WaitFreeReadQueue
uses uses
AsyncEventHandler
uses
Trang 43Các lớp bộ nhớ vật lý và bộ nhớ
Cơ chế cho phép đối tượng được đưa vào trong vùng nhớ có yêu cầu truy cập
RTSJ cung cấp khả năng mở rộng của MemoryArea tới bộ nhớvật lý
Cơ chế cho phép người lập trình truy cập vào bộ nhớ thô sơ, sử dụng giao diện, liên kết bộ nhớ thông qua các thanh ghi input/output của thiết bị
RTSJ cung cấp các lớp mà có thể truy xuất bộ nhớ thô sơ đểđọc và ghi giá trị Java hoặc các mảng giá trị nguyên thủy (int, long, float etc.)
Thực thi của cả bộ nhớ vật lý và bộ nhớ thô sơ có thể thông qua lớp
PhysicalMemory-Manager và giao diện PhysicalMemoryTypeFilter
Trang 44Sơ đồ lớp bộ nhớ vật lý và bộ nhớ thô sơ
Implementation-defined
uses
MemoryArea