大家好,我是小风哥,有很多同学问能不能发下之前的文章,后续我会找一些之前阅读量不错的发下,本文首发于2020年8月 。
一切要从CPU说起你可能会有疑问,讲多线程为什么要从CPU说起呢?原因很简单,在这里没有那些时髦的概念,你可以更加清晰的看清问题的本质 。
CPU并不知道线程、进程之类的概念 。
CPU只知道两件事:
1. 从内存中取出指令
2. 执行指令,然后回到1
文章插图
图片
你看,在这里CPU确实是不知道什么进程、线程之类的概念 。
接下来的问题就是CPU从哪里取出指令呢?答案是来自一个被称为Program Counter(简称PC)的寄存器,也就是我们熟知的程序计数器,在这里大家不要把寄存器想的太神秘,你可以简单的把寄存器理解为内存,只不过存取速度更快而已 。
PC寄存器中存放的是什么呢?这里存放的是指令在内存中的地址,什么指令呢?是CPU将要执行的下一条指令 。
文章插图
图片
那么是谁来设置PC寄存器中的指令地址呢?
原来PC寄存器中的地址默认是自动加1的,这当然是有道理的,因为大部分情况下CPU都是一条接一条顺序执行,当遇到if、else时,这种顺序执行就被打破了,CPU在执行这类指令时会根据计算结果来动态改变PC寄存器中的值,这样CPU就可以正确的跳转到需要执行的指令了 。
聪明的你一定会问,那么PC中的初始值是怎么被设置的呢?
在回答这个问题之前我们需要知道CPU执行的指令来自哪里?是来自内存,废话,内存中的指令是从磁盘中保存的可执行程序加载过来的,磁盘中可执行程序是编译器生成的,编译器又是从哪里生成的机器指令呢?答案就是我们定义的函数 。
文章插图
图片
注意是函数,函数被编译后才会形成CPU执行的指令,那么很自然的,我们该如何让CPU执行一个函数呢?显然我们只需要找到函数被编译后形成的第一条指令就可以了,第一条指令就是函数入口 。
现在你应该知道了吧,我们想要CPU执行一个函数,那么只需要把该函数对应的第一条机器指令的地址写入PC寄存器就可以了,这样我们写的函数就开始被CPU执行起来啦 。
你可能会有疑问,这和线程有什么关系呢?
从CPU到操作系统上一小节中我们明白了CPU的工作原理,我们想让CPU执行某个函数,那么只需要把函数对应的第一条机器执行装入PC寄存器就可以了,这样即使没有操作系统我们也可以让CPU执行程序,虽然可行但这是一个非常繁琐的过程,我们需要:
- 在内存中找到一块大小合适的区域装入程序
- 找到函数入口,设置好PC寄存器让CPU开始执行程序
文章插图
图片
机器指令需要加载到内存中执行,因此需要记录下内存的起始地址和长度;同时要找到函数的入口地址并写到PC寄存器中,想一想这是不是需要一个数据结构来记录下这些信息:
struct *** {void* start_addr;int len;void* start_point;...};
接下来就是起名字时刻 。这个数据结构总要有个名字吧,这个结构体用来记录什么信息呢?记录的是程序在被加载到内存中的运行状态,程序从磁盘加载到内存跑起来叫什么好呢?干脆就叫进程(Process)好了,我们的指导原则就是一定要听上去比较神秘,总之大家都不容易弄懂就对了,我将其称为“弄不懂原则” 。
就这样进程诞生了 。
CPU执行的第一个函数也起个名字,第一个要被执行的函数听起来比较重要,干脆就叫mAIn函数吧 。
完成上述两个步骤的程序也要起个名字,根据“弄不懂原则”这个“简单”的程序就叫操作系统(Operating System)好啦 。
就这样操作系统诞生了,程序员要想运行程序再也不用自己手动加载一遍了 。
现在进程和操作系统都有了,一切看上去都很完美 。
从单核到多核,如何充分利用多核人类的一大特点就是生命不息折腾不止,从单核折腾到了多核 。
推荐阅读
- cad如何输出高清图片?这些方法了解一下
- 最高年薪30万! 合肥一上市公司开启招聘模式!
- 聂远夫妇好宠女儿,9岁天天玩偶堆积如山价值不菲,超高颜值吸睛
- 高铁小刀规定几厘米 坐动车可以带小刀吗
- 99版1元纸币,很多人都认为收藏价值很高,实际上是真的吗
- 应届生应聘助理岗位,期待薪资过高被HR嘲讽,评论区看法很一致
- 玫瑰如何扦插成活率高一些 玫瑰如何扦插成活率高
- 女篮第一女神谈恋爱,身材傲人颜值高,网友:比李梦漂亮
- 粽子的热量 粽子的热量高吗减肥能吃吗
- 佟丽娅40岁生日,7岁儿子举气球为她庆祝,朵朵身高猛长体型壮实