首页 > 系统相关 >linux:进程状态

linux:进程状态

时间:2024-06-02 14:54:41浏览次数:37  
标签:状态 操作系统 一个 linux 进程 CPU 运行

  往往计算机的cpu只有一个,一个cpu有多个核心,一个cpu在同一时间只能被一个进程占用,又因为计算机的cpu数量总是少于进程数的,因此cpu是通过时钟轮片的方式处理每个进程的任务, 这些进程并不是凌乱的放在操作系统中的,他们是被一个数据结构有组织,有规律的管理起来的,所以一个进程处于运行状态,是往往是需要放在一个运行队列中,被CPU时钟轮片轮询处理他们的任务,这个处理过程中,在微观上是串行方式处理每个任务,但是在宏观上,我们看起来一个CPU是在并行处理的计算机中的多个任务,因为这个时钟轮片实在是太小了,小到我们察觉不到.

  当一个程序处于运行状态时,它的PCB进程块会被放在一个运行队列中,于是这个进程就会处于运行状态,CPU作为电脑中的一个硬件,以这种方式来处理每个程序的任务.一个计算机中存在多个外设,例如键盘,显示器或者打印机,他们也都需要维护一个进程PCB的等待队列来处理进程的IO任务,当一个进程需要用到外设时,例如需要用到显示器时,他的PCB进程块,就可以被抽象的认为是放到了显示器的等待队列中,而不是CPU的等待队列中,因此可以认为这个程序不被称为是运行状态,而是被认为是处于一个状态阻塞,这就是一个进程的阻塞状态.

  因为计算机的外设IO是远远慢于内存和CPU的,因此,当一个操作系统中的多个进程都需要用到打印机的外设时,这些进程的PCB都会被打印机的等待队列所指向并管理起来,此时这些进程的进程地址空间是被加载到内存中的,是占用内存的,但是这些进程并没有实质性的运行起来,只是在等待IO,因为一个计算机的内存是有限的,当这些进程到达一定程度时候,计算机的内存都就不够用了,操作系统会选择性的将一些等待的进程的内存中的数据移动到硬盘中,这样就释放了一些内存,而数据被移到硬盘中的这些进程,就会被称为挂起的进程,这就是进程的挂起状态.

  以上是普遍操作系统的一些进程状态,而在linux操作系统中,常见的进程状态有running sleeping disksleeping stopped tracing stop zombie dead这些状态,使用ps ajx可以查看系统中当前正在运行的进程信息,包括查看进程的状态,Sleep状态就是进程阻塞状态,也就是当这个进程正在使用外设,Runing就是运行状态,Stopped就是进程的暂停状态,可以使用向进程发送信号的方式来使进程处于暂停状态,具体的命令是kill numsign PID来使特定进程处于暂停状态.Disk sleeping,这是一种特殊的进程状态,看这个名字就可以知道它是跟硬盘有关系的,事实也是如此.例如,当一些重要的数据需要从内存中写入到硬盘时,这些重要的数据可能很大,时间很长,在此期间可能因为操作系统的优化过程恰好将写入操作的进程杀死了,那么,当写入过程结束以后,写入的结果信息不会被进程所接收,数据有可能写出失败或者异常情况,若不合理的处理这些情况,可能会出现重大的损失,因此,可以让进程进入disk sleeping状态,让操作系统不要杀死这个进程,这就是disk sleeping状态的由来.

 

  Linux中也有一个特殊的z状态,也就是经常处于僵尸状态,在linux中,一个进程一定是由一个父进程产生的,这个父进程,可以在子进程结束时回收子进程的退出信息,而一个子进程如果在自身运行结束后,父进程并没有回收子进程的结束状态,那么子进程会进入僵尸进城状态,等待父进程回收,这就是僵尸进程,如果一个子进程在运行过程中,父进程提前结束,而子进程还没有结束,那么这个子进程就会被称为孤儿进程,它会自动被PID为1号的操作系统进程领养.

  进程优先级的概念,因为一个操作系统中的所有进程并不都是同等的地位,有些进程是比较重要的,有些进程是相对来说较为次要的进程,又因为计算机的CPU资源一定小于进程的资源,所以为了进程合理利用占用CPU,可以通过设置进程的优先级来让CPU的时间轮片更加倾向于某个进程,在linux中,可以用top 查看进程的优先级状态,初始进程的优先级为80,通过另一个nice对这个基础的优先级增加或减少来修改进程的,优先级数字越高,优先级越高,

 

  进程在运行过程中是有独立性的,每个进程的运行,别的进程是互不干扰的,并行性是多个CPU运行多个进程,并发性是一个CPU运行多个进程

  由并发性可知,一个CPU处于多个进程的任务,通过时间轮的方式分配给指定每个进程占用CPU的时间来使多个进程在宏观上达到同时推进的现象.

  那这一个CPU是如何无缝衔接的?记录上一个进程的运行位置,且保证这个进程下一次来时还能从这个位置运行呢?   

  每个CPU核心只存在一套寄存器,其中有一个pc计数器的寄存器,他会按顺序来不断的执行每一条指令,进程在执行过程中会产生很多的临时数据,这些临时数据是会放在临时寄存器中的。对于不同的进程,这些临时寄存器中的数据是不一样的,当一个进程被切出CPU时,进程中的临时文件会被一些特定寄存器存起来,然后保存在当前进程PCB进程块中的某一个位置,然后切换下一个进程,当一个进程被切入时,特定的寄存器会从特定的PCB位置读入进程的临时数据,然后再向下继续执行,这个过程被称为上下文保护和上下文恢复

标签:状态,操作系统,一个,linux,进程,CPU,运行
From: https://www.cnblogs.com/qjwxlj/p/18227134

相关文章

  • Linux目录的基本结构(RHEL8系统基本使用之文件操作)
    1.Linux的目录树结构2.各目录的功能介绍3.理解文件路径表示方法Who?——>当前登录的用户Where?——>路径我要在哪儿创建文件?我要删除什么地方的什么文件?我所要查看的文件在哪里?What?——>操作命令How?——>理清思路,找到方法,做就对了绝对路径1.一定是以"/"(根)开......
  • SSH远程连接Linux服务器
    1.1SSH(SecureShell)是一种网络协议,用于加密方式远程登录到服务器。以下是通过SSH连接Linux服务器的基本步骤:安装SSH客户端:Windows10及以上版本自带了OpenSSH客户端安装SSH服务端:在服务器端安装OpenSSH,需要在服务器终端进行。#安装sshsudoaptinstallopenssh-server......
  • 在Linux中,如何进行集群管理?
    在Linux中,进行集群管理涉及到多个步骤和考虑因素。以下是一个详细的指南,帮助你理解并执行Linux集群管理:一、理解集群管理的基本概念集群定义:集群是一组相互独立的、通过高速网络互联的计算机,它们构成一个组并以单一系统的模式加以管理。集群技术可以在较低成本下提供高性能、可......
  • 在Linux中,如何进行系统性能瓶颈分析?
    在Linux中进行系统性能瓶颈分析是一个系统性的过程,涉及多个方面。以下是一个详细的步骤说明,用于分析和诊断Linux系统性能瓶颈:1.确定性能指标CPU利用率:检查CPU是否成为瓶颈。可以使用top、htop等工具查看CPU的使用情况,包括用户态、内核态和空闲态的占比。内存使用:检查内存是否......
  • 在Linux中,如何进行系统故障恢复?
    在Linux系统中进行故障恢复是一个涉及诊断问题、制定恢复计划并执行恢复步骤的过程。以下是一些基本步骤和策略,帮助您应对不同类型的系统故障:1.初步诊断与隔离识别症状:首先,观察并记录故障的具体表现,比如系统无法启动、服务异常、性能下降等。查看系统日志:使用dmesg命令查看内......
  • 在Linux中,如何进行高可用性配置?
    在Linux环境中实现高可用性(HighAvailability,HA)通常涉及多个层面的策略和技术,以确保系统、服务或应用在面对硬件故障、软件错误或维护操作时能够持续运行。以下是构建Linux高可用性环境的一些关键步骤和组件:1.理解高可用性概念目标:最小化停机时间,提高系统或服务的可用性。......
  • 在Linux中,如何进行网络故障排查?
    在Linux中进行网络故障排查时,通常需要遵循一系列步骤来确保能够准确定位并解决问题。以下是一个详细的网络故障排查流程:1.检查物理连接确保网线连接稳固,无物理损坏,尝试更换网线或端口。检查网络设备(如交换机、路由器)的端口状态和连接,确保它们正常工作。2.使用ping命令测试......
  • FFmpeg开发笔记(二十六)Linux环境安装ZLMediaKit实现视频推流
    ​《FFmpeg开发实战:从零基础到短视频上线》一书在第10章介绍了轻量级流媒体服务器MediaMTX,通过该工具可以测试RTSP/RTMP等流媒体协议的推拉流。不过MediaMTX的功能实在是太简单了,无法应用于真实直播的生产环境,真正能用于生产环境的流媒体服务器还要看SRS或者ZLMediaKit。ZLMedia......
  • [转帖]20个常用的Linux工具命令
     https://segmentfault.com/a/1190000041678641 原创:打码日记(微信公众号ID:codelogs),欢迎分享,转载请保留出处。简介网上有很多辅助开发的小工具,如base64,md5之类的,但这些小工具其实基本都可以用Linux命令实现,即方便又高效。 查看特殊字符把这个放在首位,是因为这个实......
  • kali Linux 操作系统更新命令脚本
    kaliLinux操作系统更新命令脚本执行方法sudoaptinstalldos2unixdos2unixupdate_script.shsudo./update_script.shkaliLinux操作系统更新命令脚本#!/bin/bashclearRED='\033[0;31m'GREEN='\033[0;32m'YELLOW='\033[0;33m'BLUE="\033[0;3......