__asm__("andl %%esp,%0; ":"=r" (ti) : "" (~(THREAD_SIZE - 1)));
The address of the process descriptor is aligned to THREAD_SIZE (which may be 4 or 8KB).
On 1/5/06, Kirk True <ktrue@xxxxxxxxxxx> wrote:
Hi Sanjay,
> - What is meant by aligning to page boudaries?
It means that an address is an integer multiple of the page size. For
instance, a common page size (on x86 at least) is 4k. So any address
must be a multiple of 4,096 bytes (0x1000).
Aligned:
0xc3564000
0xdeadb000
Unaligned:
0xc3564080
0xdeadbeae
It's kinda easy for 4k pages because an address must end with three
zeros (in hex).
If the modulo isn't 0, it's not aligned:
if (address % PAGE_SIZE)
printk(KERN_DEBUG "address %p isn't page aligned!\n", address);
> - When do you need to need to make use of it?
When it's required ;) Some system calls require page-aligned addresses,
some don't.
> - What are the advantages of it, if any?
Performance is one, though the exact reasoning/explanation is better
left to someone else. It makes the code cleaner in some of the mm/ stuff
too.
Kirk
--
Kernelnewbies: Help each other learn about the Linux kernel.
Archive: http://mail.nl.linux.org/kernelnewbies/
FAQ: http://kernelnewbies.org/faq/