此文于2010-02-26被推荐到CSDN首页
如何被推荐?
最近在研究 Linux
内核的时间子系统,为下一篇长文《服务器程序中的日期与时间》做准备,无意中注意到了 Linux
新增的几个系统调用的对编写服务器代码的影响,先大致记录在这里。这篇博客也可算作前一篇《多线
程服务器的常用编程模型》
的一个注脚。
< type="text/javascript">
1. 服务器程序的风格可能在变
新的创建文件描述符的
syscall 一般都支持额外的 flags 参数,可以直接指定 O_NONBLOCK 和 FD_CLOEXEC,例如:
accept4 – 2.6.28
eventfd2 – 2.6.27
inotify_init1
– 2.6.27
pipe2 – 2.6.27
signalfd4 – 2.6.27
timerfd_create 2.6.25
以上 6 个
syscalls,除了最后一个是新功能,其余的都是增强原有的调用,把数字尾号去掉就是原来的 syscall。
O_NONBLOCK
的功能是开启“非阻塞IO”,而文件描述符默认是阻塞的。
这些创建文件描述符的系统调用能直接设定 O_NONBLOCK
选项,或许能反映当前 Linux (服务端)开发的风向,那就是我在前一篇博客《多线
程服务器的常用编程模型》
里推荐的 one loop per thread + (non-blocking IO wit ......
学校服务器的一个windows虚拟机开启了Desktop共享,这样可以在配置不高的终端使用高性能的机器,除了windows客户端访问外,在Ubuntu里可以通过自带的 rdesktop访问,该程序为命令行形式。参数较多,比较有用的是提供远程与本地交互的-r参数。
如:
rdesktop -r disk:floppy=/home/xiajing/t 192.168.111.111 ......
先用who命令查看所有登陆终端
#who -uH
输出如下:
NAME LINE TIME IDLE PID COMMENT
root :0 2010-03-01 19:13 ? 2436
root pts/0 2010-03-01 19:13 06:44 2851 (:0)
root pts/1 2010-03-02 00:52 00:03 29584 (:0)
root pts/2 2010-03-02 01:26 00:19 23321 (:0)
root pts/3 2010-03-02 01:42 . 26511 (192.168.79.1)
然后给最后一个用户发送消息:
#write root pts/3
输出错误如下:
write: you have write permission turned off
解决方案输入命令:
#mesg y
然后重新输入:
#write root pts/3
就可以发消息了。
......
什么是USB?
USB是英文Universal Serial Bus的缩写,意为通用串行总线。USB最初是为了替代许多不同的低速总线(包括并行、串行和键盘连接)而设计的,它以单一类型的总线连接各种不同的类型的设备。USB的发展已经超越了这些低速的连接方式,它现在可以支持几乎所有可以连接到PC上的设备。最新的USB规范修订了理论上高达480Mbps的高速连接。Linux内核支持两种主要类型的USB驱动程序:宿主系统上的驱动程序和设备上的驱动程序,从宿主的观点来看(一个普通的宿主也就是一个PC机),宿主系统的USB设备驱动程序控制插入其中的USB设备,而USB设备的驱动程序控制该设备如何作为一个USB设备和主机通信。
USB的具体构成
在动手写USB驱动程序这前,让我们先看看写的USB驱动程序在内核中的结构,如下图:
USB驱动程序存在于不同的内核子系统和USB硬件控制器之间,USB核心为USB驱动程序提供了一个用于访问和控制USB硬件的接口,而不必考虑系统当前存在的各种不同类型的USB硬件控制器。USB是一个非常复杂的设备,linux内核为我们提供了一个称为USB的核心的子系统来处理大部分的复杂性,USB设备包括配置(configuration)、接口(interface)和端点(endpoint),USB设备绑定到接口上,而不 ......
-----------------------------
Based on Fedora 8 version:
-----------------------------
1. No common command like ifconfig in os?
Root cause is the standard search path not include /sbin and /usr/sbin. Try to include them in /etc/profile. As belows:
#Kenny add /sbin and /usr/sbin here.
export PATH=.:/sbin:/usr/sbin:$PATH
2. install package in Fedora?
yum install "package name"
yum upgrade "package name"
rpm -qa | grep “samba”
3. install samba ui config program?
a. yum install system-config-samba.
b. set samba service is trusted services in firewall.
c. set samba_enable_home_dirs and samba_export_all_ro in SELinux configure option.
4. VMware host connect with target, without network line.
a. set vmvare network connect mode to NAT in right-bottom network icon, default is bridged mode;
b. in host machine, try (cmd -> ipconfig /all). Check VMNET8's IP ad ......
对于这个函数,其实是很多宏定义调用的函数,其中alloc_bootmem_low_pages(x)是其中一个调用它的宏,大家可以认为这些宏只是把这个__alloc_bootmem实质性的函数进行了封装。#define alloc_bootmem_low_pages(x)相当于__alloc_bootmem((x), PAGE_SIZE, 0),就是从0地址开始的低端内存分配按页大小对齐的内存。好了,为了了解这个函数是怎么运行的,我们就从它的源头开始讲起吧。
我们回到paging_init()这个函数,在上诉的文章的bootmem_init()函数返回之后,就接着回到paging_init()。
memcpy(&meminfo, mi, sizeof(meminfo));//这里起到更新的作用。
/*
* allocate the zero page. Note that we count on this going ok.
*/
zero_page = alloc_bootmem_low_pages(PAGE_SIZE);//从0地址低端内存开始分配1页空闲内存,将该页的页帧位码表置1,并将这也得得内容全部清0.我们还是仔细点来分析这段代码吧。
void * __init __alloc_bootmem (unsigned long size, unsigned long align, unsigned long goal)//size是申请的内存大小,align是决定的起始地址开始的内存对齐方式,goal是分配内存的起始地址,如果不 ......