自我介绍与学习记录
这个作业属于哪个课程 | 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,只是不同的表达方式罢了。
-
用二进制的原因:
- 避免用电器相互干扰
- 有一整个数学分支存在,专门处理“真”和“假”
-
可以像水龙头一样,把控制线当做输入(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:
- 指令地址寄存器:一个寄存器追踪程序运行到哪里了,存当前指令 的内存地址。
- 指令寄存器:存当前指令。
- 取指令阶段:
将指令地址寄存器连到内存,寄存器值为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的内部操作。
可以通过调高或调低始终频率来实现超频或降频。
- 内存的四个指令:
- LOAD_A:从内存的地址14中拿到数字X,放入寄存器A
- LOAD_B:从内存的地址15中拿到数字X,放入寄存器B
- LOAD_A:告诉ALU,把寄存器B和寄存器A数字加起来,结果存在第二个寄存器
- 还存在其他的指令:
4.SUB:减法,和add一样要2个寄存器来操作。
-
JUMP:跳转到新位置 (JUMP 0可直接跳回开头)
-
JUMP_NEG:在ALU负数标志为真时,进行JUMP。
-
HALT:停止(以防CPU处理内存中的0时电脑崩掉,因为0不是操作码)
高级CPU设计
- CPU中存在缓存(cache), RAM向CPU传数据时不用传一个,可以传一批,数据可以存在于缓存中。
有时缓存和RAM不一致,必须记录下以后要同步,因此缓存里每块空间有一个特殊标记叫脏位。
当缓存满了而CPU又要缓存时,清理缓存之前,会先检查脏位,如果是“脏”的,在加载新内容之前,会把数据写回RAM。
- 指令流水线:
采用“并行处理”进一步提高效率,不同任务重叠进行,同时用上CPU里所有部分。(要先弄清数据依赖性)
部分CPU会使用“推测执行”:等待JUMP指令时会提前把指令放进流水线。
集成电路&摩尔定律
-
晶体管标志着“计算2.0时代”的到来
-
PCB:可大规模生产,无需焊接或用一大堆线,通过蚀刻金属线的方式,把零件连接到一起。
- 硅是做晶体管的绝佳材料,可用晶圆做基础,把复杂金属电路放上去,集成所有东西。
- 在硅片顶部加一层薄薄的氧化层,作为保护层,加一层光刻胶,其被光照射后会变得可溶,可洗掉,和“光掩模”配合使用很强大
- 将光掩模盖到晶圆上,用强光照射,挡住光的地方光刻胶不会变化,光照到的地方,光刻胶会发生变化,洗掉之后暴露出氧化层。
- 用另外一种酸,可洗掉“氧化层”露出的部分,蚀刻到硅层
- 用掺杂来影响暴露出的硅,改变电学性质。
- 摩尔定律:集成电路上可以容纳的晶体管数目在大约每经过18个月到24个月便会增加一倍。
早期的编程方式
- 约瑟夫 玛丽 雅卡尔发明了可编程纺织机,每一行的图案由可穿孔纸卡决定。
- 穿孔纸卡用于1890年美国人口普查。
- 面板编程
编程语言发展史
- 汇编器:读取用“汇编语言”写的程序,转成“机器码”
- 编译器:专门把高级语言转为低级语言,比如汇编或机器码
编程原理-语句和函数
控制流语句的程序的执行顺序要更加灵活。
if:像岔路口,走哪条路取决于表达式的真假,表达式又叫条件语句
while:当while条件为真时,代码会重复执行
for:不判断条件,判断次数,会循环特定次数
算法入门
- 归并排序:
- 原有8个数组,检查数组大小是否>1,如果是,把数组分为两半,但依然大于1,再分成大小是2的数组,最后变成8个数组,每个大小为1,现在可以归并了。
- 从前两个数组开始,读第一个值,把小的放前面,大的放第二位,成功合并了两个数组。
- 重复这个过程,按序排列,多归并几次。
归并排序的算法复杂度是O(nlog n),n是需要 比较+合并 的次数,和数组大小成正比。*
- Dijkstra:总是从成本最低的节点开始
数据结构
- 下标是从0开始计算的,下标5是数组中第6个数
- 字符串:由字母,数字,标点符号等 组成的数组
- strcat:接收两个字符串,把第二个放到第一个结尾
- 结构体:多个变量打包在一起,存结构体的数组,和其他数组一样,创建时有固定大小,不能动态增加大小
- 节点:存在一个变量, 一个指针,指针:一种特殊变量,指向一个内存地址。用节点可以做链表,是一种灵活数据结构,能存很多个节点,灵活性是通过每个节点指向下一个节点实现的
如果节点改成2个指针,就能做树,最高的节点叫根节点,根节点下所有节点都叫子节点,任何子节点的直属上层节点叫母节点,没有任何子节点的节点,叫叶节点,这样的节点最多只可以有2个子节点,因此叫二叉树。
阿兰 图灵
-
发明了简单又强大的数学计算模型
-
证明了计算是有极限的,起步了可计算性理论
-
创造出Bombe,大幅减少了搜索量,有利于破译人员,对二战的胜利有重要作用
软件工程
-
代码太多:把函数打包成层级,把相关代码放一起,打包成对象(objects)
-
API:程序编程接口
面向对象的编程语言可指定函数是public或private,来设置权限
- IDE:集成了很多有用功能帮助写代码,整理,编译和测代码,叫集成开发环境
写代码别忘写注释
学习心得
从硬件到软件,从基础到成品的应用,我不得不感叹于人类的伟大智慧,目前对于计算机历史与硬件基础有了些许了解,对于日后的学习过程中肯定也多了一些理解。
评论区阅读心得
评论区大多数是和我一样的计算机系的学生,大家都在评论区分享自己的感想,学习内容和笔记,对知识有着清晰的认可。