You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

128 lines
13 KiB
Markdown

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# 62 | 知识串讲:用一个创业故事串起操作系统原理(一)
操作系统是一门体系复杂、知识点很多的课程,经过这么多节的讲解,你是否已经感觉自己被淹没在细节的汪洋大海里面了?没关系,从这一节开始,我们用五节的时间,通过一个创业故事,串起来操作系统的整个知识体系。
接下来,我们就来看主人公是如何从小马,变成马哥,再变成马总的吧!
## 小马创业选园区,开放标准是第一
小马最终还是决定走出大公司,自己去创业了。
他之所以这样决定有两个原因一方面大企业多年的工作经验让他练就了从前端到后端从Web到App从产品设计到测试交付的全栈能力。他很自信靠着这些能力闯荡江湖应该没什么问题另外一方面他听说姓“马”的创业成功的概率好像比较大。
创业首先要注册公司。注册公司就需要有一个办公地点。所以小马需要选择一个适合创业的环境。他找了很多地方发现有的地方政策倾斜大型企业有的地方倾斜本地企业有的地方鼓励金融创新。小马感觉这些地方都不太适合他这个IT男。
直到有一天小马来到了位于杭州滨江的x86创业园区。他被深深地吸引住了当然首要吸引他的就是园区工作人员的热情。
园区的工作人员向小马介绍了以下信息。
“首先咱们这个x86园区主要有三大特点一是标准二是开放三是兼容。像您这种创业者还是非常多的。初次创业不一定有经验园区提供标准的企业运行流程辅导。”
“另外,我们园区秉承完全开放的态度,对待各种各样的企业。不封闭,不保守。只要您符合国家的法律法规,我们都接纳。而且,整个园区是一种开放合作的生态,也有利于不同企业之间的协作。”
“再就是兼容。我们园区的流程和规则的设计都会兼容历史上的既有政策,既不会朝令夕改,也不会因为变化而影响您公司的运转。总而言之,来了咱们园区,您就埋头干业务就可以啦!”
小马显然对于x86园区的开放性十分满意于是追问道“您刚才说的企业运行流程辅导能详细介绍一下吗将来我这个企业在这个园区应该怎么个运转法儿
工作人员接着说“咱们这个园区毗邻全国知名高校每年都有大量的优秀毕业生来园区找工作这是企业非常重要的人才来源。葛优说了二十一世纪了人才是核心嘛。每年我们园区都会招聘大量的毕业生先进行一个月的培训合格毕业的可以推荐给您这种企业。这些人才啊就是咱们企业的CPU。”
“经过我们园区培训过的CPU人才具备了三种老板们喜欢的核心竞争力
第一,实干能力强,干活快,我们称为运算才能——也即指令执行能力;
第二,记忆力好,记得又快又准,我们称为数据才能——也即数据寄存能力;
第三,听话,自控能力强,可以多任务并发执行,我们称为控制才能——也即指令寄存能力。
到时候你可以根据需求看雇用多少个CPU人才
另外,人才得有个办公的地方,这一片呢,就是我们的办公区域,称为也就是内存区域。您可以包几个工位,或者包一片区域,或者几个会议室,让您公司的人才在里面做项目就可以了。这里面有的是地方,同时运行多少个项目都行。”
![](https://static001.geekbang.org/resource/image/3a/23/3afda18fc38e7e53604e9ebf9cb42023.jpeg)
跟着工作人员的介绍小马走在x86园区中看着这一片片的内存办公区脑子里已经浮现出将来热火朝天的办公场景了。
“也许不到半年的时间我肯定能够接两三个大项目招聘十个八个CPU员工。那项目A的员工就坐在这片内存办公区项目B的员工就坐在那片内存办公区。我根据积累的人脉将接到的项目写成一个一个的项目执行计划书里面是一行行项目执行的指令这些指令操作数据产生一些结果我们就可以叫程序啦。”小马这么想着。
“然后呢我把不同的项目执行计划书交给不同的项目组去执行。那项目组就叫进程吧两个项目组进程A和B会有独立的内存办公空间互相隔离程序会分别加载到进程A和进程B的内存办公空间里面形成各自的代码段。要操作的数据和产生的结果就放在数据段里面。“
“除此之外我应该找一个或者多个CPU员工来运行项目执行计划书我只要告诉他下一条指令在内存办公区中的地址经过训练的CPU员工就会很自觉地、不停地将代码段的指令拿进来进行处理。“
“指令一般是分两部分一部分表示做什么操作例如是加法还是位移另一部分是操作哪些数据。数据的部分CPU员工会从数据段里面读取出来记在脑子里然后进行处理处理完毕的结果再写回数据段。当项目执行计划书里面的所有指令都执行完毕之后项目也就完成了那就可以等着收钱啦。”
小马沉浸在思绪中久久不能自拔,直到工作人员打断了他的思绪:“您觉得园区如何?要不要入住呀?先租几个工位,招聘几个人呢?“
小马想了想,说道:“园区我很满意,以后就在您这里创业了,创业开始,我先不招人,自己先干吧。”
## 启动公司有手册,获取内核当宝典
工作人员说“感谢您入驻咱们创业园区由于您是初次创业这里有一本《创业指导手册》在这一本叫作BIOS的小册子上有您启动一家公司的通用流程你只要按照里面做就可以了。”
小马接过BIOS小册子开始按照里面的指令启动公司了。
创业初期小马的办公室肯定很小只有有1M的内存办公空间。在1M空间最上面的0xF0000到0xFFFFF这64K映射给ROM通过读这部分地址可以访问这个BIOS小册子里面的指令。
创业指导手册第一条BIOS要检查一些系统的硬件是不是都好着呢。创业指导手册第二条要有个办事大厅只不过小马自己就是办事员。因为一旦开张营业就会有人来找到这家公司因而基本的中断向量表和中断服务程序还是需要的至少要能够使用键盘和鼠标。
BIOS这个手册空间有限只能帮小马把公司建立起来公司如何运转和经营就需要另外一个东西——《企业经营宝典》因而BIOS还要做的一件事情就是帮助小马找到这个宝典然后让小马以后根据这个宝典里面的方法来经营公司这个《企业经营宝典》就是这家公司的内核。
![](https://static001.geekbang.org/resource/image/0a/6b/0a29c1d3e1a53b2523d2dcab3a59886b.jpeg)
运营一个企业非常的复杂因而这本《企业经营宝典》也很厚BIOS手册无法直接加载出来而需要从门卫开始问起不断打听这本内核的位置然后才能加载他。
门卫只有巴掌大的一块地方在启动盘的第一个扇区512K的大小我们通常称为MBRMaster Boot Record主引导记录/扇区。这里保存了boot.imgBIOS手册会将他加载到内存中的0x7c00来运行。
boot.img做不了太多的事情。他能做的最重要的一个事情就是加载grub2的另一个镜像core.img。
引导扇区就是小马找到的门卫,虽然他看着档案库的大门,但是知道的事情很少。他不知道宝典在哪里,但是,他知道应该问谁。门卫说,档案库入口处有个管理处,然后把小马领到门口。
core.img就是管理处他们知道的和能做的事情就多了一些。core.img由lzma\_decompress.img、diskboot.img、kernel.img和一系列的模块组成功能比较丰富能做很多事情。
boot.img将控制权交给diskboot.img后diskboot.img的任务就是将core.img的其他部分加载进来先是解压缩程序lzma\_decompress.img再往下是kernel.img最后是各个模块module对应的映像。
管理处听说小马要找宝典,知道他将来是要做老板的人。管理处就告诉小马,既然是老板,早晚都要雇人干活的。这不是个体户小打小闹,所以,你需要切换到老板角色,进入保护模式,把哪些是你的权限,哪些是你可以授权给别人的,都分得清清楚楚。
这些,小马都铭记在心,此时此刻,虽然公司还是只有他一个人,但是小马的眼界放宽了,能够管理的内存空间大多了,也开始区分哪些是用户态,哪些是内核态了。
接下来kernel.img里面的grub\_main会给小马展示一个《企业经营宝典》的列表也即操作系统的列表让小马进行选择。经营企业的方式也有很多种到底是人性化的还是强纪律的这个时候你要做一个选择。
![](https://static001.geekbang.org/resource/image/f1/b6/f1be2db375f1503af85535dec5efe9b6.png)
在这里小马毫不犹豫地选择了《狼性文化》操作系统至此grub才开始启动《狼性文化》操作系统内核。
拿到了宝典的小马,开始越来越像一个老板了。他要开始以老板的思维,来建立这家公司。
## 初创公司有章法,请来兄弟做臂膀
这注定是一个不眠夜,办公室里面一片漆黑中,唯一亮着的台灯下,小马独自捧着《企业经营宝典》仔细研读,读着读着,小马若有所思,开始书写公司内核的初始化计划。
![](https://static001.geekbang.org/resource/image/75/cd/758c283cf7633465d24ab3ef778328cd.jpeg)
公司首先应该有个项目管理部门咱们将来肯定要接各种各样的项目因此项目管理体系和项目管理流程首先要建立起来。虽然现在还没有项目但是小马还是弄了一个项目模板init\_task。这是公司的第一个项目进程是项目管理系统里面的项目列表中的第一个我们能称为0号进程。这个项目是虚拟的不对应一个真实的项目也就是进程
项目需要项目管理进行调度,还需要制定一些调度策略。
另外为了快速响应客户需求为了各个项目组能够方便地使用公司的公共资源还应该有一个办事大厅。这里面可以设置了很多中断门Interrupt Gate用于处理各种中断以便快速响应突发事件还可以提供系统调用为项目组服务。
如果项目接得多了,为了提高研发效率,对项目内容进行保密,就需要封闭开发,所以将来会有很多的会议室,因而还需要一个会议室管理系统。
项目的执行肯定会留下很多文档,这些是公司的积累,将来的核心竞争力,一定要好好管理,因而应该建立一个项目档案库,也即文件系统。
随着思绪的展开,小马奋笔疾书,已经写了满满的几页纸,小马顿感经营一个公司还是挺复杂的,一旦项目接多了肯定忙不过来。俗话说得好,“一个好汉三个帮”,小马准备找两个兄弟来一起创业。
小马想到的第一个人,是自己的大学室友,外号“周瑜”。大学一毕业,周瑜就转项目管理了,在一家大公司管理着大型项目。将来外部接了项目,可以让他来管。小马想到的第二个人,是自己上一家公司的同事,外号“张昭”,是他们总经理的好帮手,公司的流程、人事、财务打理得都清清楚楚,将来公司内部要运行得井井有条,也需要这样一个人。
第二天,小马请周瑜和张昭吃饭,邀请他们加入他的创业公司。小马说,公司要正规运转起来,应该分清内外,外部项目需要有人帮忙管理好——也就是用户态,内部公司的核心资源也需要管理好——也就是内核态。现在我一个人忙不过来,需要两位兄弟的加入,周瑜主外,张昭主内,正所谓,内事不决问张昭,外事不决问周郎嘛。
三个人相谈甚欢,谈及往日友谊、未来前景、上市敲钟……
第三天周瑜早早就来到公司开始了他的事业。小马拜托周瑜做的第一件事情是调用kernel\_init运行1号项目进程。这个1号项目会在用户态运行init项目进程。这是第一个以外部项目的名义运行的之所以叫init就是做初始化的工作周瑜根据自己多年的项目管理经验将这个init项目立为标杆以后所有外部项目的运行都要按照他来是外部项目的祖先项目。
下午张昭也来到了公司小马拜托张昭做的第一件事情是调用kthreadd运行2号项目进程。这个2号项目是内核项目的祖先。将来所有的项目都有父项目、祖先项目会形成一棵项目树。公司大了之后周瑜和张昭做的公司VP级别的任务就可以坐在塔尖上了。
![](https://static001.geekbang.org/resource/image/4d/16/4de740c10670a92bbaa58348e66b7b16.jpeg)
好了,这一节小马终于将公司的架子搭起来了,兄弟三人如当年桃园三结义一样,开始自己的创业生涯,小马的这家公司能不能顺利接到项目呢?欲知后事,且听下回分解。
![](https://static001.geekbang.org/resource/image/8c/37/8c0a95fa07a8b9a1abfd394479bdd637.jpg)