1、从Unix到Linux
Unix强大的原因:
a、Unix简洁:仅仅提供几百个系统调用并且有一个明确的设计目的
b、一切皆文件:这一抽象使得对设备和数据操作都是用同一套系统调用接口来进行
open(), read(), write(),lseek()和close()
c、Unix的内核和相关的系统工具使用C语言编写而成:在各种硬件体系架构中有超强的移植能力,使得开发人员很容易接受它
d、进程创建很快,有独特的fork系统调用
e、提供了一套简单但又稳定的进程间通信元语
之间的关系:快速简洁的进程创建,使得Unix的程序将目标放在一次执行保质保量地完成一个任务上,简单稳定的进程间通信保证单一目的的程序可以方便的组合,去解决现实中的越来越复杂的问题
内核的组成(处于系统态):
a、负责响应中断的中断服务程序
b、负责管理多个进程从而分享处理器时间的调度程序
c、负责管理进程地址空间的内存管理程序和网络
d、进程间通信等系统服务程序共同组成
系统态:拥有受保护的内存空间和访问硬件设备的所有权限
内核空间:系统态和被保护起来的内存空间
应用程序,内核和硬件的关系图:
- 运行于用户空间,执行用户进程
- 运行于内核空间,处于进程上下文,代表某个特定的进程执行
- 运行于内核空间,处于中断上下文,于任何进程无关,处理某个特定的中断
单内核和微内核设计的比较:
- 单内核:将内核从整体上作为一个独立的大过程来实现,同时也运行在一个单独的地址空间,所有的内核服务都在一个大内核地址空间上运行
- 微内核:功能被划分为多个独立的过程,每个过程被称为一个服务器,所有服务都保存独立并运行在各自的地址空间上
- 微内核是通过消息传递处理通信:系统采用进程间通信(IPC)机制,各个服务之间通过IPC机制互通消息,互换“服务”
- 微内核会有IPC带来的开销和上下文切换使得消息传递需要一定周期,但是单内核没有这些开销
Linux的内核:是单内核,即Linux的内核运行在单独的内核地址空间
Linux内核的特点:模块化设计,抢占式内核,支持内核线程以及动态装载内核模块的能力,为了避免微内核的弊端,linux内核中让所有事情都运行在内核态,直接调用函数,无须消息传递
Linux内核和传统Unix系统之间存在一些显著的差异:
- Linux支持动态加载内核模块:允许在需要的时候动态的卸除和加载部分内核代码
- Linux支持对称多处理(SMP)机制,传统的Unix不支持
- Linux内核可以抢占:Linux内核具有允许在内核运行的任务优先执行能力,传统的Unix不支持
- Linux对线程支持的实现比较有意思:内核并不区分线程和其他一般进程,对于内核来说所有进程都一样只不过是其中的一些共享资源而已(这就应该是linux是基于进程的操作系统的原因)
- Linux提供具有设备类的面向对象的设备模型、热插拔事件,以及用户空间的设备文件系统(sysfs)
- Linux忽略了一些设计很拙劣的Unix特性,STREAMS,难以实现的的过时标准等
STREAMS:允许在一个网络上使用多个通信协议的开发和操作环境
服务器的三大体系:
SNP机制:
SMP机制:多处理器结构,指的是多个处理无主次或从属关系,各个cpu共享相同的物理内存,每个cpu访问任何内存地址用时都相同
SMP主要特征:共享,系统中所有资源都共享(内存,IO,CPU)
SMP的问题:共享带来的扩展方面的瓶颈,最受限制的是内存,在SMP中CPU的数量不是越多越好,一般情况下实验表明CPU利用率最好的情况是2~4个CPU
NUMA机制:
NUMA机制:(非一致存储访问)是为了解决SMP在扩展方面的问题,进行改进的产物,使用NUMA技术可以将几百个CPU集合到一个服务器中
NUMA特征:具有多个CPU模块,每个模块有多个CPU,具有独立的本地内存和IO等资源,每个节点是通过互联模块进行连接和信息交互(每个CPU可以访问所有资源,但是访问资源的速度不一样)
NUMA的问题:由于访问本地资源和远端的速度不一样使得CPU数量增加时,系统性能不能线性增加
MPP机制:
MPP机制:由多个SMP服务器通过一定的节点互联网络进行连接,协同工作,完成相同的任务,从用户的角度看是一个服务器系统
MPP特征:由多个SMP(每个SMP被称为节点)由节点互联网络连接而成,每个节点之访问本地资源,完全无共享机制,理论上可以无限扩展,目前是512个节点互联
注:MPP中每个SMP节点都可以运行自己的操作系统,数据库等
MPP的问题:需要一种复杂的机制来调度和平衡各个节点的负载和并行处理过程