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

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
可观测可视化 Grafana 版,10个用户账号 1个月
云原生网关 MSE Higress,422元/月
简介: 本文回顾了计算机语言与操作系统的起源,探讨了早期 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!")

相关文章
|
1月前
|
机器学习/深度学习 Devops TensorFlow
Python:简洁而强大的编程语言
Python:简洁而强大的编程语言
54 0
|
1月前
|
机器学习/深度学习 人工智能 数据挖掘
Python:简洁高效的编程语言
Python:简洁高效的编程语言
42 0
|
2月前
|
机器学习/深度学习 Rust Java
Python:简洁高效的万能编程语言
Python:简洁高效的万能编程语言
|
3月前
|
人工智能 测试技术 编译器
从 Python 演进探寻 AI 与云对编程语言的推动
Python 自 2008 年发布 3.0 版本以来,经历了持续演进与革新。十六年间,从 Python 3.0 到即将发布的 3.14,语言设计、性能优化、类库生态及虚拟机技术等方面均有显著提升。字符串处理、异步编程、类型系统等核心功能不断现代化,Faster CPython 和 JIT 编译技术推动运行效率飞跃。同时,AI、云计算等新兴技术成为其发展的重要驱动力。本文全面回顾了 Python 的演进历程,并展望未来发展方向。
130 2
|
6月前
|
人工智能 Python
[oeasy]python082_变量部分总结_variable_summary
本文介绍了变量的定义、声明、赋值及删除操作,以及Python中的命名规则和常见数据类型。通过示例讲解了字符串与整型的基本用法、类型转换方法和加法运算的区别。此外,还涉及异常处理(try-except)、模块导入(如math和random)及随机数生成等内容。最后总结了实验要点,包括捕获异常、进制转化、变量类型及其相互转换,并简述了编程中AI辅助的应用策略,强调明确目标、分步实施和逐步巩固的重要性。更多资源可在蓝桥、GitHub和Gitee获取。
245 97
|
3月前
|
人工智能 Java 测试技术
Java or Python?测试开发工程师如何选择合适的编程语言?
测试工程师如何选择编程语言?Java 还是 Python?多位资深专家分享建议:Python 入门简单、开发效率高,适合新手及自动化测试;Java 生态成熟,适合大型项目和平台开发。建议结合公司技术栈、个人基础及发展方向选择。长远来看,两者兼通更佳,同时关注 Go 等新兴语言。快速学习与实践才是关键。
|
6月前
|
人工智能 Python
[oeasy]python089_列表_删除列表项_remove_列表长度_len
本文介绍了Python列表(list)的操作方法,重点讲解了`remove`方法的使用。通过实例演示如何删除列表中的元素,探讨了`ValueError`异常产生的原因,并分析了时间复杂度O(n)的概念。同时提及了`clear`方法清空列表的功能及`len`函数获取列表长度的用法。最后以购物清单为例,展示列表的实际应用场景,并预告快速生成列表的方法将在后续内容中介绍。
202 62
|
5月前
|
存储 监控 安全
C语言与操作系统交互探秘
系统调用与库函数 在 C语言中,系统调用是用户程序与操作系统内核交互的桥梁。以下是常见系统调用的概述: 文件操作类:open()、read()、write()、close()、lseek() 进程控制类:fork()、exec()、wait()、exit() 信号处理类:signal()、kill() 进程间通信:pipe()、shmget()、msgget() 网络通信:socket()、bind()、listen()、accept() 系统调用 vs 库函数:
166 20
|
5月前
|
存储 索引 Python
[oeasy]python093_find方法_指数为负数_index_实际效果
本文介绍了Python中`find`方法与索引(index)的使用,包括负数索引的实际效果。回顾了`eval`函数的应用,并强调类名如`str`、`int`、`list`不可用作变量名以避免覆盖。通过示例解析了负数索引在字符串和列表中的作用,以及`index`方法的三个参数(value、start、stop)的用法。同时对比了`index`和`find`方法的区别:`index`找不到子串时抛出`ValueError`,而`find`返回-1。最后总结了正负索引的使用场景及两者的特性,提供了相关学习资源链接。
369 8
|
6月前
|
人工智能 索引 Python
[oeasy]python091_列表_索引_index_中括号_索引函数
本文介绍了Python中列表与字符串的索引及index函数用法。通过range生成列表,使用索引[]访问和修改列表元素,index函数查找元素位置。字符串支持索引访问但不可直接修改。还探讨了16进制数在Python中的表示方法,以及日期、月份等特殊字符的Unicode范围。最后总结了列表与字符串操作的区别,并预告后续内容,提供蓝桥云课、GitHub和Gitee链接供进一步学习。
167 20