一.计算机组成
1.冯诺依曼体系
CPU 中央处理器: 进行算术运算和逻辑判断.
存储器: 分为外存和内存, 用于存储数据(使用二进制方式存储)
输入设备: 用户给计算机发号施令的设备.
输出设备: 计算机个用户汇报结果的设备
内存和外存的区别(面试)
访问速度:内存快,外存慢
存储空间:内存小,外存大
成本:内存高,外存低
持久化存储:内存掉电后数据丢失,外存掉电后数据仍然在'
2.cpu
CPU芯片上集成了非常多的运算单元
2.1逻辑门
1)电子开关-机械继电器(Mechanical relay)
2)门电路
最基本的门电路有三种
3)算数逻辑单元 ALU
ALU 是计算机中进行算数、逻辑运算的核心部件,是计算机的数学大脑。
1.半加器.针对两个比特位,进行加法运算
2.全加器:针对三个比特位,进行加法运算
4)逻辑单元
逻辑单元主要用来进行逻辑操作,最基本的操作就是 与、或、非操作,但不只是一位(bit)数的比较。
5)总结
逻辑链条
2.2计算
有了加法器,可以进行加减乘除
原码,反码,补码
计算机中
如果是一个正数,直接使用正数,直接用原码
如果表示一个负数,就使用补码
原码,符号位不变,再按位取反,再加1
使用补码为了统一加减法
2.3门电路
一个cpu上有很多电子开关,电子开关越多,计算能力就越强
CPU中除了运算器以外,还有控制单元和寄存器
2.4寄存器
寄存器是CPU内部用来存储数据的组件
2.5 控制单元(CU)
控制单元( CU)协调CPU进行工作
最主要的工作是能够执行指令
指令
1.机器语言
2.汇编语言
2.6指令的执行
举例:计算两个数相加
CPU的工作流程
1.从内存中读取指令
2.解析指令.
3.执行指令
这些都是通过CU控制单元来实现
二.操作系统
一个软件.计算机上最重要也最复杂的软件之一
操作系统是一个搞"管理的软件"
1.对下,要管理好各种硬件设备
2.对上,要给各种软件提供稳定的运行环境
操作系统由两个基本功能:
1) 防止硬件被时空的应用程序滥用;
2) 向应用程序提供简单一致的机制来控制复杂而又通常大相径庭的低级硬件设备
三.进程
1.概述
进程:跑起来的程序
一旦开始运行这些.exe文件
操作系统就会把这个exe给加载到内存中,并且让CPU开始执行exe内部的一些指令(exe内部存放了这个程序对应的
二进制指令).
这些运行起来的可执行文件 便被称为"进程"
什么是线程
是进程内部的一个部分,进程包含线程
如果把进程想象成一个工厂,那么线程就是工厂内部的一个生产线
操作系统如何管理一个进程?
1.先描述一个进程(明确一个进程上的相关属性)
2.再组织若干个进程(使用一些数据结构,把很多描述进程的信息给放到一起,方便进行增删改查)
2.PCB(process control block)
2.1PCB基础属性
1)进程ID
进程的身份标识 ---进程的身份证号
2)内存指针
指明了这个进程要执行的代码/指令再内存的哪里,以及这个进程执行中依赖的数据都在哪里
当运行exe,操作系统就会把这个exe(进程要执行的二进制指令和一些重要的数据)加载到内存中,变成进程
3)文件描述符表
程序运行过程中,经常要和文件打交道(文件是在硬盘上的)
进程每次打开一个文件,就会在文件描述符表上多增加一项
这个文件描述符表就可以视为一个数组,里面的每个元素又是一个结构体,对应着一个文件的相关信息
2.2PCB调度属性
为了实现进程的调度
这里涉及的问题就是所谓的进程调度
并行和并发(面试问题)
并行:微观上,两个CPU核心,同时执行两个任务的代码
并发:微观上一个CPU核心,先执行一会任务1 ,再执行一会任务2 ,...再执行一会任务1 .只要切换的够快,宏观上看
就好像这么多任务上同时执行
举例
1)状态
描述了当前这个进程接下来该怎么进行调度
就绪状态:随时可以去CPU上执行
阻塞状态/睡眠状态:暂时不可以去CPU上执行
2)优先级
先给谁分配时间,后给谁分配时间
以及给谁分的多,给谁分的少
3)记账信息
统计了每个进程,分别执行了多久,分别都执行了哪些指令
分别排队多久
为进程调度提供指导依据
4)上下文
表示了上次进程被调度处CPU的时候,当时程序执行状态
下次进程上CPU的时候,就可以恢复之前的状态,然后继续执行
进程被调度出CPU之前,要先把CPU中的所有的寄存器的数据都给保存到内存中(pcb的上下文字段)
相当于存档
下次进程再次被调度上CPU的时候,就可以从刚才的内存恢复这些数据到寄存器中,
相当于读档
存档+读档的过程,存档的存储的信息,就称为上下文/
3.进程的调度
就是操作系统在考虑CPU资源如何给各个进程进行分配
内存资源是依靠虚拟地址空间分配的
3.1.隔离
3,2 通信
进程之间现在通过虚拟地址空间,已经各自隔离开
但是在实际工作中,进程之间有的时候需要相互交互
4.总结
四.线程
系统支持多任务,程序员需要并发编程
为什么低效,因为找合适的资源需要时间精力
如何解决问题
思路1:进程池(数据库连接池,字符串常量池)
思路2 :通过线程来实现并发编程
为什么线程比进程更轻量?
因为进程重量重在资源申请释放(在仓库找东西)
线程是包含在进程中,一个进程中多个线程,共用同一份资源(同一份内存+文件)
五,进程和线程的区别和联系(面试)
进程包含线程,一个进程里可以有一个线程或者多个线程
.进程和线程都是为了处理并发编程这样的场景
但是进程有问题,频繁创建和释放资源的时候效率低,相比之下,线程因为少了申请释放资源的过程更轻量,所以效率高
操作系统创建进程,要给进程分配资源,进程是操作系统分配资源的基本单位
操作系统创建线程,要在CPU上调度执行,线程是操作系统调度执行的基本单位
进程具有独立性,每个进程有各自的虚拟地址空间,一个进程挂了,不会影响到其他进程.
同一个进程中多个线程,共有同一个内存空间,一个线程挂了,可能会影响到其他线程,甚至导致整个进程崩溃.