
自己动手写操作系统
jltxgcy
热爱Android,热爱开源。
展开
-
自己动手写操作系统-经典书籍
汇编语言,王爽编写。 王爽老师这本书,绝对是经典中的经典,比其他介绍汇编语言的书强很多。这本书以例子贯穿整本书。不像其他书罗列一堆指令。这本书只介绍了常用指令,而且每个指令都有例子,让你彻底的理解汇编语言。 自己动手写操作系统,于渊编写。 大家会问为什么不是一个操作系统的实现呢。的确一个操作系统的实现是自己动手写操作系统的升级版。本人看到了进程原创 2013-08-24 12:23:04 · 8293 阅读 · 5 评论 -
Orange's 进程间通信
新增一个系统进程,和TESTA进行通信,通信的流程是这样的,如果首先执行到系统进程,发送消息,那么会触发内中断到ring0级,完成发送所需要的动作,之后回到系统进程。待进程切换到TESTA,接受消息,也会触发内中断,会到ring0级,完成接受所需要的动作,之后回到TESTA。 现在TYY,task_sys任务和用户进程依次执行(时钟中断),并且TYY,task_sys任务的原创 2013-04-10 20:51:11 · 2022 阅读 · 0 评论 -
Orange's TTY
一、TYY任务本质就是增加了一个进程,并且运行在ring1,且优先级调高了。并且设置了键盘中断用于接收键盘输入,并将扫描码存放在缓冲区。task_tyy也就是新加入的进程,循环执行读写缓冲区。 现在TYY任务和用户进程依次执行(时钟中断),并且TYY任务的优先级高。当遇到系统调用,切换到ring0,执行到内核态不能被时钟中断打断,执行后返回刚才的进程。 每遇到有键盘原创 2013-04-07 11:20:10 · 2107 阅读 · 0 评论 -
C语言指针强制类型转换
一、举例说明 上图对应函数调用为int printf(const char *fmt, ...),fmt为char *指针类型,所以共占了32位字节,但是*fmt执行的是一个字节,*fmt++执行的是下一个字节,&fmt得到一个32位地址,(char *)&fmt得到是一个执行字节的指针,(char *)&fmt+4后正好执行了var3,因为fmt占用4原创 2013-04-07 11:04:13 · 9955 阅读 · 0 评论 -
Orange's 进程
解释一个操作系统的实现/chapter6/r中代码。 程序流程如下: 1、把Loader中的GDT和esp挪到Kernel中,初始化IDTPTR 2、初始化8259,初始化IDT,初始化GDT中的TSS和LDT两个描述符,以及初始化TSS 3、初始化进程表,指定时钟中断处理程序,让8259可以接受中断,restart开始从ring0内原创 2013-04-01 19:06:26 · 2220 阅读 · 0 评论 -
80386保护模式--描述符,附pm.inc代码详解
描述符包括,存储段描述符(代码段,数据段,堆栈段),系统描述符(任务状态段TSS,局部描述符表LDT),门描述符(调用门,任务门,中断门,陷阱门),注意门描述符和系统描述符都是DT=0时候,对应的状态。存储段描述符和系统描述符如图1,门描述符如图2。 图1 存储段描述符和系统原创 2013-03-10 15:00:42 · 7561 阅读 · 1 评论 -
80386保护模式--GDT,LDT,TSS,调用门,特权级转移,附pmtest5代码详解
教材选择一个操作系统的实现,作者于渊,看此书前最好了有汇编语言,保护模式下的汇编(参考清华杨季文的80X86汇编语言程序设计教程),C语言,计算机组成原理,微机接口,操作系统相关知识。一、80386的寄存器结构 80386微处理器共有7类34个寄存器,通用寄存器组、段寄存器、指令指针和标志寄存器、系统地址寄存器、控制寄存器、调试寄存器、测试寄存器。前四类寄存器的示意图1。其中描原创 2013-03-10 11:14:40 · 5956 阅读 · 0 评论 -
80386保护模式--中断机制,附pmtest9代码详解
一、80386,内存,8259A的连接如图1 图 1 二、编程8259A中断控制器(将ICW写入特定的寄存器) 8259A是可编程中断控制器,对它的设置并不复杂,原创 2013-03-12 10:37:25 · 3877 阅读 · 0 评论 -
FAT12文件系统
一、FAT12软盘格式 软盘格式如图1: 每个扇区是512字节,512B*2880=1.44MB 图 1 软盘(1.44MB,FAT12) 1、引导扇区占512字节,开启后加载这里的512个字节代码,不能把操作系统写在里面,因为太小了。原创 2013-03-12 21:51:20 · 2874 阅读 · 0 评论 -
ELF文件结构
一、ELF文件结构如下图: 之所以要用ELF文件格式,是因为这样可以用C语言和汇编语言混合写内核代码。二、ELF header及Program header详细介绍 nasm -f elf -o kernel.o kernle.asm ld -s -Ttext 0x30400 -o kernel.原创 2013-03-18 16:40:37 · 2852 阅读 · 0 评论 -
int 13H int 10H int 15H
一、int 13h中断 对于1.44MB的软盘来讲,总共有两面(磁头号0和1),每面有80个柱面(0-79),每个柱面有18个扇区。软盘的容量的由来:2×80×18×512=1.44MB,扇区号是这样分配的,0柱面,0磁头是第一个扇区,0柱面,1磁头是第二个扇区,1柱面,0磁头是第三个扇区,1柱面,1磁头是第四个扇区。 二、int原创 2013-03-18 16:51:06 · 7152 阅读 · 1 评论 -
X86/Win32函数调用规范研究
一、函数调用总体框图如下: 二、C语言函数如下:int sum(int x,int y){ int s; s = x + y; return s;}int foo(void){ int m = 2; int n = 3; int k; k = sum(m,n);原创 2013-03-13 16:40:11 · 2604 阅读 · 0 评论 -
80386保护模式--分页机制,附pmtest8代码详解
一、分段机制 逻辑地址---分段机制---线性地址---分页机制---物理地址,分页机制示意图如图1。 图原创 2013-03-11 11:23:00 · 4107 阅读 · 6 评论