PCB进程初识

目录

一、什么是进程

1.课本概念

2.内核观点

二、进程的描述-PCB

1.什么是PCB

2.PCB的组织方式

3.task_struct是Linux操作系统下的PCB

4.task_struct内容分类

三、进程的查看

四、进程的创建

1.查看子进程id和父进程id

演示实例1:

2.fork初识

演示实例1:

演示实例2:


一、什么是进程

1.课本概念

进程是程序的一个执行实例,是操作系统对程序执行的基本单位

从不同角度,可以有不同的定义:

  • 进程是程序的一次执行过程
  • 进程是一个程序及其数据在处理机上顺序执行时所发生的活动
  • 进程是系统进行资源分配和调度的一个独立单位

2.内核观点

担当分配系统资源(CPU时间、内存)的实体


二、进程的描述-PCB

1.什么是PCB

  • 进程控制块(PCB)是操作系统为了管理和维护进程而设置的一个专门的数据结构。
  • 作用:PCB使一个在多道程序环境下不能独立运行的程序(含数据)成为一个能独立运行的基本单位,或与其他进程并发执行的进程。通过PCB,操作系统可以跟踪和控制每个进程的运行,并在需要时恢复进程的执行。

2.PCB的组织方式

  • 线性表方式:将所有的PCB连续地存放在内存的系统区,适用于系统中进程数目不多的情况
  • 索引表方式:系统按照进程的状态分别建立就绪索引表、阻塞索引表等,提高了查找特定PCB的效率
  • 链接表方式:系统按照进程的状态将进程的PCB组成队列,形成就绪队列、阻塞队列、运行队列等,具有灵活性高的优点,但查找特定PCB的效率较低
  • 数组方式:使用一个固定大小的数组来存储所有的PCB,通过索引来访问和操作PCB,提高了查找PCB的效率,但需要预先分配固定大小的数组空间
  • 树形结构方式:使用树的数据结构来管理PCB,每个PCB都作为一个节点,节点之间通过父子关系连接起来,可以灵活地组织PCB并提供更多的进程管理功能,但增加了复杂性

3.task_struct是Linux操作系统下的PCB

  • task_struct是Linux内核中的一种数据结构,它会被装载到RAM(内存)中并包含着进程信息

4.task_struct内容分类

task_struct结构体内部包含多个元素

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

三、进程的查看

进程信息可以通过/proc系统文件夹查看

这里只做简单介绍,细节内容后续说明

正在执行的进程的信息可以使用ps aux | grep test | grep -v grep指令查看

#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
int main()
{    while(1){printf("1");sleep(1);}return 0;
}


四、进程的创建

1.查看子进程id和父进程id

  • getpid()函数和getppid()函数

演示实例1:

#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
int main()
{printf("pid:%d\n",getpid());printf("ppid:%d\n",getppid());return 0;
}

2.fork初识

fork() 是一个用于创建新进程的系统调用。当调用 fork() 时,它会创建一个与当前进程(称为父进程)几乎完全相同的子进程。新创建的子进程会从 fork() 系统调用的返回点开始执行,并且它拥有父进程的环境、打开的文件描述符、内存空间(但有自己的地址空间副本,采用写时复制机制)等。

演示实例1:

#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
int main()
{pid_t ret = fork();printf("pid:%d  ret:%d\n",getpid(),ret);return 0;
}

  • 这里可以看到原本一行的代码却输出了两行结果,这是为什么?
  • 这是由于fork()函数创建了一个子进程,打印结果第一行是父进程的pid和fork()返回值,第二行是子进程的pid和fork()返回值

演示实例2:

#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
int main()
{pid_t ret = fork();if(ret < 0){perror("fork");return 1;}else if(ret == 0){printf("我是子进程,我的pid是%d\n",getpid());}else{printf("我是父进程,我的pid是%d\n",getpid());}return 0;
}

  • 这里可以看到,根据fork()返回值的不同,会进入到不同的if语句中,从而再次印证fork()函数创建了不同于原来进程的新进程

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

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

相关文章

软件测试学习笔记丨Mitmproxy使用

本文转自测试人社区&#xff0c;原文链接&#xff1a;https://ceshiren.com/t/topic/32334 一、简介 Mitmproxy是一款开源、免费的代理工具&#xff0c;支持Mac、Windows、Linux。相比其他代理工具&#xff0c;可以通过Python和Mitmproxy工具本身的插件机制&#xff0c;实现通…

npm运行时出现npm ERR! builtins is not a function报错

项目场景&#xff1a; 项目运行时什么都没动都没改突然运行不起来了&#xff0c;报错 TypeError: builtins is not a function 代码什么都没动&#xff0c;不是代码问题&#xff0c;排查后只有可能是node和npm的问题&#xff0c;所以卸载掉node重装重启 解决方案&#xff1a; …

Hierarchical Cross-Modal Agent for Robotics Vision-and-Language Navigation

题目&#xff1a;用于视觉语言导航的层次化跨模态智能体 摘要 1. 问题背景和现有方法 VLN任务&#xff1a;这是一种复杂的任务&#xff0c;要求智能体基于视觉输入和自然语言指令进行导航。 现有方法的局限性&#xff1a;之前的工作大多将这个问题表示为离散的导航图&#x…

重要的事情说两遍!Prompt「复读机」,显著提高LLM推理能力

【导读】 尽管大模型能力非凡&#xff0c;但干细活的时候还是比不上人类。为了提高LLM的理解和推理能力&#xff0c;Prompt「复读机」诞生了。 众所周知&#xff0c;人类的本质是复读机。 我们遵循复读机的自我修养&#xff1a;敲黑板&#xff0c;划重点&#xff0c;重要的事…

nacos多数据源插件介绍以及使用

概述 在微服务架构中&#xff0c;服务配置的集中管理和动态调整是至关重要的。Nacos 提供了配置管理和服务发现的功能&#xff0c;其中配置管理支持动态数据源的切换&#xff0c;增强了其在复杂环境中的适用性。默认情况下&#xff0c;Nacos 支持 MySQL 和Derby&#xff0c;但…

如何在百度地图上添加自己店铺的位置?

随着互联网的快速发展&#xff0c;如今许多事都可以通过网络去解决&#xff0c;例如线上支付、线上购物、线上订餐等&#xff0c;包括日常出行&#xff0c;人们也可以依靠地图软件去规划路线&#xff0c;然后导航至目的地。其中&#xff0c;百度地图作为国内领先的地图导航平台…

组态图卷起了3D化,这是趋势潮流还是盲目跟风呢?

在当今科技飞速发展的时代&#xff0c;组态图领域也迎来了新的变革 ——3D 化。这一现象引发了人们的广泛关注和思考&#xff1a;这究竟是一种顺应时代的趋势潮流&#xff0c;还是盲目跟风之举呢&#xff1f; 从趋势潮流的角度来看&#xff0c;组态图的 3D 化有着诸多优势。首…

PointNet++网络详解

数据集转换 数据集转换的意义在于将原本的 txt 点云文件转换为更方便运算的npy点云文件&#xff0c;同时&#xff0c;将原本的xyzrgb这 6 个维度转换为xyzrgbc&#xff0c;最后一个c维度代表该点云所属的类别。 for anno_path in anno_paths:print(anno_path)try:elements a…

软件设计之SSM(9)

软件设计之SSM(9) 路线图推荐&#xff1a; 【Java学习路线-极速版】【Java架构师技术图谱】 尚硅谷新版SSM框架全套视频教程&#xff0c;Spring6SpringBoot3最新SSM企业级开发 资料可以去尚硅谷官网免费领取 学习内容&#xff1a; SpringMVC 概念及核心组件MVC初始化类数据…

POST注入通过sqli-labs靶场less-11

POST注入原理 原理介绍 进入第十一关靶场&#xff0c;我们发现是一个登录窗口&#xff0c;随意提交数据&#xff0c;显示 在url地址进行get提交&#xff0c;发现一直是登录窗口&#xff0c;页面无其他变化&#xff0c;想到post提交注入。 通关原理 打开靶场源码文件。 查看…

SEO(搜索引擎优化)指南

SEO&#xff08;Search Engine Optimization&#xff09;是通过优化网站内容、结构和外部链接&#xff0c;提升网页在搜索引擎结果中的排名&#xff0c;从而增加网站流量的过程。SEO 涉及多个层面&#xff0c;包括技术 SEO、内容优化、外部链接建设等。以下是 SEO 的核心优化策…

FineReport打开报错“配置数据库出错“怎么解决?

配置数据库被锁住&#xff0c;是否重置?将在embed文件夹生成备份并重置 我直接用管理员身份证打开就完美解决了!

AD9361,数据接口

CMOS LVDS Xilinx原语IBUFDS、OBUFDS IBUFDS、和OBUFDS都是差分信号缓冲器&#xff0c;用于不同电平接口之间的缓冲和转换。IBUFDS 用于差分输入&#xff0c;OBUFDS用于差分输出。 IBUFDS https://docs.amd.com/r/en-US/ug953-vivado-7series-libraries/IBUFDS // IBUFDS …

启明智显工业级HMI芯片Model4功耗特性分享

Model4工业级MPU是国产自主面向工业应用的RISC-V架构的应用级芯片&#xff0c;内置玄铁64bit RISC-V CPU C906&#xff0c;主频高达600MHz&#xff0c;算力约1380DMIPS。支持RTOS、linux系统&#xff0c;支持LVGL工具开发UI&#xff1b; Model4系列工业级MPU具有极强的屏显、多…

VL53L0X 测距传感器使用记录

VL53L0X 测距传感器测试使用说明...... by 矜辰所致前言 最近代理商告知以前使用的测距传感器 VL6180 公司已经宣告停产了&#xff0c;那么咱就得找一款替代品作为测距产品的探头了&#xff0c;推荐了 VL53L4 和 VL53L0X 系列&#xff0c;考虑到功耗问题&#xff0c;决定选用低…

【数据结构 | PTA】栈

文章目录 7-1 汉诺塔的非递归实现7-2 出栈序列的合法性**7-3 简单计算器**7-4 盲盒包装流水线 7-1 汉诺塔的非递归实现 借助堆栈以非递归&#xff08;循环&#xff09;方式求解汉诺塔的问题&#xff08;n, a, b, c&#xff09;&#xff0c;即将N个盘子从起始柱&#xff08;标记…

STM32-TIM输入捕获

一、概述 IC&#xff08;Input Capture&#xff09;输入捕获 输入捕获模式下&#xff0c;当通道输入引脚出现指定电平跳变&#xff08;上升沿或下降沿&#xff09;时&#xff0c;当前CNT的值将被锁存到CCR中&#xff0c;可用于测量PWM波形的频率、占空比、脉冲间隔、电平持续…

提示工程、微调和 RAG

自众多大型语言模型&#xff08;LLM&#xff09;和高级对话模型发布以来&#xff0c;人们已经运用了各种技术来从这些 AI 系统中提取所需的输出。其中一些方法会改变模型的行为来更好地贴近我们的期望&#xff0c;而另一些方法则侧重于增强我们查询 LLM 的方式&#xff0c;以提…

【C语言】猜数字小游戏

&#x1f602;个人主页: 起名字真南 &#x1f923;个人专栏:【数据结构初阶】 【C语言】 【C】 目录 1 随机数的生成1.1 rand1.2 srand1.3 time1.4 设置随机数范围 2 猜数字游戏实现 前言&#xff1a;我们学习完前面的循环以后可以写一个猜数字小游戏 1 随机数的生成 想要完成…

八大排序--07归并排序

假设数组 arr[] {5,7,4,2,0,1,6},请通过插入排序的方式&#xff0c;实现从小到大排列&#xff1a; 方法&#xff1a;先拆分&#xff0c;再合并&#xff0c;并在合并过程中结束临时空间进行排序&#xff1b; 拆分&#xff1a;从待排序列中间位置拆开&#xff0c;数据分成左右两…