Linux-3进程概念(一)

1.冯诺伊曼结构

1.1 冯诺依曼结构的概念

冯·诺依曼结构,又称为普林斯顿结构,是一种将程序指令存储器和数据存储器合并在一起的存储器结构。程序指令存储地址和数据存储地址指向同一个存储器的不同物理位置,因此程序指令和数据的宽度相同,比如英特尔公司的8086中央处理器的程序指令和数据都是16位宽。

数学家冯·诺依曼提出了计算机制造的三个基本原则,即采用二进制逻辑、程序存储执行以及计算机由五个部分组成(运算器、控制器、存储器、输入设备、输出设备),这套理论被称为冯·诺依曼体系结构。

我们常见的计算机,如笔记本。我们不常见的计算机,如服务器,大部分都遵守冯诺依曼体系

截至目前,我们所认识的计算机,都是有一个个的硬件组件组成
输入单元:包括键盘, 鼠标,扫描仪, 写板等
中央处理器(CPU):含有运算器和控制器等
输出单元:显示器,打印机等
 

输入设备和输出设备处理数据的速度相较于CPU是很慢的,如果数据直接从输入输出设备中发送或者接收就会形成一个很大的速度差,这样就会使得整个计算机运行起来的效率还是很低。

因为有IO设备和CPU的效率不均衡,因此引进了存储器(也就是内存),快于IO设备又慢于CPU。

冯诺依曼体系中数据的输入输出就不是直接传到CPU。数据由输入设备先传递到内存,然后CPU再从内存中读取数据进行处理,处理完CPU再写入内存,最后由内存传给输出设备。

总结:

不考虑缓存情况,这里的CPU能且只能对内存进行读写,不能访问外设(输入或输出设备)
外设(输入或输出设备)要输入或者输出数据,也只能写入内存或者从内存中读取。                           一切设备都与内存打交道

2.操作系统

2.1操作系统的概念

操作系统是一个进行软硬件资源管理的软件

 底层硬件是以冯诺依曼结构组织的

操作系统和底层硬件之间还有个驱动程序,那么这个驱动程序呢就是让操作系统通过调用不同的驱动程序去管理不同的硬件

2.2设计操作系统的目的

操作系统包括:

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

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

管理的目的:为用户程序提供一个良好稳定的运行环境    

与硬件交互,管理所有的软硬件资源。

2.3操作系统的管理的理解

那么什么叫做管理?如何理解?

管理的本质就是对数据或者说信息进行管理

而管理者(OS)的工作是做决策,根据数据做决策

那么数据量大时管理者该怎么做管理呢?

可以将事物抽象成为一个对象,这个对象中保存着一个事物的信息(属性),也就是抽取事物的属性来描述这个事物

比如说学生:可以抽取姓名、性别、年龄、学号等

看着是不是很眼熟,这就是先描述,用一个数据类型(struct)以及学生的属性来描述学生

然后通过某种数据结构(容器)对大量的学生(数据/对象)进行管理,链表就很合适(可以通过学号或成绩等来做管理)

决策者(OS)所有的决策工作就变成了对链表的增删查改

对学生(数据)的管理也变成了对链表的增删查改

这也就是再组织的过程

总结:

先描述:将事物抽离出属性,通过大量属性定义出对象(通过结构体或类定义出对象(变量))

再组织:通过容器(数据结构)对大量的对象进行管理

2.4系统调用和库函数概念

在开发角度,操作系统对外会表现为一个整体,但是会暴露自己的部分接口,供上层开发使用,这部分由操作系统提供的接口,叫做系统调用

系统调用在使用上,功能比较基础,对用户的要求相对也比较高,所以,有心的开发者可以对部分系统调用进行适度封装,从而形成库,有了库,就很有利于更上层用户或者开发者进行二次开发。

3.进程

3.1进程的概念

进程是一个运行起来的程序,在具体点呢?

我们先想想下面几个问题

啥是程序呢?程序在哪呢?

程序在电脑中不就是二进制文件嘛,既然是文件那它就存在磁盘里

就是磁盘里的那个.exe(可执行程序)文件,将这玩意加载到内存里就是进程了(暂时先这么理解)

3.2描述进程-PCB

可以同时运行多个程序吗?

可以同时运行,一定要将多个.exe(可执行程序)加载到内存

操作系统要不要管理多个加载到内存的程序呢?

操作系统如何管理多个加载到内存的程序呢?

先描述,再组织

先描述:

进程加载到内存里,操作系统咋知道谁是谁啊

所以对进程的属性进行抽离,根据属性创建出对象来描述每个进程"长啥样"

由此就产生了processes control block(PCB)也叫进程控制块

那么为什么程序加载到内存,变成进程之后我们要给每个进程创建一个PCB对象呢?

因为操作系统要对进程进行管理

PCB中有一个属性(指针)指向对应的进程,那么对进程的管理变成对PCB对象的管理

然后PCB里面又有指向下个PCB对象的指针,那么就变成对链表的增删查改(再组织)

所以进程的本质是

内核数据结构 + 可执行程序 = 进程

未来,所有对进程的控制和操作只和进程的PCB有关,和进程的可执行程序无关

Linux操作系统下PCB是task_struct

task_struct描述内容分类

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

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

也就是进程的PID,PID是操作系统中唯一标识的进程号

通过系统调用获取标识符

#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/types.h>
int main()
{printf("before fork: I am a prcess, pid: %d, ppid: %d\n", getpid(), getppid());printf("创建进程\n");sleep(5);pid_t id = fork();if(id<0){return 0;}else if(id == 0){//子进程while(1){printf("after fork, 我是子进程: I am a prcess, pid: %d, ppid: %d,returnid:%d\n", getpid(), getppid(), id);sleep(1);} }else{while(1){printf("after fork,i am a fatherprcess,pid:%d,return id:%d\n",getpid(),getppid(),id);sleep(1);                                                    }return 0;
}

3.3组织进程

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

3.4查看进程

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

1.通过ps aux 可以查看系统中所有进程的信息

2.可以通过 ps axj 查看进程的父进程号

 3.5fork初识

3.5.1 通过fork创建进程

fork成功返回子进程的pid给父进程,返回0给子进程

失败返回-1给父进程,子进程不会创建

#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
int main()
{int id = fork();if(id < 0){perror("fork");return 1;}else if(id == 0){ //child  可以执行你所需要的子进程内容printf("I am child : %d!, ret: %d\n", getpid(), id);}else{ //father  执行所需要的父进程内容printf("I am father : %d!, ret: %d\n", getpid(), id);}sleep(1);return 0;
}

父子非同一个进程,可以同时跑(两个执行流)

进程 = 内核数据结构 + 可执行程序的代码和数据

子进程又没有自身的代码和数据,子进程会指向父进程的代码和数据

子进程被创建是以父进程为模板的

3.5.2fork的返回值

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

我们要明白,一个父亲可以有多个孩子,而一个孩子只能有一个父亲

父亲:孩子 = 1:n 的关系  当然 孩子也可以有一个

但重要的是父进程是唯一的,子进程可以很容易的找到父进程,而父进程需要通过子进程的pid去找到子进程

为什么fork函数会返回两次?

还记得我们上面写的代码吗?

if(id < 0)
{//...
}
else if(if == 0)
{//...
}
else
{//...
}

id如果是同一个变量怎么可能既大于0又等于0

一个进程挂掉是不会影响另一个进程的

(任意)进程之间是具有独立性的,互相不能影响

前面我们提到子进程没有自身的代码和数据,子进程会指向父进程的代码和数据。那么当子进程要改变(写入)变量时会出现写时拷贝,可以用同一个变量名来表示不同的内存

在return子进程之前已经有父子进程分流了

返回的本质就是写入

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

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

相关文章

CSS是一门需要单独学习的技术吗?

CSS (Cascading Style Sheets) &#xff0c;做前端开发的人都很清楚&#xff0c;因为这是他们的一项必不可少的技能。我以前也是知道CSS&#xff0c;但从来没有单独学习过&#xff0c;认为就它只是用来渲染网页的表现层效果&#xff0c;定制页面和内元素的布局、颜色和字体等&a…

JVM 性能调优 - 参数调优(3)

查看 JVM 内存的占用情况 编写代码 package com.test;public class PrintMemoryDemo {public static void main(String[] args) {// 堆内存总量long totalMemory Runtime.getRuntime().totalMemory();// jvm 试图使用的最大堆内存long maxMemory Runtime.getRuntime().maxM…

前端实现标题滚动点击导航

效果图 右边滚动的html代码 <div class"right-box"><el-tabs v-model"isScrollNow" tab-position"right" class"updateTab" tab-click"scrollTo"style"height: fit-content;"><el-tab-pane label…

Unity Meta Quest MR 开发(三):Scene API 配置+实现虚拟与现实之间的碰撞

文章目录 &#x1f4d5;教程说明&#x1f4d5; Scene 配置⭐开启场景理解功能和应用访问空间数据的权限⭐OVRSceneManager⭐制作 Plane Prefab 和 Volume Prefab⭐运行场景⭐添加透视材质 &#x1f4d5;虚拟与现实物体的碰撞&#xff08;弹球 Demo&#xff09;&#x1f4d5;Mes…

pytest的常用插件和Allure测试报告

pytest常用插件 pytest-html插件 安装&#xff1a; pip install pytest-html -U 用途&#xff1a; 生成html的测试报告 用法&#xff1a; ​在.ini配置文件里面添加 addopts --htmlreport.html --self-contained-html 效果&#xff1a; 执行结果中存在html测试报告路…

全套电气自动化样例图纸分享,使用SuperWorks自动化版免费设计软件!

今天给大家分享一套完备的电气自动化样例图纸&#xff0c;结构准确、内容清晰&#xff0c;适合初学者入门操作练习。 整套图纸包含图纸目录、原理图、端子列表、连接列表、元件列表、接线图&#xff0c;具有较高的参考价值&#xff0c;请大家点击自行下载文件&#xff01; 1e8…

计算机网络-数据链路层概述(功能概述 链路 数据链路 物理通道 逻辑通道)

文章目录 总览数据链路层的研究思想数据链路层的基本概念数据链路层功能概述 总览 封装成帧指的是数据链路层将来自上层的网络层数据包&#xff08;如IP数据报&#xff09;添加上自己的帧头和帧尾&#xff0c;形成一个完整的帧。这个过程包括了对数据的封装&#xff0c;以便于在…

忘记 RAG:拥抱Agent设计,让 ChatGPT 更智能更贴近实际

RAG&#xff08;检索增强生成&#xff09;设计模式通常用于开发特定数据领域的基于实际情况的ChatGPT。 然而&#xff0c;重点主要是改进检索工具的效率&#xff0c;如嵌入式搜索、混合搜索和微调嵌入&#xff0c;而不是智能搜索。 这篇文章介绍了一种新的方法&#xff0c;灵感…

VScode上无法运行TSC命令,Typescript

如何解决问题 第一步&#xff1a;使用 winx 快捷键&#xff0c;会出现如下弹窗&#xff0c;鼠标左键单击Windows PowerShell 即可打开shell 第二步&#xff1a;运行 set-ExecutionPolicy RemoteSigned 命令&#xff0c;在询问更改执行策略的时候选择敲Y或者A 第三步&#xff…

2024美赛预测算法 | 回归预测 | Matlab基于WOA-LSSVM鲸鱼算法优化最小二乘支持向量机的数据多输入单输出回归预测

2024美赛预测算法 | 回归预测 | Matlab基于WOA-LSSVM鲸鱼算法优化最小二乘支持向量机的数据多输入单输出回归预测 目录 2024美赛预测算法 | 回归预测 | Matlab基于WOA-LSSVM鲸鱼算法优化最小二乘支持向量机的数据多输入单输出回归预测预测效果基本介绍程序设计参考资料 预测效果…

Vue学习之使用HBuilderX创建并使用vue3.0项目

Vue学习之使用HBuilderX创建并使用vue3.0项目 下文将简述如何使用HBuilderX创建并使用vue3.0项目&#xff0c;包含项目创建、目录介绍、如何引用组件、首页自定义设置。 1、创建vue3.0项目 具体操作之前章节已经阐述过不在冗余介绍&#xff0c;创建时选择vue3项目即可。vue2…

【leetcode题解C++】77.组合 and 216.组合总和III and 17.电话号码的字母组合

77. 组合 给定两个整数 n 和 k&#xff0c;返回范围 [1, n] 中所有可能的 k 个数的组合。 你可以按 任何顺序 返回答案。 示例 1&#xff1a; 输入&#xff1a;n 4, k 2 输出&#xff1a; [[2,4],[3,4],[2,3],[1,2],[1,3],[1,4], ] 示例 2&#xff1a; 输入&#xff1a…

决策树的相关知识点

&#x1f4d5;参考&#xff1a;ysu老师课件西瓜书 1.决策树的基本概念 【决策树】&#xff1a;决策树是一种描述对样本数据进行分类的树形结构模型&#xff0c;由节点和有向边组成。其中每个内部节点表示一个属性上的判断&#xff0c;每个分支代表一个判断结果的输出&#xff…

验证码倒计时:用户界面的小细节,大智慧

欢迎来到我的博客&#xff0c;代码的世界里&#xff0c;每一行都是一个故事 验证码倒计时&#xff1a;用户界面的小细节&#xff0c;大智慧 前言为什么需要验证码倒计时防止滥用&#xff1a;用户心理&#xff1a; 设计考量可见性&#xff1a;友好性&#xff1a;适应性&#xff…

macOS Sonoma 14系统安装包

macOS Sonoma 14是苹果公司最新推出的操作系统&#xff0c;为Mac用户带来了全新的使用体验。Sonoma是苹果继Catalina之后的又一重要更新&#xff0c;它在改善系统性能、增加新功能、优化用户界面等方面做出了显著贡献。 macOS Sonoma 14系统有许多令人兴奋的新功能和改进&…

文心一言4.0API接入指南

概述 文心一言是百度打造出来的人工智能大语言模型&#xff0c;具备跨模态、跨语言的深度语义理解与生成能力&#xff0c;文心一言有五大能力&#xff0c;文学创作、商业文案创作、数理逻辑推算、中文理解、多模态生成&#xff0c;其在搜索问答、内容创作生成、智能办公等众多…

ShardingSphere 5.x 系列【7】元数据持久化

有道无术,术尚可求,有术无道,止于术。 本系列Spring Boot 版本 3.1.0 本系列ShardingSphere 版本 5.4.0 源码地址:https://gitee.com/pearl-organization/study-sharding-sphere-demo 文章目录 概述2. 单机模式2.1 H22.2 MySQL3. 集群模式3.1 ZooKeeper3.2 Nacos3.3 Cons…

管理类联考-复试-全流程演练-导航页

文章目录 整体第一步&#xff1a;学校导师两手抓——知己知彼是关键学校校训历史 导师你对导师的研究方向有什么认知。 第二步&#xff1a;面试问题提前背——押题助沟通英文面试经典问题——出现概率&#xff1a;100%自我介绍——出现概率&#xff1a;100%为什么选择这个专业&…

C++力扣题目377--组合求和VI 爬楼梯进阶版 322--零钱兑换 279完全平方数

377. 组合总和 Ⅳ 力扣题目链接(opens new window) 难度&#xff1a;中等 给定一个由正整数组成且不存在重复数字的数组&#xff0c;找出和为给定目标正整数的组合的个数。 示例: nums [1, 2, 3]target 4 所有可能的组合为&#xff1a; (1, 1, 1, 1) (1, 1, 2) (1, 2, …

MATLAB | 绘图复刻(十四) | 右侧对齐桑基图,及工具函数SSankey更新

hey 真的好久不见了&#xff0c;本期既是一期绘图复刻教程&#xff0c;也是我写的工具函数的版本更新&#xff0c;本期复刻的图片来自《Nature》&#xff1a; Elmarakeby, H.A., Hwang, J., Arafeh, R. et al. Biologically informed deep neural network for prostate cancer…