
操作系统
文章平均质量分 89
皓空Fly
这个作者很懒,什么都没留下…
展开
-
从零编写linux0.11 - 第十一章 可执行文件
加载 elf 格式可执行文件,不支持过大的文件,不支持动态编译。原创 2023-02-18 01:51:07 · 1240 阅读 · 1 评论 -
从零编写linux0.11 - 第十章 文件系统(二)
完善文件系统,提供文件的增删改等功能。能够更改文件以及创建删除文件和文件夹。原创 2023-02-02 22:41:15 · 377 阅读 · 0 评论 -
从零编写linux0.11 - 第九章 文件系统(一)
简单地实现了 open,read,write,close等函数。原创 2023-01-28 20:27:47 · 996 阅读 · 0 评论 -
从零编写linux0.11 - 第八章 软盘操作
介绍在linux0.11中,如何初始化DMA,读写软盘扇区,对软盘出错的处理等操作。原创 2022-08-15 11:06:51 · 881 阅读 · 0 评论 -
从零编写linux0.11 - 第七章 完善终端
编程环境:Ubuntu Kylin 16.04、gcc-7.3.0代码仓库:https://gitee.com/AprilSloan/linux0.11-projectlinux0.11源码下载(不能直接编译,需进行修改)本章目标本章将会完善终端,实现输入功能,完善输出功能。知识点涉及到键盘和终端控制。1.数据结构介绍之前我们在用 printk 函数打印字符串时,printk 函数调用 tty_write,tty_write 调用 con_write 都是直接对字符串进行操作的。这种方式并没有什原创 2022-05-30 14:01:41 · 610 阅读 · 0 评论 -
从零编写linux0.11 - 第六章 任务管理
编程环境:Ubuntu Kylin 16.04、gcc-5.4.0代码仓库:https://gitee.com/AprilSloan/linux0.11-projectlinux0.11源码下载(不能直接编译,需进行修改)本章目标本章的目的是要创建任务,并调度到新任务中。这其中涉及到任务结构体的讲解,进程调度,内存分配,系统调用等一系列知识,是目前内容最为充实,最为丰富的一章。相信大家都会沉浸其中,无法自拔(手动滑稽)。1.第一个任务相信大家都学过操作系统的知识,对于任务的相关知识就不多说了,毕原创 2022-04-12 18:02:41 · 921 阅读 · 0 评论 -
从零编写linux0.11 - 第五章 中断与异常
编程环境:Ubuntu Kylin 16.04、gcc-5.4.0代码仓库:https://gitee.com/AprilSloan/linux0.11-projectlinux0.11源码下载(不能直接编译,需进行修改)本章目标本章会编写部分异常的处理函数以及初始化PIC(可编程中断控制器)。下图是中断异常向量分配表,本章会编写0-6、8-13、15、17-20号异常处理函数,根据有无错误代码,将异常分为两类,我们会先编写无错误代码的异常处理函数,再编写有错误代码的异常处理函数。7和16号异常向量原创 2022-04-03 20:00:34 · 1262 阅读 · 0 评论 -
从零编写linux0.11 - 第二章 内核初始化
编程环境:Ubuntu Kylin 16.04代码仓库:https://gitee.com/AprilSloan/linux0.11-projectlinux0.11源码下载(不能直接编译,需进行修改)1.添加内核进入内核后也不是马上进入main函数,上一章只是暂时设置gdt,此外还要设置idt和其他的一些初始化操作,这些内容也要使用汇编进行编写,此处采用AT&T格式的汇编。以下为head.s的内容,为了简单起见,内容还是一个死循环。.globl startup_32startup_3原创 2022-03-03 22:06:41 · 1051 阅读 · 0 评论 -
从零编写linux0.11 第一章 简单的bootloader
编程环境:Ubuntu Kylin 16.04代码仓库:https://gitee.com/AprilSloan/linux0.11-project工程结构:每一个目录对应于一章的内容,如chapter_01对应于第一章。每一章包含多个小节,如chapter_01/1st代表第一章第一节(简单的启动盘),所有的shell命令都默认当前目录为小节的目录。linux0.11源码下载(不能直接编译,需进行修改)原本linux0.11是用gas汇编编写bootloader,我认为大家对gas汇编不太熟悉,所原创 2022-02-24 15:48:13 · 1530 阅读 · 0 评论 -
从零编写linux0.11 - 序
序最初接触到自制操作系统的书是《30天自作操作系统》,因为这本书,我对如何制作操作系统有了基本的了解。 但这本书有些本末倒置了,重点的内存管理、进程管理、文件系统等方面介绍得太少,反而把大篇幅花在了gui和shell上。我看的第二本自制操作系统的书是《一个64位操作系统的设计与实现》,64位操作系统在不少地方与32位操作系统不同,比如进程切换的方式,不过在用C语言编程时对此没有多大感触 。这个操作系统的代码不够精简,不宜阅读,我并没有读完这本书。后来想看看实际的操作系统源代码,首选的肯定是lin原创 2022-02-24 15:10:05 · 503 阅读 · 1 评论 -
Linux下bochs的安装与使用
简单介绍了bochs的安装与使用,在使用方面简单写了一个启动盘用作测试。原创 2022-01-18 22:32:47 · 7984 阅读 · 2 评论 -
《30天自制操作系统》第9天
第九天 内存管理1.整理源文件这一节只是进行了代码整理,把鼠标键盘相关的内容转移到了特定的文件里。2.内存容量检查(1)要做内存管理,首先得知道内存的容量,怎么知道内存的容量呢?BIOS可以告诉我们答案。但使用BIOS稍微有点麻烦,于是,作者决定自己写程序检查内存容量。内存检查程序主要有以下几步: 检查CPU是386芯片还是486芯片。若为486芯片,则禁止cache。(386没有cache) 不断向内存写入然后读取数据。如果写入和读取的内容一样,则内存连接正常。 怎原创 2021-09-05 23:02:44 · 3163 阅读 · 12 评论 -
《30天自制操作系统》第8天
第八天 鼠标控制与32位模式切换1.鼠标解读(1)首先要说明一下,鼠标发送回来的数据是三个字节一组的,所以我们要以三个字节为单位处理鼠标数据。 unsigned char mouse_dbuf[3], mouse_phase; enable_mouse(); mouse_phase = 0;while (1) { io_cli(); if (fifo8_status(&keyfifo) + fifo8_status(&原创 2020-09-21 23:27:20 · 441 阅读 · 3 评论 -
《30天自制操作系统》第7天
第7天 FIFO与鼠标控制温馨提示:这章的程序我在作者提供的模拟器上运行的效果不理想,而在虚拟机上没有问题,所以我建议大家使用虚拟机运行这章的程序。(如果在模拟器上运行起来没问题就不用管这条提示了)1.获取按键编码继续对键盘进行操作,这次是要获取所按键的编码。#define PORT_KEYDAT 0x0060void inthandler21(int *esp){ struct BOOTINFO *binfo = (struct BOOTINFO *) ADR_BOOTIN原创 2020-09-12 13:30:36 · 378 阅读 · 0 评论 -
《30天自制操作系统》第6天
第6天 分割编译与中断处理1.分割源文件由于bootpack.c代码行数太多,不便于观看也不便于修改,于是根数函数的功能将它分割为几个文件,下图为示意图。还需要修改一下Makefile,流程如下:由于只是简单把代码转移一下位置,就不展示完成后的界面了。2.整理Makefile现在Makefile又太长了,对他进行修改。%.gas: %.c $(CC1) -o $*.gas $*.c%.nas: %.gas $(GAS2NASK) $*.gas $*.nas%原创 2020-08-30 13:46:17 · 499 阅读 · 0 评论 -
《30天自制操作系统》第5天
第5天 结构体、文字显示与GDT/IDT初始化1.接收启动信息我们在asmhead.nas中保存了一些数值,比如SCRNX、SCRNY,但是不取出来使用的话就没有意义了,就让我们来读取这些数据吧。 char *vram; int xsize, ysize; short *binfo_scrnx, *binfo_scrny; int *binfo_vram; init_palette(); binfo_scrnx = (short *) 0x0ff4; binfo_scrny =原创 2020-08-24 22:02:29 · 460 阅读 · 0 评论 -
《30天自制操作系统》第4天
第4天 C语言与画面显示的练习1.用C语言实现内存写入现在想要在屏幕上显示点什么东西,需要向VRAM中数据,虽然C语言可以写内存,但我们还是先用汇编来完成这个工作吧。现在在naskfunc.c中添加点东西。_write_mem8: ; void write_mem8(int addr, int data); MOV ECX, [ESP + 4] ; [ESP + 4]中存放的是地址,蒋其读入ECX MOV AL, [ESP + 8] ; [ESP +原创 2020-08-14 22:53:17 · 306 阅读 · 0 评论 -
《30天自制操作系统》第3天
第3天 导入32位模式并导入C语言温馨提示:这一天的学习里面有一个大坑,如果学不会也请放平心态继续学下去,以后的内容于此并没有多大关系。1.制作真正的IPL原创 2020-08-11 13:41:19 · 626 阅读 · 0 评论 -
《30天自制操作系统》第2天
第2天 汇编语言学习与Makefile入门温馨提示:建议大家使用VS Code编写程序,VS Code的代码提示功能非常好用,能够容错提示,另外还要安装ASM Code Lens扩展,此扩展可以实现汇编代码的高亮。1.继续开发再次对helloos.nas中的内容进行修改扩充,代码如下所示:; hello-os; TAB = 4 ORG 0x7c00 ; 指明程序的装载地址; 以下的技术用于标准FAT12格式的软盘 JMP entry DB 0x90 DB原创 2020-08-01 19:51:12 · 659 阅读 · 0 评论 -
《30天自制操作系统》第1天
如果没有《30天自制操作系统》的光盘资源的话,可以到这个网址http://aprilsloan.ys168.com/下载,资源在“文件”文件夹下。首先打开二进制编辑器(我的光盘资源中有此软件),在软件中输入如下字符:从0000:0090开始后面全都是00,一直输入到最后0016:8000。...原创 2020-08-01 09:47:25 · 575 阅读 · 0 评论 -
《30天自制操作系统》第0天
曾经,我花了一个多月时间学习《30天自制操作系统》这本书,学到了第20几天的时候放弃了,主要是因为越学到后面我发现代码就越看不懂,完全成了代码的搬运机,当时的我忙着实习就没有再学了。而现在我重新开始学习这本书,已经学了一个星期,果然有不少收获,也明白了为什么之前会越来越看不懂代码,原因便是太急躁了。虽说这本书命名为《30天自制操作系统》,但里面的知识花30天学完是十分困难的。作者也在书中说明,30天是根据作者已有的能力进行划分的,有些地方学习一章可能要花上一周。之前,我都是一天刷一章,刷到第10章之后,原创 2020-07-31 19:43:23 · 402 阅读 · 0 评论