linux
文章平均质量分 79
喜欢恋着风
这个作者很懒,什么都没留下…
展开
-
Linux虚拟内存管理
Linux的虚拟内存管理有几个关键概念: 每个进程有独立的虚拟地址空间,进程访问的虚拟地址空间并不是真正的物理地址 虚拟地址可通过每个进程上页表与物理地址进行映射,获得真正的物理地址 如果虚拟地址所对应的物理地址不在物理内存中,则产生缺页中断,真正分配物理地址,同时更新进程的页表;如果此时物理内存已经耗尽,则根据内存替换算法淘汰部分页面至物理磁盘中。 一. Linux虚拟地址原创 2017-05-22 21:21:15 · 11511 阅读 · 1 评论 -
多进程编程
fork()系统调用#include<sys/types.h>#include<unistd.h>pid_t fork(void);返回值:在父进程中返回子进程的pid,在子进程中返回零;fork函数复制当前进程,在内核进程表创建一个新的进程表项,新的进程表项有很多属性与原进程相同,比如堆指针、栈指针和标志寄存器的值。但也有许多属性被赋予了新的值,比如该进程的PPID被设置为原进程的PID,信号原创 2017-08-18 21:56:24 · 226 阅读 · 0 评论 -
epoll过人之处
select 和 epoll的任务关键词:应用程序、 文件句柄、 用户态、 内核态、 监控者要比较epoll 相较select 高效在什么地方,就需要比较二者做相同的事情的方法。 要完成对 I/O 流的复用需要完成如下几个事情:用户态怎么将文件句柄传递到内核态?select:select创建3个文件描述符集,并将这些文件描述符拷贝到内核中,这里限制了文件句柄的最大数量为1024(注意是全部拷入—原创 2017-08-04 17:32:10 · 413 阅读 · 0 评论 -
多线程编程
Linux线程概述内核线程和用户线程线程是程序中完成独立任务的完整执行序列。即一个可调度的实体,根据运行环境和调度者身份,线程分为内核线程和用户线程:内核线程:在有的系统上也称为LWP(轻量级进程),运行在内核空间,由内核调度;用户线程:运行在用户空间,由线程库调度;当进程的一个内核线程获得CPU的使用权时,它就加载并运行一个用户线程,可见,内核线程相当于用户线程运行的“容器”。一个进程可以拥原创 2017-08-19 17:35:55 · 291 阅读 · 0 评论 -
Linux中的文件描述符与打开文件之间的关系
概论在Linux系统中一切皆可以看成是文件,文件又可分为:普通文件、目录文件、链接文件、设备文件等。文件描述符(file descriptor)是内核为了高效管理已打开文件所创建的索引,其是一个非负整数(通常是小整数),用于指代被打开的文件,所有执行I/O操作的系统调用都通过文件描述符。程序在刚启动的时候,0是标准输入,1是标准输出,2是标准错误。如果此时去打开一个新的文件,它的文件描述符是3。PO原创 2017-09-07 17:34:48 · 498 阅读 · 0 评论 -
管道
管道(pipe)管道可用于具有亲缘关系进程间的通信,有名管道克服了管道没有名字的限制,因此,除具有管道所具有的功能外,它还允许无亲缘关系的进程间通信;实现机制管道是由内核管理的一个缓冲区,相当于放入内存的一个纸条。管道的一端连接一个进程的输出,这个进程会向管道中放入信息。管道的另一端连接一个进程的输入,这个进程取出被放入管道的信息。一个缓冲区不需要很大,它被设计成为环形的数据结构,以便管道可以被循环原创 2017-08-18 23:17:44 · 488 阅读 · 0 评论 -
linux硬链接与软链接
链接概念Linux链接分两种,一种称为硬链接(Hard Link),另一种称为符号链接(Symbolic Link),默认情况下,ln命令产生硬链接;硬链接硬链接指通过索引节点来进行链接,在Linux的文件系统中,保存在磁盘分区中的文件不管是什么类型都给它分配一个编号,称为索引节点号(Inode Index)。在Linux中,多个文件名指向同一个索引节点是存在的,一般这种链接就是硬链接,硬链接的作用原创 2017-08-30 22:06:52 · 490 阅读 · 0 评论 -
Linux中的五种I/O模型
概念说明用户空间和内核空间现在操作系统都是采用虚拟存储器,那么对32位操作系统而言,它的寻址空间(虚拟存储空间)为4G(2的32次方)。操作系统的核心是内核,独立于普通的应用程序,可以访问受保护的内存空间,也有访问底层硬件设备的所有权限。为了保证用户进程不能直接操作内核(kernel),保证内核的安全,操作系统将虚拟空间划分为两部分,一部分是内核空间,一部分是用户空间。针对Linux OS而言,将最原创 2017-08-08 16:45:29 · 706 阅读 · 0 评论 -
Segmentation Fault错误原因总结
一、 什么是“Segmentation fault in Linux”所谓的段错误就是指访问的内存超过了系统所给这个程序的内存空间,通常这个值是由gdtr来保存的,他是一个48位的寄存器,其中的32位是保存由它指向的gdt表,后13位保存相应于gdt的下标,最后3位包括了程序是否在内存中以及程序的在cpu中的运行级别,指向的gdt是由以64位为一个单位的表,在这张表中就保存着程序运行的代码段以及数据原创 2017-09-01 17:24:52 · 595484 阅读 · 11 评论 -
信号
信号信号是由用户、系统、进程发送给目标进程的信息,以通知目标进程某个状态的改变或系统异常重点内容**,Linux信号可由以下条件产生:对于前台进程,用户可以通过输入特殊终端字符来给它发送信号,比如输入Ctrl + C通常会给进程发送一个中断信号;系统异常,比如浮点异常和非法内存段访问;系统状态变化,比如alarm定时器到期引起SIGALRM信号;运行kill命令或调用kill函数;信号种类原创 2017-08-04 16:01:29 · 244 阅读 · 0 评论 -
僵尸进程以及如何处理僵尸进程
僵尸进程产生原因在UNIX系统中,一个进程结束了,但是其父进程没有等待(调用wait/waitpid)它,那么它将变成一个僵尸进程。通过PS命令可以查看其带有defunct的标志,僵尸进程是一个早已死亡的进程,但在进程表中仍占据一个位置;但是如果该进程的父进程已经先结束了,那么该进程就不会变成僵尸进程。因为每个进程结束的时候,系统都会扫描当前系统中所运行的所有进程,看看有没有哪个进程是刚刚结束的这个原创 2017-07-31 21:18:35 · 29720 阅读 · 1 评论 -
高级I/O函数
应用层程序能往一个TCP连接中写入多少字节的数据,取决于对方的接收窗口的大小和本端的拥塞窗口的大小。管道本身有一个容量限制,规定如果应用程序不将数据从管道读走的话,该管道最多能写入多少字节的数据,自Linux 2.6.11内核起,管道容量的大小是65536字节,可以使用fcntl函数来修改管道容量;管道#include<unistd.h>int pipe(int fd[2]); // 默认情况下是原创 2017-08-06 17:33:23 · 275 阅读 · 0 评论 -
守护进程
概念守护进程(daemon)是一种运行在后台的特殊进程,它独立于控制终端并周期的执行某种任务或等待处理某些发生的事件。在Linux中,每个系统与用户进行交流的界面称为终端,每一个从此终端开始运行的进程都会依附于这个终端,这个终端称为这些进程的控制终端,当控制终端被关闭的时候,相应的进程都会自动关闭。但是守护进程能突破这种限制,它脱离于终端在后台运行,并且它脱离终端的目的是为了避免进程在运行过程中的信原创 2017-08-17 11:42:44 · 456 阅读 · 0 评论 -
I/O复用
I/O复用虽然能同时监听多个fd,但它本身是阻塞的,并且当多个文件描述符同时阻塞时,如果不采取额外的措施,程序就只能顺序依次处理其中每一个fd,这使得服务器程序看起来像是串行工作的。如果要实现并发,只能使用多进程或多线程等编程手段。select系统调用函数原型#include <sys/select.h>int select(int nfds, //指定被监听的文件描述符总数原创 2017-08-17 17:43:52 · 243 阅读 · 0 评论 -
Linux相关的小知识点
Linux 中每个 TCP 连接最少占用多少内存?详细解释Linux 内核到底长啥样详细解释原创 2017-08-03 16:47:53 · 190 阅读 · 0 评论 -
sigaction()之sa_mask
sigset_t sa_mask是一个信号集,在调用该信号捕捉函数之前,将需要block的信号加入这个sa_mask,仅当信号捕捉函数正在执行时,才阻塞sa_mask中的信号,当从信号捕捉函数返回时进程的信号屏蔽字复位为原先值;这个复位动作是sigaction函数内部处理,还是由调用者自己处理呢?由sigaction函数自动复位,不用自己处理。 设置sa_mask的目的在调用信号处理函数时就能阻塞某原创 2017-08-17 23:03:09 · 2776 阅读 · 2 评论 -
定时器
定时器概述网络程序需要处理的第三类事件是定时事件,比如定期检测一个客户连接的活动状态。服务器程序通常管理着众多定时事件,因此有效的组织这些定时事件,使之能在预期的时间点被触发且不影响服务器的主要逻辑,对于服务器的性能有着至关重要的影响。为此,我们要将每个定时事件分别封装成定时器,并使用某种容器类数据结构,比如链表、排序链表和时间轮,将所有定时器串联起来,以实现对定时事件的统一管理。定时是指在一段时间原创 2017-08-18 11:46:40 · 261 阅读 · 0 评论 -
网络编程相关函数深层次解析
connect函数解析TCP客户用connect函数来建立与TCP服务器的连接:#include<sys/socket.h>int connect(int sockfd, const struct sockaddr* servaddr, socklen_t addrlen);//成功返回0,失败返回-1并设置errno客户端在调用connect之前不必非得调用bind函数,因为如果需要的话内核会原创 2017-08-06 16:19:44 · 282 阅读 · 0 评论 -
Linux下各种最大数目
ulimit命令查看和更改系统限制ulimit命令详解ulimit用于shell启动进程所占用的资源,可以用来设置系统的限制;语法格式:ulimit [-acdfHlmnpsStvw] [size]在/etc/security/limits.conf文件中定义 可以使用ulimit -a查看系统的所有限制Linux大部分的命令设置都是临时生效的,而且ulimit命令只对当前终端有效。如果需要永久有效原创 2017-08-11 17:45:52 · 694 阅读 · 0 评论 -
shell基础知识
shell基础知识 脚本语言:脚本是短小的、用来让计算机完成一系列工作的程序,这类程序可以用文本编辑器修改,不需要编译,通常是解释运行的。 #!是一个约定的标记,告诉系统其后路径所指定的程序即是解释此脚本文件的shell程序。shell变量使用变量 &nb...原创 2018-02-08 19:40:16 · 477 阅读 · 0 评论