欢迎关注博主 Mindtechnist 或加入【智能科技社区】一起学习和分享Linux、C、C++、Python、Matlab,机器人运动控制、多机器人协作,智能优化算法,滤波估计、多传感器信息融合,机器学习,人工智能等相关领域的知识和技术。关注公粽号 《机器和智能》 回复关键词 “python项目实战” 即可获取美哆商城视频资源!
博主介绍:
CSDN优质创作者,CSDN实力新星,CSDN内容合伙人;
阿里云社区专家博主;
华为云社区云享专家;
51CTO社区入驻博主,掘金社区入驻博主,支付宝社区入驻博主,博客园博主。
Linux内核介绍
🎉🎉🎉🎉🎉 重磅福利 🎉🎉🎉🎉🎉
🎉本次送2套书 ,评论区抽2位小伙伴送书
🎉活动时间:截止到 2024-01-1610:00:00
🎉抽奖方式:评论区随机抽奖。
🎉参与方式:关注博主、点赞、收藏,评论。
?注意:一定要关注博主,不然中奖后将无效!
🎉通知方式:通过私信联系中奖粉丝。
💡提示:有任何疑问请私信公粽号 《机器和智能》
《C语言从入门到精通(第6版)》从初学者的角度出发,以通俗易懂的语言、丰富多彩的实例,详细介绍了使用C语言进行程序开发需要掌握的各方面知识。
Linux系统的基础包括内核、C库、编译器、工具集和系统的基本工具,比如登陆程序和shell。当我们说到Linux这个词时,一般指的是Linux内核。对于Linux系统来说,操作系统是指在整个系统中负责完成最基本功能和系统管理的那些部分,包括内核、设备驱动程序、启动引导程序、命令行shell或者其他用户界面、基本的文件管理工具和系统工具。
用户界面是操作系统的外在表现,而内核是操作系统的内在核心。操作系统的其他部分必须依靠内核所提供的服务,而内核实质也是一个软件。内核也叫做超级管理者或者操作系统核心。内核一般由负责响应中断的中断服务程序,负责管理多个进程从而分享处理器时间的调度程序,负责管理进程地址空间的内存管理程序和网络、进程间通信等系统服务程序共同组成。
对于提供保护机制的现代操作系统来说,内核独立于普通应用程序,它一般处于系统态,拥有受保护的内存空间和访问硬件设备的所有权限。这种系统态和受保护的内存空间统称为内核空间。
与之对应的,应用程序在用户空间执行,它们只能使用权限允许的部分系统资源,并且无法使用特定系统功能,不能直接访问硬件(应用程序想要访问硬件必须通过内核,而使用内核的接口一般称为系统调用,具体在后面有介绍),以及一些其他限制。
当内核运行的时候,系统以内核态进入内核空间,相反,普通用户程序以用户态进入用户空间。应用程序通过系统调用和内核通信来运行。
应用程序通过调用库函数,比如C库函数,再由库函数通过系统调用来让内核完成各种任务。一般来说,库函数提供的功能无法使用单独的系统调用来替代,特别是在一些复杂的库函数中,调用内核的操作往往只是整个函数功能的一个步骤。比如printf()函数,该函数提供了数据缓存和格式化等操作,但它只是在执行末期通过系统调用write()函数把最终数据写在输出流。当然,也有库函数和系统调用一一对应的情况,比如库函数open()和系统调用open()就是一一对应的,库函数open()就只是调用了系统调用open(),没有其它步骤。另外,也有一些库函数不需要系统调用,比如C库函数strcpy()等。
如果一个应用程序请求执行系统调用,我们之称为内核代其执行,此时,应用程序通过系统调用在内核空间运行,而内核此时一般被称为运行于进程上下文中。这种交互关系叫做,应用程序通过系统调用陷入内核,这是应用程序完成工作的基本方式。
内核同时还要负责管理系统的硬件设备,因此,几乎所有的体系结构都会提供中断机制。当硬件想和系统交互时,它会发出一个异步中断信号去打断内核正在执行的工作。中断都会对应一个中断号,内核通过中断号查找相应的中断服务程序,并调用这个中断服务程序来响应和处理中断。为了保证同步,内核可以停用所有的中断或者某个中断。另外,一般来说中断服务程序都不在进程上下文中执行,它们在一个与所有进程都无关的、专门的中断上下文中运行,这么做是为了保证中断服务程序能够在第一时间响应并处理中断请求,然后快速退出。
上下文是指内核活动的范围,一般来说,可以将处理器在任何时间的活动范围总结为下面三种情况:
即便是CPU空闲时,也处于这三种情况之一,此时内核运行空进程,处于进程上下文,运行于内核空间。
操作系统是一个用来协调、管理和控制计算机硬件和软件资源的系统程序,它位于硬件和应用程序之间。操作系统包括
综上,操作系统具有承上启下的作用,向上服务于应用程序,向下可操作硬件,而操作系统是由内核与系统调用接口组成的,内核负责提供操作硬件的功能,系统调用负责与应用软件交互(被应用软件调用)。
操作系统用户界面有图形界面和命令行界面两种,Linux操作系统的发行版本有CentOS(服务器主流)、Ubuntu(主要用于开发)、Red Hat(服务器)等。
当我们在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内核版本号总共包含三个数字,用 . 隔开,第一个数字为主版本号,第二个数字为从版本号,第三个数字为修订版本号。从版本号可以分辨稳定版本和开发版本,偶数表示稳定版,奇数表示开发版。比如2.6.0表示稳定版。
内核社区邮件列表 Linux kernel mailing list ,可以在链接订阅邮件。
《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 ,图书特点如下。
- 学通C语言只需要4步:基础知识→核心技术→高级应用→项目实战,符合认知规律。
- 204集同步教学微课 强化实战训练 在线答疑,夯实基础,精准,有效,速练,适合自学。
- 171个应用实例 118个编程训练 110个综合练习 3个项目案例,学习1小时,训练10小时,从入门到项目上线,真正成为C语言高手。
- 根据图书首页说明,扫描书中二维码,打开明日科技账号注册页面,填写注册信息后将自动获取C语言开发资源库一年(自注册之日起)的VIP使用权限。
(1)技术资源库:323个技术要点,系统、全面,随时随地学习。
(2)技巧资源库:300个开发技巧,快速扫除盲区,掌握更多实战技巧,精准避坑。
(3)实例资源库:359个应用实例,含大量热点实例和关键实例,巩固编程技能。
(4)项目资源库:19个实战项目,快速积累项目经验,总有一个你找工作会用到。
(5)源码资源库:378项源代码详细分析,多读源码,快速成长。
(6)视频资源库:451集学习视频,边看视频边学习,提升更快。
(7)面试资源库:C语言企业面试真题,合理职业规划,快速就业。
学会、用好C语言开发资源库,可在短时间内从小白晋升为一名软件工程师。- 在线解答,高效学习。
(1)关注清大文森学堂公众号,可获取本书的源代码、PPT课件、视频等资源。
(2)关注清大文森学堂公众号,可加入本书的学习交流群,参加图书直播答疑。