linux
文章平均质量分 90
IT技术管理认知&技能全面升级
不辜负自己,成就更好的自己!
展开
-
Linux保护模式之-CPL、RPL、DPL
先说下特权级的概念,在保护模式下,系统依靠特权级来实施代码和数据的保护,相当于权限啦。特权级共有4 个级别,0,1,2,3,数字越小表示权限越高。如图:较为核心的代码和数据放在较高(靠内)的层级中,处理器用此来防止较低特权的任务在不被允许的情况下访问处于高特权级的段。为了防止概念混淆,我们不用特权级大小来说明,改为内层(高),外层(低)来讲。特权级有3 种:CPL,DP转载 2016-03-29 09:09:43 · 6086 阅读 · 0 评论 -
Linux启动过程详解
如图:启动第一步--加载BIOS当你打开计算机电源,计算机会首先加载BIOS信息,BIOS信息是如此的重要,以至于计算机必须在最开始就找到它。这是因为BIOS中包含了CPU的相关信息、设备启动顺序信息、硬盘信息、内存信息、时钟信息、PnP特性等等。在此之后,计算机心里就有谱了,知道应该去读取哪个硬件设备了。启动第二步--读取MBR众所周知,硬盘上第0磁道第一个扇区被称为转载 2016-03-15 17:09:32 · 538 阅读 · 0 评论 -
linux内存管理内幕
为什么必须管理内存内存管理是计算机编程最为基本的领域之一。在很多脚本语言中,您不必担心内存是如何管理的,这并不能使得内存管理的重要性有一点点降低。对实际编程来说,理解您的内存管理器的能力与 局限性至关重要。在大部分系统语言中,比如 C 和 C++,您必须进行内存管理。本文将介绍手工的、 半手工的以及自动的内存管理实践的基本概念。追溯到在 Apple II 上进行汇编语言编程的时代,转载 2016-02-29 12:04:46 · 1983 阅读 · 0 评论 -
linux中为什么要有分段和分页机制
linux中为什么要有分段和分页机制 首先讲述linux系统上的实模式和保护模式是指什么。为什么要分实模式和保护模式呢?他们当中有什么区别呢? 首先实模式和保护模式是CPU的两种工作模式。一开始PC启动时CPU是工作在实模式下的,经过某种机制后,CPU跳转到保护模式。其访问空间扩大了,要想从保护模式返回到实模式就只能重启。Intel 8086是16位CPU,转载 2016-02-29 11:58:11 · 5405 阅读 · 1 评论 -
深入理解Linux内存寻址的分段机制
一、前言最近在学习Linux内核,读到《深入理解Linux内核》的内存寻址一章。原本以为自己对分段分页机制已经理解了,结果发现其实是一知半解。于是,查找了很多资料,最终理顺了内存寻址的知识。现在把我的理解记录下来,希望对内核学习者有一定帮助,也希望大家指出错误之处。二、分段到底是怎么回事相信学过操作系统课程的人都知道分段分页,但是奇怪的是书上基本没提分段分页是怎么产生的,这转载 2016-02-29 11:50:55 · 1026 阅读 · 0 评论 -
GDB 命令详细解释
GDB 命令详细解释 Linux中包含有一个很有用的调试工具--gdb(GNU Debuger),它可以用来调试C和C++程序,功能不亚于Windows下的许多图形界面的调试工具。 和所有常用的调试工具一样,gdb提供了以下功能: # 监视程序中变量的值 # 在程序中设置断点 # 程序的单步执行 在使用gdb前,必须先载入可执行文件,转载 2016-03-10 19:12:57 · 759 阅读 · 0 评论 -
Linux调试工具
1. 使用printf调试#ifdef DEBUGPrintf(“valriable x has value = %d\n”, x)#endif然后在编译选项中加入-DDEBUG更复杂的调试应用如:#define BASIC_DEBUG 1#define EXTRA_DEBUG 2#define SUPER_DEBUG 4转载 2016-03-10 19:11:46 · 11975 阅读 · 2 评论 -
linux系统调用之-fork、wait、waitpid
在前面的文章中,我们已经了解了父进程和子进程的概念,并已经掌握了系统调用exit的用法,但可能很少有人意识到,在一个进程调用了exit之后,该进程并非马上就消失掉,而是留下一个称为僵尸进程(Zombie)的数据结构。在Linux进程的5种状态中,僵尸进程是非常特殊的一种,它已经放弃了几乎所有内存空间,没有任何可执行代码,也不能被调度,仅仅在进程列表中保留一个位置,记载该进程的退出状态等信息供其他进翻译 2016-03-01 19:14:29 · 13366 阅读 · 2 评论 -
Linux 2.6内核中新的锁机制RCU
一、 引言众所周知,为了保护共享数据,需要一些同步机制,如自旋锁(spinlock),读写锁(rwlock),它们使用起来非常简单,而且是一种很有效的同步机制,在UNIX系统和Linux系统中得到了广泛的使用。但是随着计算机硬件的快速发展,获得这种锁的开销相对于CPU的速度在成倍地增加,原因很简单,CPU的速度与访问内存的速度差距越来越大,而这种锁使用了原子操作指令,它需要原子地访问内存,转载 2016-04-01 13:43:32 · 3043 阅读 · 0 评论 -
linux面试之--栈,堆,全局,文字常量,代码区
一. 区域划分 一个由C/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack): 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。 2、堆区(heap) : 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表。 3、全局区(静态区)(static)转载 2016-03-08 18:12:58 · 1071 阅读 · 0 评论 -
Linux 2.6 调度系统分析
本文从 Linux 2.4 调度系统的缺陷入手,详细分析了 Linux 2.6 调度系统的原理和实现细节,并对与调度系统相关的负载平衡、NUMA 结构以及实时性能进行了分析和评价。1. 前言Linux 的市场非常广阔,从桌面工作站到低端服务器,它都是任何商用操作系统的有力竞争对手。目前,Linux 正全力进军嵌入式系统和高端服务器系统领域,但它的技术缺陷限制了它的竞争力转载 2016-04-01 10:12:36 · 2963 阅读 · 0 评论 -
Linux slab 分配器剖析
良好的操作系统性能部分依赖于操作系统有效管理资源的能力。在过去,堆内存管理器是实际的规范,但是其性能会受到内存碎片和内存回收需求的影响。现在,Linux® 内核使用了源自于 Solaris 的一种方法,但是这种方法在嵌入式系统中已经使用了很长时间了,它是将内存作为对象按照大小进行分配。本文将探索 slab 分配器背后所采用的思想,并介绍这种方法提供的接口和用法。动态内存管理转载 2016-03-30 14:36:59 · 533 阅读 · 0 评论 -
linux 进程的虚拟地址和内核中的虚拟地址有什么关系
进程的虚拟地址在内核中通过三/四级页表到达物理地址。而内核的虚拟地址在NORMAL部分算是逻辑地址只是线性的映射。这两者有什么关系么?或者说内核态为什么还要有虚拟地址存在?开场白:按照以前书上,或linux内核2.6内核的逻辑地址 与 用户空间逻辑地址 (逻辑地址有时也被叫虚拟地址) 都是位于 0x00000000~0xFFFFFFFF 这段虚拟地址空间 ,其中用户原创 2016-03-16 16:01:54 · 4927 阅读 · 0 评论 -
linux细聊分段
分段机制主要功能只有两点:将物理内存划分为多个段,让操作系统可以使用大于其地址线对应的物理内存(比如正常情况下32位地址线可以访问4G大小的内存,但是有分段后则可访问大于4G的内存)。权限控制,将每个段设置权限位,让不同的程序访问不同的段。 对于linux内核来说,它仅仅只使用了分段机制中的权限控制功能,具体我们可以一起看看是如何做的。 CPU的段寄存器转载 2016-03-17 17:31:33 · 1196 阅读 · 0 评论 -
linux内存模型
理解 Linux 使用的内存模型是从更大程度上掌握 Linux 设计和实现的第一步,因此本文将概述 Linux 内存模型和管理。Linux 使用的是单一整体式结构 (Monolithic),其中定义了一组原语或系统调用以实现操作系统的服务,例如在几个模块中以超级模式运行的进程管理、并发控制和内存管理服务。尽管出于兼容性考虑,Linux 依然将段控制单元模型 (segment control转载 2016-03-17 17:22:39 · 5682 阅读 · 0 评论 -
Linux资源管理之cgroups简介
cgroups 是Linux内核提供的一种可以限制单个进程或者多个进程所使用资源的机制,可以对 cpu,内存等资源实现精细化的控制,目前越来越火的轻量级容器 Docker 就使用了 cgroups 提供的资源限制能力来完成cpu,内存等部分的资源控制。另外,开发者也可以使用 cgroups 提供的精细化控制能力,限制某一个或者某一组进程的资源使用。比如在一个既部署了前端 web 服务,也部原创 2016-09-09 09:49:16 · 10297 阅读 · 0 评论 -
unix系列系统镜像下载
中国大陆开源镜像站汇总1.企业贡献: 搜狐开源镜像站:http://mirrors.sohu.com/网易开源镜像站:http://mirrors.163.com/ 2.大学教学: 北京理工大学:http://mirror.bit.edu.cn (IPv4 only)http://mirror.bit6.edu.cn (IPv6 only)北京交通大学:ht转载 2016-10-20 15:19:58 · 44314 阅读 · 0 评论 -
Linux多线程编程讲解之系列十
作者简介:刘卓,西安理工网络工程专业,酷爱Linux,高并发编程。下面就分享一下刘同学的倾心力作。深入挖掘线程创建时的问题转载 2017-11-17 18:27:24 · 802 阅读 · 0 评论 -
Linux多线程编程讲解之系列九
前面介绍了线程的一些基本概念的特性,API等。后续会结合一些具体实战去分析更深层次的问题,欢迎大家继续review,讨论。浅析多线程并发及写微信红包遇到的问题转载 2017-11-17 18:25:03 · 596 阅读 · 0 评论 -
Linux多线程编程讲解之系列一
Linux多线程概述了解如何正确运用线程是每一个优秀程序员必备的素质。线程类似于进程。如同进程,线程由内核按时间分片进行管理。在单处理器系统中,内核使用时间分片来模拟线程的并发执行,这种方式和进程的相同。而在多处理器系统中,如同多个进程,线程实际上一样可以并发执行。那么为什么对于大多数合作性任务,多线程比多个独立的进程更优越呢?这是因为,线程共享相同的内存空间。不同的线程可转载 2017-11-17 15:18:05 · 1368 阅读 · 0 评论 -
Linux多线程编程讲解之系列八
条件变量详解在 上一篇文章结束时,我描述了一个比较特殊的难题:如果线程正在等待某个特定条件发生,它应该如何处理这种情况?它可以重复对互斥对象锁定和解锁,每次都会检查共享数据结构,以查找某个值。但这是在浪费时间和资源,而且这种繁忙查询的效率非常低。解决这个问题的最佳方法是使用 pthread_cond_wait() 调用来等待特殊条件发生。了解 pthread_cond_转载 2017-11-17 18:08:04 · 583 阅读 · 0 评论 -
Linux多线程编程讲解之系列七
概念及作用在单线程程序中,我们经常要用到"全局变量"以实现多个函数间共享数据。在多线程环境下,由于数据空间是共享的,因此全局变量也为所有线程所共有。但有时应用程序设计中有必要提供线程私有的全局变量,仅在某个线程中有效,但却可以跨多个函数访问,比如程序可能需要每个线程维护一个链表,而使用相同的函数操作,最简单的办法就是使用同名而不同变量地址的线程相关数据结构。这样的数据结构可以由Posix线转载 2017-11-17 17:59:47 · 473 阅读 · 0 评论 -
Linux多线程编程讲解之系列六
线程安全介绍在目前的计算机科学中,线程是操作系统调度的最小单元,进程是资源分配的最小单元。在大多数操作系统中,一个进程可以同时派生出多个线程。这些线程独立执行,共享进程的资源。在单处理器系统中,多线程通过分时复用技术来技术,处理器在不同的线程间切换,从而更高效地利用系统 CPU资源。在多处理器和多核系统中,线程实际上可以同时运行,每个处理器或者核可以运行一个线程,系统的运算能力相对于单线程转载 2017-11-17 17:50:16 · 422 阅读 · 0 评论 -
Linux多线程编程讲解之系列五
在Posix线程规范中还有几个辅助函数难以归类,暂且称其为杂项函数,主要包括pthread_self()、pthread_equal()和pthread_once()三个,另外还有一个LinuxThreads非可移植性扩展函数pthread_kill_other_threads_np()。本文就介绍这几个函数的定义和使用。获得本线程IDpthread_t pthread_self(转载 2017-11-17 17:10:11 · 382 阅读 · 0 评论 -
Linux多线程编程讲解之系列四
线程终止方式一般来说,Posix的线程终止有两种情况:正常终止和非正常终止。线程主动调用pthread_exit()或者从线程函数中return都将使线程正常退出,这是可预见的退出方式;非正常终止是线程在其他线程的干预下,或者由于自身运行出错(比如访问非法地址)而退出,这种退出方式是不可预见的。线程终止时的清理不论是可预见的线程终止还是异常终止,都会存在资源释放的问题,在不转载 2017-11-17 17:04:00 · 352 阅读 · 0 评论 -
Linux多线程编程讲解之系列三
互斥锁尽管在Posix Thread中同样可以使用IPC的信号量机制来实现互斥锁mutex功能,但显然semphore的功能过于强大了,在Posix Thread中定义了另外一套专门用于线程同步的mutex函数。1. 创建和销毁有两种方法创建互斥锁,静态方式和动态方式。POSIX定义了一个宏PTHREAD_MUTEX_INITIALIZER来静态初始化互斥锁,方法如下: p转载 2017-11-17 15:57:24 · 601 阅读 · 0 评论 -
Linux多线程编程讲解之系列二
在上一篇文章中,我们谈到了会导致异常结果的线程代码。两个线程分别对同一个全局变量进行了二十次加一。变量的值最后应该是 40,但最终值却是 21。这是怎么回事呢?因为一个线程不停地“取消”了另一个线程执行的加一操作,所以产生这个问题。现在让我们来查看改正后的代码,它使用 互斥对象(mutex)来解决该问题:#include #include #include #include int转载 2017-11-17 15:47:56 · 558 阅读 · 0 评论 -
Linux 下几个文件操作命令的代码实现
主要讲述 cp、mkdir、rm、tac、df 五个命令主要功能的模拟实现代码。让读者学会使用 strace 来跟踪系统调用的使用情况。加深读者对操作系统的认识与理解,引导读者学习 Linux 系统编程。本文章中的示例代码是在 CentOS 5.4 64 位环境下运行通过的,在其它 unix 系统上没有测试过。Linux 操作系统中的命令实际上是编译好的可执行程序,转载 2017-08-18 22:39:29 · 1176 阅读 · 0 评论 -
全面深入分析TCP的TIME_WAIT和CLOSE_WAIT(上)
你遇到过TIME_WAIT的问题吗?我相信很多都遇到过这个问题。一旦有用户在喊:网络变慢了。第一件事情就是,netstat -a | grep TIME_WAIT | wc -l 一下,哎呀妈呀,几千个TIME_WAIT。然后,做的第一件事情就是:打开Google或者Bing,输入关键词:too many time wait。一定能找到解决方案,而排在最前面转载 2017-07-05 17:43:37 · 5768 阅读 · 1 评论 -
Linux系统的启动流程
图文讲述开机流程关于linux系统的启动流程可以分为以下步骤:POST(加电自检)–>加载BIOS(Basic Input/Outpu System)–>确定启动设备(Boot sequence)、加载Boot Loader–>加载内核(kernel)初始化initrd–>运行/sbin/init初始化系统–>打印用户登录提示符下面让我们逐步剖析说明系统启动过程转载 2017-07-05 17:39:53 · 779 阅读 · 0 评论 -
Linux开机启动过程分析
开机过程,需要了解。整理给大家。开机过程指的是从打开计算机电源直到LINUX显示用户登录画面的全过程。分析LINUX开机过程也是深入了解LINUX核心工作原理的一个很好的途径。启动第一步--加载BIOS当 你打开计算机电源,计算机会首先加载BIOS信息,BIOS信息是如此的重要,以至于计算机必须在最开始就找到它。这是因为BIOS中包含了CPU的相关 信息、设转载 2017-07-05 17:36:13 · 670 阅读 · 0 评论 -
linux深入解析分段机制
先对分段机制中必须用到的一些名词作一个解释:段选择符:又称端选择子,是段的一个16位标识符。它并不直接指向段,而是指向段选择符表中定义段的段描述符。它有三个字段内容:请求特权级RPL(Request Privilege Level)、表指示标志TI(Table Index)、索引值(Index)段描述符:段描述符石GDT和LDT表中的一个数据结构项,用来向处理器提供一个转载 2016-03-15 18:27:27 · 4593 阅读 · 0 评论 -
Linux 内核中断内幕
本文对中断系统进行了全面的分析与探讨,主要包括中断控制器、中断分类、中断亲和力、中断线程化与 SMP 中的中断迁徙等。首先对中断工作原理进行了简要分析,接着详细探讨了中断亲和力的实现原理,最后对中断线程化与非线程化中断之间的实现机理进行了对比分析。什么是中断Linux 内核需要对连接到计算机上的所有硬件设备进行管理,毫无疑问这是它的份内事。如果要管理这些设备,首先得和它们互转载 2016-03-16 18:00:50 · 2457 阅读 · 0 评论 -
linux深入分析进程调度
本文从 Linux 2.4 调度系统的缺陷入手,详细分析了 Linux 2.6 调度系统的原理和实现细节,并对与调度系统相关的负载平衡、NUMA 结构以及实时性能进行了分析和评价。1. 前言Linux 的市场非常广阔,从桌面工作站到低端服务器,它都是任何商用操作系统的有力竞争对手。目前,Linux 正全力进军嵌入式系统和高端服务器系统领域,但它的技术缺陷限制了它的竞争力:缺乏对转载 2016-03-04 10:50:59 · 4618 阅读 · 0 评论 -
提高 Linux 上 socket 性能
使用 Sockets API,我们可以开发客户机和服务器应用程序,它们可以在本地网络上进行通信,也可以通过 Internet 在全球范围内进行通信。与其他 API 一样,您可以通过一些方法使用 Sockets API,从而提高 Socket 的性能,或者限制 Socket 的性能。本文探索了 4 种使用 Sockets API 来获取应用程序的最大性能并对 GNU/Linux® 环境进行优化从转载 2016-01-25 11:24:54 · 9569 阅读 · 1 评论 -
通过 ulimit 改善系统性能
概述系统性能一直是一个受关注的话题,如何通过最简单的设置来实现最有效的性能调优,如何在有限资源的条件下保证程序的运作,ulimit 是我们在处理这些问题时,经常使用的一种简单手段。ulimit 是一种 linux 系统的内键功能,它具有一套参数集,用于为由它生成的 shell 进程及其子进程的资源使用设置限制。本文将在后面的章节中详细说明 ulimit 的功能,使用以及它的影响,并以具体的转载 2016-01-25 10:12:17 · 6794 阅读 · 0 评论 -
tar 解压缩命令
tar 解压缩命令tar-c: 建立压缩档案-x:解压-t:查看内容-r:向压缩归档文件末尾追加文件-u:更新原压缩包中的文件这五个是独立的命令,压缩解压都要用到其中一个,可以和别的命令连用但只能用其中一个。下面的参数是根据需要在压缩或解压档案时可选的。-z:有gzip属性的-j:有bz2属性的-Z:有compress属性的-v:显示所有过程-O转载 2014-04-05 15:43:45 · 1037 阅读 · 0 评论 -
linux 定时机制 Tickless
Tickless 机制是Linux 内核中引入的新定时机制 摘 要:Tickless 机制是Linux 内核中引入的新定时机制,这一机制能够降低系统开销,并为高精度定时提供了实现基础。本文将对这一机制的原理进行分析,归纳出基本模型,最后提出一种全新的具有一定普遍适用性的tickless 实现方法。测试结果表明,这一新方法能够降低嵌入式系统能耗并提高操作系统定时精度。转载 2013-09-01 19:57:01 · 7951 阅读 · 0 评论 -
linux内核中的HZ介绍
时钟中断由系统定时硬件以周期性的间隔产生,这个间隔由内核根据 HZ 值来设定,HZ 是一个体系依赖的值,在 中定义或该文件包含的某个子平台相关文件中。作为通用的规则,即便如果知道 HZ 的值,在编程时应当不依赖这个特定值,而始终使用HZ。对于当前版本,我们应完全信任内核开发者,他们已经选择了最适合的HZ值,最好保持 HZ 的默认值。对用户空间,内核HZ几乎完全隐藏,用户 HZ 始终扩展为 10转载 2013-09-01 20:58:21 · 23309 阅读 · 0 评论 -
处理机调度FAQ
处理机调度学习指导: 本章所述的“中断”包括trap、SVC、fault等所有非常规程序转移,中断使操作系统获得控制权,并为实施处理机切换和多道程序设计提供了必要条件。也正因为中断与处理机调度之间密不可分的关系,我们将中断与处理机调度作为一个独立的完整章来讲授。读者应当注意,中断响应后系统首先处理中断事件,然后才考虑处理机的重新分派;当有中断嵌套发生时,只有在返回至最上层转载 2013-09-01 20:53:11 · 2678 阅读 · 0 评论