Archive for the [Linux] Category

Network Socket (一)

Posted in [Linux], [Programming] on 十二月 26, 2009 by maximliu
socket这个概念学过计算机的都知道,但是到底什么是socket呢? 这个抽象的概念在linux操作系统下面是怎么实现的呢?这篇个系列的短文尝试着
以简单的语言和实例来解释这个重要的概念。
  • 什么是套接字?
    • socket is a standard way to perform network communication through the OS;
    • it is a programmer’s abstraction to take care of details of OSI comm;
    • it sends and receives data;
  • 有几种不同的套接字?
    • steam socket – connection-oriented, reliable (on TCP)
    • datagram socket – connectionless, unreliable (on UDP)
  • 有那些基本的套接字应用函数?(Linux)
    • socket (int domain, int type, int prot)
      • create a socket
      • return a file descriptor
      • domain :  spec. protocol family of socket fd
      • type : spec. types of socket, e.g. datagram, stream data
      • prot : almost always be 0. Selects protocol from family
    • connect (int fd, struct sockadd *remothost, scoklen_t addr_length)
      • connect a socket to to a remote host
    • bind (int fd, struct sockaddr *localadd, socklen_t addr_length)
      • binds a socket to local address
    • listen (int fd, int backlog_queue_size)
      • listens for connection and queue requests into backlog
    • accept (int fd, sockadd *remothost, socklen_t *addr_length)
      • accepts an incoming request
    • send (int fd, void *buffer, size_t n, int flags)
      • sends n data from buffer to socket fd
    • recv (int fd, void *buffer, size_t n, int flags)
      • receive n bytes from socket fd into buffer
Advertisements

初读Linux内核技术手册

Posted in [Linux] on 十月 7, 2007 by maximliu

相对于别的linux大部头来说, 这本OReilly的Linux内核技术手册是短到再不能短了, 但是OReilly继承了一贯的传统 – 短小精悍.  这本书的作者本身是Kernel Hacker in trade. 职业内核黑客, 就象他在书的开端写的一样, 在他看来, 好多东西都是顺理成章的东西, 但是他身边的人总是提醒他, 不是每个人都是内核黑客, 要让更多的人加入到内核开发的行列里面来, 就要让他们从了解内核开始, 要让他们知道, 内核是实实在在的东西, 后面并没有什么魔术.  他的书做到了这一点.

有的人说, 要了解内核, 那你可以去网站看啊, 网络上有很多关于内核的站点.  但是仔细看过这些网站的人很容易就发现, 好多内容都过时的, 而且对内核的描述都不是很完整, 要搜索一点信息可能要阅读好多不同的地方, 每个人描述方法又不一样, 很多时候让人无所适从. 这本技术手册的目的之一就是成为一个one-stop-reference. 囊括所有关于内核调试的信息, 同时不深入探讨内核的代码. 这本书刚看了一半, 觉得以前好多比较模糊的概念变的清晰了,  以前看Robert Love和Bovet的大部头, 觉得只有点没有面.

还没有完全看完,  第一和第二部分是重点, 第三部分是Reference, 可以以后慢慢看.

初读Linux内核技术手册

Posted in [Linux] on 十月 7, 2007 by maximliu

相对于别的linux大部头来说, 这本OReilly的Linux内核技术手册是短到再不能短了, 但是OReilly继承了一贯的传统 – 短小精悍.  这本书的作者本身是Kernel Hacker in trade. 职业内核黑客, 就象他在书的开端写的一样, 在他看来, 好多东西都是顺理成章的东西, 但是他身边的人总是提醒他, 不是每个人都是内核黑客, 要让更多的人加入到内核开发的行列里面来, 就要让他们从了解内核开始, 要让他们知道, 内核是实实在在的东西, 后面并没有什么魔术.  他的书做到了这一点. 

有的人说, 要了解内核, 那你可以去网站看啊, 网络上有很多关于内核的站点.  但是仔细看过这些网站的人很容易就发现, 好多内容都过时的, 而且对内核的描述都不是很完整, 要搜索一点信息可能要阅读好多不同的地方, 每个人描述方法又不一样, 很多时候让人无所适从. 这本技术手册的目的之一就是成为一个one-stop-reference. 囊括所有关于内核调试的信息, 同时不深入探讨内核的代码. 这本书刚看了一半, 觉得以前好多比较模糊的概念变的清晰了,  以前看Robert Love和Bovet的大部头, 觉得只有点没有面. 还没有完全看完,  第一和第二部分是重点, 第三部分是Reference, 可以以后慢慢看. 

其实内核和我现在做的东西没有多大关系, 为什么要花时间去了解它, 我也不知道…

Linux Kernel Hack (2)

Posted in [Linux] on 三月 30, 2007 by maximliu
  • 内核如何和IO设备进行通讯?

内核通过设备驱动和IO进行通讯。 设备驱动程序包括在内核中, 包括数据结构以及控制函数。 每个设备驱动和内核的其余部分通过一个特定的Interface单独进行通讯。

  • 这样的内核结构有什么好处?
    • 设备相关的代码可以被封装在特定的模块中。
    • 设备提供商可以在不熟悉内核代码的情况下开发新的驱动程序, 他们只需要知道Interface的标准。
    • 内核可以通过一个统一的界面和不同设备进行通讯。
    • 这种结构支持驱动程序的动态加载/去除,并且不需要对系统进行重新启动。

dd.jpg

Linux Kernel Hack (1)

Posted in [Linux] on 三月 20, 2007 by maximliu
  • Linux内核和Unix内核有什么区别?
  1. Linux支持动态加载内核模块。
  2. Linux支持SMP机制。传统Unix不支持SMP
  3. Linux内核可以是抢占。(Solaris and IRIX 同样支持Preemptive)
  4. 不区分Thread和Process。
  5. 忽略了Unix中一些不合适的特性。
  6. Linux体现了自由精神。
  • 内核开发的特点。
  1. 内核不能访问C库。libc太大,不适合内核开发。
  2. 内核开发必须使用GNU C。应为:
    • 支持inline 函数
    • 支持在C中嵌入汇编代码
    • 分枝申明用于优化(likely() ,unlikely())
  3. 没有内存保护机制。内核监视用户空间的内存非法访问,并强制结束用户进程,内核本身的内存错误会导致Oops ! Kernel panic
  4. 不轻易使用浮点数。内核对浮点处理不是很完美,(需要人工保存和恢复浮点处理器,很繁琐)栈的容量小而固定。32Bit机器为8K, 64位机器为16K
  5. 内核很容易出现race conditions。
    • 中断为异步的, 不考虑当前正再执行的代码段.
    • Linux内核为Preemptive.
  6. 内核注重可移值性. 代码应该和系统结构无关.

BASH Technics

Posted in [Linux] on 十二月 3, 2005 by maximliu
Using EMACS style of editting command line:

ctrl-a Move cursor to beginning of line
ctrl-e Move cursor to end of line
meta-b Move cursor back one word
meta-f Move cursor forward one word
ctrl-w Cut the last word
ctrl-u Cut everything before the cursor 
ctrl-k Cut everything after the cursor
ctrl-y Paste the last thing to be cut
ctrl-_ Undo

——————————

  •  Flip the Last Two Characters      ctrl+t
  •  Lists Using { and }                     
    $ touch {temp1,temp2,temp3,temp4}
  • reverse
    searching                         
    ctrl+r

安装RedHat ES 3.0 并顺利APT升级 : )

Posted in [Linux] on 七月 18, 2005 by maximliu
前几天重新安装了RedHat Enterprise Sever 3, 个人感觉安装过程比Debian简单, 安装界面非常直观, 几乎没有遇到什么问题就up and running了.  安装完以后一共大约2.5G(包括了源代码).
 
和以前一样, 升级问题一直困扰着我, 每次安装应用程序面对一堆dependency fails真是苦不堪言. RedHat也是够黑的, ES的升级服务竟然要上千美金一年, 难怪出了个CentOS(同样是面对企业级服务器的)和RH对着干.  看来RHN的up2date是没戏了. 于是尝试了原来属于debian的apt.
 
没想到啊没想到, apt用起来这么方便, 对conf文件稍微改变了一下, 直接就可以用了. 顺手升级了perl包和系统的库以及gaim. 下次有空用apt-get安装一个媒体播放器, 如果能刷刷的安装并能应用,那我就彻底服气了. 有机会再试试别的镜像, 原来的那个升级有点慢.
 
下一步:
 
  • 升级kernl, 2.4到2.6;
  • 升级GCC 编译器;
  • 安装mplayer;
  • 配置ipchain, apache;
  • Linux from Scrach Project.

希望各位知道好的升级镜像的朋友给我留个言. 谢谢了! :)