xym-ee
  • 计算机与嵌入式开发学习
  • 1-1.编程基础
    • C 语言
      • C 中的数据
      • C 语言基础
      • 字符输入输出
      • 函数
      • 数组和指针
      • 字符串处理
      • 存储类别
      • 文件 I/O
      • 复杂数据类型
      • 位操作
      • 预处理和 C 库
    • 数据结构和算法入门
    • leetcode 刷算法题
      • 递归与栈
      • 二叉树与递归
      • 回溯问题
      • 动态规划 1
    • 基本工具和使用
      • shell
      • shell 脚本
      • vim 编辑器
      • 命令行数据整理
      • 命令行环境和配置
  • 1-2.计算机系统基础(CSAPP)
    • 1.计算机基础
    • 2.数据的表示
    • 3.加减运算
    • 4.乘除运算
    • 5.程序的表示转换和链接
    • 6.IA32指令
    • 7.过程调用
    • 10.程序的链接
  • 1-3.数字电路、计算机组成
    • 1.数字电路、virtual circuit board
    • 2.计算机组成/steam:Turing Complete
    • 3.微机原理与接口技术(8086)
  • 1-4.计算机网络
    • 1.从浏览器开始
    • 2.协议栈和网卡
    • 3.网络设备
    • 4.运营商、接入网
    • 5.服务器
    • 6.数据返回浏览器
    • socket编程
  • 1-5.操作系统
    • 0.绪论
      • 1.应用视角的操作系统
      • 2.硬件视角的操作系统
      • 3.数学视角的操作系统
      • 4.状态机模型的应用
    • 1.并发
      • 1.并发 bug 的解决思路
      • 2.互斥
      • 3.同步
      • 4.信号量
      • 5.真实并发
      • 6.调试技巧
      • 7.os kernel 实现
    • 2.虚拟化
      • 1.操作系统上的进程
      • 2.进程的地址空间
      • 3.系统调用和unix shell
      • 4.C 标准库的实现
      • 5.linux 操作系统
      • 6.可执行文件和加载
      • 7.动态链接和加载
      • 8.内核的实现
      • 9.fork 的应用
    • 3.持久化
      • 1.存储设备的原理
      • 2.输入输出设备模型
      • 3.设备驱动程序
      • 4.文件系统 API
      • 5.fat 和 unix 文件系统
      • 6.持久数据的可靠性
    • 总结
  • 2-1.嵌入式裸机开发
    • 嵌入式系统通信接口与协议
    • cortex-m 内核芯片裸机开发
    • MPU
  • 2-2.中等规模系统开发
    • LVGL 图形库
    • 裸机开发的软件框架
    • 基于 rtos 开发
  • 2-3.armv7-m架构与 rtos 原理
    • armv7-m 架构
    • rt-thread 内核实现
    • rt-thread 驱动开发
  • 3-1.linux 应用开发基础
  • 3-2.linux 镜像构建
    • uboot 使用
    • uboot 适配
    • uboot 启动分析
    • uboot 自定义命令
    • linux 内核适配
    • linux 内核启动分析
    • busybox 根文件系统构建
  • 3-3.linux 驱动开发
    • 驱动开发基础
    • sysfs
    • led 驱动
    • 设备树
    • pinctrl 和 gpio 子系统
    • 并发控制
由 GitBook 提供支持
在本页
  • 数字电路
  • 编程语言和算法

这有帮助吗?

  1. 1-5.操作系统

总结

对于计算机系统的一个总结:从逻辑门到计算机

数字电路

操作系统的故事是从数字电路开始的,数字电路的课程回答一个问题:所有的计算机系统的一切都是从逻辑门构造出来的。

第一个有趣的例子,数字电路模拟器,用一段非常简单的代码,实现一个数码管。不仅仅去模拟一个电路,把模拟电路的结果和模拟外设的程序连接起来,实现非常有趣的效果。

数码管的例子,展示了 unix 哲学和“编程”的力量。如果实现一个模拟器,是一个非常有意思的事情。

数字电路这门课,就是去定义一个状态机,组合逻辑电路,每个时钟来的时候,切换下一个状态。

一切计算机系统的故事从数字系统开始。

编程语言和算法

在学习计算机系统的时候,并不是学习电路如何一层一层搭建到整个计算机,这太复杂了。

学习计算机的路线,是从编程开始的,即学习怎么和计算机打交道,把我们想的东西告诉计算机。

操作系统这门课给了编程的不一样的视角,。

编程想的是函数、分支循环、把物理世界的某个东西投射到计算机。

程序就是个状态机,C 程序的状态,gdb 调试的每一小步就是一个状态的迁移。

非递归的汉诺塔给的启示:程序是有状态的,我们可以用程序模拟出状态。

这个东西为什么要在操作系统课讲呢?操作系统连接了软件和硬件。电路级的东西太底层了,往上抽象一层,体系结构,ISA,屏蔽了相当多的电路细节。

ISA 抽象给了内存和寄存器的抽象,给了指令集,ISA 是可以用电路来实现的。有了 ISA 的抽象,就可以把程序和指令联系起来了,这里就有了编译器。编译器也是一个程序,把高级语言描述的状态机翻译成低级语言描述的状态机。

如果学习体系结构的话,可以尝试一下 RISC-V,既容易用电路实现,有足够支撑状态机运行。

理解好状态机模型,从高级语言状态机到低级语言状态机。

然后,操作系统就是状态机的管理者。

操作系统自己会有一些状态,然后他会管理其他状态机。

上一页6.持久数据的可靠性下一页2-1.嵌入式裸机开发

最后更新于10个月前

这有帮助吗?