1. 进程的概念和进程结构
1.1 进程
(1)程序(program):是一些保存在磁盘上有序指令的集合,是存放在磁盘文件中的可执行文件。但没有任何执行的概念,它是静态的。
(2)进程(process)
①程序的执行实例被称为进程,是一个动态的概念,它是程序执行的过程,包括创建、调度和消亡。
②进程具有独立的权限与职责,如果系统中某个进程崩溃,它不会影响其余的进程。
③每个进程运行在其各自的虚拟地址空间中,进程之间可以通过由内核控制的机制相互通信。
(3)进程ID:每个linux进程都有一个唯一的数字标识符,称为进程ID(process ID),进程ID 总是一个非负整数。
1.2 内核中的进程结构
(1)task_struct结构体
①进程号(pid):用来唯一标识进程。
②进程的状态,标识进程是处于运行态,等待态,停止态,还是死亡态
A.运行态:此时进程 或者正在运行,或者准备运行
B.等待态:此时进程在等待一个事件发生或某种系统资源
C.停止态:此时进程被终止
D.死亡态:这是一个已终止的进程,但还在进程向量数组中,占有一个task_struct结构。
③进程的优先级和时间片。
不同有优先的进程,被调度运行的次序不一样,一般是高优先级的进程先运行。时间片标识一个进程将被处理器运行的时间
④虚拟内存
大多数进程有一些虚拟内存(内核线程和守护进程没有) ,并且Linux必须跟踪内存如何映射到系统物理内存。
⑤处理器相关上下文
一个进程可以被认为是系统当前状态的总和。每当一个进程运行时,它要使用处理器的寄存器、栈等,这是进程的上下文(context)。并且,每当一个进程被暂停时,所有的CPU相关上下文必须保存在该进程的task_struct中。当进程被调度器重新启动时其上下文将从这里恢复。
(3)与文件相关的两个数据结构
①fs_struct:它包含此进程当前工作目录和根目录、umask。umask是新文件被创建的缺省模式,它可以通过系统调用来改变。
②files_struct:包含此进程正在使用的所有文件的信息。f_mode字段描述该文件是以什么模式创建的:只读、读写、还是只写。f_pos保存文件中下一个读或写将发生的位置。f_inode描叙文件的VFS索引节点,而f_ops是一个例程向量的指针,每个代表一个想施加于文件的操作的函数。Linux进程在启动时有3个文件描述符被打开了,他们是标准输入设备、标准输出设备和标准错误设备,并且通常是从创建此进程的父进程继承得来的。