Linux应用开发-第四章Linux的多进程开发(1)

一、基本概念

1.1 程序

程序是包含一系列信息的文件,这些信息描述了如何在运行时创建一个进程:

  • 二进制格式标识:每个程序文件都包含用于描述可执行文件格式的元信息。内核利用此信息来解释文件中的其他信息。(ELF可执行连接格式)
  • 机器语言指令:对程序算法进行编码。
  • 程序入口地址:标识程序开始执行时的起始指令位置。
  • 数据:程序文件包含的变量初始值和程序使用的字面量值(比如字符串)。
  • 符号表及重定位表:描述程序中函数和变量的位置及名称。这些表格有多重用途,其中包括调试和运行时的符号解析(动态链接)。
  • 共享库和动态链接信息:程序文件所包含的一些字段,列出了程序运行时需要使用的共享库,以及加载共享库的动态连接器的路径名。
  • 其他信息:程序文件还包含许多其他信息,用以描述如何创建进程。

1.2 进程

  • 进程是正在运行的程序的实例。是一个具有一定独立功能的程序关于某个数据集合的一次运行活动。
  • 它是操作系统动态执行的基本单元,在传统的操作系统中,进程既是基本的分配单元,也是基本的执行单元。
  • 可以用一个程序来创建多个进程,进程是由内核定义的抽象实体,并为该实体分配用以执行程序的各项系统资源。
  • 从内核的角度看,进程由用户内存空间和一系列内核数据结构组成,其中用户内存空间包含了程序代码及代码所使用的变量,而内核数据结构则用于维护进程状态信息。记录在内核数据结构中的信息包括许多与进程相关的标识号(IDs)、虚拟内存表、打开文件的描述符表、信号传递及处理的有关信息、进程资源使用及限制、当前工作目录和大量的其他信息。
  • 对于一个单 CPU 系统来说,程序同时处于运行状态只是一种宏观上的概念,他们虽然都已经开始运行,但就微观而言,任意时刻,CPU 上运行的程序只有一个。
  • 在多道程序设计模型中,多个进程轮流使用 CPU。而当下常见 CPU 为纳秒级,1秒可以执行大约10 亿条指令。由于人眼的反应速度是毫秒级,所以看似同时在运行。

进程和程序的区别:

        进程会占用系统资源(CPU、内存),程序只占用磁盘资源;(程序是死,进程是活)

        进行是操作系统是为程序运行分配的一些资源(一个进程运行起来后,会为它分配一个虚拟地址空间)

 1.3 单道多道程序设计

  • 单道程序,即在计算机内存中只允许一个的程序运行。
  • 多道程序设计技术是在计算机内存中同时存放几道相互独立的程序,使它们在管理程序控制下,相互穿插运行,两个或两个以上程序在计算机系统中同处于开始到结束之间的状态, 这些程序共享计算机系统资源。引入多道程序设计技术的根本目的是为了提高 CPU 的利用率。
  • 对于一个单 CPU 系统来说,程序同时处于运行状态只是一种宏观上的概念,他们虽然都已经开始运行,但就微观而言,任意时刻,CPU 上运行的程序只有一个。
  • 在多道程序设计模型中,多个进程轮流使用 CPU。而当下常见 CPU 为纳秒级,1秒可以执行大约10 亿条指令。由于人眼的反应速度是毫秒级,所以看似同时在运行。

1.4 时间片

  • 时间片 (timeslice) 又称为“量子(quantum)或“处理器片 (processor slice是操作系统分配给每个正在运行的进程微观上的一段 CPU 时间。事实上,虽然一台计算机通常可能有多个 CPU,但是同一个 CPU 永远不可能真正地同时运行多个任务。在只考虑一个 CPU 的情况下,这些进程“看起来像”同时运行的,实则是轮番穿插地运行,由于时间片通常很短(在 Linux 上为 5ms -800ms),用户不会感觉到。
  • 时间片由操作系统内核的调度程序分配给每个进程。首先,内核会给每个进程分配相等的初始时间片,然后每个进程轮番地执行相应的时间,当所有进程都处于时间片耗尽的状态时,内核会重新为每个进程计算并分配时间片,如此往复。

1.5 并行和并发

并行(parallel):指在同一时刻,有多条指令在多个处理器上同时执行。

相关推荐

  1. Linux应用开发-Linux进程开发1

    2024-07-09 21:12:03       23 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-09 21:12:03       49 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-09 21:12:03       53 阅读
  3. 在Django里面运行非项目文件

    2024-07-09 21:12:03       42 阅读
  4. Python语言-面向对象

    2024-07-09 21:12:03       53 阅读

热门阅读

  1. C#中的类

    2024-07-09 21:12:03       27 阅读
  2. Linux安全加固:防火墙规则与SELinux策略

    2024-07-09 21:12:03       18 阅读
  3. [终端安全]-1 总体介绍

    2024-07-09 21:12:03       22 阅读
  4. 目标检测精度提升秘籍:算法优化策略全解析

    2024-07-09 21:12:03       21 阅读
  5. 7月8日 四道经典单链表oj题

    2024-07-09 21:12:03       23 阅读
  6. 飞书文档转markdown 超级快捷方法。

    2024-07-09 21:12:03       17 阅读
  7. 达梦数据库kill会话

    2024-07-09 21:12:03       15 阅读
  8. 服务发现与注册:Eureka与Consul

    2024-07-09 21:12:03       18 阅读
  9. Vite 中怎么添加全局 scss 文件

    2024-07-09 21:12:03       22 阅读
  10. 深入理解 CSS 选择器:全面指南

    2024-07-09 21:12:03       21 阅读
  11. 记一次使用“try-with-resources“的语法导致的BUG

    2024-07-09 21:12:03       23 阅读