操作系统
文章平均质量分 67
yxc135
此用户很懒,没有任何简介
展开
-
验证PSP(程序段前缀)的作用
程序段前缀是Dos下可执行程序载入内存后结构的一部分,位于前0100h部分,它的大致作用有:(1) 子进程通过程序段前缀继承、恢复父进程的信息(2 ) 使子进程正确地返回到父进程( 3) 恢复中断23 H 和24H 的入口地址(4) 给子进程提供Dos 的入口信息更详细的信息请参考:http://zhangxunzi.zxq.net/ebook/xxdo原创 2013-03-29 14:21:47 · 4422 阅读 · 1 评论 -
关闭中断过程中是否会发生中断丢失
一直有一个疑问,就是如果在关闭中断期间有新的中断到达,新中断是会被丢弃还是会在当前中断结束后立即响应? 答案是后者。 下面摘自http://linux.linti.unlp.edu.ar/images/0/0c/ULK3-CAPITULO4-UNNOBA.pdf (需要翻墙) The PIC can be told to stop issuing interrupts that原创 2013-04-11 19:55:16 · 3946 阅读 · 1 评论 -
硬盘参数释疑
1. 硬盘参数释疑 到目前为止, 人们常说的硬盘参数还是古老的 CHS (Cylinder/Head/Sector)参数. 那么为什么要使用这些参数, 它们的意义是什么?它们的取值范围是什么? 很久以前, 硬盘的容量还非常小的时候, 人们采用与软盘类似的结构生产硬盘. 也就是硬盘盘片的每一条磁道都具有相同的扇区数. 由此产生了所谓的3D参数 (Disk Geom转载 2013-04-18 22:46:16 · 1007 阅读 · 0 评论 -
《自己动手做操作系统》保护模式阅读报告
一、 基本1、实模式下的寻址模式和寻址能力:寻址模式为 段值*16+偏移值 ,寻址能力为0~FFFFFh。当时由于计算机的发展,地址线增加到了20位,但是处理器仍是16位的,由于16位的寄存器不能存放20位的地址,因此内存被分成多个64KB的段,段值如00000、10000、20000等,由于最后一个十六进制数都为0,因此省略了,将高16位存放在段寄存器,原创 2013-05-02 17:24:45 · 1294 阅读 · 0 评论 -
《一个操作系统的实现》总结2——中断处理
二、中断处理程序 1、时钟中断kernel/clock.c:PUBLIC void clock_handler(int irq){ if (++ticks >= MAX_TICKS) ticks = 0; if (p_proc_ready->ticks) p_proc_ready->ticks--; if (key_pressed) inform_int原创 2013-05-02 18:38:39 · 1496 阅读 · 0 评论 -
《一个操作系统的实现》总结3——系统任务和用户进程
三、运行中的系统任务和用户进程 首先,进程之间最重要的是进程通信,先来分析一下通信是如何实现的。 进程要与其它进程通信均是调用send_recv函数,那我们就来看一下这个函数,节自kernel/proc.c:/***send_recv调用了sendrec(syscall.asm),sendrec用int INT_VECTOR_SYS_CALL进行系统调用陷入内核,这时到了sys_cal原创 2013-05-02 18:39:54 · 2165 阅读 · 1 评论 -
《一个操作系统的实现》总结1——启动流程
注:文中的代码是在ORANGE源码(最后一个版本chapter10\e\kernel)的基础上所添加的注解,以 /*** ***/ 为标注,主要是一些重要文件和比较难理解的地方做了注解。 由于回车或字符大小原因一些图在网页上的显示可能不是很准确,可以复制到本机看。 另外,CSDN的编辑器有点shi,整篇发表有错误,因此拆成了三份,本意是一整篇文章。 在操作系统正式原创 2013-05-02 18:37:11 · 2184 阅读 · 0 评论 -
有界缓冲区问题
考虑生产者-消费者问题(也称作有界缓冲区问题)。两个进程共享一个公共的固定大小的缓冲区。其中的一个,生产者,将信息放入缓冲区;另一个,消费者,从缓冲区中取出信息(该问题也可被推广到m个生产者,n个消费者的情况,但出于简单起见,我们只考虑一个生产者,一个消费者的情况)。 一般考虑的调度算法: 但该算法会有出现错误的情况: 当count为0,消费者刚执行完(c原创 2013-03-17 20:17:33 · 5106 阅读 · 0 评论 -
图示逻辑地址转换到物理地址
ds:esi (ds中保存有 Selector_x ,esi中是逻辑(虚拟)地址) ↓ ↓ ↓ →→→→→→→→→--------------------------------原创 2013-03-31 23:05:23 · 1550 阅读 · 0 评论 -
《自己动手写操作系统》多进程代码分析
主要的代码有三部分:(在chapter6\k\kernel中) (1)kernel.asm中时钟中断处理的部分: ; 中断和异常 -- 硬件中断; ---------------------------------%macro hwint_master 1 call save in al, INT_M_CTLMASK ; `. or al, (1 << %原创 2013-04-12 13:58:15 · 1198 阅读 · 0 评论 -
中断处理的详细过程
这里以IRQ0(时钟中断)为例说一下保护模式下的中断响应过程,我们假定中断响应过程中不会有错误出现,于是忽略一些检测过程:1.当产生一个IRQ0,首先由中断屏蔽寄存器IMR中的数据(由写入的OCW1决定)判断是否响应该中断,另外还会判断EOI,如果EOI为0,也不会响应中断;2.如果步骤1中的判断都是响应,那么中断向量号经由INTR传到CPU(这里中断向量号为20H,可通过向主82转载 2013-04-11 19:50:52 · 2632 阅读 · 0 评论 -
中断向量表和中断描述符表IDT
CPU是根据中断号获取中断向量值,即对应中断服务程序的入口地址值。因此为了让CPU由中断号查找到对应的中断向量,就需要在内存中建立一张查询表,即中断向量表(在32位保护模式下该表称为中断描述符表)。80x86微机支持256个中断,对应每个中断需要安排一个中断服务程序。在80x86实模式运行方式下,每个中断向量由4字节组成。这4字节指明了一个中断服务程序的段值和段内偏移值。因此整个向量表的长度为1K转载 2013-03-28 23:22:20 · 10873 阅读 · 0 评论 -
GDT是如何切换的
首先要搞清楚一点,gdtr中存放的是线性地址,而不是物理地址。除了cr3以外,开启了分页所有地址都要通过页表的转换,这是硬件决定的,绕不过去的。为何除了cr3,这显然很好理解,线性地址是先通过cr3找到页目录表的基址,然后才能开始转换,如果cr3中的基址也是线性地址,将会造成死循环。 我们以Orange's中的代码为例,首先看gdtr第一次载入的代码://Loader.asm原创 2013-03-31 20:37:35 · 3401 阅读 · 0 评论 -
实模式和保护模式下的地址计算方式
关于保护模式下的寻址方式,是众所周知的,比如: mov edi, [dwDispPos] ;dwDispPos是一个标识数据的label 首先通过ds中的选择子所存的偏移和gdtr找到段描述符,然后取出段描述符中的基址加上dwDispPos所指示的偏移(此偏移是相对于cs段基址的,因此为了正确地取得数据,ds段基址应该与cs段基址相同)。之后再通过分页机制将所得的线性地原创 2013-04-03 12:53:58 · 1509 阅读 · 0 评论 -
硬盘和软盘的引导扇区结构
一、 硬盘MBR MBR(Master Boot Record,或Main Boot Record),中文意为主引导区记录,位于磁盘0磁道的第一个扇区,大小正好为512字节,所以又称为主引导扇区。 MBR构成如下图所示: 从图中看出,MBR被分为三个部分: 1) 第一部分为Bootloader(主引导信息),占446字节,它包括两项内容:转载 2013-04-02 19:19:22 · 4023 阅读 · 0 评论 -
段寄存器的结构
---------------------原文作者为mik,感谢mik大神提供学习资料-----------------------------------------------http://www.mouseos.com/arch/segmentation.html-----------------Segment Register 也可以称作 Selector Register转载 2013-04-02 20:17:40 · 3569 阅读 · 0 评论 -
8259A是如何区分不同控制字的
•8259A内部有7个寄存器,分为两组:初始化命令寄存器组和操作命令寄存器组。初始化命令寄存器组包括4个寄存器:ICW1~ICW4对应的寄存器。操作命 令寄存器组包括3个寄存器:OCW1~OCW3对应的寄存器。 •由于8259A只有一条地址线A0,所以它只能有两个端口地址,而8259A有7个命令字,每个命令字要写入相应的寄存器。为此,采取以下几点措施:第一,以端口地址区分;第二转载 2013-04-06 10:18:21 · 8100 阅读 · 0 评论 -
Windows内存映像文件
=====================转自 小叶子 http://www.cnitblog.com/shuyezi122/archive/2010/01/21/63905.html==============一.内核对象和地址空间为了更好地理解本文后面的内容,在介绍内存映像文件之前我们先简单回顾一下Windows中内核对象和地址空间的有关概念。在Windows中有各种内核对转载 2012-05-14 12:10:58 · 2453 阅读 · 0 评论 -
程序载入内存后的结构
首先我们以Linux为例来研究,这代表了现在操作系统的有多进程的处理方式:(后面我们会分析dos的处理方式)来看一幅很经典的内存结构图:------------------------------低地址代码区 |------------------------------全局数据区 |--原创 2013-03-23 00:36:09 · 2624 阅读 · 0 评论 -
C语言实现读取FAT12文件系统
假设要读取的FAT12文件系统的映像文件为跟程序在同一目录下的 a.img :/*文件名不支持中文及符号。*/#include #include #include typedef unsigned char u8; //1字节typedef unsigned short u16; //2字节typedef unsigned int u32; //4字节int Byt原创 2013-04-07 18:58:26 · 16371 阅读 · 15 评论