-
kernel学习之内存管理简介
所属栏目:[Unix] 日期:2016-09-26 热度:142
内存是linux内核所管理的最重要的资源之一,内存管理子系统是操作系统中最重要的部分之一。对于立志从事内核开发的工程师来说,熟悉linux的内存管理系统是非常重要的。早些年的DOS是直接访问内存的,这样不同的应用程序很容易让系统死机。在现在的linux系[详细]
-
kernel学习之进程调度器简介
所属栏目:[Unix] 日期:2016-09-26 热度:136
副标题#e# 多任务操作系统可分为非抢占式多任务和抢占式多任务。和大多数现代操作系统一样,linux也采用了抢占式多任务模式。这也就是说任务占用cpu的时间由调度器来决定。 调度策略: 决定在什么时候用怎样的方式选择一个新的进程在哪个cpu上运行多长时间[详细]
-
UNIX网络编程:如何产生RST
所属栏目:[Unix] 日期:2016-09-26 热度:136
产生RST的3个条件: 1. 建立连接的SYN到达某端口,但是该端口上没有正在监听的服务。 如:IP为192.168.1.33的主机上并没有开启WEB服务(端口号为0x50),这时我们通过IE去访问192.168.1.33,通过Wireshark抓包,可以看到,对此SYN包的回复为RST。说明此服[详细]
-
UNIX网络编程:fcntl函数
所属栏目:[Unix] 日期:2016-09-26 热度:191
副标题#e# fcntl函数提供了与网络编程相关的如下特性: 非阻塞式I/O。 通过使用F_SETFL命令设置O_NONBLOCK文件状态标志,我们可以把一个套接字设置为非阻塞型。 信号驱动式I/O。 通过使用F_SETFL命令设置O_ASYNC文件状态标志,我们可以把一个套接字设置成O_[详细]
-
UNIX网络编程:常用的套接字选项
所属栏目:[Unix] 日期:2016-09-26 热度:176
1.设置/获取套接字选项 int setsockopt(int socket, int level, int option_name, const void *option_value, socklen_t option_len); int getsockopt(int socket, int level, int option_name, void *restrict option_value, socklen_t *restrict option_[详细]
-
UNIX网络编程:套接字选项(SOL_SOCKET级别)
所属栏目:[Unix] 日期:2016-09-26 热度:156
#include sys/socket.h int setsockopt( int socket, int level, int option_name,const void *option_value, size_t option_len); 第一个参数socket是套接字描述符。 第二个参数level是被设置的选项的级别,如果想要在套接字级别上设置选项,就必须把leve[详细]
-
UNIX网络编程:套接字选项(setsockopt)
所属栏目:[Unix] 日期:2016-09-26 热度:188
setsockopt的一些用法: close socket(一般不会立即关闭而经历TIME_WAIT的过程)后想继续重用该socket: BOOL bReuseaddr=TRUE; setsockopt(s,SOL_SOCKET ,SO_REUSEADDR,(const char*)bReuseaddr,sizeof(BOOL)); 如果要已经处于连接状态的soket在调用clos[详细]
-
UNIX网络编程:如何处理服务器中大量的TIME_WAIT
所属栏目:[Unix] 日期:2016-09-26 热度:138
出现条件: 服务器主动关闭 短连接服务加剧 根据TCP协议定义的3次握手断开连接规定,发起socket主动关闭的一方 socket将进入TIME_WAIT状态,TIME_WAIT状态将持续2个MSL(Max Segment Lifetime),TIME_WAIT状态下的socket不能被回收使用。 具体现象是对于一个[详细]
-
UNIX网络编程:套接字选项(心跳检测、绑定地址复用)
所属栏目:[Unix] 日期:2016-09-26 热度:145
01./* 设置套接字选项周期性消息检测连通性 心跳包、 心博。主要用于长连接。 02. * 参数:套接字, 1或0开启, 首次间隔时间, 两次间隔时间, 断开次数 03. */ 04.void setKeepAlive( int iSockfd , int iSockAttrOn, socklen_t iIdleTime , socklen_t iInt[详细]
-
UNIX网络编程:套接字选项(SO_REUSEADDR)
所属栏目:[Unix] 日期:2016-09-26 热度:90
1、一般来说,一个端口释放后会等待两分钟之后才能再被使用,SO_REUSEADDR是让端口释放后立即就可以被再次使用。 SO_REUSEADDR用于对TCP套接字处于TIME_WAIT状态下的socket,才可以重复绑定使用。server程序总是应该在调用bind()之前设置SO_REUSEADDR套接[详细]
-
UNIX网络编程:套接字选项(SO_RCVBUF和SO_SNDBUF)
所属栏目:[Unix] 日期:2016-09-26 热度:59
有时候我们需要控制套接字的行为(如修改缓冲区的大小),这个时候我们就要学习套接字选项。 int getsockopt(int sockfd,int level,int optname,void *optval,socklen_t *optlen) int setsockopt(int sockfd,int level,int optname,const void *optval,sockle[详细]
-
UNIX网络编程:shutdown与close函数的区别
所属栏目:[Unix] 日期:2016-09-26 热度:61
假设server和client 已经建立了连接,server调用了close, 发送FIN 段给client(其实不一定会发送FIN段,后面再说),此时server不能再通过socket发送和接收数据,此时client调用read,如果接收到FIN 段会返回0,但client此时还是可以write 给server的,wri[详细]
-
UNIX网络编程:僵尸进程
所属栏目:[Unix] 日期:2016-09-26 热度:142
在fork()/exec()过程中,假设子进程结束时父进程仍存在,而父进程fork()之前既没安装SIGCHLD信号处理函数调用waitpid()等待子进程结束,又没有显式忽略该信号,则子进程成为僵尸进程,无法正常结束,此时即使是root身份kill -9也不能杀死僵尸进程。补救办[详细]
-
UNIX网络编程:I/O复用:select和poll函数
所属栏目:[Unix] 日期:2016-09-26 热度:97
副标题#e# 我们看到TCP客户同时处理两个输入:标准输入和TCP套接字。我们遇到的问题是就在客户阻塞于(标准输入上)fgets调用,服务器进程会被杀死。服务器TCP虽然正确的给客户TCP发送了一个FIN,但是既然客户进程正阻塞于从标准输入读入的过程,它将看不到[详细]
-
UNIX网络编程:TCP回射服务器/客户端程序
所属栏目:[Unix] 日期:2016-09-26 热度:132
副标题#e# 下面通过最简单的客户端/服务器程序的实例来学习socket API。 serv.c 程序的功能是从客户端读取字符然后直接回射回去: #includestdio.h #includesys/types.h #includesys/socket.h #includeunistd.h #includestdlib.h #includeerrno.h #includea[详细]
-
UNIX网络编程:getsockname和getpeername函数
所属栏目:[Unix] 日期:2016-09-26 热度:107
副标题#e# 这两个函数或者返回与某个套接字关联的本地协议地址(getsockname),或者返回与某个套接字关联的外地协议地址即得到对方的地址(getpeername)。 #include sys/socket.h int getsockname(int sockfd,struct sockaddr* localaddr,socklen_t *addr[详细]
-
UNIX网络编程:并发服务器(TCP)
所属栏目:[Unix] 日期:2016-09-26 热度:158
副标题#e# 在迭代服务器中,服务器只能处理一个客户端的请求,如何同时服务多个客户端呢?在未讲到select/poll/epoll等高级IO之前,比较老土的办法是使用fork来实现。 网络服务器通常用fork来同时服务多个客户端,父进程专门负责监听端口,每次accept一个新[详细]
-
UNIX网络编程:基本TCP套接字编程
所属栏目:[Unix] 日期:2016-09-26 热度:172
副标题#e# 一、基于TCP协议的网络程序 下图是基于TCP协议的客户端/服务器程序的一般流程: 服务器调用socket()、bind()、listen()完成初始化后,调用accept()阻塞等待,处于监听端口的状态,客户端调用socket()初始化后,调用connect()发出SYN段并阻塞等待[详细]
-
UNIX网络编程:TCP输出及UDP输出
所属栏目:[Unix] 日期:2016-09-25 热度:114
TCP输出 每一个TCP套接字有一个发送缓冲区,我们可以使用SO_SNDBUF套接字选项来更改该缓冲区的大[详细]
-
UNIX网络编程:网络数据包检测
所属栏目:[Unix] 日期:2016-09-25 热度:144
副标题#e# 网络数据包检测 数据包捕获(sniffer):是指在网络上进行数据收集的行为,需要通过网卡来完成。 三种访问方式: BSD Packet Filter(BPF) SVR4 Datalink Provider Interface(DLPI) linux SOCK_PACKET interface libpcap库 安装: apt-get install[详细]
-
AIX/LINUX系统中如何查看单个进程在os层面的内存消耗
所属栏目:[Unix] 日期:2016-09-25 热度:118
--如何查看单个进程在os层面的内存消耗 AIX: $ svmon -Pt10 | perl -e 'while(){print if($.==2||$!$s++);$.=0 if(/^-+$/)}' ---- -用这个可以看最大的占用内存的10个进程 ----------------------------------------------------------------------------[详细]
-
如何查看AIX和HP-UX文件系统类型
所属栏目:[Unix] 日期:2016-09-25 热度:176
副标题#e# AIX # uname whoami AIX root # df -g Filesystem GB blocks Free %Used Iused %Iused Mounted on /dev/hd4 2.25 0.14 94% 9425 22% / /dev/hd2 4.62 0.11 98% 89988 75% /usr /dev/hd9var 2.00 1.40 31% 5038 2% /var /dev/hd3 4.00 1.43 65% 10[详细]
-
如何在磁带上备份和恢复AIX系统
所属栏目:[Unix] 日期:2016-09-25 热度:132
备份和恢复是系统管理员经常要做的事情, 主要包括rootvg备份和用户数据备份. 1. 操作系统和系统程序的备份: 将一盘新磁带或无用磁带插入磁带机 #tctl -f /dev/rmt0 rewind #smit mksysb 在备份设备或文件中添入/dev/rmt0后回车. 系统会运行很长时间, 等到[详细]
-
Unix系统vmstat命令详解
所属栏目:[Unix] 日期:2016-09-25 热度:120
副标题#e# Virtual Memory Statistics ( vmstat ) 是报告关于进程,虚拟内存,磁盘,CPU活动的一个统计报告。 在一个多CPU系统中,vmstat统计所有个数的CPU的平均输出。为每个进程进行统计。没有参数时,vmstat显示每一行是自从系统启动以后的虚拟内存的[详细]
-
kernel学习之调度器发展史
所属栏目:[Unix] 日期:2016-09-10 热度:199
调度器的主要工作是在所有 RUNNING 进程中选择最合适的一个。作为一个通用操作系统,Linux 调度器将进程分为了三类: 交互进程:此类进程有大量的人机交互,因[详细]

浙公网安备 33038102330477号