Linux内核简介

深入了解Linux内核: 全面指南(学习方法+学习路线) 让程序员更好地理解代码质量的重要性,并掌握代码设计模式和最佳实践,更好地理解系统中的复杂问题,并提出更有效的解决方案。学习内核的目的,可以了解一下操作系统的基本知识和内核的作用。内核是操作系统的核心组件,负责管理计算机的资源,包括处理器、内存、输入输出设备等。学习Linux内核技术可以从事计算机领域多个方向的工作,包括操作系统开发、嵌入式系统、驱动程序、网络协议栈、大数据、安全等多个领域。Linux内核是计算机领域的重要组成部分,对于从事相关工作的人员来说,了解和掌握Linux内核技术是非常有益的。 阅读详情

大纲:
理解Linux内核最好预备的知识点
Linux内核的特点
Linux内核的任务
内核的组成部分
哪些地方用到了内核机制?
Linux进程
Linux创建新进程的机制
Linux线程
内核线程
地址空间与特权级别
虚拟地址与物理地址
特权级别(Linux的两种状态)
系统调用
设备驱动程序、块设备和字符设备
网络
文件系统
模块和热插拔

注:本文为《深入Linux内核架构》 的学习笔记

理解Linux内核最好预备的知识点:

懂C语言
懂一点操作系统的知识
熟悉少量相关算法
懂计算机体系结构

Linux内核的特点:

结合了unix操作系统的一些基础概念

Linux内核的任务:

1.从技术层面讲,内核是硬件与软件之间的一个中间层。作用是将应用层序的请求传递给硬件,并充当底层驱动程序,对系统中的各种设备和组件进行寻址。
2.从应用程序的层面讲,应用程序与硬件没有联系,只与内核有联系,内核是应用程序知道的层次中的最底层。在实际工作中内核抽象了相关细节。
3.内核是一个资源管理程序。负责将可用的共享资源(CPU时间、磁盘空间、网络连接等)分配得到各个系统进程。

4.内核就像一个库,提供了一组面向系统的命令。系统调用对于应用程序来说,就像调用普通函数一样。

内核实现策略:

1.微内核。最基本的功能由中央内核(微内核)实现。所有其他的功能都委托给一些独立进程,这些进程通过明确定义的通信接口与中心内核通信。

2.宏内核。内核的所有代码,包括子系统(如内存管理、文件管理、设备驱动程序)都打包到一个文件中。内核中的每一个函数都可以访问到内核中所有其他部分。目前支持模块的动态装卸(裁剪)。Linux内核就是基于这个策略实现的。

内核的组成部分:

1.用户空间(在“地址空间与特权级别”小节会详细介绍):
应用程序:
C库

2.内核空间(在“地址空间与特权级别”小节会详细介绍):
核心内核
设备驱动程序

硬件

详细可参考图1

在这里插入图片描述

图1 Linux内核组成部分

哪些地方用到了内核机制?

1.进程(在cpu的虚拟内存中分配地址空间,各个进程的地址空间完全独立;同时执行的进程数最多不超过cpu数目)之间进行通 信,需要使用特定的内核机制。
2.进程间切换(同时执行的进程数最多不超过cpu数目),也需要用到内核机制。
进程切换也需要像FreeRTOS任务切换一样保存状态,并将进程置于闲置状态/恢复状态。

3.进程的调度。确认哪个进程运行多长的时间。

Linux进程

1.采用层次结构,每个进程都依赖于一个父进程。内核启动init程序作为第一个进程。该进程负责进一步的系统初始化操作。init进程是进程树的根,所有的进程都直接或者间接起源于该进程。
2.通过pstree命令查询。实际上得系统第一个进程是systemd,而不是init(这也是疑问点)

3.系统中每一个进程都有一个唯一标识符(ID),用户(或其他进程)可以使用ID来访问进程。

Linux创建新进程的机制;
1.使用fork函数。
功能:创建当前进程的一个副本。父进程和子进程只有PID(进程ID)不同。父进程的内容被复制。(写时复制:可以了解下这个概念)

    2.使用exec函数。
功能:将一个新程序加载到当前进程的内存中并执行。旧程序的内存页将刷出,其内容替换为新的数据。然后开始执行新程序。

Linux线程

进程可以看成是一个正在执行的程序,而线程则是与主程序并行运行的程序函数或例程。

Linux创建新线程
采用clone方法创建线程。

内核线程
特点:
1.不与任何特定的用户空间进程相关联。
2.与中断上下文运转的内核相比,内核线程可以进入睡眠状态,也可以像系统中的普通进程一样被调度器跟踪。

用途:
1.从内存和块设备之间的数据同步。
2.帮助调度器在CPU上分配进程。

如何查看内核线程:
命令:ps fax   方括号内的就是内核线程。

地址空间与特权级别

在正式介绍之前先介绍几个单位:

KiB 2^10字节
MiB 2^20

GiB 2^30

地址空间
虚拟地址与物理地址:

    虚拟地址:在计算机的专用术语中是指标识一个虚拟(非物理地址)的实体地址。

    物理地址:切切实实存在的地址。在存储器里以字节为单位存储信息,为正确地存放或取得信息,每一个字节单元给以一个唯一的存储器地址,称为物理地址。

    映射关系:
        用页表为物理地址分配虚拟地址
注意:未必虚拟地址的所有页都映射到某个页帧。
原因:
	1.页没有内存可以使用
	2.数据尚不需要使用而没有载入内存。
	3.页已经换出硬盘,需要时再换回内存。


页帧:物理内存页
页:专指虚拟地址空间中的页。
页表:将虚拟地址空间映射到物理地址空间的数据结构。
多级分页:建立虚拟地址到物理地址映射的一种方法,能有效减少内存用量。


CPU加速内存的访问过程,方法:
1.MMU(Memory Management Unit)内存管理单元
2.TLB(Translation Lookaside Buffer)地址转换后备缓冲器
IA-32位结构的CPU只需要使用二级页表,Linux内核总是使用四级页表,剩余部分由内核通过控页表对缺少的页表进行仿真。

概念注意:

1.CPU的字长决定了所能管理的地址空间的最大长度。对于32位系统是2^32 B = 4GiB
2.虚拟地址空间:地址空间的最大长度与实际可用的物理内存的数量无关。
虚拟地址空间划分为两个部分:
	内核空间
	用户空间

            如图2所示:

在这里插入图片描述

图2 虚拟内存的划分

    有个等价名称值得一提:

用户层:指应用程序本身。指不属于内核的东西。
用户空间:不仅可以表示应用程序,还指代应用程序所运行的虚拟地址空间的一部分。与内核空间相对。
注意:每一个进程都有上述独立的虚拟地址空间。对于图2所示,每个进程有4GiB的内存空间。

特权级别
Linux有两种状态,两种状态代表两种特权级别:
核心态:在虚拟地址的内核空间运行的状态。
用户状态:在虚拟地址的用户空间运行的状态。
注意:在用户状态禁止访问内核空间

    这两种状态的差别在于:对高于TASK_SIZE的内存区域的访问。

系统调用
定义:从用户状态到核心态的切换通过系统调用的特定手段完成。
方法:
1.内核代表用户程序执行代码
2.异步硬件中断激活,然后在中断上下文中进行。注意:在中断上下文运行时,内核不能进入睡眠状态。
注意:
CPU大多数在执行用户空间中的代码。当应用程序执行系统调用时,则会切换到核心态,内核将完成其请求。在此期间,内核可以访问虚拟地址空间的用户部分。在系统调用完成之后,CPU切换回用户状态。

    硬件中断也使CPU切换到核心态,但这种情况下内核不能访问用户空间。

    系统调用有哪些:

            进程管理
	信号
	文件
	目录和文件系统
	保护机制
	定时器函数

如:在IA-32处理器上,Linux使用一个专用软件中断执行系统调用。

设备驱动程序、块设备和字符设备
设备驱动程序的任务:是在于支持应用程序经由设备文件与设备通信。换言之,使得能按恰当的方式在设备上读取/写入数据。
设备驱动程序的定义:用于与系统连接的输入/输出装置通信。如硬盘、软驱、各种接口、声卡等。

外设分为两类:
1.字符设备。提供连续的数据流,数据可以顺序读取,通常不支持随机存取。支持按字节/字符来读写数据。
	典型:调制解调器
2.块设备。可以随机访问设备数据,程序可以自行确定读取数据的位置。不支持基于字符寻址,数据读写只能以块的倍数进行。
	典型:硬盘。
	复杂性:比字符设备复杂,因为设计到缓存机制。

网络
网卡也可以通过设备驱动程序控制。
但在内核中,网卡不能以设备文件访问。因为网络通信期间数据打包到各种协议层,内存处理数据必须针对协议层处理,才能有效将数据对接应用程序。
为了支持用文件接口处理网络连接。Linux提供了套接字抽象,套接字可以看成是应用程序、文件接口、内核的网络实现之间的代理。

文件系统
文件存储在硬盘或者其他块设备(如光盘等),采用层次式文件系统。
文件系统使用目录结构主治存储的数据,并将其他原信息(如所有者、访问权限等)关联起来。

Linux支持许多不同的文件系统:
如标准的Ext2和Ext3文件系统、ReiserFS、XFS、VFAT等


注意:软件层(Virtual Filesystem虚拟文件系统)内核必须提供一个额外的软件层,将各种底层的文件系统的具体特征与应用层隔离开。如图3所示。

图3 文件系统的额外软件层
在这里插入图片描述
参考文献:

[1]Wolfgang Mauerer.《深入Linux内核架构》 Wolfgang Mauerer著 郭旭译 人民邮电出版社
————————————————
版权声明:本文为优快云博主「TommyMusk」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.youkuaiyun.com/TommyMusk/article/details/80714364

【Linux内核设计与实现】Linux内核简介 之前在读《APUE》的时候,更多的是从上层去了解如何使用Linux系统的API,那个时候就十分喜欢Linux的设计,觉得一切都很奇妙。最近有些迷茫,不知道自己以后更加具体的技术方向在哪,所以最近广泛阅读了很多方面的书——C++方面,服务端网络编程方面,多线程方面,操作系统内核方面。在linux内核方面,目前打算阅读两本书,《Linux内核设计与实现》就是其中一本,另一本是《深入理解linux内核》。 阅读详情

相关推荐

Virtuoso集成HspiceD:打通模拟设计全流程的仿真与PEX实战

本文详细介绍了Virtuoso集成HspiceD在模拟设计全流程中的应用,包括仿真与PEX实战。通过无缝衔接Virtuoso和HspiceD,设计师可以在同一环境中完成从原理图设计到PEX后仿真的全流程,大幅提升工作效率。文章还提供了仿真环境配置、前仿真关键设置、PEX全流程详解以及性能调优等实用技巧。

weixin_29271263的博客 97

深度:一文看懂Linux内核!Linux内核架构和工作原理详解

简介 作用是将应用层序的请求传递给硬件,并充当底层驱动程序,对系统中的各种设备和组件进行寻址。目前支持模块的动态装卸(裁剪)。Linux内核就是基于这个策略实现的。Linux进程1.采用层次结构,每个进程都依赖于一个父进程。内核启动init程序作为第一个进程。该进程负责进一步的系统初始化操作。init进程是进程树的根,所有的进程都直接或者间接起源于该进程。virt/ ---- 提供虚拟机技术的支...

jinking01的专栏 5万+

ArcGIS实验教程——实验十七:缓冲区分析(Buffer Analysis)

【实验描述】缓冲区(Buffer)是为了识别某一地理实体对周围地物的影响而在其周围建立的一定宽度多边形区域,缓冲区分析(Buffer Analysis)是用来确定不同地理要素的空间临近性或接近程度的一种分析方法。作为GIS的空间分析方法之一,缓冲区分析的应用范围特别广泛,常用于分析矢量实体对周围的影响。例如,工厂排放的废水废气所影响的空间范围等等。 一、缓冲区的基本概念 1、缓冲区 是地理空间目标的一种影响范围或服务范围。 2、缓冲区分析 指根据分析对象的点、线、面实体,自动建立它们周围一定距离的带

智慧空间实验室 1万+

Linux内核详解,什么是linux内核?

linux 内核是 Linux 操作系统的核心组件,负责管理计算机的硬件资源、提供系统调用接口、调度进程和管理内存等重要功能。本文将详细介绍 Linux 内核的组成、功能和关键技术,以及其在操作系统中的重要作用。

naer_chongya的博客 5006

回归预测 | MATLAB实现基于贝叶斯线性回归(Bayesian Regression)的多变量输入回归预测

回归预测 | MATLAB实现基于贝叶斯线性回归(Bayesian Regression)的多变量输入回归预测

机器学习之心的博客,关注并私信文章链接,获取对应文章源码和数据。 2199

Python中的join函数的用法

从语法、实例、应用三方面详尽地介绍join函数

阿黎逸阳的博客 2万+

科普文:图文探究Linux内核

本文主要讲解什么是Linux内核,以及通过多张图片展示Linux内核的作用与功能,以便于读者能快速理解什么是Linux内核,能看懂Linux内核。拥有超过1300万行的代码,Linux内核是世界上最大的开源项目之一,但是内核是什么,它用于什么?

为无为,事无事,味无味。 3864

NVIDIA - 人形机器人扼要

人形机器人是仿照人类外形设计的通用双足机器人,旨在与人类并肩工作,提高生产效率。它们能够学习和执行各种任务,如抓取物体、移动集装箱、装卸箱子等。

机器人控制与仿真应用 1289

Linux内核编译只看这一篇就够了

Linux嵌入式操作系统-附加实验内核编译

CCSco4355 1万+

EtherCAT用TwinCAT 3跑DC报0x2C或者0x1A错误码

EtherCAT用TwinCAT 3跑DC报0x2C或者0x1A DC报错 ///////////////////////////////////////////////////////////////////////////////////////// /** \brief Checks communication and synchronisation variables and update AL status / AL status code if an error has occurr

PI_sunyang的博客 5307

Sigrity Power DC Single-BoardPackage IR Drop Analysis模式进行单板压降仿真分析操作指导

如果需要单独对某个via设置参数,右侧选择Setup by padstack,下方下拉选择某个via,单独设置参数即可。举例:板厚1.6mm,内层1OZ(1.2mil,即0.03mm),铜皮宽度1mm,20度温升,允许通流I为2.5A。目的是模拟实际情况,via的孔壁电镀1mil,中间是空心的,让via不完全被填充金属成为实心via。Upper/lower Tolerance:上下公差,设置为5%,也就是压降允许的范围。电流密度计算公式:J=I/A(J为电流密度,I为电流,A为横截面积)

weixin_54787054的博客 697

《Linux内核设计与实现》第一章 Linux内核简介

Rush6666的博客 194

海思3403烧结、复用及mic输入

3403调试的第一步是版本烧结,版本烧结经常遇到问题,本文记录总结遇到的各种问题。

平面到立体 1354

Linux 内核简介

简单介绍Linux的内容以及常用网站

qq_40500099的博客 1011

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Linux内核:简介

本文译自Linux.orgDevynCJohnson的系列文章《Linux内核》,本篇链接:http://www.linux.org/threads/%EF%BB%BFthe-linux-kernel-introduction.4203/,转载请注明出处及原作者。1991年,一位芬兰学生Linus Benedict Torvalds制作了目前十分流行的内核。他于1991年九月和1992年二月发布了基

gabsleo的博客 559

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

linux内核简介

                                 &...

qq_45595830的博客 203

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

linux内核简介,Linux内核简介

https://blog.youkuaiyun.com/TommyMusk/article/details/80714364大纲:理解Linux内核最好预备的知识点Linux内核的特点Linux内核的任务内核的组成部分哪些地方用到了内核机制?Linux进程Linux创建新进程的机制Linux线程内核线程地址空间与特权级别虚拟地址与物理地址特权级别(Linux的两种状态)系统调用设备驱动程序、块设备和字符设备网...

weixin_35952362的博客 162

Linux 内核引导参数简介

概述 内核引导参数大体上可以分为两类:一类与设备无关、另一类与设备有关。与设备有关的引导参数多如牛毛,需要你自己阅读内核中的相应驱动程序源码以获取其能够接受的引导参数。比如,如果你想知道可以向 AHA1542 SCSI 驱动程序传递哪些引导参数,那么就查看 drivers/scsi/aha1542.c 文件,一般在前面 100 行注释里就可以找到所接受的引...

humanof的专栏 1284

Linux内核(一)——Linux内核简介

单内核:单内核就是把它从整体上作为一个单独的大过程来实现,同时也运行在一个单独的地址空间上。内核之间的通信是微不足道的,因为大家都运行在内核态,并身处同一地址空间,内核可以直接调用函数,这与用户空间应用程序没有什么区别。不仅如此,Linux还避其微内核设计上性能损失的缺陷,让所有事情都运行在内核态,直接调用函数,无须消息传递。内核的概念:内核(Kernel)是操作系统的核心部分,是操作系统中直接与硬件交互的部分。内核空间:内核空间是操作系统核心运行的环境,它直接与硬件交互,控制所有系统资源。

qq_46146657的博客 2741
上一篇: linux内核与linux发行版之间的关系
下一篇: Linux开发工具
闪烁丶星空
博客等级 码龄7年 13粉丝 19原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值