操作系统真象还原

操作系统真象还原
分享
扫描下方二维码分享到微信
打开微信,点击右上角”+“,
使用”扫一扫“即可将网页分享到朋友圈。
作者:
2016-03
版次: 1
ISBN: 9787115414342
定价: 108.00
装帧: 平装
开本: 16开
纸张: 胶版纸
页数: 759页
字数: 1281千字
正文语种: 简体中文
240人买过
  • 本书共分16章,讲解了开发一个操作系统需要的技术和知识,主要内容有:操作系统基础、部署工作环境、编写MBR主引导记录、完善MBR错误、保护模式入门、保护模式进阶和向内核迈进、中断、内存管理系统、线程、输入输出系统、用户进程、完善内核、编写硬盘驱动程序、文件系统、系统交互等核心技术。
    本书适合程序员、系统底层开发人员、操作系统爱好者阅读,也可作为大专院校相关专业师生用书和培训学校的教材。 郑钢,毕业于北京大学,前百度运维高级工程师,对操作系统有深入的研究。好运动,喜钻研,热衷于尝试前沿技术,乐于分享学习成果。 第0章一些你可能正感到迷惑的问题 1
    0.1操作系统是什么 1
    0.2你想研究到什么程度 2
    0.3写操作系统,哪些需要我来做 2
    0.4软件是如何访问硬件的 2
    0.5应用程序是什么,和操作系统是如何
    配合到一起的 3
    0.6为什么称为“陷入”内核 4
    0.7内存访问为什么要分段 4
    0.8代码中为什么分为代码段、数据段?
    这和内存访问机制中的段是一回事吗 6
    0.9物理地址、逻辑地址、有效地址、线性
    地址、虚拟地址的区别 11
    0.10什么是段重叠 12
    0.11什么是平坦模型 12
    0.12cs、ds这类sreg段寄存器,位宽是
    多少 12
    0.13什么是工程,什么是协议 13
    0.14为什么Linux系统下的应用程序不能在
    Windows系统下运行 14
    0.15局部变量和函数参数为什么要放在
    栈中 14
    0.16为什么说汇编语言比C语言快 15
    0.17先有的语言,还是先有的编译器,第1个
    编译器是怎么产生的 16
    0.18编译型程序与解释型程序的区别 19
    0.19什么是大端字节序、小端字节序 19
    0.20BIOS中断、DOS中断、Linux中断的
    区别 21
    0.21Section和Segment的区别 25
    0.22什么是魔数 29
    0.23操作系统是如何识别文件系统的 30
    0.24如何控制CPU的下一条指令 30
    0.25指令集、体系结构、微架构、编程
    语言 30
    0.26库函数是用户进程与内核的桥梁 33
    0.27转义字符与ASCII码 37
    0.28MBR、EBR、DBR和OBR各是
    什么 39
    第1章部署工作环境 42
    1.1工欲善其事,必先利其器 42
    1.2我们需要哪些编译器 42
    1.2.1世界顶级编译器GCC 42
    1.2.2汇编语言编译器新贵NASM 43
    1.3操作系统的宿主环境 43
    1.3.1什么是虚拟机 44
    1.3.2盗梦空间般的开发环境,虚拟机
    中再装一个虚拟机 45
    1.3.3virtualBox下载,安装 46
    1.3.4Linux发行版下载 46
    1.3.5Bochs下载安装 46
    1.4配置bochs 48
    1.5运行bochs 49
    第2章编写MBR主引导记录,让我们开始
    掌权 52
    2.1计算机的启动过程 52
    2.2软件接力第一棒,BIOS 52
    2.2.1实模式下的1MB内存布局 52
    2.2.2BIOS是如何苏醒的 54
    2.2.3为什么是0x7c00 56
    2.3让MBR先飞一会儿 58
    2.3.1神奇好用的$和$$,令人迷惑的
    section 58
    2.3.2NASM简单用法 60
    2.3.3请下一位选手MBR同学做
    准备 60
    第3章完善MBR 65
    3.1地址、section、vstart浅尝辄止 65
    3.1.1什么是地址 65
    3.1.2什么是section 67
    3.1.3什么是vstart 68
    3.2CPU的实模式 70
    3.2.1CPU的工作原理 71
    3.2.2实模式下的寄存器 72
    3.2.3实模式下内存分段由来 76
    3.2.4实模式下CPU内存寻址方式 78
    3.2.5栈到底是什么玩意儿 81
    3.2.6实模式下的ret 84
    3.2.7实模式下的call 85
    3.2.8实模式下的jmp 92
    3.2.9标志寄存器flags 97
    3.2.10有条件转移 99
    3.2.11实模式小结 101
    3.3让我们直接对显示器说点什么吧 101
    3.3.1CPU如何与外设通信—IO
    接口 101
    3.3.2显卡概述 105
    3.3.3显存、显卡、显示器 106
    3.3.4改进MBR,直接操作显卡 110
    3.4bochs调试方法 112
    3.4.1bochs一般用法 113
    3.4.2bochs调试实例 118
    3.5硬盘介绍 122
    3.5.1硬盘发展简史 122
    3.5.2硬盘工作原理 123
    3.5.3硬盘控制器端口 126
    3.5.4常用的硬盘操作方法 128
    3.6让MBR使用硬盘 129
    3.6.1改造MBR 130
    3.6.2实现内核加载器 134
    第4章保护模式入门 136
    4.1保护模式概述 136
    4.1.1为什么要有保护模式 136
    4.1.2实模式不是32位CPU,变成了
    16位 137
    4.2初见保护模式 137
    4.2.1保护模式之寄存器扩展 137
    4.2.2保护模式之寻址扩展 140
    4.2.3保护模式之运行模式反转 141
    4.2.4保护模式之指令扩展 145
    4.3全局描述符表 150
    4.3.1段描述符 150
    4.3.2全局描述符表GDT、局部描述
    符表LDT及选择子 155
    4.3.3打开A20地址线 157
    4.3.4保护模式的开关,CR0寄存器的
    PE位 158
    4.3.5让我们进入保护模式 158
    4.4处理器微架构简介 165
    4.4.1流水线 166
    4.4.2乱序执行 168
    4.4.3缓存 168
    4.4.4分支预测 169
    4.5使用远跳转指令清空流水线,更新段描述
    符缓冲寄存器 172
    4.6保护模式之内存段的保护 173
    4.6.1向段寄存器加载选择子时的
    保护 173
    4.6.2代码段和数据段的保护 174
    4.6.3栈段的保护 175
    第5章保护模式进阶,向内核迈进 177
    5.1获取物理内存容量 177
    5.1.1学习Linux获取内存的方法 177
    5.1.2利用BIOS中断0x15子功能
    0xe820获取内存 177
    5.1.3利用BIOS中断0x15子功能
    0xe801获取内存 179
    5.1.4利用BIOS中断0x15子功能
    0x88获取内存 180
    5.1.5实战内存容量检测 181
    5.2启用内存分页机制,畅游虚拟空间 186
    5.2.1内存为什么要分页 186
    5.2.2一级页表 188
    5.2.3二级页表 192
    5.2.4规划页表之操作系统与用户
    进程的关系 197
    5.2.5启用分页机制 198
    5.2.6用虚拟地址访问页表 204
    5.2.7快表TLB(TranslationLookaside
    Buffer)简介 206
    5.3加载内核 207
    5.3.1用C语言写内核 207
    5.3.2二进制程序的运行方法 211
    5.3.3elf格式的二进制文件 213
    5.3.4elf文件实例分析 218
    5.3.5将内核载入内存 222
    5.4特权级深入浅出 229
    5.4.1特权级那点事 229
    5.4.2TSS简介 230
    5.4.3CPL和DPL入门 232
    5.4.4门、调用门与RPL序 235
    5.4.5调用门的过程保护 240
    5.4.6RPL的前世今生 243
    5.4.7IO特权级 248
    第6章完善内核 252
    6.1函数调用约定简介 252
    6.2汇编语言和C语言混合编程 256
    6.2.1浅析C库函数与系统调用 256
    6.2.2汇编语言和C语言共同协作 259
    6.3实现自己的打印函数 261
    6.3.1显卡的端口控制 261
    6.3.2实现单个字符打印 265
    6.3.3实现字符串打印 275
    6.3.4实现整数打印 277
    6.4内联汇编 281
    6.4.1什么是内联汇编 281
    6.4.2汇编语言AT&T语法简介 281
    6.4.3基本内联汇编 283
    6.4.4扩展内联汇编 284
    6.4.5扩展内联汇编之机器模式简介 294
    第7章中断 298
    7.1中断是什么,为什么要有中断 298
    7.2操作系统是中断驱动的 299
    7.3中断分类 299
    7.3.1外部中断 299
    7.3.2内部中断 301
    7.4中断描述符表 304
    7.4.1中断处理过程及保护 306
    7.4.2中断发生时的压栈 308
    7.4.3中断错误码 310
    7.5可编程中断控制器8259A 311
    7.5.18259A介绍 311
    7.5.28259A的编程 314
    7.6编写中断处理程序 319
    7.6.1从最简单的中断处理程序
    开始 319
    7.6.2改进中断处理程序 335
    7.6.3调试实战:处理器进入中断时
    压栈出栈完整过程 339
    7.7可编程计数器/定时器8253简介 346
    7.7.1时钟—给设备打拍子 346
    7.7.28253入门 348
    7.7.38253控制字 349
    7.7.48253工作方式 350
    7.7.58253初始化步骤 353
    7.8提高时钟中断的频率,让中断来得更
    猛烈一些 354
    第8章内存管理系统 357
    8.1makefile简介 357
    8.1.1makefile是什么 357
    8.1.2makefile基本语法 358
    8.1.3跳到目标处执行 360
    8.1.4伪目标 361
    8.1.5make:递归式推导目标 362
    8.1.6自定义变量与系统变量 363
    8.1.7隐含规则 365
    8.1.8自动化变量 366
    8.1.9模式规则 367
    8.2实现assert断言 367
    8.2.1实现开、关中断的函数 367
    8.2.2实现ASSERT 370
    8.2.3通过makefile来编译 372
    8.3实现字符串操作函数 374
    8.4位图bitmap及其函数的实现 377
    8.4.1位图简介 377
    8.4.2位图的定义与实现 378
    8.5内存管理系统 381
    8.5.1内存池规划 381
    8.5.2内存管理系统第一步,分配页
    内存 388
    第9章线程 398
    9.1实现内核线程 398
    9.1.1执行流 398
    9.1.2线程到底是什么 399
    9.1.3进程与线程的关系、区别简述 402
    9.1.4进程、线程的状态 405
    9.1.5进程的身份证—PCB 405
    9.1.6实现线程的两种方式—内核或
    用户进程 406
    9.2在内核空间实现线程 409
    9.2.1简单的PCB及线程栈的实现 409
    9.2.2线程的实现 413
    9.3核心数据结构,双向链表 417
    9.4多线程调度 421
    9.4.1简单优先级调度的基础 421
    9.4.2任务调度器和任务切换 425
    第10章输入输出系统 439
    10.1同步机制——锁 439
    10.1.1排查GP异常,理解原子操作 439
    10.1.2找出代码中的临界区、互斥、
    竞争条件 444
    10.1.3信号量 445
    10.1.4线程的阻塞与唤醒 447
    10.1.5锁的实现 449
    10.2用锁实现终端输出 452
    10.3从键盘获取输入 456
    10.3.1键盘输入原理简介 456
    10.3.2键盘扫描码 457
    10.3.38042简介 463
    10.3.4测试键盘中断处理程序 465
    10.4编写键盘驱动 468
    10.4.1转义字符介绍 468
    10.4.2处理扫描码 469
    10.5环形输入缓冲区 476
    10.5.1生产者与消费者问题简述 476
    10.5.2环形缓冲区的实现 478
    10.5.3添加键盘输入缓冲区 481
    10.5.4生产者与消费者实例测试 482
    第11章用户进程 485
    11.1为什么要有任务状态段TSS 485
    11.1.1多任务的起源,很久很久
    以前…… 485
    11.1.2LDT简介 486
    11.1.3TSS的作用 488
    11.1.4CPU原生支持的任务切换
    方式 492
    11.1.5现代操作系统采用的任务
    切换方式 495
    11.2定义并初始化TSS 497
    11.3实现用户进程 501
    11.3.1实现用户进程的原理 501
    11.3.2用户进程的虚拟地址空间 501
    11.3.3为进程创建页表和3特权
    级栈 502
    11.3.4进入特权级3 505
    11.3.5用户进程创建的流程 506
    11.3.6实现用户进程—上 507
    11.3.7bss简介 513
    11.3.8实现用户进程—下 515
    11.3.9让进程跑起来—用户进程的
    调度 519
    11.3.10测试用户进程 520
    第12章进一步完善内核 523
    12.1Linux系统调用浅析 523
    12.2系统调用的实现 527
    12.2.1系统调用实现框架 527
    12.2.2增加0x80号中断描述符 527
    12.2.3实现系统调用接口 528
    12.2.4增加0x80号中断处理例程 528
    12.2.5初始化系统调用和实现
    sys_getpid 530
    12.2.6添加系统调用getpid 531
    12.2.7在用户进程中的系统调用 532
    12.2.8系统调用之栈传递参数 534
    12.3让用户进程“说话” 536
    12.3.1可变参数的原理 536
    12.3.2实现系统调用write 538
    12.3.3实现printf 539
    12.3.4完善printf 542
    12.4完善堆内存管理 545
    12.4.1malloc底层原理 545
    12.4.2底层初始化 548
    12.4.3实现sys_malloc 550
    12.4.4内存的释放 555
    12.4.5实现sys_free 558
    12.4.6实现系统调用malloc和free 562
    第13章编写硬盘驱动程序 566
    13.1硬盘及分区表 566
    13.1.1创建从盘及获取安装的
    磁盘数 566
    13.1.2创建磁盘分区表 567
    13.1.3磁盘分区表浅析 571
    13.2编写硬盘驱动程序 578
    13.2.1硬盘初始化 578
    13.2.2实现thread_yield和idle线程 582
    13.2.3实现简单的休眠函数 584
    13.2.4完善硬盘驱动程序 585
    13.2.5获取硬盘信息,扫描分区表 590
    第14章文件系统 595
    14.1文件系统概念简介 595
    14.1.1inode、间接块索引表、文件
    控制块FCB简介 595
    14.1.2项与简介 597
    14.1.3超级块与文件系统布局 599
    14.2创建文件系统 601
    14.2.1创建超级块、i结点、项 601
    14.2.2创建文件系统 603
    14.2.3挂载分区 609
    14.3文件描述符简介 612
    14.3.1文件描述符原理 612
    14.3.2文件描述符的实现 614
    14.4文件操作相关的基础函数 615
    14.4.1inode操作有关的函数 616
    14.4.2文件相关的函数 620
    14.4.3相关的函数 623
    14.4.4路径解析相关的函数 628
    14.4.5实现文件检索功能 630
    14.5创建文件 633
    14.5.1实现file_create 633
    14.5.2实现sys_open 636
    14.5.3在文件系统上创建第1个
    文件 639
    14.6文件的打开与关闭 640
    14.6.1文件的打开 640
    14.6.2文件的关闭 642
    14.7实现文件写入 643
    14.7.1实现file_write 643
    14.7.2改进sys_write及write系统
    调用 648
    14.7.3把数据写入文件 650
    14.8读取文件 651
    14.8.1实现file_read 651
    14.8.2实现sys_read与功能验证 653
    14.9实现文件读写指针定位功能 655
    14.10实现文件删除功能 657
    14.10.1回收inode 657
    14.10.2删除项 660
    14.10.3实现sys_unlink与功能验证 663
    14.11创建 665
    14.11.1实现sys_mkdir创建 666
    14.11.2创建功能验证 669
    14.12遍历 671
    14.12.1打开和关闭 671
    14.12.2读取1个项 673
    14.12.3实现sys_readdir及sys_
    rewinddir 674
    14.13删除 676
    14.13.1删除与判断空 676
    14.13.2实现sys_rmdir及功能验证 677
    14.14任务的工作 679
    14.14.1显示当前工作的原理及
    基础代码 679
    14.14.2实现sys_getcwd 681
    14.14.3实现sys_chdir改变工作 683
    14.15获得文件属性 684
    14.15.1ls命令的幕后功臣 684
    14.15.2实现sys_stat 685
    第15章系统交互 687
    15.1fork的原理与实现 687
    15.1.1什么是fork 687
    15.1.2fork的实现 689
    15.1.3添加fork系统调用与实现init
    进程 695
    15.2添加read系统调用,获取键盘输入 696
    15.3添加putchar、clear系统调用 697
    15.4实现一个简单的shell 699
    15.4.1shell雏形 699
    15.4.2添加Ctrl+u和Ctrl+l快捷键 701
    15.4.3解析键入的字符 703
    15.4.4添加系统调用 705
    15.4.5路径解析转换 708
    15.4.6实现ls、cd、mkdir、ps、rm等
    命令 712
    15.5加载用户进程 717
    15.5.1实现exec 717
    15.5.2让shell支持外部命令 723
    15.5.3加载硬盘上的用户程序执行 724
    15.5.4使用户进程支持参数 727
    15.6实现系统调用wait和exit 731
    15.6.1wait和exit的作用 731
    15.6.2孤儿进程和僵尸进程 732
    15.6.3一些基础代码 733
    15.6.4实现wait和exit 737
    15.6.5实现cat命令 741
    15.7管道 745
    15.7.1管道的原理 745
    15.7.2管道的设计 747
    15.7.3管道的实现 748
    15.7.4利用管道实现进程间通信 752
    15.7.5在shell中支持管道 754
    参考文献 760
  • 内容简介:
    本书共分16章,讲解了开发一个操作系统需要的技术和知识,主要内容有:操作系统基础、部署工作环境、编写MBR主引导记录、完善MBR错误、保护模式入门、保护模式进阶和向内核迈进、中断、内存管理系统、线程、输入输出系统、用户进程、完善内核、编写硬盘驱动程序、文件系统、系统交互等核心技术。
    本书适合程序员、系统底层开发人员、操作系统爱好者阅读,也可作为大专院校相关专业师生用书和培训学校的教材。
  • 作者简介:
    郑钢,毕业于北京大学,前百度运维高级工程师,对操作系统有深入的研究。好运动,喜钻研,热衷于尝试前沿技术,乐于分享学习成果。
  • 目录:
    第0章一些你可能正感到迷惑的问题 1
    0.1操作系统是什么 1
    0.2你想研究到什么程度 2
    0.3写操作系统,哪些需要我来做 2
    0.4软件是如何访问硬件的 2
    0.5应用程序是什么,和操作系统是如何
    配合到一起的 3
    0.6为什么称为“陷入”内核 4
    0.7内存访问为什么要分段 4
    0.8代码中为什么分为代码段、数据段?
    这和内存访问机制中的段是一回事吗 6
    0.9物理地址、逻辑地址、有效地址、线性
    地址、虚拟地址的区别 11
    0.10什么是段重叠 12
    0.11什么是平坦模型 12
    0.12cs、ds这类sreg段寄存器,位宽是
    多少 12
    0.13什么是工程,什么是协议 13
    0.14为什么Linux系统下的应用程序不能在
    Windows系统下运行 14
    0.15局部变量和函数参数为什么要放在
    栈中 14
    0.16为什么说汇编语言比C语言快 15
    0.17先有的语言,还是先有的编译器,第1个
    编译器是怎么产生的 16
    0.18编译型程序与解释型程序的区别 19
    0.19什么是大端字节序、小端字节序 19
    0.20BIOS中断、DOS中断、Linux中断的
    区别 21
    0.21Section和Segment的区别 25
    0.22什么是魔数 29
    0.23操作系统是如何识别文件系统的 30
    0.24如何控制CPU的下一条指令 30
    0.25指令集、体系结构、微架构、编程
    语言 30
    0.26库函数是用户进程与内核的桥梁 33
    0.27转义字符与ASCII码 37
    0.28MBR、EBR、DBR和OBR各是
    什么 39
    第1章部署工作环境 42
    1.1工欲善其事,必先利其器 42
    1.2我们需要哪些编译器 42
    1.2.1世界顶级编译器GCC 42
    1.2.2汇编语言编译器新贵NASM 43
    1.3操作系统的宿主环境 43
    1.3.1什么是虚拟机 44
    1.3.2盗梦空间般的开发环境,虚拟机
    中再装一个虚拟机 45
    1.3.3virtualBox下载,安装 46
    1.3.4Linux发行版下载 46
    1.3.5Bochs下载安装 46
    1.4配置bochs 48
    1.5运行bochs 49
    第2章编写MBR主引导记录,让我们开始
    掌权 52
    2.1计算机的启动过程 52
    2.2软件接力第一棒,BIOS 52
    2.2.1实模式下的1MB内存布局 52
    2.2.2BIOS是如何苏醒的 54
    2.2.3为什么是0x7c00 56
    2.3让MBR先飞一会儿 58
    2.3.1神奇好用的$和$$,令人迷惑的
    section 58
    2.3.2NASM简单用法 60
    2.3.3请下一位选手MBR同学做
    准备 60
    第3章完善MBR 65
    3.1地址、section、vstart浅尝辄止 65
    3.1.1什么是地址 65
    3.1.2什么是section 67
    3.1.3什么是vstart 68
    3.2CPU的实模式 70
    3.2.1CPU的工作原理 71
    3.2.2实模式下的寄存器 72
    3.2.3实模式下内存分段由来 76
    3.2.4实模式下CPU内存寻址方式 78
    3.2.5栈到底是什么玩意儿 81
    3.2.6实模式下的ret 84
    3.2.7实模式下的call 85
    3.2.8实模式下的jmp 92
    3.2.9标志寄存器flags 97
    3.2.10有条件转移 99
    3.2.11实模式小结 101
    3.3让我们直接对显示器说点什么吧 101
    3.3.1CPU如何与外设通信—IO
    接口 101
    3.3.2显卡概述 105
    3.3.3显存、显卡、显示器 106
    3.3.4改进MBR,直接操作显卡 110
    3.4bochs调试方法 112
    3.4.1bochs一般用法 113
    3.4.2bochs调试实例 118
    3.5硬盘介绍 122
    3.5.1硬盘发展简史 122
    3.5.2硬盘工作原理 123
    3.5.3硬盘控制器端口 126
    3.5.4常用的硬盘操作方法 128
    3.6让MBR使用硬盘 129
    3.6.1改造MBR 130
    3.6.2实现内核加载器 134
    第4章保护模式入门 136
    4.1保护模式概述 136
    4.1.1为什么要有保护模式 136
    4.1.2实模式不是32位CPU,变成了
    16位 137
    4.2初见保护模式 137
    4.2.1保护模式之寄存器扩展 137
    4.2.2保护模式之寻址扩展 140
    4.2.3保护模式之运行模式反转 141
    4.2.4保护模式之指令扩展 145
    4.3全局描述符表 150
    4.3.1段描述符 150
    4.3.2全局描述符表GDT、局部描述
    符表LDT及选择子 155
    4.3.3打开A20地址线 157
    4.3.4保护模式的开关,CR0寄存器的
    PE位 158
    4.3.5让我们进入保护模式 158
    4.4处理器微架构简介 165
    4.4.1流水线 166
    4.4.2乱序执行 168
    4.4.3缓存 168
    4.4.4分支预测 169
    4.5使用远跳转指令清空流水线,更新段描述
    符缓冲寄存器 172
    4.6保护模式之内存段的保护 173
    4.6.1向段寄存器加载选择子时的
    保护 173
    4.6.2代码段和数据段的保护 174
    4.6.3栈段的保护 175
    第5章保护模式进阶,向内核迈进 177
    5.1获取物理内存容量 177
    5.1.1学习Linux获取内存的方法 177
    5.1.2利用BIOS中断0x15子功能
    0xe820获取内存 177
    5.1.3利用BIOS中断0x15子功能
    0xe801获取内存 179
    5.1.4利用BIOS中断0x15子功能
    0x88获取内存 180
    5.1.5实战内存容量检测 181
    5.2启用内存分页机制,畅游虚拟空间 186
    5.2.1内存为什么要分页 186
    5.2.2一级页表 188
    5.2.3二级页表 192
    5.2.4规划页表之操作系统与用户
    进程的关系 197
    5.2.5启用分页机制 198
    5.2.6用虚拟地址访问页表 204
    5.2.7快表TLB(TranslationLookaside
    Buffer)简介 206
    5.3加载内核 207
    5.3.1用C语言写内核 207
    5.3.2二进制程序的运行方法 211
    5.3.3elf格式的二进制文件 213
    5.3.4elf文件实例分析 218
    5.3.5将内核载入内存 222
    5.4特权级深入浅出 229
    5.4.1特权级那点事 229
    5.4.2TSS简介 230
    5.4.3CPL和DPL入门 232
    5.4.4门、调用门与RPL序 235
    5.4.5调用门的过程保护 240
    5.4.6RPL的前世今生 243
    5.4.7IO特权级 248
    第6章完善内核 252
    6.1函数调用约定简介 252
    6.2汇编语言和C语言混合编程 256
    6.2.1浅析C库函数与系统调用 256
    6.2.2汇编语言和C语言共同协作 259
    6.3实现自己的打印函数 261
    6.3.1显卡的端口控制 261
    6.3.2实现单个字符打印 265
    6.3.3实现字符串打印 275
    6.3.4实现整数打印 277
    6.4内联汇编 281
    6.4.1什么是内联汇编 281
    6.4.2汇编语言AT&T语法简介 281
    6.4.3基本内联汇编 283
    6.4.4扩展内联汇编 284
    6.4.5扩展内联汇编之机器模式简介 294
    第7章中断 298
    7.1中断是什么,为什么要有中断 298
    7.2操作系统是中断驱动的 299
    7.3中断分类 299
    7.3.1外部中断 299
    7.3.2内部中断 301
    7.4中断描述符表 304
    7.4.1中断处理过程及保护 306
    7.4.2中断发生时的压栈 308
    7.4.3中断错误码 310
    7.5可编程中断控制器8259A 311
    7.5.18259A介绍 311
    7.5.28259A的编程 314
    7.6编写中断处理程序 319
    7.6.1从最简单的中断处理程序
    开始 319
    7.6.2改进中断处理程序 335
    7.6.3调试实战:处理器进入中断时
    压栈出栈完整过程 339
    7.7可编程计数器/定时器8253简介 346
    7.7.1时钟—给设备打拍子 346
    7.7.28253入门 348
    7.7.38253控制字 349
    7.7.48253工作方式 350
    7.7.58253初始化步骤 353
    7.8提高时钟中断的频率,让中断来得更
    猛烈一些 354
    第8章内存管理系统 357
    8.1makefile简介 357
    8.1.1makefile是什么 357
    8.1.2makefile基本语法 358
    8.1.3跳到目标处执行 360
    8.1.4伪目标 361
    8.1.5make:递归式推导目标 362
    8.1.6自定义变量与系统变量 363
    8.1.7隐含规则 365
    8.1.8自动化变量 366
    8.1.9模式规则 367
    8.2实现assert断言 367
    8.2.1实现开、关中断的函数 367
    8.2.2实现ASSERT 370
    8.2.3通过makefile来编译 372
    8.3实现字符串操作函数 374
    8.4位图bitmap及其函数的实现 377
    8.4.1位图简介 377
    8.4.2位图的定义与实现 378
    8.5内存管理系统 381
    8.5.1内存池规划 381
    8.5.2内存管理系统第一步,分配页
    内存 388
    第9章线程 398
    9.1实现内核线程 398
    9.1.1执行流 398
    9.1.2线程到底是什么 399
    9.1.3进程与线程的关系、区别简述 402
    9.1.4进程、线程的状态 405
    9.1.5进程的身份证—PCB 405
    9.1.6实现线程的两种方式—内核或
    用户进程 406
    9.2在内核空间实现线程 409
    9.2.1简单的PCB及线程栈的实现 409
    9.2.2线程的实现 413
    9.3核心数据结构,双向链表 417
    9.4多线程调度 421
    9.4.1简单优先级调度的基础 421
    9.4.2任务调度器和任务切换 425
    第10章输入输出系统 439
    10.1同步机制——锁 439
    10.1.1排查GP异常,理解原子操作 439
    10.1.2找出代码中的临界区、互斥、
    竞争条件 444
    10.1.3信号量 445
    10.1.4线程的阻塞与唤醒 447
    10.1.5锁的实现 449
    10.2用锁实现终端输出 452
    10.3从键盘获取输入 456
    10.3.1键盘输入原理简介 456
    10.3.2键盘扫描码 457
    10.3.38042简介 463
    10.3.4测试键盘中断处理程序 465
    10.4编写键盘驱动 468
    10.4.1转义字符介绍 468
    10.4.2处理扫描码 469
    10.5环形输入缓冲区 476
    10.5.1生产者与消费者问题简述 476
    10.5.2环形缓冲区的实现 478
    10.5.3添加键盘输入缓冲区 481
    10.5.4生产者与消费者实例测试 482
    第11章用户进程 485
    11.1为什么要有任务状态段TSS 485
    11.1.1多任务的起源,很久很久
    以前…… 485
    11.1.2LDT简介 486
    11.1.3TSS的作用 488
    11.1.4CPU原生支持的任务切换
    方式 492
    11.1.5现代操作系统采用的任务
    切换方式 495
    11.2定义并初始化TSS 497
    11.3实现用户进程 501
    11.3.1实现用户进程的原理 501
    11.3.2用户进程的虚拟地址空间 501
    11.3.3为进程创建页表和3特权
    级栈 502
    11.3.4进入特权级3 505
    11.3.5用户进程创建的流程 506
    11.3.6实现用户进程—上 507
    11.3.7bss简介 513
    11.3.8实现用户进程—下 515
    11.3.9让进程跑起来—用户进程的
    调度 519
    11.3.10测试用户进程 520
    第12章进一步完善内核 523
    12.1Linux系统调用浅析 523
    12.2系统调用的实现 527
    12.2.1系统调用实现框架 527
    12.2.2增加0x80号中断描述符 527
    12.2.3实现系统调用接口 528
    12.2.4增加0x80号中断处理例程 528
    12.2.5初始化系统调用和实现
    sys_getpid 530
    12.2.6添加系统调用getpid 531
    12.2.7在用户进程中的系统调用 532
    12.2.8系统调用之栈传递参数 534
    12.3让用户进程“说话” 536
    12.3.1可变参数的原理 536
    12.3.2实现系统调用write 538
    12.3.3实现printf 539
    12.3.4完善printf 542
    12.4完善堆内存管理 545
    12.4.1malloc底层原理 545
    12.4.2底层初始化 548
    12.4.3实现sys_malloc 550
    12.4.4内存的释放 555
    12.4.5实现sys_free 558
    12.4.6实现系统调用malloc和free 562
    第13章编写硬盘驱动程序 566
    13.1硬盘及分区表 566
    13.1.1创建从盘及获取安装的
    磁盘数 566
    13.1.2创建磁盘分区表 567
    13.1.3磁盘分区表浅析 571
    13.2编写硬盘驱动程序 578
    13.2.1硬盘初始化 578
    13.2.2实现thread_yield和idle线程 582
    13.2.3实现简单的休眠函数 584
    13.2.4完善硬盘驱动程序 585
    13.2.5获取硬盘信息,扫描分区表 590
    第14章文件系统 595
    14.1文件系统概念简介 595
    14.1.1inode、间接块索引表、文件
    控制块FCB简介 595
    14.1.2项与简介 597
    14.1.3超级块与文件系统布局 599
    14.2创建文件系统 601
    14.2.1创建超级块、i结点、项 601
    14.2.2创建文件系统 603
    14.2.3挂载分区 609
    14.3文件描述符简介 612
    14.3.1文件描述符原理 612
    14.3.2文件描述符的实现 614
    14.4文件操作相关的基础函数 615
    14.4.1inode操作有关的函数 616
    14.4.2文件相关的函数 620
    14.4.3相关的函数 623
    14.4.4路径解析相关的函数 628
    14.4.5实现文件检索功能 630
    14.5创建文件 633
    14.5.1实现file_create 633
    14.5.2实现sys_open 636
    14.5.3在文件系统上创建第1个
    文件 639
    14.6文件的打开与关闭 640
    14.6.1文件的打开 640
    14.6.2文件的关闭 642
    14.7实现文件写入 643
    14.7.1实现file_write 643
    14.7.2改进sys_write及write系统
    调用 648
    14.7.3把数据写入文件 650
    14.8读取文件 651
    14.8.1实现file_read 651
    14.8.2实现sys_read与功能验证 653
    14.9实现文件读写指针定位功能 655
    14.10实现文件删除功能 657
    14.10.1回收inode 657
    14.10.2删除项 660
    14.10.3实现sys_unlink与功能验证 663
    14.11创建 665
    14.11.1实现sys_mkdir创建 666
    14.11.2创建功能验证 669
    14.12遍历 671
    14.12.1打开和关闭 671
    14.12.2读取1个项 673
    14.12.3实现sys_readdir及sys_
    rewinddir 674
    14.13删除 676
    14.13.1删除与判断空 676
    14.13.2实现sys_rmdir及功能验证 677
    14.14任务的工作 679
    14.14.1显示当前工作的原理及
    基础代码 679
    14.14.2实现sys_getcwd 681
    14.14.3实现sys_chdir改变工作 683
    14.15获得文件属性 684
    14.15.1ls命令的幕后功臣 684
    14.15.2实现sys_stat 685
    第15章系统交互 687
    15.1fork的原理与实现 687
    15.1.1什么是fork 687
    15.1.2fork的实现 689
    15.1.3添加fork系统调用与实现init
    进程 695
    15.2添加read系统调用,获取键盘输入 696
    15.3添加putchar、clear系统调用 697
    15.4实现一个简单的shell 699
    15.4.1shell雏形 699
    15.4.2添加Ctrl+u和Ctrl+l快捷键 701
    15.4.3解析键入的字符 703
    15.4.4添加系统调用 705
    15.4.5路径解析转换 708
    15.4.6实现ls、cd、mkdir、ps、rm等
    命令 712
    15.5加载用户进程 717
    15.5.1实现exec 717
    15.5.2让shell支持外部命令 723
    15.5.3加载硬盘上的用户程序执行 724
    15.5.4使用户进程支持参数 727
    15.6实现系统调用wait和exit 731
    15.6.1wait和exit的作用 731
    15.6.2孤儿进程和僵尸进程 732
    15.6.3一些基础代码 733
    15.6.4实现wait和exit 737
    15.6.5实现cat命令 741
    15.7管道 745
    15.7.1管道的原理 745
    15.7.2管道的设计 747
    15.7.3管道的实现 748
    15.7.4利用管道实现进程间通信 752
    15.7.5在shell中支持管道 754
    参考文献 760
查看详情
相关图书 / 更多
操作系统真象还原
操作系统原理及应用(第2版)(微课版)()
陈敏;许雪林;汤龙梅
操作系统真象还原
操作系统实验教程——Web服务器性能优化
鲁强
操作系统真象还原
操作系统原理
方钰;邓蓉;陈闳中
操作系统真象还原
操作系统实验教程(Windows+Linux)
袁宝华;李宁;顾玉宛;庄丽华;梁久祯
操作系统真象还原
操作系统原理及Linux内核分析(第3版)
李芳;刘晓春;李东海
操作系统真象还原
操作系统
罗宇
操作系统真象还原
操作系统原理 第2版
金海溶 周苏 主编
操作系统真象还原
操作系统概念(原书第10版)
[美]亚伯拉罕 西尔伯沙茨(美)彼得 贝尔 高尔文(美)格雷格 加涅
操作系统真象还原
操作系统原理(第2版)
黑新宏
操作系统真象还原
操作系统原理
作者
操作系统真象还原
操作系统
常颖、常大俊、李依霖 编
操作系统真象还原
操作系统:原理与实现
陈海波