zoukankan      html  css  js  c++  java
  • linux进程概论

    1操作系统几大模块

      进程管理,进程调度,进程间通讯机制,内存管理,中断异常处理,文件系统,I/O系统,网网络部分。

    2操作系统的目的

      管理硬件设备,为上层应用程序提供良好的执行环境。

    3linux系统基本结构

    进程描述PCB

    广义上,所有的进程信息被放在一一个叫做进程控制块的数据结构中,可以理解为进程属性的集合。linux 下该结构伪task_struct

    其中包含的基本信息

    标示符 : 描述本进程的唯一一标示示符,用用来区别其他进程。
    状态 :任务状态,退出代码,退出信号等。
    优先级 :相对于其他进程的优先级。
    程序计数器:程序中即将被执行行的下一一条指令的地址。
    内存指针:包括程序代码和进程相关数据的指针,还有和其他进程共享的内存块的指针。
    上下文文数据:进程执行行时处理器的寄存器中的数据。
    I/O状态信息:包括显示示的I/O请求,分配给进程的I/O设备和被进程使用用的文文件列表。
    记账信息:可能包括处理器时间总和,使用用的时钟数总和,时间限制,记账号等

    保存进程信息的数据结构叫做 task_struct,并且可以在 include/linux/sched.h 里里找到它。所有运行行在系统里里的进程都以 task_struct 链表的形式存在内核里里。
    进程的信息可以通过 /proc 系统文文件夹查看。要获取PID为400的进程信息,你需要查看 /proc/400 这个文文件夹。大大多数进程信息同样可以使用用top和ps这些用用户级工具来获取。

    获取进程标识符

    进程位置(进程地址空间)

    测试

    关于环境变量的获取与修改

    这里:setenv第三个参数为0时,如果环境变量存在,则不修改,直接返回。为非0 时,则如果存在,那么修改

    进程状态

    static const char * const task_state_array[] = {
    "R (running)", /* 0 */
    "S (sleeping)", /* 1 */
    "D (disk sleep)", /* 2 */
    "T (stopped)", /* 4 */
    "t (tracing stop)", /* 8 */
    "X (dead)", /* 16 */
    "Z (zombie)", /* 32 */
    };

    其中的S 是可中断睡眠状态(interruptible sleep),可以被唤醒的,而D状态是不可终端睡眠(uninterruptible sleep),只有自己醒来或者关机动作终止睡眠。

    僵死状态(Zombies)是一一个比比较特殊的状态。当进程退出并且父父进程(使用用wait()系统调
    用用)没有读取到子子进程退出的返回代码时就会产生生僵死进程。僵死进程会以终止止状态保持
    在进程表中,并且会一一直在等待父父进程读取退出状态代码。

    进程状态之间基本切换规则

    向进程发送信号改变状态

    命令  kill,killall

    kill  -l  获取具体的命令编号以及信息

    具体用法请自行man kill

    另外查看进程状态的几个命令是   ps    pstree    top

    进程优先级

    在ps 的列中有   

    PRI :代表这个进程可被执行行的优先级,其值越小小越早被执行

    NI :代表这个进程的nice值。

    PRI也还是比较好理解的,即进程的优先级,或者通俗点说就是程序被CPU执行行的先后顺序,此值越小小进程的优先级别越高。

    nice值了,其表示进程可被执行的优先级的修正数值。

    PRI(new)=PRI(old)+nice

    注: 这里的nice值是对于运行中程序优先级的修正,所以参考点都是pri的预设值。而非当前值。

    进程执行

    进程内存布局分为四个不同的段:
         •     文文本段,包含程序的源指令。
         •     数据段,包含了静态变量。
         •     堆,动态内存分区区域。
         •     栈,动态增长与收缩的段,保存本地变量。

    僵尸进程:一个子进程在其父进程没有调用wait()或waitpid()的情况下退出。这个子进程就是僵尸进程。如果其父进程还存在而一直不调用wait,则该僵尸进程将无法回收,等到其父
    进程退出后该进程将被init回收。

    孤儿进程:一个父进程退出,而它的一个或多个子进程还在运行,那么那些子进程将成为孤儿进程。孤儿进程将被init进程(进程号为1)所收养,并由init进程对它们完成状态收集工作。

     进程终止止
    进程终止止的方方式有8种,前5种为正常终止止,后三种为异常终止止:
    1 从main函数返回;
    2 调用用exit函数;
    3 调用用_exit或_Exit;
    4 最后一一个线程从启动例程返回;
    5 最后一一个线程调用用pthread_exit;
    6 调用用abort函数;
    7 接到一一个信号并终止止;
    8 最后一一个线程对取消请求做出响应。
    (1)exit函数
    #include <stdlib.h>
    void exit( int status );
    void _Exit( int status );
    #include <unistd.h>
    void _exit( int status );

    exit()做相应的资源清理工作而后返回内核。其他两个直接返回内核。

    exit()和return返回效果一样

    2)atexit函数
    #include <stdlib.h>
    int atexit( void (*fun)( void ) );

    用于注册程序结束时运行方法,类似与sethandler机制或者戏够函数机。

    且,注册顺序与执行顺序相反。类似析构过程

  • 相关阅读:
    BFS POJ 2251 Dungeon Master
    DFS POJ 1321 棋盘问题
    构造 Codeforces Round #275 (Div. 2) C. Diverse Permutation
    线段树+树状数组+贪心 HDOJ 5338 ZZX and Permutations
    快速幂取模 POJ 3761 bubble sort
    矩阵快速幂 POJ 3070 Fibonacci
    矩阵快速幂 POJ 3735 Training little cats
    DP+矩阵快速幂 HDOJ 5318 The Goddess Of The Moon
    L2-001. 紧急救援(PAT)~最短路应用
    ~psd面试 求最长回文序列 DP求解
  • 原文地址:https://www.cnblogs.com/lang5230/p/5566665.html
Copyright © 2011-2022 走看看