Linux系统简介及发展历史

Linux的概况

Linux是自由软件

·Linux是一种类UNIX操作系统。Linux内核由Linus Torvalds在1991年发布。在加上用户空间的应用程序之后,成为Linux操作系统
·只要遵循GNU通用公共许可证(GPL),任何个人和机构都可以自由地使用Linux的所有底层源代码,也可以自由地修改和再发布
·在The Linux Kernel Archives网站上可以找到Linux内核的源代码

Linux的应用场景

·Linux最初是在英特尔x86处理器上面开发,设计为只在PC上使用的操作系统
·目前Linux已经被移植到更多的计算机硬件平台,远远超出其他任何操作系统
·Linux应用在绝大多数的超级计算机,嵌入式设备和路由器等设备上
·在移动设备上广泛使用的Android操作系统就是创建在Linux内核之上

 Linux的历史

Unix操作系统

·AT&T公司的贝尔实验室在70年代开发了Unix操作系统,它由Ken Thompson、Dennis Ritchie和Douglas McIlroy等人开发
·在开发Unix系统的过程当中,为增加Unix系统的可移植性,Ken Thompson和Dennis Ritchie使用C语言重写了Unix
·Unix操作系统有AT&T System V 和 Berkeley BSD两个大系列。苹果公司的MacOS就是购买的Berkeley BSD系列的授权
·Unix的体系结构分为3层,从内到外依次是:内核--系统调用--应用层

1. 内核负责两个功能:控制计算机硬件资源;为其他程序运行提供环境
2. 系统调用就是内核的接口,通常在系统调用之上还封装了公用函数库。应用程序可以通过系统调用或者公用函数库来使用内核提供的功能
3. 使用频率最高的应用程序就是shell,shell是一个命令行解释器,它读取用户输入,然后执行命令。

·在早期,各个发行厂商拿到Unix的内核授权以后,会根据本身硬件和客户需求来设计各自的系统调用和公用函数库,这样就导致了在各个发行版本上开发的程序不能跨越发行版本使用,并且产生大量的重复开发成本。为了减少这种开发成本,POSIX标准便应运而生,POSIX为各个接口提供规范(IEEE 1003.1)。只需要进行少量甚至无需修改,遵守POSIX标准的代码就可以在不同操作系统的机器上使用

 开源运动的兴起

·1983年,Richard Stallman创立GNU计划,GNU的全名是Gnu's Not Unix,它的目标就是开发出一个遵循GPL(即开源规范)的类Unix操作系统。在90年代初期,遵循GPL的库、编译器、调试工具和文本编辑器都已经开发完成,但是依然没有一个内核开发完成。当时,微内核构造的GNU Hurd正在开发中,但是进度极其缓慢

Linux诞生

·由于Unix操作系统的各种优秀特性,它在市场上占据了庞大的份额。但是Unix操作系统是商业软件,使用它需要交纳昂贵的授权费用,这对个人用户以及科研院校十分不友好。一些类Unix系统,比如Minix,不支持任何类型的非学术领域使用,极大地限制了Unix系统的使用范围
·1990年,19岁大学生的Linus Torvalds开始在Minix上面学习操作系统相关课程。在1991年他在社区上提出要写出一个全新的开源的内核。

·1993年,宏内核构造的Linux内核面世,并且Linux内核的源代码遵循GNU的GPL。从此以后,广大的社区开发者便为新生的Linux内核积极贡献自己的力量
·Linux操作系统是同时兼容System V和Berkeley BSD两大系列的,著名的《UNIX环境高级编程》所讲述的知识也适用于Linux
·所有的内核源码都可以在kernel.org上面找到并下载

Linux操作系统成功原因

·开源是Linux成功的核心原因。在Linus刚刚推出Linux内核的时候,它实际上只有不到1万行代码,实现了一个简单的内核。但是在开源社区(GNU)的推动之下,Linux开始迅速地发展起来,越来越多程序员开始为Linux系统贡献自己的力量
·另一方面Linux内核兼容了POSIX标准,之前为其他Unix系统编写的旧程序可以无痛苦地转移到Linux操作系统上

Linux发行版本

·通常情况下,Linux被打包成供个人计算机和服务器使用的Linux发行版,一些流行的主流Linux发布版,包括Debian(及其派生版本Ubuntu、Linux Mint)、Fedora(及其相关版本Red HatEnterprise Linux、CentOS)和openSUSE等
·Linux发行版包含Linux内核和支撑内核的实用程序和库,通常还带有大量可以满足各类需求的应用程序。

Linux内核简述

·Linux内核结构是宏内核结构
·Linux内核的功能主要涉及这样几个方面:进程和进程调度、内存管理、文件系统管理和网络。硬件设备在使用的时候也会加载到内核里面。

宏内核和微内核是操作系统内核的两种不同架构。

宏内核是将操作系统的大部分功能集成在内核中,包括文件系统、设备驱动、网络协议等,这些功能都运行在内核空间。因此,宏内核的设计更加紧凑,但也更加复杂

微内核则将操作系统的核心功能尽可能地精简只保留最基本的功能,如进程管理、内存管理和通信机制等,其他功能如文件系统、网络协议等则运行在用户空间。微内核的设计更加灵活,但也更加复杂

宏内核的优点在于性能更高(尽管微内核采用了插件式的设计,扩展性很高。但是大家想,团队之间最重要的是什么,沟通和合作,正因为微内核分离了系统服务层,每次调用都需要通信,而这种通信是需要时间成本的,这就意味着微内核的效率往往是低于宏内核的),因为所有功能都运行在内核空间,不需要进行用户空间和内核空间的切换。而微内核的优点在于可靠性更高,因为内核更加简单,容错能力更强。

·“宏”也就是集成了大量的功能在内核中,"微"也就是只保留核心的功能.

下面详细描述一下宏内核和微内核的区别:

宏内核

宏内核简单理解其实就是把上面所有的功能都整合在一起。我们可以把进程管理、管理内存、管理硬盘、管理各种I/O设备……这些功能看作一个个模块。在宏内核中,这些模块都是集成在一起的,运行在内核进程中,只有处于内核态下才能运行

我们平常所使用的应用软件一般运行在用户态下,而运行操作系统程序,操作硬件则在内核态。运行在用户态下的程序不能直接访问操作系统内核数据结构和程序。当我们在系统中执行一个程序时,大部分时间是运行在用户态下的,在其需要操作系统帮助完成某些它没有权力和能力完成的工作时就会切换到内核态(比如操作硬件)。

内核层中的功能模块都是链接在一起的,并没有一定的层次关系。它们之间可直接通过方法调用进行交互。

那宏内核中是如何工作的呢?

假设现在有一个应用程序需要使用到内存分配的功能,那么首先该应用程序会调用到系统提供的内存分配的接口(系统调用),此时CPU就会切换到内核态,并执行内存分配相关的代码。内核里的内存管理代码按照特定的算法,分配一块内存。并将分配的内存块的首地址,返回给内存分配的接口函数。当内存分配的接口函数返回时,此时CPU又会切换回用户态,应用程序会得到返回的内存块首地址,并开始使用该内存。

宏内核结构的优点就是它的性能十分好,像Linux就是传统的宏内核结构。其性能极高,但其缺点也很明显,就是其耦合度高,一旦其中一个模块出现问题,其他所有的模块都可能会受到影响。

微内核

微内核则和宏内核结构相反,它提倡内核中的功能模块尽可能的少。内核只提供最核心的功能,比如任务调度,中断处理等等。其他实际的模块功能如进程管理、存储器管理、文件管理……这些则被移出内核,变成一个个服务进程,和用户进程同等级,只是它们是一种特殊的用户进程。

微内核中定义一种进程间通信的机制——消息。当应用程序请求相关服务时,会向微内核发送一条与此服务对应的消息,微内核再把这条消息发送给相关的服务进程(特殊的用户进程),接着服务进程会完成相关的服务。

那么微内核是如何工作的呢?

还是刚刚内存分配的例子。这个时候应用程序首先会发送内存分配的消息,这个发送消息的接口函数是由微内核提供的。此时CPU切换到内核态,开始执行该函数的代码,微内核的代码会使当前进程停止运行,并将消息发送给内存管理的服务进程。内存管理服务进程收到该消息后,就会分配一块内存,并且也会通过消息的形式将分配的内存块的地址返回给内核。微内核再将该消息返回给发送内存分配消息的应用程序。此时CPU切换到用户态,应用程序会得到返回的内存块首地址,并开始使用该内存。

对比宏内核中,微内核结构主要是多了接收和发送消息的这一过程,实际上也是系统调用,只是并不是直接调用内存管理的接口函数,因为微内核中内存管理功能模块已经不属于系统调用了。所以对比起宏内核,微内核结构的性能会差不少。

但微内核降低了耦合度,模块移除内核后后使得即使某一个模块出现问题,只要重启这个模块的进程即可,不会影响到其他模块,更加的稳定。并且微内核有相当好的伸缩性、扩展性,因为模块功能只是一个进程,可以随时增加或减少系统功能。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/353926.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

网络安全02--负载均衡下的webshell连接

目录 一、环境准备 1.1ubentu虚拟机一台,docker环境,蚁剑 1.2环境压缩包(文件已上传资源): 二、开始复原 2.1上传ubentu: 2.2解压缩 2.3版本20没有docker-compose手动下载,包已上传资源 …

Android双指缩放ScaleGestureDetector检测放大因子大图移动到双指中心点ImageView区域中心,Kotlin(2)

Android双指缩放ScaleGestureDetector检测放大因子大图移动到双指中心点ImageView区域中心,Kotlin(2) 在 Android ScaleGestureDetector检测双指缩放Bitmap基于Matrix动画移动到双指捏合中心点ImageView区域中心,Kotlin-CSDN博客 …

vue+Element UI实现省市区镇四级联动

shigen坚持更新文章的博客写手,擅长Java、python、vue、shell等编程语言和各种应用程序、脚本的开发。记录成长,分享认知,留住感动。 在一些需要填写地址的前端页面中,总是少不了需要填写地址的级联选择器,类似这样的&…

【Linux】第三十六站:信号

文章目录 一、信号的概念1.信号概念2.前台与后台进程3.信号的处理4.硬件层面5.信号与我们的代码是异步的 二、信号的产生1.产生的方式2.键盘组合键3.kill命令4.系统调用4.1 kill系统调用4.2 raise4.3 abort 5.异常软件条件5.1 异常产生信号5.2 alarm(软件条件产生信…

【Linux】第三十七站:信号保存

文章目录 一、信号发送二、信号保存1.为什么要进行信号保存? 三、阻塞信号1.信号的一些相关概念2.在内核中的表示3.sigset_t4.信号集操作函数5.sigprocmask6.sigpending7. 总结 一、信号发送 如下所示,对于普通信号,它的编号是从1~31。这个是…

N-141基于springboot,vue网上拍卖平台

开发工具:IDEA 服务器:Tomcat9.0, jdk1.8 项目构建:maven 数据库:mysql5.7 系统分前后台,项目采用前后端分离 前端技术:vueelementUI 服务端技术:springbootmybatis-plusredi…

九州金榜|为什么鼓励式家庭教育?

鼓励式教育是一种积极的教育方式,它强调通过鼓励和肯定来激发孩子的积极性和自信心,帮助孩子更好地成长和发展。在家庭教育中,鼓励式教育同样具有重要意义。九州金榜家庭教育和大家一起探讨关于鼓励式教育的好处以及意义: 一.有助…

JRT实体比对

之前已经实现了JRT实体编译的菜单,用Linux指令编译放在网站下的实体代码。那么就有个问题,有人就是直接换实体jar文件不修改网站的实体代码。或者就只修改实体代码不编译搁置在那里,那么后面更新实体的人就得给别人背锅,后面人新编…

机器学习 | 如何使用 Seaborn 提升数据分析效率

Seaborn和Matplotlib都是Python可视化库,它们都可以用于创建各种类型的图表。但是,Seaborn 和Matplotlib在概念和设计上有一些不同。 Matplotlib虽然已经是比较优秀的绘图库了,但是它有个今人头疼的问题,那就是API使用过于复杂&am…

Blender教程(基础)-物体的移动、旋转与缩放-04

一、新建一个立方体 ShiftA新建一个立方体用来演示。 二、物体的移动 xyz轴移动 点击下图图左侧的移动选项后,选中要移动的物体,会出现三个箭头的方向,这分别代表沿着x、y、z轴移动。xyz平面移动 这个小正方体代表沿着某一个面移动&#…

04.领域驱动设计:了解聚合和聚合根,怎样设计聚合

目录 1、概述 2、聚合 3、聚合根 4、怎么设计聚合 4.1 聚合的构建过程主要步骤 第 1 步:采用事件风暴。 第 2 步:选出聚合根。 第 3 步:找出与聚合根关联的所有紧密依赖的实体和值对象。 第 4 步:画出对象的引用和依赖模型…

vue3框架基本使用

一、安装包管理工具 vite和vue-cli一样,都是脚手架。 1.node版本 PS E:\vuecode\vite1> node -v v18.12.12.安装yarn工具 2.1 yarn简单介绍 yarn是一个包管理工具,也是一个构建、打包工具 yarn需要借助npm进行安装:执行的命令行npm i…

找不同-《企业应用架构模式》2024典藏版

DDD领域驱动设计批评文集 做强化自测题获得“软件方法建模师”称号 《软件方法》各章合集 以下是2004年《企业应用架构模式》中译本和2024年《企业应用架构模式》典藏版译本的页面。 您能从中找出至少10处不同吗? 如何选择UMLChina服务 UMLChina公众号精选&…

Blender教程(基础)-面的细分与删除、挤出选区-07

一、Blender之面的细分 新建一个立方体,在编辑模式下、选中一个面。 在选中的面上单击右键弹出细分选项,选择细分。 在选中细分后、会默认细分1次。修改细分次数在左下角 二、Blender之面的删除 选择中需要操作的面,在英文状态下按X键弹…

VSCode 1.85.0更新的3个实用功能

1、单个文件可直接拖拽为独立窗口 当单文件过长,直接分成两个视图就不用上下频繁滚动 2、将终端移动到编辑器区域 此时,终端也可像文件一样拖拽为独立窗口 3、文件夹目录粘性头部 默认关闭,需要设置 "workbench.tree.enableStickyScro…

Linux权限的概念,shell命令以及运行原理

目录 1.shell命令以及运行原理2.Linux权限2.1Linux中的两类用户2.2Linux权限管理2.2.1文件访问者的分类(人)2.2.2文件类型和访问权限(事物属性)2.2.3文件的类型以及权限的缩写2.2.4文件权限值的表示方法2.2.5文件访问权限的相关设…

HTML 曲线图表特效

下面是代码 <!doctype html> <html> <head> <meta charset"utf-8"> <title>基于 ApexCharts 的 HTML5 曲线图表DEMO演示</title><style> body {background: #000524; }#wrapper {padding-top: 20px;background: #000524;b…

opencv#33 边缘检测

边缘检测原理 图像的每一行每一列都可以看成是一个连续的信号经过离散后得到的数值&#xff0c;例如上图左侧给出的图像由黑色到白色的一个信号&#xff0c;也就是图像中某一行像素变化是由黑色逐渐到白色&#xff0c;我们将其对应在一个坐标轴中&#xff0c;将像素值的大小对应…

sysfs: cannot create duplicate filename ‘/devices/virtual/leds/led1‘问题查找及解决

问题描述&#xff1a;安装模块时出现如下错误&#xff1a; [rootVinxin_PC leds]# cd /driver_Test/ [rootVinxin_PC driver_Test]# ls app leds-s5pv210.ko [rootVinxin_PC driver_Test]# lsmod Module Size Used by Not tainted [rootVin…

最全全国十七个数据入表和资产化案例深度解析

2024年1月1日起&#xff0c;财政部会计司发布的《企业数据资源相关会计处理暂行规定》正式施行&#xff0c;规定为数据资源的会计处理提供了明确的指导原则。这一里程碑事件也标志着我国在数据资产入表领域正式进入实际操作阶段&#xff0c;随后&#xff0c;数据资产入表在全国…
最新文章