操作系统内核是操作系统最基本、最核心的部分,实现操作系统内核功能的那些程序就是内核程序。
最底层的时钟管理、中断管理、原语是与硬件关联最紧密的三个模块,这些功能是必须放在内核当中的。还有一些管理相关的功能,如进程管理,存储器管理。对于这些功能的管理,更多的是对数据结构的一个操作,而不会直接涉及到硬件。所以有的操作系统并不把这些管理功能放在内核当中,而只在内核当中保留与硬件接触最紧密的这些部分。
因此,这就引出了两种截然不同的内核的设计方法:
在普通的操作系统当中,如果用户进程他想要申请使用一片内存空间。那么给他分配的内存空间是经过虚拟化的。用户进程自己看到的视角,似乎是自己拥有了一整片连续的这个内存空间。但事实上,这只是虚拟的地址空间,操作系统内核会把这些虚拟空间映射到实际的物理空间中,这些物理空间在内存当中通常是离散的。
除了内存空间之外,给进程分配的文件存储空间、外存空间也是经过抽象的。对于进程来说,他觉得自己的文件好像是连续的一个地址空间。但事实上,这个文件的各个块。在磁盘当中,很有可能是被离散存放的,所以普通的操作系统给用户进程分配的磁盘空间也是经过抽象的。
而外核可以给用户进程直接分配未经抽象的硬件资源
。
优点:比如一个用户进程知道自己的这一片存储空间是经常需要随机访问的,一会访问a地址,一会访问b地址。
如果给这个用户进程分配的磁盘空间在外存当中是离散的,那么用户进程在随机访问这些文件块的时候,意味着这个磁头需要来回横跳,那这样就会导致用户进程对自己的文件随机访问的这种性能效能变低。
如果采用外核的这种策略,那么外核可以直接给用户进程分配未经抽象的硬件资源。也就是说,如果这个用户进程他知道自己的这个文件需要频繁的被随机访问,那么我就可以向外核申请给我分配一整片连续的这个磁盘块,比如说从0号块到1024号块,全部都是我的。用户进程文件数据直接存放到连续的几个磁盘块当中,那他之后想要随机访问自己这个文件里边的任何一块,磁头移动的这些距离就会变少。
外核除了分配回收这些未经抽象的硬件资源之外,还需要负责保证这些硬件资源的使用安全。