嵌入式Linux C多进程编程(三)——进程调度和进程的创建(fork)

简介: 嵌入式Linux C多进程编程(三)——进程调度和进程的创建(fork)

进程调度

查看进程的命令

ps top htop


一、进程状态


1.1 基本三态


基本三态:就绪态、执行态、等待态

0a2653c851af460fa595bd959398a8f1.png

第一种是进程因为等待输入而阻塞

第二种是调度程序选择另一个进程

第三种是调度程序选择一个进程开始运行

第四种是出现有效的输入


1.2 进程调度策略(抢占式和非抢占式)


1.先创建先执行

2.高优先级优先

3.短进程优先

4.时间片轮转


1.3 进程状态


2d65d23f6d4748949b924e4057485923.png


1.4 进程状态的切换


2e9b90b2ca334476abebe75bafe6eeaa.png


1.5 进程状态的查看


4cebaac233b3433da32a72337a77fc60.png


二、操作系统的核心


操作系统的核心就是任务(进程)管理


0a2653c851af460fa595bd959398a8f1.png


三、进程调度器


3.1 进程分类


2d65d23f6d4748949b924e4057485923.png

2e9b90b2ca334476abebe75bafe6eeaa.png


3.2 Linux调度策略


4cebaac233b3433da32a72337a77fc60.png


了解有这几个算法就行,如CFS,RT,DL


3.3 进程优先级


0a2653c851af460fa595bd959398a8f1.png


四、进程同步


临界资源操作系统中将一次只允许一个进程访问的资源称为临界资源,需要互斥访问

信号量实现互斥访问

进程是并发执行的,不同进程之间存在着不同的相互制约关系。所谓进程同步(线程同步同理),主要是解决临界资源互斥访问的问题。如多个进程访问同一片共享存,这片共享内存必须互斥使用。


五、进程的创建


2d65d23f6d4748949b924e4057485923.png


fork调用一次,返回两次,可能有三个返回值


#include <stdio.h>
#include <unistd.h>
#include <errno.h>
#include <stdlib.h>
int main(int argc, char const *argv[])
{
    pid_t pid;
    pid = fork();
    if (pid < 0)
    {
        perror("fork error\n");
        exit(1);
    }
    if (pid > 0)
    {
        printf("parent\n");
    }
    else if(pid == 0)
    {
        printf("child\n");
    }
    return 0;
}

0a2653c851af460fa595bd959398a8f1.png2d65d23f6d4748949b924e4057485923.png

写时复制


2e9b90b2ca334476abebe75bafe6eeaa.png


如果创建的子进程和父进程相同时,则公用一段空间

如果不同时,则重新开辟


相关文章
|
8天前
|
Linux
Linux编程: 在业务线程中注册和处理Linux信号
本文详细介绍了如何在Linux中通过在业务线程中注册和处理信号。我们讨论了信号的基本概念,并通过完整的代码示例展示了在业务线程中注册和处理信号的方法。通过正确地使用信号处理机制,可以提高程序的健壮性和响应能力。希望本文能帮助您更好地理解和应用Linux信号处理,提高开发效率和代码质量。
38 17
|
17天前
|
Linux
Linux编程: 在业务线程中注册和处理Linux信号
通过本文,您可以了解如何在业务线程中注册和处理Linux信号。正确处理信号可以提高程序的健壮性和稳定性。希望这些内容能帮助您更好地理解和应用Linux信号处理机制。
50 26
|
2月前
|
Java Linux API
[JavaEE]———进程、进程的数据结构、进程的调度
操作系统,进程任务,PCB,PID,内存指针,文件描述符表,进程的调度,并发编程,状态,优先级,记账信息,上下文
|
2月前
|
存储 监控 Linux
嵌入式Linux系统编程 — 5.3 times、clock函数获取进程时间
在嵌入式Linux系统编程中,`times`和 `clock`函数是获取进程时间的两个重要工具。`times`函数提供了更详细的进程和子进程时间信息,而 `clock`函数则提供了更简单的处理器时间获取方法。根据具体需求选择合适的函数,可以更有效地进行性能分析和资源管理。通过本文的介绍,希望能帮助您更好地理解和使用这两个函数,提高嵌入式系统编程的效率和效果。
121 13
|
2月前
|
存储 算法 调度
深入理解操作系统:进程调度的奥秘
在数字世界的心脏跳动着的是操作系统,它如同一个无形的指挥官,协调着每一个程序和进程。本文将揭开操作系统中进程调度的神秘面纱,带你领略时间片轮转、优先级调度等策略背后的智慧。从理论到实践,我们将一起探索如何通过代码示例来模拟简单的进程调度,从而更深刻地理解这一核心机制。准备好跟随我的步伐,一起走进操作系统的世界吧!
|
3月前
|
负载均衡 算法 调度
深入理解操作系统:进程管理与调度
在数字世界的心脏,操作系统扮演着至关重要的角色。它如同一位精明的指挥家,协调着硬件资源和软件需求之间的和谐乐章。本文将带你走进操作系统的核心,探索进程管理的艺术和调度策略的智慧。你将了解到进程是如何创建、执行和消亡的,以及操作系统如何巧妙地决定哪个进程应该在何时获得CPU的青睐。让我们一起揭开操作系统神秘的面纱,发现那些隐藏在日常计算背后的精妙机制。
|
3月前
|
算法 调度 UED
深入理解操作系统:进程管理与调度策略
操作系统作为计算机系统的核心,其进程管理和调度策略对于系统性能和用户体验至关重要。本文将通过直观的代码示例和浅显易懂的语言,带领读者了解操作系统如何有效管理进程以及常见的进程调度算法。我们将从进程的基本概念出发,逐步深入到进程状态、进程控制块(PCB)的作用,最后探讨不同的调度算法及其对系统性能的影响。无论您是初学者还是有一定基础的开发者,都能从中获得有价值的信息。
|
3月前
|
调度 开发者
深入理解操作系统之进程调度
在计算机科学领域,操作系统是核心的一环,它管理着计算机硬件资源,并提供接口供上层软件运行。本文将通过深入浅出的方式,探讨操作系统中至关重要的一个概念——进程调度。我们将从基础理论出发,逐步展开讲解进程调度的原理和实现,并配以实际代码示例,旨在帮助读者更好地理解和掌握这一主题。文章不仅适合初学者建立基础,也适合有一定基础的开发者深化理解。
|
3月前
|
消息中间件 算法 调度
深入理解操作系统:进程管理与调度
操作系统是计算机系统的核心,负责管理和控制硬件资源、提供用户接口以及执行程序。其中,进程管理是操作系统的重要组成部分,它涉及到进程的创建、调度、同步和通信等方面。本文将深入探讨进程管理的基本概念、进程调度算法以及进程间的同步和通信机制。通过本文的学习,读者将能够更好地理解操作系统的工作原理,并掌握进程管理的基本技能。
70 11
|
3月前
|
算法 调度 UED
深入理解操作系统:进程管理与调度策略
【10月更文挑战第40天】在数字世界中,操作系统是连接硬件与软件的桥梁,它管理着计算机资源和提供用户服务。本文将深入探讨操作系统中的进程管理与调度策略,揭示它们如何协调多任务运行,保证系统高效稳定运作。通过代码示例,我们将展示进程创建、执行以及调度算法的实际应用,帮助读者构建对操作系统核心机制的清晰认识。