当前位置: 首页 > article >正文

多任务(20250210)

1. 进程的概念

    (1) 程序:是一段存放在外存中代码的集合(静态的)
    (2) 进程:是一个程序动态执行的过程,包括创建、调度、消亡(动态的)

2. 如何实现多任务

Linux中,通过进程、线性实现多任务

3. 进程

正在执行的程序(动态),需要消耗内存和CPU,是一个动态执行的过程

进程的生存周期:创建 -> 调度 -> 消亡

进程:源代码编译为可执行程序,运行程序,消耗CPU和内存资源

进程和程序的区别:

    1)程序是永存,进程是暂时的
    2)进程有程序状态的变化,程序没有
    3)进程可以并发,程序无并发
    4)进程与进程会存在竞争计算机的资源
    5)一个程序可以运行多次,变成多个进程, 一个进程可以运行一个或多个程序

4. 进程的创建

每个进程被创建时,操作系统回味进程创建4G虚拟的内存空间

系统启动(空间被创建)时,bss段按位清零

5. 进程调度

原则:保障多个任务能同时执行
        1)宏观并行
            多个任务同时向下执行
        2)微观串行
            CPU在多个任务中快速切换,保障多个任务同时向下执行

多任务操作系统分为:

        非抢占式多任务:由调度程序来决定什么时候停止一个进程的运行(如时间片结束时),以便其他进程得到执行机会
        Unix, Linux抢占式多任务:除非进程自己主动停止运行,否则会一直执行。
        Mac os9  Windows3.1

常用调度算法:

        1. 先来先执行,后来后执行
        2. 短作业优先
        3. 高优先级调度算法
        4. 时间片轮转调度算法

6. 进程的状态

        1)运行态(用户运行态、内核运行态)     R
                正在执行,且被CPU任务调度所执行的进程

        2)就绪态    R
                正在执行,没有CPU任务调度执行的进程(只缺少cpu)

        3)可唤醒等待态    S
                也称为睡眠态,阻塞等待资源的进程

        4 )不可唤醒等待态 D
                不想被CPU任务调度所打断的进程任务可以设置为不可唤醒等待态
        5) 暂停态    T
                被暂停执行的进程
        6) 僵尸态    Z
                进程执行结束,空间没有被回收

        7) 结束态    X
                进程执行结束,空间被回收

 三态图

Linux七态图

7. 进程相关指令

        1.ps -aux
        查看进程状态
        ps -aux|grep a.out

        2.top 
        根据CPU占用率查看进程信息
        q 退出

        3.ps -ef
        查看当前时刻进程信息        

        PID:进程的ID号(唯一)
        PPID:父进程的ID号

        4.pstree
        查看进程关系
        pstree -p   
        查看所有进程关系及pid号
        pstree -sp + 进程id号
        查看某一进程关系   

        5.kill
        killall
        给进程发送一个信号
        kill -9 进程PID
        killall -9 进程名

        6.jobs
        查看当前终端下的后台执行任务

        7.fg 编号
        让一个后台执行的任务放到前台执行

8 进程相关接口

父子进程:
            父进程:创建新进程的进程称为新进程的父进程
            子进程:被创建的进程称为原进程的子进程

 8.1 fork 函数

        pid_t fork(void);
                 一次调用,会返回两次。
                子进程先运行还是父进程先运行,顺序不确定,变量不共享。
                子进程复制父进程的0到3g空间和父进程内核中的PCB,但id号不同。
        功能:通过该函数可以从当前进程中克隆一个同名新进程。
                克隆的进程称为子进程,原有的进程称为 父进程。
                子进程是父进程的完全拷贝。
                子进程的执行过程是从fork函数之后执行。
                子进程与父进程具有相同的代码逻辑。
        参数:
        返回值:
                失败返回-1 
                成功父进程中返回子进程的PID
                        子进程中返回0 

8.2 getpid函数

        pid_t getpid(void);
        功能:
                获得调用该函数进程的pid
        参数:
        返回值:
                进程的pid

8.3 getppid函数

        pid_t getppid(void);
        功能:
                获得调用该函数进程的父进程pid号
        参数:
        返回值:
                返回父进程id号


http://www.kler.cn/a/554830.html

相关文章:

  • 如何在在 CentOS 中配置 rsync 实现高效文件同步
  • 火绒V6.0小工具提取版——无需安装,一键解锁实用功能!
  • 网络安全:防范NetBIOS漏洞的攻击
  • JS宏实例:数据透视工具的制作(四)
  • 火绒终端安全管理系统V2.0【系统防御功能】
  • 机器视觉--图像的运算(减法)
  • 【Leetcode 热题 100】1287. 有序数组中出现次数超过25%的元素
  • QT-文件模块(ver6.7.2)还没写完
  • 蓝桥杯备赛1-5大写
  • PySpark检查两个DataFrame的数据是否一致
  • 跨语言语义理解与生成:多语言预训练方法及一致性优化策略
  • 蓝桥杯(B组)-每日一题(1093字符逆序)
  • c语言[递归]母牛的故事,有一头母牛,它每年年初生一头小母牛。每头小母牛从第四个年头开始,每年年初也生一头小母牛。请编程实现在第n年的时候,共有多少头母牛?
  • 【Axure高保真原型】拖动画图——画矩形案例
  • 基于PostGIS在PostgreSQL数据中实现按照百分比或面积将多边形分割为多个
  • 编写测试计划的六大要素是什么
  • 高效管理 React 状态和交互:我的自定义 Hooks 实践
  • Spring AI如何调用Function Calling
  • 在 Android 开发中如何接入 DeepSeek 聊天工具
  • conda简单命令