Linux读书笔记第一周

1.Unix内核的特点:简洁;抽象;可移植性;进程创建;清晰的层次化结构。
2. Linux内核是一种*/开源的软件,设计思想与Unix系统相似(一切皆文件,特定的单一用途 & 简单的组合方式)
二、操作系统与内核
内核:响应中断的中断服务程序;管理多个进程,分享处理器时间调度程序;管理进程地址;空间的内存管理程序;网络、进程间通信等其他功能。
内核空间:系统态和被保护起来的内存空间
系统调用:应用程序与内核通信

每个处理器在任何指定时间点上的活动必然概括为:运行于用户空间,执行用户进程- 运行于内核空间,处于进程上下文,代表某个特定的进程执行- 运行于内核空间,处于中断上下文,与任何进程无关,处理某个特定的中断。

  1. 单内核与微内核
      原理 优势 劣势
    单内核 整个内核都在一个大内核地址空间上运行。 1. 简单。
  2. 高效:所有内核都在一个大的地址空间上,所以内核各个功能之间的调用和调用函数类似,几乎没有性能开销。 一个功能的崩溃会导致整个内核无法使用。
    微内核 内核按功能被划分成各个独立的过程。每个过程独立的运行在自己的地址空间上。 1. 安全:内核的各种服务独立运行,一种服务挂了不会影响其他服务。 内核各个服务之间的调用涉及进程间的通信,比较复杂且效率低。

Linux的内核虽然是基于单内核的,但是经过这么多年的发展,也具备微内核的一些特征。(体现了Linux实用至上的原则)
主要有以下特征:
1、支持动态加载内核模块
2、支持对称多处理(SMP)
3、内核可以抢占(preemptive),允许内核运行的任务有优先执行的能力
4、不区分线程和进程
三、Linux版本
第一位表示主版本号,第二位表示从版本号,第三位表示稳定版本号(偶数为稳定版内核,奇数为开发板内核)
1.获取内核代码
内核是开源的,所有获取源码特别方便,参照以下的网址,可以通过git或者直接下载压缩好的源码包。
http://www.kernel.org
 2.内核源码的结构
目录 说明
arch 特定体系结构的代码
block 块设备I/O层
crypo 加密API
Documentation 内核源码文档
drivers 设备驱动程序
firmware 使用某些驱动程序而需要的设备固件
fs VFS和各种文件系统
include 内核头文件
init 内核引导和初始化
ipc 进程间通信代码
kernel 像调度程序这样的核心子系统
lib 同样内核函数
mm 内存管理子系统和VM
net 网络子系统
samples 示例,示范代码
scripts 编译内核所用的脚本
security Linux 安全模块
sound 语音子系统
usr 早期用户空间代码(所谓的initramfs)
tools 在Linux开发中有用的工具
virt 虚拟化基础结构
 
3、编译内核的方法
还未实际尝试过手动编译内核,只是用yum更新过内核。这部分等以后手动编译过再补上。
安装新的内核后,重启时会提示进入哪个内核。当多次安装新的内核后,启动列表会很长(因为有很多版本的内核),显得不是很方便。
下面介绍3种删除那些不用的内核的方法:(是如何安装的就选择相应的删除方法)
rpm删除法  
rpm -qa | grep kernel*  (查找所有linux内核版本)
rpm -e kernel-(想要删除的版本)
yum删除法
yum remove kernel-(要删除的版本)
手动删除
删除/lib/modules/目录下不需要的内核库文件
删除/usr/src/kernel/目录下不需要的内核源码
删除/boot目录下启动的核心档案禾内核映像
更改grub的配置,删除不需要的内核启动列表
4、内核开发的特点:
无标准C库;使用GNU C;没有内存保护(内核中的内存是不分页的,每用一个字节的内存,物理内存就少一个字节);不使用浮点数;内核栈容积小且固定(查看内核栈大小的方法:ulimit -a | grep "stack size");同步和并发(防止因竞争而出现死锁);可移植性。