![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
编程
juzejian
这个作者很懒,什么都没留下…
展开
-
ucore-project4: 内核态和用户态切换(1)
终于又回来了。内核态和用户态切换比较麻烦,今天解决了一个bug,搞定了从内核态切换到用户态。 x86中,从高优先级代码切换到低优先级代码的唯一方法就是使用ret或iret返回指令,而从低优先级切换到高优先级的方法是int或call调用指令。这几个指令在跨优先级过程中,都会进行堆栈切换。而切换的目的堆栈,对于int/call指令,是记录在当前task的tss段中,对于ret/iret指令,是...2011-12-18 12:24:50 · 277 阅读 · 0 评论 -
Builder模式
学习rabbitmq,在看其java client api文档时,讲到AMQP类的请求、应答描述符都有builder类,符合Builder模式,让创建协议对象更加简单,允许使用不变的状态创建他们。 一直没有系统学习设计模式,从网上查了一下Builder模式的讲解,中文资料中讲builder模式的基本是人云亦云,拿着翻译的半通不通的所谓中文标准定义,按照自己的例子理解一番,然后写一个简单的小...2012-01-21 22:17:56 · 79 阅读 · 0 评论 -
电脑与操作系统
一直以来对操作系统有很浓厚的兴趣。最近生活越来越忙碌,虽然做的是IT行业,但天天开会,讨论,接触的代码却越来越少。昨晚上拿起xv6的代码想好好看看,忽然发现一堆pagetable、gdt、gatedesc,感觉提不起兴趣,为什么会这样? 刚才拿起代码再看,看到多cpu启动时entryother.S的注释,AP将在实模式下,从XY00:0000开始启动,XY是startup传给各个被boot...2011-11-16 23:23:41 · 109 阅读 · 0 评论 -
ucore-project2: loadkernel(1)
本工程很简单,就是在启动完成后,从第一个硬盘的第二个分区开始,加载8个分区到内存0x10000处。 本工程总是运行出错,C代码进不去,出现和proj1那样16进制代码重复运行的问题。第一反应就是跳转到32位时出错了,看了很多遍代码,没有问题,仔细对比了proj1和proj2的代码,尤其是启动部分代码,也没有问题。proj2和proj1唯一变化的就是在后面加了读硬盘的代码,会不会这些代码有错...2011-11-22 07:30:50 · 87 阅读 · 0 评论 -
ucore-project4: interrupt -- 内嵌汇编在-Os优化时出错分析
为了打印数字,将printf添加进去,结果打印出来乱码,并且是原来正确的、没有用printf打印出来的代码也变成了乱码。 使用readelf -e查看编译出来的kernel文件(kernel.out),发现代码是正确的,打印代码引用的打印字符串的地址处的确放着正确的打印字符串。 需要看到加载到内存后是什么样子,看来应该是读取内核到内存中出错了。不过以前读取内核没有问题啊?查看了以前...2011-11-28 02:54:11 · 171 阅读 · 0 评论