操作系统期末复习 第三讲 简单的程序

一.运行时视图

 运行时视图:程序在执行时的主存储器布局。也叫运行时布局。

1.1代码段(.text)

存放程序的可执行指令,所有的执行都在代码段发生。

1.2数据段(.data)

存放程序的数据,又可以细分为三类。

 只读数据段:存放程序中的含初值常量。这些常量在程序运行途中不得修改。

 读写数据段:存放程序中的含初值常量。这些常量在程序运行时可以更改。

 零初始化数据段(.zidata/.bss-Block Started by Symbol):存放程序中不含初值的(初始化为0的)可修改常量。

1.3堆段和栈段

堆段:存放程序的堆,也即动态分配内存时内存的来源。

 栈段:存放程序的运行栈,以供过程调用时保存和恢复上下文。

 示例程序:

二.程序的装入

2.1代码的搬运

上电状态:与外存不同,内存在刚通电时内容是空的。

至少要将以下可读写属性的段放入内存:

 而只读段需要操作系统从外存读取程序文件的逻辑段,并按照其属性装入内存中。

可执行文件:程序在外存上的储存方式,本质是保存了程序的逻辑布局的描述。

程序的装入:操作系统读取外存上的可执行文件中对程序逻辑布局的描述,在内存中生成程序的物理布局的一个实例。

 可执行文件头:描述程序运行时布局的元数据,一般附加在可执行文件头部。

 代码段:操作系统从可执行文件中读取代码段,并拷贝到内存中的指定地址,操作系统在拷贝完成后设定该段为可读可执行段。

 只读数据段:与代码段类似的拷贝过程。

可读写数据段:操作系统从可执行文件中读取可读写数据段,并拷贝到内存中的指定地址。

 零初始化数据段:操作系统将内存中的指定地址清零。

2.2数据的搬运

堆段:操作系统在内存中的指定地址初始化堆数据结构。

 

 栈段:操作系统通常对该段什么也不做。最后,在将控制权交给程序时,将PC指向.text段,将SP指向.stack段。

PC:Program Counter,是通用寄存器,但是有特殊用途,用来指向当前运行指令的下一条指令。

SP:Stack Pointer,堆栈指针,也是通用寄存器,用于入栈和出栈操作。

三.程序的生成

3.1编程语言与工具链

工具链:编写,链接,调试应用程序往往需要一系列工具的帮助,这一系列工具被称为工具链。

基本的编译工具必须包括编译器,汇编器和链接器,否则无法生成应用程序。若条件允许,好药包含调试器以便增进调试效率。

编译器:将输入的高级语言源程序翻译为汇编语言源程序。*.C/.CPP->*.S/*.ASM(有的可以直接生成*.O/*.OBJ)

汇编器:负责将输入源程序的指令进行组装,生成初步的机器码目标文件。*./ASM->*./OBJ

链接器:负责程序各部分所对应的具体地址,并根据该地址填充所有符号引用、生成最终可执行的二进制文件或供程序员参考的地址映射文件。可执行文件:*.EXE或*.COM 是可直接在操作系统中执行的应用程序,含有完全成熟、可直接执行的机器码。地址映射文件:供程序员参考的一些可选地址映射信息,诸如某段程序或数据最终被链接到哪个地址,等等。

调试器 :系统提供给用户的能监督和控制用户程序的一种工具,可以装入、修改、显示或逐条执行一个程序。

解释器:直接在机器上解释并执行高级语言源程序。也不排斥使用编译器技术,内部先生成机器语言程序再执行。但是,解释器一般不会生成可独立运行的机器语言程序文件。

3.2程序的编译与链接

链接器对目标文件的内容的操作:链接器会先收集全部目标文件的符号,然后给每个符号分配地址。在地址确定后,反过来补全程序中对这些符号地址的引用。包括直接回填法和间接回填法。

直接回填法:链接器生成所有符号的地址后,直接修改.text段中对这些符号的引用,将正确的地址填写到那些引用中去,这样生成的代码就可以访问那些符号了。

直接回填法会修改.text段。

 间接地址法:编译器或汇编器生成目标文件时,在.rwdata段留出一个表格,.text段中的代码对其它符号的引用均通过这个表格进行。

间接地址法不会修改.text段,但会修改.rwdata段。

3.3过程调用与栈框

过程(子程序)结构:程序指针可能在中途反复跳转到同一段过程执行,完毕后返回原处继续执行。比循环结构更强大,因为过程的尾递归可以实现循环,过程还可以嵌套。

简单过程程序:

近过程型:调用者与被调用者处于同一个代码段内。

远过程型:调用者与被调用者处于不同的代码段内。

复杂程序结构:

含参数型:调用者向被调用者传递一个或多个参数。

参数传递有三种方法:

(1)通过全局变量传递(需要在数据段声明)

(2)通过栈传递(记得设置SP和SS)

(3)通过寄存器传递(寄存器数量有限)

返回值型:被调用者向调用者返回一个或多个返回值。

返回值的传递也有三种方法:

(1)通过全局变量传递(需要在数据段声明)

(2)通过栈传递(记得设置SP和SS)

(3)通过寄存器传递(寄存器数量有限)

 

 传参约定,保存约定,寄存器保护约定,线框恢复约定。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
2023年5月29日 学习要点 理解继承的概念,超类和子类的关系,掌握它们在继承中的应用; 掌握类中有关private成员的访问控制方; 理解方重载和方重写的区别和使用方; 第1页/共41页 java期末复习面向对象程序设计全文共41页,当前为第1页。 2023年5月29日 4.1 包 包是由.class文件组成的一个集合 第2页/共41页 java期末复习面向对象程序设计全文共41页,当前为第2页。 2023年5月29日 4.1.1 定义包 构建包语句的语法是: package pkg1[.pkg2[.pkg3…]]; 例如:package com.javaworld; package语句作为Java源文件的第一条语句。如果没有package语句,则为缺省无名包。 则该语句的前面只能有注释或空行。而且一个文件中最多有一条package语句。 包名有层次关系,全部用小写字母,各层之间用点分割. 第3页/共41页 java期末复习面向对象程序设计全文共41页,当前为第3页。 2023年5月29日 包是类的容器,用于分割类名空间。 如果不指定,默认就存在当前文件夹里面。 当使用包说明时,程序不需要再引入同一个包或者该包的任何元素。 如果包声明是: package com.sun.java; 则此文件必须存放在Windows的com\sun\java目录下。 第4页/共41页 java期末复习面向对象程序设计全文共41页,当前为第4页。 2023年5月29日 包名必须唯一 主要是为了交流,和便于大家的协同合作。 一个使用较多的办法是反转域名,如 com.sun.util; 包名的解释 Java解释器的执行顺序是:首先找到环境变量classpath,利用classpath包含的一个或者多个目录,把他们作为一种特殊的"根"使用,从这里开始搜索,搜索时会把"."替换成"\"(Windows)。 第5页/共41页 java期末复习面向对象程序设计全文共41页,当前为第5页。 2023年5月29日 4.1.2 导入包 import的语法是: import pkg1[.pkg2[.pkg3…]].(类名" * ); 例如:import java.awt.*; 引入整个包时,可以方便的访问包中的每个类。 但是引入所有的包会占用过多的内存。因此,我们建议只引入需要的类。 程序中不一定有引入语句。当需要引用某个类与当前类存储在一个物理目录下的时候,就可以直接使用,而不需要引入。 第6页/共41页 java期末复习面向对象程序设计全文共41页,当前为第6页。 2023年5月29日 4.1.3 类路径(CLASSPATH) 编译时:javac –d CLASSPATH路径 Myclass.java 例如:javac –d d:\Myjava myclass.java直接在d:\Myjava下创建在myclass.java中指明的包目录,并把myclass.class拷到该目录下。 运行:java 包名.类名    如  java   pk1.pk2.类名A 示例 CircleDemo2.java 第7页/共41页 java期末复习面向对象程序设计全文共41页,当前为第7页。 2023年5月29日 jdk中常用的包 java.lang----包含一些Java语言的核心类,如String、Math、Integer、System和Thread,提供常用功能。 java.awt----包含了构成抽象窗口工具集(abstract window toolkits)的多个类,这些类被用来构建和管理应用程序的图形用户界面(GUI)。 java.applet----包含applet运行所需的一些类。 java.net----包含执行与网络相关的操作的类。 java.io----包含能提供多种输入/输出功能的类。 java.util----包含一些实用工具类,如定义系统特性、使用与日期日历相关的函数。 第8页/共41页 java期末复习面向对象程序设计全文共41页,当前为第8页。 2023年5月29日 4.1.4 访问控制 第9页/共41页 java期末复习面向对象程序设计全文共41页,当前为第9页。 2023年5月29日 4.2 继承 面向对象的编程允许从现有类派生出新类,这称为继承。 使用继承,程序员可以创建一个定义了多个相关项目共有特性的通用类,然后,其它较为具体的类可以继承该类,同时再添加自己的独有特性。 在Java中定义的每一种类都是从现有类派生来的,或者是显式或者是隐式(如从Object类派生) 第10页/共41页 java期末复习面向对象程序设计全文共41页,当前为第10页。 2023年5月29日 11 4.

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值