欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

进程的有关概念

程序员文章站 2024-02-25 14:59:27
...
什么是进程:
进程是程序的一个执行实例,是系统进行资源分配和调度的一个基本单位。程序段、相关数据段和PCB三部分构成,又叫进程实体、进程映像。所谓创建进程,实质上是创建进程实体中的PCB,撤销进程,实质上是撤销进程的PCB。

什么是PCB:
为了使参与并发执行的每个程序(含数据)都能独立地运行,在操作系统中必须位置配置一个专门的数据结构,称为进程控制块(Process Control Block,PCB)。系统利用PCB来描述进程的基本情况和活动过程,进而控制和管理进程,PCB是进程存在的唯一标识。
在Linux下的PCB是:task_struct。它是Linux内核的一种数据结构,会被装载到内存中并且包含着进程的相关信息。

task_struct--PCB 的内容:
1)进程标识符
描述进程的唯一标志,用来区别其他进程。如进程id(pid),父进程id(ppid)外部标识符,为了方便用户对进程的访问,须为每一个进程设置一个外部标识符。内部标识符,为了方便系统对进程的标识,通常是一个进程的序号。

2)处理机状态信息
上下文数据,程序执行时处理机的各种寄存器中的数据。包括:
  • 通用寄存器
  • 程序计数器:程序中即将执行的下一条指令的地址。
  • 程序状态字PSW:含有状态信息,如执行方式,中断屏蔽字等。
  • 用户栈指针:指每个用户进程都有一个或若干个与之相关的系统栈,用于存放过程和系统调用参数及调用地址。
处理机处于执行状态时,正在处理的许多信息都是放在寄存器中。当进程被切换时,处理机状态信息都必须保存在相应的PCB中,以便在该进程重新执行时能再从断点继续执行。

3)进程调度信息
进程状态:进程的任务状态、退出代码、退出信号等。
优先级:相对于其他进程的执行次序,优先级高的进程应优先获得处理机。
事件:进程由执行状态转变为阻塞状态所等待发生的事件,即阻塞信息。
记账信息:可能包括处理器时间总和,使用的时钟数总和,时间限制,记账号等。
I/O状态信息:包括显示的I/O请求,分配给进程的I/O设备和被进程使用的文件列表。

4)进程控制信息
内存指针:程序代码和进程相关数据的指针(程序和数据的地址)和其他进程共享的内存块的指针。
进程同步和通信机制
资源清单:列出了进程在运行期间所需的全部资源(除CPU),还有一张已分配到该进程的资源的清单。

进程的组织方式:
线性方式:将系统中的所有PCB都组织在一张线性表中,将该表的首地址存放在内存的一个专用区域中。该方式实现简单,开销小,缺点是每次查找时都需要扫描整张表。

链接方式:将具有相同状态进程的PCB分别通过PCB中的链接链接成一个队列。如:就绪队列,阻塞队列,空白队列。

索引方式:系统根据所有进程状态的不同,建立几张索引表。

组织进程:
所有运行在系统中的进程都以task_struct链表的形式存在在内核中。

查看进程:
ls /proc/ :查看所有进程
ps aux | grep test | grep -v grep :查看test进程的信息。test为可执行程序

创建进程:
使用fork() 创建子进程,头文件为unistd.h ,父子进程代码共享,数据各自开辟空间,私有一份。
pid_t fork(void);

返回值:fork返回的是进程ID,fork调用一次却能返回两次,有三种返回值:

  • 在父进程中,fork返回新创建的子进程的进程ID
  • 在子进程中,fork返回0
  • 创建失败,fork返回负数

进程的有关概念

进程的有关概念

进程状态:
R (running)运行状态:并不意味着进程一定在运行中,表明进程要么是在运行中要么在运行的队列里。
S(sleeping)睡眠状态:意味着进程在等待事件完成。(这里的睡眠也叫做可中断睡眠(interruptible sleep))
D(Disk sleep)磁盘休眠状态:有时候也叫做不可中断睡眠状态(uninterruptible sleep),在这个状态的进程通常会等待IO的结束。
T(stopped)停止状态:可以 通过发送SIGSTOP信号给进程来停止进程。被暂停的进程可以通过发送SIGCONT信号让进程继续运行。
X(dead)死亡状态:这个状态只是一个返回状态,不会在任务列表里看到这个状态。

进程状态修改:
使用kill命令:
kill -l  //查看系统支持的信号列表
kill -SIGSTOP pid    //使pid号进程停止
kill -SIGCONT pid    //使pid号进程继续运行
特殊进程:
  • 僵尸进程--Z(zombie) :
当进程退出并且父进程没有读取到子进程退出的返回代码时就会产生僵尸进程。僵尸进程会以终止状态保持在进程中,并且会一直在等待父进程读取退出状态代码。因此,只要子进程退出,父进程还在运行,但父进程没有读取子进程状态,子进程进入Z状态。

僵尸进程的危害:
进程的退出状态会一直被维持下去,维护退出状态本身就是要用数据维护,也属于进程基本信息,被保存在task_struct中。Z状态不退出,PCB要一直维护。一个父进程创建了很多子进程,不进行回收,会造成内存资源的浪费,同时会造成内存泄露。

  • 孤儿进程
父进程提前退出,子进程就称为“孤儿进程”,孤儿进程被1号init进程领养。

进程优先级:
cpu资源分配的先后顺序,就是指进程的优先级(priority)。优先级高的进程有优先执行权利。

使用ps -l 查看系统进程的有关信息。
进程的有关概念

PRI:代表这个进程可被执行的优先级,其值越小越早被执行。
NI:代表这个进程的nice值,表示进程可被执行的优先级的修正数值。
PRI值越小就越快被执行,加入nice值后,PRI变为:PRI(new)=PRI(old)+nice
当nice值为负值时,那么该程序的优先级值将变小,其优先级会变高,则会越快被执行。
所以,调整进程优先级,在Linux下,就是调整进程nice值。

调整进程优先级:
启动进程前调整:nice
nice -n -10 ./test  //调整test进程的nice为-10
调整已存在进程的nice:renice
renice -10 -p 2189   //pid为2189的进程nice设为-10
top命令更改已存在进程的nice:
top->进入top后按"r"->输入进程pid->输入nice值
进程的有关概念


相关标签: 进程 优先级