Linux探秘坊-------7.进程概念

1.进程概念

1.冯诺依曼体系结构

在这里插入图片描述

  • 输⼊单元:包括键盘,⿏标,扫描仪,写板等
  • 中央处理器(CPU):含有运算器和控制器等
  • 输出单元:显⽰器,打印机等
  • 这⾥的存储器指的是内存

⼀句话,所有设备都 只能直接和内存打交道。!!!

对冯诺依曼的理解,不能停留在概念上,要深⼊到对软件数据流理解上,请解释,从你登录上qq开始和某位朋友聊天开始,数据的流动过程

解释图如下:

在这里插入图片描述

2.操作系统

任何计算机系统都包含⼀个基本的程序集合,称为操作系统(OS)。笼统的理解,操作系统包括:

  • 内核(进程管理,内存管理,⽂件管理,驱动管理)
  • 其他程序(例如函数库,shell程序等等)

在这里插入图片描述

1. 设计OS的⽬的

• 对下,与硬件交互,管理所有的软硬件资源
• 对上,为⽤⼾程序(应⽤程序)提供⼀个良好的执⾏环境

在这里插入图片描述

2. 核心功能

在整个计算机软硬件架构中,操作系统的定位是:⼀款纯正的“搞管理”的软件

3. 系统调⽤

在这里插入图片描述

  • 在开发⻆度,操作系统对外会表现为⼀个整体,但是会暴露⾃⼰的部分接⼝,供上层开发使⽤,
    这部分由操作系统提供的接⼝,叫做系统调⽤
  • 系统调⽤在使⽤上,功能⽐较基础,对⽤⼾的要求相对也⽐较⾼,所以,有⼼的开发者可以对部
    分系统调⽤进⾏适度封装,从⽽形成库
    ,有了库,就很有利于更上层⽤⼾或者开发者进⾏⼆次开
    发。

3.进程

进程概念理解:
在这里插入图片描述
总结:
在这里插入图片描述

其中内核数据结构对象有特定的名字————PCB

在这里插入图片描述

在这里插入图片描述
课本上称之为PCB(processcontrolblock),Linux操作系统下的PCB是:task_struct

1.所有指令,工具,自己的程序,运行起来都是进程

ls,pwd…只要执行都是进程

4.进程调用

1.getpid()------函数

为了演示,先创建一个procss.c,并用vim写入以下程序:

#include<stdio.h>2 #include<unistd.h>  //sleep需要包含的头文件3 #include<sys/types.h>   //getpid的头文件4 int main()5 {6   while(1)7   {8     sleep(1);9     printf("我是一个进程,我的pid:%d\n",getpid());10   }                                                                                                                                            11 12   return 0;13 }
  • 编译并运行可以发现,正在运行的程序也是一个进程,也会有他的id:

在这里插入图片描述

  • 可以看到pid是541。
2. ps axj--------指令

根目录 下使用ps axj 可以展示所有进程,那如果我只想要我刚刚运行的a.out程序的进程咋办呢?

  • 只需在 “ps axj” 后加上“ | grep + 程序文件 ”:
  • 也可以再加上 ps axj | head -1来展示各个信息的名称,-----------注意两个指令要用“;”断开

在这里插入图片描述

  • 可以看到这里有两行,因为grep自己也算一个进程
3. kill -9 + 进程id-------杀掉进程

在这里插入图片描述
在这里插入图片描述

  • 当然可以直接使用ctrl + c直接杀掉进程
4. ls /proc----------要在根目录下使用

在这里插入图片描述
也可以用来查看进程

  • 这些蓝色的文件都是目录,我们只需要找到我们需要的文件的id文件就行,刚刚为了演示杀掉了一次进程,现在id为907
  • 如果程序退出,那么它就不再是一个进程了,就不会有id了

在这里插入图片描述

  • cwd - 记录进程路径
  • exe 为可执行程序

5.进程创建

所有进程都由它的父进程创建

1.获取父进程-------------getppid()
#include<stdio.h>2 #include<unistd.h>3 #include<sys/types.h>4 int main()5 {6   while(1)7   {8     sleep(1);9     printf("我是一个进程,我的pid:%d 我的父进程pid:%d \n",getpid(),getppid());10   }11 12   return 0;13 }  

在这里插入图片描述

  • 可以看到每次运行程序我的pid都发生变化,但ppid却不变。
2.创建子进程-------fork()------无参数,无返回值

在这里插入图片描述

在这里插入图片描述

  • 默认创建的子进程默认使用父进程的代码和数据,但PCB和父进程不一致

在这里插入图片描述

fork()有返回值:

  • (1).子进程的pid会返回给父进程,(2).0会被返回给子进程-----------所以fork有两个返回值!!!!
  • 如果调用失败,-1会被返回给父进程

在这里插入图片描述
在这里插入图片描述
运行结果类似如上:

提出问题:
在这里插入图片描述

  • 1.因为孩子只有一个父亲,而父亲可以有多个孩子,所以父进程需要子进程id来区分不同的子进程子进程一定知道父进程是什么,所以直接给0就行
  • 2.在这里插入图片描述
  • 因为在fork函数里在return前子进程已经创建,所以父和子进程都走了一遍return,所以会返回两次
小结论:进程具有独立性

在这里插入图片描述

  • 以上代码中子进程会把gval修改,但父进程中gval不会改变
  • 在这里插入图片描述

在这里插入图片描述
可以理解为,如果两个进程共用同一份数据,但若其中一个修改了数据,那么内存会重新开辟一个数据给那个进程修改,促使两个进程独立

在这里插入图片描述

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

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

相关文章

python专栏导读

由于本人非python工程师&#xff0c;是在自学python&#xff0c;所以本专栏的内容会显得很基础&#xff0c;甚至有些内容在python工程师看来实在太过于简单&#xff0c;在此清楚嘲笑&#xff0c;因为毕竟每个人都是从不懂、从基础开始的。 本篇作为导读和目录形式存在&#xf…

docker 部署nginx,nginx 504

遇到问题 原因&#xff1a; 因为用的docker 部署nginx, docker 应用与服务之间的端口未开放&#xff0c;导致访问不到服务。

每日一题-斐波那契数列和跳台阶

斐波那契数列和跳台阶 斐波那契数列题目描述斐波那契数列的定义&#xff1a;数据范围&#xff1a;题目要求&#xff1a; 输入描述&#xff1a;输出描述&#xff1a;示例示例 1&#xff1a;示例 2&#xff1a;示例 3&#xff1a; 解法1. 递归解法代码解释&#xff1a; 2. 动态规…

MySQL 联合索引的最左匹配原则

环境&#xff1a;MySQL 版本&#xff1a;8.0.27 执行计划基础知识 possible_keys&#xff1a;可能用到的索引 key&#xff1a;实际用到的索引 type: ref&#xff1a;当通过普通的二级索引列与常量进行等值匹配的方式 询某个表时const&#xff1a;当我们根据主键或者唯一得…

算法07-滑动窗⼝算法

滑动窗口算法&#xff08;Sliding Window&#xff09; 一、详细讲解 A、一句话总结 滑动窗口算法是一种通过维护一个动态窗口来解决问题的技巧&#xff0c;窗口在数据上“滑动”&#xff0c;逐步找到最优解。 B、核心思想 想象你在看一列火车&#xff0c;火车窗口只能看到一…

docker安装mongo,导入、导出数据

1、docker安装mongo docker pull mongo docker run -d -p 27017:27017 --name mongodb mongodocker update mongodb --restartalways ## 开机自启动-d&#xff1a;表示以后台模式运行容器。 -p 27017:27017&#xff1a;将容器内部的 MongoDB 默认端口 27017 映射到宿主机的 27…

GB300加速推进,RTX 50显卡芯片量产延后,NVIDIA面临新的挑战与机遇

野村分析师Anne Lee在2月12日的报告中表示&#xff0c;2025年全球服务器营收将同比增长46%&#xff0c;2026年增长22%。其中&#xff0c;AI服务器营收预计在2025年和2026年分别增长75%和31%。这些预测与近期美国主要云服务提供商(CSP)上调的资本支出指引基本一致。 GB300加速推…

[NOIP2011 普及组] 统计单词数 题解

&#xff08;一&#xff09;读懂题目 关键词&#xff1a;查找单词 方法&#xff1a;枚举&#xff08;二&#xff09;分析算法时间复杂度和空间复杂度 算法&#xff1a;枚举 时间复杂度&#xff1a;O(n) 空间复杂度&#xff1a;O(n)&#xff08;三&#xff09;代码实现 代码如…

深入解析 ipoib_intf_init 函数中的 netdev_ops 设置逻辑

在 Linux 内核的网络设备驱动开发中,net_device_ops 是一个至关重要的结构体,它定义了网络设备的各种操作函数指针,决定了网络设备的行为和功能。本文将深入解析 ipoib_intf_init 函数中关于 dev->netdev_ops 和 priv->rn_ops 的设置逻辑,帮助读者理解其设计动机和实…

leetcode_1760 袋子里最少数目的球

1. 题意 给定一个数组&#xff0c;和一个最多次操作次数。每次操作可以将数组中的一个数 x x x分成两个数 t x − t t\quad x-t tx−t。问 m a x O p e r a t i o n C n t maxOperationCnt maxOperationCnt次操作后&#xff0c;数组中最大的数最小的值是多少。 2. 题解 这个…

TDengine 性能测试工具 taosBenchmark

简介工具获取运行 无参数模式命令行模式配置文件模式 命令行参数配置文件参数 通用配置参数写入配置参数 数据库相关超级表相关标签列与数据列写入行为相关 查询配置参数 执行指定查询语句查询超级表 订阅配置参数数据类型对照表 配置文件示例 写入 JSON 示例查询 JSON 示例订阅…

J6 X8B/X3C切换HDR各帧图像

1、OV手册上的切换命令 寄存器为Ox5074 各帧切换&#xff1a; 2、地平线control tool实现切换命令 默认HDR模式出图&#xff1a; HCG出图&#xff1a; LCG出图 SPD出图 VS出图

游戏引擎学习第101天

回顾当前情况 昨天的进度基本上完成了所有内容&#xff0c;但我们还没有进行调试。虽然我们在运行时做的事情大致上是对的&#xff0c;但还是存在一些可能或者确定的bug。正如昨天最后提到的&#xff0c;既然现在时间晚了&#xff0c;就不太适合开始调试&#xff0c;所以今天我…

【故障处理】- RMAN-06593: platform name ‘Linux x86 64-bitElapsed: 00:00:00.00‘

【故障处理】- RMAN-06593: platform name Linux x86 64-bitElapsed: 00:00:00.00 一、概述二、报错原因三、解决方法 一、概述 使用xtts迁移&#xff0c;在目标端进行恢复时&#xff0c;遇到RMAN-06593: platform name Linux x86 64-bitElapsed: 00:00:00.00’报错。 二、报错…

多模态本地部署和ollama部署Llama-Vision实现视觉问答

文章目录 一、模型介绍二、预期用途1. 视觉问答(VQA)与视觉推理2. 文档视觉问答(DocVQA)3. 图像字幕4. 图像-文本检索5. 视觉接地 三、本地部署1. 下载模型2. 模型大小3. 运行代码 四、ollama部署1. 安装ollama2. 安装 Llama 3.2 Vision 模型3. 运行 Llama 3.2-Vision 五、效果…

哪吒闹海!SCI算法+分解组合+四模型原创对比首发!SGMD-FATA-Transformer-LSTM多变量时序预测

哪吒闹海&#xff01;SCI算法分解组合四模型原创对比首发&#xff01;SGMD-FATA-Transformer-LSTM多变量时序预测 目录 哪吒闹海&#xff01;SCI算法分解组合四模型原创对比首发&#xff01;SGMD-FATA-Transformer-LSTM多变量时序预测效果一览基本介绍程序设计参考资料 效果一览…

MySQL调用存储过程和存储函数

【图书推荐】《MySQL 9从入门到性能优化&#xff08;视频教学版&#xff09;》-CSDN博客 《MySQL 9从入门到性能优化&#xff08;视频教学版&#xff09;&#xff08;数据库技术丛书&#xff09;》(王英英)【摘要 书评 试读】- 京东图书 (jd.com) MySQL9数据库技术_夏天又到了…

TCP粘包/拆包

一、什么是 TCP 粘包/拆包&#xff1f;发生的原因&#xff1f;怎么解决&#xff1f; TCP粘包&#xff1a;指在进行TCP数据传输时&#xff0c;多个小的数据包被合并成一个大的数据包进行传输的现象。 TCP拆包&#xff1a;指一个大的数据包被拆分成多个小的数据包进行传输的现象…

网络防御高级-第8章及之前综合作业

标准版 接口ip配置 r2 [r2]interface GigabitEthernet 0/0/0 [r2-GigabitEthernet0/0/0]ip address 13.0.0.3 24 [r2-GigabitEthernet0/0/0]interface GigabitEthernet 0/0/1 [r2-GigabitEthernet0/0/1]ip address 100.1.1.254 24 [r2-GigabitEthernet0/0/1]interface Gigab…

常见的排序算法:插入排序、选择排序、冒泡排序、快速排序

1、插入排序 步骤&#xff1a; 1.从第一个元素开始&#xff0c;该元素可以认为已经被排序 2.取下一个元素tem&#xff0c;从已排序的元素序列从后往前扫描 3.如果该元素大于tem&#xff0c;则将该元素移到下一位 4.重复步骤3&#xff0c;直到找到已排序元素中小于等于tem的元素…