目录

1.计算机的构成

1.1.计算机二进制

1.2.冯诺依曼体系结构

1.2.1.CPU(加工厂)

1.2.2.存储器(仓库)

1.2.3.输⼊设备(原材料)

1.2.4.输出设备(产品)

PS:关于存储空间:硬盘 > 内存 >> CPU

PS:关于数据访问速度:CPU >> 内存 > 硬盘

2.硬件—CPU 是如何工作的?

2.1.CPU 定义和组成

2.2.算术和逻辑单元 ALU

2.2.1.算术单元

2.2.2.逻辑单元

2.2.3.寄存器(Register)和内存(RAM)

2.3.控制单元 CU(Control Unit)

3.软件

3.1.操作系统(Operating System)

3.2.进程

3.2.1.进程的本质

3.2.2.进程关联的重要概念

3.3.线程

3.3.1.线程优势

3.3.2.进程 VS 线程

3.3.3.线程是不是越多越好


1.计算机的构成

现代的计算机,大多遵守冯诺依曼体系结构

冯诺依曼体系由冯诺依曼提出,因此冯诺依曼被称为计算机之父

冯·诺依曼(John von Neumann,1903年12⽉28⽇-1957年2⽉8⽇), 美籍匈牙利数学家、计算机科学家、物理学家,是20世纪最重要的数学家之⼀。冯·诺依曼是布达佩斯⼤学数学博⼠,是现代计算机、博弈论、核武器和⽣化武器等领域内的科学全才之⼀,被后⼈称为“现代计算机之父”、“博弈论之父”。

【图灵提供了理论知识,冯诺依曼提供了具体的理论实现。】

为什么说冯诺依曼是核武器和⽣化武器等领域的⼈才呢?因为它也参加了曼哈顿计划,也就是参与了造原⼦弹的制作。
故事:冯诺依曼坐⻋的时候遇到了普林斯顿⼤学的研究员,聊起了做这个话题,他们在做⼀个研究导弹轨迹的机器,但遇到了很多困难,冯诺依曼后⾯去参观并提供了著名的冯诺依曼体系,因为冯诺依曼体系结构是在普林斯顿⼤学研究并创建的,因此冯诺依曼体系结构也被称为普林斯顿结构

PS:普林斯顿⼤学最近 3 年世界排名第⼀的⼤学,数学专业世界第⼀,培养了两个美国总统,69 个诺⻉尔奖得主,爱因斯坦在普林斯顿任职。

1.1.计算机二进制

除了冯诺依曼体系结构,还有计算机的⼆进制也是冯诺依曼发明并提出的。

1.2.冯诺依曼体系结构

通常情况下,执行流程是把需要处理的数据从磁盘加载到内存,再把需要运算的数据拿到CPU处理,最后再写回磁盘。

但也不一定,是分场景程序的。

如:

  • MySQL最后数据是要落到磁盘上的。但在没有真正提交事务之前,数据都是运行在内存中的;只有提交之后才会写到磁盘;
  • 对于Idea程序,是将磁盘上的代码读取出来,在内存中操作,打印执行结果。操作完成后就结束了,不会将数据再写回到磁盘中。
  • 像数据库redis,memcached(纯内存型数据库,当数据库打开之后,所有的数据都在内存中执行,不会写到磁盘之中)

1.2.1.CPU(加工厂)

CPU 中央处理器:包含运算器控制器,进⾏算术运算和逻辑判断。还含有一个寄存器,可以存储一些经常使用的变量,内部又分为一级缓存,二级缓存和三级缓存。其容量非常非常小,速度非常快。

1.2.2.存储器(仓库)

分为外存内存,⽤于存储数据(使⽤⼆进制⽅式存储)。

内存、外存(硬盘、U盘、光盘、软盘...),之前写的代码都是在内存中。

内存 VS 外存对⽐:

  • 内存⼩,外存⼤。
  • 内存的制作⼯艺⾼因此⽐较贵,外存成本低。
  • 内存操作速度快(纳秒级别)、外存操作速度慢(微秒级别),⼀纳秒等于10^-9,⼀微秒等于10^-3,相差好⼏个数量级。
  • 内存重启之后数据丢失,外存数据会永久保存(除⾮⼈为删除)。

1.2.3.输⼊设备(原材料)

键盘、⿏标、摄像头、⻨克⻛...

1.2.4.输出设备(产品)

显示器、⾳响、打印机...

有些设备既是输⼊设备⼜是输出设备,⽐如触摸屏。⽹卡既是输⼊⼜是输出设备。

PS:关于存储空间:硬盘 > 内存 >> CPU

PS:关于数据访问速度:CPU >> 内存 > 硬盘

2.硬件—CPU 是如何工作的?

2.1.CPU 定义和组成

CPU 也称为微处理器,是计算机的⼼脏和/或⼤脑,它的主要⼯作是执⾏算术和逻辑运算并将指令编排在⼀起。

PS:设备之所以能够工作是因为它有驱动(硬件设备提供了开放的端口进行操作的方法)。

CPU 有两个主要组件:

  1. 算术和逻辑单元 ALU(Arithmetic & Logic Unit)
  2. 控制单元 CU(Control Unit)

2.2.算术和逻辑单元 ALU

ALU 是计算机中进⾏算数、逻辑运算的核⼼部件,是计算机的数学⼤脑。

算术和逻辑单元⼜分为:算术单元和逻辑单元。

2.2.1.算术单元

算数单元,负责计算机⾥的所有数字操作,⽐如四则运算、或 8 位(bits)的加法器(adder)。

要理解 8 bits 的加法器,需要了解⼀些前置知识:

①电子开关——机械继电器(Mechanical Ralay)

通过电⼦开关我们可以实现 1 位(bit) 的逻辑运算,实现如下:

②门电路

门电路可以实现 1 位(bit) 的基本逻辑运算,如下图所示:

 ③ 进制相加的特点

 ④ 半加器

通过前⾯的前置知识,就可以通过半加器实现两个 1 bit 数的相加了,如下图所示:

⑤ 全加器 

⽽通过半加器我们就可以实现全加器了,也就是进⾏ 3 个 1 bit 数的相加了,如下图所示:

并且我们也可以实现 8 bit 的加法器了,如下图所示:

能够实现加法器,也就能实现减法操作和乘法操作以及除法操作了。
  • 减法器就是加⼀个负数 +(-n)。
  • 乘法器就是 N 个数相加,⽐如 3*3=9 就是 3+3+3=9。
  • 除法器是 N 个数相减,⽐如 24/8=3 就是 24-8-8-8=0 结果就是 3(3个8连减,最后为0)。

2.2.2.逻辑单元

逻辑单元主要⽤来进⾏逻辑操作,最基本的操作就是与、或、⾮操作,但不只是⼀位(bit)数的⽐较。

2.2.3.寄存器(Register)和内存(RAM)

光有 ALU 还是远远不够的,还要为 ALU 提供存储的部件。

存储的前置知识是⻔锁,如下图所示,利⽤⻔锁可以实现 1 bit 的存储:

使⽤⻔锁就可以实现寄存器,如下图所示:

内存的构建要⽐这个复杂⼀点,但基本原理⼀致。如此构建的内存被称为 RAM(Random Access Memory),可以⽀持 O(1) 时间复杂度访问任意位置的数据,这也就是我们数组下标访问操作是 O(1) 的硬件⽀持。

2.3.控制单元 CU(Control Unit)

现在有 ALU、存储了,但这还是不⾜以让我们的计算机⼯作起来,需要有⼀个部件来指挥 ALU 进⾏何种的运算,⽽这个部件就是控制单元(CU)。

指令按顺序存储在 RAM 中,控制器通过读取将指令,并通过算术逻辑单元进⾏执⾏。以上内容就是最基本的 CPU 运⾏的基础知识了。

3.软件

计算机除了硬件之外最重要的资源就是软件了,⽽系统中最⼤、最重要的“软件”就是操作系统了。

3.1.操作系统(Operating System)

操作系统是⼀组做计算机资源管理的软件的统称。⽬前常⻅的操作系统有:Windows系列、Unix 系列、Linux系列、OSX系列、Android系列、iOS系列、鸿蒙等。

操作系统:

  • Windows:家庭/工作常用的操作系统。优点:图形化的操作界面,所见即所得,上手简单,支持各个厂商,市场份额占比多;缺点:使用UI绘制运行,将用户的操作翻译成指令执行。消耗系统硬件内存资源,消耗性能。【Windows Server(收费)一般使用场景:是微软那一套:C#,VB等】
  • Lunix:优点:高性能,开源免费,也是目前所有程序发布的系统,没有说是把做好的程序部署到Windows上(尤其是Java行业);缺点:是直接敲命令,没有多余的UI绘制,操作上手较难,得会基本命令才能玩起来。
  • MacOS:优点:和Windows类似,也是图形化操作的界面,且其UI界面更加酷炫,上手效果更好。所有应用都必须通过官方审核之后才能安装,没有病毒和弹窗广告;缺点:主打高端,价格贵。只支持自家厂商开放,市场份额占比比较少。

PS:不要装360,其本身就是流氓软件;火绒安全,占用的系统资源较少,还可以进行模拟弱网环境,指定给某个应用相应的网速。

3.2.进程

进程(Process)是操作系统分配资源基本/最小单位,⼀个进程拥有的资源有⾃⼰的堆、栈、虚存空间(⻚表)、⽂件描述符等信息。 从编程的⻆度来理解进程,可以把它看作是⼀个类或⼀个 PCB (Process Control Block)进程控制块的结构体。

简单来说,将⼀个可执⾏⽂件(.exe文件)运⾏起来就是⼀个进程。 进程可以看作⼀个程序运⾏的“过程”,注意区分:程序(可执⾏⽂件)和进程:

  • 程序是⼀个静态的磁盘上的⼀个⽂件。

  • 进程将可执⾏⽂件加载到系统中,加载就是将信息放⼊内存中,分配⼀些资源,并且执⾏程序包含的所有指令。

【当运行一个进程时,相当于创建了一个PCB,把这个PCB加到内存中,内存中会有多个使用链表连接的PCB,当CPU有了资源时,调度器会从整个PCB的链表中根据调度算法取出来这个PCB然后进行执行;当关闭一个进程时,相当于只是从内存中将这个PCB移除就行。】

3.2.1.进程的本质

进程本质就是⼀个 PCB(Process Control Block)结构体,类似于 Java 中的类,⽽这个 Java 中的类包含了:

  • PID:进程ID,进程的唯⼀身份标识。 并不是固定的,它是每次启动进程时动态分配的。重启前后的 PID 是不同的。
  • 进程状态包括:
  1. 新建状态
  2. 就绪状态
  3. 运⾏状态
  4. 阻塞状态
  5. 销毁状态
  • 优先级:决定进程的执⾏顺序。可以开发者自己指定。(若是操作系统级别的进程,优先执行的概率会越大;每秒钟被分配的资源也应该更多)

  • 记账信息:为了保证进程执⾏的相对公平。可以规避进程饿死的问题。(记录分配CPU的次数和执行间隔,作为CPU是否执行它的依据,而是否执行它是进程调度器(通过调度算法决定调用哪个进程)决定的,也就是说记账信息只是给调度器提供了参考信息而已)

  • 上下⽂:保存本次的执⾏状态,以便下次继续执⾏,整个过程就称之为⼀个上下⽂。

  • ⼀组内存:指定进程需要使⽤的资源。

3.2.2.进程关联的重要概念

时间片:每个进程得到 CPU 执⾏的时间叫做时间⽚。

内核态和用户态:内核态表示操作系统作为最底层的软件拥有最⾼的权限就叫做内核态,⽤户态指⽤户编写的程序。 程序执行往往是从用户态->内核态->用户态。

Java程序员不做进程开发,做线程开发。并发编程都是基于线程的。

3.3.线程

线程(Thread)是操作系统能够进⾏运算调度最小单位。它被包含在进程之中,是进程中的实际运作单位。(一个进程里至少要有一个线程)⼀条线程指的是进程中⼀个单⼀顺序的控制流,⼀个进程中可以并发多个线程,每条线程并⾏执⾏不同的任务。在 Unix System V 及 SunOS 中也被称为轻量进程(lightweight processes),但轻量进程更多指内核线程(kernel thread),⽽把用户线程(user thread)称为线程

⽐如:⼀家公司要去银⾏办理业务,既要进⾏财务转账,⼜要进⾏福利发放,还得进⾏缴社保。如果只有张三⼀个会计就会忙不过来,耗费的时间特别⻓。为了让业务更快的办理好,张三⼜找来两位同事李四、王五⼀起来帮助他,三个⼈分别负责⼀个事情,分别申请⼀个号码进⾏排队,⾃此就有了三个执⾏流共同完成任务,但本质上他们都是为了办理⼀家公司的业务。此时,我们就把这种情况称为多线程,将⼀个⼤任务分解成不同⼩任务,交给不同执⾏流就分别排队执⾏。其中李四、王五都是张三叫来的,所以张三⼀般被称为主线程(Main Thread)。

3.3.1.线程优势

线程的创建和消耗⽐进程成本低很多,效率更⾼,⽽且同⼀个进程中的多个线程是可以共享资源⽂件的,⽽进程和进程之间是不能共享资源的,因此这就是线程的诞⽣的意义。

  • 线程间可以共享的资源:
  1. 内存可以共享。
  2. 打开的⽂件可以共享。
  • 线程间不可共享的资源:
  1. 线程的上下⽂、状态、优先级、记账信息不共享。
  2. 每个线程有⼀个栈空间不共享。

线程可以理解为⼀个轻量级的“进程”。进程是操作系统资源分配的最⼩单位,线程是操作系统执行和调度(运行)的最⼩的单位。

3.3.2.进程 VS 线程

⼩胖吃鸡场景:

① 单进程单线程

② 多进程单线程

③ 单进程多线程

④ 多进程多线程

(常见面试题)进程和线程的区别:

区别1:从属关系不同

从属关系不同:进程是正在运⾏程序的实例,进程中包含了线程,⽽线程中不能包含进程。

区别2:描述侧重点不同

描述侧重点不同:进程是操作系统分配资源的基本单位,⽽线程是操作系统调度的基本单位。

区别3:共享资源不同

共享资源不同:多个进程间不能共享资源,每个进程有⾃⼰的堆、栈、虚存空间(⻚表)、⽂件描述符等信息,⽽线程可以共享进程资源⽂件(堆和⽅法区)。

区别4:上下文切换速度不同

上下⽂切换速度不同:线程上下⽂切换速度很快(上下⽂切换指的是从⼀个线程切换到另⼀个线程),⽽进程的上下⽂切换的速度⽐较慢。

区别5:操纵者不同

操纵者不同:⼀般情况下进程的操纵者是操作系统,⽽线程的操纵者是编程⼈员。

3.3.3.线程是不是越多越好

同⼀时间可以运⾏线程的 CPU 是固定的,如果超过了最⼤值,其他的只能排队处理,这样就起不到多的作⽤了,并且线程的调度也需要消耗时间,会造成“狼多肉少”的情况,会造成恶意争抢和线程过度调度的问题,反而减低线程执行效率。因此并不是线程越多越好。

创建线程的合适数量和两个因素有关系:

  1. CPU 的数量,没有标准答案,根据实际的服务器的硬件配置和任务类型来定,通常比较合适的线程创建数量一般为CPU个数-1。现在JDK可以根据你的电脑情况来生成匹配的线程数。

  2. 任务的类型计算密集型任务(费CPU资源),线程数量不宜太多,约等于 CPU 数量;如果是 IO 密集型任务(不费CPU资源,但是读写需要很长时间),可以适当地多创建线程。(原则上是线程数量越多越好)

1-计算机是如何工作的?相关推荐

  1. 通过汇编一个简单的C程序,分析汇编代码理解计算机是如何工作的

    实验目的: 通过反汇编一个简单的C程序,分析汇编代码理解计算机是如何工作的 实验过程: 通过vi程序进行编程: int g(int x) { return x + 3; } int f(int x) ...

  2. 人工操作阶段计算机是如何工作的,第一章计算机基础概述全解.ppt

    第一章计算机基础概述全解 1.2.3 汉字编码 汉字的编码 国标码:中文内码之一,汉字信息交换的标准编码.国标码是不可能在计算机内部直接采用.于是, 汉字的机内码采用变形国标码 . 国标码:作为转换为 ...

  3. 计算机主板的工作原理,计算机主板的工作原理.doc

    计算机主板的工作原理 计算机主板构造和工作原理 主板通常拥有多种不同的内置功能,并且可以直接影响计算机的功能和升级潜力.在本文中,我们将了解一下主板的通用部件.随后,我们将仔细研究显著影响计算机性能的 ...

  4. 学校计算机老师工作总结,计算机老师年终工作总结

    计算机老师年终工作总结 作为一名计算机老师,在教学工作一段时间后,可以写一下教学总结.下面,小编在这给大家带来计算机老师年终工作总结,欢迎大家借鉴参考! 计算机老师年终工作总结1 回顾这一学年,本人能 ...

  5. 自动化C语言第一次月考试卷,145班《计算机组成与工作原理》第一次月考试卷...

    怀宁县职教中心2016~2017学年度第一学期九月份摸底考试 145班<计算机组成与工作原理>试卷 命题人:徐志清 班级:姓名:得分: 一.选择题(每题1分,共30分) 1.通常所说的MP ...

  6. 高中考试计算机课程,高中计算机课程的工作总结

    高中计算机课程的工作总结 本学期以来,在校领导的关心指导下,我班全体师生密切配合,团结协作.锐意进取,圆满地完成了本学期的各项工作,具体总结如下. 一. 井然有序的常规工作. 1.班级制度样样俱全. ...

  7. 企业怎样做好计算机应急响应工作

    随着电子商务和在线交易已经成为当今商业社会的一部分,越来越多的公司被发现网络中存在安全隐患而遭受计算机罪犯勒索.当企业的网络中出现安全漏洞时,公司的核心商业信息和业务的机密信息会被盗窃.另外与在线银行 ...

  8. 用计算机进行资料检索工作是,用计算机进行资料检索工作是属于计算机应用中的什么...

    用计算机进行资料检索工作是属于计算机应用中的数据处理.数据处理的基本目的是从大量的.可能是杂乱无章的.难以理解的数据中抽取并推导出对于某些特定的人们来说是有价值.有意义的数据. 用计算机进行资料检索工 ...

  9. 《Linux内核分析》第一周笔记 计算机是如何工作的

    一.计算机是如何工作的? 1.存储程序计算机工作模型 1)冯诺依曼体系结构 学习研究计算机的基本概念.就是指存储程序计算机.所有的有计算功能的电子设备小到计算器,大到超级计算机核心部分都可以用这种体系 ...

  10. 计算机学院 年度工作计划,计算机教研组年度工作计划

    为保证教师能够在将来的竞赛任务中脱颖而出,还必须加强实训室建设,并给教师们提供培训机会,让各教师提高自身技能.这里给大家分享一些关于计算机教研组年度工作计划600字,供大家参考. 计算机教研组年度工作 ...

最新文章

  1. Educational Codeforces Round 80 (Rated for Div. 2)SZU cf集训round2 C~E(dp,状压+二分,树状数组+逆向思维)
  2. 机器学习泰斗- Michael I.Jordan最新演讲:机器学习前景与挑战
  3. c语言如果读不到数据就跳过,4,VS常见问题解决(一闪而过、等问题)不断更新...
  4. linux 安装jdk(install jdk)
  5. [WinSock]封装WSAAsyncSelect!
  6. 使用 “vue-cropper“进行图片裁剪
  7. pymysql(part2)--pymysql使用流程
  8. 微信年终奖人均 280 万?拼多多再追平京东;苹果再三致谢腾讯 | 极客头条
  9. 摩拜免押金;滴滴外卖订单骤降;小米最快本周 IPO | CSDN极客头条
  10. 【BZOJ】3786: 星系探索
  11. 一张图了解js运算符优先级
  12. idea运行java项目js中文乱码如何解决
  13. MICRO SIM卡 SIM小卡 尺寸图及剪卡图解
  14. C++ 遍历文件夹下所有文件的多种方法
  15. IDEAIU-version2019.2百度网盘下载
  16. 工具 | 超实用工具listary和snipaste
  17. 3.9 Primitive Obsession 基本类型偏执
  18. 小米手机扩容教程_小米手机加运存和扩容(成功的DIY,过程已更新完)|创意DIY...
  19. bugkuCTF---flag在index里
  20. 骁龙8gen2和骁龙8gen1plus区别

热门文章

  1. Java基础强化训练——开发工具及输出语句训练
  2. 基于SDN环境下的DDoS异常攻击的检测与缓解--实验
  3. 【科研小技巧】Word(2016)绘制三线表样式
  4. Funcode-Q版泡泡堂
  5. Deep Neural Networks are Easily Fooled High Confidence Predictions for Unrecognizable Images
  6. matlab——红绿灯颜色及数字识别(三)
  7. Chrome安装插件SwitchyOmega
  8. 聊天室登录php,聊天室技术(二)-- 登录_PHP
  9. 个股短、中线技术形态判定
  10. PS插件-人像处理美颜磨皮瑕疵修复套装Retouch4me