- 博客(8)
- 资源 (1)
- 收藏
- 关注
原创 大家一起写操作系统(4)-简单的任务切换
下面这段程序定义了两个任务,每个任务都有自己的TSS,LDT。任务0打印字符‘a’,任务1打印字符'b'.任务切换通过时钟中断处理过程完成。时钟到达时,判断当前任务号,切换到另一个任务,并用jmp tss:0的方式实现任务切换。任务中通过0x80系统调用打印字符。任务切换时,cpu会自动把当前任务的上下文(主要是各种寄存器,ldt)等保存当当前任务的TSS段中,并加载目标任务的TSS段相关信息,切
2013-01-26 21:15:54 2392 1
原创 大家一起写操作系统(3)-时钟中断
大家都知道操作系统利用中断来与外设进行交互。80xx86兼容机使用两片级联的8259A可编程中断控制芯片组成一个中断控制器,用于实现与I/O设备的交互。可编程意味着我们可以为不同的外设(时钟,键盘,鼠标等)分配不同的中断号,从而执行不同的中断处理过程。 BIOS初始化这个中断控制器时将中断号8分配给了时钟控制器,因而下面我们通过将中断向量表中的8号描述符设为我们的中断程序地址,进而实现时钟中
2013-01-26 12:36:11 2374
原创 大家一起写操作系统(2)-简单的内核
KERNEL_DS equ 0x10VIDEO_DS equ 0x18[SECTION kernel][BITS 32]kernel: mov ax,VIDEO_DS mov gs,ax ;显存数据段选择符 mov ax,KERNEL_DS mov ds,ax ;数据段选择符 mov es,ax ;数据段选择符 m
2013-01-20 20:57:41 1510
原创 大家一起写操作系统(1)-引导程序
上一节我们知道bios会把启动设备第一扇区的512B程序加载到0x7c00处执行.由于512B程序大小所限,所以这段程序一般用于引导,就是说将内核程序从启动设备中读出并复制到一个合适的位置,然后引导程序把控制权将给内核。这一节我们就实现这样一个引导程序。实验环境:编译器:NASM 虚拟机vmware8.0二进制编辑器winHex:用于将引导程序和内核写入软盘映射文件img.
2013-01-20 19:53:03 4406
原创 大家一起写操作系统-准备知识(1)--计算机的启动过程
对于一个没有安装任何软件的裸机,我们想要利用它,就要给它写一个操作系统来充分发挥它的性能。所以想要写操作系统,首先就要知道裸机上电后会做些什么,会执行哪些指令,从而知道我们的操作系统应该放在哪儿,应该如何写,所以先介绍计算机的启动过程。 当计算机上电后,物理内存被设置成从地址0开始的连续区域。除了地址从0xA0000-0xFFFFF(640KB~~~1M共384KB,DOS中的经
2013-01-19 19:35:01 1777
原创 x86处理器几个控制寄存器的作用
1.CR0寄存器(1)PE:CR0的位0是启用保护(Protection Enable)标志。当设置该位时即开启了保护模式;当复位时即进入实地址模式。这个标志仅开启段级保护,而并没有启用分页机制。若要启用分页机制,那么PE和PG标志都要置位。(2)PG:CR0的位31是分页(Paging)标志。当设置该位时即开启了分页机制;当复位时则禁止分页机制,此时所有线性地址等同于物理地址。在开启这个
2013-01-12 20:19:52 1969
原创 AT&T汇编语法中的指令
AT&T中的节(section) 在AT&T的语法中,一个节由.section关键词来标识,当你编写汇编语言程序时,至少需要有以下三种节: .section .data: 这种节包含程序已初始化的数据,也就是说,包含具有初值的那些变量,例如: hello : .string "Hello world!\n" he
2013-01-06 21:33:27 1335
转载 Linux下的lds链接脚本基础
1. 概论 每一个链接过程都由链接脚本(linker script, 一般以lds作为文件的后缀名)控制. 链接脚本主要用于规定如何把输入文件内的section放入输出文件内, 并控制输出文件内各部分在程序地址空间内的布局. 但你也可以用连接命令做一些其他事情.连接器有个默认的内置连接脚本, 可用ld –verbose查看. 连接选项-r和-N可以影响默认的连接脚本(如何影响?).
2013-01-06 21:30:39 868
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人