第一次作业:基于Linux进程模型分析

本篇文章主要内容:

  • 什么是进程
  • 操作系统是怎么组织进程的
  • 进程状态如何转换(给出进程状态转换图)
  • 进程是如何调度的
  • 谈谈自己对该操作系统进程模型的看法

一:什么是进程

      进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。在早期面向进程设计的计算机结构中,进程是程序的基本执行实体;在当代面向线程设计的计算机结构中,进程是线程的容器。程序是指令、数据及其组织形式的描述,进程是程序的实体。

        狭义定义:进程是正在运行的程序的实例(an instance of a computer program that is being executed)。
        广义定义:进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动。它是操作系统动态执行的基本单元,在传统的操作系统中,进程既是基本的分配单元,也是基本的执行单元。
        比如下图,是我自己电脑上的一些基本的进程信息:
       

二:操作系统是怎么组织进程的

       Linux通过task_struct结构体来描述一个进程的所有信息,结构体被定义在 include/linux/sched.h中。

       关于task_struct结构体:

      (1)进程的状态(state)  volatile long state,state的可能取值为:

      

      (2)进程的唯一标识(pid)

        在Linux系统中,一个线程组中的所有线程使用和该线程组的领头线程(该组中的第一个轻量级进程)相同的PID,并被存放在tgid成员中。只有线程组的领头线程的pid成员才会被设置为与tgid相同的值。

    (3)进程的标记:

     (4)进程之间的亲属关系:

     在Linux系统中,所有进程之间都有着直接或间接地联系,每个进程都有其父进程,也可能有零个或多个子进程。拥有同一父进程的所有进程具有兄弟关系。

    real_parent指向其父进程,如果创建它的父进程不再存在,则指向PID为1的init进程。 

   parent指向其父进程,当它终止时,必须向它的父进程发送信号。它的值通常与 real_parent相同。 
   children表示链表的头部,链表中的所有元素都是它的子进程(进程的子进程链表)。 
   sibling用于把当前进程插入到兄弟链表中(进程的兄弟链表)。 
   group_leader指向其所在进程组的领头进程。

    (5)进程调度信息:

三:进程状态如何转换(给出进程状态转换图)

 各种状态之间是如何进行互相转换的关系图:

四:进程是如何调度的

         Linust通过schedule函数实现调度,目的是为了在运行队列中找到一个进程,把CPU分配给它。

        关于schedule()函数的源代码:

五:对操作系统模型的看法

   在众多的操作系统都有他们相同之处,也有不同之处在Linux里,只有进程的概念,变量并不共享,由程序员来显式地指定要共享的数据,使程序变得更清晰与安全。

六:参考文献:

https://blog.csdn.net/titer1/article/details/45134625

https://blog.csdn.net/qq_29503203/article/details/54618275

        

 

 

 

 

 

 

 

 

 

 

 

posted on 2018-05-08 13:24  戴钰清  阅读(111)  评论(1编辑  收藏  举报

导航