文章目录

  • 一、编译原理
    • 1.1 早期编译方式
    • 1.2 编程语言
  • 二、算法&数据结构
  • 2.1 Sort
  • 2.2 图搜索
  • 2.3 Array
  • 2.4 Node
  • 三、软件工程起源
    • 2.1分解打包
  • 四 、摩尔定律
    • 4.1 发展历
      • 4.1.1 电子管
      • 4.1.2 晶体管
      • 4.1.3 集成电路 IC
    • 4.2 刻蚀工艺
      • 4.2.2 光刻负责电路
  • 五 OS
    • 5.1 驱动
    • 5.2 多任务处理
    • 5.3 动态内存分配
    • 5.4 OS发展
  • 六、存储
    • 6.1 早期存储
  • 七 、文件系统
    • 7.2 如何存储
  • 八、压缩
    • 8.1 减少重复信息
    • 8.2 DFTBA
    • 8.3 有损失压缩

一、编译原理

之前讲的例子中 ,程序已经存在于内存中,但是程序要需要load进内存

1.1 早期编译方式

远古时代
编程最早出现于纺织行业,为了编制出图案,玛丽发明了 可编程纺织机 1801年亮相,

每一行颜色可由卡片小孔决定,便可以改变防止的团高低

1890年 穿孔纸用于美国人口普查

但是 穿孔纸是数据 而不是编程,之后的60年 计算机可以做加减乘除…加强了
为了执行不同的计算,程序员需要某种控制面板(control panel)

来控制计算机计算不同的数据

但是运行不同的程序就需要不同的重新连线

冯诺依曼结构
1950,内存价格下降,把程序存在内存中变得可行,甚至数据都可以存在内存中
把 数据 + 程序 都存在同一个地方,这种方式称为:芬诺依曼结构


冯诺依曼结构的特点就是:处理器(算数逻辑单元) + 数据寄存器 + 指令寄存器 + 指令地址寄存器 + 内存

程序写入内存
用卡片一张张读,有的程序由60k张卡片(5MB)

output数据也需要卡片

1.2 编程语言

之前讲的很多二进制的 00010100 load A ,可以直接用load 代替,然后写一个翻译器:他可以读懂文字指令 自动转换成二进制指令,这就是汇编器(Assembler)

随着时间推移,汇编器越来越多的功能让编程更加容易,最大的优化就是自动识别JUMP

插入新的语句后,

解决方法就是标签化:

汇编语言 : 机器语言 = 1 :1
汇编语言仍然需要考虑用什么内存地址 寄存器 ,突然中途添加一个额外的数字,就要改很多code

Hopoer 二战后设计了高级语言:“Arithmetic Language Version 0”
一条语言由 编译器 翻译成多条

从此以后,产生了很多很多高级语言,
最初的IBM 的 FORTRAN 高级语言应用广泛,但只能应用在IBM的计算机上,电脑升级都需要重写代码

为了解决这个适配的问题,在1959年组成了一个联盟 “数据系统语言委员会 ” 开发一种通用的高级语言,在不同机器上使用,诞生了 “通用面向商业语言 Common Business-Oriented Language” COBOL

Cobol 的编译器 接受相同的代码,根据计算机的不同 编译 成 不同的机器码

70年代 出现了 C
80:C++ \ Object-C Perl
90: Python Java

二、算法&数据结构

算法:解决问题的具体步骤

if
while

2.1 Sort

应用讨论最多的算法,科学家们用了几十年时间发明了上百种排序算法。
一个个查找的排序算法

算法的复杂度: 输入大小 & 运行步骤 之间的关系 (O(n2))

2.2 图搜索

图是用线连接起来的一堆节点,用来处理 导航问题 特别多

寻找最短路径:
方法一:尝试每一种可能,选择最短的路径,复杂度O(n!)
Dijkstra 方法:

2.3 Array

2.4 Node

连续两个内存地址,第一个地址是 value 、第二个是下一个Node的地址

三、软件工程起源

前言
我们学过了算法、数据结构…
但是 这些东西都是庞大项目中的一小部分
微软 Office 有 4000万行code
为了写庞大的项目,用了各种工具和方法,这些统称为 Soft Engineering
软件工程这个词由工程师 Margeret Hamilton在为NASA解决问题时创造

2.1分解打包

对象讲解
把一个大的项目分解成小的函数,大家只关心自己的函数就好了
但如果只是这样,Office也会有几十万的函数,依然不可维护
解决方案:把函数打包成层级,相关代码放在一起,打包成对象(object)
例如:自动驾驶中有:

设定速度
逐渐加速
逐渐减速

封装第一次 :这些函数都和定速巡航相关,可以包成一个 定速巡航的对象 ,

还可能有很多对象 :

定速巡航
火花塞点火
散热器启动

封装第二次 :封装成引擎对象,包含所有子对象
当然 引擎对象也有独有的开关引擎函数 、行驶里程变量
对象可以包含其它对象、函数、变量

引擎对象:定速巡航对象火花塞点火对象散热器启动对象开关引擎函数行驶里程变量

当然还有 其它的对象:

车轮
门
车窗
...

最后封装成完整的车

如果想要找到 定速巡航 对象,就需要 从 车 一层层的往里面找,最后找到可执行的函数()

Car.Engine.CruiseControl.SetCruiseSpeed(60)

编程语言经常用这种类似的语法,把函数打包成对象的方法叫:“Object Oriented Programming” 面向对象编程

API

如果 定速巡航对象 需要用到 引擎的其它函数,来保持车速
开发者需要了解其它人写的函数的作用 文档 API(Application Programming Interface)
API 帮助开发者不需要了解太多,直接会用就可以了

点火控制 对象 中,有设定发动机转速 、获得速度、点火 的函数
但是 定速巡航 团队不知道点火系统的细节,不能乱调用


把一些 “重要危险 的 函数标记 为 private 只有自己包内的函数才能调用”
setPRM() 是 public的 可以被定速巡航 团队调用

四 、摩尔定律

4.1 发展历

4.1.1 电子管

4.1.2 晶体管

4.1.3 集成电路 IC

1959年 仙童半导体 用 硅 来做集成电路 晶体管

集成电路还是需要多个组合起来,创造更大更复杂的电路

PCB 印刷电路板

PCB可以大规模生产,无需焊接或者用一大堆线,通过刻蚀金属线的方式 连接在一起

把PCB & IC组合起来使用,可以大幅减少独立组建和电缆

4.2 刻蚀工艺

一开始集成电路IC只能添加少量的晶体管,要想减少晶体管的体积,塞下更多,就要改变工艺


硅:半导体:有时候导电,有时候绝缘,控制导电的时机。



光刻胶被光照射后 会变得可溶,可以被一种特殊的化学试剂洗掉

光掩膜可以用挡住阳光来描述图案,
光照到的地方,光刻胶会发生化学变化,洗掉之后 暴露氧化层

氧化层被光刻胶保护住了

现在景圆(硅)露出来了
为了让硅导电性更好,用一种化学过程来改变它 叫 “掺杂”


还需要几轮光刻法 来做晶体管 ,方法都差不多


再次刻蚀出小通道


不想用金属盖住所有的东西 想刻蚀出具体的电路


4.2.2 光刻负责电路

1960年前,IC上的晶体管很少,光刻工艺发明后,晶体管数量急剧增加
1965年,摩尔 看到了趋势:每两年左右 ,晶体管数量翻一番

2023年5纳米 3纳米的晶体管都量产了

摩尔极限
进一波做小晶体管带来的问题:

  1. 用光眼膜把图案弄到晶圆上,因为光的波长,精度已经到极限
  2. 晶体管非常小时,电极之间可能只距离几个原子,电子会跳过间隙:量子隧道贯穿

五 OS

1940 50年代的计算机,每次只能运行一个程序。
程序写在卡片上,计算机一个一个读取,然后运行,运行完停机。

随着计算机速度的提升,放卡片的速度太慢了,为了让计算机自己运行程序,操作系统就出现了

操作系统本质也是程序,它有操作硬件的特殊权限,可以运行管理其它程序
第一个OS诞生于1950年代,可以做批处理(执行完一个程序,接着执行下一个)

5.1 驱动

当时的程序都是针对一个计算机编写的,其它硬件设备也是特别从硬件层适配的,更换一个打印机都需要重新硬件层适配

OS充当了硬件&软件之间的媒介:操作系统提供API来抽象硬件(设备驱动程序)device drivers,可以利用标准化机制IO与硬件交互

5.2 多任务处理

随着计算机算力的提升,CPU的处理速度快,IO设备的处理速度慢,CPU经常闲着等待慢的机械设备(打印机读卡器)

50年代后期,曼彻斯特研发了第一台超级计算机Atlas,写了个程序,能在CPU上同时运行多个程序,等待打印机执行期间

打印机执行完,合适的时间CPU再切回去执行。这台计算机配备了四台纸袋读取器,四台打印机。

5.3 动态内存分配

专属内存块

物理内存地址不连续,OS把物理虚拟化,虚拟地址是连续的

内存保护:专属内存只能自己处理,其它程序不能搞乱

5.4 OS发展

Multics 是第一个设计就考虑安全的内存的OS,比如学生不能访问老师的内存,这会相当复杂,操作系统就需要1M的内存(当时相当多),Multics代码处理相当多的异常情况

Multics的研究人员Dennis Ritchie说:Multics因为过度设计阻碍商业化,所以Dennis & Ken Thompson(另一个研究员)联手打造了Unix

UNIX把OS分成两部分
内核:核心功能,IO 内存管理 ,多任务
工具:程序运行库lib

紧凑的内核,如果发生错误,就会内核恐慌(kernal panic),设计就是不处理异常,出现异常就需要重启

六、存储

一般来说,电脑内存是“非永久性的” 断电后丢失数据,所以内存被称为 “Volatile Memory”
存储器是永久存储的Storage,断电不丢
内存和存储器的速度差很多,但随着现在技术的发展(Inter傲腾),两者差距越来越小

6.1 早期存储

打孔纸卡
卡纸是一次性的,打过后不能修补,对于临时存储的值 太浪费

1944年 ,Eckert 发明 Delay Line Memory(延迟存储器)

管子里面放水银
一端放扬声器,一端放麦克风
扬声器发出冲击波,冲击波需要一点时间传递到麦克风
麦克风将冲击波转换为电信号(有冲击波1,没有0)


能够存储352bits,但是每一个时刻只能读取1bit的数据,如果想要读取第100bit的数据,就必须读取前99个,所以又叫 顺序存储器,我们想要随机存储

磁芯存储器

可以随机访问

磁带


8条磁带并行

磁带是连续的,必须迅速倒带 快进 到指定的位置,转动时间太长了

硬盘
磁盘转动,读取上面的磁性
多个盘叠放在一起,组成了硬盘
转动寻找制定位置的时间:寻道时间(Seek time)


软盘的磁盘是软的,原理和硬盘一样

光盘
不是用磁性,用小坑反射

固态硬盘
里面是集成电路,不需要转动的寻址时间

七 、文件系统

计算机中的文件到底是什么,以及计算机是如何管理这些文件的

按照格式排列文件的数据:文件格式
可以自己发明文件格式,但是大家都会有一些通用的文件格式:MP4
TXT
文本,全部都是000111组成

Wave(WAW)
存储音频数据,解码之前需要知道:码率(bit rate) 单声道 立体声
这些信息是数据的数据,叫“元数据meta data”


BMP
图片格式

7.2 如何存储

计算机早期,文件系统就是一整个文件

连续存储
有一个directory file 放在文件头,标记其它文件开始结束的位置

删除操作的话,只需要在目录文件中删除记录即可,并没有真正的删除数据,那块数据块就变得可以应用了

和虚拟内存有点像,文件被分的太过于琐碎:文件碎片

碎片整理

计算机会把数据来回移动,排列成正确的数据

分层文件系统

文件数量变得越来越多,多层管理,文件夹套文件夹

最顶层的目录文件:根目录

八、压缩


44 存储在内存中是连续的,需要知道从哪里开始 哪里结束,
就需要有图像的元数据,写明尺寸等属性,这里先忽略元数据

这个图像有 16个像素(4
4) 每个像素3个字节,总共占用48(16*3)个字节

8.1 减少重复信息

最简单的方法:游程编码(Run-Length Encoding)



有的时候这种压缩方法会变大(长度标识)占用内存,这个例子中是变少了

并且,还可以恢复到原来的数据,这种是 无损压缩

8.2 DFTBA

把图像看作是一块块 ,而不是一个个像素
为了简单,我们把两个像素当作一块(6个字节)

因为 “yellow-yellow”最常见,希望用最紧凑的形式来表示它
而 黑黄 白白,出现频率不高,可以用更长的东西来表现它
1950年代, 大卫-霍夫曼 发明了 高效的编码方式:霍夫曼树(Huffman Tree):

1.列出所有块的出现频率,每轮选择两个最低的频率
2.将这两个最低的频率块组成一个树,总频率=sum
3.按照频率生成字典
4.把字典放到数据前面




消除冗余 & 用更紧凑的表示方法 ,这两种方法通常都会组合使用,几乎所有的无损压缩格式都在使用他们(GIF、PNG、PDF、ZIP)

8.3 有损失压缩

人类对 像素 超声波 有些是感知不到的,那么就可以删除这些 感知不到的细节,对人类来说也是一样的
这种删掉人来无法感知的数据的方法:感知编码(Perceptual Coding)
最著名的有孙压缩图像格式就是JPEG

视频压缩
视频 = 一连串的图片 + 音频

连续 帧 & 帧 之间,有很多像素是一样的 ,
比如视频的背景,对于这种可以只保存帧 & 帧变了的部分

更高级的视频压缩

找出帧 & 帧 之间,相似的部分,比如人的手,然后将这个手打包成整体,视频直接引用这个整体

压缩太严重的时候,没有足够空间更新补丁内的像素,及时补丁是错的,视频也会被播放器播放,

这才是计算机科学_计算机大量应用相关推荐

  1. 这才是计算机科学_网络

    文章目录 一. 计算机网络历史 二.计算机网络发展 2.2 LAN_Ethernet 2.2.3 Switch 2.2.4 Packet Switching 分组交换 2.3 互联网 2.3.1 UD ...

  2. 这才是计算机科学_计算机安全

    文章目录 一.前言 1.1身份认证authentication 1.2 权限 1.3 开发安全 二.黑客 2.1 NAND镜像 2.2 缓冲区溢出 2.3 注入 三.加密 cryptography 3 ...

  3. aoc显示器开机显示计算机,_求各路大神帮忙解决,配置如下 电脑开机AOC显示器显示无信号,每次都要重新拔了再插才有画面_...

    网友求助:_求各路大神帮忙解决,配置如下 电脑开机AOC显示器显示无信号,每次都要重新拔了再插才有画面_ 问题求各路大神帮忙解决,配置如下 电脑开机AOC显示器显示无信号,每次都要重新拔了再插才有画面 ...

  4. 认识计算机选题背景,与计算机专业相关的论文_计算机专业的毕业论文题目有哪些_大一我对计算机的认识3000字论文...

    求个金融学和计算机科学与技术这两个专业相关的论文题目 展开全部<互联网金融对传统银行业的影响分析与研究> 或者针对某一个细分,比如P2P,支付宝,蚂蚁金融等等 为什么身边的人都想学计算机, ...

  5. 计算机图形学概论论文5000字,《论文_计算机图形学论文李(定稿)》

    <论文_计算机图形学论文李(定稿)> (17页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 14.9 积分 计算机图形学论文学号:专业:计算机 ...

  6. 2014北科计算机原理试题答案,北科_计算机组成原理考题-A卷答案

    <北科_计算机组成原理考题-A卷答案>由会员分享,可在线阅读,更多相关<北科_计算机组成原理考题-A卷答案(5页珍藏版)>请在人人文库网上搜索. 1.试卷 第 1 页 共 5 ...

  7. 大一_计算机专业_职业生涯规划书(可拷贝在自己空间)

    作者:BSXY_陈永跃 BSXY_信息学院 大一_计算机专业_职业生涯规划书 资源说明&拷贝 前言 1.认识自己,职业定位 1.1.认识自己 (一)现在的能力及其水平: (二)大学期间的兴趣及 ...

  8. 想要专升本你不得不看的全干货_吐血整理_专升本_计算机文化基础( 十 五 )

    大家好,我是阿Ken.很快就要整理完第三章了~ 对于专升本_计算机文化基础我已经在博客里整理了已经一半多了,希望能够在我整理后能够帮助其他的小伙伴,这月底整理完所有的专升本_计算机文化基础的笔记,感兴 ...

  9. 想要专升本你不得不看的全干货_吐血整理_专升本_计算机文化基础( 十 三 )

    大家好,我是阿Ken.很快就要整理完第三章了~ 对于专升本_计算机文化基础我已经在博客里整理了已经一半多了,希望能够在我整理后能够帮助其他的小伙伴,这月底整理完所有的专升本_计算机文化基础的笔记,感兴 ...

最新文章

  1. 这份工程师简历火了:手磨14nm咖啡,在微软传播性病,90%公司伸橄榄枝
  2. 算法导论之平摊分析(动态表)
  3. kafka彻底删除topic(cleanup policy)、清除特定topic数据
  4. Linux学习之第二课时--linux命令格式及命令概述
  5. wxpython的sizer_wxPython BoxSizer布局
  6. C语言和C++中Struct区别
  7. NEON在Android中的使用举例【转】
  8. [链表遍历|模拟] leetcode 2 两数相加
  9. 【包邮免费送】Python 全栈知识图谱
  10. NLP --- 产生式模型VS判别式模型
  11. 【DSP开发】解读TI的KeyStone II云技术应用
  12. h5微信f分享链接给对方获取对方手机号_怎么加回微信删除的人?偷偷恢复,亲测有效!...
  13. Java常用框架有哪些?
  14. 网页中嵌入网易云音乐播放器
  15. SUCTF2019 EasyWeb
  16. Python下载所有XKCD漫画
  17. 用html制作的旅游相册名字唯美,好听的相册名字
  18. python时区转换_Python pytz时区转换
  19. 应用宝shangjia安全评估报告_腾讯应用宝市场的app 安全评估报告怎么写
  20. Qt 直接在控件上拖拽图片到桌面、QQ

热门文章

  1. NaN是什么?NaN == NaN吗?
  2. RK3588 及ATLAS 板卡压力测试stressapptest
  3. 04 看门狗和Cache
  4. ps透视裁剪工具怎么使用,简单几步轻松学会
  5. 群狼环伺-2021年度中国周边APT组织活动年鉴
  6. 【深度学习】指数加权滑动平均
  7. Duplicate Photos Sweeper for mac (重复照片查找删除工具)
  8. openGL推荐学习资料
  9. 用fastboot命令将boot.img文件push到机器里
  10. JDK8新特性 2W字总结的硬核知识