代码改变世界

随笔分类 - Linux操作系统

linux源码分析(五)-start_kernel

2016-10-28 16:45 by 轩脉刃, 1478 阅读, 收藏, 编辑
摘要:前置:这里使用的linux版本是4.8,x86体系。 local_irq_disable(); 这个函数是做了关闭中断操作。和后面的local_irq_enable相对应。说明启动的下面函数是不允许被中断抢占的。这个函数追下去会发现下面的代码: 这个写法是linux的内联汇编写法。在C语言中写汇编语 阅读全文

linux源码分析(四)-start_kernel-cgroup

2016-10-27 10:51 by 轩脉刃, 3941 阅读, 收藏, 编辑
摘要:前置:这里使用的linux版本是4.8,x86体系。 聊这个函数就需要先了解cgroup。 cgroup概念 这个函数就是初始化cgroup所需要的参数的。cgroup最初是在2006年由google的一名工程师提出的,目的是把一些共同目标的进程放在一个组里面,而这个组里面的进程能共享指定数额的资源 阅读全文

linux源码分析(三)-start_kernel

2016-10-26 11:01 by 轩脉刃, 5841 阅读, 收藏, 编辑
摘要:前置:这里使用的linux版本是4.8,x86体系。 start_kernel是过了引导阶段,进入到了内核启动阶段的入口。函数在init/main.c中。 set_task_stack_end_magic(&init_task); 这个函数是设置操作系统的第一个进程init。 这个init_task 阅读全文

linux源码分析(二)-启动过程

2016-10-25 13:01 by 轩脉刃, 3629 阅读, 收藏, 编辑
摘要:前置:这里使用的linux版本是4.8,x86体系。 这篇是 http://home.ustc.edu.cn/~boj/courses/linux_kernel/1_boot.html 的学习笔记。 linux的启动过程有点像是小鱼吃大鱼,最后吃成一个胖子。 计算机中的PC寄存器是用来指示下个执行程 阅读全文

linux源码分析(一)

2016-10-24 10:29 by 轩脉刃, 10761 阅读, 收藏, 编辑
摘要:前置:这里使用的linux版本是4.8,x86体系。 其实linux的内核启动的入口文件还是非常好找的,init/main.c。 static 和 extern 首先理解的是static和extern的区别: 这个代码说的是kernel_init函数的定义在这个文件中,extern说明init_IR 阅读全文

TCP的阻塞和重传机制

2016-07-18 11:48 by 轩脉刃, 9947 阅读, 收藏, 编辑
摘要:TCP的阻塞和重传机制 网络拥堵 现在网络上大部分的网络请求都是以TCP的方式进行传输的了。网络链路是固定的,各种链路情况也是不一样的。网络拥堵一直是TCP协议设计和使用的时候尽力要避免的。比如,从TCP协议的网络包协议设计来看,TCP使用一发一答的ACK的网络包确认方式,而不是使用NAK这种会增加 阅读全文

TCP的定时器

2016-07-11 10:00 by 轩脉刃, 1676 阅读, 收藏, 编辑
摘要:TCP的定时器 在TCP协议中有的时候需要定期或者按照某个算法对某个事件进行触发,那么这个时候,TCP协议是使用定时器进行实现的。在TCP中,会有四种定时器: 重传定时器 坚持定时器 保活定时器 2MSL定时器 这四个定时器都有各自的具体作用。 重传定时器 TCP是可靠的,因此,它对于发出去的信息, 阅读全文

大话keepalive

2016-04-05 10:23 by 轩脉刃, 9967 阅读, 收藏, 编辑
摘要:大话keepalive 我们说到keepalive的时候,需要先明确一点,这个keepalive说的是tcp的还是http的。 tcp的keepalive是侧重在保持客户端和服务端的连接,一方会不定期发送心跳包给另一方,当一方端掉的时候,没有断掉的定时发送几次心跳包,如果间隔发送几次,对方都返回的是 阅读全文

也说说TIME_WAIT状态

2016-03-28 09:46 by 轩脉刃, 14151 阅读, 收藏, 编辑
摘要:也说说TIME_WAIT状态 一个朋友问到,自己用go写了一个简单的HTTP服务端程序,为什么压测的时候服务端会出现一段时间的TIME_WAIT超高的情况,导致压测的效果不好呢? 记得老王有两篇文章专门说这个,当时粗粗看了一遍,正好碰上这个问题,又翻出来细细搂了。 第一个要弄懂的,是TIME_WAI 阅读全文

内存那些事

2015-10-16 12:09 by 轩脉刃, 1521 阅读, 收藏, 编辑
摘要:内存那些事 linux中的free m可以查看当前的内存使用情况 [yejianfeng@iZ23fsd ~]$ free m total used free shared buffers cached Mem: 7869 7737 132 0 489 4419 /+ buffers/... 阅读全文

shell的历史

2015-05-21 12:17 by 轩脉刃, 1738 阅读, 收藏, 编辑
摘要:# shell的历史# shell概况人想要和操作系统进行交互,传送指令给操作系统,就需要使用到shell。宏义的shell是人与机器交互的页面,它分为两种,一种是有界面的,比如GUI,另外一种是没有界面的,完全是指令操作的(CLI)。我们一般说的shell指的就是命令行界面。## Bourne s... 阅读全文

说说常用的服务器操作

2014-07-02 11:14 by 轩脉刃, 1970 阅读, 收藏, 编辑
摘要:想写写自己日常常用的服务器操作,但是想到这个题目还是有点大的。鸟哥两本linux私房菜的书才说完了所有的服务器操作命令,这里一次性列出来也不现实。差不多这里就写写一些比较常用的命令吧。 ps aux|grep XXX 这个是最常用的命令了,查看一个进程的状态啥的。还能看到端口号,运行时间等。如果需要批量关掉这些进程,也可以延生使用管道: ps aux|grep XXX|awk '{pr... 阅读全文

如何添加自定义脚本到开机自启动

2014-06-25 21:19 by 轩脉刃, 5100 阅读, 收藏, 编辑
摘要:我的机器有个coreseek服务,但是没加到开启启动中去,导致机房一旦重启了机器,我的服务便不能使用了。所以我需要把coreseek的searchd加到自启动服务中去。写一个脚本auto_coreseek.sh:#!/bin/sh#chkconfig:2345 80 90#description:a... 阅读全文

你不一定懂的cpu显示信息

2013-10-23 11:48 by 轩脉刃, 47982 阅读, 收藏, 编辑
摘要:在使用top命令的时候会看到这么一行: 里面的各个值分别是什么意思呢? 今天被问到这个问题,发现答的不是很清楚。果然啊,天天用最多的top命令都还没摸透。。。惭愧。。。于是就查了些资料: 官方解释 Cpu(s)表示的是cpu信息。各个值的意思是: us: user cpu time (or) % CPU time spent in user space sy: system cpu... 阅读全文

制作火焰图(纯笔记)

2013-10-17 13:55 by 轩脉刃, 2601 阅读, 收藏, 编辑
摘要:安装systemtap 按照官网说的安装:http://sourceware.org/systemtap/wiki/SystemTapOnCentOS 我的操作系统是centos uname -rm: 2.6.18-164.el5xen x86_64 yum install systemtap wget http://debuginfo.centos.org/5/x86_64/kern... 阅读全文

《精通Linux内核必会的75个绝技》知识杂记

2013-10-16 18:17 by 轩脉刃, 1293 阅读, 收藏, 编辑
摘要:http://www.ibm.com/developerworks/cn/linux/l-cn-utrace/ utrace是为运行态的进程提供trace和debug支持。 utrace能做如下事情: 1 跟踪目标进程的各种事件 2 Debugger能控制调试程序,让目标暂停或者单步执行 3 对目标进程地址空间的访问能力 可以使用nuttcp来确认两机之间的吞吐量 在一台机器上使用n... 阅读全文

lnmp_auto:自动化安装lnmp环境脚本

2013-10-12 09:38 by 轩脉刃, 1684 阅读, 收藏, 编辑
摘要:朋友找我在一台机器上帮忙安装下discuz。想着搭建过好几次的lnmp了,但是还没有使用过“一键安装”的自动化脚本,去网上有搜索出来,但是运行的时候发现用root运行别人的脚本还是真危险的事情,于是明白这不是个轮子,而是个井,每个程序员有必要自己挖一口的了。所以想着自己写个自动化安装lnmp的脚本lnmp_auto。 源代码在github上:https://github.com/jianfeng... 阅读全文

希望早几年知道的5个Unix命令

2013-09-17 08:20 by 轩脉刃, 2298 阅读, 收藏, 编辑
摘要:原文: http://spin.atomicobject.com/2013/09/09/5-unix-commands/ 希望早几年知道的5个Unix命令 使用*nix系统已经有一段时间了。但是还是有一些命令是被我一直忽略的,现在我希望我能早几年发现这些命令。 1 man ascii 这个命令会打印出八进制,十六进制和十进制的ascii码表。难以置信我是一个月之前才知道这个命令的。我总是... 阅读全文

Linux内核知识

2013-09-05 09:04 by 轩脉刃, 2965 阅读, 收藏, 编辑
摘要:版本 linus树 Linux内核最初创始人--Linus Torvalds管理一个Linus树,linus树也称为主线(mainline)。一般指的upstream,“上游”,也指这个linus树或者各种开发树。 linus树是以2.6.x这样的三个数字来表示。比如Linux 2.6.18-164.el5xen 的linus树中的内核版本就是2.6.18 stable树 这个是针对某个... 阅读全文

Linux的Cgroup

2013-09-03 13:45 by 轩脉刃, 32895 阅读, 收藏, 编辑
摘要:为什么要有cgroup Linux系统中经常有个需求就是希望能限制某个或者某些进程的分配资源。也就是能完成一组容器的概念,在这个容器中,有分配好的特定比例的cpu时间,IO时间,可用内存大小等。于是就出现了cgroup的概念,cgroup就是controller group,最初由google的工程师提出,后来被整合进Linux内核中。 Cgroup是将任意进程进行分组化管理的Linux内核功... 阅读全文

SystemTap知识(二)

2013-09-01 11:30 by 轩脉刃, 1629 阅读, 收藏, 编辑
摘要:Unbuntu安装systemtap:http://www.cnblogs.com/hdflzh/archive/2012/07/25/2608910.html1 更新源到http://mirror.ubuntu9.com/topmirror/sourceslist/all/54772423e19231bbb722a69fd878df28.list2 apt-get install systemtap3 apt-get install systemtap-sdt-dev4$ cd $HOME$ sudo apt-get install dpkg-dev debhelper gawkapt-ge 阅读全文

Linux Shell参数替换

2013-06-03 10:01 by 轩脉刃, 4217 阅读, 收藏, 编辑
摘要:Bash中的$符号的作用是参数替换,将参数名替换为参数所代表的值。对于$来说,大括号是可选的,即$A和${A}代表同一个参数。 ${}带冒号的有下面几种表达式: ${parameter:-word} 如果parameter为null或者未设置,整个参数替换表达式值为word ${parameter:=word} 如果parameter为null或者未设置,整个参数替换表达式值为word,... 阅读全文

系统知识点笔记

2013-03-21 22:26 by 轩脉刃, 688 阅读, 收藏, 编辑
摘要:shell脚本出现问题:unexpected end of file这个是windows下的shell的结束符在linux下标示失败的问题可以在linux下vim打开:set fileformat=unix系统seq的-f用法:seq -f '201303%02g.mp4' 1 31|xargs -i cp 20130101.mp5 {}shell使用mail命令发邮件echo "hell2o" | mail -s "testtitle" jianfengye110@gmail.com读取脚本的绝对路径:readlink -f &quot 阅读全文

系统知识点

2013-02-17 17:41 by 轩脉刃, 1208 阅读, 收藏, 编辑
摘要:如何连号输出 seq 1 0 | xargs -i echo a_{} 查看两个文件夹的不同 diff -Naur test test2 输出到每天不同的日志文件 /usr/local/bin/php /home/q/system/test/api/bootstrap/index.php -m msg.clearMsg -t shell >> /home/yejianfeng/clea... 阅读全文

在darwin上使用基于SecurID的Cisco VPN

2013-02-04 12:36 by 轩脉刃, 1487 阅读, 收藏, 编辑
摘要:借鉴了@jqlblue的这篇 http://blog.sina.com.cn/s/blog_4c6b0c8e01017dev.html 步骤: 1 (如果已经知道组密码了,就直接忽略) 假设你在windows上已经登录过 进入路径如:C:\Program Files\Cisco Systems\VPN Client\Profiles 打开这个文件夹下的文件会看到诸如 enc_Grou... 阅读全文

GCC知识

2013-01-17 09:41 by 轩脉刃, 2121 阅读, 收藏, 编辑
摘要:像C语言这样的静态语言,运行的步骤是先将C经过编译器转化成汇编语言,汇编语言再经过汇编器转化成机器语言模块,然后链接器将程序的机器语言模块和库程序的机器语言模块和起来,生成可执行文件,最后再由加载器加载这个可执行文件,产生输入输出。 在这个环节中,gcc就是扮演着编译器的角色。gcc原本只能编译C语言,但是后来,经过扩展之后也能处理JAVA/OC等语言了。GCC现在已经成为类Unix操作系... 阅读全文

从文件视角看mysql

2012-12-11 18:37 by 轩脉刃, 2875 阅读, 收藏, 编辑
摘要:这里的几个rpm意义分别是:(http://docs.oracle.com/cd/E17952_01/refman-5.0-en/linux-installation-rpm.html) MySQL-client:包含最少的访问mysql服务器所需要的客户端命令。里面包含的是像mysql,mysqladmin这样的工具。 MySQL-devel:包含开发mysql客户端所需要的库。里面没有... 阅读全文

NUMA的取舍

2012-12-10 18:30 by 轩脉刃, 15220 阅读, 收藏, 编辑
摘要:现在的机器上都是有多个CPU和多个内存块的。以前我们都是将内存块看成是一大块内存,所有CPU到这个共享内存的访问消息是一样的。这就是之前普遍使用的SMP模型。但是随着处理器的增加,共享内存可能会导致内存访问冲突越来越厉害,且如果内存访问达到瓶颈的时候,性能就不能随之增加。NUMA(Non-Uniform Memory Access)就是这样的环境下引入的一个模型。比如一台机器是有2个处理器,有4个... 阅读全文

架构整洁之道

2012-09-10 10:00 by 轩脉刃, 7526 阅读, 收藏, 编辑
摘要:这篇文章是翻译(Uncle Bob Martin)的文章。原文在这:http://blog.8thlight.com/uncle-bob/2012/08/13/the-clean-architecture.html。这篇文章作者尝试使用简单的观点将各种架构的共通之处和最终目标说清楚。全文要说清楚的就是一件事“如何写出整洁的架构”。作者希望在架构系统的时候只需要秉持最简单的两个观点(分层和依赖规则)开发,就能开发出干净整洁的系统架构。 以下是译文 过去几年间有许多关于系统架构的观点。比如: 1 六角架构(Hexagonal Architecture )。 这种架构是由Alistai... 阅读全文

Linux IO模型漫谈(6)- 信号驱动IO模型

2012-06-11 22:10 by 轩脉刃, 5265 阅读, 收藏, 编辑
摘要:Unix上有定义了许多信号。源自Berkeley的实现使用的是SIGIO信号来支持套接字和终端设备上的信号驱动IO。 信号驱动IO模型主要是在UDP套接字上使用,在TCP套接字上几乎是没有什么使用的... 阅读全文

nginx源码学习Unix - Unix域协议

2012-06-08 10:53 by 轩脉刃, 2413 阅读, 收藏, 编辑
摘要:说到什么是域协议就会出现这么个解释: UNIX域协议并不是一个实际的协议族,而是在单个主机上执行客户/服务器通信的一种方法,所用API与在不同主机上执行客户/服务器通信所使用的API相同。UNIX域协议可以视为IPC方法之一。 我们白话解释下Unix域协议在什么情况下使用和怎么使用? Unix域协议主要用在同一台机子的不同进程之间传递套接字。为什么不用TCP或者U... 阅读全文

Linux IO模型漫谈(5)- IO复用模型之select

2012-06-07 09:05 by 轩脉刃, 5361 阅读, 收藏, 编辑
摘要:首先需要了解的是select函数: select函数 #include<sys/select.h> #include<sys/time.h> int select (int maxfd , f... 阅读全文

Linux IO模型漫谈(4)- 非阻塞IO

2012-06-05 09:03 by 轩脉刃, 3916 阅读, 收藏, 编辑
摘要:首先先说一下,阻塞IO会在哪些地方阻塞住呢?输入操作read, 输出操作write,接受请求操作accept,发送请求操作connect,这四个地方阻塞进程。 非阻塞IO的模型图示在前面的章节有讲过,它和阻塞IO的最大区别就是:如果连接或者操作不能立即建立,那么连接的建立照样能发起,只是会返回一个错误信息。 同样,先说明几个用到的函数和操作: 1 fcntl函数 其全名为”file control“。顾名思义,fcntl可以执行各种操作符控制操作。#include <fcntl.h>int fcntl(int fd, int cmd, .. /* int arg */)第一个参数f 阅读全文

Linux IO模型漫谈(3) -- 阻塞式IO实现

2012-06-04 09:48 by 轩脉刃, 1982 阅读, 收藏, 编辑
摘要:在理解代码前有几个函数先说一下: 1 sockaddr_in 套接字地址结构 struct sockaddr_in { uint8_t sin_len; //长度字段,这个sockaddr_in结构的长度,一般不用设置和检查它 sa_family_t sin_family; //协议族,TCP,UDP等协议族就设置为AF_INET... 阅读全文

服务器性能查看常用命令

2012-06-01 06:35 by 轩脉刃, 20588 阅读, 收藏, 编辑
摘要:最近在调试程序的时候经常需要查看服务器的性能问题。那么到底是需要查看服务器的哪些性能呢,如何查看性能呢?下面主要就说一下一些查看服务器性能的命令。 注:由于参数过多,我只列出了几个常观察的参数,更多的参数说明有附带链接作为参考 free –m 查看内存使用情况 这个命令比较简单,-m 代表下面的是以M为单位 Mem是表示物理内存,主要看 Mem free代表还有多少内存可以 说一下第二行的 -/+ buffers/cache: used = 第一行的used - buffers - cached (表示实际使用的内存总数) free = 第一行的free + buffer... 阅读全文