learning
文章平均质量分 88
IT技术管理认知&技能全面升级
不辜负自己,成就更好的自己!
展开
-
史上最全面最精华的Linux内存相关资料
学习Red Hat's Linux System Administration Primer 提供一个很好的虚拟内存总结。关于 Linux 交换空间的一切 讨论了交换的目的、交换驻留的地方、以及用于管理交换空间的各种命令。为了提高缓存性能,制定了一个 压缩缓存模式。在这个模式中,交换磁盘事实上是一个快速内存磁盘,页面根据词条进行压缩来提高存储效率。Linux 内存管原创 2016-03-25 16:30:27 · 3728 阅读 · 0 评论 -
linux细聊分段
分段机制主要功能只有两点:将物理内存划分为多个段,让操作系统可以使用大于其地址线对应的物理内存(比如正常情况下32位地址线可以访问4G大小的内存,但是有分段后则可访问大于4G的内存)。权限控制,将每个段设置权限位,让不同的程序访问不同的段。 对于linux内核来说,它仅仅只使用了分段机制中的权限控制功能,具体我们可以一起看看是如何做的。 CPU的段寄存器转载 2016-03-17 17:31:33 · 1172 阅读 · 0 评论 -
linux内存模型
理解 Linux 使用的内存模型是从更大程度上掌握 Linux 设计和实现的第一步,因此本文将概述 Linux 内存模型和管理。Linux 使用的是单一整体式结构 (Monolithic),其中定义了一组原语或系统调用以实现操作系统的服务,例如在几个模块中以超级模式运行的进程管理、并发控制和内存管理服务。尽管出于兼容性考虑,Linux 依然将段控制单元模型 (segment control转载 2016-03-17 17:22:39 · 5658 阅读 · 0 评论 -
linux深入解析分段机制
先对分段机制中必须用到的一些名词作一个解释:段选择符:又称端选择子,是段的一个16位标识符。它并不直接指向段,而是指向段选择符表中定义段的段描述符。它有三个字段内容:请求特权级RPL(Request Privilege Level)、表指示标志TI(Table Index)、索引值(Index)段描述符:段描述符石GDT和LDT表中的一个数据结构项,用来向处理器提供一个转载 2016-03-15 18:27:27 · 4569 阅读 · 0 评论 -
mysql之加锁处理分析
背景 MySQL/InnoDB的加锁分析,一直是一个比较困难的话题。我在工作过程中,经常会有同事咨询这方面的问题。同时,微博上也经常会收到MySQL锁相关的私信,让我帮助解决一些死锁的问题。本文,准备就MySQL/InnoDB的加锁问题,展开较为深入的分析与讨论,主要是介绍一种思路,运用此思路,拿到任何一条SQL语句,都能完整的分析出这条语句会加什么锁?会有什么样的使用风险?甚转载 2016-02-19 11:32:18 · 598 阅读 · 0 评论 -
mysql之锁
前言为了保证数据的一致完整性,任何一个数据库都存在锁定机制。锁定机制的优劣直接应想到一个数据库系统的并发处理能力和性能,所以锁定机制的实现也就成为了各种数据库的核心技术之一。本章将对MySQL中两种使用最为频繁的存储引擎MyISAM和Innodb各自的锁定机制进行较为详细的分析。 MySQL锁定机制简介数据库锁定机制简单来说就是数据库为了保证数据的一致性而使各种共享转载 2016-02-19 11:25:20 · 551 阅读 · 0 评论 -
mysql之分布式事务
分布式事务通常采用2PC协议,全称Two Phase Commitment Protocol。该协议主要为了解决在分布式数据库场景下,所有节点间数据一致性的问题。在分布式事务环境下,事务的提交会变得相对比较复杂,因为多个节点的存在,可能存在部分节点提交失败的情况,即事务的ACID特性需要在各个数据库实例中保证。总而言之,在分布式提交时,只要发生一个节点提交失败,则所有的节点都不能提交,只有当所有节转载 2016-02-18 20:46:12 · 5094 阅读 · 0 评论 -
mysql之复制
MYSQL 从3.25.15版本开始提供数据库复制功能(replication)。mysql复制是指从一个mysql主服务器(MASTER)将数据复制到另一台或多台mysql从服务器(SLAVE)的过程,将主数据库的DDL和DML操作通过二进制日志传到复制服务器上,然后在从服务器上对这些日志重新执行,从而使从服务器的数据保持同步。 在mysql中,复制操作是异步进行转载 2016-02-18 20:38:48 · 629 阅读 · 0 评论 -
mysql之优化
优化MYSQL数据库是DBA和开发人员的必备技能MYSQL优化一方面是找出系统瓶颈,提高MYSQL数据库整体性能;另一方面需要合理的结构设计和参数调整,以提高用户操作响应的速度;同时还有尽可能节省系统资源,以便系统可以提供更大负荷的服务。myisam允许没有任何索引和主键的表存在,个人觉得没有主键的myisam表都属于堆表,因为MYSQL不支持非主键的聚集索引。转载 2016-02-18 20:35:30 · 756 阅读 · 0 评论 -
mysql之日志
MYSQL里的日志主要分为4类,使用这些日志文件,可以查看MYSQL内部发生的事情。分别是1、错误日志:记录mysql服务的启动、运行、停止mysql服务时出现的问题2、查询日志:记录建立的客户端连接和执行的语句3、二进制日志:记录所有更改数据的语句,可以用于数据复制4、慢查询日志:记录所有执行时间超过long_query_time的所有查询或不使用索引的查转载 2016-02-18 19:49:39 · 1040 阅读 · 0 评论 -
mysql之备份和恢复
逻辑备份方法使用MYSQLDUMP命令备份MYSQLDUMP是MYSQL提供的一个非常有用的数据库备份工具。mysqldump命令执行时将数据库备份成一个文本文件,该文件中实际上包含了多个CREATE 和INSERT语句,使用这些语句可以重新创建表和插入数据MYSQLDUMP的语法和选项mysqldump -u user -p pwd -h host dbn转载 2016-02-18 19:47:41 · 1240 阅读 · 0 评论 -
mysql之视图
使用视图的理由是什么?1、安全性:一般是这样做的:创建一个视图,定义好该视图所操作的数据。之后将用户权限与视图绑定,这样的方式是使用到了一个特性:grant语句可以针对视图进行授予权限。2、查询性能提高3、有灵活性的功能需求后,需要改动表的结构而导致工作量比较大,那么可以使用虚拟表的形式达到少修改的效果。这是在实际开发中比较有用的4、复杂的查询需求,转载 2016-02-18 19:45:42 · 531 阅读 · 0 评论 -
mysql之索引
索引是在存储引擎中实现的,因此每种存储引擎的索引都不一定完全相同,并且每种存储引擎也不一定支持所有索引类型。根据存储引擎定义每个表的最大索引数和最大索引长度。所有存储引擎支持每个表至少16个索引,总索引长度至少为256字节。大多数存储引擎有更高的限制。MYSQL中索引的存储类型有两种:BTREE和HASH,具体和表的存储引擎相关;MYISAM和InnoDB存储引擎只支持BT转载 2016-02-18 19:42:53 · 583 阅读 · 0 评论 -
linux 进程的虚拟地址和内核中的虚拟地址有什么关系
进程的虚拟地址在内核中通过三/四级页表到达物理地址。而内核的虚拟地址在NORMAL部分算是逻辑地址只是线性的映射。这两者有什么关系么?或者说内核态为什么还要有虚拟地址存在?开场白:按照以前书上,或linux内核2.6内核的逻辑地址 与 用户空间逻辑地址 (逻辑地址有时也被叫虚拟地址) 都是位于 0x00000000~0xFFFFFFFF 这段虚拟地址空间 ,其中用户原创 2016-03-16 16:01:54 · 4883 阅读 · 0 评论 -
大话Linux操作系统
本文将对Intel 32位系统架构中涉及的一些最基本的概念做概要介绍,在以后的博文中做具体阐述。如图1为Intel 32位系统架构总览。图1系统架构总览全局描述符表(GDT)和局部描述符表(LDT) 在保护模式下,所有内存访问都是通过全局描述符表(Global Descriptor Tables)或者局部描述符表(LocalDescrip转载 2016-03-30 15:01:00 · 2191 阅读 · 0 评论 -
Linux 中的零拷贝技术
引言传统的 Linux 操作系统的标准 I/O 接口是基于数据拷贝操作的,即 I/O 操作会导致数据在操作系统内核地址空间的缓冲区和应用程序地址空间定义的缓冲区之间进行传输。这样做最大的好处是可以减少磁盘 I/O 的操作,因为如果所请求的数据已经存放在操作系统的高速缓冲存储器中,那么就不需要再进行实际的物理磁盘 I/O 操作。但是数据传输过程中的数据拷贝操作却导致了极大的 CPU 开销,限转载 2016-03-31 12:57:22 · 12579 阅读 · 0 评论 -
Linux保护模式之-CPL、RPL、DPL
先说下特权级的概念,在保护模式下,系统依靠特权级来实施代码和数据的保护,相当于权限啦。特权级共有4 个级别,0,1,2,3,数字越小表示权限越高。如图:较为核心的代码和数据放在较高(靠内)的层级中,处理器用此来防止较低特权的任务在不被允许的情况下访问处于高特权级的段。为了防止概念混淆,我们不用特权级大小来说明,改为内层(高),外层(低)来讲。特权级有3 种:CPL,DP转载 2016-03-29 09:09:43 · 6040 阅读 · 0 评论 -
Linux启动过程详解
如图:启动第一步--加载BIOS当你打开计算机电源,计算机会首先加载BIOS信息,BIOS信息是如此的重要,以至于计算机必须在最开始就找到它。这是因为BIOS中包含了CPU的相关信息、设备启动顺序信息、硬盘信息、内存信息、时钟信息、PnP特性等等。在此之后,计算机心里就有谱了,知道应该去读取哪个硬件设备了。启动第二步--读取MBR众所周知,硬盘上第0磁道第一个扇区被称为转载 2016-03-15 17:09:32 · 528 阅读 · 0 评论 -
DNS解析与域名服务安全防护策略
企业开源 DNS 服务应用概述在 Internet 上域名与 IP 地址之间是一一对应的,域名虽然便于人们记忆,但机器之间只能互相认识 IP 地址,它们之间的转换工作称为域名解析,域名解析需要由专门的域名解析服务器来完成,DNS 就是进行域名解析的服务器。DNS 是域名系统 Domain Name System 的缩写,该系统用于命名组织到域层次结构中的计算机和网络服务。DNS 命名用于原创 2016-03-25 16:19:10 · 9157 阅读 · 2 评论 -
tcp详解之三次握手和四次挥手
作为一名开发者,无论使用什么样的开发语言,最基本的网络知识一定要理解透彻,这样才能获得更好的职业发展。整合两个blog内容,便于查看学习。建立TCP需要三次握手才能建立,而断开连接则需要四次握手。整个过程如下图所示:先来看看如何建立连接的。首先Client端发送连接请求报文,Server段接受连接后回复ACK报文,并为这次连接分配资源。Client端转载 2016-03-25 09:35:30 · 612 阅读 · 0 评论 -
TCP 系统调用
引言典型的 TCP 客户机和服务器应用程序通过发布 TCP 系统调用序列来获取某些函数。这些系统调用包括socket ()、bind ()、listen ()、accept ()、send () 和 receive()。本文介绍在应用程序发布 TCP 系统调用时在较低级别中发生的情况,如下图 所示。图 1. TCP 应用程序进行的普通调用序列图转载 2016-03-24 17:06:46 · 6175 阅读 · 0 评论 -
linux中为什么要有分段和分页机制
linux中为什么要有分段和分页机制 首先讲述linux系统上的实模式和保护模式是指什么。为什么要分实模式和保护模式呢?他们当中有什么区别呢? 首先实模式和保护模式是CPU的两种工作模式。一开始PC启动时CPU是工作在实模式下的,经过某种机制后,CPU跳转到保护模式。其访问空间扩大了,要想从保护模式返回到实模式就只能重启。Intel 8086是16位CPU,转载 2016-02-29 11:58:11 · 5387 阅读 · 1 评论 -
深入理解Linux内存寻址的分段机制
一、前言最近在学习Linux内核,读到《深入理解Linux内核》的内存寻址一章。原本以为自己对分段分页机制已经理解了,结果发现其实是一知半解。于是,查找了很多资料,最终理顺了内存寻址的知识。现在把我的理解记录下来,希望对内核学习者有一定帮助,也希望大家指出错误之处。二、分段到底是怎么回事相信学过操作系统课程的人都知道分段分页,但是奇怪的是书上基本没提分段分页是怎么产生的,这转载 2016-02-29 11:50:55 · 1012 阅读 · 0 评论 -
linux系统调用之-fork、wait、waitpid
在前面的文章中,我们已经了解了父进程和子进程的概念,并已经掌握了系统调用exit的用法,但可能很少有人意识到,在一个进程调用了exit之后,该进程并非马上就消失掉,而是留下一个称为僵尸进程(Zombie)的数据结构。在Linux进程的5种状态中,僵尸进程是非常特殊的一种,它已经放弃了几乎所有内存空间,没有任何可执行代码,也不能被调度,仅仅在进程列表中保留一个位置,记载该进程的退出状态等信息供其他进翻译 2016-03-01 19:14:29 · 13339 阅读 · 2 评论 -
linux面试之--堆、栈、自由存储区、全局/静态存储区和常量存储区
栈,就是那些由编译器在需要的时候分配,在不需要的时候自动清除的变量的存储区。里面的变量通常是局部变量、函数参数等。在一个进程中,位于用户虚拟地址空间顶部的是用户栈,编译器用它来实现函数的调用。和堆一样,用户栈在程序执行期间可以动态地扩展和收缩。堆,就是那些由 new 分配的内存块,他们的释放编译器不去管,由我们的应用程序去控制,一般一个 new 就要对应一个 delete。如果程序员没有释转载 2016-03-08 18:14:22 · 4510 阅读 · 4 评论 -
linux面试之--栈,堆,全局,文字常量,代码区
一. 区域划分 一个由C/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack): 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。 2、堆区(heap) : 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表。 3、全局区(静态区)(static)转载 2016-03-08 18:12:58 · 1052 阅读 · 0 评论 -
fork之源码剖析
1. fork创造的子进程复制了父进程资源,包括内存及进程描述符的内容,注意是资源的复制而不是指针的复制,当然,用户也不需要太大担心性能的问题,Linux采用的写时复制技术能让fork的性能大幅提升2. vfork的行为更像一个线程(指没有自已独立的内存空间),更明显的是vfork的调用将挂起当前进程(即父进程)3. 相对上面两者而言,clone显得很复杂,根据flag的不同可以实转载 2016-02-23 17:27:01 · 4381 阅读 · 0 评论 -
fork之pid理解
fork调用的一个奇妙之处就是它仅仅被调用一次,却能够返回两次,它可能有三种不同的返回值: 1)在父进程中,fork返回新创建子进程的进程ID; 2)在子进程中,fork返回0; 3)如果出现错误,fork返回一个负值;创建新进程成功后,系统中出现两个基本完全相同的进程,这两个进程执行没有固定的先后顺序,哪个进程先执行要看系统的进程调度策略。此时,两个进程都从转载 2016-02-23 17:21:27 · 9411 阅读 · 0 评论 -
mysql之插入、更新、删除
插入将多行查询结果插入到表中语法INSERT INTO table_name1(column_list1) SELECT (column_list2) FROM table_name2 WHERE (condition)INSERT INTO SELECT 在SQLSERVER里也是支持的table_name1指定待插入数据的表;column_list1转载 2016-02-18 19:37:10 · 675 阅读 · 0 评论 -
mysql之协议分析
1 交互过程MySQL客户端与服务器的交互主要分为两个阶段:握手认证阶段和命令执行阶段。1.1 握手认证阶段握手认证阶段为客户端与服务器建立连接后进行,交互过程如下:服务器 -> 客户端:握手初始化消息客户端 -> 服务器:登陆认证消息服务器 -> 客户端:认证结果消息1.2 命令执行阶段客户端认证成功后,会进入命令执行阶段,交互过程如下:客转载 2016-02-18 19:30:32 · 786 阅读 · 0 评论 -
Linux线程模型的比较-LinuxThreads和NPTL
LinuxThreads 项目最初将多线程的概念引入了 Linux®,但是 LinuxThreads 并不遵守 POSIX 线程标准。尽管更新的 Native POSIX Thread Library(NPTL)库填补了一些空白,但是这仍然存在一些问题。本文为那些需要将自己的应用程序从 LinuxThreads 移植到 NPTL 上或者只是希望理解有何区别的开发人员介绍这两种 Linux 线程转载 2016-03-01 19:06:21 · 833 阅读 · 0 评论 -
使用GDB调试多进程程序
GDB 是 linux 系统上常用的 c/c++ 调试工具,功能十分强大。对于较为复杂的系统,比如多进程系统,如何使用 GDB 调试呢?考虑下面这个三进程系统:进程Proc2 是 Proc1 的子进程,Proc3 又是 Proc2 的子进程。如何使用 GDB 调试 proc2 或者 proc3 呢?实际上,GDB 没有对多进程程序调试提供直接支持。例如,使用GDB调试某转载 2016-03-01 19:01:38 · 4479 阅读 · 0 评论 -
深度探索Linux内存模型
理解 Linux 使用的内存模型是从更大程度上掌握 Linux 设计和实现的第一步,因此本文将概述 Linux 内存模型和管理。Linux 使用的是单一整体式结构 (Monolithic),其中定义了一组原语或系统调用以实现操作系统的服务,例如在几个模块中以超级模式运行的进程管理、并发控制和内存管理服务。尽管出于兼容性考虑,Linux 依然将段控制单元模型 (segment control转载 2016-01-27 14:32:10 · 676 阅读 · 0 评论 -
unix等系统出现断错误(Segmentation Fault)的总结
最近在Linux环境下做C语言项目,由于是在一个原有项目基础之上进行二次开发,而且项目工程庞大复杂,出现了不少问题,其中遇到最多、花费时间最长的问题就是著名的“段错误”(Segmentation Fault)。借此机会系统学习了一下,这里对Linux环境下的段错误做个小结,方便以后同类问题的排查与解决。 1. 段错误是什么 一句话来说,段错误是指访问的内存超出了系统给这个程序所设定转载 2015-12-25 15:13:38 · 10318 阅读 · 0 评论 -
c语言操作mysql
执行 SQL 语句现在,我们已经有了一个连接,并且知道如何处理错误,是时候讨论使用我们的数据库来作一些实际工作了。执行所有类型的 SQL 的主关键字是 mysql_query:int mysql_query(MYSQL *connection, const char *query)正如您所见,它非常简单。它取一个指向连接结构的指针和包含要执行的 SQL 的文本字符串;与转载 2016-01-25 14:20:26 · 5979 阅读 · 0 评论 -
Linux slab 分配器剖析
良好的操作系统性能部分依赖于操作系统有效管理资源的能力。在过去,堆内存管理器是实际的规范,但是其性能会受到内存碎片和内存回收需求的影响。现在,Linux® 内核使用了源自于 Solaris 的一种方法,但是这种方法在嵌入式系统中已经使用了很长时间了,它是将内存作为对象按照大小进行分配。本文将探索 slab 分配器背后所采用的思想,并介绍这种方法提供的接口和用法。动态内存管理转载 2016-01-25 12:05:06 · 688 阅读 · 0 评论 -
用 Python 脚本实现对 Linux 服务器的监控
目前 Linux 下有一些使用 Python 语言编写的 Linux 系统监控工具 比如 inotify-sync(文件系统安全监控软件)、 glances(资源监控工具)在实际工作中,Linux 系统管理员可以根据自己使用的服务器的具体情况编写一下简单实用的脚本实现对 Linux 服务器的监控。 本文介绍一下使用 Python 脚本实现对 Linux 服务器 CPU 内存 网络的监控脚本的编转载 2016-01-25 12:01:35 · 1268 阅读 · 0 评论 -
proc文件目录学习
proc文件系统是一个伪文件系统,它只存在内存当中,而不占用外存空间。由于系统的信息,如进程,是动态改变的,所以用户或应用程序读取proc文件时,proc文件系统是动态从系统内核读出所需信息并提交的。 下面简要介绍其下文件:/proc/cpuinfo cpu信息/proc/partitions 系统识别的分区表/proc/meminfo 内存信息/proc/uptime原创 2013-08-05 21:08:37 · 6536 阅读 · 0 评论 -
提高 Linux 上 socket 性能
使用 Sockets API,我们可以开发客户机和服务器应用程序,它们可以在本地网络上进行通信,也可以通过 Internet 在全球范围内进行通信。与其他 API 一样,您可以通过一些方法使用 Sockets API,从而提高 Socket 的性能,或者限制 Socket 的性能。本文探索了 4 种使用 Sockets API 来获取应用程序的最大性能并对 GNU/Linux® 环境进行优化从转载 2016-01-25 11:24:54 · 9551 阅读 · 1 评论 -
通过 ulimit 改善系统性能
概述系统性能一直是一个受关注的话题,如何通过最简单的设置来实现最有效的性能调优,如何在有限资源的条件下保证程序的运作,ulimit 是我们在处理这些问题时,经常使用的一种简单手段。ulimit 是一种 linux 系统的内键功能,它具有一套参数集,用于为由它生成的 shell 进程及其子进程的资源使用设置限制。本文将在后面的章节中详细说明 ulimit 的功能,使用以及它的影响,并以具体的转载 2016-01-25 10:12:17 · 6784 阅读 · 0 评论