系统架构师(操作系统)
1. 分页存储/分段存储
分页存储(一维):将进程的逻辑地址空间分为若干个大小相等的区域,称为页,从0开始编号。相应的内存物理地址被分成若干个块,称为物理块或页框,同样从0开始编号。若干页可以被装入多个不相邻的物理块中。同时,系统为每个进程维护一个页表,记录页号和页框的映射。
分页存储管理中,物理页大小通常设置为2的整数次幂,这样能通过拆分逻辑地址的二进制位快速分离逻辑页号与页内偏移:取逻辑地址二进制的低n位作为页内偏移,n为页大小对应的幂次,比如页大小512字节对应2的9次幂,就取低9位,剩余的高位部分即为逻辑页号;通过该逻辑页号查询进程页表,可得到对应的物理页号,再将物理页号与页内偏移拼接就能得到最终的物理地址。
例子:某操作系统采用分页存储管理方式,下图给出了进程A和进程B的页表结构。如果物理页的大小为 512 字节,那么进程 A 逻辑地址为 1111(十进制)的变量存放在()号物理内存页中。
物理页=512=2^9
1111(十进制)=10001010111(二进制)
后 9 位是页内偏移
剩余位(2)是逻辑页地址,剩余位=10(二进制)=2(十进制)
查看进程A的页表,逻辑页2,对应的物理页为4
所以,答案为4
分段存储(二维):将作业的地址空间划分为若干段,从0开始编号,使用一段连续的地址空间。段的长度由逻辑信息组的长度决定,因此每个段的长度不等。
2. 进程同步/互斥
同步:
用PV操作实现进程前驱约束是进程同步的典型应用:P操作是申请等待、V操作是释放通知
用于同步的信号量初始值需设为0,代表进程需等待前驱事件完成
规则:前驱进程执行完毕后,要对每个对应后继的信号量执行V操作,以此传递“已完成、可启动”的信号;后继进程启动前,需对所有依赖前驱的信号量执行P操作,确保所有前置条件满足后再推进自身逻辑。
当一个进程存在多个前驱时,需为每个前驱单独设置信号量,启动前依次执行对应P操作,等待所有前驱的通知;若一个进程有多个后继,要为每个后继配置独立信号量,完成后逐一执行V操作,分别触发各后继的执行。
例如:用PV操作控制进程,若用PV操作控制进程P1~P4并发执行的过程,则需要设置5个信号量S1、S2、S3、S4和S5,且信号量S1-S5的初值都等于0。那么a,b,c,d,e,f处的信号量应该填什么?
总结:PV操作是针对信号量S的操作,S是根据前驱顺序进行编号的,P操作表示等待前驱,V表示通知后续
步骤一:确定信号量S
信号量初值为0表示“需等待”。在前趋图中,每一条有向边用一个信号量表示“前驱完成后释放,后继开始时等待”。根据图中依赖关系:P1→P2 用S1,P1→P3 用S2,P3→P2 用S3,P2→P4 用S4,P3→P4 用S5。
步骤二:根据P操作表示等待前驱,V表示通知后续确定操作
a为P1结束后向P2、P3分别发信号,故V(S1)V(S2);
b为P2开始需等待来自P1和P3的S1与S3,故P(S1)P(S3);
c为P2结束后通知P4可继续,故V(S4);
d为P3开始需等待来自P1的S2,故P(S2);
e为P3结束后需分别通知P2与P4,故V(S3)V(S5);
f为P4开始需等待来自P2与P3的S4与S5,故P(S4)P(S5)。
异步:
互斥信号量是实现进程互斥访问临界资源的核心机制,临界资源指一次仅能被一个进程访问的资源,比如共享数据、独占硬件等。互斥信号量的初始值固定为1,标识临界资源初始处于可用状态,仅允许一个进程进入对应的临界区。
规则:进入临界区前必须执行P操作申请资源,若信号量值为0则进程阻塞等待;无论临界区内的操作成功或失败,只要退出临界区就必须执行V操作释放资源,确保信号量回归可用状态,避免出现资源竞争、死锁或进程永久阻塞的问题。
例如:某航空公司机票销售系统有 n 个售票点,该系统为每个售票点创建一个进程 Pi(i=1,2,...,n)管理机票销售。假设 Tj(j=1,2,...,m)单元存放某日某航班的机票剩余票数,Temp 为 Pi 进程的临时工作单元,x 为某用户的订票张数。初始化时系统应将信号量 S 赋值为()。Pi 进程的工作流程如下图所示,若用 P 操作和 V 操作实现进程间的同步与互斥,则图中空(a),空(b)和空(c)处应分别填入(,,)。
答:互斥信号量用于保护对共享变量(此处为余票 Tj)的临界区访问。初始量固定为1。
a处要进入临界区,所以执行P操作;b\c处退出临界区,所以执行V操作。
3. 实时/分时操作系统
实时操作系统(RTOS)的任务调度核心目标是保障任务执行的确定性与及时性。
分时操作系统的核心目标:任务公平性
RTOS 通常采用抢占式调度模型,即高优先级任务可打断低优先级任务,从而保障响应时间。
时间片轮转适用于分时系统,而 RTOS 更常使用基于优先级的调度算法。
许多 RTOS 使用静态优先级调度,但也有一些采用动态优先级(如 EDF)或多种策略组合。
API:应用程序编程接口(Application Programming Interface),由RTOS提供的一组函数和调用方式,供应用程序与操作系统内核交互,实现任务调度、通信、同步等功能。
4. 嵌入式操作系统
嵌入式操作系统是适配嵌入式硬件的专用系统,核心特点有这些:
1. 它面向特定应用场景,可根据需求进行功能裁剪与硬件移植;
2. 多数情况下需要支持多任务处理,以此满足实时响应、并发事件处理等实际需求,并非不需要多任务;
3. 具备高可靠性,能在少人工干预甚至无干预的状态下独立运行,有效应对各类运行事件与故障;
4. 受嵌入式系统存储资源有限的约束,要求系统编码体积小巧,适配有限的存储空间
5. 存储-文件索引节点法
UNIX类文件系统的inode多级索引存储机制,核心是通过直接地址索引、一级间接地址索引、二级间接地址索引(部分系统还支持三级间接)的组合,兼顾小文件访问效率与大文件存储能力。
例子:
某文件系统文件存储采用文件索引节点法。假设磁盘索引块和磁盘数据块大小均为 1KB,每个文件的索引节点中有 8 个地址项 iaddr[0]~iaddr[7],每个地址项大小为 4 字节,其中 iaddr[0]~iaddr[5] 为直接地址索引,iaddr[6] 是一级间接地址索引,iaddr[7] 是二级间接地址索引。如果要访问 icwutil.dll 文件的逻辑块号分别为 0、260 和 518,则系统应分别采用(,,)。该文件系统可表示的单个文件最大长度是()KB。
答:
磁盘索引块 1KB=1024B
每个地址项大小=4字节=4B
那么一个索引块,可以存储1024/4=256个地址
iaddr[0]~iaddr[5] 为直接地址索引,对应6个数据块,对应逻辑号0~5
iaddr[6] 是一级间接地址索引,一级可以指向256个数据块,对应逻辑号6~261
iaddr[7] 是二级间接地址索引,可覆盖256*256=65536个数据块,对应逻辑号 262~65797
0对应直接地址索引;260对应一级索引;518对应二级索引
共覆盖6+256+65536=65798个数据块,*1KB(数据块大小)=65798KB
6. 缓冲区管理(单缓冲/双缓冲)
单缓冲模式下,磁盘读入缓冲区、缓冲区数据传至用户区为连续不可拆分的阶段,必须与数据处理阶段串行执行;
双缓冲模式通过设置两个独立缓冲区交替使用,可让磁盘读入操作与缓冲区传区、数据处理操作并行进行;
某计算机系统输入/输出采用双缓冲工作方式,其工作过程如下图所示,假设磁盘块与缓冲区大小相同,每个盘块读入缓冲区的时间T为 10μs,由缓冲区送至用户区的时间 M 为 6μs,系统对每个磁盘块数据的处理时间 C 为 2μs。若用户需要将大小为 10 个磁盘块的 Doc1 文件逐块从磁盘读入缓冲区,并送至用户区进行处理,那么采用双缓冲需要花费的时间为()μs,比使用单缓冲节约了()μs时间。
答:(1):在双缓冲方式下,第一个磁盘块读入缓冲区时间T=10μs,传送到用户区时间M=6μs,处理时间C=2μs,这三个操作依次进行,总时间为T+M+C=10+6+2=18μs。从第二个磁盘块开始,由于双缓冲机制,磁盘块读入缓冲区的操作可以和缓冲区数据传送到用户区及数据处理操作并行。后续每个磁盘块实际增加的时间是T=10μs(max{T,M+C}),一共10个磁盘块,除去第一个磁盘块,还有9个,所以总时间为18+9×10=108μs。
(2)在单缓冲方式下,磁盘一定要等缓冲区的数据被加载到处理区后才能处理。这里分为两段流水,一段是读入缓冲区+缓冲区传送到用户去,这一段是不可分的,另一段是数据处理,即先读入缓冲区(T=10μs)+再传送到用户区(M=6μs)是一个整体,最后处理(C=2μs),这是一个流水线操作,那么根据流水线公式,10个磁盘块总时间为(16+2)+9×(16)=162μs。双缓冲时间为108μs,所以节约的时间为162−108=54μs。
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐







所有评论(0)