Máy ảo
Lịch sử

Xem thêm: Lịch sử của CP/CMS và dòng thời gian phát triển ảo hóa
Cả máy ảo hệ thống và máy ảo xử lý đều có từ những năm 1960 và tiếp tục là những lĩnh vực phát triển tích cực.
Các máy ảo hệ thống đã phát triển nhờ tính năng chia sẻ thời gian, đặc biệt là được triển khai trong Hệ thống chia sẻ thời gian tương thích (CTSS). Chia sẻ thời gian cho phép nhiều người dùng sử dụng máy tính đồng thời: mỗi chương trình dường như có toàn quyền truy cập vào máy, nhưng chỉ một chương trình được thực thi tại thời điểm đó, với hệ thống chuyển đổi giữa các chương trình theo từng lát thời gian, lưu và khôi phục trạng thái mỗi lần. Điều này đã phát triển thành các máy ảo, đặc biệt là thông qua các hệ thống nghiên cứu của IBM: M44 / 44X, sử dụng ảo hóa một phần và CP-40 và SIMMON, sử dụng ảo hóa hoàn toàn và là những ví dụ ban đầu về siêu giám sát. Kiến trúc máy ảo đầu tiên được phổ biến rộng rãi là CP-67 / CMS (xem Lịch sử của CP / CMS để biết thêm chi tiết). Một điểm khác biệt quan trọng là giữa việc sử dụng nhiều máy ảo trên một hệ thống máy chủ để chia sẻ thời gian, như trong M44 / 44X và CP-40 và sử dụng một máy ảo trên hệ thống máy chủ để tạo mẫu, như trong SIMMON. Trình giả lập, với khả năng mô phỏng phần cứng của các hệ thống trước đó để tương thích, có từ thời Hệ thống IBM / 360 vào năm 1963, trong khi mô phỏng phần mềm (khi đó được gọi là "mô phỏng") có trước nó.
Xử lý máy ảo ban đầu là nền tảng trừu tượng cho một ngôn ngữ trung gian được trình biên dịch sử dụng làm đại diện trung gian của một chương trình; các ví dụ ban đầu có niên đại khoảng năm 1966. Một ví dụ đầu năm 1966 là máy mã O, một máy ảo thực thi mã O (mã đối tượng) được phát ra bởi giao diện người dùng của trình biên dịch BCPL. Sự trừu tượng này cho phép trình biên dịch dễ dàng được chuyển sang một kiến ​​trúc mới bằng cách triển khai một back end mới lấy mã O hiện có và biên dịch nó thành mã máy cho máy vật lý bên dưới. Ngôn ngữ Euler đã sử dụng một thiết kế tương tự, với ngôn ngữ trung gian có tên là P (portable). Điều này đã được phổ biến vào khoảng năm 1970 bởi Pascal, đặc biệt là trong hệ thống Pascal-P (1973) và trình biên dịch Pascal-S (1975), trong đó nó được gọi là mã p và kết quả là máy mã p. Điều này đã có ảnh hưởng và các máy ảo theo nghĩa này thường được gọi là máy mã p. Ngoài vai trò là một ngôn ngữ trung gian, mã p Pascal còn được thực thi trực tiếp bởi một trình thông dịch thực thi máy ảo, đặc biệt là trong UCSD Pascal (1978); điều này ảnh hưởng đến các trình thông dịch sau này, đặc biệt là máy ảo Java (JVM). Một ví dụ ban đầu khác là SNOBOL4 (1967), được viết bằng Ngôn ngữ triển khai SNOBOL (SIL), một ngôn ngữ hợp ngữ cho một máy ảo, sau đó được nhắm mục tiêu đến các máy vật lý bằng cách chuyển tiếp đến trình hợp dịch gốc của chúng thông qua trình hợp dịch macro. Tuy nhiên, các macro đã không còn được ưa chuộng nữa nên cách tiếp cận này đã ít ảnh hưởng hơn. Máy ảo xử lý là một cách tiếp cận phổ biến để triển khai phần mềm máy tính vi mô ban đầu, bao gồm Tiny BASIC và các trò chơi mạo hiểm, từ việc triển khai một lần như Pyramid 2000 đến một công cụ đa năng như z-machine của Infocom, mà Graham Nelson lập luận là "có thể là nhiều nhất máy ảo di động từng được tạo ra ".
Những tiến bộ đáng kể đã xảy ra trong việc triển khai Smalltalk-80, đặc biệt là việc triển khai Deutsch / Schiffmann đã thúc đẩy quá trình biên dịch đúng lúc (JIT) như một phương pháp triển khai sử dụng máy ảo quy trình. Các máy ảo Smalltalk đáng chú ý sau này là VisualWorks, Máy ảo Squeak và Strongtalk. Một ngôn ngữ có liên quan đã tạo ra rất nhiều đổi mới máy ảo là ngôn ngữ lập trình Self, ngôn ngữ này đi tiên phong trong việc tối ưu hóa thích ứng và thu gom rác nhiều thế hệ. Những kỹ thuật này đã được chứng minh là thành công về mặt thương mại vào năm 1999 trong máy ảo HotSpot Java. Những đổi mới khác bao gồm việc có một máy ảo dựa trên thanh ghi, để phù hợp hơn với phần cứng bên dưới, chứ không phải là một máy ảo dựa trên ngăn xếp, điều này phù hợp hơn với ngôn ngữ lập trình; vào năm 1995, điều này đã được tiên phong bởi máy ảo Dis cho ngôn ngữ Limbo. OpenJ9 là một giải pháp thay thế cho HotSpot JVM trong OpenJDK và là một dự án nhật thực mã nguồn mở tuyên bố khởi động tốt hơn và tiêu thụ ít tài nguyên hơn so với HotSpot.