延迟锁相环(Delay—locked Loop,简称DLL)技术是在PLL技术上改进得到的,被广泛套用于时序领域中。它继承了PLL电路的锁相技术,但去掉了PLL电路内的振荡器部分,取而代之的是一根延迟量可控制的延迟线。
基本介绍
- 中文名:延迟锁相环
- 外文名:Delay—locked Loop
- 套用领域:时序领域
- 实现方法:时钟频率测量法时钟比较法
延迟锁相环
简述
与PLL相比,DLL有几个固有的优点。例如没有抖动累加,更小的锁定时间,环路滤波器易集成等。
实现方法
目前DLL有两种实现方法,一个是时钟频率测量法(CFM,Clock Frequency Measurement),一个是时钟比较法(CC,Clock Comparator)。
CFM 是测量外部时钟的频率周期,然后以此周期为延迟值控制内部时钟,这样内外时钟正好就相差了一个时钟周期,从而实现同步。DLL就这样反覆测量反覆控制延迟值,使内部时钟与外部时钟保持同步。
CC 的方法则是比较内外部时钟的长短,如果内部时钟周期短了,就将所少的延迟加到下一个内部时钟周期里,然后再与外部时钟做比较,若是内部时钟周期长了,就将多出的延迟从下一个内部时钟中刨除,如此往复,最终使内外时钟同步。
CFM与CC 各有优缺点,CFM 的校正速度快,仅用两个时钟周期,但容易受到噪音干扰,并且如果测量失误,则内部的延迟就永远错下去了。CC 的优点则是更稳定可靠,如果比较失败,延迟受影响的只是一个数据(而且不会太严重),不会涉及到后面的延迟修正,但它的修正时间要比CFM 长。DLL 功能在DDR SDRAM 中可以被禁止,但仅限于除错与评估操作,正常工作状态是自动有效的。
动态程式库
DLL综述
DLL是Dynamic Link Library的缩写,意为动态程式库。在Windows中,许多应用程式并不是一个完整的执行档,它们被分割成一些相对独立的动态程式库,即DLL档案,放置于系统中。当我们执行某一个程式时,相应的DLL档案就会被调用。一个应用程式可有多个DLL档案,一个DLL档案也可能被几个应用程式所共用,这样的DLL档案被称为共享DLL档案。
它允许程式共享执行特殊任务所必需的代码和其他资源.比较大的应用程式都由很多模组组成,这些模组分别完成相对独立的功能,它们彼此协作来完成整个软体系统的工作。可能存在一些模组的功能较为通用,在构造其它软体系统时仍会被使用。在构造软体系统时,如果将所有模组的原始码都静态编译到整个应用程式 EXE 档案中,会产生一些问题:一个缺点是增加了应用程式的大小,它会占用更多的磁碟空间,程式运行时也会消耗较大的记忆体空间,造成系统资源的浪费;另一个缺点是,在编写大的 EXE 程式时,在每次修改重建时都必须调整编译所有原始码,增加了编译过程的複杂性,也不利于阶段性的单元测试。
Windows 系统平台上提供了一种完全不同的较有效的编程和运行环境,你可以将独立的程式模组创建为较小的 DLL 档案,并可对它们单独编译和测试。在运行时,只有当 EXE 程式确实要调用这些 DLL 模组的情况下,系统才会将它们装载到记忆体空间中。这种方式不仅减少了 EXE 档案的大小和对记忆体空间的需求,而且使这些 DLL 模组可以同时被多个应用程式使用。Windows 自己就将一些主要的系统功能以 DLL 模组的形式实现。
一般来说,DLL 是一种磁碟档案,以.dll、.DRV、.FON、.SYS 和许多以 .EXE 为扩展名的系统档案都可以是 DLL。它由全局数据、服务函式和资源组成,在运行时被系统载入到调用进程的虚拟空间中,成为调用进程的一部分。如果与其它 DLL 之间没有冲突,该档案通常映射到进程虚拟空间的同一地址上。DLL 模组中包含各种导出函式,用于向外界提供服务。DLL 可以有自己的数据段,但没有自己的堆叠,使用与调用它的应用程式相同的堆叠模式;一个 DLL 在记忆体中只有一个实例;DLL 实现了代码封装性;DLL 的编制与具体的程式语言及编译器无关。
在 Win32 环境中,每个进程都複製了自己的读/写全局变数。如果想要与其它进程共享记忆体,必须使用记忆体映射档案或者声明一个共享数据段。DLL 模组需要的堆叠记忆体都是从运行进程的堆叠中分配出来的。Windows 在载入 DLL 模组时将进程函式调用与 DLL 档案的导出函式相匹配。Windows 作业系统对 DLL 的操作仅仅是把 DLL 映射到需要它的进程的虚拟地址空间里去。DLL 函式中的代码所创建的任何对象(包括变数)都归调用它的执行绪或进程所有。
数种调用方式
1.静态调用方式:由编译系统完成对 DLL 的载入和应用程式结束时 DLL 卸载的编码(如还有其它程式使用该 DLL,则 Windows 对 DLL 的套用记录减1,直到所有相关程式都结束对该 DLL 的使用时才释放它,简单实用,但不够灵活,只能满足一般要求。
隐式的调用:需要把产生动态连线库时产生的 .LIB 档案加入到应用程式的工程中,想使用 DLL 中的函式时,只须说明一下。隐式调用不需要调用 LoadLibrary() 和 FreeLibrary()。程式设计师在建立一个 DLL 档案时,连结程式会自动生成一个与之对应的 LIB 导入档案。该档案包含了每一个 DLL 导出函式的符号名和可选的标识号,但是并不含有实际的代码。LIB 档案作为 DLL 的替代档案被编译到应用程式项目中。
当程式设计师通过静态连结方式编译生成应用程式时,应用程式中的调用函式与 LIB 档案中导出符号相匹配,这些符号或标识号进入到生成的 EXE 档案中。LIB 档案中也包含了对应的 DL L档案名称(但不是完全的路径名),连结程式将其存储在 EXE 档案内部。
当应用程式运行过程中需要载入 DLL 档案时,Windows 根据这些信息发现并载入 DLL,然后通过符号名或标识号实现对 DLL 函式的动态连结。所有被应用程式调用的 DLL 档案都会在应用程式 EXE 档案载入时被载入在到记忆体中。可执行程式连结到一个包含 DLL 输出函式信息的输入库档案(.LIB档案)。作业系统在载入使用可执行程式时载入 DLL。可执行程式直接通过函式名调用 DLL 的输出函式,调用方法和程式内部其 它的函式是一样的。
2.动态调用方式:是由编程者用 API 函式载入和卸载 DLL 来达到调用 DLL 的目的,使用上较複杂,但能更加有效地使用记忆体,是编制大型应用程式时的重要方式。
显式的调用:
是指在应用程式中用 LoadLibrary 或 MFC 提供的 AfxLoadLibrary 显式的将自己所做的动态连线库调进来,动态连线库的档案名称即是上面两个函式的参数,再用 GetProcAddress() 获取想要引入的函式。自此,你就可以象使用如同本应用程式自定义的函式一样来调用此引入函式了。在应用程式退出之前,应该用 FreeLibrary 或 MFC 提供的 AfxFreeLibrary 释放动态连线库。直接调用 Win32 的 LoadLibary 函式,并指定 DLL 的路径作为参数。LoadLibary 返回 HINSTANCE 参数,应用程式在调用 GetProcAddress 函式时使用这一参数。GetProcAddress 函式将符号名或标识号转换为 DLL 内部的地址。程式设计师可以决定 DLL 档案何时载入或不载入,显式连结在运行时决定载入哪个 DLL 档案。使用 DLL 的程式在使用之前必须载入(LoadLibrary)载入DLL从而得到一个DLL模组的句柄,然后调用 GetProcAddress 函式得到输出函式的指针,在退出之前必须卸载DLL(FreeLibrary)。
正因为DLL 有占用记忆体小,好编辑等的特点有很多电脑病毒都是DLL格式档案。但不能单独运行。
动态连结库通常都不能直接运行,也不能接收讯息。它们是一些独立的档案,其中包含能被可执行程式或其它DLL调用来完成某项工作的函式。只有在其它模组调用动态程式库中的函式时,它才发挥作用。
记忆体管理
在Win32中,DLL档案按照片段(sections)进行组织。每个片段有它自己的属性,如可写或是唯读、可执行(代码)或者不可执行(数据)等等。
DLL代码段通常被使用这个DLL的进程所共享;也就是说它们在物理记忆体中占据一个地方,并且不会出现在页面档案中。如果代码段所占据的物理记忆体被收回,它的内容就会被放弃,后面如果需要的话就直接从DLL档案重新载入。
与代码段不同,DLL的数据段通常是私有的;也就是说,每个使用DLL的进程都有自己的DLL数据副本。作为选择,数据段可以设定为共享,允许通过这个共享记忆体区域进行进程间通信。但是,因为用户许可权不能套用到这个共享DLL记忆体,这将产生一个安全漏洞;也就是一个进程能够破坏共享数据,这将导致其它的共享进程异常。例如,一个使用访客账号的进程将可能通过这种方式破坏其它运行在特权账号的进程。这是在DLL中避免使用共享片段的一个重要原因。
当DLL被如UPX这样一个可执行的packer压缩时,它的所有代码段都标记为可以读写并且是非共享的。可以读写的代码段,类似于私有数据段,是每个进程私有的并且被页面档案备份。这样,压缩DLL将同时增加记忆体和磁碟空间消耗,所以共享DLL应当避免使用压缩DLL。
找到DLL档案地址:C:\WINDOWS\system32\****.dll时出错(****就是你的那个找不到的档案名称)
开始--运行--msconfig--启动--找到和你说的类似的选项****--取消勾--确定,然后
1,开始-运行-输入:regedit,然后回车
2,选择“我的电脑”,然后点击“档案”-“导出”-随便起个名字点“保存”。这样做的目的是备份一下注册表,以免误操作后及时恢复。恢复的方法是,找到你刚才保存的档案,双击它,然后选择“允许导入”即可。
3,选择“我的电脑”,按F3键,然后输入“****”,点击“查找下一个”,找到后一定要核对是不是****.dll档案,因为你给的档案名称不全,如果确认,对该项点“右键”选“删除”。“此时可以输入****.dll进行查找,结果出来后要看后面的数值部分,不能光看档案名称称,只要有****.dll在的档案不管它边上还写没写别的(如:****.dll,load),都要删除!”
4,然后再按F3键-删除,直到提示“没有找到相应选项”为止。
5,重新启动计算机,看看系统有没有问题。
注,如果出现了其它严重问题,请恢复注册表。
最佳化系统方法
逼迫DLL档案交出记忆体资源
不少应用程式在启动时需要调用某些DLL档案,这些DLL档案往往会占用一定的记忆体资源,但遗憾的是当应用程式被使用完毕退出系统后,那些曾经被调用的DLL档案并不会随程式关闭而自动交出它们所占用的记忆体资源,这样就容易造成记忆体资源的浪费,并且随着运行的应用程式越多,系统记忆体资源就被消耗得越多,最终会影响系统的整体运行效率。那有没有办法逼迫那些已经过时的DLL档案,交出它们所占有的记忆体资源,从而保证系统记忆体空间始终处于“乾净”状态呢?答案是肯定的,我们可以按照如下步骤来逼迫DLL档案交出记忆体资源:
依次单击“开始”/“运行”命令,在弹出的系统运行对话框中,输入字元串命令“regedit”,单击“确定”按钮后,打开系统的注册表编辑界面;
在注册表编辑界面中,找到其中的注册表分支HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/Explorer在对应“Explorer”子键的右侧视窗区域中,检查一下是否有“AlwaysUnloadDLL”字元串键值的身影,如果没有的话,那可以用滑鼠右键单击右侧视窗区域中的空白位置,并从弹出的快捷选单中依次执行“新建”、“字元串值”命令,然后将新创建好的字元串值名称设定为“AlwaysUnloadDLL”,再用滑鼠双击“AlwaysUnloadDLL”键值,在其后界面的“数值数据”文本框中直接输入数字“1”,并单击“确定”按钮,最后刷新一下系统注册表,这样就能逼迫那些过时的DLL档案交出曾经占有的系统记忆体资源了。
逼迫DLL档案交出空间资源
在频繁地安装与卸载应用程式之后,系统中的有些DLL档案就会变成无用的垃圾档案,不过这些垃圾档案仍然会占用系统的硬碟空间资源,时间一长越来越多的垃圾DLL档案就会消耗越来越多的硬碟空间资源。为此,我们可以通过下面的操作步骤,来将无用的垃圾DLL档案删除掉:
依次单击“开始”/“运行”命令,在弹出的系统运行对话框中,输入字元串命令“regedit”,单击“确定”按钮后,打开系统的注册表编辑界面;
用滑鼠逐一展开其中的注册表分支HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/SharedDlls在对应“SharedDlls”子键的右侧视窗区域中,我们就能看到当前系统的所有DLL调用情况,要是对应某个DLL档案的数据显示为“0”的话,那就说明没有应用程式使用该DLL档案,那幺该DLL档案就是无用垃圾档案,将这些无用的DLL档案名称称逐一记录下来;
接下来返回到Windows系统桌面,并依次单击“开始”/“搜寻”/“档案或资料夹”命令,然后在弹出的系统搜寻档案对话框中,输入前面记录下来的无用DLL档案,再单击“搜寻”按钮找到无用DLL档案所在的具体位置,之后将这些找到的DLL档案临时转移到其他位置,并让系统再运行一些日子,看看系统是否能够正常运行,要是系统仍然可以正常运行的话,那我们就能把那些无用的DLL档案真的从硬碟中删除掉了,这样就能有效地节省硬碟空间资源了。
借用DLL档案解决系统运行错误
由于许多应用程式的DLL档案都是共用的,一旦对某个应用程式执行了卸载操作之后,共用的那个DLL档案也有可能被随之卸载,这幺一来其他应用程式运行时由于找不到共用DLL档案而出现运行错误。当不幸遇到这样的故障现象时,我们不妨通过对DLL档案的注册与卸载,来快速有效地解决各种常见的系统故障。
WINXP/WIN2000通过修改DLL提升安全和性能
系统的组策略和注册表中,我们可以修改一些键值来最佳化我们的系统,并加强作业系统的安全性。可是,对于限制下载、禁止删除档案等功能,我们无法通过上述的操作来完成,这只有通过修改系统DLL档案来实现。目前,我们通过修改系统的DLL档案,可以实现禁止删除档案、禁止IE下载、禁止IE另外储存为、禁止档案打开方式等功能。
系统中部分DLL档案的功能
1.Browselc.dll IE所需要调用的库档案DLL结构雏形就是它了
2.Shdoclc.dll 系统视窗及设定等,如删除档案、重命名
3.Shell32.dll 系统视窗及设定等,如删除档案、重命名
4.Cryptui.dll IE控制项下载及提示对话框程式
修改DLL档案的方法
1.下载DLL档案修改工具EXESCOPE6.0-6.3或6.4工具
2.获取Browselc.dll、Shdoclc.dll、Shell32.dll和Cryptui.dll这几个连结档案。在找这几个档案时,最好将其他机器的硬碟,挂接在本机中,然后用本机的作业系统启动并複製这几个档案。
3.在修改DLL档案的时候,打开该键值,在右面的对话框中将所要修改的键值禁用即可,不要删除,以备日后恢复
DLL档案修改秘籍
1.禁止下载的修改方法:打开Shdoclc.dll修改资源--对话框---4416,将4416键值禁用即可。
2.禁止网页添加到收藏夹,打开Shdoclc.dll修改资源--对话框---21400,将该键值禁用即可。
3.禁止恶意网页载入控制项,修改Cryptui.dll档案,要同时修改5个地方才能完全禁止 资源--对话框---130 资源--对话框---230 资源--对话框---4101 资源--对话框---4104 资源--对话框---4107 将以各对话框中的相应键值,修改成为禁用就可以了。
4.禁止系统删除档案修改Shell32.dll,这个档案需要修改5个地方才可以禁止系统删除档案。资源--对话框---1011 资源--对话框---1012 资源--对话框---1013 资源--对话框---1021 资源--对话框---1022 将以上五个地址的键值禁用就可以了!
5.禁止档案被改名,修改shell32.dll,有2个地方需要修改资源--对话框---1018 资源--对话框---1019 将以上两处的相应键值,修改为禁用就可以了!
6.禁止运行选单,修改shell32.dll,将资源--对话框---1018键值设定为禁用。
7.禁止系统档案被挪动修改shell32.dll,需要修改4个地方 资源--对话框---1014 资源--对话框---1015 资源--对话框---1016 资源--对话框---1017
8.禁止目标另外储存为,修改Shdoclc.dll档案,需要修改3个地方 资源--选单--258---257 资源--选单--258---252 资源--选单--24641--2268 在这个修改中,我们要把各对应的键值删除。打开该键值后,右键选单中有删除。在资源--选单--24641—2268中,有多项该键值,请逐一删除。
9.禁止自定义资料夹选项修改Shell32.dll档案,需要修改以下4个地方 资源--选单--215---28719 资源--选单--216---28719 资源--选单--217---28719 资源--选单--216---28719 找到以上四处键值,直接需要删除后即可,而不是禁用。
10.禁止IE资料夹选项,修改Browselc.dll档案,需要修改3个键值 资源--选单--263 (这里有多个请删除)---41251(删除) 资源--选单--266(也有多个请删除)---41329 (删除) 资源--选单--268---41251 (删除) 在上面的3个键值中,个别键值有多处,请逐一删除。
11.禁止98档案共享控制项,修改Msshrui.dll,需要修改2个地方 资源---对话框---- 1 --- AutoRadioButton 资源---对话框---- 30 --- AutoRadioButton 将以上两处的键值禁用即可。其他的选项,可以根据自己的需要进行修改。找到相应的功能键值,将不需要的功能,禁用就可以了。
12.禁止档案的打开方式,修改Url.dll,需要修改2个地方 资源---对话框--- 7000 资源---对话框--- 7005 将以上两处的键值禁用即可。
13.禁止更改系统桌面,修改Shdoc401.dll,有2处地方需要修改 资源---对话框--- 29952--- PushButton:浏览资源---对话框--- 29952--- PushButton:图案 将以上两处的键值禁用即可。
14.禁止系统资料夹自定义,修改Shd401lc.dll,有2处地方需要修改 资源---对话框--- 29957 资源---对话框--- 29958 将以上两处的键值禁用即可。
15.禁止档案保存路径及打开,修改Comdlg32.dll,有2处地方需要修改 资源---对话框--- 1547 资源---对话框--- 1548 将以上两处的键值禁用即可。