Linux教程

Linux处理机管理——进程详解及代码分析

本文主要是介绍Linux处理机管理——进程详解及代码分析,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

文章目录

  • Linux处理机管理
    • 1.进程
      • 1.1.进程的概念
      • 1.2.进程的定义
      • 1.3.操作系统引入进程概念的原因:
      • 1.4.进程的特征
    • 2.CPU进程与线程的关系和区别
      • 小结:
    • Linux如何查询进程
    • 3.如何创建一个进程
      • 代码实例
  • 补充:UID PID PPID
    • UID
    • PID
    • PPID

Linux处理机管理

​ 操作系统管理功能的主要目标之一一就是提高处理机(CPU)的使用率,使它尽可能处于工作状态.在Linux系统中,提高处理机使用率的技术措施主要是多道和分时,处理机在进程之间切换,按照一定的规则轮流执行每个进程。对于单个处理机的系统,这些进程宏观上看似并行执行,而微观上来看仍然是串行执行的,这种执行方式被称为并发执行。操作系统通过并发控制机制,对处理机进行分配、调度,在保证每个进程都得到公平合理执行的同时,使系统中的各种资源得到充分的使用。

1.进程

​ 进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。在早期面向进程设计的计算机结构中,进程是程序的基本执行实体;在当代面向线程设计的计算机结构中,进程是线程的容器。程序是指令、数据及其组织形式的描述,进程是程序的实体。

在这里插入图片描述

1.1.进程的概念

​ 进程是60年代初首先由麻省理工学院的MULTICS系统和IBM公司的CTSS/360系统引入的。

进程是一个具有独立功能的程序关于某个数据集合的一次运行活动。它可以申请和拥有系统资源,是一个动态的概念,是一个活动的实体。它不只是程序的代码,还包括当前的活动,通过程序计数器的值和处理寄存器的内容来表示。

1.2.进程的定义

​ 狭义定义:进程是正在运行的程序的实例(an instance of a computer program that is being executed)。

​ 广义定义:进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动。它是操作系统动态执行的基本单元,在传统的操作系统中,进程既是基本的分配单元,也是基本的执行单元。

​ 进程的概念主要有两点:第一,进程是一个实体。每一个进程都有它自己的地址空间,一般情况下,包括文本区域(text region)、数据区域(data region)和堆栈(stack region)。文本区域存储处理器执行的代码;数据区域存储变量和进程执行期间使用的动态分配的内存;堆栈区域存储着活动过程调用的指令和本地变量。第二,进程是一个“执行中的程序”。程序是一个没有生命的实体,只有处理器赋予程序生命时(操作系统执行之),它才能成为一个活动的实体,我们称其为进程。

​ 进程是操作系统中最基本、重要的概念。是多道程序系统出现后,为了刻画系统内部出现的动态情况,描述系统内部各道程序的活动规律引进的一个概念,所有多道程序设计操作系统都建立在进程的基础上。

1.3.操作系统引入进程概念的原因:

​ 从理论角度看,是对正在运行的程序过程的抽象;

​ 从实现角度看,是一种数据结构,目的在于清晰地刻画动态系统的内在规律,有效管理和调度进入计算机系统主存储器运行的程序。

1.4.进程的特征

  • 动态性:进程的实质是程序在多道程序系统中的一次执行过程,进程是动态产生,动态消亡的。

  • 并发性:任何进程都可以同其他进程一起并发执行

  • 独立性:进程是一个能独立运行的基本单位,同时也是系统分配资源和调度的独立单位;

  • 异步性:由于进程间的相互制约,使进程具有执行的间断性,即进程按各自独立的、不可预知的速度向前推进

  • 结构特征:进程由程序、数据和进程控制块三部分组成。

​ 多个不同的进程可以包含相同的程序:一个程序在不同的数据集里就构成不同的进程,能得到不同的结果;但是执行过程中,程序不能发生改变。

2.CPU进程与线程的关系和区别

进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位。

线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。

进程和线程的关系:

(1)一个线程只能属于一个进程,而一个进程可以有多个线程,但至少有一个线程。

(2)资源分配给进程,同一进程的所有线程共享该进程的所有资源。

(3)处理机分给线程,即真正在处理机上运行的是线程。

(4)线程在执行过程中,需要协作同步。不同进程的线程间要利用消息通信的办法实现同步。

进程与线程的区别:

(1)调度:线程作为调度和分配的基本单位,进程作为拥有资源的基本单位

(2)并发性:不仅进程之间可以并发执行,同一个进程的多个线程之间也可并发执行

(3)拥有资源:进程是拥有资源的一个独立单位,线程不拥有系统资源,但可以访问隶属于进程的资源.

(4) 系统开销:在创建或撤消进程时,由于系统都要为之分配和回收资源,导致系统的开销明显大于创建或撤消线程时的开销。但是进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其它进程产生影响,而线程只是一个进程中的不同执行路径。线程有自己的堆栈和局部变量,但线程之间没有单独的地址空间,一个进程死掉就等于所有的线程死掉,所以多进程的程序要比多线程的程序健壮,但在进程切换时,耗费资源较大,效率要差一些

小结:

(1)线程是进程的一部分

(2)CPU调度的是线程

(3)系统为进程分配资源,不对线程分配资源

在这里插入图片描述

Linux如何查询进程

​ ps aux | less //显示所有运行中的进程

​ ps -A //显示所有进程

​ ps -U root -u root -N //查看非root运行的进程

​ top //运行中系统的动态实时视图

​ pstree //以树状显示正在运行的进程。树的根节点为pid或init。如果指定了用户名,进程树将以用户所拥有的进程作为根节点。

​ ps -eLf //获取线程信息

​ top -b -n1 > /tmp/process.log //保存进程信息到文件夹

​ top -b -n1 | mail -s ‘Process snapshot’ you@qq.com //发送进程信息给邮箱

3.如何创建一个进程

头文件

#include <sys/types.h>
#include <unistd.h>

使用函数

​		fork();				//创建一个子进程
返回值:
	负值:创建子进程失败。
	零:返回到新创建的子进程。
	正值:返回父进程或调用者。该值包含新创建的子进程的进程ID

代码实例

*******************************************************************    ******                                                              
  2     > File Name: main.c
  3     > Author: 杨永利
  4     > Mail: 1795018360@qq.com 
  5     > Created Time: 2020年07月27日 星期一 16时47分27秒
  6  *******************************************************************    *****/
  7 
  8 #include <stdio.h>
  9 #include <sys/types.h>
 10 #include <unistd.h>
 11 
 12 int main(int argc, char* argv[]){
 13     printf("我是父进程,我要创建子进程了:%d\n",getpid());
 14     pid_t pid=fork();
 15     if(pid==0)
 16         printf("我是进程 %d,我拿到的pid是:%d\n",getpid(),pid);
 17     else if(pid>0)
 18       printf("我是进程 %d,我拿到的pid是:%d\n",getpid(),pid);
 19     else if(pid<0)
 20         printf("fork失败!\n");
 21     return 0;
 22 }

补充:UID PID PPID

UID是用户ID,PID是进程ID,PPID是父进程ID。

UID

UID 用户身份证明(User Identification)的缩写。baiUID用户在注册会员后,系统du会自动的给你一个UID的数值。意思就是给这名用户编个号。

比如,甲在论坛注册后获得UID23 那其后乙注册应该是UID24 但是也有可能是其他,这个是整个论坛系统自动分配的。还有一个可能,比如,甲注册了论坛,UID20 但是后来他退出了,就不是会员了,但是他的UID20就空着了,其后的人也不能得到UID20了。

PID

PID(Process Identification)操作系统里指进程识别号,也就是进程标识符。操作系统里每打开一个程序都会创建一个进程ID,即PID。PID(进程控制符)英文全称为Process Identifier,它也属于电工电子类技术术语。PID是各进程的代号,每个进程有唯一的PID编号。它是进程运行时系统分配的,并不代表专门的进程。zhi在运行时PID是不会改变标识符的,但是进程终止后PID标识符就会被系统回收,就可能会被继续分配给新运行的程序。

只要运行一程序,系统会自动分配一个标识。是暂时唯一:进程中止后,这个号码就会被回收,并可能被分配给另一个新进程。只要没有成功运行其他程序,这个PID会继续分配给当前要运行的程序。如果成功运行一个程序,然后再运行别的程序时,系统会自动分配另一个PID。

PPID

PPID Product Part Identification 产品料号识别码,便于产品追踪,并含有部分信息,一般的使用形式是产品包装上贴的一维码或二维码

计算机中代表当前进程的父进程ID;Payload protocol identifier,在S1AP通信中标识此服务ID

这篇关于Linux处理机管理——进程详解及代码分析的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!