<div dir="ltr"><div><div><div>Hi Pritam,<br><br></div><div>Every page frame is controlled by kernel, but kernel does not have to map all pages in all time.<br></div>On a 32-bit bit, 3:1 split Linux kernel, the kernel has at most 1GB VIRTUAL address space. (user space has 3GB).<br>
</div>If there are 2GB of physical DRAM on the system, our kernel obviously cannot map 2GB memory into 1GB virtual address space.<br><br></div><div>To solve this problem, the kernel map part of DRAM to normal area (1-to-1 mapping). A page from normal zone can be accessed<br>
by kernel by using the existing mapping. <br>Other memory is called high memory. When kernel wants to access the high memory pages, <br>it maps them to kernel address space (by vmalloc, fixed map or permanent map).<br><br>
</div><div><div>(A 64-bit CPU can make life much easier. We can map a lot of DRAM directly.)<br><br></div><div>Regards,<br></div><div>MH<br></div></div></div><div class="gmail_extra"><br><br><div class="gmail_quote">On Mon, Dec 30, 2013 at 10:28 PM, Pritam Bankar <span dir="ltr"><<a href="mailto:pritambankar1988@gmail.com" target="_blank">pritambankar1988@gmail.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><br><div class="gmail_extra">Miles thanks a lot for response but I still have some doubts please see my comments inline. <br clear="all">
<div><br></div>
<br><br><div class="gmail_quote"><div class="im">On Sun, Dec 29, 2013 at 7:04 PM, Miles MH Chen <span dir="ltr"><<a href="mailto:orca.chen@gmail.com" target="_blank">orca.chen@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
<div dir="ltr"><div><div><div><div><div><div><div>Hi Pritam,<br><br></div>1) Yes, all 512RAM will be direct mapped to kernel address space IF the kernel have a 896MB direct mapping area.<br></div>Actually you can change the range of kernel direct mapping by the vmalloc=<size> in boot command line.<br>
</div>In 32-bit and 3:1 split configuration, kernel direct mapping area + vmalloc area is roughly 1G.<br><br></div>2) User space and kernel space can have different virtual addresses mapping to the same physical frame at the same time.<br>
<br></div>3) Direct mapped or fixed map or permanent map are describing kernel VIRTUAL address space, you can see the virtual memory<br>layout by 'dmesg'. When user space needs memory, the kernel allocates a free memory frame, and remaps the frame to user space. <br>
The frame does not have to have a valid kernel virtual address. </div><div><br></div></div></div></blockquote><div> </div><div><br></div></div><div>But all physical memory/frames are eventually controlled by kernel , then how can there ever exist a frame which doesn't have mapping with kernel or kernel virtual address ?</div>
<div class="im">
<div><br></div><div><br></div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div dir="ltr">
<div>
<div></div>Regards, <br></div>MH<br></div><div class="gmail_extra"><br><br><div class="gmail_quote"><div><div>On Sun, Dec 29, 2013 at 5:42 PM, Pritam Bankar <span dir="ltr"><<a href="mailto:pritambankar1988@gmail.com" target="_blank">pritambankar1988@gmail.com</a>></span> wrote:<br>
</div></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div><div><div dir="ltr"><div>Lets consider 32 bit Linux system with 512 physical RAM. Suppose I have standard 3:1 address space split. Now what I understand is</div>
<div> </div><div>(In general)</div><div>1. In the fourth gigabyte I have kernel space</div>
<div>2. Out of 1GB for kernel address space only 896MB is used as direct mapping and other 128 MB is used for Noncontiguous Memory Area Management, Fixed Mapping and Permanent Mapping.</div><div><br></div><div>PCMIIW</div>
<div><br></div><div>Following are my doubts : </div>1. Since my system has only 512MB RAM, will there be only direct mappings since 896 is enough to hold 512 RAM?<div>2. When user space program do malloc, we get some virtual address from userspace region (from first 3GB) of process. So will it be like, when I access some memory from that region, there is some physical frame associated with it AND same physical frame will also be mapped in kernel space ?</div>
<div>So what I want to know, for every physical frame is there a mapping in userspace as well as kernel space ? (given that some address in user space of process map to same physical frame) </div><div>3. If we consider example of Linux system with 4GB, now if I do malloc from user space from which memory region kernel will give memory ? Direct mapped region or fixed map or permanent map ?<br>
<div> <br clear="all"><div>Thanks and regards,<br>Pritam Bankar</div>
</div></div></div>
<br></div></div>_______________________________________________<br>
Kernelnewbies mailing list<br>
<a href="mailto:Kernelnewbies@kernelnewbies.org" target="_blank">Kernelnewbies@kernelnewbies.org</a><br>
<a href="http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies" target="_blank">http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies</a><br>
<br></blockquote></div><br></div></blockquote><div><br></div><div><br></div>Thanks and regards,<br><div>Pritam Bankar </div></div></div><br></div></div>
</blockquote></div><br></div>