目录
一、冯诺依曼体系:
二、操作系统
三、进程
3.1 PCB(进程控制块)— 描述进程属性的结构体
3.2 CPU分配 — 进程调度
3.3 内存分配 — 虚拟地址
3.4 进程间通信
一、冯诺依曼体系:
- CPU中央处理器(运算器+控制器):CPU是计算机最核心的部分,进行算数运算和逻辑判断。CPU最重要的指标是“主频”,如:2.5Ghz,描述了CPU的运算速度,可以近似认为,每秒执行25亿条指令。
- 存储器(内存+外存):内存,就是我们平时说的内存,比如我的电脑是16GB内存。外存,就是硬盘,软盘(现在已经没了),U盘,光盘
- 输入设备
- 输出设备
内存和外存的区别:
1、内存上读写数据的速度快,外存的读写数据的速度慢(速度能差3-4个数量级,也就是几千倍,甚至上万倍)
2、内存空间比较小,外存空间比较大
3、内存比外存贵
4、内存的数据是“易失”,断电之后,数据就会丢失;外存的数据是“持久”的,断电之后,数据还在。
另外,
显卡(GPU),和CPU类似,CPU是通用计算芯片,GPU是专用计算芯片。
二、操作系统
操作系统是个搞管理的软件。对下,要管理硬件设备;对上,要给软件提供稳定的运行环境。是软件、硬件和用户之间交互的媒介。
应用程序不能直接操作硬件设备,要通过层层调用最终才可以达到目的。
java虚拟机是操作系统中的一个应用程序,在java虚拟机上运行的java代码很多都要通过系统调用,进一步和内核交互,在通过驱动程序操作硬件设备。
三、进程
一个跑起来的应用程序,就是一个进程。如果不在运行中,只能叫程序,不能叫进程。
进程也叫作任务。通过任务管理器可以查看到当前电脑上所有的进程。
进程是操作系统资源分配的基本单位。
3.1 PCB(进程控制块)— 描述进程属性的结构体
进程是一个重要的“软件资源”,是由操作系统内核负责管理的。
那么,操作系统内核是如何管理进程的呢?
进程有许多属性,使用PCB来描述进程属性。(PCB是一个C语言的结构体,叫做进程控制块。)然后通过双向链表,把多个PCB给串到一起。
创建一个进程,本质上就是创建一个PCB这样的结构体对象,把它插入到链表中;销毁一个进程,本质上就是把链表上的PCB结点删除掉;任务资源管理器查看到进程列表,本质上就是遍历这个PCB链表。
那么,PCB描述了进程的哪些核心属性呢?
1、pid:进程的身份标识符(唯一的数字)
2、内存指针:指向了自己的内存是哪些。
3、文件描述符表:硬盘上的文件等其他资源的分配
内存指针和文件描述符表这两个属性,描述了进程持有了哪些硬件资源(硬件资源是指内存,硬盘,网卡,CPU等)
4、进程调度相关的属性:
(1)进程的状态:
- 就绪状态:随叫随到,进程随时准备好了去CPU上执行
- 运行状态:正在CPU上执行
- 阻塞状态:如进程在进行密集的IO操作,在读写数据,短时间无法到CPU上执行。
(2)进程的优先级:决定了分配CPU资源的先后顺序和多少的问题。
(3)上下文:即存档读档,CPU的寄存器上存储了程序运行过程中的中间结果,即一些值。
保存上下文,把这些CPU寄存器的值记录到PCB中,
恢复上下文,就是把PCB中的这些寄存器值恢复回去,使进程可以在CPU上接着上次的状态继续运行。
(4)记账信息:操作系统会统计每个进程在CPU上占用的时间和执行的指令数目,根据这个来决定下一阶段如何调度。
3.2 CPU分配 — 进程调度
进程调度是用来解决CPU分配的问题的。CPU很少,进程很多,想要让有限的CPU调度执行很多的进程,就需要进程调度。
首先,操作系统里有个调度器。其次,PCB里有进程调度相关的属性。通过调度器,再加上PCB里的进程调度相关属性的支持,通过并行和并发的方式,最终完成CPU的分配。
3.3 内存分配 — 虚拟地址
程序中获取到的内存地址,并不是真是的物理内存的地址,而是抽象出来的虚拟地址。
物理地址,内存条上的真实地址,给进程分配内存时,如果一个进程出现bug,访问内存越界,就会导致其他原本正常运行的进程出现问题。所以,
引入虚拟地址空间,由操作系统和专门的硬件设备负责进行虚拟地址到物理地址的转换。这样就可以对进程使用的内存空间进行“隔离”,避免进程之间相互影响。具体过程如下:
MMU硬件设备会将分配给进程的虚拟地址映射到物理内存上,MMU只能识别分配给进程的那一段虚拟地址,当进程出现访问内存越界,MMU识别不了此虚拟地址,就会直接向进程发送一个 SIGN SEGEMENT FAULT 信号,引起该进程崩溃,不会影响到其他正常运行的进程。
3.4 进程间通信
搞一个多个进程都能访问到的“公共空间”,基于这个公共空间进行交互数据。如基于文件,基于网络等形式。