> 文章列表 > HNU-操作系统OS-2023期中考试

HNU-操作系统OS-2023期中考试

HNU-操作系统OS-2023期中考试

今天考了OS期中考试,特别傻地最后改错了一道10分的题目,很难受。应该是考差了。

回忆一下今天考试的题目,为可能需要的后继者提供帮助(往年期中考题极难获得)

我这里先给出题目,有时间我再补充答案,太忙了,实验和小班,喘不过气来。

欢迎物理催更

试卷总共6道题目

第一题:基础题(20分)

1.1(4分)

进程状态一共有多少个,是哪些?哪些状态只出现一次,哪些出现多次?

答:

初始,运行,就绪,阻塞,结束

只出现一次:初始,结束

出现多次:运行,就绪,阻塞

1.2(4分)

请结合进程状态转移图来说明,哪些是抢占式的,哪些是非抢占式的。

这道题不太确定,

放张状态图在这里,等确定了再更新,或者就一直不知道了 

1.3(4分)

fork()与exec()调用的区别

答到:一个创建新的进程,一个不创建新的进程,即可,我觉的啊。

 

1.4(8分)

基于抢占式的调度,优先权值越小表示越优先,运行调度程序和进程切换用时1μs。

到达时间 CPU耗时 优先权值
P1 2μs 12μs 10
P2 1μs 24μs 30
P3 0μs 36μs 20

从0开始调度程序,问平均周转时间为多少。

第二题:MLFQ多级反馈队列(10分)

问五条规则及其相应作用

五条规则:

1.如果A的优先级 > B的优先级,运行A(不运行B)

2.如果A的优先级 = B的优先级,轮转运行A和B

3.工作进入系统时,放在最高优先级(最上层队列)

4.一旦工作用完了其在某一层中的时间配额(无论中间主动放弃了多少次CPU),就降低其优先级(移入低一级队列)

5.经过一段时间S,就将系统中所有工作重新加入最高优先级队列

具体作用(书上有,自己稍作摘录即可)

第三题:彩票调度与步长调度(20分)

(1)写出彩票的意义,问彩票数与步长的关系

(2)若ABC彩票数分别是200,300,500。给定整数60000,求出各自的票数。

(3)模拟一遍,直至各自里程再次相同。

(4)求出各自的CPU占比。

第四题:僵尸进程(20分)

(1)运行以下代码,写出输出结果

(2)结合僵尸进程与孤儿进程的概念。这段代码会产生僵尸进程还是孤儿进程?

如果是孤儿进程,请修改代码使其产生僵尸进程;

如果是僵尸进程,请修改代码使其产生孤儿进程。

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>int main()
{printf("%d\\n", (int)getpid());pid_t pid;int count = 0;pid = fork();if (pid < 0){}else if (pid == 0){printf("%d father %d\\n", getppid(), getpid());count++;exit(0);}else{sleep(1);wait(NULL);printf("%d father %d\\n", getppid(), getpid());count++;}printf("count = %d\\n",count);
}

第五题:作业题(10分)

题目提供了./process -l 4:100 -S 3 -c和./process -l 4:0 -S 3 -c的运行截图

要求我们写出./process -l 4:50  -S 3 -c的运行截图

第六题:实验题【与Lab1实验紧密相关】(20分)

给了bootmain.S的一段代码,围绕这个展开问题。

.globl start
start:
.code16                                             # Assemble for 16-bit modecli                                             # Disable interruptscld                                             # String operations increment# Set up the important data segment registers (DS, ES, SS).xorw %ax, %ax                                   # Segment number zeromovw %ax, %ds                                   # -> Data Segmentmovw %ax, %es                                   # -> Extra Segmentmovw %ax, %ss                                   # -> Stack Segment# Enable A20:#  For backwards compatibility with the earliest PCs, physical#  address line 20 is tied low, so that addresses higher than#  1MB wrap around to zero by default. This code undoes this.
seta20.1:inb $0x64, %al                                  # Wait for not busy(8042 input buffer empty).testb $0x2, %aljnz seta20.1movb $0xd1, %al                                 # 0xd1 -> port 0x64outb %al, $0x64                                 # 0xd1 means: write data to 8042's P2 portseta20.2:inb $0x64, %al                                  # Wait for not busy(8042 input buffer empty).testb $0x2, %aljnz seta20.2movb $0xdf, %al                                 # 0xdf -> port 0x60outb %al, $0x60                                 # 0xdf = 11011111, means set P2's A20 bit(the 1 bit) to 1# Switch from real to protected mode, using a bootstrap GDT# and segment translation that makes virtual addresses# identical to physical addresses, so that the# effective memory map does not change during the switch.lgdt gdtdescmovl %cr0, %eaxorl $CR0_PE_ON, %eaxmovl %eax, %cr0# Jump to next instruction, but in 32-bit code segment.# Switches processor into 32-bit mode.ljmp $PROT_MODE_CSEG, $protcseg.code32                                             # Assemble for 32-bit mode
protcseg:# Set up the protected-mode data segment registersmovw $PROT_MODE_DSEG, %ax                       # Our data segment selectormovw %ax, %ds                                   # -> DS: Data Segmentmovw %ax, %es                                   # -> ES: Extra Segmentmovw %ax, %fs                                   # -> FSmovw %ax, %gs                                   # -> GSmovw %ax, %ss                                   # -> SS: Stack Segment

(1)为什么要打开A20,哪一段代码是打开A20的操作(8分)

(2)运行至33行后【也就是图中movw %ax, %ss 这一行】,ax,ds,es,ss寄存器的值(4分)

(3)如何使能和进入保护模式,这一段代码在哪里,请解释代码(6分)

(4)【movl %eax, %cr0】这一段代码结束之后,cr0寄存器的值是多少(2分)