多任务(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号

相关推荐
toradexsh1 小时前
NXP iMX8MP ARM 平台多屏幕克隆显示测试
linux·arm·nxp·toradex·imx8mp
jjkkzzzz1 小时前
Linux下的c/c++开发之操作mysql数据库
linux·数据库·mysql·c/c++
Watink Cpper2 小时前
[Linux]多线程(二)原生线程库---pthread库的使用
android·linux·运维·原生线程库·pthread库
mljy.2 小时前
Linux《进程控制》
linux
chennalC#c.h.JA Ptho4 小时前
archlinux 详解系统层面
linux·经验分享·笔记·系统架构·系统安全
python算法(魔法师版)4 小时前
Docker容器启动失败?无法启动?
linux·运维·nginx·docker·容器
酷爱码4 小时前
Ubuntu日志文件清空的三种方式
linux·运维·ubuntu
狄加山6757 小时前
Linux Input子系统与驱动开发实战
linux·运维·驱动开发
小刘|7 小时前
对称加密以及非对称加密
linux·运维·网络
Levin__NLP_CV_AIGC9 小时前
更新 / 安装 Nvidia Driver 驱动 - Ubuntu - 2
linux·运维·ubuntu