从程序文件到进程运行经历了什么?

news2024/10/9 7:22:38

计算机,这一现代科技的奇迹,其内部运作的复杂性和精妙性令人叹为观止。本文尝试探讨计算机组成原理,从程序文件加载到进程执行的整个过程,揭示其中涉及的硬件协作、指令取译执行以及进程管理的基本过程。

一、引言:计算机组成概览

在探讨之前,让我们先简要回顾一下计算机的主要硬件组件及其功能:

  • 电源供应单元(PSU):将交流电转换为计算机内部所需的直流电,为所有硬件提供稳定的电力。
  • 主板:作为计算机的骨架,连接并承载所有主要硬件,提供通信和数据传输路径。
  • 中央处理器(CPU):执行计算机程序的指令,进行算术逻辑运算,并控制其他硬件。
  • 内存(RAM):临时存储正在运行的程序和数据,以便CPU快速访问。
  • 存储设备(如硬盘、固态硬盘):长期存储数据和程序,包括操作系统、应用程序和用户数据。
  • BIOS/UEFI:基本输入/输出系统或统一可扩展固件接口,负责计算机启动、硬件初始化和系统配置。
  • 程序计数器(PC):存储当前欲执行指令的内存地址,控制程序的执行顺序。
二、程序文件的存储与加载
1. 程序文件的存储

程序文件通常以二进制格式存储在硬盘或固态硬盘等存储设备中。这些文件包含了程序的代码段、数据段以及必要的元数据,如程序的入口点地址。

2. 加载程序文件

当用户双击一个可执行文件或操作系统决定启动某个程序时,以下过程开始:

  • 操作系统响应:操作系统接收到用户请求后,通过文件系统找到并读取程序文件的内容。
  • 内存分配:操作系统为程序分配一块内存空间,通常包括代码段、数据段和堆栈段。
  • 加载到内存:操作系统的加载器将程序文件的代码段和数据段加载到分配的内存空间中。此时,程序的指令和静态数据已经驻留在内存中,等待CPU执行。
三、硬件协作与启动过程

计算机的启动过程是一个硬件组件协同工作的典范,它涉及到PSU、主板、BIOS/UEFI、CPU和内存等多个组件。

  • 电源供应与主板启动:用户按下电源按钮后,PSU开始工作,为主板和其他硬件提供电力。主板上的嵌入式控制器监测到电源稳定后,通知BIOS/UEFI开始启动。
  • BIOS/UEFI自检与引导程序加载:BIOS/UEFI执行自检,检查硬件是否正常工作。随后,它根据预设的启动顺序从存储设备中加载操作系统引导程序到内存中。
  • 初始化CPU与其他硬件:在引导程序执行前,BIOS/UEFI初始化CPU和其他硬件,如内存控制器、I/O设备等。
  • 操作系统启动:引导程序将操作系统的内核加载到内存中,并跳转到操作系统的起始地址。CPU从该地址开始执行指令,操作系统正式启动。
四、指令的取译执行过程:以打印“Hello, World!”为例

指令的执行是计算机运作的核心。笔者尝试通过一个具体的例子——执行一条打印“Hello, World!”的指令——来详细阐述指令的取译执行过程:

1. 取指令
  • PC的作用:程序计数器(PC)存储当前要执行的指令的内存地址。在程序开始执行时,PC被初始化为程序的入口点地址。
  • 访问内存:CPU从PC中获取当前指令的地址,并通过地址总线访问内存中的指令。内存根据接收到的地址,读取对应的指令,并通过数据总线发送到CPU。
2. 译码与准备执行
  • 指令寄存器(IR):CPU将接收到的指令存储到指令寄存器(IR)中,准备进行解码。
  • 解码指令:CPU对IR中的指令进行解码,确定要执行的操作和操作数。例如,解码后,CPU识别出这是一条打印指令,并知道需要打印的字符串是“Hello, World!”。
3. 执行指令
  • 调用输出函数:CPU执行相应的操作,如调用操作系统提供的输出函数。这个函数负责将字符串发送到显示器。
  • I/O操作:操作系统接收到CPU的请求后,启动相应的设备驱动程序来处理I/O操作。设备驱动程序与显示设备协作,将字符串“Hello, World!”显示在屏幕上。
4. 更新PC与循环执行
  • PC自动递增:指令执行完毕后,PC自动递增以指向下一条指令的地址。递增的大小取决于指令的长度和CPU的架构。
  • 循环执行:CPU重复执行取指令、译码、执行和更新PC的过程,直到程序执行完毕或遇到特殊的控制指令(如跳转指令)。
五、进程的执行与硬件协作

进程是操作系统进行资源分配和调度的基本单位。以下通过详细例子说明进程的执行过程及硬件协作:

1. 进程创建与加载
  • 用户请求:用户双击一个可执行文件,请求操作系统启动该程序。
  • 进程创建:操作系统响应用户请求,创建一个新的进程来运行程序。操作系统为进程分配唯一的进程标识符(PID)和内存空间。
  • 加载可执行文件:操作系统将可执行文件的代码段和数据段加载到进程的内存空间中,并初始化进程控制块(PCB)。PCB包含进程的状态信息、内存映射、寄存器值等。
2. 内存管理与MMU协作
  • 虚拟内存:操作系统使用虚拟内存技术为进程提供独立的地址空间。每个进程都有自己的虚拟地址空间,它映射到物理内存中的实际地址。
  • 内存管理单元(MMU):当进程访问内存时,MMU负责将虚拟地址转换成物理地址。如果发生缺页,操作系统会触发页面调度机制,从磁盘加载所需页面到内存。
3. I/O操作与硬件协作
  • 系统调用:当程序执行到I/O操作指令时,CPU会发起系统调用请求。系统调用是操作系统提供的接口,允许程序请求操作系统服务。
  • 设备驱动程序:操作系统接收到请求后,启动相应的设备驱动程序来处理I/O操作。设备驱动程序与硬件设备协作完成数据传输。例如,当程序执行打印指令时,设备驱动程序会与打印机协作将字符串输出到纸张上。
4. 进程间通信与并发执行
  • 进程间通信:多个进程可能需要相互通信以共享数据或协调执行。操作系统提供进程间通信机制,如管道、消息队列、共享内存等。这些机制允许进程在不同的内存空间中交换数据和信号。
  • 并发执行:操作系统使用进程调度算法管理多个进程的执行。调度算法决定何时切换进程、哪个进程获得CPU时间等。通过并发执行,多个进程可以同时运行在一个或多个CPU上,提高系统的效率和响应速度。
六、背景补充
1. BIOS/UEFI的作用与差异
  • BIOS:基本输入/输出系统(BIOS)是计算机启动过程中的关键组件。它负责初始化硬件、加载操作系统引导程序等。BIOS通常存储在主板上的ROM芯片中。
  • UEFI:统一可扩展固件接口(UEFI)是BIOS的现代替代品。它提供了更快的启动速度、更好的安全性和更多的功能。UEFI支持更大的硬盘容量、更复杂的启动选项和更高级的安全特性。
2. 中断和异常处理
  • 中断:在程序执行过程中,CPU可能会遇到中断。中断是由硬件设备或操作系统发起的信号,用于请求CPU暂停当前程序的执行并转去处理其他任务。中断处理完毕后,CPU会恢复到之前的状态并继续执行程序。
  • 异常:异常是由程序中的错误或特殊情况引起的。当程序执行到异常指令时,CPU会暂停程序的执行并转去处理异常。异常处理完毕后,CPU会根据异常的类型和性质决定是否继续执行程序或终止程序。
3. 硬件抽象层(HAL)
  • 定义与作用:硬件抽象层(HAL)是操作系统和硬件之间的接口层。它隐藏了硬件的具体细节,使操作系统能够以统一的方式与不同类型的硬件进行交互。HAL提供了一组标准化的接口和函数,用于访问和控制硬件设备。
  • 实现与意义:HAL的实现通常与操作系统和硬件平台密切相关。通过HAL,操作系统可以更容易地适应不同的硬件平台,提高系统的可移植性和可扩展性。同时,HAL也提高了系统的安全性和稳定性,防止了直接访问硬件可能带来的风险和不稳定因素。
七、结语

计算机组成原理是一个庞大而复杂的领域,涉及多个硬件组件的协同工作和技术细节的实现。通过本文的探讨,给大家介绍了解了从程序文件加载到进程执行的整个过程中涉及的计算机组成原理。分析了程序文件的存储与加载、硬件协作与启动过程、指令的取译执行过程以及进程的执行与硬件协作等关键环节。同时,还探讨了BIOS/UEFI的作用与差异、中断和异常处理以及硬件抽象层等技术细节和背景知识。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2198417.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

代码随想录day22:回溯part4

491.递增子序列 class Solution {List<List<Integer>> result new ArrayList<>();List<Integer> path new ArrayList<>();public List<List<Integer>> findSubsequences(int[] nums) {backTracking(nums, 0);return result;}priv…

室内物品墙体脱落分割系统源码&数据集分享

室内物品墙体脱落分割系统源码&#xff06;数据集分享 [yolov8-seg-dyhead-DCNV3&#xff06;yolov8-seg-AFPN-P345等50全套改进创新点发刊_一键训练教程_Web前端展示] 1.研究背景与意义 项目参考ILSVRC ImageNet Large Scale Visual Recognition Challenge 项目来源AAAI G…

计组与体系软题1-数据表示与校验码

一、数的编码方式 题1-0的表示 题2-补码的补码原码 1. 这道题涉及到数的编码范围和进制转换2. 题3-采用补码的目的 二、编码范围 题1-补码的表示范围(-2^(n-1)~2 ^(n-1)-1) n是字长/位数&#xff0c;2^7128&#xff0c;范围为-128~127题2-原码范围&#xff08;-2^&#xff0…

GNURadio 平台实现DSB信号调制解调实验

目录 一、DSB 信号调制解调原理 二、搭建的GRC流图 一、DSB 信号调制解调原理 1.调制原理 由于AM 信号载波信号占用很大的能量&#xff0c;但是不携带信息&#xff0c;不传递信息&#xff0c;直接去掉载波信号就得到了DSB信号。可见 DSB 信号与 AM 信号的不同之处是&#xff…

来了,使用YOLOv11目标检测教程

来了&#xff0c;使用YOLOv11目标检测教程 概述 YOLO11 在 2024 年 9 月 27 日的 YOLO Vision 2024 活动中宣布&#xff1a;https://www.youtube.com/watch?vrfI5vOo3-_A。 YOLO11 是 Ultralytics YOLO 系列的最新版本&#xff0c;结合了尖端的准确性、速度和效率&#xff…

【CPP】类与多态

目录 15 类与多态15.1 如何理解多态15.2 动态绑定15.3 虚函数及重写的生效方式15.4 动态多态的生效方式15.5 坑15.6 协变15.7 析构函数的重写15.8 CPP11新增关键字15.8.1 override15.8.2 final 15.8 纯虚函数与抽象类15.9 虚函数表指针和虚函数表15.9.1 粗看虚函数表指针和虚函…

List子接口

1.特点&#xff1a;有序&#xff0c;有下标&#xff0c;元素可以重复 2.方法&#xff1a;包含Collection中的所有方法&#xff0c;还包括自己的独有的方法&#xff08;API中查找&#xff09; 还有ListIterator&#xff08;迭代器&#xff09;&#xff0c;功能更强大。 包含更多…

一篇文章快速认识YOLO11 | 关键改进点 | 安装使用 | 模型训练和推理

前言 本文分享YOLO11的关键改进点、性能对比、安装使用、模型训练和推理等内容。 YOLO11 是 Ultralytics 最新的实时目标检测器&#xff0c;凭借更高的精度、速度和效率重新定义了可能性。 除了传统的目标检测外&#xff0c;YOLO11 还支持目标跟踪、实例分割、姿态估计、OBB…

ACM介绍

ACM介绍 1. ACM简介 ACM&#xff08;Association for Computing Machinery&#xff0c;国际计算机学会&#xff09;是世界上最大的计算机领域专业性学术组织&#xff0c;汇集了国际计算机领域教育家、研究人员、工业界人士及学生。ACM致力于提高在中国的活动的规格与影响力&a…

【微服务】—SpringBoot入门

⭐⭐⭐⭐⭐⭐ Github主页&#x1f449;https://github.com/A-BigTree 笔记仓库&#x1f449;https://github.com/A-BigTree/tree-learning-notes 个人主页&#x1f449;https://www.abigtree.top ⭐⭐⭐⭐⭐⭐ 文章目录 1 SpringBoot快速入门1.1 SpringBoot简介1.1.1 简介1.1.2…

新电脑 Windows 系统初始配置

文章目录 前言1 前置配置2 安装软件2.1 通讯工具2.2 后端开发工具2.3 硬件开发工具2.4 前端开发工具2.4 其它工具 3 Windows 11 优化4 写在最后 前言 分区&#xff08;个人习惯&#xff09;&#xff1a;1TB SSD 分为 2 个分区&#xff0c;一个 256GB 分区为系统盘&#xff0c;剩…

网络受限情况下安装openpyxl模块提示缺少Jdcal,et_xmlfile

1.工作需要处理关于Excel文件内容的东西 2.用公司提供的openpyxl模块总是提示缺少jdcal文件,因为网络管控,又没办法直接使用命令下载&#xff0c;所以网上找了资源&#xff0c;下载好后上传到个人资源里了 资源路径 openpyxl jdcal et_xmlfile 以上模块来源于&#xff1a;Py…

[已解决]Mac使用更改idea.vmoptions文件导致idea打不开

直接在访达中全局搜索 idea.vmoptions 文件&#xff0c;然后根据报错信息更改成默认的或者更改成默认的格式即可。

陪伴系统,会成为女性向游戏的下一个争夺点吗?

乙游提供给女性玩家的只有恋爱感吗&#xff1f; 一般来说&#xff0c;对于乙女游戏的概括常常以为玩家提供“恋爱陪伴感”为主&#xff0c;恋爱很好理解&#xff0c;通过与多位男主角的剧情互动来模拟在真实恋爱中的情感交互&#xff0c;当下乙游都将重点放在了营造恋爱感上。…

武汉正向科技|无人值守起重机,采用格雷母线定位系统,扎根智能制造工业

武汉正向科技开发的无人值守起重机系统在原起重机系统的基础上&#xff0c;利用格雷母线位置检测技术&#xff0c;信息技术&#xff0c;网络技术及传感器技术为起重机系统添加管理层&#xff0c;控制层和基础层。实现起重机智能化&#xff0c;无人化作业的库区综合管理系统。 正…

用AI构建小程序需要多久?效果如何?

随着移动互联网的快速发展&#xff0c;多端应用的需求日益增长。为了提高开发效率、降低成本并保证用户体验的一致性&#xff0c;前端跨端技术在如今的开发界使用已经非常普遍了&#xff0c;技术界较为常用的跨端技术有小程序技术、HTML5技术两大类。 2023年以来&#xff0c;伴…

antd-tree的半选回显,不联动父类节点,非严格模式下也可以

出现的问题&#xff0c;树节点在非严格模式下&#xff0c;如果回显&#xff0c;会自动选中父节点以下的所有节点 方案1 在请求回来前设置 check-strictly 为true,请求完成后&#xff0c;设置为 false&#xff0c;没生效 方案2 在请求回来回显的接口时&#xff0c;取没有childr…

[C++ 核心编程]笔记 1 内存分区模型

内存分区模型 C程序在执行时&#xff0c;将内存大方向划分为4个区域&#xff1a; 代码区: 存放函数体的二进制代码&#xff0c;由操作系统进行管理的。 全局区: 存放全局变量和静态变量以及常量。 栈区: 由编译器自动分配释放&#xff0c;存放函数的参数值、局部变量等。 堆…

Linux 之 Linux应用编程概念、文件IO、标准IO

Linux应用编程概念、文件IO、标准IO 学习任务&#xff1a; 1、 学习Linux 应用开发概念&#xff0c;什么是系统调用&#xff0c;什么是库函数 2、 学习文件IO&#xff1a;包括 read、write、open、close、lseek 3、 深入文件IO&#xff1a;错误处理、exit 等 4、 学习标准IO&a…

wsl环境下安装Ubuntu,并下载MySQL5.7

安装操作需root权限&#xff0c;切换root用户有两种方式&#xff1a; 1-通过 sudo su - &#xff0c;切换到root用户&#xff08;登录后长期有效&#xff09;。 2-在每一个命令前加上sudo&#xff0c;临时提升权限&#xff08;仅对一条命令有效&#xff09;。 1、下载apt仓库…