- 博客(8)
- 收藏
- 关注
原创 为什么中断处理函数内不能休眠
假设你有一段代码用于休眠int count = 0x00FFFFFF;while(count--);情况一.中断处理前半段的休眠1.内核在此处是关中断执行的,所以任何的可屏蔽中断都得不到响应.缺页异常??CPU一直在你的while里正常执行,所以缺页异常是不存在的,因为没有触发的条件除0异常??CPU一直在你的while里正常执行,哪来的除0异常,也是没有触发的条件调度??CPU一直在
2009-11-30 12:30:00 2668
原创 调度--操作系统的欺骗
假设有一个CPU体系假设一、这个体系不存在Branch指令(分支或跳转的指令)假设二、这个体系不响应任何异常和中断那么根据这个体系编译得到的指令序列安排在内存中后,一定能得到执行的机会,因为CPU一直按照各条指令的宽度递增取指令的地址, 读取下一条指令执行一.CPU指令和指令执行1.顺序执行:x86体系中MOV, ADD等都是顺序执行的指令定义:顺序执行是指CPU下一次取指
2009-11-28 18:22:00 773
原创 五. MMU 之 IPvirtual
我们继续向智能芯片添加下列规则:规则十二.存在一个16位寄存器VAB和一个16位寄存器PAB规则十三.存在一个IP虚拟访问控制IPvirtual,当IPvirtual打开时,IP每次访问内存读取指令,实际给出的内存物理地址等于IP-VAB+[PAB],[PAB]表示PAB指向的内存物理地址连续两个字节内容规则十四.当规则十一发生后关闭IPvirtual规则十五.当IRET指令执行之后打开IPvir
2009-11-19 17:17:00 536
原创 四. MMU 之 基于最简单CPU的第二个问题
假设存在这样一段指令序列 nop nop nop nop nop nop jmp 0x0000最后一条指令jmp 0x0000的意图是为了跳转到指令序列的开头的nop指令处我们通过某种方法把它放到了物理内存0x1000和0x2000处0x1000: nop0x1001: n
2009-11-19 17:15:00 487
原创 三. 调度 之 最简单的调度
目前我们向我们的智能芯片添加的规则有:规则一.可以处理NOP指令,指令长度为1个字节规则二.可以处理JMP指令,指令长度为3个字节,后两个字节为要跳转的物理内存地址规则三.可以从物理内存中读取指令并且执行规则四.存在一个指令指针寄存器IP,用于指示要读取的物理内存地址规则五.如果当前执行的是NOP指令,IP=IP+1 规则六.如果当前执行的是JMP指令,IP=(JMP指令的后两个字节) 规则七.I
2009-11-19 13:37:00 648
原创 二.调度 之 基于最简单的CPU的问题
根据一中我们对智能芯片添加的规则现在我们再假定物理内存在0x2000地址开始存在与上面0x1000地址有相同的程序(指令序列)物理内存安排如下:0x1000: nop0x1001: nop0x1002: nop0x1003: nop0x1004: nop0x1005: nop0x1006: jmp
2009-11-19 13:29:00 544
原创 一.调度 之 一个最简单的CPU
假设有一块智能芯片,内部存在一个规则列表,初始时列表为空,初始功能是可以向规则列表里添加规则. 我们向智能芯片添加下面这些规则:规则一.可以处理NOP指令,指令长度为1个字节规则二.可以处理JMP指令,指令长度为3个字节,后两个字节为要跳转的物理内存地址规则三.可以从物理内存中读取指令并且执行规则四.存在一个指令指针寄存器IP,用于指示要读取的物理内存地址规则五.如果当前执行的是NOP指令
2009-11-17 17:57:00 602
原创 一、数字电子设备的时间和时间同步
一般数字电子设备(如计算机、手机、嵌入式设备)的计时都是通过晶体振荡器提供的。 计数寄存器在晶振每个振荡周期的上升沿或下降沿会自动累加一个常数值(通常单位是纳秒)。比如: 1GHz的晶振每个振荡周期计数为1ns,125MHz的晶振每个振荡周期计数为8ns, 25Mhz的晶振每振荡周期计数为40ns。 计数寄存器的初始值一般都会在系统初始化的时候设置为当前时间(如2009-1-1
2009-01-16 17:42:00 1101
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人