存档

‘工作’ 分类的存档

MySQL删除大量数据后死锁

2014年7月15日 没有评论

收到警报,统计的从库不同步。
上去看了一下MySQL执行的进程情况。

mysql> show processlist\G
...
*************************** 3. row ***************************
     Id: 7
   User: xxolap
   Host: 127.0.0.1:40367
     db: xxdb
Command: Killed
   Time: 53479
  State: query end
   Info: delete from xxdb.table_big where
send_time < (unix_timestamp('2014-7-14')-3600*24*7)*1000

发现有一个对大表的删除数据操作,被kill,这个操作执行了53479秒,已经十多个小时了。
更多内容…

分类: 工作 标签: , ,

修养笔记章7:动态链接

2014年7月9日 没有评论

概要
1、动态链接起因:与静态链接的区别及好处:省磁盘,省内存,省cpu,独立更新。缺点:。。。
2、一个例子:多出来的文件映射,装载地址0。
3、地址无关代码:
  1)固定装载地址。
  2)装载时重定位。
  3)地址无关代码,四种寻址模式:
    1)内部函数:相对寻址。
    2)内部数据:相对寻址。
    3)外部数据:全局偏移表(指向变量的指针数组)。
    4)外部调用:全局偏移表(目标函数地址),有优化空间。
 4)共享模块的全局变量:GOT。
 5)数据段地址无关性:重定位表。
更多内容…

修养4.6.2中代码在x86_64中编译

2014年7月8日 没有评论

在x86_64的环境中,把《程序员的自我修养》第4.6.2节中的例子敲了一遍,始终无法编译通过。
源码

char* str = "OK!\n";

void print(){
    asm("movl $4,%%edx \n\t"
        "movl %0,%%ecx \n\t"
        "movl $0,%%ebx \n\t"
        "movl $4,%%eax \n\t"
        "int $0x80 \n\t"
        ::"r"(str):"edx","rcx","ebx"
         );
}

void exit(){
    asm("movl $42,%ebx \n\t"
        "movl $1,%eax \n\t"
        "int $0x80 \n\t");
}

void nomain(){
        print();
        exit();
}

编译的错误提示

tok.c: Assembler messages:
tok.c:5: Error: suffix or operands invalid for `mov'

更多内容…

修养第6章–可执行文件的装载与进程

2014年7月8日 没有评论

一、进程虚拟地址空间
  1、程序和进程的区别:程序是可执行文件,程序运行的过程,通过一个或多个进程来完成。程序是静态的物理文件,进程是运行时的过程。
  2、虚拟地址空间(Virtual Address Space):由硬件平台的CPU位数决定。大小为2的cpu位数次方减去1。
  3、Linux进程虚拟空间分布:操作系统(OS)高位1G,用户进程低位3G。
  4、PAE(Physical Address Extension)物理地址扩展。物理地址由32位扩展到36位。类似于之前把16位的地址线扩展到20位。
  5、AWE(Address Windowing Extensions)窗式地址扩展。有点像扇区的访问方式。
二、装载的方式
  1)、覆盖装入。程序员自己写覆盖管理器,用于合理分配和释放内存。生成依赖树,不能跨树调用。
  2)、页映射。虚拟存储机制的一部分,按各种淘汰算法换出内存,缺页时加载。
三、从操作系统角度看可执行文件的装载。
  1)、进程的建立。创建VAS,与可执行文件映射,启动。
  2)、页错误。缺页加载。
更多内容…

分类: 工作 标签: , , , , ,

修养第5章小结–Windows PE/COFF

2014年7月8日 没有评论

一、Windows的二进制文件格式 PE/COFF
  1、PE(Protable Executable):可在各版本的Windows平台上运行。实际上只支持x86的CPU。
  2、PE/COFF:VC++编译的目标代码还是COFF格式,可执行文件是PE格式。
  3、PE32+:只是把原先32位的字段变成了64位。
  4、也是段的结构,段名只有提示作用,没有实际意义。
二、PE的前身--COFF
  1、COFF跟ELF非常像,可以找到跟ELF的文件结构相对应的地方。映像头、段表、各段。
  2、映像(Image):在装载时被映射到进程的虚拟空间,所以也被叫做映像文件(Image File)。
三、链接指示信息
  1、.drectve(Directive)段,编译器希望告诉链接器该怎样链接这个目标文件。
四、调试信息
  1、.debug开始的段,都包含调试信息。
  2、.debug$S代表符号相关的调试信息段。.debug$P代表预编译头文件相关的调试信息段。.debug$T表示类型相关的调试信息。
五、大家都有符号表。
  1、最后部分是COFF的符号表。
六、Windows下的ELF--PE
  PE与COFF的区别:
    0.1 开始部分不是COFF文件头,是DOS MZ可执行文件格式的文件头和桩代码。兼容DOS而做。
    0.2 原COFF文件头中的IMAGE_FILE_HEADER作为PE文件头IMAGE_NT_HEADERS的一部分。
    0.3 PE兼容MZ格式,扩展名相同,在DOS下运行仅输出提示信息。
  1)、PE数据目录。用于保存装载所需要的数据结构(导入表、导出表、资源、重定位表)的位置和长度。

分类: 工作 标签: , , , , ,

修养第4章小结

2014年7月2日 没有评论

1、相对地址修正为S + A – P,晕了很长时间。简单总结一下
  S没问题,很确定是要调用方法的实际地址。绝对地址。
  A没问题,链接之前放的值,也就是常量-4。
  P被修正的位置,容易晕。实际上是call指令所在的地址加一,也就是call后的值的地址。
  而且,使用常量-4的原因是call指令用的地址是32位的(也就是4个字节)

2、编译器将未初始化的全局变量当作弱符号来处理,所以不在BSS段分配空间。
  第三章小结的时候,发现了这个问题,在这一章已经描述了,只在链接时才会分配到bss段。
  http://msblog.tk/archives/430

3、最小程序的问题。已经另有一遍blog描述了。
  http://msblog.tk/archives/424

分类: 工作 标签: