今天考了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 mode
    cli                                             # Disable interrupts
    cld                                             # String operations increment
    # Set up the important data segment registers (DS, ES, SS).
    xorw %ax, %ax                                   # Segment number zero
    movw %ax, %ds                                   # -> Data Segment
    movw %ax, %es                                   # -> Extra Segment
    movw %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, %al
    jnz seta20.1
    movb $0xd1, %al                                 # 0xd1 -> port 0x64
    outb %al, $0x64                                 # 0xd1 means: write data to 8042's P2 port
seta20.2:
    inb $0x64, %al                                  # Wait for not busy(8042 input buffer empty).
    testb $0x2, %al
    jnz seta20.2
    movb $0xdf, %al                                 # 0xdf -> port 0x60
    outb %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 gdtdesc
    movl %cr0, %eax
    orl $CR0_PE_ON, %eax
    movl %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 registers
    movw $PROT_MODE_DSEG, %ax                       # Our data segment selector
    movw %ax, %ds                                   # -> DS: Data Segment
    movw %ax, %es                                   # -> ES: Extra Segment
    movw %ax, %fs                                   # -> FS
    movw %ax, %gs                                   # -> GS
    movw %ax, %ss                                   # -> SS: Stack Segment


















