摘要:
断断续续学习操作系统已经有大半年时间了,一直想系统地梳理一下。 正好借助《深入Linux内核架构》 (Wolfgang Manuere 著,郭旭 译)汇总一下。 首先基础框架篇,Linux内核0.11体系结构。 由于内核版本不停地更新,《深入Linux内核架构》以内核2.6.24为例。 //注释掉, 阅读全文
摘要:
Linux作为多任务系统,当一个进程生成的数据传输到另一个进程时,或数据由多个进程共享时,或进程必须彼此等待时,或需要协调资源的使用时,应用程序必须彼此通信。 一、控制机制 1、竞态条件 几个进程在访问资源时彼此干扰的情况通常称之为竞态条件(race condition)。在对分布式应用编程时,这种 阅读全文
摘要:
逆向映射(reverse mapping)技术有助于从虚拟内存页跟踪到对应的物理内存页; 缺页处理(page fault handling)允许从块设备按需读取数据填充虚拟地址空间。 一、简介 用户虚拟地址空间的管理比内核地址空间的管理复杂: 每个应用程序都有自身的地址空间,与所有其他应用程序分隔开 阅读全文
摘要:
五、物理内存的管理 在内核初始化完成后,内存管理的责任由伙伴系统(高效、高速)承担。 1、伙伴系统的结构 系统内存中的每个物理内存页(页帧),都对应于一个struct page实例。每个内存域都关联了一个struct zone的实例,其中保存了用于管理伙伴数据的主要数组。 sruct free_ar 阅读全文
摘要:
一、概述 内存管理涵盖领域: 内存中的物理内存页管理; 分配大块内存的伙伴系统; 分配较小块内存的slab、slub和slob分配器; 分配连续内存块的vmalloc机制; 进程的地址空间。 Linux内核一般将处理器的虚拟地址分为两个部分,以IA-32为例,地址空间在用户进程和内核之间的划分比例为 阅读全文
摘要:
详细代码戳这里。 一、启动引导 采用软件grub2进行引导,基于规范multiboot2进行启动引导加载。multiboot2的文档资料戳这里。 二、具体内容 开发环境 系统环境:Ubuntu 14.04 / Ubuntu 16.04 32bit/64bit; 辅助软件:Qemu and Xorri 阅读全文
摘要:
五、调度器的实现 调度器的任务是在程序之间共享CPU时间,创造并行执行的错觉。该任务可分为调度策略和上下文切换两个不同部分。 1、概观 暂时不考虑实时进程,只考虑CFS调度器。经典的调度器对系统中的进程分别计算时间片,使进程运行直至时间片用尽,所有进程的所有时间片用完时,需要重新计算。相比之下,CF 阅读全文
摘要:
如果系统只有一个处理器,那么给定时刻只有一个程序可以运行。在多处理器系统中,真正并行运行的进程数目取决于物理CPU的数目。内核和处理器建立了多任务的错觉,是通过以很短的间隔在系统运行的应用程序之间不停切换做到的。由此,以下两个问题必须由内核解决:除非明确要求,否则应用程序不能彼此干扰;CPU时间必须 阅读全文
摘要:
一、内核的任务 纯技术层面上,内核是硬件与软件的之间的一个中间层。作用是将应用程序的请求传递给硬件,并充当底层驱动程序,对系统中的各种设备和组件进行寻址。 从应用程序视角上看,内核可以被认为是一台增强的计算机,将计算机抽象到一个高层次上。应用程序与硬件本没有联系,只与内核有联系,内核是应用程序所知道 阅读全文
摘要:
《奔跑吧linux内核》3.3笔记,不足之处还望大家批评指正 根据实际物理属性,CPU域分类如图1所示。 图1 CPU域分类 问题一:一个4核处理器中的每个物理CPU拥有独立L1 cache且不支持超线程技术,分成两个簇cluster0和cluster1,每个簇包含两个物理CPU核,簇中的CPU核共 阅读全文