JavaEE初阶1.0
打破计算机的神秘感~
目录
一、 计算机是怎么构成的
1.0 CPU基本情况
2.0 汇编语言
3.0 cpu是怎么构成的
4.0 如何判断CPU好坏
5.0 指令(重点)
6.0 冯诺依曼结构
二、操作系统
1.0 介绍
三、 进程(重点)
1.0 概述
2.0 PCB
(1)pid 进程id
(2)内存指针(一组指针)
(3)文件描述符表
(4) 进程状态
(5)进程优先级
(6)进程的上下文
(7) 进程的记账信息
一、 计算机是怎么构成的
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资源了 就会给这个进程倾斜一些资源~~
上面是计算如何工作的概述 接下来就是多线程的知识
感谢大家的支持
更多内容还在加载中...........
如有问题欢迎批评指正,祝大家生活愉快、学习顺利!!!