计算机原理探险系列(五)-- 磁盘存储探秘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,回收资源等等。所以在处理一些复杂程序的时候,我们更加愿意使用多线程技术。

目录
相关文章
|
5天前
|
算法 大数据 调度
深入理解操作系统:进程管理与调度策略
【4月更文挑战第27天】 在现代计算机系统的核心,操作系统扮演着至关重要的角色。它不仅管理硬件资源,还为应用程序提供必要的服务。其中,进程管理是操作系统的一个关键组成部分,它负责创建、执行以及终止进程。而进程调度策略则是确保系统高效运行的基石。本文将探讨操作系统中的进程管理机制及其调度策略,分析它们如何影响系统性能,并讨论当前的挑战及未来可能的发展方向。
|
23小时前
|
负载均衡 算法 大数据
深入理解操作系统:进程管理和调度策略
【5月更文挑战第1天】 在现代操作系统的核心功能中,进程管理与调度策略是确保系统高效、稳定运行的关键。本文旨在深入剖析操作系统中的进程概念、进程状态转换以及进程调度机制。通过对先进先出、最短作业优先和时间片轮转等调度算法的比较分析,我们不仅揭示了它们在资源分配和任务执行中的应用,还讨论了它们在不同场景下的表现和局限性。此外,文章还将探讨多核处理器环境下的调度策略演变,以及未来操作系统在进程管理方面可能面临的挑战。
|
1天前
|
算法 调度
深入理解操作系统中的进程调度策略
【5月更文挑战第1天】在多任务操作系统中,进程调度策略是决定系统性能和响应能力的关键因素。本文将详细探讨现代操作系统中常见的进程调度算法——从简单的先来先服务(FCFS)到复杂的多级反馈队列(MLFQ),以及实时系统中的立即模式和时间片轮转(RR)。我们将分析每种调度策略的工作原理、优势、局限性以及它们如何影响操作系统的整体表现。通过比较不同策略在各种负载场景下的表现,读者将能更好地理解如何为特定应用选择最合适的调度策略。
|
1天前
|
Java 调度 开发者
构建高效微服务架构:后端开发的新趋势深入理解操作系统之进程调度策略
【4月更文挑战第30天】 随着企业数字化转型的不断深入,传统的单体应用逐渐不能满足快速迭代和灵活部署的需求。微服务架构以其高度模块化、独立部署和易于扩展的特性,成为现代后端开发的重要趋势。本文将探讨如何构建一个高效的微服务架构,包括关键的设计原则、技术选型以及可能面临的挑战。
|
2天前
|
安全 算法 网络安全
构筑网络长城:网络安全漏洞解析与防御策略深入理解操作系统:进程管理与调度策略
【4月更文挑战第30天】 在数字化时代,网络安全已成为维护信息完整性、确保数据流通安全和保障用户隐私的关键。本文将深入探讨网络安全的核心问题——安全漏洞,并分享关于加密技术的最新进展以及提升个人和企业安全意识的有效方法。通过对常见网络威胁的剖析,我们旨在提供一套综合性的网络防御策略,以助力读者构建更为坚固的信息安全防线。 【4月更文挑战第30天】 在现代操作系统的核心,进程管理是维持多任务环境稳定的关键。本文将深入探讨操作系统中的进程概念、进程状态转换及进程调度策略。通过分析不同的调度算法,我们将了解操作系统如何平衡各进程的执行,确保系统资源的高效利用和响应时间的最优化。文中不仅剖析了先来先
|
2天前
|
算法 调度
深入理解操作系统:进程管理与调度策略
【4月更文挑战第30天】 在现代计算机系统中,操作系统扮演着至关重要的角色。它不仅负责管理和协调计算机硬件资源,还为应用程序提供了一个稳定、高效的运行环境。本文将深入探讨操作系统中的进程管理机制和调度策略,以帮助读者更好地理解操作系统的工作原理和优化方法。
|
2天前
|
算法 调度 UED
深入理解操作系统之进程调度策略
【4月更文挑战第30天】 在多任务操作系统中,进程调度策略是核心组件之一,负责决定哪个进程将获得CPU资源。本文探讨了操作系统中不同的进程调度策略,包括先来先服务(FCFS)、短作业优先(SJF)和轮转(RR),以及它们的优缺点。进一步分析了现代操作系统中如何根据不同场景需求选择或结合这些策略以优化系统性能。文章通过比较各策略在响应时间、吞吐量及等待时间等指标上的表现,为读者提供了一个全面的视角,帮助理解操作系统内部如何处理进程调度问题。
|
2天前
|
机器学习/深度学习 算法 调度
深入理解操作系统之进程调度策略
【4月更文挑战第30天】 在多任务操作系统中,进程调度策略是核心组成部分之一,其决定了处理器资源分配的合理性与效率。本文将详细探讨现代操作系统中常见的进程调度算法,包括它们的原理、特点以及适用场景。通过对比分析先来先服务(FCFS)、短作业优先(SJF)以及轮转调度(RR),我们旨在提供一个全面的视角以帮助读者深刻理解不同调度策略对操作系统性能的影响。此外,文章还将讨论如何根据实际需求选择和优化调度算法,以及未来可能的发展趋势。
|
2天前
|
算法 安全 大数据
深入理解操作系统之进程管理与调度
【4月更文挑战第30天】 在现代计算机系统中,操作系统的核心职能之一是高效地管理和调度进程,确保系统的稳定运行和资源利用的最优化。本文将深入探讨操作系统中的进程管理机制、进程调度算法以及它们在多核处理器环境下的实现。通过对不同操作系统中进程调度策略的比较,我们将揭示进程管理的关键技术和性能权衡,同时对未来操作系统设计中可能面临的挑战进行展望。
|
2天前
|
开发框架 算法 前端开发
深入理解操作系统:进程管理与调度策略移动应用开发的未来:跨平台框架与原生系统的协同进化
【4月更文挑战第30天】 本文旨在探讨操作系统中的核心机制之一 —— 进程管理,并详细分析不同的进程调度策略。通过对操作系统中进程概念的剖析,我们揭示了进程状态、进程控制块(PCB)以及进程调度器的重要性。文章进一步对比了几种常见的进程调度算法,如先来先服务(FCFS)、短作业优先(SJF)、轮转调度(RR),以及多级反馈队列(MLQ),并讨论了它们在不同应用场景下的性能表现。最后,文章还涉及了现代操作系统中对于多核处理器和实时系统所采用的特殊调度考虑。 【4月更文挑战第30天】 在移动设备日益成为人们日常生活与工作不可或缺的组成部分时,移动应用的开发和维护也变得愈加重要。本文将探讨移动应用