系统架构设计师——操作系统(一)

进程管理

基本概念

进程的特征

进程的组成

进程是操作系统中的一个基本概念,它由以下几部分组成:

  1. 程序:一系列有序的指令集,定义了进程所要完成的任务。
  2. 数据集合:进程执行时所需的数据和工作区。这包括程序使用的变量、数组、缓冲区等。
  3. 进程控制块:操作系统用于管理进程的信息集合。PCB存储了进程的状态、程序计数器、寄存器、内存分配、I/O 状态等信息。

PCB的组织方式

PCB的组织方式对操作系统的性能和管理效率有重要影响。常见的组织方式包括:

  1. 线性方式

    • 所有PCB被组织在一张线性表中。
    • 查找特定进程的PCB时,可能需要扫描整个表,这在进程数量较多时效率较低。
  2. 链接方式

    • 具有同一状态的PCB通过链接字链接成一个队列。
    • 这种方式便于根据进程状态进行管理,但可能需要额外的指针空间,且在不同状态间切换时可能需要更多的操作。
  3. 索引方式

    • 同一状态的进程归入一个索引表,多个状态对应多个不同的索引表。
    • 这种方式可以加快特定状态下进程的查找速度,但增加了管理复杂性,因为需要维护多个索引表。

进程的三种状态

  1. 运行态

    • 进程正在CPU上执行时的状态。
    • 在单核CPU系统中,任何时刻只能有一个进程处于运行态。
    • 在多核CPU系统中,可以有多个进程同时处于运行态,每个核上运行一个进程。
  2. 就绪态

    • 进程已经准备好运行,只等待CPU资源。
    • 一旦进程获得CPU,它就可以立即进入运行态。
    • 就绪态的进程通常被放在就绪队列中,等待调度器选择一个投入运行。
  3. 阻塞态

    • 进程因等待某个事件(如I/O操作完成、信号量获取等)而暂时无法执行。
    • 即使此时CPU空闲,进程也无法使用CPU,因为它正在等待某个条件满足。
    • 阻塞态的进程在等待的事件完成后,通常会转变为就绪态,等待再次被调度。

进程状态转换

  • 就绪态运行态:进程被操作系统的调度器选中并分配CPU资源。
  • 运行态就绪态:时间片用完或出现更高优先级的进程需要CPU。
  • 运行态阻塞态:进程等待某个事件(如I/O操作)完成。
  • 阻塞态就绪态:等待的事件完成,进程重新准备好运行。

前驱图

好的,您提到了前驱图这一概念,它在操作系统和软件工程中常用于表示任务之间的依赖关系。下面是关于前驱图的详细解析:

前驱图的定义

前驱图(也称为前趋图)是一个有向无循环图(DAG),它由节点和有向边组成。

  • 节点:代表各个程序段的操作。
  • 有向边:表示两个程序段操作之间存在的前趋关系,即一个操作必须在另一个操作之前完成。

前驱图的作用

前驱图用于描述多个程序或进程之间的执行顺序关系。它可以帮助我们理解和分析任务之间的依赖性,确保任务按照正确的顺序执行。

前驱图的特点

  1. 有向性:图中的边具有方向,指示了节点之间的依赖关系。
  2. 无循环性:图中不存在循环依赖,即不可能从一个节点出发,经过若干条边后回到同一个节点。
  3. 表示依赖关系:节点间的有向边显示了哪些操作需要在其他操作之前完成。

应用示例

假设有两个程序段,程序A和程序B,其中程序B依赖于程序A的输出结果。在这种情况下,前驱图可以表示为:

  • 节点A和节点B。
  • 一条从节点A指向节点B的有向边,表示“A → B”。

这意味着,程序A必须先于程序B执行。

进程的通信

进程的互斥

进程的互斥是指系统中多个进程因争用临界资源而互斥执行。临界资源是指一次只能供一个进程使用的资源,如打印机。

进程的同步

在系统中有一些进程是需要互相合作,协同工作的。这样的进程之间的联系就叫同步。进程的同步在系统中有一些进程是需要互相合作,协同工作的。这样的进程之
间的联系就叫同步。

PV操作

PV操作的定义

PV操作是两种基本操作,通常用于信号量机制中,以控制对共享资源的访问。

P操作 (Proberen, 荷兰语中的“测试”)

P操作用于请求资源,操作步骤如下:

  1. 将信号量S的值减1,即 ( S = S - 1 )。
  2. 如果 ( S \geq 0 ),则该进程继续执行。这意味着资源足够,进程可以使用资源。
  3. 如果 ( S < 0 ),则该进程被置为等待状态,直到资源可用。这通常涉及将进程放入等待队列,并使进程进入睡眠状态。

V操作 (Verhogen, 荷兰语中的“增加”)

V操作用于释放资源,操作步骤如下:

  1. 将信号量S的值加1,即 ( S = S + 1 )。
  2. 如果 ( S > 0 ),则该进程继续执行。这意味着没有其他进程在等待这个资源。
  3. 如果 ( S \leq 0 ),则说明等待队列中有等待的进程。需要唤醒一个或多个等待的进程,使其从等待状态变为就绪态。

存储管理

地址重定位

地址重定位是指将程序中的虚拟地址(逻辑地址)变换成内存的真实地址(物理地址)的过程

地址重定位是操作系统中一个关键的环节,它确保了程序在加载到内存后能够正确地执行。通过静态重定位和动态重定位两种方式,不仅实现了逻辑地址到物理地址的转换,还解决了多个程序同时运行、内存空间不连续等问题 。

存储管理策略

内存管理是操作系统中一项至关重要的功能,它负责管理计算机内存的分配、回收和保护。在操作系统中,主要有多种内存管理方式,包括分区存储管理、分页存储管理、分段存储管理、段页式存储管理和虚拟存储管理。以下将介绍这些内存管理方式的特点和实现机制:

  1. 分区存储管理
    • 固定分区分配:该方式将内存划分为若干固定大小的分区,每个分区的大小可以相等或不等。这种方法简单且易于实现,但可能会产生内部碎片,即分区内未被利用的空间。
    • 动态分区分配:与固定分区不同,动态分区是在程序装入时根据其需求动态创建分区。这种方法没有内部碎片,但可能产生外部碎片,即难以利用的小空闲分区。常用的算法包括最先适配法、最佳适配法和最坏适配法。
  2. 分页存储管理
    • 基本方法:分页存储管理将内存分为固定大小的“页”,进程也被分成若干页,这些页可以离散地装入不连续的内存空间。这避免了外部碎片的问题,但会产生内部碎片。
    • 地址变换机构:为了将逻辑地址转换为物理地址,系统使用页表来实现地址映射。快表(TLB)用于提高地址转换的速度。
    • 多级页表:在大型系统中,页表本身可能非常大,因此采用多级页表结构来减少页表占用的内存空间。
  3. 分段存储管理
    • 基本原理:分段存储管理按照程序的逻辑结构将地址空间划分为多个段,如代码段和数据段。每个段可以独立分配内存空间,有助于实现信息的保护和共享。
    • 段表机制:与分页管理类似,分段管理通过段表来实现逻辑地址到物理地址的转换。
  4. 段页式存储管理
    • 结合分页和分段:段页式管理结合了分段和分页的优点。首先将程序分段,然后在每个段内部再进行分页。这样既实现了逻辑模块的保护和共享,又避免了外部碎片问题。
    • 地址转换:段页式管理需要维护段表和页表两级映射,通过段号、段内页号和页内偏移量三个维度定位物理内存地址。
  5. 虚拟存储管理
    • 请求式分页:虚拟存储允许进程在只有部分内容在内存中的情况下运行。当所需页面不在内存中时,会触发缺页中断,从磁盘中调入需要的页面。
    • 置换算法:虚拟存储管理常用的置换算法包括最近最少使用(LRU)算法、先进先出(FIFO)算法和最优算法。

分页存储计算方法

分页存储管理是通过将内存分割为固定大小的“页”来管理地址空间的一种方式,它避免了外部碎片的问题,并通过页表实现逻辑地址到物理地址的转换。以下将介绍分页存储管理的计算方法:

  1. 基本概念和计算方法
    • 页面与物理块
      • 页面(Page):进程的逻辑地址空间被划分为多个大小相等的块,每个块称为一个页面。
      • 物理块(Block):实际物理内存被划分为与页面大小相等的块,称为物理块。
    • 逻辑地址与物理地址
      • 逻辑地址由页号和页内偏移量组成。
      • 物理地址由物理块号和块内偏移量组成。
    • 地址转换机制
      • 逻辑地址转换为物理地址的过程:首先根据页表查找物理块号,然后用物理块号和页内偏移量组合成物理地址。
  2. 具体计算步骤
    • 计算页号和页内偏移量
      • 页号 = INT(逻辑地址 / 页面大小)
      • 页内偏移量 = 逻辑地址 % 页面大小。
      • 例如,若逻辑地址为4832,页面大小为2048字节,则页号 = 4832 / 2048 = 2,页内偏移量 = 4832 % 2048 = 736。
    • 查页表确定物理块号
      • 根据页号在页表中查找对应的物理块号。例如,假设页表显示页号2对应物理块号25。
    • 计算物理地址
      • 物理地址 = 物理块号 × 页面大小 + 页内偏移量。
      • 以上面的例子继续,物理地址 = 25 × 2048 + 736 = 51936。
  3. 多级页表的计算
    • 多级页表的概念
      • 当逻辑地址空间较大时,单级页表可能过大,此时可以采用多级页表来减少页表占用的内存空间。
    • 计算例子
      • 假设系统采用二级页表,逻辑地址为48位虚拟地址,页面大小为4KB,页表项大小为8B。
      • 每页能容纳的页表项数 = 页面大小 / 页表项大小 = 4KB / 8B = 512个页表项。
      • 需要的页表级数 = 虚页号位数 / 每页页表项数 = 36 / 9 = 4级。
  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。
  5. 例题解析
    • 例题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。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

吴代庄

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值