×

Linux内核精析

消耗积分:2 | 格式:pdf | 大小:9579KB | 2017-09-13

wzp17317

分享资料个

  Linux 操作系统是类 UNIX 系统中的一员,并且在操作系统发展过程中起着重要的作用。Linux 之所以能够发展得如此迅速,最主要的原因是其具有开源的特点,任何人都可以获得源代码并进行研究。本书主要对 Linux 内核进行深度的剖析,并详细讨论内核的主要功能及其内部结构,同时给出了内核的实现。本章将简要介绍内核所涉及的基本知识,此外,对内核所涉及的各领域进行简单的阐述。 1.1 Linux 的内存管理机制操作系统的内存管理分为页式管理和段式管理两种管理机制,对于段式内存管理机制,是将指令中结合段寄存器使用的 32 位逻辑地址映射为 32 位的物理地址。随着操作系统的发展,提出了保护模式和虚拟内存管理的概念,Intel 在分段机制的基础上实现了包含模式和虚拟内存管理,后来出现了分页机制并逐渐成为内存管理机制的主流。Intel 出于兼容性的考虑,保留了段式内存管理机制,段寄存器用做选择子,段基地址及其他的某些属性存放在内存中,称为段描述符表。段式内存管理机制的灵活性和效率都比较差,这样就需要采用页式管理机制。页式管理就是通过分页单元将线性地址转换为物理地址,其中一个重要的任务就是把请求的访问类型与线性地址的访问权限进行对比,如果该内存访问无效,则产生一个缺页的异常。内核把线性地址分为 4KB 大小的页面,其中的每个页面都可以映射到物理地址空间的任意 4KB 大小的地址。在该映射过程中,连续的线性地址映射到物理地址空间中不一定是连续的,分页单元把所有的 RAM 分成固定长度的物理页,每一个物理页(Page Frame)包含一个页。把线性地址映射到物理地址的数据结构称为页表,该页表存放在主存中,并在启用分页单元之前由内核对页表进行初始化。由于引入了页式管理,因此 32 位的线性地址分为 3 个区域,分别为 Directory(目录)、Table(页表)及 Offset(偏移)。目录是线性地址的最高 10 位,用做页面表目录的下标,指向一个页面表;页表是线性地址的中间 10 位,用做具体页面表中的下标,指向具体的物理页面;偏移则是线性地址的最低 12 位,用于指向具体物理页面内的偏移量。对于每一个活动进程都有一个分配的页目录,正在使用的页目录的物理地址存放在 cr3 控制寄存器中。线性地址的 Directory 字段决定了页目录中的目录项,目录项指向某个页表,线性地址的 Table 字段则决定了页表中的页表项,Offset 字段决定页框内的偏移量,由于该字段包含了 12 位,因此每页包含了 4 096 字节的数据。页式映射的示意图如图 1-1 所示。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

评论(0)
发评论

下载排行榜

全部0条评论

快来发表一下你的评论吧 !