2012年11月

Linux线程互斥锁

线程互斥锁的设置就是为了多线程之间临界资源更好的共享,加了锁的资源就不能被其他的线程访问,除非

等到占用锁的线程释放该锁。

互斥锁的操作主要包括互斥锁初始化、上锁、判断上锁、解锁、摧毁互斥锁。分别由以下几个函数实现

- 阅读剩余部分 -

SublimeText2 Preferences Settings

"color_scheme": "Packages/Color Scheme - Default/Monokai.tmTheme",
"ignored_packages":
[
"ConvertToUTF8"
],
"font_face": "Consolas Hybrid",
"font_size": 11.5,
"gutter": true,
"margin": 4,
"fade_fold_buttons": true

Sublime install on fedora

[php]
wget http://c758482.r82.cf2.rackcdn.com/Sublime%20Text%202.0.1.tar.bz2
mv /home/aneek/Downloads/Sublime_Text_2/ /opt/Sublime_Text_2
touch /usr/bin/sublime
chmod 755 /usr/bin/sublime

vim /usr/bin/sublim
===========================================
#!/bin/sh
export SUBLIME_HOME="/opt/Sublime_Text_2"

$SUBLIME_HOME/sublime_text $*
===========================================

vim /usr/share/applications/sublime.desktop
===========================================
[Desktop Entry]
Encoding=UTF-8
Name=Sublime
Comment=Sublime Text Editor
Exec=sublime
Icon=/opt/Sublime_Text_2/Sublime_Text_2.png
Terminal=false
Type=Application
Categories=GNOME;Application;Development;
StartupNotify=true
=========================================

then login out!
[/php]

SubLime Text 2 基本使用

今天使用了下SubLime Text 2 ,顿时就被它吸引了。细节做得都很给力,确实很好!下面是一些基本的记录

兼容VIM模式


  • Preference => Setting – User 点击打开
  • 这时会打开一个叫做Preferences.sublime-settings的JSON文件,这应该就是用户定制的配置文件。在配置文件中添加一条语句 ”ignored_packages”: [],保存即可
  • 这时打开一个文件就可以用VI模式进行编辑了。默认是INSERT MODE,ESC后进入COMMAND MODE,进行各种操作吧。

- 阅读剩余部分 -

Linux内存管理之分页机制

前面一篇文章讲到逻辑地址到线性地址的转换,也就是分段机制的实现.分段机制虽然能够让程序员方便

地管理程序的各个段,并且可以动态调整段的大小,而且对内存的碎片率也大大减小.但是还是没有解决

程序大小比物理内存还大的问题,这时候就出现了分页机制,分页机制的出现最大的体现就是虚拟内存,虚

拟内存的实现可以让大的程序装入内存.分页机制的实现还导致了部分程序装入,按需分配内存,代码共享

等.

- 阅读剩余部分 -

Linux内存管理之分段机制

逻辑地址就是我们普通的段+偏移的表现方式,而线性地址就是段+偏移之后算出来的一个地址,前者可以认

为是二维的地址,而后者可以理解是一维的。线性地址和虚拟地址的概念相接近,不知道其根本的区别。而

物理地址就是实际在地址总线上传输的地址,也就是物理内存访问的真正地址。

如上图,Linux在内存管理上,把逻辑地址通过分段机制变化成线性地址,线性地址也就是4G(32位系统)

的程序地址。线性地址再通过分页机制转化成物理地址,最后CPU去访问物理地址。

- 阅读剩余部分 -

inotifywait实现目录监控

传统的rsync+crontab同步数据和实际会有差异,而inotify则基本可以达到实时的效果,当文件有任何变动,就会触发inotify。
inotify 是一个 Linux 内核特性,它监控文件系统,并且及时向专门的应用程序发出相关的事件警告,比如删除、读、写和卸载操作等。inotify安装完成之后会有两个命令,
inotifywait 和 inotifywatch。inotifywait用于等待文件或者文件集上的一个特定事件,可以监控任何文件或者目录位置,并且可以递归地监控整个目录树;inotifywatch 用于收集被监控的文件系统统计数据,包括每个inotify事件发生多少次等信息。

- 阅读剩余部分 -

LBNAMED--DNS轮询实现负载均衡

传统的DNS轮询主要实现是在DNS服务器上,做一个CNAME,然后把CNAME解析到不同的IP上,这样就

能基本基于DNS的负载均衡,但是一旦有一台分配到的IP挂了,DNS不会管,还是会返回给客户挂的IP,而

且对于流量的分配也不是很智能,上次看到LBNAMED,折腾了几天,但是没能实现我想要的功能。

LBNAMED(Load Balancing Named)按照网上的说法它能智能的进行DNS轮询,对于轮询列表主机的健

康状态检测,以及负载均衡分配都做了。下面主要说下原理,

  1. 客户端要去访问 www.firefoxbug,net,客户端的DNS修改成我们自己的DNS。
  2. 在我们的DNS Server 会把 www.firefoxbug.net CNAME 成 www.best.firefoxbug.net
  3. DNS服务器会把向LBNAMED Server 发出请求查询 www.best.firefoxbug.net的A记录
  4. LBNAMED Server收到请求后会列出本地www.best.firefoxbug.net的服务器池
  5. LBNAMED Server上的poller根据服务器池的健康状况,通过算法返回给DNS服务器一个最优IP
  6. DNS返回给客户端最优的IP

在服务器池列表上安装的主要是lbcd,这个专门用于向lbnamed主机发送健康状态,LBNAMED服务器安装

的是lbnamed(包含poller检测程序)和Stanford-DNSserver(这是一个库)。下面是基本安装过程

[cc lang="c"]
wget http://archives.eyrie.org/software/system/lbcd-3.4.0.tar.gz
tar -zxvf lbcd-3.4.0.tar.gz
cd lbcd-3.4.0
./configure
make;make install
lbcd #start
lbcd -s #stop

wget http://www.stanford.edu/~riepel/lbnamed/Stanford-DNSserver/Stanford-DNSserver.tar.gz
tar -zxvf Stanford-DNSserver.tar.gz
cd Stanford-DNSserver-1.2.0/
perl Makefile.PL
make
make test
make install

wget http://www.stanford.edu/~riepel/lbnamed/lbnamed-2.3.2.tar.gz
tar -zxvf lbnamed-2.3.2.tar.gz
mv lbnamed-2.3.2 /usr/local/lbnamed
cd /usr/local/lbnamed
cp poller /usr/sbin/
[/cc]

在 /usr/local/lbnamed 目录下是主要的配置文件,

lbnamed.conf 是服务器池,lbnamed是主要的配置文件,详细的查看

http://blog.csdn.net/x5yw/article/details/1729101

Nginx 源

rpm -ivh http://nginx.org/packages/centos/5/noarch/RPMS/nginx-release-centos-5-0.el5.ngx.noarch.rpm

yum install nginx

配置文件 /etc/nginx/nginx.conf 和 /etc/nginx/conf.d/ 目录

发布目录 /usr/share/nginx/html/

iftop安装笔记

磊哥推荐了我一款流量带宽推荐的软件,iftop,我用了,还是不错的。下面是安装过程。

yum install flex byacc libpcap ncurses ncurses-devel libpcap-devel

wget http://www.ex-parrot.com/pdw/iftop/download/iftop-1.0pre2.tar.gz
tar -zxvf iftop-1.0pre2.tar.gz
cd iftop-1.0pre2
./configure
make && make install

- 阅读剩余部分 -

linux 守护进程编程

守护进程简介


守护进程,也就是通常说的Daemon进程,是Linux中的后台服务进程。它是一个生存期较长的进程,通常独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。守护进程常常在系统引导装入时启动,在系统关闭时终止。Linux系统有很多守护进程,大多数服务都是通过守护进程实现的,同时,守护进程还能完成许多系统任务,例如,作业规划进程crond、打印进程lqd等(这里的结尾字母d就是Daemon的意思)。
由于在Linux中,每一个系统与用户进行交流的界面称为终端,每一个从此终端开始运行的进程都会依附于这个终端,这个终端就称为这些进程的控制终端,当控制终端被关闭时,相应的进程都会自动关闭。但是守护进程却能够突破这种限制,它从被执行开始运转,直到整个系统关闭时才退出。如果想让某个进程不因为用户或终端或其他地变化而受到影响,那么就必须把这个进程变成一个守护进程。

- 阅读剩余部分 -

bind 服务器搭建

Linux上DNS上服务器只要是BIND,是伯克利大学开发的。下面是主要的安装以及配置,

yum install bind*

bind安装好之后主要的daemon是named,一般情况下会自动安装好bind-chroot,chroot的存在主要就是为了保护系统的安全性,就算bind被黑了,黑客也只能在chroot的目录里面活动,有点vsftpd里的味道,但是不相同。

- 阅读剩余部分 -

linux named pipe(FIFO)

无名管道应用的一个重大限制是它没有名字,因此,只能用于具有亲缘关系的进程间通信,在有名管道(named pipe或FIFO)提出后,该限制得到了克服。FIFO不同于管道之处在于它提供一个路径名与之关联,以FIFO的文件形式存在于文件系统中。这样,即使与FIFO的创建进程不存在亲缘关系的进程,只要可以访问该路径,就能够彼此通过FIFO相互通信(能够访问该路径的进程以及FIFO的创建进程之间),因此,通过FIFO不相关的进程也能交换数据。值得注意的是,FIFO严格遵循先进先出(first in first out),对管道及FIFO的读总是从开始处返回数据,对它们的写则把数据添加到末尾。它们不支持诸如lseek()等文件定位操作。
管道的缓冲区是有限的(管道制存在于内存中,在管道创建时,为缓冲区分配一个页面大小)
管道所传送的是无格式字节流,这就要求管道的读出方和写入方必须事先约定好数据的格式,比如多少字节算作一个消息(或命令、或记录)等等

FIFO往往都是多个写进程,一个读进程。可以参考我之前的博客 http://blog.csdn.net/firefoxbug/article/details/7358715

- 阅读剩余部分 -