Linux内核之进程地址空间
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内核之进程地址空间的更多相关文章
- 深入理解Linux内核-进程地址空间
给内核分配内存和给用户态进程分配内存是有区别的:1.内核的优先级最高,如果某个内核函数请求动态内存,不会被延时2.内核信任自己,不必保护措施3.用户态进程对动态内存的请求被认为不是紧迫的,总是被尽量推 ...
- (转)Linux内核之进程和系统调用
Linux内核之进程和系统调用 什么是系统调用 在Linux的世界里,我们经常会遇到系统调用这一术语,所谓系统调用,就是内核提供的.功能十分强大的一系列的函数.这些系统调用是在内核中实现的,再通过一定 ...
- 深入Linux内核架构——进程管理和调度(上)
如果系统只有一个处理器,那么给定时刻只有一个程序可以运行.在多处理器系统中,真正并行运行的进程数目取决于物理CPU的数目.内核和处理器建立了多任务的错觉,是通过以很短的间隔在系统运行的应用程序之间不停 ...
- 24小时学通Linux内核之进程
都说这个主题不错,连我自己都觉得有点过大了,不过我想我还是得坚持下去,努力在有限的时间里学习到Linux内核的奥秘,也希望大家多指点,让我更有进步.今天讲的全是进程,这点在大二的时候就困惑了我,结果那 ...
- 分析Linux内核中进程的调度(时间片轮转)-《Linux内核分析》Week2作业
1.环境的搭建: 这个可以参考孟宁老师的github:mykernel,这里不再进行赘述.主要是就是下载Linux3.9的代码,然后安装孟宁老师编写的patch,最后进行编译. 2.代码的解读 课上的 ...
- Linux 内核开发 - 进程空间
1.1 虚拟内存 Linux 的系统.假设每一个任务都独立的占用内存,则实际的物理内存将非常快消耗殆尽.实际上对于前台正在执行的任务来说,所须要要的内存并不多,非常多任务基本不须要执行,也就没有必要一 ...
- Linux内核分析——进程的切换和系统的一般执行过程
进程的切换和系统的一般执行过程 一.进程切换的关键代码switch_to分析 (一)进程调度与进程调度的时机分析 1.不同类型的进程有不同的调度需求 第一种分类: (1)I/O-bound:频繁进行I ...
- Linux内核中进程上下文、中断上下文、原子上下文、用户上下文的理解【转】
转自:http://blog.csdn.net/laoliu_lcl/article/details/39972459 进程上下文和中断上下文是操作系统中很重要的两个概念,这两个概念在操作系统课程中不 ...
- 深入理解Linux内核-进程
1.进程的静态特性 进程:程序执行时的一个实例 进程描述符(task_struct): 进程的基本信息(thread_info).指向内存区描述符的指针(mm_struct).进程相关的tty(tty ...
随机推荐
- Linux记录-sysctl.conf优化方案
Sysctl是一个允许您改变正在运行中的Linux系统的接口.它包含一些 TCP/IP 堆栈和虚拟内存系统的高级选项, 这可以让有经验的管理员提高引人注目的系统性能.用sysctl可以读取设置超过五百 ...
- javascript中var、let和const的区别
在javascript中,var.let和const都可以用来声明变量,那么三者有什么区别呢?要回答这个问题,我们可以从先想想:三种不同的声明会影响变量的哪些方面?这些方面也就是变量的特性,那么变量有 ...
- Kettle系列: Kettle并行执行Trans后的合并问题
我们在作业开发中为了处理效率, 经常需要并行执行一些trans, 等它们执行完毕后, 需要执行另外一些trans, 从流程上也就是分支+汇合. 粗看起来很简单, Kettle中对接一下这些组件就搞定了 ...
- Tooltip导致的无法访问已释放对象
最近C#项目中遇到了一个无法访问已释放对象问题,经过反复测试,最终发现问题出在控件Tootip上,因为tootip内部有一个定时器,如果在窗口销毁时,鼠标移动到控件上恰好产生了一个tooltip,就会 ...
- java 用PDFBox 删除 PDF文件中的某一页
依赖: <dependency> <groupId>org.apache.pdfbox</groupId> <artifactId>pdfbox-app ...
- Groovy 设计模式 -- 抽象工厂 模式
抽象工厂 https://blog.csdn.net/wyxhd2008/article/details/5597975 首先来看看这两者的定义区别: 工厂模式:定义一个用于创建对象的借口,让子类决定 ...
- hackrf入门
http://www.hackrf.net/hackrf%E4%B8%8Egnuradio%E5%85%A5%E9%97%A8%E6%8C%87%E5%8D%97/
- 小试XML实体注入攻击
基础知识 XML(Extensible Markup Language)被设计用来传输和存储数据.关于它的语法,本文不准备写太多,只简单介绍一下. XML基本知识 1 2 3 4 5 <?xml ...
- 【杂】指针,*,&
一个小程序解释指针变量的作用: #include<iostream> #include"cww.h" void cloud(int *); using namespac ...
- IDEA 远程调试 Tomcat 和 Debugger
一般来说我们本地环境使用Tomcat,生产环境使用GlassFish. 准备工作 明确远程服务器的 IP 地址,比如:192.168.92.128 关掉服务器防火墙:service iptables ...