浅谈进程

一.进程概念

   1.OS角度:程序的一个执行实例,正在执行的程序。能分配处理器并由处理器执行的实体。

   2.内核观点:分配系统资源(CPU时间,内存)的实体。

           进程的两个基本元素:

           1.程序代码(可能被执行相同程序的其他进程共享)。

    2.代码相关的数据集。

            进程是一种动态描述,但是并不代表所有的进程都在运行。

 二.进程描述

            每个进程在内核中都有一个进程控制块(PCB)来维护进程进程的信息,Linux内核的进程控制块是task_struct结构体。它会被装载到RAM(随机访问存储器(Random-Access Memory))里并且包含着进程的信息。每个进程都把它的信息放在task_struct这个数据结构里。

   task_struct:

              标示符:描述本进程的唯一标示符,用来区别其他进程。

              状态:任务状态,退出代码,退出信号。

              优先级:性对于其他进程的优先级。

              程序计数器:程序中即将被执行的下一条指令的地址。

              内存指针:包括程序代码和进程相关数据的指针,还有和其他进程共享的内存块的指针。

              上下文数据:进程执行时处理器的寄存器中的数据。

              I/O状态信息:包括显示的I\O请求,分配给进程的I\O设备和被进程使用的文件列表。

              记账信息:可能包括处理器时间总和,使用的时钟数总和,时间限制,记账号。

三.进程位置

           *进程将程序读入内存,为程序分配内存空间。

           *内核为该进程保存PID及相应的状态信息,把进程放到运行队列中等待执行。

            1.进程的内存映像 ----- > 内核在内存中如何存放可执行程序文件。在程序转化为进程的过程中,操作系统将可执行程序从硬盘复制到内存中。







四.进程状态

             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*/               //僵尸状态 ,进程挂掉,进程信息等待其他进程查看退出信息,最后又init回收资源

               };




               僵尸状态测试



父进程while(1)死循环,子进程exit(1),这时候子进程就是僵尸状态

五.其它

  进程还有 进程优先级,进程创建执行,进程环境...


六.栈帧


附上一片自己的关于栈帧的博客   函数在调用过程中的压栈和出栈问题 。


以上就是本人在学习过程中的一些经验总结。当然,本人能力有限,难免会有纰漏,希望大家可以指正。


         


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值