易截截图软件、单文件、免安装、纯绿色、仅160KB

linux进程管理之进程创建

 所谓进程就是程序执行时的一个实例. 它是现代操作系统中一个很重要的抽象,我们从进程的生命周期:创建,执行,消亡来分析一下Linux上的进程管理实现.
一:前言
进程管理结构;
在内核中,每一个进程对应一个task.就是以前所讲的PCB.它的结构如下(include/linux/sched.h):
struct task_struct {
    volatile long state;   /* -1 unrunnable, 0 runnable, >0 stopped */
     void *stack;
     atomic_t usage;
     unsigned int flags;    /* per process flags, defined below */
     unsigned int ptrace;
 
     int lock_depth;        /* BKL lock depth */
     ……
     ……
}
由于这个结构包含了进程的所有信息,所以十分庞大,我们在以后的分析中再来分析各成员的含义。
Task_struct的存放:
在系统运行过程中,进程切换十分频繁,所以我们需要一种方式能够快速获得当前进程的task_struct。linux的task_struct存放如下图所示:
 
 
如上图所示:进程内核堆栈底部存放着struct thread_struct.该结构中有一个成员指向当前进程的task_struct.在内核中有一个获取当前进程的thread_struct 的宏。它的定义如下:
#define GET_THREAD_INFO(reg)
     movl $THREAD, reg;
     andl %esp, reg
THREAD_SIZE定义如下:
#ifdef CONFIG_4KSTACKS
#define THREAD_SIZE            (4096)
#else
#define THREAD_SIZE         (8192)
#endif
我们讨论常规的8K栈的情况。-THREAD_SIZE即为:0xFFFFE000.因为栈本身是页面对齐的.所以只要把低13位屏弊掉就是thread_struct.的地址.
进程链表:
每一个进程都有父进程,相应的每个进程都会管理自己的子进程.在linux系统中,所有进程都是由init进程派生而来.init进程的进程描述符由init_task静态生成.它的定义如下所示:
struct task_struct init_task = INIT_TASK(init_task);
#define INIT_TASK(tsk)
{  &nbs


相关文档:

Linux下新增Makefile中的全局变量的机制

1. 步骤一
法一:修改系统编译时要用到的Config.in,增加你要用的全局变量
法二:写一个自己的Config.in,然后在其他会编译到的Config.in中包含
2.步骤二
make menuconfig
之后在生成的.config中,就可以grep到新添加的变量了
3.步骤三
在Makefile中就可以用这个变量了。 ......

LInux笔记

LInux笔记
观察系统的使用状态:如果要看目前有谁在在线,可以下达 who 这个指令,而如果要看网络的联
机状态,可以下达 netstat -a 这个指令,而要看背景执行的程序可以执行 ps -aux 这个指令。
使用这些指令可以让你稍微了解主机目前的使用状态!
关机的正确指令用法啰!
• 将数据同步写入硬盘中的指令: sync
& ......

Linux下OpenEv编译安装

 把GDAL安装目录下的../bin/gdal-config复制到/usr/bin/下,否则出现“找不到gdal-config”
把proj4安装目录下的../include/proj_api.h复制到GDAL安装目录中的include中,否则出现“未定义proj_api.h”或者直接把proj4安装到默认路径,否则会提示“找不到 -lproj”。 ......

[转]自己动手打造嵌入式Linux软硬件开发环境

      原文地址:http://www.xxlinux.com/linux/article/development/embed/20080227/14047.html
      Linux和uClinux
      Linux正逐渐地应用于嵌入式设备,uClinux正是在这种氛围下产生的。uClinux就是Micro-Control-Linux,它也是一个 ......

linux telnet登陆慢问题

 更改/etc/resolv.conf文件
    如果你的linux主机只是在局域网内工作,请将nameserver地址改为网卡本身的地址。
    例:
    # vi /etc/resolv.conf
    nameserver 192.168.0.160
    search site
    然后 ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号