第一次作业:基于Linux进程模型分析
Posted 戴钰清
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第一次作业:基于Linux进程模型分析相关的知识,希望对你有一定的参考价值。
本篇文章主要内容:
- 什么是进程
- 操作系统是怎么组织进程的
- 进程状态如何转换(给出进程状态转换图)
- 进程是如何调度的
- 谈谈自己对该操作系统进程模型的看法
一:什么是进程
进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。在早期面向进程设计的计算机结构中,进程是程序的基本执行实体;在当代面向线程设计的计算机结构中,进程是线程的容器。程序是指令、数据及其组织形式的描述,进程是程序的实体。
二:操作系统是怎么组织进程的
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
以上是关于第一次作业:基于Linux进程模型分析的主要内容,如果未能解决你的问题,请参考以下文章