图灵教育 一个64位操作系统的设计与实现 C语言自制操作系统教程 引入诸多

图灵教育 一个64位操作系统的设计与实现 C语言自制操作系统教程 引入诸多 pdf epub mobi txt 电子书 下载 2025

田宇 著
图书标签:
  • 操作系统
  • 自制操作系统
  • C语言
  • 图灵教育
  • 64位操作系统
  • 内核开发
  • 汇编语言
  • 系统编程
  • 底层开发
  • 教学教程
想要找书就要到 静流书站
立刻按 ctrl+D收藏本页
你会得到大惊喜!!
店铺: 人民邮电出版社官方旗舰店
出版社: 人民邮电出版社
ISBN:9787115475251
商品编码:28650475070
包装:平装
开本:16
出版时间:2018-05-01
字数:1022

具体描述


内容介绍
本书讲述了一个64位多核操作系统的自制过程。此操作系统自制过程是先从虚拟平台构筑起一个基础框架,随后再将基础框架移植到物理平台中进行升级、完善与优化。为了凸显64位多核操作系统的特点,物理平台选用搭载着Intel Core-i7处理器的笔记本电脑。与此同时,本书还将Linux内核的源码精髓、诸多官方白皮书以及多款常用协议浓缩于其中,可使读者在读完本书后能够学以致用,进而达到理论联系实际的目的。 全书共分为16章。*1~2章讲述了操作系统的基础概念和开发操作系统需要掌握的知识;第3~5章在虚拟平台下快速构建起一个操作系统模型;第6~16章将在物理平台下对操作系统模型做进一步升级、优化和完善。 本书既适合在校学习理论知识的初学者,又适合在职工作的软件工程师或有一定基础的业余爱好者。

作者介绍
田宇 Linux内核爱好者,曾在多家大中型软件公司从事软件开发工作,参与过多款高端嵌入式产品的开发研制,主要负责Linux内核和驱动的研发,以及开源操作系统环境的深度定制。

关联推荐
基于Intel I7处理器的64位多核操作系统,引入诸多Linux内核的设计精髓
目录
*一部分 操作系统相关知识介绍及环境搭建
*1章 操作系统概述  4
1.1 什么是操作系统  4
1.2 操作系统的组成结构  4
1.3 编写操作系统需要的知识  7
1.4 本书操作系统简介  8
*2章 环境搭建及基础知识  9
2.1 虚拟机及开发系统平台介绍  9
2.1.1 VMware的安装  9
2.1.2 编译环境CentOS 6  10
2.1.3 Bochs虚拟机  11
2.2 汇编语言  14
2.2.1 AT&T;汇编语言格式与Intel汇编语言格式  14
2.2.2 NASM编译器  16
2.2.3 使用汇编语言调用C语言的函数  16
2.3 C语言  19
2.3.1 GNU C内嵌汇编语言  20
2.3.2 GNU C语言对标准C语言的扩展  23
*二部分 初级篇
第3章 BootLoader引导启动程序  30
3.1 Boot引导程序  30
3.1.1 BIOS引导原理  31
3.1.2 写一个Boot引导程序  32
3.1.3 创建虚拟软盘镜像文件  36
3.1.4 在Bochs上运行我们的Boot程序  38
3.1.5 加载Loader到内存  40
3.1.6 从Boot跳转到Loader程序  52
3.2 Loader引导加载程序  54
3.2.1 Loader原理  54
3.2.2 写一个Loader程序  55
3.2.3 从实模式进入保护模式再到IA-32e模式  65
3.2.4 从Loader跳转到内核程序  75
第4章 内核层  78
4.1 内核执行头程序  78
4.1.1 什么是内核执行头程序  78
4.1.2 写一个内核执行头程序  79
4.2 内核主程序  83
4.3 屏幕显示  85
4.3.1 在屏幕上显示色彩  86
4.3.2 在屏幕上显示log  88
4.4 系统异常  100
4.4.1 异常的分类  101
4.4.2 系统异常处理(一)  102
4.4.3 系统异常处理(二)  109
4.5 初级内存管理单元  121
4.5.1 获得物理内存信息  121
4.5.2 计算可用物理内存页数  123
4.5.3 分配可用物理内存页  126
4.6 中断处理  142
4.6.1 8259A PIC  142
4.6.2 触发中断  148
4.7 键盘驱动  152
4.7.1 简述键盘功能  152
4.7.2 实现键盘中断捕获函数  154
4.8 进程管理  155
4.8.1 简述进程管理模块  155
4.8.2 PCB  156
4.8.3 init进程  163
第5章 应用层  171
5.1 跳转到应用层  171
5.2 实现系统调用API  180
5.3 实现一个系统调用处理函数  185
第三部分 *级篇
第6章 处理器体系结构  190
6.1 基础功能与新特性  190
6.1.1 运行模式  190
6.1.2 通用寄存器  191
6.1.3 CPUID指令  192
6.1.4 标志寄存器EFLAGS  193
6.1.5 控制寄存器  195
6.1.6 MSR寄存器组  199
6.2 地址空间  199
6.2.1 虚拟地址  200
6.2.2 物理地址  200
6.3 实模式  200
6.3.1 实模式概述  201
6.3.2 实模式的段寻址方式  201
6.3.3 实模式的中断向量表  201
6.4 保护模式  202
6.4.1 保护模式概述  202
6.4.2 保护模式的段管理机制  206
6.4.3 保护模式的中断/异常处理机制  214
6.4.4 保护模式的页管理机制  217
6.4.5 保护模式的地址转换过程  224
6.5 IA-32e模式  226
6.5.1 IA-32e模式概述  226
6.5.2 IA-32e模式的段管理机制  228
6.5.3 IA-32e模式的中断/异常处理机制  234
6.5.4 IA-32e模式的页管理机制  234
6.5.5 IA-32e模式的地址转换过程  237
第7章 完善BootLoader功能  238
7.1 实模式的寻址瓶颈  238
7.1.1 错综复杂的1 MB物理地址空间  238
7.1.2 突破1 MB物理内存瓶颈  239
7.1.3 实模式下的4 GB线性地址寻址  240
7.2 获取物理地址空间信息  240
7.3 操作系统引导加载阶段的内存空间划分  242
7.4 U盘启动  244
7.4.1 USB-FDD、USB-ZIP和USB-HDD启动模式的简介  244
7.4.2 将Boot引导程序移植到U盘中启动  251
7.5 在物理平台上启动操作系统  255
7.6 细说VBE功能的实现  261
7.6.1 VBE规范概述  261
7.6.2 获取物理平台的VBE相关信息  272
7.6.3 设置显示模式  279
第8章 内核主程序  282
8.1 内核主程序功能概述  282
8.2 操作系统的Makefile编译脚本  282
8.3 操作系统的kernel.lds链接脚本  286
8.4 操作系统的线性地址空间划分  289
8.5 获得处理器的固件信息  290
第9章 *级内存管理单元  297
9.1 SLAB内存池  297
9.1.1 SLAB内存池概述及相关结构体定义  298
9.1.2 SLAB内存池的创建与销毁  299
9.1.3 SLAB内存池中对象的分配与回收  302
9.2 基于SLAB内存池技术的通用内存管理单元  308
9.2.1 通用内存管理单元的初始化函数slab_init  308
9.2.2 通用内存的分配函数kmalloc  312
9.2.3 通用内存的回收函数kfree  317
9.3 调整物理页管理功能  321
9.3.1 内存管理单元结构及相关函数调整  321
9.3.2 调整alloc_pages函数  323
9.3.3 创建free_pages函数  327
9.4 页表初始化  330
9.4.1 页表重新初始化  331
9.4.2 VBE帧缓存区地址重映射  334
*10章 *级中断处理单元  337
10.1 APIC概述  337
10.2 Local APIC  338
10.2.1 Local APIC的基础信息  338
10.2.2 Local APIC整体结构及各功能描述  344
10.3 I/O APIC  352
10.3.1 I/O APIC控制器的基础信息  353
10.3.2 I/O APIC整体结构及各引脚功能  356
10.4 中断控制器的模式选择与初始化  358
10.4.1 中断模式  359
10.4.2 Local APIC控制器的初始化  362
10.4.3 I/O APIC控制器的初始化  368
10.5 *级中断处理功能  375
10.5.1 Linux的中断处理机制概述  375
10.5.2 实现中断上半部处理功能  377
*11章 设备驱动程序  382
11.1 键盘和鼠标驱动程序  382
11.1.1 键盘和鼠标控制器  382
11.1.2 完善键盘驱动  389
11.1.3 实现鼠标驱动  398
11.2 硬盘驱动程序  403
11.2.1 硬盘设备初探  403
11.2.2 完善硬盘驱动程序  418
*12章 进程管理  428
12.1 进程管理单元功能概述  428
12.2 多核处理器  429
12.2.1 超线程技术与多核技术概述  429
12.2.2 多核处理器间的IPI通信机制介绍  434
12.2.3 让我们的系统支持多核  437
12.3 进程调度器  464
12.3.1 Linux进程调度器简介  465
12.3.2 墙上时钟与定时器  468
12.3.3 内核定时器  479
12.3.4 实现进程调度功能  486
12.4 内核同步方法  498
12.4.1 原子变量  498
12.4.2 信号量  499
12.4.3 完善自旋锁  501
12.5 完善进程管理单元  503
12.5.1 完善PCB与处理器运行环境  503
12.5.2 完善进程调度器和AP处理器引导程序  508
12.5.3 关于线程  514
*13章 文件系统  516
13.1 文件系统概述  516
13.2 解析FAT32文件系统  517
13.2.1 FAT32文件系统简介  517
13.2.2 通过实例深入解析FAT32文件系统  523
13.2.3 实现基于路径名的文件系统检索功能  532
13.3 虚拟文件系统  552
13.3.1 Linux VFS简介  552
13.3.2 实现VFS  554
*14章 系统调用API库  566
14.1 系统调用API结构  566
14.2 基于POSIX规范实现系统调用API库  567
14.2.1 POSIX规范下的系统调用API简介  567
14.2.2 升级系统调用模块  568
14.2.3 基础文件操作的系统调用API实现  574
14.2.4 进程创建的系统调用API实现  599
14.2.5 内存管理的基础系统调用API实现  618
*15章 Shell命令解析器及命令  626
15.1 Shell命令解析器  626
15.1.1 Shell命令解析器概述  626
15.1.2 实现Shell命令解析器  627
15.2 基础命令  641
15.2.1 重启命令reboot  641
15.2.2 工作目录切换命令cd  642
15.2.3 目录内容显示命令ls  645
15.2.4 文件查看命令cat  654
15.2.5 程序执行命令exec  655
*16章 一个彩蛋  665
附录 术语表  676
参考资料  679


《深入探索:现代操作系统内核原理与实践》 在这信息爆炸的时代,理解我们赖以生存的数字世界的基石——操作系统——已不再是少数技术专家的专利,而是每一位渴望深入理解计算机本质的开发者和技术爱好者必备的知识。然而,市面上关于操作系统内核的书籍,往往要么过于理论化,脱离实际;要么过于浅显,流于表面。我们渴望一本能够真正带领读者深入内核,感受操作系统脉搏,并能将理论知识付诸实践的书籍。 《深入探索:现代操作系统内核原理与实践》正是这样一本为满足您的期待而生的著作。它旨在为您提供一个全面、深入且富有实践性的操作系统内核学习体验。本书将从最基础的概念出发,逐步引导您理解现代操作系统的核心组件是如何协同工作的,以及它们在底层是如何实现的。我们不会回避那些看似复杂的技术细节,而是致力于用清晰、逻辑严谨的语言,结合生动的比喻和详实的示例,将它们一一剖析,让您在理解理论的同时,也能建立起直观的认识。 本书的独特之处,在于其对“原理”与“实践”的完美融合。 第一部分:奠定坚实的基础——操作系统的核心概念 在本书的开篇,我们将首先为您梳理操作系统最核心的概念,为后续深入的学习打下坚实的基础。您将了解到: 操作系统的定义与演进: 从批处理系统到分时系统,再到现代的多任务、多用户操作系统,我们将回顾操作系统的发展历程,理解不同时代背景下技术选择的考量,以及这些演进如何塑造了我们今天所使用的操作系统。 进程与线程: 这是操作系统并发处理的基本单元。我们将深入探讨进程与线程的区别与联系,理解它们的生命周期管理,以及线程模型(用户级线程与内核级线程)的优劣。您将了解到如何创建、终止进程,以及在进程间如何进行通信(IPC),例如管道、消息队列、共享内存等。 内存管理: 内存是操作系统的生命线。我们将详细讲解内存管理的不同策略,包括连续分配、分页、分段以及它们的组合。您将理解虚拟内存的概念,它如何通过页表、TLB等机制实现地址转换,以及缺页中断的处理过程。我们还会探讨页面置换算法(如LRU、FIFO)的原理与实现,以及内存泄漏的检测与避免。 处理器调度: 如何在多个进程/线程之间公平有效地分配 CPU 时间,是操作系统性能的关键。我们将深入分析各种调度算法,如先来先服务(FCFS)、最短作业优先(SJF)、优先级调度、时间片轮转(Round Robin)等,并讨论它们在不同场景下的适用性。您还将接触到多级反馈队列调度等更复杂的调度策略。 同步与互斥: 在多任务环境下,共享资源的访问必须得到妥善管理,以避免竞态条件。我们将详细讲解锁(Locks)、信号量(Semaphores)、互斥量(Mutexes)等同步原语的工作原理,并探讨死锁的产生条件、检测与避免方法。您将理解临界区、原子操作等概念,并学习如何在并发环境中编写安全可靠的代码。 文件系统: 文件系统是用户与存储设备交互的接口。我们将深入剖析文件系统的基本概念,如文件、目录、inode、超级块等,并介绍不同类型的文件系统(如FAT、ext2/3/4、NTFS)的设计思想。您将理解文件操作(创建、删除、读写)在底层是如何实现的,以及文件系统的日志功能如何保证数据的一致性。 I/O 系统: 输入/输出设备是计算机与外界交互的桥梁。我们将讲解I/O系统的基本结构,包括设备驱动程序、缓冲技术、中断处理机制等。您将理解为何I/O操作通常比CPU计算慢,以及操作系统如何通过各种技术来提高I/O效率。 第二部分:动手实践——构建属于您的操作系统内核 理论的学习固然重要,但真正的理解往往来自于亲手的实践。《深入探索:现代操作系统内核原理与实践》的另一大亮点,便是其系统性的实践指导。本书将带领您一步步地构建一个简化的、但功能齐全的操作系统内核,让您在实践中巩固所学理论,并获得宝贵的开发经验。 开发环境的搭建: 我们将详细介绍如何搭建一套完整的交叉编译环境,包括选择合适的工具链(如GCC、Binutils)、配置汇编器与链接器,以及使用QEMU等模拟器进行快速的测试与调试。 引导过程的探索: 您将亲手编写并理解 bootloader 的工作流程,它是操作系统启动的第一道门。我们将从 x86 架构的 BIOS/UEFI 引导流程开始,理解如何加载您的内核到内存并跳转执行。 内核的入口与初始化: 了解内核的入口点,以及CPU在启动后需要完成的一系列初始化工作,包括设置中断向量表、初始化内存控制器、设置定时器等。 中断处理机制的实现: 您将学习如何编写中断服务程序(ISR),理解中断发生时的 CPU 状态保存与恢复,以及如何处理硬件中断和软件中断。 内存管理模块的开发: 我们将指导您实现一个简单的物理内存分配器,以及基于分页的虚拟内存管理机制,包括页表的创建与更新。 进程与线程调度器的实现: 您将亲手编写一个基于优先级的或时间片的进程调度器,并实现进程/线程的创建、切换与终止。 简单的系统调用接口: 学习如何定义和实现系统调用,为用户程序提供访问内核服务的接口,例如简单的打印输出、文件读写等。 文件系统的初步构建: 您将尝试实现一个简单的内存文件系统,理解文件和目录的结构,以及实现基本的创建、删除、读写操作。 驱动程序的编写入门: 介绍设备驱动程序的基本概念,并尝试编写一个简单的字符设备驱动程序,例如一个虚拟串口。 本书的特色: 循序渐进,由浅入深: 无论是理论讲解还是实践步骤,都力求清晰易懂,避免一开始就陷入晦涩难懂的概念。 理论联系实际: 每一项理论知识的介绍,都会紧密结合其在操作系统内核中的实际应用,并通过代码示例加以说明。 丰富的代码示例: 本书提供了大量精炼、可运行的代码示例,帮助您理解抽象的理论概念,并作为您自行开发的基础。 关注现代操作系统设计: 虽然以实现为导向,但我们也会融入现代操作系统的设计理念,例如微内核与宏内核的对比,以及高性能I/O技术的一些探讨。 强调调试与排错技巧: 在实践过程中,调试是不可避免的环节。我们将分享一些实用的调试技巧和排错思路,帮助您高效地解决问题。 适合读者: 对操作系统原理有浓厚兴趣,希望深入理解其内部工作机制的计算机科学专业学生。 希望突破“黑盒”限制,从底层理解计算机运作的软件工程师。 对底层开发、嵌入式系统、系统编程有志于深入研究的技术爱好者。 期望将理论知识转化为实际动手能力的开发者。 《深入探索:现代操作系统内核原理与实践》不仅是一本技术书籍,更是一次引导您深入计算机世界心脏的探险旅程。通过本书的学习,您将不再满足于仅仅成为一个应用程序的编写者,而是能够理解操作系统如何赋予您的程序生命,并最终能够构建出属于您自己的、具有独特功能的操作系统内核。 准备好踏上这段令人兴奋的旅程了吗?让我们一起,深入探索,构建未来!

用户评价

评分

我发现这本书在章节划分上体现了非常清晰的逻辑层次感,这对于理解一个复杂系统至关重要。它似乎是把整个操作系统切分成了若干个可以独立攻克的堡垒。从最基础的硬件初始化,到内核的调度算法,再到文件系统的初步设计,每一步都像是精心设计的关卡。我个人对它在并发与同步机制上的处理尤为好奇。在没有成熟内核框架支持的情况下,如何用最基础的指令去实现一个健壮的锁机制或信号量,无疑是对作者功底的极大考验。我期望看到它能提供详细的上下文切换流程解析,因为这是理解多任务处理的“心脏”所在。此外,如果书中能穿插一些“踩坑指南”或者设计决策的权衡分析,那就更完美了。例如,为什么选择某种特定的内存分配策略,这种选择带来的性能收益和潜在风险是什么?这种对设计取舍的坦诚交流,能让读者在构建自己系统时,具备更成熟的判断力,而不是盲目地复制粘贴代码。

评分

这本书的叙事节奏把握得非常巧妙,读起来不像是在啃一本教科书,更像是在跟随一位经验丰富的工程师进行项目实操。它没有一开始就堆砌大量的理论公式,而是选择了一条更具实践性的路径,通过逐步构建模块来自然地引出必要的理论知识。这种“先搭骨架,后填血肉”的教学方式,极大地降低了初学者的挫败感。比如,在讲解启动流程时,它应该会细致地分析BIOS/UEFI是如何将控制权移交给我们的代码的,这部分内容往往是决定读者能否成功“点亮”自己系统的关键。我特别关注它对现代处理器特性(比如分页机制、保护模式的切换)的处理深度。如果能用清晰易懂的图表来辅助解释这些复杂的硬件交互,那么这本书的阅读体验将得到质的飞跃。它所追求的,我认为不仅仅是让读者知道“是什么”,更重要的是教会他们“为什么是这样设计”,以及“如果我要修改,应该从哪里入手”。这种深入骨髓的洞察力,才是区分一本优秀系统设计书和普通教材的试金石。

评分

阅读这本书的过程,与其说是在学习一个既定的知识体系,不如说是在进行一次严肃的“逆向工程”实践。它强迫你走出舒适区,去直面那些被高级语言层层封装起来的底层魔术。我预感,这本书的价值会随着读者动手能力的增强而不断增值。那些关于段页式内存管理的图解,如果能结合实际的页表结构操作代码来展示,那么抽象的概念就会瞬间变得具象化。我特别看重它在错误处理和异常捕获方面的讲解。一个可靠的操作系统,其鲁棒性往往体现在它如何优雅地处理那些意料之外的事件。如果书中能详尽地展示如何设置中断描述符表(IDT)并编写基本的异常处理程序,那么读者在后续的开发中,遇到蓝屏(或者说内核崩溃)时,就能更有效地进行调试和定位问题。这本书显然不是为了应付考试而编写的,它承载的是一种将理论转化为可运行、可调试的真实系统的工程信念。

评分

这本书的封面设计就透露着一种硬核的理工男气息,那种纯粹的、直击本质的风格,让我这个刚接触操作系统不久的爱好者眼前一亮。从目录看,它似乎并没有过多地渲染宏大的叙事或者复杂的应用层技术,而是直接把人拉进了底层构建的现场。我最欣赏它的一点是,它没有回避那些令人望而生畏的细节,比如内存管理、中断处理这些被很多入门教程含糊带过的地方。作者似乎坚信,只有真正理解了这些“枯燥”的部分,才能真正掌握操作系统的精髓。我尤其期待它在汇编语言与C语言的结合点上能有独到的见解,毕竟,一个真正的操作系统必然是这两种语言紧密协作的产物。如果内容能像承诺的那样,引导读者亲手搭建起一个最小系统框架,那这本书的价值就不仅仅是知识的传授,更是一种实践精神的培养。我希望它能成为我书架上那本可以随时翻开,查找关键技术实现细节的“工具书”,而不是读完一遍就束之高阁的“故事书”。这种对底层刨根问底的态度,是当前市面上许多浮于表面的教程所缺乏的。

评分

这本书最吸引我的地方在于它的“自制”精神,这暗示着它提供的是一套可被完全掌控的、无黑箱的实现方案。这意味着,读者将面对的不是某一个商业操作系统的碎片化描述,而是从零开始构建一个完整生态的蓝图。我期待看到它在I/O设备驱动编写上的切入点。在没有现成库支持的情况下,如何通过端口I/O或内存映射I/O与简单的硬件(比如串口或键盘)进行通信,是检验系统是否真正“活起来”的关键一步。这种亲手点亮硬件的成就感,是任何仿真环境都无法替代的。此外,如果书中能对现代操作系统设计中的一些前沿趋势进行简要的展望或对比,哪怕只是作为拓展阅读,也会极大地提升这本书的广度。总而言之,这本书似乎在告诉我们:理论是骨架,代码是肌肉,而实践才是赋予这个“生命体”灵魂的催化剂,它提供的正是这样一套完整的、高强度的“造物”流程指南。

相关图书

本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度google,bing,sogou

© 2025 book.coffeedeals.club All Rights Reserved. 静流书站 版权所有