第七章 进程环境

1. 引言(Introduction)

本文是关于书籍《UNIX环境高级编程》(第三版)第7章关于进程环境的学习笔记,内容主要来源于《UNIX环境高级编程》(第三版)与网上的一些资料。本文仅代表笔者的浅薄认识,如有错误欢迎指正。

2. 进程(Process)

进程的经典定义是一个执行中的程序的实例。系统中的每个程序都运行在某个进程的上下文(context)中。所谓上下文是指程序正常运行所需的状态,这个状态包括程序存放在内存中的代码与数据,它的栈,通用目的寄存器的内容,程序计数器,环境变量以及打开的文件描述符的集合。

每个进程都有一个非负整数的唯一的进程ID。进程ID虽然是唯一的,但也是可复用的。当一个进程终止后,其进程ID就可以被其它进程使用。进程ID是系统控制进程的一个参数,通过指定进程ID,系统可以控制相应进程的启动,终止与切换。

有一些进程ID被分配到了特定的进程。如在Linux中,进程ID为0的通常是调度进程,常常被称为交换进程(swapper);进程ID为1的是init进程,是由内核在引导装入时启动的用户层次的进程;进程ID为2的一般是kthreadd,Linux使用这个内核进程来创建其它内核进程。内核进程是内核的一部分,意味着这些进程会存在于系统的整个生命周期中。

在这里插入图片描述

进程ID存在于进程控制块(Process Control Block, PCB)中,PCB是系统中存放进程的管理和控制信息的数据结构。PCB是进程实体的一部分,是操作系统中最重要的记录性数据结构。它是进程管理和控制的最重要的数据结构,每一个进程均有一个PCB,在创建进程时,建立PCB,伴随进程运行的全过程,直到进程撤消而撤消。

总的来说,进程是由程序段,数据段与PCB三部分组成。

3. 进程在内存中(Process in Memory)

系统提供了虚拟内存技术,使得每个进程都认为自己是独占系统的内存,实则不然。进程在内存中的表示如图所示。

在这里插入图片描述

所以进程在内存中包括了代码段(Code(.text)),已初始的数据(Initialized data(.data)),未初始的数据(Uninitialized data(.bss)),堆(Run-time heap(via malloc)),共享库的内存映射区域(Memory-mapped region for shared libraries),栈(User stack),以上是进程在虚拟内存中的表示,是进程在用户态可以访问的。进程在内核虚拟内存中的表示包括进程特定的数据结构(Process-specific data structures),物理内存(Physical memory)与内核代码(Kernel code and data),这些都是进程在内核态看到的。

每个进程在自己的运行阶段内,能看到的只有数据段与代码段,而PCB则是在内核中的数据,内核根据PCB来进行进程调度与控制进程运行。

4. 进程启动与终止(Process startup and terminate)

4.1 进程启动(Startup)

进程是程序的运行实例,而程序的数据决定了进程的行为。可执行文件是程序在磁盘或者硬盘中的表示,进程的运行从可执行文件开始。

在进程启动时,需要先创建PCB块(包括为进程分配PID,并且根据进程需要的内存大小分配内存),然后把可执行文件从磁盘或者硬盘加载进内存中,这个过程由加载器(loader)完成。加载器是驻留在内存中的内核代码,任何的Linux程序都可以通过调用execve函数来调用加载器。加载器可以将可执行文件的代码和数据从磁盘或硬盘复制到内存中,然后通过跳转至程序的第一条指令或者入口点来运行该程序。

4.2 进程终止(Termination)

进程终止有8种方式:

  1. 从main返回;
  2. 调用exit;
  3. 调用_exit或 _Exit;
  4. 最后一个线程从其启动例程返回;
  5. 最后一个线程执行pthread_exit;
  6. 调用abort;
  7. 接到一个信号;
  8. 最后一个线程对取消请求作出响应。

其中前5种方法是正常终止,后3种方法是异常终止。正常终止都可以看作是进程调用exit,_exit 或 _Exit退出的,它们的区别在于exit会先执行一些终止处理程序(exit handler)然后进入内核,而 _exit和 _Exit则会直接进入内核,如图所示。

另外,当进程终止时,还需要系统回收分配给进程的PCB,同时关闭进程打开的进程表(包括打开的文件描述符)。

在这里插入图片描述

5. 总结(Conclusion)

本文是关于Linux系统中,进程组成与进程启动终止的一个学习笔记。主要讲了进程在内存中的PCB,数据段与代码段。同时也讲了进程在启动过程与终止时系统进行的处理。

参考资料(Reference)

Advanced Programming in the UNIX Environment - Third Edition

Computer Systems: A Programmer’s Perspective - Third Edition

PCB百度百科

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值