【内核驱动】Linux概述

2023-11-15

00. 目录

01. Unix简介

UNIX系统是一个分时系统。最早的UNIX系统于1970年问世。此前,只有面向批处理作业的操作系统,这样的系统对于需要立即得到响应的用户来说是太慢了。在60年代末,Kenneth Thompson和Dennis Ritchie都曾参加过交互方式分时系统Multics的设计,而开发该系统所使用的工具是CTSS。这两个系统在操作系统的发展过程中都产生过重大影响。在此基础上,在对当时现有的技术进行精选提炼和发展的过程中,K.Thompson于1969年在小型计算机上开发UNIX系统,后于1970年投入运行。 [2]

1972年,DennisRitchie开发出C语言,用来改写原来用汇编语言编写的UNIX,由此产生了UNIX VersionV。1974年,Kenneth Thompson和Dennis Ritchie合写的“The UNIX Time-Sharing System”在Communication of ACM上发表,正式向外界披露了UNIX系统。

当时,PDP-11系列小型计算机在世界各地已经得到广泛应用,UNIX系统一开发后便广泛配备于美国各大学的PDP-11系列计算机上,由此为UNIX的广泛应用创造了物质条件。

1978年,UNIX Version VI发表,随后又于1979年用于VAX-11超级小型机。以后,不断地出现各种新的版本。美国电话电报公司分别于1981年和1983年发表AT&T UNIX SystemII和UNIX SystemV。美国加州大学伯克莱分校也先后发表了UNIX的版本BSD4.1,BSD4.2和BSD4.3。

UNIX系统的用户日益增多,应用范围也日益扩大。无论在各种类型的微型机、小型机,还是在中、大型计算机,以及在计算机工作站甚至个人计算机上,很多都已配有UNIX系统。不仅新推出的机型配有UNIX系统,而且一些历史较久的生产厂商,也竞相将原有机型配上UNIX系统以便打开销路、争取市场。

2020年,苹果发布操作系统升级版本,将UNIX操作系统的强大功能和苹果电脑的易用性相结合,提高了电脑的运行速度和电池寿命。

02. Linux简介

Linux,一般指GNU/Linux(单独的Linux内核并不可直接使用,一般搭配GNU套件,故得此称呼),是一种免费使用和自由传播的类UNIX操作系统,其内核由林纳斯·本纳第克特·托瓦兹(Linus Benedict Torvalds)于1991年10月5日首次发布,它主要受到Minix和Unix思想的启发,是一个基于POSIX的多用户、多任务、支持多线程和多CPU的操作系统。它支持32位和64位硬件,能运行主要的Unix工具软件、应用程序和网络协议。

Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。Linux有上百种不同的发行版,如基于社区开发的debian、archlinux,和基于商业开发的Red Hat Enterprise Linux、SUSE、Oracle Linux等。

2022年11月20日,Linux 提交了最后一批 drm-intel-next 功能补丁,Linux 6.2将迎来对英特尔锐炫独显的正式支持。

03. Linux发展史

1991

8月25号 : 21岁的芬兰学生Linus Benedict Torvalds 在comp.os.minix 新闻组上宣布了它正在编写一个免费的操作系统。

9月1号 : Linux 0.01在网上发布。

2007

6月6号 : 华硕在2007的台北电脑展上展出了两款“易PC”(Eee PC):701和1001。第1批易PC预装的是Xandros Linux,这是一个基于Debian,轻量级的为适应小屏幕进行过优化的Linux发行版。

8月8号 : 2007年Linux基金会由开源发展实验室(OSDL)和自由标准组织(FSG)联合成立。这个基金会目的是赞助Linux创始人Linus的工作。基金会得到了主要的Linux和开源公司,包括富士通,HP,IBM,Intel,NEC,Oracle,Qualcomm,三星和来自世界各地的开发者的支持。

11月5号 : 与之前大家推测的发布Gphone不同,Google宣布组建开放手机联盟(Open Handset Alliance)和发布Android,它被称为“第一个真正开放的综合移动设备平台”。

2011

5月11号 : 2011年Google I/O大会发布了Chrombook。这是一款运行着所谓云操作系统Chrome OS的笔记本。Chome OS是基于Linux内核的。

6月21号 : Linus Torvalds 发布了Linux3.0版本。

2013

12月13号 : Valve公司发布基于Linux的SteamOS操作系统,这是一个视频游戏控制台系统。

Linux操作系统的诞生、发展和成长过程始终依赖着五个重要支柱:Unix操作系统、MINIX操作系统、GNU计划、POSIX标准和Internet网络。

20世纪80年代,计算机硬件的性能不断提高,PC的市场不断扩大,当时可供计算机选用的操作系统主要有Unix、DOS和MacOS这几种。Unix价格昂贵,不能运行于PC;DOS显得简陋,且源代码被软件厂商严格保密;MacOS是一种专门用于苹果计算机的操作系统。

此时,计算机科学领域迫切需要一个更加完善、强大、廉价和完全开放的操作系统。由于供教学使用的典型操作系统很少,因此当时在荷兰当教授的美国人AndrewS.Tanenbaum编写了一个操作系统,名为MINIX,为了向学生讲述操作系统内部工作原理。

MINIX虽然很好,但只是一个用于教学目的的简单操作系统,而不是一个强有力的实用操作系统,然而最大的好处就是公开源代码。全世界学计算机的学生都通过钻研MINIX源代码来了解电脑里运行的MINIX操作系统,芬兰赫尔辛基大学大学二年级的学生Linus Torvalds就是其中一个。在吸收了MINIX精华的基础上,Linus于1991年写出了属于自己的Linux操作系统,版本为Linux0.01,是Linux时代开始的标志。他利用Unix的核心,去除繁杂的核心程序,改写成适用于一般计算机的x86系统,并放在网络上供大家下载,1994年推出完整的核心Version1.0。至此,Linux逐渐成为功能完善、稳定的操作系统,并被广泛使用。

2021年6月,根据Linux 5.14刚刚进入合并队列的char-misc-next提交,Linux 5.14正式移除了RAW驱动。

2022年6月,基于 Ubuntu 22.04 的 Linux Lite 6.0 正式版发布,提供最新的浏览器,最新的办公套件,最新的定制软件,代号“Fluorite”。

2022年11月6日消息,微软将为 Linux 带来嵌套式虚拟化支持,可运行多个 Windows。

2022年11 月,微软在 GitHub 上线了 WSL 1.0.0 版本,宣布 Windows 11/10 的 Linux 子系统删除 Preview 标签,迎来正式版。

2022年11月,在本周的 platform-drivers-x86 提交合并中,Linux 6.1 新增支持了微软 Surface Pro 9 和 Surface Laptop 5 两款设备。

2022年12月12日,Linus Torvalds 抢在圣诞假期之前发布了最新的 Linux 6.1 内核稳定版,从此开启了 Linux 6.2 合并窗口。截止到2023年初大家可以在内核官网找到相应的文件。

2022年12月14日,Linux 6.2 合并窗口扩展了对 Arm SoC 的支持并更新了 DeviceTree。本次更新在内核中新增了对 7 款高通骁龙处理器的支持,还在 Mainline 中初步支持苹果的 M1 Pro / M1 Ultra / M1 Max 型号处理器。

2022年12月15日,Linux 6.2 合并窗口期内已经确认将会合并大量网络子系统更新。和以往版本相同,Linux 6.2 内核更新周期在网络功能上有大量的改进,更多的细节可以访问这条 pull。

2022年12月 28 日消息,在 Linux 6.2 合并窗口期,英特尔工程师提交的线性地址掩码(Linear Address Masking,简称 LAM)提案遭到了 Linus Torvalds 的拒绝。英特尔工程师2023年初再次提交第 13 个版本,希望在 Linux 6.3 或者更高版本中合并该功能。

2023年1月9日消息,Linus Torvalds 推出了 Linux Kernel 6.2 的第 3 个候选版本更新。

2023年3月27日消息,Linus Torvalds 发布了 Linux Kernel 6.3 的第 4 个维护版本更新,这意味着 6.3 的开发周期已经走过了一半路程。 [20]

2023年5月3日,IT之家消息:Uri Herrera于4月底发布了 Nitrux 2.8 系统,这是基于 Debian 和 systemd-free 的 GNU / Linux 发行版,重点是 KDE 软件和 Plasma 桌面。

2023年5月29日,MX Linux 开发人员宣布,MX Linux 23“Libretto”版本 Beta 版公开测试已全面推出。

2023年6月26日,Linux 6.4 内核已正式发布,这次更新带来了许多改进,比如对苹果 M2 芯片的初步支持、存储性能的提升、传感器监控的改善,以及更多的 Rust 代码。

04. 单内核与微内核区别

单内核:所有内核从整体上作为一个单独大过程实现,运行于内核地址空间,内核通信简单。内核通常以单个静态二进制文件存放于磁盘上。简单性能高,大多数Unix都是单内核。

微内核:微内核功能划分为多个过程,各个过程运行在单独地址空间,需要通过进程间通信IPC处理微内核通信,只有请求强烈的过程才运行在内核态,其他过程在用户态。IPC开销大,且涉及用户态和内核态上下文切换。所以多数的微内核实现(Windows NT、OS X)将所有微内核过程都运行于内核态

05. Linux内核

Linux是单内核,但吸取微内核精华:模块化涉及,抢占式内核,支持内核线程,可动态装载内核模块

Kernel即是Linux内核,Linux内核采用宏内核架构,即Linux大部分功能都会在内核中实现,如进程管理、内存管理、设备管理、文件管理以及网络管理等功能,Linux在发展的过程中,引入了内核模块(Loadable Kernel Module,LKM)机制,内核模块全称为动态可加载内核模块,就是在内核运行时可以动态加载一组目标代码来实现某些特定的功能,在这过程中不需要重新编译内核就可以实现动态扩展。

06. Linux内核组成

Linux内核主要由5部分组成,分别为:进程管理子系统,内存管理子系统,文件子系统,网络子系统,设备子系统。

在这里插入图片描述

1、进程管理

负责进程的创建和销毁,进程的调度。

2、内存管理

负责内存的分配和回收,记录哪些内存被哪些进程使用,管理虚拟内存,将内存的物理地址和逻辑地址做一个映射,主要由MMU进行转换,页表的方式。

3、文件系统

这里的文件系统不仅仅只是硬盘的抽象管理,它也可以是某些io口的抽象;文件系统屏蔽了底层的细节,为上层提供统一的接口;linux中一切皆文件。

4、设备管理

设备管理功能主要由驱动程序提供,主要任务是控制设备完成输入或输出操作;linux把设备看作是特殊的文件,系统通过处理文件的接口(虚拟文件系统VFS)来管理和控制各种设备。

5、网络功能

网络功能值的是除了驱动程序提供的基本硬件操作外,还有系统提供的机制和功能,比如TCP协议,地址解析等。

07. Linux官方网站

网址:https://www.kernel.org/
在这里插入图片描述

在这可以下载最新版本的内核文件,但是大部分是没适配相应芯片的,适配芯片是芯片原厂适配好了。

08. 附录

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【内核驱动】Linux概述 的相关文章

  • 如何从脚本向 sudo 提供密码?

    请注意 这是在我的本地计算机上运行的来宾虚拟机 VBox 我不担心安全性 我正在编写一个将在 Linux Ubuntu VM 上执行的脚本myuser用户 该脚本将在下面创建一个非常大的目录树 etc myapp 目前我必须手动完成所有这些
  • 在单个命令中使用前缀重命名文件夹中的所有文件

    重命名带有前缀的文件夹中的所有文件 Unix 假设一个文件夹有两个文件 a txt b pdf 那么它们都应该从一个命令重命名为 Unix a txt Unix b pdf 如果您的文件名包含没有空格并且你没有任何子目录 你可以使用一个简单
  • 如何删除树莓派的相机预览

    我在我的 raspberryPi 上安装了 SimpleCv 并安装了用于使用相机板的驱动程序 uv4l 驱动程序 现在我想使用它 当我在 simpleCV shell Camera 0 getImage save foo jpg 上键入时
  • 无法为 Python 3.4 创建工作虚拟环境

    I 安装Python 3 4 2 https docs python org 3 using unix html building python和我的 Linux Mint 17 1 中的 Virtualenv 12 0 5 然后我尝试创建
  • 尝试映射大页面 (1GB) 时 mmap 失败

    我做了什么 使用 root 启用大页 我的系统支持 1MB 大页 echo 20 gt proc sys vm nr hugepages 将大页文件系统挂载到 mnt hugepages mount t hugetlbfs nodev mn
  • 使用 MongoDB docker 镜像停止虚拟机而不丢失数据

    我已经在 AWS EC2 上的虚拟机中安装了官方的 MongoDB docker 映像 并且数据库上已经有数据 如果我停止虚拟机 以节省过夜费用 我会丢失数据库中包含的所有数据吗 在这些情况下我怎样才能让它持久 有多种选择可以实现此目的 但
  • 变量作为 bash 数组索引?

    bin bash set x array counter 0 array value 1 array 0 0 0 for number in array do array array counter array value array co
  • Linux TCP服务器:在接受连接之前读取客户端的IP地址

    Related C Winsock API如何在接受连接之前获取连接客户端IP https stackoverflow com questions 716209 c winsock api how to get connecting cli
  • 使用netcat将unix套接字传输到tcp套接字

    我正在尝试使用以下命令将 unix 套接字公开为 tcp 套接字 nc lkv 44444 nc Uv var run docker sock 当我尝试访问时localhost 44444 containers json从浏览器中 它不会加
  • ARM 系统调用的接口是什么?它在 Linux 内核中的何处定义?

    我读过有关 Linux 中的系统调用的内容 并且到处都给出了有关 x86 架构的描述 0x80中断和SYSENTER 但我无法追踪 ARM 架构中系统调用的文件和进程 任何人都可以帮忙吗 我知道的几个相关文件是 arch arm kerne
  • /proc/PID 文件格式

    我想从中检索一些流程信息 proc目录 我的问题如下 中的文件是否有标准格式 proc PID 例如 有这个proc PID status文件与Name t ProcName在第一行 我可以在其他地方用空格代替这个文件吗 t或者类似的东西
  • 退出 bash 脚本但保持进程运行

    我正在运行服务器 需要使用参数执行以下命令 这些脚本目前工作得很好 但问题是当我运行脚本时我无法返回到控制台 它在控制台中保持运行 如果我强行停止它 那么该过程也会停止 我想继续运行该进程并返回到控制台 bin sh php home st
  • 如何从“git log”中查看 Git 中的特定版本?

    My git log显示为 enter code here git trial git log commit 4c5bc66ae50780cf8dcaf032da98422aea6e2cf7 Author king lt email pro
  • 通过 SSH 将变量传递给远程脚本

    我正在通过 SSH 从本地服务器在远程服务器上运行脚本 首先使用 SCP 复制该脚本 然后在传递一些参数时调用该脚本 如下所示 scp path to script server example org another path ssh s
  • 如何在两个不同帐户之间设置无密码身份验证

    我们可以在两台机器的两种不同用途之间设置无密码身份验证吗 例如 计算机A有用户A 计算机B有用户B 我们可以设置密码 ssh 以便计算机 A 上的用户 A 使用其用户帐户 A 登录计算机 B 谢谢你 如果我理解你的问题 你能设置一下吗ssh
  • gdb 错误 - 文件不是可执行格式:无法识别文件格式

    我正在尝试使用 gdb 调试某个名为 xdf 的程序 但是当我运行 gdb xdf 时 出现以下错误 home nealtitusthomas X ray astronomy heasoft 6 24 x86 64 pc linux gnu
  • Linux 文本文件操作

    我有一个格式的文件 a href a href a href a href 我需要选择 之后但 之前的文本 并将其打印在行尾 添加后 例如 a href http www wowhead com search Su a a a a a
  • 是否有可能在linux中找到包含特定文本的文件?

    考虑这种情况 我在文件夹 Example 下有很多文件 如果我需要找到一个包含特定短语 如 Class Example 的文件 我该如何使用 Linux shell 来做到这一点 linux中有类似 定位 的函数可以做到这一点吗 Thank
  • 无关的库链接

    我有一个可能有点愚蠢的问题 因为我很确定我可能已经知道答案了 假设你有静态库A 动态共享库B和你的linux下的程序C 假设库 A 调用库 B 中的函数 并且您的程序调用库 A 中的函数 现在假设 C 在 A 中调用的所有函数都不使用 B
  • 进程名称长度的最大允许限制是多少?

    进程名称允许的最大长度是多少 我正在读取进程名称 proc pid stat文件 我想知道我需要的最大缓冲区 我很确定有一个可配置的限制 但就是找不到它在哪里 根据man 2 prctl http man7 org linux man pa

随机推荐

  • 亲测有效!电脑系统自己停止或休眠了怎么办?如何禁止系统休眠断网?

    亲测有效 电脑系统自己停止或休眠了怎么办 如何禁止系统休眠断网 新安装的操作系统 在开启一段时间无人操作的情况下 经常发现电脑休眠了 或者网络断开了 这种情况如何解决 上干货 电脑休眠 睡眠问题 1 打开控制面板 找到 电源选项 2 更改电
  • 前端神器avalonJS入门(一)

    http www 360doc com content 14 1031 20 21412 421521791 shtml avalonJS是司徒正美开发和维护的前端mvvm框架 可以轻松实现数据的隔离和双向绑定 相比angularJS等前端
  • vscode使用ftp-sync快速上传项目代码到服务器(宝塔ftp为例)

    使用vscode开发工具小伙伴们可以在vscode搜一下ftp sync这个插件 然后点击下载安装 2 使用快捷键 Ctrl Shift P命令 输入ftp sync Init 然后选中执行 3 执行上述命令快速生成 vscode ftp
  • 面向对象编程三大特征

    面向对象三大特征 封装 继承 多态的概述以及其优点 static static表示静态 是Java中的一个修饰符 可以修饰成员方法 成员变量 可以直接通过类名调用 静态变量 特点 被该类所有对象共享不属于对象 属于类 静态变量随着类的加载而
  • Scanner中nextInt()和nextLine()详解(秒懂)

    直接上代码 输出结果 结果分析 nextInt 和nextLine 顺序互换代码如下 输出结果 结果分析 解决方法 可以将nextLine 用next 替换 两者nextLine 执行之前再加一个空nextLine 让这个空的清楚掉回车符再
  • 【Xilinx Vivado时序分析/约束系列5】FPGA开发时序分析/约束-IO时序分析

    在之前介绍的是FPGA内部的时序分析 包括以下几种情况 寄存器与寄存器之间 输入PAD 输入时钟 与寄存器之间 寄存器与输出 PAD 输出时钟 之间 输入PAD 输入时钟 与输出PAD 输出时钟 现在就开始分析FPGA与外部的其他器件的连接
  • python numpy格式化打印

    1 问题描述 在使用numpy的时候 我们经常在debug的时候将numpy数组打印下来 但是有的时候数组里面都是小数 数组又比较大 打印下来的时候非常不适合观察 这里主要讲一下如何让numpy打印的结果更加简洁 2 问题解决 这里需要使用
  • matlab参数方程画曲线

    求x2 3x 1 0 x 5 0 1 5 y1 x x 3x 1 y2 zeros size x plot x y1 x y2 f x xx 3x 1 x1 fzero f 0 5 x2 fzero f 2 5 x 0 2 1 8 2 5
  • vue获取url中的参数值,this.$route.query

    如果有的参数可传可不传 可以使用 传参 例如 http 192 168 1 12 8080 detail id 123 获取的时候 let id this route query id 一 在vue组件单页面中获取页面参数 watch ro
  • devops(后端)

    1 前言 该devpos架构为gitlab jenkins harbor k8s 项目是java项目 流程为从gitlab拉取项目代码到jenkins jenkins通过maven将项目代码打成jar包 通过dockerfile构建jdk环
  • WINDBG 驱动调试命令

    windbg 符号加载 首先添加符号 打开 windbg 工具栏 file gt Symbol File Path 写入路径如下所示 SRV E tools win7 sp1 x86 然后勾选左下角的Reload 确定 执行下面执行强制加载
  • 新纪录学习创作1(@RequestMapping、HttpServletRequest)

    1 RequestMapping 用来处理请求地址映射的注解 可用于类或方法上 用于类上 表示类中的所有响应请求的方法都是以该地址作为父路径 用于方法上 表示在类的父路径下追加方法上注解中的地址将会访问到该方法 此处需注意 RequestM
  • 全国大学生算法设计与编程挑战赛 (秋季赛)——正式赛

    最大化 max Description 有一张NN个点的无向图 要求给每个点分配一个标号 使得任意一条边两端的点的标号差 绝对值 不能超过给出的常数 DD 要求在此基础上最大化标号的最大值减最小值 如果答案为 infin 则输出 1 Inp
  • DS二叉排序树之创建和插入

    题目描述 给出一个数据序列 建立二叉排序树 并实现插入功能 对二叉排序树进行中序遍历 可以得到有序的数据序列 输入 第一行输入t 表示有t个数据序列 第二行输入n 表示首个序列包含n个数据 第三行输入n个数据 都是自然数且互不相同 数据之间
  • 在Unity中 改变地形(Terrain),并加上水面、树、草地、材质(地板上色)

    在Unity中 如何使用地形 Terrain 并加上水面 树 草地 材质 地板上色 目录 在Unity中 如何使用地形 Terrain 并加上水面 树 草地 材质 地板上色 一 水面素材包 导入 二 地形 Terrain 地貌设置 地形上升
  • 对音频进行vad及降噪处理

    感觉有必要写一篇博客了 这几天在小组比赛中负责对语音进行处理 处理有两个 一个是用vad对音频进行端点确定 即把静音部分去掉 第二个是对音频进行降噪处理 之前在网上找了许多资料 才找到谷歌之前开发过一个叫webrtc的轮子 里面集成了许多有
  • LaTeX总结8(矩阵排版)

    1 首先矩阵排版要引入一个新的宏包 usepackage amsmath 2 首先就是格式的问题了 begin matrix 只是普通的矩阵 0 1 1 2 end matrix begin pmatrix 加括号的矩阵 0 1 1 2 e
  • 深度残差网络(Deep residual network, ResNet)

    文章目录 一 前言 二 深度网络的退化问题 三 残差学习 3 1 残差网络原理 3 2 ResNet结构为什么可以解决深度网络退化问题 3 3 残差单元 3 4 ResNet的网络结构 四 实验结果 ResNet 50 完整代码 参考资料
  • STM32F4——DAC

    DAC简介 DAC Digital to analog converter 即数字模拟转换器 它可以将数字信号转换为模拟信号 它的功能与ADC相反 在常见的数字信号系统中 大部分传感器信号被转化成电压信号 而 ADC 把电压模拟信号转换成易
  • 【内核驱动】Linux概述

    00 目录 文章目录 00 目录 01 Unix简介 02 Linux简介 03 Linux发展史 04 单内核与微内核区别 05 Linux内核 06 Linux内核组成 07 Linux官方网站 08 附录 01 Unix简介 UNIX