操作系统333

408考研-操作系统题型强化与总结 观看视频地址:https://www.bilibili.com/video/BV13R4y117Xj/?spm_id_from=333.999.0.0&;vd_source=dbe6c336b866ab38bef6c459f16e5c54 阅读详情

3.7 用户空间与内核空间
3.7.1 说明
Linux 简化了分段机制,使得虚拟地址与线性地址总是一致,因此,Linux 的虚拟地址空间也为0~4G 字节(32bit)。Linux 内核将这4G 字节的空间分为两部分。将最高的1G 字节(从虚拟地址0xC0000000 到0xFFFFFFFF),供内核使用,称为“内核空间”。而将较低的3G 字节(从虚拟地址0x00000000 到0xBFFFFFFF),供各个进程使用,称为“用户空间”。因为每个进程可以通过系统调用进入内核,因此,Linux 内核由系统内的所有进程共享。于是,从具体进程的角度来看,每个进程可以拥有4G 字节的虚拟空间。
在这里插入图片描述

3.7.2 区别
关于内存管理一定要区分两个概念,内核空间内存管理及用户空间内存管理,Linux在这两个空间的内存管理方式非常不同,但也有一些相同点:1. 都有页表;2. 都是通过虚拟地址访问内存。主要的不同点:1. 内核中虚拟地址到物理地址基本是直接映射,分配连续的物理内存(也可以分配非连续的内存,比如vmalloc等,具体后续单独描述),而用户空间会基于进程各自的页表,分配非连续的物理内存;2. 物理内存中有一部分内存只能被内核访问的(具体见内核域划分)。所以内核空间会直接依赖物理内存的管理,而用户空间则需要多一层的虚拟地址空间到物理地址的转换。
  linux内核一般将虚拟地址空间划分为会两部分,将底部比较大的部分用于用户进程,顶部专用于内核进程,在IA-32系统上比例为3:1,因此内核访问的地址一般是从0xC0000000开始。内核空间的内存管理相对要简单一些,因为内核空间信任自身,而没法信任用户程序。内核对于物理内存管理主要包括以下几个概念:分配大块内存的伙伴系统;分配非连续内存块的vmalloc机制及内存映射机制;分配小块内存的slab,slub和slob;

内核分配内存使用简单的方法,内核中的函数使用直截了当的方式获得动态内存,原因:
(1)内核是操作系统中优先级最高的成分。如果某个内核函数请求动态内存,那么必须有正当的理由发出那个请求,因此没有道理试图推迟这个请求。
(2)内核信任自己。所有的内核函数都被假定是没有错误的,因此内核函数不必插入针对编程错误的任何保护措施。
给用户态进程分配内存时,情况完全不同:
(1)进程对动态内存的请求被认为是不紧迫的。例如,当进程的可执行文件被装入时,进程并不一定立即对所有的代码进行访问。类似的,当进程调用malloc以获得请求的动态内存时,也并不意味着进程很快就会访问所有获得的内存。因此一般来说,内核总是尽量推迟给用户态进程分配动态内存。
(2)由于用户进程是不可信任的,因此,内核必须能够随时准备捕获用户态进程引起的所有寻址错误。

3.7.3 UMA VS NUMA
有两种类型的计算机,分别以不同的方式管理物理内存:
1)UMA(uniform memory access)计算机,将内存以连续的方式组织起来。SMP系统中每个处理器都是访问同一块内存。
2)NUMA(non-uniform memory access)计算机,总是多处理器计算机,系统各个CPU有各自本地的内存访问,各个处理器之间的总线是连着的,可以访问其他CPU,但是要慢一些。
简而言之,就是 UMA总线逻辑更简单,但是访问速度要慢,带宽低;NUMA总线逻辑更复杂,但是访问更高效,带宽高,也更容易伸缩。UMA更适合分时系统,NUMA更适合实时系统,UMA并行能力特别差。下面我们讲解的主要是NUMA系统,因为弄懂了NUMA系统的内存管理,UMA就特别容易理解了。
以上是硬件层面上的NUMA,而作为软件层面的Linux,则对NUMA的概念进行了抽象。即便硬件上是一整块连续内存的UMA,Linux也可将其划分为若干的node。同样,即便硬件上是物理内存不连续的NUMA,Linux也可将其视作UMA。
所以,在Linux系统中,你可以基于一个UMA的平台测试NUMA上的应用特性。从另一个角度,UMA就是只有一个node的特殊NUMA,所以两者可以统一用NUMA模型表示。
【图片:https://zhuanlan.zhihu.com/p/68465952】

3.7.4 分配和映射

  1. 映射跟分配是两回事,他们是不相关的。
  2. 但是如果能做到 分配后才映射,释放后就解映射,从运行安全的角度来说是最好的,可惜这个很难做到。

先看第一个问题:映射跟分配是两回事,他们是不相关的
整个内核,由buddy管理算法来管理所有物理页,只有经过它分配出去的物理页,OS和应用程序才能使用。
映射是指建好页表,即某块虚拟地址空间到物理地址空间的映射,有了这个映射,处理器就可以访问这块虚拟地址空间。
所以,分配是管哪些物理地址可使用,而映射是管哪些虚拟地址可访问
那么问题来了:如果某个物理页没有被分配出来,但已有某个虚拟地址映射到这个物理页上,怎么办?会不会出问题呢?这就是内核lowmem给大家造成的疑惑。

再看第二个问题:但是如果能做到 分配后才映射,释放后就解映射,从运行安全的角度来说是最好的,可惜这个很难做到
我们先看高端内存(即highmem),请大家要注意概念,高端内存是指物理地址空间超过896M的内存地址,跟虚拟空间上的(3G+896M ~ 4G]没有任何关系。
高端内存是满足分配后才映射,释放后就解映射 这个原则的,这个空间主要给用户态进程(比如用户态代码段,数据段,栈,堆,匿名映射)或者用户态业务相关功能使用(访问文件产生的pagecache)。

但是lowmem却不是这样的。总结起来有两个原因:
1) 先有鸡还有先有蛋
虚拟地址到物理地址的映射关系,要写到页表里面,如果这个页表所在的址物理没有映射到虚拟地址,处理器是通过虚拟地址来修改页表的,但在MMU模式下,处理器只能使用虚拟地址来访问任何物理内存。为了解决这个矛盾,需要在进入保护模式(X86架构)/MMU模式(ARM架构)之前,先人为规划出一个固定映射,当然这个映射越简单越好,就是我们常说的线性映射。
2)固定映射应该是多大
从道理上讲,kernel必须的东西:比如代码段,数据段,page结构数组,缺页函数所涉及的访问地址空间,都要在这个预先规划出来的固定映射空间内,才能保证kernel功能的正常运行作。后续内核根据代码逻辑要求,动态申请内存时,建好页表就可以了。但是内核作为整个系统的管理者,它的性能必须高,不能成为系统的瓶颈;用户在运行过程中,内核态必须创建很多管理对象,才能将用户态业务管理好。比如task_struct, mm, vma,file, inode等关键数据结构。内核如果在创建这些对象时,从buddy里面分配内存(当然中间是通过slub来分配的),然后才建立映关系,那么性能必然会比较差。所以内核在运行过程中,动态创建的管理对象所在的内存空间,必须提前映射好。这个区域就是lowmem zone。
kernel运行过程中需要动态分配的管理对象,都是从lowmem zone里面分配的,这个zone的性能比highmem zone优,因为页表已提前建好的。
内核1G的虚拟空间里,使用896M空间做为lowmem空间,即固定映射空间(线性映射区)。内核使用1G的7/8空间大小作为线性区,剩下的1/8作为临时映射区,用于访问高端内存。
最后,回到题主的问题:如果整系统只有128M内存,情况会怎么样?
如果系统只有128M内存,那么系统没有highmem zone,128M都属于lowmem,kernel初始化时,会将这128M内存映射到[3G, 3G + 128M)虚拟空间上。
如果恶意写个KO,可以直接访问这128M内存空间的,因为页表已经建立了,从处理器层面来讲是可访问的。
用户态调用malloc做内存申请时,最终会通过系统调用mmap向kernel申请内存,kernel最终(缺页过程完成后)会为进程分配虚拟内存和物理内存。而这个物理内存就是这128M内存中,还没有分配的物理内存,但这块物理内存早已被映射到[3G, 3G + 128M)空间上了。但如果内核工作正常,由于这块物理内存没有被分配给内核态使用,那内核态就没有指针 指向 访物理内存对应的内核态虚拟地址空间,即内核态是不会访这块物理内存的。
在128M物理内存场景下,用户态进程之间页表是独立的,不可能相互踩,同时用户态是无法踩内核态内存的。由于只有lowmem区,理论上内核态能踩用户态内存,但经上一段分析,概率较低,只有编程错误时才会发生。
对于64位 kernel,没有highmem了,只有lowmem,所有物理内存都映射到lowmem了。与32位系统物理内存小于896M场景是一模一样的。

南华大学操作系统课程设计 南华大学 阅读详情

相关推荐

使用海康机器人的SDK进行DWS开发时如何筛选不同类型的相机

使用MVIDCodeReader、MvCodeReaderSDK、MvVolMeasureSDK联合开发时,通常会做一些设备枚举列表,但是不同类型的设备需要枚举在不同的列表中,便于软件使用者配置参数,例如: 如何保证枚举出来的设备是可以选择的对应的设备。我们通常枚举出来的是这样的: 解决办法 在联合开发中,我们发现,只有MvVolMeasureSDK的枚举设备接口EnumStereoCamEx可以正确的只枚举出网络内的体积设备,其余的MVIDCodeReader、MvCodeReaderS

qq_29123967的博客 2710

内存架构的十字路口:深入解析统一内存访问(UMA)与非一致内存访问(NUMA)

本文深入解析了统一内存访问(UMA)与非一致内存访问(NUMA)两种内存架构。UMA采用平等访问模式,所有处理器访问内存延迟相同,适合小规模系统但扩展性差;NUMA通过节点化设计实现差异化访问,本地访问快而远程访问慢,具有极佳扩展性但编程复杂。UMA主要应用于个人电脑等消费级设备,NUMA则用于多路服务器和高性能计算领域。两种架构各有优劣,分别适用于不同的计算场景和需求规模,反映了计算机体系结构为应对算力增长而做出的技术演进。

kanhao100的博客 3586

Fortran基础编程(3)——格式化输出

本篇推文将进一步讲解Fortran基础语法中格式化输出与声明部分,让我们的代码更加美观起来吧~

qq_45715554的博客 3808

CPU和内存的架构 UMA和NUMA

CPU和内存之间的架构分为两种: 1、UMA UMA全称为 Uniform Memory Access,叫做一致性内存访问 多个CPU通过同一根总线来访问内存。无论多个CPU是访问内存的不同内存单元还是相同的内存单元,同一时刻,只有一个CPU能够访问内存。 CPU之间通过总线串行的访问内存,所以会出现访问瓶颈! 2、NUMA Non-Uniform Memory Access ,非一致性内存访问。每个CPU都分配了一块内存,这样的话,多个CPU可以同时并行访问各自的内存,这样的话,读写内存的效率就上来了。

qq_40276626的博客 1万+

内存学习1 UMA和NUMA

内存节点NODE->区域ZONE->页PAGE实现了 宏观颗粒->分子->原子 类似的包含关系。其中NODE_DATA宏获取内存节点信息。 对于NUMA是一个链表;对于UMA是一个孤零零的全局变量。 查看代码如下:#ifndef CONFIG_NEED_MULTIPLE_NODES //条件编译宏决定是UNMA还是UMAextern struct pglist_data contig_page

shipinsky的博客 1875

我爬取了某非法网贷后台系统数据,终于知道什么叫做利滚利滚利滚利了

我爬取了非法贷款的后台网站!

weixin_44042821的博客 2860

服务器体系(SMP, NUMA, MPP)与共享存储器架构(UMA和NUMA)

1 3种系统架构与2种存储器共享方式1.1 架构概述从系统架构来看,目前的商用服务器大体可以分为三类 对称多处理器结构(SMP:Symmetric Multi-Processor) 非一致存储访问结构(NUMA:Non-Uniform Memory Access) 海量并行处理结构(MPP:Massive Parallel Processing)。 共享存储型多处理机有两种模型 均匀存储器存取

OSKernelLAB(gatieme) 2万+

英飞凌 AURIX 系列单片机的HSM详解(1)——何为HSM

1. 概述 随着汽车上通信系统越来越复杂,云端远程通信的场景越来越多,信息安全变得越来越重要,在通信领域常用的AES、SHA、RSA等加密算法被越来越多地应用到汽车上。但通常这类加解密算法都需要大量的数学运算,需要消耗很多CPU时间和资源,汽车上的ECU又有比较高的实时性要求,为了节省主CPU的资源,HSM应运而生。 HSM(Hardware Security Module),是MCU上专门用于实现加解密算法的一个外设,它一般会有一个独立的CPU,专门用来进行加解密运算,还有一些针对特定算法的硬件加速器(如

weixin_42967006的博客 4万+

Linux内核学习笔记:SMP、UMA、NUMA

1. 概述   SMP称为共享存储型多处理机(Shared Memory mulptiProcessors), 也称为对称型多处理机(Symmetry MultiProcessors)。   共享存储型多处理机有三种模型:均匀存储器存取(Uniform-Memory-Access,简称UMA)模型、非均匀存储器存取(Nonuniform-Memory-Access,简称NUMA)模型和只用

tiangwan2011的专栏 1万+

OpenPilot深度解析:333+车型支持的智能驾驶操作系统架构与实战指南

OpenPilot是一个基于机器人操作系统的开源驾驶辅助平台,通过先进的计算机视觉和深度学习技术,为300多款车型提供自适应巡航控制和车道居中辅助功能。这个由comma.ai开发的项目代表了自动驾驶领域的重要开源创新,其模块化架构和严格的安全设计为开发者提供了完整的智能驾驶解决方案。 ## 项目价值定位:开源自动驾驶的里程碑式突破 OpenPilot的核心价值在于将复杂的自动驾驶技术民主化,让

gitblog_00898的博客 1068

普冉PY32F003定时器实战:从HSE时钟配置到500ms精准闪烁LED(附完整代码)

本文详细解析了普冉PY32F003单片机定时器的实战应用,从HSE时钟配置到实现500ms精准LED闪烁。通过完整的代码示例和深入的技术分析,帮助开发者掌握定时器参数计算、中断优先级管理及调试技巧,适用于各类嵌入式开发项目。

weixin_30608503的博客 441

实时操作系统+C++17混合关键性开发:如何在FreeRTOS/SAFERTOS上构建ASIL-B级可验证对象模型?(含DO-333/EN 50128交叉验证路径)

面向工业控制C++功能安全开发,提供ASIL-B级可验证对象模型构建方法。基于FreeRTOS/SAFERTOS与C++17混合关键性设计,融合DO-333/EN 50128交叉验证路径,兼顾实时性与认证合规性。值得收藏

DebugVibe的博客 237

下载igv报错:Error loading genome hg38raw.githubusercontent.com...如何解决?

🏆本文收录于 《全栈 Bug 调优(实战版)》 专栏。专栏聚焦真实项目中的各类疑难 Bug,从成因剖析 → 排查路径 → 解决方案 → 预防优化全链路拆解,形成一套可复用、可沉淀的实战知识体系。无论你是初入职场的开发者,还是负责复杂项目的资深工程师,都可以在这里构建一套属于自己的「问题诊断与性能调优」方法论,助你稳步进阶、放大技术价值 。

**My Coding Family** 949

7个步骤掌握openpilot:从新手到333款车型驾驶辅助专家完全指南

openpilot是一个开源的机器人操作系统,它能为你的汽车提供比原厂系统更智能的驾驶辅助体验。想象一下,你的爱车突然拥有了"超级大脑",能够更平稳地跟车、更精准地保持车道,这一切都源于这个神奇的开源项目。目前,它已经成功适配了333款不同车型,从经济型轿车到豪华SUV,覆盖了市面上大多数主流品牌。 ## 🚗 5分钟快速体验:立即感受智能驾驶的魅力 **第一步:快速验证你的车辆是否兼容**

gitblog_02554的博客 341

333款车型的自动驾驶升级:openpilot如何重塑汽车智能驾驶体验

在当今汽车智能化浪潮中,开源自动驾驶系统openpilot正悄然改变着300多款车型的驾驶辅助体验。这个基于机器人操作系统的项目不仅提供自动车道居中和自适应巡航控制,更通过深度神经网络和实时感知算法,为普通车辆带来了接近L2+级别的自动驾驶能力。 --- ## 核心理念:从辅助驾驶到智能驾驶的范式转变 **openpilot**并非简单的驾驶辅助系统,而是一个完整的机器人操作系统。它的设计哲

gitblog_00820的博客 488

使用epiDisplay包中的logistic

其中的logistic.display函数可以用于获取逻辑回归模型的汇总统计信息,包括自变量的优势比和置信区间,以及回归系数的Wald检验的p值。最后,我们使用print函数打印出汇总统计信息。使用epiDisplay包中的logistic.display函数获取逻辑回归模型的汇总统计信息(包括自变量的初始和调整后的优势比及置信区间,回归系数的Wald检验的p值)- R语言。通过使用logistic.display函数,我们可以方便地获取逻辑回归模型的重要统计信息,并对自变量的影响进行解释和推断。

CyberJolt的博客 591

GE VMIVME-7695 单插槽奔腾 II 嵌入式模块

VMIVME-7695 将带 MMX™ 的英特尔® 奔腾 II 处理器引入 VME 总线,处理器速度为 333 MHz。- 支持 VME64 模式: A32/A24/D32/D16/D08(EO)/MBLT64/BLT32。- 支持 ECP/EPP 模式的增强型并行端口(需要 VMIACC-0045 或单独的连接器适配器。- 两个高性能 16550 兼容串行端口(需要 VMIACC-0045 或单独的连接器适配器。- M-Systems 公司的 Flash DiskOnChip®(可选)

w15305925923的博客 692

SAP 采购员参数及权限配置

若要控制采购员的参数缺省值或者权限,可以通过以下方式实现: 1、定义采购员缺省值(EVO) 路径:后台----物料管理---采购---环境数据---定义采购员的缺省值 点击图标,显示如下,查看参数配置ID: 查询到配置“定义采购员的缺省值”是通过ID “EVO”来配置的。进入页面建立配置: 按照需要配置新条目: 事务代码SU01进入用户配置页面,在用户“参数”页面配置前面设...

willieyuan的博客 7575

虚拟机安装linux操作系统

1:下载VMware虚拟机和centos7镜像。 2:在安装虚拟机过程中选择centos7镜像 3:虚拟机安装完成后更改配置文件使得本地xshell可以连接。vi /etc/sysconfig/network-scripts/ifcfg-ens333 ipaddr和gateway参数在虚拟网络编辑器中可以找到 4:更改配置之后执行操作:ping www.baidu.com,如果成...

qq_38828981的博客 235

定期报告系统为什么显示服务器出错,Windows server 2003 企业版应用为终端服务器时,出现的事件ID333错误,造成网络无法连接问题求助...

目前新装几台终端服务器,运行近10天后,出现无法连接的情况,只能重启恢复正常。而且几台都同时出现问题,查看日志时,发现在出问题前,大量的错误事件ID塞满了日志,具体的日志情况如下:333事件详细(此事件ID在“系统”中从发现问题之前,日志中全部都是这个事件错误记录,有万条以上):事件详细信息目期(A):2008-10-21 来源(S):Application Popup时间(M):23:30:2...

weixin_39650756的博客 1533

fas2lsp.rar

可以将cad的fas文件转换成lsp文件的程序 我是原作者

jdk-8u333-linux-x64.tar.gz资源介绍:Java开发必备,64位Linux系统JDK 8u333更新版

jdk-8u333-linux-x64.tar.gz资源介绍:Java开发必备,64位Linux系统JDK 8u333更新版 【下载地址】jdk-8u333-linux-x64.tar.gz资源介绍 本仓库提供了适用于64位Linux系统的Java Development Kit (JDK) 8u333版本资源文件,文件...

gitblog_06716的博客 848

CAD展点插件

CAD展点

Windows x64 JDK 1.8.333 安装包

Windows x64 JDK 1.8.333 安装包 【下载地址】Windowsx64JDK1.8.333安装包 这是一个专为Windows 64位系统打造的Java Development Kit (JDK) 1.8.333版本安装包,提供Java开发所需的完整工具集,包括运行环境、基础类库和编译器。该资源经过严格验...

gitblog_06713的博客 502

【浏览器】Google Chrome浏览器打开自动访问网址 gw1.dhwz333.top

Google Chrome主页被http://wh1.gndh333.top劫持,自动跳转hao123的解决办法Google 打开浏览器后,页面直接跳转到一个网址不符合正常规则的网站Google 打开浏览器后,先打开后跳转。

少莫千华 2700

基于51单片机的智能电子秤设计(HX711,数码管,去皮)proteus,原理图、流程图、物料清单、仿真图、源代码

基于51单片机的智能电子秤设计(HX711,数码管,去皮)proteus,原理图、流程图、物料清单、仿真图、源代码基于51单片机的电子秤(HX711,数码管,去皮)51单片机电子秤1、使用HX711测量压力电桥的重量2、具有去皮功能,看人通过按键设置去皮重量3、可以设置报警值,重量超过报警值蜂鸣器响

jdk-8u333-linux-x64.tar.gz 资源介绍

jdk-8u333-linux-x64.tar.gz 资源介绍 【下载地址】jdk-8u333-linux-x64.tar.gz资源介绍 本仓库提供了适用于64位Linux系统的Java Development Kit (JDK) 8u333版本资源文件,文件名为jdk-8u333-linux-x64.tar.gz。该J...

gitblog_06753的博客 528

注塑产品常见外观缺陷-培训资料.pdf注塑成型常见外观缺陷识别与成因分析:缺料飞边缩水等21类质量问题诊断及工艺改进培训指南

内容概要:本文档系统介绍了注塑产品常见的21种外观缺陷,包括缺料、飞边、缩水、烧焦、变形、杂质、拉伤、熔接线、流痕、顶白、拉丝、气泡、色差、银纹、油污、结构错误、残余浇口高、亮斑、开裂、黑条和破损。每种缺陷均给出了明确定义、典型特征及主要成因,涵盖从原材料、模具设计、注塑工艺到后处理等多个环节的问题根源,旨在帮助相关人员快速识别缺陷并分析原因。; 适合人群:从事注塑生产、品质控制、模具设计及工艺调试的技术人员,以及相关岗位的新员工培训使用。; 使用场景及目标:①用于现场快速判断注塑产品外观缺陷类型;②辅助分析缺陷产生原因,指导工艺优化与模具改进;③作为企业内部培训教材提升员工质量意识和技术水平。; 阅读建议:建议结合实际案例对照学习,重点关注缺陷成因与改善方向的关联性,并在生产中加以验证与应用,以达到理论与实践相结合的效果。

各类编程开发软件及资源全版本下载地址合集

编程开发软件多版本下载地址合集

李晋江的博客 2231

【免费下载】 ManageEngine OpUtils 64位版本 12.5.333 测试资源下载

ManageEngine OpUtils 64位版本 12.5.333 测试资源下载 【下载地址】ManageEngineOpUtils64位版本12.5.333测试资源下载 本仓库提供了一个名为 `ManageEngine_OpUtils_64bit_12.5.333` 的资源文件下载。该资源文件主要用于测试目的,允许...

gitblog_09705的博客 765
上一篇: 操作系统222
下一篇: 操作系统444
weixin_42268479
博客等级 码龄8年 0粉丝 17原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值