WinterOS(写个操作系统)
大学期间写的一个操作系统
sssnial-jz
这个作者很懒,什么都没留下…
展开
-
WinterOS最终运行效果
看一下效果总结:大学期间做的,先做了很多基础工作,操作系统理论的学习,计算机硬件学习,Linux代码分析,具体实现方法、汇编等,到最后能写出来这玩意,应该也能说给大学个交代了!...原创 2021-03-27 22:51:20 · 116 阅读 · 0 评论 -
冬天OS(零):开篇
node:冬天OS的写作过程中会尽量保持和Tinix的一致,这样可以避免节外生枝,重要的是弄懂原理! 冬天来了,春天还会远吗?前面三篇出了点情况,待后来补齐!...原创 2019-12-01 01:08:15 · 149 阅读 · 0 评论 -
冬天OS(一):BOOT
--------------------------------------------------------boot 加载loader 到内存跳转到 loader--------------------------------------------------------一,一个符合 FAT12 文件系统格式的简单 boot 扇区;------------...原创 2019-12-09 20:09:17 · 314 阅读 · 0 评论 -
冬天OS(二):go to protected mod
--------------------------------------------------------加载 kennel进入保护模式--------------------------------------------------------上一节我们已经进入 loader 里执行了,但那时的 loader 不具备什么功能,现在我们需要通过 loader 将 ke...原创 2019-12-09 20:09:43 · 154 阅读 · 0 评论 -
冬天OS(三):jmp to kernel
--------------------------------------------------------打印内存信息开启分页jmp to kernle--------------------------------------------------------上节我们说过,在进入保护模式之后紧接着就要 jmp 到 kernel ,jmp 之前我们还要做几件事情....原创 2019-12-09 20:10:06 · 168 阅读 · 0 评论 -
冬天OS(四):使用 C 语言
--------------------------------------------------------用 C 重新设置 GDT--------------------------------------------------------上节我们 jmp 到了 kernel ,那是用汇编写的 kernel ,只是编译成了 elf 格式的目标文件,为什么要将一个汇编 ke...原创 2019-11-30 22:29:34 · 172 阅读 · 0 评论 -
冬天OS(五):Makefile
--------------------------------------------------------Makefile--------------------------------------------------------一,合理地组织文件我们将散乱的文件归类到不同的文件夹下整体布局:boot 目录:kernel、lib、inclu...原创 2019-11-30 22:45:20 · 219 阅读 · 0 评论 -
冬天OS(六):中断
--------------------------------------------------------初始化 8259A--------------------------------------------------------上一节我们编写了 Makefile ,享受到了 Makefile 带给我们的便利,这节我们乘着 make 的便利来设置中断...一,in...原创 2019-11-30 22:57:10 · 322 阅读 · 0 评论 -
冬天OS(七):第一个进程
--------------------------------------------------------启动第一个进程--------------------------------------------------------进程是个复杂的东西,需要很多数据结构配合才能运作起一个进程来,主要涉及有 特权级、LDT、TSS、进程表...一,特权级显然,内核是运行在...原创 2019-11-30 23:08:37 · 305 阅读 · 0 评论 -
冬天OS(八):加入调度
--------------------------------------------------------调度初探--------------------------------------------------------上一节我们实现了从内核跳转到用户任务执行,这节我们实现时钟的调度...一,测试时钟中断是否正常运行:——OK,时钟中断运行正常(0...原创 2019-11-30 23:30:54 · 163 阅读 · 0 评论 -
冬天OS(九):多进程
--------------------------------------------------------整理添加进程的方法多进程--------------------------------------------------------上一节,我们为我们的内核建立起了进程机制,但当时只是一个进程在那里自己频繁地切换自己,这节我们试着建立起多进程的框架...一,...原创 2019-11-30 23:44:34 · 175 阅读 · 0 评论 -
冬天OS(十):外中断处理框架
--------------------------------------------------------构建外中断处理框架--------------------------------------------------------我们这节试图为每个外部中断都设置相同的中断处理流程!// -------------------------------------%...原创 2019-11-30 23:55:03 · 180 阅读 · 0 评论 -
冬天OS(十一):系统调用
--------------------------------------------------------Syscall--------------------------------------------------------上一节我们完善了时钟调度,这一节我们试着添加一个 syscall(其实是体验一下添加 syscall 的过程)!一,第一个系统调用 get_...原创 2019-12-01 00:08:11 · 236 阅读 · 0 评论 -
冬天OS(十二):改变时钟中断频率
--------------------------------------------------------改变时钟中断频率利用 get_ticks 改进定时器--------------------------------------------------------上一节搭建起了系统调用机制,并添加了一个系统调用函数 get_ticks ,这一节我们改变一下时钟中断频率...原创 2019-12-01 00:15:42 · 648 阅读 · 0 评论 -
冬天OS(十三):进程优先级
--------------------------------------------------------进程优先级--------------------------------------------------------这节实现进程优先级...1,进程表中添加两个成员int ticks; /* remained ticks */int p...原创 2019-12-01 00:22:10 · 143 阅读 · 0 评论 -
冬天OS(十四):键盘初体验
--------------------------------------------------------初探键盘--------------------------------------------------------一,一个简单的测试// ----------------------------// <keyboard.c>// Jack Z...原创 2019-12-01 00:27:36 · 98 阅读 · 0 评论 -
冬天OS(十五):扫描码
--------------------------------------------------------处理扫描码--------------------------------------------------------上节我们直接在 keyboard_handler 中读取扫描码并在其中打印,但是 keyboard_handler 只应该负责从键盘缓冲区中读扫描码,至于...原创 2019-12-01 00:32:54 · 93 阅读 · 0 评论 -
冬天OS(十六):解析扫描码
--------------------------------------------------------解析扫描码--------------------------------------------------------解析扫描码很复杂,我们也不打算分多节来探讨这个问题...(所以就会一节完成)一,第一阶段——基本按键处理第一阶段就是平常的通过扫描码在字符数组...原创 2019-12-02 12:13:46 · 284 阅读 · 1 评论 -
冬天OS(十七):TTY 框架搭建
--------------------------------------------------------TTY 框架搭建--------------------------------------------------------从这一篇章开始,开始讨论 TTY ,而 TTY 涉及到 "视频" 的操作,因此先要了解 VGA ...一,让光标出现在显示字符的后面...原创 2019-12-02 12:20:47 · 248 阅读 · 0 评论 -
冬天OS(十八):多控制台
--------------------------------------------------------多控制台--------------------------------------------------------上一节我们搭建起了多控制台的平台,在上一节的平台上来实现多控制台应该来说是相对容易的...// ------------------------...原创 2019-12-02 12:24:56 · 1261 阅读 · 0 评论 -
冬天OS(十九):完善键盘处理
--------------------------------------------------------完善键盘处理--------------------------------------------------------我们的键盘已经具备基本的功能了,但是删除键和换行键的功能并没有实现,另外因为我的是笔记本电脑,所以 LEDS 和 小键盘的功能目前没有实现的必要(本人想...原创 2019-12-02 12:29:21 · 122 阅读 · 0 评论 -
冬天OS(二十):为任务和用户进程区分特权级
--------------------------------------------------------区分任务和用户进程--------------------------------------------------------我们的"任务"有 tty、taskA、taskB、taskC ,它们都是运行在相同的特权级上,然而就重要性而言,tty 的重要性在其余进程之上,所...原创 2019-12-02 22:56:07 · 184 阅读 · 0 评论 -
冬天OS(二十一):内核的 printf
--------------------------------------------------------printf("_")--------------------------------------------------------注意我们的 printf 必须实现为系统调用,因为用户进程没有操作显存的权限,必须通过系统调用跳到高特权级之后由内核来替进程完成任务!...原创 2019-12-02 23:01:29 · 255 阅读 · 0 评论 -
冬天OS(二十二):assert / panic
--------------------------------------------------------assert / panic--------------------------------------------------------这节我们建立两个函数[assert / panic] 并完善 printf 系列,它们是后面的开发检错和调试不错的手段!·a...原创 2019-12-09 23:44:14 · 764 阅读 · 0 评论 -
冬天OS(二十三):宏内核改微内核
--------------------------------------------------------IPC 消息机制的建立--------------------------------------------------------宏内核 VS 微内核将内核完成的任务交给专门的任务进程来完成:例如 get_ticks 系统调用,在宏内核中 get_ticks 是作为一个...原创 2019-12-09 23:42:03 · 304 阅读 · 0 评论 -
冬天OS(二十四):操作硬盘
--------------------------------------------------------操作硬盘--------------------------------------------------------上节我们已经建立起了 PIC 框架,这节我们的实现其实很简单:FS 发个消息请求服务,task_hd 处理服务!当然这是站在 PIC 的机制来说,本节的内容...原创 2019-12-09 23:50:07 · 172 阅读 · 0 评论 -
冬天OS(二十五):分区表和设备号
--------------------------------------------------------分区表设备号--------------------------------------------------------分区表(懒得重画了,就贴一个草稿纸吧...)需要注意的是:1,子扩展分区中出现的 LBA 地址是基于父"真实分区"的尾 LB...原创 2019-12-09 23:59:36 · 203 阅读 · 0 评论 -
冬天OS(二十六):完善硬盘的驱动程序
--------------------------------------------------------完善硬盘驱动程序--------------------------------------------------------上节我们的驱动程序只有一个简单的 identify 功能(基于的是 CHS 寻址),这节我们完善驱动程序,并且基于 LBA 寻址!·枚举...原创 2019-12-10 00:05:43 · 190 阅读 · 0 评论 -
冬天OS(二十七):写入文件系统
--------------------------------------------------------制作文件系统--------------------------------------------------------所谓系统,就是有规则、有规律、有效率的管理,操作系统也是,文件系统都是,其实最简单的文件系统你可以整块磁盘存储一个文件,也不会有人说它不是文件系统,所以...原创 2019-12-10 00:12:36 · 473 阅读 · 0 评论 -
冬天OS(二十八 - 1):文件系统接口(一)
--------------------------------------------------------创建一个文件并打开(一)--------------------------------------------------------上一节我们已经有个文件系统在硬盘上了,这节我们就为我们的文件系统创建新建文件的功能,因为 【文件系统 = 布局 + 操作】,在我们这样的布局...原创 2019-12-12 22:31:12 · 154 阅读 · 0 评论 -
冬天OS(二十八 - 2):文件系统接口(二)
--------------------------------------------------------创建一个文件并打开(二)--------------------------------------------------------上一节我们理清了 do_open 服务函数的框架,实际创建文件需要操作哪些数据结构等我们留在这节来完成!·alloc_imap_...原创 2019-12-12 22:39:18 · 150 阅读 · 0 评论 -
冬天OS(二十九):文件系统读写接口
--------------------------------------------------------文件系统读写接口--------------------------------------------------------这节我们接着为文件系统添加读写接口!·TestA 函数void TestA(){ int fd; int n; const c...原创 2019-12-12 22:55:12 · 186 阅读 · 0 评论 -
冬天OS(三十):文件系统删除接口
--------------------------------------------------------文件系统删除接口--------------------------------------------------------——这一节虽然只涉及一个删除函数,但是牵扯出了文件系统的轮廓,下面就来谈谈我们做的文件系统的轮廓:查找文件,获得一个文件的 inode ,...原创 2019-12-12 22:58:57 · 264 阅读 · 0 评论 -
冬天OS(三十一):为 Shell 做准备
--------------------------------------------------------完善 TTY 设备文件--------------------------------------------------------——TTY 是为进程 P 服务的,进程 P 没有请求的时候,或者以 0 长度为请求的时候,TTY 从键盘接收到的数据会被丢弃!丢弃的意思...原创 2019-12-12 23:09:28 · 112 阅读 · 0 评论 -
冬天OS(三十二):printf & printl
--------------------------------------------------------printf & printl--------------------------------------------------------以前的代码中 #define printl printf ,现在我们要区分它们,printf 用于用户态,printl 用于非...原创 2019-12-12 23:14:15 · 249 阅读 · 0 评论 -
冬天OS(三十三):内存管理 - fork
--------------------------------------------------------实现 fork--------------------------------------------------------这一节信息量有点大,但是非常有意思 ...·do_fork 函数PUBLIC int do_fork(){ /* find a fr...原创 2019-12-12 23:20:13 · 314 阅读 · 0 评论 -
冬天OS(三十四):内存管理 - exit & wait
--------------------------------------------------------exit & wait--------------------------------------------------------·fs_exit 函数PRIVATE int fs_exit(){ int i; struct proc *p = &...原创 2019-12-13 22:25:05 · 195 阅读 · 1 评论 -
冬天OS(三十五):安装应用程序
--------------------------------------------------------安装应用程序--------------------------------------------------------我们当然可以在 mkfs 的时候创建一个空文件 echo ,然后在外面将 echo 的数据写入 echo,但是有个问题是如果还有个 pwd 文件呢?是不...原创 2019-12-13 22:32:32 · 123 阅读 · 0 评论 -
冬天OS(三十六):执行应用程序
--------------------------------------------------------exec--------------------------------------------------------exec 和 fork 一样巧妙 ...这一节主要涉及对子进程运行空间的操作!·do_exec 函数PUBLIC int do_exec()...原创 2019-12-14 17:16:27 · 138 阅读 · 0 评论 -
冬天OS(三十七):shabby_shell
--------------------------------------------------------shabby_shell--------------------------------------------------------起名为 shabby_shell 是因为他太简单了 ...·Init 函数void Init(){ int fd_stdi...原创 2019-12-14 17:22:29 · 211 阅读 · 0 评论