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
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