Windows如何执行Win32进程?
因此,当您打开PE(.exe)或调用CreateProcess(从Win32 API)时,将遵循以下过程:Windows如何执行Win32进程?,windows,multithreading,process,portable-executable,Windows,Multithreading,Process,Portable Executable,因此,当您打开PE(.exe)或调用CreateProcess(从Win32 API)时,将遵循以下过程: 文件头、图像扇区以及exe链接所针对的DLL都映射到进程自己的虚拟内存中 CPU在程序开始地址开始执行 所以我的问题来了——PE映像中的所有指令都使用一个相对于它自己的私有地址空间(虚拟内存)的地址,该地址以0开头。有时,此内存会被Windows调出辅助内存(HDD)中的某个位置。CPU如何找出RAM中的实际物理地址?另外,Windows如何根据优先级从一个线程切换到另一个线程,以支持多线
编辑:好,那么问题应该改写如下:“Windows进程是在核心布局程序中执行还是直接在CPU上执行?”。我得到了我想要的答案,所以无论如何问题都解决了。一个完整的答案会填满整本书,但简而言之:
如果页面不存在,操作系统必须先从磁盘读取页面,然后才能让试图访问该页面的代码继续,而且不一定总是进入同一物理页面。
实际上,它要复杂得多,因为表实际上是一个完整的表层次结构,此外,CPU内部有一个(通常大约50个条目)可以为最近访问的页面自动执行此任务,而无需触发中断和运行特殊的内核代码。
因此,根据情况的不同,事情可能完全自动地、不可见地发生,或者调用操作系统内核,遍历整个表层次结构,最后从磁盘加载数据(我甚至没有考虑过页面可能有防止访问它们的保护,或者在写入时会导致它们被复制的保护,等等)
在Windows的特定情况下,调度器总是首先满足最高优先级任务,并且只在没有未阻塞的高优先级任务时考虑较低优先级的任务。 如果没有其他任务正在运行,则空闲任务(具有最低优先级)将运行。空闲任务可能会执行诸如“免费”将回收内存页归零之类的任务,也可能会降低CPU(或两者兼而有之)。
此外,当线程阻塞时(例如读取文件或套接字时),调度程序甚至在没有计时器中断的情况下运行。这确保了CPU可以在被阻塞线程无法执行任何操作时用于有用的事情
一个完整的答案会填满整本书,但简而言之:
如果页面不存在,操作系统必须先从磁盘读取页面,然后才能让试图访问该页面的代码继续,而且不一定总是进入同一物理页面。
实际上,它要复杂得多,因为表实际上是一个完整的表层次结构,此外,CPU内部有一个(通常大约50个条目)可以为最近访问的页面自动执行此任务,而无需触发中断和运行特殊的内核代码。
因此,根据情况的不同,事情可能完全自动地、不可见地发生,或者调用操作系统内核,遍历整个表层次结构,最后从磁盘加载数据(我甚至没有考虑过页面可能有防止访问它们的保护,或者在写入时会导致它们被复制的保护,等等)
在Windows的特定情况下,调度器总是首先满足最高优先级任务,并且只在没有未阻塞的高优先级任务时考虑较低优先级的任务。 如果没有其他任务正在运行,则空闲任务(具有最低优先级)将运行。空闲任务可能会执行诸如“免费”将回收内存页归零之类的任务,也可能会降低CPU(或两者兼而有之)。
此外,当线程阻塞时(例如读取文件或套接字时),调度程序甚至会运行