Linux体系结构
Linux体系结构
- 一、引入
- 概念
- 二、内核
- 三、管理
- 1、内存管理
- 2、进程管理
- 3、进程调度控制进程对CPU的访问
- 4、设备驱动程序和网络接口
- 四、Linux Shell
- 五、磁盘分区
- 硬盘内的分区
- Linux下磁盘分区和目录的关系
一、引入
操作系统的本质是什么?
是一种管理(协调)资源机制,管理(协调)的对象是计算机硬件主要构成设(运算器/存储器/输入输出/控制器),并赋予这些硬件设备在受限资源条件下产生超出硬件本身形态与作用的价值。
操作系统能够把计算机底层硬件在工作时伴随的通讯调用、时序切换、冲突等待、存储分配、进程、线程等复杂概念,统一抽象为我们客观世界可以被认知的实物 ---------- 文件
概念
-
设备驱动程序
提供连接计算机的每个硬件设备的接口,设备驱动器使程序能够写入设备,而不需要了解执行每个硬件的细节。简单来说,就是让你能吃到鸡蛋,但不用养一只鸡; -
用户接口
操作系统需要为用户提供一种运行程序和访问文件系统的方法。如常用的 Windows 图形界面,可以理解为一种用户与操作系统交互的方式;智能手机的 Android 或 iOS 系统,也是一种操作系统的交互方式; -
系统服务
当计算机启动时,会自启动许多系统服务程序,执行安装文件系统、启动网络服务、运行
具体到Linux操作系统,它的体系主要由4部分构成,即内核、shell、文件系统和应用程序。其中内核、shell、文件系统构成了操作系统最基本的结构。
二、内核
负责组织协调金属设备工作协调,管理系统进程、内存、设备驱动程序、文件和网络系统,决定系统的性能和稳定性;
内核:Linux 内核由如下几部分组成:内存管理、进程管理、设备驱动程序、文件系统和网络管理等。SCI 层提供了某些机制执行从用户空间到内核的函数调用。这个接口依赖于体系结构,甚至在相同的处理器家族内也是如此。SCI实际上是一个非常有用的函数调用多路复用和多路分解服务。在 ./linux/kernel 中您可以找到 SCI 的实现,并在 ./linux/arch 中找到依赖于体系结构的部分。紧随SCI接口层之下,就是一组处理用户操作的文件系统、内存管理、进程管理、设备驱动和网络管理。根据用户的操作要求,各组件之间依据共同POSIX、FHS、LBS等标准接口各自负责处理不同的作业内容。
早期Linux的开发才众多,系统的代码集成也比较庞杂,系统兼容性受到一定的影响。所以Linux社区逐步引用了各项标准来规范操作系统运行时的规范与边界:
-
POSIX:标准定义了操作系统应该为应用程序提供的接口标准,Linux正是遵从这个标准才得以从GNU获得大量的应用软件;
-
FHS: 标准定义了文件系统目录的规范,分两层: 第一层定义 / (根目录) 下面的各个目录应该要放什么文件数据,例如/etc应该要放置设置文件,/bin与/sbin则应该要放置可执行文件等等;第二层针对/usr及/var这两个目录的子目录来定义。例如/var/log放置系统登录文件、/usr/share放置共享数据等等。
-
LSB:标准制定了应用程序与运行环境之间的二进制接口,确保应用程序可以跨系统移植运行。
-
用户空间:这是Linux操作系统在多用户情况下针对内核程序与用户程序在内存运行过程中管理的概念。用户空间可以有多个,内核空间有且仅有一个,且两个空间之间是隔离访问的。
三、管理
1、内存管理
对任何一台计算机而言,其内存以及其它资源都是有限的。为了让有限的物理内存满足应用程序对内存的大需求量,Linux 采用了称为“虚拟内存”的内存管理方式。Linux 将内存划分为容易处理的“内存页”(对于大部分体系结构来说都是 4KB)。Linux 包括了管理可用内存的方式,以及物理和虚拟映射所使用的硬件机制。
2、进程管理
在 Linux 系统中,能够同时运行多个进程,Linux 通过在短的时间间隔内轮流运行这些进程而实现“多任务”。这一短的时间间隔称为“时间片”,让进程轮流运行的方法称为“进程调度” ,完成调度的程序称为调度程序。进程实际是某特定应用程序的一个运行实体。
3、进程调度控制进程对CPU的访问
当需要选择下一个进程运行时,由调度程序选择最值得运行的进程。可运行进程实际上是仅等待CPU资源的进程,如果某个进程在等待其它资源,则该进程是不可运行进程。Linux使用了比较简单的基于优先级的进程调度算法选择新的进程。
通过多任务机制,每个进程可认为只有自己独占计算机,从而简化程序的编写。每个进程有自己单独的地址空间,并且只能由这一进程访问,这样,操作系统避免了进程之间的互相干扰以及“坏”程序对系统可能造成的危害。 为了完成某特定任务,有时需要综合两个程序的功能,例如一个程序输出文本,而另一个程序对文本进行排序。为此,操作系统还提供进程间的通讯机制来帮助完成这样的任务。Linux 中常见的进程间通讯机制有信号、管道、共享内存、信号量和套接字等。
内核通过 SCI 提供了一个应用程序编程接口(API)来创建一个新进程(fork、exec 或 [POSⅨ] 函数),停止进程(kill、exit),并在它们之间进行通信和同步(signal 或者 POSⅨ 机制)。
4、设备驱动程序和网络接口
- 设备驱动程序:
设备驱动程序是 Linux 内核的主要部分。和操作系统的其它部分类似,设备驱动程序运行在高特权级的处理器环境中,从而可以直接对硬件进行操作,但正因为如此,任何一个设备驱动程序的错误都可能导致操作系统的崩溃。设备驱动程序实际控制操作系统和硬件设备之间的交互。
设备驱动程序提供一组操作系统可理解的抽象接口完成和操作系统之间的交互,而与硬件相关的具体操作细节由设备驱动程序完成。一般而言,设备驱动程序和设备的控制芯片有关,例如,如果计算机硬盘是 SCSI 硬盘,则需要使用 SCSI 驱动程序,而不是 IDE 驱动程序。
- 网络接口:
提供了对各种网络标准的存取和各种网络硬件的支持。网络接口可分为网络协议和网络驱动程序。网络协议部分负责实现每一种可能的网络传输协议。众所周知,TCP/IP 协议是 Internet 的标准协议,同时也是事实上的工业标准。
Linux 的网络实现支持 BSD 套接字,支持全部的TCP/IP协议。Linux内核的网络部分由BSD套接字、网络协议层和网络设备驱动程序组成。网络设备驱动程序负责与硬件设备通讯,每一种可能的硬件设备都有相应的设备驱动程序
四、Linux Shell
shell是系统的用户界面,提供了用户与内核进行交互操作的一种接口。它接收用户输入的命令并把它送入内核去执行,是一个命令解释器。另外,shell编程语言具有普通编程语言的很多特点,用这种编程语言编写的shell程序与其他应用程序具有同样的效果。
目前主要有下列版本的shell
- Bourne Shell
- BASH
- Korn Shell
- C Shell
五、磁盘分区
磁盘分区:linux分区不同于windows,硬盘和硬盘分区在Linux都表示为设备。硬盘分区类型主要有三种:主分区,扩展分区和逻辑分区。硬盘支持的分区主要分为主分区(Primary Partion)和扩展分区(Extension Partion)两种,主分区和扩展分区数目之和不能大于四个。
-
主分区(Primary Partion):可以马上被使用但不能再分区。
-
扩展分区(Extension Partion):必须再进行分区后才能使用,也就是说它必须还要进行二次分区。
-
逻辑分区((Logical Partion)):由扩展分区建立起来的分区,逻辑分区没有数量上限制。扩展分区只不过是逻辑分区的“容器”,实际上只有主分区和逻辑分区进行数据存储。
-
Linux下硬盘分区的标识 硬盘分区的标识一般使用/dev/hd[a-z]X或者/dev/sd[a-z]X来标识,其中[a-z]代表硬盘号,X代表硬盘内的分区号。
整块硬盘分区的块号标识 Linux下用hda、hdb、sda、sdb 等来标识不同的硬盘。其中:IDE接口硬盘:表示为/dev/hda1、/dev/hdb …;SCSI 接口的硬盘、SATA接口的硬盘表示为/dev/sda、/dev/sdb … … ;
硬盘内的分区
如果X的值是1到4,表示硬盘的主分区(包含扩展分区);逻辑分区从是从5开始的,比如/dev/hda5肯定是逻辑分区了;例如:用hda1、hda2、 hda5、hda6 来标识不同的分区。其中,字母a代表第一块硬盘,b代表第二块硬盘,依次类推。而数字1 代表一块硬盘的第一个分区、2 代表第二个分区,依次类推。1 到4 对应的是主分区(Primary Partition)或扩展分区(Extension Partition)。从5开始,对应的都是硬盘的逻辑分区(Logical Partition)。一块硬盘即使只有一个主分区,逻辑分区也是从5开始编号的,这点应特别注意。
总结:一个硬盘分区首先要确认在哪个硬盘,然后再确认它所在硬盘内的哪个分区。
Linux下磁盘分区和目录的关系
-
任何一个分区都必须挂载到某个目录上。
-
目录是逻辑上的区分。分区是物理上的区分。
-
磁盘Linux分区都必须挂载到目录树中的某个具体的目录上才能进行读写操作。
-
根目录是所有Linux的文件和目录所在的地方,需要挂载上一个磁盘分区。
相关文章:
Linux体系结构
Linux体系结构一、引入概念二、内核三、管理1、内存管理2、进程管理3、进程调度控制进程对CPU的访问4、设备驱动程序和网络接口四、Linux Shell五、磁盘分区硬盘内的分区Linux下磁盘分区和目录的关系一、引入 操作系统的本质是什么? 是一种管理(协调)资源机制&…...

【汽车电子】什么是ADAS?
文章目录ADAS——先进驾驶辅助系统ADAS——商用车安全性能提升的利器总结ADAS——先进驾驶辅助系统 ADAS,全称Advanced Driver Assistance Systems ,“先进驾驶辅助系统”,adas是汽车上面的一种系统,中文名叫做高级驾驶辅助系统&…...

java: 错误: 不支持发行版本 5(快速解决办法)
目录 前言 一、出现报错 二、报错的原因 三、解决办法 四、解决成功 前言 在maven web项目上面要部署运行tomcat时候,会出现这个问题 一、出现报错 java: 错误: 不支持发行版本 5 二、报错的原因 (1)官方解释:这个错误…...
QT中pro文件常用qmake语法
变量 配置QT模块 QT core gui sql network QT - sql注释 # 开启注释 # DEFINES QT_DISABLE_DEPRECATED_BEFORE0x060000 # disables all the APIs deprecated before Qt 6.0.0添加源文件 SOURCES \main.cpp \widget.cppSOURCES *.cpp SOURCES 1.cpp 2.cpp 3.cpp添加…...

Android 一体机研发之修改系统设置————声音
Android 一体机研发之修改系统设置————屏幕亮度 Android 一体机研发之修改系统设置————声音 Android 一体机研发之修改系统设置————自动锁屏 修改系统设置系列篇章马上开张了! 本章将为大家细节讲解声音。 对于声音功能大家都不陌生,在多…...
挖掘长尾关键词的五大思路
本文重点介绍做SEO挖掘长尾词的五大思路:长尾词是搜索量不大,但是关键词的量非常庞大的词,那我们可以通过以下方法挖掘:1、目标型长尾搜索的关键词是直接包含了商业需求的,直接能跟我们的服务或产品对接的,…...

ccc-Brief Introduction of Deep Learning-李宏毅(6)
文章目录Three Steps for Deep LearningFully Connect Feedforward NetworkMatrix OperationOutput Layer as Multi-Class ClassifierExample ApplicationNeural NetworkGoodness of functionPick the best functionThree Steps for Deep Learning 与机器学习三步骤基本相同。 …...
【TVM 学习资料】用 Schedule 模板和 AutoTVM 优化算子
完整 TVM 中文文档,访问→TVM 中文站 作者:Lianmin Zheng,Chris Hoge 本教程将展示如何用 TVM 张量表达式(TE)语言编写 schedule 模板,并通过 AutoTVM 对模板进行搜索,从而找到最佳 schedule。…...

蓝牙Mesh学习笔记(一)
Mesh系统结构1 Mesh网络分层1.1 模型层(Model layer)1.2 基础模型层(Foundation Model layer)1.3 接入层(Access layer)1.4 上层传输层(Upper transport layer)1.5 下层传输层(Lower transport layer)1.6 网络层(Network layer)1.7 承载层(Bearer layer)1.8 BLE内核规范(BLE Co…...
【1234. 替换子串得到平衡字符串】
来源:力扣(LeetCode) 描述: 有一个只含有 Q, W, E, R 四种字符,且长度为 n 的字符串。 假如在该字符串中,这四个字符都恰好出现 n/4 次,那么它就是一个「平衡字符串」。 给你一个这样的字符…...

独自开:提供创业机会、享受平台分红、推出新颖赚钱副业
💗wei_shuo的个人主页 💫wei_shuo的学习社区 🌐Hello World ! 前言 独自开:一款聚焦软件定制开发,独立、自主、开放平台 独创分层标准化平台架构,满足系统不断生长的个性化需求多端一键部署前端业务交互与展…...

C++【二叉树进阶(二叉搜索树)】
文章目录前言1、二叉搜索树1-1、 二叉搜索树概念2、二叉搜索树操作2-1、树和节点的基本框架2-2、二叉搜索树的查找2-3、中序遍历2-4、二叉搜索树的插入2-5、二叉搜索树的删除3、二叉搜索树的模拟实现3-1、循环版本3-2、递归版本4、二叉搜索树的应用4-1、K模型4-2、KV模型4-3、K…...

【C++初阶】vector的使用
大家好我是沐曦希💕 文章目录一.vector介绍二、构造函数三、遍历1.[]2.迭代器3.范围for四、容量操作1.扩容机制五、增删查改六、迭代器失效问题一.vector介绍 vector是表示可变大小数组的序列容器。就像数组一样,vector也采用的连续存储空间来存储元素。…...
OPenPCDet windows流程及其问题
首先的首先极其不推荐将OPenPCDet运行在Windows上,过程非常复杂,适配也不是很好,不推荐在windows下载并训练,本人做这个主要是方便再笔记本电脑上对实验结果进行整理,处理一些简单的推理评估等任务。如有必要请继续阅读: 以下是正文: 常规的安装流程不再赘述,请参考官方…...

【自学Python】Python字符大小写判断
大纲 Python字符串是否是小写 Python字符串是否是小写教程 在开发过程中,有时候我们需要判断一个 字符串 是否是小写形式(即,所有的字符都是小写字母,不是英文字符的忽略不做判断),在 Python 中ÿ…...

设计模式之美总结(开源实战篇)
title: 设计模式之美总结(开源实战篇) date: 2023-01-10 17:13:05 tags: 设计模式 categories:设计模式 cover: https://cover.png feature: false 文章目录1. Java JDK 应用到的设计模式1.1 工厂模式在 Calendar 类中的应用1.2 建造者模式在 Calendar …...

两个月,测试转岗产品经理,我是怎么规划的?
本期同学依旧来自深圳 测试到产品转变,用了两个月 本周,为大家介绍M同学的佛系转岗经历 学员档 学员档案 原岗位:测试 转岗级别:中级产品经理 转岗特点: 1.未接触产品工作 2.对岗位地点要求严格 先看结果 …...

三数之和-力扣15-java排序+双指针
一、题目描述给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k ,同时还满足 nums[i] nums[j] nums[k] 0 。请你返回所有和为 0 且不重复的三元组。注意:答案中不可以包含重复的三元组。…...

【编程基础之Python】3、创建Python虚拟环境
【编程基础之Python】3、创建Python虚拟环境创建Python虚拟环境为什么需要虚拟环境Windows上的Anaconda创建虚拟环境conda 命令conda env 命令创建虚拟环境切换虚拟环境验证虚拟环境Linux上的Anaconda创建虚拟环境创建虚拟环境切换虚拟环境验证虚拟环境总结创建Python虚拟环境 …...

kettle开发-Day36-循环驱动作业
前言:在日常数据处理时,我们通过变量传参来完成某个日期的数据转换。但可能因程序或者网络原因导致某个时间段的数据抽取失败。常见导致kettle作业失败的原因大概分为三大类,数据源异常、数据库异常、程序异常。因此面对这些异常时࿰…...
【Linux】shell脚本忽略错误继续执行
在 shell 脚本中,可以使用 set -e 命令来设置脚本在遇到错误时退出执行。如果你希望脚本忽略错误并继续执行,可以在脚本开头添加 set e 命令来取消该设置。 举例1 #!/bin/bash# 取消 set -e 的设置 set e# 执行命令,并忽略错误 rm somefile…...

【人工智能】神经网络的优化器optimizer(二):Adagrad自适应学习率优化器
一.自适应梯度算法Adagrad概述 Adagrad(Adaptive Gradient Algorithm)是一种自适应学习率的优化算法,由Duchi等人在2011年提出。其核心思想是针对不同参数自动调整学习率,适合处理稀疏数据和不同参数梯度差异较大的场景。Adagrad通…...
在Ubuntu中设置开机自动运行(sudo)指令的指南
在Ubuntu系统中,有时需要在系统启动时自动执行某些命令,特别是需要 sudo权限的指令。为了实现这一功能,可以使用多种方法,包括编写Systemd服务、配置 rc.local文件或使用 cron任务计划。本文将详细介绍这些方法,并提供…...
大模型多显卡多服务器并行计算方法与实践指南
一、分布式训练概述 大规模语言模型的训练通常需要分布式计算技术,以解决单机资源不足的问题。分布式训练主要分为两种模式: 数据并行:将数据分片到不同设备,每个设备拥有完整的模型副本 模型并行:将模型分割到不同设备,每个设备处理部分模型计算 现代大模型训练通常结合…...

12.找到字符串中所有字母异位词
🧠 题目解析 题目描述: 给定两个字符串 s 和 p,找出 s 中所有 p 的字母异位词的起始索引。 返回的答案以数组形式表示。 字母异位词定义: 若两个字符串包含的字符种类和出现次数完全相同,顺序无所谓,则互为…...

Mac下Android Studio扫描根目录卡死问题记录
环境信息 操作系统: macOS 15.5 (Apple M2芯片)Android Studio版本: Meerkat Feature Drop | 2024.3.2 Patch 1 (Build #AI-243.26053.27.2432.13536105, 2025年5月22日构建) 问题现象 在项目开发过程中,提示一个依赖外部头文件的cpp源文件需要同步,点…...

JVM 内存结构 详解
内存结构 运行时数据区: Java虚拟机在运行Java程序过程中管理的内存区域。 程序计数器: 线程私有,程序控制流的指示器,分支、循环、跳转、异常处理、线程恢复等基础功能都依赖这个计数器完成。 每个线程都有一个程序计数…...
【学习笔记】erase 删除顺序迭代器后迭代器失效的解决方案
目录 使用 erase 返回值继续迭代使用索引进行遍历 我们知道类似 vector 的顺序迭代器被删除后,迭代器会失效,因为顺序迭代器在内存中是连续存储的,元素删除后,后续元素会前移。 但一些场景中,我们又需要在执行删除操作…...
[USACO23FEB] Bakery S
题目描述 Bessie 开了一家面包店! 在她的面包店里,Bessie 有一个烤箱,可以在 t C t_C tC 的时间内生产一块饼干或在 t M t_M tM 单位时间内生产一块松糕。 ( 1 ≤ t C , t M ≤ 10 9 ) (1 \le t_C,t_M \le 10^9) (1≤tC,tM≤109)。由于空间…...

Vue3 PC端 UI组件库我更推荐Naive UI
一、Vue3生态现状与UI库选择的重要性 随着Vue3的稳定发布和Composition API的广泛采用,前端开发者面临着UI组件库的重新选择。一个好的UI库不仅能提升开发效率,还能确保项目的长期可维护性。本文将对比三大主流Vue3 UI库(Naive UI、Element …...