【读书笔记】程序是怎样跑起来的 - 读书笔记(3)

VI. 程序运行环境

1 运行环境的概念

运行环境 = 操作系统 + 硬件。操作系统和硬件共同决定应用的运行环境。
在这里插入图片描述

2 操作系统
  1. 意义:克服计算机外围硬件构成的差异。

  2. 同一个操作系统在每个机型上都是不同的。

  3. 发展过程

    早期操作系统现代操作系统
    例子MS-DOS(Microsoft Disk Operating System 微软磁盘操作系统)Windows
    特征功能不完善,应用仍有直接操作计算机硬件的部分应用基本不会直接操作计算机硬件,而通过Windows发送指令间接实现

在这里插入图片描述
在这里插入图片描述

3 API
  1. 同一类型的计算机页可以选择安装多种操作系统。操作系统的类型不同,应用程序向操作系统传递指令的途径也不同。
  2. API 程序编程接口(Application Programming Interface):应用程序向操作系统传递指令的途径
  3. 不同操作系统的 API 有差异,因此将同样的应用程序移植到其他操作系统时,必须重写应用中利用到 API 的部分。
4 提供不依赖于操作系统的程序运行环境的方法
  1. 移植(ports)机制

    • ports机制能够结合当前硬件环境来编译应用的源代码,进而得到可以运行的本地代码系统。
    • 若目标应用源代码不在硬件上,会自动使用 FTP(File transfer protocol)连接到相关站点来下载代码。
      在这里插入图片描述
  2. 虚拟机软件

  3. Java虚拟机(Java Virtual Machine)
    (Java有两个层面的意思。一个是作为编程语言的 Java, 另一个是作为程序运行环境的 Java。)

    • 原理:先将Java源文件(.java)编译生成字节代码程序(.class)(而非直接生成本地代码),再由Java虚拟机把字节代码转换为与硬件适配的本地代码。
    • 不同环境需要专用的Java虚拟机。从应用的视角看,Java虚拟机就是运行环境。
      在这里插入图片描述
5 BIOS

基本输入输出系统(Basic Input/Output System):一组固化到计算机内主板上一个ROM芯片上的程序,它保存着计算机最重要的基本输入输出的程序、开机后自检程序和系统自启动程序。
在这里插入图片描述

VII. 程序的生成与加载

1 程序的生成
// Sample1.c 返回两个参数的平均值的函数 
double Average(double a, double b) { 
    return (a + b) / 2; 
} 
// 程序运行启始位置的函数 
int WINAPI WinMain(HINSTANCE h, HINSTANCE d, LPSTR s, int m) { 
    double ave;
    char buff[80];
    ave = Average(123, 456); 
    sprintf(buff, " 平均值 = %f", ave); 
    MessageBox(NULL, buff, title, MB_OK); 
    return 0; 
}
  1. 编译:由源文件(如.c)生成目标文件(.obj)。
    编译器:执行编译的程序。

  2. 链接:把多个OBJ文件结合,生成1个EXE文件的处理。
    链接器(linkage editor):运行连接的程序。

  3. 程序的启动:记述同所有程序起始位置相结合的处理内容。由一个特定OBJ文件记录。
    即使程序不调用其他目标文件的函数,也必须要进行链接,并和启动结合起来。

  4. 库文件(.lib):把多个目标文件集成保存到一个文件中的形式。
    链接器指定库文件后,会从中把需要的目标文件抽取出来,并同其他目标文件结合生成EXE文件。

  5. 导入库、动态链接库和静态链接库:

    • 导入库 - 用于操作系统的API****函数
      Windows操作系统提供的API函数(如Messagebox())的目标文件不存储在普通的库文件中,而是存储在DLL(动态链接库)文件中。
      API函数的导入库存储着对应动态链接库的位置信息。
    • 编程语言的标准函数存储在静态链接库中(如sprintf()函数存储于cw32.lib中)。
      在这里插入图片描述
2 程序的加载

程序运行时的 EXE 内容:再配置信息、变量组、函数组、栈、堆。
在这里插入图片描述

  1. 再配置信息(虚拟地址分配)

    • 在程序运行时,链接器在 EXE 文件的开头追加转换内存地址(虚拟地址 --> 物理地址)所需的必要信息,这种信息叫再配置信息
    • 链接后的EXE文件中,各变量(或函数)的内存地址可以用相对于变量组(或函数组)起始位置这一基点的偏移量来表示。
      在这里插入图片描述
  2. :当程序加载到内存后额外生成,EXE文件开始运行时得到分配。

    功能用来存储函数内部临时使用的变量(局部变量)用来存储程 序运行时的任意数据及对象的内存领域
    生成机制函数调用时自动申请分配根据编写的程序明确申请
    释放机制函数处理完毕后自动释放不会自动释放。若不明确释放,数据残留在内存,称为内存泄漏

VIII. 操作系统

1 操作系统功能历史
  1. 操作系统的原型 - 监控程序:具有加载和一次性运行程序的功能。
  2. 更多的功能被追加到监控程序中(硬件控制程序、编程语言处理器、各种实用程序等)。
    操作系统成为多个程序的集合体。
    在这里插入图片描述
2 操作系统的硬件控制:系统调用
  1. 概念:操作系统的硬件控制功能,通常是通过一些小的函数集合体的形式来提供的。这些函数及调用函数的行为统称为系统调用(system call)。
    用高级编程语言编写的应用在编译后,转换成了利用系统调用的本地代码。
    在这里插入图片描述
  2. 意义 - 硬件抽象化:通过使用操作系统提供的系统调用,程序员没必要编写直接控制硬件的程序。
    实例:文件是操作系统对磁盘媒介空间的抽象化。
3 Windows操作系统的特征
  1. 32位/64位操作系统:XX位表示处理数据的基本单位

  2. 通过 API 函数集来提供系统调用
    API:应用程序接口,是联系作成应用的程序员和操作系统之间的接口。
    API 函数的实体被存储在 DLL 文件中。

  3. 提供采用了 GUI 用户界面
    GUI:用户图形界面,可视化操作的用户界面。

  4. 通过 WYSIWYG 实现打印输出
    WYSIWYG(What you see is what you get):显示器上显示的内容可以直接通过打印机打印输出。

  5. 多任务功能
    Windows通过时钟分分割技术实现多任务功能:短时间间隔内,多个程序切换运行的方式。
    在这里插入图片描述

  6. 提供网络功能及数据库功能

    • 网络功能和数据库功能并不是操作系统本身不可欠缺的功能,但因为和操作系统联系密切,所以被统称为中间件(而不是应用)。
    • 操作系统 + 中间件 = 系统软件
      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bMxk3H4U-1665829381671)(https://sjtu.feishu.cn/space/api/box/stream/download/asynccode/?code=MTFhNjk3ZTZiY2Y3NDliZGU3ZTdlZDQ2ZjY0ZGY2MWJfc09MTzdiQ1hCZzZVSjRoS0JudUdmVDhrMk1GRXcxTzZfVG9rZW46Ym94Y25aVWZtR01HMWZPVm56dG16RXZDNDNiXzE2NjUxNTM1NDQ6MTY2NTE1NzE0NF9WNA)]
  7. 即插即用(Plug-and-play)实现设备驱动的自动设定
    即插即用:指的是新的设备连接(Plug)后立刻就可以使用(Play)的机制。
    设备连接到计算机后,系统会自动安装和设定用来控制该设备的设备驱动(Device Driver)程序。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值