- 博客(46)
- 资源 (37)
- 收藏
- 关注
转载 内存屏障
处理器的乱序和并发执行目前的高级处理器,为了提高内部逻辑元件的利用率以提高运行速度,通常会采用多指令发射、乱序执行等各种措施。现在普遍使用的一些超标量处理器通常能够在一个指令周期内并发执行多条指令。处理器从L1I-Cache预取了一批指令后,就会分析找出那些互相没有关联可以并发执行的指令,然后送到几个独立的执行单元进行并发执行。比如下面这样的代码(假定编译器不做优化):z =
2011-12-27 18:21:47 615
转载 汇编语言---移位指令
移位指令是一组经常使用的指令,包括:算数移位、逻辑移位、双精度移位、循环移位、带进位的循环移位;移位指令都有一个指定需要移动的二进制位数的操作数,该操作数可以是立即数,也可以是CL的值;在8086中,该操作数只能是1,但是在其后的CPU中,该立即数可以是定义域[1,31]之内的数;一、算数移位指令:算数移位指令分为:算数左移SAL(Shift Algebraic Left)和算数右移S
2011-12-27 16:57:12 20028 4
转载 关于C语言中函数调用和参数传递机制的探讨(三 .传递多个参数等)
3. 函数原型:int function(int i, int j); 现在参数是两个,不是一个了,两个到底该怎么处理呢?同样看C程序和相应的汇编代码: // C code int function(int i, int j) { return (i + j); } int main(void)
2011-12-27 16:47:17 879
转载 关于C语言中函数调用和参数传递机制的探讨(二 .传递一个参数)
2.函数原型: int function(int i) 现在有了参数了,也有了返回值了,相对来说更比较复杂了。这里就得引入%esp寄存器值的变化了,不然就难以把问题分析清楚了,如果想形象一点地描述那就画图,自己画个图根据我的数据变化一起分析吧。看看一段简单的C代码: // C Code int function(int i) {
2011-12-27 16:45:18 772
转载 关于C语言中函数调用和参数传递机制的探讨(一 .无参数传递)
原帖及讨论:http://bbs.bccn.net/thread-106533-1-1.html关于C语言中函数调用和参数传递机制的探讨 函数,相信许多人也知道其重要性;一个文件往往由一个或者多个函数构成的。然而可能许多人还不知道函数调用的一些深层问题,所以我写的这篇文章一来是应了一个好朋友的要求而写,二来希望一些朋友能够从我这篇文章了解函数调用的机制。但是并不是每个人都可以
2011-12-27 15:54:12 1668
转载 AT & T汇编简介
1.寄存器引用 引用寄存器要在寄存器号前加百分号%,如“movl %eax, %ebx”。80386有如下寄存器: 8个32-bit寄存器 %eax,%ebx,%ecx,%edx,%edi,%esi,%ebp,%esp; 8个16-bit寄存器,它们事实上是上面8个32-bit寄存器的低16位:%ax,%bx,%cx,%dx,%di,%si,bp,% sp;8个8-bit寄存器:%ah,%
2011-12-27 12:47:45 597
转载 CListBox类常见函数用法
1.构造函数CListBox( );例如:CListBox m_ListBox;CListBox *pListBox;2.生成函数BOOL Create( DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID );例如:CRect rect(0,0,100,100);
2011-12-26 23:21:24 1627
转载 ADO数据库编程-总结2
三、ADO中的数据类型 在使用ADO技术操作数据库时,存取变量的数据类型都是COM类型,这就要求经常在COM类型和普通数据类型之间进行类型转换。 ADO中特有的数据类型包括以下三种: 1)Variant 该类型是结构化的数据类型,它包含值成员和数据类型成员。
2011-12-25 16:28:05 494
转载 ADO数据库编程-总结1
一、数据库操作准备1、导入ADO动态链接库 在工程的stdafx.h中加入如下语句: #import "c:\program files\common files\system\ado\msado15.dll" no_namespace\ rename("EOF","adoEOF") 这一语句有何作用呢?其最终作用同我们熟悉的#includ
2011-12-25 16:26:06 643
转载 ADO&VC一]使用ADO智能指针_ConnectionPtr,_CommandPtr及_RecordsetPtr
使用C++(MFC)操作数据库,首选就是ADO。ADO库包含三个基本接口:_ConnectionPtr接口、_CommandPtr接口和_RecordsetPtr接口。在MFC要使用ADO(COM)首先要引用COM地址,编译器才能够实现。从网上的很多资料都介绍,将EOF重命名,防止和其他冲突,那偶们也这样做反正也不会有坏处。格式如下:#include #import "c:\program
2011-12-25 15:33:00 897
转载 Windows 7,Windows Server 2008 MSDTC配置
Vista, Windows 7,Windows Server 2008 MSDTC配置(转http://hi.baidu.com/wuwenjie/blog/item/738b0638a2514bfbb211c790.html)打开“控制面板(Control Panel)―管理工具(Administrative Tools)―组件服务(Component Service)”(或者开始-运
2011-12-25 14:47:01 1086
转载 解决:对COM 组件的调用返回了错误 HRESULT E_FAIL
第一部分 调用SHDOCVW(web浏览器) COM组件的时候,返回了错误 HRESULT E_FAIL。总结如下: 1. 在控制面板--->管理工具--->服务 中,开启Distributed Transaction Coordinator 服务。 2. 打开控制面板--->管理工具--->组件服务--->选择计算机--->我的电脑--->右击属性--->选择MSD
2011-12-25 14:20:54 4358
转载 linux内核分析笔记----块I/O层
如果您记性好的话,应该记得我在linux设备驱动实例帖中说的最多的就是字符设备驱动程序,那么今天的块I/O层是一个和字符设备驱动相对应的设备。两者最根本的区别就是看它们能否被随机访问,换句话说就是看它们能否在访问设备时从一个位置随意地调到另外一个位置,如果可以就是块设备,否则就字符设备。 块设备中最小的可寻址单元是扇区。扇区的大小一般是2的整数倍,最常见的大小是512个字节。扇区
2011-12-20 11:57:57 701
转载 CPropertyPage 间的数据传递
1 如何在属性表的两个页之间传递数据?cpropertypage有一个成员函数querysiblings(wparam, lparam)。应用程序可以使用这个函数。querysiblings生成一条psm_querysiblings消息,它传递给所有的兄弟,也就是属性表上的其他属性页。一般可创建一个所有页可见的枚举,如:enum{query_my_string, query_somet
2011-12-19 21:35:35 1613
转载 基数(radix)树 - 嵌入式系统书撰写 (转载)
基数(radix)树 Linux基数树(radix tree)是将指针与long整数键值相关联的机制,它存储有效率,并且可快速查询,用于指针与整数值的映射(如:IDR机制)、内存管理等。IDR(IDRadix)机制是将对象的身份鉴别号整数值ID与对象指针建立关联表,完成从ID与指针之间的相互转换。IDR机制使用radix树状结构作为由id进行索引获取指针的稀疏数组,通过使用位图可以快速
2011-12-19 18:02:18 1148
转载 Barrier
Barrier是类似于信号量和条件变量的概念,用于控制并行程序的执行。一个Barrier通常用来确保某些并行算法中的所有合作线程可以继续运行之前到达算法中的一个特定点。Barrier可以借助条件变量实现。Barrier能够保证一组线程在全部到达这个barrier之前,组内任何一个线程都不能逾越barrier去继续执行下面的代码。在Barrier最简单语义实现中,通常调用函数barrier_
2011-12-19 15:29:02 1364
转载 C 打印格式小记
d,lx,ld,,lu,这几个都是输出32位的hd,hx,hu,这几个都是输出16位数据的,hhd,hhx,hhu,这几个都是输出8位的,lld,ll,llu,llx,这几个都是输出64位的,printf( "%llu ",.....)%llu 是64位无符号%llx才是64位16进制数 Dev-C++下基本数据类型学习小结环境: Dev-C++ 4.9
2011-12-16 14:36:36 2021
原创 VIM折叠功能小结
VIM中有几种折叠方式,本人觉得manual的方式比较好用。vimrc中的设定64 let &guicursor = &guicursor . ",a:blinkon0" 65 set nu 66 "set autoindent 67 set cindent 68 69 highlight Pmenu guibg=brown gui=bold 70
2011-12-15 10:24:02 936
转载 Linux内存管理之kmalloc 与 __get_free_page()
在设备驱动程序中动态开辟内存,不是用malloc,而是kmalloc,或者用get_free_pages直接申请页。释放内存用的是kfree,或free_pages. 对于提供了MMU(存储管理器,辅助操作系统进行内存管理,提供虚实地址转换等硬件支持)的处理器而言,Linux提供了复杂的存储管理系统,使得进程所能访问的内存达到4GB。 进程的4GB内存空间被人为的分为两个部分--用户空
2011-12-12 18:16:17 863
转载 linux地址转换
三、地址转换上图揭示了进程空间、内核空间与物理地址之间的转换关系。在linux中,物理地址用page结构 表示,物理内存在初始化时已经生成了page结构管理,其他地址空间则需要生成page再进行管理(ioremap)。物理地址可以被映射到内核空间或进程空间,也可以从内核空间或进程用户空间解除物理地址(page)。所有转换中,只有mmap可以在进程中使用,其他都是内核函数。即使使
2011-12-12 18:13:00 1078
转载 Linux地址映射(1)--线性映射与非线性映射
一,线性映射与非线性映射1. 内存管理物理内存管理:Linux内存最小管理单位为页(page),通常一页为4K。初始化时,linux会为每个物理内存也建立一个page的管理结构,操作物理内存时实际上就是操作page页。某些设备会映射在物理内存地址外,这些地址会在使用时建立page结构。 进程内存管理:Linux进程通过vma进行管理,每个进程都有一个task_s
2011-12-12 17:25:13 805
转载 看块设备驱动部分的笔记
1. 对于块设备,首先明确几个基本的概念:扇区(Sectors): 通常是512 bytes. 是硬件设备传输数据的基本单位.块(Blocks): 通常是1, 2, 4, 8, .... 个扇区,并且小于一个page. 是内核(VFS和文件系统)传送数据的基本单位.段(Segments): 是若干相邻的块. 是一个内存页或者内存页的一部分. 一般由块设备驱
2011-12-09 18:33:40 823
转载 page_address()函数分析--如何通过page取得虚拟地址
由于X86平台上面,内存是划分为低端内存和高端内存的,所以在两个区域内的page查找对应的虚拟地址是不一样的。一. x86上关于page_address()函数的定义在include/linux/mm.h里面,有对page_address()函数的三种宏定义,主要依赖于不同的平台:首先来看看几个宏的定义:CONFIG_HIGHMEM:顾名思义,就是是否支持高端内存,可以
2011-12-09 16:34:30 2609
转载 高端内存(续)--临时内存映射
一.为什么引入临时内存映射(temporary kernel mappings)在永久内存映射中我们看到,如果pkmap_page_table页表里面没有空的entry,那么就会导致这次映射被阻塞,所以我们说不能在一些原子的上下文情况下调用kmap()函数。而在临时内存映射中,不会去判断该pte是否已经被用掉了,它采用的是覆盖的策略,所以把总是能成功的建立映射。会不会被阻塞就是临时内存映射和永
2011-12-09 16:30:26 1509
转载 高端内存
注:本文提及的物理地址空间可以理解为就是物理内存,但是在某些情况下,把他们理解为物理内存是不对的。本文讨论的环境是NON-PAE的i386平台,内核版本2.6.31-14一. 什么是高端内存linux中内核使用3G-4G的线性地址空间,也就是说总共只有1G的地址空间可以用来映射物理地址空间。但是,如果内存大于1G的情况下呢?是不是超过1G的内存就无法使用了呢?为此内核引入了一个高端内存
2011-12-09 16:23:36 1167
转载 高端内存——永久映射区(permanet kernel mappings)
闲着无聊,把一些东西写下来给大家分享下吧,有什么不对的,欢迎质疑注:本文提及的物理地址空间可以理解为就是物理内存,但是在某些情况下,把他们理解为物理内存是不对的。本文讨论的环境是NON-PAE的i386平台,内核版本2.6.31-14一. 什么是高端内存linux中内核使用3G-4G的线性地址空间,也就是说总共只有1G的地址空间可以用来映射物理地址空间。但是,如果内存大于1G的
2011-12-09 16:16:47 2104
转载 内存分配——深入浅出
一提到内存管理,我们头脑中闪出的两个概念,就是虚拟内存,与物理内存。这两个概念主要来自于linux内核的支持。Linux在内存管理上份为两级,一级是线性区,类似于00c73000-00c88000,对应于虚拟内存,它实际上不占用实际物理内存;一级是具体的物理页面,它对应我们机器上的物理内存。这里要提到一个很重要的概念,内存的延迟分配。Linux内核在用户申请内存的时候,只是给它分配
2011-12-09 15:23:38 656
转载 linux的物理内存与线性地址空间布局--2
Linux内存线性地址空间大小为4GB,分为2个部分:用户空间部分(通常是3G)和内核空间部分(通常是1G)。在此我们主要关注内核地址空间部分。 内核通过内核页全局目录来管理所有的物理内存,由于线形地址前3G空间为用户使用,内核页全局目录前768项(刚好3G)除0、1两项外全部为0,后256项(1G)用来管理所有的物理内存。内核页全局目录在编译时静态地定义为swapper_pg_dir数组
2011-12-09 15:03:42 816
转载 linux的物理内存与线性地址空间布局--1
在支持MMU的32位处理器平台上,Linux系统中的物理存储空间和虚拟存储空间的地址范围分别都是从0x00000000到0xFFFFFFFF,共4GB,但物理存储空间与虚拟存储空间布局完全不同。Linux运行在虚拟存储空间,并负责把系统中实际存在的远小于4GB的物理内存根据不同需求映射到整个4GB的虚拟存储空间中。n 物理存储空间布局Linux的物理存储空间布局与处理器相关,详细情况可以从
2011-12-09 14:40:42 745
转载 VC中在对话框上使用Rich Edit控件相关问题
1.设置edit只读属性 方法一: m_edit1.SetReadOnly(TRUE); 方法二: ::SendMessage(m_edit1.m_hWnd, EM_SETREADONLY, TRUE, 0);2.判断edit中光标状态并得到选中内容(richedit同样适用)
2011-12-08 21:43:37 756
转载 Linux内存管理(上)
摘要:本章首先以应用程序开发者的角度审视Linux的进程内存管理,在此基础上逐步深入到内核中讨论系统物理内存管理和内核内存地使用方法。力求从外自内、水到渠成地引导网友分析Linux地内存管理与使用。在本章最后我们给出一个内存映射地实例,帮助网友们理解内核内存管理与用户内存管理之间地关系,希望大家最终能驾驭Linux内存管理。 前言内存管理一向是所有操作系统书籍不惜笔墨重点讨论的内容,无
2011-12-08 15:26:30 674
转载 Linux内存管理(下)
物理内存管理(页管理)Linux内核管理物理内存是通过分页机制实现的,它将整个内存划分成无数4k(在i386体系结构中)大小页,从而分配和回收内存的基本单位便是内存页了。利用分页管理有助于灵活分配内存地址,因为分配时不必要求必须有大块的连续内存[1],系统可以东一页、西一页的凑出所需要的内存供进程使用。虽然如此,但是实际上系统使用内存还是倾向于分配连续的内存块,因为分配连续内存时,页表不需要更
2011-12-08 15:25:03 574
转载 Linux内存:内存管理的实质
1. 内核初始化: * 内核建立好内核页目录页表数据库,假设物理内存大小为len,则建立了[3G--3G+len]::[0--len]这样的虚地址vaddr和物理地址paddr的线性对应关系; * 内核建立一个page数组,page数组和物理页面系列完全是线性对应,page用来管理该物理页面状态,每个物理页面的虚地址保存在page->virtual中; * 内核建
2011-12-08 12:06:40 522
转载 图解 Linux 内存管理 -- 线性空间与物理内存
上图反映了如下信息:1、进程的4G 线性空间被划分成三个部分:进程空间(0-3G)、内核直接映射空间(3G – high_memory)、内核动态映射空间(VMALLOC_START - VMALLOC_END)2、三个空间使用同一张页目录表,通过 CR3 可找到此页目录表。但不同的空间在页目录表中页对应不同的项,因此互相不冲突3、内核初始化以后,根据实际物理内存的大小,计算出 hig
2011-12-08 11:36:55 794
转载 CPropertyPage::OnSetActive()和OnKillActive()函数:属性页切换时的处理函数
CPropertyPage::OnKillActivevirtual BOOL OnKillActive();返回值:如果数据被成功更新则返回非零值;否则返回0。说明:当页不再是活动页时,框架调用此函数。重载这个成员函数来执行指定的数据确认任务。此成员函数的缺省实现将对属性页中的控件所做的设置拷贝到属性页的成员变量中。如果数据没有被成功地更新,则属于一个对话框数据确认(
2011-12-07 22:03:19 1047
转载 Linux I/O 调度方法
操作系统的调度有CPU调度 CPU schedulerIO调度 IO scheduler IO调度器的总体目标是希望让磁头能够总是往一个方向移动,移动到底了再往反方向走,这恰恰就是现实生活中的电梯模型,所以IO调度器也被叫做电梯. (elevator)而相应的算法也就被叫做电梯算法. 而Linux中IO调度的电梯算法有好几种,as(Anticip
2011-12-06 17:24:32 707
转载 CListCtrl使用技巧 --增强版
以下未经说明,listctrl默认view 风格为report1. CListCtrl 风格 LVS_ICON: 为每个item显示大图标 LVS_SMALLICON: 为每个item显示小图标 LVS_LIST: 显示一列带有小图标的item LVS_REPORT: 显示item详细资料 直观的理解:windows
2011-12-04 22:33:55 699
转载 CListCtrlk的SetItemState函数的使用
BOOL CListCtrl::SetItemState(int nItem, UINT uState, UINT uMask);返回值:非0表示成功,0表示失败。nItem:表示要被设置新状态的项的在列表控件中的索引值。uState:表示要设置的新状态,如果传入0值,表示去除当前被设置项的,屏蔽位所标明的那几种状态,如果传入的与uMask(屏蔽位)的值相同,则表示要设置在uMas
2011-12-04 22:10:28 2060
原创 U盘安装
findroot (hd1,3)lsmap /To.iso (hd32)map --hookchainloader (hd32)boot
2011-12-02 21:47:19 661
转载 Linux网络设备分析
Linux网络设备分析潘纲 9811536浙江大学计算机系 pg@ccnt.zju.edu.cn[摘要] 在本文中,首先概括了网络设备总体特征和工作原理,接着在分析了一个重要的数据结构device后,重点剖析了网络设备的整个初始化工作过程;简单地分析了设备的打开和关闭的操作后,是有关数据包的传输和接收的分析;在最后,本文对写网络设备驱动程序做了一个总结。以上
2011-12-02 16:31:40 9938
APUE-3rd advanced programming in the unix environment
2014-03-15
最新的TPCH benchmark数据包
2013-10-08
算法导论 中文版 第二版
2012-04-10
算法导论 第二版 英文版
2012-04-10
MFC通过ADO操作Access数据库
2011-11-21
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人