随笔分类 -  操作系统

Linux Core Dump
摘要:当程序运行的过程中异常终止或崩溃,操作系统会将程序当时的内存状态记录下来,保存在一个文件中,这种行为就叫做Core Dump(中文有的翻译成“核心转储”)。我们可以认为 core dump 是“内存快照”,但实际上,除了内存信息之外,还有些关键的程序运行状态也会同时 dump 下来,例如寄存器信息(包括程序指针、栈指针等)、内存管理信息、其他处理器和操作系统状态和信息。core dump 对于编程人员诊断和调试程序是非常有帮助的,因为对于有些程序错误是很难重现的,例如指针异常,而 core dump 文件可以再现程序出错时的情景。Core Dump 名词解释在半导体作为电脑内存材料之前,电脑内 阅读全文

posted @ 2013-10-22 15:09 hazir 阅读(69406) 评论(2) 推荐(13) 编辑

Linux 系统中僵尸进程
摘要:Linux 系统中僵尸进程和现实中僵尸(虽然我也没见过)类似,虽然已经死了,但是由于没人给它们收尸,还能四处走动。僵尸进程指的是那些虽然已经终止的进程,但仍然保留一些信息,等待其父进程为其收尸。配图源自Flickr僵尸进程如何产生的?如果一个进程在其终止的时候,自己就回收所有分配给它的资源,系统就不会产生所谓的僵尸进程了。那么我们说一个进程终止之后,还保留哪些信息?为什么终止之后还需要保留这些信息呢?一个进程终止的方法很多,进程终止后有些信息对于父进程和内核还是很有用的,例如进程的ID号、进程的退出状态、进程运行的CPU时间等。因此进程在终止时,回收所有内核分配给它的内存、关闭它打开的所有文件 阅读全文

posted @ 2013-10-18 08:47 hazir 阅读(30808) 评论(8) 推荐(4) 编辑

Linux 内核进程管理之进程ID
摘要:Linux 内核使用task_struct数据结构来关联所有与进程有关的数据和结构,Linux 内核所有涉及到进程和程序的所有算法都是围绕该数据结构建立的,是内核中最重要的数据结构之一。该数据结构在内核文件include/linux/sched.h中定义,在Linux 3.8 的内核中,该数据结构足足有 380 行之多,在这里我不可能逐项去描述其表示的含义,本篇文章只关注该数据结构如何来组织和管理进程ID的。进程ID类型要想了解内核如何来组织和管理进程ID,先要知道进程ID的类型:PID:这是 Linux 中在其命名空间中唯一标识进程而分配给它的一个号码,称做进程ID号,简称PID。在使用 f 阅读全文

posted @ 2013-10-03 16:08 hazir 阅读(22358) 评论(7) 推荐(9) 编辑

Linux 下系统调用的三种方法
摘要:系统调用(System Call)是操作系统为在用户态运行的进程与硬件设备(如CPU、磁盘、打印机等)进行交互提供的一组接口。当用户进程需要发生系统调用时,CPU 通过软中断切换到内核态开始执行内核系统调用函数。下面介绍Linux 下三种发生系统调用的方法:通过 glibc 提供的库函数glibc 是 Linux 下使用的开源的标准 C 库,它是 GNU 发布的 libc 库,即运行时库。glibc 为程序员提供丰富的 API(Application Programming Interface),除了例如字符串处理、数学运算等用户态服务之外,最重要的是封装了操作系统提供的系统服务,即系统调用的 阅读全文

posted @ 2013-09-22 12:21 hazir 阅读(26152) 评论(1) 推荐(4) 编辑

内核探测工具systemtap简介
摘要:systemtap是内核开发者必须要掌握的一个工具,本文我将简单介绍一下此工具,后续将会有系列文章介绍systemtap的用法。什么是systemtap假如现在有这么一个需求:需要获取正在运行的 Linux 系统的信息,如我想知道系统什么时候发生系统调用,发生的是什么系统调用等这些信息,有什么解决方案呢?最原始的方法是,找到内核系统调用的代码,加上我们需要获得信息的代码、重新编译内核、安装、选择我们新编译的内核重启。这种做法对于内核开发人员简直是梦魇,因为一遍做下来至少得需要1个多小时,不仅破坏了原有内核代码,而且如果换了一个需求又得重新做一遍上面的工作。所以,这种调试内核的方法效率是极其底下 阅读全文

posted @ 2013-09-17 19:31 hazir 阅读(32927) 评论(0) 推荐(4) 编辑

Linux吃掉我的内存
摘要:在Windows下资源管理器查看内存使用的情况,如果使用率达到80%以上,再运行大程序就能感觉到系统不流畅了,因为在内存紧缺的情况下使用交换分区,频繁地从磁盘上换入换出页会极大地影响系统的性能。而当我们使用free命令查看Linux系统内存使用情况时,会发现内存使用一直处于较高的水平,即使此时系统并没有运行多少软件。这正是Windows和Linux在内存管理上的区别,乍一看,Linux系统吃掉我们的内存(Linux ate my ram),但其实这也正是其内存管理的特点。 free命令介绍 下面为使用free命令查看我们实验室文件服务器内存得到的结果,-m选项表示使用MB为单位:[root.. 阅读全文

posted @ 2013-07-16 22:23 hazir 阅读(11856) 评论(14) 推荐(6) 编辑

Linux 内核讨论课记录
摘要:以下为每周六实验室内核讨论课我所主讲的主要内容,在百度文库和CSDN下载频道中上传有我所讲的PPT原稿。现对以前做个补充,以后每次讲完之后就更新。9月29日星期六上午:主讲进程描述符结构体task_struct数据结构,由于task_struct这个结构体是系统感知进程存在的唯一标志,linux内核涉及进程和程序的所有算法都是围绕这个数据结构建立的,里面存在上百个字段,表示了进程的状态、标识符、进程之间的链接关系、进程调度相关的信息、时间和定时器信息、 文件系统信息、虚拟内存信息、与进程间通信相关信息等等等等。可以说进程描述符是我阅读Linux内核源代码的起点,很多概念都没有,因此无论是看书还 阅读全文

posted @ 2012-11-06 11:58 hazir 阅读(367) 评论(0) 推荐(0) 编辑

进程与线程的区别?
摘要:进程是什么?程序并不能单独运行,只有将程序装载到内存中,系统为它分配资源才能运行,而这种执行的程序就称之为进程。程序和进程的区别就在于:程序是指令的集合,它是进程运行的静态描述文本;进程是程序的一次执行活动,属于动态概念。在多道编程中,我们允许多个程序同时加载到内存中,在操作系统的调度下,可以实现并发地执行。这是这样的设计,大大提高了CPU的利用率。进程的出现让每个用户感觉到自己独享CPU,因此,进程就是为了在CPU上实现多道编程而提出的。有了进程为什么还要线程?进程有很多优点,它提供了多道编程,让我们感觉我们每个人都拥有自己的CPU和其他资源,可以提高计算机的利用率。很多人就不理解了,既然进 阅读全文

posted @ 2011-05-09 22:50 hazir 阅读(24985) 评论(8) 推荐(5) 编辑

一个代码可以创造一个世界,也可以毁灭一个世界!