高级OS之进程
- 格式:doc
- 大小:1.62 MB
- 文档页数:29
操作系统重点知识总结操作系统》重点知识总结第一章引论1、操作系统定义:是一组控制和管理计算机硬件和软件资源,合理的对各类作业进行调度以及方便用户使用的程序的集合。
2、操作系统的作用1. os作为用户与计算机硬件系统之间的接口。
2. 作为计算机资源的管理者3. 实现了对计算机资源的抽象。
3、分时系统原理和特征原理:人机交互、共享主机特征:多路性、独立性、及时性、交互性4、脱机I/O 原理:程序和数据的输入和输出都是在外围机的控制下完成。
优点:减少了CPU 空闲时间、提高了I/O 速度。
5、操作系统四个基本特征;其中最重要特征是什么?(并发)并发、共享、虚拟、异步第二章进程管理1 、进程定义、进程特征(结构特征、动态性、并发性、独立性和异步性)1. 进程是程序的一次执行。
2. 进程是一个程序及其数据在处理机上顺序执行时所发生的活动。
3. 进程是具有独立功能的程序在一个数据集合上运行的过程,他是系统进行资源分配和调度的一个独立单位。
动态性、并发性、独立性、异步性。
2、进程的基本状态、相互转换原因及转换图(三态)就绪、阻塞、执行3、具有挂起状态的进程状态、相互转换原因及其转换图(五态)活动就绪、静止就绪、活动阻塞、静止阻塞、执行4、什么是进程控制块?进程控制块的作用进程控制块是用于描述进程当前情况以及管理进程运行的全部信息。
1. 作为独立运行基本单位的标志。
2. 能实现间断性运行方式。
3. 提供进程管理、调度所需要的信息4. 实现与其他进程同步与通信5、临界资源定义、临界区的定义一次只能为一个进程使用的资源称为临界资源。
每个进程访问临界资源的代码称为临界区。
6、同步机制应遵循的规则空闲让进、忙则等待、有限等待、让权等待7、记录型信号量的定义,信号量值的物理意义,wait 和signal 操作8、AND 型信号量的定义,Swait 和Ssignal 操作9、经典同步算法:①生产者-消费者问题算法;②不会死锁的哲学家就餐问题算法;③读者-写者问题算法10、利用信号量机制实现进程之间的同步算法(前驱关系、类经典同步问题)11、高级进程通信三种类型。
1、简述操作系统的基本特征。
答:(1)并发。
在单处理机、多道程序环境下并发是指一段时间内,宏观上多个程序同时运行、微观上交替运行的情形。
OS中引入进程的概念就是为了实现并发;(2)共享。
是指系统中并发执行的多个进程共享系统资源。
根据资源属性可以有互斥共享和同时访问两种方式;(3)虚拟。
OS会通过虚拟技术实现系统功能的扩充。
(4)异步性。
并发执行的多个进程由于资源的限制会出现“走走停停”的运行模式。
2、试分析引起进程阻塞和唤醒的事件主要有哪些。
答:(1)请求系统服务。
当正在执行的进程请求系统提供服务而系统无法满足其请求时,进程阻塞等待;由释放服务的进程唤醒阻塞进程。
(2)启动某种操作。
当进程启动某种I/O操作后阻塞以等待操作完成;由中断处理程序唤醒阻塞进程。
(3)新数据尚未到达。
相互合作的进程中,消费者进程阻塞等待数据到达;生产者进程在数据到达后唤醒阻塞进程。
(4)无新工作可做。
系统进程没有新工作可做时阻塞等待;当有进程发出请求时唤醒阻塞进程。
3、简述在操作系统中引入缓冲的主要原因。
答:(1)缓和CPU与I/O设备间速度不匹配的矛盾。
(2)减少对CPU的中断频率,放宽对中断响应时间的限制。
(3)提高CPU和I/O设备之间的并行性。
4、以独占设备为例简述设备分配的过程。
答:(1)设备的分配。
根据物理设备名,查找SDT;找出该设备的DCT,得该设备的状态:忙则将进程的PCB排入设备队列中等待;闲则分配设备给进程。
(2)控制器的分配。
根据设备的DCT找到与之相连的控制器的COCT,从中得到控制器的状态:忙则将进程的PCB排入控制器的等待队列中;闲则分配控制器给进程。
(3)通道的分配。
如果系统有通道,则根据控制器的COCT找到与之相连的通道的CHCT,从中得到通道的状态:忙则将进程的PCB挂入通道的等待队列中;否则分配通道给进程。
只有在三者都分配成功时,设备分配才算成功。
1、名词解释(1)虚拟存储器;虚拟存储器:由进程中的目标代码、数据等的虚拟地址组成的虚拟空间称为虚拟存储器。
os操作系统使用教程操作系统(Operating System,简称OS)是指控制和管理计算机硬件与软件资源的程序集合,是计算机系统的核心软件。
作为计算机的管理者与协调者,操作系统可以有效地组织和管理计算机硬件资源、提供用户接口、执行和控制程序,同时还能保证系统的安全和稳定运行。
本文将为您介绍操作系统的基本功能和常见操作。
操作系统的基本功能主要包括以下几个方面:进程管理、内存管理、文件系统管理、设备管理和用户接口。
首先,进程管理是操作系统的核心功能之一。
在操作系统中,进程是计算机中的一个程序执行实体,为了更好地利用计算机资源,操作系统需要对进程进行管理,包括创建、调度、同步、通信和销毁等操作。
其次,内存管理是操作系统的另一个重要功能,它负责为各个进程分配和释放内存空间,以保证进程能够正常运行。
同时,操作系统还需要实现虚拟内存、页面置换和内存保护等功能,以提高内存的利用率和系统的性能。
另外,文件系统管理也是操作系统的重要功能之一。
在操作系统中,文件是计算机中存储数据的基本单位,而文件系统则负责对文件的创建、读写、重命名和删除等操作。
文件系统还需要实现对文件的目录结构组织和索引,以方便用户对文件的管理和查找。
此外,设备管理是操作系统的另一项重要任务,它负责对计算机的硬件设备进行管理和控制。
操作系统通过设备管理器与硬件设备进行通信,以实现对设备的初始化、分配、调度和释放等操作。
最后,用户接口是操作系统与用户交互的界面,它可以是命令行界面(Command Line Interface,简称CLI)或图形用户界面(Graphical User Interface,简称GUI),用户可以通过用户接口进行对计算机的操作。
下面,我们将介绍操作系统的一些常见操作。
首先,操作系统的启动过程。
当计算机启动时,操作系统会首先加载到内存中,然后进行初始化操作。
其次,操作系统的文件管理操作。
在操作系统中,我们可以进行文件的创建、读写、重命名和删除等操作。
操作系统的功能操作系统是一种软件,它负责管理和控制计算机系统的硬件和软件资源。
以下是操作系统的一些主要功能:进程管理:操作系统负责管理和调度计算机系统中的进程。
进程是计算机中的程序关于某个数据集合上的一次运行活动。
在早期面向进程设计的计算机结构中,进程是程序的基本执行实体;在当代面向线程设计的计算机结构中,进程是线程的容器。
进程管理包括进程的创建、终止、切换和调度等。
内存管理:操作系统负责管理计算机的内存资源,包括内存的分配、回收、保护等。
内存是计算机中重要的资源之一,操作系统的内存管理功能确保每个进程都能安全、有效地使用内存资源。
文件系统管理:操作系统负责管理计算机中的文件系统,包括文件的创建、删除、修改、查询等操作。
文件系统是计算机中存储和管理数据的重要部分,操作系统的文件系统管理功能确保文件的正确性、完整性和安全性。
设备管理:操作系统负责管理计算机中的设备,包括设备的初始化、分配、控制和回收等。
设备是计算机中重要的硬件资源之一,操作系统的设备管理功能确保设备的正确使用和设备的有效共享。
用户接口:操作系统提供了用户接口,使用户能够与计算机进行交互。
用户接口包括命令行界面、图形用户界面等。
用户接口使得用户可以方便地使用计算机的各种资源,并能够有效地管理和控制计算机系统。
操作系统的功能是管理和控制计算机系统的硬件和软件资源,确保系统的正常运行和用户的方便使用。
操作系统是一种软件,它在计算机系统中扮演着至关重要的角色。
它是计算机系统的核心,负责管理系统的硬件和软件资源,包括处理器、内存、磁盘、网络等。
以下是操作系统的主要功能:进程管理:操作系统负责创建、调度和终止进程。
它决定哪个进程在何时运行,以及运行多长时间。
通过这种方式,操作系统可以有效地利用系统资源,并在多个进程之间进行公平的资源分配。
内存管理:操作系统负责管理计算机的内存。
它负责将数据和程序加载到内存中,并决定哪些数据和程序需要在何时从内存中移除。
简答:1. 设计现代OS的主要目标是什么?方便性,有效性,可扩充性和开放性.2. OS的作用可表现为哪几个方面?a. OS作为用户与计算机硬件系统之间的接口;b. OS作为计算机系统资源的管理者;c. OS实现了对计算机资源的抽象.3. OS具有哪几大特征?它的最基本特征是什么?a. 并发性、共享性、虚拟性、异步性。
b. 其中最基本特征是并发和共享。
(最重要的特征是并发性)4、OS的主要功能:处理机管理,存储器管理,设备管理,文件管理,用户管理。
12. 试在交互性,及时性和可靠性方面,将分时系统与实时系统进行比较.a. 分时系统是一种通用系统,主要用于运行终端用户程序,因而它具有较强的交互能力;而实时系统虽然也有交互能力,但其交互能力不及前。
b. 实时信息系统对实用性的要求与分时系统类似,都是以人所能接收的等待时间来确定;而实时控制系统的及时性则是以控制对象所要求的开始截止时间和完成截止时间来确定的,因此实时系统的及时性要高于分时系统的及时性。
c. 实时系统对系统的可靠性要求要比分时系统对系统的可靠性要求高。
5、(重要)进程的特征与状态(三状态、五状态会画图P38和P39)特征:结构特征、动态性、并发性、独立性、异步性。
三种基本状态:就绪状态、执行状态、阻塞状态。
6. 试说明进程在三个基本状态之间转换的典型原因.a. 处于就绪状态的进程,当进程调度程序为之分配了处理机后,该进程便由就绪状态变为执行状态。
b. 当前进程因发生某事件而无法执行,如访问已被占用的临界资源,就会使进程由执行状态转变为阻塞状态。
c. 当前进程因时间片用完而被暂停执行,该进程便由执行状态转变为就绪状态。
7、(重要)进程与线程的定义及比较?定义:进程是在多道程序系统出现以后,为了描述系统内部各作业的活动规律而引进的概念。
线程是指进程内的一个执行单元,也是进程内的可调度实体.比较:a. 调度性。
在传统的操作系统中,拥有资源的基本单位和独立调度、分派的基本单位都是进程,在引入线程的OS中,则把线程作为调度和分派的基本单位,而把进程作为资源拥有的基本单位;b. 并发性。
CPU调度算法的模拟实现一、设计目的利用C++编写CPU调度算法,实现先来先服务调度算法FCFS、优先级调度算法PS、短作业优先调度算法SJF、时间片轮转调度算法RR的运行过程和实现的结果,针对模拟进程,利用编写的CPU调度算法对需要运行的进程进行调度。
进行算法评价,计算平均周转时间和平均等待时间。
二、设计要求针对模拟进程,利用CPU调度算法进行调度,最后要进行算法评价,计算平均周转时间和平均等待时间,并且输出调度结果和输出算法评价指标。
调度所需的进程参数由输入产生(手工输入或者随机数产生)。
三、设计说明CPU调度决策可在如下4种情况环境下发生:(1)当一个进程从运行切换到等待状态(如:I/O请求,或者调用wait等待一个子进程的终止)(2)当一个进程从运行状态切换到就绪状态(如:出现中断)(3)当一个进程从等待状态切换到就绪状态(如:I/O完成)(4)当一个进程终止时对于第1和4两种情况,没有选择而只有调度。
一个新进程(如果就绪队列中已有一个进程存在)必须被选择执行。
对于第2和第3两种情况,可以进行选择。
当调度只能发生在第1和4两种情况下时,称调度是非抢占的(nonpreemptive)或协作的(cooperative);否则,称调度方案为抢占的(preemptive)。
采用非抢占调度,一旦CPU分配给一个进程,那么该进程会一直使用CPU直到进程终止或切换到等待状态。
抢占调度对访问共享数据是有代价(如加锁)的,有可能产生错误,需要新的机制(如,同步)来协调对共享数据的访问。
抢占对于操作系统内核的设计也有影响。
在处理系统调用时,内核可能忙于进程活动。
这些活动可能涉及要改变重要内核数据(如I/O队列)。
因为根据定义中断能随时发生,而且不能总是被内核所忽视,所以受中断影响的代码段必须加以保护以避免同时访问。
操作系统需要在任何时候都能够接收中断,否则输入会丢失或输出会被改写。
为了这些代码段不被多个进程同时访问,在进入时就要禁止中断,而在退出时要重新允许中断。
计算机操作系统简要概述张广洋(汽车检测与维修学院,临沂,273310)摘要:操作系统(Operating System,简称OS)是管理电脑硬件与软件资源的程序,同时也是计算机系统的内核与基石。
操作系统是控制其他程序运行,管理系统资源并为用户提供操作界面的系统软件的集合。
操作系统身负诸如管理与配置内存、决定系统资源供需的优先次序、控制输入与输出设备、操作网络与管理文件系统等基本事务[1]。
本文就操作系统的结构,发展,其主要功能,以及操作系统的新技术及其运行方式前景作了简要概述。
关键字:操作系统、处理系统、进程、内核、计算机一、操作系统的功能和组成操作系统的功能包括管理计算机系统的硬件、软件及数据资源尽可能减少人工分配资源的工作以及人对机器的干预,发挥计算机的自动工作效率。
;控制程序运行,协调还要各种资源使用过程中的关系,使得计算机的各种资源使用调度合理,高速设备与低速设备运行相互配;改善人机界面为用户提供使用计算机系统的环境,方便使用计算机系统的各部件或功能。
操作系统通过自己的程序,将计算机系统的各种资源所提供的功能抽象,形成与之等价的操作系统的功能,并形象地表现出来,提供给用户方便地使用计算机;为其它应用软件提供支持等,使计算机系统所有资源最大限度地发挥作用,为用户提供方便的、有效的、友善的服务界面。
操作系统理论在计算机科学中为历史悠久而又活跃的分支,而操作系统的设计与实现则是软件工业的基础与内核。
操作系统的主要功能可分为以下几类:1 处理机管理功能处理器是计算机系统中最为稀有和宝贵的资源,应该最大限的提高其利用率,可以采用多道程序设计技术,组织多个作业同时进行执行,解决处理器的调度、分配和回收等问题。
随着多处理器系统的出现,处理器的管理就变得更加复杂,为了做好处理器的管理工作,描述多道程序的并发执行,OS 引入进程的概念,处理器的分配、调度和执行都以进程作为基本单位,主要包括对进程控制、进程同步、进程通信以及进程调度等发面[2]。
一、解答题:1.什么是操作系统?它有什么基本特征?答:操作系统是为了达到方便用户和提高资源利用率的目的而设计的,控制和管理计算机硬件和软件资源,合理的组织计算机工作流程的程序的集合,它具有并发、共享、虚拟、异步性四个基本特征。
2.(1)描述进程的三种基本状态,尽可能清楚地解释处于不同状态的进程在性质上的区别。
答:进程的三个基本状态有:①、就绪状态:是指进程已分配到除CPU以外的所有必要的资源,只要能再获得处理机,便可立即执行。
②、执行状态:指进程已获得处理机,其程序正在执行。
③、阻塞状态:进程因发生某事件(如请求I/O、申请缓冲空间等)而暂停执行时的状态。
(2)画出进程状态变化图,说明进程怎样从一个状态转换到下一个状态。
答:进程基本状态转换图如下:进程调度就绪→执行状态:处于就绪状态的进程,当进程调度程序为之分配了处理机后,该进程便由就绪状态变为执行状态。
执行→阻塞状态:正在执行的进程因发生某事件而无法执行。
例如,进程请求访问临界资源,而该资源正被其它进程访问,则请求该资源的进程将由执行状态转变为阻塞状态。
执行→就绪状态:正在执行的进程,如因时间片用完而被暂停执行,该进程便由执行状态转变为就绪状态。
又如,在抢占调度方式中,一个优先权高的进程到来后,可以抢占一个正在执行优先权低的进程的处理机,这时,该低优先权进程也将由执行状态转换为就绪状态。
3.现代操作系统一般都提供多进程(或称多任务)运行环境,回答以下问题:(1)为支持多进程的并发执行,系统必须建立哪些关于进程的数据结构?(2)为支持进程状态的变迁,系统至少应提供哪些进程控制原语?(3)执行每一个进程控制原语时,进程状态发生什么变化?相应的数据结构发生什么变化?答:(1) 为支持多进程的并发执行,系统为每个进程建立了一个数据结构——进程控制块(PCB),用于进程的管理和控制。
(2) 进程控制的主要职责是对系统中的所有进程实施有效的管理,它具有创建新进程、撤销已有进程、实现进程的状态转换等功能。
1. 调度类型高级调度——作业调度批处理系统中使用,周期较长。
低级调度——进程调度是最基本的一种调度,在三种类型的OS中都必须配置。
进程调度可采用非抢占或抢占两种方式。
其中抢占方式允许调度程序根据某种原则,例时间片原则、优先权原则、短进程优先原则等去停止某个正在执行的进程,将已分配给该进程的处理机,重新分配给另一进程。
进程调度的运行频率最高,故算法不能太复杂。
中级调度——引入中级调度的目的是为了提高内存的利用率和系统吞吐量。
中级调度实际上是存储器管理中的对换功能。
2. 调度队列模型3. 选择调度方式和算法的准则周转时间(批处理)面向用户响应时间(分时)的准则截止时间的保证(实时)优先权准则面向系统系统吞吐量高(批处理)的准则处理机利用率好各类资源的平衡利用周转时间——指作业提交系统开始,到作业完成为止的时间间隔。
带权周转时间——作业的周转时间与系统为它提供的实际服务时间之比。
W=T/TS响应时间——从用户通过键盘提交一个请求开始,直至系统首次产生响应为止的时间。
截止时间——某任务必须开始执行的最迟时间,或必须完成的最迟时间。
吞吐量——单位时间内所完成的作业数。
4. 调度算法(作业调度、进程调度)先来先服务调度算法(FCFS)按进入后备(或就绪)队列的先后选择目标作业(或进程)。
有利于长作业(进程),不利于短作业(进程)。
最短作业优先调度算法SJ(P)F从后备(或就绪)队列中选择估计运行时间最短的作业(或进程)tn+1=a tn+(1-a) tn tn为实际值,tn为预测值SJF有效地降低作业的平均等待时间,提高了系统的吞吐量。
对长作业(或进程)不利,可能死等,且未考虑作业的紧迫程度。
时间片轮转调度算法(进程调度)系统将所有的就绪进程按先来先服务原则,排成一个队列,每次调度时把CPU分配给队首进程,令其执行一个时间片。
就绪队列中所有进程,在一个给定的时间内,均能获得一个时间片的处理机执行时间。
T=nq优先权调度算法适用于作业调度和进程调度。
1.OS的主要功能操作系统的基本功能:处理机管理、存储管理、设备管理、信息管理(文件系统管理)、用户接口。
2.OS有哪三种类型?各有什么特点?操作系统一般可分为三种基本类型,即批处理系统、分时系统和实时系统。
批处理操作系统的特点是:多道和成批处理。
分时系统具有多路性、交互性、“独占”性和及时性的特征。
实时系统特点:及时响应和高可靠性3.OS的基本特征是什么?并发性、共享性、虚拟技术、异步性4.OS一般为用户提供了哪三种接口?各有什么特点?1.联机命令接口提供一组命令供用户直接或间接操作。
根据作业的方式不同,命令接口又分为联机命令接口和脱机命令接口。
2.程序接口程序接口由一组系统调用命令组成,提供一组系统调用命令供用户程序使用。
3.图形界面接口通过图标窗口菜单对话框及其他元素,和文字组合,在桌面上形成一个直观易懂使用方便的计算机操作环境.5.OS主要有那些类型的体系结构?单体结构、层次结构、微内核结构与客户机-服务器模型、虚拟机结构6.多道程序设计的主要特点是什么?多道程序设计技术是指在内存同时放若干道程序,使它们在系统中并发执行,共享系统中的各种资源。
当一道程序暂停执行时,CPU立即转去执行另一道程序。
[特点]:多道、宏观上并行(不同的作业分别在CPU和外设上执行)、微观上串行(在单CPU上交叉运行)。
7.OS在计算机系统中处于什么地位?操作系统在计算机系统中占有特殊重要的位置,所有其他软件都建立在操作系统基础上,并得到其支持和服务;操作系统是支撑各种应用软件的平添。
用户利用操作系统提供的命令和服务操纵和使用计算机。
可见,操作系统实际上是一个计算机系统硬件、软件资源的总指挥部。
操作系统的性能决定了计算机系统的安全性和可靠性。
8.解释一下术语:进程、进程控制块、进程映像、线程、进程的互斥和同步、临界区和临界资源、竞争条件、原语、信号量、管程、死锁、饥饿进程:进程是程序在一个数据集合上的运行过程,是系统进行资源分配和调度的一个独立的基本单位。
1.OS的主要功能操作系统的基本功能:处理机管理、存储管理、设备管理、信息管理〔文件系统管理〕、用户接口。
2.OS有哪三种类型?各有什么特点?操作系统一般可分为三种基本类型,即批处理系统、分时系统和实时系统。
批处理操作系统的特点是:多道和成批处理。
分时系统具有多路性、交互性、“独占”性和及时性的特征。
实时系统特点:及时响应和高可靠性3.OS的基本特征是什么?并发性、共享性、虚拟技术、异步性4.OS一般为用户提供了哪三种接口?各有什么特点?1.联机命令接口提供一组命令供用户直接或间接操作。
根据作业的方式不同,命令接口又分为联机命令接口和脱机命令接口。
2.程序接口程序接口由一组系统调用命令组成,提供一组系统调用命令供用户程序使用。
3.图形界面接口通过图标窗口菜单对话框及其他元素,和文字组合,在桌面上形成一个直观易懂使用方便的电脑操作环境.5.OS主要有那些类型的体系结构?单体结构、层次结构、微内核结构与客户机-服务器模型、虚拟机结构6.多道程序设计的主要特点是什么?多道程序设计技术是指在内存同时放假设干道程序,使它们在系统中并发执行,共享系统中的各种资源。
当一道程序暂停执行时,CPU立即转去执行另一道程序。
[特点]:多道、宏观上并行〔不同的作业分别在CPU和外设上执行〕、微观上串行〔在单CPU上交叉运行〕。
7.OS在电脑系统中处于什么地位?操作系统在电脑系统中占有特殊重要的位置,所有其他软件都建立在操作系统基础上,并得到其支持和服务;操作系统是支撑各种应用软件的平添。
用户利用操作系统提供的命令和服务操纵和使用电脑。
可见,操作系统实际上是一个电脑系统硬件、软件资源的总指挥部。
操作系统的性能决定了电脑系统的安全性和可靠性。
8.解释一下术语:进程、进程控制块、进程映像、线程、进程的互斥和同步、临界区和临界资源、竞争条件、原语、信号量、管程、死锁、饥饿进程:进程是程序在一个数据集合上的运行过程,是系统进行资源分配和调度的一个独立的基本单位。
第3章进程和线程3.1概述本章我们通过关于进程的线程的实验,加深对Solaris操作系统中的多线程进程模型的理解与实现技术的了解。
在Solaris操作系统中,进程是一个占据着特定物理内存的可执行对象,进程的代码(二进制程序)、数据、栈、线程、打开的文件、以及其它请求的资源都通过进程来描述。
进程定义了进程中所有被调度执行的线程所共享和的执行环境。
Solaris是一个多线程的操作系统,内核线程是调度和执行的基本单位。
进程创建用户线程时,与其对应的内核线程也会一起被创建,内核通过调度内核线程不调度执行相应的用户线程,LWP则起到链接用户线程和内核线程的作用。
实验1首先介绍进程数据结构的创建的管理进程、线程的各种数据类型以及许多指向结构的指针,给读者一个完整的进程视图。
然后观察proc_r数据结构中的数据类型、内核线程的创建、栈及系统调用号,lwp的线程上下文、系统调用参数、资源使用情况,以及用户线程的状态信息等。
Solaris 10提供的进程创建系统调用fork(2)的默认行为是fork1,同时提供了两个变体forkall和vfork。
三者的主要区别点在于是否复制父进程中的多个线程,以及复制还是共享父进程的地址空间。
实验2通过观察系统调用前后父进程和子进程的地址空间,以及观察进程中的线程信息来展示这三个系统调用的区别。
本章实验内容中最重要的数据结构是进程结构proc_t以及数据成员和指针所指向的数据结构。
几个主要的数据结构所在的文件如表3-1所示,读者可以进一步阅读源代码文件中的相关片段,获得对相关知识更深入的理解。
表3-1 主要数据结构及其文件数据结构文件路径proc_t /usr/src/uts/commom/sys/proc.hklwp_t /usr/src/uts/commom/sys/klwp.hulwp_t /usr/src/lib/libc/inc/thr_uberdata.hkthread_t /usr/src/uts/commom/sys/kthread.h3.2实验1:多线程模型3.2.1 实验内容及目的从Solaris 8版本开始,采用一对一的多线程模型,在实现多线程模型进,主要的数据结构包括proc、kthread_t 、klwp_t 、ulwp、uberdata等,在这个实验中将观察这些数据结构的内容及它们的关系。
通过这个实验。
读者将对Solaris的多线程模型有深入的了解。
3.2.2预备知识Solaris中进程的控制结构是proc结构,它包含了很多进程信息,以及一些志进程相关的数据结构的指针。
图3-1显示了proc结构的一些重要字段及其包含的信息。
图3-1 proc 数据结构进程可能包含多个线程,一个进程的所有线程都链在一个线程链表中,proc结构的p_tlist 字段指向这个链表。
Solaris中最初的多线程模型是M×N模型,一个进程有M个用户线程,N个内核线程,其中M大于等于N。
从Solaris 8开始引入一对一的多线程模型,从Solaris 9以后,这样模型成为默认的模型。
在一对一模型中,每个用户线程都与一个内核线程绑定,内核中的调度器在对内核线程进行调度的同时也完成了对用户线程的调度。
一对一的多线程模型如图3-2所示。
图3-2 一对一的多线程模型表示永和线程的数据结构是ulwp,位于线程库中。
表示内核线程的数据结构是kthread_t,位于内核中。
Kthread_t中有一个字段t_lwp,指向klwp_t结构klwp_t结构用于在内核中保存用户线程的信息,例如,在发生系统调用时保存调用参数。
这三个数据结构以及proc结构的关系如图3-3所示。
Struct klwp_t struct ulwp 图3-3 线程相关数据结构Proc结构的p_tlist字段指向一个kthread_t结构的链表。
这个链表是一个双线循环链表,连接用的字段为t_forw和t_back。
Kthread_t结构有一个t_lwp字段,指向klwp_t结构。
当发生系统调用或异常时,用户线程的上下文就保存在klwp_t结构中。
3.2.3实验步骤观察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;elseprintf(“file desctiptor is %d/n”, fd);printf(“Press enter to exit. . .\n”);getchar();close(fd);return 0;}打开一个shell,编译并运行这个程序。
-bash-3.00$ cc –o process process.c-bash-3.00$ . /processFile descriptor is 3Press enter to exti. . .不要退出process进程。
另外启动一个shell,切换到root用户,并运行”mdb-k”。
在mdb 中用pgrep命令查看process进程的相关信息。
>::pgrep processS PID PPID PGID SID UID FLAGS ADDR NAMER 8079 1233 8079 1233 100 Ox4a00400 ffffffff82c2b188 processPgrep命令会显示进程的状态、进程号、父进程号等信息,其中ADDR列是这个进程的proc结构的地址。
知道进程的进程号,也可以用pid2proc命令获取proc结构的地址。
在mdb 中运行shell命令pgrep,获取process进程的进程号。
>!pgrep process8079用pid2proc命令获得proc结构的地址。
0t8079::pid2procffffffff82c2b188这个地址与mdb仲pgrep命令显示的地址是一样的。
知道proc结构的地址后,就可以用print命令查它的信息。
>ffffffff82c2b188::print struct proc{P_exec = 0xffffffff84f0f700P_as = 0xffffffff839ac8c0P_lockp = 0xffffffff80ba8500P_crlock = {_opaque……}Proc结构中的信息很多,下面来观察其中的进程号、进程的可执行文件和进程打开的文件。
1.观察进程号Proc结构中保存了进程的进程号、父进程号、组进程号等信息,下面分别进行观察。
进程号保存在p_pid字段中,它的类型是pid结构的指针。
>ffffffff82c2b188::print struct proc p_p_pidpP_pidp = 0xffffffff835b0af0然后显示这个pid结构的内容。
>0xffffffff835b0af0::print struct pid{pid_prinactive=0pid_pgorphaned=0pid_padding=0pid_prslot=0xlf8fpid_id=0xlf8fpid_pglink=0xffffffff82c2b188pid_pgtail=0xffffffff82c2b188pid_link=0pid_ref=0x3}pid_id字段就是进程号。
这个字段是按16进制显示的,把它转换成10进制。
>0xlf8f=D8079这个进程号与前面用pgrep命令看到的进程号是一样的。
组进程号保存在p_pgidp字段中,用相同的方法可以查看组进程号。
>ffffffff82c2b188::print struct proc p_pgidp | ::print struct pid pid_idpid_id=0xlf8f>0xlf8f=D8079父进程号保存p_ppid字段中,这个字段的类型是pid_t,也就是int 型的整数。
>ffffffff82c2b188::print struct proc p_ppidp_ppid=0x4dl>0x4dl=D1233组进程号与父进程号也都与前面的pgrep命令显示的结果是相同的。
2.观察进程的可执行文件proc结构中的p_exec字段保存了进程的可执行文件的vnode结构指针,通过查看这个vnode 结构,可以知道这个进程的可执行文件是什么。
首先显示p_exec字段的值。
>ffffffff82c2b188::print struct proc p_execp_exec=0xffffffff84f0f700vnode结构中的v_path字段保存了这个vnode节点对应的文件的路径。
>0xffffffff84f0f700::print struct vnode v_pathv_path=0xffffffff8570c4e8 /home/uesr1/source/process知道vnode节点的指针,也可以通过vnode2path命令直接获得它对应的文件的路径。
>0xffffffff84f0f700::vnode2path/home/user1/source/process3.观察进程打开的文件proc结构中有一个p_user字段,它是一个内嵌的结构,类型是user。
user结构中的u_finfo 字段保存了进程打开的文件信息。
从这个字段找出打开的文件所需的数据结构及它们之间的关系,如图3-4所示。
图3-4查找进程打开的文件所需的数据结构U_finfo字段是一个uf_info结构,其中的fi_list字段指向一个数组,这个数组包含的元素个数记录在fi_nfiles字段中。
下面查看u_finfo字段。
>ffffffff82c2b188::print –t struct proc p_user.u_finfo{kmutex_t p_user.u_finfo.fi_lock={void *[1]_opaque=[0]}int p_user.u_finfo.fi_badfd=0xffffffffint p_user.u_finfo.fi_action=0xffffffffint p_user.u_finfo.fi_nfiles=0x1ffuf_entry_t *volatile p_user.u_finfo.fi_list=0xffffffff86227000uf_flist_t *p_user.u_finfo.fi_rlist=0}fi_nfiles等于0x1ff,也就是256,因此数组的元素个数是256个。