![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
从0写x86系统
文章平均质量分 61
文弱书生666
多总结,多复盘
展开
-
12.10开启内存分页机制
王道里面讲的很详细我们对于loader的内存映射先采用一级映射一级映射的话一页是4MBloader部分必须要建立相同的地址映射CR3含有存放页目录表页面的物理地址,。因为页目录表页面是页对齐的,所以该寄存器只有高20位是有效的。而低12位保留供更高级处理器使用,因此在往CR3中加载一个新值时低12位必须设置为0。的主要功能还是用来存放页目录表物理内存基地址,每当进程切换时,Linux就会把下一个将要运行进程的页目录表物理内存基地址等信息存放到CR3寄存器中。原创 2024-03-18 02:17:46 · 841 阅读 · 0 评论 -
12.7规划内存空间的分配
1MB以下给操作系统内核区使用,位图的uint8数组放在kernel后面(怎么找到kernel后面这个地址很有技巧)1MB以上的内存给进程使用。我们需要知道可用内存的细节。对空闲区域的内存进行位图化。原创 2024-03-16 22:04:24 · 172 阅读 · 0 评论 -
12.1位视图的创建和对内存的分配
对于内存管理要处理下列问题位视图(页为单位)解决的是内存的分配问题位视图的数据结构(结构体)原创 2024-03-16 00:46:54 · 246 阅读 · 0 评论 -
11.进程的同步与互斥
和王道里面学的PV操作一摸一样,带个count变量,带个阻塞队列实现函数。原创 2024-03-15 21:57:01 · 549 阅读 · 0 评论 -
10.9让进程能够延时运行
让CPU定时扫描延时队列,然后task结构体在多加一个字段,用来表示延时队列的延时时间,然后CPU定时扫描这些字段,看定时的字段有没有自减到0,自减到0了就看延时队列里面有没有task,然后将延完时的task加到就绪队列的末尾。增加一个延时队列(C语言里面sleep()函数的底层原理)原创 2024-03-15 01:05:29 · 280 阅读 · 1 评论 -
10.6临界资源及其简单保护
在我们运行代码的过程中会出现下图现象,一个任务没有打印完任务就被CPU切换了,然后出现打印出错串行接口输出这部分的代码(临界资源)没有被保护起来我们保护临界资源有两种方案,PV信号量方案后面学,这次先采用关中断方案因为在进入保护区前不知道是关中断还是开中断,所以要恢复到进入临界区前的状态,所以要记录进入临界区前的eflags值然后给所有全局变量(GDT表之类的数据结构加上保护代码)原创 2024-03-15 01:04:59 · 326 阅读 · 1 评论 -
10.4实现时间片轮转算法
之前我们还是未实现时间片轮转,容易造成进程饥饿。使用之前8253定时器的原理。给任务结构体里面加两个字段。原创 2024-03-14 16:55:22 · 436 阅读 · 1 评论 -
10.1实现进程任务管理器
task_init()在上节的基础上加上了任务的名称。之前的任务管理器只支持两个任务,而且不是随机的。我们要实现一个功能很完善的任务管理器。换成更先进的任务切换方法了。我们先要实现就绪队列。原创 2024-03-14 15:40:44 · 195 阅读 · 1 评论 -
9实现操作系统里面的链表结构
*今天遇到一个强制类型转换的问题:**一个是对值进行强制类型转换,一个是对值的地址进行强制类型进行转换后再次读取。对变量的值进行强制类型转换,是把值按照另外一种类型进行存储后读取,变量在内存中的存储形式发生变化;而对变量的地址进行强制类型转换,是变量在内存中的存储形式未发生变化,而在变量读取时读取的方式发生变化。但是,我们使用队列的地方肯定不止进程管理这块,后面外设管理都需要,所以计算偏移计算地址这块我们要写成宏代码。为了方便后面进程切换之类的,需要就绪队列,阻塞队列等所以需要链表数据结构。原创 2024-03-13 00:50:26 · 367 阅读 · 1 评论 -
8.11和Linux相似的任务切换方法
有些人认为TSS切换任务太慢了,因为TSS切换的过程中硬件要做太多操作了详细可以看Intel手册硬件完成了哪些操作所以我们手动保存这些寄存器信息我们采用的就是将其保存在任务自己的栈中一个函数调用另一个函数,有些寄存器是可以不用保存的,有些要自己保存详细要看Intel手册abi386-4第37页EIP当前代码的位置,就是那个返回地址esp栈顶指针,esp要指向栈顶,所以无法通过栈来保存此时的栈顶指针,所以保存在task_t结构体里面因为涉及栈的操作,所以需要汇编代码来写。原创 2024-03-05 22:41:55 · 274 阅读 · 1 评论 -
8.1实现两个小任务的切换(并发)
include进来的文件什么时候和原始文件链接上的呢?首先,原创 2024-03-05 20:35:29 · 586 阅读 · 1 评论 -
7.11利用assert辅助测试
c库本来带assert方法,我们自己写一个assert函数。让自己的代码变为RELEASE版本。如果去掉则用空来替代,多了一个;我们在什么地方使用断言呢?下一章就是进程调度了。原创 2024-03-04 10:38:41 · 201 阅读 · 1 评论 -
7.10在异常程序中打印信息
这样就可以把异常信息打印在串行接口:将串行接口中的信息输出到控制台在-d后面加个int就可以通过qemu来打印中断信息但是因为我们之前打开了定时器,这个方法不止打印异常,还打印中断。原创 2024-03-04 09:50:16 · 226 阅读 · 1 评论 -
7.9支持整数的格式化
对之前的kernel_vsprintf(char * buffer, const char * fmt, va_list args)函数添加代码,使其能够格式化4种进制的整数。函数可以将格式化字符串的输出结果保存到字符数组中,并且可以通过其他的输出语句输出这个字符数组。将int转化为字符串函数。从上面的例子可以看出,格式化字符串到缓存中。原创 2024-03-03 22:47:36 · 202 阅读 · 0 评论 -
7.5若干字符串和内存操作函数的实现
(常量的指针)(相当于默认加了一个const,但是前面不加const和加const是有区别的),即它指向的内存中的内容不能发生改变,但它可以改变自身的指向。实际运行时,系统将试图修改文字常量区的内容,而文字常量区属于只读区,进而引发崩溃。由于运算符 * 的优先级高于运算符 ++,所以是先取指针p指向的地址单元的数据。对内存的操作就是这样的,不知道自己操作的内存存放的是什么数据类型。(*p)++:这个可是不一样啊,人家是先取值,然后值++;是指针,是指针,空间大小就能明确出来,所以可以开辟空间。原创 2024-03-03 16:37:13 · 1319 阅读 · 1 评论 -
7.6实现字符串的格式化输出
stdarg.h头文件定义了一个变量类型va_list和三个宏,这三个宏可用于在参数个数未知(即参数个数可变)时获取函数中的参数。可变参数的函数通在参数列表的末尾是使用省略号(,…)定义的va_list这是一个适用于和va_end()这三个宏存储信息的类型。序号宏&描述1这个宏初始化ap变量,它与va_arg和va_end宏是一起使用的。last_arg是最后一个传递给函数的已知的固定参数,即省略号之前的参数。2这个宏检索函数参数列表中类型为type的下一个参数。3这个宏允许使用了。原创 2024-03-03 17:31:24 · 328 阅读 · 0 评论 -
7.1创建日志输出接口
我们将输出到这个串行接口(不是VGA接口)上,下面代码是这个串行接口初始化和设置一些参数,不用学这个接口这个早就淘汰了,先学一下这个接口过渡一下,后面还是要写函数输出到屏幕上面来0x3F8。原创 2024-03-02 01:11:19 · 287 阅读 · 1 评论 -
6.20启动定时器并开关中断
定时器可以理解为一个特殊的中断。计数器和定时器其实只是功能上的不同以及度量单位的不同,定时器里面肯定是有计数的。内部有三个16位计数器(通道),CLKi,GATEi,OUTi指的是第i个计数器(通道)的端口CLK:计数时钟,外设送来的计数时钟,8253是下降沿同步计数的(方向:输入8253)GATE:计数器的门控信号(方向:输入8253),高电平有效,是计数器的开关OUT:定时时间到就分频输出到引脚(方向:输出到外设),自己不理解这里的概念每个计数器有6种工作方式。原创 2024-03-01 21:52:11 · 1465 阅读 · 1 评论 -
6.19中断的打开与关闭
【代码】6.19中断的打开与关闭。原创 2024-03-01 17:37:30 · 326 阅读 · 1 评论 -
6.17可编程中断控制器8259A
我们一般采用常采用完全嵌套方式(正常嵌套方式/固定优先权)+非自动EOI方式+非缓冲方式。原创 2024-02-28 23:36:06 · 2007 阅读 · 1 评论 -
6.13利用宏重用异常处理代码
利用汇编宏赖实现处理异常代码的复用原创 2024-02-18 22:06:31 · 313 阅读 · 0 评论 -
6.9捕获0异常
捕获除0异常,自己写中断处理程序原创 2024-01-26 16:58:41 · 519 阅读 · 1 评论 -
6.11解析异常栈信息
出现异常以后,系统怎么反馈错误的代码位置原创 2024-01-26 23:33:20 · 621 阅读 · 0 评论