[oeasy]python0033_先有操作系统还是先有编程语言_c语言是怎么来的

本文涉及的产品
任务调度 XXL-JOB 版免费试用,400 元额度,开发版规格
函数计算FC,每月15万CU 3个月
Serverless 应用引擎免费试用套餐包,4320000 CU,有效期3个月
简介: 本文回顾了计算机语言与操作系统的起源,探讨了早期 Unix 操作系统及其与 C 语言的相互促进发展。Unix 最初用汇编语言编写,运行在 PDP-7 上,后来 Thompson 和 Ritchie 开发了 C 语言及编译器,使 Unix 重写并成功编译。1974 年 Ritchie 发表论文,Unix 开始被学术界关注,并逐渐普及。伯克利分校也在此过程中发挥了重要作用,推动了 Unix 和 C 语言的广泛传播。

[趣味拓展]计算机语言起源_c语言诞生 🥋

回忆上次内容

  • 上次了解了两个包

|包名|含义|作用|

|time|时间|愣1秒|

|os|操作系统|执行shell命令|

  • 但是有个疑问
  • os(操作系统)
  • 是 用什么语言写 的?🤔
  • 写os这个语言
  • 运行在什么系统之上呢?🤔

从裸金属

  • 以前的软件
  • 直接运行在裸金属上
  • Bare Metal

  • 先有的 编程语言 还是 操作系统?🤔
  • unix这个系统 是用什么编程语言 写的呢?🤔
  • 这编程语言 是运行在 什么系统上的呢? 🤔

共同演化

  • 这事情
  • 互为因果
  • 无始无终

  • 最早的 操作系统unix 是
  • 用 cpu的指令(汇编语言) 写的

源头

  • 开发 unix 的目的 是
  • 为了 能玩star travel

现状

  • 但是 只有一台PDP-7

升级

  • 实验室管理层
  • 需要 处理大量的专利文书
  • Thompson 洞悉到管理层需求
  • 以制作一个专利文书管理系统的名义
  • 申请购买一台 PDP-11

  • 很快的
  • 他们把unix移植到了PDP-11上
  • 这台PDP-11 配置有多强呢?

PDP-11配置

  • PDP-11配置
  • 24KB的物理内存
  • 500K 磁盘空间

  • 最初的unix系统 是用 汇编语言 写的
  • 需要记忆 大量和cpu架构相关的 指令
  • 怎么让 unix系统 更通用 呢?

c语言

  • Thompson  和 Ritchie
  • 创造了 一种高级编程语言
  • High Level Programming Language
  • c语言
  • 还有 c语言的 编译器

  • 目的是
  • 不用再记 复杂的 汇编指令
  • 用类似 人类的语言来 编程
  • 编完了 交给编译器
  • unix版权算谁的?

商业

  • unix 最初是 Thompson 的个人项目
  • Thompsom 是 贝尔实验室 的员工
  • 用的是 实验室的设备
  • 版权会跟着 Thompson个人走吗?
  • 就像 python 跟着 Guido

  • AT&T 被诉垄断禁止进入计算机行业
  • unix没有商业化的可能
  • 更何况 人们对于操作系统
  • 根本没有认知
  • 更别说购买了
  • 版权 这个事
  • AT&T的管理层也没有想到
  • 这并不影响
  • unix自身的进化

合体

  • 1969年
  • cunix 运行 PDP-11 上
  • 没有 文档
  • 没有 书籍
  • 甚至 没有人 知道

  • 1973
  • Unix version 4 是
  • 用c语言 重写了 unix
  • 并且编译成功
  • 此后
  • cunix 共同进化

认知

  • Ritchie 于1974年7月
  • the Communications of the ACM发表
  • 《The UNIX Time Sharing System》

开始被引用

  • 结果引起了学术界的广泛兴趣
  • 并对其源码索取

  • 原来还有一种叫做操作系统的软件
  • 于是大学的计算机系
  • 发现 计算机可以安装一种叫操作系统的软件
  • 开始有了一门叫做《操作系统》的课程

进阶

  • Unix第五版就以“仅用于教育目的”的协议
  • 提供给各大学教学用
  • 成为当时操作系统课程中的范例教材

  • 各大学公司开始玩Unix源码
  • 进行了各种各样的改进和扩展
  • Unix开始广泛流行

伯克利

  • 1975的秋天
  • Thompson 休了一个长假
  • 回到了母校加州大学伯克利分校
  • 开设了一门Unix课程

  • 不仅讲解理论
  • 晚上还带着大家
  • 一行行阅读Unix内核代码
  • 解释为什么这么做
  • 最早的系统unix和编程语言c
  • 就在此时 扩散开来
  • 伯克利 也超越贝尔实验室
  • 成为技术的新引擎

从无到有

  • unix 伴随着 c语言
  • 从无到有

  • 这两个贝尔实验室的打工人
  • 也成为这个新领域的明星

硬件

  • PDP 系列小型机
  • 伴随着unix 最初的岁月
  • 操作系统当时属于新鲜事物
  • Bell 实验室从来没想过
  • 卖操作系统
  • AT&T的垄断禁令
  • 给了 unix 商业化
  • 第二重的 封印

  • 伯克利 发行版(BSD)
  • 作为最先进的变种
  • 慢慢抢过unix风头
  • 逐渐主流化
  • AT&T 和 贝尔实验室
  • 也快坐不住了

总结

  • 这次 了解到 c语言登场
  • 在unix 制作出了c语言编译器
  • 使用这个编译器
  • 编译了 c语言的c编译器
  • 完成自举
  • 使用这个编译器
  • 重写并编译了unix
  • 并且启动成功
  • 不过
  • 计算机里面
  • 不都是 0和1 吗

  • hello中的 字母h 是从哪里来的呢?🤔?

print("hello world!")

相关文章
|
3月前
|
人工智能 Python
[oeasy]python082_变量部分总结_variable_summary
本文介绍了变量的定义、声明、赋值及删除操作,以及Python中的命名规则和常见数据类型。通过示例讲解了字符串与整型的基本用法、类型转换方法和加法运算的区别。此外,还涉及异常处理(try-except)、模块导入(如math和random)及随机数生成等内容。最后总结了实验要点,包括捕获异常、进制转化、变量类型及其相互转换,并简述了编程中AI辅助的应用策略,强调明确目标、分步实施和逐步巩固的重要性。更多资源可在蓝桥、GitHub和Gitee获取。
195 97
|
3月前
|
人工智能 Python
[oeasy]python089_列表_删除列表项_remove_列表长度_len
本文介绍了Python列表(list)的操作方法,重点讲解了`remove`方法的使用。通过实例演示如何删除列表中的元素,探讨了`ValueError`异常产生的原因,并分析了时间复杂度O(n)的概念。同时提及了`clear`方法清空列表的功能及`len`函数获取列表长度的用法。最后以购物清单为例,展示列表的实际应用场景,并预告快速生成列表的方法将在后续内容中介绍。
151 62
|
2月前
|
存储 监控 安全
C语言与操作系统交互探秘
系统调用与库函数 在 C语言中,系统调用是用户程序与操作系统内核交互的桥梁。以下是常见系统调用的概述: 文件操作类:open()、read()、write()、close()、lseek() 进程控制类:fork()、exec()、wait()、exit() 信号处理类:signal()、kill() 进程间通信:pipe()、shmget()、msgget() 网络通信:socket()、bind()、listen()、accept() 系统调用 vs 库函数:
86 20
|
2月前
|
存储 索引 Python
[oeasy]python093_find方法_指数为负数_index_实际效果
本文介绍了Python中`find`方法与索引(index)的使用,包括负数索引的实际效果。回顾了`eval`函数的应用,并强调类名如`str`、`int`、`list`不可用作变量名以避免覆盖。通过示例解析了负数索引在字符串和列表中的作用,以及`index`方法的三个参数(value、start、stop)的用法。同时对比了`index`和`find`方法的区别:`index`找不到子串时抛出`ValueError`,而`find`返回-1。最后总结了正负索引的使用场景及两者的特性,提供了相关学习资源链接。
308 8
|
3月前
|
人工智能 索引 Python
[oeasy]python091_列表_索引_index_中括号_索引函数
本文介绍了Python中列表与字符串的索引及index函数用法。通过range生成列表,使用索引[]访问和修改列表元素,index函数查找元素位置。字符串支持索引访问但不可直接修改。还探讨了16进制数在Python中的表示方法,以及日期、月份等特殊字符的Unicode范围。最后总结了列表与字符串操作的区别,并预告后续内容,提供蓝桥云课、GitHub和Gitee链接供进一步学习。
84 20
|
3月前
|
Python 容器
[oeasy]python090_列表_构造_范围_range_start_end_step_步长
本文介绍了Python中列表的生成方法,重点讲解了`range()`函数的使用。通过`range(start, stop, step)`可生成一系列整数,支持正负步长,但不支持小数参数。文章从基础的列表追加、直接赋值到复杂的应用场景(如生成等宽字体的月份列表),结合实例演示了`range()`的灵活性与实用性。最后总结了`range()`的关键特性:前闭后开、支持负数步长,并提供了进一步学习的资源链接。
121 15
|
3月前
|
Python
[oeasy]python086方法_method_函数_function_区别
本文详细解析了Python中方法(method)与函数(function)的区别。通过回顾列表操作如`append`,以及随机模块的使用,介绍了方法作为类的成员需要通过实例调用的特点。对比内建函数如`print`和`input`,它们无需对象即可直接调用。总结指出方法需基于对象调用且包含`self`参数,而函数独立存在无需`self`。最后提供了学习资源链接,方便进一步探索。
87 17
|
4月前
|
人工智能 Java 数据安全/隐私保护
[oeasy]python081_ai编程最佳实践_ai辅助编程_提出要求_解决问题
本文介绍了如何利用AI辅助编程解决实际问题,以猫屎咖啡的购买为例,逐步实现将购买斤数换算成人民币金额的功能。文章强调了与AI协作时的三个要点:1) 去除无关信息,聚焦目标;2) 将复杂任务拆解为小步骤,逐步完成;3) 巩固已有成果后再推进。最终代码实现了输入验证、单位转换和价格计算,并保留两位小数。总结指出,在AI时代,人类负责明确目标、拆分任务和确认结果,AI则负责生成代码、解释含义和提供优化建议,编程不会被取代,而是会更广泛地融入各领域。
137 28
|
3月前
|
索引 Python
[oeasy]python092_eval_衡量_转化为列表
本文探讨了 Python 中 `eval` 函数的用法及其与字符串和列表之间的转换关系。通过实例分析,展示了如何使用 `eval` 将字符串转化为对应的数据类型,例如将表示列表的字符串转回列表。同时,文章深入讲解了 `eval` 的工作机制,包括根据本地和全局变量对字符串进行计算的能力。此外,还提醒了命名变量时需避免覆盖内置类名(如 `str`、`int`、`list`)的重要性,以免影响程序正常运行。最后,简要提及字符串和列表索引中负数的应用,并为读者提供了进一步学习的资源链接。
75 2
|
3月前
|
人工智能 Python
[oeasy]python088_列表_清空列表_clear
本文介绍了Python中列表的清空方法`clear`。通过实例讲解了`clear`与将列表赋值为空列表的区别,前者会清空原列表内容,而后者创建新空列表,不影响原列表。文中以收银程序为例,展示了`clear`的实际应用场景,并通过地址观察解释了两者的机制差异。最后总结了相关术语如`list`、`append`、`clear`等,帮助理解列表操作及方法调用的概念。
76 6