加入收藏 | 设为首页 | 会员中心 | 我要投稿 温州站长网 (https://www.0577zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 服务器 > 搭建环境 > Windows > 正文

Linux系统的架构浅析

发布时间:2019-09-25 17:52:48 所属栏目:Windows 来源:jackycao
导读:副标题#e# 历史 1991年,还在芬兰赫尔辛基大学上学的Linus Torvalds在自己的Intel 386计算机上开发了属于他自己的第一个程序,并利用Internet发布了他开发的源代码,将其命名为Linux,从而创建了Linux操作系统,并在同年公开了Linux的代码,从而开启了一个
副标题[/!--empirenews.page--]

历史

1991年,还在芬兰赫尔辛基大学上学的Linus Torvalds在自己的Intel 386计算机上开发了属于他自己的第一个程序,并利用Internet发布了他开发的源代码,将其命名为Linux,从而创建了Linux操作系统,并在同年公开了Linux的代码,从而开启了一个伟大的时代。在之后的将近30年的时间里,越来越多的工程师投入到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的虚拟文件系统四大对象:

1. super block(超级块)

2. inode(节点)

3. dentry(目录)

4. block(具体的数据块)

super block

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

inode

(编辑:温州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读