系统编程中的进程的概念No.1

简介: 系统编程中的进程的概念No.1

引言:

北京时间2023/1/28,本小编04年1月9日出生,今天第一次理解到进程的概念,所以我们接下来就学习一下什么是进程以及和进程相关的一些知识。首先我们想要了解进程以及其相关的知识,我们要先理解一下其它方面的知识,进而便与我们更好的理解进程。所以我们接下来就开始学习一下有关硬件层面的知识,了解一下我们的电脑是怎样构成的。


从硬件开始学进程

1.讲到硬件,我相信大家和我一样,第一时间想到的就是我们的电脑本身,一般可以脱口而出的有键盘、显示屏、笔记本外壳、触摸板、主板,当然那些对电脑了解更深一点的同学还能说有电脑内部的磁盘、硬盘、CPU、显卡、内存等。

当然有的同学会说硬盘和磁盘不都是用来存储数据的吗?这两个不是同一个东西吗?

如果有这个问题的同学,请参考如下链接,带你分分钟搞定磁盘和硬盘的区别

磁盘和硬盘的区别

如果有同学不了解主板是什么,可以参考以下链接

主板详情


2.可以说主板是我们的笔记本电脑中最关键的硬件了,因为不管是我们的CPU、显卡、存储器还是各种的配套设施和系统,这些硬件都是依附在我们的主板之上的,所以我们的电脑就是一个依靠着我们键盘之下的主板就行使用的。


3.当然以上内容是带我们从电脑层面去看硬件,我们只知道有这些硬件,但是我们却不知道这些硬件是干什么的?为什么一定要有这些硬件?没有这些硬件中的某一个会怎样?这些硬件是如何构成我们的电脑体系的?这些硬件是单独运行还是合作运行?这些就是想要了解进程,我们需要解决的知识。


4.此处有的同学会想,为什么一定需要学习这些知识呢?我不可以直接花这些时间去把进程多学习几遍吗?这个问题的答案,我也无法给到,可能这也就是我为什么会写这篇博客的原因吧!进程是一个我们从来没有接触过的,并且涉及的知识面较广的一个知识点,我们一定要踏实的学,不然理解进程就容易导致似懂非懂的感觉。我本来也不打算总结这篇博客的,但是我发现了有的大佬是有总结成博客的,从而激发了我,我觉得确实是很有必要的。


5.所以你们接着往下看,我接着往下写


6.解决电脑中硬件之间关系的问题,我们通过一个上世纪就赫赫有名的理论体系来解决


冯诺依曼体系结构

冯诺依曼体系结构不是我用三言两语就可以说明白的,我们只能用一个体系结构图来进行概述,因为一个快100年过去还依然经典并且得到世界认可,在当今任然广泛使用的东西,不是我这个二愣子可以亵渎的,具体想要深入了解的同学可以参考链接冯诺依曼体系结构链接。


体系结构图:

61.png

参考上图我们进行冯诺依曼体系结构理解

冯若依曼体系 电脑硬件
输入设备: 键盘、摄像头、话筒、网卡、磁盘(外部储存设备)等
存储器: 内存(内部储存设备)
运算器、控制器: CPU(中央处理器)
输出设备: 显示屏、声卡、音响、网卡、磁盘(外部储存设备)等


此时我们对冯诺依曼体系中的输入设备、存储器、运算器、控制器、输出设备进行了与我们笔记本电脑中的硬件结合理解,现在我们对冯诺依曼体系就有了就一定的理解。

当然我相信大部分的同学应该对这些硬件设备都是比较了解或者说是听说过,但是我想肯定有大部分同学从小就对一件事情很好奇,就是为什么可以和远在天边的朋友打电话和发消息呢?这个位置我发起一个小投票。我第一时间想到的是网卡,会不会是因为有了网卡,我就可以实现这方面的功能了呢?所以我相信很多同学是不知道网卡具体到底是个什么东西的,所以有兴趣的同学可以参考以下链接:详解网卡,分分钟让你知道什么是网卡

不感兴趣的同学我也把网卡的主要功能给各位贴在这了哈!


61.png

了解了网卡也算是我们今天学到了一些有意思的东西吧!一天学一点,哈哈哈哈!乐观的我!


我们在这个位置先不对冯诺依曼体系进行进一步分析,我们先来了解一下我们的内存和磁盘

我相信大家对磁盘都是非常的了解的,因为我们在学校,每天不管是老师布置的word作业还是ppt作业,还是下载的各种软件,亦或者是每天写的代码,这些东西在你的电脑上都有相应的文件夹来存储,如果你是一个有强迫症的人,那么你的磁盘中的文件夹肯定是仅仅有条的,你的各种相关的文件和软件安装包你肯定是知道在什么什么位置的(这里我首先给你点个赞),所以我们对磁盘的理解肯定是比对内存的理解更加的深刻的,谁让我们天天都在使用磁盘呢?然而内存呢?你在你的电脑上见过内存吗?


如下图:是你可以在你自己电脑上见到内存情况的两种方式(快捷键Win+D,然后打开任务资源管理器)


62.png


63.png

深入学习

此时我们知道了上述知识,我们就来深入一点点的学习硬件和冯诺依曼体系结构


首先我们来复刻一下我们以前可能存在的一些认知


我相信很多同学都听说过CPU是从内存中获取数据的,我们的数据一定要写入到内存中才可以被CPU识别,被操作系统执行,并且再往后一步,有的同学肯定听说过有关缓存和寄存器的知识

,说CPU从寄存器中获取数据比内存中获取数据是更快的,这一系列的知识在我们同学中的脑海中肯定是都有印象的,并且印象应该挺深刻的。但是我相信有的同学,无论是根本没听说过,还是听说过忘记了的,还是认识比较浅的,都可以进入下链接,深入了解一下CPU和内存的那点破事

内存、缓存和寄存器的关系和区别

并且我相信,我们对CPU一定要从内存中获取数据的原因的理解是这样的:因为CPU的计算速度非常快,而我们的键盘输入数据非常慢,如果CPU直接从键盘获取数据就会导致电脑的计算速度变得非常的慢,并且有的同学可能还会想到曾经的那个木桶原理。


64.png

开始的时候我相信大部分同学都觉得是非常的有道理的,一个一个的心里面想着:sogasinei,sogasinei,大大的呦西

但是我又相信很多同学过了一会之后,会有一个疑问,如果按照这个原理,我先把我键盘中输入的数据放到内存里面,然后CPU再从我的内存中拿数据,在这个我们理解的这个线性过程中,前后的速度不是是一样的吗?(此原理类比成生活中的例子:三个同学接力比赛,路程固定,一个慢,两个快和两个同学接力比赛,路程固定,一个慢,一个快进行比较),可以发现,最后到达终点的时间应该是不会相差太多的。当我们有这个疑问的时候,我们发现凭借着我们当前所学到的知识,并不可以很好的理解和解决这个问题,所以感兴趣的同学可以参考以下链接,解决这个问题。

键盘和CPU、寄存器的关系


总:所以我们在此总结发现,CPU其实不单单是和我们的内存有关系的,其实还是起着很多的不为人知的作用,具体可能就是我们传说中的 IO

现在如果对IO感兴趣的同学可以参考以下链接:如何理解IO


有了前人对这些知识和结构的应用,我们就拥有了目前你脸上的,这个物美价廉的笔记本电脑啦!

所以无论你的电脑是什么品牌,什么处理器,什么显卡,就算是 i9 -13代 还是3090 ,你的笔记本电脑也只是一个性价比至上的产品,当然除非你告诉我你有512G的寄存器!


深入理解内存

我相信当我们看到下面这幅图的时候,大家都有一个疑问,内存储器是什么?

65.png


显然,内存储器就是我们的内存,所以我们发现我们的内存还可以分为ROM 和 RAM两种

感兴趣的同学进入以下链接:深入理解内存1或者深入理解内存2


来到这里我们发现我们此时已经了解了很多的有关硬件的知识(掌握不敢说),只能说了解,你会发现,原来我们以前认知中的一个复杂的电脑也不过如此,打电话、发消息也不过如此,电脑的运行原理也不过如此(夸张的写一下),然后我们带着这么多,这么牛的知识,来搞定一个进程肯定也洒洒水啦!所以接下来具体讲解一下我们的冯若依曼,从而更好的理解硬件。

具体的冯若依曼体系理解

我们以一个具体的情景来理解

情景:你要表白一个女生


66.png


你会发现,你发消息的过程是一个非常神奇的过程,我们具体凭借冯若依曼体系来理解一下消息是如何在该体系结构中流动的

微信/QQ


67.png


首先我们要经过一系列的思想斗争之下,脑袋中的两个小恶魔彼此争论,但是发现你还是不知道怎么办,最终你在你的身体激素的刺激下,你做出了选择。你紧张的打开了电脑,此时你的电脑也发现了你的紧张,开始忙忙碌碌的运作起来,各种硬件随时准备待命,然后你点击相应的聊天软件,就在这点击的过程你的操作系统检测到了这一行为,马不停蹄的就把你的聊天软件给加载到了内存中,此时你的硬件变得更加的紧张,并且你的软件也发现了你的紧张,软件也不敢偷懒,快速的运行起来,等待你输入你想要发的消息,你从键盘中准备打字,你手抖并且颤颤巍巍的输入了"xxx" 到了聊天框中,此时因为聊天软件已经被加载到了内存中,所以你输入的消息直接就被聊天软件快速的也加载到了相应的内存处,对内存说"这个烫手的山芋你赶紧的给我拿去,不要待会出了事,我要背锅",内存听到这句话,心里一紧,啊!完了完了,我要完了!谁来救救我!此时我们的"百米飞人",“风一般的男子”,外籍华人CPU出现了,对内存说,小妹妹,我来救你,不要怕!快把炸弹(消息)给我,内存听到这句话,顿时喜笑颜开,刚准备把炸弹给传递出去,却没想到CPU这个色狼,已经把手伸到了自己的被窝里,在CPU一顿猛如虎的操作之后,终于醉翁之意不在酒的把炸弹放进了自己的工具包中,然后自豪的说,不就是一个炸弹吗?看给你们吓的,在CPU的一顿操作之后(加密操作),炸弹就跟被拆解了一般,变得非常的安全,这下没人可以看到主人羞羞的消息啦!哈哈哈!不愧是主人手下的第一神U,一夫当关,万夫莫开!此时身为第一神将的CPU认为自己功高盖主,把安全的炸弹又还给了内存妹妹的同时,对其又进行了一系列的操作,内存妹妹委屈,但却又不知道跟谁诉说,此时内存妹妹也心生一计,把显示屏小哥哥和网卡小哥哥给叫到了一起,把定情信物(炸弹)一分为二,给了二人一人一份,此时我也就可以在自己的聊天软件上看到我想要发送的消息了,但是此时网卡生气了,心想,内存妹妹心里怎么可以还有别人,我不服,于是一气之下就把定情信物(炸弹)给了混世魔王(网络),此时的混世魔王根据地址找到了另一个更高更帅的网卡哥哥,网卡哥哥一看手中的炸弹,心想以我的能力还看不到内部数据,所以就把它给了内存,内存说,我也看不了,内存就把它给了CPU,CPU说,哈哈哈,你们都是……,看我的,一通操作(解密),看到了内部的数据,CPU惊呼,内存内存,快来,我这有大宝贝,你快点拿走,然后转交给显示器那个混小子,不然你我都可能有灭顶之灾,急呼,快快快!此时我的消息就在女方的电脑屏幕上显示了。预知后续剧情,请点赞回复666。


综上所述:数据的流动一定是遵守我们的冯若依曼体系的,并且我们的CPU是不直接和外设打交道的,而是只和内存打交道,外设也只会和内存打交道。


从软/硬件层面看操作系统

1.我相信大家都知道Windows是个什么东西,但是我也相信大家不知道Windows是个什么东西,所以Windows到底是个什么东西呢?

可以这么说,我只知道我的电脑是由各种硬件和各种软件构成的,并且我知道我的电脑上有Windows这个东西,所以得出结论,从软件和硬件的角度看,Windows是一个软件。这个想法我觉得很有道理,所以我们可以从Windows是个什么,进而知道操作系统是个什么。


2.操作系统其实就是一款对软硬件进行管理的软件(我这么说是不是显得我很有文化)


3.所以我们设计操作系统的目的,应该呼之欲出了吧!(操作系统对下,对硬件和软件进行管理,对上,给用户提供安全、高效、稳定的执行环境)


以上就是操作系统的表层理解


深入操作系统

我们如果想要深入理解操作系统,那么就要把操作系统是什么给理解明白,显然操作系统就是一款对软硬件进行管理的软件 ,画关键词语,小学语文老师常常让我们干的事情,你认为那个词是我们深入操作系统最重要的。我觉得就算是叫钟xx(从小语言能力有障碍的一个人),她都能答对,不错,就是管理二字。


从硬件层面深入管理二字

为什么要深入管理,我就不多说了,因为我们……

此处如果我们从管理的概念来理解管理,那么是不好理解的,所以我们就跟学习进程一样,我们从别的角度来学习什么是管理,我们接下来就再通过一个学校中的情景来了解一下管理。

情景:开学啦!开学啦!我们开学啦!简简单单,听到这个消息,我们可以想到,肯定有两种人:

一种是想开学的人

一种是不想开学的人

想开学的人,一般有几种原因,想和某些人见面了(同性:舍友,异性:xxx),期末考考的非常的好,家里很无聊等。不想开学的人逆向思考。当我们的期末考试没有考好的时候,是非常的不想开学的,因为只要你一开学,你就会被辅导员叫过去谈话(场面一度复杂)。并且当你的期末考试没有考好的时候,你会发现那些奖学金之类的东西就跟你无缘了,为什么呢?因为假如我们把奖学金的发放权力给到校长,校长此时想要从我们当中选择一个成绩最好的学生发放奖学金,作为奖励。此时校长会怎么想,怎么做呢?当然校长就会叫辅导员把学生的成绩做一个统计,得到所有学生的成绩之后校长再根据这些成绩,通过对这些成绩的排序和组织,从而整理好所有的成绩,然后选择出成绩最好的同学,最后假如我们的奖学金就给到了钟xx同学(一个品学兼优的好学生)


从上述情景我们提取出我们需要的词语进行理解


校园中 计算机中
校长: 操作系统
同学: 软硬件
辅导员: 驱动程序
成绩: 数据


所以我们可以得出结论,在计算机中,我们的操作系统是不会直接和我们的硬件交互的,而是和驱动程序进行交互。


总:这也就涉及到我们为什么要学数据结构这门课,因为我们生活中的一切,都可以类比学校的形式,而我们学校的形式又和我们的计算机中的模式如出一辙,从而我们以后使用计算机解决生过中的问题,本质上就还是在解决数据结构中的问题啦!无论是数据管理还是数据处理。

并且此时涉及几个问题

我们为什么要进行数据的排序?

我们应该怎样存储这些数据?

我们如何对存储的数据进行排序?

从这几个问题我们就可以引出我们的终极目标,管理的本质


管理的本质

管理的本质:先描述,再组织

先描述:指的就是我们应该把数据用什么样的方法存储起来(例:用结构体的方式一个一个数据的存起来)

再组织:指的就是我们应该怎样去处理这些被存储起来的数据(例:用单链表的形式把这一个一个的结构体给链接在一起)


从软件层面深入管理二字

情景:我们去银行存钱(自己想象银行存钱情景,这里不多做赘述)

我们可以发现一个现象,在银行存钱是不可以直接把我们的钱放到金库中的,只能通过一个一个的柜台我们才可以把我们的前间接的放到金库中去。


所以通过这个现象我们再来理解操作系统和软件的关系,就会发现答案呼之欲出了。


我们的操作系统的系统调用,就是把自己的一些接口暴露给我们,我们只能使用相应的功能的接口,不能访问操作系统本身,通过以接口的形式使用操作系统,完成相应的操作。 并且因为我们的操作系统是C语言写的,所以此时的这些接口就是我们的一个一个的函数,这些函数就可以执行我们相应的功能,为用户提供相应服务。

但是此时的这些系统调用的接口,就像是我们在银行进行的存钱操作,不是人人都会(台阶还比较高,要学了才会),所以此时就有人帮我们对这些操作系统的接口进行二次开发,把其弄的更优,这就是面向用户的接口二次开发,也就是我们的图形化界面的由来(例:早期qq消息的发送和接收之类的),所以面对接口进行二次开发,得到图形化界面,我们就得到当今电脑中的Windows操作系统。


如图:


68.png


结合这幅图,我们就可以知道我们想要通过软件和硬件交换,我们就离不开我们的操作系统,我们的操作系统就是汉堡包中的那个不可或缺的肉肉!


总结:我们学习完了操作系统和相关的软硬件的知识,接下来我们就可以更好更轻松的学习我们有关进程的知识啦!

以下是我们将要学习的知识:


1.深入理解进程概念,了解PCB

2.学习进程状态,学会创建进程,掌握僵尸进程和孤儿进程,及其形成原因和危害

3.了解进程调度,Linux进程优先级,理解进程竞争性和独立性,理解并发和并行

4.理解环境变量,熟悉常见环境变量及相关指令,getenv/setenv函数

5.理解C内存空间分配规律,了解进程内存映像和应用程序区别,认识地址空间

6.Linux2.6 krenel,O(1)调度算法架构


相关文章
|
7月前
|
存储 Linux API
【Linux进程概念】—— 操作系统中的“生命体”,计算机里的“多线程”
在计算机系统的底层架构中,操作系统肩负着资源管理与任务调度的重任。当我们启动各类应用程序时,其背后复杂的运作机制便悄然展开。程序,作为静态的指令集合,如何在系统中实现动态执行?本文带你一探究竟!
【Linux进程概念】—— 操作系统中的“生命体”,计算机里的“多线程”
|
4月前
|
Unix Linux
对于Linux的进程概念以及进程状态的理解和解析
现在,我们已经了解了Linux进程的基础知识和进程状态的理解了。这就像我们理解了城市中行人的行走和行为模式!希望这个形象的例子能帮助我们更好地理解这个重要的概念,并在实际应用中发挥作用。
95 20
|
3月前
|
存储 Linux Shell
Linux进程概念-详细版(二)
在Linux进程概念-详细版(一)中我们解释了什么是进程,以及进程的各种状态,已经对进程有了一定的认识,那么这篇文章将会继续补全上篇文章剩余没有说到的,进程优先级,环境变量,程序地址空间,进程地址空间,以及调度队列。
67 0
|
3月前
|
Linux 调度 C语言
Linux进程概念-详细版(一)
子进程与父进程代码共享,其子进程直接用父进程的代码,其自己本身无代码,所以子进程无法改动代码,平时所说的修改是修改的数据。为什么要创建子进程:为了让其父子进程执行不同的代码块。子进程的数据相对于父进程是会进行写时拷贝(COW)。
73 0
|
6月前
|
弹性计算 运维 监控
基于进程热点分析与系统资源优化的智能运维实践
智能服务器管理平台提供直观的可视化界面,助力高效操作系统管理。核心功能包括运维监控、智能助手和扩展插件管理,支持系统健康监控、故障诊断等,确保集群稳定运行。首次使用需激活服务并安装管控组件。平台还提供进程热点追踪、性能观测与优化建议,帮助开发人员快速识别和解决性能瓶颈。定期分析和多维度监控可提前预警潜在问题,保障系统长期稳定运行。
231 17
|
6月前
|
存储 Linux 调度
【Linux】进程概念和进程状态
本文详细介绍了Linux系统中进程的核心概念与管理机制。从进程的定义出发,阐述了其作为操作系统资源管理的基本单位的重要性,并深入解析了task_struct结构体的内容及其在进程管理中的作用。同时,文章讲解了进程的基本操作(如获取PID、查看进程信息等)、父进程与子进程的关系(重点分析fork函数)、以及进程的三种主要状态(运行、阻塞、挂起)。此外,还探讨了Linux特有的进程状态表示和孤儿进程的处理方式。通过学习这些内容,读者可以更好地理解Linux进程的运行原理并优化系统性能。
224 4
|
6月前
|
存储 算法 数据处理
进程基础:概念、状态与生命周期
进程是操作系统进行资源分配和调度的基本单位,由程序段、数据段和进程控制块(PCB)组成。线程是进程中更小的执行单元,能独立运行且共享进程资源,具有轻量级和并发性特点。进程状态包括就绪、运行和阻塞,其生命周期分为创建、就绪、运行、阻塞和终止阶段。
336 2
|
8月前
|
监控 搜索推荐 开发工具
2025年1月9日更新Windows操作系统个人使用-禁用掉一下一些不必要的服务-关闭占用资源的进程-禁用服务提升系统运行速度-让电脑不再卡顿-优雅草央千澈-长期更新
2025年1月9日更新Windows操作系统个人使用-禁用掉一下一些不必要的服务-关闭占用资源的进程-禁用服务提升系统运行速度-让电脑不再卡顿-优雅草央千澈-长期更新
622 2
2025年1月9日更新Windows操作系统个人使用-禁用掉一下一些不必要的服务-关闭占用资源的进程-禁用服务提升系统运行速度-让电脑不再卡顿-优雅草央千澈-长期更新
|
9月前
|
存储 监控 Linux
嵌入式Linux系统编程 — 5.3 times、clock函数获取进程时间
在嵌入式Linux系统编程中,`times`和 `clock`函数是获取进程时间的两个重要工具。`times`函数提供了更详细的进程和子进程时间信息,而 `clock`函数则提供了更简单的处理器时间获取方法。根据具体需求选择合适的函数,可以更有效地进行性能分析和资源管理。通过本文的介绍,希望能帮助您更好地理解和使用这两个函数,提高嵌入式系统编程的效率和效果。
393 13
|
6月前
|
Linux 数据库 Perl
【YashanDB 知识库】如何避免 yasdb 进程被 Linux OOM Killer 杀掉
本文来自YashanDB官网,探讨Linux系统中OOM Killer对数据库服务器的影响及解决方法。当内存接近耗尽时,OOM Killer会杀死占用最多内存的进程,这可能导致数据库主进程被误杀。为避免此问题,可采取两种方法:一是在OS层面关闭OOM Killer,通过修改`/etc/sysctl.conf`文件并重启生效;二是豁免数据库进程,由数据库实例用户借助`sudo`权限调整`oom_score_adj`值。这些措施有助于保护数据库进程免受系统内存管理机制的影响。