代码编织梦想

操作系统概念

操作系统属于软件范畴,负责管理系统的硬件资源。OS具备的功能:1.为应用程序提供执行环境。2.为多用户和应用程序管理计算机的硬件资源。3.虚拟化功能。4.支持并发。

宏内核与微内核架构

宏内核:所有的内核代码都编译成二进制文件并运行在一个大内核地址空间中,整体架构如下:
在这里插入图片描述
微内核:把操作系统分成多个独立的功能模块,每个功能模块之间的访问需要通过“消息”来完成,因此效率没有宏内核架构高:
在这里插入图片描述
宏内核的优点:设计简洁,性能好

微内核的优点:模块化的特点更具实时性

工程实践中,linux不断融入微内核的精华到内核中,例如模块化设计思想,动态加载内核模块等,因此linux内核支持模块化开发,许多功能都可以编译为一个模块,并且支持动态的加载和卸载(例如许多设备的驱动程序),这一点上宏内核架构就做不到,宏内核类似于静态编译的结果而不支持动态取舍。
在这里插入图片描述
OS允许CPU运行在用户态和内核态,而 linux 使用ring0和ring3两种模式实现内核态和用户态。

linux内核为内核态和用户态的切换提供机制:系统调用(本质是中断,中断是进入内核态的唯一方法)

用户程序可能大部分运行在用户态,但可能需要使用系统资源(例如磁盘),此时需要通过系统调用的方法进入内核空间。

体系结构Arch抽象层:

linux内核支持多种架构,例如ARM,X86等,目前已经支持几十种体系结构,而Arch抽象层抹去了不同架构之间的硬件差异,做了一层统一的抽象。在linux内核5.6.18版本的源码中,直接把不同架构做一个分目录操作,以提供对各个架构的支持。
在这里插入图片描述

内核在操作系统中的位置

在这里插入图片描述

  • 用户进程:用户应用程序是运行在 Linux 操作系统最高层的一个庞大的软件集合。当一个用户程序在操作系统之上运行时,它成为操作系统中的一个进程。
  • 系统调用接口:在应用程序中, 可通过系统调用来调用操作系统内核中特定的过程, 以实现特定的服务。系统调用本身也是由若干条指令构成的过程。但它与一般的过程不同,主要区别是:系统调用是运行在内核态(或叫系统态),而一般过程是运行在用户态。在 Linux 中,系统调用是内核代码的一部分。
  • Linux内核:内核是操作系统的灵魂,它负责管理磁盘上的文件、内存,负
    责启动并运行程序,负责从网络上接收和发送数据包等。简言之,内核实际是抽象的资源操作到具体硬件操作细节之间的接口。
  • 硬件

Linux内核抽象结构

linux内核有五大主要子系统,他们之间的关系如下:
在这里插入图片描述
(1)进程调度(SCHED)控制着进程对 CPU 的访问。当需要选择下一个进程运行时,由调度程序选择最值得运行的进程。可运行进程实际是仅等待 CPU 资源的进程,如果某个进程在等待其他资源,则该进程是不可运行进程。Linux 使用了比较简单的基于优先级的进程调度算法选择新的进程。

(2)内存管理(MM)允许多个进程安全地共享主内存区域。Linux 的内存管理支持虚拟内存,即在计算机中运行的程序,其代码、数据和堆栈的总量可以超过实际内存的大小,操 作系统只将当前使用的程序块保留在内存中,其余的程序块则保留在磁盘上。必要时,操作系统负责在磁盘和内存之间交换程序块。
内存管理从逻辑上可以分为硬件无关的部分和硬件相关的部分。硬件无关的部分提供了进程的映射和虚拟内存的对换;硬件相关的部分为内存管理硬件提供了虚拟接口。
  (3)虚拟文件系统(Virtul File System,VFS)隐藏了各种不同硬件的具体细节,为所有设备提供了统一的接口,VFS 还支持多达数十种不同的文件系统,这也是 Linux 较有特色的一部分

虚拟文件系统可分为逻辑文件系统和设备驱动程序。逻辑文件系统指 Linux 所支持的文件系统,如 ext2,fat 等,设备驱动程序指为每一种硬件控制器所编写的设备驱动程序模块。

(4)网络接口(NET)提供了对各种网络标准协议的存取和各种网络硬件的支持。网络接口可分为网络协议和网络驱动程序两部分。网络协议部分负责实现每一种可能的网络传输协议,网络设备驱动程序负责与硬件设备进行通信,每一种可能的硬件设备都有相应的设备驱动程序。

(5)进程间通信(IPC) 支持进程间各种通信机制。

Linux内核源码组织

为了深入地了解Linux的实现机制,还必须阅读Linux的内核源代码,下面是对有关源代码的介绍。内核源代码的版本多,对不同的内核版本,系统调用一般是相同的。新版本也许可以增加一个新的系统调用,在大多数情况下,设备文件将仍然相同,而另一方面,版本之间的内部接口有所变化。
在这里插入图片描述

  • arch目录:不同平台体系相关代码;
  • block目录:块驱动设备
  • certs目录:与认证和签名相关代码
  • crypto目录:内核常用加密、压缩算法等代码;
  • Documentation目录:描述模块功能与协议规范代码;
  • Drivers目录:驱动程序(USB总线、PCI总线、显卡驱动等等);
  • firmware目录:主要是一些二进制固件;
  • fs目录:虚拟文件系统代码;
  • include目录:内核源码依赖绝大部分头文件;
  • init目录:内核初始化代码,联系到内存各组件入口;
  • ipc目录:进程间通信,比如共享内存、信号量匿名管道等等;
  • kernel目录:内核核心代码,包括进程管理、IRQ、时间等等;
  • lib目录:C标准库的子集;
  • mm目录:内存管理相关实现;
  • net目录:网络协议代码,比如TCP、IPv6、WiFi、以太网实现等等;
  • samples目录:内核实列代码;
  • scripts目录:编译和配置内核所需脚本;Perl/bash
  • security目录:内核安全模型相关代码;如selinux
  • sound目录:声卡驱动源码;
  • tools目录:与内核交互;
  • usr目录:用户打包和压缩内核的实现源码;
  • virt目录:/kvm虚拟化目录相关支持实现。
  • COPYING:许可和授权信息。Linux内核在GPLv2许可证下授权。该许可证授予任何人有权免费去使用、修改、分发和共享源代码和编译代码。然而,没有人可以出售源代码。
  • CREDITS : 贡献者列表
  • Kbuild : 这是一个设置一些内核设定的脚本。打个比方,这个脚本设定一个 ARCH变量,这是开发者想要生成的内核支持的处理器类型。
  • Kconfig: 这个脚本会在开发人员配置内核的时候用到
  • MAINTAINERS : 这是一个目前维护者列表,他们的电子邮件地址,主页,和他们负责开发和维护的内核的特定部分或文件。当一个开发者在内核中发现一个问题,并希望能够报告给能够处理这个问题的维护者时,这是是很有用的。
  • Makefile :这个脚本是编译内核的主要文件。这个文件将编译参数和编译所需的文件和必要的信息传给编译器。
  • README : 这个文档提供给开发者想要知道的如何编译内核的信息。
  • REPORTING-BUGS : 这个文档提供如何报告问题的信息。
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_34888036/article/details/128007326

linux内核的整体架构简介_vance2016的博客-爱代码爱编程_linux内核

1. 前言 本文是“Linux内核分析”系列文章的第一篇,会以内核的核心功能为出发点,描述Linux内核的整体架构,以及架构之下主要的软件子系统。之后,会介绍Linux内核源文件的目录结构,并和各个软件子系统对应。 注:本文和其它的“Linux内核分析”文章都基于如下约定:   a) 内核版本为Linux 3.10.29(该版本是一个lon

linux内核整体架构_xyz-x的博客-爱代码爱编程

Linux内核的整体架构 1. 前言 本文是“Linux内核分析”系列文章的第一篇,会以内核的核心功能为出发点,描述Linux内核的整体架构,以及架构之下主要的软件子系统。之后,会介绍Linux

linux内核 架构整体架构_lm_y的博客-爱代码爱编程

本文是“Linux内核分析”系列文章的第一篇,会以内核的核心功能为出发点,描述Linux内核的整体架构,以及架构之下主要的软件子系统。之后,会介绍Linux内核源文件的目录结构,并和各个软件子系统对应。 注:本文和其它的“Linux内核分析”文章都基于如下约定:  a) 内核版本为Linux 3.10.29(该版本是一个long term的版本,会被Lin

Linux内核架构和工作原理详解-爱代码爱编程

简介 作用是将应用层序的请求传递给硬件,并充当底层驱动程序,对系统中的各种设备和组件进行寻址。目前支持模块的动态装卸(裁剪)。Linux内核就是基于这个策略实现的。Linux进程1.采用层次结构,每个进程都依赖于一个父进程。内核启动init程序作为第一个进程。该进程负责进一步的系统初始化操作。init进程是进程树的根,所有的进程都直接或者间接起源于该

epub 深入linux内核架构_深入Linux内核架构与底层原理-爱代码爱编程

产品特色 编辑推荐 适读人群 :希望深入理解linux底层原理的中高级运维人员和嵌入式开发人员。 解释透彻:深入浅出地将Linux内核架构与底层原理和盘托出。 实践性强:对Linux内核形成了深刻、独到的理解。 指路明灯:将Linux内核架构与底层原理的精髓娓娓道来。 与时俱进:在很多方面覆盖了Linux较新的功能,对从业者有较大帮助。 内

深度:一文看懂Linux内核!Linux内核架构和工作原理详解-爱代码爱编程

简介 作用是将应用层序的请求传递给硬件,并充当底层驱动程序,对系统中的各种设备和组件进行寻址。目前支持模块的动态装卸(裁剪)。Linux内核就是基于这个策略实现的。Linux进程1.采用层次结构,每个进程都依赖于一个父进程。内核启动init程序作为第一个进程。该进程负责进一步的系统初始化操作。init进程是进程树的根,所有的进程都直接或者间接起源于该进程

浅析嵌入式系统之Linux内核架构和工作原理-爱代码爱编程

浅析嵌入式系统 Linux内核架构和工作原理 1. 学习Linux内核预备工作1.1 理解Linux内核最好预备的知识1.2 Linux内核的特点1.3 Linux内核的任务1.4 内核实现策略1.5 哪些地方用到了内核机制?1.6 Linux进程1.7 Linux内核源代码的目录结构使用ls命令看到的内核源代码的顶层目录结构,具体描述如下:2.

【Linux】Linux内核的整体架构简介-爱代码爱编程

文章目录 0、前言1、Linux 内核的核心功能2、Linux内核的整体架构3、Linux源代码目录结构参考 0、前言 本文是笔者学习Linux系统的记录性文章故引用和参考较多,参考文章见文末   本文从介绍Linux内核的核心功能开始进而引出Linux内核从功能方面分类的整体架构,最后简单介绍了内核文件目录下各文件夹中包含文件功

一文让你读懂Linux五大模块内核源码,内核整体架构设计(超详细)-爱代码爱编程

一、前言 本文是“Linux内核源码分析”系列的专业,会以内核的核心功能为出发点,描述Linux内核的整体架构,以及架构之下主要的软件子系统。之后,会介绍Linux内核源文件的目录结构,并和各个软件子系统对应。 二、 Linux内核的核心功能 如下图所示,Linux内核只是Linux操作系统一部分。对下,它管理系统的所有硬件设备;对上,它通过系统调

还在付费使用 xshell?我选择这款超牛逼的 ssh 客户端,完全免费_写代码的珏秒秒的博客-爱代码爱编程

分享过FinallShell这款SSH客户端,也是xiaoz目前常用的SSH客户端工具,FinalShell使用起来方便顺手,但令我不爽的是tab数量变多的时候FinalShell越来越卡,而且内存占用也比较高。 最近发现一款使用使用C语言开发的跨平台SSH客户端WindTerm,完全免费用于商业和非商业用途,没有限制。 所有发布的源代码(第三方目录除外