Re: VMA

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



kernel_learner wrote:
> Is a VMA of a process same as the segments (BSS, Data,
> Text seg.. etc.) of that process?

A VMA (Virtual Memory Area) is an abstraction that represents
part of a process's address space. All memory mapped by a
process is represented by some VMA (exactly one VMA, I
believe); a single process might have many
VMAs covering its address space, but the address
ranges represented by those VMAs do not overlap.

It's *possible*, but not necessary, that the different
segments of a process would be mapped to different
VMAs. Basically, what a VMA does is to provide the
code to handle page faults for a particular address
range. Different kinds of memory objects require
different fault handling, so they would be
represented by different VMAs. For example, the
.text segment of a file would be represented by
a VMS whose fault behavior is to page in the
proper page from the executable file; but
an anonymous (malloc()'d) address range
would be represented by a VMA whose fault
behavior is to allocate a new anonymous page.

> Also could someone please explain the concepts of
> segments (BSS, Data, Text etc.)? My OS Fundamentals
> are weak about that...and I have never had a
> satisfying explaination of it's significance.

That kind of segment is just a tool for organizing
files. You can more-or-less arbitraily name sections
of files with segment names. For example, the Linux
kernel puts code that is only used at boot time into
a segment called ".init", and discards the .init segment
after boot to reclaim the memory. The only reason
.init exists is to provide a home for those memory
objects the kernel knows it won't need after boot.

The other kind of segment is the hardware memory
segment, which is supported by Intel processors
and, I imagine, others, though in different
ways. On Intel, segmentation is a memory
abstraction mechanism that sits on top of the
paging mechanism and allows a program to
map arbitrary contiguous regions of virtual
memory using segment descriptors. Linux doesn't
use that kind of segment - it just sets up the
Intel hardware in such a way that it can use
a flat 32-bit virtual address space and ignore
the hardware segmentation.

Cheers,

-- Joe

--
Kernelnewbies: Help each other learn about the Linux kernel.
Archive:       http://mail.nl.linux.org/kernelnewbies/
FAQ:           http://kernelnewbies.org/faq/


[Index of Archives]     [Newbies FAQ]     [Linux Kernel Mentors]     [Linux Kernel Development]     [IETF Annouce]     [Git]     [Networking]     [Security]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux SCSI]     [Linux ACPI]
  Powered by Linux