Khác biệt giữa bản sửa đổi của “Bộ nhớ ảo”

Nội dung được xóa Nội dung được thêm vào
TuHan-Bot (thảo luận | đóng góp)
n Robot: Sửa đổi hướng
Lưu trang với sự đóng góp của nhóm CS201 HCMUS
Dòng 1:
[[Tập tin:VirtualMem01.png|nhỏ|250px|Chương trình máy tính tưởng rằng nó có một dải dài các địa chỉ liên tục trong bộ nhớ; nhưng trong thực tế một số phần đang được sử dụng nằm rải rác trong [[RAM]], còn các phần tạm thời không dùng đến được lưu trữ trong một file trên đĩa cứng.]]
Trong tin học, bộ nhớ ảo là một kĩ thuật quản lý bộ nhớ được thực hiện bởi phần mềm và phần cứng. Nó sẽ liên kết địa chỉ ô nhớ được dùng bởi phần mềm, gọi là địa chỉ ảo, tới địa chỉ vật lý trong bộ nhớ máy tính. Bộ nhớ chính được các tác vụ coi như là những khoảng trống có địa chỉ liên tiếp hoặc tập hợp những vùng liên tiếp. Hệ điều hành quản lý các ô địa chỉ ảo và sự phân vùng từ ổ nhớ thực đến ổ nhớ ảo. Phần cứng phụ trách xử lý địa chỉ nằm trong CPU, thường được gọi tên là MMU (đơn vị quản lý bộ nhớ), sẽ tự động chuyển địa chỉ ảo sang địa chỉ vật lý. Phần mềm nằm trong hệ điều hành có thể tạo ra những vùng địa chỉ ảo nằm mở rộng khả năng lưu trữ vật lý của bộ nhớ và từ đó chương trình sẽ có nhiều bộ nhớ hơn thực tế máy tính có.
Trong hệ thống máy tính, '''bộ nhớ ảo''' ([[tiếng Anh]]: ''virtual memory'') là một kĩ thuật cho phép một chương trình ứng dụng tưởng rằng mình đang có một dải bộ nhớ liên tục (một không gian địa chỉ), trong khi thực ra phần bộ nhớ này có thể bị phân mảnh trong bộ nhớ vật lý và thậm chí có thể được lưu trữ cả trong đĩa cứng. So với các hệ thống không dùng kĩ thuật bộ nhớ ảo, các hệ thống dùng kĩ thuật này cho phép việc lập trình các ứng dụng lớn được dễ dàng hơn và sử dụng bộ nhớ vật lý thực (ví dụ [[RAM]]) hiệu quả hơn.
Lợi ích quan trọng nhất của bộ nhớ ảo là đảm nhiệm giùm các ứng dụng quản lý vùng bộ nhớ được chia sẻ, tăng độ an toàn cho các vùng nhớ và giúp chương trình sử dụng nhiều bộ nhớ nhiều hơn bộ nhớ vật lý mà phần cứng máy tính có, dựa trên kĩ thuật phân trang
 
== Đặc điểm ==
Lưu ý rằng khái niệm "bộ nhớ ảo" không chỉ có nghĩa "sử dụng không gian đĩa để mở rộng kích thước bộ nhớ vật lý" - nghĩa là chỉ mở rộng hệ thống bộ nhớ để bao gồm cả [[ổ đĩa cứng|đĩa cứng]]. Việc mở rộng bộ nhớ tới các ổ đĩa chỉ là một hệ quả thông thường của việc sử dụng các kĩ thuật bộ nhớ ảo. Trong khi đó, việc mở rộng này có thể được thực hiện bằng các phương pháp khác như các kĩ thuật [[overlay (lập trình)|overlay]] hoặc chuyển toàn bộ các chương trình cùng dữ liệu của chúng ra khỏi bộ nhớ khi các chương trình này không ở trạng thái hoạt động. Định nghĩa của "bộ nhớ ảo" có nền tảng là việc định nghĩa lại không gian địa chỉ bằng một ''dải liên tục các địa chỉ bộ nhớ ảo'' để "đánh lừa" các chương trình rằng chúng đang dùng các khối lớn các địa chỉ ''liên tục''.
Bộ nhớ ảo khiến cho việc lập trình ứng dụng dễ dàng hơn bởi chúng làm ẩn đi sự phân mảnh bộ nhớ vật lý, bằng cách ủy thác cho kernel hệ điều hành sự quản lý phân cấp bộ nhớ (loại bỏ việc chương trình máy tính tự xử lý việc sử dụng chồng ô nhớ). Mỗi khi ứng dụng sử dụng không gian bộ nhớ được chỉ định bởi ứng dụng, bộ nhớ ảo sẽ ngăn ngừa việc phân bố lại ô nhớ hoặc cho truy cập ô nhớ có địa chỉ ảo tương ứng.
 
Sự ảo hóa bộ nhớ có thể được xem như là sự tổng hợp hóa của khái niệm bộ nhớ ảo
Tất cả các [[hệ điều hành]] không chuyên hiện đại đều sử dụng các kĩ thuật bộ nhớ ảo cho các ứng dụng thông thường như các chương trình soạn thảo văn bản, chơi nhạc, xem phim, phần mềm kế toán, v.v.. Các hệ điều hành cổ hơn như [[DOS]] và [[Microsoft Windows]]<ref>{{chú thích web |url=http://support.microsoft.com/kb/32905 |title=Windows Version History |accessdate=2008-12-03 |publisher=Microsoft |date=Last Review: 19 tháng 7 năm 2005 }}</ref> của thập kỷ 1980, hay các hệ điều hành dành cho [[máy tính lớn]] (''mainframe computer'') của thập kỉ 1960, nói chung không có các chức năng bộ nhớ ảo - các ngoại lệ nổi bật là [[Atlas Computer (Manchester)|Atlas]], [[B5000]] và [[Apple Lisa|Lisa]] của [[Apple Inc.|Apple Computer]].
 
== Sử dụng ==
Các [[hệ thống nhúng]] và các hệ thống máy tính chuyên biệt đòi hỏi thời gian phản ứng rất nhanh và/hoặc rất ổn định có thể không chọn cách dùng bộ nhớ ảo do [[thuật toán tất định|yếu tố tất định]] thấp.
Bộ nhớ ảo là một phần không thể thiếu của một kiến trúc máy tính hiện đại,việc sử dụng cần sử hỗ trợ của phần cứng, thông thường dưới hình thức của đơn vị quản lý bộ nhớ được tích hợp trong CPU.Mặc dù không cần thiết ,nhưng giả lập hoặc các máy ảo có thể được sử dụng để hỗ trợ việc triển khai sử dụng bộ nhớ ảo.Do đó, những hệ điều hành cũ, như những hệ thống những năm 1960,và những máy tính (PC) của đầu cho tới giữa những năm 1980s sẽ không có chức năng bộ nhớ ảo, những ngoại lệ bao gồm:
. Atlas supervisor cho Atlas
. MCP cho Burrrough B5000
. Multics cho GE 645
. Hệ điều hành Time Sharing cho RCA Model 67
. hệ điều hành cho Apple Lisa là 1 ví dụ cho hệ điều hành PC của những năm 80 mà có bộ nhớ ảo .
Trong những năm 1960 tới 70, bộ nhớ máy tính rất đắt.Sự xuất hiện của bộ nhớ ảo tạo điều kiện cho những chương trình với yêu cầu bộ nhớ lớn để chạy trên những máy tính có bộ nhớ thực nhỏ hơn. Những chi phí tiết kiệm được đã tạo được động lực để tất cả hệ điều hành sự dụng bộ nhớ ảo.Khả năng sử dụng bộ nhớ ảo của máy tính đã tạo thêm 1 mức độ bảo mật và đáng tin cậy, dẫn đến việc bộ nhớ ảo ngày càng “ hot “ trên thị trường.
Hầu hết những hệ điều hành hiện đại có hỗ trợ bộ nhớ ảo đều chạy hoặc thực hiện những xử lý của mình ở 1 không gian địa chỉ riêng biệt của mình. Vì đó mà từng chương trình có khả năng truy cập bộ nhớ ảo riêng. Tuy nhiên ,có những hệ điều hành cũ ( như OS/VS1 và OS/VS2 SVS) và những ví dụ hiện đại hơn ( như IBM) là hệ điều hành không gian địa chỉ duy nhất mà trong đó tất cả các quá trình xử lý được thực hiện trong 1 không gian địa chỉ duy nhất,
Hệ thống nhúng và những hệ thống có chức năng đặc biệt yêu cầu thời gian xử lý rất nhanh thường chọn không sử dụng bộ nhớ ảo, hệ thống có bộ nhớ ảo thường gây ra những lỗi không mong muốn trong quá tình chạy I/O. Điều này xảy ra vì hệ thống nhúng thường giảm thiểu chi phí phần cứng bằng cách chạy các tác vụ trên bằng chương trình( 1 kĩ thuật gọi là bit-banging) thay vì phần cứng.
 
== Lịch sử ==
Vào những năm thập niên bốn mươi, năm mươi thế kỉ 20, tất cả những phần mềm lớn cần phải có những Logic trong việc quản lý các thiết bị lưu trữ cấp 1 và 2, như là phương pháp Overlaying. Bộ nhớ ảo đã được giới thiệu không những làm mở rộng bộ nhớ cấp 1, mà còn giúp các lập trình viên dễ dàng trong việc sử dụng. Để chấp nhận cho việc chạy đa chương (multiprogramming ) và đa nhiệm (multitasking), nhiều hệ thống đầu tiên đã chia bộ nhớ chạy nhiều chương trình mà không cần bộ nhớ ảo, ví dụ như PDP-10 via registers
Bản mẫu đầu tiên của bộ nhớ ảo được lần đầu tiên phát triển bởi nhà vật lý người Đức Fritz-Rudolf Güntsch tại Technische Universität Berlin vào năm 1956 trong bài luận án tiến sĩ của ông, Logical Design of a Digital Computer with Multiple Asynchronous Rotating Drums and Automatic High Speed Memory Operation; mô tả về một cỗ máy với 6 “100 khối” lõi bộ nhớ và một vùng địa chỉ với 1000 “100 khối”, với phần cứng tự động dịch chuyển các khối giữa bộ nhớ cấp 1 và bộ nhớ drum cấp 2. Paging đã được thiết lập tại Đại học Manchester như là một cách để mở rộng bộ nhớ làm việc của máy tính Atlas bằng cách hợp 16 ngàn lõi bộ nhớ cấp 1 với 96 ngàn bộ nhớ drum cấp 2. Máy tính Atlas được sử dụng đầu tiên vào năm 1962 nhưng nó đã được chạy những nguyên bản của paging vào năm 1959. Vào năm 1961, Tổng công ty Burroughs đã độc lập tuyên bố phiên bản máy tính thương mại đầu tiên với bộ nhớ ảo, B5000, với những segments ( hơn paging).
Trước khi bộ nhớ ảo được tạo trong hệ điều hành chính, đã xuất hiện nhiều lỗi về địa chỉ bộ nhớ. Bộ dịch địa chỉ động ( Dynamic Address Translation) có giá rất mắc và rất khó để thiết lập phần cứng, những lần làm việc đầu tiên đã làm chậm tốc độ truy cập bộ nhớ từ từ. Đã có những lo lắng về hệ thống mới với những thuật toán mở để sử dụng lưu trữ cấp 2 sẽ không hiệu quả hơn những thuật toán trước đó. Vào năm 1969, những cuộc tranh luận về bộ nhớ ảo phiên bản thương mại chấm dứt, một đội nghiên cứu IBM của David Sayre đã chỉ ra rằng hệ thống bộ nhớ ảo của họ hoạt động ổn định tốt hơn những hệ thống điều khiển bằng tay khác. Phiên bản máy tính mini đầu tiên đã sử dụng bộ nhớ ảo mới với tên là Norwegian NORD-1. Trong suốt những năm 70 thế kỉ 20, nhiều máy tính mini khác cũng giới thiệu bộ nhớ ảo, đáng chú ý nhất là đời VAX chạy dưới nền VMS.
Bộ nhớ ảo được công bố với kiến trúc x86 dưới chế độ bảo vệ của Bộ vi xử lý Intel 80286. Intel 80386 đã giới thiệu công nghệ paging dưới nhiều lớp, mở khả năng hoạt động các trang lỗi. Tuy nhiên, việc tải những kí tự rất tốn kém, từ đó những nhà thiết kế Hệ Điều Hành hoàn toàn tin tưởng trong việc sử dụng paging tốt hơn một sự kết hợp giữa Paging và Segmentation.
 
== Bảng trang ==
"Trang bảng" được dùng để biên dịch địa chỉ ảo, là địa chỉ mà những ứng dụng thấy được, sang địa chỉ thực, địa chỉ mà phần cứng sử dụng để thực thi lệnh; thiết bị phần cứng điều khiển quá trình biên dịch đặc biệt này được gọi là “đơn vị quản lý vùng nhớ” (Memory Management Unit - MMU). Mỗi cổng vào của "trang bảng" có một “lá cờ” cho biết “trang” đang được xét có nằm trong vùng nhớ thật (không ảo) hay không. Nếu đang nằm trong vùng nhớ thật, cổng vào của "trang bảng" sẽ chứa địa chỉ của vùng nhớ thật đó nơi mà trang đó được lưu. Khi mối quan hệ giữa một “trang” và thiết bị phần cứng được tạo nên, nếu cổng vào tương ứng trên "trang bảng" biểu thị rằng “trang” đó không nằm trong một vùng nhớ thật, thiết bị phần cứng sẽ gây ra một hiện tượng gọi là “loại bỏ trang lỗi”, tạo nên thành phần “giám sát trang” của hệ điều hành.
Hệ thống có thể có một "trang bảng" cho cả hệ thống, hoặc nhiều "trang bảng" riêng biệt cho mỗi ứng dụng và phân vùng, hoặc một cây "trang bảng" cho những phân vùng lớn hơn hoặc là những sự kết hợp giữa những loại trên. Trong trường hợp chỉ có một "trang bảng", nhiều chương trình cùng chạy đồng thời sẽ sử dụng những phần khác nhau trong độ dài của địa chỉ ảo. Nếu có nhiều "trang bảng" hoặc trang vùng, sẽ tồn tại nhiều địa chỉ ảo và nhiều chương trình chạy đồng thời với những "trang bảng" chuyển hướng tới những địa chỉ thật khác nhau.
 
== Giám sát trang ==
Đây là thành phần của hệ điều hành tạo ra và quản lí những "trang bảng". Nếu hiện tượng “loại bỏ trang lỗi” xuất hiện từ phần cứng, hệ thống giám sát trang sẽ truy cập vào ổ lưu trữ phụ, trả về một trang có lưu địa chỉ ảo nơi trang lỗi xuất hiện, sau đó sẽ cập nhật "trang bảng" để phản chiếu vị trí vật lí của bộ nhớ ảo và báo bộ biên dịch thực hiện lại yêu lại.
Khi mà mọi vùng nhớ vật lý được sử dụng, “giám sát trang” bắt buộc phải giải phóng một trang trong bộ nhớ chính để lưu giữ một trang thay thế. Bộ giám sát sử dụng một trong những thuật toán thay thế trang như “ít sử dụng nhất” để quyết định trang bị loại bỏ.
 
==Tham khảo==