这俩天刚整理完进程部分内容,再做个一个总结以便后期回顾。
1.什么是多任务?
单任务vs多任务
单任务:一个任务执行结束才能执行下一个任务,或者说在一个任务执行得过程中不能响应其他任务,只有这个任务执行完毕后才能去响应其他任务,这种成为单任务。
多任务:cpu利用它的资源响应多个任务,注意只是响应,但不一定时同时响应,而且也并不是同时执行。
并发vs并行
并发:一对多
并行:多对多
单核cpuvs多核cpu
单核cpu:就是CPU轮换的执行,当前进程执行了一个短暂的时间片(ms)后,切换执行另一个进程,如此循环往复,由于时间片很短,在宏观上我们会感觉到所有的进程都是在同时运行的,但是在微观上cpu每次只执行某一个进程的指令。
多核cpu:如果cpu是多核的话,不同的cpu核可以同时独立的执行不同的进程,这种叫并行运行。所以当cpu是多核时,并发与并行是同时存在的。
单核系统的同时执行是并发执行,多核系统的同时执行是并行执行。同时执行必须建立在多核的多任务操作系统的基础上才能完成。
2.多任务操作的实现方式
进程、线程
3.进程和程序的区别
进程:
①进程是程序运行的抽象。(抽象是为了方便系统的统一管理)
②进程是系统资源分配的最小单位。
③进程和线程实现多任务(并发执行)。
区别:
①程序是静态的,进程是动态的。
②程序是长久的,进程是暂时的。
③进程与程序组成不同,进程的组成包括程序、数据和进程控制块。
④进程与程序的对应关系:通过多次执行,一个程序可以对应多个进程;通过调用关系,一个进程可以包括多个程序。
4.Linux进程特点
Linux系统是一个多进程的系统,它的进程之间具有并行性、互不干扰等特点。
每个进程都是一个独立的运行单位,拥有各自的权力和责任。每个进程都运行在独立的虚拟地址空间,当一个进程发生异常,它也不会影响到系统中其他进程。
优点:进程的互不干扰和独立地址空间使进程成为一种安全的多任务机制。
缺点:开销大(进程的创建、进程之间的切换消耗的内存资源多)
5.进程PID
为了方便管理,为每一个进程分配了一个唯一的PID编号。
OS(Linux)为了管理进程,会为每一个进程创建一个task_struct结构体变量,里面存放了该进程的管理信息。
获取PID
父进程创建子进程。
① pid_t getpid(void);
函数作用:获取调用该函数进程的进程PID。
头文件:
#include <unistd.h>
#include <sys/types.h>
返回值:返回进程的PID。
②pid_t getppid(void);
函数作用:获取调用该函数进程的父进程的进程PID。
返回值:返回父进程的PID
6.ps命令查看进程
查看进程的方式有三种:
①ps -ax : ps -ax | grep main
②top
③htop
top/htop都是显示整个系统下的进程的详细信息,htop是第三方的,是对top的改进。
下面是关于ps命令后缀的详注:
-A/-e: 显示系统所有的进程(包括守护进程),相当于-e。
-a:显示所有终端下的所有用户运行的进程。
-u:显示所有用户名、CPU百分比和内存的使用。
-x/-f:列出进程的详细信息。
-H:显示进程树。
-r:只显示正在运行的进程。
-o:分类输出
7.进程调度
a)进程状态
1)基本三态:就绪态、执行态、等待态(阻塞态)