0
点赞
收藏
分享

微信扫一扫

[Linux 高并发服务器] 进程概述


[Linux 高并发服务器] 进程概述

程序和进程

程序

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

  • 二进制格式表示,用于描述可执行文件格式的元信息,内核利用此信息解释文件中的其他信息
  • 机器语言指令
  • 程序入口地址:标识程序开始执行时的起始指令位置
  • 数据:程序文件包含的变量初始值和程序使用的字面量值(字符串)
  • 符号表和重定位表,描述程序中函数和变量的位置以及名称。用来调试和运行时的符号解析(动态链接)
  • 共享库和动态链接信息
  • 其他信息也都是描述如何创建进程的

进程

  • 进程是正在运行的程序的实例。是一个具有一定独立功能的程序关于某个数据集合的一次运行活动,是操作系统动态执行的基本单元,在传统操作系统中也是基本的分配单元
  • 一个程序可以来创建多个进程,进程是有内核定义的抽象实体,并为该实体分配用以执行程序的各项系统资源。内核角度看,进程是由用户内存空间和一系列内核数据结构组成的

简单的说,程序就是文件是死的,进程就是程序执行时用来分配资源和执行程序的

单道多道程序设计

  • 单道程序设计,计算机内存中只允许一个程序的运行
  • 多道程序设计,在计算机中同时存放几道独立程序,在管理程序控制下相互穿插执行,共享计算机系统资源,提高了CPU的利用率
  • 对于一个单CPU系统来说,程序同时处于运行状态只是宏观上的概念,实际上任意时刻CPU上运行的程序只有一个
  • 多道程序设计模型中,多个进程轮流使用CPU。常见CPU为纳秒级别,1s执行约10亿条指令,几乎是同时运行。

时间片

又称:量子,处理器片
是操作系统分配给每个正在运行的进程微观上的一段CPU时间,时间片通常很短用户不会感觉到。时间片不能很长也不能很短,在Linux系统中为5ms~800ms。如果时间太短,频繁切换,中间的消耗的时间就太多了,浪费性能;如果时间太长,就能被感觉出来没有在“同时执行”。

时间片是有操作系统内核的调度程序分配给每个进程。内核先给每个进程分配相等的初始的时间片,每个进程轮流执行相应的时间,当所有进程都处于时间片耗尽的状态时,内核会重新为每个进程计算并分配时间片

并行和并发

并行:同一时刻,有多条指令在多个处理器上同时执行
并发:同一时刻,只能有一条指令执行,但多个进程指令被快速轮换执行,宏观上同时执行,微观上并不是同时执行,只是把时间片分成若干段,使多个进程快速交替的执行

进程控制块PCB

又称进程描述符表
为了管理进程,内核必须对每个进程所作的事情进行清楚的描述。Linux的进程控制块是​​​task_struct​​​结构体
可以在下面这个路径里看​​​task_struct​​的定义,不过太多了就不贴了

/user/src/linux-headers-xxx/include/linux/sched.h

里面主要有这些内容

  • 进程id:系统每个进程有唯一id,用pid_t类型表示,就是一个非负整数
  • 进程的状态:就绪,运行,挂起,停止(后面会讲)
  • 进程切换是需要保存和回复的一些CPU寄存器
  • 描述虚拟地址空间的信息
  • 描述控制终端的信息
  • 当前工作目录(Current Working Directory)
  • umask 掩码
  • 文件描述符表,包含很多指向 file 结构体的指针
  • 和信号相关的信息
  • 用户 id 和组 id
  • 会话(Session)和进程组
  • 进程可以使用的资源上限(Resource Limit),​​ulimit -a​​​可以查看资源上限

    如果要修改的话可以使用​​​ulimit -s 具体数值​​​,这样的格式来修改,其中​​-s​​​是以​​stack size​​举例,如果改别的,那就使用对应的字母



举报

相关推荐

0 条评论