【Linux内核设计思想】一、Linux内核介绍

在这里插入图片描述

欢迎关注博主 Mindtechnist 或加入【智能科技社区】一起学习和分享Linux、C、C++、Python、Matlab,机器人运动控制、多机器人协作,智能优化算法,滤波估计、多传感器信息融合,机器学习,人工智能等相关领域的知识和技术。关注公粽号 《机器和智能》 回复关键词 “python项目实战” 即可获取美哆商城视频资源!


博主介绍:
CSDN优质创作者,CSDN实力新星,CSDN内容合伙人;
阿里云社区专家博主;
华为云社区云享专家;
51CTO社区入驻博主,掘金社区入驻博主,支付宝社区入驻博主,博客园博主。



🎉🎉🎉🎉🎉 重磅福利 🎉🎉🎉🎉🎉
🎉本次送2套书 ,评论区抽2位小伙伴送书
🎉活动时间:截止到 2024-01-1610:00:00
🎉抽奖方式:评论区随机抽奖。
🎉参与方式:关注博主、点赞、收藏,评论。
❗注意:一定要关注博主,不然中奖后将无效!
🎉通知方式:通过私信联系中奖粉丝。
💡提示:有任何疑问请私信公粽号 《机器和智能》

在这里插入图片描述
《C语言从入门到精通(第6版)》从初学者的角度出发,以通俗易懂的语言、丰富多彩的实例,详细介绍了使用C语言进行程序开发需要掌握的各方面知识。


专栏:《Linux内核设计思想与源码分析


什么是Linux内核

Linux系统的基础包括内核、C库、编译器、工具集和系统的基本工具,比如登陆程序和shell。当我们说到Linux这个词时,一般指的是Linux内核。对于Linux系统来说,操作系统是指在整个系统中负责完成最基本功能和系统管理的那些部分,包括内核、设备驱动程序、启动引导程序、命令行shell或者其他用户界面、基本的文件管理工具和系统工具。

用户界面是操作系统的外在表现,而内核是操作系统的内在核心。操作系统的其他部分必须依靠内核所提供的服务,而内核实质也是一个软件。内核也叫做超级管理者或者操作系统核心。内核一般由负责响应中断的中断服务程序,负责管理多个进程从而分享处理器时间的调度程序,负责管理进程地址空间的内存管理程序和网络、进程间通信等系统服务程序共同组成。

内核态与用户态

对于提供保护机制的现代操作系统来说,内核独立于普通应用程序,它一般处于系统态,拥有受保护的内存空间和访问硬件设备的所有权限。这种系统态和受保护的内存空间统称为内核空间。

与之对应的,应用程序在用户空间执行,它们只能使用权限允许的部分系统资源,并且无法使用特定系统功能,不能直接访问硬件(应用程序想要访问硬件必须通过内核,而使用内核的接口一般称为系统调用,具体在后面有介绍),以及一些其他限制。

当内核运行的时候,系统以内核态进入内核空间,相反,普通用户程序以用户态进入用户空间。应用程序通过系统调用和内核通信来运行。

在这里插入图片描述

应用程序通过调用库函数,比如C库函数,再由库函数通过系统调用来让内核完成各种任务。一般来说,库函数提供的功能无法使用单独的系统调用来替代,特别是在一些复杂的库函数中,调用内核的操作往往只是整个函数功能的一个步骤。比如printf()函数,该函数提供了数据缓存和格式化等操作,但它只是在执行末期通过系统调用write()函数把最终数据写在输出流。当然,也有库函数和系统调用一一对应的情况,比如库函数open()和系统调用open()就是一一对应的,库函数open()就只是调用了系统调用open(),没有其它步骤。另外,也有一些库函数不需要系统调用,比如C库函数strcpy()等。

如果一个应用程序请求执行系统调用,我们之称为内核代其执行,此时,应用程序通过系统调用在内核空间运行,而内核此时一般被称为运行于进程上下文中。这种交互关系叫做,应用程序通过系统调用陷入内核,这是应用程序完成工作的基本方式。

内核同时还要负责管理系统的硬件设备,因此,几乎所有的体系结构都会提供中断机制。当硬件想和系统交互时,它会发出一个异步中断信号去打断内核正在执行的工作。中断都会对应一个中断号,内核通过中断号查找相应的中断服务程序,并调用这个中断服务程序来响应和处理中断。为了保证同步,内核可以停用所有的中断或者某个中断。另外,一般来说中断服务程序都不在进程上下文中执行,它们在一个与所有进程都无关的、专门的中断上下文中运行,这么做是为了保证中断服务程序能够在第一时间响应并处理中断请求,然后快速退出。

上下文是指内核活动的范围,一般来说,可以将处理器在任何时间的活动范围总结为下面三种情况:

  • 运行于内核空间,处于进程上下文,表示某个特定的进程执行;
  • 运行于内核空间,处于中断上下文,与任何进程无关,处理某个特定的中断;
  • 运行于用户空间,执行用户进程;

即便是CPU空闲时,也处于这三种情况之一,此时内核运行空进程,处于进程上下文,运行于内核空间。

内核与系统调用

操作系统是一个用来协调、管理和控制计算机硬件和软件资源的系统程序,它位于硬件和应用程序之间。操作系统包括

  • 操作系统内核:操作系统的核心代码。操作系统内核是一个管理和控制程序,负责管理计算机的所有物理资源,其中包括文件系统、内存管理、设备管理和进程管理。(应用程序→操作系统→硬件)
  • 系统调用接口:向外提供了使用内核的方法。应用程序(用户代码)要想使用或操作计算机硬件(硬盘、显卡、网卡等等),必须要经过操作系统。而操作计算机硬件的接口都是操作系统提供的,比如说我们要查找保存在硬盘上的一个文件,我们需要去向操作系统查询该文件的位置,找到这个文件的代码是操作系统内核中的某一块代码。实际上,内核代码是根据功能划分好一块一块的,比如说某一块是操作硬盘的,某一块是操作网卡的等等,每一个模块都有一个接口,当我们要查找磁盘文件的时候,就会直接通过操作硬盘的这个接口去内核中调用查找硬盘文件的代码,这就是系统调用的概念。

综上,操作系统具有承上启下的作用,向上服务于应用程序,向下可操作硬件,而操作系统是由内核与系统调用接口组成的,内核负责提供操作硬件的功能,系统调用负责与应用软件交互(被应用软件调用)。

在这里插入图片描述

操作系统用户界面有图形界面和命令行界面两种,Linux操作系统的发行版本有CentOS(服务器主流)、Ubuntu(主要用于开发)、Red Hat(服务器)等。

C库函数与系统调用

当我们在C语言程序中调用一个库函数的时候,比如调用printf()函数,实际上它是通过文件指针来指向要打印的位置的。并且,printf()函数会调用Linux的系统函数write()函数(它是一个系统接口,也可以人工调用),write()函数再继续调用sys_write()函数(这个函数只能是操作系统去调用),sys_write()继续调用设备驱动,具体调用哪个驱动要看输出的位置,如果是printf()打印到显示器上,那么就调用显示器驱动并打印在屏幕上,如果是写到网络上,就会调用网卡驱动。我们所作的只有在C程序中调用printf()等库函数,其余操作都是操作系统帮我们做的。请看下面这张图。

在这里插入图片描述

printf()函数在打印的时候通过一个文件指针来实现打印到某个文件的某个位置。在文件在文件指针中,包含了一个文件描述符,这个文件描述符用于指定目标文件,默认情况下就是STDOUT_FILENO也就是标准输出1号描述符;f_pos指定了读写的位置,比如我们打印的时候他会不停的在上一次打印的末尾位置打印后面的内容,就是通过这个位置去实现的;在最后还有一个缓冲区buffer,那么为什么要有buffer缓冲区呢,其实这是为了提高读写的效率,把读写的内容先放到缓冲区,这样就可以实现一次读写更多的内容。并且,这个缓冲区需要刷新才能得到输入输出。

在Linux下启动一个进程,就会默认打开三个文件描述符:0标准输入、1标准输出、2标准错误。它们分别对应C语言中的stdin、stdout、stderr。当我们每次打开一个文件,就会分配给这个文件一个当前空闲的最小文件描述符,如果此时标准输入0、标准输出1、标准错误2空闲,那么也会把这个文件描述符分配给新打开的文件但是这三个文件描述符0、1、2与stdin、stdout、stderr的对象关系不会变,并且在后续的操作中会把0、1、2指向的新文件当作标准输入输出和标准错误去处理,并将输入输出或错误信息打印到这个文件。

在系统API中,主要包含了这些函数:与文件IO相关的函数接口(比如open(),close(),write(),read()等);与文件属性相关的函数;与目录操作相关的函数;与目录遍历相关的函数;还有dup()、dup2()、fcntl()函数等。这些函数都属于系统调用,可以通过命令 man 2 functionname 查看。这里有个小技巧要注意,如果你直接输入 man functionname 没有显示出函数原型等信息,这就说明该函数也有对应的同名命令,这时候可以通过加章节来查看函数说明,比如 man 2 functionname 表示查看第二章,也就是系统调用API。

单内核与微内核

单内核是指把内核从整体上作为一个单独的大过程来实现,并同时运行在一个单独的地址空间。内核通常以单个静态的二进制文件形式存放在磁盘,所有内核服务都在这样一个大内核空间运行。因为都运行在内核态,且处于同一地址空间,所以内核间的通信变得不再重要,内核可以直接调用函数,与用户空间区别不大。

微内核的功能被划分为独立的过程,每个过程叫做一个服务器。只有强烈请求特权服务的服务器才运行在特权模式下,其他服务器都运行在用户空间,所有服务器都保持独立并运行在各自的地址空间。因此,微内核无法像单模块内核那样直接调用函数,而是通过消息传递处理微内核通信,各种服务器之间通过进程间通信(IPC)机制交互。这样,各个服务器相互独立,一个服务器的失效不会影响其他服务器。

模块化的系统允许一个服务器为了另一个服务器而换出。但是IPC机制的开销要大于函数调用,并且会涉及内核空间到用户空间的上下文切换,因此,消息传递需要一定的周期,而单内核中的函数调用就没有这些开销。微内核系统让大部分或者全部服务器位于内核,这样就可以直接调用函数,省去了频繁的上下文切换。Unix系统大多为单模块,Windows NT内核和Mach内核都是微内核。

Linux内核是一个单内核,它运行在单独的内核地址空间,但是它汲取了微内核的精华,相对于Unix内核,Linux内核有很多新的特性:

  • Linux支持动态加载内核模块。虽然Linux内核也是单内核,但是在需要的时候可以动态的卸载和加载部分内核代码;
  • Linux支持对称多处理(SMP)机制;
  • Linux内核可以抢占,允许在内核运行的任务优先执行;
  • Linux内核不区分线程和其他一般的进程,对内核来说,所有进程都一样,只不过有的共享资源;
  • Linux提供具有设备类的面向对象的设备模型、热插拔事件,以及用户空间的设备文件系统(sysfs);
  • Linux忽略了一些拙劣的Unix特性,并且很好的体现了自由的特性;

内核版本号与开发者社区

Linux内核版本号总共包含三个数字,用 . 隔开,第一个数字为主版本号,第二个数字为从版本号,第三个数字为修订版本号。从版本号可以分辨稳定版本和开发版本,偶数表示稳定版,奇数表示开发版。比如2.6.0表示稳定版。

内核社区邮件列表 Linux kernel mailing list ,可以在链接订阅邮件。

图书推荐 -《C语言从入门到精通》购买链接: 链接1 | 链接2

《C语言从入门到精通(第6版)》从初学者的角度出发,以通俗易懂的语言、丰富多彩的实例,详细介绍了使用C语言进行程序开发需要掌握的各方面知识。全书分为4篇,共20章,内容包括C语言概述、算法、数据类型、运算符与表达式、数据输入/输出、选择结构、循环控制、数组、函数、指针、结构体和共用体、位运算、预处理、文件、内存管理、网络套接字编程、单词背记闯关游戏、学生信息管理系统、单片机基础和GSM短信控制家庭防盗报警系统。书中所有知识都结合具体实例进行介绍,涉及的程序代码给出了详细的注释,读者可以轻松领会C语言程序开发的精髓,快速提高开发技能。
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

“软件开发视频大讲堂”丛书是清华社计算机专业基础类零售图书畅销品牌之一。
(1)2008—2023年,丛书累计修订7次,销售400万册,深受广大程序员喜爱。
(2)4本荣获“全行业优畅销书”奖,1本荣获清华社“专业畅销书”一等奖,多数品种在全国计算机零售图书排行榜排行中名列前茅。
(3)实用、易懂、资源丰富,被数百所高校选为专业课教材。
《C语言从入门到精通(第6版)》介绍主流开发环境Visual C 6.0、Visual Studio 2022和Dev C ,图书特点如下。

  1. 学通C语言只需要4步:基础知识→核心技术→高级应用→项目实战,符合认知规律。
  2. 204集同步教学微课 强化实战训练 在线答疑,夯实基础,精准,有效,速练,适合自学。
  3. 171个应用实例 118个编程训练 110个综合练习 3个项目案例,学习1小时,训练10小时,从入门到项目上线,真正成为C语言高手。
  4. 根据图书首页说明,扫描书中二维码,打开明日科技账号注册页面,填写注册信息后将自动获取C语言开发资源库一年(自注册之日起)的VIP使用权限。
    (1)技术资源库:323个技术要点,系统、全面,随时随地学习。
    (2)技巧资源库:300个开发技巧,快速扫除盲区,掌握更多实战技巧,精准避坑。
    (3)实例资源库:359个应用实例,含大量热点实例和关键实例,巩固编程技能。
    (4)项目资源库:19个实战项目,快速积累项目经验,总有一个你找工作会用到。
    (5)源码资源库:378项源代码详细分析,多读源码,快速成长。
    (6)视频资源库:451集学习视频,边看视频边学习,提升更快。
    (7)面试资源库:C语言企业面试真题,合理职业规划,快速就业。
    学会、用好C语言开发资源库,可在短时间内从小白晋升为一名软件工程师。
  5. 在线解答,高效学习。
    (1)关注清大文森学堂公众号,可获取本书的源代码、PPT课件、视频等资源。
    (2)关注清大文森学堂公众号,可加入本书的学习交流群,参加图书直播答疑。

在这里插入图片描述

在这里插入图片描述

  • 80
    点赞
  • 49
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 38
    评论
### 回答1: 《Linux内核设计艺术》是一本经典的关于Linux内核设计的书籍,它由林翰著。在这本书中,作者通过对Linux内核的分析和解读,探讨了Linux内核设计的各个方面及其与操作系统理论的关系。这本书深入浅出地介绍Linux内核的各个方面,包括进程管理、文件系统、内存管理、设备驱动等等。通过对实际的代码进行解析,读者可以更好地理解Linux内核设计原理和实现细节。 《Linux内核设计艺术》一书对于想要深入了解Linux内核的开发人员来说是一本非常有价值的参考书籍。它不仅帮助读者理解Linux内核设计思路,还提供了许多实用的技术和方法。本书中介绍的一些设计原则和技术在Linux内核开发中被广泛应用,成为了解决实际问题的重要工具。 此外,本书还介绍Linux内核开发的一些实践经验,包括调试技巧、性能优化、安全性等方面的内容。这些实践经验对于初学者和有一定经验的开发人员都非常有帮助,可以帮助开发人员更好地理解和掌握Linux内核设计和开发。 总之,作为一本关于Linux内核设计的重要参考书,《Linux内核设计艺术》深入浅出地介绍Linux内核设计原理和实现细节。无论是想要深入了解Linux内核的开发人员,还是对操作系统设计感兴趣的读者,都可以从中获得很多宝贵的知识和经验。通过阅读本书,读者可以更好地理解和掌握Linux内核设计艺术。 ### 回答2: 《Linux内核设计艺术》是由美国著名程序员林纳斯·托瓦兹撰写的一本经典著作,对于理解Linux内核设计原理和艺术有着重要的指导意义。 首先,Linux内核是一个模块化、可扩展的操作系统内核。它采用了微内核和宏内核设计思想,在保持内核简洁的同时,通过模块加载的方式提供了丰富的功能扩展。 其次,Linux内核设计注重性能优化和资源管理。通过进程调度、内存管理、IO调度等机制,充分利用计算机硬件资源,提高系统的运行效率和响应速度。同时,内核设计还考虑了系统的稳定性和安全性,通过权限控制、虚拟内存等机制保证了系统的稳定和安全。 另外,Linux内核设计还注重可靠性和可移植性。在不同的硬件平台上能够保持一致的接口和行为,使得应用程序在不同的平台上能够无缝运行,提高了开发和部署的灵活性。 此外,Linux内核设计还强调了开放性和社区参与。通过开源的方式,让更多的开发者参与到内核设计和开发过程中,吸取各种意见和建议,使得内核更加符合用户的需求。 总之,《Linux内核设计艺术》通过深入的剖析和实例讲解,揭示了Linux内核设计的奥妙与艺术。对于理解Linux内核设计原则和实践,以及对于开发人员提供了一个宝贵的参考和学习资料。 ### 回答3: Linux内核设计艺术是一本由林宇翔所著的图书,通过对Linux内核的深入研究和分析,阐述了Linux内核设计原理以及艺术之处。该书从内核存储管理、进程管理、中断处理、文件系统等多个方面进行了详细的讲解。 Linux内核凭借其开源的特性,成为了广大开发者和研究人员的首选平台,被广泛应用于服务器、移动设备、嵌入式系统等各个领域。而正确理解并熟练掌握Linux内核设计艺术,将对开发者在Linux环境下进行软件开发和系统调优提供帮助。 该书首先介绍Linux内核的运行机制和基本原理,深入分析了Linux内核设计的哲学和设计原则。随后,阐述了内存管理和进程管理的相关内容,包括内存分配、虚拟内存、文件映射等方面。此外,还探讨了中断处理、设备驱动和I/O管理的知识点,以及文件系统、网络协议栈等核心模块的实现细节。 这本书还介绍了一些用户态工具,帮助读者更好地理解Linux内核设计与实现,同时提供了学习和研究Linux内核的一些实践经验和方法。书中的案例分析和示例代码也为读者提供了实践的机会,促使读者通过动手实践进一步加深对Linux内核设计原理的理解。 总之,Linux内核设计艺术是一本深入浅出、全面系统的介绍Linux内核设计原理和技术细节的图书,对于想要更深入了解和研究Linux内核的开发者和研究人员来说,具有很高的参考价值。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mindtechnist

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值