Linux内核
linux内核剖析
一 Unix和Linux的历史
Unix的历史
Unix是从贝尔实验室的一个失败的多用户操作系统Multics中涅盘而生。
1969年,Thompson首先在一台无人问津的PDP-7型机上实现了这个全新的操作系统。
1971年,Unix被移植到PDP-11型机中。
1973年,整个Unix用C语言进行了重写。
1977年,贝尔实验室综合各种变体推出了Unix System Ⅲ.。
983年,AT&T推出了System V。
由于Unix系统设计简洁并且在发布时提供源代码,所以许多其他组织和团体都对它进行了进一步的开发。加州大学伯克利分校便是其中影响最大的一个,他们推出的变体叫BSD伯克利的第一个Unix演化版是1977年推出的1BSD系统。1978年推出了2BSD系统,其中包含了csh,vi等应用软件。1979年推出3BSD系统,引入了虚拟内存。
Linux历史
1991年,Linus Torvalds为当时新推出的,使用Intel 80386微处理器的计算机开发了一款全新的操作系统,Linux由此诞生。
Linus热衷于使用Minix,一种教学用的廉价Unix,但是他不能轻易修改和发布该系统的源代码(由于Minix的许可证)。于是他决定开发自己的操作系统。由于Linux的许可证条款的约定,Linux迅速成为多人的合作开发项目。
Linux是类Unix系统,但它不是Unix。尽管Linux借鉴了Unix的许多设计并且实现了Unix的API,但是Linux没有像其他Unix变种一样直接使用Unix的源代码。
尽管Linus被认为是Linux之父,但开发工作实际是由一个结构松散的工作组协力完成的,任何人都可以开发内核,其内核是自由(公开)软件,它使用GPL 2.0作为限制条款——你可以自由地获取内核代码并随意修改它,但如果你希望发布你修改过的内核,你也得保证让得到你内核的人同时享有你曾经享受过的所有权利,当然,也包括全部的源代码。
二 操作系统和内核简介
通常一个内核由负责响应中断的中断服务程序,负责管理多个进程从而分享处理器时间的调度程序,负责管理进程地址空间的内存管理程序,和网络、进程间通信等系统服务程序共同组成。内核独立于普通应用程序,它一般处于系统态,拥有受保护的内存空间和访问硬件设计的所有权限。这种系统态和被保护起来的内存空间,统称为内核空间。相对的,应用程序在用户空间执行,它们只能看到允许它们使用的部分系统资源,且只能使用某些特定的系统功能,不能直接访问硬件,也不能访问内核划给别人的内存范围。在系统中运行的应用程序通过系统调用来与内核通信,当一个应用程序执行一条系统调用,我们说内核正在代其执行。

内核还要管理系统的硬件设备,当硬件设备想和系统通信时,首先要发出一个异步的中断信号去打断处理器的执行,继而打断内核的执行。中断通常对应一个中断号,内核通过这个中断号查找相应的中断服务程序,并调用这个程序相应和处理中断。
中断服务程序不在进程上下文中执行,而是在一个与进程无关的、专门的中断上下文中执行。使用这样一个专门的执行环境,是为了保证中断服务程序能够在第一时间相应和处理中断请求,然后快速地退出。
每个处理器在任何指定时间点上的活动可概况为以下三者之一:
1 运行于用户空间,执行用户进程。
2 运行于内核空间,处于进程上下文,代表某个特定的进程执行。
3 运行于内核空间,处于中断上下文,与任何进程无关,处理某个特定的中断。
注:当CPU空闲时,内核就运行一个空进程,处于进程上下文,但运行于内核空间。
三 Linux内核和传统Unix内核的比较
操作系统内核两大阵营:单内核和微内核。
单内核 : 整个内核都在一个大内核地址空间上运行。
优点:简单,高效(所有内核都在一个大的地址空间上,所以内核各个功能之间的调用和调用函数类似,几乎没有性能开销)
缺点: 一个功能的崩溃会导致整个内核无法使用。
微内核:内核按功能被划分成各个独立的过程。每个过程独立的运行在自己的地址空间上。
优点:安全(内核的各种服务独立运行,一种服务挂了不会影响其他服务)、可换出(允许一个服务器为了另一个服务器而换出)。
缺点: 内核各个服务之间的调用涉及进程间的通信,比较复杂且效率低。
再来看,Linux是一个单内核,不过,Linux汲取了微内核的精华:模块化设计、抢占式内核、支持内核线程以及动态装载内核模块的能力。(体现了Linux实用至上的原则)
四 Unix几个特点:
1. 很简洁:仅仅提供几百个系统调用并且有一个非常明确的设计目的。
2. 基本所有的东西都被当做文件对待,这种抽象使得对数据和对设备的操作都是通过一套相同的系统调用接口来进行的:open(),read(),write(),lseek()和close()。
3. Unix的内核和相关的系统工具软件是用C语言编写而成的——这使得它在各种硬件体系架构面前具有很强的移植能力。
4. Unix的进程创建非常迅速。
5. Unix提供了一套非常简单但又很稳定的进程间通信原语,快速简洁的进程创建过程使Unix的程序把目标放在一次执行保质保量地完成一个任务上,而简单稳定的进程间通信机制又可以保证这些单一目的的简单程序可以方便地组合在一起。正是由于这种策略和机制分离的设计理念,确保了Unix系统具备清晰的层次化结构。
五 Linux与传统Unix系统之间的显著差异:
1.支持动态加载内核模块;
2.支持对称多处理(SMP)机制;
3.内核可以抢占(preemptive),允许内核运行的任务有优先执行的能力;
4.内核不区分线程和其他的一般进程。对于内核来说,所有的进程都一样——只不过是其中的一些共享资源而已。
六 Linux内核版本
内核的版本号主要由四个数字组成。比如版本号:4.14.13.1 其中,
4 - 主版本号
14 - 从版本号或副版本号
13 - 修订版本号
1 - 稳定版本号
具体解释:
副版本号表示这个版本是稳定版(偶数)还是开发版(奇数)——上面例子中的版本号是稳定版、
稳定的版本可用于企业级环境、
修订版本号的升级包括BUG修正、新的驱动以及新的特性的追加,
稳定版本号主要是一些关键性BUG的修改。
七 shell的基本信息
计算机硬件是由运算器、控制器、存储器、输入/输出设备等设备组成,而能够让机箱内各设备各司其职的东西就叫做——系统内核。内核负责驱动硬件、管理活动和分配/管理硬件资源,如此说来系统内核对计算机来讲可真的是太重要,所以它不能直接让用户操作。
因为用户不能直接控制硬件也不能直接操作内核,于是便需要基于“系统调用接口”开发出的程序服务来满足用户日常工作。

首先在在centos7中有些诸如逻辑卷管理器(LVM)的图形化工具非常好用,也减少了运维人员操作出错的几率,但一直以来Linux运维人员甚至都不会给Linux系统安装图形化界面,需要工作了直接远程连接过去,相比于图形化工具不灵活而且相比来说更加消耗资源这样做效率十分高。
注:图形化工具也是调用脚本工作,但功能却被阉割了,更缺乏灵活性。
“shell”——也称为“壳”,充当的是人与内核(硬件)的翻译官,用户将一些命令“告诉”Shell,它就会调用相应的程序服务执行工作。~红帽内部主流默认shell是Bash(Bourne-Again)
Bash优势:
- 1 默认保存历史命令(可用上下键翻看)
- 2 命令仅需输入前几位就可以用tab键补全
- 3 强大的批处理脚本
- 4 实用的环境变量
八 个人总结
1 通过写博客让自己的总结能力提高了不少,不必花太多时间整理以前的知识,提高了效率
2 书是最好老师,在困难的地方多查阅资料
参考书籍
《Linux内核设计与实现》
《APUE》
-------------------------------------------
个性签名:独学而无友,则孤陋而寡闻。做一个灵魂有趣的人!
如果觉得这篇文章对你有小小的帮助的话,记得在右下角点个“推荐”哦,博主在此感谢!
浙公网安备 33010602011771号