BINBIN Blog

Thinking will not overcome fear but action will.

Orange'S:一个操作系统的实现

文件系统

内存管理 fork 这章节打算做个shell,shell的原理就是用一个子进程来执行一个命令。 目前系统所有的进程都是编译的时候确定好的,每个进程的入口地址、堆栈等等都是在global.c中制定的,除了权限不同,所有进程都是并列的,没有层次关系。 根据添加任务步骤的总结,一个新的进程需要的要素有: 自己的代码,数据和堆栈 在proc_table[]中占用一个位置 在GD...

Orange'S:一个操作系统的实现

进程

进程通讯 这里有宏内核和微内核。 微内核的基本思想就是将内核工作简单化的思想! 宏内核 就是所有工作通过系统调用扔给内核态的做法。 基于宏内核的操作系统之,完成剧吐任务时,用户进程通过系统调用让内核来做事,直来直去。 基于微内核的操作系统中,这个是过程就稍微复杂一些。在完成具体任务时,内核的角色很象个中介。 比如要实现的文件系统,设想用户进程P读取一个文件,首先通过内核告诉进程F...

Orange'S:一个操作系统的实现

文件系统

文件系统 硬盘操作的IO端口 硬盘驱动程序 要先创建硬盘,按照书上所提供的方法,使用bximage创建! 做好了80MB的硬盘,512字节的扇区! 给出了bochsrc配置信息的提示: The following line should appear in your bochsrc: ata0-master: type=disk, path=”80m.img”, mo...

Orange'S:一个操作系统的实现

输入/输出系统

输入/输出系统 主要验证代码是否ok,后续在做笔记,工作越来越忙! a章节,keyboard键盘中断处理程序,按下任意键盘,只显示了* 后面再无反应,详细看书上解释所说! b章节 使用in out指令操作,从8042读取缓冲扫描码! 如图所示,按下a c章节 用数组表示扫描码,8042的输入缓冲区大小只有一个字节,所以当一个扫描码有不止一个字符时,实际上会产生不止一个中断...

Orange'S:一个操作系统的实现

进程

介绍 进程示意图 进程涉及到进程调度! 书上是说一个进程只干一件事,有很多种进程,也就是CPU 只能运行一个进程,其他进程正在等待! 所以需要一个数据结构记录一个进程的状态,在进程被挂起的时候,进程信息就被写入这个数据结构,等到进程重启的时候,这个信息就重新被读取出来! 实际上进程和进程调度室运行在不同的层级上。 书上举例都是让任务运行在ring1,进程切换运行在ring0. ...

Orange'S:一个操作系统的实现

内核雏形

在Linux下用汇编写程序 内核还是离不开汇编的! 代码示例: 1 ; 编译链接方法 2 ; (ld 的‘-s’选项意为“strip all”) 3 ; 4 ; $ nasm -f elf hello.asm -o hello.o 5 ; $ ld -s hello.o -o hello 6 ; $ ./hello 7 ; Hello, world! 8 ; $ 9 ...

Orange'S:一个操作系统的实现

ELF文件格式解析

ELF文件格式 ELF = Executable and Linkable Format,可执行连接格式,是UNIX系统实验室(USL)作为应用程序二进制接口(Application Binary Interface,ABI)而开发和发布的。扩展名为elf。 其主要有三种主要类型: 适于连接的可重定位文件(relocatable file),可与其它目标文件一起创建可执行文件和共享目标...

Orange'S:一个操作系统的实现

突破512字节限制

突破512字节 512B是软盘第一扇区的大小,称为引导扇区。 系统要进入保护模式,512B是不够用的。 所以在软盘的其他地方存放一个文件,通过512B的引导扇区,加载到内存,并把控制权交给该它。 一个操作系统从开机到开始运行,大致经历“引导—加载内核入内存–跳入保护模式—开始执行内核”这样一个过程。 也就是说在内核开始执行之前不但要加载内核,还要准备保护模式等一系列工作,如果全部交...

Orange'S:一个操作系统的实现

Dos可以识别的引导盘

boot.asm 引导扇区需要有BPB 等头信息才能被识别,需要加上去! 代码如下: 1 2 ;%define _BOOT_DEBUG_ ; 做 Boot Sector 时一定将此行注释掉!将此行打开后用 nasm Boot.asm -o Boot.com 做成一个.COM文件易于调试 3 4 %ifdef _BOOT_DEBUG_ 5 org 0100h ; 调试...

Orange'S:一个操作系统的实现

保护模式

保护模式I/O 毫无疑问,对I/O 的控制权限是很重要的内容,保护模式对此也做了限制,用户进程如果不被许可是无法进行IO操作的。 这种限制通过两个方面实现的,它们就是IOPL 和 I/O许可位图。 IOPL 前面代码提到IOPL ,它是IO 保护机制的关键之一,位于寄存器eflags的第12、13位,如图所示: 指令in、ins、out、outs、cli、sti只有在CPL<...