
linux修炼
月黑风高云游诗人
uestclqy@foxmail.com
展开
-
条件变量pthread_cond_signal、pthread_cond_wait
pthread_cond_signal函数的作用是发送一个信号给另外一个正在处于阻塞等待状态的线程,使其脱离阻塞状态,继续执行.如果没有线程处在阻塞等待状态,pthread_cond_signal也会成功返回。但使用pthread_cond_signal不会有“惊群现象”产生,他最多只给一个线程发信号。假如有多个线程正在阻塞等待着这个条件变量的话,那么是根据各等待线程优先级的高低确定哪个线翻译 2017-05-03 15:45:44 · 843 阅读 · 0 评论 -
《操作系统真象还原》-阅读笔记(上)
第一章配置bochs,进入bochs simulator后一直是黑屏,原来默认是调试模式,需要输入C(continue)来让调试继续。第二章主讲MBR及进入MBR前的步骤 1.实模式只能访问1MB的内存空间。 2.BIOS在ROM中。 3.开机上电后CS:IP指向内存0xfff0,这里有个跳转语句,转到fe05b才是真正的BIOS程序,之后检测内存,显卡灯,建立数据结构,中断向量表和填写中断例原创 2017-06-27 16:17:58 · 2428 阅读 · 1 评论 -
epoll源码实现分析[整理]
转自http://www.360doc.com/userhome.aspx?userid=14513665&cid=3 epoll用法回顾先简单回顾下如何使用C库封装的3个epoll相关的系统调用。更详细的用法参见http://www.cnblogs.com/apprentice89/archive/2013/05/06/3063039.htmlint epoll_create(int size)转载 2017-06-29 20:46:45 · 498 阅读 · 0 评论 -
linux信号实现机制详解
1 信号本质 软中断信号(signal,又简称为信号)用来通知进程发生了异步事件。在软件层次上是对中断机制的一种模拟,在原理上,一个进程收到一个信号与处理器收到一个中断请求可以说是一样的。信号是进程间通信机制中唯一的异步通信机制,一个进程不必通过任何操作来等待信号的到达,事实上,进程也不知道信号到底什么时候到达。进程之间可以互相通过系统调用kill发送软中断信号。内核也可以因为内部事件转载 2017-06-21 20:47:18 · 1183 阅读 · 0 评论 -
linux线程之pthread_join和pthread_detach
转自http://www.cnblogs.com/chris-cp/p/3510167.html 在任何一个时间点上,线程是可结合的(joinable)或者是分离的(detached)。一个可结合的线程能够被其他线程收回其资源和杀死。在 被其他线程回收之前,它的存储器资源(例如栈)是不释放的。相反,一个分离的线程是不能被其他线程回收或杀死的,它的存储器资源在它终止时由系统自动释放。默认情况下,线程转载 2017-06-09 15:38:49 · 587 阅读 · 0 评论 -
poll、select和epoll的区别
poll、select和epoll的区别 select原理概述 调用select时,会发生以下事情: 1. 从用户空间拷贝fd_set到内核空间; 2. 注册回调函数__pollwait; 3. 遍历所有fd,对全部指定设备做一次poll(这里的poll是一个文件操作,它有两个参数,一个是文件fd本身,一个是当设备尚未就绪时调用的回调函数__pollwait,这个函数把设备自己转载 2017-06-28 17:31:44 · 533 阅读 · 0 评论 -
《操作系统真象还原》-阅读笔记(下)
第十一章任意进程的页目录表第0~767个页目录项属于用户空间,指向用户页表。第768~1023个页目录项指向内核页表。每创建一个新的用户进程,就将内核页目录项复制到用户进程的页目录表,其次需要把用户页目录表中最后一个页目录项更新为用户进程自己的页目录表的物理地址。 每个进程有自己单独的位图,存储在进程pcb中的userprog_vaddr中。 LDT 当前运行的任务,其LDT位于LDTR指向的原创 2017-06-28 16:46:36 · 2856 阅读 · 1 评论 -
进程的用户栈和内核栈
进程是程序的一次执行过程。用剧本和演出来类比,程序相当于剧本,而进程则相当于剧本的一次演出,舞台、灯光则相当于进程的运行环境。 进程的堆栈 每个进程都有自己的堆栈,内核在创建一个新的进程时,在创建进程控制块task_struct的同时,也为进程创建自己堆栈。一个进程 有2个堆栈,用户堆栈和系统堆栈;用户堆栈的空间指向用户地址空间,内核堆栈的空间指向内核地址空间。当进程在用户态运行时,CPU堆栈指转载 2017-06-07 11:37:52 · 3811 阅读 · 1 评论 -
Linux虚拟地址空间布局
Linux虚拟地址空间布局 在多任务操作系统中,每个进程都运行在属于自己的内存沙盘中。这个沙盘就是虚拟地址空间(Virtual Address Space),在32位模式下它是一个4GB的内存地址块。在Linux系统中, 内核进程和用户进程所占的虚拟内存比例是1:3,而Windows系统为2:2(通过设置Large-Address-Aware Executables标志也可为1:3)。这并不意味着内转载 2017-05-09 16:10:04 · 364 阅读 · 0 评论 -
linux共享内存原理剖析
linux共享内存原理剖析共享内存区域是被多个进程共享的一部分物理内存。如果多个进程都把该内存区域映射到自己的虚拟地址空间,则这些进程就都可以直接访问该共享内存区域,从而可以通过该区域进行通信。共享内存是进程间共享数据的一种最快的方法,一个进程向共享内存区域写入了数据,共享这个内存区域的所有进程就可以立刻看到其中的内容。这块共享虚拟内存的页面,出现在每一个共享该页面的进程的页表中。但是它不需要在所有转载 2017-05-08 16:41:14 · 3843 阅读 · 1 评论 -
操作系统为什么要分用户态和内核态
在CPU的所有指令中,有一些指令是非常危险的,如果错用,将导致整个系统崩溃。比如:清内存、设置时钟等。如果所有的程序都能使用这些指令,那么你的系统一天死机n回就不足为奇了。所以,CPU将指令分为特权指令和非特权指令,对于那些危险的指令,只允许操作系统及其相关模块使用,普通的应用程序只能使用那些不会造成灾难的指令。Intel的CPU将特权级别分为4个级别:RING0,RING1,RING2,RING3转载 2017-05-08 10:39:20 · 651 阅读 · 0 评论 -
《操作系统真象还原》-阅读笔记(中)
第七章操作系统是由中断驱动的。 中断分为外部中断和内部中断。 外部中断分为可屏蔽中断和不可屏蔽中断,内部中断分为软中断和异常。 外部中断 来自CPU外部的中断。 可屏蔽中断:通过INTR引脚进入CPU,外部设备如硬盘、网卡、打印机等发出的中断 CPU可以不理会,因为不会宕机。 Linux把中断分为上半部和下半部分开处理,把中断立即需要执行的部分划分到上半部,不紧急的部分划分到下半部。上原创 2017-06-27 23:07:24 · 1719 阅读 · 0 评论