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

【LInux】进程概念II -- 描述进程

img

Halo,这里是Ppeua。平时主要更新C语言,C++,数据结构算法…感兴趣就关注我吧!你定不会失望。

本篇导航

  • 0. 进程概念
  • 1. 描述进程
  • 2. 组织进程

在这里插入图片描述

0. 进程概念

在初学阶段,我们对进程这个词仅在书上看见过,大多不太理解这个究竟是什么意思?

回顾我们之前所讲,如何去管理一件事物:先描述再组织.同样的 操作系统想要对进程进行管理也是要先去描述这个进程再去组织才能完成管理.

所以要管理进程,描述并组织这两步必不可少.

1. 描述进程

我们打开windows下的任务管理器.可以发现有很多的任务.

image-20231028204939279

这些任务我们可以粗略的把他认为是一个个进程.例如:我现在运行了edge,typora …等进程

根据之前所介绍的冯诺依曼体系结构来看,他们都是被加载到了内存当中,我们才可以使用.

所以我们先简单的对进程进行一个定义:一个加载到内存中的程序,叫做进程

那么如何描述他呢?

通过一个叫 PCB (process control block)的结构体来描述.在Linux中其名为Task_Struct(文末附有源码)

操作系统的工作流程是这样的:(省略了部分细节,之后详谈)

3fcb86fb2127c7f95a720a3f869b132

先将磁盘中的可执行程序移动到内存中,再为其分配一个PCB用指针指向该可执行程序,这一整块内容,我们统称为进程;

所以现在进程是由什么组成的也就是怎么描述进程的概念有了:进程=PCB+用户数据(代码段以及可执行程序等)

我们在Linux中看看是不是这样的呢?

打开我们的服务器,创建一份名为process.cpp的C++文件.

#include<stdio.h>
#include<unistd.h>
#include<stdlib.h>
int main()
{while(1){printf("i am a process\n");sleep(1);}
}

将其用gcc进行编译

gcc -o proce process.cpp

之后将其运行,此时屏幕上会出书 i am a process的字样表示程序成功启动

image-20231029170759142

现在我们用如下命令可以查看其进程属性

`ps -ajx | head -1 && ps -ajx | grep proce`

image-20231029171012392

可以看到其具有几个属性:

PPID: 父进程进程号

PID: 当前进程进程号

STAT: 当前进程状态

我们可以进入/proc这个目录来查看当前系统中运行的进程.

这是我服务器上所运行的进程号

image-20231029171336094

我们可以看到刚刚我们创建的进程号为1846149的进程在这里也有属于自己的文件夹.

我们进去看看有什么属性?

image-20231029171510491

当前情况下,我们只需要了解

  1. exe存储的是我们可执行程序的路径.也可以理解为一个指针指向对应的路径

  2. cwd是当前工作目录.在很多时候我们在一个程序中直接写文件名,系统在处理的时候会自动将cwd拼接在文件名前,这样就在当前路径中完成了自己想要的操作.

2. 组织进程

现在我们已经完成了描述进程这一工作:任何程序在加入到内存前,形成真正的进程时,操作系统需要先创建描述其属性的结构体对象

那Linux具体是如何组织进程的呢?最基本的方式为采用双向链表进行组织

image-20230905164632777

http://www.lryc.cn/news/210621.html

相关文章:

  • 紫光集团、展讯通信、锐迪科(RDA)、紫光展锐以及翱捷科技(ASR)关系梳理
  • 7.多线程之单例模式
  • docker 常用指令
  • Numpy、Pandas、Matplotlib学习(更新ing...)
  • Linux-sdio接口
  • 【MATLAB源码-第62期】基于蜣螂优化算法(DBO)的无人机三维地图路径规划,输出最短路径和适应度曲线。
  • RealVNC Enterprise 7.7.0 Crack
  • Windows下Jenkins自动化部署SpringBoot应用
  • Leetcode59螺旋矩阵2
  • 抖音很火的情侣飞行棋/真心话大冒险/情侣扫雷html网站源码带在线支付、代理分销等!
  • Word批量删除文档属性和个人信息方法图解
  • Kubernetes(K8s)从入门到精通系列之十八:使用 Operator Lifecycle Manager(OLM) 安装operator
  • request、response请求转发和重定向
  • MySql学习路线
  • Vue实现首页导航和左侧菜单,介绍mock.js并实现登录注册间的跳转,实现左侧栏折叠效果,优化Main.vue组件,使用mock.js生成随机响应数据
  • 汇总下之RobotFramework自动化框架的系列文章
  • 0052【Edabit ★☆☆☆☆☆】Learn Lodash: _.drop, Drop the First Elements of an Array
  • 从无人机到实景三维海洋系统
  • 第二章前端开发ES6基础
  • 使用Python将PDF转为图片
  • JAVA 同城服务货运搬家小程序系统开发时应注意哪些?
  • uniapp开发小程序 小米手机真机bottom:0无效 底部间隙 设备安全区域处理办法
  • 四十、【进阶】索引失效情况2
  • 敏感词过滤--golang
  • NVIDIA cuda安装时全部失败
  • APScheduler-调度器AsyncIOScheduler
  • 二十三种设计模式全面解析-原型模式(Prototype Pattern)详解:创造对象的奇妙之道
  • el-input 给icon图标绑定点击事件
  • 计算机网络——物理层
  • 常用排序算法