最近在Linux下学习到进程相关的知识,所以就Linux而言谈进程
什么是进程?
谈什么是进程我可以想到进程是程序的执行实例,但是并不是完整的对进程的描述,具体的来说进程应该是这样的:
对操作系统来说:
.程序的执行实例
.是正在执行的程序
.能分配处理器并由处理器执行的实体
对内核而言:
.担当系统资源分配的实体 (cpu 和 内存)
也就是说进程是把程序加载到内存后的实体,他能分配系统资源 但是程序不能,他有自己的各种状态但是程序没有!!!
进程能有如此的功能,正是由于系统通过特别的方法来管理他->PCD(进程控制块)
谈到进程我们一定要想到PCB,可以说进程就是PCD,一个PCB就是一个进程,Linux内核的PCB是task_struct的结构体,这个结构体非常复杂,主要的信息如下:
标识符 : 描述本进程的唯一标识符,用来区别其他进程。
状态 :任务状态,退出代码,退出信号等。
优先级 :相对于其他进程的优先级。
程序计数器:程序中即将被执 行的下 一条指令的地址。
内存指针:包括程序代码和进程相关数据的指针,还有和其他进程共享的内存块的指针
上下 文数据:进程执 行时处理器的寄存器中的数据。I/O状态信息:包括显 示的I/O请求,分配给进程的I/O设备和被进程使 用的 文件列表。记账信息:可能包括处理器时间总和,使 用的时钟数总和,时间限制,记账号等。
一个c程序被加载到内存时,程序的相关数据在内存中的存放位置关系如下图:
了解进程地址空间相当重要,在编写代码的时候,特别是调试额时候能从根本上程序数据的操作!!!!