Windows进程与线程
实验一Windows进程与线程1.实验内容观察Window进程、线程关键数据结构实验环境:主机Windows 7目标机 Windows Server 2003 SP1 (虚拟机)Windbg 工具2.理论基础Windows系统内部有执行体对象和内核对象两种类型,执行体对象由执行体的各种组件,如进程管理器所实现,内核对象由Windows内核实现,其更为基础。
Windows中的进程和线程在执行体中以对象的方式实现。
一个进程主要由几个部分组成,其中包括一个私有的虚拟地址空间,一个可执行的程序,一个已打开的句柄列表,一个称为访问令牌的安全环境,一个唯一标识,至少一个执行线程。
NOTS中每个进程有5个数据结构:EPROCESS,KPROCESS,PEB,WIN32KPROCESS,子系统csrss为每个win用户进程创建的进程信息数据结构。
线程是一个进程的内部实体,NTOS中每个线程也有5个数据结构:ETHREAD,KTHREAD,TEB,WIN32THREAD,csrss为每个线程建立的线程信息数据结构3.实验步骤搭建好实验环境,配置完成后在目标机里运行实验程序test.exe ,中断,在Windbg中Commad窗口输入!process 0 0,如下图,最后一项为测试程序信息。
可知其虚地址为813d1948.其EPROCESS 如下图查看其偏移0x000处KPROCESS 结构的具体信息查看进程环境块PEB 信息查看其线程ETHREAD 结构信息查看的ThreadsProcess 为 0x813d1948,也就是进程test.exe 的虚地址继续查看KTHREAD 的信息,如下kd> dt_kthread 813db4c0nt!_KTHREAD+0x000 Header : _DISPATCHER_HEADER+0x010 MutantListHead : _LIST_ENTRY [ 0x813db4d0 - 0x813db4d0 ] +0x018 InitialStack : 0xfa0ec000+0x01c StackLimit : 0xfa0e9000+0x020 KernelStack : 0xfa0ebd44+0x024 ThreadLock : 0+0x028 ApcState : _KAPC_STATE+0x028 ApcStateFill : [23] "???"+0x03f ApcQueueable : 0x1 ''+0x040 NextProcessor : 0 ''+0x041 DeferredProcessor : 0 ''+0x042 AdjustReason : 0 ''+0x043 AdjustIncrement : 0 ''+0x044 ApcQueueLock : 0+0x048 ContextSwitches : 0x454+0x04c State : 0x2 ''+0x04d NpxState : 0xa ''+0x04e WaitIrql : 0x1 ''+0x04f WaitMode : 0 ''+0x050 WaitStatus : 0+0x054 WaitBlockList : 0x813db568 _KWAIT_BLOCK+0x054 GateObject : 0x813db568 _KGATE+0x058 Alertable : 0 ''+0x059 WaitNext : 0 ''+0x05a WaitReason : 0x1f ''+0x05b Priority : 8 ''+0x05c EnableStackSwap : 0x1 ''+0x05d SwapBusy : 0 ''+0x05e Alerted : [2] ""+0x060 WaitListEntry : _LIST_ENTRY [ 0xffdffb50 - 0xffdffb50 ] +0x060 SwapListEntry : _SINGLE_LIST_ENTRY+0x068 Queue : (null)+0x06c WaitTime : 0x365b2+0x070 KernelApcDisable : 0+0x072 SpecialApcDisable : 0+0x070 CombinedApcDisable : 0+0x074 Teb : 0x7ffde000+0x078 Timer : _KTIMER+0x078 TimerFill : [40] "???"+0x0a0 AutoAlignment : 0y0+0x0a0 DisableBoost : 0y0+0x0a0 ReservedFlags : 0y000000000000000000000000000000 (0)+0x0a0 ThreadFlags : 0+0x0a8 WaitBlock : [4] _KWAIT_BLOCK+0x0a8 WaitBlockFill0 : [23] "???"+0x0bf SystemAffinityActive : 0 ''+0x0a8 WaitBlockFill1 : [47] "???"+0x0d7 PreviousMode : 1 ''+0x0a8 WaitBlockFill2 : [71] "???"+0x0ef ResourceIndex : 0 ''+0x0a8 WaitBlockFill3 : [95] "???"+0x107 LargeStack : 0 ''+0x108 QueueListEntry : _LIST_ENTRY [ 0x0 - 0x0 ]+0x110 TrapFrame : 0x00000007 _KTRAP_FRAME+0x114 CallbackStack : (null)+0x118 ServiceTable : 0x8089f7e0+0x11c ApcStateIndex : 0 ''+0x11d IdealProcessor : 0 ''+0x11e Preempted : 0 ''+0x11f ProcessReadyQueue : 0 ''+0x120 KernelStackResident : 0x1 ''+0x121 BasePriority : 8 ''+0x122 PriorityDecrement : 0 ''+0x123 Saturation : 0 ''+0x124 UserAffinity : 1+0x128 Process : 0x813d1948 _KPROCESS+0x12c Affinity : 1+0x130 ApcStatePointer : [2] 0x813db4e8 _KAPC_STATE+0x138 SavedApcState : _KAPC_STATE+0x138 SavedApcStateFill : [23] ""+0x14f FreezeCount : 0 ''+0x150 SuspendCount : 0 ''+0x151 UserIdealProcessor : 0 ''+0x152 CalloutActive : 0 ''+0x153 Iopl : 0 ''+0x154 Win32Thread : (null)+0x158 StackBase : 0xfa0ec000+0x15c SuspendApc : _KAPC+0x15c SuspendApcFill0 : [1] "??????"+0x15d Quantum : 21 ''+0x15c SuspendApcFill1 : [3] "???"+0x15f QuantumReset : 0x24 '$'+0x15c SuspendApcFill2 : [4] "???"+0x160 KernelTime : 1+0x15c SuspendApcFill3 : [36] "???"+0x180 TlsArray : (null)+0x15c SuspendApcFill4 : [40] "???"+0x184 BBTData : (null)+0x15c SuspendApcFill5 : [47] "???"+0x18b PowerState : 0 ''+0x18c UserTime : 0xabb+0x190 SuspendSemaphore : _KSEMAPHORE+0x190 SuspendSemaphorefill : [20] "???"+0x1a4 SListFaultCount : 0+0x1a8 ThreadListEntry : _LIST_ENTRY [ 0x813d1998 - 0x813d1998 ] +0x1b0 SListFaultAddress : (null)观察知此线程基本优先级与进程相同,也描述了TEB结构的虚地址。
此结构中也有进程test.exe虚地址的描述。
观察线程环境块TEB 的内容kd> !tebTEB at 7ffde000ExceptionList: 0012ffb0StackBase: 00130000StackLimit: 0012e000SubSystemTib: 00000000FiberData: 00001e00ArbitraryUserPointer: 00000000Self: 7ffde000EnvironmentPointer: 00000000ClientId: 000007a8 . 000007a4RpcHandle: 00000000Tls Storage: 00000000PEB Address: 7ffdf000LastErrorValue: 0LastStatusValue: 0Count Owned Locks: 0HardErrorMode: 0实验结论通过上述实验观察可以知道,EPROCESS描述了主进程的相关信息,其中包含了KPROCESS结构,进程ID,进程优先级,PEB地址等信息,也包含了当前活动进程的链接信息。
计算机操作系统中的进程和线程
计算机操作系统中的进程和线程计算机操作系统中的进程和线程是操作系统中重要的概念。
它们是处理器进行任务调度和执行的基本单位,对于计算机系统的性能和资源管理起着至关重要的作用。
本文将从概念介绍、区别与联系、使用场景和实例等方面对进程和线程进行深入探讨。
一、概念介绍进程是操作系统中的一个执行实体,它是资源分配的基本单位,可以理解为一个程序的一次动态执行过程。
每个进程都拥有独立的内存空间、代码和数据,相互之间相互独立且不可干扰。
而线程(Thread)则是进程中的一个独立执行路径,是进程中的实际运作单位。
多个线程可以共享同一个进程的资源,它们拥有相同的代码和数据,但拥有独立的栈空间,线程之间的切换比进程的切换更为高效迅速。
二、进程和线程的区别与联系1. 区别:(1)进程拥有独立的内存空间,而线程共享进程的内存空间;(2)进程之间相互独立,线程之间共享进程的资源;(3)进程的创建和销毁的开销较大,线程的创建和销毁的开销较小;(4)进程间的通信相对复杂,线程间的通信相对简单。
2. 联系:(1)进程和线程都可以并发执行;(2)进程和线程都可以被抢占;(3)进程和线程都可以访问共享的资源。
三、使用场景1. 进程的使用场景:(1)当需要运行多个独立的应用程序时,可将每个应用程序作为一个进程运行,这样可以保障各个应用程序间的互不干扰;(2)当需要运行多个复杂任务时,可将每个任务作为一个进程运行,这样可以更有效地利用多核处理器的优势;(3)当需要实现安全隔离时,可将不同安全级别的代码分别运行在不同的进程中,以防止高风险代码对系统造成的影响。
2. 线程的使用场景:(1)当需要实现多线程编程模型时,可将一个程序分成多个线程来执行,以实现并发执行和提高程序的性能;(2)当需要同时处理多个任务时,可将每个任务作为一个线程来执行,以充分利用系统资源;(3)当需要实现共享数据和通信时,可使用线程来共享内存和进行线程间的消息传递。
四、进程和线程的实例以Web服务器为例,一个Web服务器通常采用多进程和多线程的模型来实现并发处理用户请求。
Windows进程与线程数据结构
Windows进程与线程数据结构Windows进程与线程数据结构1、引言1.1 目的1.2 背景2、进程与线程概述2.1 进程的定义与特点2.2 线程的定义与特点2.3 进程与线程的关系3、进程数据结构3.1 进程控制块 (Process Control Block, PCB) 3.1.1 PCB的作用与组成3.1.2 PCB中的进程属性3.2 进程地质空间3.2.1 用户态和内核态地质空间3.2.2 虚拟内存管理3.3 进程状态3.3.1 进程的执行状态3.3.2 进程的阻塞状态3.3.3 进程的就绪状态3.4 进程调度算法3.4.1 先来先服务(First-Come, First-Served, FCFS)3.4.2 短作业优先(Shortest Job Next, SJN)3.4.3 优先级调度算法3.4.4 时间片轮转调度算法3.4.5 多级反馈队列调度算法4、线程数据结构4.1 线程控制块 (Thread Control Block, TCB)4.1.1 TCB的作用与组成4.1.2 TCB中的线程属性4.2 线程同步4.2.1 互斥量 (Mutex)4.2.2 信号量 (Semaphore)4.2.3 事件 (Event)4.2.4 临界区 (Critical Section)4.3 线程调度4.3.1 抢占式调度与非抢占式调度4.3.2 线程优先级4.3.3 协同式调度与抢占式调度5、附件附件1、进程与线程数据结构示意图附件2、示例代码法律名词及注释:- 进程:指计算机系统中同一程序的不同执行实例,具有独立的运行空间和资源。
- 线程:是系统内的执行单元,是程序中的一个执行流程,一个进程可以拥有多个线程。
- PCB(Process Control Block):每个进程在操作系统中都对应着一个PCB数据结构,用于保存进程的相关信息。
- 进程地质空间:进程分配的内存空间,用于存放程序、数据和堆栈等信息。
详细介绍windows系统下创建进程、线程的过程
详细介绍windows系统下创建进程、线程的过程进程(Process)是具有⼀定独⽴功能的程序关于某个数据集合上的⼀次运⾏活动,是系统进⾏资源分配和调度的⼀个独⽴单位。
程序只是⼀组指令的有序集合,它本⾝没有任何运⾏的含义,只是⼀个静态实体。
⽽进程则不同,它是程序在某个数据集上的执⾏,是⼀个动态实体。
它因创建⽽产⽣,因调度⽽运⾏,因等待资源或事件⽽被处于等待状态,因完成任务⽽被撤消,反映了⼀个程序在⼀定的数据集上运⾏的全部动态过程。
线程(Thread)是进程的⼀个实体,是CPU调度和分派的基本单位。
线程不能够独⽴执⾏,必须依存在进程中,由进程提供多个线程执⾏控制。
从内核⾓度讲线程是活动体对象,⽽进程只是⼀组静态的对象集,进程必须⾄少拥有⼀个活动线程才能维持运转。
当某个应⽤程序调⽤⼀个创建进程的函数⽐如CreateProcess或者⽤户执⾏某⼀个程序(其实windows下⽤户执⾏⼀般普通程序是由explorer.exe调⽤CreateProcess来完成),操作系统把这个过程分成以下步骤来完成:1.打开将要在该进程中执⾏的映像⽂件。
2.创建Windows执⾏体进程对象。
3.创建初始线程(栈、堆执⾏环境初始化及执⾏线程体对象)。
4.通知Windows⼦系统新进程创建了(⼦系统是操作系统的⼀部分它是⼀个协助操作系统内核管理⽤户态/客户⽅的⼀个⼦系统具体的进程为Csrss.exe)。
5.开始执⾏初始线程(如果创建时候指定了线程的CREATE_SUSPENDED状态则线程暂时挂起不执⾏)。
6.在新进程和线程环境中完成地址空间的初始化(⽐如加载必须的DLL和库),然后开始到进程⼊⼝执⾏。
到这⾥操作系统完成⼀个新进程的创建过程。
下⾯来看下具体每⼀步操作系统所做的⼯作:1.打开将要在该进程中执⾏的映像⽂件。
⾸先操作系统找到执⾏的Windows映像然后创建⼀个内存区对象,以便后⾯将它映射到新的进程地址空间中。
2.创建Windows执⾏体进程对象。
第2章 Windows 进程和线程管理
turnaround time 最短的周转时间
2.10
Scheduling Algorithms 调度算法
First-Come, First-Served (FCFS) Scheduling先
来先服务调度
Shortest-Job-First (SJR) Scheduling 短作业优
先调度
用进程相关的进程控制块信息会分布在本运行环境子系 统、Win32子系统和系统内核中
2.15
Windows 中的Win32进程结构
2.16
Windows 中的Win32进程结构
2.17
Windows 的进程
Windows 2000/XP中的每个Win32进程都由一个执行体
进程块(executive process block)表示,执行体进程 块描述进程的基本信息,并指向其他与进程控制相关的 数据结构
Priority Scheduling 优先权调度 Round Robin (RR) 时间片轮转调度 Multilevel Queue Scheduling 多级队列调度 Multilevel Feedback Queue Scheduling 多级反
馈队列调度
2.11
Windows进程和线程概述
Function Description
CreateProcess Creates a new process and thread using the caller's
security identification CreateProcessAsUser Creates a new process and thread with the specified alternate security token CreateProcessWithLogonW Creates a new process and thread to run under the credentials of the specified username and password CreateProcessWithTokenW Creates a new process and thread with the specified alternate security token, with additional options such as allowing the user profile to be loaded
Windows进程与线程数据结构
《操作系统原理实验》Windows进程与线程数据结构主讲:黄伯虎Windows 体系结构简化的windows 结构图Kernel: 由低层次的操作系统功能构成,比如线程调度、中断和异常分发、多处理器同步等。
提供了一些例程和基本对象。
执行体可以利用这些对象实现更高层次的功能。
Executive: 包含了基本的操作系统服务,包括内存管理、进程和线程管理、安全性、I/O 、网络和跨进程通信等。
Windows基本对象暴露给windows API的执行体对象执行体对象:指由执行体的各种组件(比如进程管理器、内存管理器、I/O子系统等)所实现的对象。
用户可见。
内核对象:指由Windows内核实现的一组更为基本的对象。
内核对象对用户而言是不可见的,只能在执行体内部被创建和使用。
Windows进程的组成(从最高抽象层次看)一个私有的虚拟地址空间一个可执行的程序:定义了代码和数据,并被映射到进程的虚拟地址空间。
一个已经打开句柄的列表:指向各种资源,比如信号量、文件,该进程的所有线程都可访问这些系统资源。
一个被称为访问令牌的安全环境:标识与该进程关联的用户、安全组和特权一个被称为进程ID的唯一标识至少一个执行线程Windows进程的关键数据结构执行体进程块(EPROCESS)执行体进程对象的对象体,包括进程ID、父进程ID、程序名、进程优先级、内存管理信息、设备映像等。
核心进程块(KPROCESS)内核进程对象的对象体,又称PCB,包括线程调度时需要的信息,如进程状态、线程时间片等。
进程环境块(PEB)包括用户态代码需要和修改的信息。
Windows环境子系统核心态部件win32k.sys为每个进程建立的进程信息数据结构WIN32KPROCESSWindows环境子系统进程csrss(用户态)为每个进程建立的进程信息数据结构Process environmentblockWin32 process blockHandle tableProcess address spaceSystem address spaceProcess block (EPROCESS)PCB组成线程的基本部件一组代表处理器状态的CPU寄存器中的内容两个栈:一个用于当线程在内核模式下执行的时候,另一个用于线程在用户模式下执行的时候。
windows进程和线程
每个线程都有它自己的一组CPU寄存器,称为线程的上下文。 线程的这组CPU寄存器保存在一个CONTEXT结构(在WinNT.h头 文件中定义)中。[x86类型CPU对应的CONTEXT结构] 指令指针(IP)和堆栈指针(SP)寄存器是线程上下文中两个 最重要的寄存器。 当线程的内核对象被初始化时, CONTEXT结构的堆栈指针寄 存器被设置为线程堆栈上用来放置pfnStartAddr的地址。指 令指针寄存器置为称为BaseThreadStart的函数的地址中。该 函数包含在Kernel32.dll模块中(这也是实现CreateThread 函数的地方).
unsigned long _beginthreadex(
void *security, unsigned stack_size, Unsigned ( __stdcall *start_address )( void * ), Void *arglist, Unsigned initflag, Unsigned *thrdaddr
进程创建与退出
二. 线程
线程(thread):是为了提高系统内程序的并发执行程度而 提出来的概念,它是比进程更小的能够独立运行的基 本单位。线程是一个轻量级实体(light-weight entity), 它的结构(thread structure)相对简单,在切换速度上 非常得快,同一进程中的线程切换不会引起进程的切 换,对于并行计算来讲,有效的利用线程能够改善计 算的效率,简化计算的复杂性。
);
[ 举例 ,compile with: /MT ]
AfxBeginThread -- creates a worker thread
CWinThread* AfxBeginThread(
计算机中的操作系统中的进程和线程有什么区别
计算机中的操作系统中的进程和线程有什么区别操作系统中的进程和线程是计算机中重要的概念,它们在实现多任务处理和资源管理方面发挥着重要作用。
虽然进程和线程都是运行在操作系统上的执行单位,但它们在功能和使用方式上存在一些区别。
本文将从进程和线程的定义、特点、创建和切换、资源管理等方面进行详细论述。
一、进程的定义和特点进程是指正在执行的程序在操作系统中的一次执行过程。
它是操作系统进行资源分配和调度的基本单位。
每个进程都拥有独立的内存空间、数据栈、寄存器等资源,进程之间相互独立、互不干扰。
进程的特点包括:1. 独立性:每个进程都是独立的执行实体,具有独立的内存空间和资源。
2. 并发性:多个进程可以同时存在,并且可以同时执行,实现多任务处理。
3. 随机性:多个进程之间的执行顺序是不确定的,由操作系统调度决定。
4. 阻塞性:进程在运行过程中可能会受到阻塞,等待某些事件的发生。
二、线程的定义和特点线程是进程的一部分,是程序执行的最小单元。
一个进程中可以包含多个线程,它们共享进程的内存空间和资源,拥有独立的栈空间和程序计数器。
线程的特点包括:1. 共享性:同一进程内的线程之间共享进程的资源,包括内存、文件等。
2. 并发性:多个线程可以同时执行,实现并发处理,提高系统的运行效率。
3. 独立性:每个线程拥有独立的栈空间和程序计数器,可以独立执行指令序列。
4. 灵活性:线程的创建、销毁和切换成本较低,可以方便地实现任务的切换和资源共享。
三、进程和线程的创建和切换1. 进程的创建和切换:进程的创建通常通过fork()系统调用实现。
fork()会创建一个与当前进程几乎完全相同的子进程,包括代码段、数据段、堆和栈等。
子进程可以执行不同的程序,但初始状态与父进程相同。
进程的切换是由操作系统的调度器完成的,通过保存和恢复进程的上下文来实现,包括寄存器值、堆栈指针等。
2. 线程的创建和切换:线程的创建通常通过pthread_create()函数实现。
操作系统
•
Windows 2000的进程与线程 的进程与线程
• 从进程组的模型可以看出,进程是一个程序运 从进程组的模型可以看出 进程是一个程序运 行时的资源集合,它包括了程序运行时使用的 行时的资源集合 它包括了程序运行时使用的 所有资源,如内存空间 设备资源、 如内存空间、 所有资源 如内存空间、设备资源、访问令牌 但是进程是不具有活力的, 等。但是进程是不具有活力的,在Windows 系统中, 系统中,进程除了提供资源以外并不执行实 际操作, 际操作,一个进程若要进行实际操作就必须 拥有属于它的线程。 拥有属于它的线程。线程负责执行进程地址 空间中的代码,完成程序预定的功能。 空间中的代码,完成程序预定的功能。对于 一个没有线程的进程, 一个没有线程的进程,系统将自动终止该进 程。
Windows 2000进程的特点 进程的特点
• Windows 2000与其他操作系统一样实 与其他操作系统一样实 现了进程的基本功能, 此外,Windows 现了进程的基本功能 此外 2000中进程实现还有以下特点 中进程实现还有以下特点: 中进程实现还有以下特点
– 与unix的操作系统不同 的操作系统不同,Windows 2000的 的操作系统不同 的 进程树并不是完全的树形结构. 进程树并不是完全的树形结构 – 与过去的操作系统不同 Windows 2000提 与过去的操作系统不同, 提 供了许多新引进的高效的通讯机制(IPC). 供了许多新引进的高效的通讯机制
Windows 2000中线程的状态 中线程的状态
• 初始态 线程正在创建过程中。 初始态:线程正在创建过程中 线程正在创建过程中。 • 就绪态:线程已获得除 外的所有资 就绪态 线程已获得除CPU外的所有资 线程已获得除 等待被调度去执行的状态。 源,等待被调度去执行的状态。 等待被调度去执行的状态 • 准备态 已被选中下一个在一个特定处理 准备态:已被选中下一个在一个特定处理 器上运行的线程, 器上运行的线程,此线程处于等待条件 合适时调度程序就对其进行切换。 合适时调度程序就对其进行切换。 • 运行态:内核执行线程切换,准备态线 运行态:内核执行线程切换, 程进入运行态,并开始执行。 程进入运行态,并开始执行。
Windows的进程线程优先级
Windows的进程线程优先级如果你曾经⽤过windows的任务管理器,就算是没有学习过windows的内核你也应该有听说过“进程优先级“这么⼀个概念。
虽然你可能没有操作过,但是你很有可能在任务管理器⾥⾯见过它。
今天稍微讲⼀下Windows的进程优先级以及线程优先级。
Windows是⼀个抢断式多线程操作系统,在并发的处理的时候最基本的执⾏单结构是线程,⽽⼀个进程内并不是⼀个执⾏上不可分割的结构,⽽是由多个线程组成的。
每⼀个线程在内核中有⼀个优先级顺序,这个顺序的取值范围是0-31,数字越⼤优先级越⾼。
如果有任意⼀个⾼顺序的线程需要执⾏,Windows绝对不会执⾏低优先级的线程。
如果低优先级的线程⼀直不能被执⾏,那么线程就被饥饿了,这个时候抢占式操作系统的特点就体现出来了。
但是为什么平时都没有注意到呢,这⾥很⼤的原因是平时绝⼤多数⼯作线程的的优先级都是基本差不多⼀致的,每⼀个线程基本都能分配到时间⽚。
但是有的时候我们需要创建⼀些较⾼优先级或者较低优先级的线程⽤来完成⼀些特殊的任务,我们就要了解⼀下这个线程的优先顺序到底是如何计算出来的。
虽然说这个优先顺序的取值范围是0-31,但是你并不能直接通过API来设定优先顺序。
你能够设定⼀个进程优先级以及⼀个线程优先级。
下⾯是⼀个Windows的优先级对应表:线程相对优先级进程优先级类Idle Below Normal Normal Above Normal High Real-TimeTime-critical151515151531Highest6810121526Above normal579111425Normal468101324Below normal35791223Lowest24681122Idle1111116从这个表你可以看出来,实时优先级的进程拥有者极⾼的数值,通常情况下你不应该把你的进程优先级设置为实时。
包括磁盘IO、⿏标显⽰、⾳频输出之类的系统功能都在实时优先级中的某些优先级中⼯作。
Windows进程与线程数据结构
Windows进程与线程数据结构Windows进程与线程数据结构⒈概述在Windows操作系统中,进程和线程是操作系统进行任务管理和资源分配的基本单位。
进程代表正在运行的程序的实例,而线程是进程中执行的指令序列。
本文将深入讨论Windows进程和线程的数据结构,以便更好地理解它们的运行机制和相互关系。
⒉进程数据结构⑴进程控制块(Process Control Block,PCB)进程控制块是操作系统内核为每个进程创建的数据结构,用于存储和管理进程的状态信息。
PCB通常包含以下重要字段:- 进程ID(Process ID,PID):唯一标识一个进程的数字。
- 程序计数器(Program Counter,PC):指向当前正在执行的指令的地质。
- 寄存器集合:用于保存进程的上下文信息,包括通用寄存器、指令指针等。
- 进程状态:表示进程当前的状态,如运行、就绪、阻塞等。
⑵进程描述符(Process Descriptor)进程描述符是内核中用于描述进程的数据结构,包含了与进程相关的各种信息,如程序代码、数据、打开的文件等。
进程描述符通常包含以下字段:- 进程ID(PID):与PCB中的进程ID对应。
- 父进程ID(Parent Process ID,PPID):标识与之关联的父进程。
- 进程状态:表示进程当前的状态,如运行、就绪、阻塞等。
- 打开文件表():记录进程打开的文件信息。
- 内存管理信息:包括进程内存布局、内存分配等。
⒊线程数据结构⑴线程控制块(Thread Control Block,TCB)线程控制块是操作系统内核为每个线程创建的数据结构,用于存储和管理线程的状态信息。
TCB通常包含以下字段:- 线程ID(Thread ID,TID):唯一标识一个线程的数字。
- 线程栈:用于保存线程的执行环境,包括函数调用栈等。
- 线程状态:表示线程当前的状态,如运行、就绪、阻塞等。
- 执行权限:控制线程的执行权限和优先级。
