进程管理
基本概念
进程的特征
进程的组成
进程是操作系统中的一个基本概念,它由以下几部分组成:
- 程序:一系列有序的指令集,定义了进程所要完成的任务。
- 数据集合:进程执行时所需的数据和工作区。这包括程序使用的变量、数组、缓冲区等。
- 进程控制块:操作系统用于管理进程的信息集合。PCB存储了进程的状态、程序计数器、寄存器、内存分配、I/O 状态等信息。
PCB的组织方式
PCB的组织方式对操作系统的性能和管理效率有重要影响。常见的组织方式包括:
-
线性方式:
- 所有PCB被组织在一张线性表中。
- 查找特定进程的PCB时,可能需要扫描整个表,这在进程数量较多时效率较低。
-
链接方式:
- 具有同一状态的PCB通过链接字链接成一个队列。
- 这种方式便于根据进程状态进行管理,但可能需要额外的指针空间,且在不同状态间切换时可能需要更多的操作。
-
索引方式:
- 同一状态的进程归入一个索引表,多个状态对应多个不同的索引表。
- 这种方式可以加快特定状态下进程的查找速度,但增加了管理复杂性,因为需要维护多个索引表。
进程的三种状态
-
运行态:
- 进程正在CPU上执行时的状态。
- 在单核CPU系统中,任何时刻只能有一个进程处于运行态。
- 在多核CPU系统中,可以有多个进程同时处于运行态,每个核上运行一个进程。
-
就绪态:
- 进程已经准备好运行,只等待CPU资源。
- 一旦进程获得CPU,它就可以立即进入运行态。
- 就绪态的进程通常被放在就绪队列中,等待调度器选择一个投入运行。
-
阻塞态:
- 进程因等待某个事件(如I/O操作完成、信号量获取等)而暂时无法执行。
- 即使此时CPU空闲,进程也无法使用CPU,因为它正在等待某个条件满足。
- 阻塞态的进程在等待的事件完成后,通常会转变为就绪态,等待再次被调度。
进程状态转换
- 从就绪态到运行态:进程被操作系统的调度器选中并分配CPU资源。
- 从运行态到就绪态:时间片用完或出现更高优先级的进程需要CPU。
- 从运行态到阻塞态:进程等待某个事件(如I/O操作)完成。
- 从阻塞态到就绪态:等待的事件完成,进程重新准备好运行。
前驱图
好的,您提到了前驱图这一概念,它在操作系统和软件工程中常用于表示任务之间的依赖关系。下面是关于前驱图的详细解析:
前驱图的定义
前驱图(也称为前趋图)是一个有向无循环图(DAG),它由节点和有向边组成。
- 节点:代表各个程序段的操作。
- 有向边:表示两个程序段操作之间存在的前趋关系,即一个操作必须在另一个操作之前完成。
前驱图的作用
前驱图用于描述多个程序或进程之间的执行顺序关系。它可以帮助我们理解和分析任务之间的依赖性,确保任务按照正确的顺序执行。
前驱图的特点
- 有向性:图中的边具有方向,指示了节点之间的依赖关系。
- 无循环性:图中不存在循环依赖,即不可能从一个节点出发,经过若干条边后回到同一个节点。
- 表示依赖关系:节点间的有向边显示了哪些操作需要在其他操作之前完成。
应用示例
假设有两个程序段,程序A和程序B,其中程序B依赖于程序A的输出结果。在这种情况下,前驱图可以表示为:
- 节点A和节点B。
- 一条从节点A指向节点B的有向边,表示“A → B”。
这意味着,程序A必须先于程序B执行。
进程的通信
进程的互斥
进程的互斥是指系统中多个进程因争用临界资源而互斥执行。临界资源是指一次只能供一个进程使用的资源,如打印机。
进程的同步
在系统中有一些进程是需要互相合作,协同工作的。这样的进程之间的联系就叫同步。进程的同步在系统中有一些进程是需要互相合作,协同工作的。这样的进程之
间的联系就叫同步。
PV操作
PV操作的定义
PV操作是两种基本操作,通常用于信号量机制中,以控制对共享资源的访问。
P操作 (Proberen, 荷兰语中的“测试”)
P操作用于请求资源,操作步骤如下:
- 将信号量S的值减1,即 ( S = S - 1 )。
- 如果 ( S \geq 0 ),则该进程继续执行。这意味着资源足够,进程可以使用资源。
- 如果 ( S < 0 ),则该进程被置为等待状态,直到资源可用。这通常涉及将进程放入等待队列,并使进程进入睡眠状态。
V操作 (Verhogen, 荷兰语中的“增加”)
V操作用于释放资源,操作步骤如下:
- 将信号量S的值加1,即 ( S = S + 1 )。
- 如果 ( S > 0 ),则该进程继续执行。这意味着没有其他进程在等待这个资源。
- 如果 ( S \leq 0 ),则说明等待队列中有等待的进程。需要唤醒一个或多个等待的进程,使其从等待状态变为就绪态。
存储管理
地址重定位
地址重定位是指将程序中的虚拟地址(逻辑地址)变换成内存的真实地址(物理地址)的过程。
地址重定位是操作系统中一个关键的环节,它确保了程序在加载到内存后能够正确地执行。通过静态重定位和动态重定位两种方式,不仅实现了逻辑地址到物理地址的转换,还解决了多个程序同时运行、内存空间不连续等问题 。
存储管理策略
内存管理是操作系统中一项至关重要的功能,它负责管理计算机内存的分配、回收和保护。在操作系统中,主要有多种内存管理方式,包括分区存储管理、分页存储管理、分段存储管理、段页式存储管理和虚拟存储管理。以下将介绍这些内存管理方式的特点和实现机制:
- 分区存储管理
- 固定分区分配:该方式将内存划分为若干固定大小的分区,每个分区的大小可以相等或不等。这种方法简单且易于实现,但可能会产生内部碎片,即分区内未被利用的空间。
- 动态分区分配:与固定分区不同,动态分区是在程序装入时根据其需求动态创建分区。这种方法没有内部碎片,但可能产生外部碎片,即难以利用的小空闲分区。常用的算法包括最先适配法、最佳适配法和最坏适配法。
- 分页存储管理
- 基本方法:分页存储管理将内存分为固定大小的“页”,进程也被分成若干页,这些页可以离散地装入不连续的内存空间。这避免了外部碎片的问题,但会产生内部碎片。
- 地址变换机构:为了将逻辑地址转换为物理地址,系统使用页表来实现地址映射。快表(TLB)用于提高地址转换的速度。
- 多级页表:在大型系统中,页表本身可能非常大,因此采用多级页表结构来减少页表占用的内存空间。
- 分段存储管理
- 基本原理:分段存储管理按照程序的逻辑结构将地址空间划分为多个段,如代码段和数据段。每个段可以独立分配内存空间,有助于实现信息的保护和共享。
- 段表机制:与分页管理类似,分段管理通过段表来实现逻辑地址到物理地址的转换。
- 段页式存储管理
- 结合分页和分段:段页式管理结合了分段和分页的优点。首先将程序分段,然后在每个段内部再进行分页。这样既实现了逻辑模块的保护和共享,又避免了外部碎片问题。
- 地址转换:段页式管理需要维护段表和页表两级映射,通过段号、段内页号和页内偏移量三个维度定位物理内存地址。
- 虚拟存储管理
- 请求式分页:虚拟存储允许进程在只有部分内容在内存中的情况下运行。当所需页面不在内存中时,会触发缺页中断,从磁盘中调入需要的页面。
- 置换算法:虚拟存储管理常用的置换算法包括最近最少使用(LRU)算法、先进先出(FIFO)算法和最优算法。
分页存储计算方法
分页存储管理是通过将内存分割为固定大小的“页”来管理地址空间的一种方式,它避免了外部碎片的问题,并通过页表实现逻辑地址到物理地址的转换。以下将介绍分页存储管理的计算方法:
- 基本概念和计算方法
- 页面与物理块:
- 页面(Page):进程的逻辑地址空间被划分为多个大小相等的块,每个块称为一个页面。
- 物理块(Block):实际物理内存被划分为与页面大小相等的块,称为物理块。
- 逻辑地址与物理地址:
- 逻辑地址由页号和页内偏移量组成。
- 物理地址由物理块号和块内偏移量组成。
- 地址转换机制:
- 逻辑地址转换为物理地址的过程:首先根据页表查找物理块号,然后用物理块号和页内偏移量组合成物理地址。
- 页面与物理块:
- 具体计算步骤
- 计算页号和页内偏移量:
- 页号 = INT(逻辑地址 / 页面大小)
- 页内偏移量 = 逻辑地址 % 页面大小。
- 例如,若逻辑地址为4832,页面大小为2048字节,则页号 = 4832 / 2048 = 2,页内偏移量 = 4832 % 2048 = 736。
- 查页表确定物理块号:
- 根据页号在页表中查找对应的物理块号。例如,假设页表显示页号2对应物理块号25。
- 计算物理地址:
- 物理地址 = 物理块号 × 页面大小 + 页内偏移量。
- 以上面的例子继续,物理地址 = 25 × 2048 + 736 = 51936。
- 计算页号和页内偏移量:
- 多级页表的计算
- 多级页表的概念:
- 当逻辑地址空间较大时,单级页表可能过大,此时可以采用多级页表来减少页表占用的内存空间。
- 计算例子:
- 假设系统采用二级页表,逻辑地址为48位虚拟地址,页面大小为4KB,页表项大小为8B。
- 每页能容纳的页表项数 = 页面大小 / 页表项大小 = 4KB / 8B = 512个页表项。
- 需要的页表级数 = 虚页号位数 / 每页页表项数 = 36 / 9 = 4级。
- 多级页表的概念:
- TLB与访问时间计算
- TLB的作用:
- TLB(Translation Lookaside Buffer)用于缓存常用的页表项,提高访问速度。
- 平均访问时间计算:
- 假设TLB命中率为98%,访问时间为10ns,内存访问时间为100ns。
- 平均页面访问时间 = 98% × (10+100)ns + 2% × (10+100+100)ns = 112ns。
- 如果TLB未命中,还需要访问二级页表,平均页面访问时间 = 98% × (10+100)ns + 2% × (10+100+100+100)ns = 114ns。
- TLB的作用:
- 例题解析
- 例题1:某系统采用分页式存储管理,页大小为2KB。逻辑地址4832对应的物理地址是多少?
- 页号 = 4832 / 2048 = 2
- 页内地址 = 4832 % 2048 = 736
- 假设页表显示页号2对应物理块号25,物理地址 = 25 × 2048 + 736 = 51936。
- 例题2:设有一页式存储管理系统,逻辑地址空间最大为16页,每页2048字节,内存有8个存储块。
- 逻辑地址至少应为多少位?11位(每页2048字节,即2^11字节,故页内偏移量占11位)。
- 存储空间多大?8 * 2048B = 16KB。
- 例题1:某系统采用分页式存储管理,页大小为2KB。逻辑地址4832对应的物理地址是多少?