打破计算机的神秘感~
目录
一、 计算机是怎么构成的
1.0 CPU基本情况
x86架构 intel amd 家用pc 服务器
arm架构 苹果 苹果电脑 高通 智能手机
高通(安卓旗舰手机主要芯片供应商)
2.0 汇编语言
是机器语言 不同cpu 架构不同 指令集不同 对应的机器语言/汇编语言也是不同的
cpu的寻址 16位 64位 等等
cpu的位数,就和代码中,内存地址用几个字节表示是密切相关的~
3.0 cpu是怎么构成的
不理解具体过程 但是至少要知道,CPU以及其他的 内存,硬盘等等 重要的设备
都是由 门电路 构成的 门电路由晶体管构成 晶体管足够小(nm级别)
这样就达到了足够多
4.0 如何判断CPU好坏
cpu能不能搞大一点呢?不可以 这样意味着加工的时候 良品率会大幅度降低!!!
解决办法:多核cpu
能不能让一个cpu核心当成俩来用? (超线程技术)
咱们现在的CPU都是这种 多核+超线程 技术加持的产物
查看cpu:任务管理器(ctrl+shift+esc) -----> 性能----------->CPU
cpu内核6个 逻辑处理器12个(相当于12个人同时干活) 还有一个指标是 频率
频率:描述单个CPU核心工作的速度~
除此之外 还有很多指标可以衡量~ 有大佬,已经把CPU的水平,排出座次,咱们可以直接参考
例如:网上搜索CPU天梯图(台式机和笔记本是两个不同的天梯图)
通过任务管理器里面对应自己的CPU型号
5.0 指令(重点)
虽然咱们可以不用理解CPU的具体构造,但是需要理解,CPU是怎么执行代码的~~~
下面是一个指令表 地址0 数据00101110
这个一段指令 其实就是内存中的一段数据~~
咱们写好的代码,最终想要运行,都是需要让操作系统,先把写好并编译好的指令加载到内存中,让后cpu才能执行的~~~
cpu执行指令的时候,要经历从内存读取数据这样的操作的~
6.0 冯诺依曼结构
精髓:cpu和内存分开 (执行单元和存储单元分开)
这样解耦合 降低了硬件设计的成本,随着硬件技术的发展,cpu越来越快了,但是内存读取这个事情,提升不明显,内存渐渐的跟不上cpu的节奏了
cpu就设计了很多的机制,来解决上述问题:
缓存 (理解为cpu为舞台 内存为演员 演员不能及时赶到舞台,然后缓存是就近的演员 之前的缓存是在’南北桥‘(cpu附近的宾馆)上的,现在直接集成到cpu上
新的计算机结构的尝试: 量子计算机~
总结:
cpu要执行的指令(在指令集中 不同架构cpu指令集不同)存在内存里面,取指令的操作,其实是非常耗时的,因此cpu中通过缓存,流水线等技术,来优化这里的效率
二、操作系统
1.0 介绍
操作系统是一个软件(由代码构成程序)
主要职责:管理各种硬件设备 给其他软件提供稳定的运行环境(抽象 封装)
例: 罗技G鼠标 13个案件 程序需要响应鼠标的操作,但是总不能根据不同的鼠标,写不同的代码吧? 这个时候就需要操作系统站出来,统一管理各种不同的硬件设备,给软件提供统一的api~
这样就可以不必关注硬件的细节差别了,只需要调用操作系统的api即可,再由操作系统来去控制不同的硬件进行工作~
操作系统也提供了一些管理软件资源的api,可以调用api来完成一些特定的工作
这些应用程序,在工作过程中是互不干扰的 及时某个程序有bug也不会影响到其他应用程序的运
常见系统:windows linux(程序员必须要掌握的系统) mac ios android等等
使用windows一般都是图形化页面(降低门槛) linux是命令行操作(生产力工具)
上述各种系统彼此之间是不兼容的,但是Java的优点就是 跨平台
三、 进程(重点)
1.0 概述
一个运行起来的程序 叫做一个进程
process 操作系统中的重要概念
进程多了 操作系统就需要 能够很好的 管理上述进程
站在系统的角度,如何管理进程?
(1)先描述出一个进程是啥样的
使用结构体(主流的操作系统都是C语言写的),描述出进程的核心属性
进程控制块(PCB) 非常大的结构体,有很多很多属性~
(2)再把多个进程组织起来
比如 linux这样的操作系统,使用链表这样的形式,把多个PCB串到一起
创建一个新进程,就是创建一个PCB 初始化PCB的各个属性 把PCB加到链表上
销毁一个进程 查看进程列表等等等
2.0 PCB
(1)pid 进程id
进程的身份标识符~~ (任务管理器右键打开)
(2)内存指针(一组指针)
进程需要知道执行的指令在哪里 指令依赖的数据又在哪里
双击exe 运行一个程序,创建一个进程
操作系统的加载过程:
操作系统 会把exe中的指令加载到内存中 后续进程在运行过程中,就会从指令内存区域里一条一条的取指令并执行~
操作系统和cpu:
操作系统本身也是一个软件,也是由一系列指令构成的
cpu就会依次执行操作系统的这些指令(操作系统跑起来了)
此时运行某个进程,操作系统就会进行 刚才的加载到内存的过程,让cpu来执行这里的指令
(3)文件描述符表
这个表记录了我要打开哪些文件
进程 运行过程中 很多时候 需要和硬盘进行交换(硬盘上的数据是用文件来存储的)
每次打开一个文件,就会把这个文件的信息,保存到文件描述符表中~
进程的运行 需要依赖硬盘 网卡 cpu
进程是操作系统中,资源分配的基单位
(4) 进程状态
分时复用:一秒钟拆分成很多部分 每个部分对应一个进程 cpu运行速度足够快
切换的过程也快 超出人类的反应时间 从人类的角度看就是可以同时干很多事 其实是串行 但是效果上看起来像是并行
进程状态:两个典型的
就绪状态(随叫随到) 进程随时可以到cpu上进行
阻塞状态进程(有事) 当前不适合到cpu上执行
(5)进程优先级
有些进程,就是要优先级高一点,吃到更多的cpu资源
(6)进程的上下文
进程调度 一个进程执行一会 失去cpu
过了一段时间后,进程还会回到cpu上执行 沿着上次执行到的状态,继续往下执行
翻出小本子回忆一下上次的进展~
进程在cpu中运行的过程中,cpu上的各种寄存器,就表示了当前进程运行的“中间状态”
寄存器不止是储存中间结果 也会存储当前这个进程执行到第几条指令了 以及当前进程中“函数调用关系” 简单来说 就是游戏中的存档
(7) 进程的记账信息
统计功能 统计每个进程都在cpu上面运行了多久
如果发现某个进程,好久没有吃到cpu资源了 就会给这个进程倾斜一些资源~~
上面是计算如何工作的概述 接下来就是多线程的知识
感谢大家的支持
更多内容还在加载中...........
如有问题欢迎批评指正,祝大家生活愉快、学习顺利!!!