【Linux学习笔记】进程概念(上)

news2025/1/22 21:48:55

  • 1. 冯诺依曼体系结构
  • 2. 操作系统的作用
  • 3. 进程

1. 冯诺依曼体系结构

如图,这是一个冯诺依曼体系结构简图

img

其中这里的存储器指的是内存!

用通俗的话来解释这个图,就是数据从输入设备进入,然后进入到存储器,CPU从存储器中拿到数据,处理完毕后,输出到输出设备。

  1. CPU与存储器与外设

其中CPU的功能是用来计算处理数据的,所需要的数据从存储器中来,并不是直接和外设打交道的。所处理完的数据之后,再交给存储器,外设再从存储器中拿到处理后的数据。

其实CPU很笨,只能被动的接受别人的指令或者别人的数据,然后去执行别人的指令,计算别人的数据。

一句话,所有的设备都只能直接同内存打交道

  1. CPU如何认识别人的指令?

我们在编译代码的时候,本质就是形成一种二进制可执行程序。其中这种二进制可执行程序可以被CPU的指令集识别,从而CPU能够认识指令,计算数据。

  1. 操作系统的作用

当CPU处理完数据,执行完指令后,那么多余的数据,指令该怎么办呢?这个问题其实操作系统都会帮你解决。

2. 操作系统的作用

  1. 什么是操作系统

一句话简单说明什么是操作系统,操作系统就是一个进行软硬件资源管理的软件。

  1. 操作系统为什么要管理软硬件

一句话总结,操作系统通过合理的管理软硬件资源(手段),为用户提供良好的(稳定的,高效的,安全的)执行环境(目的)。

  1. 那么操作系统是如何管理硬件的呢?

你可以把操作系统想象成你的大学校长。那么在大学的时候,你的校长是怎么管理学生的呢?是不是中间还有一个人,这个人暂且称为辅导员。那么就有如下抽象图:

img

对于上面的图,可以这么理解。你的校长并不直接管理着学生,而是通过辅导员获取上来学生的数据来管理学生,再告知辅导员相应的决策来管理学生的。**那么同样的,操作系统也并不是直接去管理硬件的,而是通过驱动获取上来的数据来管理硬件,再通过数据告知相应的驱动去管理硬件的。**那么具体的图就变成了这样:

img

  1. 既然操作系统是通过数据来管理硬件的,那么数据多了怎么办

还是举一个例子来说清楚问题。**假如一个大学里面有着2万名学生,那么就是有2万名学生的数据,那么校长是怎么管理的呢?其实每个学生都有着自己的一份信息表,校长就是通过这份信息表来管理着学生的。同样的,操作系统也是如此。当管理硬件的时候,每个硬件其实也是有着这样一份信息表的,用代码来表示,就是结构体。每当操作系统管理硬件的时候,都是通过这个结构体的信息来管理的。**如下图所示:

img

img

其中,校长有了学生的信息表之后,就可以开始管理学生,例如把学生信息放进一个链表来管理。同样的操作系统对硬件的管理也是如此,也是放进某种数据结构中来进行管理的。

所以操作系统管理的本质是:对数据做管理。

管理的方法:先描述,再组织。

  1. 用户是如何操作硬件的呢?

计算机的硬件其实就是一堆二极管,那为什么用户不能直接操作硬件完成相应的操作呢?这里用一个例子来说明一下。

在日常生活中,银行取钱很常见。面对银行大量的业务,为什么老百姓就不能自己操作呢?比如老百姓自己去存钱,自己去取钱,这样不是方便很多吗?其实原因很简单,银行并不信任任何人!!!所以设立很多小窗口来给老百姓提供业务,既保证了银行的安全,也实现了对老百姓的业务。

切换到计算机的世界,操作系统其实就相当于银行,操作系统并不相信任何用户,因为操作系统害怕用户不小心操作对操作系统本身造成了不可逆的伤害,所以操作系统也不允许用户直接操作硬件,而是提供了一系列的系统接口来供用户使用,从而实现了用户对硬件的操作,既保护了操作系统本身,也完成了对用户的服务。

  1. 操作系统概念图

img

3. 进程

  1. 进程的概念

对于进程的理解可以理解为:操作系统是怎么管理硬件的,就怎么管理软件的,而这里的软件就可以认为是进程。

在教科书上,进程的概念是,一个运行起来的程序叫做进程。可实际进程是什么样子的呢?下面来看一看图示:

img

  • 当程序加载到内存中时,操作系统会对该程序生成相应的PCB
  • CPU实际管理的并不是内存中的程序,而是管理程序对应的PCB
  1. PCB(程序控制块)

PCB全写是process control block。实际上可以认为是一个结构体,其中保存的是相应的程序的相关属性,例如优先级,代码地址,…

  1. 为什么会有PCB?

PCB实际上是对程序的描述,根据上面所讲过的内容,我们可以知道管理的实质其实就是先描述,再组织。操作系统对程序创建相应的结构体,对其进行了相应的描述,然后操作系统再根据相应的数据结构对这些PCB进行组织,例如链表。从而实现了对进程的管理。

  1. 所以进程是什么?

进程可以简单的认为是: 进程 = 内核数据结构(PCB) + 进程对应的磁盘代码。

下面来看看Linux中的进程。

  1 #include <stdio.h>
  2 #include <unistd.h>
  3            
  4 int main()                                                                                                             
  5 {                                                     
  6     int cnt = 0;                                                        
  7     while(1)       
  8     {                                          
  9         printf("我是一个进程,%d\n",cnt++);
 10         sleep(1);
 11     }                                                                                                                                                               
 12     return 0;          
 13 }

以这个代码为基础,创建一个进程。运行代码后,我们就可以看到该进程。

img

  1. 查看当前进程ID 和 父进程ID

这里可以调用系统接口来查看子进程ID和父进程ID

  • 查看当前进程ID的系统接口是: getpid()
  • 查看父进程ID的系统接口时: getppid();
  1 #include <stdio.h>
  2 #include <unistd.h>
  3            
  4 int main()                                                                                                             
  5 {                                                     
  6    // fork();                                                           
  7     printf("我是一个进程!进程ID:%d, 父进程ID:%d\n",getpid(),getppid());
  8     sleep(1);                                                                                                                                                       
  9     return 0;        
 10 }                         

运行结果:

img

  1. 了解系统接口

fork()是一个系统接口,其主要功能是给当前进程创建一个子进程。可以通过man命令来查看fork的详细信息。

img

img

  1. 了解并发运行

当你的代码运行起来的时候,就已经是一个进程在运行了。那么此时我再创建一个子进程,那么后续的代码将会被两个进程(子进程和当前进程)所共享。例如下面这个代码:img

运行结果:

img

img

img

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

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

相关文章

【PWN · heap | UAF】[BJDCTF 2020]YDSneedGirlfriend

一篇裸的、便于学习UAF的题目和笔记 前言 UAF-释放后重用&#xff0c;这一题和wiki上教学的那一题一样&#xff0c;是纯的裸UAF题目 一、题目 二、分析 题目中del函数&#xff0c;在释放申请的堆块后&#xff0c;并没有将置零&#xff0c;存在UAF漏洞。 分析add函数&#xf…

Tailwind CSS vs 现代CSS,Tailwind CSS 会像CSS-in-JS 一样亡?

本文是 关于Tailwind CSS 与 现代 CSS之间比较的文章。文章中作者详细比较了这两种CSS开发方法的优缺点。他指出&#xff0c;Tailwind CSS是一种基于类的CSS框架&#xff0c;提供了快速开发网站的便利性&#xff0c;但可能导致HTML代码的臃肿。另一方面&#xff0c;现代CSS方法…

[双指针] (四) LeetCode 18.四数之和

[双指针] (四) LeetCode 18.四数之和 文章目录 [双指针] (四) LeetCode 18.四数之和题目解析解题思路代码实现总结 18. 四数之和 题目解析 (1) 从一个数组中找一个目标值target (2) target nums[a] nums[b] nums[c] nums[d] 解题思路 和上一道题三数之和一样, 我们把四…

刷到这篇文章的老师,就是老天在帮你

作为一名奋斗在教育战线的老师&#xff0c;是否曾在成绩查询这个环节中倍感头大&#xff1f; 统计是个繁琐又重要的工作&#xff0c;但有了正确的工具&#xff0c;一切都变得无所谓&#xff01; 什么是成绩查询&#xff1f; 成绩查询&#xff0c;顾名思义&#xff0c;就是学生…

uni-app 应对微信小程序最新隐私协议接口要求的处理方法

这里给大家分享我在网上总结出来的一些知识&#xff0c;希望对大家有所帮助 一&#xff0c;问题起因 最新在开发小程序的时候&#xff0c;调用微信小程序来获取用户信息的时候经常报错一个问题 fail api scope is not declared in the privacy agreement&#xff0c;api更具公告…

Linux | 文件系统

目录 前言 一、预备知识 二、文件相关的系统调用 1、C语言的文件操作 2、系统调用接口 &#xff08;1&#xff09;open函数 &#xff08;2&#xff09;close函数 &#xff08;3&#xff09;write函数 &#xff08;4&#xff09;read函数 3、代码实操 三、深入理解文…

k8s:endpoint

在 Kubernetes 中&#xff0c;Endpoint 是一种 API 对象&#xff0c;它用于表示集群内某个 Service 的具体网络地址。换句话说&#xff0c;它连接到一组由 Service 选择的 Pod&#xff0c;从而使它们能够提供服务。每个 Endpoint 对象都与相应的 Service 对象具有相同的名称&am…

python判断图片主颜色

一 、 问题&#xff1a;python判断图片主颜色 python判断图片主颜色&#xff08;HSV&#xff09; 二 、 项目背景&#xff1a; app选项是否能被点击&#xff0c;判断执行逻辑。做自动化测试的朋友肯定遇到好多次&#xff0c;按钮属性无法判别时&#xff0c;就需要自己将app选…

shell script中的数值运算declare和$((运算式 ))

linux中变量定义默认是字符串类型&#xff0c;如要进行数值运算&#xff0c;需要先声明变量类型&#xff0c;或者通过固定格式来计算 看案例 如果不通过固定格式&#xff0c;直接 echo 55 如图&#xff0c;结果显示的55本身 可以写成 declare -i var#声明变量integrate类型&…

网络架构学习之FCNVMB(基于U-Net架构)

目录 一、U-Net介绍 1.1 网络简单介绍 1.2 网络特点 二、FCNVMB介绍 2.1 文章简介 2.2 网络简单介绍 2.3 代码介绍 2.4 跳跃连接 2.5 训练过程 2.6 FCNVMB与InversionNet的比较 一、U-Net介绍 1.1 网络简单介绍 U-Net是基于全卷积网络下一个语义分割应用于生物医学的深…

PC端视频编辑处理的全方位解决方案

视频已经成为企业传播信息、展示品牌形象的重要工具。然而&#xff0c;制作高质量的视频并非易事&#xff0c;需要专业的技术和设备。这就是美摄科技发挥作用的地方。我们为企业提供一站式的PC端视频编辑处理解决方案&#xff0c;帮助企业轻松制作出专业级别的视频。 美摄科技…

Kubernetes 架构

Kubernetes 架构 Kubernetes 最初源于谷歌内部的 Borg,提供了面向应用的容器集群部署和管理系统。Kubernetes 的目标旨在消除编排物理 / 虚拟计算,网络和存储基础设施的负担,并使应用程序运营商和开发人员完全将重点放在以容器为中心的原语上进行自助运营。Kubernetes 也提…

2021~2023年度长垣起重机博览会最佳产品彩页(修订中)

1.河南恒达 比较完善的起重量限制器产品线分类&#xff0c;提供了监控参数一览表。 2.沪源电机 详细的电机参数&#xff0c;这基本上可以作为电机发展的历史资料来搜集。 包含效率&#xff0c;功率因数&#xff0c;堵转电流等其他厂商很少给出的参数&#xff0c;可以做手册用…

【Redis】安装(Linuxwindow)及Redis的常用命令

Redis简介 Redis是一个开源&#xff08;BSD许可&#xff09;&#xff0c;内存存储的数据结构服务器&#xff0c;可用作数据库&#xff0c;高速缓存和消息队列代理。 它支持字符串、哈希表、列表、集合、有序集合&#xff0c;位图&#xff0c;hyperloglogs等数据类型。内置复…

2024年天津中德应用技术大学专升本招生专业限制目录

2024年天津中德应用技术大学专升本招生专业限制 专科可允许报考的专业目录范围 机械电子工程&#xff1a; 机电一体化技术、数控技术、数控设备应用与维护、模具设计与制造、精密机械技术、材料工程技术、机械设计与制造、计算机辅助设计与制造、焊接技术与自动化、电气自动化…

Yolov8目标识别与实例分割——版本比对与原理解析

前言 YOLO是一种基于图像全局信息进行预测并且它是一种端到端的目标检测系统&#xff0c;最初的YOLO模型由Joseph Redmon和Ali Farhadi于2015年提出&#xff0c;并随后进行了多次改进和迭代&#xff0c;产生了一系列不同版本的YOLO模型&#xff0c;如YOLOv2、YOLOv3、YOLOv4&a…

Java学习_day07_类的构造器代码块继承封装多态

文章目录 构造器格式注意点使用 代码块格式注意 继承格式注意点 封装包声明包导包注意点 访问修饰符 多态格式注意点代码演示 构造器 Java中每个类都至少有一个构造器&#xff0c;当程序员没有明确编写构造器时&#xff0c;Java编译器会自动为类添加一个无参的构造器。构造器通…

vue封装独立组件:实现分格密码输入框/验证码输入框

目录 第一章 实现效果 第二章 核心实现思路 第三章 封装组件代码实现 第一章 实现效果 为了方便小编的父组件随便找了个页面演示的通过点击按钮&#xff0c;展示子组件密码输入的输入框通过点击子组件输入框获取焦点&#xff0c;然后输入验证码数字即可子组件的确定按钮是验…

nodejs+vue+python+php智能停车系统-计算机毕业设计-微信小程序-安卓

随着网络技术的不断发展&#xff0c;多媒体技术应用渐渐的出现在教育领域中&#xff0c;智能停车算法研究管理已经成为社会的一个热门话题。 智能停车算法研究系统主要是借助计算机&#xff0c;通过对智能停车算法研究系统所需的信息管理&#xff0c;增加用户的选择&#xff0c…

【MyBatis Plus】使用 MyBatis Plus 完成分页功能,以及通用分页实体的实现

文章目录 一、MyBatis Plus 分页插件1.1 了解 MyBatis Plus 的插件功能1.2 配置分页插件1.3 测试分页功能 二、实现通用分页实体2.1 分页查询需求2.2 分页实体类2.3 分页查询接口2.4 通用实体的转换2.4.1 PageQuery 转换为 MP Page2.4.2 分页结果 PO 转换 VO 一、MyBatis Plus …