# Orange一个操作系统的实现 **Repository Path**: lovexiaoling/orange ## Basic Information - **Project Name**: Orange一个操作系统的实现 - **Description**: 《Orange's 一个操作系统的实现》记录实验。 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2022-07-27 - **Last Updated**: 2022-09-08 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## 说明 - 该仓库用于《Orange's 一个操作系统的实现》记录实验。 - 可以互相学习,联系方式V:`xiaolingya1024` 。 ## 开发环境 - 系统:Ubuntu20.4 - IDE:VIM ## 日志记录 - `2022/08/01`: 完成 FAT12 实验。 - `2022/08/06`: 完成 “第四章-突破 512 字节的限制”。 - `2022/08/07`: 从 Loader 到内核 —— 用 Loader 加载 ELF。 - `2022/08/08`: 从 Loader 到内核 —— 跳入保护模式。 - `2022/08/09`: 从 Loader 到内核 —— 向内核交出控制权,已完成。整理代码文件,使其结构化。 - `2022/08/11`: 复习。 - `2022/08/12`: 添加中断处理,tmd 最终的运行效果不对,艹! - `2022/08/13`: 完成中断处理。 > 注意:经过我的一番排查,最终我的 `boot\loader.asm` 和 `lib\string.asm` 都换成了源代码的,也就是将源代码中的这两个文件复制到自己的项目中,我发项目最终运行成功了。 - `2022/08/14`: 第六章 ——最简单的进程。 - `2022/08/15`: 整理笔记。 - `2022/08/17`: 第六章 ——最简单的进程,完成。 - `2022/08/18`: 第六章 ——多进程,完成。 - `2022/08/19`: 复习、查缺补漏。 - `2022/08/20`: 第六章 ——系统调用、进程调度 完成。 - `2022/08/22`: 第七章 ——键盘,完成。 - `2022/08/23`: 第七章 ——显示器,完成。 - `2022/08/24`: 第七章 ——整理前两节笔记,TTY任务进行中... - `2022/08/25`: 第七章 ——TTY任务,完成。 - `2022/08/26`: 第七章 ——区分任务和用户进程、printf 完成。 --- - `2022/08/27`: 休息。 - `2022/08/29`: 第七章重大 BUG 修正。 - `2022/08/30`: 修正之前第七章 console.c 中的几个 BUG,第八章 —— 完成(修完 BUG 后,可以正常运行了,但不理解,emm.... 先跑起来再说...) - `2022/09/03`: 第八章 —— 已经搞懂进程通信之间的大致执行流程、调用 get_ticks() 的过程。 --- - `2022/09/04`: 第九章 —— 硬盘驱动程序、硬盘分区表,完成。 - `2022/09/05`: 第九章 —— 用代码遍历所有分区,完成。 - `2022/09/08`: 第九章 —— 查看已创建的文件 —— 完成。 > 暂步至此 ## 自言自语 ### 2022/08/06 我原本以为两个中午可以解决引导扇区的编写,结果我错了,然后我小妹出花园(潮州习俗),回老家三天,直到现在才搞懂这一章的内容。呜呜呜 心累~ 😭 ### 2022/08/13 1. 我发现我从开始写到现在的 `boot\loader.asm` 和源代码中的不太一样,于是我将其进行了修改,但最终还是无法运行。 2. 我所编写的 `lib\string.asm` 和源代码中的 `lib\string.asm` 一样,我试图将源代码中的复制到自己的代码中,然后我发现运行成功了。 **最最最离谱的就是这个:我明明和源代码中的一样,但我把源代码复制过来就运行成功,我自己的就不行,我tm盯着看了三个小时,就那么 50 行不到的代码,我盯着三小时,我一直在想我到底错哪了???明明一样啊!!!(我还让我师兄帮我看看,这两个文件到底有啥区别,他不会汇编,但完全不影响帮我检查 😆 )** ![image-20220813232029518](images/image-20220813232029518.png) ![image-20220813232121443](images/image-20220813232121443.png) $\textcolor{#ff0000}{你们说这有啥区别?你们说啊!!!呜呜呜}$ 😭😭😭 **我把我的 `loader.asm` 和 `string.asm` 放到 `codeVersion`下 名为 `*_v1.asm`。** > 我笑了,今天真是梦幻的一天...$ 😅😅😅 ### 2022/08/20 害~ 今天原本打算将这章笔记和思路重新整理一下...结果...腾讯视频给我推送 **《炼气练了3000年》** 动态漫画,我 tm 直接看上头了... ### 2022/08/25 今天把 `kernel\console.c -> init_screen()` 中的 `V_MEM_SIZE` 写成了 `V_MEM_BASE`,早上8点,半小时写完的代码,然后我直到下午4点才找出来...,我把整个TTY任务逻辑从头到尾捋了好几十遍,一直以为是逻辑的问题,最后是真没想到会是这小东西...,当然收获就是对这一节以及前面的内容理解越来越深刻了,还不错,哈哈。 ### 2022/08/29 ```c PRIVATE void flush(CONSOLE* p_con) { set_cursor(p_con->cursor); set_video_start_addr(p_con->current_start_addr); } ``` ```c PRIVATE void flush(CONSOLE* p_con) { if (is_current_console(p_con)) { set_cursor(p_con->cursor); set_video_start_addr(p_con->current_start_addr); } } ``` > 学到第八章时,两天了我才发现前面第七章写的代码有 bug,当前一直不能出正确结果。 > 其实第七章结尾的结果我出来了,我以为是这样的,直到我带着怀疑的心理去尝试运行源代码中的代码,后发现是我错了...