2012-01-17 31 views

回答

1

在其中一个内核来管理物理内存的系统,无论是过程必须要求更多的内存的内核(即进行系统调用)或内核自动分配的网页的过程中要当进程解引用一个指针在现有文本和数据段之外的点。这适用于在用户空间中运行的lmm或任何其他内存分配器。如果您查看链接的lmm页面上的示例代码,您将看到一个调用sbrk(一个Unix系统调用)以获得一个内存块,然后交给lmm_add_free

在哪里的过程有全面和直接访问物理内存的系统,那么该过程可以做它喜欢。没有内核意味着没有系统调用。

2

除非应用程序或驱动程序的存储器要求是预先已知的(它们的执行开始之前),该驱动程序或应用程序通常应该从OS /内核在这样或那样的请求存储器。

系统调用是使内存分配请求的一个这样的方式。常的系统调用的调用是由专用CPU指令来完成(例如intsyscallsysenter在x86 CPU上)。

但是,可能有其他方法调用OS /内核来请求内存,或者应用程序/驱动程序可以启动的其他指令或事件,这将使CPU抢占应用程序/驱动程序的执行并将控制权转移到OS /内核。当尝试访问受保护或未由物理内存备份的内存位置时发生的页面错误可能是另一个错误。例如,应用程序可能有自己的虚拟地址空间,每当它试图从没有分配物理内存的内存读取数据或写入内存时,CPU都会将执行从应用程序切换到内核,从而分配内存,然后CPU切换回来。这是另一种不一定涉及任何系统调用的方式。

当然,如果没有操作系统或缺乏内存管理服务,并且在任何给定时间只有一个应用程序在运行,并且它可以访问所有计算机资源(这与DOS差不多),它可能管理内存本身,在这种情况下不需要系统调用。

至于what must be done when allocating memory的其余部分,它取决于OS(如果有)和CPU。例如,可能有必要将物理页面的内存映射到虚拟地址空间。通常,整个地址空间需要以某种方式分割成分配的内存块。内存管理器必须跟踪分配的和空闲的地址空间区域。内存保护(如果受到CPU和操作系统的支持)也需要照顾。所有常见的东西。

相关问题