seegongsik
我的单词本
操作系统

内核:统管一切的操作系统之核

上一讲说过,程序到正式窗口(系统调用)去请求,一越过窗口就短暂地切到内核态。可在那窗口背后,凭着那么强的权限实际把活干完的,究竟是谁呢?而且那个模式,为什么偏偏叫内核态呢?今天,我们就正面见一见操作系统最深的中心,那个始终守在原地的核。

01

窗口背后是谁

回想一下上一讲。程序被关在围栏里,碰不到硬件,一旦需要干活,就到叫作系统调用的正式窗口去请求。一越过窗口,CPU 就短暂地切到内核态,把活处理好,再回来。那时候,我们故意有一样没去细看,就是在窗口背后,凭那股强权限实际把活干完的那个存在。窗口不过是个接收请求的入口罢了,在它里面,另有一个真正去读磁盘、往屏幕上点点的干活人。这个干活人的名字,正是内核。

程序
系统调用窗口
?

点窗口,看看它背后。藏在系统调用窗口背后的核,内核,露出来了。实际处理请求的,正是这个内核。

内核露出来了。强大的内核态这个名字,现在也说得通了。那股强权限,正是这个内核干活时所用的力,所以才用了那个名字。可这个内核,是只在请求来的时候才短暂出现一下、随即消失吗?不是的。下面,我们就看看内核从什么时候到什么时候守在那个位置上。

02

内核始终醒着

我们用的程序,时开时关。打开音乐应用又关掉,启动浏览器又关上。应用在需要时载入内存,关掉就退出内存。可内核不一样。开机的那一刻,它最先在内存里占好位置,直到关掉电源,一次也不离开那个位置。无论多少应用进进出出,内核始终在它们底下醒着。想想也理所当然。把应用载入内存、再撤下来,决定把 CPU 给谁,这一切,干活的都是内核。内核要是睡了,就没有谁来干这些活了。

内核(常驻)始终开着
应用开开关关,可内核格始终亮着。

点各个应用,开开关关。应用格会亮会灭,可最下面的内核格,始终亮着不变。内核从开机到关机,一直驻留在内存里。

应用闪烁,内核格却稳稳地亮着。内核就像后台升降幕布的人。演员进进出出,可那个人整场都守在岗位上。那么,内核始终在那个位置上,到底干些什么呢?其实,我们在这个领域学过的几乎所有活,一直都在内核手里转着。下面,我们就把它们汇到一处。

03

一切资源的指挥塔

一路走过这个领域,我们学了不少东西。决定先把 CPU 给谁的调度、装得比真内存还大的虚拟内存、认出新装置的驱动、整理文件的体系,还有看谁能干什么的权限确认。那时候是分开学的,可实际上,把这一切真正做成的手,只有一只。就是内核。内核,就像机场的指挥塔。塔在一处决定每架飞机几时起降、用哪条跑道;同样,内核也一手统管:CPU、内存、装置、文件这些资源,该给谁、给多少。

内核
点一个资源。无论点哪个,都由内核来管。

把资源一个个点点看。无论点 CPU 调度、内存、驱动、文件还是权限,统管它的,都是中间的内核,会被高亮出来。一切资源,都在内核这一只手里转。

无论点哪个资源,路都汇到了内核。看着零散的活,其实都绕着一个中心在转。可内核要是把这么强的活全干了,会不会危险呢?要是随便哪个程序都能用这股力,那就糟了。所以电脑把力量的世界,分成了两半。下面,我们就看看那道界。

04

两种模式的界

把上一讲瞥过的两种模式,再想一遍。一种是用户态,是我们的应用居住的、力量受限的世界。另一种是内核态,是内核干活的、能直接碰硬件碰一切的强大世界。两者之间,有一道清楚的界。用户态里的应用,不能直接伸手碰硬件。只有处在内核态里的内核,才能直接碰硬件。所以应用一想自己干点什么,就被挡住;只有向内核请求、经过内核态,那件活才办得成。多亏这道界,强大的力量,只汇聚在内核这一个可信的地方。

用户态

点一下切换模式。处于用户态时,直接伸手碰硬件会被挡(红色)。只有处于内核态时,才允许访问硬件(绿色)。强大的力量,只在内核态里。

用户态被挡,只有内核态才通。强大的力量汇在内核这一处,是件让人安心的事。危险动作只过一处,那只要守好那一处就行。可与此同时,也掠过一丝让人心头一紧的念头。要是一切都系在内核这一个上,万一内核自己出了问题,会怎样呢?最后,我们就用这个问题,把今天学的归拢一下。

05

当内核停下来

把今天看到的,汇成一条线。内核,是在系统调用窗口背后处理实际工作的核心程序;它从开机到关机,一直驻留在内存里;并且一手统管 CPU、内存、装置、文件、权限这一切资源。强大的内核态,是内核干活时所用的力。于是,就有了这样的情形。哪怕一个应用出了岔子、卡住或死掉,它上面的内核还活着,于是只把那一个应用清理掉,其余的照样好好运转。我们能强行关掉一个卡死的应用、继续用电脑,正是多亏了这一点。可要是内核自己停了,事情就完全不同了。那只本该清理应用、分派资源、处理请求的手没了,于是它上面的所有应用、整个系统,一下子全停了。电脑忽然变成一片蓝、或者毫无反应、非重启不可的那个罕见瞬间,正是内核再也撑不住的时候。

内核
点一个应用让它停。然后再停掉内核试试。

点一个应用,让它停。内核还活着,所以只清掉那一个应用,其余的没事。最后点内核把它停掉,它上面的一切,就一下子全停(红色)。一切,都系在内核这一个上。

现在,操作系统的正中心,清清楚楚地显出来了。至今分开学的调度、内存、驱动、文件、权限、系统调用,原来都在内核这一只手里转着。可从一只手往外分派资源,会冒出新的麻烦。两个程序,各自抓着自己手里的不放,只等对方手里的,那就两个都永远停住了。下一讲,我们就来见一见这种互不相让时发生的死锁。

一句话总结内核,是操作系统的核心程序。在叫作系统调用的窗口背后,实际把活干完的,正是这个内核。内核从开机的那一刻,一直待在内存里,直到关机。我们用的应用,时开时关,可内核在这期间,一刻也不离岗。而且,至今学过的几乎一切,决定把 CPU 给谁的调度、虚拟内存、设备驱动、文件的整理、权限的检查,全是这个内核的活。强大的内核态,正是这个内核干活时所用的权限。所以一个应用死了,内核能接住它;可要是内核自己停了,就没有东西能接住了,整个系统也就停了。
操作系统
如果有帮助,请支持我们