Linux系统调用进程标识符

news2024/11/14 16:18:41

目录

一、冯诺依曼体系结构

 二、操作系统

2.1什么是操作系统?

2.2为什么需要操作系统?

2.3怎么管理?

2.4总结

2.5系统调用

三、进程的理解

3.1进程的基本概念

3.2对进程的描述

3.3对进程的组织

3.4task_struct内容的分类

 3.5Linux下查看进程

四、进程的标识符

4.1通过系统调用获取进程标示符

4.2创建进程的方式

4.3fork()理解

4.4bash父进程的理解


一、冯诺依曼体系结构

  • 冯诺依曼体系结构规定,计算机是由多个独立的硬件单元用总线连接起来的,包括输入单元、输出单元、存储器(内存)、中央处理器(运算器、控制器) 
  • 由于存储是分级的,速度越快离CPU越近,但容量越小造价越高,由于数据从外设到CPU的运行速度差别太大,这就要求了CPU访问任何外设数据都必须通过内存
  • 数据从外设加载到内存中,再放到CPU中运行,运行结果由CPU放到内存中,再由内存刷新到外设,这样可以缓解CPU访问外设数据的代差
  • 任何设备都只能和内存打交道
  • 冯诺依曼体系还规定一个程序要运行起来必须加载到内存中运行
  • 采用冯诺依曼体系结构的好处是,可以用较小的造价打造一台性价比高的计算机

 二、操作系统

2.1什么是操作系统?

操作系统是一款做软硬件资源管理的“软件”

2.2为什么需要操作系统?

操作系统通过对下管理好软硬件资源(手段),对上提供一个良好(安全、稳定、高效)的运行环境

2.3怎么管理?

“先描述再组织”

  • 操作系统对数据的管理,遵循六个字“先描述再组织”
  • 管理的本质是对数据进行管理
  • 操作系统通过驱动层序来获得对应底层的软硬件资源
  • 如何描述?定义一个结构体类型,用来描述该数据的全部属性信息,被管理的每一份数据都会填充对应的属性值,创建出结构体对象
  • 如何组织?再将每一个结构体对象用链表的形式组织起来,对数据的管理就变成了对链表的增删查改
  • 在操作系统中,一定存在着大量的数据结构,操作系统对任何对象的管理,实际上就转化为了对某种数据结构的增删查改

2.4总结

计算机管理对象
  1. 描述起来,用struct结构体
  2. 组织起来,用链表或其他更高效的数据结构

2.5系统调用

  • 操作系统中存在着大量的数据,操作系统为了保证数据的安全,又为了能够给用户提供获取数据的服务,操作系统以接口的形式为用户提供调用的入口,让用户能够获取操作系统内部的数据
  • 该接口是操作系统内部用c语言实现的函数调用,也叫做系统调用,任何访问操作系统的行为,都只能通过系统调用来完成
  • 库函数和系统调用是上下层调用和被调用的关系,可以通过对系统调用接口的封装来形成库,有了库,就可以让上层用户或者开发者进行二次开发

三、进程的理解

3.1进程的基本概念

  • 粗浅理解:一个被加载到内存中的程序,或一个正在运行的程序,叫作进程(任务)
  • Linux内核中,进程=内核pcb数据结构对象+代码和数据(可执行文件)

3.2对进程的描述

  • 在操作系统中,不仅仅只有一个进程在运行,可能有多个进程在运行,这就需要操作系统对进程进行管理
  • 我们上面已经提到了,在操作系统中对任何对象进行管理,都要遵循“先描述,再组织”,操作系统对进程的管理也是如此
  • 操作系统对进程的管理,就变成了对链表的增删查改
  • 在操作系统中,进程在被加载到内存中形成真正的进程前,要先创建描述进程属性的结构体,进程的全部属性信息都被放在一个叫做进程控制块的数据结构中(pcb),每一个进程都会有对象的pcb数据结构对象
  • Linux操作系统下的pcb是struct task_struct
  • Linux下用task_struct结构体来描述进程,task_struct是Linux下的一种结构体,他会被装载到内存中并且包含着进程的全部信息(进程属性的集合)

3.3对进程的组织

  • 采用某种数据结构对每一个pcb对象进行组织
  • Linux下采用双向链表来组织进程task_struct对象

3.4task_struct内容的分类

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

 3.5Linux下查看进程

  • 使用top或者ps用户级工具来获取
  • 其中ps(Process Status)查看的是进程信息的一个快照,显示的我们执行ps这个命令时进程的信息,top显示的是进程的动态信息,使用这个命令会看到进程信息的动态变化。

如:ps -ajx | head -1 && ps -ajx | grep myprocess | grep -v grep

head -1 来显示进程的属性标头,用grep来过滤我们所要查看到进程信息

  •  进程的信息可以通过 ls /proc系统文件来查看

如:查看我们当前父进程的信息,可以查看 ls  /proc/17558 -al

exe:指向当前进程的可执行文件的完整路径

cwd:当前进程所处在的工作目录(当进程被运行起来时就会保存)

四、进程的标识符

4.1通过系统调用获取进程标示符

  • 获取进程ID( getpid() )

  • 获取父进程ID( getppid() ) 

4.2创建进程的方式

  • 运行我们的程序/指令 -- 指令级别

  • fork()创建子进程 -- 代码级别

  1. fork()返回值:创建子进程成功,给子进程返回0,给父进程返回子进程的pid;创建失败返回-1
  2. 给父进程返回子进程的pid是为了区分不同的子进程,方便对子进程进行管理和控制;只需要给子进程返回0来标识子进程创建成功即可

4.3fork()理解

  • 问题1:为什么需要返回两个不同的返回值?返回不同的返回值,是为了区分不同的执行流,再通过if语句可以让父子进程执行不同的代码块
  • 问题2:一个函数时如何做到返回两次的?回答这个问题前,要先明白fork()内部具体做了什么?子进程的创建是在fork()内执行的,每一个进程的创建都要在操作系统中有一个对应的pcb数据结构对象,由fork()函数创建出来的子进程也不例外。子进程的pcb数据结构对象被创建出来了,但是子进程没有自己的代码和数据,所以子进程必须和父进程共享一份代码!!但是由于每个进程具有独立性,相互之间不得干扰,所以子进程还必须通过写时拷贝获得自己的一份私有数据
  • 这样就可以回答第二个问题了。fork()由于在return前子进程已经被创建出来了,return这条执行语句属于父子进程共享的,父进程会执行一次,子进程也会执行一次,因而fork()就返回了两次
  • 问题3:一个pid_t类型的变量怎么会有两个不同的值?前面已经说到了,父子进程虽然代码共享,但是数据是不共享的!!return的时候其实就是在向返回值写入数据!!由于子进程的数据是写时拷贝产生的,并不和父进程共享一份,所以一个变量会有两个不同的值!
  • 问题4:总结fork()的实现?fork()会按照父进程创建一个子进程,子进程和父进程在代码上是共享的,在数据上子进程通过写时拷贝和和父进程各自拥有一份私有数据。由于代码共享,就会导致fork()的return被执行两次,因而就会有两个返回值;return的时候实际上就是在向返回值进行数据的写入,由于数据的写时拷贝,就可以实现子进程和父进程的返回值是不相同的,因而一个pid_t类型的变量就会有两个不同的值

  • fork()之后的父进程和子进程,谁先运行是由调度器决定的,不同的调度算法运行顺序不一样

4.4bash父进程的理解

  • 所有在命令行提示符后输入的指令都是在bash(父进程)上创建的子进程

  • 有多少个终端就会有多少个不同的bash pid

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

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

相关文章

2024年【危险化学品生产单位安全生产管理人员】考试资料及危险化学品生产单位安全生产管理人员考试试卷

题库来源:安全生产模拟考试一点通公众号小程序 2024年危险化学品生产单位安全生产管理人员考试资料为正在备考危险化学品生产单位安全生产管理人员操作证的学员准备的理论考试专题,每个月更新的危险化学品生产单位安全生产管理人员考试试卷祝您顺利通过…

5大公有公有云数据库厂商发展太猛!作为DBA的我,有点焦虑!

未来数据库的战场主要是公有云,且公有云的比重确实也在逐年上升,那么是不是这么回事呢?我们来分别看下几个云厂商巨头的公有云营收和增速! 全球公有云王者AWS 2022年半年报: 2023年半年报: 2024年半年报&a…

Games101笔记-线性代数(一)

1、图形学和计算机视觉的区别 计算机视觉:一切需要猜测的都可以归类到计算机视觉 图形学:光栅化、几何、光追、动画/模拟 2、向量 向量表示2个东西:方向长度,向量与起始位置无关 向量加法:得到1个三角形或者平行四边…

分享一波中高级测试面试题(偏Java)

dubbo协议介绍下 Dubbo是一款高性能、轻量级的开源RPC框架,支持多种协议,其中之一就是Dubbo协议。 Dubbo协议是一种基于TCP的高性能传输协议,它是Dubbo框架默认的传输协议。Dubbo协议采用了一种自定义的数据传输格式,采用简单的…

java之认识异常

在 Java 中,异常(Exception)用于处理程序运行时出现的错误或异常情况。Java 的异常处理机制基于 try, catch, finally 和 throw 关键字。 1.异常的分类: 1.1:检查型异常(CheckedException): 定义:程序在…

ChatGPT实战100例 - (21) 搞定汉字新解,o1-mini 在李继刚老师这扳回一局

文章目录 搞定汉字新解,o1-mini 在李继刚老师这扳回一局翻车开车飙车出图福利在这福利+1搞定汉字新解,o1-mini 在李继刚老师这扳回一局 昨天朋友圈刷爆了 李继刚老师 的 汉字新解,废话不说,上 prompt ;; 作者: 李继刚 ;; 版本: 0.1 ;; 模型: Claude Sonnet ;; 用途: 将一…

【2025】基于PHP职业病健康管理系统(源码+论文+部署讲解等)

博主介绍: ✌我是阿龙,一名专注于Java技术领域的程序员,全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师,我在计算机毕业设计开发方面积累了丰富的经验。同时,我也是掘金、华为云、阿里云、InfoQ等平台…

参数传了报错没传参数识别不到参数传丢

【记一次参数传值了但报错未传值的问题解决历程】 问题描述:同一个接口,用测试类调可以成功,用postman调用一直报错少参数,后又尝试了用idea自带的http调用,同样报错参数未传值。 如图,传值了报错未传值。…

怎样还原空白试卷?2024教你快速还原空白试卷的软件

怎样还原空白试卷?2024教你快速还原空白试卷的软件 还原空白试卷是一项常见的需求,尤其是在教学、考试准备或练习时需要重新使用原有试卷时。通过使用AI技术或专业的图片编辑软件,能够快速去除试卷上的答案或标记,恢复原始空白状…

卷积神经网络(二)CIFAR100类别分类

一.数据介绍 总共一百个类,每个类有600个图像。每类500个训练图像,100个测试图像。没填图像都带有一个"精细"标签(它所属的类)核一个粗糙标签(它所属的超类) 二.API使用 用于构建CNN模型的API …

构建全景企业画像,深度评估企业风险,保障商业利益!

战略投资、招商引资、融资贷款、市场合作等商业行为,都需要对目标企业进行尽调,评估企业的风险。依据评估结果,投资者可以识别并量化潜在投资风险,保障投资的安全性和收益性;招商工作可以甄别优质企业,确保引进高质量、…

Android 内置应用裁剪

文章目录 查询目标 APK 的 Android.mk(或 Android.bp)文件apk裁剪方式1.注释或删除.mk/.bp文件2.将 APK 名称加入“OVERRIDES”配置项中3.自定义“PRODUCT_PACKAGES_REMOVE”配置项 查询目标 APK 的 Android.mk(或 Android.bp)文件…

【YashanDB知识库】执行sql语句时报YAS-04401 data type - expected, but BLOB got异常

本文转载自YashanDB官方网站,具体链接为:执行sql语句时报YAS-04401 data type - expected, but BLOB got异常 问题现象 某客户的.net小程序在通过.net驱动执行业务时,报YAS-04401 data type - expected, but BLOB got异常: 问题…

2024/9/13 数学20题

根的个数问题: 数列:

OPENAIGC开发者大赛企业组银奖 | Gambit-AI智能合同审核助手

在第二届拯救者杯OPENAIGC开发者大赛中,涌现出一批技术突出、创意卓越的作品。为了让这些优秀项目被更多人看到,我们特意开设了优秀作品报道专栏,旨在展示其独特之处和开发者的精彩故事。 无论您是技术专家还是爱好者,希望能带给您…

SSO单点登录简易认证流程

流程说明 导入依赖 <dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.8.16</version></dependency>模拟代码 客户端 import cn.hutool.core.codec.Base64; import cn.hutool.crypto…

已开源!无限场景生成和高效数据迁移:3D金字塔扩散模型斩获ECCV24 Oral

作者主页&#xff1a; https://yuheng.ink/ 论文标题&#xff1a; Pyramid Diffusion for Fine 3D Large Scene Generation 导读&#xff1a; 本文通过设计一种新颖的金字塔扩散模型&#xff0c;为三维室外场景生成提供了一种从粗到细的策略。本文对金字塔扩散模型进行了大量实…

云平台虚机卡顿问题分析

电信云中宿主机分配的虚机运行时出现卡顿问题,可能由多种因素导致。为了准确分析并定位原因,可以从以下几个方面进行排查: 1. 资源使用情况 检查CPU、内存和磁盘使用情况: 使用工具检查虚拟机的CPU、内存和磁盘使用情况,确认是否存在资源瓶颈。如果发现资源使用率较高,特…

4052A/4052B/4052C/4052D/4052E/4052F/4052G /4052H信号/频谱分析仪

4052A/4052B/4052C/4052D/4052E/4052F/4052G /4052H信号/频谱分析仪 苏州新利通 Ceyear 4052具备出色的测试动态范围、相位噪声、幅度精度和测试速度&#xff0c;具备频谱分析、I/Q分析、实时频谱分析、瞬态分析、矢量信号分析、脉冲分析、音频分析等丰富的测试功能。 Ceyear…

C++ | Leetcode C++题解之第400题第N位数字

题目&#xff1a; 题解&#xff1a; class Solution { public:int findNthDigit(int n) {int d 1, count 9;while (n > (long) d * count) {n - d * count;d;count * 10;}int index n - 1;int start (int) pow(10, d - 1);int num start index / d;int digitIndex i…