《linux内核设计与实现》读书笔记linux内核简介

东皇※太一 东皇※太一     2022-12-05     332

关键词:

Unix的历史

①Unix诞生于1969年,至今仍然被认为是现存操作系统中最强大和最优秀的系统。

②Unix起源于一个失败的多用户操作系统Multics,Multics终止而Unix萌生。

③1973年整个Unix操作系统用C语言进行了重写,为后面各种平台的移植铺平了道路。

④至今,Unix已经成为一个支持抢占式多任务、多线程、虚拟内存、换页、动态链接和TCP/IP网络的操作系统。

Linux简介

①1991年 芬兰赫尔辛基大学的linus因不能随心所欲的使用强大的Unix系统而苦恼,于是开发了自己的操作系统,开始写的是一个简单的终端仿真软件,经过一学年的研发跟完善,就有了不太成熟但功能较全的Linux,并在年底发布了早期版本。

②于是吸引了很多开发者对代码修改跟完善,因为其许可证条款很自由,迅速成为了很多人的合作开发项目。到现在已经被广泛移植到多种体系架构之上

③Linux是类Unix系统,但它不是Unix,它没有使用Unix的源码,但它没有抛弃Unix的设计目标并且保证了应用程序编程接口一致,总的来说就是重新实现了Unix的功能。

④Linux是一个非商业化的产品,是一个互联网上的写作开发项目,Linux内核也是自由软件

操作系统和内核简介

①操作系统是指在整个系统中负责完成最基本功能和系统管理的那些部分,包括内核、设备驱动程序、启动引导程序、命令行shell或其他种类用户界面、基本的文件管理工具和系统工具。

②内核是操作系统的内在核心,系统其它部分需要依靠内核提供的服务,管理设备、分配资源等。

③应用程序、内核和硬件的层次关系

单内核与微内核

Linux是一个单内核,同时Linux也汲取了微内核的精华,模块化设计、抢占式内核、支持内核线程以及动态装载内核模块的能力。而且Linux还避免了微内核设计上性能损失的缺陷,让所有事情都运行在内核态,直接调用函数,无需消息传递。

原理

优势

劣势

典型代表

单内核

整个内核都在一个大内核地址空间上运行。

简单高效:内核各个功能之间的调用和调用函数类似,几乎没有性能开销。

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

Unix

Linux

微内核

内核按功能被划分成各个独立的过程。每个过程独立的运行在自己的地址空间上。

安全:内核的各种服务独立运行,一种服务挂了不会影响其他服务。

内核各个服务之间的调用涉及进程间的通信,比较复杂且效率低。

Windows NT内核

Mach(Mac OS X)

内核版本号

Linux内核有两种:稳定的和处于开发中的,稳定的内核具有工业级的强度,可以广泛应用和部署,内核的版本号主要有四个数组组成。比如版本号:2.6.26.1  其中(从左至右),

2  - 主版本号

6  - 从版本号

26 - 修订版本号

1  - 稳定版本号

这个内核的主版本号是2,从版本号是6,修订版本号是26,稳定版本号是1.

副版本号表示这个版本是稳定版(偶数)还是开发版(奇数),上面例子版本号是稳定版。

修订版本号的升级包括BUG修正,新的驱动和一些新的特性。

稳定版是为了解决版本发布周期变长,一些关键性bug修改或向前移植了处于开发版内核的重要修改而发布的。

《linux内核设计与实现》读书笔记linux内核简介

Unix的历史①Unix诞生于1969年,至今仍然被认为是现存操作系统中最强大和最优秀的系统。②Unix起源于一个失败的多用户操作系统Multics,Multics终止而Unix萌生。③1973年整个Unix操作系统用C语言进行了重写,为后面各种... 查看详情

《linux内核设计与实现》读书笔记-内核同步方法(代码片段)

...3.读写自旋锁4.信号量5.读写信号量6.互斥体7.完成变量8.大内核锁9.顺序锁10.禁止抢占11.顺序和屏障12.总结内核中提供了多种方法来防止竞争条件,理解了这些方法的使用场景有助于我们在编写内核代码 查看详情

《linux内核设计与实现》读书笔记linux进程管理(代码片段)

...于执行期的程序,通常进程还包含挂起的信号,内核内部数据,处理器状态,一个或多个具有内存映射的内存地址空间及一个或多个执行线程,还包含存放全局变量的数据段等。②线程是进程中活动的对象ÿ... 查看详情

《内核设计与实现》读书笔记-进程管理

...程序以及相关的资源的总称。线程是进程中活动的对象。内核调度的对象是线程,而不是进程。进程和线程的管理操作(比如创建和销毁)都是由内核来实现的。Linux中的进程于Windows相比是很轻量级的,而且不严格区分进程和线... 查看详情

《linux内核设计与实现》读书笔记-内核同步方法(代码片段)

...3.读写自旋锁4.信号量5.读写信号量6.互斥体7.完成变量8.大内核锁9.顺序锁10.禁止抢占11.顺序和屏障12.总结内核中提供了多种方法来防止竞争条件,理解了这些方法的使用场景有助于我们在编写内核代码时选用合适的同步方法&#... 查看详情

《linux内核设计与实现》笔记——内核同步简介

相关概念竞争条件多个执行线程(进程/线程/中断处理程序)并发(并行)访问共享资源,因为执行顺序不一样造成结果不一样的情况,称为竞争条件(racecondition)举例说明#include<thread>usingnamespacestd;inti=0;voidthread1(){//for(intx=0;x&... 查看详情

《linux内核设计与实现》读书笔记linux进程管理(代码片段)

...于执行期的程序,通常进程还包含挂起的信号,内核内部数据,处理器状态,一个或多个具有内存映射的内存地址空间及一个或多个执行线程,还包含存放全局变量的数据段等。②线程是进程中活动的对象ÿ... 查看详情

《linux内核设计与实现》笔记——vfs

关于VFS有一篇很好的博客http://www.ibm.com/developerworks/cn/linux/l-vfs/建议先阅读本文为基础,然后继续阅读该文章。VFS,虚拟文件系统,为用户提供了文件和文件系统相关的接口。这些接口可以跨越各种文件系统和不同介质执行。VFS... 查看详情

《linux内核设计与实现》学习笔记——中断中断处理程序

...线,每个irq线关联一个数值。中断处理程序响应中断时,内核会执行一个函数,中断处理程序/中断服务例程ISR,一个设备的中断处理程序是他的设备驱动的一部分。IO资源包括:中断,I/O端口,共享RAM,DMA。驱动程序需要管理注... 查看详情

《linux内核设计与实现》学习笔记——i/o调度算法

I/O调度子系统用于调度来自多个进程对块设备的I/O请求。电梯调度首先,如果队列中已存在一个对相邻磁盘扇区操作的请求,那么新请求将和这个已经存在的请求合并为一个请求。2.如果队列中存在一个驻留时间过长的请求,那... 查看详情

《linux内核设计与实现》知识整合与讲解-第一章

Linux内核简介第一章主要对Linux的内核进行一个大致的介绍,让大家对Linux的内核有一个比较全面的印象。众所周知Linux起源于unix系统,它们之间有着千丝万缕的联系,伟大的linux之父linus不满于当时unix对于源码更改的限制,花费... 查看详情

读薄《linux内核设计与实现》-中断与同步

这篇文章是《读薄「Linux内核设计与实现」》系列文章的第IV篇,本文主要讲了以下问题:中断和中断处理程序的概念与实现原理、Linux中的下半部以及内核同步方法。0x00中断和中断处理程序I中断中断是一种特殊的电信号,由硬... 查看详情

android深度探索——第十章读书笔记及心得

...学习了解了printk函数。该函数与printf函数类似,用于打印内核调试信息。只是前者运行在内核空间,后者运行在用户空间。即linux驱动这样的linux内核程序只能使用printk函数输出调试信息。Printk函数的原型:asmLinkKageintprintk(constcha... 查看详情

读书笔记

...在Linux驱动之上的一套翻字库。这套程序j率并不属于Linux内核,而是属于Linux内核层之上的应用层。 在传统的Linux.系统中Linux驱动一般有两种类型的代码:访问硬件寄存器的代码和业务逻辑有码。对于访问硬件寄存器的代码,... 查看详情

linux内核设计与实现的目录

参考技术A译者序序言前言作者简介第1章 Linux内核简介11.1 Unix的历史11.2 追寻Linus足迹:Linux简介21.3 操作系统和内核简介31.4 Linux内核和传统Unix内核的比较51.5 Linux内核版本71.6 Linux内核开发者社区81.7 小结8第2章 从内... 查看详情

《linux设计与实现》笔记——系统调用工作原理添加系统调用的过程

系统调用的意义为了和用户空间上的进程进行交互,内核提供的提供的一组接口。应用程序通过这组接口访问硬件和其他操作系统资源。完成对硬件和资源访问的控制。安全、可靠,多任务、虚拟必须硬件设备的抽象(提供设备... 查看详情

android深度探索(卷1)hal与驱动开发第九章 硬件抽象层:hal读书笔记

...在Linux驱动之上的一套程序库。这套程序库并不属于Linux内核,而是属于Linux内核层之上的应用层。HAL的主要目的一个是用来保护"私人财产",另一个是尽量避免应用程序直接访问Linux驱动程序。传统的Linux系统中Linux驱动一般有两... 查看详情

android深度探索(卷1)hal与驱动开发第十章 嵌入式linux的调试技术读书笔记

...开发板、Android模拟器以及一些函数、工具调试嵌入式Linux内核模块、可执行程序和共享库。1.打印内核调试信息:printk该函数的用法和printf函数类似,只不过printk函数运行在内核空间,printf函数运行在用户空间。函数原型:asmlinka 查看详情