【Linux系统化学习】探索进程的奥秘 | 第一个系统调用

news2024/11/24 22:27:06

=========================================================================

个人主页点击直达:小白不是程序媛

Linux系列专栏:系统化学习Linux

=========================================================================

目录

进程的概念

进程的管理

描述进程——pcb

组织进程

进程在排队

Linux下的进程

Linux组织进程

查看进程

 查看可执行程序的进程

第一个系统调用

"杀掉进程"


进程的概念

上篇文章我们介绍了冯诺依曼体系结构和了解了操作系统的概念和功能;在我们Windows的计算机上的磁盘上有很多的可执行程序,其中有我们自己手动安装的或者自己写的可执行程序的代码等等各种功能的程序。当我们想启动某一程序时,只需要双击它的图标即可。根据冯诺依曼体系结构操作系统便将我们执行的可执行程序从磁盘加载到内存中,此时这个可执行程序在内存中就执行起来了,便是一个我们所谓的进程。

  • 课本概念:程序的一个执行实例,正在执行的程序等
  • 内核观点:担当分配系统资源(CPU时间,内存)的实体。

 

这就是我计算机此时后台进程和运行起来的程序,我们会发现后台的进程不止一个运行起来的程序也不知一个;就像我现在一边在这里写文章一边还是用音乐播放器放着我喜欢的音乐,甚至在阅读参考文档等等运行了很多我使用到的程序,互不干扰每个运行起来的可执行程序只发挥着自己的作用。


进程的管理

当我们启动计算机的那一刻,操作系统这款软件就率先运行起来;上篇文章我们详细谈到操作系统的作用:对软硬件资源进行管理和操作系统的核心之一进程管理。一个软件加载到内存中运行起来便是一个进程,操作系统的管理方式——先描述,在组织

描述进程——pcb

进程加载到内存中内存操作系统会分配空间地址(ID)(代码地址&数据地址),记录此时我们是否在使用(状态)等等各种属性,操作系统将这些能够描述一个加载在内存中的程序的属性打包起来(struct),这个struct便是一个进程的pcb(process control block)。

  • 进程信息被放在一个叫做进程控制块的数据结构中,可以理解为进程属性的集合。
  • 课本上称之为PCB(process control block),Linux操作系统下的PCB是: task_struct

组织进程

加载到内存中的可执行程序,操作系统会形成它的pcb,每个pcb不仅仅含有描述对应运行软件的各种属性,还有指向下一个运行起来程序的pcb(也就是结构体指针)。将每个pcb以链表的方式组织起来,其实就是对进程的管理被建模成对链表的增删查改

进程在排队

当我们运行起来的程序需要进入CPU进行数据运算时,会被CPU调度一次;当运行起来很多程序时,每个程序都有自己的pcb;将需要被CPU调度的软件的pcb以队列的形式组织起来,先进先出;这便是进程在排队;

总结:

  • 操作系统并不是直接对运行起来的可执行程序做管理,而是对运行起来的可执行程序“打包”(pcb),每个pcb做管理。
  • 进程的深层含义:进程=可执行程序+内核数据结构(pcb)
  • 进程的pcb不止在一个链表中,可能在很多结构中;例如:当程序运行起来并且需要CPU调度时pcb不仅在链表中,还在一个队列中排队。

Linux下的进程

task_struct——PCB的一种

  • 在Linux中描述进程的结构体叫做task_struct
  • task_structLinux内核的一种数据结构,它会被装载到RAM(内存)里并且包含着进程的信息

task_struct内容分类

  • 标示符: 描述本进程的唯一标示符,用来区别其他进程。(pid)
  • 状态: 任务状态,退出代码,退出信号等。
  • 优先级: 相对于其他进程的优先级。
  • 程序计数器: 程序中即将被执行的下一条指令的地址。
  • 内存指针: 包括程序代码和进程相关数据的指针,还有和其他进程共享的内存块的指针
  • 上下文数据: 进程执行时处理器的寄存器中的数据[休学例子,要加图CPU,寄存器]。
  • I/O状态信息: 包括显示的I/O请求,分配给进程的I/O设备和被进程使用的文件列表。
  • 记账信息: 可能包括处理器时间总和,使用的时钟数总和,时间限制,记账号等。
  • 其他信息

Linux组织进程

可以在内核源代码里找到它。所有运行在系统里的进程都以task_struct链表的形式存在内核里

查看进程

指令

  • ps ajx
  • ps指令还有很多的选项,目前我们我们就只介绍这一个选项在以后的文章中会慢慢介绍剩下的选项。 

下图为我当前Linux下的部分进程。

 查看可执行程序的进程

我们自己使用编程语言写的.c文件不是可执行程序,需要通过预处理、编译、链接生成后缀为.exe的可执行程序,运行这个可执行程序在系统中会生成进程。

#include<stdio.h>
#include<unistd.h>
int main()
{
    int i=0;
    while(i<100)
  {
      printf("我是一个进程!\n");
      sleep(1);
      i++;                                                                                                                                                                       
  }
    return 0;
}

 上图我们执行可执行程序后通过管道过滤会查到我们可执行程序运行时的进程。

总结:

  • 我们执行的程序、写的可执行程序、执行的代码都是进程 

第一个系统调用

我们可以通过函数调用得到我们的pid

  1 #include<stdio.h>
  2 #include<unistd.h>
  3 #include<sys/types.h>
  4 int main()
  5 {
  6     int i=0;
  7     while(i<100)
  8     {
  9         pid_t id  =getpid();
 10         printf("我是一个进程,我的进程id是:%d\n",id);
 11         sleep(1);
 12         i++;
 13     }
 14     return 0;
 15 }   

"杀掉进程"

使用kill指令配合进程的pid就可以”杀掉进程“


今天对Linux下进程的介绍分享到这就结束了,希望大家读完后有很大的收获,也可以在评论区点评文章中的内容和分享自己的看法。您三连的支持就是我前进的动力,感谢大家的支持!!!

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

一些有趣的迹象:“前端已死”难道要成真了?

移动互联网的兴起&#xff0c;传统行业的数字化转型&#xff0c;大前端技术的普及&#xff0c;随之而来的就是Vue为代表的前端框架和工具的兴起&#xff0c;前端开发的门槛降低。但发展&#xff0c;稳定&#xff0c;衰落是亘古不变的事物发展规律。 一些有趣的迹象 最近逛社区…

Linux发展史与环境安装

Linux发展史与环境安装 一、Linux发展史推动技术进步的基本模式理解操作系统的发展理解Linux操作系统的发展 一、Linux的环境安装 一、Linux发展史 Linux和window XX其实都是一样的&#xff0c;定位&#xff1a;操作系统&#xff0c;企业内部&#xff0c;要给用户提供“互联网…

C语言指针强制的本质

今天看到这样一段项目代码&#xff0c;某个函数传入了一个void类型的指针&#xff0c;并在函数内部将其强转为了某结构体类型指针&#xff0c;利用该指针获取结构体中变量之后&#xff0c;又将指针转换为char类型并偏移结构体大小的长度获取数据。代码如下 void recv_omu_data(…

为什么esp8266刷入了固件,无法接受AT指令

我遇到的解决方法是&#xff1a;是串口调试助手出了问题。所以需要更换一个串口调试助手软件。 上面这个就是我换了的软件 在开发的时候&#xff0c;经常会遇到软件故障&#xff0c;导致正确的方法&#xff0c;但是没有效果&#xff0c;好比以前用盗版的8.7版本的Proteus模拟…

Leetcode2760. 最长奇偶子数组

Every day a Leetcode 题目来源&#xff1a;2760. 最长奇偶子数组 解法1&#xff1a;模拟 代码&#xff1a; class Solution { public:int longestAlternatingSubarray(vector<int> &nums, int threshold){int n nums.size();int ans 0;for (int i 0; i <…

vue3基础学习(上)

##以前怎么玩的? ###MVC Model:Bean View:视图 Controller ##vue的ref reactive ref:必须是简单类型 reactive:必须不能是简单类型 ###创建一个Vue项目 npm init vuelatest ###生命周期 ###setup相关 ####Vue2的一些写法 -- options API ####Vue3的写法 组合式API Vu…

Elasticsearch基础增删改查

Elasticsearch是面向文档型数据库&#xff0c;一条数据在这里就是一个文档 倒排索引 正排(正向)索引&#xff1a; IDcontent01my name is zhangsan02my name is lisi 倒排索引&#xff1a; keywordIDname01,02zhang01 创建索引 创建索引等同于创建数据库 PUT具有幂等性&…

sqlserver配置管理器无法启动解决方案

在SQL server configuration manager配置管理器中遇到SQL server browser呈灰色&#xff0c;无法启动 右击选择属性 进入服务 将启动模式改为自动 可以启动了

Python大语言模型实战-利用MetaGPT框架自动开发一个游戏软件(附完整教程)

实现功能 MetaGPT是一个应用在软件开发领域的多智能体框架&#xff0c;其主要创新点在于将SOP标准流水线和Agent结合在了一起&#xff0c;使得拥有不同技能的Role之间配合完成一项较为复杂的任务。本文将用一个案例来演示整个流程。 实现代码 项目地址&#xff1a;https://gi…

3DMAX各种拼图建模插件集锦之“彩虹系列”

现实生活中我们随处可见各种重复的图案&#xff0c;例如地面上铺设的地砖&#xff0c;砌的砖墙石墙&#xff0c;覆盖着瓦片的屋顶&#xff0c;用作装饰的拼图图案等等&#xff0c;这些重复的拼图单体建模看似简单&#xff0c;但是大面积铺设&#xff0c;如果完全手动就有些费时…

FPGA——IP核 基础操作

FPGA——IP核 基础操作 IP核例化模块时钟IP核RAM IP核 IP核例化模块 找到模版 加入代码中 时钟IP核 配置模式功能 配置输入时钟 输出配置 RAM IP核

NSS [SWPUCTF 2022 新生赛]1z_unserialize

NSS [SWPUCTF 2022 新生赛]1z_unserialize 我敲&#xff0c;报恩题&#xff01; 直接用构造方法构造POC更改$lt和$lly <?php class lyh{public $lt;public $lly;function __construct(){$this->lt"system";$this->lly"tac /flag";} } $a new…

图片转换成base64格式的优缺点

文章目录 前言什么是base64? 一&#xff0c;优点二&#xff0c;缺点三&#xff0c;工具 前言 什么是base64? Base64&#xff0c;顾名思义&#xff0c;就是包括小写字母a-z、大写字母A-Z、数字0-9、符号"“、”/“一共64个字符的字符集&#xff0c;&#xff08;另加一个…

锂离子电池充电管理芯片应用

基本概述 TP4054是一个完善的单片锂离子电池恒流/恒压线性电源管理芯片。 更值得一提的是&#xff0c;TP4054专门设计适用于USB的供电规格。得益于内部的MOSFET结构&#xff0c;在应用上不需要外部电阻和阻塞二极管。在高能量运行和高外围温度时&#xff0c;热反馈可以控制充…

重磅 | 进一步夯实生态建设,朗思科技与阿里龙蜥完成兼容性认证

近日&#xff0c;北京朗思智能科技有限公司&#xff08;以下简称“朗思科技”&#xff09;自主研发的数字员工产品与OpenAnolis龙蜥社区龙蜥操作系统&#xff08;Anolis OS&#xff09;8完成兼容性认证。测试结果显示&#xff0c;双方产品相互兼容&#xff0c;功能正常&#xf…

vue-router路由(二)

​&#x1f308;个人主页&#xff1a;前端青山 &#x1f525;系列专栏&#xff1a;Vue篇 &#x1f516;人终将被年少不可得之物困其一生 依旧青山,本期给大家带来vue篇专栏内容:vue-router路由(二) 目录 1. Vue-Router 的懒加载如何实现 2. 路由的hash和history模式的区别 1…

打开文件 和 文件系统的文件产生关联

补充1&#xff1a;硬件级别磁盘和内存之间数据交互的基本单位 OS的内存管理 内存的本质是对数据临时存/取&#xff0c;把内存看成很大的缓冲区 物理内存和磁盘交互的单位是4KB&#xff0c;磁盘中未被打开的文件数据块也是4KB&#xff0c;所以磁盘中页帧也是4KB&#xff0c;内存…

JMeter之HTTP压测详解

一、创建线程组 右击-->添加-->Threads(Users)-->线程组 下面对比较重要的几个参数&#xff0c;讲解下&#xff1a; 名称&#xff1a; 就是给你这个线程组起名字。 线程数&#xff1a;指压力测试时候模拟几个用户测试接口。 Ramp-Up&#xff1a;这里指几秒运行完上…

Windows环境VSCode配置OpenCV-项目配置(二)

修改c_cpp_properties.json {"configurations": [{"name": "windows-gcc-x64","includePath": ["${workspaceFolder}/**","D:/mingw64/mingw64/include","D:/openCV_win/build/install/include","…

【linux】htop 命令行工具使用

htop是一个跨平台的交互式流程查看器。 htop允许垂直和水平滚动进程列表&#xff0c;以查看它们的完整命令行和相关信息&#xff0c;如内存和CPU消耗。还显示了系统范围的信息&#xff0c;如负载平均值或交换使用情况。 显示的信息可以通过图形设置进行配置&#xff0c;并且可…