3.10 程序的运行

本文详细探讨了在操作系统环境下,可执行ELF文件的加载过程,包括加载器的作用、镜像加载地址、程序头表的结构,以及Linux内存映像的创建、程序入口的设置,同时涉及MMU在虚拟地址与物理地址转换及内存保护中的关键作用。
摘要由CSDN通过智能技术生成

程序的运行

操作系统环境下:可执行ELF文件运行
裸机环境下:BIN/HEX文件运行

1 可执行ELF文件

1.1 加载器

  1. 在操作系统环境下执行一个可执行文件,加载器会首先将可执
    行文件加载到内存中
  2. 加载器拷贝数据完毕,进行相关操作,然后会跳转到程序入口
    处运行该程序

1.2 镜像加载地址

  1. 程序头表
    » 指定了可执行文件镜像加载到内存中的地址
    » 链接地址=加载到内存中的地址
  2. ELF文件头基本信息
    » 文件类型、运行平台、程序入口地址

1.3 程序头表 Program header table

记录系统如何将可执行文件加载到内存、要加载的段、入口地
址,一个程序段可能包含几个section

readelf -l

左边为可执行文件
右边为可重定位文件
在这里插入图片描述

2 Linux内存映像

当运行一个可执行文件时,主要的工作有三步

  1. 创建一个独立的虚拟地址空间
  2. 读取可执行文件头,建立虚拟地址空间与可执行文件的映射关系
  3. 将PC指针设置为可执行文件的入口地址,启动运行
    在这里插入图片描述

2.1 程序入口

  1. 一般情况下,编译时的链接地址=运行地址
  2. 加载器会读取ELF文件头,找到程序入口地址
  3. 一般情况下:程序入口地址=链接地址+一定偏移

每个程序的链接地址都是0x08048000,为什么没有冲突?

3 MMU

3.1 虚拟地址与物理地址

CPU管脚的地址信号:物理地址
使能MMU后,操作系统运行的是虚拟地址

3.2 MMU的用途

虚拟内存,通过交换分区,可以运行比实际物理内存大的程序
内存保护:可以设置不同内存块的读写权限
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值