实时搜索: numa 哪些

numa 哪些

324条评论 1665人喜欢 6381次阅读 679人点赞
它与2000有哪些区别,或新添了哪些功能 ? , 手机主板上那么多芯片和原件,哪些是CPU,字库 电源IC,WiFi模块,信号开关什么的,也不知道长什么样的,想要个明确的认识,求大神解答 , 80386到现在的cpU增加了哪些知识点,除了超线程,超标量,sse指令,还有哪些 ...

Linux上MySQL优化提升性能 哪些可以优化的关闭NUMA特性:  一、CPU
  首先从CPU说起。
  你仔细检查的话,有些服务器上会有的一个有趣的现象:你cat /proc/cpuinfo时,会发现CPU的频率竟然跟它标称的频率不一样:
  #cat /proc/cpuinfo
  processor : 5
  model name : Intel(R) Xeon(R) CPU E5-2620 0 @2.00GHz
  cpu MHz : 1200.000
  这个是Intel E5-2620的CPU,他是2.00G * 24的CPU,但是,我们发现第5颗CPU的频率为1.2G。
  这是什么原因呢?
  这些其实都源于CPU最新的技术:节能模式。操作系统和CPU硬件配合,系统不繁忙的时候,为了节约电能和降低温度,它会将CPU降频。这对环保人士和抵制地球变暖来说是一个福音,但是对MySQL来说,可能是一个灾难。
  为了保证MySQL能够充分利用CPU的资源,建议设置CPU为最大性能模式。这个设置可以在BIOS和操作系统中设置,当然,在BIOS中设置该选项更好,更彻底。由于各种BIOS类型的区别,设置为CPU为最大性能模式千差万别,我们这里就不具体展示怎么设置了。
  然后我们看看内存方面,我们有哪些可以优化的。
  i) 我们先看看numa
  非一致存储访问结构 (NUMA : Non-Uniform Memory Access) 也是最新的内存管理技术。它和对称多处理器结构 (SMP : Symmetric Multi-Processor) 是对应的。简单的队别如下:
  如图所示,详细的NUMA信息我们这里不介绍了。但是我们可以直观的看到:SMP访问内存的都是代价都是一样的;但是在NUMA架构下,本地内存的访问和非 本地内存的访问代价是不一样的。对应的根据这个特性,操作系统上,我们可以设置进程的内存分配方式。目前支持的方式包括:
  --interleave=nodes
  --membind=nodes
  --cpunodebind=nodes
  --physcpubind=cpus
  --localalloc
  --preferred=node
  简而言之,就是说,你可以指定内存在本地分配,在某几个CPU节点分配或者轮询分配。除非 是设置为--interleave=nodes轮询分配方式,即内存可以在任意NUMA节点上分配这种方式以外。其他的方式就算其他NUMA节点上还有内 存剩余,Linux也不会把剩余的内存分配给这个进程,而是采用SWAP的方式来获得内存。有经验的系统管理员或者DBA都知道SWAP导致的数据库性能 下降有多么坑爹。
  所以最简单的方法,还是关闭掉这个特性。
  关闭特性的方法,分别有:可以从BIOS,操作系统,启动进程时临时关闭这个特性。
  a) 由于各种BIOS类型的区别,如何关闭NUMA千差万别,我们这里就不具体展示怎么设置了。
  b) 在操作系统中关闭,可以直接在/etc/grub.conf的kernel行最后添加numa=off,如下所示:
  kernel /vmlinuz-2.6.32-220.el6.x86_64 ro root=/dev/mapper/VolGroup-root rd_NO_LUKS LANG=en_US.UTF-8 rd_LVM_LV=VolGroup/root rd_NO_MD quiet SYSFONT=latarcyrheb-sun16 rhgb crashkernel=auto rd_LVM_LV=VolGroup/swap rhgb crashkernel=auto quiet KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM numa=off
  另外可以设置 vm.zone_reclaim_mode=0尽量回收内存。
  c) 启动MySQL的时候,关闭NUMA特性:
  numactl --interleave=all mysqld
  当然,最好的方式是在BIOS中关闭。
  ii) 我们再看看vm.swappiness。
  vm.swappiness是操作系统控制物理内存交换出去的策略。它允许的值是一个百分比的值,最小为0,最大运行100,该值默认为60。vm.swappiness设置为0表示尽量少swap,100表示尽量将inactive的内存页交换出去。
  具体的说:当内存基本用满的时候,系统会根据这个参数来判断是把内存中很少用到的inactive 内存交换出去,还是释放数据的cache。cache中缓存着从磁盘读出来的数据,根据程序的局部性原理,这些数据有可能在接下来又要被读 取;inactive 内存顾名思义,就是那些被应用程序映射着,但是 长时间 不用的内存。
  我们可以利用vmstat看到inactive的内存的数量:
  #vmstat -an 1
  procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----
  r b swpd free inact active si so bi bo in cs us sy id wa st
  1 0 0 27522384 326928 1704644 0 0 0 153 11 10 0 0 100 0 0
  0 0 0 27523300 326936 1704164 0 0 0 74 784 590 0 0 100 0 0
  0 0 0 27523656 326936 1704692 0 0 8 8 439 1686 0 0 100 0 0
  0 0 0 27524300 326916 1703412 0 0 4 52 198 262 0 0 100 0 0
  通过/proc/meminfo 你可以看到更详细的信息:
  #cat /proc/meminfo | grep -i inact
  Inactive: 326972 kB
  Inactive(anon): 248 kB
  Inactive(file): 326724 kB
  这里我们对不活跃inactive内存进一步深入讨论。 Linux中,内存可能处于三种状态:free,active和inactive。众所周知,Linux Kernel在内部维护了很多LRU列表用来管理内存,比如LRU_INACTIVE_ANON, LRU_ACTIVE_ANON, LRU_INACTIVE_FILE , LRU_ACTIVE_FILE, LRU_UNEVICTABLE。其中LRU_INACTIVE_ANON, LRU_ACTIVE_ANON用来管理匿名页,LRU_INACTIVE_FILE , LRU_ACTIVE_FILE用来管理page caches页缓存。系统内核会根据内存页的访问情况,不定时的将活跃active内存被移到inactive列表中,这些inactive的内存可以被 交换到swap中去。
  一般来说,MySQL,特别是InnoDB管理内存缓存,它占用的内存比较多,不经常访问的内存也会不少,这些内存如果被Linux错误的交换出去了,将 浪费很多CPU和IO资源。 InnoDB自己管理缓存,cache的文件数据来说占用了内存,对InnoDB几乎没有任何好处。
  所以,我们在MySQL的服务器上最好设置vm.swappiness=0。
  我们可以通过在sysctl.conf中添加一行:
  echo vm.swappiness = 0 /etc/sysctl.conf
  并使用sysctl -p来使得该参数生效。
  三、文件系统
  最后,我们看一下文件系统的优化
  i) 我们建议在文件系统的mount参数上加上noatime,nobarrier两个选项。
  用noatime mount的话,文件系统在程序访问对应的文件或者文件夹时,不会更新对应的access time。一般来说,Linux会给文件记录了三个时间,change time, modify time和access time。
  我们可以通过stat来查看文件的三个时间:
  stat libnids-1.16.tar.gz
  File: `libnids-1.16.tar.gz'
  Size: 72309 Blocks: 152 IO Block: 4096 regular file
  Device: 302h/770d Inode: 4113144 Links: 1
  Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
  Access : 2008-05-27 15:13:03.000000000 +0800
  Modify: 2004-03-10 12:25:09.000000000 +0800
  Change: 2008-05-27 14:18:18.000000000 +0800
  其中access time指文件最后一次被读取的时间,modify time指的是文件的文本内容最后发生变化的时间,change time指的是文件的inode最后发生变化(比如位置、用户属性、组属性等)的时间。一般来说,文件都是读多写少,而且我们也很少关心某一个文件最近什 么时间被访问了。
  所以,我们建议采用noatime选项,这样文件系统不记录access time,避免浪费资源。
  现在的很多文件系统会在数据提交时强制底层设备刷新cache,避免数据丢失,称之为write barriers。但是,其实我们数据库服务器底层存储设备要么采用RAID卡,RAID卡本身的电池可以掉电保护;要么采用Flash卡,它也有自我保 护机制,保证数据不会丢失。所以我们可以安全的使用nobarrier挂载文件系统。设置方法如下:
  对于ext3, ext4和 reiserfs文件系统可以在mount时指定barrier=0;对于xfs可以指定nobarrier选项。
  ii) 文件系统上还有一个提高IO的优化万能钥匙,那就是deadline。
  在 Flash技术之前,我们都是使用机械磁盘存储数据的,机械磁盘的寻道时间是影响它速度的最重要因素,直接导致它的每秒可做的IO(IOPS)非常有限, 为了尽量排序和合并多个请求,以达到一次寻道能够满足多次IO请求的目的,Linux文件系统设计了多种IO调度策略,已适用各种场景和存储设备。
  Linux的IO调度策略包括:Deadline scheduler,Anticipatory scheduler,Completely Fair Queuing(CFQ),NOOP。每种调度策略的详细调度方式我们这里不详细描述,这里我们主要介绍CFQ和Deadline,CFQ是Linux内 核2.6.18之后的默认调度策略,它声称对每一个 IO 请求都是公平的,这种调度策略对大部分应用都是适用的。但是如果数据库有两个请求,一个请求3次IO,一个请求10000次IO,由于绝对公平,3次IO 的这个请求都需要跟其他10000个IO请求竞争,可能要等待上千个IO完成才能返回,导致它的响应时间非常慢。并且如果在处理的过程中,又有很多IO请 求陆续发送过来,部分IO请求甚至可能一直无法得到调度被 饿死 。而deadline兼顾到一个请求不会在队列中等待太久导致饿死,对数据库这种应用来 说更加适用。
  实时设置,我们可以通过
  echo deadline /sys/block/sda/queue/scheduler
  来将sda的调度策略设置为deadline。
  我们也可以直接在/etc/grub.conf的kernel行最后添加elevator=deadline来永久生效。
  CPU方面:
  关闭电源保护模式
  内存:
  vm.swappiness = 0
  关闭numa
  文件系统:
  用noatime,nobarrier挂载系统
  IO调度策略修改为deadline。

WINDOWS2003都有哪些版本?: 一、windows server 2003 3790版本识别

RTM=release to manufacture (公开发行批量生产)是给硬件制造商的版本!是送去压盘的,不是拿去卖的。

OEM=Original Equipment Manufacturer只能全新安装, 和RTM差不多,只是称呼不同而已。

RTL=retail(零售)正式零售版,可以升级或者全新安装。

VLK=Volume License大量授权版,又称为企业版。无需激活。(网上所谓的简体中文VLK版实际是普通简体中文版加英文VLK版中的8个文件而已)

二、Windows Server 2003的不同版本

Windows Server 2003 Web版:为快速开发、部署Web服务与应用程序,提供Web托管与服务平台。支持2路
SMP(对称多处理)系统、2GB内存。

Windows Server 2003标准版:面向中小型企业和部门级应用。支持4路SMP、4GB内存。

Windows Server 2003企业版:适合中心与大型组织使用,有32位和64位两个版本。支持8节点集群、NUMA;
支持8路SMP,其中32位版支持32GB内存,64位版支持64GB内存。

Windows Server 2003数据中心版:面向要求强伸缩性和高可用性的企业,有32位和64位两个版本。32位版
支持32路SMP、64GB内存;64位版支持64路SMP、512GB内存;两个版本均支持8节点集群、NUMA

三、windows server 2003 3790版的激活

在正式版算号器没有出来之前,现在流行的激活方式有以下几种:
(1)Reset5.02,在安全模式下运行即可激活,把时间调整为2008年都没有问题,一切使用正常。可以升级。
缺点:激活程序被彻底屏蔽,表现为运行msoobe /a没有任何显示,并且在服务中有一项reset5,开机会自动运
行此服务,C:\WINDOWS\system32\srvany.exe,此程序应该是reset5添加入系统的。

(2)俄罗斯破解,记得在xp时代,只要把setupreg.hiv在安装前替换,然后电话激活就可以达到完美的激活境
界,可在2003下,这样子做之后,当前显示已激活,可如果你调整了时间再开机又会显示要激活,甚至是不能
使用。估计次次问题关键还是在那个setupreg.hiv文件。

(3)在论坛上有人贴出了一个Winxpactivation.exe的文件,号称可以激活,实际上这个还是假激活,暂时屏
蔽了激活程序,是不能够修改时间的。

(4)用替换法做出来的伪VLK,安装使用都没有问题,只是不能升级。VLK是替换英文版的8个文件.但是SN已经
被微软封掉了.所以不能升级,但是此法是最稳定的,没有任何问题。

结论:推荐大家用8个替换法激活和reset5.02激活!

四、win 2003 server的一些优化设置

1.禁用配置服务器向导:

禁止“配置你的服务器”(Manage Your Server)向导的出现:在控制面板(Control Panel) -> 管理员工具
(Administrative Tools )-> 管理你的服务器(Manage Your Server)运行它,然后在窗口的左下角复选“
登录时不要显示该页”(Don't display this page at logon)。

2.启用硬件和DirectX加速

★硬件加速:桌面点击右键--属性(Properties) -> 设置(Settings )--高级( Advanced )--
疑难解答(Troubleshoot)。把该页面的硬件加速滚动条拉到“完全”( Full),最好点击“确定”(OK)保
存退出。这期间可能出现一瞬的黑屏是完全正常。

★DirectX加速:打开“开始”(Start) -> “运行”(Run),键入“dxdiag”并回车打开“DirectX 诊
断工具”(DirectX Tools),在“显示”(Display)页面,点击DirectDraw, Direct3D and AGP Texture 加
速三个按钮启用加速。把“声音的硬件加速级别”(Hardware Sound Acceleration Level)滚动条拉到“完全
加速”( Full Acceleration)。

3. 启用声卡:

系统安装后,声卡是禁止状态,所以要在 控制面板 -> 声音 -> 启用,重启之后再设置它在任务栏显示。
如果你使用的是Windows server 2003标准版请从第二步xx作,因为标准版已允许声音服务。
★打开“开始”(Start) -> “运行”(Run),键入“Services.msc ”,在出现的窗口中找到
“Windows Audio”并双击它,然后在启动模式(startup type )的下拉菜单选择“自动”(Automatic),
并点击“应用”(Apply) ->“开始”(Start) -> “确定”(OK)

★打开“开始”(Start) -> “运行”(Run),键入“dxdiag”并回车打开“DirectX 诊断工具”
(DirectX Tools),在“Sound”(Display)页面,把“声音的硬件加速级别”
(Hardware Sound Acceleration Level)滚动条拉到“完全加速”( Full Acceleration)。

4. 如何启用 ASP 支持:

Windows Server 2003 默认安装,是不安装 IIS 6 的,需要另外安装。安装完 IIS 6,
还需要单独开启对于 ASP 的支持。方法是: 控制面板 -> 管理工具 ->
Web服务扩展 -> Active Server Pages -> 允许。

5. 如何启用 XP 的桌面主题:

★打开“开始”(Start) -> “运行”(Run),键入“Services.msc ”,选themes“主题”(默认是禁止的)
,然后改为“自动”,按“应用”,选“开启”。
★接着点“桌面”的属性,在“主题”里选“windows xp”
★我的电脑----属性----高级----性能-----在桌面上为图标标签使用阴影

6. 禁止关机时出现的关机理由选择项:

关机事件跟踪(Shutdown Event Tracker)也是Windows server 2003区别于其他工作站系统的一个设置,
对于服务器来说这是一个必要的选择,但是对于工作站系统却没什么用,我们同样可以禁止它。
打开”开始“Start ->”运行“ Run ->输入”gpedit.msc “,在出现的窗口的左边部分,
选择 ”计算机配置“(Computer Configuration )-> ”管理模板“(Administrative Templates )
-> ”系统“(System),在右边窗口双击“Shutdown Event Tracker” 在出现的对话框中选择“禁止”
(Disabled),点击然后“确定”(OK)保存后退出,这样,你将看到类似于windows 2000的关机窗口

7. 如何使用USB硬盘、U盘,添加已经有分区的硬盘

我的电脑(单击右键)----管理----磁盘管理-----在相应的硬盘上执行导入和分配盘符**作

8. 在控制面板里显示全部组件:
把 Windows\inf 目录中的 sysoc.inf 文件里的 "hide" 替换掉。

9.禁用Internet Explorer Enhanced Security 和禁止安全询问框的出现
在IE工具选项中自定义设置IE的安全级别。在”安全“(Security)选项卡上拉动滚动条把Internet区域
安全设置为”中“(Medium)或“中低”。自定义设置中将有关的选择“提示”修改为选择“禁止”或“启用”。

10. 禁用开机 CTRL+ALT+DEL和实现自动登陆

★方法1:打开注册表(运行->“Regedit”),再打开:
HKEY_LOCAL_MACHIN|SOFTWARE|MicroSoft|Windows NT|CurrentVersion |Winlogon段,在此段中按右键,新建
二个字符串段,AutoAdminLogon=“1”,DefaultPassword=“为超级用户Administrator所设置的Password”。
注意,一定要为Administrator设置一个密码,否则不能实现自启动。 然后,重新启动Windows即可实现自动登录。

★方法2:管理工具 -> Local Security Settings(本地安全策略) -> 本地策略 -> 安全选项 ->
interactive logon: Do not require CTRL+ALT+DEL,启用之。

★方法3(自动登陆):使用Windows XP的Tweak UI来实现Server 2003自动登陆。
下载:Tweak UI http://www.ssite.org/uppic/sun_pic/...003/tweakui.exe
下载后直接执行tweakui.exe 在左边的面板中选择Logon -> Autologon -> 在右边勾选Log on automatically
at system startup输入你的用户名和域名(如果没有就不写),点击下面的Set Password,输入用户名的密码
,然后点击OK。

11.隐藏文件

Windows Server 2003默认情况下是显示所有的文件夹的,如果你不想这样,可以通过一下方法来隐藏:
打开任意一个文件夹,选择工具(Tools) -> 文件夹选项(Folder Options) -> 查看(View),
调整 显示系统文件夹的内容、隐藏受保护的**作系统文件、隐藏文件和文件夹 三项

12.允许内置的IMAPI CD-Burning服务和支持Windows影像设备服务

.允许内置的IMAPI CD-Burning服务和支持Windows影像设备服务
★假如你希望启用Windows内置的IMAPI CD-Burning服务。做如下xx作:
打开“开始”(Start) -> “运行”(Run),键入“Services.msc ”,在出现的窗口中找到
“IMAPI CD-Burning COM Service ”并双击它,然后在启动模式(startup type )的下拉菜单选择“自动”
(Automatic),并点击“应用”(Apply) ->“开始”(Start) -> “确定”(OK)

★假如你有如数码相机和扫描仪之类的影像设备,你应该打开Windows Image Acquisition 服务。
打开“开始”(Start) -> “运行”(Run),键入“Services.msc ”,在出现的窗口中找到
“Windows Image Acquisition (WIA) ”并双击它,然后在启动模式(startup type )的下拉
菜单选择“自动”(Automatic),并点击“应用”(Apply) ->“开始”(Start) -> “确定”(OK)

i5、6300hq处理器优势是哪些?:

i5-6300HQ这款CPU性能还是很不错的,已经达到了6代的台式机I3 CPU的性能了,在笔记本电脑里面算是比较好的CPU了,用个三年还是可以的 ,办公是没有什么问题的。具体介绍一下:

处理器系列:第六代i5

核心名称:Skylake

核心/线程:四核四线程

制程工艺:14nm

TDP功耗:45W

主频:2.3GHz

三级缓存:6MB

JAVA有哪些适合进行数值计算,数据分析/机器学习的库: JAVA有如下适合进行数值计算,数据分析/机器学习的库:
1 Apache Commons

2 Java Numerics: Main

JS实现数组排序的方法有哪些:

从给定的数据中,随机抽出一项,这项的左边放所有比它小的,右边放比它大的,然后再分别这两边执行上述操作,采用的是递归的思想,总结出来就是 实现一层,分别给两边递归,设置好出口

function fastSort(array,head,tail){
    //考虑到给每个分区操作的时候都是在原有的数组中进行操作的,所以这里head,tail来确定分片的位置
    /*生成随机项*/
    var randomnum = Math.floor(ranDom(head,tail));
    var random = array[randomnum];
    /*将小于random的项放置在其左边  策略就是通过一个临时的数组来储存分好区的结果,再到原数组中替换*/
    var arrayTemp = [];
    var unshiftHead = 0;
    for(var i = head;i <= tail;i++){
      if(array[i]<random){
        arrayTemp.unshift(array[i]);
        unshiftHead++;
      }else if(array[i]>random){
        arrayTemp.push(array[i]);
      }
      /*当它等于的时候放哪,这里我想选择放到队列的前面,也就是从unshift后的第一个位置放置*/
      if(array[i]===random){
        arrayTemp.splice(unshiftHead,0,array[i]);
      }
    }
    /*将对应项覆盖原来的记录*/
    for(var j = head , u=0;j <= tail;j++,u++){
      array.splice(j,1,arrayTemp[u]);
    }
    /*寻找中间项所在的index*/
    var nowIndex = array.indexOf(random);

    /*设置出口,当要放进去的片段只有2项的时候就可以收工了*/
    if(arrayTemp.length <= 2){
      return;
    }
    /*递归,同时应用其左右两个区域*/
    fastSort(array,head,nowIndex);
    fastSort(array,nowIndex+1,tail);
  }

JavaScript实现多维数组、对象数组排序,其实用的就是原生的sort()方法,用于对数组的元素进行排序。

sort() 方法用于对数组的元素进行排序。语法如下:

arrayObject.sort(sortby)

例如:
function NumAscSort(a,b)
{
 return a - b;
}
function NumDescSort(a,b)
{
 return b - a;
}
var arr = new Array( 3600, 5010, 10100, 801); 
arr.sort(NumDescSort);
alert(arr);
arr.sort(NumAscSort);
alert(arr);

手机主板上那么多芯片和原件,哪些是CPU,字库 电源IC,WiFi模块。。。:

第一,你怕的照片本来就模糊。一般是拍芯片上面的字查型号,甚至拆开金属罩。你还标上英文字母遮挡了。


第二,你第二张图说明型号是vivo v1,刚好数码多有拆机图,对比就知道了。



a是高通处理msm7227,本身就含有基帝,标有qualcomm。


b是海力士flash内存芯片,标有hynix。包括ram和rom



d是天线收发器高通 rtr6285。



e是电源管理芯片高通pm7540


f是skywork的sky77336 gsm功率放大芯片


g是avago是a5201 功率放大芯片


c是cmos芯片,管摄像头的


i的博通的bcm2124 gprs基带芯片


k不就是两块触片。哪有芯片?


j估计三大键的触键电容。


h太模糊,看不出,疑似是电流检测

手机主板上的芯片和原件,哪些是CPU、字库、电源IC、WiFi模块?:

编号A:是CPU,高通(Qualcomm)生产,型号为msm7227。

编号B:是Flash闪存芯片或者RAM芯片,海力士(Hynix)生产,型号不清楚。

编号C:是cmos芯片,管摄像头的。

编号D:是天线收发器高通 rtr6285。

编号E:应该是基带芯片,也是高通的芯片。

编号F:是skywork的sky77336 gsm功率放大芯片。

编号G:是avago是a5201 功率放大芯片。

编号I:博通的bcm2124 gprs基带芯片。

编号K:是两块触片。

编号J:三大键的触键电容。

编号H:是电流检测。

80386到现在的cpU增加了哪些知识点: 先先说8086

 在8086的EU--执行单元(Execution Unit)和BIU--总线接口单元(Bus Interface Unit)两部分中包含有一些工作寄存器,这些寄存器用来存放计算过程中的各种信息,如操作数地址、操作数及运算的中间结果等。微处理器从寄存器中存取数据比从存储器中存取数据要快的多,因此,在计算过程中,合理利用寄存器保存操作数、中间结果或其它信息,能提高程序的运行效率。根据这些寄存器所起的作用,8086寄存器组可以分为通用寄存器、专用寄存器和段寄存器三类
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
  1. 通用寄存器
  通用寄存器包括了8个16位的寄存器:AX、BX、CX、DX、SP、BP、DI及SI。其中AX、BX、CX、DX在一般情况下作为通用的数据寄存器,用来暂时存放计算过程中所用到的操作数、结果或其他信息。它们还可分为两个独立的8位寄存器使用,命名为AL、AH、BL、BH、CL、CH、DL和DH。这4个通用数据寄存器除通用功能外,还有如下专门用途:

  AX作为累加器用,所以它是算术运算的主要寄存器。在乘除指令中指定用来存放操作数。另外,所有的I/O指令都使用AX或AL与外部设备传送信息。

  BX在计算存储器地址时,可作为基址寄存器使用。

  CX常用来保存计数值,如在移位指令、循环指令和串处理指令中用作隐含的计数器。
DX在作双字长运算时,可把DX和AX组合在一起存放一个双字长数,DX用来存放高16位数据。此外,对某些I/O操作,DX可用来存放I/O的端口地址。

  SP、BP、SI、DI四个16位寄存器可以象数据寄存器一样在运算过程中存放操作数,但它们只能以字(16位)为单位使用。此外,它们更经常的用途是在存储器寻址时,提供偏移地址。因此,它们可称为指针或变址寄存器。

  SP称为堆栈指针寄存器,用来指出栈顶的偏移地址。

  BP称为基址指针寄存器,在寻址时作为基地址寄存器使用,但它必须与堆栈段寄存器SS联用来确定堆栈段中的存储单元地址。

  SI为源变址寄存器,在串处理指令中,SI作为隐含的源变址寄存器与DS联用,以确定数据段中的存储单元地址,并有自动增量和自动减量的变址功能。

  DI为目的变址寄存器,在串处理指令中,DI和附加段寄存器ES联用,以达到在附加段中寻址的目的,然后DI自动增量或减量。
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
8086的专用寄存器包括IP、SP和FLAGS三个16位寄存器。

  IP为指令指针寄存器,它用来存放将要执行的下一条指令地址的偏移量,它与段寄存器CS联合形成代码段中指令的物理地址。在计算机中,控制程序的执行流程就是通过控制IP的值来实现的。

  SP为堆栈指针寄存器,它与堆栈段寄存器联用来确定堆栈段中栈顶的地址,也就是说SP用来存放栈顶的偏移地址。

  FLAGS为标志寄存器,这是一个存放条件码标志、控制标志的16位寄存器。
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
8086的标志寄存器
条件码标志用来记录程序中运行结果的状态信息,它们是根据有关指令的运行结果由(CPU)自动设置的。由于这些状态信息往往作为后续条件转移指令的转移控制条件,所以称为条件码。
  ① 进位标志 CF,记录运算时最高有效位产生的进位值。
  ② 符号标志 SF,记录运算结果的符号。结果为负时置1,否则置0。
  ③ 零标志  ZF,运算结果为0时ZF位置1,否则置0。
  ④ 溢出标志 OF,在运算过程中,如操作数超出了机器可表示数的范围称为溢出。溢出时OF位置1,否则置0。
  ⑤ 辅助进位标志 AF,记录运算时第3位(半个字节)产生的进位值。
  ⑥ 奇偶标志 PF,用来为机器中传送信息时可能产生的代码出错情况提供检验条件。当结果操作数中1的个数为偶数时置1,否则置0。

  控制标志位有3位:
  ① 方向标志 DF,在串处理指令中控制处理信息的方向。当DF=1时,串处理从高地址向低地址方向处理。当DF=0时,串处理就从低地址向高地址方向处理。
  ② 陷阱标志 TF,用于调试时的单步方式操作。当TF=1时,每条指令执行完后产生陷阱,由系统控制计算机;当TF=0时,CPU正常工作,不产生陷阱。
  ③ 中断标志 IF,用于控制可屏蔽硬件中断。当IF=1时,允许8086微处理器响应中断请求,否则关闭中断。

  8086提供了设置某些状态信息的指令。必要时,程序员可使用这些指令来建立状态信息。
调试程序Debug中提供了测试标志位的手段,它用符号表示某些标志位的值
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
  3. 段寄存器

  8086微处理器共有4个16位的段寄存器,在寻址内存单元时,用它们直接或间接地存放段地址。
  代码段寄存器CS:存放当前执行的程序的段地址。
  数据段寄存器DS:存放当前执行的程序所用操作数的段地址。
  堆栈段寄存器SS:存放当前执行的程序所用堆栈的段地址。
  附加段寄存器ES:存放当前执行程序中一个辅助数据段的段地址。

注:
执行单元(Execution Unit):负责指令的执行,实际是既有控制器的功能,也有运算器的功能。包括:ALU、标志寄存器、暂存器、寄存器组、控制单元 。EU和BIU是组成8086微处理器的两个基本功能部件,他们相互配合完成指令操作。当EU从指令队列中去走指令后,指令队列出现空字节,BIU就立即自动地从内存中取出后续的指令放入队列;当EU执行指令需要操作数时,BIU就根据EU给出的操作数有效地址,从指定的内存单元或I/O端口取出数据供EU使用;当EU运算结束后,BIU将运算结果写入指定的内存单元或I/O端口。EU和BIU这两个功能部件又是相互独立的。大多数情况下,EU的执行指令操作与BIU的取指令操作在实践上可重叠进行,既EU进行某条指令执行操作时,BIU可同时进行后继指令的取指令操作,这两个部件并行连续工作可形成指令处理流水线。这样,可减少CPU取指令的等待时间,加快了CPU的指令执行速度,也提高了系统总线的利用率。)

写这篇文章,完全是因为学习保护模式需要这些知识,读者完全可以走马观花,大致看看有什么内容,知道需要的时候来查这篇文章就可以了,完全没有必要抵抗着困意非要把这篇文章认真看完,记住里面每一个寄存器里每一位的定义,但是以后的文章如果需要,一定要记得回来查查相关的内容。

然后说一下386

80386共提供7种类型的32位寄存器,如下:

通用寄存器(EAX、EBX、ECX、EDX、ESP、EBP、ESI、EDI)
段寄存器(CS、SS、DS、ES、FS、GS)
指令指针寄存器和标志寄存器(EIP、EFLAGS)
系统表寄存器(GDTR、IDTR、LDTR、TR)
控制寄存器(CR0、CR1、CR2、CR3、CR4)
调试寄存器(DR0、DR1、DR2、DR3、DR4、DR5、DR6、DR7)
测试寄存器(TR6、TR7)
其中后三类寄存器是80386以后的CPU才有的,以前的CPU完全没有。

下图是前四类寄存器的大致示意图:

本文只对这些寄存器做一个大致的介绍,其中有些特殊且有较大意义的寄存器,会另文介绍。

一、通用寄存器

一组八个通用寄存器是对8086/80286通用寄存器的32位扩展,其用法与在8086/80286中相似,支持8位、16位、32位操作,进行32位操作是,寄存器名称前面冠以“E”。

这八个寄存器的名称如下:EAX(累加器)、EBX(基址)、ECX(计数)、EDX(数据)、ESP(栈指针)、EBP(基址指针)、ESI(源变址)、EDI(目的变址)。

ESI EDI变址寄存器
32位CPU有2个32位通用寄存器ESI和EDI。其低16位对应先前CPU中的SI和DI,对低16位数据的存取,不影响高16位的数据。

寄存器ESI、EDI、SI和DI称为变址寄存器(Index Register),它们主要用于存放存储单元在段内的偏移量,用它们可实现多种存储器操作数的寻址方式,为以不同的地址形式访问存储单元提供方便。变址寄存器不可分割成8位寄存器。作为通用寄存器,也可存储算术逻辑运算的操作数和运算结果。 它们可作一般的存储器指针使用。在字符串操作指令的执行过程中,对它们有特定的要求,而且还具有特殊的功能。

SI是源变址寄存器,DI是目的变址寄存器。可以用来存放数据、地址,功能类似、用法类似、一般使用哪个都可以。

二、段寄存器

80386比8086/80286增加了两个段寄存器FS、GS。

除CS支持代码段,SS支持堆栈段外,程序员可以利用其它的所有段寄存器支持数据段。

每个段寄存器对应这一个64位高速缓存器(有些资料中说有96位,但值使用其中的64位),这在8086中是没有的(在80286中为48位),它的具体作用将另文介绍。

三、指令指针寄存器和标志寄存器

指令寄存器EIP是对8086/80286指令指针寄存器的32位扩展,它包含着待执行指令的32位偏移量,该值总是相对CS所代表的段基址而言的。

标志寄存器也是对8086/80286标志寄存器的32位扩展,其定义如下(这张图截自Intel关于IA32架构的最新文档):

其中OF、DF、IF、TF、SF、ZF、AF、PF和CF在8086中就已经存在,请参考相关资料。

IOPL(I/O Privilege Level)是从80286开始出现的,占2个bit表示I/O特权级,如果当前特权级小于或等于IOPL,则可以执行I/O操作,否则将出现一个保护性异常。IOPL只能由特权级为0的程序或任务来修改。

NT(Nested Task)也是从80286开始出现的,表示嵌套任务,用于控制中断返回指令IRET,当NT=0时,用堆栈中保存的值恢复EFLAGS、CS和EIP,从而实现返回;若NT=1,则通过任务切换实现中断返回。

下面的标志位是80386以后的CPU才有的标志。

VM(Virtual-8086 mode)表示虚拟8086模式,如果VM被置位且80386已出于保护模式下,则CPU切换到虚拟8086模式,此时,对段的任何操作又回到了实模式,如同在8086下运行一样。

RF(Resume flag)表示恢复标志(也叫重启标志),与调试寄存器一起用于断点和单步操作,当RF=1 时,下一条指令的任何调试故障将被忽略,不产生异常中断。当RF=0时,调试故障被接受,并产生异常中断。用于调试失败后,强迫程序恢复执行,在成功执行每条指令后,RF自动复位。

AC(Alignment check)表示对齐检查。这个标志是80486以后的CPU才有的。当AC=1且CR0中的AM=1时,允许存储器进行地址对齐检查,若发现地址未对齐,将产生异常中断。所谓地址对齐,是指当访问一个字(2字节长)时,其地址必须是偶数(2的倍数),当访问双字(4字节长)时,其地址必须是4的倍数。

但是只有运行在特权级3的程序才执行地址对齐检查,特权级0、1、2忽略该标志。

VIF(Virtual interrupt flag)表示虚拟中断标志。以下的三个标志是Pentium以后的CPU才有的。当VIF=1时,可以使用虚拟中断,当VIF=0时不能使用虚拟中断。该标志要和下面的VIP和CR4中的VME配合使用。

VIP(Virtual interrupt pending flag)表示虚拟中断挂起标志。当VIP=1时,VIF有效,VIP=0时VIF无效。

ID(Identification flag)表示鉴别标志。该标志用来只是Pentium CPU是否支持CPUID的指令。

实际上,如果不编写操作系统,大部分标志可能很难得用到一次,有个印象就好了,用到了再去查不迟。

四、系统表寄存器

80386 中有4个系统表寄存器,分别是全局描述符表寄存器(GDTR)、中断描述符表寄存器(IDTR)、局部描述符表寄存器(LDTR)、任务状态寄存器(TR)。系统表寄存器用于在保护方式下,管理4 个系统表,由于只能在保护方式下使用,因此又称为保护方式寄存器。有关描述附表的问题,另文介绍。

五、控制寄存器

80386的控制寄存器有4个,其中CR1保留以后使用,从Pentium开始,又增加了一个CR4,CR0的低16位包含了与80286的MSW一致的位定义,保持了和80286的兼容,同时也兼容了从80286开始的两条指令LMSW/SMSW,其基本定义如下:

CR0中各位含义如下:

PE(Protection Enable)保护模式允许,PE=0表示CPU工作在实模式,PE=1表示CPU工作在保护模式
MP(Monitor Coprocessor)监控协处理器,MP=1表示协处理器在工作,MP=0表示协处理器未工作。
EM(Emulation)协处理器仿真,当MP=0,EM=1时,表示正在使用软件仿真协处理器工作。
TS(Task Switched)任务转换,每当进行任务转换时,TS=1,任务转换完毕,TS=0。TS=1时不允许协处理器工作。
以上4个定义从80286开始,下面的2个定义从80386开始存在

ET(Extension Type)处理器扩展类型,反映了所扩展的协处理器的类型,ET=0为80287,ET=1为80387。
PG(Paging)页式管理机制使能,PG=1时页式管理机制工作,否则不工作。
从80486开始又增加了如下位定义。

NE(Numeric Error)数值异常中断控制,NE=1时,如果运行协处理器指令发生故障,则用异常中断处理,NE=0时,则用外部中断处理。
WP(Write Protect)写保护,当WP=1时,对只读页面进行写操作会产生页故障。
AM(Alignment Mask)对齐标志,AM=1时,允许对齐检查,AM=0时不允许,关于对齐,在EFLAGS的AC标志时介绍过,在80486以后的CPU中,CPU进行对齐检查需要满足三个条件,AC=1、AM=1并且当前特权级为3。
NW(Not Write-through)和CD(Cache Disable),这两个标志都是用来控制CPU内部的CACHE的,当NW=0且CD=0时,CACHE使能,其它的组合说起来比较复杂,如果有读者真的想搞清楚的话,可以参阅《Intel? 64 and IA-32 Architectures》中的“Software Developer’s Manual Volume 3A”这一册,在第10章对这两个标志的各种组合有比较详细的说明。
CR1保留未用;CR2存放引起页故障的线性地址,只有在PG=1时,CR2才有效,当页故障处理程序被激活时,压入页故障处理程序堆栈中的错误码提供页故障的状态信息。
CR3的bit12--bit31存放页目录的基地址,因为也目录总是页对齐的(一页为4K),所以页目录基地址从bit12开始就可以了。只有当CR0中的PG=1时,CR3的页目录基地址才有效。
从80486开始,在CR3的低12位定义了两个控制位,如下:

PCD(Page-level Cache Disable)页CACHE禁止,当PCD=0时,页目录表进行高速缓存,PCD=1时,不进行高速缓存;该位控制PCD引脚控制外部CACHE工作还是不工作。
PWT(Page-level Writes Transparent),CACHE的写入分为透写(Write-Through)和回写(Write-Back),80486以上的CPU内部的CACHE都是透写的,但对外部CACHE而言,允许某些页是回写的,而另一些页是透写的,当PWT=1时,外部CACHE对页目录进行透写,否则进行回写;此位驱动PWT引脚以控制外部CACHE是透写还是回写。
CR4是从Pentium CPU开始出现的。

VME(Virtual-8086 Mode Extensions)虚拟8086方式扩展,VME=1允许使用虚拟8086扩展模式,否则只能使用80386/80486的虚拟8086模式。
PVI(Protected-Mode Virtual Interrupts)保护模式虚拟中断,PVI=1时,在保护模式下支持虚拟中断标志VIF(EFLAGS中),PVI=0则不支持虚拟中断标志。
TSD(Time Stamp Disable)时间戳禁止,TSD=1时,允许在特权级为0的程序中执行RDTSC指令(读时间戳计数指令),TSD=0时,允许任何特权级执行RDTSC指令。
DE(Debugging Extensions)调试扩展,
PSE(Page Size Extensions)页大小扩展,PSE=1时,页大小可以扩展到2M或4M,PSE=0时,页大小只能是4K.
PAE(Physical Address Extension)物理地址扩展,PAE=1时,页物理地址可以扩展到36bits以上,PAE=0时只能用32bits的物理地址。
MCE(Machine-Check Enable)硬件检查使能,Pentium以后的CPU有一种硬件检测功能,MCE=1时允许使用该功能。
PGE(Page Global Enable)全局页使能,PGE=1时,允许使用全局页,PGE=0时禁止使用全局页。
PCE(Performance-Monitoring Counter Enable)性能监视计数器使能,当PCE=1时,允许在任何保护级下执行RDPMC指令,PCE=0时,只有特权级0的程序可以执行RDPMC指令。

OSFXSR(Operating System Support for FXSAVE and FXRSTOR instructions)
OSXMMEXCPT(Operating System Support for Unmasked SIMD Floating-Point Exceptions)
VMXE(VMX-Enable Bit)VMX使能位,VMXE=1时,允许VMX操作。
SMXE(SMX-Enable Bit)SMX使能位,SMXE=1时,允许SMX操作。
OSXSAVE(XSAVE and Processor Extended States-Enable Bit)

六、调试寄存器

一共有8个调试寄存器DR0--DR7,DR0-DR3可以分别设置4个断点的线性地址,DR4-DR5保留未用,DR6是断点状态寄存器,DR7是断点控制寄存器(包括断点类型、断点长度,断点开放/禁止)

七、测试寄存器

一共有8个测试寄存器TR0--TR7,TR0-TR2保留,TR3-TR5用作CACHE测试,TR6为命令测试寄存器,TR7为测试数据寄存器

热门标签: numa 哪些 numa 哪些
  • 24的质因数有几个

    南城到赣浙界收费站有多少公里?开车要多久: 驾车路线:全程约262.8公里起点:江西南城1.抚州市内驾车方案1) 从起点向正南方向出发,沿生产路行驶660米,直行进入体育路2) 沿体育路行驶340米,过左侧的金旺楼,左转进入盱江大道3) 沿盱江大道行驶2.0公...

    208条评论 5673人喜欢 1215次阅读 457人点赞
  • pptp和l2tp哪个快

    一天只吃一顿饭不是很多 让后骑单车17公里速度中等以上 跑步5公里 10天可以瘦20斤吗: 这是不能的,因为你一天只吃一顿饭,还要做这么多的大量运动,你的身体节奏跟不上,而且消耗卡路里太多,你的身体会吃不消的,你运动量过大吃的东西也会越多,你这样跟节食没什么区别的,减肥要慢慢来,不要太急切,最重要的是要找对...

    674条评论 5840人喜欢 2665次阅读 470人点赞
  • mysql下载哪个

    从嘉峪关到湛江有多远/多少公里/开车需要多少时间: 驾车路线:全程约3064.7公里起点:嘉峪关市1.嘉峪关市内驾车方案1) 从起点向东南方向出发,沿体育大道辅路行驶10米,稍向右转进入体育大道2) 沿体育大道行驶270米,进入新华南路3) 沿新华南路行驶970米,直...

    595条评论 5433人喜欢 3976次阅读 793人点赞
  • 云系统是什么

    南昌西站到徐坊客运站打的士多久能到 要多少钱: 南昌西站到徐坊客运站超过17公里,8元起步的的士约52.1元(按18公里计算)。你可以考虑先坐高铁1线(5元)到十字街站下,再打的只要一个起步价(6元或8元)。 ...

    965条评论 2908人喜欢 3823次阅读 338人点赞
  • inside怎么读

    常州薛家在哪?地方怎么样?: 薛家属于常州新北区,是现在开发的比较热的工业区,离河海大学最近10公里左右最远的17公里,交通相当好,电动车到薛家1小时内,公交要看你在哪里上班了,一般不方便,从河海路一直向西到玉龙路右拐就到(不知道你具体到薛家哪里...

    943条评论 2279人喜欢 2483次阅读 506人点赞
  • 2014全国执业医师成绩哪里查

    东莞虎门到梅州市有多少公里啊?要多长时间?谢谢大家!: 驾车路线:全程约369.2公里起点:虎门镇1.东莞市内驾车方案1) 从起点向西南方向出发,沿虎门大道行驶110米,朝沿江路/狮子洋飞航方向,稍向右转2) 行驶220米,左转3) 行驶30米,左转4) 行驶220米,直...

    823条评论 6142人喜欢 1867次阅读 763人点赞
  • etc到哪里办理

    Wii 第一次接触的坦克第17关怎么过?: 先透过反弹搞死中间的,再把战车移上一点就可以反弹搞死左、右两台,炸掉左下方可炸毁的墙,然后往右下移,反弹干死左上的。再开左上方墙,挑准角度干右上的那台。开右上方墙,也是靠反弹灭右下的。这个比起50以后的容易太多了。P...

    564条评论 2337人喜欢 2488次阅读 733人点赞