Linux-MM
  • Comments
  • Immutable Page
  • Menu
    • Navigation
    • RecentChanges
    • FindPage
    • Local Site Map
    • Help
    • HelpContents
    • HelpOnMoinWikiSyntax
    • Display
    • Attachments
    • Info
    • Raw Text
    • Print View
    • Edit
    • Load
    • Save
  • Login

Linux Memory Management

  • Front Page

  • Documentation

  • Internals

  • Projects

  • Academic Research

References

  • LinuxKernelMailingLists

  • MemoryManagementLinks

Related sites

  • Kernel Newbies

  • Memory Management Forum

Wiki

  • Site Editors

  • Side Bar

  • Hosted by WikiWall

Navigation

  • RecentChanges
  • FindPage
  • HelpContents

Upload page content

You can upload content for the page named below. If you change the page name, you can also upload content for another page. If the page name is empty, we derive the page name from the file name.

File to load page content from
Page name
Comment

Revision 12 as of 2007-12-01 20:00:47
LinuxMM:
  • CyrillGorcunov

Cyrill Gorcunov

Email: MailTo(gorcunov AT SPAMFREE gmail DOT com)

Interesting links

  • Virtual Memory: Issues Of Implementation http://www.eng.umd.edu/~blj/papers/computer31-6.pdf

  • Memory Subsystem (lecture) http://www.ece.gatech.edu/academic/courses/summer2007/ece3055/Lectures/VirtualMemory/VirtualMemory-lee.pdf

My notes on Linux kernel internals

x86-32 memory initialization

Paging is initialized in arch/x86/mm/init_32.c. The function 'paging_init()' is called once by setup_arch during kernel initialization. It immediately calls pagetable_init(). pagetable_init() starts by defining the base of the page table directory:

*pgd_base = swapper_pg_dir;

swapper_pg_dir is defined in head_32.S as

.section ".bss.page_aligned","wa"
        .align PAGE_SIZE_asm
ENTRY(swapper_pg_dir)
        .fill 1024,4,0

that creates an array of 1024 entries each of 4 bytes length (Page Directory entries in terms of Intel manual). A such definition allows ld program to place swapper_pg_dir at special predefined memory address while linking a kernel. It points to 0x1000 above the 'root' of kernel memory. Kernel memory is defined to start at PAGE_OFFSET, which is 0XC0000000 for x86, or 3 gigabytes. (This is where the 3G/1G split is defined.) Every virtual address above PAGE_OFFSET is the kernel, any address below PAGE_OFFSET is a user space. Further is available on http://linux-mm.org/VirtualMemory

x86-32 memory initialization (SMP)

To be continued...

TODO

POWERPC

Five patches are sent - waiting for them to be merged into upstream...

 - add for_each_child_node() macro
 - convert all cycles for(...) to for_each_child_node()
 + convert all for(...) to for_each_compatible_node()
 + check for NULL dereference on of_find_property()
 - check for of_node_put() call after node has been used
Legend:
 (+) - done
 (~) - in progress
 (-) - have to


  • CategoryHomepage

  • MoinMoin Powered
  • Python Powered
  • GPL licensed
  • Valid HTML 4.01