自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

ctthuangcheng

自学成才。。。。加油!

  • 博客(78)
  • 资源 (4)
  • 收藏
  • 关注

原创 suse 11 root密码重新设置

1.  启动grub时候选择 Failsafe下面的“boot option“内容全部删除,写入init=/bin/bash,进入单用户模式。  2. 稍等会出现命令行  (none)#:  #mount -o remount, rw /   //根文件系统重新mount为可读写,有了读写权限后就可以通过passwd命令修改密码了  #cd /usr/bin  #pas

2013-04-25 16:01:46 2726

转载 Linux/Unix 编程中 POSIX 函数的线程安全问题

线程安全介绍在目前的计算机科学中,线程是操作系统调度的最小单元,进程是资源分配的最小单元。在大多数操作系统中,一个进程可以同时派生出多个线程。这些线程独立执行,共享进程的资源。在单处理器系统中,多线程通过分时复用技术来技术,处理器在不同的线程间切换,从而更高效地利用系统 CPU资源。在多处理器和多核系统中,线程实际上可以同时运行,每个处理器或者核可以运行一个线程,系统的运算能力相对于单线程

2013-04-19 22:58:52 1660

转载 Linux/Unix编程中的线程安全问题

线程主要由控制流程和资源使用两部分构成,因此一个不得不面对的问题就是对共享资源的访问。为了确保资源得到正确的使用,开发人员在设计编写程序时需要考虑避免竞争条件和死锁,需要更多地考虑使用线程互斥变量。判断一个函数是否线程安全不是一件很容易的事情。但是读者可以通过下面这几条确定一个函数是线程不安全的。 a, 函数中访问全局变量和堆。b, 函数中分配,重新分配释放全局资源。c, 函数

2013-04-19 22:55:53 1468

转载 linux-多线程--面试题

刚无意中看到MoreWindows博主秒杀多线程面试题(http://blog.csdn.net/column/details/killthreadseries.html),第一篇就有他收集的面试题。那我就用来检验一下自己学的怎么样吧。    前面的选择题那些跳过,直接看最后的编程题。第三题(某培训机构的练习题):子线程循环 10 次,接着主线程循环 100 次,接着又

2013-04-19 22:51:16 3093

转载 Linux多线程编程(不限Linux)

——本文一个例子展开,介绍Linux下面线程的操作、多线程的同步和互斥。前言线程?为什么有了进程还需要线程呢,他们有什么区别?使用线程有什么优势呢?还有多线程编程的一些细节问题,如线程之间怎样同步、互斥,这些东西将在本文中介绍。我在某QQ群里见到这样一道面试题:是否熟悉POSIX多线程编程技术?如熟悉,编写程序完成如下功能:1)有一int型全局变量g_Flag初始值为0

2013-04-19 22:48:34 1119

转载 linux-多线程

一、什么是线程?      线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源。二、什么时候使用多线程?     当多个任务可以并行执行时,可以为每个任务启动一个线程。三、线程的

2013-04-19 22:46:30 1267

转载 Linux下的多线程编程

1 引言  线程(thread)技术早在60年代就被提出,但真正应用多线程到操作系统中去,是在80年代中期,solaris是这方面的佼佼者。传统的Unix也支持线程的概念,但是在一个进程(process)中只允许有一个线程,这样多线程就意味着多进程。现在,多线程技术已经被许多操作系统所支持,包括Windows/NT,当然,也包括Linux。  为什么有了进程的概念后,还要再引入线程呢?使用

2013-04-19 22:43:57 1059

转载 Linux多线程与同步

典型的UNIX系统都支持一个进程创建多个线程(thread)。在Linux进程基础中提到,Linux以进程为单位组织操作,Linux中的线程也都基于进程。尽管实现方式有异于其它的UNIX系统,但Linux的多线程在逻辑和使用上与真正的多线程并没有差别。 1. 多进程我们先来看一下什么是多线程。在Linux从程序到进程中,我们看到了一个程序在内存中的表示。这个程序的整个运行过程中,只有一

2013-04-19 22:40:55 1178

转载 Linux一个多线程的面试题

[html] view plaincopyint main(int argc, char *argv[])  {   int i;   for(i=0; i10; i++) fork();    while(1);  }  这段程序运行时,系统中存在多少个进程实例?每执行一次for循环里面的操作,父进程和子进程都会产生一个

2013-04-19 22:38:50 1394

转载 linux内核主要模块图

下图清楚的表示了linux内核的主要模块图。

2013-04-16 10:07:27 2623

转载 实模式与保护模式

1.实模式,又叫实地址模式,CPU完全按照8086的实际寻址方法访问从00000h--FFFFFh(1MB大小)的地址范围的内存,在这种模式下,CPU只能做单任务运行;寻址公式为:物理地址=左移4位的段地址+偏移地址,即:物理地址是由16位的段地址和16位的段内偏移地址组成的。2.保护模式,又叫内存保护模式,寻址采用32位段和偏移量,最大寻址空间4GB,在这种模式下,系统运行于多任务,设计

2013-04-16 09:56:01 1233

转载 Linux0.11内核--几种地址(逻辑地址、线性地址、物理地址)的含义

程序(进程)的虚拟地址和逻辑地址虚拟地址(virtual address)指程序产生的有段选择符和段内偏移两部分组成的地址。一个程序的虚拟地址空间有GDT映射的全地址空间和LDT映射的局部地址空间组成。逻辑地址(logical address)指程序产生的段内偏移地址。应用程序只与逻辑地址打交道,分段分页对应用程序来说是透明的。也就是说C语言中的&,汇编语言中的符号地址,C中嵌入式汇编

2013-04-16 09:50:03 1693

转载 Ubuntu 下安装LXR(linux源代码阅读工具)

1.安装apache2sudo apt-get install apache22.安装lxrglimpsesudo apt-get install lxr下载最新glimpse解压下载地址http://download.csdn.net/detail/yming0221/3076004 sh configuremake make install完成安装

2013-04-15 11:41:07 2518

转载 Linux0.11内核--内核态与用户态

内核态与用户态intel x86架构的CPU分Ring0-Ring3三种级别的运行模式,Ring0级别最高,Ring3最低。针对不同的 级别,有很多的限制,比如说传统的in ,out指令,就是端口的输入输出指令,在Ring0级下是可以用的,但在Ring3级下就不能用,你用就产生陷井,告诉你出错了,当然限制还有很多了,不只是这一点。

2013-04-15 11:38:22 1307

转载 进程的用户栈和内核栈

进程是程序的一次执行过程。用剧本和演出来类比,程序相当于剧本,而进程则相当于剧本的一次演出,舞台、灯光则相当于进程的运行环境。进程的堆栈每个进程都有自己的堆栈,内核在创建一个新的进程时,在创建进程控制块task_struct的同时,也为进程创建自己堆栈。一个进程 有2个堆栈,用户堆栈和系统堆栈;用户堆栈的空间指向用户地址空间,内核堆栈的空间指向内核地址空间。当进程在用户态运行时,CPU堆栈

2013-04-15 11:37:11 1666

转载 Linux0.11内核--进程的结束

进程的结束结束一个进程,就是要释放该进程所有的结构和资源,让系统从此之后再也感觉不到它的存在。如前面所说的,一个进程的结构包括:task[]数组中一项,指向了该进程的task_struct和内核堆栈所在页面;GDT中两项,一项是TSS描述符,一项是LDT描述符;若干页目录项和若干页表。一个进程拥有的资源包括:进程拥有的所有物理页面(包括页表和ta

2013-04-15 11:35:30 1296

转载 static,inline,volatile的作用

1、static (1)先来介绍它的第一条也是最重要的一条:隐藏。 当我们同时编译多个文件时,所有未加static前缀的全局变量和函数都具有全局可见性。为理解这句话,我举例来说明。我们要同时编译两个源文件,一个是a.c,另一个是main.c。下面是a.c的内容[cpp] view plaincopyprint?char a = 'A'; // g

2013-04-15 11:31:57 1128

转载 Linux 内核--fork()函数创建进程 (续)之copy_mem(int nr, struct task_struct *p)

本问分析基于Linux 0.11内核,转载请标明出处http://blog.csdn.net/yming0221/archive/2011/06/06/6528490.aspxcopy_mem(int nr, struct task_struct *p)函数是为进程设置段基址,限长,并复制页表。下面是其代码[cpp] view plaincopyprint?//

2013-04-15 11:29:44 1394

转载 Linux 内核--fork()函数创建进程

本文分析基于Linux 0.11内核,转载请表明出处http://blog.csdn.net/yming0221/archive/2011/06/05/6527337.aspx  Linux在move_to_user_mode()之后,进程0通过fork()产生子进程实际就是进程1(init进程)。其中fork()是通过内嵌汇编的形式给出[cpp] view p

2013-04-15 11:27:23 1505

转载 Linux 内核--任务0的运行(切换到用户模式)move_to_user_mode

本文分析基于Linux 0.11内核,转载请标明出处,http://blog.csdn.net/yming0221/archive/2011/06/01/6459119.aspx在main.c的程序中,当设备初始化完毕后,程序将从内核模式切换到用户模式,也就是所说的任务0,执行fork()函数(该函数使用内嵌的汇编,防止函数调用弄乱堆栈,造成写时复制COPY_ON_WRITE)切换到用户堆

2013-04-15 11:24:35 1897

转载 Linux 内核--任务0的调度切换

本文分析基于Linux 0.11内核,转载请标明出处http://blog.csdn.net/yming0221/archive/2011/06/09/6533865.aspx。  main.c中在move_to_user_mode()之后,切换到用户模式下运行,task0然后执行fork()创建进程task1来执行init()函数。init()函数如下:[cpp]

2013-04-15 11:21:53 1192

转载 Linux添加系统调用

本文基于Linux 2.4.26内核,GCC 3.2.2添加系统调用mycall(int num)增加系统调用只修改/usr/src/linux-2.4.29/include/asm-i386/unistd.h和arch/i386/kernel/entry.S,系统调用函数一般在kernel/sys.c中,这里把增加的系统调用代码也加入这个文件中。 1.修改kernel/sys.c

2013-04-15 11:20:29 1185

转载 Linux 内核编译 添加系统调用

主机:Ubuntu 11.04现在内核版本:2.6.38.9编译的目标内核版本:2.6.39 编译成功后修改内核,添加个系统调用,并重新编译内核,编写C程序,调用自己添加的系统调用 首先编译内核1、从下载Linux内核版本2.6.392、解压内核到任意目录(这里不用必须解压到/usr/src/下,Linus也说不必那样做,况且自己也试验成功)3、进入内核目录

2013-04-15 11:19:18 1637

转载 关于vmlinux,vmlinuz,bzImage,zImage的区别和联系

vmlinuz是可引导的、压缩的内核。“vm”代表“Virtual Memory”。Linux 支持虚拟内存,不像老的操作系统比如DOS有640KB内存的限制。Linux能够使用硬盘空间作为虚拟内存,因此得名“vm”。vmlinuz是可执行的Linux内核,它位于/boot/vmlinuz,它一般是一个软链接。 vmlinuz的建立有两种方式。一是编译内核时通过“make zImage”创

2013-04-15 11:18:21 1318

转载 linux进程调度浅析

操作系统要实现多进程,进程调度必不可少。有人说,进程调度是操作系统中最为重要的一个部分。我觉得这种说法说得太绝对了一点,就像很多人动辄就说"某某函数比某某函数效率高XX倍"一样,脱离了实际环境,这些结论是比较片面的。 而进程调度究竟有多重要呢? 首先,我们需要明确一点:进程调度是对TASK_RUNNING状态的进程进行调度(参见《linux进程状态浅析》)。如果进程不可执行(正在睡眠或

2013-04-15 11:15:27 1034

转载 内核中断,异常,抢占总结篇

一、基本概念中断分为同步中断和异步中断。同步中断是由CPU控制单元产生的,“同步”是指只有在一条指令执行完毕后,CPU才会发出中断,而不是发生在代码指令执行期间,比如系统调用。而异步中断是由其他硬件设备依照CPU时钟信号产生的,即意味着中断能够在指令之间发生,例如键盘中断。按照Intel的微处理器手册,同步中断和异步中断也分别称为异常(或者软件中断)和中断。中断大家都比较熟悉,是由硬件设备

2013-04-15 11:13:52 1215

转载 深入理解linux内核自旋锁

最近在内核频繁使用了自旋锁,自旋锁如果使用不当,极易引起死锁,在此总结一下。自旋锁是一个互斥设备,它只有两个值:“锁定”和“解锁”。它通常实现为某个整数值中的某个位。希望获得某个特定锁得代码测试相关的位。如果锁可用,则“锁定”被设置,而代码继续进入临界区;相反,如果锁被其他人获得,则代码进入忙循环(而不是休眠,这也是自旋锁和一般锁的区别)并重复检查这个锁,直到该锁可用为止,这就是自旋的过程。“

2013-04-15 11:09:56 1199

转载 软中断小结

内核处理的任务中有的不是那么紧迫的,在必要的时间可以把它们延迟一段时间,这就是软中断形成的背景。这对于哪些期望它们的中断能在几毫秒内得到处理的“急迫”应用来说是非常重要的。由此,硬中断负责处理紧急的任务,软中断负责处理不是那么紧迫的任务。Linux 2.6内核提供了两种非紧迫、可中断函数:所谓的延迟函数(包括软中断和tasklets)和通过工作队列来执行的函数。软中断和tasklet有密切

2013-04-15 11:09:04 1091

转载 Linux 中断总结

Linux中断分为硬中断和软中断。硬中断是由硬件设备触发的中断。I/O设备要产生硬中断时,会由中断控制器发送一个电信号,内核的设备驱动程序接收到这个电信号,就会调用相应的中断处理函数对这个中断进行处理。硬中断可以在任何时刻到来,它代表的系统必须马上处理的紧急任务,也简称为中断的上半部,与此对应的是中断下半部(buttom half),也称为软中断,代表的系统不必马上处理的、没那么紧急的任务。

2013-04-15 11:07:46 1100

转载 在用户空间发生中断时,上下文切换的过程

先引用一篇博文,再总结一下相关问题。所谓上下文切换,实质就是寄存器堆的切换过程。这其中一部分需要硬件来切换,一部分需要软件来处理。当在用户空间发生中断时,首先由 x86 CPU 从硬件角度进行处理,然后才是 linux 内核的处理。当中断处理完毕,返回到用户空间时,最后的步骤也是交给 CPU 硬件来处理的。1、  X86 CPU 对中断的硬件支持CPU 从中断控制器取得中断向量

2013-04-15 11:06:40 1557

转载 Linux内核抢占实现机制分析

Linux内核抢占实现机制分析【摘要】本文详解了Linux内核抢占实现机制。首先介绍了内核抢占和用户抢占的概念和区别,接着分析了不可抢占内核的特点及实时系统中实现内核抢占的必要性。然后分析了禁止内核抢占的情况和内核抢占的时机,最后介绍了实现抢占内核所做的改动以及何时需要重新调度。【关键字】内核抢占,用户抢占,中断, 实时性,自旋锁,抢占时机,调度时机,schedule,preempt co

2013-04-15 11:03:20 1248

转载 【嵌入式Linux学习七步曲之第五篇 Linux内核及驱动编程】Linux内核抢占实现机制分析

Linux内核抢占实现机制分析【摘要】本文详解了Linux内核抢占实现机制。首先介绍了内核抢占和用户抢占的概念和区别,接着分析了不可抢占内核的特点及实时系统中实现内核抢占的必要性。然后分析了禁止内核抢占的情况和内核抢占的时机,最后介绍了实现抢占内核所做的改动以及何时需要重新调度。 【关键字】内核抢占,用户抢占,中断, 实时性,自旋锁,抢占时机,调度时机,schedule,preempt

2013-04-15 11:00:12 1112

转载 Linux 2.6 内核定时器

一、定义:/include/linux/timer.h struct timer_list {struct list_head entry;unsigned long expires;void (*function)(unsigned long);unsigned long data;struct tvec_t_bas

2013-04-13 13:46:47 1330

转载 内核源码学习:伙伴算法

1.原理       Linux的伙伴算法把所有的空闲页面分为10个块组,每组中块的大小是2的幂次方个页面,例如,第0组中块的大小都为20 (1个页面),第1组中块的大小为都为21(2个页面),第9组中块的大小都为29(512个页面)。也就是说,每一组中块的大小是相同的,且这同样大小的块形成一个链表。   我们通过一个简单的例子来说明该算法的工作原理。   假设要求分配的块

2013-04-13 13:45:53 1837

转载 内存管理简介之Buddy算法和slab分配

1.Buddy算法linux对空闲内存空间管理采取buddy算法, Buddy算法:把内存中所有页面按照2^n划分,其中n=0~5,每个内存空间按1个页面、2个页面、4个页面、8个页面、16个页面、32个页面进行六次划分。划分后形成了大小不等的存储块,称为页面块,简称页块,包含一个页面的页块称为1页块,包含2个页面的称为2页块,依次类推。每种页块按前后顺序两两结合成一对Buddy“

2013-04-13 13:45:05 6316

转载 进程通信方式介绍

Linux下进程通信的八种方法:管道(pipe),命名管道(FIFO),内存映射(mapped memeory),消息队列(message queue),共享内存(shared memory),信号量(semaphore),信号(signal),套接字(Socket).(1) 管道(pipe):管道允许一个进程和另一个与它有共同祖先的进程之间进行通信;(2) 命名管道(FIFO):类似于管

2013-04-13 13:44:06 1706

转载 Linux内核--网络协议栈深入分析(五)--套接字的绑定、监听、连接和断开

本文分析基于Linux Kernel 3.2.1原创作品,转载请标明http://blog.csdn.net/yming0221/article/details/7996528更多请查看专栏http://blog.csdn.net/column/details/linux-kernel-net.html作者:闫明1、套接字的绑定创建完套接字服务器端会

2013-04-13 13:42:52 1701

转载 Linux内核--网络协议栈深入分析(四)--套接字内核初始化和创建过程

本文分析基于Linux Kernel 3.2.1原创作品,转载请标明http://blog.csdn.net/yming0221/article/details/7984238更多请查看专栏http://blog.csdn.net/column/details/linux-kernel-net.html作者:闫明1、系统初始化过程中会调用sock_init函数进行套

2013-04-13 13:41:12 1810

转载 Linux内核--网络协议栈深入分析(三)--BSD socket和传输层sock

本文分析基于Linux Kernel 3.2.1原创作品,转载请标明http://blog.csdn.net/yming0221/article/details/7979838更多请查看专栏http://blog.csdn.net/column/details/linux-kernel-net.html作者:闫明Linux内核中协议族有INET协议族,U

2013-04-13 13:39:45 1749

转载 Linux内核--网络协议栈深入分析(二)--sk_buff的操作函数

本文分析基于Linux Kernel 3.2.1原创作品,转载请标明http://blog.csdn.net/yming0221/article/details/7972647更多请查看网络栈分析专栏http://blog.csdn.net/column/details/linux-kernel-net.html作者:闫明1、alloc_skb()函数

2013-04-13 13:38:12 1651

gdb调试程序

gdb调试

2013-05-29

gdb调试示例

gdb示例

2013-05-29

RFC792_ICMPO

RFC792_ICMPO,供大家参考学习,共同进步!

2013-04-09

libpcap编程-编写自己的网络嗅探程序

libpcap编程-编写自己的网络嗅探程序,供大家学习和参考。

2013-04-09

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除