zoukankan      html  css  js  c++  java
  • 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,从而极大地提升系统的性能。

  • 相关阅读:
    nginx 详解--概念解释以及配置---转载
    jmeter和loadrunner测试结果差异大-web页面静态资源下载--转载
    一、性能测试的八大类--转载
    fiddler学习总结--手机端(APP/微信小程序)抓包--转载
    HTTP协议详解(真的很经典)--转载
    oracle修改表名和列名的多种方式
    LR web_custom_request
    web_add_cookie()
    Linux tar命令
    Linux下zip与unzip命令使用详解
  • 原文地址:https://www.cnblogs.com/littletang/p/6085804.html
Copyright © 2011-2022 走看看