《操作系统原理》课堂测试1及知识整理

《操作系统原理》课堂测试1

1.1分)80386机器加电启动后,CPU立刻跳转到(C)执行。

(A)OS 第一条指令            

(B) Bootloader 第一条指令

(C) BIOS 的第一条指令

(D) GRUB 的第一条指令

 

大家一般都知道bootloader负责启动操作系统,但bootloader自身是被谁加载并启动的呢?为了追根溯源,我们需要了解当计算机加电启动后,到底发生了什么事情。

 

对于绝大多数计算机系统而言,操作系统和应用软件是存放在磁盘(硬盘/软盘)、光盘、EPROM、ROM、Flash等可在掉电后继续保存数据的存储介质上。当计算机加电后,一般不直接执行操作系统,而是一开始会到一个特定的地址开始执行指令,这个特定的地址存放了系统初始化软件,通过执行系统初始化软件(可固化在ROM或Flash中,也称firmware,固件)完成基本I/O初始化和引导加载操作系统的功能。简单地说,系统初始化软件就是在操作系统内核运行之前运行的一段小软件。通过这段小软件的基本I/O初始化部分,我们可以初始化硬件设备、建立系统的内存空间映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核准备好正确的环境。最终系统初始化软件的引导加载部分把操作系统内核映像加载到RAM中,并将系统控制权传递给它。

 

对于基于Intel 80386的计算机而言,其中的系统初始化软件由BIOS (Basic Input Output System,即基本输入/输出系统,其本质是一个固化在主板Flash/CMOS上的软件)和位于软盘/硬盘引导扇区中的OS Boot Loader(在ucore中的bootasm.S和bootmain.c)一起组成。BIOS实际上是被固化在计算机ROM(只读存储器)芯片上的一个特殊的软件,为上层软件提供最底层的、最直接的硬件控制与支持。

参考链接:https://chyyuu.gitbooks.io/simple_os_book/content/zh/chapter-1/poweron.html

 

2.(1分)通常应用程序通过(D)访问系统资源。A

(A)系统调用

(B)内核级线程

(C)用户级线程

(D)应用程序接口(API)

 

对于D:操作系统是用户与计算机硬件系统之间的接口,用户通过操作系统的帮助,可以快速、有效和安全、可靠地操纵计算机系统中的各类资源,以处理自己的程序。为使用户能方便地使用操作系统,OS 又向用户提供了如下两类接口:

 

(1) 用户接口:操作系统专门为用户提供了“用户与操作系统的接口” ,通常称为用户接口。该接口支持用户与 OS 之间进行交互,即由用户向 OS 请求提供特定的服务,而系统则把服务的结果返回给用户。

 

(2) 程序接口:操作系统向编程人员提供了“程序与操作系统的接口” ,简称程序接口,又称应用程序接口 API(Application Programming Interface)。 该接口是为程序员在编程时使用的,系统和应用程序通过这个接口,可在执行中访问系统中的资源和取得 OS 的服务,它也是程序能取得操作系统服务的唯一途径。大多数操作系统的程序接口是由一组系统调用(system call)组成,每一个系统调用都是一个能完成特定功能的子程序 [2]  。

 

应用程序接口又称为应用编程接口,是一组定义、程序及协议的集合,通过 API接口实现计算机软件之间的相互通信。API 的一个主要功能是提供通用功能集。API同时也是一种中间件,为各种不同平台提供数据共享。程序设计的实践中,编程接口的设计首先要使软件系统的职责得到合理划分。良好的接口设计可以降低系统各部分的相互依赖,提高组成单元的内聚性,降低组成单元间的耦合程度,从而提高系统的可维护性和可扩展性。

 

 

对于A:

通常应用程序是怎么访问系统调用的?
应用程序通常不会直接访问系统调用, 一般都是通过C库来访问系统调用.

 

我们通常说的, 写个应用程序, 调某个系统调用, 其实也不是真的直接调用系统调用, 而是调用C库(一般是glbic)封装的函数, 而这个封装的函数的函数名跟系统调用名称相同, 比如写个程序,打开某个文件, 将其内容输出来, 这里面我们看似调用了open(), read(), write()这些"系统调用", 实际也是glibc封装过的, 跟Linux相应的系统调用, 同名的函数, 而非真的系统调用本身.

 

Linux操作系统的API接口通常是以C标准库的方式提供的, 比如Linux中的libc库. C库提供了POSIX的绝大部分的API的实现, 同时也为内核提供的每个系统调用封装了相应的函数, 并且系统调用和C库封装的函数名称通常是相同的. 例如, open系统调用在C库的函数也是open函数.

 

应用程序怎么直接访问系统调用?
直接访问的话, 可以通过调用syscall()来实现:

参考链接:https://blog.csdn.net/weixin_42992444/article/details/108688932

 

3.1分)x86应用程序中的C函数调用中不需要用到(C)指令

(A) PUSH

(B) RET

(C) IRET

(D) CALL

 

IRET(interrupt return)中断返回,中断服务程序的最后一条指令。IRET指令将推入堆栈的段地址和偏移地址弹出,使程序返回到原来发生中断的地方。其作用是从中断中恢复中断前的状态,具体作用有如下三点:

 

1.恢复IP(instruction pointer):IP←((SP)+1:(SP)),SP←SP+2

 

2.恢复CS(code segment):CS←((SP)+1:(SP)), SP←SP+2

 

3.恢复中断前的PSW(program status word),即恢复中断前的标志寄存器的状态。

 

FR←((SP)+1:(SP)),SP←SP+2

 

4.恢复ESP(返回权限发生变化)

 

5.恢复SS(返回权限发生变化)

 

 

4(1)由错误(比如除零或无效地址访间)或者通过用户请求操作系统服务

引起的软件产生的中断称为( A ).B

(A) 中断

(B) 陷阱(或异常)

(C)信号

(D)进程

 

 

 

陷阱

 

计算机有两种运行模式:用户态, 内核态。 其中操作系统运行在内核态,在内核态中,操作系统具有对所有硬件的完全访问权限,可以使机器运行任何指令;相反,用户程序运行在用户态,在用户态下,软件只能使用少数指令,它们并不具备直接访问硬件的权限。这就出现了问题,假如软件需要访问硬件或者需要调用内核中的函数该怎么办呢,这就是陷阱的作用了。陷阱指令可以使执行流程从用户态陷入内核(这也就是为什么叫做陷阱,而不是捕猎的陷阱)并把控制权转移给操作系统,使得用户程序可以调用内核函数和使用硬件从而获得操作系统所提供的服务,比如用视频软件放一个电影,视频软件就发出陷阱使用显示器和声卡从而访问硬件。

 

操作系统有很多系统调用接口供用程序调用。陷阱的发生时间是固定的,比如第一次用视频软件时,在加载视频时软件会向操作系统发送陷阱指令,第二次播放时,软件仍然会在同样的时刻发送陷阱指令。这一点是和中断的明显的差别之一。下面介绍中断。

 

中断

 

中断是由外部事件导致并且它发生的时间是不可预测的,这一点和陷阱不同。外部事件主要是指时钟中断,硬件中断等。由于CPU一次只能运行一条指令,所以在一个时刻只能有一个程序运行,但我们感觉在我们的计算机中明明可以同时运行很多程序啊,这是由于CPU在多个进程之间快速切换所导致的伪并行。如果某一个程序运行了足够长用完了分配给它的时间片,CPU决定切换到另一个进程运行,就会产生一个时钟中断,切换到下一个进程运行。

 

硬件中断顾名思义就是由硬件引起的中断,比如一个程序需要用户输入一个数据,但用户一直没有输入,操作系统决定是一直等待用户输入还是转而运行别的进程,一般情况是转而运行别的进程,如果用户的输入到来了,那么键盘驱动器会产生一个中断通知操作系统,操作系统保存正在运行的程序的状态,从而切换到原来的进程处理到来的数据。

 

所以中断发生是随机的且主要作用是完成进程间切换,从而支持CPU和设备之间的并行。
中断和异常的另一个重要差别是,CPU处理中断的过程中会屏蔽中断,不接受新的中断直到此次中断处理结束。而陷阱的发生并不屏蔽中断,可以接受新的中断。

 简单来说:

中断是指 CPU 对系统发生某事件时的这样一种响应:

CPU 暂停正在执行的程序,在保留现场后自动地转去执行该事件的中断处理程序;执行完后,再返回到原程序的断点处继续执行。

 

异常

 

异常就是程序执行过程中的异常行为。比如除零异常,缓冲区溢出异常等。不同的操作系统定义了不同种类和数量的异常并且每个异常都有一个唯一的异常号,异常会扰乱程序的正常执行流程,所以异常是在CPU执行指令时本身出现的问题,比如除数为零而出现的除零异常。异常的产生表示程序设计不合理,所以在编程的时候要尽量避免异常的产生。

 

 

 

还可进一步把中断分为外中断和内中断。

外中断——就是我们指的中断——是指由于外部设备事件所引起的中断,如通常的磁盘中断、打印机中断等;
内中断——就是异常——是指由于 CPU 内部事件所引起的中断,如程序出错(非法指令、地址越界)。内中断(trap)也被译为“捕获”或“陷入”。
异常是由于执行了现行指令所引起的。由于系统调用引起的中断属于异常。
中断则是由于系统中某事件引起的,该事件与现行指令无关。

区别:

中断和异常

相同点:都是CPU对系统发生的某个事情做出的一种反应。

 区别:中断由外因引起,异常由CPU本身原因引起。


参考链接:https://blog.csdn.net/qq_29996285/article/details/88078939

 

中断的引入——为了支持CPU和设备之间的并行操作    (书本:中断最初是提高处理器效率的一种手段,分为①程序中断②时钟中断③I/O中断④硬件失效中断)

异常的引入——表示CPU执行指令时本身出现的问题

 

 

 

 

 

 

5. (1)有关系统调用,以下哪个表述最准确( D)B

(A) 为软件开发人员提供丰富灵活的API

(B) 保护重要的内核数据结构不受用户程序代码的干扰

(C) 提高操作系统的性能

(D) 以上均正确

 

 

系统调用的意义

 

系统调用在用户空间进程和硬件设备之间添加了一个中间层。该层主要作用有三个。首先,它为用户空间提供了一种硬件的抽象接口。举例来说,当需要读写文件的时候,应用程序就可以不去管磁盘类型和介质,甚至不用去管文件所在的文件系统到底是哪种类型。第二,系统调用保证了系统的稳定和安全。作为硬件设备和应用程序之间的中间人,内核可以基于权限、用户类型和其他一些规则对需要进行的访问进行裁决。举例来说,这样可以避免应用程序不正确地使用硬件设备,窃取其他进程的资源,或做出其他危害系统的事情。第三,每个进程都运行在虚拟系统中,而在用户空间和系统的其余部分提供这样一层公共接口,也是出于这种考虑。如果应用程序可以随意访问硬件而内核又对此一无所知的话,几乎就没法实现多任务和虚拟内存,当然也不可能实现良好的稳定性和安全性。在Linux中,系统调用是用户空间访问内核的唯一手段;除异常和陷入外,它们是内核唯一的合法入口。
A:操作系统为软件开发人员提供丰富灵活的API

C:首先明确的是,linux系统下确实有通过系统调用提高系统性能的方法  参考:https://blog.csdn.net/iteye_14514/article/details/81546541

这个系统调用将用户空间的内存映射到内核空间,从而避免了实际的内存写操作,提高了系统效率。 

引用笔者的最后一句话“不过,我并没有觉得splice,tee和vmsplice在实际的代码中很“有用”,倒是觉得如果能去除对管道的限制更好些。因为隧道型的代理服务程序,在连接建立后,剩下的主要任务就是在两个socket之间互相relay数据,如果能把他们splice起来,还是能在一定程度上提高效率的。”

这样的十分罕见且收效甚微的方法并不能使我们确信——系统调用对于提高操作系统的性能很有帮助

 

 

6. (1)存储器资源金字塔中,从身处顶部的CPU寄存器组和高速缓存,到处

于底部的磁带机,反映了计算机设计和操作系统管理中的什么问题? ( B )

(A) 资源分配

(B)速度与成本的权衡

(C)透明度问题的专门知识

(D)持续性与波动性

 

 

 

 

 

7. (1)高速缓存设计的两个重要问题是指( B )

(A) 速度和波动性

(B)块大小和替换策略

(C) 功耗和可重用性

(D) 块大小和访问权限

 书本P15

原文部分

 

高速换存设计需要解决如下问题:高速缓存大小、块大小、映射函数、替换算法、写策略。

 

         高速缓存大小的问题,适当小的高速缓存可以对性能产生显著的影响。块大小的问题,即高速缓存与内存间的数据交换单位。当块大小从很小增长到很大时,由于局部性原理,命中率首先会增加。局部性原理指的是位于被访问字附近的数字在近期被访问到的概率比较大。当块大小增大时,更多的有用数据被取到高速缓存中。但是,当块变得更大时,新取到的数据被用到的可能性开始小于哪些必须移出高速缓存的数据再次被用到的可能性,这是命中率反而开始降低。

 

         当一个新块被读入高速缓存中时,由映射函数确定这个快将占据哪个高速缓存单元。设计映射函数要考虑两方面的约束。

 

当读入一个块时,另一个块可能会被替换出高速缓存。替换方法应该能够尽量减小替换出的块在不久的将来还会被用到的可能性。

 

如果映射函数越灵活,则完成搜索以确定某个指定块是否位于高速缓存中的功能所需的路基电路也就越复杂。

 

在映射函数的约束下,当一个新块加入到高速缓存中时,如果高速缓存中的所有存储槽都已被占满,那么替换算法要选择替换不久的将来被访问的可能性最小的块。尽管不可能找到这样的块,但是合理最有效的策略是替换高速缓存中最长时间未被访问的块,这个策略称作最近最少使用算法(Least-Recently-Used,LRU)算法。标识最近最少使用的块需要硬件机制支持。

 

8. (1)直接内存存取DMA是指(C)

(A)对低速字符设备最有效的技术

(B)不能用于块设备的技术

(C) 外部设备不通过CFL而直接与系统内存交换数据的接口技术

(D)以上都不是

原文:

 

执行I/O操作的技术有三种:可编程I/O、中断驱动I/O和直接内存存取(DMA)。

 

  可编程I/O: 当处理器正在执行程序并遇到一个与I/O相关的指令时,它会通过给相应的I/O模块发命令来执行这个指令。使用可编程I/O操作时,I/O模块执行请求的动作并设置I/O状态寄存器中相应的位,但它并不会进一步通知处理器,尤其是它并不会中断处理器。因此处理器在执行I/O指令后,还要定期检查I/O模块的状态,以确定I/O操作是否已经完成。
  可编程I/O的问题是,处理器通常必须等待很长的时间,以确定I/O模块是否做好了接收或发送更多数据的准备。处理器在等待期间必须不断的询问I/O模块的状态,因此会严重降低整个系统的性能。

 

  中断驱动I/O: 由处理器给I/O模块发送I/O命令,然后处理器继续做其他一些有用的工作。当I/O模块准备好与处理器交换数据时,它将打断处理器的执行并请求服务。处理器和前面一样执行数据传送,然后恢复处理器以前的执行过程。
  尽管中断驱动I/O比简单的可编程I/O更有效,但处理器仍然需要主动干预在存储器和I/O模块之间的数据传送,并且任何数据传送都必须完全通过处理器。因此这两种I/O形式都有两方面固有的缺陷:

 

I/O传送速度受限于处理器测试设备和提供服务的速度
处理器忙于管理I/O传送的工作,必须执行很多指令已完成I/O传送
  需要移动大量数据时,要是用一种更有效的技术:直接内存存取(DMA)。DMA功能可以由系统总线中的一个独立模块完成,也可以并入一个I/O模块中。无论采取何种形式,该技术的工作方式均是在处理器读或写一块数据时,给DMA模块产生一条命令,发送以下信息:

 

是否请求一次读或写
所涉I/O设备的地址
开始读或写的存储器单元
需要读或写的字数
  之后处理器继续其他工作。处理器把这个操作委托给DMA模块负责处理。**DMA模块直接与存储器交互,传送整个数据块,每次传送一个字。这个过程不需要处理器参与。**传送完成之后,DMA模块像处理器发送一个中断信号。因此,只有开始传送和传送结束时处理器才会参与。
   DMA模块需要控制总线来与存储器进行数据传送。由于在总线使用中存在竞争,当处理器需要使用总线时,要等待DMA模块。注意,这并不是一个中断,处理器没有保存上下文环境取做其他事情,而只是暂停一个总线周期(在总线上传输一个字的时间)。因此,在DMA传送过程中,当处理器需要访问总线时,处理器的执行速度会变慢。尽管如此,对多字I/O传送来说,DMA仍比中断驱动和程序控制I/O更有效。
参考链接:https://blog.csdn.net/weixin_44919384/article/details/107881197

 

 

9.1)访问时间最快的是(A)B

(A)高速缓存

(B)寄存器组

(C)内存

(D)辅存

 

 

寄存器速度快。

 

cache是一个高速小容量的临时存储器,可以用高速的静态存储器芯片实现,或者集成到CPU芯片内部,存储CPU最经常访问的指令或者操作数据。

 

而寄存器不同,寄存器是内存阶层中的最顶端,也是系统获得操作资料的最快速途径。

 

寄存器存放的是当前CPU环境以及任务环境的数据,而cache则存放最近经常访问的指令和数据。

类比:把CPU比做大脑 寄存器就像你正在思考的问题,而cahe就是你的记忆(临时的)

 

10.1分)下列哪个属于系统软件?(A )

(A)命令解释程序

(B) Web浏览器

(C)文本编辑器

(D)数据库系统

 命令解释程序即Shell,

在计算机科学中,Shell俗称壳(用来区别于核),是指“为使用者提供操作界面”的软件(命令解析器)。它类似于DOS下的command.com和后来的cmd.exe。它接收用户命令,然后调用相应的应用程序

11.(1)操作系统是(C)

(A)应用软件

(B)硬件

(C)系统软件

(D)用户程序

 

操作系统(Operating System,简称OS)是管理计算机硬件与软件资源的计算机程序。所以:操作系统是一种系统软件。操作系统需要处理如管理与配置内存、决定系统资源供需的优先次序、控制输入设备与输出设备、操作网络与管理文件系统等基本事务。操作系统也提供一个让用户与系统交互的操作界面。

 

12.(1)在操作系统中,终端读取命令的一种实用工具程序称之为(A)C

(A)终端处理程序Terminal Handler

(B)内核Kernel

(C)命令解释程序Shell

(D) 以上都不是

 

几个概念:

终端处理程序就是人机交互中计算机与人的一个界面或者交流的通道。 其功能为对输入和输出的支持以及自身的业务逻辑。 输入:程序可以接受人通过各种设备输入并交由计算机处理的输入,比如接收鼠标事件、键盘事件、电子笔、手指(对于触控屏来说)、手柄等等。 业务逻辑:程序可以根据人的输入进行处理,以完成实质功能。 输出:程序将完成的功能通过某种方式输出。这种输出包括在计算机屏幕中打印一些信息,做一些反馈(比如一些游戏设备,如游戏方向盘的力学反馈)等等。

 

内核是操作系统最基本的部分。它是为众多应用程序提供对计算机硬件的安全访问的一部分软件,这种访问是有限的,并且内核决定一个程序在什么时候对某部分硬件操作多长时间。内核的分类可分为单内核和双内核以及微内核。严格地说,内核并不是计算机系统中必要的组成部分。

 

 

命令解释程序(shell)是一个用来对命令进行解释的进程。

 

       命令解释程序工作流程:命令解释程序从标准输入读入命令行,并创建一个子进程来之行命令,然后父进程要在读入另一条命令之前,等待这个子进程执行完毕。实际的命令解释程序要负责处理进程流水线和重定向,以及前台进程组、后台进程组和信号。

 

13.(1分)操作系统的两种运行模式是指(D)

(A)进程和内核

(B)就绪和运行

(C)中断和系统

(D)内核和用户

 

用户态切换到内核态的3种方式

 

  • 系统调用

    这是用户态进程主动要求切换到内核态的一种方式,用户态进程通过系统调用申请使用操作系统提供的服务程序完成工作,比如fork()实际上就是执行了一个创建新进程的系统调用。而系统调用的机制其核心还是使用了操作系统为用户特别开放的一个中断来实现,例如Linux的int 80h中断。

  • 中断

    当外围设备完成用户请求的操作后,会向CPU发出相应的中断信号,这时CPU会暂停执行下一条即将要执行的指令转而去执行与中断信号对应的处理程序,如果先前执行的指令是用户态下的程序,那么这个转换的过程自然也就发生了由用户态到内核态的切换。比如硬盘读写操作完成,系统会切换到硬盘读写的中断处理程序中执行后续操作等。

  • 异常

    当CPU在执行运行在用户态下的程序时,发生了某些事先不可知的异常,这时会触发由当前运行进程切换到处理此异常的内核相关程序中,也就转到了内核态,比如缺页异常。

 

为什么要有用户态和内核态?

 

由于需要限制不同的程序之间的访问能力, 防止他们获取别的程序的内存数据, 或者获取外围设备的数据, 并发送到网络, CPU划分出两个权限等级 – 用户态和内核态。

 

参考资料:

 

https://blog.csdn.net/youngyoungla/article/details/53106671

 

https://blog.csdn.net/liuyueyue0921/article/details/48225533

 

14.1分)分时系统中,用户程序的中断由(B)处理。

(A)该用户程序直接

(B)操作系统为该用户程序

(C)硬件

(D)用户当前的 shell程序

 

用户程序的中断在响应一个特定中断的时候,内核会执行一个函数,该函数叫中断处理程序(interrupt handler)或中断服务例程(interrupt service routine,ISR)。产生中断的每个设备都有一个相应的中断处理程序。一个设备的中断处理程序是它设备驱动程序的一部分。中断处理程序与其他内核的真正区别在于:中断处理程序是被内核调用来响应中断的,而它们运行于我们称之为中断上下文的特殊上下文中。

  • 操作系统和驱动是什么关系,为什么需要驱动?

  • cpu、内存需要驱动吗?

  • 为什么操作系统可以先装到电脑上,然后再去安装其它驱动,比如主板、显卡等等?

 

我觉得这里起作用的是一些公开的规范,即一个操作系统能在基于某个cpu的主板上运行的基本规范。对于基于Intel cpu的主板或电脑厂商,包括设备商和操作系统商都遵循一个基本规范。

 

比如操作系统要跑起来需要的基本条件,有cpu、有内存、有外存、有显卡,这是一个操作系统能进入基本界面需要的条件,如果操作系统不能处理某种类型的上述硬件,那根本进不了桌面,怎么可能再去装其它驱动程序。这时就需要一个基本规范,上述硬件按这种规范设计(比如系统总线、接口等等),操作系统内置这些基本规范实现。

 

这样操作系统就能在这个主板上跑起来了,能够进入界面了。这个时候,可以允许不同硬件设备有自己的规范了,比如为了更好的显示效果,需要安装特定的显卡驱动。但前提是,这个显卡要遵循一个基本规范,操作系统默认才能进入基本界面。这时候的操作系统界面可能由于没有厂商特定驱动只能实现基本工作,比如显示的桌面字体很大,模糊等。

 

这时候,厂商需要根据操作系统操作硬件的接口规范,实现驱动程序,装到操作系统上。然后操作系统在需要该硬件时就告诉驱动做什么,具体由驱动程序实现怎么做,本质上是把一堆0和1指令转换为高低电平,驱动硬件电路工作。

 

对于基本的功能,如cd、usb等,这些设备也都有基本的规范,否则要从cd或usb安装操作系统是不现实的。对于额外的功能比如USB3.0、cd的刻盘功能等,这些不是启动操作系统必须的,所以可以允许在系统启动后再安装特定驱动实现特定功能。

 

对于硬盘这种块设备,也是遵循通用的规范的,比如基本的对硬盘的读写。否则操作系统根本不可能往硬盘上写数据,也就不可能装系统。

参考链接:https://my.oschina.net/assange/blog/543047

 

 

 

 

 

 

 

15.(1分)多道批处理系统通过一次执行一个程序来共享CPU资源,,直到每程序运行完成为止。相比较分时系统,多道批处理系统(BD

(A)更有效地利用CPU 资源(比如开销更少)

(B)更易于实现

(C)在目前大型机系统中使用

(D)以上均是

 

单道批处理系统、多道批处理系统、分时系统和实时系统的特点和区别

1.多道批处理系统
在单道批处理系统中。内存中仅有一道作业,它无法充分利用系统中的全部资源。致使系统性能较差。
在多道批处理系统中,用户所提交的作业都先存放在外存上并排成一个队列。称为“后备队列”。然后。由作业调度程序按一定的算法从后备队列中选择若干个作业调入内存,使它们共享CPU和系统中的各种资源。其优缺点为:
(1)资源利用率高;
(2)系统吞吐量大:系统吞吐量是指系统在单位时间内所完毕的总工作量。能提高系统吞吐量的主要原因可归纳为:第一,CPU和其他资源保持“忙碌”状态;第二,仅当作业完毕时或执行不下去时才进行切换。系统开销小;
(3)平均周转时间长;
(4)无交互能力。


2.分时系统
分时系统与多道批处理系统之间有着截然不同的性能区别。它能非常好地将一台计算机提供给多个用户同一时候使用,提高计算机的利用率。分时系统是指,在一台主机上连接了多个带有显示器和键盘的终端,同一时候同意多个用户通过自己的终端,以交互方式使用计算机。共享主机中的资源。其特征为:
(1)多路性:同意在一台主机上同一时候联接多台联机终端,系统按分时原则为每一个用户服务。
(2)独立性:每一个用户各占一个终端,彼此独立操作,互不干扰。
(3)及时性:用户的请求能在非常短的时间获得响应。
(4)交互性:用户可通过终端与系统进行广泛的人机对话。


3.实时系统
所谓“实时”,是表示“及时”。而实时系统是指系统能及时响应外部事件的请求。在规定的时间内完毕对该事件的处理,并控制全部实时任务协调一致的执行。

 

其应用需求主要在实时控制和实时信息处理。

参考链接:https://www.cnblogs.com/ldxsuanfa/p/10853187.html

 

 

 

参考链接:https://www.pianshen.com/article/86601159690/

 

16.(1分)分时系统需要而多道批处理系统所不需的技术支持是(C)D

(A)陷阱机制

(B内核模式执行权限

(C)较短的时间片

(D)定时器

 

分时操作系统基本思想

 

时间片:是把计算机的系统资源(尤其是CPU时间)进行时间上的分割,每个时间段称为一个时间片,每个用户依次轮流使用时间片。 [1] 

 

分时技术:把处理机的运行时间分为很短的时间片,按时间片轮流把处理机分给各联机作业使用。 [1] 

 

分时操作系统:是一种联机的多用户交互式的操作系统。一般采用时间片轮转的方式使一台计算机为多个终端服务。对每个用户能保证足够快的响应时间,并提供交互会话能力。
 
链接:https://www.nowcoder.com/questionTerminal/e315a32b053d496ea183efb07135ffc7?orderByHotValue=2&mutiTagIds=604_606_607&page=1&onlyReference=false
来源:牛客网

时间片轮转调度:是一种最古老,最简单,最公平且使用最广的算法。每个进程被分配一个时间段,称作它的时间片,即该进程允许运行的时间。如果在时间片结束时进程还在运行,则CPU将被剥夺并分配给另一个进程。如果进程在时间片结束前阻塞或结束,则CPU当即进行切换。调度程序所要做的就是维护一张就绪进程列表,当进程用完它的时间片后,它被移到队列的末尾。
含义:
在早期的时间片轮转法中,系统将所有的就绪进程按先来先服务的原则,排成一个队列,每次调度时,把CPU分配给队首进程,并令其执行一个时间片.时间片的大小从几ms到几百ms.当执行的时间片用完时,由一个计时器发出时钟中断请求,调度程序便据此信号来停止该进程的执行,并将它送往就绪队列的末尾;然后,再把处理机分配给就绪队列中新的队首进程,同时也让它执行一个时间片.这样就可以保证就绪队列中的所有进程,在一给定的时间内,均能获得一时间片的处理机执行时间.

 

17. (1分)下列哪个不是操作系统?(D)

(A) Linux

(B)Solaris

(C) Windows XP

(D) Oracle

 B:

Solaris

(SunMicrosystems研发的计算机操作系统)

 

Solaris (读作 /se'laris:/ 或者 /so'le:ris/)是Sun Microsystems研发的计算机操作系统。它被认为是UNIX操作系统的衍生版本之一。 Solaris属于混合开源软件。2005年6月14日,Sun公司将正在开发中的Solaris 11的源代码CDDL许可开放,这一开放版本就是OpenSolaris

 

 

 D:Oracle 
甲骨文公司,全称甲骨文股份有限公司(甲骨文软件系统有限公司),是全球最大的企业级软件公司,总部位于美国加利福尼亚州的红木滩。1989年正式进入中国市场。2013年,甲骨文已超越 IBM ,成为继 Microsoft 后全球第二大软件公司。 [1] 
2020年9月14日,甲骨文证实,它已经与TikTok的中国所有者字节跳动达成协议,成为其“可信技术提供商”,但该协议仍需美国政府批准。 

Oracle系统

Oracle系统,即是以Oracle关系数据库为数据存储和管理作为构架基础,构建出的数据库管理系统。 Oracle,世界第一个支持SQL语言的商业数据库,定位于高端工作站,以及作为服务器的小型计算机,如IBM P系列服务器、HP的Integraty服务器、Sun Fire服务器。Oracle公司的整个产品线包括数据库服务器、企业商务应用套件、应用开发和决策支持工具。
 

 

18.(1)操作系统的两个功能是(B)C

(A)资源管理和资源操作

(B)资源共享和资源管理

(C)硬件抽象与资源共享

(D)以上均不是

 

操作系统的两个重要作用:

 

1.通过资源管理,提高系统的使用效率;

 

2.改善人机界面,向用户提供友好的工作环境。

 

操作系统的定义:是管理计算机中各种软件、硬件资源的程序和相关文档的集合,是一种系统软件。

 

操作系统能有效的组织和管理系统中的各种软、硬件资源,合理地组织计算机工作流程,控制程序的执行,并且向用户提供一个良好的工作环境和友好的接口。

 

操作系统的4个特征:并发性、共享性、虚拟性、不确定性。

 

操作系统的5个管理功能:进程管理、文件管理、存储管理、设备管理、作业管理。

 

 

19.(1)现代单内核(monolithic kernel,或Uni kernel)操作系统通常可实现(D)

(A)调度和地址空间管理

(B)设备驱动程序

(C)TCP/IP协议栈

(D)以上均是

 单内核、微内核、

1.单内核(大多数Unix系统都被设计为单内核,如linux)
单内核也叫集中式操作系统。整个系统是一个大模块,可以被分为若干逻辑模块,即处理器管理、存储器管理、设备管理和文件管理,其模块间的交互是通过直接调用其他模块中的函数实现的。

单内核模型以提高系统执行效率为设计理念,因为整个系统是一个统一的内核,所以其内部调用效率很高。

单内核的缺点也正是由于其源代码是一个整体而造成的,通常各模块之间的界限并不特别清晰,模块间的调用比较随意,所以进行系统修改或升级时,往往“牵一发而动全身”,导致工作量加大,使其难于维护。

2.微内核(windows NT内核,Mash(Mac os x组成部分)等)
微内核是指把操作系统结构中的内存管理、设备管理、文件系统等高级服务功能尽可能地从内核中分离出来,变成几个独立的非内核模块,而在内核只保留少量最基本的功能,使内核变得简洁可靠,因此叫微内核,微内核通过消息传递处理微内核通信:系统采用进程间通信(IPC)机制。

微内核实现的基础是操作系统理论层面的逻辑功能划分。几大功能模块在理论上是相互独立的,形成比较明显的界限,其优点如下:

·     充分的模块化,可独立更换任一模块而不会影响其他模块,从而方便第三方开发、设计模块。

·     未被使用的模块功能不必运行,因而能大幅度减少系统的内存需求。

·     具有很高的可移植性,理论上讲只需要单独对各微内核部分进行移植修改即可。由于微内核的体积通常很小,而且互不影响,因此工作量很小。
原文链接:https://blog.csdn.net/jia0511/article/details/8477900

3.外内核(外内核系统)

也被称为纵向结构操作系统,是一种比较极端的设计方法。

外内核这种内核不提供任何硬件抽象操作,但是允许为内核增加额外的运行库,通过这些运行库应用程序可以直接地或者接近直接地对硬件进行操作。

它的设计理念是让用户程序的设计者来决定硬件接口的设计。外内核本身非常的小,它通常只负责系统保护和系统资源复用相关的服务。

传统的内核设计(包括单核和微核)都对硬件作了抽象,把硬件资源或设备驱动程序都隐藏在硬件抽象层下。比方说,在这些系统中,如果分配一段物理存储,应用程序并不知道它的实际位置。

而外核的目标就是让应用程序直接请求一块特定的物理空间,一块特定的磁盘块等等。系统本身只保证被请求的资源当前是空闲的,应用程序就允许直接存取它。既然外核系统只提供了比较低级的硬件操作,而没有像其他系统一样提供高级的硬件抽象,那么就需要增加额外的运行库支持。这些运行库运行在外核之上,给用户程序提供了完整的功能。

 

理论上,这种设计可以让各种操作系统运行在一个外核之上,如Windows和Unix。并且设计人员可以根据运行效率调整系统的各部分功能。

外核设计还停留在研究阶段,没有任何一个商业系统采用了这种设计。几种概念上的操作系统正在被开发,如剑桥大学的Nemesis,格拉斯哥大学的Citrix系统和瑞士计算机科学院的一套系统。麻省理工学院也在进行着这类研究。

4.混合内核

混合内核混合内核它很像微内核结构,只不过它的的组件更多的在核心态中运行,以获得更快的执行速度。

混合内核实质上是微内核,只不过它让一些微核结构运行在用户空间的代码运行在内核空间,这样让内核的运行效率更高些。这是一种妥协做法,设计者参考了微内核结构的系统运行速度不佳的理论。然而后来的实验证明,纯微内核的系统实际上也可以是高效率的。大多数现代操作系统遵循这种设计范畴,微软公司开发的Windows操作系统就是一个很好的例子。另外还有XNU,运行在苹果Mac OS X上的内核,也是一个混合内核。

混合内核的例子: BeOS 内核 ,DragonFly BSD,ReactOS 内核

Windows NT、Windows 2000、Windows XP、Windows Server 2003以及Windows Vista等基于NT技术的操作系统。

 

内核有关知识 参考链接:http://www.360doc.com/content/14/0402/22/15591363_365851188.shtml

 

20.1)设计分层操作系统方法的主要困难在于( B )D

(A)确保每一层都易于转换成模块

(B)确保每一层都隐藏了较高层的一些数据结构、硬件和操作

(C)调试某个特定的层

(D)清晰定义层次间的接口

 B项不是刚需

 

所谓分层操作系统的层次结构,就是把操作系统所有的功能模块按照功能调用次序分别排成若干层,各层之间的模块只有单向调用关系(例如,只允许上层或外层模块调用下层或内层模块)。分层的优点是:

 

(1)把功能实现的无序性改成有序性,可显著提高设计的准确性。

 

(2)把模块间的复杂依赖关系改为单向依赖关系,即高层软件依赖于低层软件。

 

E.W.Dijkstra于1968年发表的THE多道程序设计系统第一次提出了操作系统的分层结构方法。整个THE系统分为6层。
 

二、层次式系统
单体系统进一步通用化,就变成一个层次式结构的操作系统,它的上层软件都是在下一层软件的基础之上构建的。THE系统是按此模型构造的第一个操作系统。
THE系统共分为六层。
0. 处理器分配和多道程序设计
处理器分配分配在第0层中进行,当中断发生或定时器到期时,由该层进行进程切换。在第0层之上,系统由一些连续的进程所组成,编写这些进程时不用再考虑在单处理器上多进程运行的细节。也就是说,在第0层中提供了基本的CPU多道程序功能。
1. 存储器和磁鼓管理
内存管理在第1层中进行,它分配进程的主存空间,当内存用完时则在一个512k字的磁鼓上保留进程的一部分(页面),在第1层上,进程不用考虑它是在磁鼓上还是在内存中进行。第1层软件保证一旦需要访问某一个页面时,该页面必定已在内存中。
2. 操作员-进程通信
第2层处理进程与操作员控制台(即用户)之间的通信。在这层的上部,可以认为每个进程都有自己的操作员控制台。
3. 输入/输出管理
第3层管理I/O设备和相关的信息流缓冲区。在第3层上,每个进程都与有良好特性的抽象I/O设备打交道,而不必考虑外部设备的物理细节。
4. 用户程序
第4层是用户程序层,用户程序不必考虑进程、内存、控制台或I/O设备管理细节。
5. 操作员
系统操作员进程位于第5层中。

原文链接:https://blog.csdn.net/lxw983520/article/details/79661166

 

21. (1分)使用高级程序语言实现操作系统的优点在于(A)D

(A)代码可以写得更快、更紧凑、更容易理解和调试

B)现代计算机科学专业学生不用学习机器语言程序设计

(C)更容易移植到其他硬件

(D)AC

 很明显啊这题

 

224分)思考下列程序代码:

      fori=0i<20;i++

           forj=0j<10;j++

                a[i]=a[i]*j;

(1)  请给出代码中一个空间局部性的例子;

答:a[i]数组在地址空间按顺序存储

(2)  请给出代码中一个时间局部性的例子;

答:被引用的数组元素a所处的位置未来会被多次引用

posted @ 2021-04-20 14:40  huyoo  阅读(532)  评论(0编辑  收藏  举报