![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Linux 0.11学习
文章平均质量分 72
qinyg602
Linux爱好者
展开
-
自己动手格式化虚拟硬盘,建立文件系统
Linux里硬盘操作部分主要功能是可以让我们随意读写硬盘的任何一个扇区。当我们完成硬盘操作后(hd.c,ll_rw_blk.c,buffer.c。其中hd.c负责硬盘操作,ll_rw_blk.c负责将IO操作排队,buffer.c负责发送和接收硬盘的数据)后,就可以考虑文件操作了。 硬盘在使用前要格式化(不是低格,低格是厂家的事),格式化主要有两个目的,一个是创建分区,另一个是建立文件系统。 Linux 0.11采用的是古老的Minix文件系统,那我们就把硬盘格式成Minix形式。但问题是,现在操作系统都没原创 2022-05-20 14:32:11 · 577 阅读 · 0 评论 -
修改 Linux 0.11 的 switch_to 宏实现任务软切换
Linux 0.11 任务切换 swithc_to 最主要的语句是通过 ljmp 到一个任务段来实现的,当 ljmp 一个任务段的时候,CPU 会把任务相关的信息存到本任务的 TSS 区域内,然后把新任务的 TSS 区域内信息放到对应的寄存器内(包括 cs 及 ip),然后从新任务的 cs:ip 位置开始执行。早期的任务切换都是通过这种硬件方式,但这种切换所需时间太长,因为要保存的信息中,其实很多我们用不上,没必要保存加载。现在的任务切换都是操作系统自己实现,不通过 CPU,即软切换。理解了任务切换的本质之原创 2022-04-12 10:23:13 · 386 阅读 · 0 评论 -
Linux 0.11学习笔记
关于sleep_on()函数的一点疑惑 void sleep_on(struct task_struct **p) { struct task_struct *tmp; // 若指针无效,则退出。(指针所指向的对象可以是NULL,但指针本身不应该为0).另外,如果 // 当前任务是任务0,则死机。因为任务0的运行不依赖自己的状态,所以内核代码把任务0置为 // 睡眠状态毫无意义。 if (!p) return; if (current == &(init_task.task)) panic("t原创 2021-04-13 13:29:00 · 113 阅读 · 0 评论