美文网首页
操作系统随笔

操作系统随笔

作者: sk邵楷 | 来源:发表于2021-12-20 22:44 被阅读0次

2021-12-20

linux0.11 习题

  1. 为什么不直接将system模块搬到0x00000处而是先搬到0x10000处,再搬到0x00000处呢?
    在机器开机上电时,ROM BIOS将bootsect代码加载到内存的固定位置0x7c00处,bootsect又把自己移动到了0x90000处,同时把setup.s代码和 system模块分别加载到0x90200和0x10000处。对于本书所讨论的Linux内核,system模块的大小不超过512KB。由于在即将执行的setup代码中还需要使用BIOS的功能,因此若直接将system模块加载到0x00000处就会覆盖掉BIOS设置的中断向量区域(0x0000-0x0400)。
    2)setup.s和head.s中都设置了一次GDT和IDT,这是为何,可否只在head.s做一次设置?
    第一次设置是为了head.s能首次运行在32位保护模式下。GDT临时在setup.s中,也即0x902xx左右的地方,这个地方将被用于缓冲区。而内核是在靠近物理内存0x0处的,因此必须重新设置。
    3)在setup.s代码执行完之后,head.s及system被移到了0x00000~0x800000处,那么PC开机时0x0000~0x0400处及之后的一些参数不是也被覆盖了吗?内核以后是怎么设置的?
    Linux 在这之后就完全不用PC自己的中断程序,而纯粹自己作中断程序了。在head.s中的78行(setup_idt)开始,首先在232行的_idt处设置了256个亚中断向量,指向一个只显示"Unknown interrupt"的中断处理程序。然后会在init的main()中各个硬件的初始化函数中一个一个地分别设置所用到的实际中断向量。
    4)请简述Linux内核的整个初始化过程。
    系统初始化时,sched_init() 程序启动了系统的空闲任务0,同时派生了任务1,此时,系统中有两个进程(task 0 and task 1),假设从此时开始,系统没有接收到任何中断(包括系统的定时时钟中断或外部硬件中断以及软件的系统调用产生的中断),那么系统中将永远只包含着这两个进程,但是实际中,时钟中断周期的检查有没有新任务就绪,或者硬件中断包括系统调用使系统调度执行来检查系统的新任务,如果有新任务就绪,执行新任务。系统的其它部分,都是为这些任务的执行提供服务。
    系统中各进程的执行基本上是由于进程请求等待想要的资源而自动情愿地放弃CPU去睡眠,另一种就是时钟中断把用完时间片的进程对CPU的使用权剥夺,不情愿地放弃CPU。

2021-12-21

全局描述符表: 复习 操作系统真象还原的4.3节


GDT.jpg

2021-12-22

中断描述符表: 复习 操作系统真象还原的7.4节


IDT.png

学习了一下 linux0.11前期的几个初始化(如下), mem_init, trap_init, sched_init, buffer_init 这四个初始化感觉比较重要。
mem_init(main_memory_start,memory_end);
trap_init(); // 陷阱门(硬件中断向量)初始化。(kernel/traps.c)
blk_dev_init(); // 块设备初始化。(kernel/blk_dev/ll_rw_blk.c)
chr_dev_init(); // 字符设备初始化。(kernel/chr_dev/tty_io.c)空,为以后扩展做准备。
tty_init(); // tty 初始化。(kernel/chr_dev/tty_io.c)
time_init(); // 设置开机启动时间 -> startup_time。
sched_init(); // 调度程序初始化(加载了任务0 的tr, ldtr) (kernel/sched.c)
buffer_init(buffer_memory_end);// 缓冲管理初始化,建内存链表等。(fs/buffer.c)
hd_init(); // 硬盘初始化。(kernel/blk_dev/hd.c)
floppy_init(); // 软驱初始化。(kernel/blk_dev/floppy.c)
sti(); // 所有初始化工作都做完了,开启中断。

2021-12-24

linux0.11的中断压栈情况:


image.png

操作系统真象还原:


image.png

Linux0.11信号处理详解:
https://www.cnblogs.com/yudao/p/4423568.html

2021-12-26
linux 0.11版本中do_signal()的理解:
https://blog.csdn.net/heiworld/article/details/25563125

linux的系统调用
https://www.jianshu.com/p/c889aeb26c0a

参考的一些文章:

https://blog.csdn.net/weixin_35765226/article/details/116681487

相关文章

  • 2020-07-06

    随笔 今天有点累,不写了。清华的课可以的,数据结构和操作系统都很好。照着ucore重写一遍操作系统,也算是夯实基础...

  • 操作系统随笔

    2021-12-20 linux0.11 习题 为什么不直接将system模块搬到0x00000处而是先搬到0x1...

  • #Apr25# Symbolic Strategies

    基于操作系统的符号语言或将成为未来的“世界语”? ——《Symbolic Strategies》阅读随笔 随着智能...

  • 操作系统随笔-操作系统真象还原

    复习操作系统真象还原,记录一些知识点 实模式内存布局 如下图所示: 编译器给程序中各符号(变量名或函数名等)分配的...

  • 点评不只是为了链接——007践行之旅(13)

    (太累了,回头更新) 周末随笔周末随笔周末随笔周末随笔周末随笔周末随笔周末随笔周末随笔周末随笔周末随笔周末随笔周末...

  • Linux

    今天第一次写关于Linux的随笔,在学习了Linux的用法后,我发现安装的操作系统还是有很多不完整的地方,需要下载...

  • Node.js 中的中间件

    《深入浅出 Node.js》阅读随笔 中间件原本是指介于操作系统和上层应用之间,用于协调管理它们之间相互调用的一组...

  • Linux教程:目录

    Linux教程:目录 Linux简介 什么是操作系统 操作系统简介 操作系统历史 操作系统功能 操作系统分类 操作...

  • 不同应用领域的主流操作系统

    桌面操作系统 服务器操作系统 嵌入式操作系统 移动设备操作系统

  • (一)Linux基础一(操作系统)

    一、不同领域的操作系统分类 桌面操作系统、服务器操作系统、嵌入式操作系统、移动设备操作系统 1.1、桌面操作系统W...

网友评论

      本文标题:操作系统随笔

      本文链接:https://www.haomeiwen.com/subject/ibhtqrtx.html