首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

MMU那些事儿

MMU诞生之前: 传统批处理系统如DOS系统,应用程序与操作系统内存布局大致如下图: 应用程序直接访问物理内存,操作系统占用一部分内存区。...虚实内存映射及交换管理可以将真实物理内存,有可变或固定分区,分页或者分段与虚拟内存建立交换映射关系,并且有效管理这种映射,实现交换管理。...那么实际内存是昂贵,即使内存成本远比从前便宜,但是应用进程对内存寻求仍然无法实际硬件中,设计足够大内存实现直接访问,即使能满足,CPU利用地址总线直接寻址空间也是有限。...从应用程序角度来看,应用程序(往往是进程)所使用地址是虚拟内存地址,从概念就如下示意图所示,MMU操作系统控制下负责将虚拟内存实际翻译成物理内存。...所以这种技术节省内存好处是显而易见。 使得应用程序以及操作系统更具灵活性。 操作系统根据应用程序动态运行时行为灵活分配内存应用程序。 使得应用程序可以使用比实际物理内存多或少内存空间。

1.1K20

我和面试官之间关于操作系统一场对弈!写了很久,希望对你有帮助!

; 操作系统分内核与外壳(我们可以把外壳理解成围绕着内核应用程序,而内核可以理解为能直接操作硬件程序)。...根据进程访问资源特点,我们可以把进程系统运行分为两个级别: 用户态(user mode) : 用户态运行进程或可以直接读取用户程序数据。...分页仅仅是为了满足操作系统内存管理需求,而段是逻辑信息单位,程序中可以体现为代码段,数据段,能够更好满足用户需要。 3.5 逻辑(虚拟)地址和物理地址 ?‍?...虚拟内存 使得应用程序认为它拥有连续可用内存(一个连续完整地址空间),而实际,它通常是被分隔成多个物理内存碎片,还有部分暂时存储在外部磁盘存储器需要时进行数据交换。...由于外存往往比内存大很多,所以我们运行软件内存大小实际可以比计算机系统实际内存大小大程序执行过程中,当所访问信息不在内存时,由操作系统将所需要部分调入内存,然后继续执行程序。

1.1K20
您找到你想要的搜索结果了吗?
是的
没有找到

虚拟存储 分段分页段页解读

是将整个程序一起载入内存? 不是!采用离散存储方式 离散存储方式 (1) 分页存储管理方式。 (2) 分段存储管理方式。 (3) 段页式存储管理方式。...而对于需要处理大量大型数据应用程序,较大页大小可以提高数据访问速度,但是可能会降低内存利用率。 分页存储管理基本方法 页面和物理块 (1) 页面。 (2) 页面大小。...假设访问一次内存时间为t: 1)基本分页存储管理方式中,有效访问时间分为第一次访问内存时间(即查找页表对应页表项所耗费时间t)与第二次访问内存时间(即将页表项中物理块号与页内地址拼接成实际物理地址所耗费时间...,可以直接得到逻辑页所对应物理块号,由此拼接形成实际物理地址,减少了一次内存访问,缩短了进程访问内存有效时间。...对于不具有请求调页功能存储器管理系统,此时则表示地址出错。对于具有请求调页功能存储器管理系统,此时应产生请求调页中断,系统将把此页调入内存

31820

什么是内存安全编程语言

而这三种其中我们编写应用程序打交道最多就是内存,我们继续细化下内存内存管理方式现代操作系统中,计算机内存管理通常是按照先分段再分页方式进行。...分段机制主要是为了解决程序直接使用物理地址时可能遇到问题,例如两个程序使用地址有交集时无法同时运行,写代码时需要考虑到目标计算机内存大小,以及系统程序和各个程序之间需要隔离等。...通过将内存分成若干段,每个程序只能访问为其分配段,从而实现了内存有效管理和保护。分页机制则是对内存进行更细粒度管理。它将内存划分为固定大小页面,每个页面都可以单独进行分配和管理。...分段为程序提供了初步隔离和保护,而分页则进一步提高了内存管理效率和灵活性。这种结合使用方式使得现代操作系统能够更有效地管理计算机内存,支持多任务运行和复杂应用程序。...而页地址则与分页内存管理相关,现代操作系统常常使用分页机制来管理物理内存,将内存划分为固定大小页,每页有一个唯一页地址。然而,在编程语言如C中,程序员通常不需要直接处理段地址或页地址。

22930

Linux 内存管理

物理内存管理另外一篇:《操作系统内存管理(思维导图详解)》       1、程序进程在内存数据结构  一.Linux 进程在内存数据结构 ---- 1、存储(没有调入内存)阶段:       可以看到一个可执行程序存储...再比如32位机器可以直接寻址4G空间,意思是每个应用程序都有4G内存空间可用。但是显然机器内存罕有如此之大,可以支持每个程序使用4G内存。...应用程序员仅需与逻辑地址打交道,而分段和分页机制对您来说是完全透明,仅由系统编程人员涉及。应用程序员虽然自己可以直接操作内存,那也只能在操作系统给你分配内存段操作。...随着可执行映像运行和页面的换入.系统内存有可能变得不足.这时Linux核心就必须调用kswapd守护进程释放部分物理内存。kswapd系统启动时由init进程建立。系统运行过程中。...缺页中断:即指的是当应用程序试图访问已映射在虚拟地址空间中,但是并未被加载物理内存一个分页时,产生一个页不存在中断,需要操作系统将其调入物理内存后再进行访问

7.6K10

【地铁面试题】--基础部分--操作系统--内存管理

可执行文件生成:链接时内存分配结果是生成可执行文件,该文件包含了所有的代码和数据,可以直接在操作系统运行。...同时,通过分页可以进一步将段内页面划分为固定大小块,更好地适应系统物理内存管理。 隔离性:不同可以具有不同访问权限和保护机制,提供更好隔离性。...通过为每个段设置访问权限,可以对进程或线程对不同段访问进行精细控制。 页表项:分页内存管理中,通过页表项来记录每个页访问权限。...通过为每个段设置访问权限,可以对进程或线程对不同段访问进行精细控制。 页表项:分页内存管理中,通过页表项来记录每个页访问权限。...提高分配和释放效率:由于内存块已经预先分配,应用程序可以直接内存池中获取内存块,无需频繁进行内存分配和释放操作,从而提高效率。

28531

存储器及其管理方式

实际,存储器系统是一个具有不同容量、成本和访问时间存储设备层次结构。CPU寄存器保存着最常用数据。高速缓存存储器作为一部分存储相对慢速主存储器中数据和指令缓冲区域。...02 — 内存管理 计算机系统内,进程可以看成是程序抽象,程序功能是由多个进程执行来实现,而主存是用于保存进程运行程序和数据,进程整个生命周期中(创建、执行、结束),内存都扮演着非常重要角色...在为进程分配内存时,以块为单位将进程中若干个页分别装入到多个可以不相邻接物理块中。由于进程最后一页经常装不满一块而形成了不可利用碎片,称之为“页内碎片”。 分页系统页面其大小应适中。...页表 分页系统中,允许将进程各个页离散地存储在内存不同物理块中,但系统应能保证进程正确运行,即能在内存中找到每个页面所对应物理块。为此,系统又为每个进程建立了一张页面映像表,简称页表。 ?...为使程序能正常运行,亦即,能从物理内存中找出每个逻辑段所对应位置,应像分页系统那样,系统中为每个进程建立一张段映射表,简称“段表”。

1.6K51

Android内存管理(四)Linux内存管理机制

磁盘 disk 作为一种大容量存储也作为"内存"一部分参与程序运行内存管理系统会将不常用非活跃内存进行页面换出,可以认为内存是磁盘缓存,内存中保留了活跃数据,从而间接扩展了有限物理内存空间...本文对于段页管理机制只想通俗地说明一些概念,段页管理机制是分段式管理分页管理组合,段式管理是逻辑管理方式,分页管理是偏物理管理方式。...举个栗子: 进行居民户籍管理时都会有区县市概念,但是实际并没有这种实体,都是逻辑,增加了这些行政单位之后可以让地址管理更加直接。...从应用层角度来查看内存状态: 也就是Linux运行程序可以使用内存大小,即free命令第三行 -/+ buffers/cache 输出。...,如果找到,直接读出传送给应用程序,否则,才从磁盘读取,通过这种缓存机制,大大降低了对磁盘IO操作,提高了操作系统数据访问性能。

2.6K10

malloc 背后系统知识

同时运行多个程序比较困难:多个用户程序如果都直接引用物理地址,很容易互相干扰。那么是不是可以通过不断交换物理内存和磁盘来保证物理内存某一时间自由一个程序在运行呢?...实际只有 1G 物理内存 PC 是可以运行 2G 应用程序。 综合上面各种缺点,虚拟内存出现了。 2....分段概述 前面介绍了分页内存管理可以说通过多级页表,TLB 等,分页内存管理方法已经相当不错了。那么分页有什么缺点呢? 共享困难:通过共享页面来实现共享当然是可以。...采用分段和分页结合方式管理内存,一个地址由两个部分组成:段和段内地址。段内地址又进一步分为页号和页偏移。进行内存访问时,过程如下: 根据段号找到段描述符(存放段基址)。...4. malloc 和物理内存有关系可以说没关系,malloc 申请地址是线性地址,申请时候并没有进行映射。访问时候触发缺页异常,这个时候才会进行物理地址映射。

98111

系统内存管理:虚拟内存内存分段与分页、页表缓存TLB以及Linux内存管理

虚拟内存虚拟内存是一种操作系统提供机制,用于将每个进程分配独立虚拟地址空间映射到实际物理内存地址空间。通过使用虚拟内存,操作系统可以有效地解决多个应用程序直接操作物理内存可能引发冲突问题。...当程序访问虚拟内存地址时,操作系统会进行地址转换,将虚拟地址映射到物理地址,这样不同进程运行时,写入是不同物理地址,避免了互相覆盖指针问题。...虚拟地址与物理地址之间通过页表进行映射,页表存储CPU内存管理单元(MMU)中,从而CPU可以直接通过MMU找到实际访问物理内存地址。...因此,每次写入硬盘是少量一页或几页,不会花费太多时间,从而提高了内存交换效率。简单分页简单分页存在空间缺陷。操作系统可以同时运行大量进程情况下,页表会变得非常庞大。...总结虚拟内存是操作系统提供一种机制,通过将每个进程分配独立虚拟地址空间映射到实际物理内存地址空间,解决了多个应用程序直接操作物理内存可能引发冲突问题。

54080

启动期间内存管理之pagging_init初始化分页机制--Linux内存管理(十四)

分页机制完成后, 才会开始初始化系统内存数据结构(包括内存节点数据和内存区域), 并在随后初始化buddy伙伴系统来接管内存管理工作 2 分页机制初始化 arm64架构下, 内核start_kernel...这对管理普通应用程序和内核访问内存方式,有深远影响 2.1 虚拟地址空间(以x86_32位系统为例) 因此仔细考察其实现之前,很重要一点是解释该函数目的 x86_32系统内核通常将总4GB...因此有必要将地址空间一部分分配给内核专用. 物理内存页则映射到内核地址空间起始处,以便内核直接访问,而无需复杂页表操作....如果所有物理内存页都映射到用户空间进程能访问地址空间中, 如果在系统上有几个应用程序运行, 将导致严重安全问题. 每个应用程序都能够读取和修改其他进程物理内存内存区....内核通常会成功,因为大部分大内存块都在启动时分配给内核,那时内存碎片尚不严重。但在已经运行了很长时间系统,在内核需要物理内存时,就可能出现可用空间不连续情况。

1.3K20

腾讯一面:32 位 4GB 系统访问 2GB 数据,虚拟内存会发生什么?

而当进程访问虚拟地址页表中查不到时,系统会产生一个缺页异常,进入系统内核空间分配物理内存、更新进程页表,最后再返回用户空间,恢复进程运行分页机制下,虚拟地址分为两部分,页号和页内偏移。...应用程序通过 malloc 函数申请内存时候,实际申请是虚拟内存,此时并不会分配物理内存。...),是进程再次访问这些内存时候,把它们从磁盘读到内存中来; Swap 换入换出过程如下图: img 使用 Swap 机制优点是,应用程序实际可以使用内存空间将远远超过系统物理内存。...在内核态下,操作系统可以执行特权指令,访问所有的内存和设备,以及执行关键系统操作。内核态下运行代码通常是操作系统内核或驱动程序。 用户态是应用程序运行一种模式,它运行在较低特权级别下。...在用户态下,应用程序只能访问有限系统资源,不能直接执行特权指令或访问内核级别的数据。用户态下运行代码通常是应用程序或用户进程。 内核态和用户态区别在于权限和资源访问限制。

22710

操作系统第六篇【存储器管理

分区式存储管理是把内存分为一些大小相等或不等分区,操作系统占用其中一个分区,其余分区由应用程序使用,每个应用程序占用一个或几个分区。...离散存储基本概念 将一个进程直接分散地装入到许多不相邻分区中,而无须“紧凑”分配方式,称为离散分配。 离散分配种类包括分页存储管理、分段存储管理和段页式存储管理。...不具备页面对换功能分页存储管理方式称为基本分页存储管理方式。 分页存储管理 分页存储管理基本方法 页面和物理块 页面。 页面大小。...页表 分页系统中,允许将进程各个页离散地存储在内存任一物理块中,为保证进程仍然能够正确地运行,即能在内存中找到每个页面所对应物理块,系统又为每个进程建立了一张页面映像表,简称页表 ?...由于虚拟存储器系统能从逻辑扩大内存,这时,只需装入一个进程部分程序和数据便可开始运行,故人们希望系统中能运行更多进程,即增加多道程序度,以提高处理机利用率。

1.4K70

从进入内核态看内存管理

大家好,我是坤哥 知乎搜到一个比较有意思的话题:如何理解「进入内核态」,要回答好这个问题需要对内存管理及程序运行机制有比较深刻了解,比如你需要了解内存分段,分页,中断,特权级等机制,信息量比较大...:段内偏移量组成,也叫逻辑地址,只有分段内存管理情况下它也被称为虚拟内存 GDT 及段描述符分配都是由操作系统管理,进程也无法更新 CS 等寄存器中值,这样就避免了直接操作其他进程以及自身物理地址...当通过线性地址(只有段式内存情况下,线性地址为物理地址)访问一个内存页时。...,系统调用可以直接应用程序调用,或者通过调用一些公用函数库或 shell(这些函数库或 shell 都封装了系统调用接口)等也可以达到间接调用系统调用目的。...,我们完全可以认为程序拥有所有的内存空间(虚拟空间),因为段选择子是由操作系统分配,只要操作系统保证不同进程虚拟空间映射到不同物理空间,不要重叠即可,也就是说虽然各个程序虚拟空间是一样

90950

架构师必读:Linux 内存分页管理

有趣是,尽管进程和内存关系如此紧密,但进程并不能直接访问内存Linux下,进程不能直接读写内存中地址为0x1位置数据。...程序中表达内存地址,也都是虚拟内存地址。进程对虚拟内存地址操作,会被操作系统翻译成对某个物理内存地址操作。由于翻译过程由操作系统全权负责,所以应用程序可以全过程中对物理内存地址一无所知。...比如在C语言中,可以用下面指令来打印变量地址: int v = 0; printf("%p", (void*)&v); 本质上说,虚拟内存地址剥夺了应用程序自由访问物理内存地址权利。...进程对物理内存访问,必须经过操作系统审查。因此,掌握着内存对应关系操作系统,也掌握了应用程序访问内存闸门。借助虚拟内存地址,操作系统可以保障进程空间独立性。...分页基础,虚拟内存物理内存实现了分离,从而让内核深度参与和监督内存分配。应用进程安全性和稳定性因此大为提高。

58200

架构师必读:Linux 内存分页管理

有趣是,尽管进程和内存关系如此紧密,但进程并不能直接访问内存Linux下,进程不能直接读写内存中地址为0x1位置数据。...进程对虚拟内存地址操作,会被操作系统翻译成对某个物理内存地址操作。由于翻译过程由操作系统全权负责,所以应用程序可以全过程中对物理内存地址一无所知。...比如在C语言中,可以用下面指令来打印变量地址: int v = 0; printf("%p", (void*)&v); 本质上说,虚拟内存地址剥夺了应用程序自由访问物理内存地址权利。...进程对物理内存访问,必须经过操作系统审查。因此,掌握着内存对应关系操作系统,也掌握了应用程序访问内存闸门。借助虚拟内存地址,操作系统可以保障进程空间独立性。...分页基础,虚拟内存物理内存实现了分离,从而让内核深度参与和监督内存分配。应用进程安全性和稳定性因此大为提高。

1.5K10

内存了还能看片?

虽然内存大小增长迅速,但是软件大小增长要比内存还要快。 1980 年时候,许多大学用一台 4 MB VAX 计算机运行分时操作系统,供十几个用户同时运行。...这一发展结果是,需要运行程序往往大到内存无法容纳,而且必然需要系统能够支持多个程序同时运行,即使内存可以满足其中单独一个程序需求,但是从总体上来看内存仍然满足不了日益增长软件需求(感觉和xxx...使用虚拟内存时,虚拟地址不会直接发送到内存总线上。相反,会使用 MMU(Memory Management Unit) 内存管理单元把虚拟地址映射为物理内存地址,像下图这样 ?...然而只有 32 KB 物理地址。所以虽然可以编写 64 KB 程序,但是程序无法全部调入内存运行磁盘上必须有一个最多 64 KB 程序核心映像完整副本,以保证程序片段需要时被调入内存。...进程启动时,执行很多次虚拟地址到物理地址转换,会把物理地址副本从内存中读入到寄存器中,再执行这一转换过程。 所以,进程运行过程中,不必再为页表而访问内存

38520

架构师必读:Linux 内存分页管理

有趣是,尽管进程和内存关系如此紧密,但进程并不能直接访问内存Linux下,进程不能直接读写内存中地址为0x1位置数据。...进程对虚拟内存地址操作,会被操作系统翻译成对某个物理内存地址操作。由于翻译过程由操作系统全权负责,所以应用程序可以全过程中对物理内存地址一无所知。...比如在C语言中,可以用下面指令来打印变量地址: int v = 0; printf("%p", (void*)&v); 本质上说,虚拟内存地址剥夺了应用程序自由访问物理内存地址权利。...进程对物理内存访问,必须经过操作系统审查。因此,掌握着内存对应关系操作系统,也掌握了应用程序访问内存闸门。借助虚拟内存地址,操作系统可以保障进程空间独立性。...分页基础,虚拟内存物理内存实现了分离,从而让内核深度参与和监督内存分配。应用进程安全性和稳定性因此大为提高。

54920

Linux 内存分页管理

有趣是,尽管进程和内存关系如此紧密,但进程并不能直接访问内存Linux下,进程不能直接读写内存中地址为0x1位置数据。...进程对虚拟内存地址操作,会被操作系统翻译成对某个物理内存地址操作。由于翻译过程由操作系统全权负责,所以应用程序可以全过程中对物理内存地址一无所知。...比如在C语言中,可以用下面指令来打印变量地址: int v = 0; printf("%p", (void*)&v); 本质上说,虚拟内存地址剥夺了应用程序自由访问物理内存地址权利。...进程对物理内存访问,必须经过操作系统审查。因此,掌握着内存对应关系操作系统,也掌握了应用程序访问内存闸门。借助虚拟内存地址,操作系统可以保障进程空间独立性。...分页基础,虚拟内存物理内存实现了分离,从而让内核深度参与和监督内存分配。应用进程安全性和稳定性因此大为提高。

1.1K30

Linux内存分页管理

有趣是,尽管进程和内存关系如此紧密,但进程并不能直接访问内存Linux下,进程不能直接读写内存中地址为0x1位置数据。...进程对虚拟内存地址操作,会被操作系统翻译成对某个物理内存地址操作。由于翻译过程由操作系统全权负责,所以应用程序可以全过程中对物理内存地址一无所知。...比如在C语言中,可以用下面指令来打印变量地址: int v = 0; printf("%p", (void*)&v); 本质上说,虚拟内存地址剥夺了应用程序自由访问物理内存地址权利。...进程对物理内存访问,必须经过操作系统审查。因此,掌握着内存对应关系操作系统,也掌握了应用程序访问内存闸门。借助虚拟内存地址,操作系统可以保障进程空间独立性。...不过,多层分页基本原理都是相同。 综上,我们了解了内存以页为单位管理方式。分页基础,虚拟内存物理内存实现了分离,从而让内核深度参与和监督内存分配。应用进程安全性和稳定性因此大为提高。

1.4K10
领券