Linux 内核及 GNU/Linux 操作系统的基本体系结构
1. Linux 内核简介
内核:在计算机科学中是一个用来管理软件发出的数据 I/O(输入与输出)要求的计算机程序,将这些要求转 译为数据处理的指令并交由中央处理器(CPU)及计算机中其他电子组件进行处理,是现代操作系统中最基本 的部分。它是为众多应用程序提供对计算机硬件的安全访问的一部分软件,这种访问是有限的,并由内核决定 一个程序在什么时候对某部分硬件操作多长时间。直接对硬件操作是非常复杂的。所以内核通常提供一种硬件 抽象的方法,来完成这些操作。通过进程间通信机制及系统调用,应用进程可间接控制所需的硬件资源(特别 是处理器及 IO 设备)。
2. GNU/Linux 操作系统与 Linux 内核关系
我们通常说的 Linux 实际上指的是内核,即 Linux 内核。而 Linux 的操作系统实际是 GNU/Linux 操作系统, 即使用 Linux 内核的 GNU 系统。
3.GNU/Linux 操作系统的基本体系结构
3.1 用户空间
最上面是用户(或应用程序)空间。
这是用户应用程序执行的地方。用户空间之下是内核空间,Linux 内核正是位于这里。GNU C Library (glibc)也在这里。它提供了连接内核的系统调用接口,还提供了在用户空间应用程序和内核之间进行转换 的机制。这点非常重要,因为内核和用户空间的应用程序使用的是不同的保护地址空间。每个用户空间的进程 都使用自己的虚拟地址空间,而内核则占用单独的地址空间。
3.2 Linux 内核的体系结构
内核是操作系统的核心,具有很多最基本功能,它负责管理系统的进程、内存、设备驱动程序、文件和网络系统,决定着系统的性能和稳定性。
Linux 内核由如下几部分组成:内存管理、进程管理、文件系统、设备驱动程序和网络接口程序等。
3.2.1 系统调用接口(System Call Interface 简称 SCI)
SCI 层提供了某些机制执行从用户空间到内核的函数调用。这个接口依赖于体系结构,甚至在相同的处 理器家族内也是如此。 SCI 实际上是一个非常有用的函数调用多路复用和多路分解服务。
在 ./linux/kernel 中您可以找到 SCI 的实现,并在 ./linux/arch 中找到依赖于体系结构的部分。
3.2.2 内存管理
对任何一台计算机而言,其内存以及其它资源都是有限的。为了让有限的物理内存满足应用程序对内存 的大需求量,Linux 采用了称为“虚拟内存”的内存管理方式。Linux 将内存划分为容易处理的“内存页” (对于大部分体系结构来说都是 4KB)。Linux 包括了管理可用内存的方式,以及物理和虚拟映射所使 用的硬件机制。不过内存管理要管理的可不止 4KB 缓冲区。Linux 提供了对 4KB 缓冲区的抽象
例如 slab 分配器。这种内存管理模式使用 4KB 缓冲区为基数,然后从中分配结构,并跟踪内存页使用情 况,比如哪些内存页是满的,哪些页面没有完全使用,哪些页面为空。这样就允许该模式根据系统需要来动态 调整内存使用。
为了支持多个用户使用内存,有时会出现可用内存被消耗光的情况。由于这个原因,页面可以移出内存 并放入磁盘中。这个过程称为交换,因为页面会被从内存交换到硬盘上。内存管理的源代码可以在 ./linux/mm 中找到。
3.2.3 进程管理
进程实际是某特定应用程序的一个运行实体。在 Linux 系统中,能够同时运行多个进程,Linux 通过 在短的时间间隔内轮流运行这些进程而实现“多任务”。这一短的时间间隔称为“时间片”,让进程轮流运 行的方法称为“进程调度” ,完成调度的程序称为调度程序。
进程调度控制进程对 CPU 的访问。当需要选择下一个进程运行时,由调度程序选择最值得运行的进程。 一个可运行的进程是指该进程的进程状态为 TASK_RUNNING,意味着这个进程是可运行的:要么它正在运行,要么在 runqueue 中等待运行。 对于 「用户空间」(指内存上用户进程运行的空间) 正在运行的进程来说,它只可能是可运行的。 对于「内核空间」(内存上内核运行并提供服务的空间)正在运行的进程来说,可运行状态也是可能的。 一个 runqueue (运行队列)是 scheduler (调度器)里面的基本数据结构,它保存了可运行进程的列表,这些列表中的进程随后会被 CPU 执行。 scheduler (调度器)也被称为 process scheduler (进程调度器),是内核的一部分,它会为不同的可运行进程分配 CPU 时间,Linux 使用了比较简单的基于优先级的进程调度算法选择新的进程。 通过多任务机制,每个进程可认为只有自己独占计算机,从而简化程序的编写。 每个进程有自己单独的地址空间,并且只能由这一进程访问,这样操作系统避免了进程之间的互相干扰以及“坏”程序对系统可能造成 的危害。 为了完成某特定任务,有时需要综合两个程序的功能,例如一个程序输出文本,而另一个程序对文本进行排序。为此,操作系统还提供进程间的通讯机制来帮助完成这样的任务。 Linux 中常见的进程间通讯 机制有信号、管道、共享内存、信号量和套接字等。 内核通过 SCI 提供了一个应用程序编程接口(API)来创建一个新进程(fork、exec 或 Portable Operating System Interface [POSIX] 函数),停止进程(kill、exit),并在它们之间进行通信 和同步(signal 或者 POSIX 机制)。
3.2.4 文件系统
和 DOS 等操作系统不同,Linux 操作系统中单独的文件系统并不是由驱动器号或驱动器名称(如 A: 或 C: 等)来标识的。相反,和 UNIX 操作系统一样,Linux 操作系统将独立的文件系统组合成了一个层 次化的树形结构,并且由一个单独的实体代表这一文件系统。s Linux 将新的文件系统通过一个称为“挂装”或“挂上”的操作将其挂装到某个目录上,从而让不同的文件 系统结合成为一个整体。Linux 操作系统的一个重要特点是它支持许多不同类型的文件系统。 Linux 中最普遍使用的文件系统是 Ext2,它也是 Linux 土生土长的文件系统。但 Linux 也能够支持 FAT、VFAT、FAT32、MINIX 等不同类型的文件系统,从而可以方便地和其它操作系统交换数据。由于 Linux 支持许多不同的文件系统,并且将它们组织成了一个统一的虚拟文件系统.
虚拟化文件系统:
虚拟文件系统(VFS)是 Linux 内核中非常有用的一个方面,因为它为文件系统提供了一个通用的接口抽 象。VFS 在 SCI 和内核所支持的文件系统之间提供了一个交换层。即VFS 在用户和文件系统之间提供了一 个交换层。
虚拟化文件系统隐藏了各种硬件的具体细节,把文件系统操作和不同文件系统的具体实现细节分离了开来,为 所有的设备提供了统一的接口,VFS提供了多达数十种不同的文件系统。虚拟文件系统可以分为逻辑文件系统 和设备驱动程序。逻辑文件系统指Linux所支持的文件系统,如ext2,fat等,设备驱动程序指为每一种硬件 控制器所编写的设备驱动程序模块。
3.2.5 设备驱动程序
设备驱动程序是 Linux 内核的主要部分。和操作系统的其它部分类似,设备驱动程序运行在高特权级的处理器环境中,从而可以直接对硬件进行操作,但正因为如此,任何一个设备驱动程序的错误都可能导 致操作系统的崩溃。
设备驱动程序实际控制操作系统和硬件设备之间的交互。设备驱动程序提供一组操作系统可理解的抽象接口完成和操作系统之间的交互,而与硬件相关的具体操作细节由设备驱动程序完 成。
一般而言,设备驱动程序和设备的控制芯片有关,例如,如果计算机硬盘是 SCSI 硬盘,则需要使用 SCSI 驱动程序,而不是 IDE 驱动 程序。
3.2.6 网络接口程序
提供了对各种网络标准的存取和各种网络硬件的支持。网络接口可分为网络协议和网络驱动程序。网络 协议部分负责实现每一种可能的网络传输协议。众所周知,TCP/IP 协议是 Internet 的标准协议,同时 也是事实上的工业标准。Linux 的网络实现支持 BSD 套接字,支持全部的TCP/IP协议。Linux内核的网 络部分由BSD套接字、网络协议层和网络设备驱动程序组成。
网络设备驱动程序负责与硬件设备通讯,每一种可能的硬件设备都有相应的设备驱动程序。
Linux内核视频学习资料+qun720209036获取
更多Linux服务器高级开发内容包括C/C++,Linux,Nginx,ZeroMQ,MySQL,Redis,MongoDB,ZK,流媒体,P2P,K8S,Docker,TCP/IP,协程,DPDK多个高级知识点分享。点击链接:C/C++Linux服务器开发/后台架构师-学习视频
Linux 内核及 GNU/Linux 操作系统的基本体系结构相关推荐
- linux标准c和c编译器6,linux内核中GNU C和标准C的区别
linux内核中GNU C和标准C的区别 今天看了一下午的linux内核编程方面的内容,发现linux 内核中GNU C与标准C有一些差别,特记录如下: linux 系统上可用的C编译器是GNU C编 ...
- 手机linux内核版本了解,Linux内核版本介绍与查询
Linux内核版本命名在不同时期有着不同的规范,在涉及到Linux版本问题时经常容易混淆,主线版本/稳定版/长期支持版本经常搞不清楚,本文主要记录下内核版本命名的规则以及如何查看Linux系统版本信息 ...
- 简述arm linux内核启动流程,Linux内核启动过程和Bootloader(总述)
1.Linux内核启动过程概述 一个嵌入式 Linux 系统从软件角度看可以分为四个部分:引导加载程序(Bootloader),Linux 内核,文件系统,应用程序.其中 Bootloader是系统启 ...
- 武汉linux内核好找吗,Linux内核入门
Linux内核入门 收藏 如何获取Linux内核源代码 下载Linux内核当然要去http://www.kernel.org/了,网站提供了两种文件下载,一种是完整的Linux内核,另一种是内核增量补 ...
- linux 内核优化实战,Linux编译优化必须掌握的几个姿势总结
01.编译选项和内核编译 Linux内核(英语:linux kernel),是一种计算机操作系统内核,已C语言和汇编语言写成,匹配POSIX标准,以GNU通用公共许可证发布.从技术上说Linux只是一 ...
- 编译Linux内核没有zImage,Linux 编译系统的简单介绍与内核编译安装
这里不只是讲怎样编译.安装Linux内核的,更主要的是介绍内核的编译系统和各个重要的文件.最后还利用学到的编译.安装Linux内核去修改Linux的01调度变成随机调度.如果你只是需要编译.安装内核的 ...
- linux 内核 课程,Linux内核分析课程-全面剖析Linux内核技术 揭开Linux内核的面纱 Linux内核学习视频教 ......
课程名称 Linux内核分析课程-全面剖析Linux内核技术 揭开Linux内核的面纱 Linux内核学习视频 课程目录 (1)\1, 计算机是如何工作的?:目录中文件数:0个 (2)\2, 操作系统 ...
- linux内核精髓:精通linux内核必会的75个绝技,Linux内核精髓精通Linux内核必会的75个绝技 PDF 高清扫描版...
经过近20年的发展,Linux操作系统已经成为当今最成功的开源软件之一,使用广泛,影响深远.随着Linux操作系统功能的不断丰富和完善,Linux内核的源代码也从最初的几万行增加到如今的数百万行,庞大 ...
- 2021-10-16python笔记(Linux内核简介与Linux基础命令)
前面的博文已经教会了大家如何下载和安装Linux操作系统,并且使用Xshell软件远程连接Linux服务器,这节课我们要进入真正的Linux基础学习中. 知识点概括: 1.Linux的心脏-Linux ...
最新文章
- css 波纹扩散_html5 +css3 点击后水波纹扩散效果 兼容移动端
- mysql变量string_mysql sql语句有变量 time_t变量转换为string
- Springboot2.x +JPA 集成 Apache ShardingSphere 分库分表
- 致程序猿:专业课老师没教的,都在这8本书里了
- 《101 Windows Phone 7 Apps》读书笔记-ALARM CLOCK
- 萌宠NFT将于4月16日正式上线
- [ 原创 ]学习笔记-安卓虚拟机终于达到最佳状态了
- zabbix监控系统的实际应用(客户端安装-基本应用设置-报警提醒篇)
- Java练习例子:计算圆柱体积
- unity上线流程_新的Unity商店上线了
- 计算机思维培训心得,计算机教师培训心得体会
- 服务器电源电压不稳定,又是在网上买的炸弹机,我都说了多少次了,这种电脑别买,别买!...
- 高速接口中的PRBS的设计
- java实时获取窗口大小_把游戏窗口的大小改变为640 X 480?
- 下载王者荣耀皮肤高清图片
- PHP 递归函数的三种实现方式
- 简书爬ajax接口获取csrf,Python爬取简书主页信息
- 华为手机有线共享网络_华为怎么共享热点网络连接(图文)
- 旅行社软件测试培训,旅行社管理系统软件测试总结分析方案(65页)-原创力文档...
- 史上最小白之RNN详解
热门文章
- Windows7 支持即将终止!还有不知道的吗?
- 优雅的在latex中插入MATLAB代码 | 解决MATLAB代码中文乱码问题
- 常用的25条Excel技巧整理[转]
- mysql hint 索引倒序_MySQL中的索引提示Index Hint
- 扫频信号设置 matlab,如何利用usrp2和matlab2013a结合,设计一个扫频信号发生器?...
- 登峰造极的Javascript
- 微信APP支付-JAVA
- hive基础语法示例
- 蘑菇街java面试题_【蘑菇街Java开发工程师面试的问题会有哪些?】-看准网
- 第十三届Revit二次开发实战训练课程22年3月21在武汉举办