进程概念(进程第1篇)【Linux复习篇】

目录

1、冯诺依曼体系结构怎么画?中央处理器是什么?存储器是什么?每个部分有什么作用?

2、什么是操作系统? 

3、什么叫进程?操作系统如何管理进程的?

4、怎么查看进程?

5、C语言中在当前目录下创建文件怎么做到的?

6、在代码层面,如何获取自己的pid和ppid?bash进程是什么?

7、fork函数有什么用?怎么用?怎么理解两个返回值?

 8、什么是写时拷贝?


1、冯诺依曼体系结构怎么画?中央处理器是什么?存储器是什么?每个部分有什么作用?

存储器是指我们平时说的内存;

输入设备有鼠标、键盘、麦克风、磁盘、网卡、摄像头等;

输出设备有显示器,播放器硬件,磁盘、网卡等;

运算器:对我们的数据进行计算任务(算术运算、逻辑运算);

控制器:对计算机硬件流程进行控制。

中央处理器:由运算器、控制器组成(其实还有很多寄存器),也叫CPU。

五大单元:

各个单元都是独立的个体,需要用“线”连接起来,总线:

1、系统总线(CPU和内存交互的线)

2、IO总线(内存和外设交互的线)

CPU不和外设直接打交道,为什么?

外设读写效率太低。        

2、什么是操作系统? 

操作系统是一款进行管理软件和硬件的的软件。

为什么要有OS:通过管理好底层软硬件资源,为用户提供一个良好的执行环境。

如何理解系统调用接口:系统为了保证自己的数据安全,所有访问OS的行为,都只能通过系统调用来完成,系统调用就是操作系统给用户提供的操作自己的函数。

硬件->驱动程序->操作系统->系统调用接口->用户操作接口(如C语言的printf)->用户

3、什么叫进程?操作系统如何管理进程的?

一个加载到内存正在运行的程序,就叫进程,也叫任务。

一个进程在加载到内存,形成真正的进程前,要先创建一个描述进程属性的结构体对象PCB(Process Control Block进程控制块)对进程的管理,就是对描述进程的结构体对象PCB做管理,具体怎么管理,就是通过特定的数据结构(如Linux中是用双链表)将所有进程PCB组织起来。

管理进程:先描述,再组织!

进程 = 内核PCB结构体对象+你的代码和数据 

Linux中的PCB叫什么?

task_struct。

tack_struct中有什么常见字段?

标示符:描述本进程的唯一标示符,用来区别其他进程。

状态:任务状态,退出代码,退出信号等。
优先级:相对于其他进程的优先级。

程序计数器:程序中即将被执行的下一条指令的地址。
内存指针:包括程序代码和进程相关数据的指针,还有和其他进程共享的内存块的指针

上下文数据:进程执行时处理器的寄存器中的数据

其他信息。

4、怎么查看进程?

方法一:

ps axj :这条指令可以显示系统中所有进程的详细信息,并以通用格式展示。

`ps`命令是用于显示当前系统中的进程信息,`a`表示显示所有用户的进程,`x`表示显示没有控制终端的进程,`j`表示以通用格式显示进程详细信息。

如果只想看一个特定进程的信息ps axj | grep process_name

`|`是管道符号,用于将前一个命令的输出传递给后一个命令。  `grep process_name`命令是用来在前一个命令的输出中查找包含"process_name"关键字的行。

如果想加上行头,可以这样:

ps axj | head -1 && ps axj | grep server 

查找出来为什么会有两条?

因为grep命令在执行时,它自己也会变成一个进程,且它内部也有server关键字。

ps的本质是什么?

ps本质就是在遍历内核中维护所有进程控制块的数据结构(双链表)

方法二: 

ls -/proc

/proc是一个伪文件系统(procfs),该目录下存储的是内核运行时的信息,而不是实际的文件系统。用户可以查看和操作其中的文件来获取系统状态和进程信息。

5、C语言中在当前目录下创建文件怎么做到的?

每个进程的属性里都有一个cwd(Current Working Directory),记录当前进程的工作目录。

C语言中在当前目录下创建一个文件时,虽然我们只提供了文件名,但系统会将当前cwd指向的路径跟文件名拼接起来。


6、在代码层面,如何获取自己的pid和ppid?bash进程是什么?

通过系统调用接口getpid来获得当前进程的pid,通过getppid来获得该进程的父进程的pid。

我们在Linux下执行的所有命令,运行的所有程序,本质都是由父进程bash通过fork来创建的。

7、fork函数有什么用?怎么用?怎么理解两个返回值?

fork函数可以创建一个子进程,它会给父进程返回子进程的pid,给子进程返回0。

“./”是指令层面的创建进程,fork函数是代码层面的创建进程。

为什么需要两个返回值?

区分不同执行流需要执行的代码。

为什么要给父进程返回子进程的pid,而子进程返回0?

父进程要管理子进程,而子进程不需要管父进程。

fork创建子进程时,内核会做什么事?

创建子进程的PCB(拷贝父进程的PCB后做一些修改),父子进程代码共享。

为什么一个函数能有两个返回值?

fork是一个函数,在该函数执行到最后一条return语句之前,子进程其实已经创建好了,之后的代码父子共享,也就是说return语句时父进程和子进程独立分别执行的。

父子进程谁先运行?

不一定,由调度器决定。

 8、什么是写时拷贝?

父子进程代码和数据共享,他们还具有独立性吗?

代码是只读的,父子进程都不能修改。但数据是有可能修改的,当子进程尝试对父进程的数据进行修改时,OS会将该数据给子进程拷贝一份,这就叫写实拷贝。

为什么不直接全部给子进程拷贝一份?

浪费空间

为什么在fork时同一个变量id会有两个不同值?

子进程在尝试修改该变量时,发生了数据层面的写实拷贝,OS会将该数据拷贝一份给子进程,然后子进程再做修改。 

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

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

相关文章

基于MLP算法实现交通流量预测(Pytorch版)

在海量的城市数据中,交通流量数据无疑是揭示城市运行脉络、洞察出行规律的关键要素之一。实时且精准的交通流量预测不仅能为交通规划者提供科学决策依据,助力提升道路使用效率、缓解交通拥堵,还能为公众出行提供参考,实现个性化导…

指令和界面【Linux】

指令和界面 前言一、指令 vs 界面交互的需求满足需求的第一阶段——指令满足需求的第二阶段-界面时间 二、指令和界面交互区别为什么要学命令行总结 前言 Linux操作系统提供了丰富的命令行界面和图形用户界面工具,用户可以根据自己的需求选择适合的界面进行操作。命…

【好书推荐7】《机器学习平台架构实战》

【好书推荐7】《机器学习平台架构实战》 写在最前面《机器学习平台架构实战》编辑推荐内容简介作者简介目  录前  言本书读者内容介绍充分利用本书下载示例代码文件下载彩色图像本书约定 🌈你好呀!我是 是Yu欸 🌌 2024每日百字篆刻时光&…

论文阅读:BEVBert: Multimodal Map Pre-training for Language-guided Navigation

BEVBert:语言引导导航的多模态地图预训练 摘要 现存的问题:目前大多数现有的预训练方法都采用离散的全景图来学习视觉-文本关联。这要求模型隐式关联全景图中不完整、重复的观察结果,这可能会损害智能体的空间理解。 本文解决方案&#xf…

TikTok账号0播放是限流了吗?想要播放破万,试试这些方法!

前言 账号0播放问题,想必困扰着许多的TikTok运营同学。精心制作的短视频发布在TikTok,不是零播放,就是仅自己可见。那么,TikTok账号0播放是不是真的意味着被限流了呢?本篇总结了账号0播放的原因并附上解决方案&#xf…

[Flutter3] Json转dart模型举例

记录一下 Android studio plugin -> FlutterJsonBeanFactory 处理json转dart 模型 案例 json字符串, 一个 response的data返回数据 {"code":1,"msg":"\u64cd\u4f5c\u6210\u529f","data":{"list":{"id":"8…

SwiftUI 5.0(iOS 17.0)触摸反馈“震荡波”与触发器模式趣谈

概览 要想创作出一款精彩绝伦的 App,绚丽的界面和灵动的动画并不是唯一吸引用户的要素。有时我们还希望让用户真切的感受到操作引发的触觉反馈,直击使用者的灵魂。 所幸的是新版 SwiftUI 原生提供了实现触觉震动反馈的机制。在介绍它之后我们还将进一步…

等保测评之主机测评详解(二级)

等保测评之主机测评详解(二级)服务器——Windows 身份鉴别: 测评项a): a)应对登录的用户进行身份标识和鉴别,身份标识具有唯一性,身份鉴别信息具有复杂度要求并定期更换; 整改方…

antd中Upload上传图片宽高限制以及上传文件的格式限制

项目中有一个需求,要上传轮播图,且有尺寸要求,所以就需要在上传图片的时候进行尺寸限制,使用了Upload组件,需要在组件的beforeUpload方法中进行限制。 定义一个上传前的方法,并且添加一个图片尺寸获取的方…

【Redis】Zset 数据类型

文章目录 常用命令zaddzcard & zcountzrange & zrevrangezpopmax & bzpopmaxzpopmin & bzpopminzrank & zrevrankzscore & zremzremrangebyrank & zremrangebyscorezincrby 多个集合间的交互命令交集 & zinterstore并集 & sunionstore 内部…

【声呐仿真】学习记录0.5-配置ssh远程连接docker、在docker中使用nvidia显卡

【声呐仿真】学习记录0.5-配置ssh远程连接docker、在docker中使用nvidia显卡 配置ssh远程连接docker1.端口映射2.配置ssh 在docker中使用nvidia显卡配置CUDA 注意:之前已经创建过容器的,需要打包成镜像,重新创建容器,因为要在创建…

【C++庖丁解牛】C++11---右值引用和移动语义

🍁你好,我是 RO-BERRY 📗 致力于C、C、数据结构、TCP/IP、数据库等等一系列知识 🎄感谢你的陪伴与支持 ,故事既有了开头,就要画上一个完美的句号,让我们一起加油 目录 1 左值引用和右值引用2 左…

第一个Spring Boot程序

目录 一、Spring Boot介绍 二、创建Spring Boot项目 1、插件安装(专业版不需要) 2、创建SpringBoot项目 (1)这里如果插件下载失败,解决方案: (2)项目启动失败,解决…

web测试基础知识

目录 web系统的基础 web概念(worldwideweb) 网络结构 发展 架构 B/S C/S P2P 工作原理 静态页面 动态页面 web客户端技术 浏览器的核心--渲染引擎 web服务器端技术 web服务器 应用服务器 集群环境 数据库 案例-URL 协议类型 主机名 端口 IP地址 分类 …

C#开发的全套成熟的LIS系统源码JavaScript+SQLserver 2012区域云LIS系统源码

C#开发的全套成熟的LIS系统源码JavaScriptSQLserver 2012区域云LIS系统源码 医院云LIS系统是一套成熟的实验室信息管理系统,目前已在多家三级级医院应用,并不断更新。云LIS系统是为病人为中心、以业务处理为基础、以提高检验科室管理水平和工作效率为目标…

贪心算法练习day.1

理论基础 贪心算法是一种常见的解决优化问题的方法,其基本思想就是在问题的每个决策阶段,都选择当前看起来最优的选择,即贪心地做出局部的最优决策,以此得到全局的最优解,例如在十张面额不同的钞票,让我们…

润申信息企业标准化管理系统 AddNewsHandler.ashx 任意用户创建漏洞复现

0x01 产品简介 润申信息科技企业标准化管理系统通过给客户提供各种灵活的标准法规信息化管理解决方案,帮助他们实现了高效的标准法规管理,完成个性化标准法规库的信息化建设。 0x02 漏洞概述 润申信息企业标准化管理系统 AddNewsHandler.ashx 接口处存在任意用户创建漏洞,…

Linux安装部署Tomcat

个人简介:Java领域新星创作者;阿里云技术博主、星级博主、专家博主;正在Java学习的路上摸爬滚打,记录学习的过程~ 个人主页:.29.的博客 学习社区:进去逛一逛~ Linux安装部署Tomcat //将tomcat压缩包解压到对…

python识别电脑是windows还是linux

代码实现 import osif os.name nt:print(当前操作系统是 Windows) elif os.name posix:print(当前操作系统是 Linux 或 Unix 类型的系统) else:print(未知的操作系统)

kubernetes中的副本控制器rc(replicationcontrollers)和rs(replicasets)

一、rc控制器replicationcontrollers rc控制器就是控制相同pod副本数量 使用rc控制器资源创建pod,设定创建pod资源的数量 1.1 案例 1.1.1、创建资源清单 [rootmaster rc-demo]# cat rc.yaml apiVersion: v1 kind: ReplicationController metadata: name: rc01 …