iis服务器助手广告广告
返回顶部
首页 > 资讯 > 操作系统 >Linux系统的架构和网络分层
  • 944
分享到

Linux系统的架构和网络分层

2023-06-16 07:06:02 944人浏览 八月长安
摘要

这篇文章主要介绍“linux系统的架构和网络分层”,在日常操作中,相信很多人在Linux系统的架构和网络分层问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Linux系统的架构和网络分层”的疑惑有所帮助!接下来

这篇文章主要介绍“linux系统的架构网络分层”,在日常操作中,相信很多人在Linux系统的架构和网络分层问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Linux系统的架构和网络分层”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

Linux系统的架构和网络分层

Linux内核架构图

上图就是Linux内核的架构图,从硬件层--->操作系统内核--->应用层,这套系统架构的设计应用于各类软硬件结合的系统上,比如物联网系统,单片机系统、机器人等领域。

进程调度

进程在Linux系统中称为process或task。操作系统中进程的数据结构包含很多元素,诸如:地址空间、进程优先级、进程状态、信号量、占用的文件等,往往用链表链接。

CPU在每个系统滴答(Tick)中断产生的时候检查就绪队列里边的进程(遍历链表中的进程结构体),如有符合调度算法的新进程需要切换,保存当前运行的进程的信息(包括栈、地址等)后挂起当前进程,然后运行新的进程,这就是进程调度。

CPU调度的基本依据是进程的优先级。调度的终极目标是让高优先级的进程能及时得到CPU的资源,低优先级的任务也能公平的分配到CPU资源。不过因为保存当前进程的信息所以进程的切换本身是有成本的,调度算法同样需要考虑效率。

在早期Linux内核中,就是采用轮询算法来实现的,内核在就绪的进程队列中选择高优先级的进程执行,每次运行相等时间,该算法简单直观,但仍然会导致一些低优先级的进程长时间不能执行。为了提高调度的公平性,在后来Linux内核(2.6)中,引入了CFS调度器算法。

CFS引入虚拟运行时间的概念,虚拟运行时间用task_struct->se.vruntime表示,通过它来记录和度量进程应该获得的CPU运行时间。在理想的调度情况下,任何时候所有的进程都应该有相同的task_struct->se.vruntime值。因为每个进程都是并发执行,没有进程会超过理想状态下应该占有的CPU时间。CFS选择需要运行的进程的逻辑基于task_struct->se.vruntime值,它总是选择task_struct->se.vruntime值最小的进程来运行(为了公平)。

CFS使用基于时间排序的红黑树来为将来进程的执行时间线。所有的进程按task_struct->se.vruntime关键字排序。CFS从树中选择最左边的任务执行。随着系统运行,执行过的进程会被放到树的右侧,逐步让每个任务都有机会成为最左边的进程,从而让每个进程都能获取CPU资源。

总的来说,CFS算法首先选一个进程,当进程切换时,该进程使用的CPU时间会加到该进程task_struct->se.vruntime里,当task_struct->se.vruntime的值逐渐增大到别的进程变成了红黑树最左边的进程时,最左边的进程被选中执行,当前的进程被抢占。

内存管理

内存,一种硬件设备,操作系统对其寻址,找到对应的内存单元,然后对其操作。CPU的字节长度决定了最大的可寻址空间,32位机器最大寻址空间是4G  Bytes,64位机器最大寻址空间是2^64 Bytes。

最大寻址空间和物理内存大小无关,称之为虚拟地址空间。Linux内核把虚拟地址空间分为内核空间和用户空间。每个用户进程的虚拟地址空间范围是0~TASK_SIZE。从TASK_SIZE~2^32或2^64的区域保留给内核,不能被用户进程访问。

虚拟地址空间与物理内存的映射

绝大多数情况下,虚拟地址空间比实际物理内存大,操作系统需要考虑如何将实际可用的物理内存映射到虚拟地址空间。

Linux内核采用页表(page  table)将虚拟地址映射到物理地址。虚拟地址和进程使用的用户&内核地址有关,物理地址用来寻址实际使用的内存。

Linux系统的架构和网络分层

示例图

上图所示,A和B进程的虚拟地址空间被分为大小相等的等份,称为页(page)。物理内存同样被分割为大小相等的页(page frame)。

进程A第1个内存页映射到物理内存(RAM)的第4页;进程B第1个内存页映射到物理内存第5页。进程A第5个内存页和进程B第1个内存页都映射到物理内存的第5页(内核可决定哪些内存空间被不同进程共享)。页表将虚拟地址空间映射到物理地址空间。

文件系统

Linux的核心理念:everything is  file。Linux系统存在很多文件系统,比如EXT2,EXT3,EXT4,rootfs,proc等等,每一种文件系统都是独立的,有自己的组织方式、操作方法。

为了支持不同的文件系统,内核在用户态和文件系统之间包含了一层虚拟文件系统(Virtual File  System)。大多数内核提供的函数都能通过VFS定义的接口来访问。例如内核的子系统:字符设备、块设备,管道,Socket等。另外,用于操作字符和块设备的文件是在/dev目录下真实文件,当读写操作执行的时候,其会被对应的驱动程序创建。

Linux系统的架构和网络分层

VFS结构图

Linux的虚拟文件系统四大对象:

super block(超级块)

inode(节点)

dentry(目录)

block(具体的数据块)

super block

代表一个具体的已经安装的文件系统,包含文件系统的类型、大小、状态等等。

inode

代表一个具体的文件,在Linux文件管理中,一个文件除了自身的数据外,还有一个附属信息,即文件的元数据(metadata),这个元数据用于记录文件的许多信息比如文件大小、创建人、创建时间等,这个元数据就包含在inode中。

inode是文件从抽象--->具体的关键。inode存储了一些指针,这些指针指向存储设备的一些数据块,文件的内容就存储在这些数据块中。Linux想打开一个文件时,只需要找到文件对应的inode,然后沿着指针,将所有的数据块攒起来,就可以在内存中组成一个文件的数据了。

Linux系统的架构和网络分层

inode 结构

inode并不是组织文件的唯一方式,最简单的组织文件的方式,是把文件依次顺序的放入存储设备,但如果有删除操作的话,删除造成的空余空间夹杂在正常文件之间,很难利用和管理;复杂方式可以用来链表来做,每个数据块有个指针,指向属于同一文件的下一个数据块,这样的好处是可以利用零散的空余空间,坏处是对文件的操作必须按照线性方式进行,如果随机读取就必须要遍历链表,直到目标位置。由于这一遍历不是在内存进行,所以速度很慢。

inode既可以充分利用空间,在内存占据空间不与存储设备相关,解决了上面的问题。但inode也有自己的问题。每个inode能够存储的数据块指针总数是固定的。如果一个文件需要的数据块超过这一总数,inode需要额外的空间来存储多出来的指针。

dentry

代表一个目录项,是路径的一部分,比如一个路径/home/jackycao/hello.txt,那么目录项就有home、jackycao、hello.txt。

block

代表具体的数据,一个文件由分散的多个block组成,组织的方式由inode来指向。

设备驱动

与外设的交互,说白了就是输入(input)、操作(operate)、输出(ouput)的操作。

内核需要完成三件事情:

针对不同的设备类型实现不同的方法来寻址硬件。

必须为用户空间提供操作不同硬件设备的方法,且需要一个统一的机制来确保尽量有限的编程工作。

让用户空间知道在内核中有哪些设备。

Linux系统的架构和网络分层

设备通信图

内核访问外设主要有两种方式:I/O端口和I/O内存映射。具体不展开介绍了。

内核动态接收外设发来的请求(数据)主要通过两种方式:轮询和中断。

轮询:周期性的访问查询设备是否有数据,如果有,便获取数据。这种方法比较浪费CPU资源。

中断:核心思想是外设有请求时主动通知CPU,中断的优先级最高,会中断CPU的当前进程运行,每个CPU都提供了中断线,每个中断由唯一的中断号识别,内核为每个应用的中断提供一个中断处理方法。当有数据已准备好可以给内核或者间接被一个应用程序使用的时候,外设出发一个中断。使用中断确保系统只有在外设需要处理器介入的时候才会通知CPU,提高了效率。

PS:块和扇区的概念:块是一个指定大小的字节序列,用于保存在内核和设备间传输的数据,块的大小可以被设置,默认是4096  bytes,扇区是存储设备操作的最小单元,默认是512 Bytes,块是一段连续的扇区。

网络

Linux的网络子系统的模型基于ISO的OSI模型,Linux内核中会简化相应层级。下图为Linux使用的tcp/IP参考模型。

Linux系统的架构和网络分层

网络模型

Host-to-Host层:相当于OSI模型的物理层和数据链路层,负责将数据从一个计算机传输到另一个计算机。在Linux内核的角度来看,这一层是通过网卡的设备驱动程序实现的。

Internet层:相当于OSI模型的网络层,负责让网络中的计算机可以交换数据(这些计算机并不一定是直连的)。该层同时负责传输的包分成指定的大小,因为包在传输路径上每个计算机支持的最大网络包的大小不一样,在传输时数据被分割成不同的包,在接收端再组合。该层为网络中的计算机分配唯一的网络地址。

Transport层:相当于OSI模型的传输层,负责让两个连接的计算机上运行的应用程序之间的数据传输。比如,两台计算机上的客户端和服务端程序,通过端口号来识别通信的应用程序。

App层:相当于OSI模型的会话层、表示层、应用层,网络中不同计算机的两个应用程序建立连接后,这一层负责实际内容的传输。

Linux内核子系统的实现通过C代码实现,每个层只能和它上下层通信。

Linux系统的架构和网络分层

Linux网络分层图

到此,关于“Linux系统的架构和网络分层”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

--结束END--

本文标题: Linux系统的架构和网络分层

本文链接: https://www.lsjlt.com/news/282622.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Linux系统的架构和网络分层
    这篇文章主要介绍“Linux系统的架构和网络分层”,在日常操作中,相信很多人在Linux系统的架构和网络分层问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Linux系统的架构和网络分层”的疑惑有所帮助!接下来...
    99+
    2023-06-16
  • 标准Web系统的架构分层实例分析
    本篇内容主要讲解“标准Web系统的架构分层实例分析”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“标准Web系统的架构分层实例分析”吧! 墙裂分享,标准Web...
    99+
    2024-04-02
  • 云原生网络操作系统:面向未来的网络架构
    什么是云原生网络操作系统? 云原生网络操作系统(CNO)是专为云原生应用程序设计的网络软件平台。它们提供一系列网络服务,例如: 虚拟网络连接 防火墙管理 负载均衡 服务发现 网络监控 CNO 旨在与 Kubernetes 等编排平台...
    99+
    2024-03-05
    云原生、网络操作系统、Kubernetes、容器网络、网络自动化
  • 系统架构设计师-计算机网络
    目录 一、计算机网络技术概述         1、网络概述         2、网络有关指标         3、网络分类         4、5G技术 二、组网技术         1、交换技术         2、基本交换原理 三、TC...
    99+
    2023-10-01
    软件工程 系统架构
  • Linux中网络系统的示例分析
    这篇文章主要介绍了Linux中网络系统的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。网络信息修改主机名# hostname node01&nbs...
    99+
    2023-06-22
  • PHP Session 跨域与多层系统架构的适配性分析
    随着互联网技术的发展,多层系统架构在 Web 应用程序中变得越来越常见。而在多层系统架构中,跨域访问是一个常见的需求。而 PHP 中的 Session 机制也是广泛应用于 Web 应用程序中的身份验证和数据共享等功能。本文将深入探讨 PHP...
    99+
    2023-10-21
    PHP Session 跨域 多层系统架构
  • 七层、四层和五层网络模型区别和联系
    七层、四层和五层网络模型区别和联系 概述OSI网络7层模型(概念型框架)概述图片分析 四层模型概述常用协议OSI与TCP/IP四层的区别 五层模型概述三种网络模型对比 总结 概述 网络模型-七层模型(OSI...
    99+
    2023-08-30
    计算机网络 php 网络
  • Linux系统配置网络的示例分析
    这篇文章将为大家详细讲解有关Linux系统配置网络的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。简单介绍Linux的文件夹bin:存放的是用户的命令sbin:存放的是root用户的命令etc:存...
    99+
    2023-06-26
  • Linux系统网络配置的示例分析
    这篇文章主要为大家展示了“Linux系统网络配置的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Linux系统网络配置的示例分析”这篇文章吧。1、查看IP  Ifconfig2、配置IP...
    99+
    2023-06-10
  • 计算机网络-计算机网络体系结构-物理层
    目录 一、通信基础 通信方式 传输方式 码元 传输率 *二 准则 2.1奈氏准则(奈奎斯特定理) 2.2香农定理 三、信号的编码和调制 *数字数据->数字信号 数字数据->模拟信号 模拟数据->数字信号 模拟数据->模拟信号 *四、数据交换...
    99+
    2023-10-07
    计算机网络 笔记
  • 基于Php+MySql数据库架构的网络验证系统
    介绍: 炸鸡网络验证系统基于Php+MySql数据库架构的网络验证系统,安全稳定、性能强悍、 承载能力强,支持高并发、高承载、多线路,支持服务器集群架设,高性能设计,速度非常快,效率非常高。 客户端支持VC、VB、DELPHI、易语言、C#...
    99+
    2023-10-09
    php 数据库架构 网络验证系统 php网络验证系统
  • Linux 网络驱动-MAC、PHY层驱动框架(三)
    I.MX6ULL 网络外设设备树    I.MX6ULL 有两个 10/100M 的网络 MAC 外设,因此 I.MX6ULL 网络驱动主要就是这两个网络 MAC 外设的驱动。这两个外设的驱动都是一样的,我们分析其 中一个就行了,首先肯定是...
    99+
    2023-09-02
    linux 运维 服务器
  • MySQL SSL 连接的网络架构和性能瓶颈分析
    MySQL SSL连接是一种通过SSL协议进行加密的MySQL数据库连接方式,可以提供更安全的数据传输。在网络架构中,MySQL SSL连接可以通过多种方式实现,其中最常见的是基于TCP/IP协议的网络架构。在基于TCP/IP的网络架构中,...
    99+
    2023-10-22
    MySQL ssl 网络架构 连接 性能瓶颈分析
  • Linux中怎么设置网络和系统
    Linux中怎么设置网络和系统,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。Linux 提供了一系列网络和系统设置。在你的桌面计算机上,Linux 允许您调整系统上的任何内...
    99+
    2023-06-16
  • Linux系统架构是怎么样的
    这篇文章主要介绍了Linux系统架构是怎么样的,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。我以下图为基础,说明Linux的架构(architecture)。最内层是硬件,最...
    99+
    2023-06-13
  • 计算机网络中区块链核心技术体系架构的网络层主要包括什么
    这篇文章主要介绍了计算机网络中区块链核心技术体系架构的网络层主要包括什么,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。区块链核心技术体系架构的网络层主要包括:1、网络管理,包...
    99+
    2023-06-15
  • Linux系统CPU的内部架构和工作原理
    本篇内容主要讲解“Linux系统CPU的内部架构和工作原理”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Linux系统CPU的内部架构和工作原理”吧!CPU发展历程1968年7月18日,鲍勃-诺...
    99+
    2023-06-16
  • 怎么进行Linux系统内核架构分析
    这期内容当中小编将会给大家带来有关怎么进行Linux系统内核架构分析,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。Linux系统中内核是一个非常重要的一部分,那么Linux内核具体是什么样子呢?下面本篇文...
    99+
    2023-06-28
  • Linux系统sysctl.conf配置-网络优化部分
    net.ipv4.tcp_mtu_probing=1  #自动MTU,动态调整数据包 大小 net.ipv4.tcp_low_latency=1  #开启低延迟模式,在高吞吐量情况下,建议此选项禁用 net.ipv4.tcp_no_metr...
    99+
    2023-09-03
    网络 linux 服务器
  • MVC分层架构是怎么样的
    这篇文章给大家分享的是有关MVC分层架构是怎么样的的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。传统MVC三层架构通常,我们习惯的业务建模方式是围绕数据表的,先根据业务需要设计数据库,再完成业务流程的开发。在实现...
    99+
    2023-06-05
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作