高级OS之进程分析和总结.docx

  1. 1、本文档共29页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

24第3

24

第3章

第3章进程和线程

概述

本章我们通过关于进程的线程的实验,加深对Solaris操作系统中的多线程进程模型的理解与实现技术的了解。

在Solaris操作系统中,进程是一个占据着特定物理内存的可执行对象,进程的代码(二进制程序)、数据、栈、线程、打开的文件、以及其它请求的资源都通过进程来描述。进程定义了进程中所有被调度执行的线程所共享和的执行环境。

Solaris是一个多线程的操作系统,内核线程是调度和执行的基本单位。进程创建用户线程时,与其对应的内核线程也会一起被创建,内核通过调度内核线程不调度执行相应的用户线程,LWP则起到链接用户线程和内核线程的作用。

实验1首先介绍进程数据结构的创建的管理进程、线程的各种数据类型以及许多指向结构的指针,给读者一个完整的进程视图。然后观察proc_r数据结构中的数据类型、内核线程的创建、栈及系统调用号,lwp的线程上下文、系统调用参数、资源使用情况,以及用户线程的状态信息等。

Solaris10提供的进程创建系统调用fork(2)的默认行为是fork1,同时提供了两个变体forkall和vfork。三者的主要区别点在于是否复制父进程中的多个线程,以及复制还是共享父进程的地址空间。实验2通过观察系统调用前后父进程和子进程的地址空间,以及观察进程中的线程信息来展示这三个系统调用的区别。

本章实验内容中最重要的数据结构是进程结构proc_t以及数据成员和指针所指向的数据结构。几个主要的数据结构所在的文件如表3-1所示,读者可以进一步阅读源代码文件中的相关片段,获得对相关知识更深入的理解。

数据结构proc_tklwp_tulwp_tkthread_t

表3-1 主要数据结构及其文件

文件路径

/usr/src/uts/commom/sys/proc.h

/usr/src/uts/commom/sys/klwp.h

/usr/src/lib/libc/inc/thr_uberdata.h

/usr/src/uts/commom/sys/kthread.h

实验1:多线程模型

实验内容及目的

从Solaris8版本开始,采用一对一的多线程模型,在实现多线程模型进,主要的数据结构包括proc、kthread_t、klwp_t、ulwp、uberdata等,在这个实验中将观察这些数据结构的内容及它们的关系。通过这个实验。读者将对Solaris的多线程模型有深入的了解。

预备知识

Solaris中进程的控制结构是proc结构,它包含了很多进程信息,以及一些志进程相关的数据结构的指针。图3-1显示了proc结构的一些重要字段及其包含的信息。

图3-1 proc数据结构

图3-2一对一的多线程模型进程可能包含多个线程,一个进程的所有线程都链在一个线程链表中,proc结构的p_tlist字段指向这个链表。Solaris中最初的多线程模型是M×N模型,一个进程有M个用户线程,N个内核线程,其中M大于等于N。从Solaris8开始引入一对一的多线程模型,从Solaris9以后,这样模型成为默认的模型。在一对一模型中,每个用户线程都与一个内核线程绑定,内核中的调度器在对内核线程进行调度的同时也完成了对用户线程的调度。一对一的多线程模型如图3-2所示。

图3-2一对一的多线程模型

表示永和线程的数据结构是 ulwp,位于线程库中。表示内核线程的数据结构是kthread_t,位于内核中。Kthread_t中有一个字段t_lwp,指向klwp_t结构klwp_t结构用于在内核中保存用户线程的信息,例如,在发生系统调用时保存调用参数。这三个数据结构以及proc结构的关系如图3-3所示。

Structproc

P_tlist

…t_forwt_backt_lwp

structklwp_t

structulwp

…t_forwt_backt_lwp

Structklwp_t

structulwp

…t_forwt_backt_lwp

Structklwp_t structulwp

图3-3线程相关数据结构

Proc结构的p_tlist字段指向一个kthread_t结构的链表。这个链表是一个双线循环链表,连接用的字段为t_forw和t_back。Kthread_t结构有一个t_lwp字段,指向klwp_t结构。当发生系统调用或异常时,用户线程的上下文就保存在klwp_t结构中。

实验步骤观察proc结构

Proc结构仲包含了线程相关的信息,在这一小

文档评论(0)

hao187 + 关注
官方认证
内容提供者

该用户很懒,什么也没介绍

认证主体武汉豪锦宏商务信息咨询服务有限公司
IP属地上海
统一社会信用代码/组织机构代码
91420100MA4F3KHG8Q

1亿VIP精品文档

相关文档