#Linux

零拷贝技术介绍

发布于:2020-04-01

为什么需要零拷贝 传统的Linux系统的标准I/O接口(read、write)是基于数据拷贝的,也就是数据都是copy_to_user或者copy_from_user 这样做的好处是,通过中间缓存的机制,减少磁盘I/O的操作,但是坏处也很明显,大量数据的拷贝,用户态和内核态的频繁切换,会消耗大量的CPU资源,严重影响数据传输的性能 以下是一个原始数据拷贝操作的例子,假如一个应用需要从某个磁盘文件中读取内容通过网络发出去,其过程需要经过以下4个步骤,整个过程涉及2次 CPU拷贝、2 次DMA拷贝总共4次拷贝,以及4次上下文切换。 read(file_fd, tmp_buf, len); …...

进入阅读

C语言标准和标准库简介

发布于:2020-02-07

C语言 C是一种通用的编程语言,广泛用于系统软件与应用软件的开发,它是由Dennis Ritchie与Ken Thompson于1969年至1973年间,为了移植与开发UNIX操作系统以B语言为基础,在贝尔实验室设计、开发出来。 ALGOL 60是计算机发展史上首批产生的高级程式语言,ALGOL 60语言基础上设计出了CPL,CPL基础上设计出BCPL,B语言便是简化BCPL后取首字母B命名而来。 由于B语言过于简单以及数据无类型的弊端,Dennis Ritchie和 Ken Thompson在B语言的基础上设计出了C语言,C语言更加精炼、也更加接近硬件。之后的UNIX操作系统便用C语言重构, …...

进入阅读

linux系统库链接简介

发布于:2018-09-30

库和库链接 本质上来说库是一种可执行代码的二进制形式,可以被操作系统载入内存执行。库是写好的现有的,成熟的,可以复用的代码,现实中每个程序都要依赖很多基础的底层库。 库有两种类型: 静态库:.a文件(win 系统下是lib) 动态库:.so文件(win 系统下是.dll) 静态库 静态库实际上是一些目标文件的集合,只用于链接生成可执行文件阶段。链接器会将程序中使用到函数的代码从库文件中拷贝到应用程序中,一旦链接完成生成可执行文件之后,在执行程序的时候就不需要静态库了。 静态库库的特点: 静态库对函数库的链接是放在编译时期完成的。 程序在运行时与函数库再无瓜葛,移植方便。 浪费空间 …...

进入阅读

iptables简介及使用说明

发布于:2018-07-17

什么是iptables iptables是Linux平台最著名的防火墙工具,运行在用户空间通过控制Linux内核netfilter模块来管理网络数据包的处理和转发的一个命令行工具。可以把iptables理解成一个客户端代理,用户通过iptables这个代理,将用户的安全设定执行到netfilter netfilter/iptables组成Linux平台下的包过滤防火墙,与大多数的Linux软件一样,这个包过滤防火墙是免费的,它可以代替昂贵的商业防火墙解决方案,完成封包过滤、封包重定向和网络地址转换等功能。 iptables操作需要超级用户权限,其可执行文件通常位于 /sbin/iptables …...

进入阅读

Linux IO模式

发布于:2016-08-09

前言 服务器端编程经常需要构造高性能的IO模型,我们常常见到同步(Sync)/异步(Async),阻塞(Block)/非阻塞(Unblock)这4中IO模型,那么这四种模型具体如何定义,有何区别?本文将介绍相关的内容。 一些基本概念 用户空间与内核空间 现在操作系统都是采用虚拟存储器,那么对32位操作系统而言,它的寻址空间(虚拟存储空间)为4G(2的32次方)。操作系统的核心是内核,独立于普通的应用程序,可以访问受保护的内存空间,也有访问底层硬件设备的所有权限。为了保证用户进程不能直接操作内核(kernel),保证内核的安全,操心系统将虚拟空间划分为两部分,一部分为内核空间,一部分为用户空间。 …...

进入阅读

Linux编译器GCC简介

发布于:2015-01-11

编译和编译器 对于计算机科学来说“编译”是一个很重要的概念,它指的是利用编译器从源语言编写的源程序产生目标程序的过程。对于计算机而言真正能识别的语言是2进制语言,但是在我们在进行软件开发的时候是不太可能直接用二进制语言进行开发的,那么问题来了,软件工程师开发出来的代码是怎么转变成计算机能识别的2进制语言呢?答案就是编译!编译的过程就是把人所写的代码“翻译”成2进制语言的过程,也就是从人的语言到机器的语言的过程。 编译器是一种计算机程序,它会将用某种编程语言写成的源代码,转换成另一种编程语言。它主要的目的是将便于人编写、阅读、维护的高级计算机语言所写作的源代码程序,翻译为计算机能解读、运行的低阶 …...

进入阅读

Linux源代码包编译安装

发布于:2014-05-18

Linux编译安装 在使用Linux系统的过程中,软件包的安装是避免不了的。在Linux下,软件安装程序的种类很多,安装方法也各式各样,Linux的不同发行版本中都有自己的包安装工具,例如apt-get、yum、brew等等,但是这些包管理工具对于一个开发人员来说是远远不能满足需求的,所以为了能从根本上hold住还是得学习从源代码包中编译安装。 原始的c和c++代码都会进行打包,常见的是tar.gz、tar.bz2(tar.gz的用 tar zxvf 解压,tar.bz2的用 tar jxvf 解压),需要编译之后才能安装,在编译过程中你可以指定各种参数以适应你的系统需求,比如安装位置,优化参 …...

进入阅读

yum常用命令

发布于:2013-07-05

什么是yum yum(全称为 Yellow dog Updater, Modified)是一个在Fedora和RedHat以及SUSE中的Shell前端软件包管理器。基於RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软体包,无须繁琐地一次次下载、安装。yum提供了查找、安装、删除某一个、一组甚至全部软件包的命令,而且命令简洁而又好记。 yum命令 yum的命令形式一般是如下: yum [options] [command] [package ...] 其中的options是可选的,选项包括-h(帮助),-y(当安装过程提示选择全部 …...

进入阅读

apt-get常用命令

发布于:2013-06-11

一、什么的是apt-get 高级包装工具(英语:Advanced Packaging Tools,简称:APT)是Debian及其衍生发行版(如:ubuntu)的软件包管理器。APT可以自动下载,配置,安装二进制或者源代码格式的软 件包,因此简化了 Unix系统上管理软件的过程,apt-get命令一般需要root权限执行,所以一般跟着sudo命令。 二、apt-get参数 用法 apt-get [选项] 命令 apt-get [选项] install|remove pkg1 [pkg2 ...] apt-get [选项] source pkg1 [pkg2 ...] apt-get 是一个下载 …...

进入阅读

Linux查找文件命令总结

发布于:2013-06-11

前言 使用电脑的时候,经常需要查找文件在Linux中,有很多方法可以做到这一点。国外网站LinuxHaxor总结了五条命令,你可以看看自己知道几条。大多数程序员,可能经常使用其中的2到3条,对这5条命令都很熟悉的人应该是不多的。 find命令 find是最常见和最强大的查找命令,你可以用它找到任何你想找的文件。 find的使用格式如下: find <指定目录> <指定条件> <指定动作> <指定目录>:所要搜索的目录及其所有子目录。默认为当前目录。 <指定条件>:所要搜索的文件的特征。 <指定动作>:对搜索结果进行特定的处 …...

进入阅读

Linux里各种压缩格式相关命令

发布于:2013-05-29

这么多年来,数据压缩对我们来说是非常有用的。无论是在邮件中发送的图片用的zip文件还是在服务器压缩数据文件,我们都可以让下载更容易或者有效的节约磁盘空间。某些压缩格式有时允许我们以60%的比率(甚至更高)压缩文件。对于刚刚接触Linux的人来说,一定会给Linux下一大堆各式各样的文件名给搞晕。别个不说,单单就压缩文件为例,我们知道在Windows下最常见的压缩文件就只有两种,一是,zip,另一个是.rar。可是Linux就不同 了,它有.gz、.tar.gz、tgz、bz2、.Z、.tar等众多的压缩文件名,此外windows下的.zip和.rar也可以在Linux下使用。 Compress …...

进入阅读

Linux计划任务工具crontab

发布于:2013-05-08

什么是cron cron是linux下用来周期性的执行某种任务或等待处理某些事件的一个守护进程,与windows下的计划任务类似,可以在无需人工干预的情况下运行作业。当安装完成操作系统后,默认会安装此服务工具,并且会自动启动crond进程,crond进程每分钟会定期检查是否有要执行的任务,如果有要执行的任务,则自动执行该任务。 cron把命令行保存在/etc/crontab文件里,每个系统用户如果设置了自己的cron,那都会在/var/spool/cron下面有对应用户名的crontab。无论编写/var/spool/cron目录内的文件还是/etc/crontab文件,都能让cron准确无误 …...

进入阅读

分类

开发
    --go (9)
    --java (5)
    --php (11)
    --mysql (9)
    --javascript (3)
    --html (1)
    --算法 (6)
架构
    --理论 (9)
    --网络 (3)
    --服务器 (2)
    --消息队列 (3)
    --容器 (5)
    --监控 (1)
    --搜索引擎 (3)
    --大数据 (0)
    --测试 (1)
系统
    --linux (10)
    --mac (2)
    --windows (1)
足球
    --世界杯 (60)
    --欧洲杯 (28)
    --文迷 (3)
大学时光
    --校园生活 (96)
    --假期生活 (17)
    --广院杯那些事 (14)
    --北京奥运 (6)
    --胡思乱写 (17)


最近发布

零拷贝技术介绍

服务网格技术简介

C语言标准和标准库简介

Kubernetes简介及环境搭建

Go语言开发的顶级项目


归档

2006 (109)
2007 (40)
2008 (47)
2009 (10)
2010 (6)
2012 (10)
2013 (14)
2014 (27)
2015 (15)
2016 (6)
2017 (8)
2018 (11)
2019 (17)
2020 (5)