自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

河西无名式

月影星痕

  • 博客(35)
  • 资源 (6)
  • 收藏
  • 关注

原创 python GUI编程

摘要:本章,我们来学习python的图形界面编程。在python中,默认的图形界面是Tkinter(interface)——注意,k是小写的。1.编程环境与运行原理        如果你使用的是python3.0以前的版本,默认是没有安装图形界面的。你需要使用yum或者apt来安装tkinter,它是python的默认GUI库,基于Tk工具集,最初是为工具命令语言(Tcl)设计

2014-03-26 21:19:45 3655

原创 python GUI编程——Scrollbar&&Listbox

摘要:在用python进程GUI编程的时候,经常需要用到listbox这个组件,而如何控制Listbox组件的显示问题,则要用到Scrollbar组件。本文,主要学习两个GUI组件之间动作的绑定——一种组件的动作会出发另外一种组件的相应动作。1.Scrollbar控件Scrollbar也就是滚动条,基本上是和listboxs/canvases/text fields这些控件一起结合

2014-03-26 12:34:19 4801

原创 python 偏函数应用

摘要:python的设计核心原则就是简洁——在这种原则的指导下,诞生了lambda表达式和偏函数:二者都让函数调用变得简洁。本文主要为你介绍偏函数的应用。1.为什么要使用偏函数如果我们定义了一个函数,比如说将四个数相加add(one ,two,three,four),上层有很多函数需要调用这个函数。在这些调用中,80%的调用传递的参数都是one=1,two=20,如果我们每都输入相

2014-03-26 09:41:48 2855

原创 python 匿名函数——lamda

摘要:你是不是不经常遇到这样的情景:需要使用一个函数,但功能非常简单,而且仅仅会临时使用一次,不想污染命名空间?如果你经常碰到这种需求,或者在python中看到lamda表达式,本文就与你一起探讨lamda表达式。1.什么是lamda表达式Python 支持一种有趣的语法,它允许你快速定义单行的最小函数。这些叫做 lambda 的函数,是从 Lisp 借用来的,可以用在任何需要函数

2014-03-25 18:07:46 3118

原创 《自己动手写操作系统》第六章:进程调度

摘要:进程和任务都有轻重缓急之分,如何让高优先级别的进程能够获得很好的CPU权限?进程调度方面有很多算法——时间片轮转算法、绝对优先级算法、动态有限级算法、短作业优先算法等。本文,我们将结合实践篇轮转算法实现一种绝对优先级算法。1.固定非等比例下的延迟    我们来修改A、B、C三个进程的延迟: 75 *====================================

2014-03-24 21:24:54 1306

原创 《自己动手写操作系统》 第六章 系统调用的实现

在学习系统调用之前,我们有必要理清几个问题:什么是系统调用?为什么要使用系统调用?如何来实现一个系统调用。1.理论知识    所谓系统调用,就是内核提供的、功能十分强大的一系列的函数。这些系统调用是在内核中实现的,再通过一定的方式把系统调用给用户,一般都通过门(gate)陷入(trap)实现。系统调用是用户程序和内核交互的接口。 系统服务之所以需要通过系统调用来提供给用户空间的根本

2014-03-24 21:20:06 1943

原创 《自己动手写操作系统第六章》引入minix中断处理方式

摘要:回过头来看,我们发现我们的中断处理程序写的并不够优雅。中断被响应需要三个条件:Eflags中的中断标记是打开状态;中断屏蔽寄存器没有屏蔽对应中断,设置了EOI标志。1.修改一下时钟中断处理程序:g/kernel/kernel.asm174 inc dword [k_reenter]175 cmp dword [k_reenter], 0176

2014-03-24 21:11:50 1513

原创 《自己动手写操作系统 》第六章 多进程

摘要:为了实现进程切换,我们需要实现多进程。进程管理是操作系统中最重要的内容之一,在本节中,我们将实现多个进程,从而为以后的进程调度打下基础。1.添加一个进程体 85 void TestB() 86 { 87 int i = 0x1000; 88 while(1){ 89 disp_str("B"); 90 disp_int

2014-03-24 20:33:42 1167

原创 自己动手写操作系统 第六章 号外:中断处理流程详细分析

摘要:进程调度可以说是操作系统中最重要的部分,而中断处理程序,可以说是进程调度中最重要的部分,因此,明白了中断处理流程,可以说就明白了进程调度,也明白了操作系统中很重要的一部分。本文,主要针对自己动手写操作系统中,没有理明白的部分进行讲解和总结,如果你在第六章感觉C和汇编编程之后,遇到一些阻力和困惑,也许能从中找到答案。注意:以下所有内容,均针对进程切换相关的中断程序——从理论上说,一个中断可以不

2014-03-22 20:18:34 1308

原创 自己动手写操作系统 第六章 :丰富中断处理程序

在上面部分,我们仅仅添加了中断,但是中断没有进行任何处理,下面,我们来丰富一下中断处理程序5.第二步——丰富中断处理程序5.1打开时钟中断这里,我们需要复习两个要点:1)要想使得中断控制器能够正常工作,还需要写OCW到中断控制器OCW1:中断屏蔽寄存器的控制,端口是21h和A1h;OCW2:EOI信号,在中断结束的时候发给20h端口和A0h端口5.2现场

2014-03-22 15:16:38 1552

转载 常见标点符号的英文表述

. period or full stop 句号, comma 逗号: colon 冒号; semicolon 分号! exclamation mark 惊叹号? question mark 问号- hyphen 连字符* asterisk 星号' apostrophe 所有格符号,单词内部的省略— dash 破折号_ underscore‘ ’ sin

2014-03-22 09:55:11 1309

转载 vim 快速移动

本节所用命令的帮助入口::help usr_03.txt:help motion.txt:help usr_29.txt:help scroll.txt vim提供的移动方式多如牛毛,但我们并不需要掌握全部这些命令,只需要掌握最适合自己的那些命令。因为我们最终的目的,并不是成为一个vim高手,而是更高效的编辑文本。我们下面介绍的命令,如果没有特别说明,都是在Normal模

2014-03-22 09:39:46 1256

转载 vim插件管理神器:pathogen

1.问题剖析可扩展性是优秀软件的重要特点之一,而 Vim 从 Unix 系统一路传成下来更是将可扩展性发挥到了极致。 相信多数 Vim 的经验用户除了自己经精心维护的 .vimrc 配置文件之外更是有一个用起来得心应手的插件宝库,从而让 Vim 满足自己五花八门的使用需求。Vim 大行其道,除了优秀插件众多之外的另一个因素是插件机制的简便易用。 安装插件的方法无外乎一下载二解压,或

2014-03-22 09:16:06 2003

原创 vim 配置文件语法

摘要:在进行vim配置,也就是编写vimrc文件的过程中,熟悉vim配置文件的语法是非常关键的,本文主要讲解vimrc的相关语法,为以后按照需要配置vimrc做准备。1. 注释写程序之前,第一件事情不是了解语法,而是知道如何写注释。vimrc脚本的注释是使用引号(")作行注释。2. 变量(1) 标量变量可以是数字或字符串,基本与perl相同。命名方式为:作用域:

2014-03-22 09:01:26 8013 2

原创 git checkout : You have local changes cannot switch branches&Entry would be overwritten by mege

摘要:分支切换在git的使用中可谓是最重要的部分之一,而git checkout还经常被用于回滚当前工作目录——当然,也被用来做 分支切换。因此,这是出错率极高的命令。本文主要为你解析git checkout的两个如标题总的特殊错误,然后分析git checkout的回滚作用。When are not given, this command switches branches by

2014-03-20 16:03:27 6956

原创 《自己动手写操作系统》第六章:从系统内核到进程A ring0>>ring1(一)

摘要:进程调度可谓是操作系统中最为重要的环节之一,在本文中,我们主要讲解进程模型、涉及的数据结构、如何从内核态转到用户进程?这一小节主要完成进程数据结构的分析,和从ring0>>ring1的进程开始阶段的内容。1.进程我们来盘点一下,完成进程切换需要哪些数据结构和程序模块:1)首先,一个进程必须有代码、数据(和堆栈):相关数据有LDT、段描述符、TSS等2)对于正在休息的进

2014-03-18 23:54:01 2979 1

原创 《自己动手写操作系统》第五章:扩充内核

从后面的章节开始,orange的书籍上往往没有解释为什么要这样做。我们在学习这段内容的时候,尽量多查找资料,从三个层次思考问题:应该怎么做?为什么要这样做?从本质上来看,这是一个什么问题。1、切换堆栈和GDT先来看看是如何切换的:108 mov esp, StackTop ; 堆栈在 bss 段中109 110 mov dword [disp_pos],

2014-03-17 17:43:41 2135 5

原创 《自己动手写操作系统》第五章 从loader到内核

loader需要做两件工作:加载到内核到内存,并且将控制权交给内核;跳入保护模式。1.用loader加载elf    这个过程和用boot加载loader没有太大的区别,当然,其中有各种琐碎的细节和偏移,这个结合fat12文件格式和根目录项格式就可以明白。根目录中条目格式如下:2.跳入保护模式,启动分页机制    加载完成之后,我们需要进入保护模式,这里我们准备

2014-03-17 17:28:42 1818

原创 C与汇编混合编程&&ELF文件格式解析

准备工作:C与汇编的混合编程ELF文件格式解析,这是《自己动手写操作系统》第五章的准备工作,主要讲解C与汇编混合编程的一些知识,并讲解ELF文件的相关知识,为有C语言写操作系统做准备。1.关于系统调用sys_writeLinux的系统调用通过int 80h实现,用系统调用号来区分入口函数,它的作用类似与dos的中断。       mov edx, len

2014-03-17 17:18:20 1716

转载 IDE SATA SCSI iSCSI等存储硬盘对比与分析

IDE是并口硬盘,(5400-7200转);SATA是串口硬盘,(7200转);SCSI是服务器硬盘,(60、80针,10000转)。硬盘的传输速率:作为电脑中最重要的数据存储设备和数据交换媒介,硬盘传输速率的快慢直接影响了系统的运行速度。不同类型的硬盘,其传输速率往往差别很大。现在主流硬盘主要有三种:按照不同的接口可以分为并口ATA硬盘(即IDE硬盘)、SCSI硬盘和Serial ATA硬

2014-03-14 11:12:01 5876

转载 python装饰器 ——@符号与“TypeError: 'NoneType' object is not callable”

今天来讨论一下装饰器。装饰器是一个很著名的设计模式,经常被用于有切面需求的场景,较为经典的有插入日志、性能测试、事务处理等。装饰器是解决这类问题的绝佳设计,有了装饰器,我们就可以抽离出大量函数中与函数功能本身无关的雷同代码并继续重用。概括的讲,装饰器的作用就是为已经存在的对象添加额外的功能。1. 装饰器入门1.1. 需求是怎么来的?装饰器的定义很是抽象,我们来看一个小例子。

2014-03-13 17:37:06 14552

原创 网络设备解析:中继器、集线器、网桥、交换机、路由器、网关的区别

摘要:在学习计算机网络的时候,你是不是经常好奇,不同计算机之间是怎么链接在一块的?是不是像计算机体系结构中的总线结构呢?在进行虚拟机配置的时候,vmware和kvm-quem会主动创建一个网桥,然后将虚拟网卡绑定在网桥上,通过nat进行上网。然而,网桥是一个什么样的设备?虚拟网桥又是什么样的设备?如果是虚拟机之间互相发送数据,数据会经过实际的网卡吗?虚拟机上继续新建虚拟机呢:物理机器上虚拟网桥vb

2014-03-12 09:48:28 9993 1

原创 《自己动手写操作系统》第四章——摆脱dos引导:boot &&Loader

摘要:在开机过程中,从BIOS中取得第一条指令到内核加载,操作系统的开机运行过程是这样的:“引导---加载内核进入内存——跳入保护模式——开始执行内核”。也就是说,内核执行之前,需要先加载进入内存,然后准备进入保护模式。引导扇区(里面有一定的程序)的512B是不够的,我们在引导扇区和内核之间加入一个模块——Loader,负责完成上述过程。即“引导扇区——Loader——kernel”。在前三章中,

2014-03-09 12:27:28 3110 1

原创 《自己动手写操作系统》第三章 pmtest9源码解析——中断处理程序

本节,我们将学习现代操作系统的一个重要的特点——中断处理机制。同样,中断处理也是软硬件协同完成的,其中硬件部分:8259A负责可编程中断控制器,通过读写端口,实现中断信号和中断号的绑定等工作;CPU通过门描述符与中断向量表来实现中断服务程序。最后,访问一个中断和访问一个门的过程是类似的,读者可以进行相应比较。本文,主要通过pmtest9讲解中断程序的编写。中断门的实现包括如下内容:设置8259

2014-03-07 17:38:05 2374

转载 8259初始化命令字(ICW1-ICW4)

8259A的中断操作功能很强,包括中断的请求、屏蔽、排队、结束、级联以及提供中断类型号和查询等操作,并且其操作的方式又有不同。它既能实现向量中断,又能进行中断查询,它可以用于16位机,也可用于8位机。因此,使用起来感到复杂且不好掌握。为此,以8259A的操作功能为线索,来讨论为实现这些功能的各个命令字的含义,为编程使用8259A提供一些思路。ICW1~ICW4在初始化程序中设定,且在整个工作过

2014-03-06 23:04:45 33853 3

原创 《自己动手写操作系统》第三章pmtest8源码解析——多任务系统下的地址映射

摘要:本节,我们主要接触现代操作系统的一个重要特性——虚拟地址下的多任务。我们都知道,编写高级语言程序使用的地址都是虚拟线性地址,屏蔽了底层实际的物理地址。也就是说,在相同的物理内存布局条件下,对于任务A和B,相同的线性地址line,对应的物理地址内容是不一样的。本节,我们就从实践的角度来看看,这种原理是如何实现的。另外,结合调试过程中出现的错误,讲解关于call和ret指令以及段描述符寄存器的相

2014-03-06 22:23:02 2063

原创 <自己动手写操作系统>第三章pmtest7源码解析——检测系统内存

摘要:在pmtest6.asm中,我们已经初步接触了分页机制,但是很显然,上述分页机制浪费比较严重,而且没有体现应有的用处。本节,我们主要介绍如何根据内存容量,恰当地分配页表。一、理论基础1.如何获取内存分布信息?获取内存,需要用到dos下的int 15h中断,可以参考这里:http://blog.csdn.net/trochiluses/article/details/20078161

2014-03-06 10:21:38 1917 3

原创 《自己动手写操作系统》 第三章 pmtest6源码解析——开启分页机制

摘要:在pmtest5中,我们已经看到了如何在不同的特权级之间进行跳转。那么,pmtest6中,我们将展示如何开启分页机制。读者需要明白的是,无论是分段还是分页,从本质上所都是通过逻辑来设想,然后辅助硬件设计来实现的。不同的内存单元没有本质上的不同,一眼望去,所有的内存都是一样的。所以,读者在学习这一部分的时候,一定要勤于在纸上画出内存的布局图和不同数据结构之间的转换关系。pmtest5,在pmt

2014-03-04 23:05:47 1756

原创 《自己动手写操作系统》第三章 pmtest5源码解析——特权级变换与堆栈切换实例详解

摘要:在pmtest4中,我们已经看到,对于非一致性代码,如何从低特权级转移向高特权级。但是我们该怎样从高特权级别,转移到低特权级别呢?本文,主要是为你解答这些疑问,展现实现这种特权级别转移的方法。另外,我们将在实践中探讨,为什么要设定RPL,是不是相对与DPL多此一举呢?在调试环节,我们将通过改动代码,排查相关错误来深入理解特权级检测机制。一、预备理论1.关于堆栈我们都知道,可以通过cal

2014-03-04 17:43:51 1975 1

原创 《自己动手写操作系统》第三章 pmtest4源码解析——利用门调用实现特权级转移

摘要:本节,我们将通过分析pmtest4来实现利用调用门进行段间转移。一、背景与原理在汇编语言中,我们不能执行这样的指令:mov ds100h和movcs,ax;也就是说,段寄存器的值,是不能像通用寄存器一样,随意赋值的。具体的cs寄存器而言,它涉及到程序的控制转移,需要借助jmp、call、ret、sysenter,sysexit,int n,iret来实现,或者通过中断

2014-03-04 10:49:22 1927

原创 <自己动手写操作系统>第三章——pmtest3源码解析:使用LDT

摘要:在本节中,我们将添加一个LDT段,在段中打印一个字符L,从而学习如何利用程序的LDT段。程序的执行流程随之也会发生变化,我们将分析代码和分析代码结构。一、概要分析:在pmtest2的基础上,我们增加一个段LDT和一个LDT中的一个段codeA。需要注意的是,LDT存在的前提是GDT,因为LDT本身是一个段中,需要由GDT中的信息,得到基地址。另外,这个场景,给出了段选择子,我

2014-03-04 09:02:25 2156

原创 《自己动手写操作系统》第三章pmtest2源码解析

摘要:本节,通过代码解析,帮你解决如下问题:保护模式和实模式下面的偏移量有什么不同?保护膜是和实模式下段基地址是一个意思吗?长跳转指令jmp 0:entry为什么能够在一个代码段中更改另一个代码段的代码?一、总体思路剖析:pmtest2,其实实现的是从实模式到保护模式,然后从保护模式回到实模式,最后回归到dos。其中,一开始就进入了实模式,然后在实模式下初始化段描述符,处理GDT等

2014-03-03 20:51:38 2495

原创 处理器位数&&操作数位数&&操作系统位数&&地址总线位数&&指令位数 的区别

摘要:我们经常听到这几个名词“处理器位数&&操作数位数&&操作系统位数&&地址总线位数&&指令位数的区别“,但是这几个名词之间有什么区别,又有什么联系?本文主要为你解答这些困惑!1.处理器位数CPU一次能够处理的最大位数,本质上与ALU相关,体现在寄存器上,例如16b处理器中只有ax,32b中就是eax,64位处理器中就是rax。如果我们将总长128位的指令分别按照16位、32

2014-03-02 22:38:12 4426

原创 《自己动手写操作系统》第三章 pmtest1——从实模式到保护模式

摘要:本节,我们将学习如何从实模式进入保护模式,剖析pmtest1.asm源码。详细讲解如何从保护模式进入实模式。1.头文件编写:这一部分,你需要把一些关键物理器件和数据结构的布局记在脑子里GDT描述符:32b段基地址(B2、B3、B4、B7)+20b段限长(B0、B1、B6的低4位)+12b段属性(B5、B6的高4位),详细布局见下图(针对代码段和数据段):所

2014-03-02 22:28:43 3530 3

原创 int 3中断与软件调试

摘要:平常编程调试的过程中,我们可能会有这样的疑惑:“为什么使用硬件模拟器,比如bochs调试的时候,开始设置的调试断点都不会生效?”,“断点调试的本质是什么,为什么程序能够在特定的地方停留下来?既然程序是指令流,为何CPU没有一直执行下去?”,“在软件中断的情况下,如何进行调试?”。断点和单步执行是两个经常使用的调试功能,也是调试器的核心功能。本章我们将介绍IA-32 CPU是如何支持断点和单步

2014-03-01 11:47:42 14263 1

博客对应文件——makefiletest

makefile使用说明对应的测试文件,是本篇博文的测试C程序和文件

2013-09-07

libreoffice math使用完全手册

linux下的公式编辑器 libreffice math的使用详细说明

2013-04-21

正则表达式的测试文件

正则表达式简明教程 博客 的测试文档,下载此文档进行测试,进行情景学习

2013-04-20

KMP算法 C语言实现

用c实现的KMP算法,没有注释,不过程序逻辑清晰,适合了解算法的人观看

2012-10-31

kvm虚拟机分析

一篇介绍KVM的论文,对kvm的总体框架、cpu、内存、IO的虚拟化进行了总体分析

2012-02-27

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除