Linux-系统技术
renwotao2009
努力程度之低,离拼天赋还远的很
展开
-
分析Linux内核创建一个新进程的过程
进程描述进程描述符(task_struct)用来描述进程的数据结构,可以理解为进程的属性。比如进程的状态、进程的标识(PID)等,都被封装在了进程描述符这个数据结构中,该数据结构被定义为task_struct进程控制块(PCB)是操作系统核心中一种数据结构,主要表示进程状态。进程状态forkfork()在父、子进程各返回一次。在父进程中返回子进程的 pid,在子进程中返回0。fork一个子进转载 2016-05-21 21:26:52 · 603 阅读 · 0 评论 -
Linux的进程间通信-消息队列
前言Linux系统给我们提供了一种可以发送格式化数据流的通信手段,这就是消息队列。使用消息队列无疑在某些场景的应用下可以大大减少工作量,相同的工作如果使用共享内存,除了需要自己手工构造一个可能不够高效的队列外,我们还要自己处理竞争条件和临界区代码。而内核给我们提供的消息队列,无疑大大方便了我们的工作。Linux环境提供了XSI和POSIX两套消息队列,本文将帮助您掌握以下内容:如何使用XSI消息队转载 2016-09-30 11:26:21 · 1405 阅读 · 0 评论 -
Linux的进程间通信-信号量
前言信号量又叫信号灯,也有人把它叫做信号集,本文遵循《UNIX环境高级编程》的叫法,仍称其为信号量。它的英文是semaphores,本意是“旗语”“信号”的意思。由于其叫法中包含“信号”这个关键字,所以容易跟另一个信号signal搞混。在这里首先强调一下,Linux系统中的semaphore信号量和signal信号是完全不同的两个概念。我们将在其它文章中详细讲解信号signal。本文可以帮你学会:转载 2016-08-31 13:04:22 · 937 阅读 · 0 评论 -
Linux的write调用
linux的write调用const char *buf = "My ship is solid";ssize_t nr;/* write the string in 'buf' to 'fd' */nr = write(fd, buf, strlen(buf));if (nr == -1) /* error */当write()调用返回时,内核已经把数据从提供的缓冲区拷贝到内核缓冲原创 2016-08-09 09:27:03 · 3071 阅读 · 0 评论 -
Linux进程间通信-共享内存
前言本文主要说明在Linux环境上如何使用共享内存。阅读本文可以帮你解决以下问题:什么是共享内存和为什么要有共享内存? 如何使用mmap进行共享内存? 如何使用XSI共享内存? 如何使用POSIX共享内存?如何使用hugepage共享内存以及共享内存的相关限制如何配置? 共享内存都是如何实现的?使用文件或管道进行进程间通信会有很多局限性,比如效率问题以及数据处理使用文件描述符而不如内存转载 2016-08-08 11:45:50 · 1771 阅读 · 0 评论 -
Linux的进程间通信-文件和文件锁
前言使用文件进行进程间通信应该是最先学会的一种IPC方式。任何编程语言中,文件IO都是很重要的知识,所以使用文件进行进程间通信就成了很自然被学会的一种手段。考虑到系统对文件本身存在缓存机制,使用文件进行IPC的效率在某些多读少写的情况下并不低下。但是大家似乎经常忘记IPC的机制可以包括“文件”这一选项。我们首先引入文件进行IPC,试图先使用文件进行通信引入一个竞争条件的概念,然后使用文件锁解决这个问转载 2016-08-03 08:46:22 · 3050 阅读 · 0 评论 -
Linux的进程优先级
Linux的进程优先级为什么要有进程优先级?这似乎不用过多的解释,毕竟自从多任务操作系统诞生以来,进程执行占用cpu的能力就是一个必须要可以人为控制的事情。因为有的进程相对重要,而有的进程则没那么重要。进程优先级起作用的方式从发明以来基本没有什么变化,无论是只有一个cpu的时代,还是多核cpu时代,都是通过控制进程占用cpu时间的长短来实现的。就是说在同一个调度周期中,优先级高的进程占用的时间长些,转载 2016-07-22 10:20:43 · 4559 阅读 · 0 评论 -
Linux的IO调度
前言IO调度发生在Linux内核的IO调度层。这个层次是针对Linux的整体IO层次体系来说的。从read()或者write()系统调用的角度来说,Linux整体IO体系可以分为七层,它们分别是:VFS层:虚拟文件系统层。由于内核要跟多种文件系统打交道,而每一种文件系统所实现的数据结构和相关方法都可能不尽相同,所以,内核抽象了这一层,专门用来适配各种文件系统,并对外提供统一操作接口。文件系统层:转载 2016-07-21 21:32:34 · 1794 阅读 · 0 评论 -
Linux内存中的Cache真的能被回收么?
在Linux系统中,我们经常用free命令来查看系统内存的使用状态。在一个RHEL6的系统上,free命令的显示内容大概是这样一个状态:[root@tencent64 ~]# free total used free shared buffers cachedMem: 132256952 72571772 59转载 2016-07-21 10:54:41 · 935 阅读 · 0 评论 -
Linux的内存回收和交换
前言Linux的swap相关部分代码从2.6早期版本到现在的4.6版本在细节之处已经有不少变化。本文讨论的swap基于Linux 4.4内核代码。Linux内存管理是一套非常复杂的系统,而swap只是其中一个很小的处理逻辑。希望本文能让读者了解Linux对swap的使用大概是什么样子。阅读完本文,应该可以帮你解决以下问题:swap到底是干嘛的? swappiness到底是用来调节什么的?‘’什转载 2016-07-21 09:59:27 · 3725 阅读 · 0 评论 -
Linux的进程间通信 - 管道
前言管道是UNIX环境中历史最悠久的进程间通信方式。本文主要说明在Linux环境上如何使用管道。阅读本文可以帮你解决以下问题:什么是管道和为什么要有管道?管道怎么分类?管道的实现是什么样的?管道有多大?管道的大小是不是可以调整?如何调整?什么是管道?管道,英文为pipe。这是一个我们在学习Linux命令行的时候就会引入的一个很重要的概念。它的发明人是道格拉斯.麦克罗伊,这位也是UNIX上转载 2016-07-20 17:51:52 · 684 阅读 · 0 评论 -
linux中的link,unlink,open,close
每一个文件都有一个struct stat的机构体来获得文件信息,其中成员st_nlink代表文件的链接数。 当创建一个文件时,文件的链接数为1。通常open()一个已经存在的文件不会影响文件的链接数。open的作用只是使调用进程与文件之间建立一种访问关系,即open之后返回fd,调用进程可以通过fd来read、write、ftruncate等一系列对文件的操作。close() 就是消除这种调用进程原创 2015-06-08 22:34:31 · 1373 阅读 · 0 评论 -
Linux内存寻址之分段机制
前言最近在学习Linux内核,读到《深入理解Linux内核》的内存寻址一章。原本以为自己对分段分页机制已经理解了,结果发现其实是一知半解。于是,查找了很多资料,最终理顺了内存寻址的知识。现在把我的理解记录下来,希望对内核学习者有一定帮助,也希望大家指出错误之处。分段到底是怎么回事相信学过操作系统课程的人都知道分段分页,但是奇怪的是书上基本没提分段分页是怎么产生的,这就导致我们知其然不知其所以然。下面转载 2016-07-30 10:30:01 · 765 阅读 · 0 评论 -
Linux可执行文件的启动及命令行参数和环境变量的传递
问题的由来我们知道,普通的C程序可以从命令行上接收参数,也可以使用、设置SEHLL环境变量(getenv,setenv)。/*一个简单的C例子 test.c*/ #include "stdio.h" extern char** environ; /*C库定义的全局变量,环境变量字符串数组的起始地址*/ int main(int argc, char* argv[]) { int转载 2016-07-12 20:32:28 · 13676 阅读 · 0 评论 -
Linux中的likely()和unlikely()
likely()与unlikely()在2.6内核中,随处可见,那为什么要用它们?它们之间有什么区别呢? 首先明确: if (likely(value))等价于if (value) if (unlikely(value))等价于if (value)也就是说likely()和unlikely()从阅读和理解的角度是一样的。 这两个宏在内核中定义如下:#define likely(x) __转载 2015-11-04 10:24:16 · 641 阅读 · 0 评论 -
Linux IO模式及 select、poll、epoll详解
注:本文是对众多博客的学习和总结,可能存在理解错误。请带着怀疑的眼光,同时如果有错误希望能指出。同步IO和异步IO,阻塞IO和非阻塞IO分别是什么,到底有什么区别?不同的人在不同的上下文下给出的答案是不同的。所以先限定一下本文的上下文。本文讨论的背景是Linux环境下的network IO。一 概念说明在进行解释之前,首先要说明几个概念:用户空间和内核空间进程切换进程的阻塞文件描述符缓存转载 2016-08-10 10:43:28 · 699 阅读 · 0 评论