冯诺依曼体系:运算器,存储器,控制器,输入设备,输出设备;
一般来说:存储空间:硬盘>内存>cpu; 数据访问速度:cpu>内存>硬盘;
CPU:cpu的执行顺序大致为:取指令,解析指令,执行指令;cpu的制程越小越好因为一个cpu的面积是固定的,如果制程越小,单个门电路体积就越小,整个cpu上能够搭载的门电路数量就越多,cpu上面的功能模块就越多,也能算速度就越快;现在的cpu发展不仅仅追求小,更追求多核==>“并发编程”
寄存器:也是用来存储数据的一个组件,但是寄存器在cpu内部,且存储空间非常小(几百字节~几K)但是访问速度非常快;在执行命令时,会把数据加载到寄存器,然后经过指令对寄存器进行加减等操作,最终把寄存器中的最终结果返回到内存中;
操作系统:既可以管理各种硬件设备,还可以为各种软件提供稳定的环境;例如进程管理,文件管理,内存管理等等
进程(Process):进程就是操作系统对一个正在运行的程序的一种抽象,可以把进程看作一个程序的一次运行过程;是操作系统资源分配的基本单位
进程控制块抽象(PCB Process Control Block):计算机内部要管理任何现实事物,都需要将其关联成一组有关联的、互为一体的数据(Java中通过类/对象来描述)
进程的四个关键的属性:
- 进程的优先级
- 进程的状态
- 进程的记账信息
- 进程的上下文
通过以上四个属性来实现进程的调度:
//什么时候进程的调度???//说白了就是当前的计算机cpu是有限的,但是进程数量多,例如cpu只有6核,
//但是进程有数十个,因此操作系统要让每个进程都可以在内核中运行;
//(一个线程占用一个cpu核心)
//并发式的执行:在cpu上轮流的执行(不是同时执行)
//并行式的执行:在多核cpu上同时跑进程(同时执行)
进程的优先级:操作系统安排多个进程的执行顺序;
进程的状态:对于进程来说有就绪状态(进程随时可以在cpu上运行)和阻塞状态;(进程需要在某个其他进程完成之前才能在cu上执行,否则无法继续执行)
进程的记账信息:某个进程已经执行了多长时间或者已经执行多少条指令;
进程的上下文:对于进程来说上下文指的就是cpu里的寄存器的值,上下文会在进程被切除cpu之前把寄存器的状态保存到PCB里面,下次回来时会把PCB里面上下文的值读取出来,恢复到寄存器里面。(例如游戏的存档和读档)
进程的虚拟空间:
进程需要使用系统的资源,其中内存资源就是很关键的资源;
在C语言中,有一个操作叫做指针解引用,解引用的时候指向的是合法的地址;如果不合法呢???
因此为了让各个进程互不干扰,操作系统就引入了“虚拟地址空间”概念:
即每个进程都有自己的地址空间,相互之间不会有影响,即使指针出错,操作系统也会及时发现,不会影响到其他的进程,如果出问题,也会被限制到进程的内部;
在上图中,当进行指针解引用的操作的时候,如果指针一旦出错,经过MMU,MMU会向操作系统报告错误,进程会终止,程序报错;
由于虚拟空间具有隔离性,因此即使某一个进程报错也不会影响到其他进程;
进程间的通信:
当进程被隔离之后,进程相互之间无法进行信息交换,无法进行配合工作,
因此操作系统会让各个进程之间进行通信:
但本质都是创建一个公共资源,各个进程通过这个公共资源进行通信;