- 博客(148)
- 资源 (1)
- 收藏
- 关注
原创 perf在Ubuntu上的安装
perf是一个强大的性能分析和优化工具,高于2.6.31的内核都支持。安装perf,首先安装内核源码:sudo apt-get install linux-source。完成之后,可以再/usr/src下找到src,解压,进入tools/perf,然后make&&make install即可。参考:http://www.brendangregg.com/perf.htm
2015-07-01 01:51:48
15518
3
原创 mysql在Ubuntu上的安装
一直想着要了解一下mysql数据库,现在编译器的研究终于告一段落,正式动手搞起来。今天就从源码的下载,安装开始,个人使用的Ubuntu14.04。1,首先,下载最新的源码: wget http://mysql.mirror.kangaroot.net/Downloads/MySQL-6.0/mysql-6.0.11-alpha-linux-x86_64-glibc23.tar.gz
2015-06-25 17:54:54
910
原创 lcc源代码解析之x86后端
在前面的文章中已经介绍过,lcc中跟硬件平台相关的配置由src中*.md配置,本文以x86为例,详解这一部分的工作机制。熟悉汇编的同学都知道32位x86机器有八个通用寄存器:eax ebx ecx edx esi edi esp ebp而ebp和esp两个寄存器是有固定作用的,其保存的帧指针和栈指针是组成栈帧的基本组成部分,所以这两个寄存器不参与分配。在x86.md的最下面
2015-06-07 22:54:47
1717
原创 lcc源代码解析之stat.c
前面的章节里已经解析了表达式部分,在理解了表达式的基础上,现在更进一步来理解语句。在C语言中,语句(statement)是一个比表达式(expression)更高粒度的存在,也即表达式是语句的组成成分。具体的C语言语法格式如下:statement:ID:statementcase constant-expression:statementdefault:statement
2015-05-24 22:11:38
1386
转载 Lisp的前世今生
一、如果我们把流行的编程语言,以这样的顺序排列:Java、Perl、Python、Ruby。你会发现,排在越后面的语言,越像Lisp。Python模仿Lisp,甚至把许多Lisp黑客认为属于设计错误的功能,也一起模仿了。至于Ruby,如果回到1975年,你声称它是一种Lisp方言,没有人会反对。编程语言现在的发展,不过刚刚赶上1958年Lisp语言的水平。二、1958年,J
2015-04-30 09:07:05
729
转载 当你在浏览器地址栏输入一个URL后回车,将会发生的事情?
转自:http://www.cnblogs.com/panxueji/archive/2013/05/12/3073924.html作为一个软件开发者,你一定会对网络应用如何工作有一个完整的层次化的认知,同样这里也包括这些应用所用到的技术:像浏览器,HTTP,HTML,网络服务器,需求处理等等。本文将更深入的研究当你输入一个网址的时候,后台到底发生了一件件什么样的事~
2015-04-24 13:56:07
3557
原创 带外数据(out-of-band data)
带外数据(out-of-band data)是 很多传输层都有的概念,也称经加速数据(expedited data)。其核心作用是在于连接的某端发送了重要的事情,这些信息需要以更高优先级(要比已经排队等待发送的普通数据更快的发送给对端)发送出去。带外数据并不要求在服务器和客户之间再建立一个连接,而是被映射到已有的连接中
2015-04-20 19:37:21
2050
原创 ld.linux.so源码分析--_dl_start_final
/* This is the second half of _dl_start (below). It can be inlined safely under DONT_USE_BOOTSTRAP_MAP, where it is careful not to make any GOT references. When the tools don't permit us to
2015-04-15 09:15:09
2886
1
原创 ld.linux.so源码分析--dl_main
本章分析ld.so的主体dl_main,这个函数非常复杂,只论篇幅就占了这个c文件的一半以上。static voiddl_main (const ElfW(Phdr) *phdr,ElfW(Word) phnum,ElfW(Addr) *user_entry){ const ElfW(Phdr) *ph; enum mode mode; str
2015-04-13 15:59:55
4604
原创 ld.linux.so源代码分析--RTLD_START
之前在研究动态连接的时候,原本打算从头到尾分析下linux下动态链接器ld.linux.so的源代码,但是当时工作上比较忙,未能完成这一任务,只写了一篇介绍ld.so自举的blog。最近打算重新开始这一任务,详细的分析下这份代码。首先,很多人认为这份代码应该belongs to内核,但是实际上这跟编译一样,属于用户态程序,由glibc提供,核心代码在elf/rtld.c中。这些代码的理
2015-04-13 11:32:05
3488
原创 网络编程练习-RAW套接字
RAW套接字能提供TCP和UDP所不能提供的以下三个功能:1,读写ICMP和IGMP分组,如果ping程序和多播路由守护程序mrouted就是使用raw套接字。2,读写内核不处理其协议字段的IPv4数据报。3,自行构造IPv4首部。
2015-04-10 17:17:10
823
原创 网络编程练习-key套接字
密钥管理套接字支持三种类型的操作:1,应用进程可以通过key套接字往内核以及其他打开着密钥套接字的所有其他进程发送消息2,应用进程可以通过key套接字从内核或其他进程接收消息。3,通过发送dump请求使内核dump出当前的SADB(security policy database)。
2015-04-07 13:43:35
569
原创 网络编程练习-路由套接字
路由套接字主要是为了操作内核中的路由子系统而创建,它提供以下功能:1,进程可以通过路由套接字读取内核信息,获取类似ICMP重定向等信息(需root权限)。2,进程可以通过路由套接字发送消息给内核,用来增加或者删除路径(需root权限)。3,进程可以通过sysctl倾泻路由表或列出所有已配置的接口。数据链路层套接字地址结构#include struct sockadd
2015-03-30 21:26:32
1434
原创 网络编程练习-ioctl
ioctl是一个非常重要的POSIX接口,可以执行非常多的操作。ioctl可以对文件,设备节点,套接字等多种资源进行操作,甚至在某些情况下可以作为一个数据传输接口(当然,需要驱动里给予支持)。其函数原型如下:#include int ioctl(int fd, int request, .../* void *arg*/);//第三个参数一般为一个指针,其类似依赖于第二个参数re
2015-03-30 18:48:50
737
原创 网络编程练习-广播和多播
广播的用途:1,资源发现,在本地子网中定位一个服务器主机。2,在有多个客户与单个服务器通信的局域网环境中尽量减少分组流通。广播地址:1,多播支持在IPv4中是可选的,在IPv6中是必需的。2,IPv6不支持广播,使用广播的IPv4应用程序一旦移植到IPv6就必须要用多播重写。3,广播和多播要求用于UDP或原始IP,他们不能用于TCP。
2015-03-29 23:15:42
635
原创 网络编程联系-高级I/O
除了read/write函数之外,POSIX还为socket提供了其他的I/O接口。1,recv&send函数原型:#include ssize_t recv(int sockfd, void* buf, size_t nbytes, int flags);ssize_t send(int sockfd, const void *buf, size_t nbytes, int f
2015-03-29 22:00:55
523
原创 网络编程练习-unix域套接字
unix域协议并不是一个实际的协议族,而是一种用在单个主机中进程间通信的方式。unix域提供两类套接字:字节流套接字(类似TCP)和数据报套接字(类似UDP)。除了用于常用的进程间通信,还可用于在在不同进程中间传递描述符。unix域套接字也可以将客户的凭证(用户ID和组ID)提供给服务器,从而能够提供额外的安全检查措施。 /*****************************
2015-03-27 15:23:36
522
原创 网络编程练习-名字与地址转换
主机名字与IP地址之间的映射由DNS(域名系统,Domain Name System)完成。DNS中的条目称为资源记录(resource record, RR),其中包括以下字段A 记录一个主机名映射的32位IPv4地址。AAAA 记录一个主机名映射的128位IPv6地址。PTR 把IP地址映射成主机名。
2015-03-26 21:34:41
699
原创 网络编程练习-fcntl
函数原型(linux man page):fd:套接字文件描述符(用于操作套接字时,可以用于操作其他文件)cmd:对于每一个套接字描述符,都有一个组F_GETFL&F_SETFL的cmd。后面的可变参数为具体设置值。对于socket,fcntl可以设置IO方式(是否阻塞,信号驱动式IO),设置&获取套接字属主(套接字的进程组ID)。当然,另外一个posix接口ioctl
2015-03-26 17:09:29
506
原创 网络编程练习-TCP socket
Server端:#include #include #include #include int main(int argc, char* argv[]){ int sockfd = socket(AF_INET, SOCK_STREAM, 0); if(!sockfd){ fprintf(stderr, "socket creat error. \n"); return
2015-03-25 17:13:57
637
原创 SMTP 简单邮件传送协议
用TCP进行的邮件交换是由报文传送代理MTA完成的。最普通的Unix系统的MTA是Sendmail。两个MTA之间用NVT ASCII进行通信,客户向服务器发出命令,服务器用数字应答码和可选的人可读字符串进行响应。SMTP命令:HELOMAIL:RCPTDATAQUITRSETVRFYNOOPEXPNTURN
2015-03-21 21:05:37
938
原创 FTP 文件传输协议
FTP是用于文件传输的internet标准。FTP采用两个TCP连接来传输一个文件:1,控制连接以通常的客户服务器方式建立,服务器被动打开21号端口,客户主动打开21端口,并于服务器的21号端口建立连接。2,每启动一个文件的传输,就创建一个新的数据连接。其传输模型如下图:FTP提供了控制文件传输和存储的多种选择,在以下四个方面中的每一个都必须做出一个选择:每
2015-03-21 20:35:10
985
原创 SNMP 简单网络管理协议
基于TCP/IP的网络管理主要为两个部分:1,网络管理站(manager),显示所有被管理设备的状态,也称管理进程。2,被管理设备(agent):包括路由器,终端机,打印机等,也称代理进程。二者之间的通信可以有两种方式:1,管理进程向代理进程发出请求,查询或者修改一个具体的参数值。2,代理进程主动向管理进程上传发送的重要事件,以便于管理进程修改代理进程的相关参数。
2015-03-21 17:24:21
789
原创 TCP的超时和重传
TCP提供可靠的运输层。其主要途径就是确认从另一端收到的数据。同时确认也需要传输,故而也存在丢掉的可能。TCP通过在发送时设置一个定时器来解决这种问题:如果定时器溢出还没有收到确认,重传该数据。对于每个连接,TCP管理4个不同的定时器。1,重传定时器用于希望收到对端的确认。2,persist定时器使窗口大小信息保持不断流动,即使另一端关闭了其接受窗口。3,keepalive
2015-03-20 16:53:04
717
原创 TCP 传输控制协议
与UDP不同,TCP提供面对连接的,可靠的字节流服务。TCP协议通过以下方式来提供可靠性:1,应用数据被分割成TCP因为最合适发送的数据块,由TCP传递给IP的信息单位称为报文段或段(segment)。2,当TCP发出一个段之后,它启动一个timer并等待,如果确认回收超时,将重发此报文段。3,一端收到另一端的数据,它将发送一个确认,并不立即发送,通常推迟几分之一秒。4,TCP
2015-03-17 19:56:00
634
原创 TFTP 简单文件传输协议
TFTP基于UDP,通常用于引导无盘系统。TFTP报文的头两个字节表示操作码,依据此操作码(从1到5),TFTP有五种不同的报文格式,格式如下:1,如果是读请求或者写请求,文件名字段说明客户要读或写的位于服务器的上的文件并以0字节作为结束,模式字段是一个ASCII码串netascii或octet,同样以0字节结束。netascii表示数据是以成行的ASCII码字符组成,以C
2015-03-17 14:41:17
2681
原创 DNS 域名系统
DNS是一种用于TCP/IP应用程序的分布式数据库,它提供主机名字和IP地址之间的转换及有关电子邮件的选路信息。对DNS的访问是通过一个地址解析器来完成的,在*nix主机中,主要通过两个库函数gethostbyname和gethostbyaddr来访问。DNS的名字空间与*nix文件系统类似,也具有层次结构,其结构如下图:每个节点有一个至多63个字符长得标示,根是没有任何标示的
2015-03-17 13:36:10
694
原创 UDP:用户数据报协议
UDP是一个简单的面向数据报的传输层协议,进程的每个输出操作都正好产生一个UDP数据报,并组装一份待发送的IP数据报。与TCP不同,app产生的全体数据与真正发送的单个IP数据报没什么关系。UDP不提供可靠性:只发送数据,并没有保证措施确保他们能到达目的地。UDP封装结构如下:UDP首部共八个字节,分为4个16bit的字段,分别表示源端口号,目的端口号,UDP长度(最小8b
2015-03-16 16:59:57
847
原创 ICMP:Internet控制报文协议
ICMP传递差错报文以及其他需要注意的信息,通常被IP层或传输层使用。ICMP报文格式如下:所有ICMP报文的前4个字节是一样的,其他互不相同。类型字段可以有15个不同的值,以描述特定类型的ICMP报文。某些ICP报文还使用代码字段的值来进一步描述不同的条件。ICMP地址掩码请求用于误判系统在引导过程中获取自己的子网掩码。
2015-03-15 14:53:52
800
原创 glibc内存管理模块ptmalloc架构透析
之前写了一篇关于ptmalloc的malloc/free代码解析的博客,有同事看到说,在不熟悉ptmalloc架构的情况,即使注释写的再详细,也不是很好理解,建议再写一些架构介绍的博文,年前后这段时间一直在忙其他事情,打算最近抽出一些时间完成这个任务。ptmalloc的设计遵循以下原则:1,较大块的内存,占用周期长得内存使用mmap分配,使用时间短的内存使用brk,如果不了解brk和mma
2015-03-11 11:30:17
1341
4.2版本lcc编译器
2014-09-16
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人