Hi Simon,
On 02/01/2013 11:06 AM, Simon Jeons wrote:
How can distinguish map and use? I mean how can confirm memory is used
by kernel instead of map?
If the page is free, for example, it is in the buddy system, it is not
in use.
Even if it is direct mapped by kernel, the kernel logic should not to
access it
because you didn't allocate it. This is the kernel's logic. Of course
the hardware
and the user will not know this.
You want to access some memory, you should first have a logic address,
right?
So how can you get a logic address ? You call alloc api.
For example, when you are coding, of course you write:
p = alloc_xxx(); ---- allocate memory, now, it is in use, alloc_xxx()
makes kernel know it.
*p = ...... ---- use the memory
You won't write:
p = 0xFFFF8745; ---- if so, kernel doesn't know it is in use
*p = ...... ---- wrong...
right ?
The kernel mapped a page, it doesn't mean it is using the page. You
should allocate it.
That is just the kernel's allocating logic.
Well, I think I can only give you this answer now. If you want something
deeper, I think
you need to read how the kernel manage the physical pages. :)
1) If user process and kenel map to same physical memory, user process
will get SIGSEGV during #PF if access to this memory, but If user proces
s will map to the same memory which kernel map? Why? It can't access it.
When you call malloc() to allocate memory in user space, the OS logic will
assure that you won't map a page that has already been used by kernel.
A page is mapped by kernel, but not used by kernel (not allocated, like
above),
malloc() could allocate it, and map it to user space. This is the situation
you are talking about, right ?
Now it is mapped by kernel and user, but it is only allocated by user.
So the kernel
will not use it. When the kernel wants some memory, it will allocate
some other memory.
This is just the kernel logic. This is what memory management subsystem
does.
I think I cannot answer more because I'm also a student in memory
management.
This is just my understanding. And I hope it is helpful. :)
2) If two user processes map to same physical memory, what will happen
if one process access the memory?
Obviously you don't need to worry about this situation. We can swap the page
used by process 1 out, and process 2 can use the same page. When process
1 wants
to access it again, we swap it in. This only happens when the physical
memory
is not enough to use. :)
And also, if you are using shared memory in user space, like
shmget(), shmat()......
it is the shared memory, both processes can use it at the same time.
Thanks. :)
--
To unsubscribe from this list: send the line "unsubscribe linux-acpi" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html