我个人觉得学好操作系统还是非常有用的,具体可以看我昨天在星球分享的一段话: ? 这篇文章只是对一些操作系统比较重要概念的一个概览,深入学习的话,建议大家还是老老实实地去看书。...我 :线程同步是两个或多个共享关键资源的线程的并发执行。应该同步线程以避免关键的资源使用冲突。...我 :局部性原理是虚拟内存技术的基础,正是因为程序运行具有局部性原理,才可以只装入部分程序到内存就开始运行。 以下内容摘自《计算机操作系统教程》 第4章存储器管理。...4.4 虚拟内存的技术实现 ??面试官 :虚拟内存技术的实现呢? ? 我 :虚拟内存的实现需要建立在离散分配的内存管理方式的基础上。...4.5 页面置换算法 ??面试官 :虚拟内存管理很重要的一个概念就是页面置换算法。那你说一下 页面置换算法的作用?常见的页面置换算法有哪些? ?
比如8086只有20根地址线,那么它的寻址空间就是1MB,我们就说8086能支持1MB的物理内存,及时我们安装了128M的内存条在板子上,我们也只能说8086拥有1MB的物理内存空间。...而虚拟内存是系统利用硬盘分出来的具有辅助内存工作的虚拟RAM,不是硬件,但又依靠硬盘。 内存就是RAM。虚拟内存并不是把硬盘当作内存,而是在硬盘上创建的交换文件。...当物理内存用完后,虚拟内存管理器选择最近没有用过的,低优先级的内存部分写到交换文件(页面文件)上,并将需要访问内存的程序的内容从页面文件中换入到物理内存。...关键的是不要把虚拟内存跟真实的插在主板上的内存条相挂钩,虚拟内存它是“虚拟的”不存在,假的啦,它只是内存管理的一种抽象! 什么是虚拟内存地址和物理内存地址呢。...偏移量就是我上面说的页(或者页帧)的大小,即这个页(或者页帧)到底能存多少数据。
虚拟内存(之所以称为虚拟内存,是和系统中的逻辑内存和物理内存相对而言的,逻辑内存是站在进程角度看到的内存,因此是程序员关心的内容。而物理内存是站在处理器角度看到的内存,由操作系统负责管理。...系统如此周而复始地运转——换入、换出,而用户几乎无法查觉,这都是拜虚拟内存机制所赐。 Linux的swap分区就是硬盘专门为虚拟存储空间预留的空间。经验大小应该是内存的两倍左右。...逻辑地址通过段机制后变为一个32位的地址,足以覆盖4G的内存空间,当程序需要的虚拟地址不在内存时,只依靠段机制很难进行虚拟空间地换入换出,因为不大方便把整段大小的虚拟空间在内存和硬盘之间调来调去(老式系统中...可见,利用页来管理内存和磁盘(虚拟内存)大大方便了内存管理的工作。毫无疑问,页机制和虚拟内存管理简直是“绝配”。 ...使用页机制,4G空间被分成2的20次方个4K大小的页面(页面也可定为4M大小),因此定位页面需要的索引表(页表)中每个索引项至少需要20位,但是在页表项中往往还需要附加一些页属性,所以页表项实际为32位
虚拟内存在硬盘上其实就是为一个硕大无朋的文件,文件名是PageFile.Sys,通常状态下是看不到的。必须关闭资源管理器对系统文件的保护功能才能看到这个文件。...启用磁盘写入缓存 在“我的电脑”上单击鼠标右键选择“属性->硬件”,打开设备管理器找到当前正在使用的硬盘,单击鼠标右键选择属性。在硬盘属性的的“策略”页中,打开“启用磁盘上的写入缓存”。 ...但是如果物理内存比较紧张,还是应当保留默认的选项。 页面文件的设置 页面文件的大小计算 对于不同的计算机而言,页面文件的大小是各不相同的。...一、在“我的电脑”上单击鼠标右键,选择“属性->高级”,单击“性能”下面的“设置”按钮,然后选择“高级”页,单击“虚拟内存”下方的“更改”按钮。...这时你可以看到刚才新建的日志条目前面的图标变成了绿色,这表明日志系统已经在监视虚拟内存了。如果图标还是红色,你应该单击鼠标右键选择“开始”来启动这个日志。
-- 拉尔夫·W·索克曼 大家早上好,我是程序喵!今天为大家总结整理了关于操作系统内存管理的知识点,更文不易,请各位兄弟别忘分享或者点个在看,多谢 ? ? 目录 1. 什么是物理内存 2....什么是虚拟内存? 4. 虚拟内存如何映射到物理内存 5. 什么是分页内存管理? 6. 什么是缺页中断? 7. 页面置换算法都有哪些? 8. 什么是分段内存管理? 01 什么是物理内存?...如图,CPU里有一个内存管理单元(Memory Management Unit),简称MMU,虚拟内存不是直接送到内存总线,而是先给到MMU,由MMU来把虚拟地址映射到物理地址,程序只需要管理虚拟内存就好...关于分段内存管理我们平时见的最多的应该就是Linux可执行程序的代码段数据段之类的啦,要了解分段最好的方式就是了解它的历史。...Linux实际上没有使用分段而只使用了分页管理,这样会更加简单,现在的分段其实更多是为了使逻辑更加清晰。
为了能让作业的一部分装入就可以运行的存储管理技术叫做虚拟内存管理技术。 ...虚拟内存的空间=物理内存+页面文件。 页式管理-intsmaze 各进程的虚拟空间被划分为等的页若干个长度相,页长1K—4K。进程虚拟地址变为由页号P与页内地址W组成。...这个值应该设置成多大才能提高Linux的性能呢?...内存够大时,无论页面文件的使用频率是高还是低都放在内存里,无须使用虚拟内存。 但是在这个例子中,swpd的值始终为0,这表示没有虚拟文件被使用。这说明内存容量是足够的,即使再增加内存,作用也不大。...虚拟内存与内存映射文件的联系-intsmaze 虚拟内存是内存映射文件的基础,内存映射文件的底层还是依赖虚拟内存。
虚拟内存是什么?...它是对主存和I/O设备的抽象,这一点在漫谈进程和线程中已经提及过,也就是说,虚拟内存是将内存看做硬盘的高速缓存,内存中只保存程序的活动区域,根据需要在硬盘和内存之间传输数据;同时,虚拟内存为每个进程提供一个一致的地址空间...[内存分配] 如上图,程序1、程序2、程序3装入到内存,而程序2运行完成被换出,内存空闲出20k,然后进来程序4,大小为25K,此时,只有两处空闲块,10K和20K,没有一处是符合条件的,应该怎么办?...FIFO(先进先出)先进先出算法思想很简单,当内存满了,优先置换出最先进入内存的页面。但是它存在一个问题:经常被访问的数据有可能被换入换出,下面我就举个简单的栗子。...[段页结合] 虚拟内存具体实现 这里介绍Linux中的虚拟内存的具体实现,如下图,task_struct结构体是进程描述符,属于进程管理(PCB),其中,mm(memory manage)表示内存管理,
我们来看看运行结果: 可以看见两个全局变量的地址是相同的,但是还是做到了数据独有呢?...这是怎么做到的,通过这个现象,我们可以看出gval的地址肯定不是物理内存的地址,如果是物理内存的地址,如果地址相同,那么值也应该相同,所以这里面肯定是用什么结构把真实的物理内存给保护起来了,首先我们来看看我们以前学过的内存的结构...页表 什么是页表: 页表是操作系统内核用来管理虚拟地址和物理地址之间映射的一个数据结构。它的核心作用是支持虚拟内存,使得每个进程可以在自己的独立虚拟地址空间中运行,增强了内存隔离和安全性。...当中还存在权限的管理和标记位等等属性,这个权限管理指的是读写权限,就比如我们在C语言中遇到的下图: 这个都知道会崩溃,但是为什么会崩溃,其实是因为str对应的权限只有读,没有写的权限,所以会直接崩溃...有效位表示看目标数据是否存在于内存当中,如果该位为 0,意味着页面不在物理内存,访问该页面会触发缺页中断,操作系统会加载页面或进行错误处理。 页表其实还有很多属性,这里只陈述这两个属性。
合着我用个电脑还得算着怎么才能让我的程序不崩溃? OK,可以看出来,覆盖技术其实是用在同一个作业/进程的不同段之间的,那么不同的作业/进程之间怎么办呢? 这就是交换技术的适用场景。...什么是虚拟内存 有了上述交换技术的铺垫,理解起虚拟内存来也就不那么陌生了。 当然了,在此之前,我一定要着重声明的是,不要把虚拟内存当作一个实际存在的东西,它是一门技术!...这几个概念非常容易混淆,其实很容易区分,记住这句话就 OK,摘自百度百科: 如果不具备请求调页、页面置换的功能,则称为基本分页管理(或称为纯分页管理),它不具有支持实现虚拟内存的功能,它要求把每个作业(...可以看出来,这并不是一个简单的过程,基本分页管理中的简单页表已经无法胜任这样的工作。 我们还是先来回顾下基本分页管理的页表,它只有页号和块号两个字段: ?...页面置换算法也是一个很重要的内容,本来应该在这篇文章里一起写的,But 想到 “页面置换” 问题不仅仅是在虚拟内存中存在,在计算机设计的其他领域也会同样发生(比如多数计算机都会把最近使用过的 32 字节或者
作者:allanpan,腾讯 IEG 后台开发工程师 导言 虚拟内存是当今计算机系统中最重要的抽象概念之一,它的提出是为了更加有效地管理内存并且降低内存出错的概率。...虚拟内存影响着计算机的方方面面,包括硬件设计、文件系统、共享对象和进程/线程调度等等,每一个致力于编写高效且出错概率低的程序的程序员都应该深入学习虚拟内存。...虚拟内存是现代计算机中的一个非常重要的存储器抽象,主要是用来解决应用程序日益增长的内存使用需求:现代物理内存的容量增长已经非常快速了,然而还是跟不上应用程序对主存需求的增长速度,对于应用程序来说内存还是可能会不够用...虚拟内存和高速缓存 前面在分析虚拟内存的工作原理之时,谈到页表的存储位置,为了简化处理,都是默认把主存和高速缓存放在一起,而实际上更详细的流程应该是如下的原理图: 如果一台计算机同时配备了虚拟内存技术和...TLB:计算机硬件,主要用来解决引入虚拟内存之后寻址的性能问题,加速地址翻译。如果没有 TLB 来解决虚拟内存的性能问题,那么虚拟内存将只可能是一个学术上的理论而无法真正广泛地应用在计算机中。
手动设置虚拟内存 在默认状态下,是让系统管理虚拟内存的,但是系统默认设置的管理方式通常比较保守,在自动调节时会造成页面文件不连续,而降低读写效率,工作效率就显得不高,于是经常会出现“内存不足”这样的提示...理论上这样做会加快虚拟内存整体的读写操作. 3、硬盘需有足够空间 如果你不是很有经验的电脑用户,又或者没有特殊的使用要求,在Windows XP中选择“系统管理的大小”的方法来自动处理虚拟内存,一般情况下应该会比选择...不过,有一点大家必须注意,由于虚拟内存的“页面文件”(pagefile.sys)会随着电脑使用过程进行收缩和扩展,为使系统管理虚拟内存能够进行得顺利和更具弹性,我们必须保证分页文件所在的硬盘拥有足够的可用空间...所谓虚拟内存,其实也是硬盘上的资料文件,那么虚拟内存是否也应该像普通文件般需要整理呢? Windows系统处理页面文件(即虚拟内存)的方法有别于一般的文件。...[NextPage] 6、虚拟内存的理想大小 想以“自定义大小”的方法来处理虚拟内存,究竟应该设置多大的虚拟内存呢?
因此,依靠 malloc 确定分配是否成功是一个困难的问题。只有在写入和读取新分配的内存时才能发现。...;如果是 1,则该进程在一段时间后被 OOM 杀手终止(我的笔记本电脑没有 1T内存),通常将 /proc/sys/vm/overcommit_memory 设置为0。...因为, malloc 从虚拟内存中分配,而不是从物理内存中分配。只有第一次通过读/写显式访问内存时,才会发生页面错误并开始页面分配。如果无法分配页面,则程序会以 SIGNAL 终止。...在正常情况下,永远不应该真正使用Swap分区。...对于使用它们的每个进程,共享库可能会同时计入实内存和虚拟内存中,即使它们占用相同页面的只读或写时复制内存,并且内存映射文件可能会被全部计入在虚拟内存中,即使只有一小部分文件被读取,并且在 Linux 上
在了解存储模型之前,我们首先应该了解一下计算机的存储体系。 个人感觉学这部分的知识应该首先在脑海中抽象出存储体系,因为无论磁盘,物理内存还是虚拟内存都是互相有联系的,抽象出模型有助于我们的理解和记忆。.../段式/段页式内存管理,中间通过页表/段表/段页表来进行物理到虚拟内存的转换,重点是页式管理,页式管理中重要的概念有页表项,多级页表,倒排页表,MMU,快表TLB和页错误/缺页异常,而虚拟存储技术中核心概念就是将内存中暂时不用的页面...(内存块)放入磁盘上,问题是哪些页面(内存块)放到磁盘上呢,于是我们引入页面置换算法,其中OPT为理想置换算法,基本算法有FIFO,FIFO改进后的第二次机会算法和时钟算法,LRU中老化算法和NRU,既然部分页面暂存到磁盘上...4 最差适配算法 此算法按照内存块的空闲区从大到小进程排序,排序后,有进程申请内存时,将表头最大的内存块分配给它,这样如果不能分配则所有不能分配,且将大内存分配给它,若只占用一小部分还可以进行二次分配。...本文只讲述伙伴算法的基本原理。 伙伴算法基本思想: 将内存大小变为二的n此方 。 如果一个程序申请的内存块大小 m 满足 2^n-1 < m < 2^n条件,那么就将此时的内存块分配给它。 ?
/yunwei37/6.828-2018-labs 目录 MIT 6.828 操作系统工程 lab2 通关指南 目录 第1部分:物理页面管理 第2部分:虚拟内存 虚拟,线性和物理地址 引用计数 页表管理...在进行其他操作之前,请熟悉x86的保护模式内存管理架构:分段和页面转换(不过我没看)。练习二希望你去阅读一下相关内容。...在实验3中,我们将需要与分段进行更多的交互才能设置特权级别,但是对于 lab2 内存转换,我们可以在整个JOS实验中忽略分段,而只关注页面转换。...(其实这部分基本的实验还是比较简单的,这些工具我都没用到) 这一点很关键: 从CPU上执行的代码开始,一旦进入保护模式(我们在boot/boot.S中完成的第一件事),就无法直接使用线性或物理地址。...挑战就暂时没做啦qwq(因为我没空,主要学 6.828 还是为了参考一下已有的实现的)
大家好,又见面了,我是全栈君。 在windows系统中个,每个进程拥有自己独立的虚拟地址空间(Virtual Address Space)。...③ 将虚拟内存地址空间映射到物理内存页(RAM):在访问进程提交的页面被访问时,通过缺页中断(又名页缺失、页面错误, PageFault)机制来真正分配物理内存页,同时修改对应页面的地址空间映射关系。...Bytes // 进程Committed的虚拟内存字节数 对应VMMap的Private、win7任务管理器中的【提交大小】,资源管理器中的【提交】 Peak Private Bytes /...【页面错误】 物理内存: Working Set = WS Private + WS Shareable // 进程占用物理内存总字节数 对应win7任务管理器中的【工作设置(内存)】,资源管理器中的...对应win7任务管理器中的【峰值工作设置(内存)】 注:无论是虚拟内存还是物理内存下的各个指标,都是通过统计用户态的那部分占用 页交换文件 页交换文件(Page File):一般被用作可写物理内存页的后备存储器
如此悲壮的画面 仍有小伙伴非常诚(xu)实(wei)的 告诉大雄 “我最喜欢看的文章就是干货” “我一般只看干货” “要学习迈,希望公众号干货多一点” ......如果你还是不理解为什么要抽象出地址空间,每个进程要抽象出虚拟内存,可以这样想。...但是当进程需要访问自己的数据时肯定要去物理内存中的物理地址找数据,那么从虚拟内存向物理内存地址转换在页式管理中我们就需要通过页表这个数据结构来进行转换。 ?...有效位:表示此时这个页面是在内存中还是转换到了磁盘上。 访问位:表示这个页面在近期是否被访问过。 修改位:表示这个页面在近期是否被修改过。...老化算法 老化算法就是接近LRU的一种算法,它是给每个页面一串bit位,比如8位00000000,当每访问一个页面时,我就将每个页面的bit位向右移动一位,然后被访问的页面首位补1。
具体是通过MMU(Memory Management Unit 内存管理单元)将硬盘上的虚拟地址映射为物理内存地址。优点是使大内存占用程序不至于异常退出。...(这里似乎有个问题,但还是按指导书上来了。...虚拟内存应该最大可设置为盘符最大可用空间) 步骤三 映像名称 PID CPU CPU时间 内存使用 chrome 1088 00 0:00:02 45.492K ?...//这里的chrome有很多进程,因为涉及浏览器内核问题(每个标签、插件一个进程)只取pid为1088的讨论。...步骤六 - 计算分页文件的大小 所选驱动器 (C: ) 的页面文件大小: 驱动器: C 可用空间:15889 MB 初始大小 (MB) :0最大值 (MB) :0 //此驱动器无分页文件 所有驱动器的页面文件大小
关键词: 内存模型,虚拟内存,MMU, TLB,页面置换算法,分段. 计算机模型 分层存储体系 内存抽象 为了更好的管理内存,操作系统将内存抽象成地址空间。...该计算机只有 32KB 的物理内存,虚拟内存技术允许该计算机运行一个 64K 大小的程序。 分页系统地址映射: 内存管理单元(MMU) 内存管理单元(MMU)管理着地址空间和物理内存的转换....提高访存性能的关键在于依靠页表的访问局部性。当一个转换的虚拟页号被使用时,它可能在不久的将来再次被使用到,。 TLB是一种高速缓存,内存管理硬件使用它来改善虚拟地址到物理地址的转换速度。...task_struct的代码太长,这里就不一一列举了,只选一部分重要的进行讲解,下面的每一行代码在文件里不一定连续。...进程内存管理结构 在前面的章节中讨论过,不论进程还是线程,都各自拥有自己的task_struct实例。而线程的实现方式就是共享进程内存空间,即共享mm_struct。
有两种应对内存超载的方法(本节只介绍交换技术): 交换技术 虚拟内存 交换技术是把一个进程完整的调入内存,使该进程运行一段时间后再把他存回磁盘。...空闲内存管理 上面介绍了应该给进程分配多大的内存。在动态分配内存时,操作系统必须对其进行管理,操作系统需要知道哪些内存在使用,哪些内存未使用(可以再次被分配)。...如果访问位为0,代表页面没有被访问过,则可以把该页面置换出去。不论是读页操作还是写操作,系统都会在该页面被访问时设置访问位为1。 TLB 我们已经了解了虚拟内存和分页。...既然最近使用时间被更新(该页面在当前时钟滴答中被访问过),说明该页面肯定会出现在工作集中,则不应该删除该页面(假设工作集横跨的时间t横跨多个时钟滴答)。...看完本文,我们可以知道,现代操作系统中,无论是PC端桌面系统,还是移动端手机系统,开发者所谈论的内存通常是指“虚拟内存”。
一、虚拟内存的概念 虚拟内存是现代操作系统为了有效管理内存资源、提高内存利用率以及实现多任务处理等目的而引入的一种重要的内存管理机制。...便于内存管理 虚拟内存将实际的物理内存和程序使用的内存进行了分离,使得操作系统可以更加灵活地管理内存资源。...四、页表 虚拟内存和物理内存都被划分成固定大小的单元,在 Linux 中通常是 4KB 大小的页(Page)和页框(Page Frame)。虚拟内存以页为单位进行管理,物理内存以页框为单位进行管理。...2、页表管理 页表存储:如前文所述,MMU 依靠页表来实现虚拟地址到物理地址的映射。页表通常存储在物理内存中,并且其结构可以是多级的,比如常见的二级页表或三级页表结构(以不同的计算机架构为准)。...、 六、虚拟内存在系统层面的存在形式 虚拟内存不仅仅局限于进程内部。在整个操作系统层面,虚拟内存是一种整体的内存管理策略和机制。