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

  • 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.mfbz.cn/a/113530.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

echarts 画散点图, x周,y周在指定位置标志一下

文章目录 echarts 画散点图&#xff0c; x周&#xff0c;y周在指定位置标志一下示例一例子二示例三 echarts 画散点图&#xff0c; x周&#xff0c;y周在指定位置标志一下 示例一 let scatterData {data: [[[-0.2, -0.6],[0.4, 0.3],[0.1, 0.4],[0.3, 0.5],[0.09, 0.1],[0.7,…

没有PDF密码,如何解密文件?

PDF文件有两种密码&#xff0c;一个打开密码、一个限制编辑密码&#xff0c;因为PDF文件设置了密码&#xff0c;那么打开、编辑PDF文件就会受到限制。想要解密&#xff0c;我们需要输入正确的密码&#xff0c;但是有时候我们可能会出现忘记密码的情况&#xff0c;或者网上下载P…

2023年最新版潮乎盲盒源码含搭建教程

后台开发语言&#xff1a;后端 Laravel 框架开发 前端开发框架&#xff1a;uniappvue 环境配置: php7.4 mysql5.6 nginx1.22 redis&#xff08;建议宝塔面板或 lnmp&#xff09; 源码获取请自行百度&#xff1a;一生相随博客 一生相随博客致力于分享全网优质资源&#x…

kotlin中集合操作符

集合操作符 1.总数操作符 any —— 判断集合中 是否有满足条件 的元素&#xff1b; all —— 判断集合中的元素 是否都满足条件&#xff1b; none —— 判断集合中是否 都不满足条件&#xff0c;是则返回true&#xff1b; count —— 查询集合中 满足条件 的 元素个数&#x…

机器学习-基本知识

 任务类型 ◼ 有监督学习(Supervised Learning) 每个训练样本x有人为标注的目标t&#xff0c;学习的目标是发现x到t的映射&#xff0c;如分类、回归。 ◼ 无监督学习(Unsupervised Learning) 学习样本没有人为标注&#xff0c;学习的目的是发现数据x本身的分布规律&#xf…

Hadoop PseudoDistributed Mode 伪分布式

Hadoop PseudoDistributed Mode 伪分布式加粗样式 hadoop101hadoop102hadoop103192.168.171.101192.168.171.102192.168.171.103namenodesecondary namenoderecource managerdatanodedatanodedatanodenodemanagernodemanagernodemanagerjob historyjob logjob logjob log 1. …

论文 辅助笔记:t2vec train.py

1 train 1.1 加载training和validation数据 def train(args):logging.basicConfig(filenameos.path.join(args.data, "training.log"), levellogging.INFO)设置了日志的基本配置。将日志信息保存到名为 "training.log" 的文件中日志的级别被设置为 INFO&…

Run, Don‘t Walk: Chasing Higher FLOPS for Faster Neural Networks(CVPR2023)

文章目录 AbstractIntroduction过去工作存在的不足我们的工作主要贡献&#xff08;待参考&#xff09; Related workCNNViT, MLP, and variants Design of PConv and FasterNetPreliminaryPartial convolution as a basic operatorPConv followed by PWConvFasterNet as a gene…

整理笔记——0欧电阻、电感、磁珠

设计电路时&#xff0c;经常用到0欧电阻、电感、磁珠&#xff0c;这三个基础电子原件万用表量都是“短路”&#xff0c;这三者之间有什么区别&#xff1f;什么情况下用什么原件&#xff1f; 一、0欧电阻 0欧电阻&#xff0c;并不是指元件的电阻值为0&#xff0c;而是电阻值很小…

主机ping、ssh连接不通本地虚拟机

一、问题描述 在使用vscode remote ssh时&#xff0c;连接timeout&#xff0c;而且主机无论如何也ping不通虚拟机&#xff0c;但是虚拟机可以ping通主机。通过vagrant也可以连接虚拟机。 二、解决方案 试了网上包括设置remote ssh在内的许多方法都不行。重新查看主机和虚拟机…

IMX6ULL——GPIO

本章目的&#xff1a;使用GPIO点亮一个LED灯 1.LED原理 &#xff08;1&#xff09;LED类型&#xff1a;插脚LED&#xff1b;贴片LED。 &#xff08;2&#xff09;LED点亮电路 法一&#xff1a; 法二&#xff1a; 我们本章使用法二&#xff0c;使用IMX6ULL的GPIO引脚输出高低电…

8+双疾病+WGCNA+多机器学习筛选疾病的共同靶点并验证表达

今天给同学们分享一篇双疾病WGCNA多机器学习的生信文章“Shared diagnostic genes and potential mechanism between PCOS and recurrent implantation failure revealed by integrated transcriptomic analysis and machine learning”&#xff0c;这篇文章于2023年5月16日发表…

Python 正则表达式(RegEx)指南

正则表达式&#xff08;RegEx&#xff09;是一系列字符&#xff0c;形成了一个搜索模式。RegEx 可用于检查字符串是否包含指定的搜索模式。 RegEx 模块 Python 中有一个内置的包叫做 re&#xff0c;它可以用于处理正则表达式。导入 re 模块&#xff1a; import rePython 中的…

C语言 Number 1 基本数据类型

数据类型的定义 c语言的数据分类基本类型整型浮点型float和double的精度和范围范围精度 枚举类型空类型派生类型派生的一般表达形式 注 c语言的数据分类 首先是针对C语言的数据类型做个整理 大致分为四个大类型 基本类型枚举类型空类型派生类型 那么根据以上四个大类型 我们…

三门问题 最通俗解释+拓展

三门问题是概率论比较经典的一个问题&#xff0c;答案有点反直觉&#xff0c;所以值得学习&#xff0c;理性第一&#xff01;但是&#xff0c;很多网上解释都让人云里雾里&#xff0c;或者干脆解释就是错了&#xff0c;或一上来就贝叶斯公式开始搞数学&#xff0c;其实很简单可…

OpenFeign的简单介绍和功能实操

前言 本文主要做一下OpenFeign的简单介绍和功能实操&#xff0c;实操主要是OpenFeign的超时和重试&#xff0c;在阅读本文章前&#xff0c;请完成《Nacos 注册中心介绍与实操》内的Nacos多模块生产消费者项目 什么是OpenFeign OpenFeign全名Spring Cloud OpenFeign&#xff…

企业服务总线ESB有什么作用?和微服务有什么区别?会如何发展?

企业服务总线ESB是什么 下面这张图&#xff0c;稍微了解些IT集成的朋友应该不陌生。 随着信息化发展不断深入&#xff0c;企业在不同的阶段引入了不同的应用、系统和软件。这些原始的应用系统互不连通&#xff0c;如同一根根独立的烟囱。 但是企业业务是流程化的&#xff0c;…

AI:46-基于深度学习的垃圾邮件识别

🚀 本文选自专栏:AI领域专栏 从基础到实践,深入了解算法、案例和最新趋势。无论你是初学者还是经验丰富的数据科学家,通过案例和项目实践,掌握核心概念和实用技能。每篇案例都包含代码实例,详细讲解供大家学习。 📌📌📌本专栏包含以下学习方向: 机器学习、深度学…

蓝桥白皮书16.0版——1、STEMA 考试综述

目 录 ​​​​​​​STEMA 考试综述 STEMA 考试组别 STEMA 试题数量与计分点 STEMA 考试时长 STEMA 考试成绩计算与发布 STEMA 考试成绩计算 STEMA 考试分数区间 STEMA 考试成绩百分比 STEMA 考试命题原则 STEMA 考试范围 科技素养组考试范围 推荐初级考生阅读 &#xff1…

✔ ★【备战实习(面经+项目+算法)】 11.2学习

✔ ★【备战实习&#xff08;面经项目算法&#xff09;】 坚持完成每天必做如何找到好工作1. 科学的学习方法&#xff08;专注&#xff01;效率&#xff01;记忆&#xff01;心流&#xff01;&#xff09;2. 每天认真完成必做项&#xff0c;踏实学习技术 认真完成每天必做&…
最新文章