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

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

田宇 著
图书标签:
  • 操作系统
  • 自制操作系统
  • C语言
  • 64位操作系统
  • 内核开发
  • 系统编程
  • 嵌入式系统
  • 底层开发
  • 计算机原理
  • 教程
想要找书就要到 静流书站
立刻按 ctrl+D收藏本页
你会得到大惊喜!!
店铺: 一键团图书专营店
出版社: 人民邮电出版社
ISBN:9787115475251
商品编码:28650430611
包装:平装
开本: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


《从零构建:我的64位操作系统开发实战》 前言 在这个数字时代,我们每天都在享受着操作系统带来的便利,但你是否曾好奇过,究竟是什么在幕后驱动着这一切?是什么让我们的电脑能够响应指令、管理硬件、运行各种程序?《从零构建:我的64位操作系统开发实战》将带你踏上一段深度探索之旅,深入操作系统的核心,亲手打造一个属于自己的64位操作系统。本书并非空泛的概念讲解,而是一部充满实践精神的教程,通过大量的C语言代码示例和详尽的原理剖析,引导你一步步理解并实现一个完整的操作系统。 本书概览 本书的核心目标是让你掌握构建一个现代64位操作系统的关键技术和核心组件。我们将从最基础的引导加载程序(Bootloader)开始,逐步构建起内存管理、进程调度、中断处理、设备驱动等一系列操作系统的核心要素。不同于其他理论性过强的书籍,《从零构建》将重点放在“如何做”,通过手把手的实践,让你真正理解每个环节的工作原理。 核心章节精讲 1. 初识引导:操作系统加载的起点 BIOS与UEFI: 理解计算机启动过程中BIOS(Basic Input/Output System)和UEFI(Unified Extensible Firmware Interface)的作用,它们如何加载操作系统。 引导加载程序(Bootloader): 深入学习引导加载程序的设计原理,包括它如何读取操作系统内核,并将其加载到内存中。我们将使用汇编语言编写一个简单的Bootloader,为后续的C语言开发奠定基础。 实模式与保护模式的转换: 讲解x86架构下从16位实模式到32位保护模式,再到64位长模式的切换过程,这是构建64位操作系统的关键一步。 2. 内核基石:搭建操作系统的核心框架 C语言与汇编的融合: 学习如何在C语言环境中嵌入汇编代码,以完成一些低级硬件操作和模式切换。 初始化内核: 编写主内核函数,进行必要的硬件初始化,设置中断描述符表(IDT)、全局描述符表(GDT)等关键数据结构。 中断处理: 深入理解中断的机制,包括硬件中断和软件中断。我们将实现中断服务例程(ISR),学习如何捕获和响应中断,这是操作系统与硬件交互的基石。 异常处理: 学习如何处理CPU产生的各种异常,例如除零错误、页错误等,确保系统的健壮性。 3. 内存管理:让程序有序运行的生命线 物理内存管理: 讲解如何分配和释放物理内存,避免内存冲突。我们将实现一个简单的伙伴系统(Buddy System)或位图(Bitmap)算法来管理物理内存。 虚拟内存: 深度解析虚拟内存的概念,包括页表、分页机制。学习如何建立页表,实现地址映射,为进程隔离和内存保护打下基础。 内存分配器(Heap): 实现内核级别的内存分配器,为内核模块和用户态程序提供动态内存分配服务。 4. 进程与线程:多任务处理的灵魂 进程概念与PCB: 理解进程是什么,以及进程控制块(PCB)在操作系统中的作用。学习如何创建和销毁进程。 进程调度: 介绍常见的进程调度算法,如先来先服务(FCFS)、时间片轮转(Round Robin)、优先级调度等。我们将实现一个简单的调度器,让多个进程能够交替运行。 线程概念与TSS: 区分进程与线程,理解线程的优势。学习线程的创建、同步和通信。 上下文切换(Context Switching): 深入剖析上下文切换的过程,了解CPU寄存器的保存和恢复,以及它对多任务执行的重要性。 5. 同步与通信:协调进程与线程的利器 互斥锁(Mutex): 学习如何使用互斥锁来保护共享资源,避免数据竞争。 信号量(Semaphore): 理解信号量的原理,并学习如何使用它来实现进程间的同步。 条件变量(Condition Variable): 掌握条件变量的使用,用于解决生产者-消费者等经典的同步问题。 消息队列(Message Queue): 实现简单的消息队列机制,用于进程间的数据传递。 6. 设备驱动:连接硬件与软件的桥梁 键盘驱动: 学习如何编写键盘驱动,捕获用户的键盘输入,并将其传递给内核。 屏幕(VGA)驱动: 实现简单的屏幕驱动,用于在屏幕上显示文本信息,这是操作系统可视化的基础。 定时器驱动: 实现定时器中断,为时间片轮转等调度算法提供时间基准。 硬盘(IDE/AHCI)驱动(可选): 介绍如何与存储设备进行交互,为后续的文件系统开发打下基础。 7. 文件系统:组织和管理数据的系统 文件系统概念: 讲解文件、目录、inode、superblock等基本概念。 简单文件系统实现: 从一个非常简单的文件系统开始,例如FAT(File Allocation Table)的简化版本,理解其结构和操作。 磁盘I/O: 学习如何进行磁盘的读写操作,将数据持久化到存储介质。 8. 用户态与内核态:权限的隔离与切换 系统调用(System Call): 讲解系统调用的概念,以及用户态程序如何通过系统调用请求内核服务。 系统调用接口设计: 设计并实现一套基础的系统调用接口。 用户态程序的加载与运行: 学习如何加载和运行简单的用户态程序。 本书特色 全程C语言实现: 所有的代码都将使用标准C语言编写,让你能够专注于操作系统本身的逻辑,而无需学习过多的特定平台汇编。 详尽的代码示例: 每一章节都配有可运行、可调试的C语言代码示例,帮助你直观地理解理论。 循序渐进的学习路径: 从最基础的Bootloader到相对复杂的文件系统,内容组织科学,难度逐步提升。 原理与实践并重: 不仅讲解“是什么”,更强调“为什么”和“怎么做”,让你知其然,更知其所以然。 构建一个可工作的微型操作系统: 最终,你将能够构建一个能够启动、运行简单程序、进行基本设备交互的64位操作系统。 适合读者 对操作系统底层原理充满好奇的计算机科学专业的学生。 希望深入理解计算机工作原理的程序员。 有志于从事操作系统开发、嵌入式系统开发等领域的开发者。 任何对挑战自我、构建复杂系统感兴趣的技术爱好者。 学习本书的收获 通过学习《从零构建:我的64位操作系统开发实战》,你将: 深刻理解操作系统的核心机制: 掌握内存管理、进程调度、中断处理、设备驱动等关键技术。 掌握C语言进行低级系统编程的能力: 学习如何在C语言中操作硬件,实现复杂的系统逻辑。 建立完整的操作系统开发思维: 能够从宏观到微观,设计和实现一个完整的操作系统。 提升解决复杂问题的能力: 操作系统开发是一个充满挑战的过程,你将锻炼出强大的问题分析和解决能力。 为更高级的系统开发打下坚实基础: 无论你未来从事分布式系统、嵌入式系统还是云计算等领域,本书所学都将为你提供宝贵的财富。 结语 操作系统是现代计算的基石,而亲手构建一个操作系统,则是对计算原理最深刻的理解。本书将是你开启这段激动人心旅程的理想伙伴。让我们一起,从零开始,用C语言,构建属于你的64位操作系统!

用户评价

评分

这是一本能够改变你对编程看法的书。我之前一直以为,写出能跑通的代码就是目的,但读了这本书之后,我才意识到,还有更深层次的追求。它不仅仅讲了“怎么做”,更讲了“为什么这样做”。书中对于各种设计模式、算法和数据结构的分析,都带着一种“解构”的智慧,让你明白这些工具背后的原理和适用场景。我印象最深刻的是关于并发编程的部分,作者用非常生动的例子,展示了多线程环境下可能出现的各种问题,以及如何利用锁、信号量等机制来解决这些问题。这让我意识到,并发编程并非易事,需要非常细致和严谨的设计。这本书最大的价值在于,它培养了我的“工程思维”,让我能够从更高的维度去审视代码和系统,不仅仅关注功能实现,更会思考性能、可靠性、安全性和可维护性。

评分

这本书带来的震撼,远超我最初的期待。它不仅仅是一本技术书籍,更像是一堂关于“思考”的课程。作者的写作风格非常独特,他不是简单地罗列知识点,而是通过提出问题、引导读者思考,然后一步步揭示答案。这种互动式的阅读体验,让我感觉自己像是在和一位经验丰富的工程师进行一对一的交流。书中对于一些经典计算机科学问题的探讨,比如算法的效率、数据结构的权衡,以及如何进行性能优化,都充满了智慧和洞察力。我特别喜欢其中关于“设计决策”的讨论,作者会解释为什么在某个特定场景下会选择某种方案,而放弃另一种,这让我明白,好的设计往往是基于对各种因素的权衡和取舍。读完这本书,我感觉自己的编程思维方式得到了极大的提升,不再是单纯地写出能运行的代码,而是开始思考如何写出更健壮、更高效、更易于维护的代码。

评分

这本《深入理解计算机系统》确实是一本让我爱不释手的巨著。它以一种非常系统和全面的方式,剖析了现代计算机系统是如何工作的。从最底层的二进制表示,到处理器指令集、存储器层次结构,再到链接器、运行时内存管理,最后延伸到系统级I/O和并发编程,作者们循序渐进地将复杂概念呈现出来,而且逻辑严谨,引人入胜。我尤其欣赏书中大量的插图和清晰的图示,它们极大地帮助我理解了那些抽象的概念,比如虚拟内存的页表查找过程,或者多线程同步时的竞争条件。我尝试着按照书中的例子动手实践,运行那些代码片段,观察它们在不同环境下的表现,这种“实践出真知”的学习方式让我受益匪浅。虽然书中内容确实庞大,但每一次重读都会有新的体会和更深的理解,感觉自己对计算机底层运作的认识又上了一个台阶。这本书绝对是计算机科学专业学生以及任何想深入了解计算机系统工作原理的开发者的必备读物。

评分

坦白说,这本书的阅读门槛确实不低,但一旦你跨过了那个最初的“坎”,它带来的回报是巨大的。作者的文字功底非常了得,即使是那些极其晦涩的技术概念,在他笔下也变得生动有趣。我特别喜欢书中对于“错误处理”和“异常机制”的探讨,这部分内容往往是很多教程容易忽略的,但它却是构建健壮系统不可或缺的一部分。作者通过大量的实际案例,展示了在复杂系统中,如何预见和处理各种潜在的错误,以及如何设计优雅的异常处理流程。另外,书中对于“调试技巧”的介绍也相当实用,它分享了一些非常有效的定位和解决bug的方法,这对我日常的开发工作提供了很大的帮助。总的来说,这本书是一次深入骨髓的学习体验,它让我对软件开发的复杂性和艺术性有了全新的认识,也让我对自己的技术能力有了更高的要求。

评分

我花了很长时间才消化完这本书,因为它的内容实在太丰富了。从操作系统内核的调度算法,到文件系统的实现细节,再到网络通信的协议栈,它几乎涵盖了操作系统设计的方方面面。最令我印象深刻的是,作者并没有回避那些复杂的、充满挑战的部分,而是用一种清晰易懂的语言进行了阐述。我尤其对书中关于进程和线程管理的章节情有独钟,里面详细介绍了各种调度策略的优缺点,以及它们在实际应用中是如何被调优的。另外,文件系统的设计部分也让我大开眼界,理解了不同文件系统的组织方式和存取机制,对数据在磁盘上的存储有了更直观的认识。这本书的知识密度很高,需要读者投入大量的精力和时间去学习和实践,但一旦掌握,它将为你构建起坚实的操作系统知识体系,让你在面对各种操作系统相关的问题时,都能游刃有余。

相关图书

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

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