手把手带你写一门编程语言
宫文学
北京原点代码 CEO
7534 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 49 讲
起步篇:让一门超简单的语言跑起来 (21讲)
结束语 (1讲)
手把手带你写一门编程语言
15
15
1.0x
00:00/00:00
登录|注册

13|物理机上程序运行的软件环境是怎么样的?

你好,我是宫文学。
上一节课,我们主要讨论了程序运行的硬件环境。在某些编程场景下(比如嵌入式编程),我们的语言需要直接跑在裸设备上。所以,你要能够理解在裸设备上运行某个语言的程序所需要的技术。
不过,现代语言大部分情况下都运行在某个操作系统里,操作系统为语言提供了基础的运行环境,比如定义了可执行文件的格式、程序在内存中的布局、内存管理机制,还有并发机制等等。计算机语言需要跟操作系统紧密配合,才能更好地运行。
今天这节课,我们就来讨论一下操作系统中与计算机语言有关的那些知识点,包括内存管理、任务管理和 ABI,为进一步实现我们的计算机语言打下良好的基础。
首先我们来看看操作系统的内存管理功能和程序的关系。

内存管理

操作系统的一个重要功能就是管理内存,它会把内存虚拟化,并进行内存访问的权限管理。
那什么是虚拟化呢?
虚拟化就是让每个进程都有一个自己可以用的寻址空间,不过这些地址是假的地址。但就这些假地址,我们通过指令发给 CPU,CPU 也是认的。因为 CPU 中有一个内存管理单元,缩写是 MMU,它能够根据这个逻辑地址,计算出在内存里真实的物理地址。MMU 还可以跟操作系统配合,设置每个内存页面的权限,包括是否可读、可写和可执行。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文深入探讨了在物理机上运行程序的软件环境构建,重点关注了操作系统中与计算机语言相关的知识点。首先介绍了操作系统的内存管理功能,包括虚拟化机制、内存访问权限管理以及栈和堆的内存分配机制。通过一个C语言程序的内存布局示例,详细解释了可执行程序在内存中的布局情况,以及不同操作系统中各个部分的具体地址差异。此外,还探讨了不同语言对内存布局的灵活运用,特别是即时编译能力的语言如Java和JavaScript。文章还展示了如何加载并运行机器码,以及如何将机器码视为函数来执行,从而展示了代码和数据在计算机中的相似性。总体而言,本文以深入浅出的方式,为读者提供了对程序在物理机上运行的软件环境相关基础知识的全面了解。 在任务管理方面,文章介绍了多任务处理的相关内容,包括硬件支持、操作系统的并发调度机制以及语言层面的并发机制。同时,还强调了操作系统的重要作用,为程序提供内存管理和任务管理的支持。此外,还提及了ABI(Application Binary Interface)的重要性,指出了操作系统提供的二进制接口规范对程序运行的软件环境具有重要意义。 总的来说,本文通过深入讨论操作系统与程序运行的关系,以及在设计语言时如何充分利用操作系统提供的能力,为读者呈现了程序在物理机上运行的软件环境相关基础知识,同时强调了操作系统在内存管理和任务管理方面的重要作用,以及ABI规范对程序运行的重要性。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《手把手带你写一门编程语言》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(3)

  • 最新
  • 精选
  • 大豆
    如果没有操作系统,那么。 1、虚拟化内存及虚拟化cpu将不存在,开发难度大大增加,出错概率也大大增加。 2、io效率大大降低。 3、直接操作硬件会带来更多的安全风险。 4、由于无法使用高级编程语言,开发效率会降低(这个不是很确认,哈哈哈)。

    作者回复: 感谢分享,很好!

    2021-09-07
    1
  • 罗 乾 林
    没有操作系统环境下: 1、程序编译时需要指定程序链接时的地址布局 2、运行时需要将程序加载到对应的物理地址再从指定地址运行

    作者回复: 很好!

    2021-09-06
    1
  • ifelse
    学习打卡
    2022-09-15归属地:浙江
收起评论
显示
设置
留言
3
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部