`
jjchen_lian
  • 浏览: 86188 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论
文章列表

python模块热更新

下面代码摘自web.py框架   selfimport sys import os class Reloader: if sys.platform.startswith('java'): SUFFIX = '$py.class' else: SUFFIX = '.pyc' def __init__(self): self.mtimes = {} def __call__(self): import pdb ...
摘自web.py框架代码 #!/usr/bin/env python import sys import os def get_module(): def main_module_name(): mod = sys.modules['__main__'] file = getattr(mod, '__file__', None) return file and os.path.splitext(os.path.basename(file))[0] def modname(fvars): ...
简单记录一下yield的用法,不说一堆的文字废话,直接从代码入手,下面的代码是摘自web.py框架中的代码   def group(seq, size): """ Returns an iterator over a series of lists of length size from iterable. >& ...
下面进行分页机制的实现,这里我们先来说说为什么要进行分页?我们看到分段机制已经提供了很好的保护机制,那为什么还要加上分页管理机制呢?其实它的主要目的在于实现虚拟存储器,线性地址中任意一个页都能映射到 ...
操作系统版本五学习内容: 现在我们开始从实模式到保护模式的跳跃了。下面我们先来说说什么是保护模式。 之前我们的实模式的寄存器只有16位,那么它的寻址范围就是 段地址(16位)*16+偏移地址(16位),所以它的寻址能力是非常有限的,那么假如切换到保护模式去的话CPU就有巨大的寻址能力,那么有人就会问Intel为什么不设计32位的段寄存器呢,那是Intel想向下兼容以前那些采用16位寄存器设计的系统。那么有什么办法可以解决这种问题,既要使用16位的段寄存器,又要让它的寻址范围能够扩大。那么这时就引入了GDT(Global Descriptor Table)这一技术,GDT是在硬件上面实现的 ...
我们之前已经通过boot.asm成功的把loader.bin加载内存0900h:0100处了,那么我们现在就要来写真正的loader.asm了。 loader.asm完成一下三件事: 第一件事与boot.asm一样,通过遍历根目录区条目找到我们后面自己写的操作系统内核,即我们的kernel 第二件事就是从实模式切换到保护模式 第三件事就是启动分页机制 第四件事就是把我们的kernel搬运到正确的运行内存地址中去 那么我们现在先来看第一件事: 下面的代码跟前面唯一一个不同的地方就是堆栈地址改变了,现在的堆栈地址是0900h:0100h处,并向地址减小的方向扩展。 代码如下: ...
既然我们能够通过根目录条目找到DIR_FstClus了,这个字段告诉了我们文件开始的簇号,它告诉我们文件存放在磁盘的什么位置,从而让我们可以找到它。其实准确来说,这里应该是它告诉了我们文件存放在磁盘数据区的什么位置 ...
总感觉小日本的书有点敷衍的感觉,很多重要的知识点的没有讲,后面发现国内也有一本不错的操作系统书,于渊写的,还不错,理论知识讲解的也很周到。所以下面打算先看于渊的书先。好了,先贴代码,加注释分析 ;%define ...
文章转载自 http://blog.csdn.net/h397916230/article/details/9732425 暑假学习小日本的那本书:30天自制操作系统 更多学习中的问题、资料,群里分享 developing environment:ubuntu   关于u盘启动自己做的操作系统的原因:        我想大 ...

gas汇编改写

现在,我们来看看在linux平台上面怎么对之前实现的功能进行改写了。当然这里先说启动区加载程序跟在win下面是一样的代码的,不同的就是C调用汇编程序代码和汇编调用C代码这里不同。以及剩下的就是一些makefile文件的不同。 我们重点放在C于汇编之间的调用,当然我们这里先不讲汇编是怎么调用C的,因为这一部分我也暂时还没看,我就先用米油给的一个entry.S来直接使用了,后面才对这一部分进行分析。 那我们来看看C调用汇编, 用gcc内嵌gas汇编的方法非常好,也非常的高效。   只需要用一个宏定义就行了,如要在c中调用汇编的hlt指令,只需要  #define io_halt() a ...

画面显示

今天尝试将操作系统的开发移到linux平台过来,因为感觉在win下面做的很不爽。参与了米油的一些代码,总算成功了。那么下面开始今天的内容。 1,用C语言实现内存写入 往naskfunc.nas里添加的一个新的函数   _write_mem8: ;void write_mem8(int addr,int data); MOV ECX, [ESP+4] ;[ESP + 4]中存放的是地址,将其读入ECX MOV AL,[ESP+8] ;[ESP + 8]中存放的是数据,将其读入AL MOV [ECX],AL RET  这段函数类似于C语言中的"write ...
下面开始我们新的一章的学习了。在这章开头,我先要吐槽一下这本书,我觉得这本在第三章,也就是第三天这里,感觉有些地方作者 讲的很含糊,有的地方需要深入的讲解却没有,但是有很多所谓的“风趣”的话,但是我倒不觉得有多风趣,纯属吐槽。 好了下面开始进入正文,在进入正文之前先讲解几个重要的概念 启动区:(boot sector)软盘第一个的扇区成为启动区,就是0面0道1扇区。那么什么是扇区呢?计算机读写软盘的时候,并不是一个字节 一个字节地读写的,而是以512字节为一个单位进行读写。因此软盘的512个字节就称为一个扇区,一张软盘的空间共有1440KB,也就是 1474560字节,除以512得 ...
上代码先: ; hello-os ; TAB=4 ORG 0x7c00 JMP entry DB 0x90 DB "HELLOIPL" DW 512 DB 1 DW 1 DB 2 DW 224 DW 2880 DB 0xf0 DW 9 DW 18 DW 2 DD 0 DD 2880 DB 0,0,0x ...

X86分段机制

内存分段机制有很多好处,不仅方便程序的重定位以及方便内存管理等等的好处,我们就从内存的重定位来分析分段机制的作用。 指令和指令集: 简单地说,处理器的设计者用某些数来指示处理器所进行的操作,这成为指令,或者叫机器指令,因为只有处理器才认得他们。比如,指令F4H表示让处理器停机,当处理器取到并执行这条指令后,就停止工作。指令是集中存放在内存里的,一条接着一条,处理器的工作是自动按顺序取出并加以执行。如下所示,从内存地址0000H开始(也就是内存地址的最低端)连续存放了一些指令,同时,假定执行这些指令的是一个16位处理器,拥有两个16位的寄存器RA和RB 一般来说,指令由操作码和操作数构成 ...
经过一个月的挣扎,我决定还是静下心的来学习汇编和操作系统,然后进一步的巩固自己的底层知识。虽然这一块的工作确实不太好找,所以近期的任务就是读<<自制操作系统一书>>,另外就是继续完善自己的C服务器。 ...
Global site tag (gtag.js) - Google Analytics