linux kernel development之初学习

来源:互联网 发布:下载软件下载 编辑:程序博客网 时间:2024/05/17 07:07

这些都是有学习的时候,随便写下的东西 ^_^

声明:以下内容部分为摘抄内容 ^_^!

操作系统内核简介

通常操作系统内核是由下面几个部分组成的:

1。负责响应中断的中断服务程序

2。负责管理多个进程分享处理器时间的调度程序

3。负责管理进程地址空间内存管理程序

还有网络、进程间通信等系统服务程序


系统态

对于提供保护机制的现代系统来说,内核独立于普通应用程序,它一般利于系统态,拥有受保护的内存空间和访问所有硬件设备的权限

这种系统态和被保护起来的内存空间,统称为内核空间

相对的应用程序在用户空间执行,它们只能看到允许它们使用的部分系统资源,并且不能使用某些特定的系统资源,不能直接访问硬件,还有其他的一些限制

当内核运行时,系统以内核态进入内核空间,变通应用程序以用户态进入用户空间,应用程序通过系统调用和内核通信运行。

应用程序通常通过调用库函数再由库函数通过系统调用内核来完成工作



我们可以将处理器在任何指定时间点上的活动范围概括为下列三者之一:
1。运行于内核空间,处于进程上下文,代表某个特定的进程执行
2。运行于内核空间,处于中断上下文,于进程无关,处理某个特定的中断
3。运行于用户空间,执行用户进程

单内核与微内核

单内核是一种比较简单的实现,1980年之前,所有的内核都设计成单内核
所谓单内核就是把内核从整体上作为一个单独的大过程来实现,并同时运行在一个单独的地址空间,因此,单内核通常以单个静态二进制文件的形式存放于磁盘
所有内核服务都在这样一个大内核空间中运行,内核之间的通信是微不足道的,因为大家都运行在内核态,并身处同一地址空间,内核可以直接调用函数
这种模式的支持者认为单模块具有简单、高性能的特点

微内核并不作为单独的一个大过程来实现,相反,微内核的功能被划分为独立的过程,每个过程都是一个单独的服务器
理想情况下,只有强烈要求服务的服务器才会运行在特殊模式下,其他服务器都运行在用户空间
所有的服务器都运行在自己的地址空间,因此,就不能像单模块内核那样直接调用函数,而是通过消息传递处理微内核通信:
系统采用了进程间通信(IPC)机制,
各种服务器之间通过IPC机制互通消息,互换服务,服务器的名自独立有效的避免了一个服务器的失败祸及另一个
同样模块化的系统允许一个服务器为了另一个服务器而换出
因为IPC开销比函数调用多,又因为会涉及到内核空间到用户空间的上下文切换,因此,消息传递需要一定的同期
而单内核中简单的函数调用没有这些开销
基于此,微内核系统会让大部分或全部服务器位于内核,这样就可以直接调用函数,消除频繁的上下文切换

大多数的Unix系统都被设计为单内核
Linux 是一个单内核,也就是说,Linux内核运行在单独的内核地址空间
Linux引用了微内核的精华:模块化设计,抢占式内核,支持内核线程及动态装载内核模块

Linux内核与Unix内核比较

Linux支持动态加载内核模块,尽管Linux也是单内核,可是允许在需要的时候动态的进行卸载或加载部分内核代码
Linux支持对称多处理机制,尽管许多Unix的变体也支持SMP机制,但传统的Unix并不支持SMP机制
Linux内核可以抢占(preemptive),与传统的Unix不同,Linux允许在内核运行的任务优先执行。在Unix的各产品中,Solaris和IRIX支持抢占,但大多数都不支持
Linux对线程的支持:Linux内核并不区分线程与其他的一般进程,对于内核来说,所有进程都一样,只不过是一些共享资源的不同

0 0