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 ...
随机推荐
- css 绝对定位实现水平垂直居中
负margin实现水平垂直居中 width: 500px; height: 500px; position: absolute; left: 50%; top :50%; margin-left: - ...
- MySQL数据库权限体系介绍
本文主要向大家介绍了MySQL数据库权限体系,通过具体的内容向大家展现,希望对大家学习MySQL数据库有所帮助. 一.权限体系简介: MySQL的权限体系在实现上比较简单,相关权限信息主要存储在mys ...
- 2018牛客网暑期ACM多校训练营(第二场)G Transform(二分)
题意 在一个数轴上有n个集装箱,第 i 个集装箱的位置为x[i],且在集装箱内装有a[i]件货物,现在将这些集装箱内的货物进行移动(将一件货物从第 i 个集装箱移动到第 j 个集装箱的花费就为2*ab ...
- 2016vijos 1-1 兔子的字符串(后缀数组 + 二分 + 哈希)
题意: 给出一个字符串,至多将其划分为n部分,每一部分取出字典序最大的子串ci,最小化 最大的ci 先看一个简化版的问题: 给一个串s,再给一个s的子串t,问能否通过将串划分为k个部分,使t成为划分后 ...
- HDU 1038(速度里程计算 **)
题意是已知车轮的直径,圈数和时间,求所行驶的里程和速度. 单位换算,代码如下: #include <bits/stdc++.h> using namespace std; const do ...
- python之所以强大很大一部分原因在于他众多的取之不尽的库
GUI 的 自动任务用这个pyautogui库,web 页面的用 selenium + webdriver 同类型的还有 sikuli ,低配版 按键精灵 本教程译自大神Al Sweigart的PyA ...
- vue-cli脚手架笔记
vue不支持IE8,因为vue使用了IE8无法模拟的 ECMAScript 5特性 使用vue-cli脚手架会让我们的工作非常方便 比如想编译一下es6的语法就使用 babel loader 和 ba ...
- C# 异步委托(AP、APM)
Ø 前言 C# 异步委托也是属于异步编程中的一种,可以称为 Asynchronous Programming(异步编程)或者 Asynchronous Programming Model(异步编程模 ...
- PHP的核心配置详解
1.PHP核心配置详解 代码在不同的环境下执行的结果也会大有不同,可能就因为一个配置问题,导致一个非常高危的漏洞能够利用:也可能你已经找到的一个漏洞就因为你的配置问题,导致你鼓捣很久都无法构造成功的漏 ...
- Coursera, Deep Learning 4, Convolutional Neural Networks - week2
Case Study (Note: 红色表示不重要) LeNet-5 起初用来识别手写数字灰度图片 AlexNet 输入的是227x227x3 的图片,输出1000 种类的结果 VGG VGG比Ale ...