20169207《Linux内核原理与分析》第十周作业
这周除了阅读学习教材「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,从而极大地提升系统的性能。
20169207《Linux内核原理与分析》第十周作业的更多相关文章
- 20169212《Linux内核原理与分析》第二周作业
<Linux内核原理与分析>第二周作业 这一周学习了MOOCLinux内核分析的第一讲,计算机是如何工作的?由于本科对相关知识的不熟悉,所以感觉有的知识理解起来了有一定的难度,不过多查查资 ...
- 20169210《Linux内核原理与分析》第二周作业
<Linux内核原理与分析>第二周作业 本周作业分为两部分:第一部分为观看学习视频并完成实验楼实验一:第二部分为看<Linux内核设计与实现>1.2.18章并安装配置内核. 第 ...
- 2018-2019-1 20189221 《Linux内核原理与分析》第九周作业
2018-2019-1 20189221 <Linux内核原理与分析>第九周作业 实验八 理理解进程调度时机跟踪分析进程调度与进程切换的过程 进程调度 进度调度时机: 1.中断处理过程(包 ...
- 2017-2018-1 20179215《Linux内核原理与分析》第二周作业
20179215<Linux内核原理与分析>第二周作业 这一周主要了解了计算机是如何工作的,包括现在存储程序计算机的工作模型.X86汇编指令包括几种内存地址的寻址方式和push.pop.c ...
- 2019-2020-1 20199329《Linux内核原理与分析》第九周作业
<Linux内核原理与分析>第九周作业 一.本周内容概述: 阐释linux操作系统的整体构架 理解linux系统的一般执行过程和进程调度的时机 理解linux系统的中断和进程上下文切换 二 ...
- 2019-2020-1 20199329《Linux内核原理与分析》第二周作业
<Linux内核原理与分析>第二周作业 一.上周问题总结: 未能及时整理笔记 Linux还需要多用 markdown格式不熟练 发布博客时间超过规定期限 二.本周学习内容: <庖丁解 ...
- 2019-2020-1 20209313《Linux内核原理与分析》第二周作业
2019-2020-1 20209313<Linux内核原理与分析>第二周作业 零.总结 阐明自己对"计算机是如何工作的"理解. 一.myod 步骤 复习c文件处理内容 ...
- 2018-2019-1 20189221《Linux内核原理与分析》第一周作业
Linux内核原理与分析 - 第一周作业 实验1 Linux系统简介 Linux历史 1991 年 10 月,Linus Torvalds想在自己的电脑上运行UNIX,可是 UNIX 的商业版本非常昂 ...
- 《Linux内核原理与分析》第一周作业 20189210
实验一 Linux系统简介 这一节主要学习了Linux的历史,Linux有关的重要人物以及学习Linux的方法,Linux和Windows的区别.其中学到了LInux中的应用程序大都为开源自由的软件, ...
- 2018-2019-1 20189221《Linux内核原理与分析》第二周作业
读书报告 <庖丁解牛Linux内核分析> 第 1 章 计算工作原理 1.1 存储程序计算机工作模型 1.2 x86-32汇编基础 1.3汇编一个简单的C语言程序并分析其汇编指令执行过程 因 ...
随机推荐
- Oracle性能优化2- 依据场景选择技术
1.索引的坏处 索引可以加快查询效率,但是使用不当,会造成插入性能很低 drop table test1 purge; drop table test2 purge; drop table test3 ...
- Java并发-UncaughtExceptionHandler捕获线程异常信息并重新启动线程
Java并发-UncaughtExceptionHandler捕获线程异常信息并重新启动线程 一.捕获异常并重新启用线程 public class Testun { public static voi ...
- Oracle_SQL(3) DML增删改
sql语言按功能分为:数据定义语言DDL.数据操纵语言DML.数据查询语言DQL.数据控制语言DCL 一.数据操纵语言DML1.insert 新增 语法:insert into <表名> ...
- java8 数据结构的改变(一)
在JDK1.6,JDK1.7中,HashMap采用数组+链表实现,即使用链表处理冲突,同一hash值的链表都存储在一个链表里.但是当数组中一个位置上的元素较多,即hash值相等的元素较多时,通过key ...
- 一个比较有意思的SDN网络技术相关blog/doc
http://feisky.xyz/sdn/linux/index.html 涵盖了目前主流的网络技术,所有比较有意思的内容全都覆盖了 SDN网络 目录 基本网络 TCP/IP标准模型 DHCP与DN ...
- 卸载服务器GitLab
sudo gitlab-ctl uninstall sudo rpm -e gitlab-ce find / -name gitlab|xargs rm -rf
- 堆和索引堆的实现(python)
''' 索引堆 ''' ''' 实现使用2个辅助数组来做.有点像dat.用哈希表来做修改不行,只是能找到这个索引,而需要change操作 还是需要自己手动写.所以只能用双数组实现. #引入索引堆的核心 ...
- powerdesigner mysql逆向工程注释不显示问题
- python中从内部循环直接跳出多层循环
学习循环的时候碰到一道题,需要从内部循环中直接跳出所有循环,想了很久终于想到一种好办法(小白认知) 题目为:使用while循环输出100-50,从大到小,到50时,再循环输出0-50,从小到大. ex ...
- Git工具和GitHub的使用
一.Git工具的安装 1)centos系统下安装 1.1)查看环境 [root@gitlab ~]# rpm -qa centos-release centos-release--4.1708.el7 ...