linux 进程

什么是进程?


  一个进程是一个程序的一次执行的过程。它和程序不同,程序是静态的,它是一些保存在磁盘上的可执行的代码和数据集合;而进程是一个动态的概念,也是操作系统分配资源的最小单位。
  我们知道,每个进程在内核中都有一个进程控制块(PCB)来维护进程相关的信息,Linux内核的进程控制块是task_struct结构体。虽然在不同的操作系统中对进程的控制和管理机制不同,PCB中的信息多少也不一样,但是通常PCB应包含如下一些信息:

1、进程标识符(name):
     每个进程都必须有一个唯一的标识符,可以是字符串,也可以是一个数字。UNIX系统中就是一个整型数。在进程创建时由系统赋予。

2、进程当前状态(status):
       说明进程当前所处的状态。为了管理的方便,系统设计时会将相同的状态的进程组成一个队列,如就绪进程队列,等待进程则要根据等待的事件组成多个等待队列,如等待打印机队列、等待磁盘I/O完成队列等等。

3、进程相应的程序和数据地址,以便把PCB与其程序和数据联系起来。

4、进程资源清单:
    列出所拥有的除CPU外的资源记录,如拥有的I/O设备,打开的文件列表等。

5、进程优先级:
       进程的优先级反映进程的紧迫程序,通常由用户指定和系统设置。UNIX系统采用用户设置和系统计算相结合的方式确定进程的优先级 。

6、CPU现场保护区:
       当进程因某种原因不能继续占用CPU时(等待打印机),释放CPU,这时就要将CPU的各种状态信息保护起来,为将来再次得到处理机恢复CPU的各种状态,继续运行。

7、进程同步与通信机制:
    用于实现进程间互斥、同步和通信所需的信号量等。

8、进程所在队列PCB的链接字:
    根据进程所处的现行状态,进程相应的PCB参加到不同队列中。PCB链接字指出该进程所在队列中下一个进程PCB的首地址。

9、与进程有关的其他信息:
    如进程记账信息,进程占用CPU的时间等。


  而对于linux而言,在进程的讨论中fork和exec是两个重要的系统调用。fork的作用是根据一个现有的进程复制出一个新进程,原来的进程称为父进程(Parent Process),新进程称为子进程(ChildProcess)。系统中同时运行着很多进程,这些进程都是从最初只有一个进程开始一个一个复制出来的。在Shell下输入命令可以运行一个程序,是因为Shell进程在读取用户输入的命令之后会调用fork复制出一个新的Shell进程,然后新的Shell进程调用exec执行新的程序。 

linux进程0-3GB用户区间

命令行参数和环境变量

user库

bss段

data段

text代码段

对于权限级别有4个,但是叫做3级,0-3级,,3级操作用户,0级操作内核

操作系统调度:通过某种手段从3级转换成0级,

linux下进程的状态

六种:

运行态,睡眠态,就绪态,终止态,孤儿态,僵尸态

几种状态的转换

windows下

 

linux下

 在各个进程轮换时间片的时候,每一个进程都有自己的处理器现场,切换时先恢复处理器现场

原文地址:https://www.cnblogs.com/13224ACMer/p/6384709.html