零基础学Linux内核:1、Linux源码组织架构

文章目录

  • 前言
  • 一、Linux内核的特征
  • 二、Linux操作系统结构
    • 1.Linux在系统中的位置
    • 2.Linux内核的主要子系统
    • 3、Linux系统主要数据结构
  • 三、linux内核源码组织
    • 1、下载Linux源码
    • 2、Linux版本号
    • 3、linux源码架构目录讲解


前言

这里将是我们从零开始学习Linux的第一节,这节课我们将了解Linux源码的各个文件夹的组成与含义。


一、Linux内核的特征

1、开源:Linux内核是开源的,用户和开发者可以自由地查看、学习、修改和分发内核代码,促进了协作和创新。

2、可移植性:Linux内核被设计为高度可移植的,可以在各种不同的硬件平台上运行,包括个人计算机、服务器、嵌入式设备、移动设备等。

3、多任务和多用户支持:Linux内核支持多任务和多用户操作。它可以同时运行多个程序,并为每个程序提供独立的执行环境。

4、强大的网络支持:Linux内核具有强大的网络支持,包括TCP/IP协议栈、网络设备驱动程序和网络协议的实现。

5、模块化设计:Linux内核采用了模块化的设计,允许核心功能和设备驱动程序以模块的形式加载和卸载,提高了系统的灵活性和可维护性。

6、良好的性能和可靠性:Linux内核经过长时间的发展和优化,具有良好的性能和可靠性。

7、支持广泛的硬件和软件生态系统:Linux内核支持广泛的硬件设备和软件应用。它具有丰富的设备驱动程序和接口,可以与各种硬件设备和外部设备进行通信。同时,Linux拥有庞大的开源软件生态系统,提供了各种应用程序、开发工具和库,满足了不同用户和开发者的需求。

二、Linux操作系统结构

1.Linux在系统中的位置

在这里插入图片描述

2.Linux内核的主要子系统

Linux内核可以根据功能和任务划分为以下几个主要的子系统:

1、进程管理子系统:负责管理进程的创建、调度、终止和通信等任务。

2、文件系统子系统:提供文件和目录的管理、访问和操作功能,包括各种文件系统的实现。

3、网络子系统:处理网络协议栈、网络设备驱动程序和网络通信等网络相关任务。

4、内存管理子系统:管理系统内存的分配、释放和映射,包括虚拟内存管理和页面置换等功能。

5、设备驱动程序子系统:提供与硬件设备的交互和控制,包括各种设备驱动程序的实现。

每个子系统都有特定的责任和功能,通过协同工作,实现了Linux内核的全面功能和可靠性。

Linux内核还包含其他子系统,如电源管理子系统、安全子系统、时钟和定时器子系统等,这些子系统也在特定领域提供了重要的功能和服务。

3、Linux系统主要数据结构

在Linux内核中,有以下这些使用频率较高的数据结构:

task_struct: 代表一个进程数据结构指针,形成一个task数据
mm_struct:代码进程的虚拟内存
inode:代表虚拟文件系统中的文件、目录等对应的索引节点

还有很多相关的数据结构,我们后面慢慢讲

三、linux内核源码组织

1、下载Linux源码

想要更快的了解Linux架构,那么首先需要下载一版Linux源码,关于如何下载Linux源码:可以查看我之前写的文章:https://blog.csdn.net/qq_43257914/article/details/134344756?spm=1001.2014.3001.5501

2、Linux版本号

在这里插入图片描述

linux内核版本有两种:稳定版、开发版
linux内核版本号由3组数字组成
1、第一组:内核主版本
2、第二组:偶数表示稳定版本、奇数表示开发中版本
3、第三组:错误修补此数
举个例子:linux-4.5.1
4:主版本号
5:此版本号,表示开发中版本(因其为奇数)
1:修订版本号,表示修改次数

3、linux源码架构目录讲解

arch: 			不同平台体系相关代码
block:		 	块设备驱动
certs: 			与认证和签名相关代码
crypto: 		内核常用加密、压缩算法等代码
Documentation:	描述模块功能和协议规范代码
Driver:		驱动程序(USB总结、PCI总结、显卡驱动等)
firmware目录:	主要是一些二进制固件
fs:				虚拟文件系统代码
include:		内核源码依赖绝大部分头文件
init:			内核初始化代码,联系到内存各组件入口
ipc:			进程间通信实现,比如共享内存、信号量、匿名管道等
kernel:			内核核心代码,包括进程间通信、IRQ、时间等
lib:			C标准的子集 
mm:			内存管理相关实现
net:			网络协议代码,比如 TCP、IPv6、WiFi、以太网等
samples:		内核示例代码 
scripts:		编译和配置内核所需脚本:per/bash 等
security:		内核安全模型相关代码:如 selinux
sound:			声卡驱动源码
tools:			与内核交互
usr:			用户打包和压缩内核的实现源码
virt:			/kvm 虚拟化目录相关支持实现

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/170924.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Proteus仿真--高仿真数码管电子钟

本文介绍基于数码管的高仿真电子钟(完整仿真源文件及代码见文末链接) 仿真图如下 本设计中80C51单片机作为主控,用74LS138作为数码管显示控制,共有4个按键,其中分别用于12/24小时显示切换、时间设置、小时加减控制和…

国内20个大模型中文场景测评及体验

中文场景能力测评 SuperCLUE排行榜 大模型及网站 公司(大模型) 智能程度 借鉴点 体验网站 备注 1 百度文心一言 高   文心一言   2 百川智能 高   百川大模型-汇聚世界知识 创作妙笔生花-百川智能   3 商汤商量SenseChat&#xff…

Matplotlib网格子图_Python数据分析与可视化

Matplotlib网格子图 plt.subplot()绘制子图调整子图之间的间隔plt.subplots创建网格 plt.subplot()绘制子图 若干彼此对齐的行列子图是常见的可视化任务,matplotlib拥有一些可以轻松创建它们的简便方法。最底层且最常用的方法是plt.subplot()。 这个函数在一个网格…

JavaScript 表达式

JavaScript 表达式 目录 JavaScript 表达式 一、赋值表达式 二、算术表达式 三、布尔表达式 四、字符串表达式 表达式是一个语句的集合,计算结果是个单一值。 在JavaScript中,常见的表达式有4种: (1)赋值表达式…

ABAP UT(单元测试)

UT的重点是处理外部依赖(dependency),外部依赖主要是指当前需要测试的类里用到了其他类,Function Module或者是SQL;可能存在外部依赖的地方是类的属性,方法和方法参数。 处理外部依赖的做法之一是隔离&…

企业计算机服务器中了mkp勒索病毒怎么办?Mkp勒索病毒解密数据恢复

网络技术的不断发展,为企业的生产运营提供了坚实的基础,但随之而来的网络安全威胁也不断增加,影响了企业的正常生产生活。近期,云天数据恢复中心陆续接到很多企业的求助,企业计算机服务器遭到了mkp勒索病毒攻击&#x…

中伟视界:AI智能分析盒子实现全方位人车监测,保障管道安全

在油气管道长又无人的场景下,人和车的监测问题一直是一个难题。传统的监测手段往往存在盲区和误报问题,给管道运行安全带来了一定的隐患。然而,随着人工智能技术的不断发展,利用AI盒子的智能分析算法可以有效解决这一问题。 首先&…

3.golang数组以及切片

数组 数组的声明 数组是具有相同 唯一类型 的一组以编号且长度固定的数据项序列。一个数组的表示形式为 T[n]。n 表示数组中元素的数量,T 代表每个元素的类型。 var a [3]int fmt.Println(a)var a[3]int 声明了一个长度为 3 的整型数组。数组中的所有元素都被自动…

QThreadStorage使用介绍

作者:令狐掌门 技术交流QQ群:675120140 csdn博客:https://mingshiqiang.blog.csdn.net/ 文章目录 什么是线程数据存储Qt中的线程数据存储`QThreadStorage` 的用法:代码示例什么是线程数据存储 线程数据存储是指为每个线程在程序中分配和管理数据的过程。它主要用于并发编程…

LeetCode Hot100 108.将有序数组转为二叉搜索树

题目: 给你一个整数数组 nums ,其中元素已经按 升序 排列,请你将其转换为一棵 高度平衡 二叉搜索树。 高度平衡 二叉树是一棵满足「每个节点的左右两个子树的高度差的绝对值不超过 1 」的二叉树。 方法: class Solution {public…

YOLOv5小目标检测层

目录 一、原理 二、yaml配置文件 一、原理 小目标检测层,就是增加一个检测头,增加一层锚框,用来检测输入图像中像素较小的目标 二、yaml配置文件 # YOLOv5 🚀 by Ultralytics, GPL-3.0 license# Parameters nc: 3 # number of classes depth_multiple: 0.33 # model…

stm32中断调用流程

USART1_IRQHandler(void)(中断服务函数) -> HAL_UART_IRQHandler(UART_HandleTypeDef *huart)(中断处理函数) -> UART_Receive_IT(UART_HandleTypeDef *huart) (接收函数) -> HAL_UART_RxCpltCallback(huart);(中断回调函数) HAL_UART_IRQHandler(UART_HandleTypeDef…

[递归,动态规划] 和为定值的子集合

和为定值的子集数 题目描述 已知 n 个正整数,wi (1≤i≤n) 形成一个集合 W{w1,w2,...,wn},集合中的元素彼此不相同。给定某个正整数 M ,集合W中可否存在子集,该子集的所有元素之和和恰好为M,问:这样的子…

H5+.Net core项目简易教程

小白教程,老司机忽略 一、H5: 1.工具:Hbuilder X 2.导入:(菜单)文件/导入 3.设置本地调试接口: vue.config.js/devserver:{proxy:{"/api":{target:接口地址写在这里}} 4.运行:先…

【LeetCode:828. 统计子串中的唯一字符 | 贡献法 乘法原理】

🚀 算法题 🚀 🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀 🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨ 🌲 作者简介:硕风和炜,…

②⑩① 【MySQL】什么是分库分表?拆分策略有什么?什么是MyCat?

个人简介:Java领域新星创作者;阿里云技术博主、星级博主、专家博主;正在Java学习的路上摸爬滚打,记录学习的过程~ 个人主页:.29.的博客 学习社区:进去逛一逛~ 目录 ②⑩① 【MySQL】什么是分库分表&#xf…

分享一篇很久以前的文档-VMware Vsphere菜鸟篇

PS:由于内容是很久以前做的记录,在整理过程中发现了一些问题,简单修改后分享给大家。首先ESXI节点和win7均运行在VMware Workstation上面,属于是最底层,而新创建的CentOS则是嵌套后创建的操作系统,这点希望…

Drools Rule Language 学习笔记

Drools Rule Language 1 Packages in DRL 可以有多个packages但推荐只用一个packageexample: package org.mortgages; 2 Import statements in DRL 2.1 You specify the package and data object in the format packageName.objectName, with multiple imports …

linux环境git保存账户和密码设置

全局设置 git config --global user.name [username] git config --global user.password [userpassword] 当前项目生效 git config user.name [username] git config user.password [userpassword] 如果想要免密码操作,正常上传或拉去数据后,执…

Redis-缓存设计

缓存穿透 缓存穿透是指查询一个根本不存在的数据, 缓存层和存储层都不会命中, 通常出于容错的考虑, 如果从存储层查不到数据则不写入缓存层。 缓存穿透将导致不存在的数据每次请求都要到存储层去查询, 失去了缓存保护后端存储的…