系统编程中的进程的概念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)调度算法架构


相关文章
|
12天前
|
Go 调度 开发者
[go 面试] 深入理解进程、线程和协程的概念及区别
[go 面试] 深入理解进程、线程和协程的概念及区别
|
28天前
|
运维 关系型数据库 MySQL
掌握taskset:优化你的Linux进程,提升系统性能
在多核处理器成为现代计算标准的今天,运维人员和性能调优人员面临着如何有效利用这些处理能力的挑战。优化进程运行的位置不仅可以提高性能,还能更好地管理和分配系统资源。 其中,taskset命令是一个强大的工具,它允许管理员将进程绑定到特定的CPU核心,减少上下文切换的开销,从而提升整体效率。
掌握taskset:优化你的Linux进程,提升系统性能
|
23天前
|
弹性计算 Linux 区块链
Linux系统CPU异常占用(minerd 、tplink等挖矿进程)
Linux系统CPU异常占用(minerd 、tplink等挖矿进程)
30 4
Linux系统CPU异常占用(minerd 、tplink等挖矿进程)
|
8天前
|
Python
python Process 多进程编程
python Process 多进程编程
19 1
|
8天前
|
Linux Shell 调度
【在Linux世界中追寻伟大的One Piece】Linux进程概念
【在Linux世界中追寻伟大的One Piece】Linux进程概念
16 1
|
17天前
|
安全 开发者 Python
跨越编程孤岛,构建互联大陆:深入探索Python进程间通信的奥秘,解锁高效协作新纪元!
【8月更文挑战第3天】在编程领域,Python 因其简洁强大而广受欢迎。但随着项目规模扩大,单进程难以应对复杂需求,此时多进程间的协同就显得尤为重要。各进程像孤岛般独立运行,虽提升了稳定性和并发能力,但也带来了沟通障碍。为解决这一问题,Python 提供了多种进程间通信(IPC)方式,如管道、队列和套接字等,它们能有效促进数据交换和任务协作,使各进程像大陆般紧密相连。通过这些机制,我们能轻松搭建起高效的多进程应用系统,实现更加复杂的业务逻辑。
18 2
|
18天前
|
安全 开发者 Python
揭秘Python IPC:进程间的秘密对话,让你的系统编程更上一层楼
【8月更文挑战第1天】在系统编程中, 进程间通信 (IPC) 是连接独立进程的关键技术, 提升了系统的并发性和灵活性。Python 提供了丰富的 IPC 机制, 包括管道 (`Pipe`), 队列 (`Queue`), 共享内存 (`Value`, `Array`) 和套接字 (`Sockets`)。这些机制支持不同的应用场景, 如简单的父子进程通信或复杂的分布式系统构建。合理选择 IPC 方法可帮助开发者构建高效、可靠的多进程应用, 但同时也需注意同步和数据一致性等问题。
30 1
|
26天前
|
算法 调度 UED
操作系统中的进程调度策略及其对系统性能的影响
本文深入探讨了操作系统中进程调度的多种策略,包括先来先服务、短作业优先、优先级调度、轮转与多级队列等,并分析了它们对系统性能的具体影响。通过比较不同调度算法的效率和公平性,本文旨在为系统管理员提供选择合适调度策略的依据,以优化系统的整体表现。
|
7天前
|
并行计算 开发者 Python
解锁Python多进程编程的超能力:并行计算的魔法与奇迹,探索处理器核心的秘密,让程序性能飞跃!
【8月更文挑战第12天】在Python编程领域,多进程编程是一项关键技能,能有效提升程序效率。本文通过理论与实践结合,深入浅出地介绍了Python中的多进程编程。首先解释了多进程的概念:即操作系统中能够并发执行的多个独立单元,进而提高整体性能。接着重点介绍了`multiprocessing`模块,演示了如何创建和启动进程,以及进程间的通信方式,如队列等。此外,还提到了更高级的功能,例如进程池管理和同步原语等。通过这些实例,读者能更好地理解如何在实际项目中利用多核处理器的优势,同时注意进程间通信和同步等问题,确保程序稳定高效运行。
20 0
|
18天前
|
算法 Linux 调度
探索进程调度:Linux内核中的完全公平调度器
【8月更文挑战第2天】在操作系统的心脏——内核中,进程调度算法扮演着至关重要的角色。本文将深入探讨Linux内核中的完全公平调度器(Completely Fair Scheduler, CFS),一个旨在提供公平时间分配给所有进程的调度器。我们将通过代码示例,理解CFS如何管理运行队列、选择下一个运行进程以及如何对实时负载进行响应。文章将揭示CFS的设计哲学,并展示其如何在现代多任务计算环境中实现高效的资源分配。