美文网首页
【计算机原理】程序执行过程

【计算机原理】程序执行过程

作者: dy2903 | 来源:发表于2018-02-19 12:19 被阅读68次

本章主要介绍程序执行过程中操作系统、CPU都干了什么

运行前

程序在运行前,只是在硬盘上待着,此时就是一堆二进制代码而已,没有任何作用。

程序只有进入了内存才能运行,但是要进入内存,则需要服从操作系统的调度。

一个程序在运行的时候可能需要很大的空间,比如3G,但是操作系统不可能为每个程序都分配那么大,因为同时加载入内存的程序可能很多。

所以操作系统想了个办法,它和CPU一起“欺骗”了程序,它可以把硬盘的部分空间当作内存展示给程序,这就是虚拟内存技术,这种欺骗手段能实现的原因在于,程序的局部性原理,也就是程序不会同时运行所有的代码。

虚拟内存是一种内存管理技术,使得应用程序认为它拥有连续的可用的内存。

实际上可能并不是这样,它通常是被分隔成多个物理内存碎片,还有可能暂时存储在外部磁盘存储器上,

image.png

这种做法最核心的问题就在于调度。我们可以把程序切分成若干块,也就是页面,然后分页装入内存中。这样,之后暂时用不到的页面就可以置换到硬盘上呢。

image.png image.png

装载

在程序运行之前,操作系统会进行程序的装载,也就是创建一个进程结构,它会有自己的一套虚拟地址、页表等结构。

但是装载器不会把代码装载到物理内存中,而是用一个页表把代码在硬盘上的位置记录下来,只有在真正运行的时候才会加载到内存里面。

最后,装载器会找到程序的入口地址,执行的时候,从入口地址开始读第一条指令。

运行

下载程序虽然还在硬盘里面,但是操作系统已经建立了一个进程,它有一套自己的虚拟地址、页表等高级数据结构。

操作系统进行进程的调度,当轮到这个进程来的时候,才从装载器返回的入口点开始执行。

CPU从程序入口处取出指令,但是这是一个虚拟地址,需要转换为物理地址。那么怎么转换呢?CPU会去查看页表,可以这个页表现在还指向的是硬盘中的地址,所以CPU会执行缺页中断处理程序

最后CPU会从硬盘里面把代码加载入内存,之后CPU当然得把页表修改一下,这样才能反映数据已经进入内存呢。

image.png

随着程序的执行,越来越多的数据和代码被加载到物理内存,而且这些加载到内存中的不是连续的,他会安插在内存的不同位置去。

image.png

值得注意的是,在内存中的只是进程的一个实例而已,可以相当于程序的一个化身

CPU会不断的读数据、写数据,时间片到了,就把进程挂起来,也就是说进程其实不是独占CPU的,只是因为进程切换得非常快,从人类的角度来看,以为程序在同时执行一样。

最后进程运行结束,内存中的数据会清理,覆盖。


image.png

操作系统为什么要这么做

操作系统为什么要那么麻烦的搞出什么内存映射、虚拟内存来,还不是因为资源有限,内存就那么大,程序又那么多,为了让更多的程序运行起来,有效的利用内存和CPU,只能使用这种方法了。

参考

本文由操作系统是个大骗子?改编过来的

相关文章

  • 【计算机原理】程序执行过程

    本章主要介绍程序执行过程中操作系统、CPU都干了什么 运行前 程序在运行前,只是在硬盘上待着,此时就是一堆二进制代...

  • 07 程序执行原理(科普)

    程序执行原理(科普) 目标 计算机中的 三大件 程序执行的原理 程序的作用 01. 计算机中的三大件 计算机中包含...

  • 程序是什么

    程序执行原理(科普) 目标 计算机中的 三大件 程序执行的原理 程序的作用 01. 计算机中的三大件 计算机中包含...

  • 第四章 主存储器

    1、冯诺依曼计算机——存储程序设计原理——程序驱动型——用户使用计算机要编写程序、存储程序、执行程序 数据流计算机...

  • 程序执行的本质

    程序执行的本质 程序执行的过程:代码区的指令不断执行,驱使动态数据区和静态数据区产生数据变化。 这一过程需要计算机...

  • 进程与多进程

    多任务编程 可以有效的利用计算机资源,同时执行多个任务 进程 定义 进程就是程序在计算机中一次执行的过程 程序与进...

  • 中断

    定义: 所谓的中断是在计算机执行程序的过程中,由于出现了某些特殊的事情,使得CPU暂停对程序的执行,转而去执行处理...

  • 2019-11-06 程序执行原理(科普)

    目标 计算机中的 三大件 程序执行的原理 程序的作用 01. 计算机中的三大件 计算机中包含有较多的硬件,但是一个...

  • volatile原理

    计算机内存模型 计算机在执行程序时,每条指令都是在CPU中执行的,而执行指令过程中,势必涉及到数据的读取和写入。由...

  • 深入理解JVM,类加载机制ClassLoader流程

    编译原理请查看之前内容,.java文件编译过程和执行过程分析以及计算机简单认识 需要了解更多Java原创资料,请加...

网友评论

      本文标题:【计算机原理】程序执行过程

      本文链接:https://www.haomeiwen.com/subject/xkmitftx.html