冯诺依曼体系
CPU中央处理器:进行算术运算和逻辑判断
存储器:分为外存和内存,用于存储数据(使用二进制的方式存储)
输入设备:用户给计算机发号施令的设备
输出设备:计算机给用户汇报结果的设备
CPU基本工作流程
※ 操作系统(Operating System)
操作系统是一组计算机资源管理的软件的统称。目前常见的操作系统有:Windows系列,Unix系列,Linux系列,OSX系列,Android系列,iOS系列、鸿蒙系列等。
操作系统的定位
操作系统有两个基本功能:
1.防止硬件被时空的应用程序滥用;
2.向应用程序提供简单一致的机制来控制复杂而通常大相径庭的低级硬件设备。
※进程/任务
进程是操作系统资源分配的基本单位。
进程是一个重要的“软件资源”,是由操作系统内核负责管理的。
描述:使用C语言的结构体来描述进程属性。操作系统基本上都是使用C/C++来写的。
组织:通过双向链表,来把多个PCB给串到一起(并不是一个单纯的双向链表)
创建一个进程,本质上就是创建一个PCB这样的结构体对象,把它插入到链表中。
销毁一个进程,本质上就是把链表中的PCB节点删除。
任务管理器查看到进程列表,本质上就是遍历这个PCB链表。
用来描述进程的这个结构体起了一个特殊的名字---进程控制块。
进程控制块(PCB)
计算机内部要管理任何现实事物,都要将其抽象成一组有关联的、互为一体的数据。在JAVA语言中,我们可以通过类/对象来描述这一特征。
PCB里有哪些描述了进程的特征?
1.pid
进程的身份标识符(唯一的数字)
2.内存指针
指向了说自己的内存是哪些
3.文件描述符表
硬盘上的文件等其他资源
内存指针和文件描述符表描述了进程有哪些硬件资源
4.进程调度相关的属性
(1)进程的状态
就绪状态:随叫随到
运行状态:正在CPU上执行
阻塞状态:短时间内无法响应(例如正在进行IO操作,读写数据)
(2)优先级:进程也是有优先级的,操作系统进行调度并不是一碗水端平的。先给谁排,后给谁排,分别排多少
这里介绍一个概念,并发、并行
为了解决CPU"狼多肉少"的问题,希望进程可以“同时运行”,“分时复用”。
并行:微观上同一时刻,两个核心上的进程,就是同时执行的。
并发:微观上,同一时刻,一个核心上只能运行一个尽成,但是可以对进程进行快速的切换(灯泡闪,人眼看不出来)人感觉这几个进程就好像在同时进行。往往把并行和并发统称为并发。
除非显式生命,否则谈到并发就是并行+并发。
(3)上下文
操作系统在进行进程切换的时候,就需要把进程执行的“中间状态”记录下来,保存好
下次这个进程在CPU执行的时候,就可以恢复上次的状态,好继续执行。
类似于“存档”、“读档”,上下文的本质上就是你存档的内容,进程的上下文就是CPU中各个寄存器的值。(CPU内置的存储数据的模块,保存的就是程序运行过程中的中间结果)。
保存上下文,就是把这些CPU寄存器的值记录到内存中。
恢复上下文,就是把内存中的这些寄存器的值恢复回去。
(4)记账信息
操作系统统计每个进程在cpu上占用的时间和执行的指令数目,根据这个来决定下一阶段如何进行调度。
内存分配--内存管理
操作系统对于内存资源的分配,采用的模式是空间模式,不同的进程使用内存中不同的区域。互相之间不会干扰。
虚拟地址空间:程序所获得的内存地址,并非是真实的物理地址,而是经过了一层的抽象,虚拟出来的地址。虚拟空间地址是为了防止进程间相互产生影响。
进程间通信
解决进程之间的隔离性后,又会存在新问题,有些时候确实需要进程间的通信,需要数据进行交互,在隔离性的基础上开一个口子。这时就需要一个“公共空间”,基于这个公共空间进行交互数据即可(类似于无接触配送),目前的主流操作系统提供的进程间的通信机制主要有:
1.管道
2.共享内存
3.文件
4.网络
5.信号量
6.信号
在后续的博客总结中会主要介绍两类方式:基于文件、基于网络两种。
本篇博客就记录这么多吧,下篇博客见~