Nghiên cứu và đánh giá kiến trúc máy ảo Java
MỤC LỤC
LỜI CAM ĐOAN ....................................................................................................... 6
DANH MỤC CÁC THUẬT NGỮ - VIẾT TẮT ........................................................ 7
DANH MỤC HÌNH VẼ, ĐỒ THỊ .............................................................................. 9
DANH MỤC BẢNG ................................................................................................. 12
MỞ ĐẦU ................................................................................................................... 13
1. Lý do chọn đề tài ................................................................................................ 13
2. Mục tiêu đề tài .................................................................................................... 13
3. Phạm vi nghiên cứu ............................................................................................ 14
4. Phương pháp nghiên cứu .................................................................................... 14
5. Kết quả dự kiến................................................................................................... 14
6. Ý nghĩa khoa học và thực tiễn ............................................................................ 14
7. Bố cục luận văn .................................................................................................. 15
CHƯƠNG I. ẢO HÓA VÀ MÁY ẢO TIẾN TRÌNH .............................................. 16
1.1 TỔNG QUAN..................................................................................................... 16
1.1.1
Khái niệm Ảo hóa ........................................................................................ 16
1.1.2
Máy ảo ......................................................................................................... 16
1.1.3
Máy ảo hệ thống .......................................................................................... 19
1.1.4
Máy ảo tiến trình.......................................................................................... 21
1.1.5
Một số loại máy ảo hệ thống và ảo hóa tiến trình ....................................... 22
1.2 MÁY ẢO TIẾN TRÌNH ..................................................................................... 23
1.2.1
Cấu trúc của máy ảo tiến trình ..................................................................... 25
1.2.2
Khả năng tương thích .................................................................................. 27
1.2.3
Ánh xạ trạng thái ......................................................................................... 31
1.2.4
Mô phỏng kiến trúc bộ nhớ ......................................................................... 36
1.2.5
Mô phỏng lệnh ............................................................................................. 42
Học viên thực hiện: Nguyễn Ngọc Tú – 13BMTTT - KTMT
2
Nghiên cứu và đánh giá kiến trúc máy ảo Java
1.2.6
Mô phỏng ngoại lệ ....................................................................................... 43
1.2.7
Mô phỏng hệ điều hành ............................................................................... 48
1.2.8
Quản lý mã bộ đệm (Cache) ........................................................................ 50
1.2.9
Môi trường hệ thống .................................................................................... 53
CHƯƠNG II. MÁY ẢO JAVA ................................................................................ 56
2.1 MÔI TRƯỜNG JAVA ....................................................................................... 59
2.1.1
Môi trường thực thi ứng dụng ..................................................................... 59
2.1.2
Bộ công cụ phát triển ................................................................................... 59
2.1.3
Ngôn ngữ lập trình Java............................................................................... 59
2.2 MÁY ẢO JAVA ................................................................................................. 62
2.3 Kiểu dữ liệu trong máy ảo Java .......................................................................... 63
2.4 Kích thước từ nhớ trong máy ảo Java................................................................. 65
2.5 Các thành phần trong máy ảo Java ..................................................................... 66
2.5.1
Class Loader SubSystems ............................................................................ 67
2.5.2
Method Area ................................................................................................ 69
2.5.3
Heap ............................................................................................................. 74
2.5.4
PC registers .................................................................................................. 86
2.5.5
Ngăn xếp trong Java .................................................................................... 86
2.5.6
Khung ngăn xếp ........................................................................................... 88
2.5.7
Native method stacks ................................................................................... 91
2.5.8
Engine thực thi............................................................................................. 92
2.5.9
Native Method Interface .............................................................................. 98
2.6 HOẠT ĐỘNG CỦA MÁY ẢO JAVA ............................................................. 100
CHƯƠNG III ĐÁNH GIÁ HIỆU NĂNG MÁY ẢO JAVA .................................. 103
3.1 Đặt vấn đề ......................................................................................................... 103
3.2 Phần đánh giá hiệu năng ................................................................................... 103
Học viên thực hiện: Nguyễn Ngọc Tú – 13BMTTT - KTMT
3
Nghiên cứu và đánh giá kiến trúc máy ảo Java
3.3 Mục tiêu sau khi thực hiện đánh giá ................................................................. 103
3.4 Giới thiệu chương trình được sử dụng để đánh giá .......................................... 104
3.5 Công cụ sử dụng để đánh giá............................................................................ 104
3.6 Giới thiệu công cụ VisualVM .......................................................................... 105
3.7 Thực hiện đánh giá: Đánh giá bao gồm: .......................................................... 106
CHƯƠNG IV KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN....................................... 118
Kết quả .................................................................................................................... 118
Những hạn chế ........................................................................................................ 118
Hướng phát triển ..................................................................................................... 119
TÀI LIỆU THAM KHẢO ....................................................................................... 120
Học viên thực hiện: Nguyễn Ngọc Tú – 13BMTTT - KTMT
4
Nghiên cứu và đánh giá kiến trúc máy ảo Java
LỜI CẢM ƠN
Đầu tiên, em muốn gửi lời biết ơn chân thành tới TS.Nguyễn Kim Khánh, người
trực tiếp hướng dẫn và tạo mọi điều kiện về thời gian, sự giúp đỡ tận tình về kiến thức
chuyên môn, sự chỉ dẫn, định hướng và tài liệu tham khảo quý báu.
Tiếp theo, em xin cảm ơn các thầy cô trong Viện Công nghệ thông tin và Truyền
thông – Đại học Bách khoa Hà Nội đã giảng dạy, truyền đạt kiến thức cho em trong
suốt thời gian qua.
Tôi cũng xin cảm ơn gia đình, bạn bè đã chia sẻ, giúp đỡ tôi trong học tập và thời
gian thực hiện nghiên cứu đề tài này.
Trong báo cáo đề tài này chắc chắn không tránh khỏi những chỗ thiếu sót, nhưng
trên hết em mong nhận được những lời góp ý, sự chỉ bảo từ các thầy cô để có thể
hoàn thiện đề tài của mình tốt hơn.
Hà nội, ngày 15 tháng 03 năm 2015
Người thực hiện
Nguyễn Ngọc Tú
Học viên thực hiện: Nguyễn Ngọc Tú – 13BMTTT - KTMT
5
Nghiên cứu và đánh giá kiến trúc máy ảo Java
LỜI CAM ĐOAN
Luận văn Thạc sĩ “Nghiên cứu và đánh giá kiến trúc máy ảo Java”, chuyên ngành
Công nghệ thông tin là công trình của cá nhân tôi. Các nội dung nghiên cứu và kết
quả trình bày trong luận văn là trung thực rõ ràng. Các tài liệu tham khảo, nội dung
tham khảo trích dẫn đã ghi rõ nguồn gốc.
Hà nội, ngày 15 tháng 03 năm 2015
Tác giả luận văn
Nguyễn Ngọc Tú
Học viên thực hiện: Nguyễn Ngọc Tú – 13BMTTT - KTMT
6
Nghiên cứu và đánh giá kiến trúc máy ảo Java
DANH MỤC CÁC THUẬT NGỮ - VIẾT TẮT
STT Viết tắt
1.
VM
Viết đầy đủ
Virtual Machine
Chú thích
Là một máy ảo được tạo ra bằng cách cài
đặt phần mềm và thiết lập các thông số
như máy thật.
2.
OS
Operating System
Hệ điều hành.
3.
VMM
Virtual Machine Monitor
Giám sát máy ảo.
4.
ISA
5.
JVM
Java Virtual Machine
Máy ảo tiến trình Java.
6.
JNI
Java Native Interface
Giao tiếp riêng Java.
7.
ABI
8.
GC
Garbage collector
Chương trình thu dọn rác.
9.
EL
Execute layer
Lớp thực thi.
10.
NMI
Native Method Interface
Phương thức giao diện riêng.
11.
OS
Operation system
Hệ điều hành.
12.
CSDL
Database
Cơ sở dữ liệu.
13.
LRU
Least Recently Used
Sử dụng truy cập gần nhất.
14.
DLL
Dynamic Link Library
Thư viện liên kết động.
15.
PCs
Programe Counter
Bộ đếm chương trình.
MGC
Major (full) Garbage
(FGC)
Collection
17.
MiGC
Minor Garbage Collection
18.
YC
Young Generation
Vùng nhớ YC của Heap.
19.
OG
Old Generation
Vùng nhớ OD của Heap.
16.
Intruction Set
Architecture
Application Binary
Interface
Kiến trúc tập lệnh.
Giao diện nhị phân ứng dụng.
Quá trình thu dọn rác chính (đầy đủ).
Quá trình thu dọn rác phụ, diễn ra trong
vùng YC.
Học viên thực hiện: Nguyễn Ngọc Tú – 13BMTTT - KTMT
7
Nghiên cứu và đánh giá kiến trúc máy ảo Java
20.
RISC
21.
FIFO
22.
JRE
23.
JDK
Reduced Instruction Set
Computing
Fist - in firt - out
Java Runtime
Environment
Java Development Kit
Đơn giản hóa các tập lệnh trong tính toán.
Thuật toán thay thế sử dụng trong mô
phỏng hệ điều hành.
Môi trường thực thi ứng dụng Java.
Bộ công cụ phát triển của Java.
Trình biên dịch thực thi các mã bytecode
24.
JIT
Just In Time
thành mã máy, thực hiện trong khi thực
thi chương trình.
25.
API
26.
RMI
Java Application
Programming Interface
Giao diện lập trình ứng dụng Java.
Remote Method
Là phương thức giao tiếp từ xa giữa các
Invocation
đối tượng trong Java.
Là các thành phần công nghệ phía server
27.
EJB
Enterprise Java Bean
để đóng gói và hỗ trợ mạnh việc thực hiện
các thao tác bảo mật.
Học viên thực hiện: Nguyễn Ngọc Tú – 13BMTTT - KTMT
8
Nghiên cứu và đánh giá kiến trúc máy ảo Java
DANH MỤC HÌNH VẼ, ĐỒ THỊ
Hình 1 Phân loại máy ảo. .........................................................................................17
Hình 2 Mô hình tổng quát ảo hóa hệ thống ..............................................................19
Hình 3: Mô hình ảo hóa kiểu native .........................................................................20
Hình 4 Mô hình ảo hóa kiểu hosted ..........................................................................21
Hình 5 Tiến trình khách của máy ảo giao tiếp với tiến trình chủ. ............................24
Hình 6 Quá trình thực hiện của máy ảo tiến trình ....................................................26
Hình 7 Mô tả chuyển trạng thái điều khiển giữa chỉ dẫn người dùng và OS. ..........29
Hình 8 Trạng thái ánh xạ giữa máy khách – chủ......................................................31
Hình 9 Mô phỏng kiến trúc địa chỉ bộ nhớ qua một phần mềm chuyển giao địa chỉ.
...................................................................................................................................33
Hình 10 Ánh xạ không gian địa chỉ máy khách tới một vùng không gian trên máy
chủ, ............................................................................................................................34
Hình 11 ánh xạ trực tiếp từ không gian địa chỉ máy khách và không gian địa chỉ
máy chủ .....................................................................................................................35
Hình 12 Kiến trúc bộ nhớ Win32, với 2 bit giữ bởi hệ thống. Sử dụng từ bit số 2 - bit
30 ...............................................................................................................................37
Hình 13 Ánh xạ một phần không gian địa chỉ ảo hóa của máy khách tới một tệp. ..38
Hình 14 Trang nhớ của máy khách nhỏ hơn trang máy chủ. ...................................39
Hình 15 Tích hợp tiến trình máy chủ, khách trong máy ảo tiến trình. .....................54
Hình 16 Nền tảng Java Platform Standard Edition (JavaSE 8) ...............................58
Hình 17 Các kiểu dữ liệu trong máy ảo Java ...........................................................63
Hình 18 quá trình thực hiện biên dịch chương trình Java ........................................66
Hình 19 Các thành phần chính trong kiến trúc máy ảo Java ...................................67
Hình 20 Cấu trúc bộ nhớ Heap .................................................................................74
Hình 21 Cấu trúc bộ nhớ Heap .................................................................................75
Học viên thực hiện: Nguyễn Ngọc Tú – 13BMTTT - KTMT
9
Nghiên cứu và đánh giá kiến trúc máy ảo Java
Hình 22 Xác định vị trí đối tượng .............................................................................76
Hình 23 Quá trình chèn thông tin vào trong không gian Aden ................................76
Hình 24 Tính tuổi đối tượng ......................................................................................76
Hình 25 Tính tuổi đối tượng ......................................................................................77
Hình 26 Quy trình cấp lại bộ nhớ .............................................................................77
Hình 27 Quá trinh nâng cấp vùng.............................................................................78
Hình 28 Thăng cấp giữa 2 vùng nhớ.........................................................................78
Hình 29 Tổng thể tiến trình thu dọn rác ...................................................................78
Hình 30 Đánh dấu các phần của bộ nhớ ..................................................................79
Hình 31 Xóa bình thường ..........................................................................................79
Hình 32 Xóa và nén ...................................................................................................80
Hình 33 Phân chia một đối tượng qua việc xử lý và bảng đối tượng .......................81
Hình 34 Dữ liệu đối tượng được lưu trong một nơi ..................................................82
Hình 35: Con trỏ giữ các phương thức .....................................................................83
Hình 36 Bộ nhớ biểu diễn mảng ...............................................................................85
Hình 37 Các biến phương thức trong biến cục bộ của ngăn xếp Java .....................89
Hình 38 Quá trình gọi stack lại trong Java Stack.....................................................92
Hình 39 Mô tả các luồng được chia sẻ trong vùng dữ liệu thực thi .......................101
Hình 40 Các luồng trong PC, Java stack, Method Area.........................................102
Hình 41 Giao diện chương trình VisualVM ............................................................105
Hình 42 CPU – Java2D Demo – Java HotSpot 32 bit ............................................108
Hình 43 CPU – Java2D Demo – Java HotSpot 64 bit ............................................109
Hình 44 Bộ nhớ Heap – Java2D Demo – Java HotSpot 32 bit ..............................109
Hình 45 Bộ nhớ Heap – Java2D Demo – Java HotSpot 64 bit ..............................109
Hình 46 CPU – System Rendering System – Java HotSpot 64 bit ..........................110
Hình 47 CPU – System Rendering System – Java HotSpot 64 bit ..........................110
Học viên thực hiện: Nguyễn Ngọc Tú – 13BMTTT - KTMT
10
Nghiên cứu và đánh giá kiến trúc máy ảo Java
Hình 48 Bộ nhớ Heap – System Rendering System – Java HotSpot 64 bit ............110
Hình 49 Bộ nhớ Heap – System Rendering System – Java HotSpot 64 bit ............111
Hình 50 Kết quả so sánh thực hiện chương trình Java2D Demo ...........................112
Hình 51 Log chương trình trên Window 8.1 ...........................................................112
Hình 52 Log chương trình trên Linux – Ubuntu 14.04 ...........................................113
Hình 53 Kết quả phân tích log 1 .............................................................................113
Hình 54 Kết quả phân tích log 2 .............................................................................113
Hình 55 Biểu đồ phân tích log1 ..............................................................................114
Hình 56 Biểu đồ phân tích log2 ..............................................................................114
Hình 57 Kết quả so sánh thực hiện chương trình Sunflow Rendering System .......116
Học viên thực hiện: Nguyễn Ngọc Tú – 13BMTTT - KTMT
11
Nghiên cứu và đánh giá kiến trúc máy ảo Java
DANH MỤC BẢNG
Bảng 1 Lịch sử phát triển các phiên bản của Java ...................................................57
Bảng 2 Kiểu và khoảng giá trị của kiểu trong JVM..................................................65
Bảng 3 Kiểu tiền tố của mã bytecode ........................................................................95
Bảng 4 Lưu trữ và kiểu tính toán trong JVM ............................................................96
Bảng 5 Bảng các kiểu dữ liệu của JNI ....................................................................100
Bảng 7 Bảng tham số hiển lựa chọn hiển thị trong GC ..........................................107
Bảng 8 Bảng tham số hiển lựa chọn hiển thị trong GC ..........................................108
Học viên thực hiện: Nguyễn Ngọc Tú – 13BMTTT - KTMT
12
Nghiên cứu và đánh giá kiến trúc máy ảo Java
MỞ ĐẦU
1. Lý do chọn đề tài
Hiện nay máy ảo không còn xa lạ với người dùng, việc thực hiện ảo hóa ngày càng
được phát triển với mức độ và quy mô lớn, ảo hóa mang lại nhiều lợi thế về kinh tế,
thời gian, nhân công…. Với người dùng chuyên về IT nói chung để hiểu rõ về hệ
thống ảo hóa là vấn đề quan trọng cần tiếp tục phải cập nhật, nghiên cứu. Ảo hóa hệ
thống - ảo hóa tiến trình là hai dạng của công nghệ của ảo hóa, với việc chọn đề tài
“Nghiên cứu và đánh giá kiến trúc máy ảo Java” luận văn xem xét nghiên cứu lý
thuyết chung về ảo hóa tiến trình, nghiên cứu về kiến trúc máy ảo tiến trình Java. Đây
là một trong những đề tài mới và khó nhưng cần thiết với người dùng IT bởi vì Java
- ứng dụng Java ngày càng được sử dụng rộng rãi. Java với hơn 20 năm phát triển,
Hãng Oracle đã thống kê hiện nay có trên 5 tỉ thiết bị đang sử dụng ngôn ngữ Java30.
Việc tìm hiểu và nghiên cứu về máy ảo tiến trình Java hết sức có ý nghĩa, giúp cho
người dùng có thể kiểm tra tính tương thích, quản lý giám sát, đánh giá được ưu
nhược điểm của ứng dụng…. khi đã nắm được thông tin này thì việc vận hành và thực
thi ứng dụng sẽ giúp cho người quản trị vận hành ứng dụng thực thi ứng dụng hiệu
quả và chính xác nhất.
2. Mục tiêu đề tài
Đề tài tìm hiểu và nghiên cứu lý thuyết máy ảo tiến trình nói chung cụ thể về máy
ảo tiến trình Java, tập trung tìm hiểu nghiên cứu về cơ chế hoạt động của các thành
phần đó trong kiến trúc máy ảo Java.
Để đạt được mục tiêu đề tài tập trung vào:
a. Lý thuyết máy ảo tiến trình.
b. Lý thuyết máy ảo Java.
Phần thực hành thực hiện đánh giá về hiệu năng, so sánh máy ảo Java HotSpot 32,
64 bit cùng chạy một ứng dụng trên các nền tảng OS khác nhau, đề tài cũng thực hiện
xem xét tìm hiểu và đánh giá hiệu năng hoạt động của máy ảo thông qua cơ chế thu
Học viên thực hiện: Nguyễn Ngọc Tú – 13BMTTT - KTMT
13
Nghiên cứu và đánh giá kiến trúc máy ảo Java
dọn bộ nhớ khi thực hiện ứng dụng cụ thể, so sánh, đánh giá quá trình hoạt động của
việc thu dọn rác trên 2 môi trường OS khác nhau.
3. Phạm vi nghiên cứu
- Tìm hiểu lý thuyết máy ảo tiến trình.
- Tìm hiểu lý thuyết máy ảo Java và hoạt động của các thành phần trong máy ảo
Java.
- Tìm hiểu về hiệu năng của máy ảo Java qua cơ chế thu dọn rác trong bộ nhớ
Heap của máy ảo Java, đánh giá hiệu năng máy ảo 32, 64 bit bằng việc thực
hiện chạy cùng một ứng dụng cùng một OS và trên hai OS khác nhau.
4. Phương pháp nghiên cứu
- Phương pháp nghiên cứu lý thuyết: Nghiên cứu lý thuyết về máy ảo tiến trình,
máy ảo Java, cơ chế hoạt động của các thành phần trong máy ảo Java.
- Phương pháp nguyên cứu thực hành: Thực hành đánh giá ưu nhược điểm thực
thi ứng dụng Java chạy trên các nền tảng OS khác nhau, so sánh đánh giá ứng
dụng khi chạy trên hai phiên bản 32, 64 bit, tìm hiểu và đánh giá về cơ chế quản
lý bộ nhớ thông qua việc thực hiện thu dọn rác trong bộ nhớ của máy ảo.
5. Kết quả dự kiến
- Hiểu được toàn bộ kiến trúc máy ảo Java, Chức năng và hoạt động của các thành
phần trong máy ảo Java.
- Thực nghiệm chạy chương trình đánh giá máy ảo Java chạy trên các nền tảng
OS khác nhau đã thu được kết quả về hiệu năng khi chạy ứng dụng và đưa ra
kết luận.
6. Ý nghĩa khoa học và thực tiễn
Đề tài luận văn là cơ sở để hiểu rõ tổng thể về Java nói chung, các thành phần của
Java (ngôn ngữ lập trình, môi trường phát triển, môi trường thực thi…), đây là những
lý thuyết cơ bản cần có cho việc nghiên cứu, lập trình, giám sát hiệu năng ứng
dụng…Từ đó tùy vào khả năng, nhu cầu thực tế riêng mà có thể phát triển các bộ
công cụ quản lý, đánh giá, kiểm thử ứng dụng, đánh giá hiệu năng của ứng dụng cho
Học viên thực hiện: Nguyễn Ngọc Tú – 13BMTTT - KTMT
14
Nghiên cứu và đánh giá kiến trúc máy ảo Java
phù hợp với đặc thù riêng này, việc quản lý có thể thực hiện qua mạng, trong cùng
mạng bằng những công cụ có sẵn trong bộ công cụ phát triển JDK.
Tính thực tiễn của đề tài, đề tài là cơ sở thực tế nhằm phát triển các công cụ quản
lý hiệu năng tập trung các ứng dụng được xây dựng trên nền tảng ngôn ngữ Java tại
Ngân hàng Thương mại Cổ phần Kỹ thương Việt Nam (Techcombank).
7. Bố cục luận văn
Bố cục của luận văn được chia thành 4 chương như sau:
Chương 1: Máy ảo và máy ảo tiến trình
Chương 1 giới thiệu các khái niệm ảo hóa, máy ảo, ảo hóa tiến trình và ảo hóa hệ
thống, ngoài ra giới thiệu về một số máy ảo hóa hệ thống và ảo hóa tiến trình.
Chương 2: Máy ảo Java
Chương 2 giới thiệu chung về môi trường Java, thành phần và hoạt động của các
thành phần này. Phần tiếp sẽ giải thích cách hoạt động của máy ảo Java.
Chương 3: Đánh giá hiệu năng máy ảo Java
Chương 3 thực hiện đánh giá chạy ứng dụng với 2 phiên bản máy ảo 32 bit và 64 bit.
Thực hiện chạy phần mềm mã nguồn mở và đánh giá hiệu năng máy ảo trên các OS
khác nhau từ đó đưa ra nhận xét kết luận về hiệu năng của máy ảo Java.
Chương 4: Kết luận và hướng phát triển
Chương 4 bàn về những vấn đề đã giải quyết và những vấn đề chưa giải quyết được
trong phạm vi của luận văn và đề xuất hướng phát triển tiếp theo cho luận văn trong
môi trường thực tế tại Ngân hàng Cổ phần Kỹ thương Việt Nam (Techcombank).
Học viên thực hiện: Nguyễn Ngọc Tú – 13BMTTT - KTMT
15
Nghiên cứu và đánh giá kiến trúc máy ảo Java
CHƯƠNG I. ẢO HÓA VÀ MÁY ẢO TIẾN TRÌNH
1.1 TỔNG QUAN
1.1.1 Khái niệm Ảo hóa
Ảo hóa là công nghệ được thiết kế để tạo ra một tầng trung gian giữa hệ thống
phần cứng của máy tính và phần mềm chạy trên phần cứng đó, việc đưa ra một khái
niệm logic về tài nguyên máy tính ảo hóa có thể thực hiện rất nhiều công việc khác
nhau (ảo hóa ứng dụng, ảo hóa lưu trữ, ảo hóa hạ tầng mạng, máy chủ…). Về cơ bản,
ảo hóa cho phép việc OS xem nhóm máy ảo đó là các tài nguyên đơn lẻ.
Về giải pháp ảo hóa cũng cho phép một hay nhiều máy ảo chạy trên một nền tảng
phần cứng có sẵn. Nền tảng này cung cấp cho mỗi người dùng một máy tính ảo nhưng
nó tách biệt chính với máy đó hoặc một số người dùng khác. Ảo hóa bắt nguồn từ
việc phân chia các ổ đĩa máy chủ thực thành nhiều máy chủ logic, mỗi máy chủ logic
này có thể chạy một OS và ứng dụng độc lập.
1.1.2 Máy ảo
Công nghệ máy ảo được phát triển liên quan đến: OS, ngôn ngữ lập trình, trình
biên dịch và trong chính kiến trúc máy tính. Đặc điểm máy ảo hỗ trợ nhiều OS khác
nhau, chia sẻ tài nguyên đảm bảo được tính bảo mật.
Máy ảo đã trở nên thông dụng trong các máy chủ, các ứng dụng trên mạng mà đặc
điểm bảo mật được mang tính chất quyết định. Trong lĩnh vực ngôn ngữ lập trình thì
máy ảo cung cấp nền tảng độc lập và hỗ trợ rõ ràng các giao dịch động và tối ưu hóa.
Trong kiến trúc các bộ vi xử lý công nghệ máy ảo cung cấp các tập lệnh mới như việc
tối ưu hóa động để tăng hiệu suất và làm giảm lượng điện tiêu thụ.
Đặc điểm của máy ảo (VM):
- VM là một chương trình phần mềm cho phép một hoặc nhiều OS và các ứng dụng
của nó hoạt động trên đó.
- VM cho phép chuyển đổi qua lại giữa các OS đang chạy mà không cần khởi động
lại máy tính, về cơ bản không có sự khác biệt nhiều giữa máy ảo và máy thật.
Phân loại máy ảo:
Học viên thực hiện: Nguyễn Ngọc Tú – 13BMTTT - KTMT
16
Nghiên cứu và đánh giá kiến trúc máy ảo Java
Việc phân chia máy ảo dựa vào mục đích sử dụng và được chia làm hai loại: Máy
ảo hệ thống và Máy ảo tiến trình. Loại đầu tiên, máy ảo hỗ trợ ABI – nghĩa là các
lệnh của người dùng cùng với các cuộc gọi hệ thống. Loại thứ hai, máy ảo hỗ trợ mức
kiến trúc tập lệnh – loại này hỗ trợ người dùng và các tập lệnh. Cuối cùng việc phân
loại dựa trên sự khác nhau của kiến trúc tập lệnh.
Hình 1 Phân loại máy ảo.
Trong máy ảo tiến trình tại hình trên bên trái kiến trúc tập lệnh của máy chủ và
máy khách tập lệnh giống nhau, bên dưới hệ thống đa nhiệm đó là máy ảo tối ưu hóa
động nhị phân – nghĩa là tập lệnh của máy khách được tối ưu hóa trước khi thực hiện
trên máy chủ. Bên phải là việc phân chia kiến trúc tập lệnh của máy khách và máy
chủ khác nhau.
Trong máy ảo hệ thống, nếu kiến trúc tập lệnh của máy chủ và máy khác giống
nhau đại diện là hệ thống ảo hóa truyền thống. Trong loại này đối tượng được sao
chép và độc lập trong cùng một môi trường. Khác nhau chính giữa loại truyền thống
và máy ảo dựa trên máy chủ đó là việc có phần mềm quản lý cung cấp các chức năng
cho người dùng.
Hệ thống ảo hóa toàn bộ, hệ thống phần mềm (bao gồm hệ điều hành và phần mềm)
được hỗ trợ trên một hệ thống máy chủ mà ở đó chạy ISA và hệ điều hành, được gọi
là ảo hóa toàn bộ vì chủ yếu ảo hóa tất cả phần mềm. Bởi vì các ISA khác nhau, cả
Học viên thực hiện: Nguyễn Ngọc Tú – 13BMTTT - KTMT
17
Nghiên cứu và đánh giá kiến trúc máy ảo Java
ứng dụng và mã OS trong yêu cầu mô phỏng…. thông qua dịch nhị phân. Các máy
ảo ảo hóa toàn bộ, các phương pháp thực hiện phổ biến nhất là đặt phần mềm quản
lý và phần mềm khách lên trên mức phần cứng của hệ điều hành.
Để triển khai máy ảo kiểu này, phần mềm ảo hóa mô phỏng toàn bộ môi trường
phần cứng. Phần mềm phải điều khiển mô phỏng tất cả các lệnh và phải chuyển đổi
các hoạt động của ISA máy khách thành các cuộc gọi tới OS hệ thống trên máy chủ.
Ngay cả khi sử dụng dịch nhị phân, việc này tương đối hạn chế vì mã dịch không thể
tận dụng được ưu điểm đặc điểm của ISA hệ thống giống như việc quản lý bộ nhớ và
xử lý các bẫy lỗi. Thêm vào đó, các vấn đề có thể phát sinh nếu các thuộc tính của tài
nguyên phần cứng khác nhau đáng kể trong máy chủ - máy khách. Việc giải quyết là
một thách thức lớn khi thực hiện ảo hóa toàn bộ.
Ảo hóa dạng Codesigned: tối ưu hóa phần cứng được phát triển cho một vài chuẩn
ISA và các ứng dụng trên máy chủ, các thư viện, hệ điều hành. Các máy ảo đươc thiết
kế để cho phép đổi mới thêm vào/bới đi trong ISA để tăng hiệu năng, cải thiện nguồn
điện hoặc cả hai. Các ISA trên máy chủ có thể là mới hoặc dựa trên ISA sẵn trước đó
với một vài lệnh mới được thêm vào/bớt đi. Trong máy ảo Codesigned sử dụng một
vùng nhớ nó không hiển thị trong bất kỳ ứng dụng hoặc phần mềm hệ thống. Bộ nhớ
che dấu này được lấy ra từ bộ nhớ thực tế tại thời điểm khởi động và phần mềm khách
không biết sự tồn tại này. Mã VMM trong bộ nhớ này có thể kiểm soát các phần cứng
tại bất kỳ thời gian và thực hiện một số chức năng khác nhau.
Tổng quát, các phần mềm máy ảo chứa một chương trình dịch nhị phân dùng
chuyển đổi các lệnh của máy khách thành các lệnh của máy chủ và lưu trữ các lệnh
này trong vùng nhớ ẩn. Do đó các ISA khách không bao giờ trực tiếp thực hiện trên
phần cứng. Dịch nhị phân kết hợp với tối ưu hóa để tăng hiệu suất. Đặc điểm là tối
ưu hóa thường xuyên được thực hiện trong thời gian biên dịch như là một tiến trình
liên tục trong khi chương trình chạy.
Học viên thực hiện: Nguyễn Ngọc Tú – 13BMTTT - KTMT
18
Nghiên cứu và đánh giá kiến trúc máy ảo Java
1.1.3 Máy ảo hệ thống
Máy ảo hệ thống hay máy ảo phần cứng là phần mềm được thiết kế riêng cho phần
cứng thực hiện nhiệm vụ ảo hóa, máy ảo hệ thống cho phép sử dụng mỗi một phần
cứng khác nhau cho một OS khác nhau, OS này hoạt động trên cùng một phần cứng
nhưng độc lập. Phần mềm cung cấp việc ảo hóa này gọi là VMM hay Hypervisor.
Một Hypervisor chạy trên phần cứng độc lập - gọi là kiểu 1 (native VM) hoặc chạy
trên một OS – gọi là kiểu 2 (Hosted VM) 29.
Hình 2 Mô hình tổng quát ảo hóa hệ thống
Kiểu 1 – Native VM
Đặc điểm kiểu này là công nghệ Hypervisor - ảo hóa phần cứng. Bản chất là phần
mềm (firmware) được cài đặt trên phần cứng hoặc được cài đặt dưới một hoặc nhiều
OS. Mục đích cung cấp môi trường thực thi riêng biệt (phân vùng), trong đó các VM
chứa các OS khách. Mỗi phân vùng được cung cấp tập hợp các tài nguyên phần cứng
riêng: CPU, RAM và các thiết bị khác… Hypervisor điều khiển và phân kênh truy
cập đến các tài nguyên này. Khi một OS khách liên lạc với phần cứng trên OS chủ:
- OS khách mô tả phần cứng.
- OS khách liên lạc với các trình điều khiển.
- Các trình điều khiển phần cứng liên lạc trực tiếp đến phần cứng vật lý.
Học viên thực hiện: Nguyễn Ngọc Tú – 13BMTTT - KTMT
19
Nghiên cứu và đánh giá kiến trúc máy ảo Java
Hình 3: Mô hình ảo hóa kiểu native
Ưu điểm của loại này là tính sẵn sàng cũng như bảo mật, một số sản phẩm sử dụng
loại 1 như Microsoft Hyper – V, hãng Citrix Xenserver, Vmware ESX Server.
Kiểu 2 – Hosted VM
Máy ảo Java là điển hình cho kiểu này, OS được cài đặt trực tiếp trên phần cứng.
Trên OS chủ là một VMM có vai trò tạo và quản lý các VM, phân phối tài nguyên
cho các VM đó. Các VM này độc lập với nhau. Quá trình giao tiếp liên lạc giữa phần
cứng và trình điều khiển trên thiết bị được mô tả như sau:
- Đầu tiên mô phỏng phần cứng được tạo ra trên VMM.
- Tạo mối giao tiếp liên lạc giữa VMM và OS.
- OS giao tiếp liên lạc với trình điều khiển phần cứng
- Các trình điều khiển thiết bị phần cứng giao tiếp liên lạc đến các phần cứng trên
OS chủ.
Quá trình này sẽ xảy ra ngược lại với khi có các phản hồi từ các phần cứng tới OS.
Các sản phẩm đại diện cho giải pháp này là Microsoft Virtual Server. Vmware Server
và Microsoft Virtual PC….
Học viên thực hiện: Nguyễn Ngọc Tú – 13BMTTT - KTMT
20
Nghiên cứu và đánh giá kiến trúc máy ảo Java
Hình 4 Mô hình ảo hóa kiểu hosted
Ưu điểm của hệ thống ảo hóa.
- Nhiều OS chạy trên cùng một máy tính, nhưng đảm bảo tính độc lập giữa các
OS này.
- VM cung cấp một kiến trúc ISA khác với máy thật.
- Cung cấp các ứng dụng, duy trì các ứng dụng, tính sẵn sàng và khắc phục sau
sự cố cao.
Nhược điểm của hệ thống ảo hóa.
- Hiệu năng của VM không cao bằng máy thật vì VM giao tiếp gián tiếp đến phần
cứng trên máy thật.
1.1.4 Máy ảo tiến trình
Máy ảo tiến trình hay máy ảo ứng dụng, hoạt động như là một ứng dụng bên cạnh
các OS, Máy ảo tiến trình chỉ hỗ trợ một tiến trình. Máy ảo được tạo ra khi bắt đầu
chạy một tiến trình và kết thúc khi tiến trình kết thúc. Mục đích cung cấp môi trường
chương trình độc lập trên nền tảng, đây là chi tiết khá trừu tượng dưới phần cứng
hoặc OS, Máy ảo tiến trình cho phép một chương trình được thực hiện trên bất kỳ
một nền tảng phần cứng nào. Máy ảo tiến trình cung cấp mức độ ảo hóa cao – ở mức
ngôn ngữ lập trình (đây là điều khác biệt so với mức độ ảo hóa ISA của máy ảo hệ
thống). Máy ảo được thực hiện bằng một trình biên dịch: hiệu năng được so sánh với
ngôn ngữ lập trình là khả năng biên dịch trong quá trình chạy 26.
Học viên thực hiện: Nguyễn Ngọc Tú – 13BMTTT - KTMT
21
Nghiên cứu và đánh giá kiến trúc máy ảo Java
1.1.5 Một số loại máy ảo hệ thống và ảo hóa tiến trình
System virtual machine
Process virtual machine
(1) VMWare : Là phần mềm cho phép (1) Dalvik21: Là máy ảo tiến trình của
28
ảo hóa phần trên nền tảng X86 -64, đây OS Android của Google, dùng để thực
là sản phẩm ảo hóa hoàn thiện nhất từ thi ứng dụng viết cho OS Android.
việc ảo hóa phần mềm cho đến ảo hóa
- Chương trình được viết bằng ngôn
phần cứng, ảo hóa máy trạm phía người
ngữ Java, được biên dịch thành mã
dùng (workstation) và ảo hóa server
bytecode, mã này sẽ được máy ảo
(ESX Server, GSX server), hỗ trợ nhiều
Java thực thi và biên dịch thành mã
OS khác nhau. Ngoài ra VMWare còn
Dalvik bytecode, lưu trữ dưới dạng
cung cấp ảo hóa cho Trung tâm dữ liệu
tệp định dạng (*.dex) và (*.odex).
với các sản phẩm như vSPhere, Vcloud,
- Trong các máy có giới hạn về dung
Vdirector…
lượng RAM, và CPU thì các bộ mã
(2) Hyper-V25: Công nghệ ảo hóa của
Dalvik được nén.
Microsoft. Thiết kế dựa trên công nghệ
- Dalvik là mã nguồn mở, nguyên gốc
Hypervisor, chạy trên nền 64bit server
được phát triển bởi Dan Bornstein,
và phần cứng có hỗ trợ công nghệ này.
Dalvik
(3) Intel31: Ảo hóa intel VT kết hợp giữa
version 4.4 KitKat đã thay thế
phần cứng và phần mềm, sản phẩm ảo
Dakvil.
thuộc
Ireland.
Android
hóa đa dạng từ server cho tới thiết bị (2) FX!3222: Là chương trình giả lập
máy tính trạm làm việc.
phần mềm cho phép các chương trình
(4) Parallel Virtual Machine24: Là win32 xây dựng trên nền tảng tập lệnh
phần mềm chạy song song máy tính, Intel X86 thực thi DEC – Alpha trên nền
được thiết kế cho phép mạng hỗn hợp tảng window NT, DEC được phát triển
Unix, Window cùng sử dụng bộ xử lý bởi Digital Equipment Corporation.
song song.
(3) Parrot26: Là một thanh ghi dựa trên
(5) Virtual Box: Công cụ phần mềm tạo máy ảo tiến trình được thiết kê để chạy
máy ảo của Oracle. Giống như (4), (1) ngôn ngữ động hiệu quả, Parrot có khả
năng biên dịch ngôn ngữ hợp ngữ Parrot
Học viên thực hiện: Nguyễn Ngọc Tú – 13BMTTT - KTMT
22
Nghiên cứu và đánh giá kiến trúc máy ảo Java
phần mềm được cài đặt trên nền tảng OS và PIR (một ngôn ngữ trung gian) để
và chạy song song với máy tính.
biên dịch mã bytecode và thực thi. Parrot
là mã nguồn mở và free.
- Được phát triển bởi ngôn ngữ lập
trình Perl và được phát triển với sự hỗ
rợ từ mã nguồn mở và cộng đồng
phần mềm miễn phí.
(4) Stack machine27: Sử dụng ngăn xếp
để đánh giá, mô phỏng các lệnh trong
chương trình. Máy ảo này gồm 3 thành
phần:
- Vùng nhớ lệnh: chứa các lệnh, số
lệnh gồm lệnh số học trên số nguyên,
lệnh thao tác trên stack và nhóm lệnh
điều khiển thứ tự.
- Vùng stack: nơi thực hiện các chỉ thị
trên các phép toán số học.
- Vùng dữ liệu: chứa dữ liệu.
1.2 MÁY ẢO TIẾN TRÌNH
Thông thường một máy tính phải làm việc với một số lượng lớn các chương trình
cùng tồn tại trong một môi trường hệ thống, bao gồm một hoặc nhiều bộ xử lý, bộ
nhớ, một hệ thống tệp tin, số lượng các thiết bị ngoại vi. Người dùng gọi và tương tác
với các chương trình bằng việc sử dụng công cụ giao tiếp được hỗ trợ bởi thư viện và
OS. Một giới hạn quan trọng những chương trình mà người dùng có thể chạy phải
được biên dịch và tập lệnh của bộ xử lý phải hỗ trợ, ứng dụng quan trọng của VM là
loại bỏ hạn chế này và cho phép người dùng chạy chương trình đã biên dịch trên các
OS khác nhau, một số kiến trúc máy ảo cung cấp khả năng này.
Học viên thực hiện: Nguyễn Ngọc Tú – 13BMTTT - KTMT
23
Nghiên cứu và đánh giá kiến trúc máy ảo Java
Trong chương này đề cập tới việc cung cấp môi trường ảo cho một chương trình,
hoặc một tiến trình, mức độ. Việc sử dụng máy ảo tiến trình, chương trình viết cho
máy khách và chương trình viết cho máy chủ có thể được cài đặt và sử dụng như nhau
và không có sự khác nhau trong việc tương tác với hai chương trình này. Trong
chương này cũng xem xét và thảo luận về máy ảo tiến trình, cấu trúc máy ảo tiến
trình, các vấn đề về tương thích, tiếp sau đó là các phần chính: trạng thái ánh xạ giữa
máy chủ và máy khách, và mô phỏng kiến trúc đánh địa chỉ trong bộ nhớ, các lệnh,
các ngoại lệ, các lời gọi hệ thống, kỹ thuật quản lý bộ nhớ đệm của mã lệnh. Cuối
cùng xem xét việc nạp và khởi tạo chương trình.
Các chương trình máy tính được biên dịch, được phân phát, và được lưu trữ dưới
dạng mã nhị phân phù hợp với đặc tả dạng giao diện nhị phân ứng dụng. ABI gồm
các đặc điểm của các tập lệnh phần cứng, OS.
Hình 5 Tiến trình khách của máy ảo giao tiếp với tiến trình chủ.
Ứng dụng cần thiết để thực thi được đều nằm trong một tiến trình khách riêng biệt.
Các tiến trình khách có thể tương tác với các tiến trình chủ. Hơn nữa tiến trình khách
có thể tương tác với các tiến trình khách khác như chúng đang chạy trên máy tính
thật. Trang 98-100 1.
Học viên thực hiện: Nguyễn Ngọc Tú – 13BMTTT - KTMT
24
Nghiên cứu và đánh giá kiến trúc máy ảo Java
1.2.1 Cấu trúc của máy ảo tiến trình
Các khối tính toán chính và cấu trúc dữ liệu của máy ảo tiến trình, bao gồm các
thành phần chức năng tương ứng sau:
- Bộ nạp (Loader): Thực hiện việc ghi các mã và dữ liệu khách vào vùng nhớ của
hình ảnh bộ nhớ máy khách (Guest’s memory image), các thông tin này nạp vào
khi thực thi mã lệnh. Guest’s memory image chứa mã ứng dụng, dữ liệu của
máy khách, tất cả dữ liệu này có liên quan vì mã nguồn không thực thi trực tiếp.
Hơn nữa mã nguồn đóng vai trò là dữ liệu đầu vào để biên dịch thành mã nhị
phân.
- Bộ nạp sau đó trả quyền điều khiển về Khối khởi tạo, Khối khởi tạo xác định
không gian bộ nhớ dành cho bộ nhớ đệm mã và các bảng được sử dụng trong
tiến trình mô phỏng. Tiến trình khởi tạo cũng yêu cầu OS chủ thiết lập kênh xử
lý tín hiệu cho tất cả các điều kiện bẫy lỗi có thể xảy ra. Sau quá trình khởi tạo.
- Engine mô phỏng: sử dụng hai phép toán “and” hoặc “or” nhị phân để mô phỏng
các lệnh của máy khách. Nếu phép dịch nhị phân được sử dụng như một phương
thức mô phỏng, thì các mã đích đã dịch được giữ trong bộ nhớ mã đệm (code
Cache), Bộ nhớ mã đệm được tạo ra trong quá trình dịch, là một vùng mã thực
thi trong quá trình mô phỏng. Nếu mô phỏng được thực hiện qua thông dịch với
một dạng mã giả (mã trung gian), các chỉ dẫn của đoạn mã giả này được lưu trữ
trong cấu trúc bộ đệm tương tự.
- Kích thước dung lượng của code Cache có giới hạn, Trình quản lý bộ nhớ đệm
cho các mã quyết định những giao dịch nào có thể bị từ chối để dành không gian
trong bộ nhớ này cho các giao dịch mới được sinh ra.
- Hồ sơ cơ sở dữ liệu (profile database) – chứa thông tin chương trình được lựa
chọn động, thông tin được sử dụng để chỉ dẫn việc ưu hóa trong tiến trình. Sử
dụng profile database này giống các phương thức tối ưu.
Học viên thực hiện: Nguyễn Ngọc Tú – 13BMTTT - KTMT
25
Nghiên cứu và đánh giá kiến trúc máy ảo Java
Hình 6 Quá trình thực hiện của máy ảo tiến trình
- Trước quá trình mô phỏng thì chương trình khách thực hiện một cuộc gọi hệ
thống. Mô phỏng cuộc gọi tới OS chủ (OS call emulator) chuyển cuộc gọi này
vào OS chủ kết quả là sau đó xử lý bất kỳ thông tin nào được OS chủ trả về.
- Quá trình thực thi phải xử lý đồng thời các bẫy lỗi xảy ra trong quá trình thực
thi biên dịch lệnh hoặc các lệnh đã được biên dịch, thực thi phải xử lý bất kỳ
ngắt nào trong tiến trình khách, mô phỏng ngoại lệ (exception emulator) sẽ thực
hiện việc mô phỏng này. Trong một vài trường hợp, exception emulation bị loại
bỏ nếu OS chủ gửi ngắt khác mức ưu tiên cao hơn trong khi thực thi, trường
hợp khác, quá trình mô phỏng phát hiện một điều kiện loại trừ và nhảy tới
exception emulator. Quan trọng của việc xử lý ngắt là đưa ra kết quả, trạng thái
đúng của tiến trình khách (gồm bộ đếm chương trình, các giá trị thanh ghi, các
bẫy điều kiện) khi một điều kiện loại trừ xảy ra.
- Các bảng ngoại lệ (side tables): Cấu trúc dữ liệu được được sinh ra là một phần
của tiến trình giao dịch và được sử dụng lúc thực thi trong tiến trình mô phỏng.
Tính chất quan trọng của việc sử dụng Side tables là việc thực hiện chính xác
mô hình ngoại lệ đối với tập lệnh ISA.
Học viên thực hiện: Nguyễn Ngọc Tú – 13BMTTT - KTMT
26