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

启动期间的内存管理之初始化过程概述----Linux内存管理(九)

因为内核在内存管理完全初始化之前就需要使用内存. 在系统启动过程期间, 使用了额外的简化内存管理模块, 然后在初始化完成后, 将旧的模块丢弃掉. 因此我们可以把linux内核的内存管理分三个阶段。...= 1标记此阶段的结束 第三阶段 buddy初始化完成 系统停止运行 可以用cache和buddy分配内存 系统启动过程中的内存管理 首先我们来看看start_kernel是如何初始化系统的, start_kerne...CPU高速缓存行, 为pagesets的第一个数组元素分配内存, 换句话说, 其实就是第一个系统处理器分由于在分页情况下,每次存储器访问都要存取多级页表,这就大大降低了访问速度。...所以,为了提高速度,在CPU中设置一个最近存取页面的高速缓存硬件机制,当进行存储器访问时,先检查访问的页面是否在高速缓存中. 2 第一阶段(启动过程中的内存管理) 内存管理是操作系统资源管理的重点,...分配器)或者memblock, 用于在启动阶段早期分配内存, 而在系统初始化完成后, 该分配器被内核抛弃, 然后初始化了一套新的更加完善的内存分配器. 2.1 引导内存分配器bootmem 在启动过程期间

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

启动期间的内存管理之bootmem_init初始化内存管理–Linux内存管理(十二)

启动过程中的内存初始化 首先我们来看看start_kernel是如何初始化系统的, start_kerne定义在init/main.c?...所以,为了提高速度,在CPU中设置一个最近存取页面的高速缓存硬件机制,当进行存储器访问时,先检查访问的页面是否在高速缓存中. 1.1 setup_arch函数初始化内存流程 前面我们的内核从start_kernel...最后调用bootmem_init来完成实现buddy内存管理所需要的工作 1.2 (第一阶段)启动过程中的内存分配器 在初始化过程中, 还必须建立内存管理的数据结构, 以及很多事务....因为内核在内存管理完全初始化之前就需要使用内存. 在系统启动过程期间, 使用了额外的简化悉尼股市的内存管理模块, 然后在初始化完成后, 将旧的模块丢弃掉....建立内存管理的数据结构 对相关数据结构的初始化是从全局启动函数start_kernel中开始的, 该函数在加载内核并激活各个子系统之后执行.

2.7K31

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

1 今日内容(分页机制初始化) 在初始化内存的结点和内存区域之前, 内核先通过pagging_init初始化了内核的分页机制....在分页机制完成后, 才会开始初始化系统的内存数据结构(包括内存节点数据和内存区域), 并在随后初始化buddy伙伴系统来接管内存管理的工作 2 分页机制初始化 arm64架构下, 内核在start_kernel...()->setup_arch()中通过arm64_memblock_init( )完成了memblock的初始化之后, 接着通过setup_arch()->paging_init()开始初始化分页机制...内核通常会成功,因为大部分大的内存块都在启动时分配给内核,那时内存的碎片尚不严重。但在已经运行了很长时间的系统上,在内核需要物理内存时,就可能出现可用空间不连续的情况。...区域 存储内容 栈 局部变量, 函数参数, 返回地址等 堆 动态分配的内存 BSS段 未初始化或初值为0的全局变量和静态局部变量 数据段 一初始化且初值非0的全局变量和静态局部变量 代码段 可执行代码,

1.3K20

启动期间的内存管理之build_zonelists初始化备用内存域列表zonelists--Linux内存管理(十三)

今日内容(第二阶段(二)–初始化备用内存域列表zonelists) 我们之前讲了在memblock完成之后, 内存初始化开始进入第二阶段, 第二阶段是一个漫长的过程, 它执行了一系列复杂的操作, 从体系结构相关信息的初始化慢慢向上层展开..., 其主要执行了如下操作 特定于体系结构的设置 在完成了基础的内存结点和内存域的初始化工作以后, 我们必须克服一些硬件的特殊设置 在初始化内存的结点和内存区域之前, 内核先通过pagging_init初始化了内核的分页机制...Zone方式, 按zone类型从高到低依次排列各节点的同相类型zone 可通过启动参数”numa_zonelist_order”来配置zonelist order,内核定义了3种配置, 这些顺序定义在mm...每次调用对一个不同结点生成内存域数据 4.3 build_zonelists初始化每个内存结点的zonelists build_zonelists(pg_data_t *pgdat)完成了节点pgdat...zone->name, zone->present_pages, zone_batchsize(zone)); } 5 总结 5.1 start_kernel启动流程

2.3K40

【Linux 内核 内存管理】Linux 内核内存布局 ④ ( ARM64 架构体系内存分布 | 内核启动源码 start_kernel | 内存初始化 mm_init | mem_init )

文章目录 一、ARM64 架构体系内存分布 二、Linux 内核启动源码 start_kernel 三、内存初始化源码 mm_init 四、内存初始化源码 mem_init 一、ARM64 架构体系内存分布...; 二、Linux 内核启动源码 start_kernel ---- 在 Linux 内核初始化完成后 , 会在 " 初始化内存 " 时 , 输出 内存布局 ; Linux 内核启动源码是定义在 linux...arch_call_rest_init(); prevent_tail_call_optimization(); } 源码路径 : linux-5.6.18\init\main.c#822 三、内存初始化源码...mem_init ---- 在 linux-5.6.18\init\main.c#795 定义的 mm_init 方法 中 , 调用了 mem_init 方法初始化内存 , 该方法定义在 arch\x86...\mm\init_32.c#766 位置 ; 在内存初始化时 , 会打印如下格式的 " 内核空间 内存分布 " 日志 : printk(KERN_INFO "virtual kernel memory

6.9K20

云桌面学习室服务器内存怎么选择?为什么选择一个内存大的?

云桌面学习室服务器内存是云桌面必不可少的一个配置,它将会直接影响云桌面的速度,它的内存越大,它使用起来也会更加的方便。...在购买云桌面学习室服务器是一定要看好它的内存,如果你选择的云桌面内存太小,那么操作起来也会很不顺畅。且随着你使用的时间越来越长,它就是越卡。 云桌面学习室服务器内存怎么选择?...通常来说,云桌面服务器内存都是1G往上,不过在选择的时候也要根据自己的需求来选择。...为什么选择一个内存大的? 云桌面学习室服务器内存就相当于我们手机的内存一样,当然是内存越大,下载的东西也就越多。如果内存太小,不仅自己玩的不开心,还会造成手机的卡顿和闪退。...不过也不要选择太大的,选择的内存过大,可能会造成云服务器资源的浪费。 大数据时代,以后云桌面肯定会在很多方面发挥作用。而云桌面学习室服务器内存无疑是其中最重要的一个点,所以好好选择也是很重要的。

13.2K50

走近源码:Redis的启动过程

Redis大体上可以分为两部分:服务器和客户端(读者吐槽:你这分的也太大体了吧)。在使用时,我们先启动服务器,然后再启动客户端。由客户端向服务器发送命令,服务器处理后将结果返回给客户端。...初始化全局服务器状态 如果redis-server命令启动时使用了test参数,那么就会先进行指定的测试。...这样在返回时就不必每次都去新增对象了,保存到内存中了。这个设计就是以Redis启动时多消耗一些时间为代价,换取运行的更小的延迟。...这时,Redis服务器已经启动,不过还有一些事情要做。...最后的设置 每次进入循环事件时,调用beforeSleep()函数,它做了以下这些事情: 如果server是cluster中的一个节点,调用clusterBeforeSleep()函数 执行一个快速的周期

34120

MYSQL Double Write 我关掉行不?

你的磁盘系统支持full page 写吗(实际上这方面是既有硬件解决方案,也有数据库设计方案来解决),如果支持,自然是可以关闭的,如果没有,那你做好数据库服务器意外后的数据库无法启动或数据丢失的恢复准备了吗...到底什么是DW 画一个图来说一下, 因为MYSQL 的页面大小是16K, 而每次写入的数据不保证是16K ,例如写到4K 的时候机器故障,剩下的12K 就丢失了,系统在重新启动的时候,如何恢复这12K的数据...而提出能不能关DW 主要原因就是性能,因为性能,性能,性能,在数据落盘之前进行一个(性能消耗较低)的 DW ,而为了性能求索的人们就会有类似的问题被祭出。...那DW 平时是怎么工作的 1 打开DW 当服务器crash后,重新启动后,CHECKSUM发现当前的数据页面不完整, 内存中的数据并未刷入到磁盘,InnoDB就不能通过事务日志来恢复机器crash...前的事务, 所以需要直接用DW的数据修正损坏的页面 2 然后系统将redo 中存储信息刷入到内存BUFFER 中,重新将数据写入到对应的写失败的PAGE 页中( 这也是重做的含义) 3 然后进行正常的数据库启动初始化的工作

2.1K20

linux启动流程

每次打开 Linux PC 时,它都会经历一系列阶段,然后最终显示提示输入用户名或密码的登录屏幕。每个 Linux 发行版在典型的启动过程中都会经历 4 个不同的阶段。...每次打开 Linux PC 时,它都会经历一系列阶段,然后最终显示提示输入用户名或密码的登录屏幕。每个 Linux 发行版在典型的启动过程中都会经历 4 个不同的阶段。...BIOS 完整性检查 (POST) 引导过程通常在用户按下开机按钮(如果 PC 已经关闭)或使用 GUI 或命令行重新启动系统时初始化。...GRUB 的主要目标是将 Linux 内核加载到主内存中。 3. 内核初始化 内核是任何 Linux 系统的核心。它将 PC 的硬件与底层进程连接起来。内核控制 Linux 系统上的所有进程。...在自解压缩,所选择的内核安装根文件系统,并初始化/ sbin 目录 / 初始化通常被称为程序初始化。 内核初始化过程 Init始终是第一个执行的程序,并被分配进程 ID 或 PID 为 1。

12.1K10

全面了解CGI、FastCGI、PHP-FPM

(CGI每次接收到请求都会执行这些步骤) FastCGI:首先,FastCGI程序会先启动一个master,解析配置环境,初始化执行环境,然后再启动多个worker。...当HTTP服务器每次遇到动态程序时,可以将其直接交付给FastCGI进程来执行,然后将得到的结果返回给浏览器。...微信图片_20191123140339.jpg (1)Web Server启动时载入FastCGI进程管理器(Apache Module或IIS ISAPI等) (2)FastCGI进程管理器自身初始化...(2)由于FastCGI是多进程,所以比CGI多线程消耗更多的服务器内存,php-cgi解释器每进程消耗7至25兆内存,将这个数字乘以50或100就是很大的内存数。 ...总结一下这个升级的过程:  微信图片_20191123140406.jpg 如果搭建一个高性能的PHP WEB服务器,目前最佳的方式是Apache/Nginx + FastCGI + PHP-FPM

81700

全面了解CGI、FastCGI、PHP-FPM

(CGI每次接收到请求都会执行这些步骤) FastCGI:首先,FastCGI程序会先启动一个master,解析配置环境,初始化执行环境,然后再启动多个worker。...当HTTP服务器每次遇到动态程序时,可以将其直接交付给FastCGI进程来执行,然后将得到的结果返回给浏览器。...(1)Web Server启动时载入FastCGI进程管理器(Apache Module或IIS ISAPI等) (2)FastCGI进程管理器自身初始化启动多个CGI解释器进程(可建多个php-cgi...(2)由于FastCGI是多进程,所以比CGI多线程消耗更多的服务器内存,php-cgi解释器每进程消耗7至25兆内存,将这个数字乘以50或100就是很大的内存数。...如果搭建一个高性能的PHP WEB服务器,目前最佳的方式是Apache/Nginx + FastCGI + PHP-FPM(+PHP-CGI)方式了。

2.7K12

Tomcat中JVM内存溢出及合理配置

因此服务器一般设置-Xms、 -Xmx相等以避免在每次GC 后调整堆的大小。...初始化堆的大小是JVM在启动时向系统申请的内存的大小。一般而言,这个参数不重要。...但是有的应用程序在大负载的情况下会急剧地占用更多的内存,此时这个参数就是显得非常重要,如果JVM启动时设置使用的内存比较小而在这种情况下有许多对象进行初始化,JVM就必须重复地增加内存来满足使用。...所以,如果Xms超过了Xmx值,或者堆最大值和非堆最大值的总和超过了物理内存或者操作系统的最大限制都会引起服务器启动不起来。 (2)....(3)当在服务器环境下(如Tomcat)启动并使用JVM时(对当前服务器环境下所以Java程序生效): a.

2.1K20

2019 C++开发工程师面试题大合集

因此,每次往hash表中添加元素时,我们必须保证是在loadFactor <1的情况下,才能够添加。...10、Redis的rehash怎么做的,为什么渐进rehash,渐进rehash怎么实现的 为了避免rehash对服务器造成影响,服务器不是一次将ht[0]里面的所有键值对全部rehash到ht[1]...4)value大小不同:memcache是一个内存缓存,key的长度小于250字符,单个item存储小于1M,不适合虚拟机使用 5)数据一致性不同:redis使用的是单线程模型,保证了数据按顺序提交;...通过这段小程序,我们可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核做好一切准备。...Linux环境中,目前最流行的启动管理器是Grub。 4)加载内核 内核的加载,内核加载后,接开始操作系统初始化,根据进程的优先级启动进程。

1.3K41

PHP强化之22 - CGI、FastCGI与PHP-FPM

FastCGI的工作原理: FastCGI接口方式采用C/S结构,可以将HTTP服务器和脚本解析服务器分开,同时在脚本解析服务器启动一个或者多个脚本解析守护进程。...当HTTP服务器每次遇到动态程序时,可以将其直接交付给FastCGI进程来执行,然后将得到的结果返回给浏览器。...文字解说: 1)Web Server启动时载入FastCGI进程管理器(Apache Module或IIS ISAPI等) 2)FastCGI进程管理器自身初始化启动多个CGI解释器进程(可建多个...2)由于FastCGI是多进程,所以比CGI多线程消耗更多的服务器内存,php-cgi解释器每进程消耗7至25兆内存,将这个数字乘以50或100就是很大的内存数。...技术的升级过程: 所以,如果搭建一个高性能的PHP WEB服务器,目前最佳的方式是Apache/Nginx + FastCGI + PHP-FPM(+PHP-CGI)方式了。

69410

扫码

添加站长 进交流群

领取专属 10元无门槛券

手把手带您无忧上云

扫码加入开发者社群

相关资讯

热门标签

活动推荐

    运营活动

    活动名称
    广告关闭
    领券