你真的了解什么是进程吗?
我们的操作系统里面会有很多应用,比如手机里面的各种应用,每一个应用都有一个或多个进程,而且每个应用运行时又会用到很多不同的资源。进程就帮助我们隔离了不同的资源,利用各种资源帮助应用管理着各种状态,因此,我们经常说 进程是资源分配的最小单位 。
多进程的目的是为了满足用户的需要,同时对多个资源进行处理,简单来说就是同时做多个事情。
进程拥有了资源之后,就需要去利用它们,所以就需要线程的帮忙了,每个进程都至少需要一个线程作为执行单位,同时也可以开启新的线程执行。另外,一个 CPU 核心一个时刻只能运行一个线程,多个线程之间需要不断进行调度,因此我们经常说 线程是CPU调度的最小单位
有了线程之后,进程间可以并发,而且一个进程内部的多个线程之间也是可以并发的。
而多线程的目的就是为了充分利用并发带来的效率上的提高。
对于一个 CPU 核心,一个时刻只能运行一个线程(因此也只能运行一个进程),为了实现并发运行,引入了分时的概念,即将时间分为多个时间片,不同的时间片执行不同的线程,以实现一个时间段内运行多个线程
进程正在 CPU 上运行,对于 CPU 的单个核心来说,一个时刻最多只能有一个进程处于运行状态
→ 就绪态:当分派给当前进程的时间片用完以后,该进程就必须让出 CPU,变回就绪态等待下一次进程调度分派时间片;或者,如果是可剥夺的操作系统,有更高优先级的进程进入就绪态时,也需要让出 CPU
→ 阻塞态:当进程请求某一资源(如外设)的使用和分配或等待某一事件的发生(如I/O操作的完成)时,它就从运行状态转换为阻塞状态。
准备运行,已经获得了出 CPU 以外的所有需要的资源,等待 CPU 分派时间片
→ 运行态:当前进程被分派了 CPU 时间片后,也就获得 CPU 资源(分派处理机时间片),可以使用 CPU 了,因而进入运行态
因为要等待某个资源或者某个事件的发生而被阻塞因此暂停运行。
就绪状态是指进程缺少 CPU 资源;而等待状态是指需要除了 CPU 以外的其他资源或者某个事件
→ 就绪态:当进程等待的事件到来时,如I/O操作结束或中断结束,或者获得了等待的资源,中断处理程序就会把该进程的状态转换为就绪状态
一种低级的通信方式 。在操作系统这种多线程,多进程环境中,我们要密切关注资源的同步互斥问题
为了解决共享资源的同步互斥问题,我们将具体的资源的数量抽象为信号量 Semaphore,通过 P 操作和 V 操作分别对信号量进行减和增。
如果我们将信号量看作为资源设置的资源锁,那么 P 操作相当于加锁操作,而 V 操作相当于解锁操作 。
随着操作系统的发展,用于进程之间实现通信的机制也在发展,并已由早期的低级进程通信机制发展为能传送大量数据的高级通信工具机制。
在通信的进程之间存在一块 可直接访问的共享空间 ,通过对这片共享空间进行写/读操作实现进程之间的信息交换。
当然,在对共享空间进行写读操作时,也需要使用同步互斥工具(如 P操作、V操作),对共享空间的写读进行控制。
通信的进程之间不存在可直接访问的共享空间,则必须利用操作系统提供的消息传递方法实现进程通信。
利用一个“管道”实现进程间的通信。这个管道是一个连接读进程和写进程的共享文件。
写进程以字符流的方式将数据输入到这个共享文件中,供读进程读取。当然这一系列操作也需要管道提供同步和互斥的能力。