可执行文件装载过程

程序装载即程序在运行前做的准备,总共分3步。

1、创建一个独立的虚拟地址空间

虚拟空间是由一组页映射函数将虚拟空间各个页映射到物理空间,实际上就是创建映射函数所需要的相应的数据结构(在i386的Linux下只需要分配一个页目录就好了,映射关系在发生页错误时再设置)
虚拟地址空间大小由硬件平台指定,具体是由CPU位数决定,比如32位的硬件平台虚拟地址空间范围为0~2^32-1,即4GB虚拟内存空间大小。

2、读取可执行文件头,建立虚拟空间与可执行文件的映射关系即创建虚拟空间与可执行文件的映射关系。

由于可执行文件中有多个段,可执行文件装载时是以页为单位的,势必会产生空间浪费,怎么办?
实际上在装载过程中,操作系统并不关心段,而是关心权限,同一权限的段可以当做一个段进行映射
在链接为可执行文件时,链接器会尽量把同一权限的Segment放在一起
段的权限基本有3种组合:
①以代码段为代表的权限为只读
②以数据段和BSS段为代表的权限为可读可写的权限
③以只读数据段为代表的权限为只读的段

3、将CPU指令寄存器设置成可执行文件入口,启动运行

操作系统通过设置CPU指令寄存器将控制权转交给进程,由此进程开始执行

转载于:https://www.cnblogs.com/huangsitao/p/11415565.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值