Linux内核之进程地址空间

  • 内核中的函数以相当直接了当的方式获得动态内存:

    • __get_free_pages 或 alloc_pages从分区页框分配器中获得页框;
    • kmem_cache_alloc或kmalloc使用slab分配器为专用或通用对象分配块;
    • vmalloc获得一块非连续的内存块;
    • 返回一个页描述符地址或线性地址;
  • 内核是操作系统中优先级最高的成分;
  • 内核信任自己;
  • 内核总是尽量推迟给用户态进程分配动态内存;
  • 内核必须能随时准备捕获用户态进程引起的所有寻址错误;
  • 当用户态进程请求动态内存时, 并没有会的请求页框, 而仅仅获得对一个新的线性地址区间的使用权, 而这一线性地址区间就称为进程地址空间的一部分, 这一区间叫作线性区;
  • 缺页议程处理程序在推迟给进程分配页框中所起的作用;

进程的地址空间

  • 进程地址空间是进程使用的全部线性地址组成, 每个进程看到的线性地址集合是不同的;
  • 内核可以通过增加或删除某些线性地址区间来动态地修改进程的地址空间;
  • 内核通过所谓线性区的资源来表示线性私自区间, 线性区是有起始线性地址、长度和一些访问权限来描述, 起始地址和线性区的长度必须是4096的倍数;
  • malloc内部调用brk函数来改变进程堆的大小;

内存描述符

  • 与进程相关的全部信息都包含在一个叫做内存描述读的数据结构中;
  • 进程所拥有的线性区从来不重叠, 并且内核尽力把新分配的线性区与紧邻的现有线性区进行合并;

缺页异常处理程序

  • Linux的缺页异常处理程序必须区分两种情况:

    • 由编程错误引起的异常;
    • 由引用属于进程地址空间但还尚未分配物理页框所引起的异常;
  • 线性区描述符可以让缺页异常处理程序非常有效地完成它的工作;
    • do_page_fault函数是缺页中断服务程序;
  • 请求调页: 进程开始运行的时候并不访问其地址空间中的全部地址, 实际上, 有一部分地址也许永远不会被进程使用;
    • 程序的局部性原理; 请求调页从重提上使系统有更大的吞吐量, 把页框的分配推迟到不能再推迟为止;

创建进程的地址空间

  • 通过copy_mm函数创建新进程的所有页表和内存描述符来创建进程的地址空间;
  • 通过exit_mm函数释放进程的地址空间;
  • 进程调用brk系统调用, 内核执行sys_brk函数来修改进程堆的大小;

Linux内核之进程地址空间的更多相关文章

  1. 深入理解Linux内核-进程地址空间

    给内核分配内存和给用户态进程分配内存是有区别的:1.内核的优先级最高,如果某个内核函数请求动态内存,不会被延时2.内核信任自己,不必保护措施3.用户态进程对动态内存的请求被认为不是紧迫的,总是被尽量推 ...

  2. (转)Linux内核之进程和系统调用

    Linux内核之进程和系统调用 什么是系统调用 在Linux的世界里,我们经常会遇到系统调用这一术语,所谓系统调用,就是内核提供的.功能十分强大的一系列的函数.这些系统调用是在内核中实现的,再通过一定 ...

  3. 深入Linux内核架构——进程管理和调度(上)

    如果系统只有一个处理器,那么给定时刻只有一个程序可以运行.在多处理器系统中,真正并行运行的进程数目取决于物理CPU的数目.内核和处理器建立了多任务的错觉,是通过以很短的间隔在系统运行的应用程序之间不停 ...

  4. 24小时学通Linux内核之进程

    都说这个主题不错,连我自己都觉得有点过大了,不过我想我还是得坚持下去,努力在有限的时间里学习到Linux内核的奥秘,也希望大家多指点,让我更有进步.今天讲的全是进程,这点在大二的时候就困惑了我,结果那 ...

  5. 分析Linux内核中进程的调度(时间片轮转)-《Linux内核分析》Week2作业

    1.环境的搭建: 这个可以参考孟宁老师的github:mykernel,这里不再进行赘述.主要是就是下载Linux3.9的代码,然后安装孟宁老师编写的patch,最后进行编译. 2.代码的解读 课上的 ...

  6. Linux 内核开发 - 进程空间

    1.1 虚拟内存 Linux 的系统.假设每一个任务都独立的占用内存,则实际的物理内存将非常快消耗殆尽.实际上对于前台正在执行的任务来说,所须要要的内存并不多,非常多任务基本不须要执行,也就没有必要一 ...

  7. Linux内核分析——进程的切换和系统的一般执行过程

    进程的切换和系统的一般执行过程 一.进程切换的关键代码switch_to分析 (一)进程调度与进程调度的时机分析 1.不同类型的进程有不同的调度需求 第一种分类: (1)I/O-bound:频繁进行I ...

  8. Linux内核中进程上下文、中断上下文、原子上下文、用户上下文的理解【转】

    转自:http://blog.csdn.net/laoliu_lcl/article/details/39972459 进程上下文和中断上下文是操作系统中很重要的两个概念,这两个概念在操作系统课程中不 ...

  9. 深入理解Linux内核-进程

    1.进程的静态特性 进程:程序执行时的一个实例 进程描述符(task_struct): 进程的基本信息(thread_info).指向内存区描述符的指针(mm_struct).进程相关的tty(tty ...

随机推荐

  1. Java面试经典题目合集

    32 1.”static”关键字是什么意思?Java中是否可以覆盖(override)一个private或者是static的方法? “static”关键字表明一个成员变量或者是成员方法与类相关,可以在 ...

  2. ******十三 ******、软设笔记【操作系统】-磁盘管理、虚设备与SPOOLing系统

    五.磁盘管理 1.磁盘的访问时间 *寻道时间Ts:把磁臂从当前位置移到指定磁道上所经历的时间 *选择延迟时间Tr:指定扇区移动到磁头下面所经历的时间. *传输时间Tt:数据从磁盘读出或向磁盘写入数据所 ...

  3. IntelliJ IDEA 创建Web项目(全教程)

    说明:IntelliJ IDEA 版本为14.JDK 版本为1.7tomcat 版本为apache-tomcat-7.0.70 注:在创建过程中注意相关软件版本位数的问题.32位,64位的软件混搭会导 ...

  4. webservlce 的各个属性

    [WebMethod(Description = "我是可见的", MessageName = "GetAboutIntroduction")]//有这个标志的 ...

  5. win7, ubuntu双系统,重装win7后,修复引导

    参考: http://blog.csdn.net/abcsunl/article/details/72875983 http://blog.csdn.net/davied9/article/detai ...

  6. 剑指Offer-把数组排成最小的数

    题目描述 输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个.例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323. 思路 可以看 ...

  7. 【tmos】SpringBoot项目IDEA不识别依赖,但是能够运行时什么鬼?

    如下图,但是项目却能够正常运行 解决方法 方法1 方法2 方法3 删除项目的.idea文件,然后重新打开IDEA 方法4 删除项目的iml文件,然后reimport项目的pom.xml 文件,错误提示 ...

  8. 课程8:《Maven精品教程视频》--视频目录

    2017年3月18日 老师讲的课程 \day01视频\01maven依赖管理.avi; \day01视频\02maven项目构建.avi; \day01视频\03maven程序安装.avi; \day ...

  9. IndexedDB API

    参考链接:https://wangdoc.com/javascript/bom/indexeddb.html

  10. 832B Petya and Exam

    题意:给你两个串,第一个串里面的字母都是good 字母, 第二个串是模式串,里面除了字母还有?和*(只有一个) ?可以替换所有good字母, *可以替换所有坏字母和空格(可以是多个坏字母!!!这点卡了 ...