
操作系统30天日志
于毒
这个作者很懒,什么都没留下…
展开
-
《操作系统30天》-合川秀实-学习日志day9
一、整理源文件改造bootpack.c文件,整理程序:键盘中断放在keyboard.c中,鼠标中断放在mouse.c中,这样程序看起来简洁清晰在bootpack.c分了两个头文件出来之后,需要在makefile中的objs_bootpack中添加相应的.obj文件(编译后的二进制文件)二、内存检查对内存检查前,要关闭高速缓存。如果不关闭高速缓存,我们往内存中写数据会直接保存到...原创 2019-01-26 21:12:41 · 208 阅读 · 0 评论 -
《操作系统30天》-合川秀实-学习日志day14
一、测试性能在真机上测试harib10i和harib10g的执行结果:速度并没有变快,对harib10h的改进在于“消除移位处理”,只有在大量使用定时器时才会发生很多移位,现在只有三个定时器,效果不明显。根据这个思路,用多个定时器测试,在timer.c中最多可以设定500个定时器,我们设置490个定时器测试在设定三个定时器之前,要加入“set490(&fifo,1);”语句追...原创 2019-02-03 23:57:23 · 229 阅读 · 0 评论 -
《操作系统30天》-合川秀实-学习日志day13
一、简化字符串显示将类似于这种三步操作:1)涂上背景色2)在上面写字符3)完成刷新放到一个函数中,如果需要显示字符就直接调用封装好的函数,各个参数代表的含义这样原来的三行代码就可以简化成(只要需要输出字符,就可以用这个函数替换)二、重新调整FIFO缓冲区把定时器用的多个FIFO缓冲区集中成一个,在集装的FIFO中用不同的数据来分辨出是哪个定时器超时。主函数内的修改:对...原创 2019-02-03 23:38:31 · 220 阅读 · 0 评论 -
《操作系统30天》-合川秀实-学习日志day12
一、使用定时器定时器的功能:设定一个时间,从现在开始计时,到了那个时间就会提醒用户。原理是每个一段时间就发送一个中断信号给CPU。管理定时器:对PIT进程设定(PIT=可编程的间隔型定时器),电脑中的PIT连接IRQ的0号,所以只要设定了PIT就可以设定IRQ0的中断间隔。这里用到的电脑芯片是8254。D0-D7就是我们的选择模式端书本上介绍的往0x43中写入0x34对应的控制字格式...原创 2019-02-03 11:28:57 · 310 阅读 · 0 评论 -
《操作系统30天》-合川秀实-学习日志day11
这次的日志就不把书上的东西照搬过来了,写一点关于这个纸娃娃操作系统的理解。一、添加一个窗口图层有哪些步骤?(格式:文字说明+对应代码)第一步:定义图层包 (结构体SHTCTL),建立图层(SHEET),建立缓冲区buf(地址)第二步:初始化图层第三步:分配内存第四步:初始化图层背景(把图层写进显卡)+内容初始化(图层内容填充)第五步:设置图层显示位置的起始坐标(X0,Y0)+设...原创 2019-02-03 11:06:56 · 244 阅读 · 0 评论 -
《操作系统30天》-合川秀实-学习日志day10
一、内存管理(续)Menmman_free函数不足:出现不连续的小段未使用空间,把man->frees耗尽解决:以0x1000(4KB)字节为单位分配内存和释放内存主要添加的部分是向上舍入。在二进制中想把某位变0,只需要进行“与运算”,而十六进制是二进制的组合,同意进行与运算就可以。向下舍入:0x12345678 & 0xfffff000=0x12345...原创 2019-01-26 21:35:26 · 277 阅读 · 0 评论 -
《操作系统30天》-合川秀实-学习日志day3
制作真正的IPL:相关知识关键代码:MOV AX,0x0820 MOV ES,AX MOV CH,0 ; 柱面0 MOV DH,0 ;磁头0 MOV CL,2 ; 扇区2 MOV AH,0x02 ; AH=0x02 : 读盘 MOV AL,1 ; 1个扇区 MOV BX,0 MOV DL,0x00 ; A驱动器 INT 0x13 ;调用磁盘BIOS JC error新...原创 2019-01-15 23:29:38 · 657 阅读 · 3 评论 -
《操作系统30天》-合川秀实-学习日志day2
一、文本编辑器上一篇提到这个notepad++,网上下载,默认语言选择中文,安装好之后界面如下如果用Notepad++打开.nas文件,比如说我们的helloos3中的helloos.nas文件,打开之后代码部分是可以正常显示的,但是注释部分显示的是日文,可能是因为这款编辑器的日本开发的吧,这不影响我们使用,注释部分书本上都有。二、继续开发—学习相关知识1、Helloos...原创 2018-12-23 13:35:31 · 369 阅读 · 0 评论 -
《操作系统30天》-合川秀实-学习日志day1
课程要求学习第1天到第16天的内容,看了之后感觉还不错,想全部看完书的内容,这样对操作系统也有一个比较清晰的认识,坚持更新!附带书的封面:准备工作:BZ.exe二进制编辑器(网上直接下载就OK了)需要作者提供的虚拟光盘(模拟器启动):已经有人在博客上传了 notepad++:一个代码编辑器(界面很好看) tolset_h:运行环境,需要把作者的工程复制到这个目录下面才可以运...原创 2018-12-23 11:52:09 · 830 阅读 · 0 评论 -
《操作系统30天》-合川秀实-学习日志day5
结构体接收启动区信息:从asmhead.nas中用指针获取VRam的地址(0xa0000),xsize,ysize等值;把前一天的背景显示部分(最后绿色的矩阵图)做成一个函数独立出来(init_screen)。void init_screen(char *vram, int x, int y)void HariMain(void){ char *vram; int xsize, y...原创 2019-01-16 00:15:41 · 249 阅读 · 0 评论 -
《操作系统30天》-合川秀实-学习日志day6
第6天:分割编译与中断处理封装打包程序为了缩短源程序,对bootpack.c进行分类,增加源文件的数目,减少代码行数,但是用到的函数还是要在主函数前面声明,整合到一起的时候也需要加上不同的头文件名字。大致是下面的图示过程: 分割之后,Makefile变长,三个文件需要做同样的过程才能生成.gas和.nas文件,生成一个规则(一般规则)来编译,实际就是把这一段:graphic...原创 2019-01-16 00:27:34 · 354 阅读 · 0 评论 -
《操作系统30天》-合川秀实-学习日志day7
第7天:FIFO与鼠标控制优化中断处理程序获取按键编码:在中断处理程序中添加让按键信息显示的语句:void inthandler21(int *esp){ struct BOOTINFO *binfo = (struct BOOTINFO *) ADR_BOOTINFO; unsigned char data, s[4]; io_out8(PIC0_OCW2, 0x61); /...原创 2019-01-16 00:39:44 · 205 阅读 · 0 评论 -
《操作系统30天》-合川秀实-学习日志day8
第8天:鼠标控制与32位模式切换鼠标解读修改的harimain:unsigned char mouse_dbuf[3], mouse_phase; enable_mouse(); mouse_phase = 0; /* 进入到等待鼠标的0xfa的状态 */ for (;;) { io_cli(); if (fifo8_status(&keyfifo) + f...原创 2019-01-18 09:25:54 · 234 阅读 · 0 评论 -
《操作系统30天》-合川秀实-学习日志day15+16
终于讲到多任务啦~这个学期的课程也要结束了,最后是一个对之前学过的大设计,利用学到的图层知识和字体输入、定时器等,制作一个真正的操作系统!一、任务切换Cpu处理多任务的原理:实际上是通过调度在不同的时间运行不同的任务,通过快速切换任务(CPU越快切换越快,用户体验越好)实现视觉上的多任务同步。任务切换指令:CPU把寄存器的值写入内存,再次切换回来就从中断的地方继续运行。引入“任务状态段”...原创 2019-02-04 00:21:58 · 245 阅读 · 0 评论