想要理解这个问题,我们要先了解一下操作系统以及进程相关的知识:
操作系统的功能有很多,
例如:
-
进程管理(Process Management):
- 功能:创建和终止进程,进程调度,进程同步与通信,进程状态管理。
- 作用:确保CPU资源被有效利用,实现多任务处理。
-
内存管理(Memory Management):
- 功能:内存分配与释放,内存保护,虚拟内存管理(分页和分段),内存交换。
- 作用:保证进程之间的内存隔离和高效利用系统内存。
-
文件系统管理(File System Management):
- 功能:文件和目录的创建、删除,文件读写和访问控制,存储设备的管理。
- 作用:提供一个方便和高效的文件存储和访问机制。
-
设备管理(Device Management):
- 功能:设备驱动程序管理,设备分配与回收,I/O设备的访问控制。
- 作用:实现对各种硬件设备的控制和管理,为用户和应用程序提供一致的设备访问接口。
注意:
操作系统不会直接操作硬件设备,而是通过硬件厂商提供的驱动程序间接操作硬件设备!
操作系统的功能还有很多,这里就不细说了,不过大致可以概括为:
1.高效使用和管理硬件设备。
2.为程序提供一个高效、安全的运行环境。
一、什么是进程?
大家都知道后缀为.exe的是一个应用程序。
如果不启动它,实际上就是硬盘上的一个文件。
如果启动这个程序,那么他就是一个进程(或者多个):
进程具有一些关键特性,比如:
独立性:每个进程有自己独立的地址空间,不同进程之间的地址空间是隔离的。这意味着一个进程不能直接访问另一个进程的内存区域,提供了进程间的隔离性和安全性。
资源拥有者:进程拥有自己的一组资源,例如打开的文件、网络连接、CPU时间片和内存区域。这些资源是进程独立运行所必需的。
状态信息:进程有自己的状态信息,包括寄存器状态、程序计数器、堆栈指针等。这些状态信息使得进程在被中断时能够被暂停和恢复,从而实现多任务处理。
进程的状态有很多种,比如:
正常情况下,ABC随叫随到。
此时,ABC的状态就是——“就绪状态”
又比如:
ABC这个月要出差没有时间,不能“随叫随到”
这是,ABC成为——“等待状态”
例如一个程序,进行硬盘IO(需要读取数据才能运行)
二、什么是PCB?
当今的操作系统都是“多任务系统”——支持运行多个进程。
比如说:
Windows系列、Unix系列、Linux系列、OSX系列、Android系列、iOS系列、鸿蒙等等。
当系统运行的进程多了,就需要对进程进行有效的管理,而管理的核心就是:
PCB(Process Control Block,进程控制块)——操作系统用来存储进程信息的重要数据结构。
可以把PCB简单的理解成一个结构体,对就是C语言中学过的结构体。
每一个进程都有一个对应的结构体,存储关于进程的信息。
这些结构体,串联成一个链表(实际上不止是一个链表,而是一个很复杂的数据结构)
创建一个新的进程(双击exe文件),就创建一个节点,插入链表
销毁进程,就遍历这个链表,找到对应节点,然后删除。
那么PCB里面存储了那些信息呢?
这里列举了一些比较重要的信息(一定要掌握):
1. 进程标识信息
- 进程ID (PID,Process identifier,进程标识符): 每个进程都有一个唯一的进程标识符,用于区分不同的进程。
2. 内存指针(一组)
- 描述进程以来的指令和数据在内存的那个区域
- 操作系统运行exe,就会读取exe中的指令和数据,加载到内存中。
3. 进程调度信息
- 进程的状态: 记录进程的当前状态(如刚才所讲的就绪、等待、运行等)。
- 进程的优先级: 用于进程调度,决定那个进程先执行,那个进程后执行。
- 进程的上下文: 很好理解,一个进程暂时停止时,需要记录好当前的运行信息,以便于下一次快速运行此进程。
- 进程的会计信息:用于优化资源管理,操作系统可以通过会计信息,查看进程的资源占用情况,优化进程调度方式,防止资源滥用,导致某一个进程运行崩溃(程序崩溃)。
4. 资源分配信息
- 打开的文件列表: 记录进程当前打开的文件及其相关信息。
- I/O设备信息: 记录进程使用的输入输出设备信息。
三、操作系统如何实现多个进程同时运行?
要想在一台点脑(或者手机)上同时运行多个程序,其实底层是比较复杂的。
上一节我们介绍了PCB(进程控制模块),操作系统会读取每一个进程对应的PCB内的内容(进程状态、进程的会计信息、进程优先级....),然后调度器依据各种进程调度策略、算法,动态调整硬件资源的分配情况。
CPU、内存、磁盘、网络就是硬件资源。
具体运行逻辑就是“分时复用”/“并发执行”
1)分时复用
我们知道CPU运算速度非常快。
某一时刻,CPU一会儿运行进程a,
一会儿运行进程b,
一会儿运行进程c,它的切换速度非常快,快到人类根本感知不到。
虽然这种分时复用方式,算不上严格的同时执行多个进程,但是宏观上(人的角度)我们仍然叫他“并发执行”!
2)并行执行
当今CPU的结构及大部分都是多核心的。
甚至支持超线程(因特尔发明的技术,实现每个物理核心当作两个逻辑核心使用,简称”一个顶俩“)
不了解也不要紧。
总之,CPU的这种属性,就极大的支持了并发执行。
实现了在微观层面(硬件级别)严格意义上的多个进程同时执行!——这我们称之为”并行执行“。
对应的编程手法我们称为——”并发编程“。
回到标题的问题:手机是如何实现多个应用程序同时运行的?
其实答案已经在第三大点了。
每种手机都有对应的操作系统,比如IOS、Android、HarmonyOS等。
这些手机的操作系统实现多进程管理和运行的方式和电脑的操作系统,如:
windows、Linux、MacOS(和IOS完全是两个系统)等的方式一样:
通过各种设计(PCB方式管理多个进程、采用各种进程调度策略/算法,保证硬件资源的充分利用、CPU的算力支持,如”分时复用“、”并发执行“等)实现多进程运行。