30天自制操作系统.pdf

30天自制操作系统.pdf
 

书籍描述

编辑推荐
39.1K迷你系统,实现多任务、汉字显示、文件压缩,还能听歌看图玩游戏。拥有《30天自制操作系统》一书,只需30天,从零开始编写一个五脏俱全的图形操作系统将不再只是个梦想。 日本编程天才川合秀实,将通过本书,揭开CPU、内存、磁盘以及操作系统底层工作模式的神秘面纱。

作者简介
《30天自制操作系统》作者川合秀实(Hidemi Kawai),生于1975年,是一位以“轻量化”编程思想见长的“非主流”开发者。2000年因自行开发的OSASK项目而名声大噪。OSASK是一个开源的32位微型操作系统,它并非以Linux等内核为基础,而是完全从零开始开发,在一张软盘的容量下实现了GUI、多任务、多语言等高级特性,启动时间只需1秒。本书的内容可以看成是作者以OSASK为蓝本,教会读者从零开始开发一个操作系统,同时可以让初学者在编写操作系统的过程中,了解操作系统背后更多的知识。

目录
第0天 着手开发之前
1 前言
2 何谓操作系统
3 开发操作系统的各种方法
4 无知则无畏
5 如何开发操作系统
6 操作系统开发中的困难
7 学习本书时的注意事项(要!)
8 各章内容摘要
第1天 从计算机结构到汇编程序入门
第1天 从计算机结构到汇编程序入门
1先动手操作
2究竟做了些什么
3初次体验汇编程序
4加工润色
第2天 汇编语言学习与Makefile入门
1介绍文本编辑器
2继续开发
3先制作启动区
4Makefile入门
第3天 进入32位模式并导入C语言
1制作真正的IPL
2试错
3读到18扇区
4读入10个柱面
5着手开发操作系统
6从启动区执行操作系统
7确认操作系统的执行情况
832位模式前期准备
9开始导入C语言
10实现HLT(harib00j)
第4天 C语言与画面显示的练习
1用C语言实现内存写入(harib01a)
2条纹图案( harib01b)
3挑战指针(harib01c)
4指针的应用(1)(hari01d)
5指针的应用(2)(harib01e)
6色号设定(harib01f)
7绘制矩形(harib01g)
8今天的成果(harib01h)
第5天 结构体、文字显示与GDT/IDT初始化
1接收启动信息(harib02a)
2试用结构体(harib02b)
3试用箭头记号(harib02c)
4显示字符(harib02d)
5增加字体(harib02e)
6显示字符串(harib02f)
7显示变量值(harib02g)
8显示鼠标指针(harib02h)
9GDT与IDT的初始化(harib02i)
第6天 分割编译与中断处理
1分割源文件(harib03a)
2整理Makefile(harib03b)
3整理头文件(harib03c)
4意犹未尽
5初始化PIC(harib03d)
6中断处理程序的制作(harib03e)
第7天 FIFO与鼠标控制
1获取按键编码(hiarib04a)
2加快中断处理(hiarib04b)
3制作FIFO缓冲区(hiarib04c)
4改善FIFO缓冲区(hiarib04d)
5整理FIFO缓冲区(hiarib04e)
6总算讲到鼠标了(harib04f)
7从鼠标接受数据(harib04g)
第8天 鼠标控制与32位模式切换
1鼠标解读(1)(harib05a)
2稍事整理( harib05b)
3鼠标解读(2)(harib05c)
4移动鼠标指针(harib05d)
5通往32位模式之路
第9天 内存管理
1 整理源文件(harib06a)
2内存容量检查(1)(harib06b)
3内存容量检查(2)(harib06c)
4挑战内存管理(harib06d)
第10天 叠加处理
1内存管理(续)(harib07a)
2叠加处理(harib07b)
3提高叠加处理速度(1)(harib07c)
4提高叠加处理速度(2)(harib07d)
第11天 制作窗口
1鼠标显示问题(haLrib08a)
2实现画面外的支持(harib08b)
3shtctl的指定省略(harib08c)
4显示窗口(harib08d)
5小实验(harib08e)
6高速计数器(harib08f)
7消除闪烁(1)(harib08g)
8消除闪烁(2)(harib08h)
第12天定时器(1)
1使用定时器(harib09a)
2计量时间(harib09b)
3超时功能(harib09c)
4设定多个定时器(harib09d)
5加快中断处理(1)(harib09e)
6加快中断处理(2)(harib09f)
7加快中断处理(3)(harib09g)
第13天 定时器(2)
1简化字符串显示(harib10a)
2重新调整FIFO缓冲区(1)(hariblOb)
3测试性能( harib10c~harib10f)
4重新调整FIFO缓冲区(2)(harib10g)
5加快中断处理(4)(hari10h)
6使用“哨兵”简化程序(harib10i)
第14天 高分辨率及键盘输入
1继续测试性能( harib11a~harib11c)
2提高分辨率(1)(harib11d)
3提高分辨率(2)(harib11e)
4键盘输入(1)(harib11f)
5键盘输入(2)(harib11g)
6追记内容(1)(harib11h)
7追记内容(2)(harib11i)
第15天 多任务(1)
1挑战任务切换(harib12a)
2任务切换进阶(harib12b)
3做个简单的多任务(1) (harib12c)
4做个简单的多任务(2)(harib12d)
5提高运行速度(harib12e)
6测试运行速度(haribl2f)
7多任务进阶(harib12g)
第16天 多任务(2)
1任务管理自动化(harib13a)
2让任务休眠(harib13b)
3增加窗口数量(haribl3c)
4设定任务优先级(1)(harib13d)
5设定任务优先级(2)(harib13e)
第17天 命令行窗口
1闲置任务(harib14a)
2创建命令行窗口(harib14b)
3切换输入窗口(harib14c)
4实现字符输入(harib14d)
5符号的输入(harib14e)
6大写字母与小写字母(harib14f)
7对各种锁定键的支持( harib14g)
第18天 dir命令
1控制光标闪烁(1)(harib15a)
2控制光标闪烁(2)(harib15b)
3对回车键的支持(harib15c)
4对窗口滚动的支持(harib15d)
5 mem命令(haribl5e)
6 cls命令(harib15f)
7 dir命令(harib15g)
第19天 应用程序
1type命令(harib16a)
2 type命令改良(harib16b)
3对FAT的支持(harib16c)
4代码整理( harib16d)
5第一个应用程序(harib16e)
第20天 API
1程序整理(harib17a)
2显示单个字符的API(1)(harib17b)
3显示单个字符的API( 2)(harib17c)
4结束应用程序(harib17d)一
5不随操作系统版本而改变的API(harib17e)
6为应用程序自由命名(harib17f)
7当心寄存器(harib17g)
8用API显示字符串(harib17h)
第21天 保护操作系统
1攻克难题——字符串显示API(harib18a)
2用C语言编写应用程序(harib18b)
3保护操作系统(1)(harib18c)
4保护操作系统(2)(harib18d)
5对异常的支持(harib18e)
6保护操作系统(3)(harib18f)
7保护操作系统(4)(harib18g)
第22天 用C语言编写应用程序
1保护操作系统(5)(harib19a)
2帮助发现bug(harib19b)
3强制结束应用程序(harib19c)
4用C语言显示字符串(1)(harib19d)
5用C语言显示字符串(2)(harib19e)
6显示窗口(harib19f)
7在窗口中描绘字符和方块(harib19g)
第23天 图形处理相关
1编写malloc(harib20a),
2画点(harib20b)
3刷新窗口(harib20c)
4画直线(harib20d)
5关闭窗口( harib20e)
6键盘输入API(harib20f),
7用键盘输入来消遣一下(harib20g)
8强制结束并关闭窗口(harib20h)
第24天 窗口操作
1窗口切换(1)(harib21a)
2窗口切换(2)(harib21b)
3移动窗口(harib21c)
4用鼠标关闭窗口(harib21d)
5将输入切换到应用程序窗口(harib21e)
6用鼠标切换输入窗口(harib21f)
7定时器API(harib2lg)
8取消定时器(harib21h)
第25天 增加命令行窗口
1蜂鸣器发声(harib22a)
2增加更多的颜色(1)(harib22b)
3增加更多的颜色(2)(harib22c)
4窗口初始位置(harib22d)
5增加命令行窗口(1)(harib22e)
6增加命令行窗口(2)(harib22f)
7增加命令行窗口(3)(harib22g)
8增加命令行窗口(4)( harib22h)
9变得更像真正的操作系统(1)(harib221)
10变得更像真正的操作系统(2)(harib22j)
第26天 为窗口移动提速
1提高窗口移动速度(1)(harib23a)
2提高窗口移动速度(2)(harib23b)
3提高窗口移动速度(3)(harib23c)
4提高窗口移动速度(4)(harib23d)
5启动时只打开一个命令行窗口(harib23e)
6增加更多的命令行窗口(harib23f)
7关闭命令行窗口(1)(harib23g)
8关闭命令行窗口(2)(harib23h)
9start命令(harib23i),
10ncst命令(harib23j)
第27天 LDT与库
1先来修复bug(harib24a)
2应用程序运行时关闭命令行窗口(harib24b)
3保护应用程序(1)(harib24c)
4保护应用程序(2)(harib24d)
5优化应用程序的大小(harib24e)
6库(harib24f)
7整理make环境(harib24g)
……
第28天 文件操作与文字显示
第29天 压缩与简单的应用程序
第30天 高级的应用程序
第31天 写在开发完成之后

文摘
版权页:

30天自制操作系统

插图:

30天自制操作系统

现在我们要进行内存管理了。首先必须要做的事情,是搞清楚内存究竟有多大,范围是到哪里。如果连这一点都搞不清楚的话,内存管理就无从谈起。
在最初启动时,BIOS肯定要检查内存容量,所以只要我们问一问BIOS,就能知道内存容量有多大。但问题是,如果那样做的话,一方面asmhead.nas会变长,另一方面,BIOS版本不同,BIOS函数的调用方法也不相同,麻烦事太多了。所以,笔者想与其如此,不如自己去检查内存。
下面介绍一下做法。
首先,暂时让486以后的CPU的高速缓存(cache)功能无效。回忆一下最初讲的CPU与内存的关系吧。我们说过,内存与CPU的距离地与CPU内部元件要远得多,因此在寄存器内部MOV,要比从寄存器MOV到内存快得多。但另一方面,有一个问题,CPU的记忆力太差了,即使知道内存的速度不行,还不得不频繁使用内存。
考虑到这个问题,英特尔的大叔们在CPU里也加进了一点存储器,它被称为高速缓冲存储器(cache memory)。cache这个词原是指储存粮食弹药等物资的仓库。但是能够跟得上CPU速度的高速存储器价格特别高,一个芯片就有一个CPU那么贵。如果128MB内存全部都用这种高价存储器,预算上肯定受不了。高速缓存,容量只有这个数值的千分之一,也就是128KB左右。高级CPU,也许能有1MB高速缓存,但即便这样,也不过就是128MB的分之一。
为了有效使用如此稀有的高速缓存,英特尔的大叔们决定,每次访问内存,都要将所访问的地址和内容存人到高速缓存里。也就是存放成这样:18号地址的值是54。如果下次再要用18号地址的内容,CPU就不再读内存了,而是使用高速缓存的信息,马上就能回答出l8号地址的内容是54。
往内存里写人数据时也一样,首先更新高速缓存的信息,然后再写入内存。如果先写入内存的话,在等待写入完成的期间,CPU处于空闲状态,这样就会影响速度。所以,先更新缓存,缓存控制电路配合内存的速度,然后再慢慢发送内存写入命令。

内容简介
  《30天自制操作系统》是一本兼具趣味性、实用性与学习性的操作系统图书。作者川合秀实从计算机的构造、汇编语言、C语言开始解说,让读者在实践中掌握算法。在《30天自制操作系统》的指导下,从零编写所有代码,30天后就可以制作出一个具有窗口系统的32位多任务操作系。
《30天自制操作系统》适合操作系统爱好者和程序设计人员阅读。

购买书籍

当当网购书 京东购书 卓越购书

PDF电子书下载地址

相关书籍

搜索更多