程序是怎样执行的

1.操作系统(Linux为例)

说明:本文是我对自己之前学到知识的总结,可能存在许多不足,我希望通过此方式来回顾知识,加强理解,也希望大家能指出文中的错误与不足,互相学习,谢谢。

  • 系统硬件组成如下:
    在这里插入图片描述

  • 总线是贯穿整个系统的电子管道,用来在各个部件中传输数据。

  • I/O(输入/输出)设备是系统与外部联系的通道。

  • 寄存器文件是由多个寄存器组成,用来存储数据的。

2.程序怎样运行

2.1程序加载

程序存储在磁盘上,程序运行在内存中,我们双击运行一个程序的时候,操作系统通过文件管理器找到文件数据存储的具体位置(通过磁盘寻址技术),然后将程序加载到内存(每个进程对应一个虚拟内存,就相当于每个进程独自占有主内存,每个进程看到的内存地址都是一样的,称为虚拟地址空间),程序不会全部加载到内存,它只会加载需要运行的部分(这里涉及到缺页中断的处理)。

2.2程序是以进程方式存在

程序运行在内存中是以进程的形式存在的,在操作系统中,一个进程可以包含多个线程,线程共同享有进程的资源,进程是操作系统分配资源的基本单位,线程是CPU调度的基本单位。而进程最重要的组成叫做PCB(进程控制块),它包含进程的标识符、处理器信息(寄存器,程序计数器值等)、进程调度信息(进程的优先级,状态等)、进程控制信息(程序的数据地址,连接指针,资源等)。

2.3程序执行由CPU控制

我们在计算机可以同时进行多个操作(写代码的同时还可以听音乐),这些程序运行都是由CPU分配时间片去执行的,我们看上去这些程序同时在运行,其实是由CPU高速运转,来回切换不同的程序运行所产生的,CPU的运行速度很快,通常是GHZ,内存的是MHZ,而磁盘的速度更慢,CPU和内存它们之间速度不匹配那么如何拿到数据呢?CPU从内存中读取数据计算后返回,这图中通过高速缓存,L1\L2\L3缓存,它们解决了CPU和内存速度不匹配还能准确的交互数据的问题。
在这里插入图片描述

3.程序通过指令执行代码

  • 程序通过操作系统将程序执行代码转换成指令的形式去执行,CPU读取这些在内存中运行的程序的指令,然后进行运算,将结果返回到程序或者输出显示。
  • 指令:指令就是CPU执行的基本单元,读取程序指令在CPU中运算。
  • 程序存放在磁盘上,程序运行在内存中,操作系统将应用程序代码翻译成可执行的指令,然后CPU读取指令执行程序。如下图:
    在这里插入图片描述

4.补充

应用程序通过操作系统来交互,操作系统的核心是内核,也就是应用程序和内核进行交互,然后内核给应用程序分配资源(内存等),最后由CPU调度执行。上面说过,程序运行在虚拟内存当中,虚拟内存中地址连续,这样才能保证读取程序的效率。从磁盘中读取一个程序,首先要找到程序存放的具体位置(硬盘存取、读取数据,首先要做的就是寻址,就是在硬盘上就要找到对应的磁盘柱面、磁头以及对应的扇区),需要减少IO的时间,也就是磁盘读取程序的时间,只有内存地址连续,这样才能减少磁盘寻址的时间。下图是window操作系统中虚拟内存的介绍(RAM:随机存取存储器,也成为主存[内存包含主存];分页:一页大小4kb,主要是为了减少内存碎片)。

  • 备注:程序在磁盘上,当操作系统将程序相关信息读取到内存中,并合理的分配了运行时候的内存(堆内存和栈内存)后,创建PCB(进程控制块)程序变成进程。
    在这里插入图片描述

说明:多线程的并发运行就是一个程序的指令和另一个程序的指令交错执行,而这种交错执行的机制称为上下文切换。操作系统会保持跟踪进程运行所需要的所有状态信息。这种状态就是上下文信息,比如PC和寄存器文件的当前值,以及主存的内容。

  • 5
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值