Có thể hỗ trợ nhiều quá trình mà không cần hỗ trợ cho bộ nhớ ảo?


8

Có thể hỗ trợ nhiều quá trình mà không cần hỗ trợ cho bộ nhớ ảo? Tôi muốn biết thêm về nó nếu như vậy.


Có thể lạc đề? Trừ khi đó là về các hệ thống UNIX.
Maciej Piechotka

Câu trả lời:


10

Bạn có thể chạy một hệ điều hành đa tiến trình ngay cả khi không hỗ trợ phần cứng (không có MMU ), với tất cả các con trỏ biểu thị một địa chỉ vật lý. Tuy nhiên, bạn mất một số tính năng chính thường được cung cấp thông qua MMU:

  • Vì một con trỏ luôn trỏ đến một vị trí cụ thể trong RAM, bạn không thể trao đổi (hoặc chỉ theo một cách rất hạn chế). Thông thường, MMU đưa ra một ngoại lệ khi nó không thể tìm thấy một trang vật lý cho một địa chỉ ảo nhất định và trình xử lý ngoại lệ do hệ điều hành cung cấp lấy trang từ trao đổi.
  • Vì một con trỏ được hủy đăng ký mà không cần kiểm tra, mọi quá trình có thể truy cập vào bộ nhớ của các tiến trình khác và bộ nhớ kernel. Thông thường, MMU đưa ra một ngoại lệ khi nó không thể tìm thấy một trang vật lý cho một địa chỉ ảo cụ thể và trình xử lý ngoại lệ do hệ điều hành cung cấp chấm dứt quá trình thử truy cập không hợp lệ.
  • Vì cùng một con trỏ có cùng ý nghĩa trong các quy trình khác nhau, bạn không thể dễ dàng thực hiện fork . Thông thường, tác dụng của forklà tạo một bản sao của bộ nhớ vật lý của quá trình và tạo một bản đồ bộ nhớ ảo mới từ cùng một địa chỉ ảo đến các địa chỉ vật lý mới.

Có những hệ điều hành giống như unix hoạt động trên các hệ thống không có MMU.

¹ Trong unices hiện đại, điều này thường được thực hiện một cách lười biếng (copy-on-write), trong đó một lần nữa dựa trên MMU nâng cao một ngoại lệ khi nó không thể tìm thấy một trang vật lý.


Trong dấu đầu dòng thứ hai "khi nó không thể tìm thấy một trang vật lý cho một địa chỉ ảo cụ thể" thay vào đó phải là một cái gì đó như "khi truy cập vào trang tương ứng với địa chỉ ảo đã cho sẽ bị từ chối". Trang thuộc sở hữu hạt nhân rất có thể là cư dân.
Ruslan

@Ruslan Khi một trang không được ánh xạ trong một quy trình, MMU thường chứa thông tin không ánh xạ tới một trang vật lý. Có thể xảy ra rằng MMU chứa địa chỉ của trang vật lý mà quá trình không có quyền truy cập, nhưng đó là ngoại lệ chứ không phải là quy tắc, được sử dụng cho bộ nhớ kernel nếu kernel sử dụng tính năng này của MMU (mà Linux thực hiện) .
Gilles 'SO- đừng trở nên xấu xa'

2

Điều chắc chắn là có thể với một số hạn chế như bảo vệ bộ nhớ sẽ là một vấn đề như đã nêu. Ví dụ: TepClinux http://www.uclinux.org/ hỗ trợ nhiều quy trình mà không cần thực hiện bộ nhớ ảo. Lưu ý rằng một số CPU như ít nhất là Thiết bị tương tự Blackfin cung cấp MPU (Bộ bảo vệ bộ nhớ) http://docs.blackfin.uclinux.org/doku.php?id=bfin:mpu . Điều này cho phép bộ nhớ ảo ít hệ điều hành hơn vẫn cho phép phân vùng bộ nhớ.


0

Điều này phụ thuộc vào cách bạn xác định quy trình so với chủ đề về bộ nhớ.

Một trong những chức năng của bộ nhớ ảo là phân vùng. Mặc dù có thể chạy nhiều tiến trình mà không cần phân vùng, nhưng điều này sẽ giống như chạy nhiều luồng hơn là các tiến trình - chia sẻ cùng một không gian địa chỉ.


Có và không. Có thể thực thi tách bộ nhớ mà không cần bộ nhớ ảo. Một số bộ vi điều khiển có bảo vệ bộ nhớ phần cứng nhưng không có bộ nhớ ảo (xem câu trả lời của jlliagre ). Và ngay cả khi không có hỗ trợ phần cứng, bạn có thể thực thi phân tách bộ nhớ thông qua phân tích tĩnh (không dễ, nhưng có thể thực hiện được).
Gilles 'SO- ngừng trở nên xấu xa'
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.