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

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

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


跨越数字鸿沟:从底层原理到实践应用——理解现代计算架构的基石 在这个信息爆炸的时代,我们每天都在与各种复杂的数字设备和软件打交道。从智能手机上的应用程序,到支撑庞大互联网的服务器,再到驱动我们日常工作生活的个人电脑,这一切的背后都离不开一个至关重要的核心——操作系统。然而,当我们习惯了使用各种应用时,是否曾好奇过,在这些应用之下,那个默默无闻、却又无所不能的“大脑”是如何运作的?它又是如何管理着我们计算机里的一切资源,并为我们提供如此流畅便捷的交互体验的? 本书将带你深入探索操作系统的核心奥秘,揭示现代计算架构最根本的原理。我们并非从零开始构建一个完整的操作系统,而是将注意力聚焦在理解那些构成操作系统基石的关键概念和技术,并通过精炼、易懂的案例,让你能够清晰地认识它们在整个体系中的作用和意义。我们将抛开繁琐的实现细节,以概念的清晰阐述和逻辑的严谨推演为主要驱动力,帮助你构建起对操作系统工作机制的宏观认知。 穿越时空,窥探计算机的“心跳” 想象一下,当你的手指在屏幕上轻轻一点,一个应用程序就此启动,数据在瞬间被处理,结果呈现在你眼前。这个过程仿佛是魔法,但背后却是操作系统精妙的调度和管理。本书将从最底层出发,首先为你描绘出计算机硬件的宏观图景。我们将理解中央处理器(CPU)是如何执行指令的,内存是如何存储和访问数据的,以及输入输出设备是如何与系统进行交互的。这如同为理解生命体的运作,先要了解其骨骼、肌肉和神经系统一般。 接着,我们将逐步揭示操作系统如何在硬件的基础上,建立起一套管理和协调的机制。这包括: 进程与线程管理: 当我们同时打开多个应用程序时,操作系统是如何在有限的CPU资源下,让它们井然有序地运行,互不干扰的?我们将深入理解进程的概念,它是如何被创建、调度和终止的;而线程,作为进程内部更轻量级的执行单元,又扮演着怎样的角色?你将了解到各种调度算法的权衡与选择,以及它们如何影响系统的响应速度和吞吐量。 内存管理: 计算机的内存是有限且宝贵的资源。操作系统是如何高效地分配和回收内存,确保每个程序都能获得所需的空间,同时避免冲突和浪费的?本书将阐释虚拟内存的概念,它如何通过地址映射,为每个进程提供一个独立的、连续的地址空间,从而极大地简化了程序开发,并提高了内存的利用率。你将了解分页、分段等经典的内存管理技术,以及它们在现代操作系统中的演进。 文件系统: 我们存储在计算机上的文档、图片、视频等,是如何被组织、管理和访问的?文件系统扮演着至关重要的角色。我们将探索文件系统的基本结构,目录是如何组织的,文件是如何被存储在物理介质上的,以及如何实现高效的文件读写和查找。 输入/输出(I/O)管理: 键盘、鼠标、显示器、硬盘等设备,是如何与操作系统进行通信的?I/O管理是连接硬件与软件的桥梁。本书将介绍I/O设备的特性,以及操作系统如何通过驱动程序、中断等机制,实现对这些设备的统一管理和高效利用。 并发与同步: 在多任务环境下,多个进程或线程可能需要访问共享资源。如何确保这些访问的正确性,避免数据不一致的问题?我们将探讨并发控制的挑战,以及互斥锁、信号量等同步机制的原理和应用,让你深刻理解“竞态条件”是如何被克服的。 超越概念:理解设计的哲学与演进 除了深入剖析各个核心模块的功能,本书还将引导你思考操作系统设计背后的哲学和演进。为何会有不同的操作系统,它们之间存在哪些根本性的差异?我们将探讨一些经典的操作系统设计思想,例如微内核与宏内核的优劣,以及它们如何影响系统的稳定性、可扩展性和安全性。 同时,我们也会追溯操作系统的发展历程,理解随着硬件技术的进步和应用需求的演变,操作系统是如何不断演化和创新的。从早期的批处理系统,到分时操作系统,再到现代的多处理器、分布式和实时操作系统,你将看到技术革新如何驱动着操作系统的发展,也体会到在不断变化的计算环境中,操作系统所承担的越来越重要的角色。 构建清晰的认知框架,赋能未来的学习 本书的编写宗旨是帮助你构建起一个清晰、完整的操作系统认知框架。我们力求用最简洁的语言,最直观的比喻,将最复杂的技术概念进行剥离和阐释。你不会在这里找到冗长的代码示例,也不会被大量的汇编指令所困扰。相反,我们将专注于“为什么”和“是什么”,让你理解每个设计决策背后的考量,以及每个模块在整个系统中所扮演的不可或缺的角色。 通过本书的学习,你将能够: 建立对计算机底层运作机制的深刻理解。 清晰地认识操作系统的核心组件及其功能。 掌握理解其他操作系统相关技术(如分布式系统、嵌入式系统)所需的基础知识。 培养分析和解决复杂软件系统问题的能力。 为进一步深入学习操作系统内核开发、系统优化等领域打下坚实基础。 无论你是计算机科学的学生,对底层技术充满好奇的技术爱好者,还是希望提升自身技术视野的软件工程师,本书都将为你打开一扇通往操作系统世界的大门。我们将一起,穿越数字的迷雾,理解计算的本质,让你在面对纷繁复杂的软件世界时,能够洞悉其根基,把握其脉搏。让我们一起,踏上这场探索之旅,理解那个连接硬件与软件、驱动数字世界的强大引擎。

用户评价

评分

这本书简直是打开了我对操作系统世界的大门!我之前一直觉得操作系统是个神秘而遥不可及的存在,但这本书用一种非常直观、循序渐进的方式,把那些复杂的概念一一拆解。从最基础的启动过程,到内存管理、进程调度,再到中断处理和设备驱动,作者都力求用最清晰的语言和代码示例来解释。让我印象最深刻的是,书中并没有仅仅停留在理论层面,而是提供了大量的C语言代码,让我可以跟着一步一步地去构建自己的操作系统。这种“动手实践”的学习方式,极大地增强了我的理解和信心。当我看到自己写的代码真的让一个简陋的操作系统跑起来的时候,那种成就感是难以言喻的。虽然过程中遇到不少困难,调试了很久,但每一次解决问题,都感觉自己对操作系统的理解又进了一层。这本书的目录设计也很有条理,每个章节都像一个小的里程碑,让我能够清晰地看到自己的学习进度。我尤其喜欢书中对一些底层细节的深入探讨,比如汇编语言在启动阶段的应用,以及如何与硬件进行交互。这些内容对于理解操作系统的本质至关重要。总的来说,这是一本非常扎实、有深度,同时又充满实践指导意义的书籍,强烈推荐给所有对操作系统感兴趣的开发者!

评分

作为一名有一定C语言基础但对操作系统知之甚少的开发者,我一直渴望能找到一本能够让我“亲手”构建操作系统的书籍。这本书无疑满足了我的期待,甚至超出了我的想象。作者巧妙地将理论知识与实践操作相结合,从零开始,一步步引导读者构建一个功能性的64位操作系统。我尤其欣赏书中对每一个抽象概念的具象化描述,比如在讲解内存管理时,书中详细剖析了物理地址、虚拟地址、页表等概念,并提供了相应的C语言代码实现,这让我能够直观地理解这些概念是如何在代码层面运作的。更令人惊喜的是,本书涵盖了现代操作系统中的许多核心模块,例如进程间通信(IPC)、文件系统、以及简单的用户态应用程序的加载和运行。在实现这些模块的过程中,作者并没有回避其中的复杂性,而是通过精心设计的代码片段和翔实的解释,帮助读者克服难关。每一次编译成功、每一次程序如期运行,都给我带来极大的满足感。本书提供的代码质量很高,清晰易懂,并且具有很强的可扩展性。我已经迫不及待地想在本书的基础上,进一步探索更高级的操作系统特性,比如多处理器支持、设备驱动模型的深入研究等。这本书是开启操作系统开发之旅的绝佳起点,它不仅教授了知识,更培养了解决问题的能力和对底层原理的敬畏之心。

评分

这本书给我最深刻的感受就是“颠覆”——它彻底颠覆了我对操作系统开发难度和学习方式的认知。我一直以为,写一个操作系统需要多么深厚的计算机体系结构和底层编程功底,但这本书却打破了我的固有观念。作者通过循序渐进的方式,将一个完整的操作系统设计和实现过程分解成一个个易于理解和操作的模块。从最基础的引导加载程序(bootloader)开始,到内核的初始化,再到基本的内存管理和进程调度,每一个环节都做了非常详尽的阐述,并且配套了可以直接运行和调试的C语言代码。我特别喜欢书中对各种数据结构和算法在操作系统中的应用解释,比如如何用链表管理进程,如何用位图来跟踪空闲内存页。这些具体的实现细节,让我对操作系统的工作原理有了更深刻的认识。而且,书中还涉及了一些更高级的话题,比如如何实现简单的系统调用接口,以及如何进行基本的设备驱动开发。这些内容极大地拓展了我的视野,让我对操作系统的完整性有了更全面的理解。这本书不仅仅是一本技术教程,更像是一位经验丰富的导师,带着你一步步走进操作系统的殿堂。

评分

这本书绝对是我近年来阅读过的最有价值的计算机技术书籍之一!我之前一直对操作系统的工作原理感到好奇,但市面上很多书籍要么过于理论化,要么代码晦涩难懂。这本书则完美地解决了这个问题。它以一种非常务实的方式,从零开始,指导读者如何设计和实现一个64位的C语言操作系统。我最欣赏的是,书中不仅讲解了理论知识,更提供了大量可运行的代码示例。这些代码质量很高,清晰易懂,并且能够很好地运行。作者在讲解内存管理、进程调度、中断处理等核心概念时,都用非常生动的比喻和详尽的图示,让我能够轻松理解这些复杂的底层机制。尤其是在实现文件系统和设备驱动的部分,让我对操作系统如何与外部硬件进行交互有了全新的认识。这本书让我深刻体会到了“纸上得来终觉浅,绝知此事要躬行”的道理。每一次成功的编译和运行,都给我带来了巨大的满足感和成就感。我强烈推荐这本书给所有对操作系统开发感兴趣的初学者和有经验的开发者,它绝对能帮助你打开一扇通往底层世界的大门!

评分

读完这本书,我感觉自己仿佛经历了一场“从无到有”的伟大创造。它不像其他很多理论性的操作系统教材那样枯燥晦涩,而是以一种极其生动和实用的方式,带领读者深入操作系统的心脏地带。作者的写作风格非常独特,他善于将复杂的硬件细节和软件逻辑用非常通俗易懂的比喻和流程图来解释,让我这个之前对底层开发一窍不通的人,也能逐渐掌握其中的奥秘。尤其是在讲解中断和异常处理部分,我之前一直认为这是非常高深的学问,但通过书中详尽的图示和代码示例,我得以清晰地了解到CPU是如何响应中断信号,以及操作系统又是如何进行处理的。这本书不仅提供了构建操作系统的基本框架,还提供了很多实现关键功能的指导,比如如何创建和管理进程,如何进行简单的内存分配和回收,甚至是如何编写一个能够运行在自己操作系统上的简单小程序。每当我跟着书中的代码敲打出一个功能,并成功运行起来时,那种成就感简直无法用言语形容。它让我不再觉得操作系统只是一个遥不可及的黑盒子,而是可以被理解、被掌控、甚至被创造的。这本书的价值在于它教会了我“如何去思考”操作系统的问题,而不是仅仅罗列一些概念。

相关图书

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

© 2025 book.tinynews.org All Rights Reserved. 静思书屋 版权所有