转载-linux 2.6 进程总结
转载-linux 2.6 进程总结
进程、轻量级进程(LWP)、线程
进程:程序执行体,有生命期,用来分配资源的实体
线程:分配CPU的实体。
用户空间实现,一个线程阻塞,所有都阻塞。
内核实现,不会所用相关线程都阻塞。用LWP实现,用线程组表示这些线程逻辑上所属的进程。
进程描述符
进程描述符(简称pd, process descriptors),结构体是:task_struct
数据较多,存放在kenerl的动态内存空间。
pd的引用放在thread_info中,
thread_info与内核栈,放在一个8K空间(它的地址8K对齐)。内核程序使用的栈空间很小。
thread_info在底部,内核栈在顶部向下增长。
好处:多CPU时方便,每个CPU根据自己的栈指针就可以找到当前的pd (以后用current表示当前CPU运行的进程描述符)。
esp(内核栈指针)低8位置零,就是thread_info地址。
每进程有自己的thread_info, (分配释放函数: alloc_thread_info, free_thread_info)
描述符的内容
相关的ID (一个4元素数组)
进程ID (PID)
PID按创建顺序连续增长,到最大值后从最小值开始。
0号进程:交换进程(swapper)
有PID可用位图,表示那一个PID可用,至少占一个页。
线程组ID(tgid),用LWP实现多线程支持
多进程时,进程id,就是线程组id, 也就是组长的pid(LWP)。 getpid() 取的是线程组的id(tgid), 也是组长的pid.
单线程时,pid = gid。所以getpid,也是真正的pid.
进程组ID(pgrp)。
回话的ID(session).
组ID,都是组长的PID。FIXME: 但pb也有各组长的PID
线程组长:tgid
进程组长:signal->pgrp ,
会话长:signal->session
管理ID数据结构——哈希表管理 (利用id找到所用相关的pd,方便)。
一个哈希表数组(pid_hash),存放四个哈希表, 每一个表代表一类id (pid, tgid, pgrp, session)
每个哈希表的由数组(索引为哈希值)和二维链表(嵌入到进程描述符内的pids中)实现
相关文档:
1、总结背景
在linux系统下,如果你下载并安装了应用程序,很有可能在键入它的名称时出现“command not found”的提示内容。如果每次都到安装目标文件夹内,找到可执行文件来进行操作就太繁琐了。这涉及到环境变量PATH的设置问题,而PATH的设置也是在linux下定制环境变量的一个组成部分。本案例基于RedHat AS4讲 ......
环境软件版本介绍:
APACHE 2.0.59
PHP5.2.3
MYSQL5.0.45
GD-2.0.35
Zend Optimizer v3.3.0
......
作者:曹忠明,华清远见嵌入式学院讲师。
PCI是外围设备互联的简称(Peripheral Component Interconnect)的简称,作为一种通用的总线接口标准,他在计算机系统中得到了广泛的使用。PCI的速度能够达到132M/s。在这里简单的介绍一下 linux 下PCI驱动的实现。
在编写一个PCI驱动的时候我们先得确定系统中是否有我们的设备。� ......
我们知道,在linux下,我们用errno来查看API返回的错误码,并用strerror(errno)来获得错误信息。
而在windows下也有这的错误码,可以用GetLastError
来获得,在windows下,要获得错误码对应的信息就没有linux下那么方便了。
其获得方式可以参考《windows核心编程》。
但我们也可以用linux下的api来获得windows下的错误� ......
.tar
解包:tar xvf FileName.tar
打包:tar cvf FileName.tar DirName
(注:tar是打包,不是压缩!)
———————————————
.gz
解压1:gunzip FileName.gz
解压2: ......