自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(21)
  • 资源 (36)
  • 收藏
  • 关注

原创 块设备请求项队列及硬盘驱动

linux0.11在读写块设备的时候,并不直接对块设备进行操作,而是借由低级的ll_rw_block函数通过请求项来与设备进行联系,也即加入了一个中间环节。为什么要这样做呢?当然,你也可以直接对块设备进行操作,但是直接操作会存在一些问题:1. 同一个进程在写的过程中就不能发出读的请求,反之,在读的过程中也不能发出写的请求。2. 当一个进程正在对硬盘进行写或者读的时候,其他进程就不能发出硬盘

2014-12-30 15:41:06 1384

原创 linux0.11进程睡眠sleep_on函数和唤醒wake_up函数分析

内核中的这两个函数主要用于访问资源时的同步操作,典型的例子就是高速缓冲区的访问,如果两个进程都要访问同一个缓冲块,那么其中的一个进程就必然睡眠等待,直到该缓冲块被释放才可访问。赵炯博士所著的linux0.11内核完全注释一书中也是对该问题进行详细的讨论,但是我在阅读这段代码的时候还是有些疑问,在此发表下自己的见解。首先将这两个函数贴出来:void sleep_on(struct task_

2014-12-26 15:00:26 4265 7

原创 linux0.11块设备读写过程分析

Linux将一切设备视为文件,所以对于块设备也一样。块设备常见的有软盘和硬盘两种,虽然当今的硬盘传输速率已经非常快,但还是远不及内存,所以当CPU访问这类块设备的时候需要借助一个缓冲,以求得效率的最大化。因此,在分析块设备数据传输过程前,先了解下高速缓冲区(cache)是如何工作的。Linux0.11划分内存的一部分作为cache,这部分内存从内核末端开始到4M内存处,一共可以划出3千多个逻辑

2014-12-23 13:43:38 2206

转载 为什么全局描述符表GDT的第0项总是一个空描述符

为什么全局描述符表GDT的第0项总是一个空描述符,而局部描述符表却不是这样?386的保护模式下:  DT=GDT*1+IDT*1+LDT*n;IDT和每个LDT都要到GDT中报一次到.有一个描述符项与一张表对应.什么是描述表呢? 其实很简单。1个段描述表记录记录一个段的特征信息,中断描述符表记录中断的端口和其对应的函数入口地址或门的入口函数地址,全局描述表GDT记录所有表的地址。其

2014-12-21 21:26:32 1329 1

原创 Minix文件系统磁盘结构分析

00000000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 引导块 *00000400 40 00 a0 00 01 00 01 00 06 00 00 00 00 1c 08 10 |@...............| 超级块00000410 8f 13 01 00 00 00 00

2014-12-21 16:48:14 2612

原创 linux0.11信号处理

linux中的信号处理函数提供了对程序异步处理的功能,比如键盘按下ctrl+c键,该操作将产生一个SIGINT信号,并被发送到当前前台的进程中。内核采用一个无符号长整形变量中(32bit)的每一个比特位来表示不同的信号,因此最多可以定义32种信号。对于一个进程来说,当收到一个信号时,有3种不同的处理方式:1. 忽略该信号。其中SIGKILL和SIGSTOP不能忽略。2. 捕获该信号。调用s

2014-12-19 13:09:55 1176 1

原创 再谈分页

Linux0.11最多支持64个任务,而每个进程拥有的线性空间为64M,64*64M=4G,所以这64个任务刚好填满4G的线性空间。对于一个任务所独占的64M空间并不是说它就一定需要64M的物理内存。linux0.11设计的物理内存只有16M,除去内核以及高速缓冲区占用的4M,就只剩12M给用户进程,至于为什么拥有64M线性空间的进程能够在12M的物理内存甚至4M内存中运行,一方面原因在于通常实际

2014-12-16 15:37:09 732

原创 再谈分段

我们已经知道CPU的分段机制的作用在于将程序逻辑地址映射为线性地址,CPU在启动了保护模式之后,其段寄存器不再作为地址内容的一部分,而是作为一种称为选择子的东西,它作为在全局描述符表或者局部描述符表中寻找目标地址的索引,所以对于程序中每一个地址的寻址就需要指定两个事物,第一个就是选择子,第二个就是描述符表。选择子就是段寄存器,而描述符表就是一个全局数组变量。这个描述符表其实应该是二维的数组,第一维

2014-12-15 12:12:23 524

原创 linux0.11内核空间与用户空间数据交换

学习linux到现在对于这个问题一直都没有在意,细看代码时发现这确实是一个大问题,并且感觉很巧妙。当用户进程执行系统调用进入内核空间时,所有段都指向内核段,但是fs却除外,它需要扮演负责内核空间与用户空间数据的交换的重要角色。其中一个典型的例子就是printk函数,在内核空间中如果要打印一串数据,由于ds段指向内核空间,所以无法向用户空间的tty0控制终端输送数据,linux为了实现print

2014-12-14 20:52:07 661

原创 linux学习总结1

学习linux系统已有月余,可能是天资问题,到现在才感觉入门,不过还是对自己这段时间能够沉下心坚持学习下来感到欣慰,也该作一个阶段性的总结了。学习linux之前对于这个系统基本上是零基础,总感觉linux博大精深,我一开始不去研究它也是因为平时都是零碎的时间,感觉零碎的去学习它很难有一个比较好的学习效果。趁着找完工作这段时间,可以大量时间投入到上面去,一个月下来自己也感觉颇有收获,算是入门了吧。

2014-12-14 12:50:33 705

原创 linux0.11任务切换switch_to

#define switch_to(n) {\struct {long a,b;} __tmp; \__asm__( "cmpl %%ecx,current\n\t" \ "je 1f\n\t" \ "movw %%dx,%1\n\t" \ "xchgl %%ecx,current\n\t" \ "ljmp *%0\n\t" \ "cmpl %%ecx,last_task_used

2014-12-13 20:54:37 1493

原创 linux0.11init进程及shell原理分析

static char * argv_rc[] = { "/bin/sh", NULL };static char * envp_rc[] = { "HOME=/", NULL };static char * argv[] = { "-/bin/sh",NULL };static char * envp[] = { "HOME=/usr/root", NULL };void init(

2014-12-12 16:34:15 2421 2

原创 常用的linux命令

比如针对文件夹folder打包                               tar -cvf folder.tar                解包tar -xvf folder.tar压缩gzip                       tar -zcvf folder.tar.gz          解压缩tar -zx

2014-12-11 15:56:39 552

转载 ubuntu下安装bochs

安装gcc编译环境sudo apt-get install build-essentialsudo apt-get install xorg-devsudo apt-get install libgtk2.0-dev下载bochs最新版本(目前为2.6.7)http://bochs.sourceforge.net/安装命令tar vxzf b

2014-12-11 15:41:36 645

原创 bochs神奇的任意断点调试

#=======================================================================# MAGIC_BREAK:# This enables the "magic breakpoint" feature when using the debugger.# The useless cpu instruction XCHG BX,

2014-12-11 15:08:14 2566

原创 linux0.11进程调度分析

10ms时钟中断 --> 时钟中断函数timer_interrupt,将jiffier加1 --> 调用do_timer函数,将当前进程counter计数减1,如果--counter大于0,则返回继续执行该任务,否则 --> 调用schedule函数,代码如下:void schedule(void){ int i,next,c; struct task_struct ** p;/*

2014-12-11 14:12:45 1557

原创 linux0.11字符设备的读写过程分析

首先要知道linux系统/dev目录下的各种设备文件(文件属性c打头)并不占用空间,你可以发现他们的大小为0字节,他们的区别在于文件的i节点的成员i_zone[0]的值不同,该值标识不同的设备号。比如tty0文件的设备号为0x0400,tty1设备号为0x0401,hd0设备号为0x0300,hd1设备号为0x0301等。而这个设备号里面又包含两部分内容:高字节标识不同类设备,比如tty0和hd0

2014-12-10 20:48:43 1661

原创 方向位DF对串操作的影响

首先看如下代码:#include struct task_struct{ int a,b,c,d,e;};int main(){ struct task_struct init={1,2,3,4,5}; struct task_struct new_task={0,0,0,0,0}; struct task_struct *task[5]={&init}; struct ta

2014-12-09 16:57:12 1151 1

原创 linux0.11 编译遇到的问题

在oldlinux网址下载了linux0.11能够编译通过的代码,在自己ubuntu13.10的机子上确实能够编译成功,gcc版本4.8.1,但是放在boshs上确无法运行,总结有如下问题:1. 反复Loading system... 。一步一步调试,发现当setup完后并没有进入到head中,通过查看Image二进制文件,发现第5扇区(0xa00)开始处的指令并不是head代码。经过一步一步

2014-12-09 16:08:33 1853 1

原创 分段机制

首先谈一下80X86系统中存在的三个地址概念:逻辑地址、线性地址和物理地址。逻辑地址:是指由程序产生的与段相关的偏移地址,也就是在Intel保护模式下程序执行代码段限长内的偏移地址。例如,在C语言指针编程中,读取指针变量本身的值(&操作),实际上这个值就是逻辑地址,它是相对于你当前进程数据段的地址,与绝对物理地址不相关。应用程序员仅需与逻辑地址打交道,而分段和分页机制对他们来说是透明的,仅由系

2014-12-03 19:51:35 1007

原创 一个操作系统的实现——进程

在Orange中,对于进程的实现包含以下步骤:1. 首先定义一个任务,如下类似的函数,函数名就是任务到入口地址。void TestA(){ while(1){}}2. 在kernel_main函数中初始化进程结构体,除了初始化进程的name和pid,段寄存器(注意T1位为1,LDT选择子),eip和esp之外,关键需要初始化进程的局部描述符LDT在GDT中的选择子,以便从内核跳入进程

2014-12-01 11:23:36 820

C# OPC客户端测试程序

C# OPC客户端测试程序,可以在上面进行修改。

2014-12-31

C#写的opc客户端测试程序

C#写的opc客户端测试程序,读文件中的组名和项名。

2014-12-31

VC+glut开发opengl程序

glut开发opengl程序,附VC6.0工程。

2014-12-27

C#操作OPC,包含KepServer4.5软件, OPCAutomation.dll以及一个C#工程

C#操作OPC,包含KepServer4.5软件, OPCAutomation.dll以及一个C#工程。支持S7200,300,400PLC开发。

2014-12-20

亲测可以用的OPCAutomation_dll

亲测可以用的OPCAutomation_dll。用C#做OPC开发的库。

2014-12-20

bochs2.6.7源代码可以在linux下配置编译

bochs2.6.7源代码可以在linux下配置编译。

2014-12-11

linux平台下bochs源代码附使用教程

linux平台下bochs源代码附使用教程。

2014-12-10

修改后的rootimage-0.11

修改后的rootimage-0.11,包含原始image。修改的image能够解决只能运行一次的bug

2014-12-10

SQLite的VC版C程序

SQLite的VC版C程序,附SQLite数据库查看软件。

2014-12-04

MFC socket服务器程序实现

MFC socket服务器程序实现,参考网络调试助手程序,但并不完善。

2014-11-30

Winpcap使用教程

Winpcap使用教程附VS2010程序,绝对是个好东东。

2014-11-21

labview写文件操作

labview写文件操作,用于采集数据存储,文件自动命名。

2014-08-26

网站发布时链接地址依然指向本地而不是域名解决方法

网站发布时链接地址依然指向本地而不是域名解决方法。把该文件放在wwwroot目录下,然后访问该文件。

2014-05-18

LabVIEW与Android共享变量通信教程与软件

LabVIEW与Android共享变量通信教程与android端的data dashboard软件。其实通信机制为LV的共享变量方式,在Pc上创建一个共享变量部署后,然后在android上连接PC机的IP地址读取变量的值,最后显示。教程中展示其实是IPAD的说明,所以界面很华丽,android的比较挫。

2014-05-17

labview操作opc教程

labview 关于opc 编程的一些实用教程。 1. Connect LabVIEW to Any PLC Using OPC 2. Introduction to OPC 3. Connect LabVIEW to Any PLC Using OPC 4. Creating an OPC UA Server Application and OPC UA Client Application Using LabVIEW 5. Why OPC UA Matters

2013-12-02

C#采用AForge写入AVI视频

C#采用AForge写入AVI视频,采用AForge。NET库。

2013-11-23

labview 定义按钮控件教程

labview 定义按钮控件教程,包含详细操作说明以及程序附件。

2013-09-29

Labview 设置菜单栏

Labview 设置菜单栏,包含详细教程以及2010板程序。

2013-09-27

WIN7设置WIFI热点

WIN7设置WIFI热点,里面包含3个bat文件,第一个为设置wifi的ID和密码,第二个启动wifi热点,第三个关闭wifi热点。如果要共享本机网络,还须设置本地连接为共享

2013-09-08

VC写的远程关机软件

用VC写的远程关机软件,通讯采用TCP通讯,软件建立本地服务器,远程客户端去连接,发送shutdown命令即可关机

2013-09-08

VC写的定时关机软件(含源代码)

VC写的定时关机软件(含源代码),包含最小化托盘等操作!

2013-07-27

数字化婚姻配对代码

2013中兴捧月任务1:数字化婚姻配对VC6.0工程文件,包含程序代码以及可执行程序!

2013-07-23

数字化婚姻配对程序

2013中兴捧月任务一:数字化婚姻配对程序

2013-07-15

89c52pwm输出

89c52pwm输出。。。。。。。。。。。

2011-08-24

89c51模拟SPI驱动25c320

89c51模拟spi时序,对25xx320系列存储芯片进行写读取。。

2011-08-24

基于Mscomm控件的Labview串口收发程序

自己写的基于Mscomm控件的Labview串口收发程序,可以进行串口收发,下载根据自己需要改变串口号和波特率就行了

2011-04-25

第五届飞思卡尔智能车比赛乐山师范学院明星电缆队技术报告

第五届飞思卡尔智能车比赛乐山师范学院明星电缆队技术报告。太厉害了,太难找了,拿出来分享了。。。

2010-12-18

嵌入式学习的心得,学习嵌入式不再彷徨

嵌入式学习的心得体会,对于正在彷徨于嵌入式学习的各位友友们,看了文章的对于嵌入式学习的体会建议,相信自己的思路会变得清晰。

2010-12-18

Python初学教程:《简明Python教程》

Python初学教程:《简明Python教程》

2010-10-10

labview wince 串口调试助手

基于wince系统的用labview语言开发的串口调试助手

2010-08-27

labview 中的GPIB仪器编程

LabVIEW是当今最流行的虚拟仪器开发平台,文中介绍了用LabVIEW开发基于GPIB总线的虚拟仪器的全过程及其硬件和软件要求,并给出了一个开发实例。实例为用LabVIEW虚拟仪器开发平台对一台带有GPIB接口磁测量仪进行二次开发,构建自己的虚拟仪器。与台式仪器相比,该虚拟仪器最突出的优点是不需要其它数据采集卡便可完成磁场的实时采集测量,并将采集结果保存到文件,以供后续分析使用,从而大大扩展了原有台式仪器的功能。

2010-08-27

智能车舵机的相关原理与控制原理

舵机是一种位置(角度)伺服的驱动器,适用于那些需要角度不断变化并可以保持的控制系统。目前在高档遥控玩具,如航模,包括飞机模型,潜艇模型;遥控机器人中已经使用得比较普遍。舵机是一种俗称,其实是一种伺服马达

2010-05-16

Keil实例教程。。。。。。。。。。。。。。。。。。。。

很好的学习keil的资料,真的不错。。。。。。。。。。。。。。。。。。。。

2010-03-27

很好的单片机实例哦。。。

单片机设计2008奥运会。。。。。学习他的设计理念。真的不错

2010-03-27

空空如也

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

TA关注的人

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