path: root/community/gsoc/project_ideas/physical_memory_management.mdwn
diff options
authorThomas Schwinge <>2018-05-25 15:37:30 +0200
committerThomas Schwinge <>2018-05-25 15:37:30 +0200
commitab97868f7e5097ce6d141c7783c1e07eaa9c4ba1 (patch)
treea6b6959705f1b2dcb36fe920675cecbcf8a3dc94 /community/gsoc/project_ideas/physical_memory_management.mdwn
parent371a782cd09a6f0c7f9f99cf336351635c6fa7c9 (diff)
Revert page removal of "Drop physical memory management project"
..., to avoid breaking existing links. Instead, mark as obsolete. This reverts parts of commit 371a782cd09a6f0c7f9f99cf336351635c6fa7c9.
Diffstat (limited to 'community/gsoc/project_ideas/physical_memory_management.mdwn')
1 files changed, 58 insertions, 0 deletions
diff --git a/community/gsoc/project_ideas/physical_memory_management.mdwn b/community/gsoc/project_ideas/physical_memory_management.mdwn
new file mode 100644
index 00000000..af360507
--- /dev/null
+++ b/community/gsoc/project_ideas/physical_memory_management.mdwn
@@ -0,0 +1,58 @@
+[[!meta copyright="Copyright © 2015, 2016, 2018 Free Software Foundation,
+[[!meta license="""[[!toggle id="license" text="GFDL 1.2+"]][[!toggleable
+id="license" text="Permission is granted to copy, distribute and/or modify this
+document under the terms of the GNU Free Documentation License, Version 1.2 or
+any later version published by the Free Software Foundation; with no Invariant
+Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license
+is included in the section entitled
+[[GNU Free Documentation License|/fdl]]."]]"""]]
+[[!meta title="Physical memory management"]]
+[[!template id=highlight text="""/!\ Obsolete /!\
+This is no longer valid as a Google Summer of Code project; it was basically
+done by Richard."""]]
+GNU Mach is currently suffering from severe limitations caused by the way
+it manages physical memory. For example, since it requires pages to be mapped
+in kernel space in order to be used, the maximum amount of usable physical
+memory is currently around 800MB (or 1.8GB if a 2/2 split is set). And
+because the page allocator is unable to easily return blocks of contiguous
+pages, the kernel has to use virtual memory to provide contiguity.
+But the kernel virtual space is separate from the direct mapping of
+physical memory, so the larger it is, the less physical pages available.
+The size of the kernel space is currently around 200MB, with around 100MB
+for kernel objects. This small size prevents the system from achieving
+scalability, since a panic occurs when the kernel is unable to allocate
+a kernel object such as a port. In addition, the kernel uses mainly tables
+to store IPC rights. When a table is full, it is enlarged through a kernel
+specific version of realloc(). When a file system starts managing many
+files (e.g. because some of their content is cached in physical memory),
+these tables can get big enough to make realloc() fail because of
+The goal of this project is to make as much physical memory available as
+possible for both the kernel and applications, by rewriting the page
+allocator into a buddy allocator to support contiguous block allocations,
+using it directly instead of virtual memory as the backend of the slab
+allocator for kernel objects, and, if time allows it, transform IPC right
+tables (e.g. into radix trees) and get rid of realloc().
+This project requires a good understanding of virtual memory (both physical
+mappings at the MMU level and virtual mappings at the VM level), and strong
+skills in C programming. Note that some work has already been done in the
+X15 project about this, and can be reused as a reference.
+Useful links :
+ * <>
+ * <>
+ * <>