区块链技术博客
www.b2bchain.cn

Android Detail:生命周期预备篇1——关于进程你需要了解这些求职学习资料

D0b2wT.gif

本文介绍了Android Detail:生命周期预备篇1——关于进程你需要了解这些求职学习资料,有助于帮助完成毕业设计以及求职,是一篇很好的资料。

对技术面试,学习经验等有一些体会,在此分享。

前言

很高兴见到你!👋

原计划本文为生命周期的预备篇,介绍 Android 进程以及进程优先级等内容。但写到一半发现内容稍多,故拆分两篇。

阅读本文,你将了解:

  • Linux 中进程的相关概念
  • 经常提到的内核态和用户态是什么
  • Android 中四大组件与进程的关系
  • Android 中常见的进程
  • shareUserId 的作用
  • 一个 app 默认有多少个线程

文章目录一览

  • 前言
  • 前置知识
  • Linux 中较为重要的概念
    • 用户
    • 虚拟内存
    • 为什么不直接使用物理内存
      • 使用虚拟内存就是个渣男
      • 虚拟内存带来的好处
    • 内核空间与用户空间
    • 内核态与用户态
    • Linux 进程与线程
      • 进程与线程的数据结构
      • 进程的创建 fork
  • Android 进程相关概念
    • 四大组件与进程的关系
    • Android 中的常见进程
    • Android 中的用户
    • Android 中的 appId 与 uid
    • shareUserId
    • 一个 app 默认有多少个线程
  • 总结

前置知识

  • 了解 adb shell ps 命令的使用,该部分可参考 Android Detail:工具篇 —— 进程状态全知道,adb 和 ps 命令
  • 简单了解 Linux 进程,线程的概念,这部分内容推荐阅读 Linux的进程、线程、文件描述符是什么

Linux 中较为重要的概念

Android 是基于 Linux 的操作系统,因此 Linux 中的很多概念在 Android 中都是适用的。以下均以 Linux 32 位机器举例。

用户

Linux 系统是一个多用户多任务的分时操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统。

用户的账号一方面可以帮助系统管理员对使用系统的用户进行跟踪,并控制他们对系统资源的访问;另一方面也可以帮助用户组织文件,并为用户提供安全性保护。

Linux 用户分为管理员和普通用户,普通用户又分为系统用户和自定义用户。

  1. 系统管理员:即 root 帐户,UID 号为 0,拥有所有系统权限,是整个系统的所有者。
  2. 系统用户:linux 为满足自身系统管理所内建的账号,通常在安装过程中自动创建,不能用于登录操作系统。UID 在 1-499 之间(centos7 为 1-999 之间)。
  3. 自定义用户:由 root 管理员创建供用户登录系统进行操作使用的账号,UID 在 500 以上(centos7 为 1000 以上)。

虚拟内存

虚拟内存 是计算机系统内存管理的一种技术。它使得应用程序认为它拥有连续可用的内存(一个连续完整的地址空间),而实际上,它通常是被分隔成多个物理内存碎片,还有部分暂时存储在外部磁盘存储器上,在需要时进行数据交换。

摘自维基百科。

坊间有言:「软件工程中没有什么是中间层解决不了的」。而虚拟内存,就是一个「中间层」。

为什么不直接使用物理内存

在没有虚拟内存的时候,程序指令所访问的内存地址就是物理内存地址. 也就是不得不把程序的全部装进内存当中,然后运行。物理内存其实就是插在计算机主板内存槽上的实际物理内存,CPU 可以直接进行寻址。物理内存的容量是固定的,但是寻址空间却取决于 cpu 地址线条数,如 32 位机,则寻址空间为 2^32 = 4G,所以最大支只持 4G 的寻址空间,即使插了 8G 的内存条也只能使用 4G 内存。而这种状态下会产生一系列的问题:如内存空间利用率低,进程间的安全问题等。

使用虚拟内存就是个渣男

每个进程被创建时会被分配一个大小为 4G 的连续的虚拟地址空间,虚拟的意思就是,其实这个地址空间时不存在的,仅仅是每个进程以为自己拥有 4G 的内存。就好像操作系统利用虚拟内存会对每个进程说:「你拥有我的全部」,但实际上没有哪个进程真的拥有的全部内存。

Android Detail:生命周期预备篇1——关于进程你需要了解这些

内存映射关系

如上图,中间部分代表操作系统的一块物理内存,两侧分别为进程 1 和进程 2,操作系统分别对进程 1 和进程 2 说,「我的都是你的,随意用」。但只有当进程真正需要这些内存时,系统才会从各个位置拼凑出相应的内存。如进程 2 以为自已用的是 A 内存,实际上使用的是物理内存的 B。进程 1 和进程 2 共同使用了相同的物理内存 C。

虚拟内存带来的好处

这里只举两点。

  • 有助于进程的内存管理
    由于操作系统的「渣男」行为,每个进程都认为自己获取的是内存中的连续地址,开发者在编写应用时可以认为有足够的内存。

  • 更容易实现数据共享
    进程加载系统库时如果直接使用物理内存,会出现同一个库加载多次的情况(因为物理内存地址唯一)。而使用虚拟内存,系统只需将进程中的地址映射到系统库所在的物理内存地址即可,例如上图中进程 1 和进程 2 的 B 内存均指向物理地址 C。

内核空间与用户空间

以 32 位操作系统为例,它的虚拟地址空间为 4G(2 的 32 次方),即一个进程最大的地址空间为 4G。操作系统的核心是内核 (kernel),它独立于普通的应用程序,可以访问受保护的内存空间,也有访问底层硬件设备的所有权限。为了保证内核的安全,操作系统强制用户进程不能直接操作内核。具体的实现方式是由操作系统将虚拟地址空间划分为两部分,一部分为内核空间,另一部分为用户空间。

每个进程的 4G 地址空间中,最高 1G 都是一样的,即内核空间。而将较低的 3G 字节划分为用户空间,供各个进程使用。

每个进程可以通过系统调用(system call)进入内核,因此,Linux 内核由系统内的所有进程共享。于是,从具体进程的角度来看,每个进程可以拥有 4G 字节的虚拟空间。空间分配如下图所示:

Android Detail:生命周期预备篇1——关于进程你需要了解这些

内核空间与用户空间

该图摘自 真棒! 20 张图揭开内存管理的迷雾,瞬间豁然开朗

此处的一些细节:

  • 操作硬件等危险操作是在内核空间的,用户空间的代码只能通过内核暴露的系统调用接口 (System Call Interface) 才能使用到系统中的硬件资源。

  • 内核空间中存放的是内核代码和数据,而进程的用户空间中存放的是用户程序的代码和数据。不管是内核空间还是用户空间,它们都处于虚拟内存中。

  • x86 提供了分层的权限机制,把区域分成了四个 Ring,越往里权限越高,越往外权限越低。Linux 使用两级保护机制:0 级供内核使用,3 级供用户程序使用。

    Android Detail:生命周期预备篇1——关于进程你需要了解这些

该图摘自极客时间课程 趣谈Linux操作系统

内核态与用户态

  • 当一个任务(进程)执行系统调用(system call)而陷入内核代码中执行时,称进程处于内核运行态(内核态)。此时处理器处于特权级最高的(0级)内核代码中执行。

  • 当进程在执行用户自己的代码时,则称其处于用户运行态(用户态)。此时处理器在特权级最低的(3级)用户代码中运行。

Linux 进程与线程

计算机上的程序都是以二进制文件的形式保存在硬盘上的,而这个二进制文件是静态的,称为 程序(Program),动态执行的程序,称为 进程(Process)。

进程与线程的数据结构

在 Linux 中,对于内核来说,进程和线程几乎没有区别,它们都会被看做为一个个任务(Task),一个统一的结构 task_struct 进行管理

Android Detail:生命周期预备篇1——关于进程你需要了解这些

内核将进程与线程认为是 Task

该图摘自极客时间课程 趣谈Linux操作系统

进程主要由以下几部分组成:

  • 代码段:编译后形成的一些指令

  • 数据段:程序运行时需要的数据

    • 只读数据段:常量
    • 已初始化数据段:全局变量,静态变量
    • 未初始化数据段(bss):未初始化的全局变量和静态变量
  • 堆栈段:程序运行时动态分配的一些内存

  • PCB:进程信息,状态标识等

task_struct 结构体的部分源码如下:

struct task_struct {     // 进程状态     long              state;     // 虚拟内存结构体     struct mm_struct  *mm;     // 进程号     pid_t              pid;     // 指向父进程的指针     struct task_struct __rcu  *parent;     // 子进程列表     struct list_head        children;     // 存放文件系统信息的指针     struct fs_struct        *fs;     // 一个数组,包含该进程打开的文件指针     struct files_struct        *files; };

每个进程都有着自己的 pid,用于表示该进程。进程是通过其他进程通过 fork 创建的,被创建的进程被称为子进程,创建进程的被称为父进程。

Linux 线程是一种进程间共享资源的方式,线程可看做是跟其他进程共享资源的进程。

前言

很高兴见到你!👋

原计划本文为生命周期的预备篇,介绍 Android 进程以及进程优先级等内容。但写到一半发现内容稍多,故拆分两篇。

阅读本文,你将了解:

  • Linux 中进程的相关概念
  • 经常提到的内核态和用户态是什么
  • Android 中四大组件与进程的关系
  • Android 中常见的进程
  • shareUserId 的作用
  • 一个 app 默认有多少个线程

文章目录一览

  • 前言
  • 前置知识
  • Linux 中较为重要的概念
    • 用户
    • 虚拟内存
    • 为什么不直接使用物理内存
      • 使用虚拟内存就是个渣男
      • 虚拟内存带来的好处
    • 内核空间与用户空间
    • 内核态与用户态
    • Linux 进程与线程
      • 进程与线程的数据结构
      • 进程的创建 fork
  • Android 进程相关概念
    • 四大组件与进程的关系
    • Android 中的常见进程
    • Android 中的用户
    • Android 中的 appId 与 uid
    • shareUserId
    • 一个 app 默认有多少个线程
  • 总结

前置知识

  • 了解 adb shell ps 命令的使用,该部分可参考 Android Detail:工具篇 —— 进程状态全知道,adb 和 ps 命令
  • 简单了解 Linux 进程,线程的概念,这部分内容推荐阅读 Linux的进程、线程、文件描述符是什么

Linux 中较为重要的概念

Android 是基于 Linux 的操作系统,因此 Linux 中的很多概念在 Android 中都是适用的。以下均以 Linux 32 位机器举例。

用户

Linux 系统是一个多用户多任务的分时操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统。

用户的账号一方面可以帮助系统管理员对使用系统的用户进行跟踪,并控制他们对系统资源的访问;另一方面也可以帮助用户组织文件,并为用户提供安全性保护。

Linux 用户分为管理员和普通用户,普通用户又分为系统用户和自定义用户。

  1. 系统管理员:即 root 帐户,UID 号为 0,拥有所有系统权限,是整个系统的所有者。
  2. 系统用户:linux 为满足自身系统管理所内建的账号,通常在安装过程中自动创建,不能用于登录操作系统。UID 在 1-499 之间(centos7 为 1-999 之间)。
  3. 自定义用户:由 root 管理员创建供用户登录系统进行操作使用的账号,UID 在 500 以上(centos7 为 1000 以上)。

虚拟内存

虚拟内存 是计算机系统内存管理的一种技术。它使得应用程序认为它拥有连续可用的内存(一个连续完整的地址空间),而实际上,它通常是被分隔成多个物理内存碎片,还有部分暂时存储在外部磁盘存储器上,在需要时进行数据交换。

摘自维基百科。

坊间有言:「软件工程中没有什么是中间层解决不了的」。而虚拟内存,就是一个「中间层」。

为什么不直接使用物理内存

在没有虚拟内存的时候,程序指令所访问的内存地址就是物理内存地址. 也就是不得不把程序的全部装进内存当中,然后运行。物理内存其实就是插在计算机主板内存槽上的实际物理内存,CPU 可以直接进行寻址。物理内存的容量是固定的,但是寻址空间却取决于 cpu 地址线条数,如 32 位机,则寻址空间为 2^32 = 4G,所以最大支只持 4G 的寻址空间,即使插了 8G 的内存条也只能使用 4G 内存。而这种状态下会产生一系列的问题:如内存空间利用率低,进程间的安全问题等。

使用虚拟内存就是个渣男

每个进程被创建时会被分配一个大小为 4G 的连续的虚拟地址空间,虚拟的意思就是,其实这个地址空间时不存在的,仅仅是每个进程以为自己拥有 4G 的内存。就好像操作系统利用虚拟内存会对每个进程说:「你拥有我的全部」,但实际上没有哪个进程真的拥有的全部内存。

Android Detail:生命周期预备篇1——关于进程你需要了解这些

内存映射关系

如上图,中间部分代表操作系统的一块物理内存,两侧分别为进程 1 和进程 2,操作系统分别对进程 1 和进程 2 说,「我的都是你的,随意用」。但只有当进程真正需要这些内存时,系统才会从各个位置拼凑出相应的内存。如进程 2 以为自已用的是 A 内存,实际上使用的是物理内存的 B。进程 1 和进程 2 共同使用了相同的物理内存 C。

虚拟内存带来的好处

这里只举两点。

  • 有助于进程的内存管理
    由于操作系统的「渣男」行为,每个进程都认为自己获取的是内存中的连续地址,开发者在编写应用时可以认为有足够的内存。

  • 更容易实现数据共享
    进程加载系统库时如果直接使用物理内存,会出现同一个库加载多次的情况(因为物理内存地址唯一)。而使用虚拟内存,系统只需将进程中的地址映射到系统库所在的物理内存地址即可,例如上图中进程 1 和进程 2 的 B 内存均指向物理地址 C。

内核空间与用户空间

以 32 位操作系统为例,它的虚拟地址空间为 4G(2 的 32 次方),即一个进程最大的地址空间为 4G。操作系统的核心是内核 (kernel),它独立于普通的应用程序,可以访问受保护的内存空间,也有访问底层硬件设备的所有权限。为了保证内核的安全,操作系统强制用户进程不能直接操作内核。具体的实现方式是由操作系统将虚拟地址空间划分为两部分,一部分为内核空间,另一部分为用户空间。

每个进程的 4G 地址空间中,最高 1G 都是一样的,即内核空间。而将较低的 3G 字节划分为用户空间,供各个进程使用。

每个进程可以通过系统调用(system call)进入内核,因此,Linux 内核由系统内的所有进程共享。于是,从具体进程的角度来看,每个进程可以拥有 4G 字节的虚拟空间。空间分配如下图所示:

Android Detail:生命周期预备篇1——关于进程你需要了解这些

内核空间与用户空间

该图摘自 真棒! 20 张图揭开内存管理的迷雾,瞬间豁然开朗

此处的一些细节:

  • 操作硬件等危险操作是在内核空间的,用户空间的代码只能通过内核暴露的系统调用接口 (System Call Interface) 才能使用到系统中的硬件资源。

  • 内核空间中存放的是内核代码和数据,而进程的用户空间中存放的是用户程序的代码和数据。不管是内核空间还是用户空间,它们都处于虚拟内存中。

  • x86 提供了分层的权限机制,把区域分成了四个 Ring,越往里权限越高,越往外权限越低。Linux 使用两级保护机制:0 级供内核使用,3 级供用户程序使用。

    Android Detail:生命周期预备篇1——关于进程你需要了解这些

该图摘自极客时间课程 趣谈Linux操作系统

内核态与用户态

  • 当一个任务(进程)执行系统调用(system call)而陷入内核代码中执行时,称进程处于内核运行态(内核态)。此时处理器处于特权级最高的(0级)内核代码中执行。

  • 当进程在执行用户自己的代码时,则称其处于用户运行态(用户态)。此时处理器在特权级最低的(3级)用户代码中运行。

Linux 进程与线程

计算机上的程序都是以二进制文件的形式保存在硬盘上的,而这个二进制文件是静态的,称为 程序(Program),动态执行的程序,称为 进程(Process)。

进程与线程的数据结构

在 Linux 中,对于内核来说,进程和线程几乎没有区别,它们都会被看做为一个个任务(Task),一个统一的结构 task_struct 进行管理

Android Detail:生命周期预备篇1——关于进程你需要了解这些

内核将进程与线程认为是 Task

该图摘自极客时间课程 趣谈Linux操作系统

进程主要由以下几部分组成:

  • 代码段:编译后形成的一些指令

  • 数据段:程序运行时需要的数据

    • 只读数据段:常量
    • 已初始化数据段:全局变量,静态变量
    • 未初始化数据段(bss):未初始化的全局变量和静态变量
  • 堆栈段:程序运行时动态分配的一些内存

  • PCB:进程信息,状态标识等

task_struct 结构体的部分源码如下:

struct task_struct {     // 进程状态     long              state;     // 虚拟内存结构体     struct mm_struct  *mm;     // 进程号     pid_t              pid;     // 指向父进程的指针     struct task_struct __rcu  *parent;     // 子进程列表     struct list_head        children;     // 存放文件系统信息的指针     struct fs_struct        *fs;     // 一个数组,包含该进程打开的文件指针     struct files_struct        *files; };

每个进程都有着自己的 pid,用于表示该进程。进程是通过其他进程通过 fork 创建的,被创建的进程被称为子进程,创建进程的被称为父进程。

Linux 线程是一种进程间共享资源的方式,线程可看做是跟其他进程共享资源的进程。

前言

很高兴见到你!👋

原计划本文为生命周期的预备篇,介绍 Android 进程以及进程优先级等内容。但写到一半发现内容稍多,故拆分两篇。

阅读本文,你将了解:

  • Linux 中进程的相关概念
  • 经常提到的内核态和用户态是什么
  • Android 中四大组件与进程的关系
  • Android 中常见的进程
  • shareUserId 的作用
  • 一个 app 默认有多少个线程

文章目录一览

  • 前言
  • 前置知识
  • Linux 中较为重要的概念
    • 用户
    • 虚拟内存
    • 为什么不直接使用物理内存
      • 使用虚拟内存就是个渣男
      • 虚拟内存带来的好处
    • 内核空间与用户空间
    • 内核态与用户态
    • Linux 进程与线程
      • 进程与线程的数据结构
      • 进程的创建 fork
  • Android 进程相关概念
    • 四大组件与进程的关系
    • Android 中的常见进程
    • Android 中的用户
    • Android 中的 appId 与 uid
    • shareUserId
    • 一个 app 默认有多少个线程
  • 总结

前置知识

  • 了解 adb shell ps 命令的使用,该部分可参考 Android Detail:工具篇 —— 进程状态全知道,adb 和 ps 命令
  • 简单了解 Linux 进程,线程的概念,这部分内容推荐阅读 Linux的进程、线程、文件描述符是什么

Linux 中较为重要的概念

Android 是基于 Linux 的操作系统,因此 Linux 中的很多概念在 Android 中都是适用的。以下均以 Linux 32 位机器举例。

用户

Linux 系统是一个多用户多任务的分时操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统。

用户的账号一方面可以帮助系统管理员对使用系统的用户进行跟踪,并控制他们对系统资源的访问;另一方面也可以帮助用户组织文件,并为用户提供安全性保护。

Linux 用户分为管理员和普通用户,普通用户又分为系统用户和自定义用户。

  1. 系统管理员:即 root 帐户,UID 号为 0,拥有所有系统权限,是整个系统的所有者。
  2. 系统用户:linux 为满足自身系统管理所内建的账号,通常在安装过程中自动创建,不能用于登录操作系统。UID 在 1-499 之间(centos7 为 1-999 之间)。
  3. 自定义用户:由 root 管理员创建供用户登录系统进行操作使用的账号,UID 在 500 以上(centos7 为 1000 以上)。

虚拟内存

虚拟内存 是计算机系统内存管理的一种技术。它使得应用程序认为它拥有连续可用的内存(一个连续完整的地址空间),而实际上,它通常是被分隔成多个物理内存碎片,还有部分暂时存储在外部磁盘存储器上,在需要时进行数据交换。

摘自维基百科。

坊间有言:「软件工程中没有什么是中间层解决不了的」。而虚拟内存,就是一个「中间层」。

为什么不直接使用物理内存

在没有虚拟内存的时候,程序指令所访问的内存地址就是物理内存地址. 也就是不得不把程序的全部装进内存当中,然后运行。物理内存其实就是插在计算机主板内存槽上的实际物理内存,CPU 可以直接进行寻址。物理内存的容量是固定的,但是寻址空间却取决于 cpu 地址线条数,如 32 位机,则寻址空间为 2^32 = 4G,所以最大支只持 4G 的寻址空间,即使插了 8G 的内存条也只能使用 4G 内存。而这种状态下会产生一系列的问题:如内存空间利用率低,进程间的安全问题等。

使用虚拟内存就是个渣男

每个进程被创建时会被分配一个大小为 4G 的连续的虚拟地址空间,虚拟的意思就是,其实这个地址空间时不存在的,仅仅是每个进程以为自己拥有 4G 的内存。就好像操作系统利用虚拟内存会对每个进程说:「你拥有我的全部」,但实际上没有哪个进程真的拥有的全部内存。

Android Detail:生命周期预备篇1——关于进程你需要了解这些

内存映射关系

如上图,中间部分代表操作系统的一块物理内存,两侧分别为进程 1 和进程 2,操作系统分别对进程 1 和进程 2 说,「我的都是你的,随意用」。但只有当进程真正需要这些内存时,系统才会从各个位置拼凑出相应的内存。如进程 2 以为自已用的是 A 内存,实际上使用的是物理内存的 B。进程 1 和进程 2 共同使用了相同的物理内存 C。

虚拟内存带来的好处

这里只举两点。

  • 有助于进程的内存管理
    由于操作系统的「渣男」行为,每个进程都认为自己获取的是内存中的连续地址,开发者在编写应用时可以认为有足够的内存。

  • 更容易实现数据共享
    进程加载系统库时如果直接使用物理内存,会出现同一个库加载多次的情况(因为物理内存地址唯一)。而使用虚拟内存,系统只需将进程中的地址映射到系统库所在的物理内存地址即可,例如上图中进程 1 和进程 2 的 B 内存均指向物理地址 C。

内核空间与用户空间

以 32 位操作系统为例,它的虚拟地址空间为 4G(2 的 32 次方),即一个进程最大的地址空间为 4G。操作系统的核心是内核 (kernel),它独立于普通的应用程序,可以访问受保护的内存空间,也有访问底层硬件设备的所有权限。为了保证内核的安全,操作系统强制用户进程不能直接操作内核。具体的实现方式是由操作系统将虚拟地址空间划分为两部分,一部分为内核空间,另一部分为用户空间。

每个进程的 4G 地址空间中,最高 1G 都是一样的,即内核空间。而将较低的 3G 字节划分为用户空间,供各个进程使用。

每个进程可以通过系统调用(system call)进入内核,因此,Linux 内核由系统内的所有进程共享。于是,从具体进程的角度来看,每个进程可以拥有 4G 字节的虚拟空间。空间分配如下图所示:

Android Detail:生命周期预备篇1——关于进程你需要了解这些

内核空间与用户空间

该图摘自 真棒! 20 张图揭开内存管理的迷雾,瞬间豁然开朗

此处的一些细节:

  • 操作硬件等危险操作是在内核空间的,用户空间的代码只能通过内核暴露的系统调用接口 (System Call Interface) 才能使用到系统中的硬件资源。

  • 内核空间中存放的是内核代码和数据,而进程的用户空间中存放的是用户程序的代码和数据。不管是内核空间还是用户空间,它们都处于虚拟内存中。

  • x86 提供了分层的权限机制,把区域分成了四个 Ring,越往里权限越高,越往外权限越低。Linux 使用两级保护机制:0 级供内核使用,3 级供用户程序使用。

    Android Detail:生命周期预备篇1——关于进程你需要了解这些

该图摘自极客时间课程 趣谈Linux操作系统

内核态与用户态

  • 当一个任务(进程)执行系统调用(system call)而陷入内核代码中执行时,称进程处于内核运行态(内核态)。此时处理器处于特权级最高的(0级)内核代码中执行。

  • 当进程在执行用户自己的代码时,则称其处于用户运行态(用户态)。此时处理器在特权级最低的(3级)用户代码中运行。

Linux 进程与线程

计算机上的程序都是以二进制文件的形式保存在硬盘上的,而这个二进制文件是静态的,称为 程序(Program),动态执行的程序,称为 进程(Process)。

进程与线程的数据结构

在 Linux 中,对于内核来说,进程和线程几乎没有区别,它们都会被看做为一个个任务(Task),一个统一的结构 task_struct 进行管理

Android Detail:生命周期预备篇1——关于进程你需要了解这些

内核将进程与线程认为是 Task

该图摘自极客时间课程 趣谈Linux操作系统

进程主要由以下几部分组成:

  • 代码段:编译后形成的一些指令

  • 数据段:程序运行时需要的数据

    • 只读数据段:常量
    • 已初始化数据段:全局变量,静态变量
    • 未初始化数据段(bss):未初始化的全局变量和静态变量
  • 堆栈段:程序运行时动态分配的一些内存

  • PCB:进程信息,状态标识等

task_struct 结构体的部分源码如下:

struct task_struct {     // 进程状态     long              state;     // 虚拟内存结构体     struct mm_struct  *mm;     // 进程号     pid_t              pid;     // 指向父进程的指针     struct task_struct __rcu  *parent;     // 子进程列表     struct list_head        children;     // 存放文件系统信息的指针     struct fs_struct        *fs;     // 一个数组,包含该进程打开的文件指针     struct files_struct        *files; };

每个进程都有着自己的 pid,用于表示该进程。进程是通过其他进程通过 fork 创建的,被创建的进程被称为子进程,创建进程的被称为父进程。

Linux 线程是一种进程间共享资源的方式,线程可看做是跟其他进程共享资源的进程。

部分转自互联网,侵权删除联系

赞(0) 打赏
部分文章转自网络,侵权联系删除b2bchain区块链学习技术社区 » Android Detail:生命周期预备篇1——关于进程你需要了解这些求职学习资料
分享到: 更多 (0)
D0b2wT.gif

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

b2b链

联系我们联系我们