Lesson07 PoEdu培训第一课 计算机科学篇(7) 软件和硬件
文章类别: 培训笔记 0 评论

Lesson07 PoEdu培训第一课 计算机科学篇(7) 软件和硬件

文章类别: 培训笔记 0 评论

软件与硬件

    "不得不说的秘密"

软件的重要性

    电脑的本质, 就是一堆IC的组合体, 通过各种电信号来进行简单的操作.
    为什么我们觉得电脑如此厉害?
    下棋都能赢世界冠军?

那是因为, 电脑是通过程序来进化的.

Alt 软件的重要性

软件的运行

    我们都知道, 程序指令都是由 CPU 来执行的. 
    但是, 却是由我们的应用程序本身的汇编代码来告诉CPU, 你应该怎么执行的
    我们的CPU是顺序执行我们的指令代码的

CPU的执行是由我们的软件来控制的.

软件, 操作系统, 硬件

Alt 软硬操作系统

软件与操作系统

    不多说, 软件就是操作系统能够识别的可执行程序.
    可执行程序是编译+链接生成的.
    可执行程序通过调用系统提供的API来实现功能.

操作系统与硬件

    操作系统和硬件之间通过 in 和 out 指令来进行交换数据

指令:

in [寄存器], [端口号]

out [端口号], [寄存器]

扩展阅读: 汇编指令

端口

    我们想查看端口, 可以打开"设备管理器", 选择一个硬件, 比如显卡, 选择"资源"选项卡
    其中有 "I/O范围"
    这就是我们的"端口".

Alt 端口

    "端口"可以理解为由系操作系统自动管理的, 给硬件分配的唯一的一个编号.
    也可以理解为"内存地址".

"端口"是用来读/写的.

IO控制器

    每个硬件的电流特征不一样, 我们应该怎么办呢?

在主板中, 我们通过IO控制器来管理和使用我们的硬件.

有很多硬件怎么办?

通过中断轮训机制, 我们可以对很多硬件进行通讯.

中断

    什么是中断?

中断是指当出现需要时,CPU暂时停止当前程序的执行转而执行处理新情况的程序和执行过程.

    我们想查看中断, 可以打开"设备管理器", 选择一个硬件, 比如显卡, 选择"资源"选项卡
    其中有 "IRQ".
    它是用来发送中断请求的.

中断控制器

    我有很多硬件, 它们应该是同时工作的.
    但是, 每个IO管理器都向CPU发送中断信号, CPU如果一直被一个硬件占据中断, 就不能正常的进行响应.
    为了同时处理多个中断,在IO控制器和CPU之间, 加了中断控制器.

中断控制器可以接收很多中断信号, 然后一个一个顺序的发送给CPU.

配合CPU的轮询机制, 就可以完美的使多个硬件进行同时工作.

硬件运行图

    | IO控制器 | IO控制器 | IO控制器 | IO控制器 | IO控制器 | IO控制器 |
        |___________|__________|_________|_________|__________|
                                    |
                                    |
                                    |  同时发送中断信号 
                                    |
                                   \|/
                        --------------------------
                        +       中断管理器        +
                        --------------------------
                                    |
                                    |
                                    |  顺序, 单一的给CPU发送中断信号 
                                    |
                                   \|/
                        --------------------------
                        +       CPU处理中断       +
                        +       CPU进行轮询       +
                        --------------------------

CPU在接到中断信号后, 首先对CPU当前寄存器的信息进行保存.

保存完成后, 在进行中断的处理.

中断处理完成后, 恢复保存的信息, 继续往下执行.

DMA

Direct Memory Access, 直接内存存取

    我们如果要从硬盘中取一部分数据进入内存, 需要进行什么步骤?

    根据我们前面学习的知识, 它应该是这样的.
    1. CPU给硬盘发送指令, 通知硬盘取数据 
    2. 硬盘取好之后发送中断信号给CPU
    3. CPU进行数据读取和存放.
    4. CPU联系内存, 往内存写数据.
    5. 内存准备好了, 发起中断信号给CPU.
    6. CPU在将数据存入内存.
    当然,步骤经过了简化, 读数据和写数据不知道要多少中断信号..

DMA, 允许不通过CPU, 直接将数据存储至内存中.

    这样做可以大幅度减少因等待IO设备造成的大量中断负载.

VRAM

Video Random Access Memory, 显存, 帧存储器, 刷新存储器

    我们将"数据"写入VRAM, 系统就能对这部分"数据"进行显示.
    
    最开始的时候, 没有专门的VRAM, 就是直接在内存中, 专门划出一块空间来当这个东西.

    而我们现在有了显卡, 显卡自带了显存和GPU.
    VRAM和图形显示计算都转移到了显卡中, 又降低了CPU的计算量.
    让我们的电脑更加流畅, 并且得到更好更绚丽的展现效果.

程序进化

    程序可以大致分为两种:
        工具类, 比如我们的办公软件等.
        会"思考"的程序类, 比如我们的导航软件等.

会"思考"的程序

    现在的人工智能什么的, 都是会思考的程序.
    我们进行一下最本质的理解,
    为什么我们的程序会"思考"?

记忆功能 + 概率/上下文/场景...分析 = 会"思考", "智能化"的软件.

举个栗子: 猜拳游戏

    这不是错别字, 请不要纠正我.....

第一版设计

    软件固定出石头.

第二版设计

    随机出剪刀, 石头, 布, 使用rand...

第三版设计

    在第二版的基础上, 增加记忆功能, 记录对手和对手每次的出手结果.

第四版设计

    增加分析模块, 分析出对手能赢的最高概率的结果
        前XX次, 程序随机出剪刀, 石头, 布, 并记录对手出手结果.
        完成XX次后, 进行概率分析, 分析对手赢的最多的出手结果, 然后针对对手, 在能够赢你的手势中随机出手.

第五版设计

    在第四版的基础上, 在新增多种分析.
        比如在对手赢了之后出的概率最高的手势.
        比如通常在多少次的时候, 对手会出什么手势.
        比如在对手输了之后, 喜欢出什么样的手势.
        ....
    通过这些分析, 我们的软件是不是越来越智能?

算法是为了让程序能够更好的记忆, 更全面, 更复杂, 更加多元化的分析.

智能化的软件核心并不是算法

但是算法会让程序更会思考, 更快的思考, 更牛逼的智能.

如有错误,请提出指正!谢谢.

回复