Ủng hộ tôi
Linux (linux 5.17.1) chia Bộ nhớ chính thành 6 vùng:
ZONE_DMA và ZONE_DMA32: Được sử dụng khi các thiết bị ngoại vi không thể truy cập bộ nhớ trực tiếp tới vùng bộ nhớ được định sẵn địa chỉ (chính là ZONE_NORMAL), vùng này nằm ở địa chỉ vật lý thấp nhất, và thường có kích thước 16 MiB. Các truy cập bộ nhớ trong vùng này đều sử dụng địa chỉ vật lý. ZONE_DMA32 được dùng trong các kiến trúc 32 bit. ZONE_DMA được dùng cho các kiến trúc 64 bit, một số kiến trúc 64 bit cũng có thể sử dụng thêm ZONE_DMA32 bên cạnh ZONE_DMA để hỗ trợ các thiết bị ngoại vi bị giới hạn ở 32 bit không gian địa chỉ.
Truy cập bộ nhớ trực tiếp (DMA - Direct Memory Access) nghĩa là thiết bị ngoại vi có thể trao đổi dữ liệu với bộ nhớ chính mà không thông qua các thao tác nạp/lưu (đọc/ghi - load/store hay read/write) của bộ xử lý.
ZONE_NORMAL: Được ánh xạ dành cho không gian nhân hệ điều hành (kernel space) và các thao tác DMA nếu các thiết bị DMA hỗ trợ việc truy cập tới vùng này. Vùng này nằm ở địa chỉ vật lý ngay sau ZONE_DMA hoặc ZONE_DMA32, và thường có kích thước 880 MiB. Các truy cập bộ nhớ trong vùng này đều sử dụng địa chỉ vật lý.
ZONE_HIGHMEM: Vùng bộ nhớ còn lại dành cho các hoạt động của các tiến trình người dùng (user space). Để sử dụng được vùng này, nhân hệ điều hành (kernel) phải thực hiện đánh địa chỉ bằng cách ánh xạ không gian địa chỉ trong vùng này thành không gian địa chỉ trong ZONE_NORMAL, nghĩa là các truy cập bộ nhớ trong vùng này đều sử dụng địa chỉ ảo (virtual address hoặc logic address), địa chỉ ảo này sẽ được ánh xạ thành địa chỉ vật lý để có thể truy cập bộ nhớ chính.
Việc ánh xạ không gian địa chỉ từ ZONE_HIGHMEM vào ZONE_NORMAL được thực hiện bằng kỹ thuật phân trang (paging).
ZONE_MOVABLE: Vùng này tương tự như ZONE_NORMAL ngoại trừ nó dùng để chứa các khung trang vật lý (physical page frame) có thể di chuyển sang địa chỉ của khung trang vật lý khác. Việc di chuyển các khung trang vật lý không phải lúc nào cũng diễn ra thành công.
ZONE_DEVICE: Tương tự như ZONE_DMA nhưng ZONE_DEVICE được dùng cho việc truy cập bộ nhớ trực tiếp với dung lượng lớn (lớn hơn 16 MiB).
Tùy vào từng hiện thực mà một số vùng có thể không được triển khai.
Bộ cấp phát khung trang theo vùng (Zoned page frame allocator)
Bộ cấp phát khung trang theo vùng (gọi tắt là Bộ cấp phát khung trang) thực hiện cấp phát các nhóm khung trang liên tiếp trong bộ nhớ (tại ZONE_HIGHMEM) dựa theo yêu cầu từ bộ cấp phát Vùng (Zone allocator). Bộ cấp phát khung trang sẽ cố gắng cấp phát số lượng nhóm là tối thiểu và tối đa hóa số lượng khung trang trong mỗi nhóm.
Bộ cấp phát khung trang hoạt động dựa trên hệ thống Bạn thân (Buddy system)