真像还原操作系统
文章平均质量分 92
知识点记录
weixin_45806011
这个作者很懒,什么都没留下…
展开
-
真象还原操作系统_源代码_笔记_全
真象还原操作系统的源代码和前12章笔记原创 2024-03-29 23:27:22 · 227 阅读 · 0 评论 -
真象还原操作系统_第十二章_进一步完善内核
- CPU执行指令int 0x80来触发系统调用。在系统调用之前,linux向“/home/lily/OS/boot/lib/user/syscall.h”“/home/lily/OS/boot/kernel/kernel.S”“/home/lily/OS/boot/userprog/syscall_init.c”“/home/lily/OS/boot/userprog/syscall_init.h”“/home/lily/OS/boot/thread/thread.原创 2024-03-15 16:39:30 · 876 阅读 · 1 评论 -
真象还原操作系统_第十一章_用户进程
任务切换步骤如下:CPU忽略偏移量0x1234,拿选择子0x0018在GDT中索引到第3个描述符。检查描述符中的P位,看其在不在内存中,若为0则异常。同时检查S和TYPE位,判断其类型,如果是TSS描述符,检查其B位看其是否在运行,若为1则抛出GP异常。进行特权级检查,CPL和TSS选择子中的RPL的特权都有>TSS描述符的DPL,否则抛出GP异常。将当前任务的状态保存到寄存器TR指向的TSS中。加载新任务TSS选择子到TR寄存器的选择器部分,同时将TSS描述符中的起始地址和偏移量等属性加载到T原创 2024-03-08 20:35:45 · 906 阅读 · 1 评论 -
真象还原操作系统_第十章_输入输出系统
这种行为是由于编译器的链接过程所决定的。当编译器处理一个源文件时,它会将其中定义的函数和变量与其他源文件的函数和变量进行链接。而带有static关键字的函数具有内部链接(internal linkage),只能在定义它的源文件中使用。当static用于函数时,它会使函数的作用域限定在当前源文件中,也就是说,该函数只能在定义它的源文件中使用,无法被其他源文件调用。输入缓冲区寄存器:8位宽寄存器,键盘驱动程序通过out指令向此寄存器写入对8048的控制命令、参数等,对于8042本身的控制命令也是写入此寄存器。原创 2024-02-18 22:45:20 · 961 阅读 · 0 评论 -
真象还原操作系统_第九章_线程
pthread_create的函数原型:参数名称作用__newthread用于存储新线程的id,即uid__attr用于指定线程的类型,默认类型为NULL__start_routine函数指针,用于指向线程中所调用的函数的地址__arg给在线程中运行的函数__start_routine的参数,如果有2个及以上的参数,则封装为一个结构体若pthread_create函数返回值为0,则线程创建成功。线程的实际功能:调用函数。线程和函数调用的区别:原创 2024-02-14 00:57:44 · 929 阅读 · 1 评论 -
真象还原操作系统_第八章_内存管理系统
make和makefile:依赖关系定义在makefile文件中,make程序通过解析makefile文件自动找出变更的文件以及依赖此变更文件的相关文件,然后对所有受影响的相关文件执行事先定义好的命令规则。make和makefile并不编译文件。关系类似于脚本解析器和脚本语言文件。makefile相当于脚本语言文件,其中所写的内容必须遵循make所定义的语法;make程序是文件makefile的解析器,它定义了各种关键字、语法结构、函数、变量等。原创 2024-01-29 19:46:33 · 918 阅读 · 0 评论 -
真象还原操作系统_第七章_中断
中断代理:负责对中断仲裁,决定哪个中断优先被CPU受理。Intel 8259A芯片就是一种可编程的中断代理。8259A的功能:用于管理和控制可屏蔽中断,它表现为屏蔽外设中断,对它们实行优先级判决,向CPU提供中断向量号等。每个独立运行的外设都是一个中断源,它们发出的中断只有接在中断请求(IRQ:Interrupt ReQuest)信号线上才能被CPU知晓。主片与从片:Intel处理器共支持256个中断,而8259A可管理8个中断,一个8259A被称为一片。原创 2024-01-15 20:50:58 · 909 阅读 · 1 评论 -
真象还原操作系统_第六章_完善内核
定义:gcc支持在C代码中直接嵌入汇编代码,所以内联汇编又称为gcc assembly code。分类:最简单的基本内联汇编复杂一些的扩展内联汇编机器模式是用来在机器层面上指定数据的大小和格式的。我们需要了解的几个操作码操作码输出例如h输出寄存器中8位(1字节)部分b输出寄存器中低8位(1字节)部分w输出低16位(2字节)对应的部分k输出寄存器的32位(4字节)部分。原创 2024-01-09 17:35:20 · 814 阅读 · 0 评论 -
真象还原操作系统_第五章_保护模式进阶,向内核迈进
e:指定文件的入口地址,编译器默认把名为_start的函数作为程序的入口地址。平时我们写的代码都是main函数,但链接器还是用到了_start,它不是我们提供的代码,是运行库提供的。这说明main函数不是第一个执行的代码,是被其他代码调用的,main函数在运行库代码初始化完环境后才被调用。页目录表和页表的物理地址:页目录表放在物理内存0x10_0000处,为了让页表紧挨着页目录表,第一个页表的物理地址为0x10_1000。p_align:指明本段在文件和内存中的对齐方式。-o:指定输出的文件名。原创 2024-01-04 15:05:17 · 1049 阅读 · 1 评论 -
真象还原操作系统_第四章_保护模式入门
保护模式下CPU寻址过程 : 段基址在段描述符中,用选择子索引出段描述符,CPU自动从段描述符中取出段基址,再加上段内偏移地址去寻址。由于保护模式是32位寄存器,所以不需要"段基址左移4位+段内偏移地址"来寻址,直接用"段基址+段内偏移地址"就是要访问的内存。变址寻址与基址寻址的不同,就在于偏移地址的计算更复杂了点。GDT : 描述符的数组,数组中的每个元素是一个8字节的描述符。GDT中第0个段描述符不可用,要用于表示未初始化的段描述符。操作数大小反转前缀0x66(编译时显示)原创 2023-11-15 17:45:42 · 143 阅读 · 0 评论 -
真象还原操作系统_第三章_完善MBR
因为指令都在内存中,所以CPU也要访问内存才能拿到要执行的代码。IP寄存器是不可见寄存器,不可以直接赋值。无条件转移:call、ret、jmp指令在原理上都是通过修改cs和ip寄存器的值,将CPU导向新的位置。jmp:一去不复返地执行新代码,使用环境——交接call:执行一段代码,通过ret返回,不跨段,近调用的call在栈中留下段内偏移地址。call far:远调用,通过retf返回,跨段,远调用的call far在栈中留下了段基址和段内偏移地址。原创 2023-11-01 21:56:42 · 129 阅读 · 0 评论 -
真象还原操作系统_第二章_编写MBR
程序被加载器(软件/硬件)加载到内存的某个区域CPU的cs:ip寄存器被指向这个程序的起始地址。加载器:本质上是一堆函数组成的模块BIOS的最后一项工作是校验启动盘中位于0盘0道1扇区(或0扇区,表示最开始的扇区)【MBR所在的扇区】的内容。如果此扇区末尾的两个字节分别是魔数0x55和0xaa,BIOS便认为该扇区中确实存在可执行程序(即主引导程序MBR),便加载到物理内存0x7c00处,随后跳转到此程序,继续执行。为什么是0盘0道1扇区的内容?原创 2023-10-25 19:56:45 · 99 阅读 · 1 评论 -
真像还原操作系统_第0章 一些你可能感到困惑的东西
我们需要做的就是知道如何通过计算机指令来控制硬件。因为寻址方式是段基址+段内偏移地址,所以0xC00:3和0xC02:1都是访问同一个内存块。内存像是重叠在一起,就是段重叠。平坦模型就是指一个段,段大小是地址总线能够达到的范围。定义:(对于数字而言的,因为指令不需要拆分)小端字节序:低字节放低地址,高字节放高地址大端字节序:低字节放高地址,高字节放低地址优点:小端:因为低位在低地址,强制类型转换时不需要调整字节大端:有符号数,其字节最高位不仅表示数值本身,还起到符号的作用。原创 2023-10-12 09:11:05 · 97 阅读 · 0 评论