![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Linux:Linxu架构
艾-小小雨
再长的路,一步步也能走完,再短的路,不迈开双脚也无法到达。
展开
-
初始化内存管理
建立数据结构特定于体系结构的设置启动过程期间的内存管理转载 2016-07-20 07:05:24 · 486 阅读 · 0 评论 -
调度器增强
2.8.1 SMP调度 多处理器系统上,内核必须考虑结构额外的问题,一确保良好的调度。 *CPU符合必须进可能公平地在所有的处理器上共享。如果一个处理器负责3个并发的应用程序,而另一个只能处理空闲进程,那是没有意义的。 *进程与系统中某些处理器的亲和性(affinity)必须是可设置的。翻译 2016-07-17 22:22:53 · 372 阅读 · 0 评论 -
内存管理
内存管理是内核最复杂同时也最重要的一部分。器特点在于非常需要处理器和内核之间的协作。3.1 概述 内存管理的实现涵盖了许多领域: *内存中的物理内存也得管理 *分配大块内存的伙伴系统 *分配较小块内存的slab\slub和slob分配器 *分配非连续内存块的vmalloc机制。 *进程的地址空间 Linux内核一般讲处理器的虚拟翻译 2016-07-18 07:32:58 · 386 阅读 · 0 评论 -
3.2 (N)UMA模型的内存组织
3.2 (N)UMA模型中的内存组织 Linux支持的各种不同体系结构在内存管理方面差别很大。 内核对一致和非一致内存访问系统使用相同的数据结构,因此针对各种不同形式的内存布局,各个算法几乎没有什么差别。3.2.1 概述 首先,内存划分为结点。每个节点关联到系统中的一个处理器,在内核中表示为pg_data_tr的实力。 各个节点又划分为内存域,是内存的进一步细转载 2016-07-18 07:54:09 · 1361 阅读 · 0 评论 -
对区域的操作
内核提供了各种函数来操作进程虚拟内存区域。在建立或删除映射时,创建和删除区域(以及查找用于新区域的适当的位置)是所需要的标准操作。内核还负责在管理这些数据结构时进行优化。 *如果一个新区域紧接着现存区域奇拿后直接添加,内核将数据结构合并为一个。 *如果在可与的开始或结束出进行删除,则必须据此阶段现存的数据结构 *如果删除两个区域之间的一个区域,那么一方面需要减少现存的数据结构的长度,另一个方面转载 2016-07-26 23:23:21 · 340 阅读 · 0 评论 -
内存映射
存映射相关的数据结构和地址空间操作,建立映射时内核和应用程序之间的交互。C标准库提供了mmap函数建立映射。在内核一端,提供了两个系统调用mmap和mmap2. asmlinkage unsigned long sys_map(2)(unisgned long addr, unsigned long len, unsigned long prot, unsigned long flags, uns翻译 2016-07-28 07:59:32 · 378 阅读 · 0 评论 -
进程虚拟内存
虚拟和物理地址之间的联系(通过页表),以及进程的一个内存区域与其虚拟内存也地址之间的关联。物理内存页和该也所属进程(或更精确地说,所有使用该页进程的对应也表项)之间的联系。子啊换出页时,刚好需哟啊该关联,以便跟新所有涉及的进程。 (1)在映射一页时,他惯量到一个进程,但不一定处于使用中 (2)对页的引用次数表项也使用的活跃程度。为确定该数目,内核首先逆序建立也和所有使用者之间的关联,解下来必须借翻译 2016-07-28 22:06:21 · 647 阅读 · 0 评论 -
堆的管理
堆屎进程中用于动态分配变量和数据的内存区域,堆的管理对应用程序源不是直接可见的。因为他依赖标准库提供的各种辅助函数来分配任意长度的内存区。malloc和内核之间的经典接口是brk系统调用,负责扩展/收缩堆。 堆屎一个连续内存区域,在扩展时自下至上增长。包含了对在虚拟地址空间中的起始和当前结束地址(start_brk和brk).转载 2016-07-29 07:51:20 · 333 阅读 · 0 评论 -
内存管理——页表
include/asm-x86_64/page.h typedef struct {unsigned long pte;} pte_t; typedef struct {unsigned long pmd;} pmd_t; typedef struct {unsigned long pud;} pud_t; typedef struct {unsigned long pgd;}pgd_t;翻译 2016-07-19 20:26:24 · 774 阅读 · 0 评论 -
内核机制锁
atomic_read() 读取源自变量的值 atomic_set() 将v设置为i atomic_add 将i加到v atomic_add_return 家那个i家到v并返回结果 atomic_sub() 从v减i atomic_sub_return 从v减去i,并返回结果 atomic_sub_and_test 从v减去v。如果结果为0则返回true atomic_inc翻译 2016-08-03 07:58:37 · 443 阅读 · 0 评论 -
System V进程通信
Linux使用System(V) 引入的机制,来支持用户进程的进程间通信和同步。内核通过系统调用提供了各种例程,使用库能够实现所需的操作。 5.3.1 System V机制 System vUNIX的进程间通信(IPC)机制(信号量、笑笑队列、共享内存)。他们都使用了全系统范围资源,可以有进程进程同时共享。 在访问IPC对象时,系统采用了基于文件访问权限的一个权限系统。每个IPC对象都转载 2016-08-04 07:52:36 · 454 阅读 · 0 评论 -
缺页异常的处理
如果进程访问的虚拟地址空间部分尚未与页帧关联,处理器自动地引发一个缺页异常,内核必须黑醋栗次异常。 *缺页异常是由于访问用户地址空间中的有效地址而引起,还是应用程序试图访问内核的手保护区域? *目标地址对应于某个现存的映射吗?、 缺页处理的实现因处理器的不同而有所不同。,由于CPU采用了不同的内存管理概念,生成缺页异常的细节也不太相同。转载 2016-08-01 07:23:58 · 687 阅读 · 0 评论 -
内存缺页异常
在访问内核地址空间时,缺页异常可能被各种条件触发。 (1)内核中的程序设计错误导致访问不正确的地址,这是真正的程序错误。 (2)内核通过用户空间传递的系统调用参数,访问了无效地址 (3)访问使用vmalloc分配的区域,触发缺页异常。 在向火从用户空间复制数据时,如果访问的地址在虚拟地址空间中不予物理内存也关联,则会发生缺页异常。 每次发生缺页异常时,将输出异常的原因和当前执行代码翻译 2016-08-01 21:43:01 · 827 阅读 · 0 评论 -
System V进程间通信
Linux使用System(V) 引入的机制,来支持用户进程的进程间通信和同步。内核通过系统调用提供了各种例程,使用库能够实现所需的操作。 5.3.1 System V机制 System vUNIX的进程间通信(IPC)机制(信号量、笑笑队列、共享内存)。他们都使用了全系统范围资源,可以有进程进程同时共享。 在访问IPC对象时,系统采用了基于文件访问权限的一个权限系统。每个IPC对象都翻译 2016-08-04 23:28:04 · 467 阅读 · 0 评论 -
设备驱动程序
设备驱动程序是内核的关键领域,因为许多用户判断操作系统性能时,主要是通过友驱动程序可用的外设数目和驱动程序对外设的支持程度来判断。因此,内核源代码的相当大一部分致力于设备驱动程序的实现。 设备驱动程序基于中心内核提供的许多不同的机制。因为驱动程序的结构通常非常类似,并且与设备无关。6.1 I/O体系结构 与外设的铜线通常称之为输入输出,一般都缩写为I/O。在实现外设的I/O时,内核必须处转载 2016-08-05 21:06:12 · 598 阅读 · 0 评论 -
实时调度类
2.7 实时调度类 按照POSIX标准的强制要求,除了“普通”进程之外,Linux还支持两种实时调度类。调度器结构使得实时进程可以平滑地集成到内核中,而无须修改合兴调度器,这显然是调度类带到的好处。 rt_task宏通过检查其优先级来正式给定进程是否实时进程,而task_has_rt_poliey则检测进程是否关联实时调度策略。2.7.1 性质 实时进程与普通进程又一个翻译 2016-07-17 18:11:27 · 573 阅读 · 0 评论 -
进程管理和调度——完全公平调度类
完全公平调度类kernel/sched_fair.c static const struct sched_class fair_shced_calss = { .next = &idle_sched_class, .enqueue_task = enqueue_task_fair, .dequeue_task = dequeue_task_fair, .yi转载 2016-07-16 21:04:38 · 468 阅读 · 0 评论 -
物理内存的管理
伙伴系统的结构避免碎片初始化内存域和结点数据结构分配器API分配页释放页内核中部连续页的分配内核映射转载 2016-07-20 07:08:53 · 430 阅读 · 0 评论 -
处理器高速缓存和TLB控制
处理器高速缓存和TLB控制小结转载 2016-07-20 07:12:26 · 2658 阅读 · 0 评论 -
slab分配器
备选分配器内核中的内存管理slab分配的原理实现通用缓存转载 2016-07-20 07:11:08 · 484 阅读 · 0 评论 -
进程虚拟内存——简介
用户进程的虚拟地址空间是linux的一个重要抽象:他想每个运行进程提供了同样的系统试图,这使得多个进程可以同时运行,而不会干扰到其他进程内存中的内容。ia,他容许使用各种高级的程序设计技术,如内存映射。需要考查可用物理内存中的页帧与所有的进程虚拟地址空间中的页是如何实现这些该奶奶的。可用物理内存中页帧与所有的进程虚拟地址空间中的也之间的关联:逆向映射(reverse mapping)技术有助于从虚拟原创 2016-07-24 20:48:41 · 527 阅读 · 0 评论 -
深入Linux内核架构笔记(第1章 )
1.1 内核的任务 *在纯技术层面上,内核是硬件与软件之间的一个中间层。其作用是将应用程序的请求传递给硬件,并充当底层驱动程序。对系统中的各种设备和组建进行寻址。 *当若干程序在同一系统中并发运行时,也可以将内核是为资源管理程序。 *另一种研究内核的视角是将内核设为库,其提供了一组面向系统的命令。1.2 实现策略 当前,在操作系统实现方面,有以下两种主要的范型原创 2016-07-13 07:58:34 · 554 阅读 · 0 评论 -
进程虚拟地址空间
与系统完成性相关的非常重要的一方面是,用户程序只能访问整个地址空间的下班不放呢,不能访问内核部分。如果没有预先达成“协议”,用户进程也不可能操作龄一个进程的地址空间,因为后者的地址空间对其拿着不可见。 无论当前那个用户进程处于活动状态,熏鼻地址空间内核部分的内容总是同样的。取决于具体的硬件,这可能是通过操作各用户进程的页表,使得虚拟地址空间袋额上部部看上去总是相同的。也可能是只是处理器为内翻译 2016-07-24 20:58:22 · 375 阅读 · 0 评论 -
内存映射原理
4.3 内存映射的原理 由于所有用户进程总的虚拟地址空间按可比可用的物理内存打得多,因此只有最常用的部分才与物理页帧关联。 text段你的情形类似,始终需要的只是其中一部分。 内核必须提供数据结构,一建立虚拟地址空间的区域和相关数据所在位置之间的关联。例如,在映射文本文件时,映射的虚拟内存去必须关联到文件系统在硬件上存储文件内容的区域。 因为文件数据在硬盘上的翻译 2016-07-26 07:30:43 · 760 阅读 · 0 评论 -
进程虚拟内存
*vm_pgoffset指定了文件映射的偏移量,该值用于值映射了文件部分内容时 注偏移量的单位不是字节,而是页(PAGE_SIZE).页长度为4KIB的系统上,偏移量值为10,折合实际的字节偏移量40960. *vm_file指向file实例,描述一个被映射的文件 *取决于映射类型,vm_private-data可用于存储私有数据,不由通用内存管理例程操作。 VM_READ,vm_maywr原创 2016-07-26 23:17:31 · 433 阅读 · 0 评论 -
进程管理和调度(第二章)
所有的现代操作系统能够同时运行若干进程。内核和处理器建立了多任务的错觉,即可以并行做几种操作,这是通过以很短的间隔在系统运行的应用程序之间不停切换而做到的。由于切换间隔如此之短,使得用户无法注意到短时间内的停滞,从而在感观上觉得计算机嫩巩固同时做几件事情。这种系统管理方式引起了几个问题,内核必须解决这些问题,其中最重要的问题如下所示。*除非明确地要求,否则应用程序不能彼此干扰。*CPU时间必原创 2016-07-15 21:28:15 · 298 阅读 · 0 评论 -
第2章 进程管理和调度 (进程表示)
2实现 命令空间的实现需要两个部分:每个子系统的命名空间结构,将此前所有的全局组件包装到命名空间中;将给定进程管理到所属各个命名空间的机制。原创 2016-07-16 11:48:01 · 298 阅读 · 0 评论 -
进程管理相关的系统调用
2.4 进程管理相关的系统调用 从用户状态切换到核心态的方法,依不同的体系结构二各有不同。这两种状态之间切换的机制,并解释用户空间和内核空间之间如何交换参数。就目前而言,将内核视为有C标准使用的“程序库”即可。====================================== 2.4.1 进程复制 传统的UNIX中用于复制进程的提供调用时fork.但他并不是Linux为此实现原创 2016-07-16 18:12:10 · 847 阅读 · 0 评论 -
进程管理和调度 --调度器的实现
2.5 调度器的实现 内存中保存了对每个进程的唯一描述,并通过若干结构域其他进程链接起来。调度器面对的情形就是这样,器任务是在程序之间共享CPU时间,创造并行执行的错觉。正如以上的讨论,改任务分为两个不同部分:一个设计调度策略,另一个设计上下文切换2.5.1 概观 内核必须提供一种方法,在各个进程之间尽可能公平地共享CPU时间,而同时又要考虑不同的任务优先级。完后才能够该墓地有许转载 2016-07-16 20:28:09 · 420 阅读 · 0 评论 -
进程管理和调度
所有的现代操作系统能够同时运行若干进程。内核和处理器建立了多任务的错觉,即可以并行做几种操作,这是通过以很短的间隔在系统运行的应用程序之间不停切换而做到的。由于切换间隔如此之短,使得用户无法注意到短时间内的停滞,从而在感观上觉得计算机嫩巩固同时做几件事情。这种系统管理方式引起了几个问题,内核必须解决这些问题,其中最重要的问题如下所示。*除非明确地要求,否则应用程序不能彼此干扰。*CPU时间必转载 2016-07-16 22:27:12 · 299 阅读 · 0 评论 -
设备驱动程序
6.5.5 请求结构 内核提供了数据结构一描述发送给块设备的请求翻译 2016-08-07 23:05:55 · 424 阅读 · 8 评论