- 浏览: 86188 次
- 性别:
- 来自: 广州
最新评论
-
fair_jm:
多谢博主分享 这些模块资料都蛮少的 自己英语渣又看的不是很懂^ ...
The Erlang Parser之erl_parse
文章列表
python模块热更新
- 博客分类:
- 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
...
python获取当前模块的名称
- 博客分类:
- python
摘自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.
>& ...
于渊-动手写操作系统5
- 博客分类:
- 操作系统
下面进行分页机制的实现,这里我们先来说说为什么要进行分页?我们看到分段机制已经提供了很好的保护机制,那为什么还要加上分页管理机制呢?其实它的主要目的在于实现虚拟存储器,线性地址中任意一个页都能映射到 ...
于渊-动手写操作系统4
- 博客分类:
- 操作系统
操作系统版本五学习内容:
现在我们开始从实模式到保护模式的跳跃了。下面我们先来说说什么是保护模式。
之前我们的实模式的寄存器只有16位,那么它的寻址范围就是 段地址(16位)*16+偏移地址(16位),所以它的寻址能力是非常有限的,那么假如切换到保护模式去的话CPU就有巨大的寻址能力,那么有人就会问Intel为什么不设计32位的段寄存器呢,那是Intel想向下兼容以前那些采用16位寄存器设计的系统。那么有什么办法可以解决这种问题,既要使用16位的段寄存器,又要让它的寻址范围能够扩大。那么这时就引入了GDT(Global Descriptor Table)这一技术,GDT是在硬件上面实现的 ...
于渊-动手写操作系统3
- 博客分类:
- 操作系统
我们之前已经通过boot.asm成功的把loader.bin加载内存0900h:0100处了,那么我们现在就要来写真正的loader.asm了。
loader.asm完成一下三件事:
第一件事与boot.asm一样,通过遍历根目录区条目找到我们后面自己写的操作系统内核,即我们的kernel
第二件事就是从实模式切换到保护模式
第三件事就是启动分页机制
第四件事就是把我们的kernel搬运到正确的运行内存地址中去
那么我们现在先来看第一件事:
下面的代码跟前面唯一一个不同的地方就是堆栈地址改变了,现在的堆栈地址是0900h:0100h处,并向地址减小的方向扩展。
代码如下:
...
于渊-动手写操作系统2
- 博客分类:
- 操作系统
既然我们能够通过根目录条目找到DIR_FstClus了,这个字段告诉了我们文件开始的簇号,它告诉我们文件存放在磁盘的什么位置,从而让我们可以找到它。其实准确来说,这里应该是它告诉了我们文件存放在磁盘数据区的什么位置 ...
于渊-动手写操作系统1
- 博客分类:
- 操作系统
总感觉小日本的书有点敷衍的感觉,很多重要的知识点的没有讲,后面发现国内也有一本不错的操作系统书,于渊写的,还不错,理论知识讲解的也很周到。所以下面打算先看于渊的书先。好了,先贴代码,加注释分析
;%define ...
文章转载自 http://blog.csdn.net/h397916230/article/details/9732425
暑假学习小日本的那本书:30天自制操作系统
更多学习中的问题、资料,群里分享
developing environment:ubuntu
关于u盘启动自己做的操作系统的原因:
我想大 ...
现在,我们来看看在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 world例子
- 博客分类:
- 操作系统
上代码先:
; 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 ...
内存分段机制有很多好处,不仅方便程序的重定位以及方便内存管理等等的好处,我们就从内存的重定位来分析分段机制的作用。
指令和指令集:
简单地说,处理器的设计者用某些数来指示处理器所进行的操作,这成为指令,或者叫机器指令,因为只有处理器才认得他们。比如,指令F4H表示让处理器停机,当处理器取到并执行这条指令后,就停止工作。指令是集中存放在内存里的,一条接着一条,处理器的工作是自动按顺序取出并加以执行。如下所示,从内存地址0000H开始(也就是内存地址的最低端)连续存放了一些指令,同时,假定执行这些指令的是一个16位处理器,拥有两个16位的寄存器RA和RB
一般来说,指令由操作码和操作数构成 ...
用虚拟机软盘启动自己的磁盘镜像文件
- 博客分类:
- 操作系统
经过一个月的挣扎,我决定还是静下心的来学习汇编和操作系统,然后进一步的巩固自己的底层知识。虽然这一块的工作确实不太好找,所以近期的任务就是读<<自制操作系统一书>>,另外就是继续完善自己的C服务器。 ...