计算机原理探险系列(五)-- 磁盘存储探秘OS中的进程

简介: 计算机原理探险系列(五)-- 磁盘存储探秘OS中的进程

什么是进程



以下几种说法我感觉都是正确的理解:

1.进程是一个动态执行的过程,是CPU分配虚拟内存空间的基本单位。

2.进程包含了程序,是程序执行的一种表现,二者之间呈现多对多的一种关系。


进程包含了什么



包含的内容非常丰富:


1.执行的程序代码

2.程序代码运行时候产生的临时变量

3.指令执行的地址信息

4.系统资源信息,例如正在打开的文件

简单一句话就是进程包含了一个程序在运行时候所需要的所有资源信息。


程序和进程的关系



程序是进程的一个基础,计算机执行的所有功能都是基于进程为单位进行的,但是进程内部真正执行任务的核心却是程序的代码逻辑,程序的每次执行都有可能构成不同的进程。


虽然我们的程序一般都是存储在磁盘当中,但是数据如果不一样的,就有可能进程的执行最终结果不一样,从而说明进程不一样。所以一个程序其实是可以对于多个进程的。二者的关系准确应该说是多对多的关系。


程序:静态的代码结合

进程:程序的执行表现


程序进入内核态

例如一个进程需要读取磁盘文件的信息,此时需要和系统的硬盘打交道,那么这个时候读取文件的信息就需要交给操作系统内核来替代进程执行,这种场景我们一般就称之为进程进入了内核态。


进程的状态


创建

此时会向操作系统内核申请一个PCB,在此过程中需要向操作系统申请一些管理进程的基本信息,完成资源的分配,如果操作系统此时没有额外的空间就无法满足,此时会导致进程无法正常进入创建状态。


就绪

当操作系统为进程创建并开辟了一定的资源空间之后,只需要等待CPU的时间分片进程便可以开始执行。此时进程在外存,但只要进入内存,即可运行。


执行

CPU调度开始执行指定的进程,进程进入执行状态。


阻塞

已经在运行的进程如遇到了一些io堵塞,或者缓存区申请失败的问题,就会处于一个阻塞的状态。此时进程在外存并等待某事件的出现。


终止

进程执行结束,或者被意外终止,就会进入一个终止的状态。


状态切换的本质,CPU时间片切换

OS的底层实际上有着一个专门处理CPU调度的模块用于给不同的进程分配时间片:


网络异常,图片无法展示
|


看起来我们在使用计算机的时候各个程序都是在同时运行,但是实际上是cpu给不同程序分配了不同的时间片执行,然后进行快速切换,由于切换的速度非常快,所以让人们从宏观的角度上看起来似乎都在并行执行。


CPU分片给到指定的程序执行,如果分片时间截止,进程依旧没有执行完毕,那么此时CPU会将时间片剥夺分给下一个进程。如果在分片期间遇到了进程堵塞状态,那么CPU也会自动将时间片提早结束分配给下一个进程使用。


进程之间的通信


无名管道


A,B两个进程在进行通信的时候无法读取到各自的用户态中的变量信息,此时需要进行通信的话需要将变量统一写入到操作系统内核一个共享缓冲区中,然后供对方进行内核调用的时候去读取,就如同下图所示:


图片


这种方式进行进程间通信的弊端在于多次的用户态到内核态的调用会比较消耗计算机性能。


局限性


1.只能用作与具有亲缘关系的进程之间进行通信操作,例如 父子进程。


2.固定了管道的读取和写入端,它是半双工的(即数据只能在一个方向上流动),具有固定的读端和写端。如下图:

图片


按照上图所示,当父进程希望和子进程进行通信的时候,首先父进程需要开启写入口,然后子进程开启读入口。


FIFO命名管道


FIFO命名管道是利用了文件来充当共享数据区域,将变量都存储到这个区域之后对该文件进行写入和读取数据从而实现进程间的通信功能。


类似的案例:服务端和客户端利用FIFO进行进程间的通信功能。


如下图所示:


网络异常,图片无法展示
|


但是这种设计有个弊端,就是当有多个客户机发送请求的时候,服务端需要针对不同客户机进行响应数据的时候会比较麻烦,因此就有了以下设计:


网络异常,图片无法展示
|


消息队列进行通信


在unix操作系统内部,提供了消息队列相关的接口供外界进行调用使用,多个进程之间进行通信可以借助消息队列的帮助,这种通信是同步的机制,一端写入,一端读取即可。如下图:


网络异常,图片无法展示
|


信号量进行通信


信号量只允许程序对其访问是原子操作,只允许进程对它进行等待操作。对信号量进行+ 或者 - 操作(即P(信号变量))和发送(即V(信号变量)) 来限制多个进程之间对相同共享资源的访问,是属于同步进程的一种操作(使在任一时刻只能有一个执行线程访问代码的临界区域)。


共享内存


对一片共享的内存区域进行加锁控制,防止多进程访问出现资源竞争,然后往里面写入和读取数据,从而实现多进程的互相通信。


进程控制块PCB



什么是进程控制块

描述进程的数据结构,操作系统管理控制进程运行所用的信息集合。可以用于作为进程存在的唯一标识。


当创建了一个进程之后就会立即创建一个PCB控制块。


PCB用于存储进程在执行过程中需要用到当一些内存信息,上下文资源内容。


PCB内部有什么


1.进程创建者标识记录信息。


2.进程执行程序的过程中需要使用到的寄存器信息,栈指针信息


3.进程控制信息,例如进程执行程序中打开的资源文件信息,调度状态信息,进程间通信信息等等。


PCB的组织方式


统一状态的进程其PCB成一链表,多个状态对应多个不同的链表,各状态的进程形成不同的链表,例如就绪链表和阻塞链表。


索引链表


同一状态的进程归入一个index表(由index指向PCB),多个状态对应多个不同的index,各状态的进程形成不同的索引表,例如就绪索引表,阻塞索引表。


网络异常,图片无法展示
|


各状态的进程形成不同的链表,例如:就绪状态:就绪链表,堵塞状态:堵塞链表。


多进程和多线程之间的性能开销差异性


多个进程之间的通信是比较复杂的,开销较大,需要额外分配资源,建立PCB,回收资源等等。所以在处理一些复杂程序的时候,我们更加愿意使用多线程技术。

目录
相关文章
|
14天前
|
算法 调度 UED
深入理解操作系统:进程调度与优先级队列
【10月更文挑战第31天】在计算机科学的广阔天地中,操作系统扮演着枢纽的角色,它不仅管理着硬件资源,还为应用程序提供了运行的环境。本文将深入浅出地探讨操作系统的核心概念之一——进程调度,以及如何通过优先级队列来优化资源分配。我们将从基础理论出发,逐步过渡到实际应用,最终以代码示例巩固知识点,旨在为读者揭开操作系统高效管理的神秘面纱。
|
8天前
|
消息中间件 安全 算法
深入理解操作系统:进程管理的艺术
【10月更文挑战第38天】在数字世界的心脏,操作系统扮演着至关重要的角色。它不仅是硬件与软件的桥梁,更是维持计算机运行秩序的守夜人。本文将带你走进操作系统的核心——进程管理,探索它是如何协调和优化资源的使用,确保系统的稳定与高效。我们将从进程的基本概念出发,逐步深入到进程调度、同步与通信,最后探讨进程安全的重要性。通过这篇文章,你将获得对操作系统进程管理的全新认识,为你的计算机科学之旅增添一份深刻的理解。
|
11天前
|
算法 调度 UED
深入理解操作系统:进程管理与调度策略
【10月更文挑战第34天】本文旨在探讨操作系统中至关重要的一环——进程管理及其调度策略。我们将从基础概念入手,逐步揭示进程的生命周期、状态转换以及调度算法的核心原理。文章将通过浅显易懂的语言和具体实例,引导读者理解操作系统如何高效地管理和调度进程,保证系统资源的合理分配和利用。无论你是初学者还是有一定经验的开发者,这篇文章都能为你提供新的视角和深入的理解。
33 3
|
13天前
|
Linux 调度 C语言
深入理解操作系统:进程和线程的管理
【10月更文挑战第32天】本文旨在通过浅显易懂的语言和实际代码示例,带领读者探索操作系统中进程与线程的奥秘。我们将从基础知识出发,逐步深入到它们在操作系统中的实现和管理机制,最终通过实践加深对这一核心概念的理解。无论你是编程新手还是希望复习相关知识的资深开发者,这篇文章都将为你提供有价值的见解。
|
15天前
|
算法 调度 UED
深入理解操作系统的进程调度机制
本文旨在探讨操作系统中至关重要的组成部分之一——进程调度机制。通过详细解析进程调度的概念、目的、类型以及实现方式,本文为读者提供了一个全面了解操作系统如何高效管理进程资源的视角。此外,文章还简要介绍了几种常见的进程调度算法,并分析了它们的优缺点,旨在帮助读者更好地理解操作系统内部的复杂性及其对系统性能的影响。
|
16天前
深入理解操作系统:进程与线程的管理
【10月更文挑战第30天】操作系统是计算机系统的核心,它负责管理计算机硬件资源,为应用程序提供基础服务。本文将深入探讨操作系统中进程和线程的概念、区别以及它们在资源管理中的作用。通过本文的学习,读者将能够更好地理解操作系统的工作原理,并掌握进程和线程的管理技巧。
33 2
|
15天前
|
消息中间件 算法 Linux
深入理解操作系统之进程管理
【10月更文挑战第30天】在数字时代的浪潮中,操作系统作为计算机系统的核心,扮演着至关重要的角色。本文将深入浅出地探讨操作系统中的进程管理机制,从进程的概念入手,逐步解析进程的创建、调度、同步与通信等关键过程,并通过实际代码示例,揭示这些理论在Linux系统中的应用。文章旨在为读者提供一扇窥探操作系统深层工作机制的窗口,同时激发对计算科学深层次理解的兴趣和思考。
|
17天前
|
消息中间件 算法 调度
深入理解操作系统:进程管理与调度策略
【10月更文挑战第29天】本文将带领读者深入探讨操作系统中的核心组件之一——进程,并分析进程管理的重要性。我们将从进程的生命周期入手,逐步揭示进程状态转换、进程调度算法以及优先级调度等关键概念。通过理论讲解与代码演示相结合的方式,本文旨在为读者提供对进程调度机制的全面理解,从而帮助读者更好地掌握操作系统的精髓。
30 1
|
17天前
|
算法 调度 UED
深入理解操作系统中的进程调度
【10月更文挑战第29天】探索进程调度的奥秘,本文将带你深入了解在操作系统中如何管理和控制多个并发执行的程序。从简单的调度算法到复杂的多级反馈队列,我们将逐步揭示如何优化系统性能和提高资源利用率。准备好一起揭开进程调度的神秘面纱吧!
|
17天前
|
调度 Python
深入浅出操作系统:进程与线程的奥秘
【10月更文挑战第28天】在数字世界的幕后,操作系统悄无声息地扮演着关键角色。本文将拨开迷雾,深入探讨操作系统中的两个基本概念——进程和线程。我们将通过生动的比喻和直观的解释,揭示它们之间的差异与联系,并展示如何在实际应用中灵活运用这些知识。准备好了吗?让我们开始这段揭秘之旅!