Linux内核设计与实现(1)第一章:Linux内核简介

第一章 Linux 内核简介

1. linux历史及与Unix关系

1969年产生unix ;1991年,Linus推出linux;
Linux是类Unix系统,但它不是Unix。
尽管Linux借鉴了Unix的许多设计并且实现了Unix的API,但是Linux没有像其他Unix变种一样直接使用Unix的源代码。

2. 内核组成

内核是操作系统的核心,通常由以下部分组成:

负责响应中断的中断服务程序;
负责管理多个进程从而分享处理器时间的调度程序;
负责管理进程地址空间的内核管理程序;
网络、进程间通信等系统服务;

3. 用户空间和内核空间

用户空间:
应用程序在用户空间执行,只能看到允许它们使用的部分系统资源,并且只使用某些特定的系统功能,不能直接访问硬件,也不能访问内核划给别人的内存空间。

内核空间:
内核独立于普通应用程序,拥有受保护的内存空间和访问硬件设备的所有权限。

4. 系统调用

系统调用就是用户程序和硬件设备之间的桥梁,用户程序在需要的时候,通过系统调用来使用硬件设备。

通信实例:
应用程序通过系统调用来与内核通信,通常调用库函数,再由库函数通过系统调用界面让内核代其完成各种不同任务。
(比如调用C库函数printf(),该库函数会格式化数据后调用内核的write()函数将数据写到控制台上)。
在这种情况下,应用程序被称为通过系统调用在内核空间运行,而内核被称为运行于进程上下文中,这是应用程序完成其工作的基本行为方式。

参考:关于系统调用的详细文章:系统调用与库函数
https://blog.csdn.net/lqy971966/article/details/103657953

5. 中断

内核基于中断机制来管理系统的硬件设备,当硬件设备想要和系统通信的时候会首先发出一个异步的中断信号去打断处理器的执行,继而打断内核的执行。

1.定义: 中断是硬件在需要的时候向CPU发出信号,
	   CPU暂时停止正在进行的工作,来处理硬件请求的一种机制

2.背景:没有中断的话,CPU和外围设备之间协同工作/通信可能只有轮询这个方法:
	   CPU定期检查硬件状态,需要处理时就处理,否则就跳过。
		轮询的缺点/引入中断机制

3.类型:Linux中通常分为外部中断(又叫硬件中断)和内部中断(又叫异常)
	1. 同步中断(异常/内部中断):同步中断由CPU本身产生,又称为内部中断或异常
		同步中断举例:缺页中断
	2. 异步中断(中断/外部中断):异步中断是由外部硬件设备产生,又称为外部中断或中断
		异步中断举例:网卡的工作原理
		
4.中断号:中断对应着一个中断号,内核通过这个中断号查找相应的中断服务程序

5.中断上下文:中断服务程序不在进程上下文中执行,
			而是在一个与所有进程都无关的、专门的中断上下文中运行
		

6.中断和信号:中断: 硬件/进程发,内核收
		    信号:内核发,进程收

7.中断与异常:
	1. 异常与中断不同,中断是由硬件引起的;
	2. 异常则发生在编程失误而导致错误指令,
	   或者在执行期间出现特殊情况必须要靠内核来处理的时候

8.上下半部机制:
	1. 背景:中断处理程序运行需要快速执行(因为不可阻塞),
			同时要能完成尽可能多的工作,这里存在矛盾
	2. 上下半部: 因此把中断处理切分为两个部分
	3. 优点:这种设计可以使系统处于中断屏蔽状态的时间尽可能的短,以此来提高系统的响应能力。
	4. 上半部:处理紧急功能,取寄存器状态
	5. 下半部:完成中断事件绝大多数任务
	6. 上下半部划分原则:
		1) 如果一个任务对时间非常敏感,将其放在中断处理程序中执行;
		2) 如果一个任务和硬件有关,将其放在中断处理程序中执行;
		3) 如果一个任务要保证不被其他中断打断,将其放在中断处理程序中执行;
		4) 其他所有任务,考虑放置在下半部执行

参考:关于中断的详细文章:Linux 中断
https://blog.csdn.net/lqy971966/article/details/111196470

6. Unix强大的原因

1.Unix简洁
	仅仅提供几百个系统调用并且有一个非常明确的设计目的
2.一切皆文件
	这种抽象使对数据和设备的操作通过一套相同的系统调用接口来进行:open(),read(),write(),close()
3.C语言编写,移植性强
	内核和相关系统工具是C编写的,移植性强
4. 创建进程非常快
	Unix进程创建非常迅速,并且有一个非常独特的系统调用fork()
	原因:slab内存分配原理
5. Unix有一套非常简单又稳定的进程间通信原语

7. Linux 是一个单内核

7.1 单内核和微内核

操作系统内核两大阵营:单内核和微内核。

7.2 Linux 是一个单内核

Linux是一个单内核:将内核从整体上作为一个单独的大过程来实现,同时也运行在一个单独的地址空间上
这样的内核以单个静态二进制文件的形式存放于磁盘中,内核之间通信的开销微不足道,因为可以直接调用函数,大多数Unix系统都设计为单内核。

优点:

1.简单。 
2.高效:
	所有内核都在一个大的地址空间上
	所以内核各个功能之间的调用和调用函数类似,几乎没有性能开销。

缺点:

一个功能的崩溃会导致整个内核无法使用。

7.3 微内核

微内核的功能被划分为多个独立的过程,每个过程称为一个服务器,所有服务器都保持独立并运行在各自的地址空间上。
优点:

避免了因为一个服务的失效祸及另一个

缺点:

开销大。
不能像单内核那样直接调用函数,而是通过消息传递来处理内核通信(IPC),
消息传递需要一定的周期,其开销大于函数调用。

7.4 Linux实用至上的原则

Linux是一个单内核,不过,Linux汲取了微内核的精华:模块化设计、抢占式内核、支持内核线程以及动态装载内核模块的能力。
(体现了Linux实用至上的原则)

8. Linux与Unix的差异

Linux支持动态加载内核模块;(尽管Linux内核也是单内核)
Linux支持对称多处理机制(SMP);
		(每个处理器有相等的机会读/写存储器,也有相同的访问速度)
Linux内核可以抢占;
Linux内核不区分线程和一般进程;
Linux提供面向对象的设备模型、热插拔事件,以及用户空间的设备文件系统;
Linux忽略了一些设计拙劣的Unix特性,如STREAMS;

9. Linux内核版本

内核的版本号主要由四个数字组成。

比如版本号:2.6.26.1 其中,
主 从 修订 稳定(版本)

参考:
书籍
https://www.cnblogs.com/wang_yb/p/3514730.html
https://www.linuxidc.com/Linux/2014-02/96174.htm
https://zhuanlan.zhihu.com/p/70958648

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值