OS Test

本文主要介绍了操作系统的一些核心概念,如分时操作系统、Unix操作系统类型、批处理系统的缺点、多道批处理系统考虑的因素、系统调用的用途等。内容涵盖了操作系统的基本原理和在实际考试中的常见问题,包括各种操作系统类型、处理机状态转换、系统调用的作用、内存管理和进程管理等相关知识点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

下面对于分时操作系统的说法,正确的是()

应用程序执行的先后顺序是完全随机的
应用程序按照启动的时间依次执行
应用程序可以交替执行
应用程序等待的时间越长,下一次调度被选中的概率一定越大
解析:
选择3更合适。分时操作系统把多个程序放到内存中,将处理机(CPU)时间按一定的时间间隔(简称时间片)分配给程序运行,这样CPU就可以轮流地切换给各终端用户的交互式程序使用。由于时间片很短,远小于用户的交互响应延迟,用户感觉上好像独占了这个计算机系统。应用程序执行的先后顺序主要是由操作系统的调度算法和应用程序本身的行为特征来确定的。调度算法需要考虑系统的效率、公平性等因素。对于1,2而言,从系统的效率上看不会带来好处;对于4而言,可以照顾到公平性,但“一定”的表述太强了,比如如果调度算法是简单的时间片轮转算法(在后续章节“处理器调度”),则4的要求就不会满足了,且更实际的调度算法其实还需考虑等待的事件等诸多因素。 以ucore OS为例,在lab6中支持实现不同的调度算法。对于分时操作系统而言,体现其特征的一个关键点就是要实现时间片轮转调度算法或多级反馈队列调度算法(在后续章节“处理器调度”)。在ucore OS中,可以比较方便地实现这两种调度算法。

Unix操作系统属于___

分时操作系统
批处理操作系统
实时操作系统
分布式操作系统
解析:
选择1更合适。Unix操作系统支持交互式应用程序,属于分时操作系统。比早期的批处理操作系统要强大。且它更多地面向桌面和服务器领域,并没有很强的实时调度和实时处理功能,所以一边不划归为实时系统。它虽然有网络支持(如TCP/IP),但实际上它管理的主要还是单个计算机系统让的硬件和应用软件。 以ucore OS为例,它模仿的是Unix操作系统,实现了对应的分时调度算法(时间片轮转、多级反馈队列),所以也算是分时系统。如果ucore实现了实时进程管理、实时调度算法,并支持在内核中的抢占(preempt in kernel),则可以说它也是一个实时系统了。

批处理的主要缺点是____()

效率低
失去了交互性
失去了并行性
以上都不是
解析:
批处理操作系统没有考虑人机交互所需要的分时功能,所以开发人员或操作人员无法及时与计算机进行交互。 以ucore OS为例,如果它实现的调度算法是先来先服务调度算法(在后续章节“处理器调度”,相对其他调度算法,具体实现更简单),那它就是一种批处理操作系统了,没有很好的人机交互能力。

多道批处理系统主要考虑的是____

交互性
及时性
系统效率
吞吐量
解析:
交互性和及时性是分时系统的主要特征。多道批处理系统主要考虑的是系统效率和系统的吞吐量。 以ucore OS为例(lab6实验),这主要看你如何设计调度策略了,所以如果实现FCFS(先来想服务)调度算法,这可以更好地为多道批处理系统服务;如果实现时间片轮转(time-slice round robin)调度算法,则可以有比较好的交互性;如果采用多级反馈队列调度算法,则可以兼顾上述4个选项,但交互性用户程序获得CPU的优先级更高。

(华中科技大学,2005)程序正在试图读取某个磁盘的第100个逻辑块,使用操作系统提供的( )接口

系统调用
图形用户
原语
键盘命令
解析:
操作系统作为用户和计算机硬件系统之间的接口,用户可以通过3种方式使用计算机,命令方式、系统调用方式、图形方式。系统调用按照功能分为进程管理、文件操作、设备管理等,本题描述的是文件操作系统调用相关的执行。

(2009计算机统考)单处理器系统中,可并行执行或工作的对象是( )

1)进程与进程
2)处理器与设备
3)处理器与通道
4)设备与设备
解析:
并行指同一时刻同时发生,同一时刻单个处理器只能运行一个进程。

(2010统考)下列选项中,操作系统提供给应用程序的接口是( )

系统调用
中断
库函数
原语
1

(2011统考)下列选项中,在用户态执行的是( )

命令解释程序
缺页处理程序
进程调度程序
时钟中断处理程序
解析:
后3个选项都属于内核的功能,在内核态。命令解释程序则属于应用程序。

(2013联考)计算机开机后,操作系统最终被加载到( )

BIOS
ROM
EPROM
RAM
解析:
操作系统被加载到内存(RAM)中

(2012统考)下列选项中,不可能在用户态发生的是( )

系统调用
外部中断
进程切换
缺页
解析:
系统调用是提供给应用程序使用的,由用户态发出,进入内核态执行。外部中断随时可能发生;应用程序执行时可能发生缺页;进程切换完全由内核来控制。

(2012统考)中断处理和子程序调用都需要压栈以保护现场。中断处理一定会保存而子程序调用不需要保存其内容的是( )

程序计数器

程序状态字寄存器

通用数据寄存器

通用地址寄存器
程序状态字(PSW)寄存器用于记录当前处理器的状态和控制指令的执行顺序,并且保留与运行程序相关的各种信息,主要作用是实现程序状态的保护和恢复。所以中断处理程序要将PSW保存,子程序调用在进程内部执行,不会更改PSW。

(华中科技大学)中断向量地址是( )

子程序入口地址

中断服务例程入口地址 ~~~√

中断服务例程入口地址的地址

例行程序入口地址

下列选项中, ____可以执行特权指令?()

中断处理例程

普通用户的程序

通用库函数

管理员用户的程序
解析:

中断处理例程(也可称为中断处理程序)需要执行打开中断,关闭中断等特权指令,而这些指令只能在内核态下才能正确执行,所以中断处理例程位于操作系统内核中。而1,3,4都属于用户程序和用于用户程序的程序库。 以ucore OS为例,在lab1中就涉及了中断处理例程,可查看intr_enable,sti,trap等函数完成了啥事情?被谁调用了?

一般来讲,中断来源于____()

外部设备

应用程序主动行为

操作系统主动行为

软件故障
解析:

中断来源与外部设备,外部设备通过中断来通知CPU与外设相关的各种事件。第2选项如表示是应用程序向操作系统发出的主动行为,应该算是系统调用请求。第4选项说的软件故障也可称为软件异常,比如除零錯等。 以ucore OS为例,外设产生的中断典型的是时钟中断、键盘中断、串口中断。在lab1中,具体的中断处理例程在trap.c文件中的trap_dispatch函数中有对应的实现。对软件故障/异常的处理也在trap_dispatch函数中的相关case default的具体实现中完成。在lab1的challenge练习中和lab5中,有具体的系统调用的设计与实现。

用户程序通过____向操作系统提出访问外部设备的请求()

I/O指令

系统调用

中断

创建新的进程
解析:

具体内容可参见10.的回答。 以ucore OS为例,在lab5中有详细的syscall机制的设计实现。比如用户执行显示输出一个字符的操作,由于涉及向屏幕和串口等外设输出字符,需要向操作系统发出请求,具体过程是应用程序运行在用户态,通过用户程序库函数cputch,会调用sys_putc函数,并进一步调用syscall函数(在usr/libs/syscall.c文件中),而这个函数会执行“int 0x80”来发出系统调用请求。在ucore OS内核中,会接收到这个系统调用号(0x80)的中断(参见 kernel/trap/trap.c中的trap_dispatch函数有关 “case T_SYSCALL:”的实现),并进一步调用内核syscall函数(参见 kernel/syscall/syscall.c中的实现)来完成用户的请求。内核在内核态(也称特权态)完成后,通过执行“iret”指令(kernel/trap/trapentry.S中的“__trapret:”下面的指令),返回到用户态应用程序发出系统调用的下一条指令继续执行应用程序。

应用程序引发异常的时候,操作系统可能的反应是()

删除磁盘上的应用程序

重启应用程序

杀死应用程序

修复应用程序中的错误
解析:

更合适的答案是3。因为应用程序发生异常说明应用程序有错误或bug,如果应用程序无法应对这样的错误,这时再进一步执行应用程序意义不大。如果应用程序可以应对这样的错误(比如基于当前c++或java的提供的异常处理机制,或者基于操作系统的信号(signal)机制(后续章节“进程间通信”会涉及)),则操作系统会让应用程序转到应用程序的对应处理函数来完成后续的修补工作。 以ucore OS为例,目前的ucore实现在应对应用程序异常时做的更加剧烈一些。在lab5中有有对用户态应用程序访问内存产生错误异常的处理(参见 kernel/trap/trap.c中的trap_dispatch函数有关 “case T_PGFLT: ”的实现),即ucore判断用户态程序在运行过程中发生了内存访问错误异常,这是ucore认为重点是查找错误,所以会调用panic函数,进入kernel的监控器子系统,便于开发者查找和发现问题。这样ucore也就不再做正常工作了。当然,我们可以简单修改ucore当前的实现,不进入内核监控器,而是直接杀死进程即可。你能完成这个修改吗?

下列程序工作在内核态的有____()

系统调用的处理程序

中断处理程序

进程调度

内存管理
解析:

这里说的“程序”是一种指称,其实就是一些功能的代码实现。而1-4都是操作系统的主要功能,需要执行相关的特权指令,所以工作在内核态。 以ucore OS为例(lab5实验),系统调用的处理程序在kern/syscall目录下,中断处理程序在kern/trap目录下,进程调度在kern/schedule目录下,内存管理在kern/mm目录下

(西北工业大学)CPU执行操作系统代码的时候称为处理机处于( )

自由态

目态

管态

就绪态
解析:

内核态又称为管态

(2013统考)下列选项中,会导致用户进程从用户态切换到内核态的操作是( )

1)整数除以0 2)sin()函数调用 3)read系统调用

1、2

1、3

2、3

1、2、3
函数调用并不会切换到内核态,而除零操作引发中断,中断和系统调用都会切换到内核态进行相应处理。1.3

系统调用的主要作用是()

处理硬件问题

应对软件异常

给应用程序提供服务接口

管理应用程序
解析:

应用程序一般无法直接访问硬件,也无法执行特权指令。所以,需要通过操作系统来间接完成相关的工作。而基于安全和可靠性的需求,应用程序运行在用户态,操作系统内核运行在内核态,导致应用程序无法通过函数调用来访问操作系统提供的各种服务,于是通过系统调用的方式就成了应用程序向OS发出请求并获得服务反馈的唯一通道和接口。 以ucore OS为例,在lab1的challenge练习中和lab5中,系统调用机制的初始化也是通过建立中断向量表来完成的(可查看lab1的challenge的答案中在trap.c中idt_init函数的实现),中断向量表描述了但应用程序产生一个用于系统调用的中断号时,对应的中断服务例程的具体虚拟地址在哪里,即建立了系统调用的中断号和中断服务例程的对应关系。这样当应用程序发出类似 “int 0x80”这样的指令时(可查看lab1的challenge的答案中在init.c中lab1_switch_to_kernel函数的实现),操作系统的中断服务例程会被调用,并完成相应的服务(可查看lab1的challenge的答案中在trap.c中trap_dispatch函数有关“case T_SWITCH_TOK:”的实现)。

下列关于系统调用的说法错误的是()

系统调用一般有对应的库函数

应用程序可以不通过系统调用来直接获得操作系统的服务

应用程序一般使用更高层的库函数而不是直接使用系统调用

系统调用可能执行失败
解析:

更合适的答案是2。根据对当前操作系统设计与实现的理解,系统调用是应用程序向操作系统发出服务请求并获得操作系统服务的唯一通道和结果。如果操作系统在执行系统调用服务时,产生了错误,就会导致系统调用执行失败。 以ucore OS为例,在用户态的应用程序(lab5,6,7,8中的应用程序)都是通过系统调用来获得操作系统的服务的。为了简化应用程序发出系统调用请求,ucore OS提供了用户态的更高层次的库函数(user/libs/ulib.[ch]和syscall.[ch]),简化了应用程序的编写。如果操作系统在执行系统调用服务时,产生了错误,就会导致系统调用执行失败。

以下关于系统调用和常规调用的说法中,错误的是()

系统调用一般比常规函数调用的执行开销大

系统调用需要切换堆栈

系统调用可以引起特权级的变化

常规函数调用和系统调用都在内核态执行
解析:

系统调用相对常规函数调用执行开销要大,因为这会涉及到用户态栈和内核态栈的切换开销,特权级变化带来的开销,以及操作系统对用户态程序传来的参数安全性检查等开销。如果发出请求的请求方和应答请求的应答方都在内核态执行,则不用考虑安全问题了,效率还是需要的,直接用常规函数调用就够了。 以ucore OS为例,我们可以看到系统调用的开销在执行“int 0x80”和“iret”带来的用户态栈和内核态栈的切换开销,两种特权级切换带来的执行状态(关注 kern/trap/trap.h中的trapframe数据结构)的保存与恢复等(可参看 kern/trap/trapentry.S的__alltraps和__trapret的实现)。而函数调用使用的是"call"和“ret”指令,只有一个栈,不涉及特权级转变带来的各种开销。如要了解call, ret, int和iret指令的具体功能和实现,可查看“英特尔 64 和 iA-32 架构软件开发人员手册卷 2a’s,指令集参考(A-M)”和“英特尔64 和 iA-32 架构软件开发人员手册卷 2B’ s,指令集参考(N-Z)”一书中对这些指令的叙述。

在启动页机制的情况下,在CPU运行的用户进程访问的地址空间是()

物理地址空间
逻辑地址空间
外设地址空间
都不是
解析:
用户进程访问的内存地址是虚拟地址

在使能分页机制的情况下,更合适的外碎片整理方法是()

紧凑(compaction)
分区对换(Swapping in/out)
都不是
解析:
分页方式不会有外碎片

连续内存分配的算法中,会产生外碎片的是()

最先匹配算法
最差匹配算法
最佳匹配算法
都不会
解析:

三种算法都会有外碎片

描述伙伴系统(Buddy System)特征正确的是()

多个小空闲空间可合并为大的空闲空间

会产生外碎片

会产生内碎片

都不对
解析:

前三个是对的。

进程与程序的关系描述正确的是()

进程是指一个具有一定独立功能的程序一个数据集合上的一次动态执行过程

进程是一个具有一定独立功能的程序

程序是一个动态执行的进程

进程包含了正在运行的一个程序的所有状态信息
解析:

1,4

关于进程控制块的描述正确的是()

操作系统用进程控制块来描述进程的基本情况以及运行变化的过程

进程控制块是进程存在的唯一标志

每个进程都在操作系统中有一个对应的进程控制块

操作系统管理控制进程运行所用的信息集合是进程控制块
解析:

都对

关于进程的生命周期的描述正确的是()

内核选择一个就绪态的进程,让它占用处理机并执行,此时进程处于运行态

进程请求并等待系统服务,无法马上完成,此时进程处于等待态

进程执行的当前时间片用完了,此时进程处于就绪态

进程退出了,但还没被父进程回收,此时进程处于zombie态
解析:

都对

操作系统来维护一组队列,表示系统中所有进程的当前状态,有关管理进程的描述正确的是()

就绪态进程维护在进程就绪队列中

等待态进程维护在进程等待队列中

运行态进程维护在进程运行队列中

zombie态进程不在任何队列中
解析:

1,2

有关线程或进程的描述正确的是()

进程是资源分配单位,线程是CPU调度单位

进程拥有一个完整的资源平台,而线程只独享指令流执行的必要资源,如寄存器和栈

线程能减少并发执行的时间和空间开销

同一进程的各线程间共享内存和文件资源,可不通过内核进行直接通信
解析:

都对

关于创建新进程的描述正确的是()

fork() 创建子进程中,会复制父进程的所有变量和内存

子进程的fork()返回0

父进程的fork()在创建子进程成功后,返回子进程标识符

fork() 创建子进程中,会复制父进程的页表
解析:

都对

《Java测试题2》<br><br>一、 选择<br>1.欲构造ArrayList类的一个实例,此类继承了List接口,下列哪个方法是正确的 ? B<br>A ArrayList myList=new Object();<br>B List myList=new ArrayList();<br>C ArrayList myList=new List();<br>D List myList=new List();<br>2.paint()方法使用哪种类型的参数? A<br>A Graphics<br>B Graphics2D<br>C String<br>D Color<br>3.指出正确的表达式 D<br>A byte=128;<br>B Boolean=null;<br>C long l=0xfffL;<br>D double=0.9239d;<br>4.指出下列程序运行的结果 D<br>public class Example{<br>String str=new String("good");<br>char[]ch={'a','b','c'};<br>  public static void main(String args[]){<br>    Example ex=new Example();<br>    ex.change(ex.str,ex.ch);<br>    System.out.print(ex.str+" and ");<br>    Sytem.out.print(ex.ch);<br>  }<br>  public void change(String str,char ch[]){<br>    str="test ok";<br>    ch[0]='g';<br>  }<br>}<br>A good and abc<br>B good and gbc<br>C test ok and abc<br>D test ok and gbc<br>5.运行下列程序, 会产生什么结果 B<br>public class X extends Thread implements Runable{<br> public void run(){<br>  System.out.println("this is run()");<br> }<br> public static void main(String args[])<br> {<br>  Thread t=new Thread(new X());<br>  t.start();<br> }<br>}<br>A 第一行会产生编译错误B 第六行会产生编译错误C 第六行会产生运行错误D 程序会运行和启动6.要从文件" file.dat"文件中读出第10个字节到变量C中,下列哪个方法适合? A<br>A FileInputStream in=new FileInputStream("file.dat"); in.skip(9); int c=in.read();B FileInputStream in=new FileInputStream("file.dat"); in.skip(10); int c=in.read();C FileInputStream in=new FileInputStream("file.dat"); int c=in.read();D RandomAccessFile in=new RandomAccessFile("file.dat"); in.skip(9); int c=in.readByte();7.容器被重新设置大小后,哪种布局管理器的容器中的组件大小不随容器大小的变化而改变? B<br>A CardLayoutB FlowLayout<br>C BorderLayout<br>D GridLayout<br>8.给出下面代码: C<br>public class Person{<br>  static int arr[] = new int[10];<br><br>  public static void main(String a[])<br>  {<br>   System.out.println(arr[1]);<br>  }<br>}<br>那个语句是正确的?<br>A 编译时将产生错误;<br>B 编译时正确,运行时将产生错误;<br>C 输出零;<br>D 输出空。<br>9.哪个关键字可以对对象加互斥锁? B<br>A transient<br>B synchronized<br>C serialize<br>D static<br>10.下列哪些语句关于内存回收的说明是正确的? B<br>A 程序员必须创建一个线程来释放内存;<br>B 内存回收程序负责释放无用内存<br>C 内存回收程序允许程序员直接释放内存<br>D 内存回收程序可以在指定的时间释放内存对象<br>11.下列代码哪几行会出错: c<br>1) public void modify() {<br>2) int I, j, k;<br>3) I = 100;<br>4) while ( I > 0 ) {<br>5) j = I * 2;<br>6) System.out.println (" The value of j is " + j );<br>7) k = k + 1;<br>8) I--;<br>9) }<br>10) }<br>A line 4<br>B line 6<br>C line 7<br>D line 8<br>二、多项选择<br>1.执行下列代码后,哪个结论是正确的 String[] s=new String[10]; BD<br>A s[10] 为 "";<br>B s[9] 为 null;<br>C s[0] 为 未定义<br>D s.length 为10<br>2.下面的表达式哪个是正确的?AE<br>A String s="你好";int i=3; s+=i;<br>B String s="你好";int i=3; if(i==s){ s+=i};<br>C String s="你好";int i=3; s=i+s;<br>D String s="你好";int i=3; s=i+;<br>E. String s=null; int i=(s!=null)&&(s.length>0)?s.length():0;<br>3.选出合理的标识符AC<br>A _sys1_lll<br>B 2mail<br>C $change<br>D class<br>4.哪个布局管理器使用的是组件的最佳尺寸( preferred size) AE<br>A FlowLayout<br>B BorderLayout<br>C GridLayout<br>D CardLayout<br>E.GridBagLayout<br>5.下列哪个方法可用于创建一个可运行的类?AE<br>A public class X implements Runable{ public void run(){ ......} }<br>B public class X implements Thread{ public void run(){ ......} }<br>C public class X implements Thread{ public int run(){ ......} }<br>D public class X implements Runable{ protected void run(){ ......} }<br>E.public class X implements Thread{ public void run(){ ......} }<br>6.下面哪个方法可以在任何时候被任何线程调用?DEF<br>A notify()<br>B wait()<br>C notifyAll()<br>D sleep()<br>E.yield()<br>F.synchronized(this)<br>7.构造BufferedInputStream的合适参数是哪个? AC<br>A BufferedInputStream<br>B BufferedOutputStream<br>C FileInputStream<br>D FileOuterStream<br>E. File<br>8.下列说法正确的是 BC<br>A java.lang.Clonable是类<br>B java.lang.Runnable是接口<br>C Double对象在java.lang包中<br>D Double a=1.0是正确的java语句<br>9.指出正确的表达式AB<br><br>B Double a=new Double(1.0);<br>C byte a = 340;<br>D Byte a = 120;<br>10.定义一个类名为"MyClass.java"的类,并且该类可被一个工程中的所有类访问,那么该类的正确声明应为:CD<br>A double a=1.0;<br>A private class MyClass extends Object<br>B class MyClass extends Object<br>C public class MyClass<br>D public class MyClass extends Object<br>11.指出下列哪个方法与方法public void add(int a){}为合理的重载方法。 CD<br><br><br>A public int add(int a)<br>B public void add(long a)<br>C public void add(int a,int b)<br>D public void add(float a)<br>12.如果下列的方法能够正常运行,在控制台上将显示什么? ACD<br><br>public void example(){<br>  try{<br>    unsafe();<br>    System.out.println("Test1");<br>    }<br>    catch(SafeException e)<br>    {System.out.println("Test 2");}<br>  finally{System.out.println("Test 3");}<br>  System.out.println("Test 4");<br>}<br>A Test 1<br>B Test 2<br>C Test 3<br>D Test 4<br>13.下列哪些情况可以终止当前线程的运行? ABD<br>A 抛出一个例外时。<br>B 当该线程调用sleep()方法时。<br>C 当创建一个新线程时。<br>D 当一个优先级高的线程进入就绪状态时。<br>三、 填空题<br>1.执行下列代码后的结果是什么? int x,a=2,b=3,c=4; x=++a+b+++c++;<br>2. 包包含了Collection的接口和类的API<br>.main方法的声明格式包括<br>4.下列程序中构造了一个SET并且调用其方法add(),输出结果是<br>public class A{<br>public int hashCode(){return 1;}<br>public Boolean equals(Object b){return true}<br>public static void main(String args[]){ Set set=new HashSet();<br>set.add(new A());<br>set.add(new A());<br>set.add(new A());<br>System.out.println(set.size());<br>}<br>}<br>5.下列程序的运行结果是<br>class A{<br>class Dog{<br>  private String name;<br>  private int age;<br>  public int step;<br>  Dog(String s,int a){<br>   name=s;<br>   age=a;<br>   step=0;<br>   }<br>  public void run(Dog fast){<br>  fast.step++;<br>  }<br>}<br><br>  public static void main (String args[]){<br>  A a=new A();<br>  Dog d=a.new Dog("Tom",3);<br>  d.step=25;<br>  d.run(d);<br>  System.out.println(d.step);<br>  }<br>}<br><br>答案::填空第1题<br>x=10,a=3,b=4,c=5<br>填空第2题<br>java.util<br>填空第3题<br>(public )(static )(void)(main)(String args[])<br>填空第4题<br>1<br>填空第5题<br>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值