
linux
文章平均质量分 91
u010154760
这个作者很懒,什么都没留下…
展开
-
libc、glibc与gcc
转http://blog.163.com/dragon_sjl@126/blog/static/100473339201107101517380/ 1、gcc(gnu collect compiler)是一组编译工具的总称。它主要完成的工作任务是“预处理”和“编译”,以及提供了与编译器紧密相关的运行库的支持,如libgcc_s.so、libstdc++.so等。Linux系转载 2015-04-26 20:00:45 · 1020 阅读 · 0 评论 -
linux线程点滴
1、(http://bbs.youkuaiyun.com/topics/330224117)Linux其实是没有线程的概念,所谓的线程不过是一个轻量级的进程内核线程拥有 进程描述符、PID、进程正文段、核心堆栈用户进程拥有 进程描述符、PID、进程正文段、核心堆栈 、用户空间的数据段、堆栈、堆用户线程拥有 进程描述符、PID、进程正文段、核心堆栈,用户空间的堆栈,同父进程共享用户空间的数据原创 2015-04-27 16:52:33 · 1044 阅读 · 0 评论 -
linux的线程模型:2.6是个分界点
轻量级进程LWP 既然称作轻量级进程,可见其本质仍然是进程,与普通进程相比,LWP与其它进程共享所有(或大部分)逻辑地址空间和系统资源,一个进程可以创建多个LWP,这样它们共享大部分资源;LWP有它自己的进程标识符,并和其他进程有着父子关系;这是和类Unix操作系统的系统调用vfork()生成的进程一样的。LWP由内核管理并像普通进程一样被调度。Linux内核是支持LWP的典型例子。转载 2015-04-27 15:08:41 · 1635 阅读 · 0 评论 -
linux的线程模型:2.6是个分界点
轻量级进程LWP 既然称作轻量级进程,可见其本质仍然是进程,与普通进程相比,LWP与其它进程共享所有(或大部分)逻辑地址空间和系统资源,一个进程可以创建多个LWP,这样它们共享大部分资源;LWP有它自己的进程标识符,并和其他进程有着父子关系;这是和类Unix操作系统的系统调用vfork()生成的进程一样的。LWP由内核管理并像普通进程一样被调度。Linux内核是支持LWP的典型例子。转载 2015-04-27 17:12:45 · 1677 阅读 · 0 评论 -
Linux 进程栈和线程栈的区别
注:本文所涉及的环境为Linux, 下文讨论的栈跟内核栈,没有任何的关系,关于内核栈,请参考《深入Linux内核架构》中的2.4.1 进程复制这里有如下几个问题,线程栈的空间是开辟在那里的? 线程栈之间可以互访吗?为什么在使用pthread_attr_setstack函数时,需要设置栈的大小,而进程task_struct的 mm_struct *mm 成员中却并没有却并没有stack_si转载 2015-04-27 16:03:05 · 575 阅读 · 0 评论 -
Linux线程 之 线程 线程组 进程 轻量级进程(LWP)
Thread Local Storage,线程本地存储,大神Ulrich Drepper有篇PDF文档是讲TLS的,我曾经努力过三次尝试搞清楚TLS的原理,均没有彻底搞清楚。这一次是第三次,我沉浸glibc的源码和kernel的源码中,做了一些实验,也有所得。对Linux的线程有了进一步的理解。 线程是有栈的,我们知道,普通的一个进程,它的栈空间是8M,我们可以通过ulmit -a查看转载 2015-04-27 16:08:38 · 465 阅读 · 0 评论 -
linux下fork()函数的实现
Linux通过clone()系统调用实现fork()。这个调用通过一系列的参数标志来指明父,子进程需要共享的资源。fork(),vfork()和__clone()库函数都根据各自需要的参数标志去调用clone().然后由clone()去调用do_fork(). do_frok完成了创建中的大部分工作,它的定义在ker/frok.c文件中。该函数调用copy_process()的函数,然后转载 2015-04-27 17:14:03 · 711 阅读 · 0 评论 -
linux多线程pthread
linux多线程threadjoinnulllibrary1.Linux线程的发展 早在LINUX2.2内核中。并不存在真正意义上的线程,当时Linux中常用的线程pthread实际上是通过进程来模拟的,也就是同过fork来创建“轻”进程,并且这种轻进程的线程也有个数的限制:最多只能有4096和此类线程同时运行。 2.4内核消除了个数上的限制,并且允许在系统运行中动转载 2015-04-27 16:14:13 · 468 阅读 · 0 评论 -
Linux下获取线程TID的方法——gettid()
如何获取进程的PID(process ID)?可以使用:#include pid_t getpid(void); 通过查看头文件说明,可以得到更详细的信息:find /usr/include -name unistd.h /usr/include/asm/unistd.h /usr/include/bits/unis转载 2015-04-27 16:16:50 · 687 阅读 · 0 评论 -
进程与线程栈大小的调整(精)
摘要 通过ulimit设置及可用的Pthread库接口来调整进程或线程的运行栈的大小,以改善嵌入式中内存的使用。线程 栈大小 ulimit pthread目录[-]问题现象现象分析问题现象首先看一个现象,最近在嵌入式项目开发中发现的,下面是设备的内存总量及使用:总量是24M左右,项目主程序大小1M不到,但是在默认的转载 2015-04-27 16:39:05 · 8834 阅读 · 5 评论 -
Linux内核模块编程
一个项目要做基于Linux的设备驱动开发,其实就是做Ophone的移植工作。刚找了本Linux设备驱动来学习学习。首先就是学习Linux的模块编程,照着书上的例子实现Hello.ko也经历一番波折,凡事只有自己亲自尝试过,才知道个中细节如何啊。以下记录我完成这个简单模块的编写,加载,卸载的全过程及要注意的地方。在任意一个地方创建一个hello.c文件,里面就写如下内容:/* h转载 2015-04-28 10:55:42 · 410 阅读 · 0 评论 -
linux进程的地址空间,核心栈,用户栈,内核线程
地址空间:32位linux系统上,进程的地址空间为4G,包括1G的内核地址空间,和3G的用户地址空间。内核栈:进程控制块task_struct中保存了2个page大小的信息。为什么每一个进程都是用各自的内核栈呢?引用(http://hi.baidu.com/iruler/blog/item/0c3363f377ccc5c90a46e0转载 2015-05-12 22:48:42 · 1134 阅读 · 0 评论 -
内核 current宏解析
在内核中,可以通过current宏来获得当前执行进程的task_struct指针。现在来简要分析以下: 最原始的定义如下: #define current get_current() #define get_current() (current_thread_info()->task) 可以看出,current调用了 current_thread_info函数转载 2015-05-12 22:48:35 · 4520 阅读 · 0 评论 -
从失败的 Linux 引导中恢复
使用 GRUB 2 的功能在最糟的情况下启动系统当您的 Linux® 计算机在执行内核升级、磁盘更换或其他系统更改后无法引导时,您并不是孤立无援的。Grand Unified Bootloader (GRUB) 提供了一些方法来控制引导过程和恢复。或者,在必要的时候,您使用外部工具创建的紧急引导磁盘可能会派上用场。了解可帮助您在存在问题的情形下引导系统的一些过程和 GRUB转载 2015-05-12 22:16:01 · 541 阅读 · 0 评论 -
Linux 快速清屏快捷键
以前我们经常使用 clear,或者 reset 甚至使用系统别名如:[root@localhost ~]$ alias cls='clear'[root@localhost ~]$ cls来清理屏幕有没有其他快捷方式呢?Yes!!!那就是:Ctrl+L附:当我们使用vi/vim编辑文件时,如果发现屏幕显示有些混乱,也可以按Ctrl+L来使屏幕转载 2015-06-25 09:57:22 · 17878 阅读 · 0 评论 -
堆空间和栈空间大小
我们知道,程序运行时在内存中主要有代码段、数据段、堆栈段(堆空间和栈空间)、进程头、动态链接库等区域。 其中数据使用到的:数据段:静态内存空间,其中数据的总大小和初始值在编译时确定,数据在整个程序运行时一直存在。栈空间:自动内存空间,其中数据的大小在编译时确定,数据的分配和释放也由编译器在函数进入和退出时插入指令完成,数据生命周期和函数一样。堆空间:动态(手动)内存空间,其中数转载 2015-04-27 16:49:37 · 3896 阅读 · 0 评论 -
关于Linux的进程和线程
什么是进程直观点说,保存在硬盘上的程序运行以后,会在内存空间里形成一个独立的内存体,这个内存体有自己的地址空间,有自己的堆,上级挂靠单位是操作系统。操作系统会以进程为单位,分配系统资源,所以我们也说,进程是资源分配的最小单位。什么是线程线程存在与进程当中,是操作系统调度执行的最小单位。说通俗点,线程就是干活的。进程和线程的区别转载 2015-04-27 16:49:20 · 413 阅读 · 0 评论 -
Linux内核策略介绍学习笔记
Linux内核策略介绍学习笔记阅读目录内核的运行时间进程和线程的区别进程调度工具主要内容硬件策略CPU进程调度、系统调用、中断内存内存管理外存文件IO网络协议栈其他时间管理进程转载 2015-04-27 16:41:49 · 972 阅读 · 0 评论 -
编译链接------Linux环境下c语言静态链接库和动态链接库创建和使用
库有动态与静态两种,动态通常用.so为后缀,静态用.a为后缀。面对比一下两者: 静态链接库:当要使用时,连接器会找出程序所需的函数,然后将它们拷贝到执行文件,由于这种拷贝是完整的,所以一旦连接成功,静态程序库也就不再需要了。动态库而言:某个程序在运行中要调用某个动态链接库函数的时候,操作系统首先会查看所有正在运行的程序,看在内存里是否已有此库函数的拷贝了。如果有,则让转载 2015-04-26 20:48:24 · 4246 阅读 · 0 评论 -
linux内核设计与实现的读书笔记1 -内核开发头文件
《linux内核设计与实现》第二章15-16页:刚开始看的时候对上面所说的“内核不能链接使用标准c函数库”有些困惑,下面对其说明:首先:linux内核目录树中的include目录下的内容是内核头文件,我们看到内核源码中使用的都是这些头文件,它们不是标准c函数库的头文件,而是在内核中重新编写的c库函数;而我们在编译器环境(比如gcc)下include的是glicb库,这个是G转载 2015-04-26 20:29:29 · 500 阅读 · 0 评论 -
关于libc和glibc
libc是Linux下的ANSI C的函数库,glibc是gnu发布的libc库。(1)从(http://bbs.youkuaiyun.com/topics/390595998?page=1#post-395610878)二楼的回答:“标准库是一个标准glibc是标准库的一个实现kernel没有使用C库如果我们编写一个用户级的C程序,那么我们到底是用libc还是glibc中的库原创 2015-04-26 20:52:52 · 1272 阅读 · 0 评论 -
/etc/rc.d/rc.local linux启动自动开启某些服务
linux脚本oracleweb开发工作服务器/etc/rc.d/rc.local似乎是很多linux系统管理员的偏爱,因为凡是需要随系统自动启动的服务、程序等,只要系统没有提供Sys V风格的启动脚本,就把这些需求都塞到/etc/rc.d/rc.local。当然,绝大部分情况下,你会发现这一切都工作得很正常,看上去也很美好。不过,当你遇到了一些诡异的问题的时候,也许你应该好好的去看看转载 2015-04-25 23:03:15 · 1023 阅读 · 0 评论 -
linux中/etc/rc.d/rc.local和/etc/rc.local这两个文件有什么区别
一样的,只不过是为了版本兼容的问题(由于很多不同的linux发行版使用的文件架构并不相同,故采用链接文件的方式制造了一个副本),建造的一个连接文件,用来对原始文件进行副本操作,你修改其中一个,另外的一个也会发生变化,不信你可以试试。来源:http://zhidao.baidu.com/link?url=bIA38Slp-g2Bob4VDuTSVSSKLtl99cuiMrl4km转载 2015-04-25 23:01:47 · 4233 阅读 · 0 评论 -
Linux 中 rc.local、init.d、rc.x、init 这几个文件(夹)各有什么作用?启动执行的脚本应该均放在 rc.local 中吗?
这个问题涉及到Linux初始化init系统,RHEL 5为SysVinit,RHEL 6为Upstart,RHEL 7为Systemd,为更好地解释这个问题,以下选取RHEL 5.x进行说明。如流程图所示,RHEL的启动过程按步骤大致可以分为:POST加电自检-->BIOS(Boot Sequence)-->加载对应引导上的MBR(bootloader) -->主引导设置加载其Boot转载 2015-04-25 22:59:27 · 1568 阅读 · 0 评论 -
UNIX文件权限详解(尤其是SUID和SGID)
目录(?)[+]SUID - UNIX下关于文件权限的表示方法和解析SUIDUNIX下可以用ls -l 命令来看到文件权限。用ls命令所得到的表示法的格式是类似这样的:-rwxr-xr-x 。下面解析一下格式所表示的意思,这种表示方法一共有十位: 9 8 7 6 5 4 3 2 1 0 - r w x r - x r - x 第9位表示文转载 2015-04-25 23:12:50 · 3098 阅读 · 0 评论 -
/etc/rc.d/rc与/etc/rc.d/init.d的关系介绍
在这里先解释一下 /etc/rc.d/init.d 里面放的都是什么东西。这个目录存放的是一些脚本,一般是Linux以rpm包安装时设定的一些服务的启动/关闭脚本。系统在安装时装了好多rpm包,这里面就有很多对应的脚本。执行这些脚本可以用来启动、停止、重启这些服务前面说到,/etc/rc.d/init.d这个目录下的脚本就类似与windows中的注册表,在系统启动的时候执行转载 2015-04-27 10:14:16 · 641 阅读 · 0 评论 -
Linux写时拷贝技术(copy-on-write)
COW技术初窥: 在Linux程序中,fork()会产生一个和父进程完全相同的子进程,但子进程在此后多会exec系统调用,出于效率考虑,linux中引入了“写时复制“技术,也就是只有进程空间的各段的内容要发生变化时,才会将父进程的内容复制一份给子进程。 那么子进程的物理空间没有代码,怎么去取指令执行exec系统调用呢? 在fork之后exec之转载 2015-04-27 13:48:36 · 527 阅读 · 0 评论 -
Linux进程、线程模型,LWP,pthread
一.定义关于进程、轻量级进程、线程、用户线程、内核线程的定义,这个很容易找到,但是看完之后你可以说你懂了,但实际上你真的明白了么?在现代操作系统中,进程支持多线程。进程是资源管理的最小单元;而线程是程序执行的最小单元。一个进程的组成实体可以分为两大部分:线程集合和资源集合。进程中的线程是动态的对象;代表了进程指令的执行。资源,包括地址空间、打开的文件、用户信息等等,由进程内的线程共享。线程转载 2015-04-27 15:04:13 · 1454 阅读 · 0 评论 -
浅析 Linux 初始化 init 系统,第 1 部分: sysvinit
从 sysvinit 到 systemd近年来,Linux 系统的 init 进程经历了两次重大的演进,传统的 sysvinit 已经淡出历史舞台,新的 init 系统 UpStart 和 systemd 各有特点,而越来越多的 Linux 发行版采纳了 systemd。本文简要介绍了这三种 init 系统的使用和原理,每个 Linux 系统管理员和系统软件开发者都应该了解转载 2015-04-27 10:50:00 · 549 阅读 · 0 评论 -
Linux线程之线程栈
我们接上一篇继续学习,这一篇的重点放在线程栈上。 我们用过pthread_create接口,也用过pthread_self接口,请看manual中的声明: #include pthread.h> int pthread_create(pthread_t *thread, const pthread_attr_t *attr,转载 2015-04-27 16:57:43 · 1009 阅读 · 0 评论 -
浅析Linux线程的创建
线程进程Linux创建实现目录(?)[+] 本文首先使用了接口pthread_create创建一个线程,并用strace命令追踪了接口pthread_create创建线程的步骤以及涉及到的系统调用,然后讨论了Linux中线程与进程关系,最后概述了为了实现POSIX线程,Linux内核所做的修改。 使用pthread_create创建线程转载 2015-04-27 15:54:01 · 584 阅读 · 0 评论 -
内核线程、轻量级进程、用户线程
在现代操作系统中,进程支持多线程。进程是资源管理的最小单元;而线程是程序执行的最小单元。一个进程的组成实体可以分为两大部分:线程集合资源集。进程中的线程是动态的对象;代表了进程指令的执行。资源,包括地址空间、打开的文件、用户信息等等,由进程内的线程共享。线程有自己的私有数据:程序计数器,栈空间以及寄存器。Why Thread?(传统单线程进程的缺点)1. 现实中有很多需要并发处理的任转载 2015-04-27 16:28:34 · 389 阅读 · 0 评论 -
Linux 线程实现机制分析
自从多线程编程的概念出现在 Linux 中以来,Linux 多线应用的发展总是与两个问题脱不开干系:兼容性、效率。本文从线程模型入手,通过分析目前 Linux 平台上最流行的 LinuxThreads 线程库的实现及其不足,描述了 Linux 社区是如何看待和解决兼容性和效率这两个问题的。3 评论:杨沙洲 (pubb@163.net)国防科技大学计算机学院2003转载 2015-04-27 10:57:59 · 2391 阅读 · 0 评论