操作系统进程线程.docVIP

  1. 1、本文档共23页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
操作系统进程线程

进程和线程 概述 本章我们通过关于进程和线程的实验,加深对Solaris操作系统中的多线程进程模型的理解与实现技术的了解。 在Solaris操作系统中,进程一个是占据着特定物理内存的可执行对象,进程的代码(二进制程序)、数据、栈、线程、打开的文件,以及其他请求的资源都通过进程来描述。进程定义了进程中所有被调度执行的线程所共享的执行环境。 Solaris是一个多线程的操作系统,内核线程是调度和执行的基本单位。进程创建用户线程时,与其对应的内核线程也会一起被创建,内核通过调度内核线程来调度执行相应的用户线程,LWP则起到关联用户线程和内核线程的作用。 实验1首先介绍进程数据结构中的创建和管理进程、线程的各种数据类型、以及许多指向结构的指针,给读者一个完整的进程视图;然后观察proc_t数据结构中的数据类型,内核线程的创建、堆栈及系统调用号,lwp的的线程上下文、系统调用参数、资源使用情况,以及用户线程的状态信息等。 solaris 10提供的进程创建系统调用fork(2)缺省行为是fork1,同时也提供了两个变体forkall和vfork。三者的主要区别点是是否复制父进程中的多个线程,以及是复制还是共享父进程的地址空间。实验2通过观察系统调用前后父进程和子进程的地址空间,以及观察进程中的线程信息来展示这三个系统调用的区别。 本章实验内容中最重要的数据结构是进程结构proc_t及其数据成员和指针所指向的数据结构。几个主要的数据结构所在的文件如表所示, 读者可以进一步阅读源代码文件中的相关片段,获得对相关知识更深入的理解。 表1 主要数据结构及其文件 数据结构 文件路径 proc_t /usr/src/uts/commom/sys/proc.h klwp_t /usr/src/uts/commom/sys/klwp.h ulwp_t /usr/src/lib/libc/inc/thr_uberdata.h kthread_t /usr/src/uts/commom/sys/kthread.h 实验1:多线程模型 实验内容及目的 Solaris 从8.0以后就开始采用一对一的多线程模型,在实现多线程模型时,主要的数据结构包括proc、_kthread、_klwp、ulwp、uberdata等,在这个实验中将观察这些数据结构的内容及它们之间的关系。通过这个实验,读者将对Solaris的多线程模型有深入的了解。 预备知识 Solaris中进程的控制结构是proc结构,它包含了很多进程的信息,以及一些到其他与进程相关的数据结构的指针。图11显示了proc结构的一些重要字段及其包含的信息。 图11 proc数据结构 进程可能包含多个线程,一个进程的所有线程都链在一个线程链表中,proc结构的p_tlist字段指向这个链表。Solaris中最初的多线程模型是M x N模型,一个进程有M个用户线程,N个内核线程,其中M大于等于N。Solaris 8开始引入一对一的多线程模型,从Solaris 9以后,这种模型成为系统缺省的线程模型。在一对一模型中,每个用户线程都与一个内核线程绑定,内核中的调度器在对内核线程进行调度的同时也完成了对用户线程的调度。一对一的多线程模型如图12所示。 图12 一对一的多线程模型 表示用户线程的数据结构是ulwp,位于线程库中。表示内核线程的数据结构是_kthread,位于内核中。_kthread中有一个字段t_lwp,指向_klwp结构。_klwp结构用于在内核中保存用户线程的信息,例如在发生系统调用时保存调用参数。这三个数据结构以及proc结构的关系如图14所示。 图14 线程相关数据结构 proc结构的p_tlist字段指向一个_kthread结构的链表。这个链表是一个双线循环链表,链接用的字段为t_forw和t_back。_kthread结构有一个t_lwp字段,指向_klwp结构。当发生系统调用或异常时,用户线程的上下文就保存在_klwp结构中。 参见Solaris Internal第二版第?章第?节。 实验步骤 观察proc结构 proc结构中包含了进程相关的信息,在这一小节中将观察一个进程的进程号、可执行文件和打开的文件。下面要观察的示例程序是process.c,源码如下。 #include stdio.h #include unistd.h #include fcntl.h const char *filepath = test.txt; int main() { int fd; if ((fd = open(filepath, O_CREAT | O_RDWR)) == -1) return fd; e

文档评论(0)

xcs88858 + 关注
实名认证
文档贡献者

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

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档