自我介绍与学习记录

这个作业属于哪个课程 https://edu.cnblogs.com/campus/fzzcxy/2023learning
这个作业要求在哪里 https://edu.cnblogs.com/campus/fzzcxy/2023learning/homework/12898
这个作业的目标 先了解计算机基础知识,为以后学习打下基础

自我介绍

大家好,我叫葛苏林,来自江苏徐州,性格较为外向,爱好就是听音乐,在学校时也会偶尔去跑步

我原专业为食品科学与工程,做的唯一好的地方便是把每一个课程都认真对待,全部科目都及格了;做的不好的地方便是重要的科目,如高数、英语、PYTHON没有考到高分。

目前学的计算机知识就只有上学期学的PYTHON与计算机导论课中的内容

在这个寒假以及之后的一个学期,我会认真跟上计算机系的脚步,主动预习下学期要学的内容,如c语言等。

转入计算机专业原因如下:1.原专业就业不适合于徐州,在徐州找不到较好的岗位 2.计算机应用普及范围更广,岗位更多,薪资也更可观 3.代码不会骗人

对于未来的就业,我想应该学校的内容应该是远远不够的,而目前来看当一个普通程序员虽然赚的多,但是难免有中年危机;算法岗位又太卷,本人竞争力不够;目前市场上较好找工作的就是嵌入式工程师,学c++、c#。

电子计算机

  • 生产半导体最常见的材料是硅

布尔逻辑和逻辑门

  • 二进制也可以写成1和0,true或false,只是不同的表达方式罢了。

  • 用二进制的原因:

  1. 避免用电器相互干扰
  2. 有一整个数学分支存在,专门处理“真”和“假”
  • 可以像水龙头一样,把控制线当做输入(input),底部的电极当做输出(output),所以1个晶体管,有一个输入和一个输出,如果打开输入(input on),输出也会打开(output on),因为电流可以流过;如果关闭输入(input off),输出也会关闭(output off),因为电流无法通过。

  • 用not时:

  • 用and时(有2个输入,1个输出):

  • 用or时:

  • xor(与or不同):

(xor:两个输入一样时,输出为false;两个输入不同时,输出为true。)

二进制

  • 非整数,如12.7和3.14,这叫“浮点数”,因为小数点可以在数字间浮动。有好几种方法来表示浮点数,如:IEEE 754标准(类似于科学计数法)

  • 计算机可以用数字表示字母,如ASCII

(“a”是97,“A”是65,“:”是58,“)”是41)

  • unicode————统一所有编码的标准,解决了不同国家不同标准的问题,用一个统一编码方案,最常见的是16位的,有超过一百万个位置。

逻辑运算单元

  • 有三个输入:A,B,C(都是1bit).

  • 溢出:指两个数字的和太大了,超过了用来表示的位数,会导致错误。

  • 计算机的“算术逻辑单元”:ALU,是计算机的数学大脑。

  • ALU有两个单元:1个算术单元和1个逻辑单元。

算术单元:负责计算机里所有数字操作。

逻辑单元:执行逻辑操作

  • 半加器:由XOR和AND两个逻辑门构成

有两个输入:A和B都是1位;两个输出:“总和”和“进位”。

  • 用两个半加器做一个全加器:

全加器相当于是计算3个位(A、B、C)的和。因此,进位输出的规律为:3个数中如果有2个或者以上的数为1时,“进位”位就为1。或的运算规则是有一个1,结果就是1

  • 8位行波进位加法器:

(最后一个全加器有“进位”的输出)

  • 8位ALU像一个“V”

寄存器&内存

  • AND-OR锁存器

如果“设置”和“复位”都是0,电路会输出最后放入的内容,存住1位的信息。

  • 8位寄存器:

用一根线链接所有“允许输入线”,将其设为1,然后用8条线发数据,再将“允许写入线”设为0,8位的值就存起来了。

  • 在矩阵中,可以解决数据线过多的问题

要启用某个锁存器,就打开相应的行线,列线和允许写入线(门锁),用and选择一个锁存器,三个线都是1,每次只有一个锁存器会这样,这时候就可以只用一根数据线连所有锁存器传数据,但只有一个锁存器会启动,只有这个会存数据。其他锁存器会忽略数据线上的值,因为没有“允许写入”,用类似技巧,在一个锁存器上做“允许读取线”来存数据。

  • 对于256位的存储,只要35条线:1条数据线,1条允许写入线,1条允许读取线,和16行16列的线(16+16)用于选择一个锁存器。(在矩阵的情况下)

  • 内存:有8位地址(4个代表列,4个代表行),有允许写入线和允许读取线,和一条数据线(用来读/写数据)。就像人类的短期记忆,记录当前在做什么事。

指令和程序

  • 可以给cpu支持的所有指令分配一个ID,用前四位存操作代码(opcode),后四位可以来自寄存器或内存地址。

还需要两个寄存器来完成cpu:

  1. 指令地址寄存器:一个寄存器追踪程序运行到哪里了,存当前指令 的内存地址。
  2. 指令寄存器:存当前指令。
  • 取指令阶段:

将指令地址寄存器连到内存,寄存器值为0,因此内存返回地址0的值,原来的数据(00101110)会复制到指令寄存器中

  • 解码阶段:

    前四位(0010)是LOAD A指令:把RAM的值放入寄存器A。

    后四位(1110)是RAM地址,转成十进制是14。

接下来,指令由”控制单元“解码,要一个电路来检查操作码是不是0010.

  • 执行阶段:

用检查是否为LOAD A 指令的电路,可以打开RAM的允许读取线,把地址14(1110)传过去。RAM拿到值,14对应着0000 0011,十进制的3,把这个值只放到寄存器A,其他寄存器不受影响,所以用一根线把RAM连到4个寄存器,用检查是否为LOAD A 指令电路,启用寄存器A的允许写入线,将RAM地址14(1110)的值,放入寄存器A。

指令完成之后,可以关掉所有线路,去拿下一条指令,把指令地址寄存器+1,执行阶段就此结束。

  • 时钟:以精确的间隔,触发电信号,控制单元用这个信号,推进CPU的内部操作。

可以通过调高或调低始终频率来实现超频或降频。

  • 内存的四个指令:

  1. LOAD_A:从内存的地址14中拿到数字X,放入寄存器A
  2. LOAD_B:从内存的地址15中拿到数字X,放入寄存器B
  3. LOAD_A:告诉ALU,把寄存器B和寄存器A数字加起来,结果存在第二个寄存器
  • 还存在其他的指令:

4.SUB:减法,和add一样要2个寄存器来操作。

  1. JUMP:跳转到新位置 (JUMP 0可直接跳回开头)

  2. JUMP_NEG:在ALU负数标志为真时,进行JUMP。

  3. HALT:停止(以防CPU处理内存中的0时电脑崩掉,因为0不是操作码)

高级CPU设计

  • CPU中存在缓存(cache), RAM向CPU传数据时不用传一个,可以传一批,数据可以存在于缓存中。

有时缓存和RAM不一致,必须记录下以后要同步,因此缓存里每块空间有一个特殊标记叫脏位

当缓存满了而CPU又要缓存时,清理缓存之前,会先检查脏位,如果是“脏”的,在加载新内容之前,会把数据写回RAM。

  • 指令流水线:

采用“并行处理”进一步提高效率,不同任务重叠进行,同时用上CPU里所有部分。(要先弄清数据依赖性)

部分CPU会使用“推测执行”:等待JUMP指令时会提前把指令放进流水线。

集成电路&摩尔定律

  • 晶体管标志着“计算2.0时代”的到来

  • PCB:可大规模生产,无需焊接或用一大堆线,通过蚀刻金属线的方式,把零件连接到一起。

  1. 硅是做晶体管的绝佳材料,可用晶圆做基础,把复杂金属电路放上去,集成所有东西。
  2. 在硅片顶部加一层薄薄的氧化层,作为保护层,加一层光刻胶,其被光照射后会变得可溶,可洗掉,和“光掩模”配合使用很强大
  3. 将光掩模盖到晶圆上,用强光照射,挡住光的地方光刻胶不会变化,光照到的地方,光刻胶会发生变化,洗掉之后暴露出氧化层。
  4. 用另外一种酸,可洗掉“氧化层”露出的部分,蚀刻到硅层
  5. 用掺杂来影响暴露出的硅,改变电学性质。
  • 摩尔定律:集成电路上可以容纳的晶体管数目在大约每经过18个月到24个月便会增加一倍。

早期的编程方式

  • 约瑟夫 玛丽 雅卡尔发明了可编程纺织机,每一行的图案由可穿孔纸卡决定。
  • 穿孔纸卡用于1890年美国人口普查。
  • 面板编程

编程语言发展史

  • 汇编器:读取用“汇编语言”写的程序,转成“机器码”
  • 编译器:专门把高级语言转为低级语言,比如汇编或机器码

编程原理-语句和函数

控制流语句的程序的执行顺序要更加灵活。

if:像岔路口,走哪条路取决于表达式的真假,表达式又叫条件语句

while:当while条件为真时,代码会重复执行

for:不判断条件,判断次数,会循环特定次数

算法入门

  • 归并排序:
  1. 原有8个数组,检查数组大小是否>1,如果是,把数组分为两半,但依然大于1,再分成大小是2的数组,最后变成8个数组,每个大小为1,现在可以归并了。
  2. 从前两个数组开始,读第一个值,把小的放前面,大的放第二位,成功合并了两个数组。
  3. 重复这个过程,按序排列,多归并几次。

归并排序的算法复杂度是O(nlog n),n是需要 比较+合并 的次数,和数组大小成正比。*

  • Dijkstra:总是从成本最低的节点开始

数据结构

  • 下标是从0开始计算的,下标5是数组中第6个数
  • 字符串:由字母,数字,标点符号等 组成的数组
  • strcat:接收两个字符串,把第二个放到第一个结尾
  • 结构体:多个变量打包在一起,存结构体的数组,和其他数组一样,创建时有固定大小,不能动态增加大小
  • 节点:存在一个变量, 一个指针,指针:一种特殊变量,指向一个内存地址。用节点可以做链表,是一种灵活数据结构,能存很多个节点,灵活性是通过每个节点指向下一个节点实现的

如果节点改成2个指针,就能做,最高的节点叫根节点,根节点下所有节点都叫子节点,任何子节点的直属上层节点叫母节点,没有任何子节点的节点,叫叶节点,这样的节点最多只可以有2个子节点,因此叫二叉树

阿兰 图灵

  • 发明了简单又强大的数学计算模型

  • 证明了计算是有极限的,起步了可计算性理论

  • 创造出Bombe,大幅减少了搜索量,有利于破译人员,对二战的胜利有重要作用

软件工程

  • 代码太多:把函数打包成层级,把相关代码放一起,打包成对象(objects)

  • API:程序编程接口

面向对象的编程语言可指定函数是public或private,来设置权限

  • IDE:集成了很多有用功能帮助写代码,整理,编译和测代码,叫集成开发环境

写代码别忘写注释

学习心得

从硬件到软件,从基础到成品的应用,我不得不感叹于人类的伟大智慧,目前对于计算机历史与硬件基础有了些许了解,对于日后的学习过程中肯定也多了一些理解。

评论区阅读心得

评论区大多数是和我一样的计算机系的学生,大家都在评论区分享自己的感想,学习内容和笔记,对知识有着清晰的认可。

posted @ 2023-02-08 21:33  1st-driver  阅读(79)  评论(1编辑  收藏  举报