

操作系统 OS 与内核 Kernel 有什么区别?
source link: https://www.51cto.com/article/778176.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

操作系统 OS 与内核 Kernel 有什么区别?
Canoo公司有一项核心技术专利,这就是它们的通用电动底盘技术,长得是这个样子,非常像一个滑板:
这个带轮子、有电池、能动的滑板已经包含了一辆车最核心的组件,差的就是一个外壳。
这个看起来像滑板的东西就是所谓的电池系统和底盘一体化技术,Canoo公司在它们的通用底盘上加装不同的外壳就能制造出不同的车型。
什么是内核?
在上面这个示例中,包含轮子以及电池系统的底盘就好比内核,而套上外壳加上椅子以及内饰后的整体成品就好比操作系统。
内核仅仅是操作系统的一部分,是真正与硬件交互的那部分软件,与硬件交互包括读写硬盘、读写网盘、读写内存以及任何连接到系统中的硬件。
除了与硬件交互外,内核还负责分配资源,分配什么资源呢?所谓资源就是硬件,比如CPU时间、内存、IO等等,这些都是资源。
现在我们知道了内核负责分配资源,那么问题来了,要怎么分配这些资源呢?答案就是以进程的形式来分配资源。
怎么分配呢?
一句话:虚拟大法好。
每个进程都认为自己在独占CPU,这通过CPU时间片来实现,内核让CPU在各个进程之间快速切换,这样程序员写好程序员后直接运行即可,即使在单核系统中运行成百上千个进程都没有问题。
每个进程都认为自己在独占内存,这通过虚拟内存来实现。
有的同学可能会问,为什么都要虚拟化呢?
答案显而易见,因为计算机系统内的资源是有限的,我们只有几个CPU核心、几个G的内存,但却要同时运行几百几千个进程,除此之外我们别无它法。
如果你还知道有其它更高效的方法那么赶紧放下手机,马上将你的思想写成论文发表出来,下一届的图灵奖非你莫属,当然在发表获奖感言的时候一定要记得表示是受到了【码农的荒岛求生】这个公众号的启发才想到的。
因此,内核的职责就是以进程的形式来分配CPU时间,以虚拟内存的形式来分配物理内存,以文件的形式来管理IO设备。
什么是操作系统?
然而只有一个内核实际上是做不了什么真正有用的事情,就像上面示例中那个通用底盘一样,这个底盘确实能跑起来,但你没办法开着这样一个底盘出去浪,因为这个底盘很难用。
因此,你不得不加装上方向盘、座椅以及车身外壳等,同样的道理,内核是给人用的,为了与内核交互,发明了命令行以及图形界面GUI。

除了给普通用户提供使用的接口之外,操作系统还需要给程序员提供编写程序的接口,当我们写的程序依赖内核提供的服务时是该怎么办呢?
有的同学说我们需要依赖内核提供的服务吗?
想一想,进行网络编程时你有没有自己编写过处理TCP/IP协议栈数据的代码?你有没有自己写代码从网卡上收发数据?都没有,实际上你需要做的仅仅是简单的调用一些socket接口就可以了。
网络编程仅仅是其中的一项,其它还包括文件IO、创建进程、创建线程等等等等,这些是内核提供的,那么我们该怎么使用呢?
答案就是通过所谓的系统调用,system call。
通过系统调用,我们可以像使用普通函数那样向操作系统请求服务,当然,直接使用系统调用是非常繁琐的,因此通常会在这之上提供一层封装。

在Windows平台就是给程序员提供编程接口的是Windows API,这层API包罗万象,不但包括上文提到对系统调用的封装,还包括其它功能,像创建带有图形界面的应用程序等等。
但在Linux世界你找不到一种类似Windows API的东西,毕竟Windows是微软自家产品,什么都可以打包起来,Linux只是一个开源的内核,如果一定要找一个类似的东西话那就是libc,也就是C标准库,这里同样包括了对系统调用的封装以及一些库函数,但libc不包含创建带有图形界面应用程序的功能。
现在我们知道了,操作系统需要提供两种接口:
- 给用户提供操作接口。
- 给程序员提供编程接口。
这些就是好比汽车的外壳,我们(用户和程序员)看得见摸得着,外壳加上底盘——也就是内核,才是功能完善的操作系统。
各种各样的操作系统
实际上我们熟悉的Linux只是内核而不能称得上是操作系统,Ubuntu则可以认为是操作系统,其内核是Linux;RedHat也是操作系统,其内核同样是Linux;我们可以看到,尽管Ubuntu和RedHat是不同的操作系统,但其内核可以是相同的。
这就好比它们可以基于同样的底盘打造出不同的车型。
而我们熟悉的Windows也是操作系统,其内核是Windows NT内核。
Recommend
-
43
-
49
-
41
本文是由字节跳动系统部 STE 团队出品的“kernel trace tools”系列文章之一,以介绍团队自研多类延迟问题追踪工具。 在实际工作中,会遇到由于内核态不调度而引发的高网络延迟或者卡顿问题。但是,对于该类...
-
45
本文是由字节跳动系统部 STE 团队出品的“kernel trace tools”系列文章之一,以介绍团队自研多类延迟问题追踪工具。 在实际工作中,会遇到由于 runqueue 太长导致调度延迟问题,我们想知道是哪些进程导致了延迟。但是,...
-
23
升级ubuntu内核,virtualbox提示Kernel driver not installed (rc=-1908)出错 今天,我闲的蛋疼,更新来ubuntu内核,重启之后,也没在意,为了PS一张图,GIMP用起来不方便,遂开虚拟机virtualBox,进XP,用PhotoShop来操作,结果,VirtualBox却提...
-
17
← 上一篇
-
8
kernel 3.10内核源码分析--Out of Memory(OOM)处理流程 2015-09-30 15:56:00 http://blog.chinaunix.net/uid-20671208-id-4440249.html...
-
8
kernel 3.10内核源码分析--内核页表创建 2015-09-30 15:53:00 http://blog.chinaunix.net/uid-20671208-id-4440253.html 内核页...
-
14
相信现在很多公有云包括企业内部已经开始使用 Linux 内核热补丁 Livepatch,没人喜欢重启机器但现实是还得再等等。通常升级内核可能有多种原因,频率最高的比如修复安全漏洞,然而我们也会遇到需要降级内核的情况,比如向下兼容或者升级后产生新的严重 Bug 需要...
-
10
RTOS和GPOS有什么区别?操作系统没用对会引发灾难性后果? 2小时前 作者:芯广场 阅读需 1 分钟...
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK