<div dir="ltr">>> Unfortunately for kernel developers, allocating memory in the kernel<br>>> is not as simple as allocating memory in userspace. A number of<br>>> factors contribute to the complication, among them:<br>>> The kernel is limited to about 1GB of virtual and physical memory.<br>>> **The kernel's memory is not pageable.**<br>><br>>> If a module needs to allocate big chunks of memory, it is usually<br>>> better to use a page-oriented technique.<br>><br>>Due to memory fragmentation, if a module needs (say) 2M of<br>>memory for an I/O buffer, it's more likely to be able to allocate<br>>512 4K pages scattered through the 1GB of memory than it<br>>is to get 1 contiguous chunk of memory.<br>><br>>The fact it's not pageable doesn't mean that pages aren't relevant<br>>as the unit of allocation.<br><br>Thank you for your help.<br><br>     For the saying that the kernel's memory is not pageable, I think the <br>word "pageable" should be understood in this way:<br>    Linux keeps the whole kernel in physical memory at all the times and no <br>such memory would be temporarily moved to swap even if it is not currently <br>in use.<br>    Am I right?<br>  <br>   If my understanding is right, one more question raises, what about the <div>memory related to the user processes, e.g. process control block? </div><div>Can it be swapped out?<br><br>Thank you for your attention to this matter.<br>Look forward to hearing from you. <br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">Valdis Klētnieks <<a href="mailto:valdis.kletnieks@vt.edu">valdis.kletnieks@vt.edu</a>> 于2020年6月20日周六 下午5:11写道:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">On Sat, 20 Jun 2020 14:18:21 +0800, 孙世龙 sunshilong said:<br>
<br>
> Unfortunately for kernel developers, allocating memory in the kernel<br>
> is not as simple as allocating memory in userspace. A number of<br>
> factors contribute to the complication, among them:<br>
> The kernel is limited to about 1GB of virtual and physical memory.<br>
> **The kernel's memory is not pageable.**<br>
<br>
> If a module needs to allocate big chunks of memory, it is usually<br>
> better to use a page-oriented technique.<br>
<br>
Due to memory fragmentation, if a module needs (say) 2M of<br>
memory for an I/O buffer, it's more likely to be able to allocate<br>
512 4K pages scattered through the 1GB of memory than it<br>
is to get 1 contiguous chunk of memory.<br>
<br>
The fact it's not pageable doesn't mean that pages aren't relevant<br>
as the unit of allocation.<br>
</blockquote></div>