Linux 系统框架分析(一)

news2024/9/23 5:33:27

一、linux内核结构框图

对内核结构框图有个总体的把握,有助于理解为什么驱动要这样写,为什么写的应用程序所用的C库接口能够产生这么多的事情。

框图可以看出来,linux系统,包括五个系统

在这里插入图片描述

在这里插入图片描述
一、Linux内核结构介绍
Linux 内核是操作系统的核心部分,它负责管理系统的资源、进程调度、设备驱动程序等核心功能。以下是 Linux 内核的主要组成部分和结构:

进程管理:

调度器(Scheduler): 决定在多任务系统中哪个进程获得 CPU 时间。
进程控制块(Process Control Block,PCB): 存储有关进程的信息,如寄存器状态、进程状态等。
内存管理:

虚拟内存管理: 管理进程的虚拟地址空间,包括分页机制、页面置换等。
物理内存管理: 负责跟踪系统中的物理内存,包括内存分配、释放等。
文件系统:

虚拟文件系统(VFS): 提供文件系统的抽象接口,使得不同类型的文件系统可以共享相同的 API。
文件描述符表: 管理打开文件的信息,每个进程都有一个文件描述符表。
设备驱动程序:

字符设备和块设备驱动: 用于管理字符设备(如终端)和块设备(如硬盘)。
网络设备驱动: 处理网络设备和协议栈。
网络协议栈:

TCP/IP 协议栈: 包括网络层、传输层等,用于实现网络通信。
套接字层: 提供应用程序与网络协议栈之间的接口。
系统调用接口:

系统调用: 提供用户空间程序与内核之间的接口,允许用户程序请求内核执行特权操作。
中断和异常处理:

中断处理程序: 处理硬件中断,允许外部设备向 CPU 发送信号。
异常处理程序: 处理由于错误或异常情况而引发的事件。
定时器和时钟管理:

内核定时器: 用于实现计时和时间管理。
实时时钟(RTC): 处理硬件时钟。
同步和互斥机制:

信号量、自旋锁、互斥体等: 用于确保多个进程或线程之间的同步和互斥。
系统初始化和启动:

引导加载程序(Bootloader): 负责加载内核镜像到内存中。
启动过程: 初始化硬件、文件系统等,最终执行第一个用户空间进程。
这些组件一起构成了 Linux 内核的核心结构。内核的源代码是 modulized 的,允许添加或删除特定功能的模块,以适应不同的需求。整个内核的结构和实现细节非常庞大,具体的功能和特性取决于具体的内核版本和配置。

在这里插入图片描述

内核是一个很厉害的超级逻辑,把硬件底层的东西抽象化,对用户来说只需要调API就好了,根本不需要管寄存器,协议,总线…(单片机会去直接操作),这些全部由操作系统做好。动不动写个操作系统是不现实的。

三、驱动认知
驱动(Driver)是一种用于使操作系统与硬件或其他软件交互的程序或模块。驱动程序充当操作系统与硬件之间的桥梁,允许它们有效地通信和协作。以下是关于驱动的一些基本认知:

硬件与操作系统的交互: 操作系统本身并不了解所有硬件设备的细节。驱动程序提供了一个标准的接口,使得操作系统能够与硬件设备进行通信,而无需了解设备的底层细节。

功能和作用:

设备驱动: 控制和管理硬件设备,如打印机、图形卡、网络适配器等。
文件系统驱动: 提供对不同文件系统的支持,例如 FAT、NTFS、ext4 等。
虚拟设备驱动: 创建虚拟设备,如虚拟磁盘、虚拟网络设备等。
字符设备驱动和块设备驱动: 用于字符设备(如终端)和块设备(如硬盘)的控制。
网络设备驱动: 管理网络接口卡和网络协议栈的通信。

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

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

相关文章

【机器学习基础】线性回归

【作者主页】Francek Chen 【专栏介绍】 ⌈ ⌈ ⌈Python机器学习 ⌋ ⌋ ⌋ 机器学习是一门人工智能的分支学科,通过算法和模型让计算机从数据中学习,进行模型训练和优化,做出预测、分类和决策支持。Python成为机器学习的首选语言,…

Flutter 生成图表(fl_chart)

Flutter 图表 使用fl_chart 先看最终效果 实现抖音’使用管理助手’效果 需求分析:统计每个用户近7天每天的使用时长(从当天往后推导,假设今天周二),单位为分钟或者小时,根据平均时长决定 技术选型&…

Python基于TensorFlow实现卷积神经网络-双向长短时记忆循环神经网络回归模型(CNN-BiLSTM回归算法)项目实战

说明:这是一个机器学习实战项目(附带数据代码文档视频讲解),如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 随着深度学习技术的发展,尤其是卷积神经网络(Convolutional Neural Networks, …

Android Studio 连接手机进行调试

总所周知,Android Studio里的虚拟手机下载后又大又难用。不如直接连手机用。本篇文章主要内容为Android Studio怎么连接手机进行程序调试。 1. 在AndroidSDK中下载google USB Driver: 2. 连接手机: 进入电脑设备管理器界面。并点开便携设备&#xff0c…

wakanda:1靶机渗透测试

一、靶机下载地址 https://download.vulnhub.com/wakanda/wakanda-1.ova 二、信息收集 1、主机发现 # 使用命令 nmap 192.168.222.0/24 -sn | grep -B 2 "08:00:27:ED:98:E1" 2、端口扫描 # 使用命令 nmap 192.168.222.149 -p- -sV 3、指纹识别 # 使用命令 wha…

C++相关概念和易错语法(25)(列表初始化、initializer_list)

列表初始化是C11中新增的初始化规则,大大增强了初始化的灵活性,在本篇文章中,我会详细讲解列表初始化的各种使用场景。 1.从C语言初始化语法开始改变——不带赋值号的初始化方式 列表初始化可以说是将C语言的一些初始化语法进行放大的结果。…

c++习题18-计算鞍点

目录 一,题目 二,思路 三,代码 一,题目 给定一个55的矩阵,每行只有一个最大值,每列只有一个最小值,寻找这个矩阵的鞍点。鞍点指的是矩阵中的一个元素,它是所在行的最大值&#x…

海外短剧小程序 ,竖屏会员付费看剧系统搭建paypal,stripe对接支付功能

目录 前言: 一、系统功能 二、系统常见问题 总结: 前言: 在全球化的今天,短剧作为一种新兴的内容形式,正迅速赢得国际观众的心。尤其是海外市场的短剧推广,正成为内容创作者和营销者的新宠。本文将深入…

AWS云服务器选择最佳区域

2024年,随着全球云计算的持续发展和AWS在全球不断扩展的数据中心网络,选择合适的AWS云服务器区域成为了企业和开发者需要认真考虑的问题。九河云告诉你在做出选择之前,需要考虑以哪些关键因素: 地理位置和用户分布 选择AWS云服务…

06:【stm32】OLED模块的简单使用

OLED模块的简单使用 OLED简单的使用 OLED简单的使用 OLED驱动函数是使用B站UP江科大的。我们直接调用即可,是使用软件模拟I2C协议进行通信的。具体的I2C协议可查看上官嵌入式开发中的C51单片机开发。 驱动函数文件:通过百度网盘分享的文件:…

ShardingSphere之ShardingProxy集群部署

文章目录 介绍使用Zookeeper进行集群部署统一ShardingJDBC和ShardingProxy配置通过Zookeeper注册中心同步配置直接使用ShardingProxy提供的JDBC驱动读取配置文件 介绍 开发者手册 在conf/server.yaml配置文件中有下面这一段配置,就是关于集群部署的 mode: # typ…

JAVA 封装一个工具类,将实例的里面的空值设为对应的默认值

JAVA 封装一个工具类&#xff0c;将实例的里面的空值设为对应的默认值&#xff0c;比喻字符串类型就设为默认 "", Integer就设为0 示例代码&#xff1a; protected static void setDefaults(Object obj) {Class<?> clazz obj.getClass();Field[] fields …

如何在FreeRtos工程中添加驱动调用

前言&#xff1a;本篇笔记学习的是韦东山老师的教程&#xff0c;连接放在最后。 上篇教程图文讲解了&#xff0c;如何使用STM32CubleMX&#xff0c;进行移植FreeRtos工程&#xff0c;如果没有使用这个软件则需要自己去手动进行移植操作&#xff0c;本篇图文教程是添加驱动&…

LeetCode.3132.找出与数组相加的整数II

题目描述&#xff1a; 给你两个整数数组 nums1 和 nums2。 从 nums1 中移除两个元素&#xff0c;并且所有其他元素都与变量 x 所表示的整数相加。如果 x 为负数&#xff0c;则表现为元素值的减少。 执行上述操作后&#xff0c;nums1 和 nums2 相等 。当两个数组中包含相同…

【探索数据结构与算法】使用单链表实现队列

目录 一. 队列的定义 二.队列的结构定义 单个元素的结构定义 队列的结构定义 三.队列的接口实现 1.初始化 2.销毁 3.入队列&#xff08;队尾插入&#xff09; 4.出队列&#xff08;队头删除&#xff09; 5.获取队首元素 6.获取队尾元素 7.获取队列元素个数 …

力扣刷题-环形链表II

&#x1f308;个人主页&#xff1a;羽晨同学 &#x1f4ab;个人格言:“成为自己未来的主人~” 我们先来看一下这道题的代码部分&#xff1a; /*** Definition for singly-linked list.* struct ListNode {* int val;* struct ListNode *next;* };*/ struct ListN…

element table表格树形数据展示

element table表格树形数据展示 1、效果 2、代码 <el-table ref"pointMultipleTable" border class"table-box" :data"[damActiveObj]"row-key"id" :tree-props"{ children: children }" :expand-row-keys"expand…

Qt+TSC打印机调试

前言 最近被TSC打印机整的死去活来&#xff0c;记录一下使用方法。 一、环境 Qt5.15.2 mingw tsc TE244 二、使用步骤 1.引入库 从官网下载windows C SDK&#xff0c;引入库&#xff0c;以下是.pro文件 QT core gui printsupportgreaterThan(QT_MAJOR_VERSION, 4)…

HAProxy七层负载均衡配置方案

HAProxy 一、准备二、配置HAProxy服务器1. 下载HAProxy2. 编写配置文件3. 启动HAProxy服务 三、配置后端服务①配置web服务器②配置php服务器 四、测试 一、准备 准备5台CentOS7服务器&#xff0c;IP地址如下&#xff1a; HAProxy 192.168.152.71web1 192.168.152.72web2 192.…

3D摄影棚布光软件:Set A Light 3D Studio for Mac 激活版

Set A Light 3D Studio 是一款专业的照明模拟软件&#xff0c;专为摄影师和电影制作人设计&#xff0c;用于规划和设计照片拍摄的照明效果。 以下是关于这款软件的一些主要特点和功能&#xff1a; 虚拟照明工作室&#xff1a;Set A Light 3D Studio 提供了一个虚拟的照明工作室…