当前位置: 首页 > article >正文

如何理解进程

一、进程的概念 

   进程:顾名思义,就是一个完整执行程序的过程。没错,就是这么简单,但是在程序执行的过程之中,系统会为这个执行的程序分配内存资源,这些过程也包含在进程当中。

        进程是动态的,是程序的一次执行过程,有开始,有结束,包含了进程的创建、调度、消亡,是在内存空间中

        程序是静态的,没有执行的概念,一串二进制指令,在外存上存储的二进制文件

         如下图所示,每个进程都被CPU调度执行

  

  • 第一步:操作系统 管理程序的入队顺序,这个入队有操作系统管理分配
  • 第二步:CPU分配时间片给在队列中的程序,这个时间片控制程序运行的时间
  • 第三步:当程序拿到CPU配的时间片之后就执行该程序,否则程序在队列中就绪,不执行

 

二、进程中的状态切换

1、就绪态/运行态

        就绪态   是指进程已经准备好执行,只等待 CPU 的分配。此时,进程已经拥有了所有它执行所需的资源和条件,如程序代码、数据、以及系统资源等,只是因为 CPU 还没有分配给它,进程没有真正运行。

         运行态   :进程正在 CPU 上执行。就绪态拿到时间片运行后的状态

2、阻塞态/休眠态

不可中断阻塞

        当资源有效时,由操作系统唤醒,否则一直处于阻塞等待状态,此时处于休眠态,进程不占用 CPU 资源,操作系统可以将 CPU 分配给其他需要执行的进程

可中断阻塞

        当资源有效时,由操作系统唤醒,与不可中断阻塞的区别:处于可中断阻塞态进程可以被其他进程唤醒

        唤醒:当进程在休眠态时,它会被操作系统的某些事件唤醒。例如,当 I/O 操作完成、定时器到期,或者其他事件发生时,进程会从休眠态变为就绪态,重新进入调度队列,等待 CPU 的分配。

3、终止态/僵尸态

        终止态:表示进程结束但尚未消亡的一种状态,此时进程已经结束运行并释放大部分资源,比如还未释放进程控制块

        僵尸态:指的是一个进程已经终止执行,但仍然在系统的进程表中保留着其信息。这些信息包括进程的退出状态和一些统计信息,供其父进程在调用 wait 系统调用时获取

4、停止态

停止运行,暂时挂起,进程被暂停,通过其他进程唤醒

 

 

 三、进程分配的资源

        以进程为单位申请释放内存空间

        以进程为单位分配CPU资源和时间片

        以进程为单位管理自己的虚拟内存空间,在需要的时候映射到物理内存地址上

        以进程为单位分配文件描述符:1024个

 四、进程的内存管理

        操作系统为每个进程都分配4G的内存空间(虚拟内存空间)

        0~3G是用户内存空间(所有进程相互独立),3G~4G是内核内存空间(所有进程共享)

         注意:分配的内存是虚拟内存。虚拟内存是计算机系统内存管理的一种技术,旨在使应用程序在执行时能够使用比实际物理内存更大的内存空间。虚拟内存为每个运行的程序提供了一个统一的、连续的地址空间,独立于实际的物理内存。操作系统会为每个进程分配一个虚拟地址空间,这个地址空间可以远大于实际的物理内存。

 

在用户空间里面,会为进程运行分配资源,这些资源分配如下图: 

 

五、进程标识

        操作系统会给每个进程都分配一个编号,编号唯一,这个编号称之为进程号

        操作系统标识进程不是通过程序名,而是通过进程号(pid)

主要进程标识:

        进程号:PID(process id)

        父进程号:PPID(parent process id)

        进程组号:PGID,进程组:若干个进程的集合称之为进程组,默认情况下,新创建的进程会进程父进程的进程组ID

        会话组号:SID,会话组:若干个进程组的集合称之为会话组,默认情况下,新创建的进程会继承父进程的会话ID

 特殊的进程号:

        0:idle进程,操作系统引导程序进程,创建1 和2 进程

        1:init进程 初始化内核的各个模块,当内核启动完毕后,用于收养孤儿进程(没有父进程的进程)

        2:kthread进程 用于进程调度

 


http://www.kler.cn/a/282469.html

相关文章:

  • xcode-select: error: tool ‘xcodebuild‘ requires Xcode, but active developer
  • lua实现雪花算法
  • 【React】状态管理之Zustand
  • 树状数组+概率论,ABC380G - Another Shuffle Window
  • web安全漏洞之ssrf入门
  • outline 分析
  • 渲染引擎实践 - UnrealEngine引擎中启用 Vulkan 和使用 Renderdoc 抓帧
  • Nginx SSL密码短语配置指南:增强负载均衡安全性
  • 王立铭脑科学50讲:49,灵魂和肉体,灵魂离体的感觉是怎么回事
  • ceph-rgw zipper的设计理念(2)
  • 工程师 - RS232通讯介绍
  • KTH5701 系列低功耗、高精度 3D 霍尔传感器
  • 命令模式详解
  • Oracle 11g RAC to 11g RAC ADG部署搭建
  • [M模拟] lc3153. 所有数对中数位不同之和(模拟+按位统计)
  • 问:介绍一下Java中的深克隆浅克隆?
  • MySQL之SUBSTRING 和 SUBSTRING_INDEX函数
  • 力扣134.加油站
  • mysql 数据区备份
  • 物联网架构之CDH集群部署
  • 软件架构的发展经历了从单体结构、垂直架构、SOA架构到微服务架构的过程剖析
  • Python中的if语句,让你轻松实现逻辑控制!!
  • <Godot>工厂游戏练习笔记一<2D网格地图>
  • 基于JSP技术的在线BLOG网系统
  • ROS 简单导航
  • E30.【C语言】练习:sizeof和strlen的习题集(B)