本文已参与「新人创作礼」活动,一起开启掘金创作之路。
前言
在上文《Java并发编程:硬件上的并发下篇》中,我们了解了操作系统调度的过程、方式及其策略。到这里,我们基本上已经了解了硬件和操作系统对并发的支持,那么接下来,我们就要了解操作系统和应用上的线程是怎么对接实现的。而在这之前,我们需要先了解下操作系统内核的一些基本概念。
什么是操作系统内核?
这里引用一下百度百科的定义:
内核是操作系统最基本的部分。它是为众多应用程序提供对
计算机硬件
的安全访问的一部分软件
,这种访问是有限
的,并且内核决定一个程序在什么时候对某部分硬件操作多长时间。内核的分类可分为单内核和双内核以及微内核。严格地说,内核并不是计算机系统
中必要的组成部分。
如果对上面的定义不是太理解的话,我们再看下下面这个图。
从这个图中可以看到,操作系统内核就是将计算机硬件
与应用程序隔离开的一层软件
,应用程序如果要与计算机硬件进行交互(例如:硬盘访问、网卡传输驱动等),就需要经由操作系统内核来处理,它是计算机的底层软件。
为什么需要有内核?
从上图可以看到,应用程序
是没办法直接访问硬件
的,但是在早期计算机操作系统中并不是这样的。那个时候的计算机,操作系统和应用程序都可以直接访问硬件,包括硬盘、内存等,应用程序的权限
非常大。但是这也造成了严重的安全问题
。
最直观上的问题就是操作系统和应用程序都可以访问内存,这个时候,应用程序甚至可以直接将操作系统的内存数据给删除了,导致系统问题。而当时也确实出现了这种情况。
于是,操作系统厂商们,就推出内核
的概念。你应用程序不就是可以直接访问硬件,才搞出这么多事吗,那我就把你跟硬件隔离开。
内核的分类
- 宏内核
此模式下的内核,集成了内核的所有功能模块。它必须所有模块都在,才能正常运行。模块之间的交互通过方法调用实现。
Linux系统就是使用的宏内核模式。 - 微内核
内核中只提供最核心的功能,例如内存管理、任务调度等。其它的模块跟应用程序一样,可以任意拆卸与嵌入。
相比宏内核模式,微内核将内核的各个模块进行解耦,这些模块的故障,也不会导致微内核的故障。
鸿蒙系统就是使用的微内核模式。 - 外核
外核的设计理念是让用户程序的设计者来决定硬件接口的设计。外内核本身非常的小,它通常只负责系统保护和系统资源复用相关的服务。
内核怎样跟应用程序交互?
硬件由内核管理后,操作系统会提供一些系统调用接口,应用程序可以通过这些系统调用接口来安全的操作硬件。
后言
既然看到这里了,感觉有所收获的朋友,不妨来个大大的点赞吧~~~