摘要: 声明一个变量,然后能使用;声明两个作用域不同的同名变量,却能毫无差错地找到它们。想知道编译器怎么实现这些机制的吗?让我们一起参悟一下大道之源吧。 阅读全文
posted @ 2022-02-16 18:02 东小夫 阅读(800) 评论(2) 推荐(0) 编辑
摘要: 介绍实现单进程、多进程的具体思路和关键代码,还介绍了实现进程所依赖的基础,例如中断、中断重入、进程表、C语言和汇编语言混合编程的方法等。 阅读全文
posted @ 2021-10-17 22:37 东小夫 阅读(534) 评论(0) 推荐(0) 编辑
摘要: loader功能 功能 loader的功能是: 从软盘中把操作系统内核读取到内存中。 进入保护模式。 把内存中的操作系统内核重新放置到内存中。 执行操作系统内核。 如果理解不了上面的部分语句,先搁置,后面会详细说明。 流程图 先看loader的流程图。 不必全部看懂。我觉得可能对读者理解后面的内容有 阅读全文
posted @ 2021-10-16 20:27 东小夫 阅读(573) 评论(0) 推荐(1) 编辑
摘要: 本篇目标 介绍引导扇区。 介绍软盘结构(FAT12)。 用汇编代码把加载器读取到内存中。 用汇编代码把内核加载器读取到内存中。 简略流程 计算机启动的简略流程如下: BIOS对应的中文术语是“基本输入输出系统”。计算机启动时,首先运行的便是BIOS。 BIOS是计算机厂商预置在计算机硬件中的一种软件 阅读全文
posted @ 2021-10-15 20:38 东小夫 阅读(1566) 评论(0) 推荐(1) 编辑
摘要: 本篇和大家分享搭建写操作系统的开发环境,然后建立一个软盘,再用汇编代码打印一个“Hello World”。 阅读全文
posted @ 2021-10-14 20:33 东小夫 阅读(1233) 评论(0) 推荐(4) 编辑
摘要: fork、wait、exit是C语言中的三个连体婴儿,经常一起使用。本文介绍wait和exit的主要流程,并不涉及操作系统的系统调用原理。很简单,一看就懂。 阅读全文
posted @ 2021-07-24 22:41 东小夫 阅读(289) 评论(0) 推荐(0) 编辑
摘要: 懒人版 遍历硬盘分区,分两种情况处理。 第一种,遍历主分区。 每个硬盘都有一个MBR。在MBR中,有一个分区表。分区表有四个表项。每个表项存储一个主分区的元数据,例如,分区的初始位置的LBA、分区的扇区数量。 遍历主分区,实际上就是遍历MBR中的分区表。 第二种,遍历主扩展分区。 主扩展分区也有一个 阅读全文
posted @ 2021-07-23 21:55 东小夫 阅读(668) 评论(0) 推荐(0) 编辑
摘要: 进程 什么是进程?进程是一个运行中的程序实体,拥有独立的堆栈、内存空间和逻辑控制流。 这是标准的进程概念。让我们通过操作系统的fork函数看看这个抽象的概念是怎么在进程的实现中体现出来的。 构成要素 创建一个进程,需要进程体、进程表和数据空间。 进程体在C代码中对应一个函数,编译成二进制代码后就是一 阅读全文
posted @ 2021-07-23 21:44 东小夫 阅读(772) 评论(0) 推荐(0) 编辑
摘要: 可变参数 可变参数是指函数的参数的数据类型和数量都是不固定的。 printf函数的参数就是可变的。这个函数的原型是:int printf(const char *format, ...)。 用一段代码演示printf的用法。 // code-A #include <stdio.h> int main 阅读全文
posted @ 2021-07-22 18:20 东小夫 阅读(687) 评论(0) 推荐(0) 编辑
摘要: 规则 除局部变量的内存地址不能作为函数的返回值外,其他类型的局部变量都能作为函数的返回值。 我总结出下面这些规则: int、char等数据类型的局部变量可以作为函数返回值。 在函数中声明的指针可以作为函数返回值。指针可以是执行int等数据类型的指针,也可以是指向结构体的指针。 在函数中声明的结构体也 阅读全文
posted @ 2021-07-21 17:06 东小夫 阅读(2793) 评论(0) 推荐(0) 编辑