挑战408——操作系统(17)——程序的运行过程

进入了存储管理的部分了。也是操作系统中的一大难题。这部分接在组成原理复习完存储器部分来复习,会对存储器和存储系统会有个更深入的感触。
内存管理的对象是内存,内存管理的方案有很多,从简单的单一连续分配到页式端式存储方案,各有优点。为操作系统选择存储方案,依赖于很多因素,特别是硬件的支持。下面先来看看一个程序运行的过程。

程序的运行过程

程序要运行,首先必须装入内存,用户源程序要变成一个可以在内存运行的程序,通常要经过编译,链接,装入3个步骤。

  1. 编译。用户源程序经过编译产生目标模块,目标模块以“0”作为开始地址,而目标模块的地址称为逻辑地址。
  2. 链接。将编译后的多个目标模块以及它们所需要的库函数链接在一起,形成装入模块,装入模块具有统一的地址空间,此阶段,形成了程序的逻辑地址
  3. 装入。将装入模块装载入内存的实际物理空间,并修改程序中与地址有关的代码,这个过程叫做地址的重定位。实现逻辑地址到物理地址的转换。此阶段形成了程序的物理地址
程序的装入

程序的装入的过程,实际上就是将逻辑地址转换成物理地址的过程,又称为地址重定位或者地址映射。根据重定位时机的不同,又分为静态重定位和动态重定位。

  1. 静态重定位。所谓静态重定位,是指在程序执行之前进行重定位。它根据装入模块将要装入的内存起始地址,修改装入模块中有关使用地址代码。这种修改是在程序运行之前,程序装入时一次完成,以后不再改变。
    静态重定位无需硬件支持,但是却存在一些缺点:程序在重定位后不能再内存中移动,并且要求存储空间是连续的。
  2. 动态重定位。动态重定位,是指程序在执行的过程中进行地址重定位。即指令在每次访问每个地址单元前再进行地址变换。这种方式需要硬件——重定位寄存器的支持。
    当程序运行的时候,CPU每取一条访存指令,地址变换硬件逻辑会自动将指令中的相对地址与重定位寄存器的地址相加,所得的值为绝对地址,然后根据绝对地址访问。(这个过程就像组成原理中的指令系统中的基址寻址和变址寻址)。
    所以,物理地址 = 首地址 + 偏移地址
    优点:在装入模块装入内存时,无需修改。存储区域不一定就要顺序存储
程序的链接

编译后得到的一组目标模块以及它们所需要的库函数装配成一个完整的装入模块。这个过程称为链接。同样的,根据链接方式的不同,又分为静态链接跟动态链接。

  1. 静态链接。即在程序运行之前事先进行的链接,链接以后的文件通常不会再拆开,要运行的时候,可直接将它装入内存。
  2. 动态链接。根据动态链接时机的不同,又分为装入时动态链接和运行时动态链接。
    • 装入时动态链接。即在程序装入内存的时候,边装入边连接,遇到外部引用的时候,此时引用装入程序,找出相应的外部目标模块,并存入内存,同时修改目标模块中的相对地址。即在程序装入内存的时候,边装入边连接,遇到外部引用的时候,此时引用装入程序,找出相应的外部目标模块,并存入内存,同时修改目标模块中的相对地址。
      (用实例来了解,系统中我们常常会看到一个后缀为dll的文件,这个就是动态链接库。有时候当启动某个程序的时候,出现错误提示,缺少XXX.dll,就是在链接的过程中缺少了动态链接库。有时候dll常用于版本的更新,因为大多数时候新版本的修改仅限于几个模块,所以只用更新或者替换相应的dll就可以达到更新的目的。我们常常看到的在线更新就是这个原理)
    • 运行时动态链接。即将目标模块的链接推迟到程序执行的时候再进行,在执行过程中会发现被调用的模块还未装入内存,再去找出模块,并将其装入内存。(在现实软件中,我们会看到一些VIP功能的软件,当你账号登录后,是会员身份,那么才允许你装入相应的dll)。
内存保护

内存在分配前,需要保护操作系统不收用户的影响,同时保护用户进程不受其他用户进程的影响,所以对于给出的逻辑地址,首先判断是否越界,再进行重定位。原理如图:
在这里插入图片描述

交换

基本思想为:将处于等待状态下的进程,从内存中移动到辅存,从而将内存的空间腾出来,这个过程称为换出。相反,将准备好竞争CPU运行的程序从辅存转移到内存,这一过程称为换入。这个过程其实就是中级调度的过程。这个过程在虚拟存储器中应用的相当广泛。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值