[Linux] 通透解说 什么是进程

打印 上一主题 下一主题

主题 1025|帖子 1025|积分 3075

标题:[Linux] 通透解说 什么是进程 

  
个人主页:@水墨不写bug

  
(图片来自网络)

  目录
一.深入进程基本概念
 二.管理好进程
1.管理好进程的方法
2.形貌进程-PCB
3.组织进程


正文开始: 

   
本文按照对进程的先形貌再组织举行解说 。

  一.深入进程基本概念

           课本概念:程序的一个执行实例,正在执行的程序等。
  
          内核观点:担当分配系统资源(CPU时间,内存)的实体。
   由于进程的概念非常紧张,所以我们在这里再次解说一遍:
           当我们写好一个程序的时间,编译源代码会产生对应的可执行程序,当我们./运行这个程序1的时间,操作系统会做两件事:
          1)将可执行程序加载到内存:
  

          但是只管内存中已经加载了可执行程序,但是此时操作系统还无法管理这些程序,因为内存中没有形貌相关属性的数据结构。所以在操作系统中,为了形貌加载到内存中的程序的相关属性,所以衍生出一个概念PCB。(Linux中称为task_struct)Linux操作系统使用C语言写的,本质上task_struct就是一个结构体。每一个task_struct内部都存储有对应进程的属性信息。
          2)将代码和数据加载到PCB(task_struct)中:
   

           如许的操作最终我们达成了一个目的:将操作系统对进程的管理工作转化为了对特定命据结构的管理。

 二.管理好进程

   1.管理好进程的方法

          想要管理好进程,起首必要形貌好进程 ,对进程的管理仍旧满意我们之前得出的结论:
  
先形貌,再组织。

    2.形貌进程-PCB

          进程信息被放在一个叫做进程控制块的数据结构中,可以理解为进程属性的集合。课本上称之为PCB(process control block), Linux操作系统下的PCB是: task_struct(也就是上图的组织进程的链表的节点)
    task_struct-PCB的一种
          在Linux中形貌进程的结构体叫做task_struct
          task_struct是Linux内核的一种数据结构,它会被装载到RAM(内存)里并且包含着进程的信息。
  
(看一眼task_struct,不必要刨根问底)

  1. // task_struct结构注释:
  2. //  ==========================
  3.   long state //任务的运行状态(-1 不可运行,0 可运行(就绪),>0 已停止)。
  4.   long counter //任务运行时间计数(递减)(滴答数),运行时间片。
  5.   long priority //运行优先数。任务开始运行时counter = priority,越大运行越长。
  6.   long signal //信号。是位图,每个比特位代表一种信号,信号值=位偏移值+1。
  7.   struct sigaction sigaction[32] //信号执行属性结构,对应信号将要执行的操作和标志信息。
  8.   long blocked //进程信号屏蔽码(对应信号位图)。
  9. //  --------------------------
  10.   int exit_code //任务执行停止的退出码,其父进程会取。
  11.   unsigned long start_code //代码段地址。
  12.   unsigned long end_code //代码长度(字节数)。
  13.   unsigned long end_data //代码长度 + 数据长度(字节数)。
  14.   unsigned long brk //总长度(字节数)。
  15.   unsigned long start_stack //堆栈段地址。
  16.   long pid //进程标识号(进程号)。
  17.   long father //父进程号。
  18.   long pgrp //父进程组号。
  19.   long session //会话号。
  20.   long leader //会话首领。
  21.   unsigned short uid //用户标识号(用户id)。
  22.   unsigned short euid //有效用户id。
  23.   unsigned short suid //保存的用户id。
  24.   unsigned short gid //组标识号(组id)。
  25.   unsigned short egid //有效组id。
  26.   unsigned short sgid //保存的组id。
  27.   long alarm //报警定时值(滴答数)。
  28.   long utime //用户态运行时间(滴答数)。
  29.   long stime //系统态运行时间(滴答数)。
  30.   long cutime //子进程用户态运行时间。
  31.   long cstime //子进程系统态运行时间。
  32.   long start_time //进程开始运行时刻。
  33.   unsigned short used_math //标志:是否使用了协处理器。
  34. //  --------------------------
  35.   int tty //进程使用tty 的子设备号。-1 表示没有使用。
  36.   unsigned short umask //文件创建属性屏蔽位。
  37.   struct m_inode * pwd //当前工作目录i 节点结构。
  38.   struct m_inode * root //根目录i 节点结构。
  39.   struct m_inode * executable //执行文件i 节点结构。
  40.   unsigned long close_on_exec //执行时关闭文件句柄位图标志。(参见include/fcntl.h)
  41.   struct file * filp[NR_OPEN] //进程使用的文件表结构。
  42. //  --------------------------
  43.   struct desc_struct ldt[3] //本任务的局部表描述符。0-空,1-代码段cs,2-数据和堆栈段ds&ss。
复制代码
   task_ struct内容(内部变量)分类:
  
          标示符: 形貌本进程的唯一标示符,用来区别其他进程。
  
          状态: 任务状态,退出代码,退出信号等。
  
          优先级: 相对于其他进程的优先级。
  
          程序计数器: 程序中即将被执行的下一条指令的地点。
  
          内存指针: 包罗程序代码和进程相关数据的指针,还有和其他进程共享的内存块的指针上下文数据: 进程执行时处理器的寄存器中的数据[休学例子,要加图CPU,寄存器]。I/ O状态信息: 包罗显示的I/O哀求,分配给进程的I/ O设备和被进程使用的文件列表。记账信息: 大概包罗处理器时间总和,使用的时钟数总和,时间限制,记账号等其他信息。
  3.组织进程

        可以在内核源代码里找到它。全部运行在系统里的进程都以task_struct链表的形式存在内核里。(下面作图的例子是以链表的形式组织进程为例


完~

未经作者同意禁止转载


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

宝塔山

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表