[Linux] Linux操作系统 进程的状态

 标题:[Linux] Linux操作系统 进程的状态

个人主页:@水墨不写bug

(图片来源于网络)

目录

 一、前置概念的理解

1.并行和并发

2.时间片 

 3.进程间具有独立性

 4.等待的本质


正文开始:

        在校的时候,你一定学过《操作系统原理》这本书,操作系统这个学科作为计算机哲学科目,无疑非常难以理解。再加上操作系统原理这本书并不是针对某一种操作系统而写的书,所以其内的大多数解释概念解释 含糊不清,难以琢磨。这不是作者的原因,而是选题的原因:因为它讲的是操作系统这个抽象后的概念,对于某一种具体的操作无法落实到具体的事例,什么意思呢?

        比如,MacOS,Windows,Linux对于某一概念本质是一样的,但是处理方法不同,于是操作系统原理就笼统的用提取出来的概念来讲。再比如,模板大家都知道吧,《操作系统原理》这本书就好比是仅仅是对着模板来讲解,而不是一个具体的函数。一般而言,我们理解模板的正常逻辑是从一个具体函数然后上升到对模板的理解的,是从具体到抽象的过程,而不是仅仅停留在模板,只讲抽象的概念。

         这也就是你觉得操作系统难的原因。本文就沿着Linux这一具体的操作系统来讲解操作系统的概念。之所以选择Linux,是因为Linux是最受欢迎的高效、免费的操作系统,企业级应用最多。


         在理解进程的概念之前,我们需要先铺垫几个重要的概念:

 一、前置概念的理解

1.并行和并发

        并发:假设我们只有一个低配置的单核的CPU,这个时候我们仍然是可以启动多个进程的,为什么呢?这就是并发;

        CPU执行进程代码,不是把进程代码执行完,才开始执行下一个,而是给每一个进程预分配一个时间片,基于时间片,依次调度各个进程,进行调度轮转,这就是并发。即便只有一个CPU,这一个CPU仍然可以凭借并发,来在人眼无法分辨的时间段内极速切换,达到“同时”运行多个进程的目的。

        并行:多个进程在多个CPU下分别同时进行,称为并行


2.时间片 

        在Linux操作系统中,时间片(Time Slice)是操作系统进行  进程调度  时分配给每个进程运行的一段固定时间。Linux(以及许多其他现代操作系统)使用基于时间片的轮转调度算法(Round-Robin Scheduling)来管理CPU资源的分配,以确保所有进程都能公平地获得执行时间。

        当一个进程被调度到CPU上运行时,它会被分配一个时间片。在这个时间片内,进程可以执行其任务。当时间片结束时,无论该进程是否已经完成其工作,操作系统都会暂停该进程的执行,并将其放回就绪队列的末尾(或根据调度算法的其他规则重新排序)。然后,操作系统会选择另一个进程来执行,为其分配一个新的时间片。

        对于大多数民用级Linux/Windows操作系统,使用的是分时操作系统,也就是上面的这种采用时间片调度的操作系统。而对于一些特殊需求的高精度,高需求的场景:比如航空航天,车辆自动驾驶等,就不能再使用分时操作系统,因为毫秒级别的误差就可能导致事故。这些场景就需要采用实时操作系统


 3.进程间具有独立性

         进程间具有很强的独立性,这里目前不需要很深的理解。

        父进程创建的子进程挂掉之后,父进程不会收到影响,比如你在本地IDE上写一个程序,但是出现空指针导致程序挂掉了,你写的进程结束了,但是IDE不会因此挂掉。

 4.等待的本质

         在Linux下,进程有许多种不同的状态,之所以为进程区分状态,是为了提高效率。一个进程实际并没有用到CPU资源,但是却占用内存,这样的做法显然不合理。

        Linux进程的状态有:

/*
* The task state array is a strange "bitmap" of
* reasons to sleep. Thus "running" is zero, and
* you can test for combinations of others with
* simple bit tests.
*/
static const char * const task_state_array[] = {
"R (running)", /* 0 */
"S (sleeping)", /* 1 */
"D (disk sleep)", /* 2 */
"T (stopped)", /* 4 */
"t (tracing stop)", /* 8 */
"X (dead)", /* 16 */
"Z (zombie)", /* 32 */
};

总体介绍:

        CPU根据一定的调度算法依次调度每一个进程。

        运行的或者是准备好的进程处于运行队列中。只要进程在运行队列中,该进城就处于运行状态,表示:“进程已经准备好了,可以随时被CPU调度进行运算”

        当一个进程被阻塞的时候,这个进程就不需要被放入运行队列中,因为它不需要被CPU调度。 那么这个进程就会被加载到不同的硬件的数据结构中,等待硬件的响应,这个时候的进程就处于睡眠状态。

        睡眠状态根据进程重要程度的不同,分为可中断睡眠和不可中断睡眠。

运行和阻塞的本质:

是让不同的进程处在不同的队列中。

       

 R运行状态(running) : 并不意味着进程一定在运行中,它表明进程要么是在运行中要么在运行队列里。

S睡眠状态(sleeping): 意味着进程在等待事件完成(这里的睡眠有时候也叫做可中断睡眠(interruptible sleep))

D磁盘休眠状态(Disk sleep):有时候也叫不可中断睡眠状态(uninterruptible sleep),在这个状态的进程通常会等待IO的结束。

T停止状态(stopped): 可以通过发送 SIGSTOP 信号给进程来停止(T)进程。这个被暂停的进程可以通过发送 SIGCONT 信号让进程继续运行。

X死亡状态(dead):这个状态只是一个返回状态,你无法在任务列表里看到这个状态


完~

未经作者同意禁止转载

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/883168.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

图解Transformer就这30页PPT,你们真不看啊

图解Transformer就这30页PPT,你们真不看啊 主要介绍了Seq2Seq模型,慢慢引出了transformer的整体模型架构,比较具体的介绍了编码器部分的数据处理过程,包括了位置编码、多头注意力机制、残差连接、Layer Norm以及前馈网络等基本结…

支付宝沙箱环境 支付

一 什么是沙箱: 沙箱环境是支付宝开放平台为开发者提供的安全低门槛的测试环境 支付宝正式和沙箱环境的区别 : AI: 从沙箱到正式环境: 当应用程序开发完成后,需要将应用程序从沙箱环境迁移到正式环境。 这通常涉及…

如何查看线程

1、首先找到我们的电脑安装jdk的位置,这里给大家展示一下博主本人的电脑jdk路径下的jconsole位置。 2、 ok,那么找到这个jconsole程序我们直接双击打开就可以查看我们电脑的本地进程: jconsole 这里能够罗列出你系统上的 java 进程&#xff0…

古代经典名方目录数据库-支持经典名方检索!

"古代经典名方目录"是指一系列历史上流传下来的,被认为具有一定疗效的中药方剂的汇总。这些方剂多来源于历代医学典籍,经过长期临床实践的检验,部分已被收录于官方的目录之中,以便于现代医疗实践中的参考和应用。 目前…

手机在网状态查询接口如何用C#进行调用?

一、什么是手机在网状态查询接口? 手机在网状态查询接口是利用实时数据来对手机号码在运营商网络中的状态进行查询的工具,包括正常使用状态、停机状态、不在网状态、预销户状态等。 二、手机在网状态查询适用哪些场景? 例如:商…

设计模式-结构型-11-代理模式

文章目录 1. 基本介绍2. 静态代理2.1 基本介绍UML 类图 2.2 应用实例定义接口目标对象代理对象调用代理 2.3 静态代理优缺点 3. 动态代理3.1 基本介绍3.2 JDK 中生成代理对象的 API参数说明UML类图 3.3 应用实例定义接口目标对象代理工厂调用代理 4. Cglib 代理4.1 基本介绍4.2…

求一个数的因子数(c语言)

1.计算并输出给定整数n的所有因子(不包括1与n自身)之和。规定n的值不大于1000。(因子是能整除n的数 即n%i0) // 例如,在主函数中从键盘给n输入的值为856,则输出为: sum763。 2.第一步我们先输入n的数&…

Koa (下一代web框架) 【Node.js进阶】

koa (中文网) 是基于 Node.js 平台的下一代 web 开发框架,致力于成为应用和 API 开发领域中的一个更小、更富有表现力、更健壮的基石; 利用 async 函数 丢弃回调函数,并增强错误处理,koa 没有任何预置的中间件,可快速…

mysql安装教程(新手版)

本教程不需要手动设置配置文件,比较简单,适合新手,过程需联网。 1.找到mysql官网 mysql官网 一.mysql的安装 1.界面如下图,点击箭头所指。 2.选择mysql版本,系统,安装。 3.下载完成后双击打开&#xff0…

golang操作mysql利器-gorm

1、傻瓜示例 GORM通过将数据库表中的数据映射到面向对象的模型中,简化了数据库操作,使得开发者可以很方便的使用代码来操作数据库,而无需编写SQL语句。 目前有个mysql表:miniprogram_orders,其存储了所有用户对应的订…

Android SystemUI组件(07)锁屏KeyguardViewMediator分析

该系列文章总纲链接:专题分纲目录 Android SystemUI组件 本章关键点总结 & 说明: 说明:本章节持续迭代之前章节的思维导图,主要关注左侧上方锁屏分析部分即可。 为了更好理解本文的内容,优先说明下SystemUI中与Ke…

CoreDNS实现跨集群service解析实践

CoreDNS实现跨集群service解析实践 背景介绍使用条件实现方案 CoreDNS是一款使用Go语言实现的专为云原生应用而生的DNS服务器。本文介绍CoreDNS在特定实际场景下的一种进阶使用实践,也许能为其他也在使用CoreDNS做服务发现的同学提供一些启发和思考。 背景介绍 在…

luceda ipkiss教程 76:设计光栅耦合器

案例分享:设计光栅耦合器 全部代码如下: from si_fab import all as pdk from ipkiss3 import all as i3 import numpy as npclass grating_coupler(i3.PCell):"""SOI grating coupler."""_name_prefix "grating_c…

mysql 05 InnoDB数据页结构

01.数据页结构的快速浏览 02.记录在页中的存储 在页的7个组成部分中,我们自己存储的记录会按照我们指定的 行格式 存储到 User Records 部分。但是在一开始生成页的时候,其实并没有 User Records 这个部分,每当我们插入一条记录&#xff0c…

单词记忆的化境:用思想的流水去淹没坚硬的石块

其实,鹅卵石通常都是很硬的。但是河底的石子,几乎大多都成了鹅卵石,它们被流水淹没,日复一日、夜以继日的冲刷着,没有了棱角。 在单词的记忆过程中,我们有太多的人,都有着不堪回首的往事&#x…

面试系列-携程暑期实习一面

Java 基础 1、Java 中有哪些常见的数据结构? 图片来源于:JavaGuide Java集合框架图 Java 中常见的数据结构包含了 List、Set、Map、Queue,在回答的时候,只要把经常使用的数据结构给说出来即可,不需要全部记住 如下&…

爬虫逆向学习(九):记录一个集cookie、请求参数、请求体、响应文本加密的站点反爬

此分享只用于学习用途,不作商业用途,若有冒犯,请联系处理 反爬前置信息 站点:aHR0cHM6Ly96d2Z3LmNxLmdvdi5jbi9pY2l0eS9pY2l0eS9lbmdpbmVlcmluZy9uYXZpZ2F0aW9u 接口:/icity/api-v2/cq.app.icity.engineering.Engine…

江科大51单片机

文章目录 led灯led点亮led闪烁流水灯 独立按键按键点灯按键消抖按键实现二进制流水灯按键实现流水灯 数码管静态数码管显示动态数码管显示 矩阵键盘定时器/中断串口通信led点阵屏DS1302实时时钟蜂鸣器AT24C02DS18B20LCD1602直流电机驱动AD/DA红外遥控 led灯 创建项目&#xff…

打印沙漏(最蠢的办法)

直接给代码&#xff0c;很好理解的 #include<bits/stdc.h> using namespace std; int s(int b){if(b<1)return 0;if(b2)return 1;for(int i3;i<sqrt(b);i){if(b%i0)return 0;}return 1; } int main(){int n;cin>>n;char c;cin>>c;vector<int>s;…

网络原理之IP协议(网络层)

目录 前言 什么是IP协议&#xff1f; IP协议的协议头格式 16位总长度&#xff08;字节数&#xff09; 16位标识、3位标志位和13位片偏移 8位生存时间 IP地址管理 1.动态分配IP 2.NAT机制&#xff08;网络地址转换&#xff09; NAT机制是如何工作的 NAT机制的优缺点…