【内核】——简介

1、系统概貌

UNICS——>UNIX——>增加管道功能——>C重写UNIX

v.0     v.1      v.2      v.5

1970                  1973

2、什么是内核?

系统调用(system call):是内核函数呈现给用户的接口,为应用程序的运行创建良好的操作系统环境。

内核(kernel):系统调用的集合及实现系统调用的内部算法就形成了操作系统的核心,简称内核。

3、用户态和核心态,中断

如上图,内核独立于普通的应用程序,他一般处于系统态,拥有受保护的内存空间和访问硬件设备的所有权限。这种系统态和被保护起来的内存空间,统称为内核空间(相对的是用户空间)。

当应用程序执行一条系统调用时,应用程序被称为通过系统调用在内核空间执行,而内核被称为运行于进程上下文中

另外内核还要负责管理系统的硬件设备(I/O设备管理)。当I/O设备为准备就绪时,硬件设备先发出一个异步的中断信号去打断CPU的执行,继而打断内核的执行。中断通常对应着一个中断号,内核通过这个中断号查找相应的中断服务程序,并调用这个程序响应和处理中断。许多操作系统的中断服务程序,包括Linux的,都不在进程上下文中执行。他们在一个与所有进程都无关的、专门的中断上下午中运行。

4、什么是上下文?

上下文代表着内核(应用程序)的活动范围。

进程上下文:可以看作是用户进程传递给内核的这些参数以及内核要保存的那一整套的变量和寄存器值和当时的环境等。可以分为三个部分:用户级上下文、寄存器上下文以及系统级上下文。

(1)用户级上下文: 正文、数据、用户堆栈以及共享存储区;
(2)寄存器上下文: 通用寄存器、程序寄存器(IP)、处理器状态寄存器(EFLAGS)、栈指针(ESP);
(3)系统级上下文: 进程控制块task_struct、内存管理信息(mm_struct、vm_area_struct、pgd、pte)、内核栈。

中断上下文:可以看作就是硬件传递过来的这些参数和内核需要保存的一些其他环境(主要是当前被打断执行的进程环境)。中断时,内核不代表任何进程运行,它一般只访问系统空间,而不会访问进程空间,内核在中断上下文中执行时一般不会阻塞。

实际上,我们可以将每个CPU在任何指定时间点上的活动必然概括为下列三者之一:

  运行于用户空间,执行用户进程。

  运行于内核空间,执行进程上下文,代表某个特定的进程执行。

  运行于内核空间,执行中断上下文,与任何进程无关,处理某个特定的中断。

5、单内核和微内核

单内核:

  就是把内核从整体上作为一个单独的大过程来实现,同时也运行在一个单独的地址空间上。通常,内核以单个静态二进制文件的形式存放于磁盘中,内核之间的通信是微不足道的,因为大家都运行在内核态。

    优点:具有性能高,简单的特点。

微内核:

  不作为一个单独的大过程来实现,微内核的功能被划分为多个独立的过程,每个过程叫做一个服务器。所有的服务器都保存独立并运行在各自的地址空间上,因此需要通过消息传递(进程间通信(IPC)机制)处理微内核的通信,即各个服务器之间通过IPC机制互通消息,互换“服务”。

    优点:服务器的各自独立有效毕淼了一个服务器的失效祸及另一个。  

    缺点:IPC机制的开销多于函数调用,又因为会涉及到内核空间与用户空间的上下文切换,因此,消息传递需要一定的周期。

Linux是一个单内核,也就是说Linux内核单独运行在独立的内核空间地址上。不过Linux汲取了微内核的精华:模块化设计、抢占式内核、支持内核线程以及动态装载模块的能力。

6、Linux内核与Unix系统之间存在的差异:

  6.1、Linux支持动态加载内核模块。尽管Linux是单内核,可是允许在需要的时候动态地卸载和加载部分内核代码。

  6.2、Linux支持对称多处理(SMP)机制。传统的Unix并不支持这种机制。

  6.3、Linux内核是可以抢占(preemptive)。大多数Unix内核不支持抢占(这点很重要,关于Unix高速缓冲的算法都是表面不支持抢占的)

  6.4、Linux对线程支持的实现比较有意思:内核并不区分线程和其他的一般进程。对于内核来说,所有进程都是一样——只不过是其中的一些共享资源而已。

  6.5、Linux听具有设备类的面向对象的设备模型、热拔插事件,以及用户空间的设备文件系统(sysfs)

    

原文地址:https://www.cnblogs.com/SsoZhNO-1/p/10852330.html