linux内核分析之内存管理】的更多相关文章

1.struct page /* Each physical page in the system has a struct page associated with * it to keep track of whatever it is we are using the page for at the * moment. Note that we have no way to track which tasks are using * a page, though if it is a pa…
转自:http://blog.csdn.net/Baiduluckyboy/article/details/9667933 内存管理,不用多说,言简意赅.在内核里分配内存还真不是件容易的事情,根本上是因为内核不能想用户空间那样奢侈的使用内存. 先来说说内存管理.内核把物理页作为内存管理的基本单位.尽管处理器的最小可寻址单位通常是字,但是,内存管理单元MMU通常以页为单位进行处理.因此,从虚拟内存的交代来看,页就是最小单位.内核用struct  page(linux/mm.h)结构表示系统中的每个…
题外语:本人对linux内核的了解尚浅,如果有差池欢迎指正,也欢迎提问交流! 首先要理解一下每一个进程是如何维护自己独立的寻址空间的,我的电脑里呢是8G内存空间.了解过的朋友应该都知道这是虚拟内存技术解决的这个问题,然而再linux中具体是怎样的模型解决的操作系统的这个设计需求的呢,让我们从linux源码的片段开始看吧!(以下内核源码均来自fedora21 64位系统的fc-3.19.3版本内核) <include/linux/mm_type.h>中对于物理页面的定义struct page,也…
在上一篇博客“内核内存管理”中,描述的内核内存管理的相关算法和数据结构,在这里简单描述用户态内存管理的数据结构和算法. 一,相关结构体 与进程地址空间相关的全部信息都包含在一个叫做“内存描述符”的数据结构mm_struct中,进程描述符的mm字段指向社个结构. linux通过vm_area_struct的对象实现线性区,每个线性区表示一个线性地址空间.其中重要字段如下: struct vm_area_struct { ... unsigned long vm_start;//线性区间的第一个线性…
Linux内核设计与实现之内存管理的读书笔记 初探Linux内核管理 内核本身不像用户空间那样奢侈的使用内存; 内核不支持简单快捷的内存分配机制, 用户空间支持? 这种简单快捷的内存分配机制是什么呢? 内核不能睡眠; 内核空间和用户空间分配内存是不一样的, 差一点在哪里呢? 内核是如何管理内存? 内核把物理页作为内存管理的基本单位; 因为内存管理单元通常以页为单位进行处理; 从内存管理单元的角度来看, 页是最小的单位; 什么是内存管理单元(MMU) -- 就是把虚拟地址转换为物理地址的硬件; 那…
1. 内存管理区 为什么分成不同的内存管理区? ISA总线的DMA处理器有严格的限制:仅仅能对物理内存前16M寻址. 内核线性地址空间仅仅有1G,CPU不能直接訪问全部的物理内存. ZONE_DMA                  小于16M内存页框 ZONE_NORMAL          16M~896M内存页框 ZONE_HIGHMEM        大于896M内存页框 ZONE_DMA和ZONE_NORMAL区域包括的页框,通过线性的映射到内核线性地址空间.内核能够直接訪问(对应的内…
os的内存管理大概可以分成两块:1.段页式管理(虚存)2.swap in 和 swap out 段页式管理 段式管理的图像:运行时重定位 多级页表的管理图像  块表加速 用户(程序员)希望用段,物理内存希望用页来进行管理 所以引入虚存的概念: 段面向用户,用户眼里的地址是0-4G,页面向物理内存,存储时,将段切割成一页一页存在物理内存里, 同时,pcb内有虚拟页->物理页的映射表,物理页寻址时再按照多级页表那样寻址即可  以系统调用fork为例来分析段页式内存管理的过程: 假设每个进程都在虚存里…
逻辑地址由16位segment selector和offset组成 根据segment selector到GDT或LDT中去查找segment descriptor 32位base,20位limit,G为0表示limit单位为1byte,1表示单位为4k bytes. 下图表示segment selector到segment的映射过程. x86提供寄存器用于快速查找(不经过GDT或LDT).每次从GDT中取出,就存到寄存器中,相当于一个缓存的作用. GDT如下图: Most Linux User…
    Linux内核地址映射模型x86 CPU采用了段页式地址映射模型.进程代码中的地址为逻辑地址,经过段页式地址映射后,才真正访问物理内存. 段页式机制如下图.   Linux内核地址空间划分 通常32位Linux内核地址空间划分0~3G为用户空间,3~4G为内核空间.注意这里是32位内核地址空间划分,64位内核地址空间划分是不同的.   Linux内核高端内存的由来 当内核模块代码或线程访问内存时,代码中的内存地址都为逻辑地址,而对应到真正的物理内存地址,需要地址一对一的映射,如逻辑地址0…
原文:Linux内核分析(三)----初识linux内存管理子系统 Linux内核分析(三) 昨天我们对内核模块进行了简单的分析,今天为了让我们今后的分析没有太多障碍,我们今天先简单的分析一下linux的内存管理子系统,linux的内存管理子系统相当的庞大,所以我们今天只是初识,只要对其进行简单的了解就好了,不会去追究代码,但是在后面我们还会对内存管理子系统进行一次深度的分析. 在分析今天的内容之前,我们先来看出自http://bbs.chinaunix.net/thread-2018659-2…
原文:Linux内核分析(四)----进程管理|网络子系统|虚拟文件系统|驱动简介 Linux内核分析(四) 两天没有更新了,上次博文我们分析了linux的内存管理子系统,本来我不想对接下来的进程管理子系统.网络子系统.虚拟文件系统在这个阶段进行分析的,但是为了让大家对内核有个整体的把握,今天还是简单的介绍一下剩余的几个子系统,我们对这几个子系统的分析,只要了解其作用和部分内容即可,不必深究,等我们写上几个驱动,到时候按照驱动再来分析这几个子系统我们就清晰多了. 在http://www.cnbl…
[5216 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000] WEEK NINE (4.18--4.24)期中总结 SECTION 0 学习目录 第一周<计算机是如何工作的?>http://www.cnblogs.com/lwr-/p/5211491.html 第二周<操作系统是如何工作的?> http://www.cnblogs.com/lwr-/p/52356…
[刘蔚然 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000] WEEK EIGHT(4.11--4.17)进程的切换和系统的一般执行过程 SECTION 1 进程切换的关键代码switch_to的分析 1.进程调度与进程调度的时机分析 进程分类 分类1 I/O-bound:等待I/O CPU-bound:大量占用CPU进行计算 分类2 交互式进程(shell) 实时进程 批处理进程 进程调…
两个月Linux内核的学习,让我理解了Linux内核的基本工作原理,包括进程管理.内存管理.设备驱动.文件系统,从分析内核到了解整个系统是如何工作的.如何控制管理资源分配.进程切换并执行.各种策略和结构让系统运行时更有效率等.每周都要看视频.做实验.写博客,在一点一滴的积累中,我逐渐弄清楚Linux内核的脉络,更令我感到欣喜的是本来略感散乱的知识点也在最后一节课的总览里看到了其内在联系.苟有恒,学好Linux不是梦! 一.博客目录 第一周<计算机是如何工作的?> http://www.cnbl…
[刘蔚然 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000] WEEK TWO(2.29——3.6)操作系统是如何工作的? SECTION 1 函数调用堆栈 1.总结上一讲 计算机是如何工作的? 存储程序计算机工作模型(冯诺依曼结构),是各种类型计算机的一个框架: 堆栈在早期是没有的,它是高级语言的起点(函数调用堆栈) 中断机制(多道系统的基础,也是计算机效率提升的关键——否则的画计算机能…
[刘蔚然 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000] WEEK SIX(3.28--4.3)进程的创建与描述 SECTION 1 进程描述 1.进程控制块--PCB 2.进程描述符--struct task_struct 1. pid_t pid又叫进程标识符,唯一地标识进程 2. 第1295行,list_head tasks即 进程链表 - 双向循环链表链接起了所有的进程,也表示…
万子惠 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程 实验部分 menu程序: cd LinuxKernel/ qemu -kernel linux-3.18.6/arch/x86/boot/bzImage -initrd rootfs.img 其中: 1.qemu 是一个快速的动态译指的虚拟机 2.-kernel bzImage: 内核镜像 3.-initrd file使用file作为初始的ram磁盘. gdb (gdb)file linux-3.18.6/vmlinu…
韩玉琪 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一.Linux内核源码简介 1. 源码主要结构 简单的Linux内核源代码结构. 2. 我们关注的部分 arch/ - 该目录中包含和硬件体系结构相关的代码,每种平台占一个相应的目录. - 和32位PC相关的代码存放在x86目录下. - 每种平台至少包含3个子目录:kernel(存放支持体系结构特有的特征实现).lib(存放…
韩玉琪 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一.进程的描述 为了管理进程,内核必须对每个进程进行清晰的描述,进程描述符提供了内核所需了解的进程信息. 1. 进程控制块PCB--task_struct 操作系统的三大管理功能 - 进程管理 - 内存管理 - 文件系统 PCB task_struct中包含 - 进程状态 - 进程打开的文件 - 进程优先级信息 struct…
韩玉琪 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一.进程切换的关键代码 操作系统原理中介绍了大量进程调度算法,这些算法从实现的角度看仅仅是从运行队列中选择一个新进程,选择的过程中运用了不同的策略而已. 对于理解操作系统的工作机制,反而是进程的调度时机与进程的切换机制更为关键. 1. 进程的调度时机 不同类型的进程有不同的调度需求 (1)第一种分类: I/O-bound 频…
Linux内核学习总结 首先非常感谢网易云课堂这个平台,让我能够在课下学习,课上加强,体会翻转课堂的乐趣.孟宁老师的课程循序渐进,虽然偶尔我学习地不是很透彻,但能够在后续的课程中进一步巩固学习,更加深刻.上个学期学习了Linux基本的指令与操作方法,这学期的课程中终于运用上了,感觉到收获知识的满足感.课程的步骤是先建立起内核的大体框架,让我们理解各个子系统的设计理念和构建思想,这些理念让我有一个清晰的脉络,然后,给我们一项一项讲解.实践具体的实现方法.函数,我们就了解到这些函数,针对的是哪些设计…
Linux内核分析 链接汇总 Linux内核分析第一周学习总结--计算机是如何工作的 Linux内核分析第二周学习总结--操作系统是如何工作的 Linux内核分析第三周学习总结--构造一个简单的Linux系统MenuOS Linux内核分析第四周学习总结--扒开应用系统的三层皮(上) Linux内核分析第五周学习总结--扒开应用系统的三层皮(下) Linux内核分析第六周学习总结--进程的描述和进程的创建 Linux内核分析第七周学习总结--可执行程序的装载 Linux内核分析第八周学习总结--…
https://www.ibm.com/developerworks/cn/linux/l-cache/ 1 前言 自从诞生以来,Linux 就被不断完善和普及,目前它已经成为主流通用操作系统之一,使用得非常广泛,它与 Windows.UNIX 一起占据了操作系统领域几乎所有的市场份额.特别是在高性能计算领域,Linux 已经成为一个占主导地位的操作系统,在2005年6月全球TOP500 计算机中,有 301 台部署的是 Linux 操作系统.因此,研究和使用 Linux 已经成为开发者的不可回…
原文:Linux内核分析(一)---linux体系简介|内核源码简介|内核配置编译安装 Linux内核分析(一) 从本篇博文开始我将对linux内核进行学习和分析,整个过程必将十分艰辛,但我会坚持到底,同时在博文中如果那些地方有问题还请各位大神为我讲解. 今天我们会分析到以下内容: 1.      Linux体系结构简介 2.      Linux内核源码简介 3.      Linux内核配置.编译.安装 l  Linux体系结构简介 1.       Linux体系结构(linux系统构成)…
<Linux内核分析>第六周学习总结                         ——进程的描述和进程的创建 姓名:王玮怡  学号:20135116 一.理论部分 (一)进程的描述 1.进程描述符task_stuck数据结构(一) 操作系统三大功能:进程管理(核心).内存管理.文件系统 PCB task_struct中包含:进程状态.进程打开的文件.进程优先级信息 进程控制块PCB——进程描述符task_stuck提供了内核所需了解的进程信息 Linux进程状态转换图: 2.进程描述符ta…
目录: “Linux内核分析”实验一报告 “Linux内核分析”实验二报告 “Linux内核分析”实验三报告 Linux实验四报告 “Linux内核分析”第五周报告 "Linux内核分析"第六周实验报告 "Linux内核分析"第七周 <Linux内核分析>第八周 进程的切换和系统的一般执行过程 一.计算机是如何工作的 存储程序计算机工作模型:冯诺依曼体系结构 X86汇编基础:CPU的寄存器(通用寄存器.段寄存器.标志寄存器).常见汇编指令.堆栈 汇编一个…
张文俊 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 1.进程的描述 进程控制块PCB——task_struct 为了管理进程,内核必须对每个进程进行清晰的描述,进程描述符(即task_struct)提供了内核所需了解的进程信息. struct task_struct数据结构很庞大 Linux进程的状态与操作系统原理中的描述的进程状态似乎有所不同,比如就绪状态和运行状态都是TA…
20135132陈雨鑫 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 ” 一.进程调度与进程调度的时机分析 1.进程调度 不同类型的进程有不同的调度需求 第一种分类:       I/O-bound            频繁的进行I/O           通常会花费很多时间等待I/O操作的完成     CPU-bound            计算密集型          …
进程的描述和进程的创建 一.进程的描述 进程描述符task_struct数据结构: (1)操作系统的三大功能: 进程管理.内存管理.文件系统 (2)进程的作用: 将信号.进程间通信.内存管理和文件系统联系起来 (3)进程控制块PCB——task_struct数据结构 提供了内核需要了解的信息 (4)task_struct结构庞大,有400多行代码.包含了进程状态.内核堆栈等相关信息的定义. (5)Linux的进程和操作系统原理中描述的进程状态有所不同,实际内核中,就绪和运行状态都用TASK_RU…
进程的切换和系统的一般执行过程 于佳心  原创作品转载请注明出处  <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 试验:理解进程调度时机跟踪分析进程调度与进程切换的过程 按照老规矩进入qemu 启动gdb之后完成一系列设置,最后设置一个断点schedule,然后开始漫长的跟踪之路 运行到schedule停下了 进程切换的关键代码switch_to分析 进程的调度时机与进程的切换 不同类型的进程有不同的调度需求…