博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
20169207《Linux内核原理与分析》第十周作业
阅读量:4993 次
发布时间:2019-06-12

本文共 1709 字,大约阅读时间需要 5 分钟。

这周除了阅读学习教材「Linux内核设计与实现 (Linux Kernel Development)」第教材第15,16章外.我们还需要接着完成学习MOOC「Linux内核分析」第八讲「Linux系统架构和执行过程概览」,并完成实验楼上配套实验八的任务。

首先阅读课本上的章节,在第十五章进程地址空间章节介绍了如何管理物理内存。
1.其实内核除了管理本身的内存外,还必须管理用户空间中的内存。这个内存我们叫做进程地址空间。进程只能访问有效内存区域内的内存地址。

内核区域可以包含各种内存对象,比如: 1.可执行文件代码的内存映射,称为代码段。 2.可执行文件的已经初始化全局变量的内存映射,称为数据段。 3.包含未初始全局变量,也就是bss段多的零页的内存地址。 4.用于进程用户空间栈的零页的内存映射。 5.每一个诸如C库或动态链接程序等共享库的代码段,数据段和bss也会被载入进程的地址空间。 6.任何内存映射文件。 7.任何共享内存段。 8.任何匿名的内存映射,比如malloc()分配的内存。
2.内核使用内存描述符结构体表示进程的地址空间,改结构包含了和进程地址空间有关的全部信息。
3.内存区域由VM_AREA_STRUCT结构体描述。内存区域在LINUX内核中页经常称作虚拟内存区域。
4.内核时长需要在某个区域内存上执行一些操作,比如某个指定地址是否包含在某个内存区域中。这类操做非常频繁。我们称这个区域为操作内存区域。
5.内核使用mmap()和do _mmap()函数创建一个新的线性地址空间。
6.内核使用munmap()和do_munmap()函数从特定的进程地址空间中删除指定地址区间。
7.虽然应用程序操作的对象是映射到物理内存之上的虚拟内存,但是处理器直接操作的确实物理内存。地址的转换工作需要通过查询页表才能完成。
Linux中使用三级页表完成地址转换。 1.顶级页表是页全局目录。 2.二级页表是中间页目录。 3.最后一级的页表简称页表。
第十六章我们要学习一种用于所有页I/O操作的内存数据缓存,而且还涵盖内核基于页的数据回写。
页高速缓存(cache)是Linux内核时限磁盘缓存。它主要用来减少对磁盘的I/O操作。具体的讲。是通过把磁盘中的数据缓存到物理内存中,把对磁盘的访问变为对物理内存的访问。
1.缓存手段:页面高速缓存是由内存中的物理页面组成的,其内容对应磁盘上的物理块。页高速缓存大小能动态调整-它可以通过占用空闲内存以扩张大小。也可以自我收缩以缓解内存使用压力。
它主要包括写缓存和缓存回收。
2.Linux页高速缓存
页高速缓存缓存的是内存页面。缓存中的页来自对正规文件,块设备文件和内存映射文件的读写。
全局散列表主要存在四个问题: 1.由于使用单个的全局锁保护散列表,所以即使在中等规模的机器中,锁的争用情况也会相对严重,造成性能受损。 2.由于散列表需要包含所有页高速缓存中的页,可是搜索需要的只是和当前文件相关的那些页,所以散列表包含的页面相比搜索需要的页面要大得多。 3.如果散列失败,执行速度比希望的要慢的多,这是因为检索必须遍历指定散列键值对应的整个链表。 4.散列表比其他方法会消耗更多的内存。 *****2.6版本中引入基于基数的页高速缓存来解决这些问题。
3.独立的磁盘块通过块I/O操作也要被存入页高速缓存。
4.flusher线程

以下三种情况发生时,脏页被写会磁盘: 1.当空闲内存低于一个确定的阈值时,内核必须将脏页写会磁盘以便释放内存,因为只有干净的内存才可以回收。 2.当脏页在内存中驻留时间超过一个特定的阈值时,内核必须将超时的脏页写会磁盘,以确保脏页不会无限制的驻留在内存中。 3.当用户进程调用sync()和fsync()x系统调用时,内核会按要求执行回写动作。
本章主要学习了linux的页高速缓存和页回写。了解了内核如何通过页缓存执行页I/O操作以及这些页高速缓存可以利用减少磁盘I/O,从而极大地提升系统的性能。

转载于:https://www.cnblogs.com/littletang/p/6085804.html

你可能感兴趣的文章
cocos2d-x 3.0rc2 对于每个包执行情况的重要平台 (超级方便)
查看>>
Android 深入解析光传感器(二)
查看>>
Ansible@一个高效的配置管理工具--Ansible configure management--翻译(八)
查看>>
【bzoj4552/Tjoi2016&Heoi2016】排序——二分+线段树/平衡树+线段树分裂与合并
查看>>
Windows Internals学习笔记(八)IO系统
查看>>
sql插件,SQLPrompt
查看>>
Objetive-C 属性和线程安全
查看>>
mybatis pagehelper实现分页
查看>>
很牛的javascript日期转换函数
查看>>
javascript格式化json显示
查看>>
Redis 在 SNS 类应用中的最佳实践有哪些?
查看>>
关于Unity 动画绘制原理
查看>>
django-xadmin后台开发
查看>>
Canvas链式操作
查看>>
学渣乱搞系列之网络流学习
查看>>
Acdream A - Unique Attack
查看>>
java遍历List的多种方法
查看>>
【投票】你心目中的Excel催化剂价值有多大(附主流国内外收费插件供参考)?...
查看>>
算法复习——半平面交(bzoj2618凸多边形)
查看>>
关于在Intellij Idea中使用JSTL标签库报错的问题
查看>>